From 622e682f978802f18fd957456180488314dc469e Mon Sep 17 00:00:00 2001 From: KaiSong-UK <1013659476@qq.com> Date: Sat, 24 Feb 2024 14:36:14 +0000 Subject: [PATCH] Initial commit Created from https://vercel.com/new --- LICENSE | 21 + README.md | 21 + breaking-news.html | 3 + config.ini | 22 + dist/7zz.js | 6290 +++++++++++++ dist/7zz.wasm | Bin 0 -> 1871731 bytes dist/ffmpeg.min.js | 2 + dist/fsalib.min.js | 1 + dist/ra2web.min.js | 1 + dist/spbots.min.js | 2 + dist/vendor.bundle.min.js | 1 + dist/web-audio-polyfill.min.js | 1 + dist/worker.min.js | 1 + dist/workerHost.min.js | 1 + dist/workerVxl.js | 1 + favicon.ico | Bin 0 -> 4710 bytes index.html | 135 + lib/ffmpeg-core.js | 133 + lib/ffmpeg-core.wasm | Bin 0 -> 1621138 bytes lib/file-explorer/file-explorer.css | 243 + lib/file-explorer/file-explorer.js | 8024 +++++++++++++++++ lib/file-explorer/fileexplorer_actions.woff | Bin 0 -> 1472 bytes lib/file-explorer/fileexplorer_sprites.png | Bin 0 -> 10767 bytes lib/fullscreen-api-polyfill.min.js | 1 + lib/growingpacker.js | 145 + lib/local-trans.js | 306 + lib/lzo1x.js | 611 ++ lib/nipplejs.js | 1475 +++ lib/system.js | 5 + lib/three.min.js | 946 ++ lib/three/LightningStrike.js | 1016 +++ lib/three/SPE.min.js | 52 + lib/three/SPE.patch.js | 45 + lib/three/SimplexNoise.js | 425 + lib/three/TrailRenderer.js | 869 ++ lib/three/three.octree.js | 312 + lib/three/three.shader-patch.js | 187 + res/expandspawn10.mix | Bin 0 -> 10318 bytes res/fonts/fonts.css | 191 + ...m8hSaQTFG18FErVhsC9x-tarWQXOuMB0ciZb.woff2 | Bin 0 -> 10240 bytes ...DFm8hSaQTFG18FErVhsC9x-tarWQXOuMR0cg.woff2 | Bin 0 -> 22760 bytes ...m8hSaQTFG18FErVhsC9x-tarWQXOuMd0ciZb.woff2 | Bin 0 -> 12836 bytes ...m8hSaQTFG18FErVhsC9x-tarWQXOuMh0ciZb.woff2 | Bin 0 -> 8252 bytes ...m8hSaQTFG18FErVhsC9x-tarWQXOuMl0ciZb.woff2 | Bin 0 -> 17896 bytes ...m8hSaQTFG18FErVhsC9x-tarWQXOuMp0ciZb.woff2 | Bin 0 -> 31164 bytes ...m8hSaQTFG18FErVhsC9x-tarWQXOuMt0ciZb.woff2 | Bin 0 -> 7372 bytes ...m8hSaQTFG18FErVhsC9x-tarWSnJuMB0ciZb.woff2 | Bin 0 -> 11004 bytes ...DFm8hSaQTFG18FErVhsC9x-tarWSnJuMR0cg.woff2 | Bin 0 -> 23708 bytes ...m8hSaQTFG18FErVhsC9x-tarWSnJuMd0ciZb.woff2 | Bin 0 -> 13640 bytes ...m8hSaQTFG18FErVhsC9x-tarWSnJuMh0ciZb.woff2 | Bin 0 -> 8372 bytes ...m8hSaQTFG18FErVhsC9x-tarWSnJuMl0ciZb.woff2 | Bin 0 -> 19444 bytes ...m8hSaQTFG18FErVhsC9x-tarWSnJuMp0ciZb.woff2 | Bin 0 -> 33508 bytes ...m8hSaQTFG18FErVhsC9x-tarWSnJuMt0ciZb.woff2 | Bin 0 -> 7796 bytes ...m8hSaQTFG18FErVhsC9x-tarWU3IuMB0ciZb.woff2 | Bin 0 -> 11032 bytes ...DFm8hSaQTFG18FErVhsC9x-tarWU3IuMR0cg.woff2 | Bin 0 -> 23784 bytes ...m8hSaQTFG18FErVhsC9x-tarWU3IuMd0ciZb.woff2 | Bin 0 -> 13652 bytes ...m8hSaQTFG18FErVhsC9x-tarWU3IuMh0ciZb.woff2 | Bin 0 -> 8504 bytes ...m8hSaQTFG18FErVhsC9x-tarWU3IuMl0ciZb.woff2 | Bin 0 -> 19712 bytes ...m8hSaQTFG18FErVhsC9x-tarWU3IuMp0ciZb.woff2 | Bin 0 -> 33828 bytes ...m8hSaQTFG18FErVhsC9x-tarWU3IuMt0ciZb.woff2 | Bin 0 -> 7848 bytes res/img/cd-logo.png | Bin 0 -> 81785 bytes res/img/download-arrow.png | Bin 0 -> 1551 bytes res/img/drag-archive.png | Bin 0 -> 4903 bytes res/img/drag-folder.png | Bin 0 -> 5591 bytes res/locale/en-US.json | 313 + res/locale/zh-CN.json | 313 + res/mods.ini | 12 + res/ra2cd.mix | Bin 0 -> 90941 bytes robots.txt | 2 + servers.ini | 29 + style.css | 2172 +++++ 71 files changed, 24330 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 breaking-news.html create mode 100644 config.ini create mode 100644 dist/7zz.js create mode 100644 dist/7zz.wasm create mode 100644 dist/ffmpeg.min.js create mode 100644 dist/fsalib.min.js create mode 100644 dist/ra2web.min.js create mode 100644 dist/spbots.min.js create mode 100644 dist/vendor.bundle.min.js create mode 100644 dist/web-audio-polyfill.min.js create mode 100644 dist/worker.min.js create mode 100644 dist/workerHost.min.js create mode 100644 dist/workerVxl.js create mode 100644 favicon.ico create mode 100644 index.html create mode 100644 lib/ffmpeg-core.js create mode 100644 lib/ffmpeg-core.wasm create mode 100644 lib/file-explorer/file-explorer.css create mode 100644 lib/file-explorer/file-explorer.js create mode 100644 lib/file-explorer/fileexplorer_actions.woff create mode 100644 lib/file-explorer/fileexplorer_sprites.png create mode 100644 lib/fullscreen-api-polyfill.min.js create mode 100644 lib/growingpacker.js create mode 100644 lib/local-trans.js create mode 100644 lib/lzo1x.js create mode 100644 lib/nipplejs.js create mode 100644 lib/system.js create mode 100644 lib/three.min.js create mode 100644 lib/three/LightningStrike.js create mode 100644 lib/three/SPE.min.js create mode 100644 lib/three/SPE.patch.js create mode 100644 lib/three/SimplexNoise.js create mode 100644 lib/three/TrailRenderer.js create mode 100644 lib/three/three.octree.js create mode 100644 lib/three/three.shader-patch.js create mode 100644 res/expandspawn10.mix create mode 100644 res/fonts/fonts.css create mode 100644 res/fonts/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWQXOuMB0ciZb.woff2 create mode 100644 res/fonts/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWQXOuMR0cg.woff2 create mode 100644 res/fonts/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWQXOuMd0ciZb.woff2 create mode 100644 res/fonts/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWQXOuMh0ciZb.woff2 create mode 100644 res/fonts/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWQXOuMl0ciZb.woff2 create mode 100644 res/fonts/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWQXOuMp0ciZb.woff2 create mode 100644 res/fonts/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWQXOuMt0ciZb.woff2 create mode 100644 res/fonts/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWSnJuMB0ciZb.woff2 create mode 100644 res/fonts/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWSnJuMR0cg.woff2 create mode 100644 res/fonts/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWSnJuMd0ciZb.woff2 create mode 100644 res/fonts/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWSnJuMh0ciZb.woff2 create mode 100644 res/fonts/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWSnJuMl0ciZb.woff2 create mode 100644 res/fonts/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWSnJuMp0ciZb.woff2 create mode 100644 res/fonts/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWSnJuMt0ciZb.woff2 create mode 100644 res/fonts/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWU3IuMB0ciZb.woff2 create mode 100644 res/fonts/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWU3IuMR0cg.woff2 create mode 100644 res/fonts/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWU3IuMd0ciZb.woff2 create mode 100644 res/fonts/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWU3IuMh0ciZb.woff2 create mode 100644 res/fonts/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWU3IuMl0ciZb.woff2 create mode 100644 res/fonts/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWU3IuMp0ciZb.woff2 create mode 100644 res/fonts/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWU3IuMt0ciZb.woff2 create mode 100644 res/img/cd-logo.png create mode 100644 res/img/download-arrow.png create mode 100644 res/img/drag-archive.png create mode 100644 res/img/drag-folder.png create mode 100644 res/locale/en-US.json create mode 100644 res/locale/zh-CN.json create mode 100644 res/mods.ini create mode 100644 res/ra2cd.mix create mode 100644 robots.txt create mode 100644 servers.ini create mode 100644 style.css diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..c09d55a --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 RA2WEB + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..278ea49 --- /dev/null +++ b/README.md @@ -0,0 +1,21 @@ +# 网页红井测试版一键部署 + +网页红井(网页版“红警”/Chronodivide)预览版测试站点,帮助各类爱好者一键搭建自己的网页版“红警”站点,助力营销和知识分享 + +## 一键部署 + +### Github托管页面 + +fork该项目,命名为 你的名字.github.io,例如 ra2web.github.io + +正如你所见,这个项目的名字就符合这个域名规则。那么,此时的你可以访问 https://ra2web.github.io 来游玩网页红井拉 + +### Vercel + +[![一键部署到Vercel](https://vercel.com/button)](https://vercel.com/import/project?template=https://github.com/ra2web/ra2web.github.io) + +### 腾讯云 + +[![一键部署至腾讯云](https://cloudbase.net/deploy.svg)](https://console.cloud.tencent.com/webify/new?tpl=https://github.com/ra2web/ra2web.github.io) + + diff --git a/breaking-news.html b/breaking-news.html new file mode 100644 index 0000000..24a7751 --- /dev/null +++ b/breaking-news.html @@ -0,0 +1,3 @@ +

本站点为测试版,只能体验测试版人机单机游玩,无联机权限

+

完全体版本请微信关注公众号 思牛逼 获取游玩地址!

+

如果您没有微信可以用亲戚朋友的微信关注公众号后获取地址游玩!

\ No newline at end of file diff --git a/config.ini b/config.ini new file mode 100644 index 0000000..273286f --- /dev/null +++ b/config.ini @@ -0,0 +1,22 @@ +[General] +discordUrl=https://discord.gg/yxkVn4wBad + +# Where game resources are located +gameresBaseUrl=//res.wangyehongjing.com/v2/ +mapsBaseUrl=//res.wangyehongjing.com/v2/map/ +modsBaseUrl=//res.wangyehongjing.com/mod/ +gameResArchiveUrl=https://xwis.net/dl/Red-Alert-2-Multiplayer.exe +patchNotesUrl=//chronodivide.com/patch-notes.html +ladderRulesUrl=//chronodivide.com/ladder-rules.html +modSdkUrl=https://github.com/ra2web/mod-sdk +donateUrl="//chronodivide.com/#donate" +breakingNewsUrl=/breaking-news.html +oldClientsBaseUrl=/old/ +quickMatchEnabled=yes +# Chronodivde 人机开关 +botsEnabled=yes +# Chronodivide 中国大区专供 +defaultLanguage=zh-CN + +viewport.width=1024 +viewport.height=768 diff --git a/dist/7zz.js b/dist/7zz.js new file mode 100644 index 0000000..2602a85 --- /dev/null +++ b/dist/7zz.js @@ -0,0 +1,6290 @@ + +var SevenZip = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + return ( +function(SevenZip) { + SevenZip = SevenZip || {}; + + + +// The Module object: Our interface to the outside world. We import +// and export values on it. There are various ways Module can be used: +// 1. Not defined. We create it here +// 2. A function parameter, function(Module) { ..generated code.. } +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = typeof SevenZip !== 'undefined' ? SevenZip : {}; + +// Set up the promise that indicates the Module is initialized +var readyPromiseResolve, readyPromiseReject; +Module['ready'] = new Promise(function(resolve, reject) { + readyPromiseResolve = resolve; + readyPromiseReject = reject; +}); + + if (!Object.getOwnPropertyDescriptor(Module['ready'], '_main')) { + Object.defineProperty(Module['ready'], '_main', { configurable: true, get: function() { abort('You are getting _main on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + Object.defineProperty(Module['ready'], '_main', { configurable: true, set: function() { abort('You are setting _main on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + } + + + if (!Object.getOwnPropertyDescriptor(Module['ready'], '_emscripten_stack_get_end')) { + Object.defineProperty(Module['ready'], '_emscripten_stack_get_end', { configurable: true, get: function() { abort('You are getting _emscripten_stack_get_end on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + Object.defineProperty(Module['ready'], '_emscripten_stack_get_end', { configurable: true, set: function() { abort('You are setting _emscripten_stack_get_end on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + } + + + if (!Object.getOwnPropertyDescriptor(Module['ready'], '_emscripten_stack_get_free')) { + Object.defineProperty(Module['ready'], '_emscripten_stack_get_free', { configurable: true, get: function() { abort('You are getting _emscripten_stack_get_free on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + Object.defineProperty(Module['ready'], '_emscripten_stack_get_free', { configurable: true, set: function() { abort('You are setting _emscripten_stack_get_free on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + } + + + if (!Object.getOwnPropertyDescriptor(Module['ready'], '_emscripten_stack_init')) { + Object.defineProperty(Module['ready'], '_emscripten_stack_init', { configurable: true, get: function() { abort('You are getting _emscripten_stack_init on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + Object.defineProperty(Module['ready'], '_emscripten_stack_init', { configurable: true, set: function() { abort('You are setting _emscripten_stack_init on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + } + + + if (!Object.getOwnPropertyDescriptor(Module['ready'], '_stackSave')) { + Object.defineProperty(Module['ready'], '_stackSave', { configurable: true, get: function() { abort('You are getting _stackSave on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + Object.defineProperty(Module['ready'], '_stackSave', { configurable: true, set: function() { abort('You are setting _stackSave on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + } + + + if (!Object.getOwnPropertyDescriptor(Module['ready'], '_stackRestore')) { + Object.defineProperty(Module['ready'], '_stackRestore', { configurable: true, get: function() { abort('You are getting _stackRestore on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + Object.defineProperty(Module['ready'], '_stackRestore', { configurable: true, set: function() { abort('You are setting _stackRestore on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + } + + + if (!Object.getOwnPropertyDescriptor(Module['ready'], '_stackAlloc')) { + Object.defineProperty(Module['ready'], '_stackAlloc', { configurable: true, get: function() { abort('You are getting _stackAlloc on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + Object.defineProperty(Module['ready'], '_stackAlloc', { configurable: true, set: function() { abort('You are setting _stackAlloc on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + } + + + if (!Object.getOwnPropertyDescriptor(Module['ready'], '___wasm_call_ctors')) { + Object.defineProperty(Module['ready'], '___wasm_call_ctors', { configurable: true, get: function() { abort('You are getting ___wasm_call_ctors on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + Object.defineProperty(Module['ready'], '___wasm_call_ctors', { configurable: true, set: function() { abort('You are setting ___wasm_call_ctors on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + } + + + if (!Object.getOwnPropertyDescriptor(Module['ready'], '_fflush')) { + Object.defineProperty(Module['ready'], '_fflush', { configurable: true, get: function() { abort('You are getting _fflush on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + Object.defineProperty(Module['ready'], '_fflush', { configurable: true, set: function() { abort('You are setting _fflush on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + } + + + if (!Object.getOwnPropertyDescriptor(Module['ready'], '___errno_location')) { + Object.defineProperty(Module['ready'], '___errno_location', { configurable: true, get: function() { abort('You are getting ___errno_location on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + Object.defineProperty(Module['ready'], '___errno_location', { configurable: true, set: function() { abort('You are setting ___errno_location on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + } + + + if (!Object.getOwnPropertyDescriptor(Module['ready'], '_malloc')) { + Object.defineProperty(Module['ready'], '_malloc', { configurable: true, get: function() { abort('You are getting _malloc on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + Object.defineProperty(Module['ready'], '_malloc', { configurable: true, set: function() { abort('You are setting _malloc on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + } + + + if (!Object.getOwnPropertyDescriptor(Module['ready'], '__get_tzname')) { + Object.defineProperty(Module['ready'], '__get_tzname', { configurable: true, get: function() { abort('You are getting __get_tzname on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + Object.defineProperty(Module['ready'], '__get_tzname', { configurable: true, set: function() { abort('You are setting __get_tzname on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + } + + + if (!Object.getOwnPropertyDescriptor(Module['ready'], '__get_daylight')) { + Object.defineProperty(Module['ready'], '__get_daylight', { configurable: true, get: function() { abort('You are getting __get_daylight on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + Object.defineProperty(Module['ready'], '__get_daylight', { configurable: true, set: function() { abort('You are setting __get_daylight on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + } + + + if (!Object.getOwnPropertyDescriptor(Module['ready'], '__get_timezone')) { + Object.defineProperty(Module['ready'], '__get_timezone', { configurable: true, get: function() { abort('You are getting __get_timezone on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + Object.defineProperty(Module['ready'], '__get_timezone', { configurable: true, set: function() { abort('You are setting __get_timezone on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + } + + + if (!Object.getOwnPropertyDescriptor(Module['ready'], 'onRuntimeInitialized')) { + Object.defineProperty(Module['ready'], 'onRuntimeInitialized', { configurable: true, get: function() { abort('You are getting onRuntimeInitialized on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + Object.defineProperty(Module['ready'], 'onRuntimeInitialized', { configurable: true, set: function() { abort('You are setting onRuntimeInitialized on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js') } }); + } + + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) +Module.noInitialRun = true; + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {}; +var key; +for (key in Module) { + if (Module.hasOwnProperty(key)) { + moduleOverrides[key] = Module[key]; + } +} + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = function(status, toThrow) { + throw toThrow; +}; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window === 'object'; +var ENVIRONMENT_IS_WORKER = typeof importScripts === 'function'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node === 'string'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (Module['ENVIRONMENT']) { + throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -s ENVIRONMENT=web or -s ENVIRONMENT=node)'); +} + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var read_, + readAsync, + readBinary, + setWindowTitle; + +var nodeFS; +var nodePath; + +if (ENVIRONMENT_IS_NODE) { + if (!(typeof process === 'object' && typeof require === 'function')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + if (ENVIRONMENT_IS_WORKER) { + scriptDirectory = require('path').dirname(scriptDirectory) + '/'; + } else { + scriptDirectory = __dirname + '/'; + } + +// include: node_shell_read.js + + +read_ = function shell_read(filename, binary) { + if (!nodeFS) nodeFS = require('fs'); + if (!nodePath) nodePath = require('path'); + filename = nodePath['normalize'](filename); + return nodeFS['readFileSync'](filename, binary ? null : 'utf8'); +}; + +readBinary = function readBinary(filename) { + var ret = read_(filename, true); + if (!ret.buffer) { + ret = new Uint8Array(ret); + } + assert(ret.buffer); + return ret; +}; + +readAsync = function readAsync(filename, onload, onerror) { + if (!nodeFS) nodeFS = require('fs'); + if (!nodePath) nodePath = require('path'); + filename = nodePath['normalize'](filename); + nodeFS['readFile'](filename, function(err, data) { + if (err) onerror(err); + else onload(data.buffer); + }); +}; + +// end include: node_shell_read.js + if (process['argv'].length > 1) { + thisProgram = process['argv'][1].replace(/\\/g, '/'); + } + + arguments_ = process['argv'].slice(2); + + // MODULARIZE will export the module in the proper place outside, we don't need to export here + + process['on']('uncaughtException', function(ex) { + // suppress ExitStatus exceptions from showing an error + if (!(ex instanceof ExitStatus)) { + throw ex; + } + }); + + process['on']('unhandledRejection', abort); + + quit_ = function(status, toThrow) { + if (keepRuntimeAlive()) { + process['exitCode'] = status; + throw toThrow; + } + process['exit'](status); + }; + + Module['inspect'] = function () { return '[Emscripten Module object]'; }; + +} else +if (ENVIRONMENT_IS_SHELL) { + + if ((typeof process === 'object' && typeof require === 'function') || typeof window === 'object' || typeof importScripts === 'function') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + if (typeof read != 'undefined') { + read_ = function shell_read(f) { + return read(f); + }; + } + + readBinary = function readBinary(f) { + var data; + if (typeof readbuffer === 'function') { + return new Uint8Array(readbuffer(f)); + } + data = read(f, 'binary'); + assert(typeof data === 'object'); + return data; + }; + + readAsync = function readAsync(f, onload, onerror) { + setTimeout(function() { onload(readBinary(f)); }, 0); + }; + + if (typeof scriptArgs != 'undefined') { + arguments_ = scriptArgs; + } else if (typeof arguments != 'undefined') { + arguments_ = arguments; + } + + if (typeof quit === 'function') { + quit_ = function(status) { + quit(status); + }; + } + + if (typeof print !== 'undefined') { + // Prefer to use print/printErr where they exist, as they usually work better. + if (typeof console === 'undefined') console = /** @type{!Console} */({}); + console.log = /** @type{!function(this:Console, ...*): undefined} */ (print); + console.warn = console.error = /** @type{!function(this:Console, ...*): undefined} */ (typeof printErr !== 'undefined' ? printErr : print); + } + +} else + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document !== 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // When MODULARIZE, this JS may be executed later, after document.currentScript + // is gone, so we saved it, and we use it here instead of any other info. + if (_scriptDir) { + scriptDirectory = _scriptDir; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + if (scriptDirectory.indexOf('blob:') !== 0) { + scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf('/')+1); + } else { + scriptDirectory = ''; + } + + if (!(typeof window === 'object' || typeof importScripts === 'function')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + // Differentiate the Web Worker from the Node Worker case, as reading must + // be done differently. + { + +// include: web_or_worker_shell_read.js + + + read_ = function(url) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.send(null); + return xhr.responseText; + }; + + if (ENVIRONMENT_IS_WORKER) { + readBinary = function(url) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = function(url, onload, onerror) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = function() { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + onload(xhr.response); + return; + } + onerror(); + }; + xhr.onerror = onerror; + xhr.send(null); + }; + +// end include: web_or_worker_shell_read.js + } + + setWindowTitle = function(title) { document.title = title }; +} else +{ + throw new Error('environment detection error'); +} + +// Set up the out() and err() hooks, which are how we can print to stdout or +// stderr, respectively. +var out = Module['print'] || console.log.bind(console); +var err = Module['printErr'] || console.warn.bind(console); + +// Merge back in the overrides +for (key in moduleOverrides) { + if (moduleOverrides.hasOwnProperty(key)) { + Module[key] = moduleOverrides[key]; + } +} +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array. +moduleOverrides = null; + +// Emit code to handle expected values on the Module object. This applies Module.x +// to the proper local x. This has two benefits: first, we only emit it if it is +// expected to arrive, and second, by using a local everywhere else that can be +// minified. + +if (Module['arguments']) arguments_ = Module['arguments']; +if (!Object.getOwnPropertyDescriptor(Module, 'arguments')) { + Object.defineProperty(Module, 'arguments', { + configurable: true, + get: function() { + abort('Module.arguments has been replaced with plain arguments_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') + } + }); +} + +if (Module['thisProgram']) thisProgram = Module['thisProgram']; +if (!Object.getOwnPropertyDescriptor(Module, 'thisProgram')) { + Object.defineProperty(Module, 'thisProgram', { + configurable: true, + get: function() { + abort('Module.thisProgram has been replaced with plain thisProgram (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') + } + }); +} + +if (Module['quit']) quit_ = Module['quit']; +if (!Object.getOwnPropertyDescriptor(Module, 'quit')) { + Object.defineProperty(Module, 'quit', { + configurable: true, + get: function() { + abort('Module.quit has been replaced with plain quit_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') + } + }); +} + +// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message +// Assertions on removed incoming Module JS APIs. +assert(typeof Module['memoryInitializerPrefixURL'] === 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['pthreadMainPrefixURL'] === 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['cdInitializerPrefixURL'] === 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['filePackagePrefixURL'] === 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['read'] === 'undefined', 'Module.read option was removed (modify read_ in JS)'); +assert(typeof Module['readAsync'] === 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); +assert(typeof Module['readBinary'] === 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); +assert(typeof Module['setWindowTitle'] === 'undefined', 'Module.setWindowTitle option was removed (modify setWindowTitle in JS)'); +assert(typeof Module['TOTAL_MEMORY'] === 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); + +if (!Object.getOwnPropertyDescriptor(Module, 'read')) { + Object.defineProperty(Module, 'read', { + configurable: true, + get: function() { + abort('Module.read has been replaced with plain read_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') + } + }); +} + +if (!Object.getOwnPropertyDescriptor(Module, 'readAsync')) { + Object.defineProperty(Module, 'readAsync', { + configurable: true, + get: function() { + abort('Module.readAsync has been replaced with plain readAsync (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') + } + }); +} + +if (!Object.getOwnPropertyDescriptor(Module, 'readBinary')) { + Object.defineProperty(Module, 'readBinary', { + configurable: true, + get: function() { + abort('Module.readBinary has been replaced with plain readBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') + } + }); +} + +if (!Object.getOwnPropertyDescriptor(Module, 'setWindowTitle')) { + Object.defineProperty(Module, 'setWindowTitle', { + configurable: true, + get: function() { + abort('Module.setWindowTitle has been replaced with plain setWindowTitle (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') + } + }); +} +var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; +var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; + + + + +assert(!ENVIRONMENT_IS_SHELL, "shell environment detected but not enabled at build time. Add 'shell' to `-s ENVIRONMENT` to enable."); + + + + +var STACK_ALIGN = 16; + +function getNativeTypeSize(type) { + switch (type) { + case 'i1': case 'i8': return 1; + case 'i16': return 2; + case 'i32': return 4; + case 'i64': return 8; + case 'float': return 4; + case 'double': return 8; + default: { + if (type[type.length-1] === '*') { + return 4; // A pointer + } else if (type[0] === 'i') { + var bits = Number(type.substr(1)); + assert(bits % 8 === 0, 'getNativeTypeSize invalid bits ' + bits + ', type ' + type); + return bits / 8; + } else { + return 0; + } + } + } +} + +function warnOnce(text) { + if (!warnOnce.shown) warnOnce.shown = {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + err(text); + } +} + +// include: runtime_functions.js + + +// Wraps a JS function as a wasm function with a given signature. +function convertJsFunctionToWasm(func, sig) { + + // If the type reflection proposal is available, use the new + // "WebAssembly.Function" constructor. + // Otherwise, construct a minimal wasm module importing the JS function and + // re-exporting it. + if (typeof WebAssembly.Function === "function") { + var typeNames = { + 'i': 'i32', + 'j': 'i64', + 'f': 'f32', + 'd': 'f64' + }; + var type = { + parameters: [], + results: sig[0] == 'v' ? [] : [typeNames[sig[0]]] + }; + for (var i = 1; i < sig.length; ++i) { + type.parameters.push(typeNames[sig[i]]); + } + return new WebAssembly.Function(type, func); + } + + // The module is static, with the exception of the type section, which is + // generated based on the signature passed in. + var typeSection = [ + 0x01, // id: section, + 0x00, // length: 0 (placeholder) + 0x01, // count: 1 + 0x60, // form: func + ]; + var sigRet = sig.slice(0, 1); + var sigParam = sig.slice(1); + var typeCodes = { + 'i': 0x7f, // i32 + 'j': 0x7e, // i64 + 'f': 0x7d, // f32 + 'd': 0x7c, // f64 + }; + + // Parameters, length + signatures + typeSection.push(sigParam.length); + for (var i = 0; i < sigParam.length; ++i) { + typeSection.push(typeCodes[sigParam[i]]); + } + + // Return values, length + signatures + // With no multi-return in MVP, either 0 (void) or 1 (anything else) + if (sigRet == 'v') { + typeSection.push(0x00); + } else { + typeSection = typeSection.concat([0x01, typeCodes[sigRet]]); + } + + // Write the overall length of the type section back into the section header + // (excepting the 2 bytes for the section id and length) + typeSection[1] = typeSection.length - 2; + + // Rest of the module is static + var bytes = new Uint8Array([ + 0x00, 0x61, 0x73, 0x6d, // magic ("\0asm") + 0x01, 0x00, 0x00, 0x00, // version: 1 + ].concat(typeSection, [ + 0x02, 0x07, // import section + // (import "e" "f" (func 0 (type 0))) + 0x01, 0x01, 0x65, 0x01, 0x66, 0x00, 0x00, + 0x07, 0x05, // export section + // (export "f" (func 0 (type 0))) + 0x01, 0x01, 0x66, 0x00, 0x00, + ])); + + // We can compile this wasm module synchronously because it is very small. + // This accepts an import (at "e.f"), that it reroutes to an export (at "f") + var module = new WebAssembly.Module(bytes); + var instance = new WebAssembly.Instance(module, { + 'e': { + 'f': func + } + }); + var wrappedFunc = instance.exports['f']; + return wrappedFunc; +} + +var freeTableIndexes = []; + +// Weak map of functions in the table to their indexes, created on first use. +var functionsInTableMap; + +function getEmptyTableSlot() { + // Reuse a free index if there is one, otherwise grow. + if (freeTableIndexes.length) { + return freeTableIndexes.pop(); + } + // Grow the table + try { + wasmTable.grow(1); + } catch (err) { + if (!(err instanceof RangeError)) { + throw err; + } + throw 'Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.'; + } + return wasmTable.length - 1; +} + +// Add a wasm function to the table. +function addFunctionWasm(func, sig) { + // Check if the function is already in the table, to ensure each function + // gets a unique index. First, create the map if this is the first use. + if (!functionsInTableMap) { + functionsInTableMap = new WeakMap(); + for (var i = 0; i < wasmTable.length; i++) { + var item = wasmTable.get(i); + // Ignore null values. + if (item) { + functionsInTableMap.set(item, i); + } + } + } + if (functionsInTableMap.has(func)) { + return functionsInTableMap.get(func); + } + + // It's not in the table, add it now. + + var ret = getEmptyTableSlot(); + + // Set the new value. + try { + // Attempting to call this with JS function will cause of table.set() to fail + wasmTable.set(ret, func); + } catch (err) { + if (!(err instanceof TypeError)) { + throw err; + } + assert(typeof sig !== 'undefined', 'Missing signature argument to addFunction: ' + func); + var wrapped = convertJsFunctionToWasm(func, sig); + wasmTable.set(ret, wrapped); + } + + functionsInTableMap.set(func, ret); + + return ret; +} + +function removeFunction(index) { + functionsInTableMap.delete(wasmTable.get(index)); + freeTableIndexes.push(index); +} + +// 'sig' parameter is required for the llvm backend but only when func is not +// already a WebAssembly function. +function addFunction(func, sig) { + assert(typeof func !== 'undefined'); + + return addFunctionWasm(func, sig); +} + +// end include: runtime_functions.js +// include: runtime_debug.js + + +// end include: runtime_debug.js +var tempRet0 = 0; + +var setTempRet0 = function(value) { + tempRet0 = value; +}; + +var getTempRet0 = function() { + return tempRet0; +}; + + + +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary; +if (Module['wasmBinary']) wasmBinary = Module['wasmBinary']; +if (!Object.getOwnPropertyDescriptor(Module, 'wasmBinary')) { + Object.defineProperty(Module, 'wasmBinary', { + configurable: true, + get: function() { + abort('Module.wasmBinary has been replaced with plain wasmBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') + } + }); +} +var noExitRuntime = Module['noExitRuntime'] || true; +if (!Object.getOwnPropertyDescriptor(Module, 'noExitRuntime')) { + Object.defineProperty(Module, 'noExitRuntime', { + configurable: true, + get: function() { + abort('Module.noExitRuntime has been replaced with plain noExitRuntime (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') + } + }); +} + +if (typeof WebAssembly !== 'object') { + abort('no native wasm support detected'); +} + +// include: runtime_safe_heap.js + + +// In MINIMAL_RUNTIME, setValue() and getValue() are only available when building with safe heap enabled, for heap safety checking. +// In traditional runtime, setValue() and getValue() are always available (although their use is highly discouraged due to perf penalties) + +/** @param {number} ptr + @param {number} value + @param {string} type + @param {number|boolean=} noSafe */ +function setValue(ptr, value, type, noSafe) { + type = type || 'i8'; + if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit + switch (type) { + case 'i1': HEAP8[((ptr)>>0)] = value; break; + case 'i8': HEAP8[((ptr)>>0)] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)] = tempI64[0],HEAP32[(((ptr)+(4))>>2)] = tempI64[1]); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + default: abort('invalid type for setValue: ' + type); + } +} + +/** @param {number} ptr + @param {string} type + @param {number|boolean=} noSafe */ +function getValue(ptr, type, noSafe) { + type = type || 'i8'; + if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit + switch (type) { + case 'i1': return HEAP8[((ptr)>>0)]; + case 'i8': return HEAP8[((ptr)>>0)]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP32[((ptr)>>2)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + default: abort('invalid type for getValue: ' + type); + } + return null; +} + +// end include: runtime_safe_heap.js +// Wasm globals + +var wasmMemory; + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed: ' + text); + } +} + +// Returns the C function with a specified identifier (for C++, you need to do manual name mangling) +function getCFunc(ident) { + var func = Module['_' + ident]; // closure exported function + assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported'); + return func; +} + +// C calling interface. +/** @param {string|null=} returnType + @param {Array=} argTypes + @param {Arguments|Array=} args + @param {Object=} opts */ +function ccall(ident, returnType, argTypes, args, opts) { + // For fast lookup of conversion functions + var toC = { + 'string': function(str) { + var ret = 0; + if (str !== null && str !== undefined && str !== 0) { // null string + // at most 4 bytes per UTF-8 code point, +1 for the trailing '\0' + var len = (str.length << 2) + 1; + ret = stackAlloc(len); + stringToUTF8(str, ret, len); + } + return ret; + }, + 'array': function(arr) { + var ret = stackAlloc(arr.length); + writeArrayToMemory(arr, ret); + return ret; + } + }; + + function convertReturnValue(ret) { + if (returnType === 'string') return UTF8ToString(ret); + if (returnType === 'boolean') return Boolean(ret); + return ret; + } + + var func = getCFunc(ident); + var cArgs = []; + var stack = 0; + assert(returnType !== 'array', 'Return type should not be "array".'); + if (args) { + for (var i = 0; i < args.length; i++) { + var converter = toC[argTypes[i]]; + if (converter) { + if (stack === 0) stack = stackSave(); + cArgs[i] = converter(args[i]); + } else { + cArgs[i] = args[i]; + } + } + } + var ret = func.apply(null, cArgs); + function onDone(ret) { + if (stack !== 0) stackRestore(stack); + return convertReturnValue(ret); + } + + ret = onDone(ret); + return ret; +} + +/** @param {string=} returnType + @param {Array=} argTypes + @param {Object=} opts */ +function cwrap(ident, returnType, argTypes, opts) { + return function() { + return ccall(ident, returnType, argTypes, arguments, opts); + } +} + +// We used to include malloc/free by default in the past. Show a helpful error in +// builds with assertions. +function _free() { + // Show a helpful error since we used to include free by default in the past. + abort("free() called but not included in the build - add '_free' to EXPORTED_FUNCTIONS"); +} + +var ALLOC_NORMAL = 0; // Tries to use _malloc() +var ALLOC_STACK = 1; // Lives for the duration of the current function call + +// allocate(): This is for internal use. You can use it yourself as well, but the interface +// is a little tricky (see docs right below). The reason is that it is optimized +// for multiple syntaxes to save space in generated code. So you should +// normally not use allocate(), and instead allocate memory using _malloc(), +// initialize it with setValue(), and so forth. +// @slab: An array of data. +// @allocator: How to allocate memory, see ALLOC_* +/** @type {function((Uint8Array|Array), number)} */ +function allocate(slab, allocator) { + var ret; + assert(typeof allocator === 'number', 'allocate no longer takes a type argument') + assert(typeof slab !== 'number', 'allocate no longer takes a number as arg0') + + if (allocator == ALLOC_STACK) { + ret = stackAlloc(slab.length); + } else { + ret = _malloc(slab.length); + } + + if (slab.subarray || slab.slice) { + HEAPU8.set(/** @type {!Uint8Array} */(slab), ret); + } else { + HEAPU8.set(new Uint8Array(slab), ret); + } + return ret; +} + +// include: runtime_strings.js + + +// runtime_strings.js: Strings related runtime functions that are part of both MINIMAL_RUNTIME and regular runtime. + +// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns +// a copy of that string as a Javascript String object. + +var UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined; + +/** + * @param {number} idx + * @param {number=} maxBytesToRead + * @return {string} + */ +function UTF8ArrayToString(heap, idx, maxBytesToRead) { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself. + // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage. + // (As a tiny code save trick, compare endPtr against endIdx using a negation, so that undefined means Infinity) + while (heap[endPtr] && !(endPtr >= endIdx)) ++endPtr; + + if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) { + return UTF8Decoder.decode(heap.subarray(idx, endPtr)); + } else { + var str = ''; + // If building with TextDecoder, we have already computed the string length above, so test loop end condition against that + while (idx < endPtr) { + // For UTF8 byte structure, see: + // http://en.wikipedia.org/wiki/UTF-8#Description + // https://www.ietf.org/rfc/rfc2279.txt + // https://tools.ietf.org/html/rfc3629 + var u0 = heap[idx++]; + if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } + var u1 = heap[idx++] & 63; + if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } + var u2 = heap[idx++] & 63; + if ((u0 & 0xF0) == 0xE0) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; + } else { + if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte 0x' + u0.toString(16) + ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!'); + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heap[idx++] & 63); + } + + if (u0 < 0x10000) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } + } + } + return str; +} + +// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns a +// copy of that string as a Javascript String object. +// maxBytesToRead: an optional length that specifies the maximum number of bytes to read. You can omit +// this parameter to scan the string until the first \0 byte. If maxBytesToRead is +// passed, and the string at [ptr, ptr+maxBytesToReadr[ contains a null byte in the +// middle, then the string will cut short at that byte index (i.e. maxBytesToRead will +// not produce a string of exact length [ptr, ptr+maxBytesToRead[) +// N.B. mixing frequent uses of UTF8ToString() with and without maxBytesToRead may +// throw JS JIT optimizations off, so it is worth to consider consistently using one +// style or the other. +/** + * @param {number} ptr + * @param {number=} maxBytesToRead + * @return {string} + */ +function UTF8ToString(ptr, maxBytesToRead) { + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; +} + +// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx', +// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP. +// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write. +// Parameters: +// str: the Javascript string to copy. +// heap: the array to copy to. Each index in this array is assumed to be one 8-byte element. +// outIdx: The starting offset in the array to begin the copying. +// maxBytesToWrite: The maximum number of bytes this function can write to the array. +// This count should include the null terminator, +// i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else. +// maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator. +// Returns the number of bytes written, EXCLUDING the null terminator. + +function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { + if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes. + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) { + var u1 = str.charCodeAt(++i); + u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); + } + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u >= 0x200000) warnOnce('Invalid Unicode code point 0x' + u.toString(16) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x1FFFFF).'); + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; +} + +// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', +// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP. +// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write. +// Returns the number of bytes written, EXCLUDING the null terminator. + +function stringToUTF8(str, outPtr, maxBytesToWrite) { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite); +} + +// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte. +function lengthBytesUTF8(str) { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF); + if (u <= 0x7F) ++len; + else if (u <= 0x7FF) len += 2; + else if (u <= 0xFFFF) len += 3; + else len += 4; + } + return len; +} + +// end include: runtime_strings.js +// include: runtime_strings_extra.js + + +// runtime_strings_extra.js: Strings related runtime functions that are available only in regular runtime. + +// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns +// a copy of that string as a Javascript String object. + +function AsciiToString(ptr) { + var str = ''; + while (1) { + var ch = HEAPU8[((ptr++)>>0)]; + if (!ch) return str; + str += String.fromCharCode(ch); + } +} + +// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', +// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP. + +function stringToAscii(str, outPtr) { + return writeAsciiToMemory(str, outPtr, false); +} + +// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns +// a copy of that string as a Javascript String object. + +var UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined; + +function UTF16ToString(ptr, maxBytesToRead) { + assert(ptr % 2 == 0, 'Pointer passed to UTF16ToString must be aligned to two bytes!'); + var endPtr = ptr; + // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself. + // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage. + var idx = endPtr >> 1; + var maxIdx = idx + maxBytesToRead / 2; + // If maxBytesToRead is not passed explicitly, it will be undefined, and this + // will always evaluate to true. This saves on code size. + while (!(idx >= maxIdx) && HEAPU16[idx]) ++idx; + endPtr = idx << 1; + + if (endPtr - ptr > 32 && UTF16Decoder) { + return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr)); + } else { + var str = ''; + + // If maxBytesToRead is not passed explicitly, it will be undefined, and the for-loop's condition + // will always evaluate to true. The loop is then terminated on the first null char. + for (var i = 0; !(i >= maxBytesToRead / 2); ++i) { + var codeUnit = HEAP16[(((ptr)+(i*2))>>1)]; + if (codeUnit == 0) break; + // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through. + str += String.fromCharCode(codeUnit); + } + + return str; + } +} + +// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', +// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP. +// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write. +// Parameters: +// str: the Javascript string to copy. +// outPtr: Byte address in Emscripten HEAP where to write the string to. +// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null +// terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else. +// maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator. +// Returns the number of bytes written, EXCLUDING the null terminator. + +function stringToUTF16(str, outPtr, maxBytesToWrite) { + assert(outPtr % 2 == 0, 'Pointer passed to stringToUTF16 must be aligned to two bytes!'); + assert(typeof maxBytesToWrite == 'number', 'stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed. + if (maxBytesToWrite === undefined) { + maxBytesToWrite = 0x7FFFFFFF; + } + if (maxBytesToWrite < 2) return 0; + maxBytesToWrite -= 2; // Null terminator. + var startPtr = outPtr; + var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length; + for (var i = 0; i < numCharsToWrite; ++i) { + // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP. + var codeUnit = str.charCodeAt(i); // possibly a lead surrogate + HEAP16[((outPtr)>>1)] = codeUnit; + outPtr += 2; + } + // Null-terminate the pointer to the HEAP. + HEAP16[((outPtr)>>1)] = 0; + return outPtr - startPtr; +} + +// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte. + +function lengthBytesUTF16(str) { + return str.length*2; +} + +function UTF32ToString(ptr, maxBytesToRead) { + assert(ptr % 4 == 0, 'Pointer passed to UTF32ToString must be aligned to four bytes!'); + var i = 0; + + var str = ''; + // If maxBytesToRead is not passed explicitly, it will be undefined, and this + // will always evaluate to true. This saves on code size. + while (!(i >= maxBytesToRead / 4)) { + var utf32 = HEAP32[(((ptr)+(i*4))>>2)]; + if (utf32 == 0) break; + ++i; + // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + if (utf32 >= 0x10000) { + var ch = utf32 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } else { + str += String.fromCharCode(utf32); + } + } + return str; +} + +// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', +// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP. +// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write. +// Parameters: +// str: the Javascript string to copy. +// outPtr: Byte address in Emscripten HEAP where to write the string to. +// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null +// terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else. +// maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator. +// Returns the number of bytes written, EXCLUDING the null terminator. + +function stringToUTF32(str, outPtr, maxBytesToWrite) { + assert(outPtr % 4 == 0, 'Pointer passed to stringToUTF32 must be aligned to four bytes!'); + assert(typeof maxBytesToWrite == 'number', 'stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed. + if (maxBytesToWrite === undefined) { + maxBytesToWrite = 0x7FFFFFFF; + } + if (maxBytesToWrite < 4) return 0; + var startPtr = outPtr; + var endPtr = startPtr + maxBytesToWrite - 4; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var codeUnit = str.charCodeAt(i); // possibly a lead surrogate + if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) { + var trailSurrogate = str.charCodeAt(++i); + codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF); + } + HEAP32[((outPtr)>>2)] = codeUnit; + outPtr += 4; + if (outPtr + 4 > endPtr) break; + } + // Null-terminate the pointer to the HEAP. + HEAP32[((outPtr)>>2)] = 0; + return outPtr - startPtr; +} + +// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte. + +function lengthBytesUTF32(str) { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var codeUnit = str.charCodeAt(i); + if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) ++i; // possibly a lead surrogate, so skip over the tail surrogate. + len += 4; + } + + return len; +} + +// Allocate heap space for a JS string, and write it there. +// It is the responsibility of the caller to free() that memory. +function allocateUTF8(str) { + var size = lengthBytesUTF8(str) + 1; + var ret = _malloc(size); + if (ret) stringToUTF8Array(str, HEAP8, ret, size); + return ret; +} + +// Allocate stack space for a JS string, and write it there. +function allocateUTF8OnStack(str) { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8Array(str, HEAP8, ret, size); + return ret; +} + +// Deprecated: This function should not be called because it is unsafe and does not provide +// a maximum length limit of how many bytes it is allowed to write. Prefer calling the +// function stringToUTF8Array() instead, which takes in a maximum length that can be used +// to be secure from out of bounds writes. +/** @deprecated + @param {boolean=} dontAddNull */ +function writeStringToMemory(string, buffer, dontAddNull) { + warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!'); + + var /** @type {number} */ lastChar, /** @type {number} */ end; + if (dontAddNull) { + // stringToUTF8Array always appends null. If we don't want to do that, remember the + // character that existed at the location where the null will be placed, and restore + // that after the write (below). + end = buffer + lengthBytesUTF8(string); + lastChar = HEAP8[end]; + } + stringToUTF8(string, buffer, Infinity); + if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character. +} + +function writeArrayToMemory(array, buffer) { + assert(array.length >= 0, 'writeArrayToMemory array must have a length (should be an array or typed array)') + HEAP8.set(array, buffer); +} + +/** @param {boolean=} dontAddNull */ +function writeAsciiToMemory(str, buffer, dontAddNull) { + for (var i = 0; i < str.length; ++i) { + assert(str.charCodeAt(i) === str.charCodeAt(i)&0xff); + HEAP8[((buffer++)>>0)] = str.charCodeAt(i); + } + // Null-terminate the pointer to the HEAP. + if (!dontAddNull) HEAP8[((buffer)>>0)] = 0; +} + +// end include: runtime_strings_extra.js +// Memory management + +function alignUp(x, multiple) { + if (x % multiple > 0) { + x += multiple - (x % multiple); + } + return x; +} + +var HEAP, +/** @type {ArrayBuffer} */ + buffer, +/** @type {Int8Array} */ + HEAP8, +/** @type {Uint8Array} */ + HEAPU8, +/** @type {Int16Array} */ + HEAP16, +/** @type {Uint16Array} */ + HEAPU16, +/** @type {Int32Array} */ + HEAP32, +/** @type {Uint32Array} */ + HEAPU32, +/** @type {Float32Array} */ + HEAPF32, +/** @type {Float64Array} */ + HEAPF64; + +function updateGlobalBufferAndViews(buf) { + buffer = buf; + Module['HEAP8'] = HEAP8 = new Int8Array(buf); + Module['HEAP16'] = HEAP16 = new Int16Array(buf); + Module['HEAP32'] = HEAP32 = new Int32Array(buf); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(buf); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(buf); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(buf); + Module['HEAPF32'] = HEAPF32 = new Float32Array(buf); + Module['HEAPF64'] = HEAPF64 = new Float64Array(buf); +} + +var TOTAL_STACK = 5242880; +if (Module['TOTAL_STACK']) assert(TOTAL_STACK === Module['TOTAL_STACK'], 'the stack size can no longer be determined at runtime') + +var INITIAL_MEMORY = Module['INITIAL_MEMORY'] || 16777216; +if (!Object.getOwnPropertyDescriptor(Module, 'INITIAL_MEMORY')) { + Object.defineProperty(Module, 'INITIAL_MEMORY', { + configurable: true, + get: function() { + abort('Module.INITIAL_MEMORY has been replaced with plain INITIAL_MEMORY (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') + } + }); +} + +assert(INITIAL_MEMORY >= TOTAL_STACK, 'INITIAL_MEMORY should be larger than TOTAL_STACK, was ' + INITIAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')'); + +// check for full engine support (use string 'subarray' to avoid closure compiler confusion) +assert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray !== undefined && Int32Array.prototype.set !== undefined, + 'JS engine does not provide full typed array support'); + +// If memory is defined in wasm, the user can't provide it. +assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -s IMPORTED_MEMORY to define wasmMemory externally'); +assert(INITIAL_MEMORY == 16777216, 'Detected runtime INITIAL_MEMORY setting. Use -s IMPORTED_MEMORY to define wasmMemory dynamically'); + +// include: runtime_init_table.js +// In regular non-RELOCATABLE mode the table is exported +// from the wasm module and this will be assigned once +// the exports are available. +var wasmTable; + +// end include: runtime_init_table.js +// include: runtime_stack_check.js + + +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // The stack grows downwards + HEAPU32[(max >> 2)+1] = 0x2135467; + HEAPU32[(max >> 2)+2] = 0x89BACDFE; + // Also test the global address 0 for integrity. + HEAP32[0] = 0x63736d65; /* 'emsc' */ +} + +function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + var cookie1 = HEAPU32[(max >> 2)+1]; + var cookie2 = HEAPU32[(max >> 2)+2]; + if (cookie1 != 0x2135467 || cookie2 != 0x89BACDFE) { + abort('Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x2135467, but received 0x' + cookie2.toString(16) + ' ' + cookie1.toString(16)); + } + // Also test the global address 0 for integrity. + if (HEAP32[0] !== 0x63736d65 /* 'emsc' */) abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); +} + +// end include: runtime_stack_check.js +// include: runtime_assertions.js + + +// Endianness check +(function() { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -s SUPPORT_BIG_ENDIAN=1 to bypass)'; +})(); + +// end include: runtime_assertions.js +var __ATPRERUN__ = []; // functions called before the runtime is initialized +var __ATINIT__ = []; // functions called during startup +var __ATMAIN__ = []; // functions called when main() is to be run +var __ATEXIT__ = []; // functions called during shutdown +var __ATPOSTRUN__ = []; // functions called after the main() is called + +var runtimeInitialized = false; +var runtimeExited = false; +var runtimeKeepaliveCounter = 0; + +function keepRuntimeAlive() { + return noExitRuntime || runtimeKeepaliveCounter > 0; +} + +function preRun() { + + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + + callRuntimeCallbacks(__ATPRERUN__); +} + +function initRuntime() { + checkStackCookie(); + assert(!runtimeInitialized); + runtimeInitialized = true; + + +if (!Module["noFSInit"] && !FS.init.initialized) + FS.init(); +FS.ignorePermissions = false; + +TTY.init(); + callRuntimeCallbacks(__ATINIT__); +} + +function preMain() { + checkStackCookie(); + + callRuntimeCallbacks(__ATMAIN__); +} + +function exitRuntime() { + checkStackCookie(); + runtimeExited = true; +} + +function postRun() { + checkStackCookie(); + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + + callRuntimeCallbacks(__ATPOSTRUN__); +} + +function addOnPreRun(cb) { + __ATPRERUN__.unshift(cb); +} + +function addOnInit(cb) { + __ATINIT__.unshift(cb); +} + +function addOnPreMain(cb) { + __ATMAIN__.unshift(cb); +} + +function addOnExit(cb) { +} + +function addOnPostRun(cb) { + __ATPOSTRUN__.unshift(cb); +} + +// include: runtime_math.js + + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32 + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc + +assert(Math.imul, 'This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill'); +assert(Math.fround, 'This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill'); +assert(Math.clz32, 'This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill'); +assert(Math.trunc, 'This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill'); + +// end include: runtime_math.js +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var runDependencyWatcher = null; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } +} + +function addRunDependency(id) { + runDependencies++; + + if (Module['monitorRunDependencies']) { + Module['monitorRunDependencies'](runDependencies); + } + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval !== 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(function() { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err('dependency: ' + dep); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + + if (Module['monitorRunDependencies']) { + Module['monitorRunDependencies'](runDependencies); + } + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +Module["preloadedImages"] = {}; // maps url to image data +Module["preloadedAudios"] = {}; // maps url to audio data + +/** @param {string|number=} what */ +function abort(what) { + { + if (Module['onAbort']) { + Module['onAbort'](what); + } + } + + what += ''; + err(what); + + ABORT = true; + EXITSTATUS = 1; + + var output = 'abort(' + what + ') at ' + stackTrace(); + what = output; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + var e = new WebAssembly.RuntimeError(what); + + readyPromiseReject(e); + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +// {{MEM_INITIALIZER}} + +// include: memoryprofiler.js + + +// end include: memoryprofiler.js +// include: URIUtils.js + + +// Prefix of data URIs emitted by SINGLE_FILE and related options. +var dataURIPrefix = 'data:application/octet-stream;base64,'; + +// Indicates whether filename is a base64 data URI. +function isDataURI(filename) { + // Prefix of data URIs emitted by SINGLE_FILE and related options. + return filename.startsWith(dataURIPrefix); +} + +// Indicates whether filename is delivered via file protocol (as opposed to http/https) +function isFileURI(filename) { + return filename.startsWith('file://'); +} + +// end include: URIUtils.js +function createExportWrapper(name, fixedasm) { + return function() { + var displayName = name; + var asm = fixedasm; + if (!fixedasm) { + asm = Module['asm']; + } + assert(runtimeInitialized, 'native function `' + displayName + '` called before runtime initialization'); + assert(!runtimeExited, 'native function `' + displayName + '` called after runtime exit (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + if (!asm[name]) { + assert(asm[name], 'exported native function `' + displayName + '` not found'); + } + return asm[name].apply(null, arguments); + }; +} + +var wasmBinaryFile; + wasmBinaryFile = '7zz.wasm'; + if (!isDataURI(wasmBinaryFile)) { + wasmBinaryFile = locateFile(wasmBinaryFile); + } + +function getBinary(file) { + try { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } else { + throw "both async and sync fetching of the wasm failed"; + } + } + catch (err) { + abort(err); + } +} + +function getBinaryPromise() { + // If we don't have the binary yet, try to to load it asynchronously. + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use fetch if it is available and the url is not a file, otherwise fall back to XHR. + if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) { + if (typeof fetch === 'function' + && !isFileURI(wasmBinaryFile) + ) { + return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function(response) { + if (!response['ok']) { + throw "failed to load wasm binary file at '" + wasmBinaryFile + "'"; + } + return response['arrayBuffer'](); + }).catch(function () { + return getBinary(wasmBinaryFile); + }); + } + else { + if (readAsync) { + // fetch is not available or url is file => try XHR (readAsync uses XHR internally) + return new Promise(function(resolve, reject) { + readAsync(wasmBinaryFile, function(response) { resolve(new Uint8Array(/** @type{!ArrayBuffer} */(response))) }, reject) + }); + } + } + } + + // Otherwise, getBinary should be able to get it synchronously + return Promise.resolve().then(function() { return getBinary(wasmBinaryFile); }); +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +function createWasm() { + // prepare imports + var info = { + 'env': asmLibraryArg, + 'wasi_snapshot_preview1': asmLibraryArg, + }; + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + var exports = instance.exports; + + Module['asm'] = exports; + + wasmMemory = Module['asm']['memory']; + assert(wasmMemory, "memory not found in wasm exports"); + // This assertion doesn't hold when emscripten is run in --post-link + // mode. + // TODO(sbc): Read INITIAL_MEMORY out of the wasm file in post-link mode. + //assert(wasmMemory.buffer.byteLength === 16777216); + updateGlobalBufferAndViews(wasmMemory.buffer); + + wasmTable = Module['asm']['__indirect_function_table']; + assert(wasmTable, "table not found in wasm exports"); + + addOnInit(Module['asm']['__wasm_call_ctors']); + + removeRunDependency('wasm-instantiate'); + } + // we can't run yet (except in a pthread, where we have a custom sync instantiator) + addRunDependency('wasm-instantiate'); + + // Prefer streaming instantiation if available. + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); + trueModule = null; + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above USE_PTHREADS-enabled path. + receiveInstance(result['instance']); + } + + function instantiateArrayBuffer(receiver) { + return getBinaryPromise().then(function(binary) { + return WebAssembly.instantiate(binary, info); + }).then(function (instance) { + return instance; + }).then(receiver, function(reason) { + err('failed to asynchronously prepare wasm: ' + reason); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + err('warning: Loading from a file URI (' + wasmBinaryFile + ') is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing'); + } + abort(reason); + }); + } + + function instantiateAsync() { + if (!wasmBinary && + typeof WebAssembly.instantiateStreaming === 'function' && + !isDataURI(wasmBinaryFile) && + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + !isFileURI(wasmBinaryFile) && + typeof fetch === 'function') { + return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function (response) { + var result = WebAssembly.instantiateStreaming(response, info); + + return result.then( + receiveInstantiationResult, + function(reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err('wasm streaming compile failed: ' + reason); + err('falling back to ArrayBuffer instantiation'); + return instantiateArrayBuffer(receiveInstantiationResult); + }); + }); + } else { + return instantiateArrayBuffer(receiveInstantiationResult); + } + } + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to run the instantiation parallel + // to any other async startup actions they are performing. + if (Module['instantiateWasm']) { + try { + var exports = Module['instantiateWasm'](info, receiveInstance); + return exports; + } catch(e) { + err('Module.instantiateWasm callback failed with error: ' + e); + return false; + } + } + + // If instantiation fails, reject the module ready promise. + instantiateAsync().catch(readyPromiseReject); + return {}; // no exports yet; we'll fill them in later +} + +// Globals used by JS i64 conversions (see makeSetValue) +var tempDouble; +var tempI64; + +// === Body === + +var ASM_CONSTS = { + +}; + + + + + + + function callRuntimeCallbacks(callbacks) { + while (callbacks.length > 0) { + var callback = callbacks.shift(); + if (typeof callback == 'function') { + callback(Module); // Pass the module as the first argument. + continue; + } + var func = callback.func; + if (typeof func === 'number') { + if (callback.arg === undefined) { + wasmTable.get(func)(); + } else { + wasmTable.get(func)(callback.arg); + } + } else { + func(callback.arg === undefined ? null : callback.arg); + } + } + } + + function demangle(func) { + warnOnce('warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling'); + return func; + } + + function demangleAll(text) { + var regex = + /\b_Z[\w\d_]+/g; + return text.replace(regex, + function(x) { + var y = demangle(x); + return x === y ? x : (y + ' [' + x + ']'); + }); + } + + function handleException(e) { + // Certain exception types we do not treat as errors since they are used for + // internal control flow. + // 1. ExitStatus, which is thrown by exit() + // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others + // that wish to return to JS event loop. + if (e instanceof ExitStatus || e == 'unwind') { + return EXITSTATUS; + } + // Anything else is an unexpected exception and we treat it as hard error. + var toLog = e; + if (e && typeof e === 'object' && e.stack) { + toLog = [e, e.stack]; + } + err('exception thrown: ' + toLog); + quit_(1, e); + } + + function jsStackTrace() { + var error = new Error(); + if (!error.stack) { + // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown, + // so try that as a special-case. + try { + throw new Error(); + } catch(e) { + error = e; + } + if (!error.stack) { + return '(no stack trace available)'; + } + } + return error.stack.toString(); + } + + function stackTrace() { + var js = jsStackTrace(); + if (Module['extraStackTrace']) js += '\n' + Module['extraStackTrace'](); + return demangleAll(js); + } + + function ___cxa_allocate_exception(size) { + // Thrown object is prepended by exception metadata block + return _malloc(size + 16) + 16; + } + + function _atexit(func, arg) { + } + function ___cxa_atexit(a0,a1 + ) { + return _atexit(a0,a1); + } + + function ExceptionInfo(excPtr) { + this.excPtr = excPtr; + this.ptr = excPtr - 16; + + this.set_type = function(type) { + HEAP32[(((this.ptr)+(4))>>2)] = type; + }; + + this.get_type = function() { + return HEAP32[(((this.ptr)+(4))>>2)]; + }; + + this.set_destructor = function(destructor) { + HEAP32[(((this.ptr)+(8))>>2)] = destructor; + }; + + this.get_destructor = function() { + return HEAP32[(((this.ptr)+(8))>>2)]; + }; + + this.set_refcount = function(refcount) { + HEAP32[((this.ptr)>>2)] = refcount; + }; + + this.set_caught = function (caught) { + caught = caught ? 1 : 0; + HEAP8[(((this.ptr)+(12))>>0)] = caught; + }; + + this.get_caught = function () { + return HEAP8[(((this.ptr)+(12))>>0)] != 0; + }; + + this.set_rethrown = function (rethrown) { + rethrown = rethrown ? 1 : 0; + HEAP8[(((this.ptr)+(13))>>0)] = rethrown; + }; + + this.get_rethrown = function () { + return HEAP8[(((this.ptr)+(13))>>0)] != 0; + }; + + // Initialize native structure fields. Should be called once after allocated. + this.init = function(type, destructor) { + this.set_type(type); + this.set_destructor(destructor); + this.set_refcount(0); + this.set_caught(false); + this.set_rethrown(false); + } + + this.add_ref = function() { + var value = HEAP32[((this.ptr)>>2)]; + HEAP32[((this.ptr)>>2)] = value + 1; + }; + + // Returns true if last reference released. + this.release_ref = function() { + var prev = HEAP32[((this.ptr)>>2)]; + HEAP32[((this.ptr)>>2)] = prev - 1; + assert(prev > 0); + return prev === 1; + }; + } + + var exceptionLast = 0; + + var uncaughtExceptionCount = 0; + function ___cxa_throw(ptr, type, destructor) { + var info = new ExceptionInfo(ptr); + // Initialize ExceptionInfo content after it was allocated in __cxa_allocate_exception. + info.init(type, destructor); + exceptionLast = ptr; + uncaughtExceptionCount++; + throw ptr + " - Exception catching is disabled, this exception cannot be caught. Compile with -s NO_DISABLE_EXCEPTION_CATCHING or -s EXCEPTION_CATCHING_ALLOWED=[..] to catch."; + } + + function _gmtime_r(time, tmPtr) { + var date = new Date(HEAP32[((time)>>2)]*1000); + HEAP32[((tmPtr)>>2)] = date.getUTCSeconds(); + HEAP32[(((tmPtr)+(4))>>2)] = date.getUTCMinutes(); + HEAP32[(((tmPtr)+(8))>>2)] = date.getUTCHours(); + HEAP32[(((tmPtr)+(12))>>2)] = date.getUTCDate(); + HEAP32[(((tmPtr)+(16))>>2)] = date.getUTCMonth(); + HEAP32[(((tmPtr)+(20))>>2)] = date.getUTCFullYear()-1900; + HEAP32[(((tmPtr)+(24))>>2)] = date.getUTCDay(); + HEAP32[(((tmPtr)+(36))>>2)] = 0; + HEAP32[(((tmPtr)+(32))>>2)] = 0; + var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0); + var yday = ((date.getTime() - start) / (1000 * 60 * 60 * 24))|0; + HEAP32[(((tmPtr)+(28))>>2)] = yday; + // Allocate a string "GMT" for us to point to. + if (!_gmtime_r.GMTString) _gmtime_r.GMTString = allocateUTF8("GMT"); + HEAP32[(((tmPtr)+(40))>>2)] = _gmtime_r.GMTString; + return tmPtr; + } + function ___gmtime_r(a0,a1 + ) { + return _gmtime_r(a0,a1); + } + + function _tzset_impl() { + var currentYear = new Date().getFullYear(); + var winter = new Date(currentYear, 0, 1); + var summer = new Date(currentYear, 6, 1); + var winterOffset = winter.getTimezoneOffset(); + var summerOffset = summer.getTimezoneOffset(); + + // Local standard timezone offset. Local standard time is not adjusted for daylight savings. + // This code uses the fact that getTimezoneOffset returns a greater value during Standard Time versus Daylight Saving Time (DST). + // Thus it determines the expected output during Standard Time, and it compares whether the output of the given date the same (Standard) or less (DST). + var stdTimezoneOffset = Math.max(winterOffset, summerOffset); + + // timezone is specified as seconds west of UTC ("The external variable + // `timezone` shall be set to the difference, in seconds, between + // Coordinated Universal Time (UTC) and local standard time."), the same + // as returned by stdTimezoneOffset. + // See http://pubs.opengroup.org/onlinepubs/009695399/functions/tzset.html + HEAP32[((__get_timezone())>>2)] = stdTimezoneOffset * 60; + + HEAP32[((__get_daylight())>>2)] = Number(winterOffset != summerOffset); + + function extractZone(date) { + var match = date.toTimeString().match(/\(([A-Za-z ]+)\)$/); + return match ? match[1] : "GMT"; + }; + var winterName = extractZone(winter); + var summerName = extractZone(summer); + var winterNamePtr = allocateUTF8(winterName); + var summerNamePtr = allocateUTF8(summerName); + if (summerOffset < winterOffset) { + // Northern hemisphere + HEAP32[((__get_tzname())>>2)] = winterNamePtr; + HEAP32[(((__get_tzname())+(4))>>2)] = summerNamePtr; + } else { + HEAP32[((__get_tzname())>>2)] = summerNamePtr; + HEAP32[(((__get_tzname())+(4))>>2)] = winterNamePtr; + } + } + function _tzset() { + // TODO: Use (malleable) environment variables instead of system settings. + if (_tzset.called) return; + _tzset.called = true; + _tzset_impl(); + } + function _localtime_r(time, tmPtr) { + _tzset(); + var date = new Date(HEAP32[((time)>>2)]*1000); + HEAP32[((tmPtr)>>2)] = date.getSeconds(); + HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); + HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); + HEAP32[(((tmPtr)+(12))>>2)] = date.getDate(); + HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth(); + HEAP32[(((tmPtr)+(20))>>2)] = date.getFullYear()-1900; + HEAP32[(((tmPtr)+(24))>>2)] = date.getDay(); + + var start = new Date(date.getFullYear(), 0, 1); + var yday = ((date.getTime() - start.getTime()) / (1000 * 60 * 60 * 24))|0; + HEAP32[(((tmPtr)+(28))>>2)] = yday; + HEAP32[(((tmPtr)+(36))>>2)] = -(date.getTimezoneOffset() * 60); + + // Attention: DST is in December in South, and some regions don't have DST at all. + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset))|0; + HEAP32[(((tmPtr)+(32))>>2)] = dst; + + var zonePtr = HEAP32[(((__get_tzname())+(dst ? 4 : 0))>>2)]; + HEAP32[(((tmPtr)+(40))>>2)] = zonePtr; + + return tmPtr; + } + function ___localtime_r(a0,a1 + ) { + return _localtime_r(a0,a1); + } + + var PATH = {splitPath:function(filename) { + var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + return splitPathRe.exec(filename).slice(1); + },normalizeArray:function(parts, allowAboveRoot) { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up; up--) { + parts.unshift('..'); + } + } + return parts; + },normalize:function(path) { + var isAbsolute = path.charAt(0) === '/', + trailingSlash = path.substr(-1) === '/'; + // Normalize the path + path = PATH.normalizeArray(path.split('/').filter(function(p) { + return !!p; + }), !isAbsolute).join('/'); + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + return (isAbsolute ? '/' : '') + path; + },dirname:function(path) { + var result = PATH.splitPath(path), + root = result[0], + dir = result[1]; + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.substr(0, dir.length - 1); + } + return root + dir; + },basename:function(path) { + // EMSCRIPTEN return '/'' for '/', not an empty string + if (path === '/') return '/'; + path = PATH.normalize(path); + path = path.replace(/\/$/, ""); + var lastSlash = path.lastIndexOf('/'); + if (lastSlash === -1) return path; + return path.substr(lastSlash+1); + },extname:function(path) { + return PATH.splitPath(path)[3]; + },join:function() { + var paths = Array.prototype.slice.call(arguments, 0); + return PATH.normalize(paths.join('/')); + },join2:function(l, r) { + return PATH.normalize(l + '/' + r); + }}; + + function getRandomDevice() { + if (typeof crypto === 'object' && typeof crypto['getRandomValues'] === 'function') { + // for modern web browsers + var randomBuffer = new Uint8Array(1); + return function() { crypto.getRandomValues(randomBuffer); return randomBuffer[0]; }; + } else + if (ENVIRONMENT_IS_NODE) { + // for nodejs with or without crypto support included + try { + var crypto_module = require('crypto'); + // nodejs has crypto support + return function() { return crypto_module['randomBytes'](1)[0]; }; + } catch (e) { + // nodejs doesn't have crypto support + } + } + // we couldn't find a proper implementation, as Math.random() is not suitable for /dev/random, see emscripten-core/emscripten/pull/7096 + return function() { abort("no cryptographic support found for randomDevice. consider polyfilling it if you want to use something insecure like Math.random(), e.g. put this in a --pre-js: var crypto = { getRandomValues: function(array) { for (var i = 0; i < array.length; i++) array[i] = (Math.random()*256)|0 } };"); }; + } + + var PATH_FS = {resolve:function() { + var resolvedPath = '', + resolvedAbsolute = false; + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? arguments[i] : FS.cwd(); + // Skip empty and invalid entries + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + return ''; // an invalid portion invalidates the whole thing + } + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charAt(0) === '/'; + } + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter(function(p) { + return !!p; + }), !resolvedAbsolute).join('/'); + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; + },relative:function(from, to) { + from = PATH_FS.resolve(from).substr(1); + to = PATH_FS.resolve(to).substr(1); + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join('/'); + }}; + + var TTY = {ttys:[],init:function () { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // currently, FS.init does not distinguish if process.stdin is a file or TTY + // // device, it always assumes it's a TTY device. because of this, we're forcing + // // process.stdin to UTF8 encoding to at least make stdin reading compatible + // // with text files until FS.init can be refactored. + // process['stdin']['setEncoding']('utf8'); + // } + },shutdown:function() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)? + // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation + // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists? + // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle + // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call + // process['stdin']['pause'](); + // } + },register:function(dev, ops) { + TTY.ttys[dev] = { input: [], output: [], ops: ops }; + FS.registerDevice(dev, TTY.stream_ops); + },stream_ops:{open:function(stream) { + var tty = TTY.ttys[stream.node.rdev]; + if (!tty) { + throw new FS.ErrnoError(43); + } + stream.tty = tty; + stream.seekable = false; + },close:function(stream) { + // flush any pending line data + stream.tty.ops.flush(stream.tty); + },flush:function(stream) { + stream.tty.ops.flush(stream.tty); + },read:function(stream, buffer, offset, length, pos /* ignored */) { + if (!stream.tty || !stream.tty.ops.get_char) { + throw new FS.ErrnoError(60); + } + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = stream.tty.ops.get_char(stream.tty); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.timestamp = Date.now(); + } + return bytesRead; + },write:function(stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.put_char) { + throw new FS.ErrnoError(60); + } + try { + for (var i = 0; i < length; i++) { + stream.tty.ops.put_char(stream.tty, buffer[offset+i]); + } + } catch (e) { + throw new FS.ErrnoError(29); + } + if (length) { + stream.node.timestamp = Date.now(); + } + return i; + }},default_tty_ops:{get_char:function(tty) { + if (!tty.input.length) { + var result = null; + if (ENVIRONMENT_IS_NODE) { + // we will read data by chunks of BUFSIZE + var BUFSIZE = 256; + var buf = Buffer.alloc(BUFSIZE); + var bytesRead = 0; + + try { + bytesRead = nodeFS.readSync(process.stdin.fd, buf, 0, BUFSIZE, null); + } catch(e) { + // Cross-platform differences: on Windows, reading EOF throws an exception, but on other OSes, + // reading EOF returns 0. Uniformize behavior by treating the EOF exception to return 0. + if (e.toString().includes('EOF')) bytesRead = 0; + else throw e; + } + + if (bytesRead > 0) { + result = buf.slice(0, bytesRead).toString('utf-8'); + } else { + result = null; + } + } else + if (typeof window != 'undefined' && + typeof window.prompt == 'function') { + // Browser. + result = window.prompt('Input: '); // returns null on cancel + if (result !== null) { + result += '\n'; + } + } else if (typeof readline == 'function') { + // Command line. + result = readline(); + if (result !== null) { + result += '\n'; + } + } + if (!result) { + return null; + } + tty.input = intArrayFromString(result, true); + } + return tty.input.shift(); + },put_char:function(tty, val) { + if (val === null || val === 10) { + out(UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle. + } + },flush:function(tty) { + if (tty.output && tty.output.length > 0) { + out(UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } + }},default_tty1_ops:{put_char:function(tty, val) { + if (val === null || val === 10) { + err(UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); + } + },flush:function(tty) { + if (tty.output && tty.output.length > 0) { + err(UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } + }}}; + + function zeroMemory(address, size) { + HEAPU8.fill(0, address, address + size); + } + + function alignMemory(size, alignment) { + assert(alignment, "alignment argument is required"); + return Math.ceil(size / alignment) * alignment; + } + function mmapAlloc(size) { + abort('internal error: mmapAlloc called but `memalign` native symbol not exported'); + } + var MEMFS = {ops_table:null,mount:function(mount) { + return MEMFS.createNode(null, '/', 16384 | 511 /* 0777 */, 0); + },createNode:function(parent, name, mode, dev) { + if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { + // no supported + throw new FS.ErrnoError(63); + } + if (!MEMFS.ops_table) { + MEMFS.ops_table = { + dir: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + lookup: MEMFS.node_ops.lookup, + mknod: MEMFS.node_ops.mknod, + rename: MEMFS.node_ops.rename, + unlink: MEMFS.node_ops.unlink, + rmdir: MEMFS.node_ops.rmdir, + readdir: MEMFS.node_ops.readdir, + symlink: MEMFS.node_ops.symlink + }, + stream: { + llseek: MEMFS.stream_ops.llseek + } + }, + file: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: { + llseek: MEMFS.stream_ops.llseek, + read: MEMFS.stream_ops.read, + write: MEMFS.stream_ops.write, + allocate: MEMFS.stream_ops.allocate, + mmap: MEMFS.stream_ops.mmap, + msync: MEMFS.stream_ops.msync + } + }, + link: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + readlink: MEMFS.node_ops.readlink + }, + stream: {} + }, + chrdev: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: FS.chrdev_stream_ops + } + }; + } + var node = FS.createNode(parent, name, mode, dev); + if (FS.isDir(node.mode)) { + node.node_ops = MEMFS.ops_table.dir.node; + node.stream_ops = MEMFS.ops_table.dir.stream; + node.contents = {}; + } else if (FS.isFile(node.mode)) { + node.node_ops = MEMFS.ops_table.file.node; + node.stream_ops = MEMFS.ops_table.file.stream; + node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity. + // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred + // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size + // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme. + node.contents = null; + } else if (FS.isLink(node.mode)) { + node.node_ops = MEMFS.ops_table.link.node; + node.stream_ops = MEMFS.ops_table.link.stream; + } else if (FS.isChrdev(node.mode)) { + node.node_ops = MEMFS.ops_table.chrdev.node; + node.stream_ops = MEMFS.ops_table.chrdev.stream; + } + node.timestamp = Date.now(); + // add the new node to the parent + if (parent) { + parent.contents[name] = node; + parent.timestamp = node.timestamp; + } + return node; + },getFileDataAsTypedArray:function(node) { + if (!node.contents) return new Uint8Array(0); + if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes. + return new Uint8Array(node.contents); + },expandFileStorage:function(node, newCapacity) { + var prevCapacity = node.contents ? node.contents.length : 0; + if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough. + // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity. + // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to + // avoid overshooting the allocation cap by a very large margin. + var CAPACITY_DOUBLING_MAX = 1024 * 1024; + newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0); + if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. + var oldContents = node.contents; + node.contents = new Uint8Array(newCapacity); // Allocate new storage. + if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage. + },resizeFileStorage:function(node, newSize) { + if (node.usedBytes == newSize) return; + if (newSize == 0) { + node.contents = null; // Fully decommit when requesting a resize to zero. + node.usedBytes = 0; + } else { + var oldContents = node.contents; + node.contents = new Uint8Array(newSize); // Allocate new storage. + if (oldContents) { + node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage. + } + node.usedBytes = newSize; + } + },node_ops:{getattr:function(node) { + var attr = {}; + // device numbers reuse inode numbers. + attr.dev = FS.isChrdev(node.mode) ? node.id : 1; + attr.ino = node.id; + attr.mode = node.mode; + attr.nlink = 1; + attr.uid = 0; + attr.gid = 0; + attr.rdev = node.rdev; + if (FS.isDir(node.mode)) { + attr.size = 4096; + } else if (FS.isFile(node.mode)) { + attr.size = node.usedBytes; + } else if (FS.isLink(node.mode)) { + attr.size = node.link.length; + } else { + attr.size = 0; + } + attr.atime = new Date(node.timestamp); + attr.mtime = new Date(node.timestamp); + attr.ctime = new Date(node.timestamp); + // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), + // but this is not required by the standard. + attr.blksize = 4096; + attr.blocks = Math.ceil(attr.size / attr.blksize); + return attr; + },setattr:function(node, attr) { + if (attr.mode !== undefined) { + node.mode = attr.mode; + } + if (attr.timestamp !== undefined) { + node.timestamp = attr.timestamp; + } + if (attr.size !== undefined) { + MEMFS.resizeFileStorage(node, attr.size); + } + },lookup:function(parent, name) { + throw FS.genericErrors[44]; + },mknod:function(parent, name, mode, dev) { + return MEMFS.createNode(parent, name, mode, dev); + },rename:function(old_node, new_dir, new_name) { + // if we're overwriting a directory at new_name, make sure it's empty. + if (FS.isDir(old_node.mode)) { + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + } + if (new_node) { + for (var i in new_node.contents) { + throw new FS.ErrnoError(55); + } + } + } + // do the internal rewiring + delete old_node.parent.contents[old_node.name]; + old_node.parent.timestamp = Date.now() + old_node.name = new_name; + new_dir.contents[new_name] = old_node; + new_dir.timestamp = old_node.parent.timestamp; + old_node.parent = new_dir; + },unlink:function(parent, name) { + delete parent.contents[name]; + parent.timestamp = Date.now(); + },rmdir:function(parent, name) { + var node = FS.lookupNode(parent, name); + for (var i in node.contents) { + throw new FS.ErrnoError(55); + } + delete parent.contents[name]; + parent.timestamp = Date.now(); + },readdir:function(node) { + var entries = ['.', '..']; + for (var key in node.contents) { + if (!node.contents.hasOwnProperty(key)) { + continue; + } + entries.push(key); + } + return entries; + },symlink:function(parent, newname, oldpath) { + var node = MEMFS.createNode(parent, newname, 511 /* 0777 */ | 40960, 0); + node.link = oldpath; + return node; + },readlink:function(node) { + if (!FS.isLink(node.mode)) { + throw new FS.ErrnoError(28); + } + return node.link; + }},stream_ops:{read:function(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= stream.node.usedBytes) return 0; + var size = Math.min(stream.node.usedBytes - position, length); + assert(size >= 0); + if (size > 8 && contents.subarray) { // non-trivial, and typed array + buffer.set(contents.subarray(position, position + size), offset); + } else { + for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]; + } + return size; + },write:function(stream, buffer, offset, length, position, canOwn) { + // The data buffer should be a typed array view + assert(!(buffer instanceof ArrayBuffer)); + // If the buffer is located in main memory (HEAP), and if + // memory can grow, we can't hold on to references of the + // memory buffer, as they may get invalidated. That means we + // need to do copy its contents. + if (buffer.buffer === HEAP8.buffer) { + canOwn = false; + } + + if (!length) return 0; + var node = stream.node; + node.timestamp = Date.now(); + + if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array? + if (canOwn) { + assert(position === 0, 'canOwn must imply no weird position inside the file'); + node.contents = buffer.subarray(offset, offset + length); + node.usedBytes = length; + return length; + } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. + node.contents = buffer.slice(offset, offset + length); + node.usedBytes = length; + return length; + } else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file? + node.contents.set(buffer.subarray(offset, offset + length), position); + return length; + } + } + + // Appending to an existing file and we need to reallocate, or source data did not come as a typed array. + MEMFS.expandFileStorage(node, position+length); + if (node.contents.subarray && buffer.subarray) { + // Use typed array write which is available. + node.contents.set(buffer.subarray(offset, offset + length), position); + } else { + for (var i = 0; i < length; i++) { + node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not. + } + } + node.usedBytes = Math.max(node.usedBytes, position + length); + return length; + },llseek:function(stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.usedBytes; + } + } + if (position < 0) { + throw new FS.ErrnoError(28); + } + return position; + },allocate:function(stream, offset, length) { + MEMFS.expandFileStorage(stream.node, offset + length); + stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length); + },mmap:function(stream, address, length, position, prot, flags) { + if (address !== 0) { + // We don't currently support location hints for the address of the mapping + throw new FS.ErrnoError(28); + } + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + var ptr; + var allocated; + var contents = stream.node.contents; + // Only make a new copy when MAP_PRIVATE is specified. + if (!(flags & 2) && contents.buffer === buffer) { + // We can't emulate MAP_SHARED when the file is not backed by the buffer + // we're mapping to (e.g. the HEAP buffer). + allocated = false; + ptr = contents.byteOffset; + } else { + // Try to avoid unnecessary slices. + if (position > 0 || position + length < contents.length) { + if (contents.subarray) { + contents = contents.subarray(position, position + length); + } else { + contents = Array.prototype.slice.call(contents, position, position + length); + } + } + allocated = true; + ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + HEAP8.set(contents, ptr); + } + return { ptr: ptr, allocated: allocated }; + },msync:function(stream, buffer, offset, length, mmapFlags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (mmapFlags & 2) { + // MAP_PRIVATE calls need not to be synced back to underlying fs + return 0; + } + + var bytesWritten = MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); + // should we check if bytesWritten and length are the same? + return 0; + }}}; + + function asyncLoad(url, onload, onerror, noRunDep) { + var dep = !noRunDep ? getUniqueRunDependency('al ' + url) : ''; + readAsync(url, function(arrayBuffer) { + assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).'); + onload(new Uint8Array(arrayBuffer)); + if (dep) removeRunDependency(dep); + }, function(event) { + if (onerror) { + onerror(); + } else { + throw 'Loading data file "' + url + '" failed.'; + } + }); + if (dep) addRunDependency(dep); + } + + var ERRNO_CODES = {}; + var NODEFS = {isWindows:false,staticInit:function() { + NODEFS.isWindows = !!process.platform.match(/^win/); + var flags = process["binding"]("constants"); + // Node.js 4 compatibility: it has no namespaces for constants + if (flags["fs"]) { + flags = flags["fs"]; + } + NODEFS.flagsForNodeMap = { + "1024": flags["O_APPEND"], + "64": flags["O_CREAT"], + "128": flags["O_EXCL"], + "256": flags["O_NOCTTY"], + "0": flags["O_RDONLY"], + "2": flags["O_RDWR"], + "4096": flags["O_SYNC"], + "512": flags["O_TRUNC"], + "1": flags["O_WRONLY"] + }; + },convertNodeCode:function(e) { + var code = e.code; + assert(code in ERRNO_CODES); + return ERRNO_CODES[code]; + },mount:function (mount) { + assert(ENVIRONMENT_IS_NODE); + return NODEFS.createNode(null, '/', NODEFS.getMode(mount.opts.root), 0); + },createNode:function (parent, name, mode, dev) { + if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) { + throw new FS.ErrnoError(28); + } + var node = FS.createNode(parent, name, mode); + node.node_ops = NODEFS.node_ops; + node.stream_ops = NODEFS.stream_ops; + return node; + },getMode:function (path) { + var stat; + try { + stat = fs.lstatSync(path); + if (NODEFS.isWindows) { + // Node.js on Windows never represents permission bit 'x', so + // propagate read bits to execute bits + stat.mode = stat.mode | ((stat.mode & 292) >> 2); + } + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + return stat.mode; + },realPath:function (node) { + var parts = []; + while (node.parent !== node) { + parts.push(node.name); + node = node.parent; + } + parts.push(node.mount.opts.root); + parts.reverse(); + return PATH.join.apply(null, parts); + },flagsForNode:function(flags) { + flags &= ~0x200000 /*O_PATH*/; // Ignore this flag from musl, otherwise node.js fails to open the file. + flags &= ~0x800 /*O_NONBLOCK*/; // Ignore this flag from musl, otherwise node.js fails to open the file. + flags &= ~0x8000 /*O_LARGEFILE*/; // Ignore this flag from musl, otherwise node.js fails to open the file. + flags &= ~0x80000 /*O_CLOEXEC*/; // Some applications may pass it; it makes no sense for a single process. + var newFlags = 0; + for (var k in NODEFS.flagsForNodeMap) { + if (flags & k) { + newFlags |= NODEFS.flagsForNodeMap[k]; + flags ^= k; + } + } + + if (!flags) { + return newFlags; + } else { + throw new FS.ErrnoError(28); + } + },node_ops:{getattr:function(node) { + var path = NODEFS.realPath(node); + var stat; + try { + stat = fs.lstatSync(path); + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + // node.js v0.10.20 doesn't report blksize and blocks on Windows. Fake them with default blksize of 4096. + // See http://support.microsoft.com/kb/140365 + if (NODEFS.isWindows && !stat.blksize) { + stat.blksize = 4096; + } + if (NODEFS.isWindows && !stat.blocks) { + stat.blocks = (stat.size+stat.blksize-1)/stat.blksize|0; + } + return { + dev: stat.dev, + ino: stat.ino, + mode: stat.mode, + nlink: stat.nlink, + uid: stat.uid, + gid: stat.gid, + rdev: stat.rdev, + size: stat.size, + atime: stat.atime, + mtime: stat.mtime, + ctime: stat.ctime, + blksize: stat.blksize, + blocks: stat.blocks + }; + },setattr:function(node, attr) { + var path = NODEFS.realPath(node); + try { + if (attr.mode !== undefined) { + fs.chmodSync(path, attr.mode); + // update the common node structure mode as well + node.mode = attr.mode; + } + if (attr.timestamp !== undefined) { + var date = new Date(attr.timestamp); + fs.utimesSync(path, date, date); + } + if (attr.size !== undefined) { + fs.truncateSync(path, attr.size); + } + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + },lookup:function (parent, name) { + var path = PATH.join2(NODEFS.realPath(parent), name); + var mode = NODEFS.getMode(path); + return NODEFS.createNode(parent, name, mode); + },mknod:function (parent, name, mode, dev) { + var node = NODEFS.createNode(parent, name, mode, dev); + // create the backing node for this in the fs root as well + var path = NODEFS.realPath(node); + try { + if (FS.isDir(node.mode)) { + fs.mkdirSync(path, node.mode); + } else { + fs.writeFileSync(path, '', { mode: node.mode }); + } + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + return node; + },rename:function (oldNode, newDir, newName) { + var oldPath = NODEFS.realPath(oldNode); + var newPath = PATH.join2(NODEFS.realPath(newDir), newName); + try { + fs.renameSync(oldPath, newPath); + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + oldNode.name = newName; + },unlink:function(parent, name) { + var path = PATH.join2(NODEFS.realPath(parent), name); + try { + fs.unlinkSync(path); + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + },rmdir:function(parent, name) { + var path = PATH.join2(NODEFS.realPath(parent), name); + try { + fs.rmdirSync(path); + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + },readdir:function(node) { + var path = NODEFS.realPath(node); + try { + return fs.readdirSync(path); + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + },symlink:function(parent, newName, oldPath) { + var newPath = PATH.join2(NODEFS.realPath(parent), newName); + try { + fs.symlinkSync(oldPath, newPath); + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + },readlink:function(node) { + var path = NODEFS.realPath(node); + try { + path = fs.readlinkSync(path); + path = NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root), path); + return path; + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + }},stream_ops:{open:function (stream) { + var path = NODEFS.realPath(stream.node); + try { + if (FS.isFile(stream.node.mode)) { + stream.nfd = fs.openSync(path, NODEFS.flagsForNode(stream.flags)); + } + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + },close:function (stream) { + try { + if (FS.isFile(stream.node.mode) && stream.nfd) { + fs.closeSync(stream.nfd); + } + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + },read:function (stream, buffer, offset, length, position) { + // Node.js < 6 compatibility: node errors on 0 length reads + if (length === 0) return 0; + try { + return fs.readSync(stream.nfd, Buffer.from(buffer.buffer), offset, length, position); + } catch (e) { + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + },write:function (stream, buffer, offset, length, position) { + try { + return fs.writeSync(stream.nfd, Buffer.from(buffer.buffer), offset, length, position); + } catch (e) { + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + },llseek:function (stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + try { + var stat = fs.fstatSync(stream.nfd); + position += stat.size; + } catch (e) { + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); + } + } + } + + if (position < 0) { + throw new FS.ErrnoError(28); + } + + return position; + },mmap:function(stream, address, length, position, prot, flags) { + if (address !== 0) { + // We don't currently support location hints for the address of the mapping + throw new FS.ErrnoError(28); + } + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + + var ptr = mmapAlloc(length); + + NODEFS.stream_ops.read(stream, HEAP8, ptr, length, position); + return { ptr: ptr, allocated: true }; + },msync:function(stream, buffer, offset, length, mmapFlags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (mmapFlags & 2) { + // MAP_PRIVATE calls need not to be synced back to underlying fs + return 0; + } + + var bytesWritten = NODEFS.stream_ops.write(stream, buffer, 0, length, offset, false); + return 0; + }}}; + + var WORKERFS = {DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function (mount) { + assert(ENVIRONMENT_IS_WORKER); + if (!WORKERFS.reader) WORKERFS.reader = new FileReaderSync(); + var root = WORKERFS.createNode(null, '/', WORKERFS.DIR_MODE, 0); + var createdParents = {}; + function ensureParent(path) { + // return the parent node, creating subdirs as necessary + var parts = path.split('/'); + var parent = root; + for (var i = 0; i < parts.length-1; i++) { + var curr = parts.slice(0, i+1).join('/'); + // Issue 4254: Using curr as a node name will prevent the node + // from being found in FS.nameTable when FS.open is called on + // a path which holds a child of this node, + // given that all FS functions assume node names + // are just their corresponding parts within their given path, + // rather than incremental aggregates which include their parent's + // directories. + if (!createdParents[curr]) { + createdParents[curr] = WORKERFS.createNode(parent, parts[i], WORKERFS.DIR_MODE, 0); + } + parent = createdParents[curr]; + } + return parent; + } + function base(path) { + var parts = path.split('/'); + return parts[parts.length-1]; + } + // We also accept FileList here, by using Array.prototype + Array.prototype.forEach.call(mount.opts["files"] || [], function(file) { + WORKERFS.createNode(ensureParent(file.name), base(file.name), WORKERFS.FILE_MODE, 0, file, file.lastModifiedDate); + }); + (mount.opts["blobs"] || []).forEach(function(obj) { + WORKERFS.createNode(ensureParent(obj["name"]), base(obj["name"]), WORKERFS.FILE_MODE, 0, obj["data"]); + }); + (mount.opts["packages"] || []).forEach(function(pack) { + pack['metadata'].files.forEach(function(file) { + var name = file.filename.substr(1); // remove initial slash + WORKERFS.createNode(ensureParent(name), base(name), WORKERFS.FILE_MODE, 0, pack['blob'].slice(file.start, file.end)); + }); + }); + return root; + },createNode:function (parent, name, mode, dev, contents, mtime) { + var node = FS.createNode(parent, name, mode); + node.mode = mode; + node.node_ops = WORKERFS.node_ops; + node.stream_ops = WORKERFS.stream_ops; + node.timestamp = (mtime || new Date).getTime(); + assert(WORKERFS.FILE_MODE !== WORKERFS.DIR_MODE); + if (mode === WORKERFS.FILE_MODE) { + node.size = contents.size; + node.contents = contents; + } else { + node.size = 4096; + node.contents = {}; + } + if (parent) { + parent.contents[name] = node; + } + return node; + },node_ops:{getattr:function(node) { + return { + dev: 1, + ino: node.id, + mode: node.mode, + nlink: 1, + uid: 0, + gid: 0, + rdev: undefined, + size: node.size, + atime: new Date(node.timestamp), + mtime: new Date(node.timestamp), + ctime: new Date(node.timestamp), + blksize: 4096, + blocks: Math.ceil(node.size / 4096), + }; + },setattr:function(node, attr) { + if (attr.mode !== undefined) { + node.mode = attr.mode; + } + if (attr.timestamp !== undefined) { + node.timestamp = attr.timestamp; + } + },lookup:function(parent, name) { + throw new FS.ErrnoError(44); + },mknod:function (parent, name, mode, dev) { + throw new FS.ErrnoError(63); + },rename:function (oldNode, newDir, newName) { + throw new FS.ErrnoError(63); + },unlink:function(parent, name) { + throw new FS.ErrnoError(63); + },rmdir:function(parent, name) { + throw new FS.ErrnoError(63); + },readdir:function(node) { + var entries = ['.', '..']; + for (var key in node.contents) { + if (!node.contents.hasOwnProperty(key)) { + continue; + } + entries.push(key); + } + return entries; + },symlink:function(parent, newName, oldPath) { + throw new FS.ErrnoError(63); + },readlink:function(node) { + throw new FS.ErrnoError(63); + }},stream_ops:{read:function (stream, buffer, offset, length, position) { + if (position >= stream.node.size) return 0; + var chunk = stream.node.contents.slice(position, position + length); + var ab = WORKERFS.reader.readAsArrayBuffer(chunk); + buffer.set(new Uint8Array(ab), offset); + return chunk.size; + },write:function (stream, buffer, offset, length, position) { + throw new FS.ErrnoError(29); + },llseek:function (stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.size; + } + } + if (position < 0) { + throw new FS.ErrnoError(28); + } + return position; + }}}; + + var ERRNO_MESSAGES = {0:"Success",1:"Arg list too long",2:"Permission denied",3:"Address already in use",4:"Address not available",5:"Address family not supported by protocol family",6:"No more processes",7:"Socket already connected",8:"Bad file number",9:"Trying to read unreadable message",10:"Mount device busy",11:"Operation canceled",12:"No children",13:"Connection aborted",14:"Connection refused",15:"Connection reset by peer",16:"File locking deadlock error",17:"Destination address required",18:"Math arg out of domain of func",19:"Quota exceeded",20:"File exists",21:"Bad address",22:"File too large",23:"Host is unreachable",24:"Identifier removed",25:"Illegal byte sequence",26:"Connection already in progress",27:"Interrupted system call",28:"Invalid argument",29:"I/O error",30:"Socket is already connected",31:"Is a directory",32:"Too many symbolic links",33:"Too many open files",34:"Too many links",35:"Message too long",36:"Multihop attempted",37:"File or path name too long",38:"Network interface is not configured",39:"Connection reset by network",40:"Network is unreachable",41:"Too many open files in system",42:"No buffer space available",43:"No such device",44:"No such file or directory",45:"Exec format error",46:"No record locks available",47:"The link has been severed",48:"Not enough core",49:"No message of desired type",50:"Protocol not available",51:"No space left on device",52:"Function not implemented",53:"Socket is not connected",54:"Not a directory",55:"Directory not empty",56:"State not recoverable",57:"Socket operation on non-socket",59:"Not a typewriter",60:"No such device or address",61:"Value too large for defined data type",62:"Previous owner died",63:"Not super-user",64:"Broken pipe",65:"Protocol error",66:"Unknown protocol",67:"Protocol wrong type for socket",68:"Math result not representable",69:"Read only file system",70:"Illegal seek",71:"No such process",72:"Stale file handle",73:"Connection timed out",74:"Text file busy",75:"Cross-device link",100:"Device not a stream",101:"Bad font file fmt",102:"Invalid slot",103:"Invalid request code",104:"No anode",105:"Block device required",106:"Channel number out of range",107:"Level 3 halted",108:"Level 3 reset",109:"Link number out of range",110:"Protocol driver not attached",111:"No CSI structure available",112:"Level 2 halted",113:"Invalid exchange",114:"Invalid request descriptor",115:"Exchange full",116:"No data (for no delay io)",117:"Timer expired",118:"Out of streams resources",119:"Machine is not on the network",120:"Package not installed",121:"The object is remote",122:"Advertise error",123:"Srmount error",124:"Communication error on send",125:"Cross mount point (not really error)",126:"Given log. name not unique",127:"f.d. invalid for this operation",128:"Remote address changed",129:"Can access a needed shared lib",130:"Accessing a corrupted shared lib",131:".lib section in a.out corrupted",132:"Attempting to link in too many libs",133:"Attempting to exec a shared library",135:"Streams pipe error",136:"Too many users",137:"Socket type not supported",138:"Not supported",139:"Protocol family not supported",140:"Can't send after socket shutdown",141:"Too many references",142:"Host is down",148:"No medium (in tape drive)",156:"Level 2 not synchronized"}; + var FS = {root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(path, opts) { + path = PATH_FS.resolve(FS.cwd(), path); + opts = opts || {}; + + if (!path) return { path: '', node: null }; + + var defaults = { + follow_mount: true, + recurse_count: 0 + }; + for (var key in defaults) { + if (opts[key] === undefined) { + opts[key] = defaults[key]; + } + } + + if (opts.recurse_count > 8) { // max recursive lookup of 8 + throw new FS.ErrnoError(32); + } + + // split the path + var parts = PATH.normalizeArray(path.split('/').filter(function(p) { + return !!p; + }), false); + + // start at the root + var current = FS.root; + var current_path = '/'; + + for (var i = 0; i < parts.length; i++) { + var islast = (i === parts.length-1); + if (islast && opts.parent) { + // stop resolving + break; + } + + current = FS.lookupNode(current, parts[i]); + current_path = PATH.join2(current_path, parts[i]); + + // jump to the mount's root node if this is a mountpoint + if (FS.isMountpoint(current)) { + if (!islast || (islast && opts.follow_mount)) { + current = current.mounted.root; + } + } + + // by default, lookupPath will not follow a symlink if it is the final path component. + // setting opts.follow = true will override this behavior. + if (!islast || opts.follow) { + var count = 0; + while (FS.isLink(current.mode)) { + var link = FS.readlink(current_path); + current_path = PATH_FS.resolve(PATH.dirname(current_path), link); + + var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count }); + current = lookup.node; + + if (count++ > 40) { // limit max consecutive symlinks to 40 (SYMLOOP_MAX). + throw new FS.ErrnoError(32); + } + } + } + } + + return { path: current_path, node: current }; + },getPath:function(node) { + var path; + while (true) { + if (FS.isRoot(node)) { + var mount = node.mount.mountpoint; + if (!path) return mount; + return mount[mount.length-1] !== '/' ? mount + '/' + path : mount + path; + } + path = path ? node.name + '/' + path : node.name; + node = node.parent; + } + },hashName:function(parentid, name) { + var hash = 0; + + for (var i = 0; i < name.length; i++) { + hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; + } + return ((parentid + hash) >>> 0) % FS.nameTable.length; + },hashAddNode:function(node) { + var hash = FS.hashName(node.parent.id, node.name); + node.name_next = FS.nameTable[hash]; + FS.nameTable[hash] = node; + },hashRemoveNode:function(node) { + var hash = FS.hashName(node.parent.id, node.name); + if (FS.nameTable[hash] === node) { + FS.nameTable[hash] = node.name_next; + } else { + var current = FS.nameTable[hash]; + while (current) { + if (current.name_next === node) { + current.name_next = node.name_next; + break; + } + current = current.name_next; + } + } + },lookupNode:function(parent, name) { + var errCode = FS.mayLookup(parent); + if (errCode) { + throw new FS.ErrnoError(errCode, parent); + } + var hash = FS.hashName(parent.id, name); + for (var node = FS.nameTable[hash]; node; node = node.name_next) { + var nodeName = node.name; + if (node.parent.id === parent.id && nodeName === name) { + return node; + } + } + // if we failed to find it in the cache, call into the VFS + return FS.lookup(parent, name); + },createNode:function(parent, name, mode, rdev) { + assert(typeof parent === 'object') + var node = new FS.FSNode(parent, name, mode, rdev); + + FS.hashAddNode(node); + + return node; + },destroyNode:function(node) { + FS.hashRemoveNode(node); + },isRoot:function(node) { + return node === node.parent; + },isMountpoint:function(node) { + return !!node.mounted; + },isFile:function(mode) { + return (mode & 61440) === 32768; + },isDir:function(mode) { + return (mode & 61440) === 16384; + },isLink:function(mode) { + return (mode & 61440) === 40960; + },isChrdev:function(mode) { + return (mode & 61440) === 8192; + },isBlkdev:function(mode) { + return (mode & 61440) === 24576; + },isFIFO:function(mode) { + return (mode & 61440) === 4096; + },isSocket:function(mode) { + return (mode & 49152) === 49152; + },flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str) { + var flags = FS.flagModes[str]; + if (typeof flags === 'undefined') { + throw new Error('Unknown file open mode: ' + str); + } + return flags; + },flagsToPermissionString:function(flag) { + var perms = ['r', 'w', 'rw'][flag & 3]; + if ((flag & 512)) { + perms += 'w'; + } + return perms; + },nodePermissions:function(node, perms) { + if (FS.ignorePermissions) { + return 0; + } + // return 0 if any user, group or owner bits are set. + if (perms.includes('r') && !(node.mode & 292)) { + return 2; + } else if (perms.includes('w') && !(node.mode & 146)) { + return 2; + } else if (perms.includes('x') && !(node.mode & 73)) { + return 2; + } + return 0; + },mayLookup:function(dir) { + var errCode = FS.nodePermissions(dir, 'x'); + if (errCode) return errCode; + if (!dir.node_ops.lookup) return 2; + return 0; + },mayCreate:function(dir, name) { + try { + var node = FS.lookupNode(dir, name); + return 20; + } catch (e) { + } + return FS.nodePermissions(dir, 'wx'); + },mayDelete:function(dir, name, isdir) { + var node; + try { + node = FS.lookupNode(dir, name); + } catch (e) { + return e.errno; + } + var errCode = FS.nodePermissions(dir, 'wx'); + if (errCode) { + return errCode; + } + if (isdir) { + if (!FS.isDir(node.mode)) { + return 54; + } + if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { + return 10; + } + } else { + if (FS.isDir(node.mode)) { + return 31; + } + } + return 0; + },mayOpen:function(node, flags) { + if (!node) { + return 44; + } + if (FS.isLink(node.mode)) { + return 32; + } else if (FS.isDir(node.mode)) { + if (FS.flagsToPermissionString(flags) !== 'r' || // opening for write + (flags & 512)) { // TODO: check for O_SEARCH? (== search for dir only) + return 31; + } + } + return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); + },MAX_OPEN_FDS:4096,nextfd:function(fd_start, fd_end) { + fd_start = fd_start || 0; + fd_end = fd_end || FS.MAX_OPEN_FDS; + for (var fd = fd_start; fd <= fd_end; fd++) { + if (!FS.streams[fd]) { + return fd; + } + } + throw new FS.ErrnoError(33); + },getStream:function(fd) { + return FS.streams[fd]; + },createStream:function(stream, fd_start, fd_end) { + if (!FS.FSStream) { + FS.FSStream = /** @constructor */ function(){}; + FS.FSStream.prototype = { + object: { + get: function() { return this.node; }, + set: function(val) { this.node = val; } + }, + isRead: { + get: function() { return (this.flags & 2097155) !== 1; } + }, + isWrite: { + get: function() { return (this.flags & 2097155) !== 0; } + }, + isAppend: { + get: function() { return (this.flags & 1024); } + } + }; + } + // clone it, so we can return an instance of FSStream + var newStream = new FS.FSStream(); + for (var p in stream) { + newStream[p] = stream[p]; + } + stream = newStream; + var fd = FS.nextfd(fd_start, fd_end); + stream.fd = fd; + FS.streams[fd] = stream; + return stream; + },closeStream:function(fd) { + FS.streams[fd] = null; + },chrdev_stream_ops:{open:function(stream) { + var device = FS.getDevice(stream.node.rdev); + // override node's stream ops with the device's + stream.stream_ops = device.stream_ops; + // forward the open call + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + },llseek:function() { + throw new FS.ErrnoError(70); + }},major:function(dev) { + return ((dev) >> 8); + },minor:function(dev) { + return ((dev) & 0xff); + },makedev:function(ma, mi) { + return ((ma) << 8 | (mi)); + },registerDevice:function(dev, ops) { + FS.devices[dev] = { stream_ops: ops }; + },getDevice:function(dev) { + return FS.devices[dev]; + },getMounts:function(mount) { + var mounts = []; + var check = [mount]; + + while (check.length) { + var m = check.pop(); + + mounts.push(m); + + check.push.apply(check, m.mounts); + } + + return mounts; + },syncfs:function(populate, callback) { + if (typeof(populate) === 'function') { + callback = populate; + populate = false; + } + + FS.syncFSRequests++; + + if (FS.syncFSRequests > 1) { + err('warning: ' + FS.syncFSRequests + ' FS.syncfs operations in flight at once, probably just doing extra work'); + } + + var mounts = FS.getMounts(FS.root.mount); + var completed = 0; + + function doCallback(errCode) { + assert(FS.syncFSRequests > 0); + FS.syncFSRequests--; + return callback(errCode); + } + + function done(errCode) { + if (errCode) { + if (!done.errored) { + done.errored = true; + return doCallback(errCode); + } + return; + } + if (++completed >= mounts.length) { + doCallback(null); + } + }; + + // sync all mounts + mounts.forEach(function (mount) { + if (!mount.type.syncfs) { + return done(null); + } + mount.type.syncfs(mount, populate, done); + }); + },mount:function(type, opts, mountpoint) { + if (typeof type === 'string') { + // The filesystem was not included, and instead we have an error + // message stored in the variable. + throw type; + } + var root = mountpoint === '/'; + var pseudo = !mountpoint; + var node; + + if (root && FS.root) { + throw new FS.ErrnoError(10); + } else if (!root && !pseudo) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + mountpoint = lookup.path; // use the absolute path + node = lookup.node; + + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + + if (!FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + } + + var mount = { + type: type, + opts: opts, + mountpoint: mountpoint, + mounts: [] + }; + + // create a root node for the fs + var mountRoot = type.mount(mount); + mountRoot.mount = mount; + mount.root = mountRoot; + + if (root) { + FS.root = mountRoot; + } else if (node) { + // set as a mountpoint + node.mounted = mount; + + // add the new mount to the current mount's children + if (node.mount) { + node.mount.mounts.push(mount); + } + } + + return mountRoot; + },unmount:function (mountpoint) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + if (!FS.isMountpoint(lookup.node)) { + throw new FS.ErrnoError(28); + } + + // destroy the nodes for this mount, and all its child mounts + var node = lookup.node; + var mount = node.mounted; + var mounts = FS.getMounts(mount); + + Object.keys(FS.nameTable).forEach(function (hash) { + var current = FS.nameTable[hash]; + + while (current) { + var next = current.name_next; + + if (mounts.includes(current.mount)) { + FS.destroyNode(current); + } + + current = next; + } + }); + + // no longer a mountpoint + node.mounted = null; + + // remove this mount from the child mounts + var idx = node.mount.mounts.indexOf(mount); + assert(idx !== -1); + node.mount.mounts.splice(idx, 1); + },lookup:function(parent, name) { + return parent.node_ops.lookup(parent, name); + },mknod:function(path, mode, dev) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + if (!name || name === '.' || name === '..') { + throw new FS.ErrnoError(28); + } + var errCode = FS.mayCreate(parent, name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.mknod) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.mknod(parent, name, mode, dev); + },create:function(path, mode) { + mode = mode !== undefined ? mode : 438 /* 0666 */; + mode &= 4095; + mode |= 32768; + return FS.mknod(path, mode, 0); + },mkdir:function(path, mode) { + mode = mode !== undefined ? mode : 511 /* 0777 */; + mode &= 511 | 512; + mode |= 16384; + return FS.mknod(path, mode, 0); + },mkdirTree:function(path, mode) { + var dirs = path.split('/'); + var d = ''; + for (var i = 0; i < dirs.length; ++i) { + if (!dirs[i]) continue; + d += '/' + dirs[i]; + try { + FS.mkdir(d, mode); + } catch(e) { + if (e.errno != 20) throw e; + } + } + },mkdev:function(path, mode, dev) { + if (typeof(dev) === 'undefined') { + dev = mode; + mode = 438 /* 0666 */; + } + mode |= 8192; + return FS.mknod(path, mode, dev); + },symlink:function(oldpath, newpath) { + if (!PATH_FS.resolve(oldpath)) { + throw new FS.ErrnoError(44); + } + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var newname = PATH.basename(newpath); + var errCode = FS.mayCreate(parent, newname); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.symlink) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.symlink(parent, newname, oldpath); + },rename:function(old_path, new_path) { + var old_dirname = PATH.dirname(old_path); + var new_dirname = PATH.dirname(new_path); + var old_name = PATH.basename(old_path); + var new_name = PATH.basename(new_path); + // parents must exist + var lookup, old_dir, new_dir; + + // let the errors from non existant directories percolate up + lookup = FS.lookupPath(old_path, { parent: true }); + old_dir = lookup.node; + lookup = FS.lookupPath(new_path, { parent: true }); + new_dir = lookup.node; + + if (!old_dir || !new_dir) throw new FS.ErrnoError(44); + // need to be part of the same mount + if (old_dir.mount !== new_dir.mount) { + throw new FS.ErrnoError(75); + } + // source must exist + var old_node = FS.lookupNode(old_dir, old_name); + // old path should not be an ancestor of the new path + var relative = PATH_FS.relative(old_path, new_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(28); + } + // new path should not be an ancestor of the old path + relative = PATH_FS.relative(new_path, old_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(55); + } + // see if the new path already exists + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + // not fatal + } + // early out if nothing needs to change + if (old_node === new_node) { + return; + } + // we'll need to delete the old entry + var isdir = FS.isDir(old_node.mode); + var errCode = FS.mayDelete(old_dir, old_name, isdir); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + // need delete permissions if we'll be overwriting. + // need create permissions if new doesn't already exist. + errCode = new_node ? + FS.mayDelete(new_dir, new_name, isdir) : + FS.mayCreate(new_dir, new_name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!old_dir.node_ops.rename) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { + throw new FS.ErrnoError(10); + } + // if we are going to change the parent, check write permissions + if (new_dir !== old_dir) { + errCode = FS.nodePermissions(old_dir, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + try { + if (FS.trackingDelegate['willMovePath']) { + FS.trackingDelegate['willMovePath'](old_path, new_path); + } + } catch(e) { + err("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: " + e.message); + } + // remove the node from the lookup hash + FS.hashRemoveNode(old_node); + // do the underlying fs rename + try { + old_dir.node_ops.rename(old_node, new_dir, new_name); + } catch (e) { + throw e; + } finally { + // add the node back to the hash (in case node_ops.rename + // changed its name) + FS.hashAddNode(old_node); + } + try { + if (FS.trackingDelegate['onMovePath']) FS.trackingDelegate['onMovePath'](old_path, new_path); + } catch(e) { + err("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: " + e.message); + } + },rmdir:function(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, true); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.rmdir) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + try { + if (FS.trackingDelegate['willDeletePath']) { + FS.trackingDelegate['willDeletePath'](path); + } + } catch(e) { + err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: " + e.message); + } + parent.node_ops.rmdir(parent, name); + FS.destroyNode(node); + try { + if (FS.trackingDelegate['onDeletePath']) FS.trackingDelegate['onDeletePath'](path); + } catch(e) { + err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: " + e.message); + } + },readdir:function(path) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + if (!node.node_ops.readdir) { + throw new FS.ErrnoError(54); + } + return node.node_ops.readdir(node); + },unlink:function(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, false); + if (errCode) { + // According to POSIX, we should map EISDIR to EPERM, but + // we instead do what Linux does (and we must, as we use + // the musl linux libc). + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.unlink) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + try { + if (FS.trackingDelegate['willDeletePath']) { + FS.trackingDelegate['willDeletePath'](path); + } + } catch(e) { + err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: " + e.message); + } + parent.node_ops.unlink(parent, name); + FS.destroyNode(node); + try { + if (FS.trackingDelegate['onDeletePath']) FS.trackingDelegate['onDeletePath'](path); + } catch(e) { + err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: " + e.message); + } + },readlink:function(path) { + var lookup = FS.lookupPath(path); + var link = lookup.node; + if (!link) { + throw new FS.ErrnoError(44); + } + if (!link.node_ops.readlink) { + throw new FS.ErrnoError(28); + } + return PATH_FS.resolve(FS.getPath(link.parent), link.node_ops.readlink(link)); + },stat:function(path, dontFollow) { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + var node = lookup.node; + if (!node) { + throw new FS.ErrnoError(44); + } + if (!node.node_ops.getattr) { + throw new FS.ErrnoError(63); + } + return node.node_ops.getattr(node); + },lstat:function(path) { + return FS.stat(path, true); + },chmod:function(path, mode, dontFollow) { + var node; + if (typeof path === 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(63); + } + node.node_ops.setattr(node, { + mode: (mode & 4095) | (node.mode & ~4095), + timestamp: Date.now() + }); + },lchmod:function(path, mode) { + FS.chmod(path, mode, true); + },fchmod:function(fd, mode) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + FS.chmod(stream.node, mode); + },chown:function(path, uid, gid, dontFollow) { + var node; + if (typeof path === 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(63); + } + node.node_ops.setattr(node, { + timestamp: Date.now() + // we ignore the uid / gid for now + }); + },lchown:function(path, uid, gid) { + FS.chown(path, uid, gid, true); + },fchown:function(fd, uid, gid) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + FS.chown(stream.node, uid, gid); + },truncate:function(path, len) { + if (len < 0) { + throw new FS.ErrnoError(28); + } + var node; + if (typeof path === 'string') { + var lookup = FS.lookupPath(path, { follow: true }); + node = lookup.node; + } else { + node = path; + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(63); + } + if (FS.isDir(node.mode)) { + throw new FS.ErrnoError(31); + } + if (!FS.isFile(node.mode)) { + throw new FS.ErrnoError(28); + } + var errCode = FS.nodePermissions(node, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + node.node_ops.setattr(node, { + size: len, + timestamp: Date.now() + }); + },ftruncate:function(fd, len) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(28); + } + FS.truncate(stream.node, len); + },utime:function(path, atime, mtime) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + node.node_ops.setattr(node, { + timestamp: Math.max(atime, mtime) + }); + },open:function(path, flags, mode, fd_start, fd_end) { + if (path === "") { + throw new FS.ErrnoError(44); + } + flags = typeof flags === 'string' ? FS.modeStringToFlags(flags) : flags; + mode = typeof mode === 'undefined' ? 438 /* 0666 */ : mode; + if ((flags & 64)) { + mode = (mode & 4095) | 32768; + } else { + mode = 0; + } + var node; + if (typeof path === 'object') { + node = path; + } else { + path = PATH.normalize(path); + try { + var lookup = FS.lookupPath(path, { + follow: !(flags & 131072) + }); + node = lookup.node; + } catch (e) { + // ignore + } + } + // perhaps we need to create the node + var created = false; + if ((flags & 64)) { + if (node) { + // if O_CREAT and O_EXCL are set, error out if the node already exists + if ((flags & 128)) { + throw new FS.ErrnoError(20); + } + } else { + // node doesn't exist, try to create it + node = FS.mknod(path, mode, 0); + created = true; + } + } + if (!node) { + throw new FS.ErrnoError(44); + } + // can't truncate a device + if (FS.isChrdev(node.mode)) { + flags &= ~512; + } + // if asked only for a directory, then this must be one + if ((flags & 65536) && !FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + // check permissions, if this is not a file we just created now (it is ok to + // create and write to a file with read-only permissions; it is read-only + // for later use) + if (!created) { + var errCode = FS.mayOpen(node, flags); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // do truncation if necessary + if ((flags & 512)) { + FS.truncate(node, 0); + } + // we've already handled these, don't pass down to the underlying vfs + flags &= ~(128 | 512 | 131072); + + // register the stream with the filesystem + var stream = FS.createStream({ + node: node, + path: FS.getPath(node), // we want the absolute path to the node + flags: flags, + seekable: true, + position: 0, + stream_ops: node.stream_ops, + // used by the file family libc calls (fopen, fwrite, ferror, etc.) + ungotten: [], + error: false + }, fd_start, fd_end); + // call the new stream's open function + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + if (Module['logReadFiles'] && !(flags & 1)) { + if (!FS.readFiles) FS.readFiles = {}; + if (!(path in FS.readFiles)) { + FS.readFiles[path] = 1; + err("FS.trackingDelegate error on read file: " + path); + } + } + try { + if (FS.trackingDelegate['onOpenFile']) { + var trackingFlags = 0; + if ((flags & 2097155) !== 1) { + trackingFlags |= FS.tracking.openFlags.READ; + } + if ((flags & 2097155) !== 0) { + trackingFlags |= FS.tracking.openFlags.WRITE; + } + FS.trackingDelegate['onOpenFile'](path, trackingFlags); + } + } catch(e) { + err("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: " + e.message); + } + return stream; + },close:function(stream) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (stream.getdents) stream.getdents = null; // free readdir state + try { + if (stream.stream_ops.close) { + stream.stream_ops.close(stream); + } + } catch (e) { + throw e; + } finally { + FS.closeStream(stream.fd); + } + stream.fd = null; + },isClosed:function(stream) { + return stream.fd === null; + },llseek:function(stream, offset, whence) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (!stream.seekable || !stream.stream_ops.llseek) { + throw new FS.ErrnoError(70); + } + if (whence != 0 && whence != 1 && whence != 2) { + throw new FS.ErrnoError(28); + } + stream.position = stream.stream_ops.llseek(stream, offset, whence); + stream.ungotten = []; + return stream.position; + },read:function(stream, buffer, offset, length, position) { + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.read) { + throw new FS.ErrnoError(28); + } + var seeking = typeof position !== 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); + if (!seeking) stream.position += bytesRead; + return bytesRead; + },write:function(stream, buffer, offset, length, position, canOwn) { + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.write) { + throw new FS.ErrnoError(28); + } + if (stream.seekable && stream.flags & 1024) { + // seek to the end before writing in append mode + FS.llseek(stream, 0, 2); + } + var seeking = typeof position !== 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); + if (!seeking) stream.position += bytesWritten; + try { + if (stream.path && FS.trackingDelegate['onWriteToFile']) FS.trackingDelegate['onWriteToFile'](stream.path); + } catch(e) { + err("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: " + e.message); + } + return bytesWritten; + },allocate:function(stream, offset, length) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (offset < 0 || length <= 0) { + throw new FS.ErrnoError(28); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (!stream.stream_ops.allocate) { + throw new FS.ErrnoError(138); + } + stream.stream_ops.allocate(stream, offset, length); + },mmap:function(stream, address, length, position, prot, flags) { + // User requests writing to file (prot & PROT_WRITE != 0). + // Checking if we have permissions to write to the file unless + // MAP_PRIVATE flag is set. According to POSIX spec it is possible + // to write to file opened in read-only mode with MAP_PRIVATE flag, + // as all modifications will be visible only in the memory of + // the current process. + if ((prot & 2) !== 0 + && (flags & 2) === 0 + && (stream.flags & 2097155) !== 2) { + throw new FS.ErrnoError(2); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(2); + } + if (!stream.stream_ops.mmap) { + throw new FS.ErrnoError(43); + } + return stream.stream_ops.mmap(stream, address, length, position, prot, flags); + },msync:function(stream, buffer, offset, length, mmapFlags) { + if (!stream || !stream.stream_ops.msync) { + return 0; + } + return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); + },munmap:function(stream) { + return 0; + },ioctl:function(stream, cmd, arg) { + if (!stream.stream_ops.ioctl) { + throw new FS.ErrnoError(59); + } + return stream.stream_ops.ioctl(stream, cmd, arg); + },readFile:function(path, opts) { + opts = opts || {}; + opts.flags = opts.flags || 0; + opts.encoding = opts.encoding || 'binary'; + if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { + throw new Error('Invalid encoding type "' + opts.encoding + '"'); + } + var ret; + var stream = FS.open(path, opts.flags); + var stat = FS.stat(path); + var length = stat.size; + var buf = new Uint8Array(length); + FS.read(stream, buf, 0, length, 0); + if (opts.encoding === 'utf8') { + ret = UTF8ArrayToString(buf, 0); + } else if (opts.encoding === 'binary') { + ret = buf; + } + FS.close(stream); + return ret; + },writeFile:function(path, data, opts) { + opts = opts || {}; + opts.flags = opts.flags || 577; + var stream = FS.open(path, opts.flags, opts.mode); + if (typeof data === 'string') { + var buf = new Uint8Array(lengthBytesUTF8(data)+1); + var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); + FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn); + } else if (ArrayBuffer.isView(data)) { + FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); + } else { + throw new Error('Unsupported data type'); + } + FS.close(stream); + },cwd:function() { + return FS.currentPath; + },chdir:function(path) { + var lookup = FS.lookupPath(path, { follow: true }); + if (lookup.node === null) { + throw new FS.ErrnoError(44); + } + if (!FS.isDir(lookup.node.mode)) { + throw new FS.ErrnoError(54); + } + var errCode = FS.nodePermissions(lookup.node, 'x'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.currentPath = lookup.path; + },createDefaultDirectories:function() { + FS.mkdir('/tmp'); + FS.mkdir('/home'); + FS.mkdir('/home/web_user'); + },createDefaultDevices:function() { + // create /dev + FS.mkdir('/dev'); + // setup /dev/null + FS.registerDevice(FS.makedev(1, 3), { + read: function() { return 0; }, + write: function(stream, buffer, offset, length, pos) { return length; } + }); + FS.mkdev('/dev/null', FS.makedev(1, 3)); + // setup /dev/tty and /dev/tty1 + // stderr needs to print output using err() rather than out() + // so we register a second tty just for it. + TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); + TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); + FS.mkdev('/dev/tty', FS.makedev(5, 0)); + FS.mkdev('/dev/tty1', FS.makedev(6, 0)); + // setup /dev/[u]random + var random_device = getRandomDevice(); + FS.createDevice('/dev', 'random', random_device); + FS.createDevice('/dev', 'urandom', random_device); + // we're not going to emulate the actual shm device, + // just create the tmp dirs that reside in it commonly + FS.mkdir('/dev/shm'); + FS.mkdir('/dev/shm/tmp'); + },createSpecialDirectories:function() { + // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the + // name of the stream for fd 6 (see test_unistd_ttyname) + FS.mkdir('/proc'); + var proc_self = FS.mkdir('/proc/self'); + FS.mkdir('/proc/self/fd'); + FS.mount({ + mount: function() { + var node = FS.createNode(proc_self, 'fd', 16384 | 511 /* 0777 */, 73); + node.node_ops = { + lookup: function(parent, name) { + var fd = +name; + var stream = FS.getStream(fd); + if (!stream) throw new FS.ErrnoError(8); + var ret = { + parent: null, + mount: { mountpoint: 'fake' }, + node_ops: { readlink: function() { return stream.path } } + }; + ret.parent = ret; // make it look like a simple root node + return ret; + } + }; + return node; + } + }, {}, '/proc/self/fd'); + },createStandardStreams:function() { + // TODO deprecate the old functionality of a single + // input / output callback and that utilizes FS.createDevice + // and instead require a unique set of stream ops + + // by default, we symlink the standard streams to the + // default tty devices. however, if the standard streams + // have been overwritten we create a unique device for + // them instead. + if (Module['stdin']) { + FS.createDevice('/dev', 'stdin', Module['stdin']); + } else { + FS.symlink('/dev/tty', '/dev/stdin'); + } + if (Module['stdout']) { + FS.createDevice('/dev', 'stdout', null, Module['stdout']); + } else { + FS.symlink('/dev/tty', '/dev/stdout'); + } + if (Module['stderr']) { + FS.createDevice('/dev', 'stderr', null, Module['stderr']); + } else { + FS.symlink('/dev/tty1', '/dev/stderr'); + } + + // open default streams for the stdin, stdout and stderr devices + var stdin = FS.open('/dev/stdin', 0); + var stdout = FS.open('/dev/stdout', 1); + var stderr = FS.open('/dev/stderr', 1); + assert(stdin.fd === 0, 'invalid handle for stdin (' + stdin.fd + ')'); + assert(stdout.fd === 1, 'invalid handle for stdout (' + stdout.fd + ')'); + assert(stderr.fd === 2, 'invalid handle for stderr (' + stderr.fd + ')'); + },ensureErrnoError:function() { + if (FS.ErrnoError) return; + FS.ErrnoError = /** @this{Object} */ function ErrnoError(errno, node) { + this.node = node; + this.setErrno = /** @this{Object} */ function(errno) { + this.errno = errno; + for (var key in ERRNO_CODES) { + if (ERRNO_CODES[key] === errno) { + this.code = key; + break; + } + } + }; + this.setErrno(errno); + this.message = ERRNO_MESSAGES[errno]; + + // Try to get a maximally helpful stack trace. On Node.js, getting Error.stack + // now ensures it shows what we want. + if (this.stack) { + // Define the stack property for Node.js 4, which otherwise errors on the next line. + Object.defineProperty(this, "stack", { value: (new Error).stack, writable: true }); + this.stack = demangleAll(this.stack); + } + }; + FS.ErrnoError.prototype = new Error(); + FS.ErrnoError.prototype.constructor = FS.ErrnoError; + // Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info) + [44].forEach(function(code) { + FS.genericErrors[code] = new FS.ErrnoError(code); + FS.genericErrors[code].stack = ''; + }); + },staticInit:function() { + FS.ensureErrnoError(); + + FS.nameTable = new Array(4096); + + FS.mount(MEMFS, {}, '/'); + + FS.createDefaultDirectories(); + FS.createDefaultDevices(); + FS.createSpecialDirectories(); + + FS.filesystems = { + 'MEMFS': MEMFS, + 'NODEFS': NODEFS, + 'WORKERFS': WORKERFS, + }; + },init:function(input, output, error) { + assert(!FS.init.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)'); + FS.init.initialized = true; + + FS.ensureErrnoError(); + + // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here + Module['stdin'] = input || Module['stdin']; + Module['stdout'] = output || Module['stdout']; + Module['stderr'] = error || Module['stderr']; + + FS.createStandardStreams(); + },quit:function() { + FS.init.initialized = false; + // force-flush all streams, so we get musl std streams printed out + var fflush = Module['_fflush']; + if (fflush) fflush(0); + // close all of our streams + for (var i = 0; i < FS.streams.length; i++) { + var stream = FS.streams[i]; + if (!stream) { + continue; + } + FS.close(stream); + } + },getMode:function(canRead, canWrite) { + var mode = 0; + if (canRead) mode |= 292 | 73; + if (canWrite) mode |= 146; + return mode; + },findObject:function(path, dontResolveLastLink) { + var ret = FS.analyzePath(path, dontResolveLastLink); + if (ret.exists) { + return ret.object; + } else { + return null; + } + },analyzePath:function(path, dontResolveLastLink) { + // operate from within the context of the symlink's target + try { + var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + path = lookup.path; + } catch (e) { + } + var ret = { + isRoot: false, exists: false, error: 0, name: null, path: null, object: null, + parentExists: false, parentPath: null, parentObject: null + }; + try { + var lookup = FS.lookupPath(path, { parent: true }); + ret.parentExists = true; + ret.parentPath = lookup.path; + ret.parentObject = lookup.node; + ret.name = PATH.basename(path); + lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + ret.exists = true; + ret.path = lookup.path; + ret.object = lookup.node; + ret.name = lookup.node.name; + ret.isRoot = lookup.path === '/'; + } catch (e) { + ret.error = e.errno; + }; + return ret; + },createPath:function(parent, path, canRead, canWrite) { + parent = typeof parent === 'string' ? parent : FS.getPath(parent); + var parts = path.split('/').reverse(); + while (parts.length) { + var part = parts.pop(); + if (!part) continue; + var current = PATH.join2(parent, part); + try { + FS.mkdir(current); + } catch (e) { + // ignore EEXIST + } + parent = current; + } + return current; + },createFile:function(parent, name, properties, canRead, canWrite) { + var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); + var mode = FS.getMode(canRead, canWrite); + return FS.create(path, mode); + },createDataFile:function(parent, name, data, canRead, canWrite, canOwn) { + var path = name ? PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name) : parent; + var mode = FS.getMode(canRead, canWrite); + var node = FS.create(path, mode); + if (data) { + if (typeof data === 'string') { + var arr = new Array(data.length); + for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); + data = arr; + } + // make sure we can write to the file + FS.chmod(node, mode | 146); + var stream = FS.open(node, 577); + FS.write(stream, data, 0, data.length, 0, canOwn); + FS.close(stream); + FS.chmod(node, mode); + } + return node; + },createDevice:function(parent, name, input, output) { + var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); + var mode = FS.getMode(!!input, !!output); + if (!FS.createDevice.major) FS.createDevice.major = 64; + var dev = FS.makedev(FS.createDevice.major++, 0); + // Create a fake device that a set of stream ops to emulate + // the old behavior. + FS.registerDevice(dev, { + open: function(stream) { + stream.seekable = false; + }, + close: function(stream) { + // flush any pending line data + if (output && output.buffer && output.buffer.length) { + output(10); + } + }, + read: function(stream, buffer, offset, length, pos /* ignored */) { + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = input(); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.timestamp = Date.now(); + } + return bytesRead; + }, + write: function(stream, buffer, offset, length, pos) { + for (var i = 0; i < length; i++) { + try { + output(buffer[offset+i]); + } catch (e) { + throw new FS.ErrnoError(29); + } + } + if (length) { + stream.node.timestamp = Date.now(); + } + return i; + } + }); + return FS.mkdev(path, mode, dev); + },forceLoadFile:function(obj) { + if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; + if (typeof XMLHttpRequest !== 'undefined') { + throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); + } else if (read_) { + // Command-line. + try { + // WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as + // read() will try to parse UTF8. + obj.contents = intArrayFromString(read_(obj.url), true); + obj.usedBytes = obj.contents.length; + } catch (e) { + throw new FS.ErrnoError(29); + } + } else { + throw new Error('Cannot load without read() or XMLHttpRequest.'); + } + },createLazyFile:function(parent, name, url, canRead, canWrite) { + // Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse. + /** @constructor */ + function LazyUint8Array() { + this.lengthKnown = false; + this.chunks = []; // Loaded chunks. Index is the chunk number + } + LazyUint8Array.prototype.get = /** @this{Object} */ function LazyUint8Array_get(idx) { + if (idx > this.length-1 || idx < 0) { + return undefined; + } + var chunkOffset = idx % this.chunkSize; + var chunkNum = (idx / this.chunkSize)|0; + return this.getter(chunkNum)[chunkOffset]; + }; + LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) { + this.getter = getter; + }; + LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() { + // Find length + var xhr = new XMLHttpRequest(); + xhr.open('HEAD', url, false); + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + var datalength = Number(xhr.getResponseHeader("Content-length")); + var header; + var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; + var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; + + var chunkSize = 1024*1024; // Chunk size in bytes + + if (!hasByteServing) chunkSize = datalength; + + // Function to get a range from the remote URL. + var doXHR = (function(from, to) { + if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); + if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!"); + + // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + + // Some hints to the browser that we want binary data. + if (typeof Uint8Array != 'undefined') xhr.responseType = 'arraybuffer'; + if (xhr.overrideMimeType) { + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + } + + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + if (xhr.response !== undefined) { + return new Uint8Array(/** @type{Array} */(xhr.response || [])); + } else { + return intArrayFromString(xhr.responseText || '', true); + } + }); + var lazyArray = this; + lazyArray.setDataGetter(function(chunkNum) { + var start = chunkNum * chunkSize; + var end = (chunkNum+1) * chunkSize - 1; // including this byte + end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block + if (typeof(lazyArray.chunks[chunkNum]) === "undefined") { + lazyArray.chunks[chunkNum] = doXHR(start, end); + } + if (typeof(lazyArray.chunks[chunkNum]) === "undefined") throw new Error("doXHR failed!"); + return lazyArray.chunks[chunkNum]; + }); + + if (usesGzip || !datalength) { + // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length + chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file + datalength = this.getter(0).length; + chunkSize = datalength; + out("LazyFiles on gzip forces download of the whole file when length is accessed"); + } + + this._length = datalength; + this._chunkSize = chunkSize; + this.lengthKnown = true; + }; + if (typeof XMLHttpRequest !== 'undefined') { + if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'; + var lazyArray = new LazyUint8Array(); + Object.defineProperties(lazyArray, { + length: { + get: /** @this{Object} */ function() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._length; + } + }, + chunkSize: { + get: /** @this{Object} */ function() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._chunkSize; + } + } + }); + + var properties = { isDevice: false, contents: lazyArray }; + } else { + var properties = { isDevice: false, url: url }; + } + + var node = FS.createFile(parent, name, properties, canRead, canWrite); + // This is a total hack, but I want to get this lazy file code out of the + // core of MEMFS. If we want to keep this lazy file concept I feel it should + // be its own thin LAZYFS proxying calls to MEMFS. + if (properties.contents) { + node.contents = properties.contents; + } else if (properties.url) { + node.contents = null; + node.url = properties.url; + } + // Add a function that defers querying the file size until it is asked the first time. + Object.defineProperties(node, { + usedBytes: { + get: /** @this {FSNode} */ function() { return this.contents.length; } + } + }); + // override each stream op with one that tries to force load the lazy file first + var stream_ops = {}; + var keys = Object.keys(node.stream_ops); + keys.forEach(function(key) { + var fn = node.stream_ops[key]; + stream_ops[key] = function forceLoadLazyFile() { + FS.forceLoadFile(node); + return fn.apply(null, arguments); + }; + }); + // use a custom read function + stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) { + FS.forceLoadFile(node); + var contents = stream.node.contents; + if (position >= contents.length) + return 0; + var size = Math.min(contents.length - position, length); + assert(size >= 0); + if (contents.slice) { // normal array + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents[position + i]; + } + } else { + for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR + buffer[offset + i] = contents.get(position + i); + } + } + return size; + }; + node.stream_ops = stream_ops; + return node; + },createPreloadedFile:function(parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) { + Browser.init(); // XXX perhaps this method should move onto Browser? + // TODO we should allow people to just pass in a complete filename instead + // of parent and name being that we just join them anyways + var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; + var dep = getUniqueRunDependency('cp ' + fullname); // might have several active requests for the same fullname + function processData(byteArray) { + function finish(byteArray) { + if (preFinish) preFinish(); + if (!dontCreateFile) { + FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); + } + if (onload) onload(); + removeRunDependency(dep); + } + var handled = false; + Module['preloadPlugins'].forEach(function(plugin) { + if (handled) return; + if (plugin['canHandle'](fullname)) { + plugin['handle'](byteArray, fullname, finish, function() { + if (onerror) onerror(); + removeRunDependency(dep); + }); + handled = true; + } + }); + if (!handled) finish(byteArray); + } + addRunDependency(dep); + if (typeof url == 'string') { + asyncLoad(url, function(byteArray) { + processData(byteArray); + }, onerror); + } else { + processData(url); + } + },indexedDB:function() { + return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; + },DB_NAME:function() { + return 'EM_FS_' + window.location.pathname; + },DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths, onload, onerror) { + onload = onload || function(){}; + onerror = onerror || function(){}; + var indexedDB = FS.indexedDB(); + try { + var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION); + } catch (e) { + return onerror(e); + } + openRequest.onupgradeneeded = function openRequest_onupgradeneeded() { + out('creating db'); + var db = openRequest.result; + db.createObjectStore(FS.DB_STORE_NAME); + }; + openRequest.onsuccess = function openRequest_onsuccess() { + var db = openRequest.result; + var transaction = db.transaction([FS.DB_STORE_NAME], 'readwrite'); + var files = transaction.objectStore(FS.DB_STORE_NAME); + var ok = 0, fail = 0, total = paths.length; + function finish() { + if (fail == 0) onload(); else onerror(); + } + paths.forEach(function(path) { + var putRequest = files.put(FS.analyzePath(path).object.contents, path); + putRequest.onsuccess = function putRequest_onsuccess() { ok++; if (ok + fail == total) finish() }; + putRequest.onerror = function putRequest_onerror() { fail++; if (ok + fail == total) finish() }; + }); + transaction.onerror = onerror; + }; + openRequest.onerror = onerror; + },loadFilesFromDB:function(paths, onload, onerror) { + onload = onload || function(){}; + onerror = onerror || function(){}; + var indexedDB = FS.indexedDB(); + try { + var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION); + } catch (e) { + return onerror(e); + } + openRequest.onupgradeneeded = onerror; // no database to load from + openRequest.onsuccess = function openRequest_onsuccess() { + var db = openRequest.result; + try { + var transaction = db.transaction([FS.DB_STORE_NAME], 'readonly'); + } catch(e) { + onerror(e); + return; + } + var files = transaction.objectStore(FS.DB_STORE_NAME); + var ok = 0, fail = 0, total = paths.length; + function finish() { + if (fail == 0) onload(); else onerror(); + } + paths.forEach(function(path) { + var getRequest = files.get(path); + getRequest.onsuccess = function getRequest_onsuccess() { + if (FS.analyzePath(path).exists) { + FS.unlink(path); + } + FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true); + ok++; + if (ok + fail == total) finish(); + }; + getRequest.onerror = function getRequest_onerror() { fail++; if (ok + fail == total) finish() }; + }); + transaction.onerror = onerror; + }; + openRequest.onerror = onerror; + },absolutePath:function() { + abort('FS.absolutePath has been removed; use PATH_FS.resolve instead'); + },createFolder:function() { + abort('FS.createFolder has been removed; use FS.mkdir instead'); + },createLink:function() { + abort('FS.createLink has been removed; use FS.symlink instead'); + },joinPath:function() { + abort('FS.joinPath has been removed; use PATH.join instead'); + },mmapAlloc:function() { + abort('FS.mmapAlloc has been replaced by the top level function mmapAlloc'); + },standardizePath:function() { + abort('FS.standardizePath has been removed; use PATH.normalize instead'); + }}; + var SYSCALLS = {mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(dirfd, path, allowEmpty) { + if (path[0] === '/') { + return path; + } + // relative path + var dir; + if (dirfd === -100) { + dir = FS.cwd(); + } else { + var dirstream = FS.getStream(dirfd); + if (!dirstream) throw new FS.ErrnoError(8); + dir = dirstream.path; + } + if (path.length == 0) { + if (!allowEmpty) { + throw new FS.ErrnoError(44);; + } + return dir; + } + return PATH.join2(dir, path); + },doStat:function(func, path, buf) { + try { + var stat = func(path); + } catch (e) { + if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) { + // an error occurred while trying to look up the path; we should just report ENOTDIR + return -54; + } + throw e; + } + HEAP32[((buf)>>2)] = stat.dev; + HEAP32[(((buf)+(4))>>2)] = 0; + HEAP32[(((buf)+(8))>>2)] = stat.ino; + HEAP32[(((buf)+(12))>>2)] = stat.mode; + HEAP32[(((buf)+(16))>>2)] = stat.nlink; + HEAP32[(((buf)+(20))>>2)] = stat.uid; + HEAP32[(((buf)+(24))>>2)] = stat.gid; + HEAP32[(((buf)+(28))>>2)] = stat.rdev; + HEAP32[(((buf)+(32))>>2)] = 0; + (tempI64 = [stat.size>>>0,(tempDouble=stat.size,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((buf)+(40))>>2)] = tempI64[0],HEAP32[(((buf)+(44))>>2)] = tempI64[1]); + HEAP32[(((buf)+(48))>>2)] = 4096; + HEAP32[(((buf)+(52))>>2)] = stat.blocks; + HEAP32[(((buf)+(56))>>2)] = (stat.atime.getTime() / 1000)|0; + HEAP32[(((buf)+(60))>>2)] = 0; + HEAP32[(((buf)+(64))>>2)] = (stat.mtime.getTime() / 1000)|0; + HEAP32[(((buf)+(68))>>2)] = 0; + HEAP32[(((buf)+(72))>>2)] = (stat.ctime.getTime() / 1000)|0; + HEAP32[(((buf)+(76))>>2)] = 0; + (tempI64 = [stat.ino>>>0,(tempDouble=stat.ino,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((buf)+(80))>>2)] = tempI64[0],HEAP32[(((buf)+(84))>>2)] = tempI64[1]); + return 0; + },doMsync:function(addr, stream, len, flags, offset) { + var buffer = HEAPU8.slice(addr, addr + len); + FS.msync(stream, buffer, offset, len, flags); + },doMkdir:function(path, mode) { + // remove a trailing slash, if one - /a/b/ has basename of '', but + // we want to create b in the context of this function + path = PATH.normalize(path); + if (path[path.length-1] === '/') path = path.substr(0, path.length-1); + FS.mkdir(path, mode, 0); + return 0; + },doMknod:function(path, mode, dev) { + // we don't want this in the JS API as it uses mknod to create all nodes. + switch (mode & 61440) { + case 32768: + case 8192: + case 24576: + case 4096: + case 49152: + break; + default: return -28; + } + FS.mknod(path, mode, dev); + return 0; + },doReadlink:function(path, buf, bufsize) { + if (bufsize <= 0) return -28; + var ret = FS.readlink(path); + + var len = Math.min(bufsize, lengthBytesUTF8(ret)); + var endChar = HEAP8[buf+len]; + stringToUTF8(ret, buf, bufsize+1); + // readlink is one of the rare functions that write out a C string, but does never append a null to the output buffer(!) + // stringToUTF8() always appends a null byte, so restore the character under the null byte after the write. + HEAP8[buf+len] = endChar; + + return len; + },doAccess:function(path, amode) { + if (amode & ~7) { + // need a valid mode + return -28; + } + var node; + var lookup = FS.lookupPath(path, { follow: true }); + node = lookup.node; + if (!node) { + return -44; + } + var perms = ''; + if (amode & 4) perms += 'r'; + if (amode & 2) perms += 'w'; + if (amode & 1) perms += 'x'; + if (perms /* otherwise, they've just passed F_OK */ && FS.nodePermissions(node, perms)) { + return -2; + } + return 0; + },doDup:function(path, flags, suggestFD) { + var suggest = FS.getStream(suggestFD); + if (suggest) FS.close(suggest); + return FS.open(path, flags, 0, suggestFD, suggestFD).fd; + },doReadv:function(stream, iov, iovcnt, offset) { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAP32[(((iov)+(i*8))>>2)]; + var len = HEAP32[(((iov)+(i*8 + 4))>>2)]; + var curr = FS.read(stream, HEAP8,ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) break; // nothing more to read + } + return ret; + },doWritev:function(stream, iov, iovcnt, offset) { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAP32[(((iov)+(i*8))>>2)]; + var len = HEAP32[(((iov)+(i*8 + 4))>>2)]; + var curr = FS.write(stream, HEAP8,ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + } + return ret; + },varargs:undefined,get:function() { + assert(SYSCALLS.varargs != undefined); + SYSCALLS.varargs += 4; + var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)]; + return ret; + },getStr:function(ptr) { + var ret = UTF8ToString(ptr); + return ret; + },getStreamFromFD:function(fd) { + var stream = FS.getStream(fd); + if (!stream) throw new FS.ErrnoError(8); + return stream; + },get64:function(low, high) { + if (low >= 0) assert(high === 0); + else assert(high === -1); + return low; + }}; + function ___sys_chmod(path, mode) {try { + + path = SYSCALLS.getStr(path); + FS.chmod(path, mode); + return 0; + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return -e.errno; + } + } + + function ___sys_chown32(path, owner, group) {try { + + path = SYSCALLS.getStr(path); + FS.chown(path, owner, group); + return 0; + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return -e.errno; + } + } + + function ___sys_fstat64(fd, buf) {try { + + var stream = SYSCALLS.getStreamFromFD(fd); + return SYSCALLS.doStat(FS.stat, stream.path, buf); + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return -e.errno; + } + } + + function ___sys_fstatat64(dirfd, path, buf, flags) {try { + + path = SYSCALLS.getStr(path); + var nofollow = flags & 256; + var allowEmpty = flags & 4096; + flags = flags & (~4352); + assert(!flags, flags); + path = SYSCALLS.calculateAt(dirfd, path, allowEmpty); + return SYSCALLS.doStat(nofollow ? FS.lstat : FS.stat, path, buf); + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return -e.errno; + } + } + + function ___sys_ftruncate64(fd, zero, low, high) {try { + + var length = SYSCALLS.get64(low, high); + FS.ftruncate(fd, length); + return 0; + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return -e.errno; + } + } + + function ___sys_getcwd(buf, size) {try { + + if (size === 0) return -28; + var cwd = FS.cwd(); + var cwdLengthInBytes = lengthBytesUTF8(cwd); + if (size < cwdLengthInBytes + 1) return -68; + stringToUTF8(cwd, buf, size); + return buf; + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return -e.errno; + } + } + + function ___sys_getdents64(fd, dirp, count) {try { + + var stream = SYSCALLS.getStreamFromFD(fd) + if (!stream.getdents) { + stream.getdents = FS.readdir(stream.path); + } + + var struct_size = 280; + var pos = 0; + var off = FS.llseek(stream, 0, 1); + + var idx = Math.floor(off / struct_size); + + while (idx < stream.getdents.length && pos + struct_size <= count) { + var id; + var type; + var name = stream.getdents[idx]; + if (name[0] === '.') { + id = 1; + type = 4; // DT_DIR + } else { + var child = FS.lookupNode(stream.node, name); + id = child.id; + type = FS.isChrdev(child.mode) ? 2 : // DT_CHR, character device. + FS.isDir(child.mode) ? 4 : // DT_DIR, directory. + FS.isLink(child.mode) ? 10 : // DT_LNK, symbolic link. + 8; // DT_REG, regular file. + } + (tempI64 = [id>>>0,(tempDouble=id,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((dirp + pos)>>2)] = tempI64[0],HEAP32[(((dirp + pos)+(4))>>2)] = tempI64[1]); + (tempI64 = [(idx + 1) * struct_size>>>0,(tempDouble=(idx + 1) * struct_size,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((dirp + pos)+(8))>>2)] = tempI64[0],HEAP32[(((dirp + pos)+(12))>>2)] = tempI64[1]); + HEAP16[(((dirp + pos)+(16))>>1)] = 280; + HEAP8[(((dirp + pos)+(18))>>0)] = type; + stringToUTF8(name, dirp + pos + 19, 256); + pos += struct_size; + idx += 1; + } + FS.llseek(stream, idx * struct_size, 0); + return pos; + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return -e.errno; + } + } + + function ___sys_getpid() { + return 42; + } + + function ___sys_getppid() { + return 1; + } + + function ___sys_ioctl(fd, op, varargs) {SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (op) { + case 21509: + case 21505: { + if (!stream.tty) return -59; + return 0; + } + case 21510: + case 21511: + case 21512: + case 21506: + case 21507: + case 21508: { + if (!stream.tty) return -59; + return 0; // no-op, not actually adjusting terminal settings + } + case 21519: { + if (!stream.tty) return -59; + var argp = SYSCALLS.get(); + HEAP32[((argp)>>2)] = 0; + return 0; + } + case 21520: { + if (!stream.tty) return -59; + return -28; // not supported + } + case 21531: { + var argp = SYSCALLS.get(); + return FS.ioctl(stream, op, argp); + } + case 21523: { + // TODO: in theory we should write to the winsize struct that gets + // passed in, but for now musl doesn't read anything on it + if (!stream.tty) return -59; + return 0; + } + case 21524: { + // TODO: technically, this ioctl call should change the window size. + // but, since emscripten doesn't have any concept of a terminal window + // yet, we'll just silently throw it away as we do TIOCGWINSZ + if (!stream.tty) return -59; + return 0; + } + default: abort('bad ioctl syscall ' + op); + } + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return -e.errno; + } + } + + function ___sys_link(oldpath, newpath) { + return -34; // no hardlinks for us + } + + function ___sys_lstat64(path, buf) {try { + + path = SYSCALLS.getStr(path); + return SYSCALLS.doStat(FS.lstat, path, buf); + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return -e.errno; + } + } + + function ___sys_mkdir(path, mode) {try { + + path = SYSCALLS.getStr(path); + return SYSCALLS.doMkdir(path, mode); + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return -e.errno; + } + } + + function ___sys_open(path, flags, varargs) {SYSCALLS.varargs = varargs; + try { + + var pathname = SYSCALLS.getStr(path); + var mode = varargs ? SYSCALLS.get() : 0; + var stream = FS.open(pathname, flags, mode); + return stream.fd; + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return -e.errno; + } + } + + function ___sys_readlink(path, buf, bufsize) {try { + + path = SYSCALLS.getStr(path); + return SYSCALLS.doReadlink(path, buf, bufsize); + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return -e.errno; + } + } + + function ___sys_rename(old_path, new_path) {try { + + old_path = SYSCALLS.getStr(old_path); + new_path = SYSCALLS.getStr(new_path); + FS.rename(old_path, new_path); + return 0; + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return -e.errno; + } + } + + function ___sys_rmdir(path) {try { + + path = SYSCALLS.getStr(path); + FS.rmdir(path); + return 0; + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return -e.errno; + } + } + + function ___sys_stat64(path, buf) {try { + + path = SYSCALLS.getStr(path); + return SYSCALLS.doStat(FS.stat, path, buf); + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return -e.errno; + } + } + + function ___sys_symlink(target, linkpath) {try { + + target = SYSCALLS.getStr(target); + linkpath = SYSCALLS.getStr(linkpath); + FS.symlink(target, linkpath); + return 0; + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return -e.errno; + } + } + + function ___sys_umask(mask) {try { + + var old = SYSCALLS.umask; + SYSCALLS.umask = mask; + return old; + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return -e.errno; + } + } + + function ___sys_uname(buf) {try { + + if (!buf) return -21 + var layout = {"__size__":390,"domainname":325,"machine":260,"nodename":65,"release":130,"sysname":0,"version":195}; + var copyString = function(element, value) { + var offset = layout[element]; + writeAsciiToMemory(value, buf + offset); + }; + copyString('sysname', 'Emscripten'); + copyString('nodename', 'emscripten'); + copyString('release', '1.0'); + copyString('version', '#1'); + copyString('machine', 'wasm32'); + return 0; + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return -e.errno; + } + } + + function ___sys_unlink(path) {try { + + path = SYSCALLS.getStr(path); + FS.unlink(path); + return 0; + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return -e.errno; + } + } + + function ___sys_utimensat(dirfd, path, times, flags) {try { + + path = SYSCALLS.getStr(path); + assert(flags === 0); + path = SYSCALLS.calculateAt(dirfd, path, true); + var seconds = HEAP32[((times)>>2)]; + var nanoseconds = HEAP32[(((times)+(4))>>2)]; + var atime = (seconds*1000) + (nanoseconds/(1000*1000)); + times += 8; + seconds = HEAP32[((times)>>2)]; + nanoseconds = HEAP32[(((times)+(4))>>2)]; + var mtime = (seconds*1000) + (nanoseconds/(1000*1000)); + FS.utime(path, atime, mtime); + return 0; + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return -e.errno; + } + } + + function _abort() { + abort(); + } + + function _emscripten_get_heap_max() { + // Handle the case of 4GB (which would wrap to 0 in the return value) by + // returning up to 4GB - one wasm page. + return 2147483648; + } + + function _emscripten_memcpy_big(dest, src, num) { + HEAPU8.copyWithin(dest, src, src + num); + } + + function emscripten_realloc_buffer(size) { + try { + // round size grow request up to wasm page size (fixed 64KB per spec) + wasmMemory.grow((size - buffer.byteLength + 65535) >>> 16); // .grow() takes a delta compared to the previous size + updateGlobalBufferAndViews(wasmMemory.buffer); + return 1 /*success*/; + } catch(e) { + err('emscripten_realloc_buffer: Attempted to grow heap from ' + buffer.byteLength + ' bytes to ' + size + ' bytes, but got error: ' + e); + } + // implicit 0 return to save code size (caller will cast "undefined" into 0 + // anyhow) + } + function _emscripten_resize_heap(requestedSize) { + var oldSize = HEAPU8.length; + requestedSize = requestedSize >>> 0; + // With pthreads, races can happen (another thread might increase the size in between), so return a failure, and let the caller retry. + assert(requestedSize > oldSize); + + // Memory resize rules: + // 1. Always increase heap size to at least the requested size, rounded up to next page multiple. + // 2a. If MEMORY_GROWTH_LINEAR_STEP == -1, excessively resize the heap geometrically: increase the heap size according to + // MEMORY_GROWTH_GEOMETRIC_STEP factor (default +20%), + // At most overreserve by MEMORY_GROWTH_GEOMETRIC_CAP bytes (default 96MB). + // 2b. If MEMORY_GROWTH_LINEAR_STEP != -1, excessively resize the heap linearly: increase the heap size by at least MEMORY_GROWTH_LINEAR_STEP bytes. + // 3. Max size for the heap is capped at 2048MB-WASM_PAGE_SIZE, or by MAXIMUM_MEMORY, or by ASAN limit, depending on which is smallest + // 4. If we were unable to allocate as much memory, it may be due to over-eager decision to excessively reserve due to (3) above. + // Hence if an allocation fails, cut down on the amount of excess growth, in an attempt to succeed to perform a smaller allocation. + + // A limit is set for how much we can grow. We should not exceed that + // (the wasm binary specifies it, so if we tried, we'd fail anyhow). + // In CAN_ADDRESS_2GB mode, stay one Wasm page short of 4GB: while e.g. Chrome is able to allocate full 4GB Wasm memories, the size will wrap + // back to 0 bytes in Wasm side for any code that deals with heap sizes, which would require special casing all heap size related code to treat + // 0 specially. + var maxHeapSize = 2147483648; + if (requestedSize > maxHeapSize) { + err('Cannot enlarge memory, asked to go up to ' + requestedSize + ' bytes, but the limit is ' + maxHeapSize + ' bytes!'); + return false; + } + + // Loop through potential heap size increases. If we attempt a too eager reservation that fails, cut down on the + // attempted size and reserve a smaller bump instead. (max 3 times, chosen somewhat arbitrarily) + for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { + var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); // ensure geometric growth + // but limit overreserving (default to capping at +96MB overgrowth at most) + overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296 ); + + var newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536)); + + var replacement = emscripten_realloc_buffer(newSize); + if (replacement) { + + return true; + } + } + err('Failed to grow the heap from ' + oldSize + ' bytes to ' + newSize + ' bytes, not enough memory!'); + return false; + } + + var ENV = {}; + + function getExecutableName() { + return thisProgram || './this.program'; + } + function getEnvStrings() { + if (!getEnvStrings.strings) { + // Default values. + // Browser language detection #8751 + var lang = ((typeof navigator === 'object' && navigator.languages && navigator.languages[0]) || 'C').replace('-', '_') + '.UTF-8'; + var env = { + 'USER': 'web_user', + 'LOGNAME': 'web_user', + 'PATH': '/', + 'PWD': '/', + 'HOME': '/home/web_user', + 'LANG': lang, + '_': getExecutableName() + }; + // Apply the user-provided values, if any. + for (var x in ENV) { + // x is a key in ENV; if ENV[x] is undefined, that means it was + // explicitly set to be so. We allow user code to do that to + // force variables with default values to remain unset. + if (ENV[x] === undefined) delete env[x]; + else env[x] = ENV[x]; + } + var strings = []; + for (var x in env) { + strings.push(x + '=' + env[x]); + } + getEnvStrings.strings = strings; + } + return getEnvStrings.strings; + } + function _environ_get(__environ, environ_buf) { + var bufSize = 0; + getEnvStrings().forEach(function(string, i) { + var ptr = environ_buf + bufSize; + HEAP32[(((__environ)+(i * 4))>>2)] = ptr; + writeAsciiToMemory(string, ptr); + bufSize += string.length + 1; + }); + return 0; + } + + function _environ_sizes_get(penviron_count, penviron_buf_size) { + var strings = getEnvStrings(); + HEAP32[((penviron_count)>>2)] = strings.length; + var bufSize = 0; + strings.forEach(function(string) { + bufSize += string.length + 1; + }); + HEAP32[((penviron_buf_size)>>2)] = bufSize; + return 0; + } + + function _exit(status) { + // void _exit(int status); + // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html + exit(status); + } + + function _fd_close(fd) {try { + + var stream = SYSCALLS.getStreamFromFD(fd); + FS.close(stream); + return 0; + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return e.errno; + } + } + + function _fd_fdstat_get(fd, pbuf) {try { + + var stream = SYSCALLS.getStreamFromFD(fd); + // All character devices are terminals (other things a Linux system would + // assume is a character device, like the mouse, we have special APIs for). + var type = stream.tty ? 2 : + FS.isDir(stream.mode) ? 3 : + FS.isLink(stream.mode) ? 7 : + 4; + HEAP8[((pbuf)>>0)] = type; + // TODO HEAP16[(((pbuf)+(2))>>1)] = ?; + // TODO (tempI64 = [?>>>0,(tempDouble=?,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((pbuf)+(8))>>2)] = tempI64[0],HEAP32[(((pbuf)+(12))>>2)] = tempI64[1]); + // TODO (tempI64 = [?>>>0,(tempDouble=?,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((pbuf)+(16))>>2)] = tempI64[0],HEAP32[(((pbuf)+(20))>>2)] = tempI64[1]); + return 0; + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return e.errno; + } + } + + function _fd_read(fd, iov, iovcnt, pnum) {try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = SYSCALLS.doReadv(stream, iov, iovcnt); + HEAP32[((pnum)>>2)] = num + return 0; + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return e.errno; + } + } + + function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {try { + + + var stream = SYSCALLS.getStreamFromFD(fd); + var HIGH_OFFSET = 0x100000000; // 2^32 + // use an unsigned operator on low and shift high by 32-bits + var offset = offset_high * HIGH_OFFSET + (offset_low >>> 0); + + var DOUBLE_LIMIT = 0x20000000000000; // 2^53 + // we also check for equality since DOUBLE_LIMIT + 1 == DOUBLE_LIMIT + if (offset <= -DOUBLE_LIMIT || offset >= DOUBLE_LIMIT) { + return -61; + } + + FS.llseek(stream, offset, whence); + (tempI64 = [stream.position>>>0,(tempDouble=stream.position,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((newOffset)>>2)] = tempI64[0],HEAP32[(((newOffset)+(4))>>2)] = tempI64[1]); + if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state + return 0; + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return e.errno; + } + } + + function _fd_write(fd, iov, iovcnt, pnum) {try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = SYSCALLS.doWritev(stream, iov, iovcnt); + HEAP32[((pnum)>>2)] = num + return 0; + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return e.errno; + } + } + + function _getgrgid() { throw 'getgrgid: TODO' } + + function _getpwuid() { throw 'getpwuid: TODO' } + + function _gettimeofday(ptr) { + var now = Date.now(); + HEAP32[((ptr)>>2)] = (now/1000)|0; // seconds + HEAP32[(((ptr)+(4))>>2)] = ((now % 1000)*1000)|0; // microseconds + return 0; + } + + function _mktime(tmPtr) { + _tzset(); + var date = new Date(HEAP32[(((tmPtr)+(20))>>2)] + 1900, + HEAP32[(((tmPtr)+(16))>>2)], + HEAP32[(((tmPtr)+(12))>>2)], + HEAP32[(((tmPtr)+(8))>>2)], + HEAP32[(((tmPtr)+(4))>>2)], + HEAP32[((tmPtr)>>2)], + 0); + + // There's an ambiguous hour when the time goes back; the tm_isdst field is + // used to disambiguate it. Date() basically guesses, so we fix it up if it + // guessed wrong, or fill in tm_isdst with the guess if it's -1. + var dst = HEAP32[(((tmPtr)+(32))>>2)]; + var guessedOffset = date.getTimezoneOffset(); + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dstOffset = Math.min(winterOffset, summerOffset); // DST is in December in South + if (dst < 0) { + // Attention: some regions don't have DST at all. + HEAP32[(((tmPtr)+(32))>>2)] = Number(summerOffset != winterOffset && dstOffset == guessedOffset); + } else if ((dst > 0) != (dstOffset == guessedOffset)) { + var nonDstOffset = Math.max(winterOffset, summerOffset); + var trueOffset = dst > 0 ? dstOffset : nonDstOffset; + // Don't try setMinutes(date.getMinutes() + ...) -- it's messed up. + date.setTime(date.getTime() + (trueOffset - guessedOffset)*60000); + } + + HEAP32[(((tmPtr)+(24))>>2)] = date.getDay(); + var yday = ((date.getTime() - start.getTime()) / (1000 * 60 * 60 * 24))|0; + HEAP32[(((tmPtr)+(28))>>2)] = yday; + // To match expected behavior, update fields from date + HEAP32[((tmPtr)>>2)] = date.getSeconds(); + HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); + HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); + HEAP32[(((tmPtr)+(12))>>2)] = date.getDate(); + HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth(); + + return (date.getTime() / 1000)|0; + } + + function _setTempRet0(val) { + setTempRet0(val); + } + + function _time(ptr) { + var ret = (Date.now()/1000)|0; + if (ptr) { + HEAP32[((ptr)>>2)] = ret; + } + return ret; + } + + function _times(buffer) { + // clock_t times(struct tms *buffer); + // http://pubs.opengroup.org/onlinepubs/009695399/functions/times.html + // NOTE: This is fake, since we can't calculate real CPU time usage in JS. + if (buffer !== 0) { + zeroMemory(buffer, 16); + } + return 0; + } + + var FSNode = /** @constructor */ function(parent, name, mode, rdev) { + if (!parent) { + parent = this; // root node sets parent to itself + } + this.parent = parent; + this.mount = parent.mount; + this.mounted = null; + this.id = FS.nextInode++; + this.name = name; + this.mode = mode; + this.node_ops = {}; + this.stream_ops = {}; + this.rdev = rdev; + }; + var readMode = 292/*292*/ | 73/*73*/; + var writeMode = 146/*146*/; + Object.defineProperties(FSNode.prototype, { + read: { + get: /** @this{FSNode} */function() { + return (this.mode & readMode) === readMode; + }, + set: /** @this{FSNode} */function(val) { + val ? this.mode |= readMode : this.mode &= ~readMode; + } + }, + write: { + get: /** @this{FSNode} */function() { + return (this.mode & writeMode) === writeMode; + }, + set: /** @this{FSNode} */function(val) { + val ? this.mode |= writeMode : this.mode &= ~writeMode; + } + }, + isFolder: { + get: /** @this{FSNode} */function() { + return FS.isDir(this.mode); + } + }, + isDevice: { + get: /** @this{FSNode} */function() { + return FS.isChrdev(this.mode); + } + } + }); + FS.FSNode = FSNode; + FS.staticInit();; +if (ENVIRONMENT_IS_NODE) { var fs = require("fs"); var NODEJS_PATH = require("path"); NODEFS.staticInit(); }; +ERRNO_CODES = { + 'EPERM': 63, + 'ENOENT': 44, + 'ESRCH': 71, + 'EINTR': 27, + 'EIO': 29, + 'ENXIO': 60, + 'E2BIG': 1, + 'ENOEXEC': 45, + 'EBADF': 8, + 'ECHILD': 12, + 'EAGAIN': 6, + 'EWOULDBLOCK': 6, + 'ENOMEM': 48, + 'EACCES': 2, + 'EFAULT': 21, + 'ENOTBLK': 105, + 'EBUSY': 10, + 'EEXIST': 20, + 'EXDEV': 75, + 'ENODEV': 43, + 'ENOTDIR': 54, + 'EISDIR': 31, + 'EINVAL': 28, + 'ENFILE': 41, + 'EMFILE': 33, + 'ENOTTY': 59, + 'ETXTBSY': 74, + 'EFBIG': 22, + 'ENOSPC': 51, + 'ESPIPE': 70, + 'EROFS': 69, + 'EMLINK': 34, + 'EPIPE': 64, + 'EDOM': 18, + 'ERANGE': 68, + 'ENOMSG': 49, + 'EIDRM': 24, + 'ECHRNG': 106, + 'EL2NSYNC': 156, + 'EL3HLT': 107, + 'EL3RST': 108, + 'ELNRNG': 109, + 'EUNATCH': 110, + 'ENOCSI': 111, + 'EL2HLT': 112, + 'EDEADLK': 16, + 'ENOLCK': 46, + 'EBADE': 113, + 'EBADR': 114, + 'EXFULL': 115, + 'ENOANO': 104, + 'EBADRQC': 103, + 'EBADSLT': 102, + 'EDEADLOCK': 16, + 'EBFONT': 101, + 'ENOSTR': 100, + 'ENODATA': 116, + 'ETIME': 117, + 'ENOSR': 118, + 'ENONET': 119, + 'ENOPKG': 120, + 'EREMOTE': 121, + 'ENOLINK': 47, + 'EADV': 122, + 'ESRMNT': 123, + 'ECOMM': 124, + 'EPROTO': 65, + 'EMULTIHOP': 36, + 'EDOTDOT': 125, + 'EBADMSG': 9, + 'ENOTUNIQ': 126, + 'EBADFD': 127, + 'EREMCHG': 128, + 'ELIBACC': 129, + 'ELIBBAD': 130, + 'ELIBSCN': 131, + 'ELIBMAX': 132, + 'ELIBEXEC': 133, + 'ENOSYS': 52, + 'ENOTEMPTY': 55, + 'ENAMETOOLONG': 37, + 'ELOOP': 32, + 'EOPNOTSUPP': 138, + 'EPFNOSUPPORT': 139, + 'ECONNRESET': 15, + 'ENOBUFS': 42, + 'EAFNOSUPPORT': 5, + 'EPROTOTYPE': 67, + 'ENOTSOCK': 57, + 'ENOPROTOOPT': 50, + 'ESHUTDOWN': 140, + 'ECONNREFUSED': 14, + 'EADDRINUSE': 3, + 'ECONNABORTED': 13, + 'ENETUNREACH': 40, + 'ENETDOWN': 38, + 'ETIMEDOUT': 73, + 'EHOSTDOWN': 142, + 'EHOSTUNREACH': 23, + 'EINPROGRESS': 26, + 'EALREADY': 7, + 'EDESTADDRREQ': 17, + 'EMSGSIZE': 35, + 'EPROTONOSUPPORT': 66, + 'ESOCKTNOSUPPORT': 137, + 'EADDRNOTAVAIL': 4, + 'ENETRESET': 39, + 'EISCONN': 30, + 'ENOTCONN': 53, + 'ETOOMANYREFS': 141, + 'EUSERS': 136, + 'EDQUOT': 19, + 'ESTALE': 72, + 'ENOTSUP': 138, + 'ENOMEDIUM': 148, + 'EILSEQ': 25, + 'EOVERFLOW': 61, + 'ECANCELED': 11, + 'ENOTRECOVERABLE': 56, + 'EOWNERDEAD': 62, + 'ESTRPIPE': 135, + };; +var ASSERTIONS = true; + + + +/** @type {function(string, boolean=, number=)} */ +function intArrayFromString(stringy, dontAddNull, length) { + var len = length > 0 ? length : lengthBytesUTF8(stringy)+1; + var u8array = new Array(len); + var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); + if (dontAddNull) u8array.length = numBytesWritten; + return u8array; +} + +function intArrayToString(array) { + var ret = []; + for (var i = 0; i < array.length; i++) { + var chr = array[i]; + if (chr > 0xFF) { + if (ASSERTIONS) { + assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ') at offset ' + i + ' not in 0x00-0xFF.'); + } + chr &= 0xFF; + } + ret.push(String.fromCharCode(chr)); + } + return ret.join(''); +} + + +var asmLibraryArg = { + "__cxa_allocate_exception": ___cxa_allocate_exception, + "__cxa_atexit": ___cxa_atexit, + "__cxa_throw": ___cxa_throw, + "__gmtime_r": ___gmtime_r, + "__localtime_r": ___localtime_r, + "__sys_chmod": ___sys_chmod, + "__sys_chown32": ___sys_chown32, + "__sys_fstat64": ___sys_fstat64, + "__sys_fstatat64": ___sys_fstatat64, + "__sys_ftruncate64": ___sys_ftruncate64, + "__sys_getcwd": ___sys_getcwd, + "__sys_getdents64": ___sys_getdents64, + "__sys_getpid": ___sys_getpid, + "__sys_getppid": ___sys_getppid, + "__sys_ioctl": ___sys_ioctl, + "__sys_link": ___sys_link, + "__sys_lstat64": ___sys_lstat64, + "__sys_mkdir": ___sys_mkdir, + "__sys_open": ___sys_open, + "__sys_readlink": ___sys_readlink, + "__sys_rename": ___sys_rename, + "__sys_rmdir": ___sys_rmdir, + "__sys_stat64": ___sys_stat64, + "__sys_symlink": ___sys_symlink, + "__sys_umask": ___sys_umask, + "__sys_uname": ___sys_uname, + "__sys_unlink": ___sys_unlink, + "__sys_utimensat": ___sys_utimensat, + "abort": _abort, + "emscripten_get_heap_max": _emscripten_get_heap_max, + "emscripten_memcpy_big": _emscripten_memcpy_big, + "emscripten_resize_heap": _emscripten_resize_heap, + "environ_get": _environ_get, + "environ_sizes_get": _environ_sizes_get, + "exit": _exit, + "fd_close": _fd_close, + "fd_fdstat_get": _fd_fdstat_get, + "fd_read": _fd_read, + "fd_seek": _fd_seek, + "fd_write": _fd_write, + "getgrgid": _getgrgid, + "getpwuid": _getpwuid, + "gettimeofday": _gettimeofday, + "mktime": _mktime, + "setTempRet0": _setTempRet0, + "time": _time, + "times": _times +}; +var asm = createWasm(); +/** @type {function(...*):?} */ +var ___wasm_call_ctors = Module["___wasm_call_ctors"] = createExportWrapper("__wasm_call_ctors"); + +/** @type {function(...*):?} */ +var _malloc = Module["_malloc"] = createExportWrapper("malloc"); + +/** @type {function(...*):?} */ +var ___errno_location = Module["___errno_location"] = createExportWrapper("__errno_location"); + +/** @type {function(...*):?} */ +var _fflush = Module["_fflush"] = createExportWrapper("fflush"); + +/** @type {function(...*):?} */ +var _main = Module["_main"] = createExportWrapper("main"); + +/** @type {function(...*):?} */ +var _emscripten_stack_get_end = Module["_emscripten_stack_get_end"] = function() { + return (_emscripten_stack_get_end = Module["_emscripten_stack_get_end"] = Module["asm"]["emscripten_stack_get_end"]).apply(null, arguments); +}; + +/** @type {function(...*):?} */ +var __get_tzname = Module["__get_tzname"] = createExportWrapper("_get_tzname"); + +/** @type {function(...*):?} */ +var __get_daylight = Module["__get_daylight"] = createExportWrapper("_get_daylight"); + +/** @type {function(...*):?} */ +var __get_timezone = Module["__get_timezone"] = createExportWrapper("_get_timezone"); + +/** @type {function(...*):?} */ +var stackSave = Module["stackSave"] = createExportWrapper("stackSave"); + +/** @type {function(...*):?} */ +var stackRestore = Module["stackRestore"] = createExportWrapper("stackRestore"); + +/** @type {function(...*):?} */ +var stackAlloc = Module["stackAlloc"] = createExportWrapper("stackAlloc"); + +/** @type {function(...*):?} */ +var _emscripten_stack_init = Module["_emscripten_stack_init"] = function() { + return (_emscripten_stack_init = Module["_emscripten_stack_init"] = Module["asm"]["emscripten_stack_init"]).apply(null, arguments); +}; + +/** @type {function(...*):?} */ +var _emscripten_stack_get_free = Module["_emscripten_stack_get_free"] = function() { + return (_emscripten_stack_get_free = Module["_emscripten_stack_get_free"] = Module["asm"]["emscripten_stack_get_free"]).apply(null, arguments); +}; + +/** @type {function(...*):?} */ +var dynCall_iijj = Module["dynCall_iijj"] = createExportWrapper("dynCall_iijj"); + +/** @type {function(...*):?} */ +var dynCall_iijii = Module["dynCall_iijii"] = createExportWrapper("dynCall_iijii"); + +/** @type {function(...*):?} */ +var dynCall_jii = Module["dynCall_jii"] = createExportWrapper("dynCall_jii"); + +/** @type {function(...*):?} */ +var dynCall_iiji = Module["dynCall_iiji"] = createExportWrapper("dynCall_iiji"); + +/** @type {function(...*):?} */ +var dynCall_iij = Module["dynCall_iij"] = createExportWrapper("dynCall_iij"); + +/** @type {function(...*):?} */ +var dynCall_vij = Module["dynCall_vij"] = createExportWrapper("dynCall_vij"); + +/** @type {function(...*):?} */ +var dynCall_iiij = Module["dynCall_iiij"] = createExportWrapper("dynCall_iiij"); + +/** @type {function(...*):?} */ +var dynCall_jiji = Module["dynCall_jiji"] = createExportWrapper("dynCall_jiji"); + + + + + +// === Auto-generated postamble setup entry stuff === + +if (!Object.getOwnPropertyDescriptor(Module, "intArrayFromString")) Module["intArrayFromString"] = function() { abort("'intArrayFromString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "intArrayToString")) Module["intArrayToString"] = function() { abort("'intArrayToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "ccall")) Module["ccall"] = function() { abort("'ccall' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "cwrap")) Module["cwrap"] = function() { abort("'cwrap' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "setValue")) Module["setValue"] = function() { abort("'setValue' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getValue")) Module["getValue"] = function() { abort("'getValue' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "allocate")) Module["allocate"] = function() { abort("'allocate' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "UTF8ArrayToString")) Module["UTF8ArrayToString"] = function() { abort("'UTF8ArrayToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "UTF8ToString")) Module["UTF8ToString"] = function() { abort("'UTF8ToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "stringToUTF8Array")) Module["stringToUTF8Array"] = function() { abort("'stringToUTF8Array' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "stringToUTF8")) Module["stringToUTF8"] = function() { abort("'stringToUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "lengthBytesUTF8")) Module["lengthBytesUTF8"] = function() { abort("'lengthBytesUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "stackTrace")) Module["stackTrace"] = function() { abort("'stackTrace' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "addOnPreRun")) Module["addOnPreRun"] = function() { abort("'addOnPreRun' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "addOnInit")) Module["addOnInit"] = function() { abort("'addOnInit' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "addOnPreMain")) Module["addOnPreMain"] = function() { abort("'addOnPreMain' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "addOnExit")) Module["addOnExit"] = function() { abort("'addOnExit' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "addOnPostRun")) Module["addOnPostRun"] = function() { abort("'addOnPostRun' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "writeStringToMemory")) Module["writeStringToMemory"] = function() { abort("'writeStringToMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "writeArrayToMemory")) Module["writeArrayToMemory"] = function() { abort("'writeArrayToMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "writeAsciiToMemory")) Module["writeAsciiToMemory"] = function() { abort("'writeAsciiToMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "addRunDependency")) Module["addRunDependency"] = function() { abort("'addRunDependency' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; +if (!Object.getOwnPropertyDescriptor(Module, "removeRunDependency")) Module["removeRunDependency"] = function() { abort("'removeRunDependency' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; +if (!Object.getOwnPropertyDescriptor(Module, "FS_createFolder")) Module["FS_createFolder"] = function() { abort("'FS_createFolder' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "FS_createPath")) Module["FS_createPath"] = function() { abort("'FS_createPath' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; +if (!Object.getOwnPropertyDescriptor(Module, "FS_createDataFile")) Module["FS_createDataFile"] = function() { abort("'FS_createDataFile' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; +if (!Object.getOwnPropertyDescriptor(Module, "FS_createPreloadedFile")) Module["FS_createPreloadedFile"] = function() { abort("'FS_createPreloadedFile' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; +if (!Object.getOwnPropertyDescriptor(Module, "FS_createLazyFile")) Module["FS_createLazyFile"] = function() { abort("'FS_createLazyFile' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; +if (!Object.getOwnPropertyDescriptor(Module, "FS_createLink")) Module["FS_createLink"] = function() { abort("'FS_createLink' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "FS_createDevice")) Module["FS_createDevice"] = function() { abort("'FS_createDevice' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; +if (!Object.getOwnPropertyDescriptor(Module, "FS_unlink")) Module["FS_unlink"] = function() { abort("'FS_unlink' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; +if (!Object.getOwnPropertyDescriptor(Module, "getLEB")) Module["getLEB"] = function() { abort("'getLEB' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getFunctionTables")) Module["getFunctionTables"] = function() { abort("'getFunctionTables' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "alignFunctionTables")) Module["alignFunctionTables"] = function() { abort("'alignFunctionTables' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerFunctions")) Module["registerFunctions"] = function() { abort("'registerFunctions' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "addFunction")) Module["addFunction"] = function() { abort("'addFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "removeFunction")) Module["removeFunction"] = function() { abort("'removeFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getFuncWrapper")) Module["getFuncWrapper"] = function() { abort("'getFuncWrapper' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "prettyPrint")) Module["prettyPrint"] = function() { abort("'prettyPrint' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "dynCall")) Module["dynCall"] = function() { abort("'dynCall' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getCompilerSetting")) Module["getCompilerSetting"] = function() { abort("'getCompilerSetting' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "print")) Module["print"] = function() { abort("'print' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "printErr")) Module["printErr"] = function() { abort("'printErr' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getTempRet0")) Module["getTempRet0"] = function() { abort("'getTempRet0' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "setTempRet0")) Module["setTempRet0"] = function() { abort("'setTempRet0' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "callMain")) Module["callMain"] = function() { abort("'callMain' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "abort")) Module["abort"] = function() { abort("'abort' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "keepRuntimeAlive")) Module["keepRuntimeAlive"] = function() { abort("'keepRuntimeAlive' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "zeroMemory")) Module["zeroMemory"] = function() { abort("'zeroMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "stringToNewUTF8")) Module["stringToNewUTF8"] = function() { abort("'stringToNewUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "setFileTime")) Module["setFileTime"] = function() { abort("'setFileTime' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "emscripten_realloc_buffer")) Module["emscripten_realloc_buffer"] = function() { abort("'emscripten_realloc_buffer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "ENV")) Module["ENV"] = function() { abort("'ENV' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "ERRNO_CODES")) Module["ERRNO_CODES"] = function() { abort("'ERRNO_CODES' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "ERRNO_MESSAGES")) Module["ERRNO_MESSAGES"] = function() { abort("'ERRNO_MESSAGES' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "setErrNo")) Module["setErrNo"] = function() { abort("'setErrNo' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "inetPton4")) Module["inetPton4"] = function() { abort("'inetPton4' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "inetNtop4")) Module["inetNtop4"] = function() { abort("'inetNtop4' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "inetPton6")) Module["inetPton6"] = function() { abort("'inetPton6' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "inetNtop6")) Module["inetNtop6"] = function() { abort("'inetNtop6' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "readSockaddr")) Module["readSockaddr"] = function() { abort("'readSockaddr' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "writeSockaddr")) Module["writeSockaddr"] = function() { abort("'writeSockaddr' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "DNS")) Module["DNS"] = function() { abort("'DNS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getHostByName")) Module["getHostByName"] = function() { abort("'getHostByName' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "GAI_ERRNO_MESSAGES")) Module["GAI_ERRNO_MESSAGES"] = function() { abort("'GAI_ERRNO_MESSAGES' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "Protocols")) Module["Protocols"] = function() { abort("'Protocols' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "Sockets")) Module["Sockets"] = function() { abort("'Sockets' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getRandomDevice")) Module["getRandomDevice"] = function() { abort("'getRandomDevice' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "traverseStack")) Module["traverseStack"] = function() { abort("'traverseStack' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "UNWIND_CACHE")) Module["UNWIND_CACHE"] = function() { abort("'UNWIND_CACHE' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "withBuiltinMalloc")) Module["withBuiltinMalloc"] = function() { abort("'withBuiltinMalloc' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "readAsmConstArgsArray")) Module["readAsmConstArgsArray"] = function() { abort("'readAsmConstArgsArray' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "readAsmConstArgs")) Module["readAsmConstArgs"] = function() { abort("'readAsmConstArgs' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "mainThreadEM_ASM")) Module["mainThreadEM_ASM"] = function() { abort("'mainThreadEM_ASM' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "jstoi_q")) Module["jstoi_q"] = function() { abort("'jstoi_q' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "jstoi_s")) Module["jstoi_s"] = function() { abort("'jstoi_s' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getExecutableName")) Module["getExecutableName"] = function() { abort("'getExecutableName' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "listenOnce")) Module["listenOnce"] = function() { abort("'listenOnce' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "autoResumeAudioContext")) Module["autoResumeAudioContext"] = function() { abort("'autoResumeAudioContext' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "dynCallLegacy")) Module["dynCallLegacy"] = function() { abort("'dynCallLegacy' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getDynCaller")) Module["getDynCaller"] = function() { abort("'getDynCaller' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "dynCall")) Module["dynCall"] = function() { abort("'dynCall' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "callRuntimeCallbacks")) Module["callRuntimeCallbacks"] = function() { abort("'callRuntimeCallbacks' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "handleException")) Module["handleException"] = function() { abort("'handleException' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "runtimeKeepalivePush")) Module["runtimeKeepalivePush"] = function() { abort("'runtimeKeepalivePush' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "runtimeKeepalivePop")) Module["runtimeKeepalivePop"] = function() { abort("'runtimeKeepalivePop' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "callUserCallback")) Module["callUserCallback"] = function() { abort("'callUserCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "maybeExit")) Module["maybeExit"] = function() { abort("'maybeExit' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "safeSetTimeout")) Module["safeSetTimeout"] = function() { abort("'safeSetTimeout' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "asmjsMangle")) Module["asmjsMangle"] = function() { abort("'asmjsMangle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "asyncLoad")) Module["asyncLoad"] = function() { abort("'asyncLoad' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "alignMemory")) Module["alignMemory"] = function() { abort("'alignMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "mmapAlloc")) Module["mmapAlloc"] = function() { abort("'mmapAlloc' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "reallyNegative")) Module["reallyNegative"] = function() { abort("'reallyNegative' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "unSign")) Module["unSign"] = function() { abort("'unSign' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "reSign")) Module["reSign"] = function() { abort("'reSign' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "formatString")) Module["formatString"] = function() { abort("'formatString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "PATH")) Module["PATH"] = function() { abort("'PATH' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "PATH_FS")) Module["PATH_FS"] = function() { abort("'PATH_FS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "SYSCALLS")) Module["SYSCALLS"] = function() { abort("'SYSCALLS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "syscallMmap2")) Module["syscallMmap2"] = function() { abort("'syscallMmap2' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "syscallMunmap")) Module["syscallMunmap"] = function() { abort("'syscallMunmap' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getSocketFromFD")) Module["getSocketFromFD"] = function() { abort("'getSocketFromFD' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getSocketAddress")) Module["getSocketAddress"] = function() { abort("'getSocketAddress' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "JSEvents")) Module["JSEvents"] = function() { abort("'JSEvents' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerKeyEventCallback")) Module["registerKeyEventCallback"] = function() { abort("'registerKeyEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "specialHTMLTargets")) Module["specialHTMLTargets"] = function() { abort("'specialHTMLTargets' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "maybeCStringToJsString")) Module["maybeCStringToJsString"] = function() { abort("'maybeCStringToJsString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "findEventTarget")) Module["findEventTarget"] = function() { abort("'findEventTarget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "findCanvasEventTarget")) Module["findCanvasEventTarget"] = function() { abort("'findCanvasEventTarget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getBoundingClientRect")) Module["getBoundingClientRect"] = function() { abort("'getBoundingClientRect' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "fillMouseEventData")) Module["fillMouseEventData"] = function() { abort("'fillMouseEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerMouseEventCallback")) Module["registerMouseEventCallback"] = function() { abort("'registerMouseEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerWheelEventCallback")) Module["registerWheelEventCallback"] = function() { abort("'registerWheelEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerUiEventCallback")) Module["registerUiEventCallback"] = function() { abort("'registerUiEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerFocusEventCallback")) Module["registerFocusEventCallback"] = function() { abort("'registerFocusEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "fillDeviceOrientationEventData")) Module["fillDeviceOrientationEventData"] = function() { abort("'fillDeviceOrientationEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerDeviceOrientationEventCallback")) Module["registerDeviceOrientationEventCallback"] = function() { abort("'registerDeviceOrientationEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "fillDeviceMotionEventData")) Module["fillDeviceMotionEventData"] = function() { abort("'fillDeviceMotionEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerDeviceMotionEventCallback")) Module["registerDeviceMotionEventCallback"] = function() { abort("'registerDeviceMotionEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "screenOrientation")) Module["screenOrientation"] = function() { abort("'screenOrientation' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "fillOrientationChangeEventData")) Module["fillOrientationChangeEventData"] = function() { abort("'fillOrientationChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerOrientationChangeEventCallback")) Module["registerOrientationChangeEventCallback"] = function() { abort("'registerOrientationChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "fillFullscreenChangeEventData")) Module["fillFullscreenChangeEventData"] = function() { abort("'fillFullscreenChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerFullscreenChangeEventCallback")) Module["registerFullscreenChangeEventCallback"] = function() { abort("'registerFullscreenChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerRestoreOldStyle")) Module["registerRestoreOldStyle"] = function() { abort("'registerRestoreOldStyle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "hideEverythingExceptGivenElement")) Module["hideEverythingExceptGivenElement"] = function() { abort("'hideEverythingExceptGivenElement' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "restoreHiddenElements")) Module["restoreHiddenElements"] = function() { abort("'restoreHiddenElements' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "setLetterbox")) Module["setLetterbox"] = function() { abort("'setLetterbox' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "currentFullscreenStrategy")) Module["currentFullscreenStrategy"] = function() { abort("'currentFullscreenStrategy' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "restoreOldWindowedStyle")) Module["restoreOldWindowedStyle"] = function() { abort("'restoreOldWindowedStyle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "softFullscreenResizeWebGLRenderTarget")) Module["softFullscreenResizeWebGLRenderTarget"] = function() { abort("'softFullscreenResizeWebGLRenderTarget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "doRequestFullscreen")) Module["doRequestFullscreen"] = function() { abort("'doRequestFullscreen' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "fillPointerlockChangeEventData")) Module["fillPointerlockChangeEventData"] = function() { abort("'fillPointerlockChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerPointerlockChangeEventCallback")) Module["registerPointerlockChangeEventCallback"] = function() { abort("'registerPointerlockChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerPointerlockErrorEventCallback")) Module["registerPointerlockErrorEventCallback"] = function() { abort("'registerPointerlockErrorEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "requestPointerLock")) Module["requestPointerLock"] = function() { abort("'requestPointerLock' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "fillVisibilityChangeEventData")) Module["fillVisibilityChangeEventData"] = function() { abort("'fillVisibilityChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerVisibilityChangeEventCallback")) Module["registerVisibilityChangeEventCallback"] = function() { abort("'registerVisibilityChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerTouchEventCallback")) Module["registerTouchEventCallback"] = function() { abort("'registerTouchEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "fillGamepadEventData")) Module["fillGamepadEventData"] = function() { abort("'fillGamepadEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerGamepadEventCallback")) Module["registerGamepadEventCallback"] = function() { abort("'registerGamepadEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerBeforeUnloadEventCallback")) Module["registerBeforeUnloadEventCallback"] = function() { abort("'registerBeforeUnloadEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "fillBatteryEventData")) Module["fillBatteryEventData"] = function() { abort("'fillBatteryEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "battery")) Module["battery"] = function() { abort("'battery' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerBatteryEventCallback")) Module["registerBatteryEventCallback"] = function() { abort("'registerBatteryEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "setCanvasElementSize")) Module["setCanvasElementSize"] = function() { abort("'setCanvasElementSize' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getCanvasElementSize")) Module["getCanvasElementSize"] = function() { abort("'getCanvasElementSize' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "polyfillSetImmediate")) Module["polyfillSetImmediate"] = function() { abort("'polyfillSetImmediate' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "demangle")) Module["demangle"] = function() { abort("'demangle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "demangleAll")) Module["demangleAll"] = function() { abort("'demangleAll' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "jsStackTrace")) Module["jsStackTrace"] = function() { abort("'jsStackTrace' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "stackTrace")) Module["stackTrace"] = function() { abort("'stackTrace' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getEnvStrings")) Module["getEnvStrings"] = function() { abort("'getEnvStrings' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "checkWasiClock")) Module["checkWasiClock"] = function() { abort("'checkWasiClock' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToI64")) Module["writeI53ToI64"] = function() { abort("'writeI53ToI64' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToI64Clamped")) Module["writeI53ToI64Clamped"] = function() { abort("'writeI53ToI64Clamped' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToI64Signaling")) Module["writeI53ToI64Signaling"] = function() { abort("'writeI53ToI64Signaling' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToU64Clamped")) Module["writeI53ToU64Clamped"] = function() { abort("'writeI53ToU64Clamped' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToU64Signaling")) Module["writeI53ToU64Signaling"] = function() { abort("'writeI53ToU64Signaling' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "readI53FromI64")) Module["readI53FromI64"] = function() { abort("'readI53FromI64' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "readI53FromU64")) Module["readI53FromU64"] = function() { abort("'readI53FromU64' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "convertI32PairToI53")) Module["convertI32PairToI53"] = function() { abort("'convertI32PairToI53' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "convertU32PairToI53")) Module["convertU32PairToI53"] = function() { abort("'convertU32PairToI53' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "uncaughtExceptionCount")) Module["uncaughtExceptionCount"] = function() { abort("'uncaughtExceptionCount' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "exceptionLast")) Module["exceptionLast"] = function() { abort("'exceptionLast' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "exceptionCaught")) Module["exceptionCaught"] = function() { abort("'exceptionCaught' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "ExceptionInfo")) Module["ExceptionInfo"] = function() { abort("'ExceptionInfo' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "CatchInfo")) Module["CatchInfo"] = function() { abort("'CatchInfo' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "exception_addRef")) Module["exception_addRef"] = function() { abort("'exception_addRef' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "exception_decRef")) Module["exception_decRef"] = function() { abort("'exception_decRef' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "Browser")) Module["Browser"] = function() { abort("'Browser' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "funcWrappers")) Module["funcWrappers"] = function() { abort("'funcWrappers' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getFuncWrapper")) Module["getFuncWrapper"] = function() { abort("'getFuncWrapper' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "setMainLoop")) Module["setMainLoop"] = function() { abort("'setMainLoop' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "wget")) Module["wget"] = function() { abort("'wget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "FS")) Module["FS"] = function() { abort("'FS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "MEMFS")) Module["MEMFS"] = function() { abort("'MEMFS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "TTY")) Module["TTY"] = function() { abort("'TTY' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "PIPEFS")) Module["PIPEFS"] = function() { abort("'PIPEFS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "SOCKFS")) Module["SOCKFS"] = function() { abort("'SOCKFS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "_setNetworkCallback")) Module["_setNetworkCallback"] = function() { abort("'_setNetworkCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "tempFixedLengthArray")) Module["tempFixedLengthArray"] = function() { abort("'tempFixedLengthArray' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "miniTempWebGLFloatBuffers")) Module["miniTempWebGLFloatBuffers"] = function() { abort("'miniTempWebGLFloatBuffers' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "heapObjectForWebGLType")) Module["heapObjectForWebGLType"] = function() { abort("'heapObjectForWebGLType' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "heapAccessShiftForWebGLHeap")) Module["heapAccessShiftForWebGLHeap"] = function() { abort("'heapAccessShiftForWebGLHeap' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "GL")) Module["GL"] = function() { abort("'GL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "emscriptenWebGLGet")) Module["emscriptenWebGLGet"] = function() { abort("'emscriptenWebGLGet' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "computeUnpackAlignedImageSize")) Module["computeUnpackAlignedImageSize"] = function() { abort("'computeUnpackAlignedImageSize' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "emscriptenWebGLGetTexPixelData")) Module["emscriptenWebGLGetTexPixelData"] = function() { abort("'emscriptenWebGLGetTexPixelData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "emscriptenWebGLGetUniform")) Module["emscriptenWebGLGetUniform"] = function() { abort("'emscriptenWebGLGetUniform' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "webglGetUniformLocation")) Module["webglGetUniformLocation"] = function() { abort("'webglGetUniformLocation' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "webglPrepareUniformLocationsBeforeFirstUse")) Module["webglPrepareUniformLocationsBeforeFirstUse"] = function() { abort("'webglPrepareUniformLocationsBeforeFirstUse' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "webglGetLeftBracePos")) Module["webglGetLeftBracePos"] = function() { abort("'webglGetLeftBracePos' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "emscriptenWebGLGetVertexAttrib")) Module["emscriptenWebGLGetVertexAttrib"] = function() { abort("'emscriptenWebGLGetVertexAttrib' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "writeGLArray")) Module["writeGLArray"] = function() { abort("'writeGLArray' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "AL")) Module["AL"] = function() { abort("'AL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "SDL_unicode")) Module["SDL_unicode"] = function() { abort("'SDL_unicode' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "SDL_ttfContext")) Module["SDL_ttfContext"] = function() { abort("'SDL_ttfContext' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "SDL_audio")) Module["SDL_audio"] = function() { abort("'SDL_audio' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "SDL")) Module["SDL"] = function() { abort("'SDL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "SDL_gfx")) Module["SDL_gfx"] = function() { abort("'SDL_gfx' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "GLUT")) Module["GLUT"] = function() { abort("'GLUT' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "EGL")) Module["EGL"] = function() { abort("'EGL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "GLFW_Window")) Module["GLFW_Window"] = function() { abort("'GLFW_Window' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "GLFW")) Module["GLFW"] = function() { abort("'GLFW' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "GLEW")) Module["GLEW"] = function() { abort("'GLEW' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "IDBStore")) Module["IDBStore"] = function() { abort("'IDBStore' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "runAndAbortIfError")) Module["runAndAbortIfError"] = function() { abort("'runAndAbortIfError' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "NODEFS")) Module["NODEFS"] = function() { abort("'NODEFS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "WORKERFS")) Module["WORKERFS"] = function() { abort("'WORKERFS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "warnOnce")) Module["warnOnce"] = function() { abort("'warnOnce' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "stackSave")) Module["stackSave"] = function() { abort("'stackSave' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "stackRestore")) Module["stackRestore"] = function() { abort("'stackRestore' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "stackAlloc")) Module["stackAlloc"] = function() { abort("'stackAlloc' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "AsciiToString")) Module["AsciiToString"] = function() { abort("'AsciiToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "stringToAscii")) Module["stringToAscii"] = function() { abort("'stringToAscii' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "UTF16ToString")) Module["UTF16ToString"] = function() { abort("'UTF16ToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "stringToUTF16")) Module["stringToUTF16"] = function() { abort("'stringToUTF16' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "lengthBytesUTF16")) Module["lengthBytesUTF16"] = function() { abort("'lengthBytesUTF16' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "UTF32ToString")) Module["UTF32ToString"] = function() { abort("'UTF32ToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "stringToUTF32")) Module["stringToUTF32"] = function() { abort("'stringToUTF32' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "lengthBytesUTF32")) Module["lengthBytesUTF32"] = function() { abort("'lengthBytesUTF32' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "allocateUTF8")) Module["allocateUTF8"] = function() { abort("'allocateUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "allocateUTF8OnStack")) Module["allocateUTF8OnStack"] = function() { abort("'allocateUTF8OnStack' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +Module["writeStackCookie"] = writeStackCookie; +Module["checkStackCookie"] = checkStackCookie; +if (!Object.getOwnPropertyDescriptor(Module, "ALLOC_NORMAL")) Object.defineProperty(Module, "ALLOC_NORMAL", { configurable: true, get: function() { abort("'ALLOC_NORMAL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") } }); +if (!Object.getOwnPropertyDescriptor(Module, "ALLOC_STACK")) Object.defineProperty(Module, "ALLOC_STACK", { configurable: true, get: function() { abort("'ALLOC_STACK' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)") } }); + +var calledRun; + +/** + * @constructor + * @this {ExitStatus} + */ +function ExitStatus(status) { + this.name = "ExitStatus"; + this.message = "Program terminated with exit(" + status + ")"; + this.status = status; +} + +var calledMain = false; + +dependenciesFulfilled = function runCaller() { + // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false) + if (!calledRun) run(); + if (!calledRun) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled +}; + +function callMain(args) { + assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); + assert(__ATPRERUN__.length == 0, 'cannot call main when preRun functions remain to be called'); + + var entryFunction = Module['_main']; + + args = args || []; + + var argc = args.length+1; + var argv = stackAlloc((argc + 1) * 4); + HEAP32[argv >> 2] = allocateUTF8OnStack(thisProgram); + for (var i = 1; i < argc; i++) { + HEAP32[(argv >> 2) + i] = allocateUTF8OnStack(args[i - 1]); + } + HEAP32[(argv >> 2) + argc] = 0; + + try { + + var ret = entryFunction(argc, argv); + + // In PROXY_TO_PTHREAD builds, we should never exit the runtime below, as + // execution is asynchronously handed off to a pthread. + // if we're not running an evented main loop, it's time to exit + exit(ret, /* implicit = */ true); + return ret; + } + catch (e) { + return handleException(e); + } finally { + calledMain = true; + + } +} + +function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + // TODO(sbc): Move writeStackCookie to native to to avoid this. + _emscripten_stack_init(); + writeStackCookie(); +} + +/** @type {function(Array=)} */ +function run(args) { + args = args || arguments_; + + if (runDependencies > 0) { + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + if (calledRun) return; + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + preMain(); + + readyPromiseResolve(Module); + if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized'](); + + if (shouldRunNow) callMain(args); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(function() { + setTimeout(function() { + Module['setStatus'](''); + }, 1); + doRun(); + }, 1); + } else + { + doRun(); + } + checkStackCookie(); +} +Module['run'] = run; + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = function(x) { + has = true; + } + try { // it doesn't matter if it fails + var flush = Module['_fflush']; + if (flush) flush(0); + // also flush in the JS FS layer + ['stdout', 'stderr'].forEach(function(name) { + var info = FS.analyzePath('/dev/' + name); + if (!info) return; + var stream = info.object; + var rdev = stream.rdev; + var tty = TTY.ttys[rdev]; + if (tty && tty.output && tty.output.length) { + has = true; + } + }); + } catch(e) {} + out = oldOut; + err = oldErr; + if (has) { + warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the FAQ), or make sure to emit a newline when you printf etc.'); + } +} + +/** @param {boolean|number=} implicit */ +function exit(status, implicit) { + EXITSTATUS = status; + + checkUnflushedContent(); + + if (keepRuntimeAlive()) { + // if exit() was called, we may warn the user if the runtime isn't actually being shut down + if (!implicit) { + var msg = 'program exited (with status: ' + status + '), but EXIT_RUNTIME is not set, so halting execution but not exiting the runtime or preventing further async execution (build with EXIT_RUNTIME=1, if you want a true shutdown)'; + readyPromiseReject(msg); + err(msg); + } + } else { + exitRuntime(); + } + + procExit(status); +} + +function procExit(code) { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + if (Module['onExit']) Module['onExit'](code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); +} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} + +// shouldRunNow refers to calling main(), not run(). +var shouldRunNow = true; + +if (Module['noInitialRun']) shouldRunNow = false; + +run(); + + + + + +Module.FS = FS; +Module.NODEFS = NODEFS; +Module.WORKERFS = WORKERFS; +Module.callMain = callMain; + + return SevenZip.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = SevenZip; +else if (typeof define === 'function' && define['amd']) + define([], function() { return SevenZip; }); +else if (typeof exports === 'object') + exports["SevenZip"] = SevenZip; diff --git a/dist/7zz.wasm b/dist/7zz.wasm new file mode 100644 index 0000000000000000000000000000000000000000..d0258e9d14d8dc3e184de93703576388abb5473b GIT binary patch literal 1871731 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 z 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

  • `Li4#dQc3=`)10T}DYzWn-i5CXon5AZ8MQQ1*%H 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%0D*0HS^ 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 literal 0 HcmV?d00001 diff --git a/dist/ffmpeg.min.js b/dist/ffmpeg.min.js new file mode 100644 index 0000000..8515df1 --- /dev/null +++ b/dist/ffmpeg.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.FFmpeg=t():e.FFmpeg=t()}(self,(function(){return e={497:(e,t,r)=>{r(72);var n=r(306).devDependencies;e.exports={corePath:"https://unpkg.com/@ffmpeg/core@".concat(n["@ffmpeg/core"].substring(1),"/dist/ffmpeg-core.js")}},663:(e,t,r)=>{function n(e,t,r,n,o,i,a){try{var c=e[i](a),s=c.value}catch(e){return void r(e)}c.done?t(s):Promise.resolve(s).then(n,o)}var o=r(72),i=function(e){return new Promise((function(t,r){var n=new FileReader;n.onload=function(){t(n.result)},n.onerror=function(e){var t=e.target.error.code;r(Error("File could not be read! Code=".concat(t)))},n.readAsArrayBuffer(e)}))};e.exports=function(){var e,t=(e=regeneratorRuntime.mark((function e(t){var r,n;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=t,void 0!==t){e.next=3;break}return e.abrupt("return",new Uint8Array);case 3:if("string"!=typeof t){e.next=16;break}if(!/data:_data\/([a-zA-Z]*);base64,([^"]*)/.test(t)){e.next=8;break}r=atob(t.split(",")[1]).split("").map((function(e){return e.charCodeAt(0)})),e.next=14;break;case 8:return e.next=10,fetch(o(t));case 10:return n=e.sent,e.next=13,n.arrayBuffer();case 13:r=e.sent;case 14:e.next=20;break;case 16:if(!(t instanceof File||t instanceof Blob)){e.next=20;break}return e.next=19,i(t);case 19:r=e.sent;case 20:return e.abrupt("return",new Uint8Array(r));case 21:case"end":return e.stop()}}),e)})),function(){var t=this,r=arguments;return new Promise((function(o,i){var a=e.apply(t,r);function c(e){n(a,o,i,c,s,"next",e)}function s(e){n(a,o,i,c,s,"throw",e)}c(void 0)}))});return function(e){return t.apply(this,arguments)}}()},452:(e,t,r)=>{function n(e,t,r,n,o,i,a){try{var c=e[i](a),s=c.value}catch(e){return void r(e)}c.done?t(s):Promise.resolve(s).then(n,o)}function o(e){return function(){var t=this,r=arguments;return new Promise((function(o,i){var a=e.apply(t,r);function c(e){n(a,o,i,c,s,"next",e)}function s(e){n(a,o,i,c,s,"throw",e)}c(void 0)}))}}var i=r(72),a=r(185).log,c=function(){var e=o(regeneratorRuntime.mark((function e(t,r){var n,o,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a("info","fetch ".concat(t)),e.next=3,fetch(t);case 3:return e.next=5,e.sent.arrayBuffer();case 5:return n=e.sent,a("info","".concat(t," file size = ").concat(n.byteLength," bytes")),o=new Blob([n],{type:r}),i=URL.createObjectURL(o),a("info","".concat(t," blob URL = ").concat(i)),e.abrupt("return",i);case 11:case"end":return e.stop()}}),e)})));return function(t,r){return e.apply(this,arguments)}}();e.exports=function(){var e=o(regeneratorRuntime.mark((function e(t){var r,n,o,s,u;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if("string"==typeof(r=t.corePath)){e.next=3;break}throw Error("corePath should be a string!");case 3:return n=i(r),e.next=6,c(n,"application/javascript");case 6:return o=e.sent,e.next=9,c(n.replace("ffmpeg-core.js","ffmpeg-core.wasm"),"application/wasm");case 9:return s=e.sent,e.next=12,c(n.replace("ffmpeg-core.js","ffmpeg-core.worker.js"),"application/javascript");case 12:if(u=e.sent,"undefined"!=typeof createFFmpegCore){e.next=15;break}return e.abrupt("return",new Promise((function(e){var t=document.createElement("script");t.src=o,t.type="text/javascript",t.addEventListener("load",(function r(){t.removeEventListener("load",r),a("info","ffmpeg-core.js script loaded"),e({createFFmpegCore,corePath:o,wasmPath:s,workerPath:u})})),document.getElementsByTagName("head")[0].appendChild(t)})));case 15:return a("info","ffmpeg-core.js script is loaded already"),e.abrupt("return",Promise.resolve({createFFmpegCore,corePath:o,wasmPath:s,workerPath:u}));case 17:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()},698:(e,t,r)=>{var n=r(497),o=r(452),i=r(663);e.exports={defaultOptions:n,getCreateFFmpegCore:o,fetchFile:i}},500:e=>{e.exports={defaultArgs:["./ffmpeg","-nostdin","-y"],baseOptions:{log:!1,logger:function(){},progress:function(){},corePath:""}}},906:(e,t,r)=>{function n(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?o(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=r(500),p=l.defaultArgs,h=l.baseOptions,m=r(185),g=m.setLogging,d=m.setCustomLogger,y=m.log,v=r(583),b=r(319),w=r(698),x=w.defaultOptions,j=w.getCreateFFmpegCore,E=r(306).version,O=Error("ffmpeg.wasm is not ready, make sure you have completed load().");e.exports=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=s(s(s({},h),x),e),r=t.log,o=t.logger,i=t.progress,c=f(t,["log","logger","progress"]),u=null,l=null,m=null,w=!1,F=i,L=function(e){"FFMPEG_END"===e&&null!==m&&(m(),m=null,w=!1)},P=function(e){var t=e.type,r=e.message;y(t,r),v(r,F),L(r)},k=function(){var e=a(regeneratorRuntime.mark((function e(){var t,r,n,o,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(y("info","load ffmpeg-core"),null!==u){e.next=17;break}return y("info","loading ffmpeg-core"),e.next=5,j(c);case 5:return t=e.sent,r=t.createFFmpegCore,n=t.corePath,o=t.workerPath,i=t.wasmPath,e.next=12,r({mainScriptUrlOrBlob:n,printErr:function(e){return P({type:"fferr",message:e})},print:function(e){return P({type:"ffout",message:e})},locateFile:function(e,t){if("undefined"!=typeof window){if(void 0!==i&&e.endsWith("ffmpeg-core.wasm"))return i;if(void 0!==o&&e.endsWith("ffmpeg-core.worker.js"))return o}return t+e}});case 12:u=e.sent,l=u.cwrap("main","number",["number","number"]),y("info","ffmpeg-core loaded"),e.next=18;break;case 17:throw Error("ffmpeg.wasm was loaded, you should not load it again, use ffmpeg.isLoaded() to check next time.");case 18:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),S=function(){return null!==u},A=function(){for(var e=arguments.length,t=new Array(e),r=0;r1?t-1:0),n=1;n")})).join(" "))),null===u)throw O;var o=null;try{var i;o=(i=u.FS)[e].apply(i,r)}catch(t){throw"readdir"===e?Error("ffmpeg.FS('readdir', '".concat(r[0],"') error. Check if the path exists, ex: ffmpeg.FS('readdir', '/')")):"readFile"===e?Error("ffmpeg.FS('readFile', '".concat(r[0],"') error. Check if the path exists")):Error("Oops, something went wrong in FS operation.")}return o},C=function(){if(null===u)throw O;w=!1,u.exit(1),u=null,l=null,m=null},R=function(e){F=e},T=function(e){d(e)};return g(r),d(o),y("info","use ffmpeg.wasm v".concat(E)),{setProgress:R,setLogger:T,setLogging:g,load:k,isLoaded:S,run:A,exit:C,FS:_}}},352:(e,t,r)=>{r(666);var n=r(906),o=r(698).fetchFile;e.exports={createFFmpeg:n,fetchFile:o}},185:e=>{var t=!1,r=function(){};e.exports={logging:t,setLogging:function(e){t=e},setCustomLogger:function(e){r=e},log:function(e,n){r({type:e,message:n}),t&&console.log("[".concat(e,"] ").concat(n))}}},319:e=>{e.exports=function(e,t){var r=e._malloc(t.length*Uint32Array.BYTES_PER_ELEMENT);return t.forEach((function(t,n){var o=e._malloc(t.length+1);e.writeAsciiToMemory(t,o),e.setValue(r+Uint32Array.BYTES_PER_ELEMENT*n,o,"i32")})),[t.length,r]}},583:e=>{function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);ra)&&(r=a)}else if(e.startsWith("frame")||e.startsWith("size")){var c=e.split("time=")[1].split(" ")[0],s=o(c);t({ratio:n=s/r,time:s})}else e.startsWith("video:")&&(t({ratio:1}),r=0)}},666:e=>{var t=function(e){"use strict";var t,r=Object.prototype,n=r.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function s(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,r){return e[t]=r}}function u(e,t,r,n){var o=t&&t.prototype instanceof d?t:d,i=Object.create(o.prototype),a=new k(n||[]);return i._invoke=function(e,t,r){var n=l;return function(o,i){if(n===h)throw new Error("Generator is already running");if(n===m){if("throw"===o)throw i;return A()}for(r.method=o,r.arg=i;;){var a=r.delegate;if(a){var c=F(a,r);if(c){if(c===g)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===l)throw n=m,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n=h;var s=f(e,t,r);if("normal"===s.type){if(n=r.done?m:p,s.arg===g)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(n=m,r.method="throw",r.arg=s.arg)}}}(e,r,a),i}function f(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var l="suspendedStart",p="suspendedYield",h="executing",m="completed",g={};function d(){}function y(){}function v(){}var b={};b[i]=function(){return this};var w=Object.getPrototypeOf,x=w&&w(w(S([])));x&&x!==r&&n.call(x,i)&&(b=x);var j=v.prototype=d.prototype=Object.create(b);function E(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function O(e,t){function r(o,i,a,c){var s=f(e[o],e,i);if("throw"!==s.type){var u=s.arg,l=u.value;return l&&"object"==typeof l&&n.call(l,"__await")?t.resolve(l.__await).then((function(e){r("next",e,a,c)}),(function(e){r("throw",e,a,c)})):t.resolve(l).then((function(e){u.value=e,a(u)}),(function(e){return r("throw",e,a,c)}))}c(s.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function F(e,r){var n=e.iterator[r.method];if(n===t){if(r.delegate=null,"throw"===r.method){if(e.iterator.return&&(r.method="return",r.arg=t,F(e,r),"throw"===r.method))return g;r.method="throw",r.arg=new TypeError("The iterator does not provide a 'throw' method")}return g}var o=f(n,e.iterator,r.arg);if("throw"===o.type)return r.method="throw",r.arg=o.arg,r.delegate=null,g;var i=o.arg;return i?i.done?(r[e.resultName]=i.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,g):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,g)}function L(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function P(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(L,this),this.reset(!0)}function S(e){if(e){var r=e[i];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,a=function r(){for(;++o=0;--i){var a=this.tryEntries[i],c=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var s=n.call(a,"catchLoc"),u=n.call(a,"finallyLoc");if(s&&u){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),P(r),g}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;P(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,r,n){return this.delegate={iterator:S(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),g}},e}(e.exports);try{regeneratorRuntime=t}catch(e){Function("r","regeneratorRuntime = r")(t)}},72:function(e,t,r){var n,o;void 0===(o="function"==typeof(n=function(){return function(){var e=arguments.length;if(0===e)throw new Error("resolveUrl requires at least one argument; got none.");var t=document.createElement("base");if(t.href=arguments[0],1===e)return t.href;var r=document.getElementsByTagName("head")[0];r.insertBefore(t,r.firstChild);for(var n,o=document.createElement("a"),i=1;i{"use strict";e.exports=JSON.parse('{"name":"@ffmpeg/ffmpeg","version":"0.10.1","description":"FFmpeg WebAssembly version","main":"src/index.js","types":"src/index.d.ts","directories":{"example":"examples"},"scripts":{"start":"node scripts/server.js","build":"rimraf dist && webpack --config scripts/webpack.config.prod.js","prepublishOnly":"npm run build","lint":"eslint src","wait":"rimraf dist && wait-on http://localhost:3000/dist/ffmpeg.dev.js","test":"npm-run-all -p -r start test:all","test:all":"npm-run-all wait test:browser:ffmpeg test:node:all","test:node":"node --experimental-wasm-threads --experimental-wasm-bulk-memory node_modules/.bin/_mocha --exit --bail --require ./scripts/test-helper.js","test:node:all":"npm run test:node -- ./tests/*.test.js","test:browser":"mocha-headless-chrome -a allow-file-access-from-files -a incognito -a no-sandbox -a disable-setuid-sandbox -a disable-logging -t 300000","test:browser:ffmpeg":"npm run test:browser -- -f ./tests/ffmpeg.test.html"},"browser":{"./src/node/index.js":"./src/browser/index.js"},"repository":{"type":"git","url":"git+https://github.com/ffmpegwasm/ffmpeg.wasm.git"},"keywords":["ffmpeg","WebAssembly","video"],"author":"Jerome Wu ","license":"MIT","bugs":{"url":"https://github.com/ffmpegwasm/ffmpeg.wasm/issues"},"engines":{"node":">=12.16.1"},"homepage":"https://github.com/ffmpegwasm/ffmpeg.wasm#readme","dependencies":{"is-url":"^1.2.4","node-fetch":"^2.6.1","regenerator-runtime":"^0.13.7","resolve-url":"^0.2.1"},"devDependencies":{"@babel/core":"^7.12.3","@babel/preset-env":"^7.12.1","@ffmpeg/core":"^0.10.0","@types/emscripten":"^1.39.4","babel-loader":"^8.1.0","chai":"^4.2.0","cors":"^2.8.5","eslint":"^7.12.1","eslint-config-airbnb-base":"^14.1.0","eslint-plugin-import":"^2.22.1","express":"^4.17.1","mocha":"^8.2.1","mocha-headless-chrome":"^2.0.3","npm-run-all":"^4.1.5","wait-on":"^5.3.0","webpack":"^5.3.2","webpack-cli":"^4.1.0","webpack-dev-middleware":"^4.0.0"}}')}},t={},function r(n){if(t[n])return t[n].exports;var o=t[n]={exports:{}};return e[n].call(o.exports,o,o.exports,r),o.exports}(352);var e,t})); +//# sourceMappingURL=ffmpeg.min.js.map \ No newline at end of file diff --git a/dist/fsalib.min.js b/dist/fsalib.min.js new file mode 100644 index 0000000..878abbd --- /dev/null +++ b/dist/fsalib.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.FileSystemAccess=t():e.FileSystemAccess=t()}(self,(function(){return(()=>{"use strict";var e={193:(e,t,r)=>{r.r(t),r.d(t,{FileSystemDirectoryHandle:()=>s,default:()=>a});var n=r(335),i=r(190);const o=Symbol("adapter");class s extends n.FileSystemHandle{constructor(e){super(e),this.kind="directory",this[o]=e}async getDirectoryHandle(e,t={}){if(""===e)throw new TypeError("Name can't be an empty string.");if("."===e||".."===e||e.includes("/"))throw new TypeError("Name contains invalid characters.");return new s(await this[o].getDirectoryHandle(e,t))}getDirectory(e,t={}){return this.getDirectoryHandle(e,t)}async*entries(){for await(const[e,t]of this[o].entries())yield[t.name,"file"===t.kind?new i.FileSystemFileHandle(t):new s(t)]}async*getEntries(){return this.entries()}async*keys(){for await(const[e]of this[o].entries())yield e}async*values(){for await(const[e,t]of this.entries())yield t}async getFileHandle(e,t={}){if(""===e)throw new TypeError("Name can't be an empty string.");if("."===e||".."===e||e.includes("/"))throw new TypeError("Name contains invalid characters.");return t.create=!!t.create,new i.FileSystemFileHandle(await this[o].getFileHandle(e,t))}getFile(e,t={}){return this.getFileHandle(e,t)}async removeEntry(e,t={}){if(""===e)throw new TypeError("Name can't be an empty string.");if("."===e||".."===e||e.includes("/"))throw new TypeError("Name contains invalid characters.");return t.recursive=!!t.recursive,this[o].removeEntry(e,t)}async resolve(e){if(await e.isSameEntry(this))return[];const t=[{handle:this,path:[]}];for(;t.length;){let{handle:r,path:n}=t.pop();for await(const i of r.values()){if(await i.isSameEntry(e))return[...n,i.name];"directory"===i.kind&&t.push({handle:i,path:[...n,i.name]})}}return null}[Symbol.asyncIterator](){return this.entries()}}Object.defineProperty(s.prototype,Symbol.toStringTag,{value:"FileSystemDirectoryHandle",writable:!1,enumerable:!1,configurable:!0}),Object.defineProperties(s.prototype,{getDirectoryHandle:{enumerable:!0},entries:{enumerable:!0},getFileHandle:{enumerable:!0},removeEntry:{enumerable:!0}});const a=s},190:(e,t,r)=>{r.r(t),r.d(t,{FileSystemFileHandle:()=>o,default:()=>s});var n=r(335);const i=Symbol("adapter");class o extends n.FileSystemHandle{constructor(e){super(e),this.kind="file",this[i]=e}async createWritable(e={}){const{FileSystemWritableFileStream:t}=await Promise.resolve().then(r.bind(r,246));return new t(await this[i].createWritable(e))}async getFile(){return this[i].getFile()}}Object.defineProperty(o.prototype,Symbol.toStringTag,{value:"FileSystemFileHandle",writable:!1,enumerable:!1,configurable:!0}),Object.defineProperties(o.prototype,{createWritable:{enumerable:!0},getFile:{enumerable:!0}});const s=o},335:(e,t,r)=>{r.r(t),r.d(t,{FileSystemHandle:()=>i,default:()=>o});const n=Symbol("adapter");class i{constructor(e){this.kind=e.kind,this.name=e.name,this[n]=e}get isFile(){return"file"===this.kind}get isDirectory(){return"directory"===this.kind}async queryPermission(e={mode:"read"}){const t=this[n];if(t.queryPermission)return t.queryPermission(e);if("read"===e.mode)return"granted";if("readwrite"===e.mode)return t.writable?"granted":"denied";throw new TypeError(`Mode ${e.mode} must be 'read' or 'readwrite'`)}async requestPermission(e={mode:"read"}){const t=this[n];if(t.requestPermission)return t.requestPermission(e);if("read"===e.mode)return"granted";if("readwrite"===e.mode)return t.writable?"granted":"denied";throw new TypeError(`Mode ${e.mode} must be 'read' or 'readwrite'`)}async isSameEntry(e){return this===e||this.kind===e.kind&&!!e[n]&&await this[n].isSameEntry(e[n])}}Object.defineProperty(i.prototype,Symbol.toStringTag,{value:"FileSystemHandle",writable:!1,enumerable:!1,configurable:!0});const o=i},246:(e,t,r)=>{r.r(t),r.d(t,{FileSystemWritableFileStream:()=>o,default:()=>s});var n=r(673);const i=globalThis.WritableStream||n.WritableStream;class o extends i{constructor(e,t){super(e,t),this._closed=!1,Object.setPrototypeOf(this,o.prototype)}close(){this._closed=!0;const e=this.getWriter(),t=e.close();return e.releaseLock(),t}seek(e){return this.write({type:"seek",position:e})}truncate(e){return this.write({type:"truncate",size:e})}write(e){if(this._closed)return Promise.reject(new TypeError("Cannot write to a CLOSED writable stream"));const t=this.getWriter(),r=t.write(e);return t.releaseLock(),r}}Object.defineProperty(o.prototype,Symbol.toStringTag,{value:"FileSystemWritableFileStream",writable:!1,enumerable:!1,configurable:!0}),Object.defineProperties(o.prototype,{close:{enumerable:!0},seek:{enumerable:!0},truncate:{enumerable:!0},write:{enumerable:!0}});const s=o},254:(e,t,r)=>{r.r(t),r.d(t,{FileHandle:()=>s});var n=r(716);const{GONE:i}=n.errors,o=/constructor/i.test(window.HTMLElement)||window.safari||window.WebKitPoint;class s{constructor(e="unknown"){this.kind="file",this.writable=!0,this.name=e}async getFile(){throw new DOMException(...i)}async createWritable(e={}){var t;if(e.keepExistingData)throw new TypeError("Option keepExistingData is not implemented");const n=globalThis.TransformStream||(await Promise.resolve().then(r.bind(r,673))).TransformStream,i=globalThis.WritableStream||(await Promise.resolve().then(r.bind(r,673))).WritableStream,s=await(null===(t=navigator.serviceWorker)||void 0===t?void 0:t.getRegistration()),a=document.createElement("a"),c=new n,u=c.writable;if(a.download=this.name,o||!s){let e=[];c.readable.pipeTo(new i({write(t){e.push(new Blob([t]))},close(){const t=new Blob(e,{type:"application/octet-stream; charset=utf-8"});e=[],a.href=URL.createObjectURL(t),a.click(),setTimeout((()=>URL.revokeObjectURL(a.href)),1e4)}}))}else{const{writable:t,readablePort:r}=new l(i),o=encodeURIComponent(this.name).replace(/['()]/g,escape).replace(/\*/g,"%2A"),a={"content-disposition":"attachment; filename*=UTF-8''"+o,"content-type":"application/octet-stream; charset=utf-8",...e.size?{"content-length":e.size}:{}},u=setTimeout((()=>s.active.postMessage(0)),1e4);c.readable.pipeThrough(new n({transform(e,t){if(e instanceof Uint8Array)return t.enqueue(e);const r=new Response(e).body.getReader(),n=e=>r.read().then((e=>e.done?0:n(t.enqueue(e.value))));return n()}})).pipeTo(t).finally((()=>{clearInterval(u)})),s.active.postMessage({url:s.scope+o,headers:a,readablePort:r},[r]);const d=document.createElement("iframe");d.hidden=!0,d.src=s.scope+o,document.body.appendChild(d)}return u.getWriter()}async isSameEntry(e){return this===e}}class a{constructor(e){this._readyPending=!1,this._port=e,this._resetReady(),this._port.onmessage=e=>this._onMessage(e.data)}start(e){return this._controller=e,this._readyPromise}write(e){const t={type:0,chunk:e};return this._port.postMessage(t,[e.buffer]),this._resetReady(),this._readyPromise}close(){this._port.postMessage({type:2}),this._port.close()}abort(e){this._port.postMessage({type:1,reason:e}),this._port.close()}_onMessage(e){0===e.type&&this._resolveReady(),1===e.type&&this._onError(e.reason)}_onError(e){this._controller.error(e),this._rejectReady(e),this._port.close()}_resetReady(){this._readyPromise=new Promise(((e,t)=>{this._readyResolve=e,this._readyReject=t})),this._readyPending=!0}_resolveReady(){this._readyResolve(),this._readyPending=!1}_rejectReady(e){this._readyPending||this._resetReady(),this._readyPromise.catch((()=>{})),this._readyReject(e),this._readyPending=!1}}class l{constructor(e){const t=new MessageChannel;this.readablePort=t.port1,this.writable=new e(new a(t.port2))}}},16:(e,t,r)=>{r.r(t),r.d(t,{setFileImpl:()=>s,setBlobImpl:()=>a,FileHandle:()=>b,FolderHandle:()=>m,default:()=>y});var n=r(716);let i=globalThis.File,o=globalThis.Blob;const s=e=>{i=e},a=e=>{o=e},{INVALID:l,GONE:c,MISMATCH:u,MOD_ERR:d,SYNTAX:h,DISALLOWED:f}=n.errors;class p{constructor(e,t){this.fileHandle=e,this.file=t?e.file:new i([],e.file.name,e.file),this.size=t?e.file.size:0,this.position=0}async write(e){if(!this.fileHandle.file)throw new DOMException(...c);let t=this.file;if((0,n.isChunkObject)(e))if("write"===e.type){if("number"==typeof e.position&&e.position>=0&&(this.position=e.position,this.size=0){if(this.size=0)return t=e.sizet.size&&(this.position=t.size),void(this.file=t);throw new DOMException(...h("truncate requires a size argument"))}}e=new o([e]);let r=this.file;const s=r.slice(0,this.position),a=r.slice(this.position+e.size);let u=this.position-s.size;u<0&&(u=0),r=new i([s,new Uint8Array(u),e,a],r.name),this.size=r.size,this.position+=e.size,this.file=r}async close(){if(!this.fileHandle.file)throw new DOMException(...c);this.fileHandle.file=this.file,this.file=this.position=this.size=null,this.fileHandle.onclose&&this.fileHandle.onclose(this.fileHandle)}}class b{constructor(e="",t=new i([],e),r=!0){this.kind="file",this.deleted=!1,this.file=t,this.name=e,this.writable=r}async getFile(){if(this.deleted||null===this.file)throw new DOMException(...c);return this.file}async createWritable(e){if(!this.writable)throw new DOMException(...f);if(this.deleted)throw new DOMException(...c);return new p(this,!!(null==e?void 0:e.keepExistingData))}async isSameEntry(e){return this===e}destroy(){this.deleted=!0,this.file=null}}class m{constructor(e,t=!0){this.kind="directory",this.deleted=!1,this._entries={},this.name=e,this.writable=t}async*entries(){if(this.deleted)throw new DOMException(...c);yield*Object.entries(this._entries)}async isSameEntry(e){return this===e}async getDirectoryHandle(e,t={}){if(this.deleted)throw new DOMException(...c);const r=this._entries[e];if(r){if(r instanceof b)throw new DOMException(...u);return r}if(t.create)return this._entries[e]=new m(e);throw new DOMException(...c)}async getFileHandle(e,t={}){const r=this._entries[e];if(r){if(r instanceof b)return r;throw new DOMException(...u)}if(t.create)return this._entries[e]=new b(e);throw new DOMException(...c)}async removeEntry(e,t={}){const r=this._entries[e];if(!r)throw new DOMException(...c);r.destroy(t.recursive),delete this._entries[e]}destroy(e){for(let t of Object.values(this._entries)){if(!e)throw new DOMException(...d);t.destroy(e)}this._entries={},this.deleted=!0}}const _=new m(""),y=()=>_},849:(e,t,r)=>{r.r(t);var n=r(193),i=r(190),o=r(716);const{INVALID:s,GONE:a,SYNTAX:l,DISALLOWED:c}=o.errors;class u{constructor(e,t,r,n){this.fileHandle=e,this.writer=r,this.file=n?t:new File([],t.name,t),this.size=n?t.size:0,this.position=0}async write(e){try{await this.fileHandle.getFile()}catch(e){throw new DOMException(...a)}let t=this.file;if((0,o.isChunkObject)(e))if("write"===e.type){if("number"==typeof e.position&&e.position>=0&&(this.position=e.position,this.size=0){if(this.size=0)return t=e.sizet.size&&(this.position=t.size),void(this.file=t);throw new DOMException(...l("truncate requires a size argument"))}}e=new Blob([e]);let r=this.file;const n=r.slice(0,this.position),i=r.slice(this.position+e.size);let c=this.position-n.size;c<0&&(c=0),r=new File([n,new Uint8Array(c),e,i],r.name),this.size=r.size,this.position+=e.size,this.file=r}async close(){try{await this.fileHandle.getFile()}catch(e){throw new DOMException(...a)}const e=await new Promise(((e,t)=>{const r=new FileReader;r.onload=()=>e(r.result),r.onerror=t,r.readAsArrayBuffer(this.file)}));this.file=new File([e],this.file.name,this.file),await new Promise(((e,t)=>{this.writer.onwriteend=e,this.writer.onerror=t,this.writer.truncate(0)})),await new Promise(((e,t)=>{this.writer.onwriteend=e,this.writer.onerror=t,this.writer.write(this.file)})),this.writer.onwriteend=null,this.writer.onerror=null,this.file=this.position=this.size=null}}class d{constructor(e,t=!0){this.kind="file",this.readable=!0,this.file=e,this.writable=t}get name(){return this.file.name}async isSameEntry(e){return this.file.toURL()===e.file.toURL()}getFile(){return new Promise(this.file.file.bind(this.file))}async createWritable(e){if(!this.writable)throw new DOMException(...c);const t=await this.getFile();return new Promise(((r,n)=>this.file.createWriter((n=>{r(new u(this,t,n,!!e.keepExistingData))}),n)))}}class h{constructor(e,t=!0){this.kind="directory",this.readable=!0,this.dir=e,this.writable=t,this.name=e.name}async isSameEntry(e){return this.dir.fullPath===e.dir.fullPath}async*entries(){const e=this.dir.createReader(),t=await new Promise(e.readEntries.bind(e));for(const e of t)yield[e.name,e.isFile?new d(e,this.writable):new h(e,this.writable)]}getDirectoryHandle(e,t={}){return new Promise(((r,n)=>{this.dir.getDirectory(e,t,(e=>{r(new h(e))}),n)}))}getFileHandle(e,t={}){return new Promise(((r,n)=>this.dir.getFile(e,t,(e=>r(new d(e))),n)))}async removeEntry(e,t){let r;try{r=await this.getDirectoryHandle(e)}catch(t){if("TypeMismatchError"!==t.name)throw t;r=await this.getFileHandle(e)}return new Promise(((e,n)=>{r instanceof h?(null==t?void 0:t.recursive)?r.dir.removeRecursively((()=>e()),n):r.dir.remove((()=>e()),n):r.file&&r.file.remove((()=>e()),n)}))}}globalThis.DataTransferItem&&!globalThis.DataTransferItem.prototype.getAsFileSystemHandle&&globalThis.DataTransferItem.prototype.webkitGetAsEntry&&(globalThis.DataTransferItem.prototype.getAsFileSystemHandle=async function(){const e=this.webkitGetAsEntry();return e.isFile?new i.FileSystemFileHandle(new d(e,!1)):new n.FileSystemDirectoryHandle(new h(e,!1))})},716:(e,t,r)=>{r.r(t),r.d(t,{errors:()=>n,isChunkObject:()=>i,makeDirHandleFromFileList:()=>o,makeFileHandlesFromFileList:()=>s});const n={INVALID:["seeking position failed.","InvalidStateError"],GONE:["A requested file or directory could not be found at the time an operation was processed.","NotFoundError"],MISMATCH:["The path supplied exists, but was not an entry of requested type.","TypeMismatchError"],MOD_ERR:["The object can not be modified in this way.","InvalidModificationError"],SYNTAX:e=>[`Failed to execute 'write' on 'UnderlyingSinkBase': Invalid params passed. ${e}`,"SyntaxError"],ABORT:["The operation was aborted","AbortError"],SECURITY:["It was determined that certain files are unsafe for access within a Web application, or that too many calls are being made on file resources.","SecurityError"],DISALLOWED:["The request is not allowed by the user agent or the platform in the current context.","NotAllowedError"]},i=e=>"object"==typeof e&&void 0!==e.type;async function o(e){var t,n,i;const{FolderHandle:o,FileHandle:s}=await Promise.resolve().then(r.bind(r,16)),{FileSystemDirectoryHandle:a}=await Promise.resolve().then(r.bind(r,193)),l=null!==(n=null===(t=e[0].webkitRelativePath)||void 0===t?void 0:t.split("/",1)[0])&&void 0!==n?n:"",c=new o(l,!1);for(let t=0;t(e._entries[t]||(e._entries[t]=new o(t,!1)),e._entries[t])),c)._entries[a]=new s(r.name,r,!1)}return new a(c)}async function s(e){const{FileHandle:t}=await Promise.resolve().then(r.bind(r,16)),{FileSystemFileHandle:n}=await Promise.resolve().then(r.bind(r,190));return Array.from(e).map((e=>new n(new t(e.name,e,!1))))}},673:(e,t,r)=>{r.r(t),r.d(t,{ByteLengthQueuingStrategy:()=>kr,CountQueuingStrategy:()=>Cr,ReadableByteStreamController:()=>_e,ReadableStream:()=>mr,ReadableStreamBYOBReader:()=>Qe,ReadableStreamBYOBRequest:()=>me,ReadableStreamDefaultController:()=>Kt,ReadableStreamDefaultReader:()=>Z,TransformStream:()=>xr,TransformStreamDefaultController:()=>$r,WritableStream:()=>at,WritableStreamDefaultController:()=>Ot,WritableStreamDefaultWriter:()=>gt});const n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol:e=>`Symbol(${e})`;function i(){}const o="undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:void 0;function s(e){return"object"==typeof e&&null!==e||"function"==typeof e}const a=i,l=Promise,c=Promise.prototype.then,u=Promise.resolve.bind(l),d=Promise.reject.bind(l);function h(e){return new l(e)}function f(e){return u(e)}function p(e){return d(e)}function b(e,t,r){return c.call(e,t,r)}function m(e,t,r){b(b(e,t,r),void 0,a)}function _(e,t){m(e,t)}function y(e,t){m(e,void 0,t)}function w(e,t,r){return b(e,t,r)}function g(e){b(e,void 0,a)}const v=(()=>{const e=o&&o.queueMicrotask;if("function"==typeof e)return e;const t=f(void 0);return e=>b(t,e)})();function S(e,t,r){if("function"!=typeof e)throw new TypeError("Argument is not a function");return Function.prototype.apply.call(e,t,r)}function E(e,t,r){try{return f(S(e,t,r))}catch(e){return p(e)}}class T{constructor(){this._cursor=0,this._size=0,this._front={_elements:[],_next:void 0},this._back=this._front,this._cursor=0,this._size=0}get length(){return this._size}push(e){const t=this._back;let r=t;16383===t._elements.length&&(r={_elements:[],_next:void 0}),t._elements.push(e),r!==t&&(this._back=r,t._next=r),++this._size}shift(){const e=this._front;let t=e;const r=this._cursor;let n=r+1;const i=e._elements,o=i[r];return 16384===n&&(t=e._next,n=0),--this._size,this._cursor=n,e!==t&&(this._front=t),i[r]=void 0,o}forEach(e){let t=this._cursor,r=this._front,n=r._elements;for(;!(t===n.length&&void 0===r._next||t===n.length&&(r=r._next,n=r._elements,t=0,0===n.length));)e(n[t]),++t}peek(){const e=this._front,t=this._cursor;return e._elements[t]}}function R(e,t){e._ownerReadableStream=t,t._reader=e,"readable"===t._state?F(e):"closed"===t._state?function(e){F(e),C(e)}(e):z(e,t._storedError)}function P(e,t){return Sr(e._ownerReadableStream,t)}function O(e){"readable"===e._ownerReadableStream._state?q(e,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")):function(e,t){z(e,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness"))}(e),e._ownerReadableStream._reader=void 0,e._ownerReadableStream=void 0}function k(e){return new TypeError("Cannot "+e+" a stream using a released reader")}function F(e){e._closedPromise=h(((t,r)=>{e._closedPromise_resolve=t,e._closedPromise_reject=r}))}function z(e,t){F(e),q(e,t)}function q(e,t){void 0!==e._closedPromise_reject&&(g(e._closedPromise),e._closedPromise_reject(t),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0)}function C(e){void 0!==e._closedPromise_resolve&&(e._closedPromise_resolve(void 0),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0)}const D=n("[[AbortSteps]]"),j=n("[[ErrorSteps]]"),A=n("[[CancelSteps]]"),W=n("[[PullSteps]]"),M=Number.isFinite||function(e){return"number"==typeof e&&isFinite(e)},x=Math.trunc||function(e){return e<0?Math.ceil(e):Math.floor(e)};function I(e,t){if(void 0!==e&&"object"!=typeof(r=e)&&"function"!=typeof r)throw new TypeError(`${t} is not an object.`);var r}function B(e,t){if("function"!=typeof e)throw new TypeError(`${t} is not a function.`)}function H(e,t){if(!function(e){return"object"==typeof e&&null!==e||"function"==typeof e}(e))throw new TypeError(`${t} is not an object.`)}function L(e,t,r){if(void 0===e)throw new TypeError(`Parameter ${t} is required in '${r}'.`)}function $(e,t,r){if(void 0===e)throw new TypeError(`${t} is required in '${r}'.`)}function N(e){return Number(e)}function U(e){return 0===e?0:e}function Y(e,t){const r=Number.MAX_SAFE_INTEGER;let n=Number(e);if(n=U(n),!M(n))throw new TypeError(`${t} is not a finite number`);if(n=function(e){return U(x(e))}(n),n<0||n>r)throw new TypeError(`${t} is outside the accepted range of 0 to ${r}, inclusive`);return M(n)&&0!==n?n:0}function Q(e,t){if(!gr(e))throw new TypeError(`${t} is not a ReadableStream.`)}function V(e){return new Z(e)}function G(e,t){e._reader._readRequests.push(t)}function X(e,t,r){const n=e._reader._readRequests.shift();r?n._closeSteps():n._chunkSteps(t)}function J(e){return e._reader._readRequests.length}function K(e){const t=e._reader;return void 0!==t&&!!ee(t)}class Z{constructor(e){if(L(e,1,"ReadableStreamDefaultReader"),Q(e,"First parameter"),vr(e))throw new TypeError("This stream has already been locked for exclusive reading by another reader");R(this,e),this._readRequests=new T}get closed(){return ee(this)?this._closedPromise:p(re("closed"))}cancel(e){return ee(this)?void 0===this._ownerReadableStream?p(k("cancel")):P(this,e):p(re("cancel"))}read(){if(!ee(this))return p(re("read"));if(void 0===this._ownerReadableStream)return p(k("read from"));let e,t;const r=h(((r,n)=>{e=r,t=n}));return te(this,{_chunkSteps:t=>e({value:t,done:!1}),_closeSteps:()=>e({value:void 0,done:!0}),_errorSteps:e=>t(e)}),r}releaseLock(){if(!ee(this))throw re("releaseLock");if(void 0!==this._ownerReadableStream){if(this._readRequests.length>0)throw new TypeError("Tried to release a reader lock when that reader has pending read() calls un-settled");O(this)}}}function ee(e){return!!s(e)&&!!Object.prototype.hasOwnProperty.call(e,"_readRequests")&&e instanceof Z}function te(e,t){const r=e._ownerReadableStream;r._disturbed=!0,"closed"===r._state?t._closeSteps():"errored"===r._state?t._errorSteps(r._storedError):r._readableStreamController[W](t)}function re(e){return new TypeError(`ReadableStreamDefaultReader.prototype.${e} can only be used on a ReadableStreamDefaultReader`)}Object.defineProperties(Z.prototype,{cancel:{enumerable:!0},read:{enumerable:!0},releaseLock:{enumerable:!0},closed:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(Z.prototype,n.toStringTag,{value:"ReadableStreamDefaultReader",configurable:!0});const ne=Object.getPrototypeOf(Object.getPrototypeOf((async function*(){})).prototype);class ie{constructor(e,t){this._ongoingPromise=void 0,this._isFinished=!1,this._reader=e,this._preventCancel=t}next(){const e=()=>this._nextSteps();return this._ongoingPromise=this._ongoingPromise?w(this._ongoingPromise,e,e):e(),this._ongoingPromise}return(e){const t=()=>this._returnSteps(e);return this._ongoingPromise?w(this._ongoingPromise,t,t):t()}_nextSteps(){if(this._isFinished)return Promise.resolve({value:void 0,done:!0});const e=this._reader;if(void 0===e._ownerReadableStream)return p(k("iterate"));let t,r;const n=h(((e,n)=>{t=e,r=n}));return te(e,{_chunkSteps:e=>{this._ongoingPromise=void 0,v((()=>t({value:e,done:!1})))},_closeSteps:()=>{this._ongoingPromise=void 0,this._isFinished=!0,O(e),t({value:void 0,done:!0})},_errorSteps:t=>{this._ongoingPromise=void 0,this._isFinished=!0,O(e),r(t)}}),n}_returnSteps(e){if(this._isFinished)return Promise.resolve({value:e,done:!0});this._isFinished=!0;const t=this._reader;if(void 0===t._ownerReadableStream)return p(k("finish iterating"));if(!this._preventCancel){const r=P(t,e);return O(t),w(r,(()=>({value:e,done:!0})))}return O(t),f({value:e,done:!0})}}const oe={next(){return se(this)?this._asyncIteratorImpl.next():p(ae("next"))},return(e){return se(this)?this._asyncIteratorImpl.return(e):p(ae("return"))}};function se(e){if(!s(e))return!1;if(!Object.prototype.hasOwnProperty.call(e,"_asyncIteratorImpl"))return!1;try{return e._asyncIteratorImpl instanceof ie}catch(e){return!1}}function ae(e){return new TypeError(`ReadableStreamAsyncIterator.${e} can only be used on a ReadableSteamAsyncIterator`)}void 0!==ne&&Object.setPrototypeOf(oe,ne);const le=Number.isNaN||function(e){return e!=e};function ce(e){return e.slice()}function ue(e,t,r,n,i){new Uint8Array(e).set(new Uint8Array(r,n,i),t)}function de(e,t,r){if(e.slice)return e.slice(t,r);const n=r-t,i=new ArrayBuffer(n);return ue(i,0,e,t,n),i}function he(e){const t=de(e.buffer,e.byteOffset,e.byteOffset+e.byteLength);return new Uint8Array(t)}function fe(e){const t=e._queue.shift();return e._queueTotalSize-=t.size,e._queueTotalSize<0&&(e._queueTotalSize=0),t.value}function pe(e,t,r){if("number"!=typeof(n=r)||le(n)||n<0||r===1/0)throw new RangeError("Size must be a finite, non-NaN, non-negative number.");var n;e._queue.push({value:t,size:r}),e._queueTotalSize+=r}function be(e){e._queue=new T,e._queueTotalSize=0}class me{constructor(){throw new TypeError("Illegal constructor")}get view(){if(!we(this))throw He("view");return this._view}respond(e){if(!we(this))throw He("respond");if(L(e,1,"respond"),e=Y(e,"First parameter"),void 0===this._associatedReadableByteStreamController)throw new TypeError("This BYOB request has been invalidated");this._view.buffer,xe(this._associatedReadableByteStreamController,e)}respondWithNewView(e){if(!we(this))throw He("respondWithNewView");if(L(e,1,"respondWithNewView"),!ArrayBuffer.isView(e))throw new TypeError("You can only respond with array buffer views");if(void 0===this._associatedReadableByteStreamController)throw new TypeError("This BYOB request has been invalidated");e.buffer,Ie(this._associatedReadableByteStreamController,e)}}Object.defineProperties(me.prototype,{respond:{enumerable:!0},respondWithNewView:{enumerable:!0},view:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(me.prototype,n.toStringTag,{value:"ReadableStreamBYOBRequest",configurable:!0});class _e{constructor(){throw new TypeError("Illegal constructor")}get byobRequest(){if(!ye(this))throw Le("byobRequest");return We(this)}get desiredSize(){if(!ye(this))throw Le("desiredSize");return Me(this)}close(){if(!ye(this))throw Le("close");if(this._closeRequested)throw new TypeError("The stream has already been closed; do not close it again!");const e=this._controlledReadableByteStream._state;if("readable"!==e)throw new TypeError(`The stream (in ${e} state) is not in the readable state and cannot be closed`);De(this)}enqueue(e){if(!ye(this))throw Le("enqueue");if(L(e,1,"enqueue"),!ArrayBuffer.isView(e))throw new TypeError("chunk must be an array buffer view");if(0===e.byteLength)throw new TypeError("chunk must have non-zero byteLength");if(0===e.buffer.byteLength)throw new TypeError("chunk's buffer must have non-zero byteLength");if(this._closeRequested)throw new TypeError("stream is closed or draining");const t=this._controlledReadableByteStream._state;if("readable"!==t)throw new TypeError(`The stream (in ${t} state) is not in the readable state and cannot be enqueued to`);je(this,e)}error(e){if(!ye(this))throw Le("error");Ae(this,e)}[A](e){ve(this),be(this);const t=this._cancelAlgorithm(e);return Ce(this),t}[W](e){const t=this._controlledReadableByteStream;if(this._queueTotalSize>0){const t=this._queue.shift();this._queueTotalSize-=t.byteLength,Oe(this);const r=new Uint8Array(t.buffer,t.byteOffset,t.byteLength);return void e._chunkSteps(r)}const r=this._autoAllocateChunkSize;if(void 0!==r){let t;try{t=new ArrayBuffer(r)}catch(t){return void e._errorSteps(t)}const n={buffer:t,bufferByteLength:r,byteOffset:0,byteLength:r,bytesFilled:0,elementSize:1,viewConstructor:Uint8Array,readerType:"default"};this._pendingPullIntos.push(n)}G(t,e),ge(this)}}function ye(e){return!!s(e)&&!!Object.prototype.hasOwnProperty.call(e,"_controlledReadableByteStream")&&e instanceof _e}function we(e){return!!s(e)&&!!Object.prototype.hasOwnProperty.call(e,"_associatedReadableByteStreamController")&&e instanceof me}function ge(e){const t=function(e){const t=e._controlledReadableByteStream;return"readable"===t._state&&(!e._closeRequested&&(!!e._started&&(!!(K(t)&&J(t)>0)||(!!(Ye(t)&&Ue(t)>0)||Me(e)>0))))}(e);t&&(e._pulling?e._pullAgain=!0:(e._pulling=!0,m(e._pullAlgorithm(),(()=>{e._pulling=!1,e._pullAgain&&(e._pullAgain=!1,ge(e))}),(t=>{Ae(e,t)}))))}function ve(e){ke(e),e._pendingPullIntos=new T}function Se(e,t){let r=!1;"closed"===e._state&&(r=!0);const n=Ee(t);"default"===t.readerType?X(e,n,r):function(e,t,r){const n=e._reader._readIntoRequests.shift();r?n._closeSteps(t):n._chunkSteps(t)}(e,n,r)}function Ee(e){const t=e.bytesFilled,r=e.elementSize;return new e.viewConstructor(e.buffer,e.byteOffset,t/r)}function Te(e,t,r,n){e._queue.push({buffer:t,byteOffset:r,byteLength:n}),e._queueTotalSize+=n}function Re(e,t){const r=t.elementSize,n=t.bytesFilled-t.bytesFilled%r,i=Math.min(e._queueTotalSize,t.byteLength-t.bytesFilled),o=t.bytesFilled+i,s=o-o%r;let a=i,l=!1;s>n&&(a=s-t.bytesFilled,l=!0);const c=e._queue;for(;a>0;){const r=c.peek(),n=Math.min(a,r.byteLength),i=t.byteOffset+t.bytesFilled;ue(t.buffer,i,r.buffer,r.byteOffset,n),r.byteLength===n?c.shift():(r.byteOffset+=n,r.byteLength-=n),e._queueTotalSize-=n,Pe(0,n,t),a-=n}return l}function Pe(e,t,r){r.bytesFilled+=t}function Oe(e){0===e._queueTotalSize&&e._closeRequested?(Ce(e),Er(e._controlledReadableByteStream)):ge(e)}function ke(e){null!==e._byobRequest&&(e._byobRequest._associatedReadableByteStreamController=void 0,e._byobRequest._view=null,e._byobRequest=null)}function Fe(e){for(;e._pendingPullIntos.length>0;){if(0===e._queueTotalSize)return;const t=e._pendingPullIntos.peek();Re(e,t)&&(qe(e),Se(e._controlledReadableByteStream,t))}}function ze(e,t){const r=e._pendingPullIntos.peek();ke(e),"closed"===e._controlledReadableByteStream._state?function(e,t){const r=e._controlledReadableByteStream;if(Ye(r))for(;Ue(r)>0;)Se(r,qe(e))}(e):function(e,t,r){if(Pe(0,t,r),r.bytesFilled0){const t=r.byteOffset+r.bytesFilled,i=de(r.buffer,t-n,t);Te(e,i,0,i.byteLength)}r.bytesFilled-=n,Se(e._controlledReadableByteStream,r),Fe(e)}(e,t,r),ge(e)}function qe(e){return e._pendingPullIntos.shift()}function Ce(e){e._pullAlgorithm=void 0,e._cancelAlgorithm=void 0}function De(e){const t=e._controlledReadableByteStream;if(!e._closeRequested&&"readable"===t._state)if(e._queueTotalSize>0)e._closeRequested=!0;else{if(e._pendingPullIntos.length>0&&e._pendingPullIntos.peek().bytesFilled>0){const t=new TypeError("Insufficient bytes to fill elements in the given buffer");throw Ae(e,t),t}Ce(e),Er(t)}}function je(e,t){const r=e._controlledReadableByteStream;if(e._closeRequested||"readable"!==r._state)return;const n=t.buffer,i=t.byteOffset,o=t.byteLength,s=n;if(e._pendingPullIntos.length>0){const t=e._pendingPullIntos.peek();t.buffer,t.buffer=t.buffer}ke(e),K(r)?0===J(r)?Te(e,s,i,o):X(r,new Uint8Array(s,i,o),!1):Ye(r)?(Te(e,s,i,o),Fe(e)):Te(e,s,i,o),ge(e)}function Ae(e,t){const r=e._controlledReadableByteStream;"readable"===r._state&&(ve(e),be(e),Ce(e),Tr(r,t))}function We(e){if(null===e._byobRequest&&e._pendingPullIntos.length>0){const t=e._pendingPullIntos.peek(),r=new Uint8Array(t.buffer,t.byteOffset+t.bytesFilled,t.byteLength-t.bytesFilled),n=Object.create(me.prototype);!function(e,t,r){e._associatedReadableByteStreamController=t,e._view=r}(n,e,r),e._byobRequest=n}return e._byobRequest}function Me(e){const t=e._controlledReadableByteStream._state;return"errored"===t?null:"closed"===t?0:e._strategyHWM-e._queueTotalSize}function xe(e,t){const r=e._pendingPullIntos.peek();if("closed"===e._controlledReadableByteStream._state){if(0!==t)throw new TypeError("bytesWritten must be 0 when calling respond() on a closed stream")}else{if(0===t)throw new TypeError("bytesWritten must be greater than 0 when calling respond() on a readable stream");if(r.bytesFilled+t>r.byteLength)throw new RangeError("bytesWritten out of range")}r.buffer=r.buffer,ze(e,t)}function Ie(e,t){const r=e._pendingPullIntos.peek();if("closed"===e._controlledReadableByteStream._state){if(0!==t.byteLength)throw new TypeError("The view's length must be 0 when calling respondWithNewView() on a closed stream")}else if(0===t.byteLength)throw new TypeError("The view's length must be greater than 0 when calling respondWithNewView() on a readable stream");if(r.byteOffset+r.bytesFilled!==t.byteOffset)throw new RangeError("The region specified by view does not match byobRequest");if(r.bufferByteLength!==t.buffer.byteLength)throw new RangeError("The buffer of view has different capacity than byobRequest");if(r.bytesFilled+t.byteLength>r.byteLength)throw new RangeError("The region specified by view is larger than byobRequest");r.buffer=t.buffer,ze(e,t.byteLength)}function Be(e,t,r,n,i,o,s){t._controlledReadableByteStream=e,t._pullAgain=!1,t._pulling=!1,t._byobRequest=null,t._queue=t._queueTotalSize=void 0,be(t),t._closeRequested=!1,t._started=!1,t._strategyHWM=o,t._pullAlgorithm=n,t._cancelAlgorithm=i,t._autoAllocateChunkSize=s,t._pendingPullIntos=new T,e._readableStreamController=t,m(f(r()),(()=>{t._started=!0,ge(t)}),(e=>{Ae(t,e)}))}function He(e){return new TypeError(`ReadableStreamBYOBRequest.prototype.${e} can only be used on a ReadableStreamBYOBRequest`)}function Le(e){return new TypeError(`ReadableByteStreamController.prototype.${e} can only be used on a ReadableByteStreamController`)}function $e(e){return new Qe(e)}function Ne(e,t){e._reader._readIntoRequests.push(t)}function Ue(e){return e._reader._readIntoRequests.length}function Ye(e){const t=e._reader;return void 0!==t&&!!Ve(t)}Object.defineProperties(_e.prototype,{close:{enumerable:!0},enqueue:{enumerable:!0},error:{enumerable:!0},byobRequest:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(_e.prototype,n.toStringTag,{value:"ReadableByteStreamController",configurable:!0});class Qe{constructor(e){if(L(e,1,"ReadableStreamBYOBReader"),Q(e,"First parameter"),vr(e))throw new TypeError("This stream has already been locked for exclusive reading by another reader");if(!ye(e._readableStreamController))throw new TypeError("Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte source");R(this,e),this._readIntoRequests=new T}get closed(){return Ve(this)?this._closedPromise:p(Xe("closed"))}cancel(e){return Ve(this)?void 0===this._ownerReadableStream?p(k("cancel")):P(this,e):p(Xe("cancel"))}read(e){if(!Ve(this))return p(Xe("read"));if(!ArrayBuffer.isView(e))return p(new TypeError("view must be an array buffer view"));if(0===e.byteLength)return p(new TypeError("view must have non-zero byteLength"));if(0===e.buffer.byteLength)return p(new TypeError("view's buffer must have non-zero byteLength"));if(e.buffer,void 0===this._ownerReadableStream)return p(k("read from"));let t,r;const n=h(((e,n)=>{t=e,r=n}));return Ge(this,e,{_chunkSteps:e=>t({value:e,done:!1}),_closeSteps:e=>t({value:e,done:!0}),_errorSteps:e=>r(e)}),n}releaseLock(){if(!Ve(this))throw Xe("releaseLock");if(void 0!==this._ownerReadableStream){if(this._readIntoRequests.length>0)throw new TypeError("Tried to release a reader lock when that reader has pending read() calls un-settled");O(this)}}}function Ve(e){return!!s(e)&&!!Object.prototype.hasOwnProperty.call(e,"_readIntoRequests")&&e instanceof Qe}function Ge(e,t,r){const n=e._ownerReadableStream;n._disturbed=!0,"errored"===n._state?r._errorSteps(n._storedError):function(e,t,r){const n=e._controlledReadableByteStream;let i=1;t.constructor!==DataView&&(i=t.constructor.BYTES_PER_ELEMENT);const o=t.constructor,s=t.buffer,a={buffer:s,bufferByteLength:s.byteLength,byteOffset:t.byteOffset,byteLength:t.byteLength,bytesFilled:0,elementSize:i,viewConstructor:o,readerType:"byob"};if(e._pendingPullIntos.length>0)return e._pendingPullIntos.push(a),void Ne(n,r);if("closed"!==n._state){if(e._queueTotalSize>0){if(Re(e,a)){const t=Ee(a);return Oe(e),void r._chunkSteps(t)}if(e._closeRequested){const t=new TypeError("Insufficient bytes to fill elements in the given buffer");return Ae(e,t),void r._errorSteps(t)}}e._pendingPullIntos.push(a),Ne(n,r),ge(e)}else{const e=new o(a.buffer,a.byteOffset,0);r._closeSteps(e)}}(n._readableStreamController,t,r)}function Xe(e){return new TypeError(`ReadableStreamBYOBReader.prototype.${e} can only be used on a ReadableStreamBYOBReader`)}function Je(e,t){const{highWaterMark:r}=e;if(void 0===r)return t;if(le(r)||r<0)throw new RangeError("Invalid highWaterMark");return r}function Ke(e){const{size:t}=e;return t||(()=>1)}function Ze(e,t){I(e,t);const r=null==e?void 0:e.highWaterMark,n=null==e?void 0:e.size;return{highWaterMark:void 0===r?void 0:N(r),size:void 0===n?void 0:et(n,`${t} has member 'size' that`)}}function et(e,t){return B(e,t),t=>N(e(t))}function tt(e,t,r){return B(e,r),r=>E(e,t,[r])}function rt(e,t,r){return B(e,r),()=>E(e,t,[])}function nt(e,t,r){return B(e,r),r=>S(e,t,[r])}function it(e,t,r){return B(e,r),(r,n)=>E(e,t,[r,n])}function ot(e,t){if(!ut(e))throw new TypeError(`${t} is not a WritableStream.`)}Object.defineProperties(Qe.prototype,{cancel:{enumerable:!0},read:{enumerable:!0},releaseLock:{enumerable:!0},closed:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(Qe.prototype,n.toStringTag,{value:"ReadableStreamBYOBReader",configurable:!0});const st="function"==typeof AbortController;class at{constructor(e={},t={}){void 0===e?e=null:H(e,"First parameter");const r=Ze(t,"Second parameter"),n=function(e,t){I(e,t);const r=null==e?void 0:e.abort,n=null==e?void 0:e.close,i=null==e?void 0:e.start,o=null==e?void 0:e.type,s=null==e?void 0:e.write;return{abort:void 0===r?void 0:tt(r,e,`${t} has member 'abort' that`),close:void 0===n?void 0:rt(n,e,`${t} has member 'close' that`),start:void 0===i?void 0:nt(i,e,`${t} has member 'start' that`),write:void 0===s?void 0:it(s,e,`${t} has member 'write' that`),type:o}}(e,"First parameter");if(ct(this),void 0!==n.type)throw new RangeError("Invalid type is specified");const i=Ke(r);!function(e,t,r,n){const i=Object.create(Ot.prototype);let o=()=>{},s=()=>f(void 0),a=()=>f(void 0),l=()=>f(void 0);void 0!==t.start&&(o=()=>t.start(i)),void 0!==t.write&&(s=e=>t.write(e,i)),void 0!==t.close&&(a=()=>t.close()),void 0!==t.abort&&(l=e=>t.abort(e)),Ft(e,i,o,s,a,l,r,n)}(this,n,Je(r,1),i)}get locked(){if(!ut(this))throw Wt("locked");return dt(this)}abort(e){return ut(this)?dt(this)?p(new TypeError("Cannot abort a stream that already has a writer")):ht(this,e):p(Wt("abort"))}close(){return ut(this)?dt(this)?p(new TypeError("Cannot close a stream that already has a writer")):_t(this)?p(new TypeError("Cannot close an already-closing stream")):ft(this):p(Wt("close"))}getWriter(){if(!ut(this))throw Wt("getWriter");return lt(this)}}function lt(e){return new gt(e)}function ct(e){e._state="writable",e._storedError=void 0,e._writer=void 0,e._writableStreamController=void 0,e._writeRequests=new T,e._inFlightWriteRequest=void 0,e._closeRequest=void 0,e._inFlightCloseRequest=void 0,e._pendingAbortRequest=void 0,e._backpressure=!1}function ut(e){return!!s(e)&&!!Object.prototype.hasOwnProperty.call(e,"_writableStreamController")&&e instanceof at}function dt(e){return void 0!==e._writer}function ht(e,t){var r;if("closed"===e._state||"errored"===e._state)return f(void 0);e._writableStreamController._abortReason=t,null===(r=e._writableStreamController._abortController)||void 0===r||r.abort();const n=e._state;if("closed"===n||"errored"===n)return f(void 0);if(void 0!==e._pendingAbortRequest)return e._pendingAbortRequest._promise;let i=!1;"erroring"===n&&(i=!0,t=void 0);const o=h(((r,n)=>{e._pendingAbortRequest={_promise:void 0,_resolve:r,_reject:n,_reason:t,_wasAlreadyErroring:i}}));return e._pendingAbortRequest._promise=o,i||bt(e,t),o}function ft(e){const t=e._state;if("closed"===t||"errored"===t)return p(new TypeError(`The stream (in ${t} state) is not in the writable state and cannot be closed`));const r=h(((t,r)=>{const n={_resolve:t,_reject:r};e._closeRequest=n})),n=e._writer;var i;return void 0!==n&&e._backpressure&&"writable"===t&&Vt(n),pe(i=e._writableStreamController,Pt,0),Ct(i),r}function pt(e,t){"writable"!==e._state?mt(e):bt(e,t)}function bt(e,t){const r=e._writableStreamController;e._state="erroring",e._storedError=t;const n=e._writer;void 0!==n&&Et(n,t),!function(e){return void 0!==e._inFlightWriteRequest||void 0!==e._inFlightCloseRequest}(e)&&r._started&&mt(e)}function mt(e){e._state="errored",e._writableStreamController[j]();const t=e._storedError;if(e._writeRequests.forEach((e=>{e._reject(t)})),e._writeRequests=new T,void 0===e._pendingAbortRequest)return void yt(e);const r=e._pendingAbortRequest;if(e._pendingAbortRequest=void 0,r._wasAlreadyErroring)return r._reject(t),void yt(e);m(e._writableStreamController[D](r._reason),(()=>{r._resolve(),yt(e)}),(t=>{r._reject(t),yt(e)}))}function _t(e){return void 0!==e._closeRequest||void 0!==e._inFlightCloseRequest}function yt(e){void 0!==e._closeRequest&&(e._closeRequest._reject(e._storedError),e._closeRequest=void 0);const t=e._writer;void 0!==t&&Lt(t,e._storedError)}function wt(e,t){const r=e._writer;void 0!==r&&t!==e._backpressure&&(t?function(e){Nt(e)}(r):Vt(r)),e._backpressure=t}Object.defineProperties(at.prototype,{abort:{enumerable:!0},close:{enumerable:!0},getWriter:{enumerable:!0},locked:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(at.prototype,n.toStringTag,{value:"WritableStream",configurable:!0});class gt{constructor(e){if(L(e,1,"WritableStreamDefaultWriter"),ot(e,"First parameter"),dt(e))throw new TypeError("This stream has already been locked for exclusive writing by another writer");this._ownerWritableStream=e,e._writer=this;const t=e._state;if("writable"===t)!_t(e)&&e._backpressure?Nt(this):Yt(this),Bt(this);else if("erroring"===t)Ut(this,e._storedError),Bt(this);else if("closed"===t)Yt(this),Bt(this),$t(this);else{const t=e._storedError;Ut(this,t),Ht(this,t)}}get closed(){return vt(this)?this._closedPromise:p(xt("closed"))}get desiredSize(){if(!vt(this))throw xt("desiredSize");if(void 0===this._ownerWritableStream)throw It("desiredSize");return function(e){const t=e._ownerWritableStream,r=t._state;return"errored"===r||"erroring"===r?null:"closed"===r?0:qt(t._writableStreamController)}(this)}get ready(){return vt(this)?this._readyPromise:p(xt("ready"))}abort(e){return vt(this)?void 0===this._ownerWritableStream?p(It("abort")):function(e,t){return ht(e._ownerWritableStream,t)}(this,e):p(xt("abort"))}close(){if(!vt(this))return p(xt("close"));const e=this._ownerWritableStream;return void 0===e?p(It("close")):_t(e)?p(new TypeError("Cannot close an already-closing stream")):St(this)}releaseLock(){if(!vt(this))throw xt("releaseLock");void 0!==this._ownerWritableStream&&Tt(this)}write(e){return vt(this)?void 0===this._ownerWritableStream?p(It("write to")):Rt(this,e):p(xt("write"))}}function vt(e){return!!s(e)&&!!Object.prototype.hasOwnProperty.call(e,"_ownerWritableStream")&&e instanceof gt}function St(e){return ft(e._ownerWritableStream)}function Et(e,t){"pending"===e._readyPromiseState?Qt(e,t):function(e,t){Ut(e,t)}(e,t)}function Tt(e){const t=e._ownerWritableStream,r=new TypeError("Writer was released and can no longer be used to monitor the stream's closedness");Et(e,r),function(e,t){"pending"===e._closedPromiseState?Lt(e,t):function(e,t){Ht(e,t)}(e,t)}(e,r),t._writer=void 0,e._ownerWritableStream=void 0}function Rt(e,t){const r=e._ownerWritableStream,n=r._writableStreamController,i=function(e,t){try{return e._strategySizeAlgorithm(t)}catch(t){return Dt(e,t),1}}(n,t);if(r!==e._ownerWritableStream)return p(It("write to"));const o=r._state;if("errored"===o)return p(r._storedError);if(_t(r)||"closed"===o)return p(new TypeError("The stream is closing or closed and cannot be written to"));if("erroring"===o)return p(r._storedError);const s=function(e){return h(((t,r)=>{const n={_resolve:t,_reject:r};e._writeRequests.push(n)}))}(r);return function(e,t,r){try{pe(e,t,r)}catch(t){return void Dt(e,t)}const n=e._controlledWritableStream;_t(n)||"writable"!==n._state||wt(n,jt(e)),Ct(e)}(n,t,i),s}Object.defineProperties(gt.prototype,{abort:{enumerable:!0},close:{enumerable:!0},releaseLock:{enumerable:!0},write:{enumerable:!0},closed:{enumerable:!0},desiredSize:{enumerable:!0},ready:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(gt.prototype,n.toStringTag,{value:"WritableStreamDefaultWriter",configurable:!0});const Pt={};class Ot{constructor(){throw new TypeError("Illegal constructor")}get abortReason(){if(!kt(this))throw Mt("abortReason");return this._abortReason}get signal(){if(!kt(this))throw Mt("signal");if(void 0===this._abortController)throw new TypeError("WritableStreamDefaultController.prototype.signal is not supported");return this._abortController.signal}error(e){if(!kt(this))throw Mt("error");"writable"===this._controlledWritableStream._state&&At(this,e)}[D](e){const t=this._abortAlgorithm(e);return zt(this),t}[j](){be(this)}}function kt(e){return!!s(e)&&!!Object.prototype.hasOwnProperty.call(e,"_controlledWritableStream")&&e instanceof Ot}function Ft(e,t,r,n,i,o,s,a){t._controlledWritableStream=e,e._writableStreamController=t,t._queue=void 0,t._queueTotalSize=void 0,be(t),t._abortReason=void 0,t._abortController=function(){if(st)return new AbortController}(),t._started=!1,t._strategySizeAlgorithm=a,t._strategyHWM=s,t._writeAlgorithm=n,t._closeAlgorithm=i,t._abortAlgorithm=o;const l=jt(t);wt(e,l),m(f(r()),(()=>{t._started=!0,Ct(t)}),(r=>{t._started=!0,pt(e,r)}))}function zt(e){e._writeAlgorithm=void 0,e._closeAlgorithm=void 0,e._abortAlgorithm=void 0,e._strategySizeAlgorithm=void 0}function qt(e){return e._strategyHWM-e._queueTotalSize}function Ct(e){const t=e._controlledWritableStream;if(!e._started)return;if(void 0!==t._inFlightWriteRequest)return;if("erroring"===t._state)return void mt(t);if(0===e._queue.length)return;const r=e._queue.peek().value;r===Pt?function(e){const t=e._controlledWritableStream;(function(e){e._inFlightCloseRequest=e._closeRequest,e._closeRequest=void 0})(t),fe(e);const r=e._closeAlgorithm();zt(e),m(r,(()=>{!function(e){e._inFlightCloseRequest._resolve(void 0),e._inFlightCloseRequest=void 0,"erroring"===e._state&&(e._storedError=void 0,void 0!==e._pendingAbortRequest&&(e._pendingAbortRequest._resolve(),e._pendingAbortRequest=void 0)),e._state="closed";const t=e._writer;void 0!==t&&$t(t)}(t)}),(e=>{!function(e,t){e._inFlightCloseRequest._reject(t),e._inFlightCloseRequest=void 0,void 0!==e._pendingAbortRequest&&(e._pendingAbortRequest._reject(t),e._pendingAbortRequest=void 0),pt(e,t)}(t,e)}))}(e):function(e,t){const r=e._controlledWritableStream;!function(e){e._inFlightWriteRequest=e._writeRequests.shift()}(r),m(e._writeAlgorithm(t),(()=>{!function(e){e._inFlightWriteRequest._resolve(void 0),e._inFlightWriteRequest=void 0}(r);const t=r._state;if(fe(e),!_t(r)&&"writable"===t){const t=jt(e);wt(r,t)}Ct(e)}),(t=>{"writable"===r._state&&zt(e),function(e,t){e._inFlightWriteRequest._reject(t),e._inFlightWriteRequest=void 0,pt(e,t)}(r,t)}))}(e,r)}function Dt(e,t){"writable"===e._controlledWritableStream._state&&At(e,t)}function jt(e){return qt(e)<=0}function At(e,t){const r=e._controlledWritableStream;zt(e),bt(r,t)}function Wt(e){return new TypeError(`WritableStream.prototype.${e} can only be used on a WritableStream`)}function Mt(e){return new TypeError(`WritableStreamDefaultController.prototype.${e} can only be used on a WritableStreamDefaultController`)}function xt(e){return new TypeError(`WritableStreamDefaultWriter.prototype.${e} can only be used on a WritableStreamDefaultWriter`)}function It(e){return new TypeError("Cannot "+e+" a stream using a released writer")}function Bt(e){e._closedPromise=h(((t,r)=>{e._closedPromise_resolve=t,e._closedPromise_reject=r,e._closedPromiseState="pending"}))}function Ht(e,t){Bt(e),Lt(e,t)}function Lt(e,t){void 0!==e._closedPromise_reject&&(g(e._closedPromise),e._closedPromise_reject(t),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0,e._closedPromiseState="rejected")}function $t(e){void 0!==e._closedPromise_resolve&&(e._closedPromise_resolve(void 0),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0,e._closedPromiseState="resolved")}function Nt(e){e._readyPromise=h(((t,r)=>{e._readyPromise_resolve=t,e._readyPromise_reject=r})),e._readyPromiseState="pending"}function Ut(e,t){Nt(e),Qt(e,t)}function Yt(e){Nt(e),Vt(e)}function Qt(e,t){void 0!==e._readyPromise_reject&&(g(e._readyPromise),e._readyPromise_reject(t),e._readyPromise_resolve=void 0,e._readyPromise_reject=void 0,e._readyPromiseState="rejected")}function Vt(e){void 0!==e._readyPromise_resolve&&(e._readyPromise_resolve(void 0),e._readyPromise_resolve=void 0,e._readyPromise_reject=void 0,e._readyPromiseState="fulfilled")}Object.defineProperties(Ot.prototype,{error:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(Ot.prototype,n.toStringTag,{value:"WritableStreamDefaultController",configurable:!0});const Gt="undefined"!=typeof DOMException?DOMException:void 0,Xt=function(e){if("function"!=typeof e&&"object"!=typeof e)return!1;try{return new e,!0}catch(e){return!1}}(Gt)?Gt:function(){const e=function(e,t){this.message=e||"",this.name=t||"Error",Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)};return e.prototype=Object.create(Error.prototype),Object.defineProperty(e.prototype,"constructor",{value:e,writable:!0,configurable:!0}),e}();function Jt(e,t,r,n,o,s){const a=V(e),l=lt(t);e._disturbed=!0;let c=!1,u=f(void 0);return h(((d,w)=>{let v;if(void 0!==s){if(v=()=>{const r=new Xt("Aborted","AbortError"),i=[];n||i.push((()=>"writable"===t._state?ht(t,r):f(void 0))),o||i.push((()=>"readable"===e._state?Sr(e,r):f(void 0))),k((()=>Promise.all(i.map((e=>e())))),!0,r)},s.aborted)return void v();s.addEventListener("abort",v)}var S,E,T;if(P(e,a._closedPromise,(e=>{n?F(!0,e):k((()=>ht(t,e)),!0,e)})),P(t,l._closedPromise,(t=>{o?F(!0,t):k((()=>Sr(e,t)),!0,t)})),S=e,E=a._closedPromise,T=()=>{r?F():k((()=>function(e){const t=e._ownerWritableStream,r=t._state;return _t(t)||"closed"===r?f(void 0):"errored"===r?p(t._storedError):St(e)}(l)))},"closed"===S._state?T():_(E,T),_t(t)||"closed"===t._state){const t=new TypeError("the destination writable stream closed before all data could be piped to it");o?F(!0,t):k((()=>Sr(e,t)),!0,t)}function R(){const e=u;return b(u,(()=>e!==u?R():void 0))}function P(e,t,r){"errored"===e._state?r(e._storedError):y(t,r)}function k(e,r,n){function i(){m(e(),(()=>z(r,n)),(e=>z(!0,e)))}c||(c=!0,"writable"!==t._state||_t(t)?i():_(R(),i))}function F(e,r){c||(c=!0,"writable"!==t._state||_t(t)?z(e,r):_(R(),(()=>z(e,r))))}function z(e,t){Tt(l),O(a),void 0!==s&&s.removeEventListener("abort",v),e?w(t):d(void 0)}g(h(((e,t)=>{!function r(n){n?e():b(c?f(!0):b(l._readyPromise,(()=>h(((e,t)=>{te(a,{_chunkSteps:t=>{u=b(Rt(l,t),void 0,i),e(!1)},_closeSteps:()=>e(!0),_errorSteps:t})})))),r,t)}(!1)})))}))}class Kt{constructor(){throw new TypeError("Illegal constructor")}get desiredSize(){if(!Zt(this))throw cr("desiredSize");return sr(this)}close(){if(!Zt(this))throw cr("close");if(!ar(this))throw new TypeError("The stream is not in a state that permits close");nr(this)}enqueue(e){if(!Zt(this))throw cr("enqueue");if(!ar(this))throw new TypeError("The stream is not in a state that permits enqueue");return ir(this,e)}error(e){if(!Zt(this))throw cr("error");or(this,e)}[A](e){be(this);const t=this._cancelAlgorithm(e);return rr(this),t}[W](e){const t=this._controlledReadableStream;if(this._queue.length>0){const r=fe(this);this._closeRequested&&0===this._queue.length?(rr(this),Er(t)):er(this),e._chunkSteps(r)}else G(t,e),er(this)}}function Zt(e){return!!s(e)&&!!Object.prototype.hasOwnProperty.call(e,"_controlledReadableStream")&&e instanceof Kt}function er(e){tr(e)&&(e._pulling?e._pullAgain=!0:(e._pulling=!0,m(e._pullAlgorithm(),(()=>{e._pulling=!1,e._pullAgain&&(e._pullAgain=!1,er(e))}),(t=>{or(e,t)}))))}function tr(e){const t=e._controlledReadableStream;return!!ar(e)&&(!!e._started&&(!!(vr(t)&&J(t)>0)||sr(e)>0))}function rr(e){e._pullAlgorithm=void 0,e._cancelAlgorithm=void 0,e._strategySizeAlgorithm=void 0}function nr(e){if(!ar(e))return;const t=e._controlledReadableStream;e._closeRequested=!0,0===e._queue.length&&(rr(e),Er(t))}function ir(e,t){if(!ar(e))return;const r=e._controlledReadableStream;if(vr(r)&&J(r)>0)X(r,t,!1);else{let r;try{r=e._strategySizeAlgorithm(t)}catch(t){throw or(e,t),t}try{pe(e,t,r)}catch(t){throw or(e,t),t}}er(e)}function or(e,t){const r=e._controlledReadableStream;"readable"===r._state&&(be(e),rr(e),Tr(r,t))}function sr(e){const t=e._controlledReadableStream._state;return"errored"===t?null:"closed"===t?0:e._strategyHWM-e._queueTotalSize}function ar(e){const t=e._controlledReadableStream._state;return!e._closeRequested&&"readable"===t}function lr(e,t,r,n,i,o,s){t._controlledReadableStream=e,t._queue=void 0,t._queueTotalSize=void 0,be(t),t._started=!1,t._closeRequested=!1,t._pullAgain=!1,t._pulling=!1,t._strategySizeAlgorithm=s,t._strategyHWM=o,t._pullAlgorithm=n,t._cancelAlgorithm=i,e._readableStreamController=t,m(f(r()),(()=>{t._started=!0,er(t)}),(e=>{or(t,e)}))}function cr(e){return new TypeError(`ReadableStreamDefaultController.prototype.${e} can only be used on a ReadableStreamDefaultController`)}function ur(e,t,r){return B(e,r),r=>E(e,t,[r])}function dr(e,t,r){return B(e,r),r=>E(e,t,[r])}function hr(e,t,r){return B(e,r),r=>S(e,t,[r])}function fr(e,t){if("bytes"!=(e=`${e}`))throw new TypeError(`${t} '${e}' is not a valid enumeration value for ReadableStreamType`);return e}function pr(e,t){if("byob"!=(e=`${e}`))throw new TypeError(`${t} '${e}' is not a valid enumeration value for ReadableStreamReaderMode`);return e}function br(e,t){I(e,t);const r=null==e?void 0:e.preventAbort,n=null==e?void 0:e.preventCancel,i=null==e?void 0:e.preventClose,o=null==e?void 0:e.signal;return void 0!==o&&function(e,t){if(!function(e){if("object"!=typeof e||null===e)return!1;try{return"boolean"==typeof e.aborted}catch(e){return!1}}(e))throw new TypeError(`${t} is not an AbortSignal.`)}(o,`${t} has member 'signal' that`),{preventAbort:Boolean(r),preventCancel:Boolean(n),preventClose:Boolean(i),signal:o}}Object.defineProperties(Kt.prototype,{close:{enumerable:!0},enqueue:{enumerable:!0},error:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(Kt.prototype,n.toStringTag,{value:"ReadableStreamDefaultController",configurable:!0});class mr{constructor(e={},t={}){void 0===e?e=null:H(e,"First parameter");const r=Ze(t,"Second parameter"),n=function(e,t){I(e,t);const r=e,n=null==r?void 0:r.autoAllocateChunkSize,i=null==r?void 0:r.cancel,o=null==r?void 0:r.pull,s=null==r?void 0:r.start,a=null==r?void 0:r.type;return{autoAllocateChunkSize:void 0===n?void 0:Y(n,`${t} has member 'autoAllocateChunkSize' that`),cancel:void 0===i?void 0:ur(i,r,`${t} has member 'cancel' that`),pull:void 0===o?void 0:dr(o,r,`${t} has member 'pull' that`),start:void 0===s?void 0:hr(s,r,`${t} has member 'start' that`),type:void 0===a?void 0:fr(a,`${t} has member 'type' that`)}}(e,"First parameter");if(wr(this),"bytes"===n.type){if(void 0!==r.size)throw new RangeError("The strategy for a byte stream cannot have a size function");!function(e,t,r){const n=Object.create(_e.prototype);let i=()=>{},o=()=>f(void 0),s=()=>f(void 0);void 0!==t.start&&(i=()=>t.start(n)),void 0!==t.pull&&(o=()=>t.pull(n)),void 0!==t.cancel&&(s=e=>t.cancel(e));const a=t.autoAllocateChunkSize;if(0===a)throw new TypeError("autoAllocateChunkSize must be greater than 0");Be(e,n,i,o,s,r,a)}(this,n,Je(r,0))}else{const e=Ke(r);!function(e,t,r,n){const i=Object.create(Kt.prototype);let o=()=>{},s=()=>f(void 0),a=()=>f(void 0);void 0!==t.start&&(o=()=>t.start(i)),void 0!==t.pull&&(s=()=>t.pull(i)),void 0!==t.cancel&&(a=e=>t.cancel(e)),lr(e,i,o,s,a,r,n)}(this,n,Je(r,1),e)}}get locked(){if(!gr(this))throw Rr("locked");return vr(this)}cancel(e){return gr(this)?vr(this)?p(new TypeError("Cannot cancel a stream that already has a reader")):Sr(this,e):p(Rr("cancel"))}getReader(e){if(!gr(this))throw Rr("getReader");return void 0===function(e,t){I(e,t);const r=null==e?void 0:e.mode;return{mode:void 0===r?void 0:pr(r,`${t} has member 'mode' that`)}}(e,"First parameter").mode?V(this):$e(this)}pipeThrough(e,t={}){if(!gr(this))throw Rr("pipeThrough");L(e,1,"pipeThrough");const r=function(e,t){I(e,t);const r=null==e?void 0:e.readable;$(r,"readable","ReadableWritablePair"),Q(r,`${t} has member 'readable' that`);const n=null==e?void 0:e.writable;return $(n,"writable","ReadableWritablePair"),ot(n,`${t} has member 'writable' that`),{readable:r,writable:n}}(e,"First parameter"),n=br(t,"Second parameter");if(vr(this))throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream");if(dt(r.writable))throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream");return g(Jt(this,r.writable,n.preventClose,n.preventAbort,n.preventCancel,n.signal)),r.readable}pipeTo(e,t={}){if(!gr(this))return p(Rr("pipeTo"));if(void 0===e)return p("Parameter 1 is required in 'pipeTo'.");if(!ut(e))return p(new TypeError("ReadableStream.prototype.pipeTo's first argument must be a WritableStream"));let r;try{r=br(t,"Second parameter")}catch(e){return p(e)}return vr(this)?p(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream")):dt(e)?p(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream")):Jt(this,e,r.preventClose,r.preventAbort,r.preventCancel,r.signal)}tee(){if(!gr(this))throw Rr("tee");return ce(ye((e=this)._readableStreamController)?function(e){let t,r,n,i,o,s=V(e),a=!1,l=!1,c=!1;const u=h((e=>{o=e}));function d(e){y(e._closedPromise,(t=>{e===s&&(Ae(n._readableStreamController,t),Ae(i._readableStreamController,t),l&&c||o(void 0))}))}function p(){Ve(s)&&(O(s),s=V(e),d(s)),te(s,{_chunkSteps:t=>{v((()=>{a=!1;const r=t;let s=t;if(!l&&!c)try{s=he(t)}catch(t){return Ae(n._readableStreamController,t),Ae(i._readableStreamController,t),void o(Sr(e,t))}l||je(n._readableStreamController,r),c||je(i._readableStreamController,s)}))},_closeSteps:()=>{a=!1,l||De(n._readableStreamController),c||De(i._readableStreamController),n._readableStreamController._pendingPullIntos.length>0&&xe(n._readableStreamController,0),i._readableStreamController._pendingPullIntos.length>0&&xe(i._readableStreamController,0),l&&c||o(void 0)},_errorSteps:()=>{a=!1}})}function b(t,r){ee(s)&&(O(s),s=$e(e),d(s));const u=r?i:n,h=r?n:i;Ge(s,t,{_chunkSteps:t=>{v((()=>{a=!1;const n=r?c:l;if(r?l:c)n||Ie(u._readableStreamController,t);else{let r;try{r=he(t)}catch(t){return Ae(u._readableStreamController,t),Ae(h._readableStreamController,t),void o(Sr(e,t))}n||Ie(u._readableStreamController,t),je(h._readableStreamController,r)}}))},_closeSteps:e=>{a=!1;const t=r?c:l,n=r?l:c;t||De(u._readableStreamController),n||De(h._readableStreamController),void 0!==e&&(t||Ie(u._readableStreamController,e),!n&&h._readableStreamController._pendingPullIntos.length>0&&xe(h._readableStreamController,0)),t&&n||o(void 0)},_errorSteps:()=>{a=!1}})}function m(){}return n=yr(m,(function(){if(a)return f(void 0);a=!0;const e=We(n._readableStreamController);return null===e?p():b(e._view,!1),f(void 0)}),(function(n){if(l=!0,t=n,c){const n=ce([t,r]),i=Sr(e,n);o(i)}return u})),i=yr(m,(function(){if(a)return f(void 0);a=!0;const e=We(i._readableStreamController);return null===e?p():b(e._view,!0),f(void 0)}),(function(n){if(c=!0,r=n,l){const n=ce([t,r]),i=Sr(e,n);o(i)}return u})),d(s),[n,i]}(e):function(e,t){const r=V(e);let n,i,o,s,a,l=!1,c=!1,u=!1;const d=h((e=>{a=e}));function p(){return l||(l=!0,te(r,{_chunkSteps:e=>{v((()=>{l=!1;const t=e,r=e;c||ir(o._readableStreamController,t),u||ir(s._readableStreamController,r)}))},_closeSteps:()=>{l=!1,c||nr(o._readableStreamController),u||nr(s._readableStreamController),c&&u||a(void 0)},_errorSteps:()=>{l=!1}})),f(void 0)}function b(){}return o=_r(b,p,(function(t){if(c=!0,n=t,u){const t=ce([n,i]),r=Sr(e,t);a(r)}return d})),s=_r(b,p,(function(t){if(u=!0,i=t,c){const t=ce([n,i]),r=Sr(e,t);a(r)}return d})),y(r._closedPromise,(e=>{or(o._readableStreamController,e),or(s._readableStreamController,e),c&&u||a(void 0)})),[o,s]}(e));var e}values(e){if(!gr(this))throw Rr("values");return function(e,t){const r=V(e),n=new ie(r,t),i=Object.create(oe);return i._asyncIteratorImpl=n,i}(this,function(e,t){I(e,"First parameter");const r=null==e?void 0:e.preventCancel;return{preventCancel:Boolean(r)}}(e).preventCancel)}}function _r(e,t,r,n=1,i=(()=>1)){const o=Object.create(mr.prototype);return wr(o),lr(o,Object.create(Kt.prototype),e,t,r,n,i),o}function yr(e,t,r){const n=Object.create(mr.prototype);return wr(n),Be(n,Object.create(_e.prototype),e,t,r,0,void 0),n}function wr(e){e._state="readable",e._reader=void 0,e._storedError=void 0,e._disturbed=!1}function gr(e){return!!s(e)&&!!Object.prototype.hasOwnProperty.call(e,"_readableStreamController")&&e instanceof mr}function vr(e){return void 0!==e._reader}function Sr(e,t){if(e._disturbed=!0,"closed"===e._state)return f(void 0);if("errored"===e._state)return p(e._storedError);Er(e);const r=e._reader;return void 0!==r&&Ve(r)&&(r._readIntoRequests.forEach((e=>{e._closeSteps(void 0)})),r._readIntoRequests=new T),w(e._readableStreamController[A](t),i)}function Er(e){e._state="closed";const t=e._reader;void 0!==t&&(C(t),ee(t)&&(t._readRequests.forEach((e=>{e._closeSteps()})),t._readRequests=new T))}function Tr(e,t){e._state="errored",e._storedError=t;const r=e._reader;void 0!==r&&(q(r,t),ee(r)?(r._readRequests.forEach((e=>{e._errorSteps(t)})),r._readRequests=new T):(r._readIntoRequests.forEach((e=>{e._errorSteps(t)})),r._readIntoRequests=new T))}function Rr(e){return new TypeError(`ReadableStream.prototype.${e} can only be used on a ReadableStream`)}function Pr(e,t){I(e,t);const r=null==e?void 0:e.highWaterMark;return $(r,"highWaterMark","QueuingStrategyInit"),{highWaterMark:N(r)}}Object.defineProperties(mr.prototype,{cancel:{enumerable:!0},getReader:{enumerable:!0},pipeThrough:{enumerable:!0},pipeTo:{enumerable:!0},tee:{enumerable:!0},values:{enumerable:!0},locked:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(mr.prototype,n.toStringTag,{value:"ReadableStream",configurable:!0}),"symbol"==typeof n.asyncIterator&&Object.defineProperty(mr.prototype,n.asyncIterator,{value:mr.prototype.values,writable:!0,configurable:!0});const Or=e=>e.byteLength;Object.defineProperty(Or,"name",{value:"size",configurable:!0});class kr{constructor(e){L(e,1,"ByteLengthQueuingStrategy"),e=Pr(e,"First parameter"),this._byteLengthQueuingStrategyHighWaterMark=e.highWaterMark}get highWaterMark(){if(!zr(this))throw Fr("highWaterMark");return this._byteLengthQueuingStrategyHighWaterMark}get size(){if(!zr(this))throw Fr("size");return Or}}function Fr(e){return new TypeError(`ByteLengthQueuingStrategy.prototype.${e} can only be used on a ByteLengthQueuingStrategy`)}function zr(e){return!!s(e)&&!!Object.prototype.hasOwnProperty.call(e,"_byteLengthQueuingStrategyHighWaterMark")&&e instanceof kr}Object.defineProperties(kr.prototype,{highWaterMark:{enumerable:!0},size:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(kr.prototype,n.toStringTag,{value:"ByteLengthQueuingStrategy",configurable:!0});const qr=()=>1;Object.defineProperty(qr,"name",{value:"size",configurable:!0});class Cr{constructor(e){L(e,1,"CountQueuingStrategy"),e=Pr(e,"First parameter"),this._countQueuingStrategyHighWaterMark=e.highWaterMark}get highWaterMark(){if(!jr(this))throw Dr("highWaterMark");return this._countQueuingStrategyHighWaterMark}get size(){if(!jr(this))throw Dr("size");return qr}}function Dr(e){return new TypeError(`CountQueuingStrategy.prototype.${e} can only be used on a CountQueuingStrategy`)}function jr(e){return!!s(e)&&!!Object.prototype.hasOwnProperty.call(e,"_countQueuingStrategyHighWaterMark")&&e instanceof Cr}function Ar(e,t,r){return B(e,r),r=>E(e,t,[r])}function Wr(e,t,r){return B(e,r),r=>S(e,t,[r])}function Mr(e,t,r){return B(e,r),(r,n)=>E(e,t,[r,n])}Object.defineProperties(Cr.prototype,{highWaterMark:{enumerable:!0},size:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(Cr.prototype,n.toStringTag,{value:"CountQueuingStrategy",configurable:!0});class xr{constructor(e={},t={},r={}){void 0===e&&(e=null);const n=Ze(t,"Second parameter"),i=Ze(r,"Third parameter"),o=function(e,t){I(e,t);const r=null==e?void 0:e.flush,n=null==e?void 0:e.readableType,i=null==e?void 0:e.start,o=null==e?void 0:e.transform,s=null==e?void 0:e.writableType;return{flush:void 0===r?void 0:Ar(r,e,`${t} has member 'flush' that`),readableType:n,start:void 0===i?void 0:Wr(i,e,`${t} has member 'start' that`),transform:void 0===o?void 0:Mr(o,e,`${t} has member 'transform' that`),writableType:s}}(e,"First parameter");if(void 0!==o.readableType)throw new RangeError("Invalid readableType specified");if(void 0!==o.writableType)throw new RangeError("Invalid writableType specified");const s=Je(i,0),a=Ke(i),l=Je(n,1),c=Ke(n);let u;!function(e,t,r,n,i,o){function s(){return t}e._writable=function(e,t,r,n,i=1,o=(()=>1)){const s=Object.create(at.prototype);return ct(s),Ft(s,Object.create(Ot.prototype),e,t,r,n,i,o),s}(s,(function(t){return function(e,t){const r=e._transformStreamController;return e._backpressure?w(e._backpressureChangePromise,(()=>{const n=e._writable;if("erroring"===n._state)throw n._storedError;return Qr(r,t)})):Qr(r,t)}(e,t)}),(function(){return function(e){const t=e._readable,r=e._transformStreamController,n=r._flushAlgorithm();return Ur(r),w(n,(()=>{if("errored"===t._state)throw t._storedError;nr(t._readableStreamController)}),(r=>{throw Br(e,r),t._storedError}))}(e)}),(function(t){return function(e,t){return Br(e,t),f(void 0)}(e,t)}),r,n),e._readable=_r(s,(function(){return function(e){return Lr(e,!1),e._backpressureChangePromise}(e)}),(function(t){return Hr(e,t),f(void 0)}),i,o),e._backpressure=void 0,e._backpressureChangePromise=void 0,e._backpressureChangePromise_resolve=void 0,Lr(e,!0),e._transformStreamController=void 0}(this,h((e=>{u=e})),l,c,s,a),function(e,t){const r=Object.create($r.prototype);let n=e=>{try{return Yr(r,e),f(void 0)}catch(e){return p(e)}},i=()=>f(void 0);void 0!==t.transform&&(n=e=>t.transform(e,r)),void 0!==t.flush&&(i=()=>t.flush(r)),function(e,t,r,n){t._controlledTransformStream=e,e._transformStreamController=t,t._transformAlgorithm=r,t._flushAlgorithm=n}(e,r,n,i)}(this,o),void 0!==o.start?u(o.start(this._transformStreamController)):u(void 0)}get readable(){if(!Ir(this))throw Gr("readable");return this._readable}get writable(){if(!Ir(this))throw Gr("writable");return this._writable}}function Ir(e){return!!s(e)&&!!Object.prototype.hasOwnProperty.call(e,"_transformStreamController")&&e instanceof xr}function Br(e,t){or(e._readable._readableStreamController,t),Hr(e,t)}function Hr(e,t){Ur(e._transformStreamController),Dt(e._writable._writableStreamController,t),e._backpressure&&Lr(e,!1)}function Lr(e,t){void 0!==e._backpressureChangePromise&&e._backpressureChangePromise_resolve(),e._backpressureChangePromise=h((t=>{e._backpressureChangePromise_resolve=t})),e._backpressure=t}Object.defineProperties(xr.prototype,{readable:{enumerable:!0},writable:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty(xr.prototype,n.toStringTag,{value:"TransformStream",configurable:!0});class $r{constructor(){throw new TypeError("Illegal constructor")}get desiredSize(){if(!Nr(this))throw Vr("desiredSize");return sr(this._controlledTransformStream._readable._readableStreamController)}enqueue(e){if(!Nr(this))throw Vr("enqueue");Yr(this,e)}error(e){if(!Nr(this))throw Vr("error");var t;t=e,Br(this._controlledTransformStream,t)}terminate(){if(!Nr(this))throw Vr("terminate");!function(e){const t=e._controlledTransformStream;nr(t._readable._readableStreamController);Hr(t,new TypeError("TransformStream terminated"))}(this)}}function Nr(e){return!!s(e)&&!!Object.prototype.hasOwnProperty.call(e,"_controlledTransformStream")&&e instanceof $r}function Ur(e){e._transformAlgorithm=void 0,e._flushAlgorithm=void 0}function Yr(e,t){const r=e._controlledTransformStream,n=r._readable._readableStreamController;if(!ar(n))throw new TypeError("Readable side is not in a state that permits enqueue");try{ir(n,t)}catch(e){throw Hr(r,e),r._readable._storedError}const i=function(e){return!tr(e)}(n);i!==r._backpressure&&Lr(r,!0)}function Qr(e,t){return w(e._transformAlgorithm(t),void 0,(t=>{throw Br(e._controlledTransformStream,t),t}))}function Vr(e){return new TypeError(`TransformStreamDefaultController.prototype.${e} can only be used on a TransformStreamDefaultController`)}function Gr(e){return new TypeError(`TransformStream.prototype.${e} can only be used on a TransformStream`)}Object.defineProperties($r.prototype,{enqueue:{enumerable:!0},error:{enumerable:!0},terminate:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof n.toStringTag&&Object.defineProperty($r.prototype,n.toStringTag,{value:"TransformStreamDefaultController",configurable:!0})}},t={};function r(n){var i=t[n];if(void 0!==i)return i.exports;var o=t[n]={exports:{}};return e[n](o,o.exports,r),o.exports}r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};return(()=>{r.r(n),r.d(n,{FileSystemDirectoryHandle:()=>q.FileSystemDirectoryHandle,FileSystemFileHandle:()=>A.FileSystemFileHandle,FileSystemHandle:()=>W.FileSystemHandle,adapters:()=>B,getOriginPrivateDirectory:()=>C,lazyFileSystemWritableFileStream:()=>I,polyfillDataTransferItem:()=>x,showDirectoryPicker:()=>P,showOpenFilePicker:()=>k,showSaveFilePicker:()=>z,support:()=>M});var e=r(716);const{INVALID:t,GONE:i,MISMATCH:o,MOD_ERR:s,SYNTAX:a,ABORT:l}=e.errors;class c{constructor(e,t,r,n){this.position=0,this.db=e,this.id=t,this.size=r,this.file=n}async write(r){if(await new Promise(((e,t)=>{const[r,n]=d(this.db);n.get(this.id).onsuccess=e=>{e.target.result?n.get(this.id):t(new DOMException(...i))},r.oncomplete=()=>e(),h(r,t)})),(0,e.isChunkObject)(r))if("write"===r.type){if("number"==typeof r.position&&r.position>=0&&(this.size=0){if(this.size=0){let e=this.file;return e=r.sizee.size&&(this.position=e.size),void(this.file=e)}throw new DOMException(...a("truncate requires a size argument"))}}r=new Blob([r]);let n=this.file;const o=n.slice(0,this.position),s=n.slice(this.position+r.size);let l=this.position-o.size;l<0&&(l=0),n=new File([o,new Uint8Array(l),r,s],n.name),this.size=n.size,this.position+=r.size,this.file=n}close(){return new Promise(((e,t)=>{const[r,n]=d(this.db);n.get(this.id).onsuccess=e=>{e.target.result?n.put(this.file,this.id):t(new DOMException(...i))},r.oncomplete=()=>e(),h(r,t)}))}}class u{constructor(e,t,r){this.kind="file",this.writable=!0,this.readable=!0,this._db=e,this._id=t,this.name=r}async isSameEntry(e){return this._id===e._id}async getFile(){const e=await new Promise(((e,t)=>{const[r,n]=d(this._db);h(r,t);const i=n.get(this._id);i.onsuccess=t=>{r.oncomplete=()=>e(t.target.result)},i.onerror=e=>t(e.target.error)}));if(!e)throw new DOMException(...i);return e}async createWritable(e){let t=await this.getFile();return e.keepExistingData||(t=new File([],t.name,t)),new c(this._db,this._id,t.size,t)}}function d(e){const t=e.transaction("entries","readwrite",{durability:"relaxed"});return[t,t.objectStore("entries")]}function h(e,t){e.onerror=e=>{var r;t((null===(r=e.target.transaction)||void 0===r?void 0:r.error)||e.target.error)},e.onabort=e=>{t(e.target.error||new DOMException(...l))}}function f(e,t,r,n,i=!0){for(const[o,s]of Object.values(n||r))s?e.delete(o):i?(e.get(o).onsuccess=r=>f(e,t,r.target.result),e.delete(o)):e.get(o).onsuccess=r=>{0!==Object.keys(r.target.result).length?t():e.delete(o)}}class p{constructor(e,t,r){this.kind="directory",this.writable=!0,this.readable=!0,this._db=e,this._id=t,this.name=r}async*entries(){const e=await new Promise(((e,t)=>{const[r,n]=d(this._db);h(r,t);const i=n.get(this._id);i.onsuccess=t=>{r.oncomplete=()=>e(t.target.result)},i.onerror=e=>t(e.target.error)}));if(!e)throw new DOMException(...i);for(const[t,[r,n]]of Object.entries(e))yield[t,n?new u(this._db,r,t):new p(this._db,r,t)]}async isSameEntry(e){return this._id===e._id}getDirectoryHandle(e,t={}){return new Promise(((r,n)=>{const[s,a]=d(this._db);h(s,n);const l=a.get(this._id);l.onsuccess=()=>{const c=l.result;if(!c)return n(new DOMException(...i));const u=c[e];if(u)u[1]?n(new DOMException(...o)):s.oncomplete=()=>r(new p(this._db,u[0],e));else if(t.create){const t=a.add({});t.onsuccess=t=>{const i=t.target.result;c[e]=[i,!1];const o=a.put(c,this._id);o.onsuccess=()=>{s.oncomplete=()=>r(new p(this._db,i,e))},o.onerror=e=>n(e.target.error)},t.onerror=e=>n(e.target.error)}else n(new DOMException(...i))},l.onerror=e=>{n(e.target.error)}}))}getFileHandle(e,t={}){return new Promise(((r,n)=>{const[s,a]=d(this._db);h(s,n);const l=a.get(this._id);l.onsuccess=()=>{const c=l.result;if(!c)return n(new DOMException(...i));const d=c[e];if(d&&d[1]&&(s.oncomplete=()=>r(new u(this._db,d[0],e))),d&&!d[1]&&n(new DOMException(...o)),d||t.create||n(new DOMException(...i)),!d&&t.create)try{const t=a.put(new File([],e));t.onsuccess=()=>{const i=t.result;c[e]=[i,!0];const o=a.put(c,this._id);o.onsuccess=()=>{s.oncomplete=()=>r(new u(this._db,i,e))},o.onerror=e=>n(e.target.error)},t.onerror=e=>n(e.target.error)}catch(e){n(e)}},l.onerror=e=>n(e.target.error)}))}async removeEntry(e,t){return new Promise(((r,n)=>{let o=!1;const[a,l]=d(this._db),c=l.get(this._id);c.onsuccess=r=>{const s=c.result;if(!s)throw new DOMException(...i);const a={_:s[e]};if(!a._)return n(new DOMException(...i));delete s[e],l.put(s,this._id),f(r.target.source,(()=>{o=!0,r.target.transaction.abort()}),r.target.result,a,!!t.recursive)},a.oncomplete=()=>r(),h(a,(e=>n(o?new DOMException(...s):e)))}))}}const{INVALID:b,GONE:m,MISMATCH:_,MOD_ERR:y,SYNTAX:w}=e.errors,g={headers:{"content-type":"dir"}},v=()=>({headers:{"content-type":"file","last-modified":""+Date.now()}});class S{constructor(e,t,r){this._cache=e,this.path=t,this.size=r.size,this.position=0,this.file=r}async write(t){const[r]=await this._cache.keys(this.path);if(!r)throw new DOMException(...m);if((0,e.isChunkObject)(t))if("write"===t.type){if("number"==typeof t.position&&t.position>=0){if(this.size=0){if(this.size=0){let e=this.file;return e=new File(t.sizee.size&&(this.position=e.size),void(this.file=e)}throw new DOMException(...w("truncate requires a size argument"))}}t=new Blob([t]);let n=this.file;const i=n.slice(0,this.position),o=n.slice(this.position+t.size);let s=this.position-i.size;s<0&&(s=0),n=new File([i,new Uint8Array(s),t,o],n.name),this.size=n.size,this.position+=t.size,this.file=n}async close(){const[e]=await this._cache.keys(this.path);if(!e)throw new DOMException(...m);return this._cache.put(this.path,new Response(this.file,v()))}}class E{constructor(e,t){this.kind="file",this.writable=!0,this.readable=!0,this._cache=t,this.path=e}get name(){return this.path.split("/").pop()}async isSameEntry(e){return this.path===e.path}async getFile(){const e=await this._cache.match(this.path);if(!e)throw new DOMException(...m);const t=await e.blob();return new File([t],this.name,{lastModified:+e.headers.get("last-modified")})}async createWritable(e){let t=await this.getFile();return e.keepExistingData||(t=new File([],t.name,t)),new S(this._cache,this.path,t)}}class T{constructor(e,t){this.kind="directory",this.writable=!0,this.readable=!0,this._dir=e,this._cache=t,this.name=e.split("/").pop()}async*entries(){for(const[e,t]of Object.entries(await this._tree))yield[e.split("/").pop(),t?new E(e,this._cache):new T(e,this._cache)]}async isSameEntry(e){return this._dir===e._dir}async getDirectoryHandle(e,t={}){const r=this._dir.endsWith("/")?this._dir+e:`${this._dir}/${e}`,n=await this._tree;if(n.hasOwnProperty(r)){if(n[r])throw new DOMException(..._);return new T(r,this._cache)}if(t.create)return n[r]=!1,await this._cache.put(r,new Response("{}",g)),await this._save(n),new T(r,this._cache);throw new DOMException(...m)}get _tree(){return this._cache.match(this._dir).then((e=>e.json())).catch((e=>{throw new DOMException(...m)}))}_save(e){return this._cache.put(this._dir,new Response(JSON.stringify(e),g))}async getFileHandle(e,t={}){const r=this._dir.endsWith("/")?this._dir+e:`${this._dir}/${e}`,n=await this._tree;if(n.hasOwnProperty(r)){if(!n[r])throw new DOMException(..._);return new E(r,this._cache)}if(t.create){const e=await this._tree;return e[r]=!0,await this._cache.put(r,new Response("",v())),await this._save(e),new E(r,this._cache)}throw new DOMException(...m)}async removeEntry(e,t){const r=await this._tree,n=this._dir.endsWith("/")?this._dir+e:`${this._dir}/${e}`;if(!r.hasOwnProperty(n))throw new DOMException(...m);if(t.recursive){const e=[...Object.entries(r)];for(;e.length;){const[t,r]=e.pop();if(r)await this._cache.delete(t);else{const r=await this._cache.match(t).then((e=>e.json()));e.push(...Object.entries(r))}}delete r[n]}else{const e=r[n];if(delete r[n],e)await this._cache.delete(n);else{const e=await this._cache.match(n).then((e=>e.json()));if(Object.keys(e).length)throw new DOMException(...y);await this._cache.delete(n)}}await this._save(r)}}const R=globalThis.showDirectoryPicker;async function P(e={}){if(R&&!e._preferPolyfill)return R(e);const t=document.createElement("input");t.type="file",t.webkitdirectory=!0,t.multiple=!0,t.style.position="fixed",t.style.top="-100000px",t.style.left="-100000px",document.body.appendChild(t);const{makeDirHandleFromFileList:n}=await Promise.resolve().then(r.bind(r,716));return new Promise(((e,r)=>{t.addEventListener("change",(()=>{n(t.files).then(e).catch(r),document.body.removeChild(t)})),t.click()}))}const O=globalThis.showOpenFilePicker;async function k(e={}){if(O&&!e._preferPolyfill)return O(e);const t=document.createElement("input");t.type="file",t.multiple=!!e.multiple,t.accept=(e.accepts||[]).map((e=>[...(e.extensions||[]).map((e=>"."+e)),...e.mimeTypes||[]])).flat().join(","),t.style.position="fixed",t.style.top="-100000px",t.style.left="-100000px",document.body.appendChild(t);const{makeFileHandlesFromFileList:n}=await Promise.resolve().then(r.bind(r,716));return new Promise(((e,r)=>{t.addEventListener("change",(()=>{n(t.files).then(e).catch(r),document.body.removeChild(t)})),t.click()}))}const F=globalThis.showSaveFilePicker;async function z(e={}){if(F&&!e._preferPolyfill)return F(e);const{FileSystemFileHandle:t}=await Promise.resolve().then(r.bind(r,190)),{FileHandle:n}=await Promise.resolve().then(r.bind(r,254));return new t(new n(e.suggestedName))}var q=r(193);async function C(e,t={}){var r,n,i,o;if(!e){if(!(null===(r=globalThis.navigator)||void 0===r?void 0:r.storage)&&"http:"===(null===(n=globalThis.location)||void 0===n?void 0:n.protocol))throw new Error("Native getDirectory not supported in HTTP context. Please use HTTPS instead or provide an adapter.");if(!(null===(o=null===(i=globalThis.navigator)||void 0===i?void 0:i.storage)||void 0===o?void 0:o.getDirectory))throw new Error("Native StorageManager.getDirectory() is not supported in current environment. Please provide an adapter instead.");return globalThis.navigator.storage.getDirectory()}const s=await e,a="function"==typeof s?await s(t):await s.default(t);return new q.FileSystemDirectoryHandle(a)}var D,j,A=r(190),W=r(335);const M={adapter:{cache:!!(globalThis.CacheStorage&&globalThis.caches instanceof CacheStorage),native:"function"==typeof(null===(j=null===(D=globalThis.navigator)||void 0===D?void 0:D.storage)||void 0===j?void 0:j.getDirectory),sandbox:"undefined"!=typeof window&&"function"==typeof window.webkitRequestFileSystem}},x=()=>Promise.resolve().then(r.bind(r,849)),I=()=>Promise.resolve().then(r.bind(r,246)).then((e=>e.default)),B={indexeddb:()=>new Promise(((e,t)=>{const r=indexedDB.open("fileSystem");r.onupgradeneeded=()=>{const e=r.result;e.createObjectStore("entries",{autoIncrement:!0}).transaction.oncomplete=t=>{e.transaction("entries","readwrite").objectStore("entries").add({})}},r.onsuccess=()=>{e(new p(r.result,1,""))},r.onerror=e=>{t(e.target.error)}})),cache:async()=>{const e=await caches.open("sandboxed-fs");return await e.match("/")||await e.put("/",new Response("{}",g)),new T(location.origin+"/",e)}}})(),n})()})); \ No newline at end of file diff --git a/dist/ra2web.min.js b/dist/ra2web.min.js new file mode 100644 index 0000000..8509c8a --- /dev/null +++ b/dist/ra2web.min.js @@ -0,0 +1 @@ +var O9p,__classPrivateFieldSet=this&&this.__classPrivateFieldSet||function(e,t,i,r,s){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!s:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?s.call(e,i):s?s.value=i:t.set(e,i),i},__classPrivateFieldGet=this&&this.__classPrivateFieldGet||function(e,t,i,r){if("a"===i&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?r:"a"===i?r.call(e):r?r.value:t.get(e)},joystickInTouch=!1,joystickContainer=document.getElementById("joystick-container"),messageElement=document.getElementById("joystick-message"),k6p=/iPhone/i,e9e=/iPod/i,t9e=/iPad/i,n9e=/\biOS-universal(?:.+)Mac\b/i,a9e=/Silk/i,l9e=/Windows Phone/i,q9r=/\bWindows(?:.+)ARM\b/i,u9e=/BlackBerry/i,c9e=/BB10/i,m9w=/Opera Mini/i,h9e=/\b(CriOS|Chrome)(?:.+)Mobile/i,r9e=/\bAndroid(?:.+)Mobile\b/i,i9e=/Android/i,o9e=/(?:SD4930UR|\bSilk(?:.+)Mobile\b)/i,p9e=/Mobile(?:.+)Firefox\b/i,y9n=function(e){return void 0!==e&&"MacIntel"===e.platform&&"number"==typeof e.maxTouchPoints&&e.maxTouchPoints>1&&"undefined"==typeof MSStream};function preventExternalTouch(e){e.touches.length>1&&(e.preventDefault(),e.stopPropagation())}function preventDefaultForMultiTouch(e){e.touches.length>1&&e.preventDefault()}function G9A(e){var t={userAgent:"",platform:"",maxTouchPoints:0};e||"undefined"==typeof navigator?"string"==typeof e?t.userAgent=e:e&&e.userAgent&&(t={userAgent:e.userAgent,platform:e.platform,maxTouchPoints:e.maxTouchPoints||0}):t={userAgent:navigator.userAgent,platform:navigator.platform,maxTouchPoints:navigator.maxTouchPoints||0};var i=t.userAgent,r=i.split("[FBAN");void 0!==r[1]&&(i=r[0]),void 0!==(r=i.split("Twitter"))[1]&&(i=r[0]);var s=function(e){return function(t){return t.test(e)}}(i),n={apple:{phone:s(k6p)&&!s(l9e),ipod:s(e9e),tablet:!s(k6p)&&(s(t9e)||y9n(t))&&!s(l9e),universal:s(n9e),device:(s(k6p)||s(e9e)||s(t9e)||s(n9e)||y9n(t))&&!s(l9e)},amazon:{phone:s(o9e),tablet:!s(o9e)&&s(a9e),device:s(o9e)||s(a9e)},android:{phone:!s(l9e)&&s(o9e)||!s(l9e)&&s(r9e),tablet:!s(l9e)&&!s(o9e)&&!s(r9e)&&(s(a9e)||s(i9e)),device:!s(l9e)&&(s(o9e)||s(a9e)||s(r9e)||s(i9e))||s(/\bokhttp\b/i)},windows:{phone:s(l9e),tablet:s(q9r),device:s(l9e)||s(q9r)},other:{blackberry:s(u9e),blackberry10:s(c9e),opera:s(m9w),firefox:s(p9e),chrome:s(h9e),device:s(u9e)||s(c9e)||s(m9w)||s(p9e)||s(h9e)},any:!1,phone:!1,tablet:!1};return n.any=n.apple.device||n.android.device||n.windows.device||n.other.device,n.phone=n.apple.phone||n.android.phone||n.windows.phone,n.tablet=n.apple.tablet||n.android.tablet||n.windows.tablet,n}joystickContainer.addEventListener("touchstart",preventExternalTouch,!1),joystickContainer.addEventListener("touchmove",preventExternalTouch,!1),joystickContainer.addEventListener("touchend",preventExternalTouch,!1),System.register("data/IniSection",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("IniSection",class e{constructor(e){this.entries=new Map,this.name=e}clone(){let t=new e(this.name);return this.entries.forEach(((e,i)=>{t.set(i,e)})),t}set(e,t){this.entries.set(e,t)}get(e){return this.entries.get(e)}has(e){return this.entries.has(e)}getString(e,t=""){return this.get(e)||t}getNumber(e,t=0){var i=this.get(e);if(!i)return t;var r=this.parseNumber(i);return void 0===r?(console.warn(`Invalid value for key ${e}. "${i}" is not a valid number or percentage string.`),t):r}parseNumber(e){let t;if(t=e.match(/%$/)?Number(e.replace("%",""))/100:Number(e),!isNaN(t))return t}getFixed(e,t=0){return this.toFixedPointPrecision(this.getNumber(e,t))}toFixedPointPrecision(e){return(65536*e|0)/65536}getBool(e,t=!1){let i=this.getString(e).trim();return i=i&&i.toLowerCase(),!(!i||-1===["yes","1","true","on"].indexOf(i))||(!i||-1===["no","0","false","off"].indexOf(i))&&t}getArray(e,t=/\,\s*/,i=[]){let r=this.getString(e).trim();return r=r.replace(/\,$/,"").replace(/\,+/g,","),r?r.split(t):i}getNumberArray(e,t=/\,\s*/,i=[]){let r=this.getString(e).trim();if(!r)return i;let s=[];for(var n of r.split(t)){if(!n)return i;var a=this.parseNumber(n);if(void 0===a)return console.warn(`Invalid value for key ${e}. "${n}" is not a valid number or percentage string.`),i;s.push(a)}return s}getFixedArray(e,t=/\,\s*/,i=[]){return this.getNumberArray(e,t,i).map((e=>this.toFixedPointPrecision(e)))}getEnum(e,t,i,r=!1){let s,n=this.getString(e).trim();if(!n)return i;if(r){var a=Object.getOwnPropertyNames(t).find((e=>e.toLowerCase()===n.toLowerCase()));a&&(s=t[a])}else t.hasOwnProperty(n)&&(s=t[n]);return void 0===s?(console.warn(`Invalid value for key "${e}". "${n}" is not an accepted enum value.`),i):s}getEnumNumeric(e,t,i){var r=this.getString(e).trim();if(!r)return i;let s;return Number.isInteger(parseInt(r,10))&&t.hasOwnProperty(r)&&(s=parseInt(r,10)),void 0===s?(console.warn(`Invalid value for key "${e}". "${r}" is not an accepted enum value.`),i):s}getEnumArray(e,t,i=/\,\s*/,r=[],s=!1){let n=this.getString(e).trim();if(!n)return r;let a=[];for(let l of n.split(i)){if(!l)return r;let i=!1;if(s){var o=Object.getOwnPropertyNames(t).find((e=>e.toLowerCase()===l.toLowerCase()));o&&(a.push(t[o]),i=!0)}else t.hasOwnProperty(l)&&(a.push(t[l]),i=!0);if(!i)return console.warn(`Invalid value "${l}" for key "${e}".`),r}return a}getHighestNumericIndex(){let e,t=0;return this.entries.forEach(((i,r)=>{e=parseInt(r,10),e>t&&(t=e)})),t}getConcatenatedValues(){let e="";for(var t of this.entries.values())e+=t;return e}toString(){let e=[];for(var[t,i]of(e.push(`[${this.name}]`),this.entries))e.push(t+"="+i);return e.push(""),e.join("\r\n")}})}}})),System.register("data/IniParser",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("IniParser",class{parse(e){let t,i={},r=i,s=/^\[([^\]]*)\]\s*$|^([^=]+)(=(.*))?$/i;return e.split(/[\r\n]+/g).forEach(((e,n,a)=>{if(e&&!e.match(/^\s*[;#]/)){var o=(e=e.replace(/]\s*(\/\/|;|#).*$/,"]")).match(s);if(o){if(void 0!==o[1])return t=this.unsafe(o[1]),void(r=i[t]=i[t]||{});let e=this.unsafe(o[2]);o=o[3]?this.unsafe(o[4]||""):"",2{if(!i[e]||"object"!=typeof i[e]||Array.isArray(i[e]))return!1;let s=this.dotSplit(e),n=i,a=s.pop();var o=a.replace(/\\\./g,".");return s.forEach((function(e,t,i){n[e]&&"object"==typeof n[e]||(n[e]={}),n=n[e]})),(n!==i||o!==a)&&(n[o]=i[e],!0)})).forEach((function(e,t,r){delete i[e]})),i}dotSplit(e){return e.replace(/\1/g,"LITERAL\\1LITERAL").replace(/\\\./g,"").split(/\./).map((e=>e.replace(/\1/g,"\\.").replace(/\2LITERAL\\1LITERAL\2/g,"")))}isQuoted(e){return'"'===e.charAt(0)&&'"'===e.slice(-1)||"'"===e.charAt(0)&&"'"===e.slice(-1)}unsafe(e){if(e=(e||"").trim(),this.isQuoted(e))return e.substr(1,e.length-2);{let i=!1,r="";for(let s=0,n=e.length;sthis._byteLength&&(this._byteLength=t);else{for(s<1&&(s=1);t>s;)s*=2;var i=new ArrayBuffer(s),r=new Uint8Array(this._buffer);new Uint8Array(i,0,r.length).set(r),this.buffer=i,this._byteLength=t}}}_trimAlloc(){if(this._byteLength!==this._buffer.byteLength){var e=new ArrayBuffer(this._byteLength);const i=new Uint8Array(e);var t=new Uint8Array(this._buffer,0,i.length);i.set(t),this.buffer=e}}seek(e){var t=Math.max(0,Math.min(this.byteLength,e));this.position=isNaN(t)||!isFinite(t)?0:t}isEof(){return this.position>=this.byteLength}mapInt32Array(t,i){this._realloc(4*t);var r=new Int32Array(this._buffer,this.byteOffset+this.position,t);return e.arrayToNative(r,void 0===i?this.endianness:i),this.position+=4*t,r}mapInt16Array(t,i){this._realloc(2*t);var r=new Int16Array(this._buffer,this.byteOffset+this.position,t);return e.arrayToNative(r,void 0===i?this.endianness:i),this.position+=2*t,r}mapInt8Array(e){this._realloc(e);var t=new Int8Array(this._buffer,this.byteOffset+this.position,e);return this.position+=e,t}mapUint32Array(t,i){this._realloc(4*t);var r=new Uint32Array(this._buffer,this.byteOffset+this.position,t);return e.arrayToNative(r,void 0===i?this.endianness:i),this.position+=4*t,r}mapUint16Array(t,i){this._realloc(2*t);var r=new Uint16Array(this._buffer,this.byteOffset+this.position,t);return e.arrayToNative(r,void 0===i?this.endianness:i),this.position+=2*t,r}mapUint8Array(e){this._realloc(e);var t=new Uint8Array(this._buffer,this.byteOffset+this.position,e);return this.position+=e,t}mapFloat64Array(t,i){this._realloc(8*t);var r=new Float64Array(this._buffer,this.byteOffset+this.position,t);return e.arrayToNative(r,void 0===i?this.endianness:i),this.position+=8*t,r}mapFloat32Array(t,i){this._realloc(4*t);var r=new Float32Array(this._buffer,this.byteOffset+this.position,t);return e.arrayToNative(r,void 0===i?this.endianness:i),this.position+=4*t,r}readInt32Array(t,i){t=void 0===t?this.byteLength-this.position/4:t;var r=new Int32Array(t);return e.memcpy(r.buffer,0,this.buffer,this.byteOffset+this.position,t*r.BYTES_PER_ELEMENT),e.arrayToNative(r,void 0===i?this.endianness:i),this.position+=r.byteLength,r}readInt16Array(t,i){t=void 0===t?this.byteLength-this.position/2:t;var r=new Int16Array(t);return e.memcpy(r.buffer,0,this.buffer,this.byteOffset+this.position,t*r.BYTES_PER_ELEMENT),e.arrayToNative(r,void 0===i?this.endianness:i),this.position+=r.byteLength,r}readInt8Array(t){t=void 0===t?this.byteLength-this.position:t;var i=new Int8Array(t);return e.memcpy(i.buffer,0,this.buffer,this.byteOffset+this.position,t*i.BYTES_PER_ELEMENT),this.position+=i.byteLength,i}readUint32Array(t,i){t=void 0===t?this.byteLength-this.position/4:t;var r=new Uint32Array(t);return e.memcpy(r.buffer,0,this.buffer,this.byteOffset+this.position,t*r.BYTES_PER_ELEMENT),e.arrayToNative(r,void 0===i?this.endianness:i),this.position+=r.byteLength,r}readUint16Array(t,i){t=void 0===t?this.byteLength-this.position/2:t;var r=new Uint16Array(t);return e.memcpy(r.buffer,0,this.buffer,this.byteOffset+this.position,t*r.BYTES_PER_ELEMENT),e.arrayToNative(r,void 0===i?this.endianness:i),this.position+=r.byteLength,r}readUint8Array(t){t=void 0===t?this.byteLength-this.position:t;var i=new Uint8Array(t);return e.memcpy(i.buffer,0,this.buffer,this.byteOffset+this.position,t*i.BYTES_PER_ELEMENT),this.position+=i.byteLength,i}readFloat64Array(t,i){t=void 0===t?this.byteLength-this.position/8:t;var r=new Float64Array(t);return e.memcpy(r.buffer,0,this.buffer,this.byteOffset+this.position,t*r.BYTES_PER_ELEMENT),e.arrayToNative(r,void 0===i?this.endianness:i),this.position+=r.byteLength,r}readFloat32Array(t,i){t=void 0===t?this.byteLength-this.position/4:t;var r=new Float32Array(t);return e.memcpy(r.buffer,0,this.buffer,this.byteOffset+this.position,t*r.BYTES_PER_ELEMENT),e.arrayToNative(r,void 0===i?this.endianness:i),this.position+=r.byteLength,r}writeInt32Array(t,i){if(this._realloc(4*t.length),t instanceof Int32Array&&(this.byteOffset+this.position)%t.BYTES_PER_ELEMENT==0)e.memcpy(this._buffer,this.byteOffset+this.position,t.buffer,t.byteOffset,t.byteLength),this.mapInt32Array(t.length,i);else for(let e=0;en;s--,n++){var i=t[n];t[n]=t[s],t[s]=i}return e}static createStringFromArray(e){const t=[];for(let i=0;i{},new this(t,e.name)}catch(t){if(t instanceof DOMException)throw new r.IOError(`File "${e.name}" could not be read (${t.name})`,{cause:t});throw t}}static fromBytes(e,t){let r=new i.DataStream(e);return r._trimAlloc=()=>{},new this(r,t)}static factory(e,t,r=0,s=e.byteLength){var n=new DataView(e.buffer,e.byteOffset+r,s);const a=new i.DataStream(n);return a._trimAlloc=()=>{},new this(a,t)}readAsString(e){return this.stream.seek(0),this.stream.readString(this.stream.byteLength,e)}getBytes(){return new Uint8Array(this.stream.buffer,this.stream.byteOffset,this.stream.byteLength)}getSize(){return this.stream.byteLength}asFile(e){return new File([this.getBytes()],this.filename,{type:e})}})}}})),System.register("data/IniFile",["data/IniSection","data/IniParser","data/vfs/VirtualFile"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){e("IniFile",class e{constructor(e){this.sections=new Map,e instanceof s.VirtualFile?this.fromVirtualFile(e):"object"==typeof e?this.fromJson(e):"string"==typeof e&&this.fromString(e)}fromVirtualFile(e){return this.fromString(e.readAsString())}fromString(e){return this.fromJson((new r.IniParser).parse(e)),this}fromJson(e){let t,r,s,n;var a;for(t in e)if(e.hasOwnProperty(t)){for(n in r=e[t],s=new i.IniSection(t),r)r.hasOwnProperty(n)&&(a=r[n],s.set(n,a));this.sections.set(t,s)}}toString(){let e=[];for(var t of this.sections.values())e.push(t.toString());return e.join("\r\n")}clone(){let t=new e;return this.sections.forEach(((e,i)=>{t.sections.set(i,e.clone())})),t}getOrCreateSection(e){let t=this.sections.get(e);return t||(t=new i.IniSection(e),this.sections.set(e,t)),t}getSection(e){return this.sections.get(e)}getOrderedSections(){return[...this.sections.values()]}isValueArray(e){return-1!==["BuildingTypes","AircraftTypes","InfantryTypes","OverlayTypes","TerrainTypes","SmudgeTypes","VehicleTypes","Animations","VoxelAnims","SuperWeaponTypes","Countries","Warheads","Tiberiums"].indexOf(e)}mergeWith(e){return e.sections.forEach(((e,t)=>{let i=this.getOrCreateSection(t);if(this.isValueArray(t)){let t=i.getHighestNumericIndex()+1;e.entries.forEach(((e,r)=>{i.set((t++).toString(),e)}))}else e.entries.forEach(((e,t)=>{i.set(t,e)}))})),this}})}}})),System.register("data/encoding/Format3",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("Format3",class{static decode(e,t,i){let r=new Uint8Array(t*i),s=0,n=0;for(let a=0;at&&(o=t-a&255),a+=o;0!=o--;)r[n++]=0}}return r}})}}})),System.register("data/ShpImage",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("ShpImage",class e{constructor(e){this.height=1,this.width=1,this.x=0,this.y=0,this.imageData=e??new Uint8Array(0)}clip(t,i){let r=new e;r.width=Math.min(this.width,t),r.height=Math.min(this.height,i);let s=new Uint8Array(t*i),n=0;for(let e=0;e=i);e++)for(let i=0;i=t||(s[n++]=this.imageData[e*this.width+i]);return r.imageData=s,r.x=this.x,r.y=this.y,r}})}}})),System.register("data/ShpFile",["data/encoding/Format3","data/ShpImage","data/vfs/VirtualFile"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){e("ShpFile",class e{constructor(e){this.height=0,this.width=0,this.numImages=0,this.images=[],e instanceof s.VirtualFile&&this.fromVirtualFile(e)}fromVirtualFile(e){this.filename=e.filename;let t=e.stream;if(0===t.readInt16()){this.width=t.readInt16(),this.height=t.readInt16(),this.numImages=t.readInt16();let e=[];for(let i=0;ie.clip(r.width,r.height))),r.numImages=this.numImages,r}})}}})),System.register("data/vxl/SpanOffsets",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("data/vxl/Voxel",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("data/vxl/Span",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("data/vxl/normals",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){i=THREE.Vector3,e("normals1",[new i(.54946297,-183e-6,-.835518),new i(.00014400001,.54940403,-.83555698),new i(-.54940403,-68000001e-12,-.83555698),new i(106e-6,-.54946297,-.835518),new i(.94900799,.00031599999,-.31525001),new i(-186e-6,.94899702,-.31528401),new i(-.94899702,.00031800001,-.31528401),new i(-447e-6,-.94900799,-.31525001),new i(.95084399,-279e-6,.30967101),new i(202e-6,.95084798,.30965701),new i(-.95084798,-70000002e-12,.30965701),new i(147e-6,-.95084399,.30967101),new i(.55237001,-11e-6,.83359897),new i(19999999e-12,.55238003,.833592),new i(-.55238003,57000001e-12,.83359301),new i(-66000001e-12,-.55237001,.83359897)]),e("normals2",[new i(.67121398,.19849201,-.714194),new i(.26964301,.58439398,-.76536),new i(-.040546,.096988,-.99445897),new i(-.57242799,-.091913998,-.81478697),new i(-.17140099,-.57270998,-.80163902),new i(.36255699,-.30299899,-.88133103),new i(.81034702,-.34897199,-.470698),new i(.103962,.93867201,-.328767),new i(-.324047,.58766901,-.74137598),new i(-.80086499,.34046099,-.49264699),new i(-.66549802,-.59014702,-.45698899),new i(.314767,-.803002,-.506073),new i(.97262901,.151076,-.17655),new i(.680291,.68423599,-.26272699),new i(-.52007902,.82777703,-.210483),new i(-.96164399,-.179001,-.207847),new i(-.262714,-.937451,-.22840101),new i(.219707,-.97130102,.091124997),new i(.92380798,-.229975,.30608699),new i(-.082488999,.97065997,.225866),new i(-.59179801,.69678998,.40528899),new i(-.92529601,.36660099,.097111002),new i(-.705051,-.68777502,.172828),new i(.7324,-.68036699,-.026304999),new i(.85516202,.37458199,.358311),new i(.47300601,.83648002,.276705),new i(-.097617,.65411198,.750072),new i(-.90412402,-.153725,.39865801),new i(-.211916,-.85808998,.46773201),new i(.50022697,-.67440802,.543091),new i(.584539,-.110249,.80384099),new i(.43737301,.45464399,.77588898),new i(-.042440999,.083318003,.995619),new i(-.59625101,.22013199,.77202803),new i(-.506455,-.39697701,.76544899),new i(.070569001,-.47847399,.87526202)]),e("normals3",[new i(.45651099,-.073968001,-.88663799),new i(.50769401,.38511699,-.77067),new i(.095431998,.22666401,-.96928602),new i(-.35876599,.54318798,-.75910097),new i(-.361276,.13299499,-.92292601),new i(-.48311701,-.32406601,-.813375),new i(-.018073,-.197559,-.980124),new i(.3211,-.501477,-.80337799),new i(.79949099,.069615997,-.59662998),new i(.390971,.77130598,-.50222403),new i(.080782004,.61448997,-.784778),new i(-.73275,.41143101,-.54203498),new i(-.73525399,.0091019999,-.67773098),new i(-.80249399,-.39490801,-.44727099),new i(-.13413,-.58915502,-.79680902),new i(.71955299,-.37622699,-.58369303),new i(.96687502,.173593,-.187132),new i(.760831,.51910597,-.38944301),new i(-.114642,.87551898,-.46938601),new i(-.53236699,.76885903,-.354177),new i(-.96226698,.024977,-.27095801),new i(-.46738699,-.721986,-.51018202),new i(.058449998,-.85235399,-.51968902),new i(.49823299,-.74374002,-.44566301),new i(.93915099,-.27024499,-.212044),new i(.58393198,.80944198,-.061857),new i(.183797,.97322798,-.138007),new i(-.88435501,.45221901,-.115822),new i(-.943178,-.33206701,.012138),new i(-.69844002,-.70656699,-.113772),new i(-.228411,-.95470601,-.190694),new i(.73156399,-.675861,-.089588001),new i(.96925098,.046804,.24158201),new i(.85564703,.50347698,.119916),new i(-.25115299,.96794701,-80999998e-12),new i(-.64779502,.75674897,.087711997),new i(-.96916401,.14519399,.1991),new i(-.41479301,-.88896698,.194126),new i(.25077501,-.961178,-.115109),new i(.47862899,-.84259301,.246883),new i(.89004397,-.39614201,.225595),new i(.52405101,.76235998,.37970701),new i(.11962,.94548202,.30291),new i(-.76085001,.49007499,.42536199),new i(-.86978501,-.20215,.450122),new i(-.70946699,-.60242403,.36570701),new i(.019308999,-.95887101,.28318599),new i(.626113,-.564677,.53770101),new i(.769943,-.126663,.62541503),new i(.76419097,.35070199,.54131401),new i(-.001878,.74136698,.67109799),new i(-.37088001,.81836802,.43900099),new i(-.71390897,.12865201,.68831801),new i(-.295165,-.73866397,.60601401),new i(.186195,-.73836899,.648184),new i(.387523,-.35878301,.84917599),new i(.481022,.124846,.86777401),new i(.391808,.54505599,.741216),new i(-.0035359999,.36559799,.93076599),new i(-.42049801,.484961,.76680797),new i(-.35490301,.019470001,.93470001),new i(-.54783702,-.35920799,.75554299),new i(-.106662,-.445115,.88909799),new i(.086796001,-.059307002,.99445897)]),e("normals4",[new i(.52657801,-.35962099,-.77031702),new i(.150482,.43598399,.88728398),new i(.414195,.73825502,-.53237402),new i(.075152002,.91624898,-.393498),new i(-.316149,.93073601,-.18379299),new i(-.77381903,.62333399,-.11251),new i(-.90084201,.42853701,-.069568001),new i(-.99894202,-.010971,.044665001),new i(-.979761,-.15767001,-.123324),new i(-.91127402,-.362371,-.19562),new i(-.62406898,-.72094101,-.301301),new i(-.310173,-.80934501,-.498752),new i(.146613,-.81581903,-.55941403),new i(-.71651602,-.69435602,-.066887997),new i(.50397199,-.114202,-.85613698),new i(.45549101,.87262702,-.176211),new i(-.00501,-.114373,-.99342501),new i(-.104675,-.327701,-.93896502),new i(.56041199,.75258899,-.34575599),new i(-.060575999,.82162797,-.566796),new i(-.30234101,.79700702,-.522847),new i(-.671543,.67074001,-.314863),new i(-.77840102,-.12835699,.61450499),new i(-.92404997,.278382,-.261985),new i(-.69977301,-.55049098,-.45527801),new i(-.56824797,-.51718903,-.64000797),new i(.054097999,-.93286401,-.356143),new i(.75838202,.57289302,-.31088799),new i(.0036200001,.30502599,-.95233703),new i(-.060849998,-.98688602,-.14951099),new i(.63523,.045478001,-.77098298),new i(.52170497,.241309,-.81828701),new i(.26940399,.63542497,-.72364098),new i(.045676,.67275399,-.738455),new i(-.180511,.67465699,-.71571898),new i(-.397131,.63664001,-.66104198),new i(-.55200398,.47251499,-.687038),new i(-.77217001,.08309,-.62996),new i(-.669819,-.119533,-.73284),new i(-.54045498,-.31844401,-.77878201),new i(-.38613501,-.522789,-.75999397),new i(-.261466,-.68856698,-.676395),new i(-.019412,-.69610298,-.71767998),new i(.30356899,-.48184401,-.82199299),new i(.68193901,-.19512901,-.70490003),new i(-.24488901,-.116562,-.96251899),new i(.80075902,-.022979001,-.59854603),new i(-.37027499,.095583998,-.92399102),new i(-.33067101,-.32657799,-.88543999),new i(-.16322,-.52757901,-.83367902),new i(.12639,-.313146,-.941257),new i(.34954801,-.27222601,-.89649802),new i(.23991799,-.085825004,-.96699202),new i(.390845,.081537001,-.91683799),new i(.25526699,.26869699,-.92878503),new i(.146245,.48043799,-.86474901),new i(-.32601601,.47845599,-.81534898),new i(-.46968201,-.112519,-.87563598),new i(.81844002,-.25852001,-.51315099),new i(-.474318,.292238,-.83043301),new i(.778943,.39584199,-.48637101),new i(.62409401,.39377299,-.67487001),new i(.74088597,.203834,-.63995302),new i(.48021701,.565768,-.67029703),new i(.38093001,.42453501,-.82137799),new i(-.093422003,.50112402,-.86031801),new i(-.236485,.29619801,-.92538702),new i(-.131531,.093959004,-.98684901),new i(-.82356203,.29577699,-.48400599),new i(.61106598,-.624304,-.486664),new i(.069495998,-.52033001,-.85113299),new i(.226522,-.66487902,-.711775),new i(.47130799,-.56890398,-.67395699),new i(.38842499,-.74262398,-.54556),new i(.78367501,-.48072901,-.39338499),new i(.962394,.135676,-.235349),new i(.876607,.172034,-.449406),new i(.63340503,.58979303,-.50094098),new i(.182276,.80065799,-.57072097),new i(.177003,.76413399,.62029701),new i(-.544016,.675515,-.49772099),new i(-.67929697,.28646699,-.67564201),new i(-.59039098,.091369003,-.801929),new i(-.82436001,-.13312399,-.55018902),new i(-.71579403,-.33454201,-.61296099),new i(.17428599,-.89248401,.416049),new i(-.082528003,-.83712298,-.54075301),new i(.28333101,-.88087398,-.37918901),new i(.675134,-.42662701,-.60181701),new i(.84372002,-.512335,-.160156),new i(.97730398,-.098555997,-.18752),new i(.846295,.522672,-.102947),new i(.67714101,.72132498,-.145501),new i(.32096499,.87089199,-.37219399),new i(-.178978,.911533,-.37023601),new i(-.44716901,.82670099,-.341474),new i(-.70320302,.496328,-.50908101),new i(-.97718102,.063562997,-.202674),new i(-.87817001,-.412938,.241455),new i(-.83583099,-.35855001,-.415728),new i(-.499174,-.69343299,-.51959199),new i(-.188789,-.92375302,-.33322501),new i(.19225401,-.96936101,-.152896),new i(.51594001,-.783907,-.34539199),new i(.90592498,-.30095199,-.29787099),new i(.99111199,-.127746,.037106998),new i(.99513501,.098424003,-.0043830001),new i(.76012301,.64627701,.067367002),new i(.205221,.95958,-.192591),new i(-.042750001,.97951299,-.19679099),new i(-.43801701,.89892697,.0084920004),new i(-.82199401,.48078501,-.30523899),new i(-.89991701,.081710003,-.42833701),new i(-.92661202,-.144618,-.347096),new i(-.79365999,-.55779201,-.24283899),new i(-.43134999,-.84777898,-.30855799),new i(-.0054919999,-.96499997,.26219299),new i(.58790499,-.80402601,-.088940002),new i(.69949299,-.66768599,-.254765),new i(.88930303,.359795,-.282291),new i(.780972,.197037,.59267199),new i(.52012098,.50669599,.68755698),new i(.40389499,.69396102,.59605998),new i(-.154983,.89923602,.40909001),new i(-.65733802,.53716803,.528543),new i(-.74619502,.33409101,.575827),new i(-.62495202,-.049144,.77911502),new i(.31814101,-.254715,.913185),new i(-.555897,.405294,.725752),new i(-.79443401,.099405997,.59916002),new i(-.64036101,-.68946302,.33849499),new i(-.12671299,-.73409498,.66711998),new i(.105457,-.78081697,.61579502),new i(.40799299,-.48091599,.77605498),new i(.69513601,-.54512,.468647),new i(.97319102,-.0064889998,.229908),new i(.94689399,.317509,-.050799001),new i(.56358302,.82561201,.027183),new i(.325773,.94542301,.0069490001),new i(-.171821,.98509699,-.0078149997),new i(-.67044097,.73993897,.054768998),new i(-.822981,.55496198,.121322),new i(-.96619302,.117857,.229307),new i(-.95376903,-.29470399,.058945),new i(-.86438698,-.50272799,-.010015),new i(-.53060901,-.84200603,-.097365998),new i(-.162618,-.98407501,.071772002),new i(.081446998,-.99601102,.036439002),new i(.74598402,-.66596299,.00076199998),new i(.94205701,-.32926899,-.064106002),new i(.93970197,-.28108999,.194803),new i(.77121401,.55067003,.319363),new i(.641348,.73069,.23402099),new i(.080682002,.99669099,.0098789996),new i(-.046725001,.97664303,.20972501),new i(-.53107601,.82100099,.209562),new i(-.69581503,.65599,.29243499),new i(-.97612202,.216709,-.014913),new i(-.96166098,-.14412899,.23331399),new i(-.772084,-.61364698,.165299),new i(-.44960001,-.83605999,.314426),new i(-.39269999,-.91461599,.096247002),new i(.390589,-.91947001,.044890001),new i(.58252901,-.79919797,.148127),new i(.866431,-.48981199,.096864),new i(.90458697,.111498,.41145),new i(.95353699,.23232999,.191806),new i(.497311,.77080297,.398177),new i(.194066,.95631999,.218611),new i(.422876,.882276,.206797),new i(-.373797,.84956598,.37217399),new i(-.53449702,.71402299,.4522),new i(-.881827,.23716,.40759799),new i(-.904948,-.014069,.42528901),new i(-.751827,-.51281703,.41445801),new i(-.50101501,-.69791698,.51175803),new i(-.23519,-.92592299,.295555),new i(.228983,-.95393997,.193819),new i(.734025,-.63489801,.241062),new i(.91375297,-.063253,-.40131599),new i(.90573502,-.161487,.391875),new i(.85892999,.342446,.38074899),new i(.62448603,.60758102,.49077699),new i(.28926399,.85747898,.42550799),new i(.069968,.90216899,.42567101),new i(-.28617999,.94069999,.182165),new i(-.57401299,.80511898,-.14930899),new i(.111258,.099717997,-.98877603),new i(-.30539301,-.94422799,-.12316),new i(-.60116601,-.78957599,.123163),new i(-.290645,-.81213999,.50591898),new i(-.064920001,-.87716299,.47578499),new i(.408301,-.862216,.29978901),new i(.56609702,-.72556603,.39126399),new i(.83936399,-.427387,.33586901),new i(.81889999,-.041305002,.57244802),new i(.71978402,.41499701,.55649698),new i(.88174403,.45027,.140659),new i(.40182301,-.89822,-.17815199),new i(-.054019999,.79134399,.60898),new i(-.29377401,.76399398,.57446498),new i(-.450798,.61034697,.65135098),new i(-.63822103,.186694,.74687302),new i(-.87287003,-.25712699,.41470799),new i(-.58725703,-.52170998,.618828),new i(-.35365799,-.64197397,.680291),new i(.041648999,-.61127299,.79032302),new i(.348342,-.77918297,.52108699),new i(.499167,-.62244099,.602826),new i(.79001898,-.30383101,.53250003),new i(.66011798,.060733002,.74870199),new i(.60492098,.29416099,.73996001),new i(.38569701,.37934601,.84103203),new i(.239693,.207876,.94833201),new i(.012623,.25853199,.96591997),new i(-.100557,.457147,.88368797),new i(.046967,.62858802,.77631903),new i(-.43039101,-.44540501,.785097),new i(-.43429101,-.196228,.87913901),new i(-.25663701,-.336867,.90590203),new i(-.131372,-.15891001,.97851402),new i(.102379,-.208767,.972592),new i(.195687,-.450129,.87125802),new i(.62731898,-.42314801,.65377098),new i(.68743902,-.171583,.70568198),new i(.27592,-.021255,.96094602),new i(.45936701,.15746599,.87417799),new i(.285395,.583184,.76055598),new i(-.81217402,.46030301,.35846099),new i(-.189068,.64122301,.743698),new i(-.338875,.47648001,.811252),new i(-.92099398,.347186,.176727),new i(.040638998,.024465,.99887401),new i(-.73913199,-.35374701,.57318997),new i(-.60351199,-.28661501,.74405998),new i(-.188676,-.547059,.81555402),new i(-.026045,-.39782,.91709399),new i(.26789701,-.649041,.71202302),new i(.518246,-.28489101,.80638599),new i(.493451,-.066532999,.86722499),new i(-.328188,.140251,.93414301),new i(.328188,.140251,.93414301),new i(-.328188,.140251,.93414301),new i(-.328188,.140251,.93414301),new i(-.328188,.140251,.93414301)])}}})),System.register("data/vxl/VoxelField",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("VoxelField",class{constructor(e,t,i){this.sizeX=e,this.sizeY=t,this.sizeZ=i,this.arr=new Array(e*t*i)}add(e){this.arr[e.x+e.y*this.sizeX+e.z*this.sizeX*this.sizeY]=e}get(e,t,i){if(!(e>=this.sizeX||t>=this.sizeY||i>=this.sizeZ))return this.arr[e+t*this.sizeX+i*this.sizeX*this.sizeY]}})}}})),System.register("data/vxl/Section",["data/vxl/normals","data/vxl/VoxelField"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("Section",class{get spanX(){return this.maxBounds.x-this.minBounds.x}get spanY(){return this.maxBounds.y-this.minBounds.y}get spanZ(){return this.maxBounds.z-this.minBounds.z}get scaleX(){return this.spanX/this.sizeX}get scaleY(){return this.spanY/this.sizeY}get scaleZ(){return this.spanZ/this.sizeZ}get scale(){return new THREE.Vector3(this.scaleX,this.scaleY,this.scaleZ)}getAllVoxels(){let e=[],t=new r.VoxelField(this.sizeX+1,this.sizeY+1,this.sizeZ+1);for(let r=0,n=this.spans.length;rt.name===e.name))&&console.warn(`Duplicate section name "${e.name}" found in VXL "${this.filename}".`),this.sections.push(e)}var i=t.position;t.seek(t.position+e.bodySize);let s=[];for(let i=0;i(new r.Section).fromPlain(e))),this.voxelCount=e.voxelCount,this}toPlain(){return{sections:this.sections.map((e=>e.toPlain())),voxelCount:this.voxelCount}}getSection(e){return this.sections[e]}})}}})),System.register("data/TmpImage",[],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.ExtraData=1]="ExtraData",t[t.ZData=2]="ZData",t[t.DamagedData=4]="DamagedData",r=e=>e<0?e+256:e,e("TmpImage",class{constructor(e,t,i){this.fromStream(e,t,i)}fromStream(e,t,r){this.x=e.readInt32(),this.y=e.readInt32(),e.readInt32(),e.readInt32();var s=e.readInt32();this.extraX=e.readInt32(),this.extraY=e.readInt32(),this.extraWidth=e.readInt32(),this.extraHeight=e.readInt32();var n=e.readUint32();this.height=e.readUint8(),this.terrainType=e.readUint8(),this.rampType=e.readUint8(),this.radarLeft=this.readRadarRgb(e.readInt8(),e.readInt8(),e.readInt8()),this.radarRight=this.readRadarRgb(e.readInt8(),e.readInt8(),e.readInt8()),e.seek(e.position+3),this.tileData=new Uint8Array(e.buffer,e.byteOffset+e.position,t*r/2),e.position+=t*r/2,this.hasZData=(n&i.ZData)===i.ZData,this.hasZData&&(e.position+=t*r/2),this.hasExtraData=(n&i.ExtraData)===i.ExtraData,this.hasExtraData&&(n=Math.abs(this.extraWidth*this.extraHeight),this.extraData=new Uint8Array(e.buffer,e.byteOffset+e.position,n),e.position+=n),this.hasZData&&this.hasExtraData&&0e+String.fromCharCode(t)),"")}return t&&t.id,e("pad",(function(e,t="0000"){var i=""+e;return t.substring(0,t.length-i.length)+i})),e("equalsIgnoreCase",(function(e,t){return e.toLowerCase()===t.toLowerCase()})),e("binaryStringToUint8Array",r),e("base64StringToUint8Array",(function(e){return r(i.Base64.decode(e))})),e("uint8ArrayToBase64String",(function(e){return i.Base64.encode(s(e))})),e("uint8ArrayToBinaryString",s),e("utf16ToBinaryString",(function(e){var t=e.length;let i="";for(let s=0;s>8),i+=String.fromCharCode(255&r)}return i})),e("binaryStringToUtf16",(function(e){var t=e.length;let i="";for(let s=0;s>>0})),{setters:[],execute:function(){}}})),System.register("data/Palette",["util/Color","util/math","data/vfs/VirtualFile"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){e("Palette",n=class e{constructor(e){e instanceof s.VirtualFile?this.fromVirtualFile(e):"object"==typeof e&&this.fromJson(e)}fromVirtualFile(e){var t=e.stream.readUint8Array(768);this.fromJson(t)}fromJson(e){this.colors=[];for(let t=0;te.clone())),t._hash=this._hash,t}remap(t){var i=[63,59,55,52,48,44,41,37,33,30,26,22,19,15,11,8];for(let r=e.REMAP_START_IDX;r=s.images.length)throw new Error(`SubTile ${t} not found`);return s.images[t]}getSetNum(e){var t=this.orderedEntries[e];if(!t)throw new Error("Invalid tileNum "+e);return this.tileSets.indexOf(t.owner)}getTileNumFromSet(e,t=0){let i=0;return this.tileSets.some(((r,s)=>s===e?(i+=t,!0):(i+=r.entries.length,!1))),i}getGeneralValue(e){let t=this.theaterIni.getSection("General");if(!t)throw new Error("Missing [General] section in theather ini");return t.getNumber(e)}loadTileData(e,t){this.tileSets.length=0,this.orderedEntries.length=0,this.initTileSets(e,t),this.initAnimations()}readMaxTileNum(){let e=0,t=0;for(;;){var r="TileSet"+i.pad(e,"0000");let s=this.theaterIni.getSection(r);if(!s)break;e++,t+=s.getNumber("TilesInSet")}return t}initTileSets(e,t){let n,a=0;for(var o;o="TileSet"+i.pad(a,"0000"),n=this.theaterIni.getSection(o),n;){a++;let o=new s.TileSet(n.getString("FileName"),n.getString("SetName"),n.getNumber("TilesInSet"));this.tileSets.push(o);for(let s=1;s<=o.tilesInSet;s++){let n=new r.TileSetEntry(o,s-1);var l="a".charCodeAt(0);for(let r=l-1;r<="z".charCodeAt(0);r++)if(!(r>=l&&"Bridges"===o.setName)){let a=o.fileName+i.pad(s,"00");r>=l&&(a+=String.fromCharCode(r)),a+=t;var c=e.get(a);if(!c)break;n.addFile(c)}o.entries.push(n),this.orderedEntries.push(n)}}}initAnimations(){var e=this.theaterIni.getOrderedSections();for(let a=this.tileSets.length;ae.setName===o.name));if(l)for(let e=1;e<=l.tilesInSet;++e){var t="Tile"+i.pad(e,"00"),r=t+"Anim",s=o.getString(r);s?(t=new n.TileSetAnim(s,o.getNumber(t+"AttachesTo"),o.getNumber(t+"XOffset"),o.getNumber(t+"YOffset")),l.entries[e-1].setAnimation(t)):console.warn(`Missing anim "${r}" for tileset `+l.setName)}}}isLAT(e){return e===this.getGeneralValue("RoughTile")||e===this.getGeneralValue("SandTile")||e===this.getGeneralValue("GreenTile")||e===this.getGeneralValue("PaveTile")}isCLAT(e){return e===this.getGeneralValue("ClearToRoughLat")||e===this.getGeneralValue("ClearToSandLat")||e===this.getGeneralValue("ClearToGreenLat")||e===this.getGeneralValue("ClearToPaveLat")}getLAT(e){return e===this.getGeneralValue("ClearToRoughLat")?this.getGeneralValue("RoughTile"):e===this.getGeneralValue("ClearToSandLat")?this.getGeneralValue("SandTile"):e===this.getGeneralValue("ClearToGreenLat")?this.getGeneralValue("GreenTile"):e===this.getGeneralValue("ClearToPaveLat")?this.getGeneralValue("PaveTile"):-1}getCLATSet(e){return e===this.getGeneralValue("RoughTile")?this.getGeneralValue("ClearToRoughLat"):e===this.getGeneralValue("SandTile")?this.getGeneralValue("ClearToSandLat"):e===this.getGeneralValue("GreenTile")?this.getGeneralValue("ClearToGreenLat"):e===this.getGeneralValue("PaveTile")?this.getGeneralValue("ClearToPaveLat"):-1}canConnectTiles(e,t){if(e===t)return!1;var i=this.getGeneralValue("GreenTile"),r=this.getGeneralValue("PaveTile"),s=this.getGeneralValue("MiscPaveTile"),n=this.getGeneralValue("ShorePieces"),a=this.getGeneralValue("WaterBridge"),o=this.getGeneralValue("PavedRoads"),l=this.getGeneralValue("Medians");return!(e===i&&t===n||t===i&&e===n||e===i&&t===a||t===i&&e===a||e===r&&t===o||t===r&&e===o||e===r&&t===s||t===r&&e===s||e===r&&t===l||t===r&&e===l)}getHighBridgeHeadType(e){for(var[t,i]of o)for(var r of i)if(this.getGeneralValue(r)===e+1)return t}getOppositeHighBridgeHeadType(e){switch(e){case a.TopLeft:return a.BottomRight;case a.TopRight:return a.BottomLeft;case a.BottomLeft:return a.TopRight;case a.BottomRight:return a.TopLeft;case a.MiddleTlBr:case a.MiddleTrBl:throw new Error("Middle bridge heads can't have opposites");default:throw new Error("Unhandled headType "+e)}}isCliffTile(e){return this.cliffSetNums.includes(this.getSetNum(e))}isHighBridgeBoundaryTile(e){if(this.highBridgeSetNums.includes(this.getSetNum(e))){var t=this.getTile(e);return void 0!==(t=this.getHighBridgeHeadType(t.index))&&![a.MiddleTlBr,a.MiddleTrBl].includes(t)}return!1}isHighBridgeMiddleTile(e){if(this.highBridgeSetNums.includes(this.getSetNum(e))){var t=this.getTile(e);return void 0!==(t=this.getHighBridgeHeadType(t.index))&&[a.MiddleTlBr,a.MiddleTrBl].includes(t)}return!1}})}}})),System.register("engine/type/PaletteType",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.None=0]="None",t[t.Iso=1]="Iso",t[t.Unit=2]="Unit",t[t.Overlay=3]="Overlay",t[t.Anim=4]="Anim",t[t.Custom=5]="Custom",t[t.Default=6]="Default",e("PaletteType",i)}}})),System.register("engine/TheaterType",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.None=0]="None",t[t.Temperate=1]="Temperate",t[t.Urban=2]="Urban",t[t.Snow=4]="Snow",t[t.Lunar=8]="Lunar",t[t.Desert=16]="Desert",t[t.NewUrban=32]="NewUrban",t[t.All=63]="All",e("TheaterType",i)}}})),System.register("engine/Theater",["game/theater/TileSets","engine/type/PaletteType"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("Theater",class{constructor(e,t,i,r,s,n,a,o,l){this.type=e,this.settings=t,this.palettes=i,this.isoPalette=r,this.ovlPalette=s,this.unitPalette=n,this.animPalette=a,this.libPalette=o,this.tileSets=l}static factory(e,t,r,s,n){var a=n.get(r.IsoPaletteName);if(!a)throw new Error(`Missing palette "${r.IsoPaletteName}"`);var o=n.get(r.OverlayPaletteName);if(!o)throw new Error(`Missing palette "${r.OverlayPaletteName}"`);var l=n.get(r.UnitPaletteName);if(!l)throw new Error(`Missing palette "${r.UnitPaletteName}"`);var c=n.get("anim.pal");if(!c)throw new Error("Missing anim palette");var h=n.get(r.LibPaletteName);if(!h)throw new Error("Missing lib palette "+r.LibPaletteName);let u=new i.TileSets(t);return u.loadTileData(s,r.Extension),new this(e,r,n,a,o,l,c,h,u)}getPalette(e,t){switch(e){case r.PaletteType.Anim:return this.animPalette;case r.PaletteType.Overlay:return this.ovlPalette;case r.PaletteType.Unit:return this.unitPalette;case r.PaletteType.Custom:if("lib"===t)return this.libPalette;var i=this.palettes.get(t+".pal");if(!i)throw new Error(`Custom palette "${t}" not found`);return i;default:return r.PaletteType.Iso,this.isoPalette}}})}}})),System.register("version",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("version","0.57.2")}}})),System.register("data/IdxEntry",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("IdxEntry",class{})}}})),System.register("data/IdxFile",["data/IdxEntry"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("IdxFile",class{constructor(e){this.entries=new Map,this.parse(e)}parse(e){var t=e.readCString(4);if("GABA"!==t)throw new Error(`Unable to load Idx file, did not find magic id, found ${t} instead`);if(2!==(t=e.readInt32()))throw new Error(`Unable to load Idx file, did not find magic number 2, found ${t} instead`);var r=e.readInt32();for(let t=0;t{},r}})}}})),System.register("data/encoding/Blowfish",[],(function(e,t){"use strict";function i(e){return((e=(e<<16>>>0|e>>>16)>>>0)<<8>>>0&4278255360|e>>>8&16711935)>>>0}return t&&t.id,{setters:[],execute:function(){e("Blowfish",class{constructor(e){this.m_p=new Uint32Array([608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731]),this.m_s=[new Uint32Array([3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946]),new Uint32Array([1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055]),new Uint32Array([3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504]),new Uint32Array([976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462])];for(let n=0,a=0;n<18;++n){var t=e[a++%e.length],i=e[a++%e.length],r=e[a++%e.length],s=e[a++%e.length];this.m_p[n]^=t<<24|i<<16|r<<8|s}let n=0,a=0;for(let e=0;e<18;)[n,a]=this._encrypt(n,a),this.m_p[e++]=n,this.m_p[e++]=a;for(let e=0;e<4;++e)for(let t=0;t<256;)[n,a]=this._encrypt(n,a),this.m_s[e][t++]=n,this.m_s[e][t++]=a}encrypt(e){return this.runCipher(e,this._encrypt.bind(this))}decrypt(e){return this.runCipher(e,this._decrypt.bind(this))}runCipher(e,t){let r=new Uint32Array(e.length),s=e.length/2|0,n=0;for(;0>(3-t<<3)&255]}bf_f(e){return(this.s(e,0)+this.s(e,1)>>>0^this.s(e,2))+this.s(e,3)>>>0}round(e,t,i){return e^this.bf_f(t)^this.m_p[i]}})}}})),System.register("data/encoding/BlowfishKey",[],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[],execute:function(){i="AihRvNoIbTn85FZRYNZRcT+i6KpU+maCsEqr3Q5q+LDB5tH7Tz2qQ38V",r=new Int8Array([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]),s=class{constructor(){this.key1=new Uint32Array(64),this.key2=new Uint32Array(64)}},e("BlowfishKey",class{constructor(){this.pubkey=new s,this.glob1=new Uint32Array(64),this.glob2=new Uint32Array(130),this.glob1_hi=new Uint32Array(4),this.glob1_hi_inv=new Uint32Array(4)}init_bignum(e,t,i){for(let t=0;ti;a--)n[a-1]=s;for(;0>>0|t[n+s+1])>>>0;n+=1+(127&t[n])}else r=t[n],n++;r<=4*i&&this.move_key_to_big(e,t.subarray(n),r,i)}}len_bignum(e,t){let i=t-1;for(;0<=i&&0===e[i];)i--;return i+1}bitlen_bignum(e,t){var i;let r,s;if(0===(i=this.len_bignum(e,t)))return 0;for(r=32*i,s=2147483648;0==(s&e[i-1]);)s>>>=1,r--;return r}init_pubkey(){let e,t=0;var s;const n=new Uint8Array(256);for(this.init_bignum(this.pubkey.key2,65537,64),e=0;t<56;)s=(((r[i.charCodeAt(t++)]>>>0<<6>>>0|255&r[i.charCodeAt(t++)])>>>0<<6>>>0|255&r[i.charCodeAt(t++)])>>>0<<6>>>0|255&r[i.charCodeAt(t++)])>>>0,n[e++]=s>>16&255,n[e++]=s>>8&255,n[e++]=255&s;this.key_to_bignum(this.pubkey.key1,n,64),this.pubkey.len=this.bitlen_bignum(this.pubkey.key1,64)-1}len_predata(){var e=(this.pubkey.len-1)/8|0;return(1+(55/e|0))*(1+e)>>>0}cmp_bignum(e,t,i){for(;0t[i])return 1}return 0}mov_bignum(e,t,i){for(let r=0;r>>t|e[r+1]<<32-t>>>0)>>>0;e[r]=e[r]>>>t}}shl_bignum(e,t,i){let r;var s=t/32|0;if(0s;r--)e[r]=e[r-s];for(;0>>0|e[r-1]>>>32-t)>>>0;e[0]=e[0]<>>0}}sub_bignum(e,t,i,r,s){var n,a;s+=s;var o=new Uint16Array(t.buffer,t.byteOffset),l=new Uint16Array(i.buffer,i.byteOffset);const c=new Uint16Array(e.buffer,e.byteOffset);let h=0;for(;-1!=--s;)n=o[h],a=l[h],c[h]=n-a-r&65535,r=0!=(n-a-r&65536)?1:0,h++;return r}sub_bignum_word(e,t,i,r,s){var n,a;let o=0;for(;-1!=--s;)n=t[o],a=i[o],e[o]=n-a-r&65535,r=0!=(n-a-r&65536)?1:0,o++;return r}inv_bignum(e,t,i){const r=new Uint32Array(64);var s;let n,a,o=0;for(this.init_bignum(r,0,i),this.init_bignum(e,0,i),a=this.bitlen_bignum(t,i),n=1<>>0,o=((a+32)/32|0)-1,r[(s=4*((a-1)/32|0)>>>0)/4|0]=r[s/4|0]|1<<(a-1&31)>>>0;0>>0),n>>>=1,0===n&&(o--,n=2147483648);this.init_bignum(r,0,i)}inc_bignum(e,t){let i=0;for(;0==++e[i]&&0<--t;)i++}init_two_dw(e,t){this.mov_bignum(this.glob1,e,t),this.glob1_bitlen=this.bitlen_bignum(this.glob1,t),this.glob1_len_x2=(this.glob1_bitlen+15)/16|0,this.mov_bignum(this.glob1_hi,this.glob1.subarray(this.len_bignum(this.glob1,t)-2),2),this.glob1_hi_bitlen=this.bitlen_bignum(this.glob1_hi,2)-32>>>0,this.shr_bignum(this.glob1_hi,this.glob1_hi_bitlen,2),this.inv_bignum(this.glob1_hi_inv,this.glob1_hi,2),this.shr_bignum(this.glob1_hi_inv,1,2),this.glob1_hi_bitlen=(this.glob1_hi_bitlen+15)%16+1>>>0,this.inc_bignum(this.glob1_hi_inv,2),32>>16&65535}mul_bignum_word(e,t,i,r){let s,n;var a=new Uint16Array(t.buffer,t.byteOffset);let o=n=0;for(s=0;s>>=16;e[o]+=65535&n}mul_bignum(e,t,i,r){let s;var n=new Uint16Array(i.buffer,i.byteOffset);let a=new Uint16Array(e.buffer,e.byteOffset);this.init_bignum(e,0,2*r);let o=0;for(s=0;s<2*r;s++)this.mul_bignum_word(a.subarray(o),t,n[o],2*r),o++}not_bignum(e,t){let i;for(i=0;i>>0}neg_bignum(e,t){this.not_bignum(e,t),this.inc_bignum(e,t)}get_mulword(e,t){let i=((((65535&(65535^e[t-1]))*this.glob1_hi_inv_lo+65536>>>1)+((65535^e[t-2])*this.glob1_hi_inv_hi+this.glob1_hi_inv_hi>>>1)+1>>>16)+((65535&(65535^e[t-1]))*this.glob1_hi_inv_hi>>>1)+((65535^e[t])*this.glob1_hi_inv_lo>>>1)+1>>>14)+this.glob1_hi_inv_hi*(65535^e[t])*2>>>this.glob1_hi_bitlen>>>0;return 65535>>0==4294967295&&0<--t;)i++}calc_a_bignum(e,t,i,r){var s;let n;var a=this.glob1,o=this.glob2;if(this.mul_bignum(this.glob2,t,i,r),this.glob2[2*r]=0,(s=2*this.len_bignum(this.glob2,2*r+1))>=this.glob1_len_x2){this.inc_bignum(this.glob2,2*r+1),this.neg_bignum(this.glob2,2*r+1),n=1+s-this.glob1_len_x2;let e=new Uint16Array(o.buffer),t=n,i=1+s;for(;0!==n;n--){i--;var l=this.get_mulword(e,i);t--;var c=e.subarray(t);0>24,l=1<<(o-1)%32>>>1,c+=(((o+31)/32|0)>>>0)-1,o--,this.mov_bignum(e,t,n);-1!=--o;)0===l&&(l=2147483648,c--),this.calc_a_bignum(a,e,e,n),0!=(i[c]&l)?this.calc_a_bignum(e,a,t,n):this.mov_bignum(e,a,n),l>>>=1;this.init_bignum(a,0,n),this.clear_tmp_vars(s)}memcpy(e,t,i){let r=0;for(;0!=i--;)e[r]=t[r],r++}process_predata(e,t,i){var r=new Uint32Array(64),s=new Uint32Array(64);let n=0,a=0;for(var o=(this.pubkey.len-1)/8|0;1+o<=t;)this.init_bignum(r,0,64),this.memcpy(new Uint8Array(r.buffer),e.subarray(n),1+o),this.calc_a_key(s,r,this.pubkey.key2,this.pubkey.key1,64),this.memcpy(i.subarray(a),new Uint8Array(s.buffer),o),t-=1+o,n+=1+o,a+=o}decryptKey(e){this.init_pubkey();let t=new Uint8Array(256);return this.process_predata(e,this.len_predata(),t),t.subarray(0,56)}})}}})),System.register("data/Crc32",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){e("Crc32",i=class e{constructor(e=4294967295){this.polynomal=e,this.crc=e}static calculateCrc(e,t=4294967295){let i=t;for(let t=0,r=e.length;t>>8^this.lookUp[255&i^e[t]])>>>0;return i=(i^t)>>>0,i}append(t){for(let i=0,r=t.length;i>>8^e.lookUp[255&this.crc^t[i]])>>>0}get(){return(this.crc^this.polynomal)>>>0}}),i.lookUp=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117])}}})),System.register("data/MixEntry",["util/string","data/Crc32"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("MixEntry",s=class{constructor(e,t,i){this.hash=e,this.offset=t,this.length=i}static hashFilename(e){var t=(e=e.toUpperCase()).length,s=t>>2;if(0!=(3&t)){e+=String.fromCharCode(t-(s<<2));let i=3-(3&t);for(;0!=i--;)e+=e[s<<2]}return r.Crc32.calculateCrc(i.binaryStringToUint8Array(e))}}),s.size=12}}})),System.register("data/MixFile",["data/DataStream","data/encoding/Blowfish","data/encoding/BlowfishKey","data/MixEntry","data/vfs/VirtualFile"],(function(e,t){"use strict";var i,r,s,n,a,o;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){var t;(t=o=o||{})[t.Checksum=65536]="Checksum",t[t.Encrypted=131072]="Encrypted",e("MixFile",class{constructor(e){this.stream=e,this.headerStart=84,this.index=new Map,this.parseHeader()}parseHeader(){var e=this.stream.readUint32();if(0==(e&~(o.Checksum|o.Encrypted))){if(0!=(e&o.Encrypted))return void(this.dataStart=this.parseRaHeader())}else this.stream.seek(0);this.dataStart=this.parseTdHeader(this.stream)}parseRaHeader(){const e=this.stream;var t=e.readUint8Array(80),a=(new s.BlowfishKey).decryptKey(t),o=e.readUint32Array(2);const l=new r.Blowfish(a);let c=new i.DataStream(l.decrypt(o));return t=c.readUint16(),c.readUint32(),e.position=this.headerStart,t=(3+(a=6+t*n.MixEntry.size))/4|0,o=e.readUint32Array(t+t%2),c=new i.DataStream(l.decrypt(o)),a=this.headerStart+a+(1+(~a>>>0)&7),this.parseTdHeader(c),a}parseTdHeader(e){var t=e.readUint16();e.readUint32();for(let r=0;rthis.handle.getDirectoryHandle(e))).catch((()=>{})))?.name;for await(const t of this.getEntries())if(r.equalsIgnoreCase(t,e))return t}async fixEntryCase(e){if(!this.caseSensitive)for await(var t of this.getEntries())if(r.equalsIgnoreCase(t,e)){e=t;break}return e}async getRawFile(e,t=!1,i){let r;try{var o=t?e:await this.fixEntryCase(e);r=await this.handle.getFileHandle(o)}catch(t){if("NotFoundError"===t.name)throw new s.FileNotFoundError(`File "${e}" not found in directory "${this.handle.name}"`,{cause:t});if(t instanceof TypeError&&t.message.includes("not allowed"))throw new a.NameNotAllowedError(`File name "${e}" is not allowed`,{cause:t});if(t instanceof DOMException)throw new n.IOError(`File "${e}" could not be read (${t.name})`,{cause:t});throw t}return o=await r.getFile(),i?new File([o],o.name,{type:i}):o}async openFile(e,t=!1){var i=await this.getRawFile(e,t);return o.VirtualFile.fromRealFile(i)}async writeFile(e,t){var r=t??(e instanceof File?e.name:e.filename);try{var o=await this.fixEntryCase(r);await this.deleteFile(o,!0);let i=await this.handle.getFileHandle(o,{create:!0}),s=await i.createWritable();try{await s.write(e instanceof File?e:new Uint8Array(e.stream.buffer,e.stream.byteOffset,e.stream.byteLength)),await s.close()}catch(t){throw await s.abort(),t}}catch(t){if("QuotaExceededError"===t.name)throw new i.StorageQuotaError({cause:t});if("NotFoundError"===t.name)throw new s.FileNotFoundError(`Directory "${this.handle.name}" not found`,{cause:t});if(t instanceof TypeError&&t.message.includes("not allowed"))throw new a.NameNotAllowedError(`File name "${r}" is not allowed`,{cause:t});if(t instanceof DOMException)throw new n.IOError(`File "${r}" could not be written (${t.name})`,{cause:t});throw t}}async deleteFile(e,t=!1){var r=t?e:await this.resolveEntryName(e);if(r)try{await this.handle.removeEntry(r)}catch(e){if(t&&"NotFoundError"===e.name)return;if("QuotaExceededError"===e.name)throw new i.StorageQuotaError({cause:e});if(e instanceof TypeError&&e.message.includes("not allowed"))throw new a.NameNotAllowedError(`File name "${r}" is not allowed`,{cause:e});if(e instanceof DOMException)throw new n.IOError(`File "${r}" could not be deleted (${e.name})`,{cause:e});throw e}}async getDirectory(t,i=this.caseSensitive){var r=i?t:await this.fixEntryCase(t);let o;try{o=await this.handle.getDirectoryHandle(r)}catch(i){if("NotFoundError"===i.name)throw new s.FileNotFoundError(`Directory "${t}" not found or parent directory "${this.handle.name}" is gone`,{cause:i});if(i instanceof TypeError&&i.message.includes("not allowed"))throw new a.NameNotAllowedError(`Directory name "${t}" is not allowed`,{cause:i});if(i instanceof DOMException)throw new n.IOError(`Directory "${t}" could not be read (${i.name})`,{cause:i});throw i}return new e(o,i)}async getOrCreateDirectory(t,r=this.caseSensitive){var o=r?t:await this.fixEntryCase(t);try{return new e(await this.handle.getDirectoryHandle(o,{create:!0}),r)}catch(r){if("QuotaExceededError"===r.name)throw new i.StorageQuotaError({cause:r});if("NotFoundError"===r.name)throw new s.FileNotFoundError(`Directory "${this.handle.name}" not found"`,{cause:r});if(r instanceof TypeError&&r.message.includes("not allowed"))throw new a.NameNotAllowedError(`Directory name "${t}" is not allowed`,{cause:r});if(r instanceof DOMException)throw new n.IOError(`Directory "${t}" could not be created (${r.name})`,{cause:r});throw r}}async deleteDirectory(e,t=!1){var r=await this.resolveEntryName(e);if(r)try{await this.handle.removeEntry(r,{recursive:t})}catch(e){if("QuotaExceededError"===e.name)throw new i.StorageQuotaError({cause:e});if("InvalidModificationError"===e.name)throw new n.IOError("Can't delete non-empty directory when recursive = false");if(e instanceof TypeError&&e.message.includes("not allowed"))throw new a.NameNotAllowedError(`Directory name "${r}" is not allowed`,{cause:e});if(e instanceof DOMException)throw new n.IOError(`Directory "${r}" could not be deleted (${e.name})`,{cause:e});throw e}}})}}})),System.register("data/vfs/RealFileSystem",["data/vfs/FileNotFoundError","data/vfs/RealFileSystemDir"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("RealFileSystem",class{constructor(){this.directories=[]}addRootDirectoryHandle(e){this.rootDirectory=this.addDirectoryHandle(e),this.rootDirectoryHandle=e}getRootDirectoryHandle(){return this.rootDirectoryHandle}addDirectoryHandle(e){var t=new r.RealFileSystemDir(e);return this.directories.push(t),t}addDirectory(e){this.directories.push(e)}async getDirectory(e){var t=await this.findDirectory(e);if(!t)throw new Error(`Directory "${e}" not found in real file system`);return t}async findDirectory(e){for(const t of this.directories)if(await t.containsEntry(e))return await t.getDirectory(e)}getRootDirectory(){return this.rootDirectory}async containsEntry(e){for(const t of this.directories)if(await t.containsEntry(e))return!0;return!1}async openFile(e,t=!1){for(const r of this.directories)try{return await r.openFile(e,t)}catch(e){if(!(e instanceof i.FileNotFoundError))throw e}throw new i.FileNotFoundError(`File "${e}" not found in real file system`)}async getRawFile(e){for(const t of this.directories)if(await t.containsEntry(e))return await t.getRawFile(e);throw new Error(`File "${e}" not found in real file system`)}async*getEntries(){for(var e of this.directories)for await(var t of e.getEntries())yield t}})}}})),System.register("data/vfs/VirtualFileSystem",["data/AudioBagFile","data/IdxFile","data/MixFile","engine/Engine","util/string","data/vfs/FileNotFoundError","data/vfs/MemArchive"],(function(e,t){"use strict";var i,r,s,n,a,o,l;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e}],execute:function(){e("VirtualFileSystem",class{constructor(e,t){this.rfs=e,this.logger=t,this.allArchives=new Map,this.archivesByPriority=[]}fileExists(e){for(const t of this.archivesByPriority)if(t.containsFile(e))return!0;return!1}openFile(e){for(const t of this.archivesByPriority)if(t.containsFile(e))return t.openFile(e);throw new o.FileNotFoundError(`File "${e}" not found in VFS`)}addArchive(e,t){this.allArchives.has(t)||(this.allArchives.set(t,e),this.archivesByPriority.push(e)),this.logger.info(`Added archive "${t}" to VFS`)}hasArchive(e){return this.allArchives.has(e)}removeArchive(e){var t=this.allArchives.get(e);t&&(this.allArchives.delete(e),this.archivesByPriority.splice(this.archivesByPriority.indexOf(t),1),this.logger.info(`Removed archive "${e}" from VFS`))}listArchives(){return[...this.allArchives.keys()]}async addMixFile(e){await this.addArchiveByFilename(e,(e=>new s.MixFile(e.stream)))}async addBagFile(e){const t=await this.openFileWithRfs(e.replace(".bag",".idx"));await this.addArchiveByFilename(e,(e=>{var s=new r.IdxFile(t.stream);return(new i.AudioBagFile).fromVirtualFile(e,s)}))}async addArchiveByFilename(e,t){var i;this.allArchives.has(e)||(i=await this.openFileWithRfs(e))&&this.addArchive(t(i),e)}async openFileWithRfs(e){let t;try{t=await this.rfs.openFile(e)}catch(e){if(!(e instanceof o.FileNotFoundError))throw e}if(!t){if(!this.fileExists(e))throw new o.FileNotFoundError(`File "${e}" not found`);t=this.openFile(e)}return t}async loadImplicitMixFiles(e){this.logger.info("Initializing implicit mix files..."),e===n.EngineType.YurisRevenge&&await this.addMixFile("langmd.mix"),await this.addMixFile("language.mix"),e===n.EngineType.YurisRevenge&&await this.addMixFile("ra2md.mix"),await this.addMixFile("ra2.mix"),e===n.EngineType.YurisRevenge&&await this.addMixFile("cachemd.mix"),await this.addMixFile("cache.mix"),e===n.EngineType.YurisRevenge&&await this.addMixFile("loadmd.mix"),await this.addMixFile("load.mix"),e===n.EngineType.YurisRevenge&&await this.addMixFile("localmd.mix"),await this.addMixFile("local.mix"),e===n.EngineType.YurisRevenge&&await this.addMixFile("ntrlmd.mix"),await this.addMixFile("neutral.mix"),e===n.EngineType.YurisRevenge&&await this.addMixFile("audiomd.mix"),await this.addMixFile("audio.mix"),await this.addBagFile("audio.bag"),await this.addMixFile("conquer.mix"),e===n.EngineType.YurisRevenge&&(await this.addMixFile("conqmd.mix"),await this.addMixFile("genermd.mix")),await this.addMixFile("generic.mix"),e===n.EngineType.YurisRevenge&&await this.addMixFile("isogenmd.mix"),await this.addMixFile("isogen.mix"),e===n.EngineType.YurisRevenge&&await this.addMixFile("cameomd.mix"),await this.addMixFile("cameo.mix"),e===n.EngineType.YurisRevenge&&await this.addMixFile("multimd.mix"),await this.addMixFile("multi.mix")}async loadExtraMixFiles(e){let t=new Set;for await(var i of this.rfs.getEntries())t.add(i.toLowerCase());for(var r of["ecache","expand","elocal"])for(let i=99;0<=i;i--){let s=[""+r+a.pad(i,"00")+".mix"];for(var o of(e===n.EngineType.YurisRevenge&&s.push(`${r}md${a.pad(i,"00")}.mix`),s))t.has(o)&&await this.addMixFile(o)}let l=[".mmx"];e===n.EngineType.YurisRevenge&&l.push(".yro");for(const e of l)for(const i of t)i.endsWith(e)&&this.addArchive(new s.MixFile((await this.rfs.openFile(i)).stream),i)}async loadStandaloneFiles(e){let t=["ini","csf"],i=new Set(e?.exclude),r=[];for await(var s of this.rfs.getEntries()){let e=s.toLowerCase();t.some((t=>e.endsWith("."+t)))&&!i.has(e)&&r.push(await this.rfs.openFile(s,!0))}if(r.length){let e=new l.MemArchive;for(var n of r)e.addFile(n);this.addArchive(e,"mem.archive")}}})}}})),System.register("engine/LazyResourceCollection",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("LazyResourceCollection",class{constructor(e){this.resourceFactory=e,this.resources=new Map}setVfs(e){this.vfs=e}set(e,t){this.resources.set(e,t)}has(e){return!!this.resources.has(e)||(this.vfs?.fileExists(e)??!1)}get(e){let t;return t=this.resources.get(e),!t&&this.vfs?.fileExists(e)&&(t=this.resourceFactory(this.vfs.openFile(e)),this.resources.set(e,t)),t}clear(e){e?this.resources.delete(e):this.resources.clear()}})}}})),System.register("data/WavFile",["wavefile","data/vfs/VirtualFile"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("WavFile",class{constructor(e){e instanceof Uint8Array?this.fromRawData(e):e instanceof r.VirtualFile&&this.fromVirtualFile(e)}fromRawData(e){return this.rawData=e,this}fromVirtualFile(e){var t=e.stream;return this.rawData=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),this}getRawData(){return this.rawData}getData(){if(!this.decodedData){if(!this.rawData)throw new Error("No data loaded");this.decodedData=this.decodeData(this.rawData),this.rawData=void 0}return this.decodedData}setData(e){this.rawData=void 0,this.decodedData=e}decodeData(e){let t=new i.WaveFile(e);return"4"===t.bitDepth&&t.fromIMAADPCM(),t.toBuffer()}isRawImaAdpcm(){return this.rawData&&"4"===new i.WaveFile(this.rawData).bitDepth}})}}})),System.register("engine/AsyncResourceCollection",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("engine/LazyAsyncResourceCollection",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("LazyAsyncResourceCollection",class{constructor(e,t=!0){this.resourceFactory=e,this.cache=t,this.resources=new Map}setDir(e){this.rfsDir=e}set(e,t){this.resources.set(e,t)}async has(e){return!!this.resources.has(e)||(await(this.rfsDir?.containsEntry(e))??!1)}async get(e){let t;return t=this.resources.get(e),!t&&await(this.rfsDir?.containsEntry(e))&&(t=await this.resourceFactory(await this.rfsDir.getRawFile(e)),this.cache&&this.resources.set(e,t)),t}clear(){this.resources.clear()}})}}})),System.register("data/Mp3File",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("Mp3File",class{constructor(e){this.file=e}asFile(){return new File([this.file],this.file.name,{type:"audio/mp3"})}})}}})),System.register("engine/mixDatabase",[],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[],execute:function(){e("mixDatabase",i=(new Map).set("cameo.mix",["adogicon.shp","adoguico.shp","aengicon.shp","aenguico.shp","agapgen.shp","agisicon.shp","ahrvicon.shp","ahrvuico.shp","aparicon.shp","apchicon.shp","apcicon.shp","artyicon.shp","asaticon.shp","ayaricon.shp","batricon.shp","beagicon.shp","bggyicon.shp","bolticon.shp","brrkicon.shp","carricon.shp","ccomicon.shp","ccomuico.shp","chemicon.shp","chroicon.shp","clckicon.shp","clegicon.shp","cleguico.shp","clonicon.shp","cnsticon.shp","crryicon.shp","csphicon.shp","darken.shp","desoicon.shp","desouico.shp","desticon.shp","detnicon.shp","dlphicon.shp","dlphuico.shp","dogicon.shp","doguico.shp","dredicon.shp","dronicon.shp","e1icon.shp","e1uico.shp","e2icon.shp","e2uico.shp","e4icon.shp","empicon.shp","engnicon.shp","facticon.shp","falcicon.shp","fixicon.shp","flakicon.shp","flkticon.shp","flktuico.shp","forticon.shp","fsdicon.shp","fspicon.shp","fstdicon.shp","fvicon.shp","fvuico.shp","gapicon.shp","gat2icon.shp","gateicon.shp","gbayicon.shp","gcanicon.shp","giicon.shp","giuico.shp","gorep.shp","gtnkicon.shp","gtnkuico.shp","gwepicon.shp","handicon.shp","harvicon.shp","harvuico.shp","heliicon.shp","hindicon.shp","hmecicon.shp","hovricon.shp","htkicon.shp","htkuico.shp","htnkicon.shp","htnkuico.shp","ioncicon.shp","ircricon.shp","ironicon.shp","ivanicon.shp","ivanuico.shp","ivncicon.shp","ivncuico.shp","jjeticon.shp","jjetuico.shp","landicon.shp","lasricon.shp","liteicon.shp","lpsticon.shp","mcvicon.shp","mcvuico.shp","metricon.shp","mltiicon.shp","mmchicon.shp","msslicon.shp","mtnkicon.shp","mtnkuico.shp","mutcicon.shp","nga2icon.shp","ngaticon.shp","nhpdicon.shp","npsiicon.shp","npwricon.shp","nradicon.shp","nrcticon.shp","nreficon.shp","ntchicon.shp","nukeicon.shp","nwalicon.shp","nwepicon.shp","obliicon.shp","obmbicon.shp","orcaicon.shp","otrnicon.shp","paraicon.shp","pillicon.shp","plticon.shp","plugicon.shp","podsicon.shp","powricon.shp","prisicon.shp","proicon.shp","psicicon.shp","psicuico.shp","psisicon.shp","psiticon.shp","psituico.shp","rad1icon.shp","rad2icon.shp","rad3icon.shp","radricon.shp","rboticon.shp","reficon.shp","rfixicon.shp","rtnkicon.shp","rtnkuico.shp","samicon.shp","sapcicon.shp","sapicon.shp","sbagicon.shp","sealicon.shp","sealuico.shp","seekicon.shp","shadicon.shp","shaduico.shp","shkicon.shp","shkuico.shp","smchicon.shp","smcvicon.shp","smcvuico.shp","snipicon.shp","snipuico.shp","soniicon.shp","spoticon.shp","spyicon.shp","spyuico.shp","sqdicon.shp","sreficon.shp","srefuico.shp","stnkicon.shp","subicon.shp","subticon.shp","tanyicon.shp","tanyuico.shp","techicon.shp","tempicon.shp","teslaicon.shp","tickicon.shp","tnkdicon.shp","tnkduico.shp","towricon.shp","trkaicon.shp","trsticon.shp","trstuico.shp","tslaicon.shp","ttnkicon.shp","ttnkuico.shp","turbicon.shp","twr1icon.shp","twr2icon.shp","twr3icon.shp","v3icon.shp","v3uico.shp","wallicon.shp","weapicon.shp","weaticon.shp","weedicon.shp","wethicon.shp","xxicon.shp","yardicon.shp","yuriicon.shp","yuriuico.shp","yurpicon.shp","yurpuico.shp","zepicon.shp","zepuico.shp"]).set("theme.mix",["200meter.wav","blowitup.wav","burn.wav","destroy.wav","eaglehun.wav","fortific.wav","grinder.wav","hm2.wav","indeep.wav","industro.wav","jank.wav","motorize.wav","power.wav","ra2-opt.wav","ra2-sco.wav","tension.wav"])),r=["addon.shp","bkgdlg.shp","bkgdmd.shp","bkgdsm.shp","bttnbkgd.shp","button00.shp","button01.shp","button02.shp","button03.shp","button04.shp","button05.shp","button06.shp","button07.shp","button08.shp","button09.shp","button10.shp","button11.shp","credits.shp","diplobtn.shp","gclock2.shp","key.ini","lendcap.shp","lspacer.shp","optbtn.shp","pbeacon.shp","power.shp","powerp.shp","pwrlvl.shp","radar.shp","radar01.shp","radar02.shp","r-dn.shp","rdrbeacn.shp","rendcap.shp","repair.shp","r-up.shp","sell.shp","side1.shp","side2.shp","side2b.shp","side3.shp","sidebar.pal","sidebttn.shp","tab00.shp","tab01.shp","tab02.shp","tab03.shp","tabs.shp","top.shp","uibkgd.pal","wayp.shp"],i.set("sidec01.mix",r).set("sidec02.mix",r),r=["reportbug.shp"],i.set("sidec01cd.mix",r).set("sidec02cd.mix",r)}}})),System.register("engine/gameRes/GameResSource",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.Archive=0]="Archive",t[t.Cdn=1]="Cdn",t[t.Local=2]="Local",e("GameResSource",i)}}})),System.register("game/rules/MpDialogSettings",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("MpDialogSettings",class{readIni(e){return this.minMoney=e.getNumber("MinMoney"),this.money=e.getNumber("Money"),this.maxMoney=e.getNumber("MaxMoney"),this.moneyIncrement=e.getNumber("MoneyIncrement"),this.minUnitCount=e.getNumber("MinUnitCount"),this.unitCount=e.getNumber("UnitCount"),this.maxUnitCount=e.getNumber("MaxUnitCount"),this.crates=e.getBool("Crates"),this.gameSpeed=e.getNumber("GameSpeed"),this.mcvRedeploys=e.getBool("MCVRedeploys"),this.shortGame=e.getBool("ShortGame"),this.superWeapons=e.getBool("SuperWeapons"),this.techLevel=e.getNumber("TechLevel"),this.alliesAllowed=e.getBool("AlliesAllowed",!0),this.allyChangeAllowed=e.getBool("AllyChangeAllowed",!0),this.mustAlly=e.getBool("MustAlly"),this}})}}})),System.register("game/ini/GameModeType",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.Battle=0]="Battle",t[t.ManBattle=1]="ManBattle",t[t.FreeForAll=2]="FreeForAll",t[t.Unholy=3]="Unholy",t[t.Cooperative=4]="Cooperative",e("GameModeType",i)}}})),System.register("game/ini/GameModes",["game/rules/MpDialogSettings","game/ini/GameModeType"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("GameModes",class{constructor(e,t){this.modeIniLoader=t,this.entries=new Map,this.loadIni(e)}loadIni(e){e.getOrderedSections().forEach((e=>{let t=r.GameModeType[e.name]??r.GameModeType.Battle;[...e.entries.keys()].forEach((r=>{let s=e.getArray(r);if(s.length<5)throw new Error(`Invalid format for mp mode entry "${r}".`);var n=Number(r),a=s[2].toLowerCase();a={id:n,type:t,label:s[0],description:s[1],rulesOverride:a,mapFilter:s[3],randomMapsAllowed:s[4],aiAllowed:n<3,mpDialogSettings:(new i.MpDialogSettings).readIni(this.modeIniLoader(a).getOrCreateSection("MultiplayerDialogSettings"))};this.entries.set(n,a)}))}))}getById(e){if(!this.entries.has(e))throw new Error("No game mode found with id "+e);return this.entries.get(e)}hasId(e){return this.entries.has(e)}getAll(){return[...this.entries.values()]}})}}})),System.register("data/CsfFile",[],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[],execute:function(){var t;i=new Uint32Array(new Uint8Array(Array.prototype.map.call("STRW",(e=>e.charCodeAt(0))).reverse()).buffer)[0],r=e=>e.map((e=>~e>>>0)),s=e=>{let t="";for(let i=0;ie.getArray("GameMode").includes(t.mapFilter))),this}getFullMapTitle(e){return this.addTitleSlotsSuffix(e.get(this.uiName),this.maxSlots)}addTitleSlotsSuffix(e,t){return e.match(/(\(|()\s*\d(-\d)?\s*(\)|))\s*$/)||(e+=` (2${2o.includes(e.mapFilter))),this}extractIniSection(e,t){var i=t.indexOf(`[${e}]`);if(-1!==i){let e=i+1;for(;e{var r=e.getSection(t);if(!r)throw new Error(`Invalid map list. Missing [${t}] section.`);return(new i.MapManifest).fromIni(r,this.gameModes.getAll())}))),this.dedupeEntries(),this}add(e){this.manifests.push(e)}addFromMapFile(e){this.add((new i.MapManifest).fromMapFile(e,this.gameModes.getAll()))}getAll(){return this.manifests}getByName(e){return this.manifests.find((t=>t.fileName.toLowerCase()===e.toLowerCase()))}sortByName(){this.manifests.sort(((e,t)=>e.fileName.localeCompare(t.fileName)))}clone(){let t=new e(this.gameModes);return t.manifests=[...this.manifests],t}mergeWith(e){return this.manifests.push(...e.manifests),this.dedupeEntries(),this}dedupeEntries(){this.manifests=[...new Map(this.manifests.map((e=>[e.fileName.toLowerCase(),e]))).values()]}})}}})),System.register("data/hva/Section",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("Section",class{getMatrix(e){return this.matrices[e]}})}}})),System.register("data/HvaFile",["data/hva/Section","data/vfs/VirtualFile"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("HvaFile",class{constructor(e){e instanceof r.VirtualFile&&this.fromVirtualFile(e)}fromVirtualFile(e){this.filename=e.filename;let t=e.stream;this.sections=[],t.readCString(16);var r=t.readInt32(),s=t.readInt32();for(let e=0;et.Type===e))||!1}static getTheaterSettings(e,t){if(!this.theaterSettings.has(e))throw new Error('Unknown engineType "'+e);var i=this.theaterSettings.get(e).find((e=>e.Type===t));if(!i)throw new Error(`Unsupported theater "${l.TheaterType[t]}"`);return i}static async loadTheater(t){if(!e.rules||!e.art)throw new Error("Rules and art should be loaded first");if(void 0===e.gameResSource)throw new Error("No gameResSource is set");var i=e.getActiveEngine();let r;var s,n=e.getTheaterSettings(i,t);if(e.gameResSource!==y.GameResSource.Cdn)for(var a of n.Mixes)await e.vfs.addMixFile(a);return e.theaters.has(t)?r=e.theaters.get(t):(s=e.getTheaterIni(i,t),i=e.getTileData(),r=o.Theater.factory(t,s,n,i,e.palettes),e.theaters.set(t,r)),e.activeTheater=r,r}static unloadTheater(t){if(e.vfs){var i,r=e.getActiveEngine();for(i of e.getTheaterSettings(r,t).Mixes)e.vfs.removeArchive(i)}}static unloadSideMixData(){for(var t of["sidec01.mix","sidec01cd.mix"]){var i,r=f.mixDatabase.get(t);if(!r)return void console.warn(`Mix "${t}" not found in mix database`);for(i of r)("pal"===i.split(".").pop()?e.palettes:e.images).clear(i)}}static getTheaterIni(t,i){var r=e.getTheaterSettings(t,i).TheaterIni;return e.getIni(r)}static loadRules(){var t=this.getFileNameVariant("rules.ini"),i=this.getFileNameVariant("art.ini"),r=this.getFileNameVariant("ai.ini");let s=this.iniFiles.get(t),n=this.iniFiles.get(i);var a=this.iniFiles.get(r);if(!s)throw new Error(`Rules "${t}" not found`);if(!n)throw new Error(`Art "${i}" not found`);if(!a)throw new Error(`AI "${r}" not found`);if(i=this.iniFiles.get(e.customRulesFileName),r=this.iniFiles.get(e.customArtFileName),!i)throw new Error(`Rules "${e.customRulesFileName}" not found`);if(!r)throw new Error(`Art "${e.customArtFileName}" not found`);e.art=n.clone().mergeWith(r),e.rules=s.clone().mergeWith(i),e.ai=a,e.modHash=e.computeModHash()}static computeModHash(){if(!this.vfs)throw new Error("VFS not initialized");let e=[this.customRulesFileName,this.customArtFileName,this.customMpModesFileName,this.getFileNameVariant("rules.ini"),this.getFileNameVariant("art.ini"),this.getFileNameVariant("ai.ini")];var t,i,r,s=this.theaterSettings.get(this.getActiveEngine());if(!s)throw new Error('Unsupported engineType "'+this.getActiveEngine());for(t of s)e.push(this.getFileNameVariant(t.TheaterIni));let n=this.getMpModes();for(i of n.getAll())e.push(i.rulesOverride);let a=new T.Crc32;for(r of e){if(!this.vfs.fileExists(r))throw new Error(`File ${r} not found`);var o=this.vfs.openFile(r).stream;a.append(new Uint8Array(o.buffer,o.byteOffset,o.byteLength))}return a.append(b.binaryStringToUint8Array(this.getVersion())),a.get()}static getRules(){if(!e.rules)throw new Error("Rules must be loaded first");return e.rules}static getArt(){if(!e.art)throw new Error("Art must be loaded first");return e.art}static getAi(){if(!e.ai)throw new Error("AI must be loaded first");return e.ai}static getFileNameVariant(e){var t=this.getActiveEngine();let i;if(t===C.YurisRevenge)i="md";else{if(t!==C.RedAlert2)throw new Error("Unsupported engine type "+C[t]);i=""}return i?e.replace(/\.([^.]+)$/,i+".$1"):e}static getMpModes(){return new v.GameModes(this.getIni(this.customMpModesFileName),(e=>this.getIni(e)))}static getUiIni(){var e=this.getFileNameVariant("ui.ini");return this.getIni(e)}static getIni(e){if(!this.iniFiles.has(e))throw new Error(`INI file ${e} not found.`);return this.iniFiles.get(e)}static async loadMapList(){if(!this.vfs)throw new Error("File system not initialized");var e,t,r,s=this.getMpModes();let n=new S.MapList(s);for(e of(n.addFromIni(this.getIni(this.getFileNameVariant("missions.pkt"))),this.vfs.listArchives())){var a=e.toLowerCase().replace(/\.[^.]+$/,"")+".pkt";this.vfs.fileExists(a)&&n.addFromIni(new i.IniFile(this.vfs.openFile(a)))}let o=new S.MapList(s);if(this.rfs)for await(var l of this.rfs.getEntries()){let s=l.toLowerCase();try{s.endsWith(".pkt")?(t=new i.IniFile(await this.rfs.openFile(l,!0)),n.addFromIni(t)):this.supportedMapTypes.some((e=>s.endsWith("."+e)))&&(r=await this.rfs.openFile(l,!0),o.addFromMapFile(r))}catch(e){console.warn(`Couldn't read file "${l}"`,e)}}return o.sortByName(),n.mergeWith(o),this.mapList=n,n}static getTileData(){return e.tileData}static getImages(){return e.images}static getVoxels(){return e.voxels}static getVoxelAnims(){return e.voxelAnims}static getPalettes(){return e.palettes}static getSounds(){return e.sounds}static getThemes(){return e.themes}static getTaunts(){return e.taunts}static getActiveEngine(){return C.RedAlert2}static getLastTheaterType(){return e.activeTheater?.type}static getCacheDir(){try{return this.getOrCreateDir(this.rfsSettings.cacheDir,!0)}catch(e){return void console.error("Couldn't get cache directory",[e])}}static async getReplayDir(){var t=this.getActiveMod();if(t){let i=await this.getModDir(),r=await(i?.getDirectory(t));return r?.getOrCreateDirectory(e.rfsSettings.replayDir)}return this.getOrCreateDir(this.rfsSettings.replayDir)}static getModDir(){return this.getOrCreateDir(e.rfsSettings.modDir)}static getMapDir(){return this.getOrCreateDir(e.rfsSettings.mapDir)}static async getOrCreateDir(e,t=!1){let i=this.rfs?.getRootDirectory();if(i)return await i.getOrCreateDirectory(e,t)}static getMapList(){return this.mapList}static destroy(){this.activeTheater=void 0,this.activeMod=void 0,this.modHash=void 0,this.mapList=void 0,this.rfs=void 0,this.vfs=void 0,this.art=void 0,this.iniFiles.clear(),this.images.clear(),this.palettes.clear(),this.rules=void 0,this.ai=void 0,this.theaters.clear(),this.tileData.clear(),this.voxels.clear(),this.voxelAnims.clear()}}),E.UI_ANIM_SPEED=2,E.rfsSettings={menuVideoFileName:"ra2ts_l.webm",splashImgFileName:"glsl.png",mapDir:"maps",modDir:"mods",musicDir:"music",tauntsDir:"Taunts",cacheDir:"cache",replayDir:"replays"},E.supportedMapTypes=["mpr","map"],E.images=new d.LazyResourceCollection((e=>new r.ShpFile(e))),E.voxels=new d.LazyResourceCollection((e=>new s.VxlFile(e))),E.voxelAnims=new d.LazyResourceCollection((e=>new w.HvaFile(e))),E.sounds=new d.LazyResourceCollection((e=>new g.WavFile(e))),E.themes=new p.LazyAsyncResourceCollection((e=>new m.Mp3File(e)),!1),E.taunts=new p.LazyAsyncResourceCollection((async e=>new g.WavFile(new Uint8Array(await e.arrayBuffer())))),E.iniFiles=new d.LazyResourceCollection((e=>new i.IniFile(e))),E.tileData=new d.LazyResourceCollection((e=>new n.TmpFile(e))),E.palettes=new d.LazyResourceCollection((e=>new a.Palette(e))),E.theaters=new Map,E.theaterSettings=(new Map).set(C.RedAlert2,[{Type:l.TheaterType.Temperate,TheaterIni:"temperat.ini",Mixes:["isotemp.mix","temperat.mix","tem.mix"],Extension:".tem",NewTheaterChar:"T",IsoPaletteName:"isotem.pal",UnitPaletteName:"unittem.pal",OverlayPaletteName:"temperat.pal",LibPaletteName:"libtem.pal"},{Type:l.TheaterType.Snow,TheaterIni:"snow.ini",Mixes:["isosnow.mix","snow.mix","sno.mix"],Extension:".sno",NewTheaterChar:"A",IsoPaletteName:"isosno.pal",UnitPaletteName:"unitsno.pal",OverlayPaletteName:"snow.pal",LibPaletteName:"libsno.pal"},{Type:l.TheaterType.Urban,TheaterIni:"urban.ini",Mixes:["isourb.mix","urb.mix","urban.mix"],Extension:".urb",NewTheaterChar:"U",IsoPaletteName:"isourb.pal",UnitPaletteName:"uniturb.pal",OverlayPaletteName:"urban.pal",LibPaletteName:"liburb.pal"}]).set(C.YurisRevenge,[{Type:l.TheaterType.Temperate,TheaterIni:"temperatmd.ini",Mixes:["isotemp.mix","isotemmd.mix","temperat.mix","tem.mix"],Extension:".tem",NewTheaterChar:"T",IsoPaletteName:"isotem.pal",UnitPaletteName:"unittem.pal",OverlayPaletteName:"temperat.pal",LibPaletteName:"libtem.pal"},{Type:l.TheaterType.Snow,TheaterIni:"snowmd.ini",Mixes:["isosnomd.mix","snowmd.mix","isosnow.mix","snow.mix","sno.mix"],Extension:".sno",NewTheaterChar:"A",IsoPaletteName:"isosno.pal",UnitPaletteName:"unitsno.pal",OverlayPaletteName:"snow.pal",LibPaletteName:"libsno.pal"},{Type:l.TheaterType.Urban,TheaterIni:"urbanmd.ini",Mixes:["isourbmd.mix","isourb.mix","urb.mix","urban.mix"],Extension:".urb",NewTheaterChar:"U",IsoPaletteName:"isourb.pal",UnitPaletteName:"uniturb.pal",OverlayPaletteName:"urban.pal",LibPaletteName:"liburb.pal"},{Type:l.TheaterType.NewUrban,TheaterIni:"urbannmd.ini",Mixes:["isoubnmd.mix","isoubn.mix","ubn.mix","urbann.mix"],Extension:".ubn",NewTheaterChar:"N",IsoPaletteName:"isoubn.pal",UnitPaletteName:"unitubn.pal",OverlayPaletteName:"urbann.pal",LibPaletteName:"libubn.pal"},{Type:l.TheaterType.Desert,TheaterIni:"desertmd.ini",Mixes:["isodesmd.mix","desert.mix","des.mix","isodes.mix"],Extension:".des",NewTheaterChar:"D",IsoPaletteName:"isodes.pal",UnitPaletteName:"unitdes.pal",OverlayPaletteName:"desert.pal",LibPaletteName:"libdes.pal"},{Type:l.TheaterType.Lunar,TheaterIni:"lunarmd.ini",Mixes:["isolunmd.mix","isolun.mix","lun.mix","lunar.mix"],Extension:".lun",NewTheaterChar:"L",IsoPaletteName:"isolun.pal",UnitPaletteName:"unitlun.pal",OverlayPaletteName:"lunar.pal",LibPaletteName:"liblun.pal"}]),E.customRulesFileName="rulescd.ini",E.customArtFileName="artcd.ini",E.customMpModesFileName="mpmodescd.ini"}}})),System.register("util/geometry",["util/math"],(function(e,t){"use strict";var i;return t&&t.id,e("pointEquals",(function(e,t){return e&&t&&e.x===t.x&&e.y===t.y||!e&&!t})),e("rectIntersect",(function(e,t){return e.x<=t.x+t.width&&t.x<=e.x+e.width&&e.y<=t.y+t.height&&t.y<=e.y+e.height})),e("rectEquals",(function(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height})),e("circleIntersect",(function(e,t){var r=e.center,s=t.center;return i.isBetween((r.x-s.x)*(r.x-s.x)+(r.y-s.y)*(r.y-s.y),(e.radius-t.radius)*(e.radius-t.radius),(e.radius+t.radius)*(e.radius+t.radius))})),e("circleContainsPoint",(function(e,t){var i=e.center;return(i.x-t.x)*(i.x-t.x)+(i.y-t.y)*(i.y-t.y)<=e.radius*e.radius})),e("rectContainsPoint",(function(e,t){return new THREE.Box2(new THREE.Vector2(e.x,e.y),new THREE.Vector2(e.x+e.width,e.y+e.height)).containsPoint(new THREE.Vector2(t.x,t.y))})),e("rectContainsRect",(function(e,t){let i=new THREE.Box2(new THREE.Vector2(e.x,e.y),new THREE.Vector2(e.x+e.width,e.y+e.height));var r=new THREE.Box2(new THREE.Vector2(t.x,t.y),new THREE.Vector2(t.x+t.width,t.y+t.height));return i.containsBox(r)})),e("rectClampPoint",(function(e,t){return new THREE.Box2(new THREE.Vector2(e.x,e.y),new THREE.Vector2(e.x+e.width,e.y+e.height)).clampPoint(new THREE.Vector2(t.x,t.y),new THREE.Vector2)})),e("octileDistance",(function(e,t){var i=Math.abs(e.x-t.x),r=Math.abs(e.y-t.y);return i+r+(Math.SQRT2-2)*Math.min(i,r)})),{setters:[function(e){i=e}],execute:function(){}}})),System.register("gui/component/SplashScreen",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("SplashScreen",class{constructor(e,t){this.width=e,this.height=t,this.rendered=!1}render(e){if(!this.rendered){let i=this.el=document.createElement("div");i.style.backgroundColor="black",i.style.color="white",i.style.padding="10px",i.style.boxSizing="border-box",i.style.backgroundRepeat="no-repeat",i.style.backgroundPosition="50% 50%",i.style.textShadow="1px 1px black",this.updateSize();var t=this.loadingEl=document.createElement("div");i.appendChild(t);let r=this.copyrightEl=document.createElement("div");r.style.position="absolute",r.style.bottom="10px",r.style.right="10px",r.style.textAlign="right",i.appendChild(r);let s=this.disclaimerEl=document.createElement("div");s.style.position="absolute",s.style.bottom="10px",s.style.left="10px",i.appendChild(s),e.appendChild(i),this.rendered=!0}}setBackgroundImage(e){this.el.style.backgroundImage=`url(${e})`}setLoadingText(e){this.loadingEl.innerHTML=e}setCopyrightText(e){this.copyrightEl.innerHTML=e.replace(/\n/g,"
    ")}setDisclaimerText(e){this.disclaimerEl.innerHTML=e.replace(/\n/g,"
    ")}setSize(e,t){this.width=e,this.height=t,this.updateSize()}updateSize(){this.el&&(this.el.style.width=this.width+"px",this.el.style.height=this.height+"px")}destroy(){this.rendered&&(this.el.remove(),this.rendered=!1)}})}}})),System.register("util/event",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("EventDispatcher",class{constructor(){this.listeners=new Set}subscribe(e){this.listeners.add(e)}subscribeOnce(e){let t=(i,r)=>{e(i,r),this.unsubscribe(t),t=void 0};this.subscribe(t)}unsubscribe(e){this.listeners.delete(e)}dispatch(e,t){this.listeners.forEach((i=>i(t,e)))}asEvent(){return this}})}}})),System.register("util/time",[],(function(e,t){"use strict";return t&&t.id,e("sleep",(async function(e){return new Promise((t=>{setTimeout((()=>t()),e)}))})),{setters:[],execute:function(){}}})),System.register("network/IrcConnection",["util/event","util/string","util/time"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){e("IrcConnection",n=class e{constructor(e,t){this.options=e,this.logger=t,this.timeout=5,this._onMessage=new i.EventDispatcher,this._onError=new i.EventDispatcher,this._onClose=new i.EventDispatcher,this.messageBuffer=""}get onMessage(){return this._onMessage.asEvent()}get onError(){return this._onError.asEvent()}get onClose(){return this._onClose.asEvent()}async connect(t){return new Promise(((i,r)=>{this.socket=new WebSocket(t),"binary"===this.options.mode&&(this.socket.binaryType="blob");let s=i=>{this.socket.removeEventListener("error",s),r(new e.ConnectError(`Connection to "${t}" failed`))};this.socket.addEventListener("open",(()=>{this.socket.removeEventListener("error",s),this.handleOpen(),i()})),this.socket.addEventListener("error",s),this.socket.addEventListener("error",(e=>this.handleError(e))),this.socket.addEventListener("close",(e=>this.handleClose(e))),this.socket.addEventListener("message",(e=>{globalThis.Blob&&e.data instanceof Blob?this.parseData(e.data).then((e=>{this.handleMessage(e)})).catch((e=>{console.error("Failed to decode socket message.",e)})):this.handleMessage(e.data)}))}))}handleOpen(){this.logger.info("Connection open to "+this.socket.url)}handleError(e){this.logger.error("Connection error",e),this._onError.dispatch(this,e)}handleClose(e){this.logger.info(`Connection closed (${this.socket.url})`,e),this._onClose.dispatch(this,e)}handleMessage(e){if("string"!=typeof e){if(e[0]===this.options.binaryRplPrefix)return void this._onMessage.dispatch(this,e.slice(1));e=r.uint8ArrayToBinaryString(e)}this.logger.debug("Got message:",e),e=this.messageBuffer+e,this.messageBuffer="";let t=e.split(/\r?\n/);var i=t.pop();i.length&&(this.messageBuffer=i),t.filter((e=>!!e)).forEach((e=>this._onMessage.dispatch(this,e)))}parseData(e){return new Promise(((t,i)=>{let r=new FileReader;r.onload=()=>t(new Uint8Array(r.result)),r.onerror=()=>i(),r.readAsArrayBuffer(e)}))}async sendCommand(e,t){if(t.replyStartCode&&!t.replyEndCode)throw new Error("Invalid argument. Expected a reply end code, but got only a start code.");let i=[];return await this.sendRawCommand(e,((e,s,n)=>{if("string"!=typeof e){if(e[0]===this.options.binaryRplPrefix)return!1;e=r.uint8ArrayToBinaryString(e)}return t.replyRawText?(n(e.split(/\r?\n/).map((e=>({raw:e,time:s})))),!0):e.split(/\r?\n/).filter((e=>!!e)).some((e=>(e=>{if(t.replyMatch)return!!t.replyMatch.exec(e)&&(n([{raw:e,time:s}]),!0);if(!t.replyEndCode&&!t.replyCodes)return n([{raw:e,time:s}]),!0;var r,[,r,...a]=e.split(" "),a={raw:e,code:r=parseInt(r,10),params:a,time:s};if(t.replyEndCode)return t.replyCodes&&-1!==t.replyCodes.indexOf(r)?(n([a]),!0):((r===t.replyStartCode||t.replyBodyCodes&&-1!==t.replyBodyCodes.indexOf(r)||r===t.replyEndCode)&&i.push(a),r===t.replyEndCode&&(n(i),!0));if(void 0===t.replyCodes)throw new Error("List of replyCodes must be specified when not using start/end codes");return-1!==t.replyCodes.indexOf(r)&&(n([a]),!0)})(e)))}),t.timeout)}async sendBinCommand(e,t){const i=this.options.binaryRplPrefix;if(!i)throw new Error("Must configure binary message reply prefix to send binary commands");const r=this.options.binaryReqPrefix;if(!r)throw new Error("Must configure binary message request prefix to send binary commands");if(e[0]!==r)throw new Error("Binary command must start with the magic prefix 0x"+r.toString(16));return await this.sendRawCommand(e,((e,r,s)=>{if("string"==typeof e||e[0]!==i)return!1;var n=e[1];return-1!==t.replyCodes.indexOf(n)&&(s({code:n,data:e.slice(2),time:r}),!0)}),t.timeout)}sendRawCommand(t,i,r){return new Promise(((n,a)=>{let o,l=!1,c=e=>{clearTimeout(o),n(e)},h=e=>{this.socket.removeEventListener("message",g),this.socket.removeEventListener("close",u),clearTimeout(o),o=void 0,a(e)},u=async()=>{for(;l;)await s.sleep(10);d||h(new e.SocketError("Connection was closed prematurely"))},d=!1,g=e=>{if(!d){let t=Date.now();globalThis.Blob&&e.data instanceof Blob?(l=!0,this.parseData(e.data).then((e=>{l=!1,d||i(e,t,c)&&(d=!0,this.socket.removeEventListener("message",g),this.socket.removeEventListener("close",u))})).catch((e=>{l=!1,console.error("Failed to decode socket message.",e)}))):i(e.data,t,c)&&(d=!0,this.socket.removeEventListener("message",g),this.socket.removeEventListener("close",u))}};if(this.socket&&this.socket.readyState===WebSocket.OPEN){o=setTimeout((()=>{var i="string"==typeof t?t:"0x"+t[1].toString(16);h(new e.NoReplyError("Timeout reached for command "+i))}),1e3*(r??this.timeout)),this.socket.addEventListener("message",g),this.socket.addEventListener("close",u);try{this.sendMessage(t)}catch(e){h(e)}}else h(new e.SocketError("Send command failed. Socket is not open."+(this.socket?` (readyState = ${this.socket.readyState})`:"")))}))}sendMessage(t){if(!this.socket||this.socket.readyState!==WebSocket.OPEN)throw new e.SocketError("Socket is not open"+(this.socket?` (readyState = ${this.socket.readyState})`:""));let i;this.logger.debug("Sent message:",t),"string"==typeof t&&(t+="\r\n"),i="binary"===this.options.mode&&"string"==typeof t?r.binaryStringToUint8Array(t):t,this.socket.send(i)}async ping(e){var t=Date.now();return(await this.sendCommand("ping :"+t,{replyMatch:new RegExp("^:[^ ]+ PONG [^ :]+ :"+t,"i"),timeout:e}))[0].time-t}close(){this.socket&&this.socket.close()}isOpen(){return this.socket&&this.socket.readyState===WebSocket.OPEN}}),n.MAX_CHANNELNAME_LEN=30,function(e){class t extends Error{constructor(e){super(e)}}e.NoReplyError=t;class i extends Error{constructor(e){super(e)}}e.SocketError=i;class r extends Error{constructor(e){super(e)}}e.ConnectError=r}(n=n||{}),e("IrcConnection",n)}}})),System.register("network/Apgar",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("Apgar",class{static encode(e){let t="";for(let s=0;s<8;s++){var i=e.charCodeAt(s),r=0{if("string"==typeof e){let t=e.split(" ");"ping"===t[0].toLowerCase()?this.con.sendMessage("PONG"+(t[1]?" "+t[1]:"")):"privmsg"===t[1].toLowerCase()?this.handlePrivMsg(e):"page"===t[1].toLowerCase()||"notice"===t[1].toLowerCase()?this.handlePageOrNotice(e):"join"===t[1].toLowerCase()?this.handleJoin(e):"joingame"===t[1].toLowerCase()?this.handleJoingame(e):"part"===t[1].toLowerCase()?this.handlePart(e):"kick"===t[1].toLowerCase()?this.handleKick(e):"gameopt"===t[1].toLowerCase()?this.handleGameOpt(e):"mode"===t[1].toLowerCase()?this.handleMode(e):"startg"===t[1].toLowerCase()?this.handleStartGame(e):Number.isNaN(Number(t[1]))||this.handlePrivMsgError(e)}},this.handleClose=()=>{this.currentUser=void 0,this.currentGameChannel=void 0,this.currentChannels.clear()}}get onError(){return this.con.onError}get onClose(){return this.con.onClose}get onChatMessage(){return this._onChatMessage}get onJoinChannel(){return this._onJoinChannel}get onLeaveChannel(){return this._onLeaveChannel}get onGameStart(){return this._onGameStart}get onGameOpt(){return this._onGameOpt}get onGameMode(){return this._onGameMode}static factory(e){return new this(new r.IrcConnection({mode:"binary"},e),e)}static escapeChannelName(e){return e.split("").map((e=>{switch(e){case" ":return"_";case"%":return"%%";case"$":return"$$";case"_":return"$_";case"\b":return"$b";case"\n":return"$n";case"\r":return"$r";case":":return"$=";case",":return"$-";default:return e}})).join("")}static unescapeChannelName(e){var t=e.split("");let i="",r=0;for(;re.raw.replace(/^.*:- /,"")));var r=i[0].params?i[0].params.splice(1).join(" ").replace(/^:/,""):"unknown";throw new n.WolError("Login error: "+r,n.WolError.Code.BadLogin)}async joinChannel(t,i){var r="join "+e.escapeChannelName(t)+(void 0!==i?" "+i:"");let s=await this.con.sendCommand(r,{replyStartCode:332,replyBodyCodes:[u],replyEndCode:d});return this.currentChannels.add(t),this.currentGameChannel=void 0,this.lastChannelOpts={name:t,pass:i},this.logger.info(`Joined channel "${t}"`),this.parseNames(s.slice(1,-1)).sort(((e,t)=>Number(t.operator)-Number(e.operator)))}async listUsers(t){let i=await this.con.sendCommand("NAMES "+e.escapeChannelName(t),{replyBodyCodes:[u],replyEndCode:d});return this.parseNames(i.slice(0,-1)).sort(((e,t)=>Number(t.operator)-Number(e.operator)))}async rejoinLastChannel(){this.lastChannelOpts&&await this.joinChannel(this.lastChannelOpts.name,this.lastChannelOpts.pass)}sendChatMessage(e,t){if(!this.currentUser)throw new Error("Must login before sending messages");t.type!==h.ChatRecipientType.Channel&&t.type!==h.ChatRecipientType.Whisper||this.privmsg([t.name],e)}privmsg(t,i){if(!this.currentUser)throw new Error("Must login before sending messages");var r,s,n=t.map((t=>t.startsWith("#")?e.escapeChannelName(t):t)).join(",");let l=i;for(s of(this.wolv2Ascii||(i.startsWith("/")?(r=i.match(/^\/(msg|m|whisper|w) ([^ ]+) (.+)/i))?l=`/w ${r[2]} `+o.Base64.encode(a.utf16ToBinaryString(r[3])):(r=i.match(/^\/r(?:eply)? (.+)/i))&&(l="/reply "+o.Base64.encode(a.utf16ToBinaryString(r[1]))):l=o.Base64.encode(a.utf16ToBinaryString(i))),this.con.sendMessage(`privmsg ${n} :`+l),t)){var c=s.startsWith("#");this._onChatMessage.dispatch(this,{from:this.currentUser,to:{type:c?h.ChatRecipientType.Channel:h.ChatRecipientType.Whisper,name:s},text:i})}}kick(t,i,r){this.con.sendMessage(`kick ${e.escapeChannelName(i)} ${t.join(",")} :`+r)}async listGames(t,i){if(!this.currentUser)throw new Error("Must login before sending messages");return(await this.con.sendCommand(`list ${t} `+t,{replyStartCode:321,replyBodyCodes:[322,326],replyEndCode:323})).slice(1,-1).map((t=>{if(!t.params||t.params.length<9)throw new Error(`Unexpected reply for list command "${t.raw}". Insufficient params.`);let r=e.unescapeChannelName(t.params[1]);var s=t.params[2],n=Number(t.params[4]),l=t.params[5],h=t.params[6],u=t.params[7];let[d,g]=t.params[8]?.split("::")??[];var p=g?.split(",")??[];if(!(n!==i||p.length<=1)){var m=p[0],f=Number(p[1]),y=m[2],T=p[2],v=p[3],b=p[4];n=(new c.FileNameEncoder).decode(p[5]),m=p[6]?a.binaryStringToUtf16(o.Base64.decode(p[6])):"",p=p[7]?a.binaryStringToUtf16(o.Base64.decode(p[7])):void 0;return{hostName:r.match(/^#?([^']+)'s game$/)?.[1],hostPing:this.wolv2Compat?void 0:Number(u),name:r,description:m,modHash:f,modName:p,tournament:Boolean(Number(l)),humanPlayers:Number(s),aiPlayers:Number(T),maxPlayers:Number(y),observers:Number(v),observable:Boolean(Number(b)),mapName:n,passLocked:384===Number(d),resLocked:Boolean(Number(h))}}})).filter(l.isNotNullOrUndefined)}leaveChannel(t){this.currentChannels.has(t)&&this.con.sendMessage("PART "+e.escapeChannelName(t))}leaveAllChannels(){for(var e of this.getCurrentChannels())this.leaveChannel(e)}async createGame(t,i,s,n,a){var o="#"+this.getCurrentUser()+"'s game",l=e.escapeChannelName(o).slice(0,r.IrcConnection.MAX_CHANNELNAME_LEN-1);o=e.unescapeChannelName(l);return await this.con.sendCommand(`joingame ${l} ${t} ${i} ${s} 0 0 ${n?1:0} 0`+(a?" "+a:""),{replyStartCode:332,replyBodyCodes:[u],replyEndCode:d}),this.currentChannels.add(o),this.currentGameChannel=o,this.lastChannelOpts={name:o,pass:a},this.logger.info(`Joined channel "${o}"`),o}async joinGame(t,i){var r=e.escapeChannelName(t);let s=await this.con.sendCommand(`joingame ${r} 1 `+(i||""),{replyCodes:[475,478,471,474],replyStartCode:332,replyBodyCodes:[u],replyEndCode:d});if(1e.operator))?.name,void 0===r)throw new Error("Unexpected reply for joingame command. Can't find host player name");return r}switch(s[0].code){case 475:throw new n.WolError("Wrong password",n.WolError.Code.BadGamePass);case 478:throw new n.WolError("Game has closed",n.WolError.Code.GameHasClosed);case 471:throw new n.WolError("Channel is full",n.WolError.Code.ChannelFull);case 474:throw new n.WolError("Banned from channel",n.WolError.Code.BannedFromChannel);default:throw new Error("Unknown error")}}startGame(t){if(!this.currentGameChannel)throw new Error("No game channel active");var i=t.join(",");this.con.sendMessage(`startg ${e.escapeChannelName(this.currentGameChannel)} `+i)}parseNames(t){let i=[];return t.forEach((t=>{var r=t.raw.replace(new RegExp("^.*(=|\\*) [^ ]+ :"),"").split(" ").map((e=>e.split(","))).map((([t,,i])=>{var r=t.startsWith(e.CHAN_OP_PREFIX),s=this.wolv2Compat?void 0:Number(i);return{name:r?t.slice(e.CHAN_OP_PREFIX.length):t,operator:r,ping:s}}));i=i.concat(r)})),i}sendPlayerReady(e){if(!this.currentGameChannel)throw new Error("No game channel active");return this.gameOpt(this.currentGameChannel,"A"+(e?1:0))}sendPlayerHasMap(e){if(!this.currentGameChannel)throw new Error("No game channel active");return this.gameOpt(this.currentGameChannel,"K"+e)}sendGameStartRequest(){if(!this.currentGameChannel)throw new Error("No game channel active");return this.gameOpt(this.currentGameChannel,"G")}sendGameSlotsInfo(e){if(!this.currentGameChannel)throw new Error("No game channel active");return this.gameOpt(this.currentGameChannel,"L"+e)}sendPingData(e){if(!this.currentGameChannel)throw new Error("No game channel active");return this.gameOpt(this.currentGameChannel,"P"+e)}sendObserverSlot(e){if(!this.currentGameChannel)throw new Error("No game channel active");return this.gameOpt(this.currentGameChannel,"O"+e)}sendGameOpts(e){if(!this.currentGameChannel)throw new Error("No game channel active");return this.gameOpt(this.currentGameChannel,e)}sendPlayerOpts(e,t,i,r,s){if(!this.currentGameChannel)throw new Error("No game channel active");return this.gameOpt(e,`R${t},${i},${r},${s},0,0,0`)}sendModeChannelMax(t,i){this.con.sendMessage(`MODE ${e.escapeChannelName(t)} +l `+i)}sendGameTopic(t,i,r,s,n,l,h,u,d){if(!this.currentGameChannel)throw new Error("No game channel active");var g=(new c.FileNameEncoder).encode(l),p=o.Base64.encode(a.utf16ToBinaryString(u.slice(0,e.MAX_ROOM_DESC_LEN-1))),m=void 0!==d?o.Base64.encode(a.utf16ToBinaryString(d.slice(0,e.MAX_ROOM_DESC_LEN-1))):"";this.con.sendMessage(`topic ${e.escapeChannelName(this.currentGameChannel)} :g${t}${i}N39,`+h+`,${r},${s},${n?1:0},`+g+`,${p},`+m)}gameOpt(t,i){if(!this.currentUser)throw new Error("Must login first");if(!this.currentGameChannel)throw new Error("No game channel active");var r=t.startsWith("#")?e.escapeChannelName(t):t;this.con.sendMessage(`gameopt ${r} :`+i),this._onGameOpt.dispatch(this,{user:this.currentUser,opt:i})}handleJoin(t){var i=t.match(/^:([A-Za-z0-9-_]+)![^ ]+ JOIN :([^ ]+) ([^ ]+)/i);if(!i)throw new Error(`Unexpected JOIN message format "${t}"`);let[,r,s,n]=i;i=s.trim().split(","),this._onJoinChannel.dispatch(this,{type:"join",user:{name:r,ping:this.wolv2Compat?void 0:Number(i[1]),operator:this.wolv2Compat?void 0:Boolean(Number(i[2]))},channel:e.unescapeChannelName(n)})}handleJoingame(t){var i=t.match(/^:([A-Za-z0-9-_]+)![^ ]+ JOINGAME ([^:]+):([^ ]+)/i);if(!i)throw new Error(`Unexpected JOINGAME message format "${t}"`);let[,r,s,n]=i;i=s.trim().split(" "),n=e.unescapeChannelName(n),this._onJoinChannel.dispatch(this,{type:"join",user:{name:r,operator:!1,ping:this.wolv2Compat?void 0:Number(i[5])},channel:n})}handleStartGame(e){var t;if(!(t=e.match(/^:[A-Za-z0-9-_]+![^ ]+ STARTG [^:]+:[^:]+:(\d+) (\d+)/i)))throw new Error(`Unexpected STARTG message format "${e}"`);var[,i,t]=t;this._onGameStart.dispatch(this,{gameId:Number(i),timestamp:Number(t)})}handlePrivMsg(t){var i=t.match(/^:([A-Za-z0-9-_]+)\![^ ]+ PRIVMSG ([^ ]+) :(.*)/i);if(!i)throw new Error(`Unexpected PRIVMSG message format "${t}"`);let r,[,s,n,l]=i;!this.wolv2Ascii&&s!==this.getServerName()&&o.Base64.isBase64(l)&&(l=a.binaryStringToUtf16(o.Base64.decode(l))),n.startsWith("#")?r={from:s,to:{type:h.ChatRecipientType.Channel,name:e.unescapeChannelName(n)},text:l}:n===this.currentUser&&(r={from:s,to:{type:h.ChatRecipientType.Whisper,name:n},text:l}),r&&this._onChatMessage.dispatch(this,r)}handlePrivMsgError(e){var t;if(t=e.match(/^:([A-Za-z0-9-_]+) (\d+) ([^ ]+) (?:([^ ]*) )?:(.*)/i)){var[,i,r,s,,t]=t;if([g,p].includes(Number(r))){let e;s===this.currentUser&&(e={from:i,to:{type:h.ChatRecipientType.Page,name:s},text:t}),e&&this._onChatMessage.dispatch(this,e)}}}handlePageOrNotice(e){var t=e.match(/^:([A-Za-z0-9-_]+)(?:![^ ]+)? (?:PAGE|NOTICE) ([^ ]+) :(.*)/i);if(!t)throw new Error(`Unexpected PAGE message format "${e}"`);let[,i,r,s]=t;!this.wolv2Ascii&&i!==this.getServerName()&&o.Base64.isBase64(s)&&(s=a.binaryStringToUtf16(o.Base64.decode(s))),t={text:s,from:i,to:{type:h.ChatRecipientType.Page,name:r}},this._onChatMessage.dispatch(this,t)}handlePart(t){if(!(r=t.match(/^:([A-Za-z0-9-_]+)![^ ]+ PART ([^ ]+)/i)))throw new Error(`Unexpected PART message format "${t}"`);var[,i,r]=r,r=e.unescapeChannelName(r);i===this.currentUser&&(r===this.currentGameChannel&&(this.currentGameChannel=void 0),this.currentChannels.delete(r),this.logger.info(`Left channel "${r}"`)),this._onLeaveChannel.dispatch(this,{type:"leave",user:{name:i},channel:r})}handleKick(t){var i;if(!(i=t.match(/^:([A-Za-z0-9-_]+)![^ ]+ KICK ([^ ]+) ([A-Za-z0-9-_]+)/i)))throw new Error(`Unexpected KICK message format "${t}"`);var[,,r,i]=i,r=e.unescapeChannelName(r);i===this.currentUser&&(r===this.currentGameChannel&&(this.currentGameChannel=void 0),this.currentChannels.delete(r),this.logger.info(`Left channel "${r}"`)),this._onLeaveChannel.dispatch(this,{type:"leave",user:{name:i},channel:r})}handleGameOpt(e){var t;if(!(t=e.match(/^:([A-Za-z0-9-_]+)![^ ]+ GAMEOPT ([^ ]+) :(.*)/i)))throw new Error(`Unexpected GAMEOPT message format"${e}"`);var[,i,,t]=t;this._onGameOpt.dispatch(this,{user:i,opt:t})}handleMode(e){var t=e.match(/^:([A-Za-z0-9-_]+)![^ ]+ MODE ([^ ]+) \+l (\d+)/i);t?([,,,t]=t,this._onGameMode.dispatch(this,Number(t))):this.logger.warn("Got unknown MODE line: "+e)}}),f.MAX_ROOM_DESC_LEN=64,f.CHAN_OP_PREFIX="@"}}})),System.register("network/gamestate/PlayerActionPayload",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("network/gameopt/MapNameLegacyEncoder",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("MapNameLegacyEncoder",class{encode(e){let t=[],i=0;return e.split("").forEach(((e,r)=>{var s,n=127&(s=e.charCodeAt(0)<<2*r-7*i),a=s>>7&127;(s=s>>14&127)&&i++,t.push(n,a),s&&t.push(s)})),t.push(0,0),2<=e.length&&t.push(0),t=t.map((e=>128^e)),t.map((e=>String.fromCharCode(e))).join("")}decode(e){let t=e.split("").map((e=>e.charCodeAt(0)));for(t=t.map((e=>128^e));0===t[t.length-1];)t.pop();let i=[],r=0,s=0;for(;t.length;){var n=i.length,a=t.shift(),o=t.shift();let e=0,l=!1;(-1!==[1,2,3].indexOf(t[0])||n>r+3)&&(e=t.shift(),r=n,l=!0),n=(e<<14|o<<7|a)>>2*n-7*s,i.push(127&n),l&&s++}return i.map((e=>String.fromCharCode(e))).join("")}})}}})),System.register("network/gameopt/PingInfo",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("game/gameopts/GameOpts",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;e("isHumanPlayerInfo",(e=>"name"in e)),(t=i=i||{})[t.Brutal=0]="Brutal",t[t.Medium=1]="Medium",t[t.Easy=2]="Easy",e("AiDifficulty",i)}}})),System.register("network/gameopt/SlotInfo",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.Closed=0]="Closed",t[t.Open=1]="Open",t[t.OpenObserver=2]="OpenObserver",t[t.Player=3]="Player",t[t.Ai=4]="Ai",e("SlotType",i)}}})),System.register("network/gameopt/Parser",["data/DataStream","network/gameopt/MapNameLegacyEncoder","network/gameopt/SlotInfo","game/gameopts/GameOpts","network/gameopt/FileNameEncoder","util/Base64","util/string"],(function(e,t){"use strict";var i,r,s,n,a,o,l;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e}],execute:function(){e("Parser",class{parseOptions(e){let t={},[i,s,,n]=e.split(":"),c=i.split(",");c.shift(),c.shift(),t.gameSpeed=6-Number(c.shift()),t.credits=Number(c.shift()),t.unitCount=Number(c.shift()),t.shortGame=Boolean(Number(c.shift())),t.superWeapons=Boolean(Number(c.shift())),t.buildOffAlly=Boolean(Number(c.shift())),t.mcvRepacks=Boolean(Number(c.shift())),t.cratesAppear=Boolean(Number(c.shift())),t.gameMode=Number(c.shift()),t.hostTeams=Boolean(Number(c.shift()));var h=c.shift();if(t.mapTitle=o.Base64.isBase64(h)?l.binaryStringToUtf16(o.Base64.decode(h)):(new r.MapNameLegacyEncoder).decode(h),t.maxSlots=Number(c.shift()),t.mapOfficial=Boolean(Number(c.shift())),t.mapSizeBytes=Number(c.shift()),t.mapName=(new a.FileNameEncoder).decode(c.shift()),t.mapDigest=c.shift(),t.humanPlayers=this.parsePlayerOpts(s),t.aiPlayers=[],n){var u=n.slice(0,-1).split(",");if(u.length%5!=0)throw new Error("Couldn't parse gameopt: unexpected ai data length "+u.length);for(let e=0,i=Math.floor(u.length/5);ethis.router())),this.router()}async router(){let e=location.hash.slice(1)||"/";if(e.match(/^\//)){var[,t,...i]=e.split("/");this.routes["*"]&&await this.routes["*"].controller(i);let r=this.routes["/"+t];r.controller&&await r.controller(i)}}})}}})),System.register("engine/type/ObjectType",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.None=0]="None",t[t.Aircraft=1]="Aircraft",t[t.Building=2]="Building",t[t.Infantry=3]="Infantry",t[t.Overlay=4]="Overlay",t[t.Smudge=5]="Smudge",t[t.Terrain=6]="Terrain",t[t.Vehicle=7]="Vehicle",t[t.Animation=8]="Animation",t[t.Projectile=9]="Projectile",t[t.VoxelAnim=10]="VoxelAnim",t[t.Debris=11]="Debris",e("ObjectType",i)}}})),System.register("game/rules/ObjectRules",["engine/type/ObjectType"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("ObjectRules",r=class{constructor(e,t,i=-1){this.type=e,this.ini=t,this.index=i,this.parse()}static iniSpeedToLeptonsPerTick(e,t){return Math.min(256,256*e/t)}static iniRotToDegsPerTick(e){return e/256*360}parse(){this.alphaImage=this.ini.getString("AlphaImage")||void 0,this.alternateArcticArt=this.ini.getBool("AlternateArcticArt"),this.crushable=this.ini.getBool("Crushable",this.type===i.ObjectType.Infantry),this.crushSound=this.ini.getString("CrushSound")||void 0,this.dontScore=this.ini.getBool("DontScore"),this.insignificant=this.ini.getBool("Insignificant"),this.legalTarget=this.ini.getBool("LegalTarget",!0),this.noShadow=this.ini.getBool("NoShadow"),this.uiName=this.ini.getString("UIName")}get name(){return this.ini.name}get imageName(){let e=this.ini.getString("Image");return e&&"null"!==e||(e=this.name),e}}),r.IMAGE_NONE="none"}}})),System.register("game/math/GameMath",["util/math"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("GameMath",r=class{static reverseSinTableLookup(e,t,i,r){for(;t<=i;){var s=Math.floor((t+i)/2),n=this.SIN_TABLE[s];if(n===e)return s;(r?e""!==e)),this.flyerHelper=e.getString("FlyerHelper"),this.gravity=e.getNumber("Gravity"),this.idleActionFrequency=60*e.getNumber("IdleActionFrequency"),this.impactLandSound=e.getString("ImpactLandSound")||void 0,this.impactWaterSound=e.getString("ImpactWaterSound")||void 0,this.infantryExplode=e.getString("InfantryExplode"),this.flamingInfantry=e.getString("FlamingInfantry"),this.infantryHeadPop=e.getString("InfantryHeadPop"),this.infantryNuked=e.getString("InfantryNuked"),this.ironCurtainInvokeAnim=e.getString("IronCurtainInvokeAnim"),this.messageDuration=e.getNumber("MessageDuration",10),this.metallicDebris=e.getArray("MetallicDebris"),this.nukeTakeOff=e.getString("NukeTakeOff"),this.deadBodies=e.getArray("DeadBodies"),this.wake=e.getString("Wake"),this.parachute=e.getString("Parachute"),this.moveFlash=e.getString("MoveFlash"),this.warpOut=e.getString("WarpOut"),this.warpAway=e.getString("WarpAway"),this.weaponNullifyAnim=e.getString("WeaponNullifyAnim"),this.weatherConClouds=e.getArray("WeatherConClouds"),this.weatherConBoltExplosion=e.getString("WeatherConBoltExplosion"),this.weatherConBolts=e.getArray("WeatherConBolts")}})}}})),System.register("game/rules/general/RadarRules",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.GenericCombat=0]="GenericCombat",t[t.GenericNonCombat=1]="GenericNonCombat",t[t.DropZone=2]="DropZone",t[t.BaseUnderAttack=3]="BaseUnderAttack",t[t.HarvesterUnderAttack=4]="HarvesterUnderAttack",t[t.EnemyObjectSensed=5]="EnemyObjectSensed",e("RadarEventType",i),e("RadarRules",class{readIni(e){return this.eventSuppressionDistances=e.getNumberArray("RadarEventSuppressionDistances"),this.eventVisibilityDurations=e.getNumberArray("RadarEventVisibilityDurations"),this.eventDurations=e.getNumberArray("RadarEventDurations"),this.flashFrameTime=e.getNumber("FlashFrameTime"),this.combatFlashTime=e.getNumber("RadarCombatFlashTime"),this.eventMinRadius=e.getNumber("RadarEventMinRadius"),this.eventSpeed=e.getNumber("RadarEventSpeed"),this.eventRotationSpeed=e.getNumber("RadarEventRotationSpeed"),this.eventColorSpeed=e.getNumber("RadarEventColorSpeed"),this}getEventSuppresionDistance(e){if(e>this.eventSuppressionDistances.length-1)throw new RangeError("No event suppression distance is defined for type "+i[e]);return this.eventSuppressionDistances[e]}getEventVisibilityDuration(e){if(e>this.eventVisibilityDurations.length-1)throw new RangeError("No event visibility duration is defined for type "+i[e]);return this.eventVisibilityDurations[e]}getEventDuration(e){if(e>this.eventDurations.length-1)throw new RangeError("No event duration is defined for type "+i[e]);return this.eventDurations[e]}})}}})),System.register("game/rules/general/RepairRules",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("RepairRules",class{readIni(e){return this.reloadRate=e.getNumber("ReloadRate"),this.repairPercent=e.getNumber("RepairPercent"),this.repairRate=e.getNumber("RepairRate"),this.repairStep=e.getNumber("RepairStep"),this.uRepairRate=e.getNumber("URepairRate"),this.iRepairRate=e.getNumber("IRepairRate"),this.iRepairStep=e.getNumber("IRepairStep"),this}})}}})),System.register("game/rules/general/VeteranRules",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("VeteranRules",class{readIni(e){return this.veteranRatio=e.getNumber("VeteranRatio",3),this.veteranCombat=e.getNumber("VeteranCombat",1),this.veteranSpeed=e.getNumber("VeteranSpeed",1),this.veteranSight=Math.max(1,e.getNumber("VeteranSight",1)),this.veteranArmor=e.getNumber("VeteranArmor",1),this.veteranROF=e.getNumber("VeteranROF",1),this.veteranCap=e.getNumber("VeteranCap",2),this.initialVeteran=e.getBool("InitialVeteran"),this}})}}})),System.register("game/rules/general/CrewRules",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("CrewRules",class{readIni(e){return this.alliedCrew=e.getString("AlliedCrew"),this.alliedSurvivorDivisor=e.getNumber("AlliedSurvivorDivisor"),this.crewEscape=e.getNumber("CrewEscape"),this.sovietCrew=e.getString("SovietCrew"),this.sovietSurvivorDivisor=e.getNumber("SovietSurvivorDivisor"),this.survivorRate=e.getNumber("SurvivorRate"),this}})}}})),System.register("game/rules/general/PrismRules",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("PrismRules",class{readIni(e){return this.type=e.getString("PrismType"),this.supportHeight=e.getNumber("PrismSupportHeight"),this.supportMax=e.getNumber("PrismSupportMax"),this.supportModifier=e.getNumber("PrismSupportModifier",1),this}})}}})),System.register("game/rules/general/ThreatRules",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("ThreatRules",class{readIni(e){return this.myEffectivenessCoefficientDefault=e.getNumber("MyEffectivenessCoefficientDefault"),this.targetEffectivenessCoefficientDefault=e.getNumber("TargetEffectivenessCoefficientDefault"),this.targetSpecialThreatCoefficientDefault=e.getNumber("TargetSpecialThreatCoefficientDefault"),this.targetStrengthCoefficientDefault=e.getNumber("TargetStrengthCoefficientDefault"),this.targetDistanceCoefficientDefault=e.getNumber("TargetDistanceCoefficientDefault"),this}})}}})),System.register("game/rules/general/ParadropRules",["game/SideType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("ParadropRules",class{readIni(e){if(this.allyParaDrop=this.readParadropSquad(e.getArray("AllyParaDropInf"),e.getNumberArray("AllyParaDropNum"),"Ally"),this.amerParaDrop=this.readParadropSquad(e.getArray("AmerParaDropInf"),e.getNumberArray("AmerParaDropNum"),"Amer"),this.sovParaDrop=this.readParadropSquad(e.getArray("SovParaDropInf"),e.getNumberArray("SovParaDropNum"),"Sov"),this.paradropPlane=e.getString("ParadropPlane"),!this.paradropPlane)throw new Error("Missing rules [General]->ParadropPlane");return this.paradropRadius=e.getNumber("ParadropRadius"),this}readParadropSquad(e,t,i){if(e.length!==t.length)throw new RangeError(`${i}ParaDropInf/Num size mismatch (${e.length}, ${t.length})`);let r=[];for(let i=0;i{void 0!==i.SpeedType[t]&&this.speedModifiers.set(i.SpeedType[t],e.getNumber(t))})),this}getSpeedModifier(e){if(e===i.SpeedType.Foot&&0===this.speedModifiers.get(i.SpeedType.Track))return 0;let t=this.speedModifiers.get(e);return void 0===t&&(t=1),e!==i.SpeedType.Track&&e!==i.SpeedType.Wheel&&0this.verses.set(t,e))),this.wallAbsoluteDestroyer=this.rules.getBool("WallAbsoluteDestroyer"),this.wall=this.rules.getBool("Wall"),this.wood=this.rules.getBool("Wood")}})}}})),System.register("game/rules/ProjectileRules",["game/rules/ObjectRules"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.ObjectRules{parse(){super.parse();var e=this.ini.getNumber("ROT",0);let t=this.ini.getNumber("Acceleration");1!==e||t||(t=Number.POSITIVE_INFINITY),t=t||3,this.acceleration=t,this.arcing=this.ini.getBool("Arcing"),this.courseLockDuration=this.ini.getNumber("CourseLockDuration"),this.detonationAltitude=this.ini.getNumber("DetonationAltitude"),this.firersPalette=this.ini.getBool("FirersPalette"),this.flakScatter=this.ini.getBool("FlakScatter"),this.inaccurate=this.ini.getBool("Inaccurate"),this.inviso=this.ini.getBool("Inviso"),this.isAntiAir=this.ini.getBool("AA"),this.isAntiGround=this.ini.getBool("AG",!0),this.level=this.ini.getBool("Level"),this.rot=i.ObjectRules.iniRotToDegsPerTick(e),this.iniRot=e,this.shadow=this.ini.getBool("Shadow",!0),this.shrapnelWeapon=this.ini.getString("ShrapnelWeapon")||void 0,this.shrapnelCount=this.ini.getNumber("ShrapnelCount"),this.subjectToCliffs=this.ini.getBool("SubjectToCliffs"),this.subjectToElevation=this.ini.getBool("SubjectToElevation"),this.subjectToWalls=this.ini.getBool("SubjectToWalls"),this.vertical=this.ini.getBool("Vertical")}},e("ProjectileRules",r)}}})),System.register("data/mapObjects",["engine/type/ObjectType"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("MapObject",r=class{constructor(e){this.type=e}isStructure(){return this.type===i.ObjectType.Building}isVehicle(){return this.type===i.ObjectType.Vehicle}isInfantry(){return this.type===i.ObjectType.Infantry}isAircraft(){return this.type===i.ObjectType.Aircraft}isTerrain(){return this.type===i.ObjectType.Terrain}isSmudge(){return this.type===i.ObjectType.Smudge}isOverlay(){return this.type===i.ObjectType.Overlay}isNamed(){return"name"in this}isTechno(){return"health"in this}}),n=class extends r{},s=class extends n{},e("Structure",class extends s{constructor(){super(i.ObjectType.Building)}}),e("Vehicle",class extends s{constructor(){super(i.ObjectType.Vehicle)}}),e("Infantry",class extends s{constructor(){super(i.ObjectType.Infantry)}}),e("Aircraft",s=class extends s{constructor(){super(i.ObjectType.Aircraft)}}),e("Terrain",s=class extends n{constructor(){super(i.ObjectType.Terrain)}}),e("Smudge",n=class extends n{constructor(){super(i.ObjectType.Smudge)}}),e("Overlay",n=class extends r{constructor(){super(i.ObjectType.Overlay)}})}}})),System.register("game/rules/TerrainRules",["game/rules/ObjectRules","engine/TheaterType"],(function(e,t){"use strict";var i,r,s,n;function a(e,t){switch(e){case 0:case 1:return!0;case 2:return 0!=(t&s.Right);case 3:return 0!=(t&s.Left);case 4:return 0!=(t&s.Bottom);default:throw new Error('Invalid subCell "'+e)}}return t&&t.id,e("testOccupationBit",a),{setters:[function(e){i=e},function(e){r=e}],execute:function(){var t;(t=s=s||{})[t.All=7]="All",t[t.Right=1]="Right",t[t.Left=2]="Left",t[t.Bottom=4]="Bottom",e("OccupationBits",s),n=class extends i.ObjectRules{parse(){super.parse(),this.animationRate=this.ini.getNumber("AnimationRate"),this.animationProbability=this.ini.getNumber("AnimationProbability"),this.gate=this.ini.getBool("Gate"),this.immune=this.ini.getBool("Immune"),this.isAnimated=this.ini.getBool("IsAnimated"),this.snowOccupationBits=this.normalizeOccupationBits(this.ini.getNumber("SnowOccupationBits",s.All)),this.spawnsTiberium=this.ini.getBool("SpawnsTiberium"),this.strength=this.ini.getNumber("Strength"),this.radarInvisible=this.ini.getBool("RadarInvisible"),this.temperateOccupationBits=this.normalizeOccupationBits(this.ini.getNumber("TemperateOccupationBits",s.All))}normalizeOccupationBits(e){return(e+8*Math.abs(Math.floor(e/8)))%8}getOccupationBits(e){return e!==r.TheaterType.Snow?this.temperateOccupationBits:this.snowOccupationBits}getOccupiedSubCells(e){var t,i=this.getOccupationBits(e),r=[0,1,2,3,4];if(i===s.All)return r;let n=[];for(t of r)a(t,i)&&n.push(t);return n}},e("TerrainRules",n)}}})),System.register("game/rules/SmudgeRules",["game/rules/ObjectRules"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.ObjectRules{parse(){super.parse(),this.burn=this.ini.getBool("Burn"),this.crater=this.ini.getBool("Crater"),this.width=this.ini.getNumber("Width",1),this.height=this.ini.getNumber("Height",1)}},e("SmudgeRules",r)}}})),System.register("game/rules/DebrisRules",["util/math","game/rules/ObjectRules"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.ObjectRules{parse(){super.parse(),this.damage=this.ini.getNumber("Damage"),this.damageRadius=this.ini.getNumber("DamageRadius"),this.duration=this.ini.getNumber("Duration"),this.elasticity=i.clamp(this.ini.getNumber("Elasticity",.75),0,1),this.expireAnim=this.ini.getString("ExpireAnim")||void 0,this.minAngularVelocity=this.ini.getNumber("MinAngularVelocity"),this.maxAngularVelocity=this.ini.getNumber("MaxAngularVelocity"),this.maxXYVel=this.ini.getNumber("MaxXYVel"),this.minZVel=this.ini.getNumber("MinZVel"),this.maxZVel=this.ini.getNumber("MaxZVel"),this.shareTurretData=this.ini.getBool("ShareTurretData"),this.shareBodyData=this.ini.getBool("ShareBodyData"),this.shareBarrelData=this.ini.getBool("ShareBarrelData"),this.shareSource=this.ini.get("ShareSource")||void 0,this.trailerAnim=this.ini.getString("TrailerAnim")||void 0,this.trailerSeparation=this.ini.getNumber("TrailerSeperation"),this.warhead=this.ini.getString("Warhead")||void 0}},e("DebrisRules",s)}}})),System.register("game/rules/ObjectRulesFactory",["engine/type/ObjectType","game/rules/ObjectRules","game/rules/TechnoRules","game/rules/OverlayRules","game/rules/TerrainRules","game/rules/SmudgeRules","game/rules/DebrisRules"],(function(e,t){"use strict";var i,r,s,n,a,o,l;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e}],execute:function(){e("ObjectRulesFactory",class{create(e,t,c){switch(e){case i.ObjectType.Aircraft:case i.ObjectType.Building:case i.ObjectType.Infantry:case i.ObjectType.Vehicle:return new s.TechnoRules(e,t,c);case i.ObjectType.Overlay:return new n.OverlayRules(e,t,c);case i.ObjectType.Terrain:return new a.TerrainRules(e,t,c);case i.ObjectType.Smudge:return new o.SmudgeRules(e,t,c);case i.ObjectType.VoxelAnim:return new l.DebrisRules(e,t,c);default:return new r.ObjectRules(e,t,c)}}})}}})),System.register("game/rules/CombatDamageRules",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("CombatDamageRules",class{readIni(e){this.ballisticScatter=e.getNumber("BallisticScatter"),this.bridgeStrength=e.getNumber("BridgeStrength"),this.c4Delay=e.getNumber("C4Delay"),this.c4Warhead=e.getString("C4Warhead"),this.deathWeapon=e.getString("DeathWeapon"),this.dMislEliteWarhead=e.getString("DMislEliteWarhead"),this.dMislWarhead=e.getString("DMislWarhead"),this.flameDamage=e.getString("FlameDamage"),this.ironCurtainDuration=e.getNumber("IronCurtainDuration"),this.ivanDamage=e.getNumber("IvanDamage"),this.ivanIconFlickerRate=e.getNumber("IvanIconFlickerRate"),this.ivanTimedDelay=e.getNumber("IvanTimedDelay"),this.ivanWarhead=e.getString("IvanWarhead"),this.splashList=e.getArray("SplashList"),this.v3EliteWarhead=e.getString("V3EliteWarhead"),this.v3Warhead=e.getString("V3Warhead")}})}}})),System.register("game/rules/TiberiumRules",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("TiberiumRules",class{readIni(e){return this.value=e.getNumber("Value"),this}})}}})),System.register("engine/type/TiberiumType",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.Riparius=0]="Riparius",t[t.Cruentus=1]="Cruentus",t[t.Vinifera=2]="Vinifera",t[t.Aboreus=3]="Aboreus",t[t.Ore=0]="Ore",t[t.Gems=1]="Gems",e("TiberiumType",i)}}})),System.register("game/rules/AiRules",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("AiRules",class{readIni(e){this.buildPower=e.getArray("BuildPower"),this.buildRefinery=e.getArray("BuildRefinery"),this.buildTech=e.getArray("BuildTech"),this.tiberiumFarScan=e.getNumber("TiberiumFarScan",50),this.tiberiumNearScan=e.getNumber("TiberiumNearScan",5)}})}}})),System.register("game/rules/ElevationModelRules",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("ElevationModelRules",class{readIni(e){return this.increment=e.getNumber("ElevationIncrement"),this.incrementBonus=e.getNumber("ElevationIncrementBonus",1),this.bonusCap=e.getNumber("ElevationBonusCap"),this}getBonus(e,t){return e<=t?0:Math.min(this.bonusCap,Math.floor((e-t)/this.increment))*this.incrementBonus}})}}})),System.register("game/rules/RadiationRules",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("RadiationRules",class{readIni(e){this.radDurationMultiple=e.getNumber("RadDurationMultiple"),this.radApplicationDelay=e.getNumber("RadApplicationDelay"),this.radLevelMax=e.getNumber("RadLevelMax"),this.radLevelDelay=e.getNumber("RadLevelDelay"),this.radLightDelay=e.getNumber("RadLightDelay"),this.radLevelFactor=e.getNumber("RadLevelFactor"),this.radLightFactor=e.getNumber("RadLightFactor"),this.radTintFactor=e.getNumber("RadTintFactor"),this.radColor=e.getNumberArray("RadColor"),this.radSiteWarhead=e.getString("RadSiteWarhead")}})}}})),System.register("game/type/SuperWeaponType",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.MultiMissile=0]="MultiMissile",t[t.IronCurtain=1]="IronCurtain",t[t.LightningStorm=2]="LightningStorm",t[t.ChronoSphere=3]="ChronoSphere",t[t.ChronoWarp=4]="ChronoWarp",t[t.ParaDrop=5]="ParaDrop",t[t.AmerParaDrop=6]="AmerParaDrop",e("SuperWeaponType",i)}}})),System.register("game/rules/SuperWeaponRules",["game/type/SuperWeaponType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("SuperWeaponRules",class{constructor(e){this.index=e}readIni(e){return this.disableableFromShell=e.getBool("DisableableFromShell"),this.isPowered=e.getBool("IsPowered",!0),this.name=e.name,this.preClick=e.getBool("PreClick"),this.preDependent=e.getEnum("PreDependent",i.SuperWeaponType,void 0),this.postClick=e.getBool("PostClick"),this.rechargeTime=e.getNumber("RechargeTime",5),this.showTimer=e.getBool("ShowTimer"),this.sidebarImage=e.getString("SidebarImage").toLowerCase(),this.type=e.getEnum("Type",i.SuperWeaponType,void 0),this.uiName=e.getString("UIName"),this.weaponType=e.getString("WeaponType")||void 0,this}})}}})),System.register("game/rules/CrateRules",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("CrateRules",class{readIni(e){this.crateMaximum=e.getNumber("CrateMaximum"),this.crateMinimum=e.getNumber("CrateMinimum"),this.crateRadius=e.getNumber("CrateRadius"),this.crateRegen=e.getNumber("CrateRegen");let t=e.getString("UnitCrateType");return this.unitCrateType="none"!==t.toLowerCase()?t:void 0,this.healCrateSound=e.getString("HealCrateSound"),this.crateImg=e.getString("CrateImg"),this.waterCrateImg=e.getString("WaterCrateImg"),this.freeMCV=e.getBool("FreeMCV"),this}})}}})),System.register("game/order/OrderType",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.Move=0]="Move",t[t.ForceMove=1]="ForceMove",t[t.Attack=2]="Attack",t[t.ForceAttack=3]="ForceAttack",t[t.AttackMove=4]="AttackMove",t[t.Guard=5]="Guard",t[t.GuardArea=6]="GuardArea",t[t.Capture=7]="Capture",t[t.Occupy=8]="Occupy",t[t.Deploy=9]="Deploy",t[t.DeploySelected=10]="DeploySelected",t[t.Stop=11]="Stop",t[t.Cheer=12]="Cheer",t[t.Dock=13]="Dock",t[t.Gather=14]="Gather",t[t.Repair=15]="Repair",t[t.Scatter=16]="Scatter",t[t.EnterTransport=17]="EnterTransport",t[t.PlaceBomb=18]="PlaceBomb",e("OrderType",i)}}})),System.register("gui/PointerType",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.Default=0]="Default",t[t.Mini=1]="Mini",t[t.Scroll=2]="Scroll",t[t.NoScroll=10]="NoScroll",t[t.Select=18]="Select",t[t.Move=31]="Move",t[t.NoMove=41]="NoMove",t[t.MoveMini=42]="MoveMini",t[t.NoActionMini=52]="NoActionMini",t[t.AttackRange=53]="AttackRange",t[t.AttackNoRange=58]="AttackNoRange",t[t.AttackMini=63]="AttackMini",t[t.Guard=68]="Guard",t[t.GuardMini=73]="GuardMini",t[t.Unknown1=78]="Unknown1",t[t.Unknown2=88]="Unknown2",t[t.Occupy=89]="Occupy",t[t.NoOccupy=99]="NoOccupy",t[t.OccupyMini=100]="OccupyMini",t[t.Deploy=110]="Deploy",t[t.NoDeploy=119]="NoDeploy",t[t.Unknown3=120]="Unknown3",t[t.Sell=129]="Sell",t[t.SellMini=139]="SellMini",t[t.NoSell=149]="NoSell",t[t.RepairMove=150]="RepairMove",t[t.SideRepair=170]="SideRepair",t[t.NoRepair=190]="NoRepair",t[t.Unknown4=191]="Unknown4",t[t.Unknown5=199]="Unknown5",t[t.Dynamite=204]="Dynamite",t[t.Unknown6=209]="Unknown6",t[t.Unknown7=214]="Unknown7",t[t.Unknown8=219]="Unknown8",t[t.Unknown9=224]="Unknown9",t[t.Unknown10=229]="Unknown10",t[t.Unknown11=234]="Unknown11",t[t.Unknwon12=239]="Unknwon12",t[t.Unknown13=249]="Unknown13",t[t.Para=259]="Para",t[t.Unknown14=269]="Unknown14",t[t.Storm=279]="Storm",t[t.Unknown15=299]="Unknown15",t[t.C4=309]="C4",t[t.Nuke=319]="Nuke",t[t.Unknown16=329]="Unknown16",t[t.Power=339]="Power",t[t.Unknown17=345]="Unknown17",t[t.Iron=346]="Iron",t[t.Unknown18=351]="Unknown18",t[t.Unknown19=356]="Unknown19",t[t.Chrono=357]="Chrono",t[t.DefuseBomb=369]="DefuseBomb",t[t.NoAction=384]="NoAction",t[t.Pan=385]="Pan",t[t.Unknown21=394]="Unknown21",t[t.AttackMove=404]="AttackMove",t[t.Unknown23=413]="Unknown23",t[t.Unknown24=422]="Unknown24",t[t.Unknown25=431]="Unknown25",t[t.Unknown26=432]="Unknown26",t[t.Unknown27=433]="Unknown27",t[t.Unknown28=434]="Unknown28",t[t.Beacon=435]="Beacon",e("PointerType",i)}}})),System.register("game/gameobject/task/system/TaskStatus",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.NotStarted=0]="NotStarted",t[t.Running=1]="Running",t[t.Finished=2]="Finished",t[t.Cancelling=3]="Cancelling",t[t.Cancelled=4]="Cancelled",e("TaskStatus",i)}}})),System.register("data/map/tag/TagRepeatType",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.OnceAny=0]="OnceAny",t[t.OnceAll=1]="OnceAll",t[t.Repeat=2]="Repeat",e("TagRepeatType",i)}}})),System.register("data/map/tag/Tag",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("Tag",class{})}}})),System.register("game/map/Tile",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("game/map/TileCollection",["game/type/LandType","engine/type/TerrainType","util/typeGuard"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){var t;(t=n=n||{})[t.Top=0]="Top",t[t.TopLeft=1]="TopLeft",t[t.TopRight=2]="TopRight",t[t.Left=3]="Left",t[t.Right=4]="Right",t[t.BottomLeft=5]="BottomLeft",t[t.Bottom=6]="Bottom",t[t.BottomRight=7]="BottomRight",e("TileDirection",n),e("TileCollection",class{constructor(e,t,s,n){this.tileSets=t,this.generalRules=s;let a=this.rSize={width:0,height:0},o=this.dSize={width:0,height:0};for(let t=0,i=e.length;t{for(var[s,n]of t){let t=this.getByMapCoords(e.rx+s,e.ry+n);t&&t.z0)).radarLeft.clone().multiplyScalar(.5)}getAll(){return[...this.tiles]}forEach(e){for(let t=0,i=this.tiles.length;t{i=e(i,t)})),i}getMinTileHeight(){return this.minTileHeight}getMaxTileHeight(){return this.maxTileHeight}getCutoffTileHeight(){return this.cutoffTileHeight}computeCutoffTileHeight(){var e=this.dSize.width-1;let t=this.dSize.height-1,i=0,r=!0;for(;r&&0i&&(i=s.z))}r&&t--}return i}getAllBridgeSetTiles(){return this.bridgeSetTiles}getAllNeighbourTiles(e){var t=e.rx,i=e.ry;return[this.getByMapCoords(t+1,i+1),this.getByMapCoords(t-1,i-1),this.getByMapCoords(t-1,i+1),this.getByMapCoords(t+1,i-1),this.getByMapCoords(t,i+1),this.getByMapCoords(t+1,i),this.getByMapCoords(t-1,i),this.getByMapCoords(t,i-1)].filter(s.isNotNullOrUndefined)}getNeighbourTile(e,t){var i=e.rx,r=e.ry;switch(t){case n.Bottom:return this.getByMapCoords(i+1,r+1);case n.Top:return this.getByMapCoords(i-1,r-1);case n.Left:return this.getByMapCoords(i-1,r+1);case n.Right:return this.getByMapCoords(i+1,r-1);case n.BottomLeft:return this.getByMapCoords(i,r+1);case n.BottomRight:return this.getByMapCoords(i+1,r);case n.TopLeft:return this.getByMapCoords(i-1,r);case n.TopRight:return this.getByMapCoords(i,r-1);default:throw new Error("Invalid direction")}}getByDisplayCoords(e,t){if(!(e>=this.dSize.width||t>=this.dSize.height))return this.tilesByDxy[e+t*this.dSize.width]}getByMapCoords(e,t){if(!(e>=this.rSize.width||t>=this.rSize.height))return this.tilesByRxy[e+t*this.rSize.width]}getMapSize(){return this.rSize}getDisplaySize(){return this.dSize}getInRectangle(e,t){let i=[];for(let n=0;nthis.occupyTile(e,t))),this._onChange.dispatch(this,{tiles:i,object:t,type:"added"})}unoccupyTileRange(e,t){let i=this.calculateTilesForGameObject(e,t);i.forEach((e=>this.unoccupyTile(e,t))),this._onChange.dispatch(this,{tiles:i,object:t,type:"removed"})}occupySingleTile(e,t){this.occupyTile(e,t),this._onChange.dispatch(this,{tiles:[e],object:t,type:"added"})}unoccupySingleTile(e,t){this.unoccupyTile(e,t),this._onChange.dispatch(this,{tiles:[e],object:t,type:"removed"})}calculateTilesForGameObject(e,t){return this.tiles.getInRectangle(e,t.getFoundation())}occupyTile(e,t){let i=this.tileOccupation[e.rx]?.[e.ry];i&&(i.add(t),this.emptyTiles.delete(e),e.landType=this.computeTileLandType(e),e.onBridgeLandType=this.computeOnBridgeLandType(e))}unoccupyTile(e,t){let i=this.tileOccupation[e.rx]?.[e.ry];i&&(i.delete(t),i.size||this.emptyTiles.add(e),e.landType=this.computeTileLandType(e),e.onBridgeLandType=this.computeOnBridgeLandType(e))}isTileOccupiedBy(e,t){return!!this.tileOccupation[e.rx]?.[e.ry]?.has(t)}computeTileLandType(e){if(e.landType===i.LandType.Rock)return i.LandType.Rock;var t,r=i.getLandType(e.terrainType);for(t of this.tileOccupation[e.rx]?.[e.ry]??[]){if((t.isOverlay()||t.isBuilding())&&t.rules.wall)return i.LandType.Wall;if(t.isOverlay()&&t.isTiberium())return i.LandType.Tiberium;if(t.isOverlay()&&t.rules.land!==i.LandType.Clear&&!t.isBridge()&&!t.isBridgePlaceholder())return t.rules.land}return r}computeOnBridgeLandType(e){for(var t of this.tileOccupation[e.rx]?.[e.ry]??[])if(t.isOverlay()&&t.isBridge())return t.isHighBridge()?i.LandType.Road:t.rules.land}getTileZone(e,t=!1){return s.getZoneType(t?e.landType:e.onBridgeLandType??e.landType)}getBridgeOnTile(e){for(var t of this.tileOccupation[e.rx]?.[e.ry]??[])if(t.isOverlay()&&t.isBridge())return t}getObjectsOnTile(e){return[...this.tileOccupation[e.rx]?.[e.ry]??[]]}getGroundObjectsOnTile(e){let t=[];for(var i of this.tileOccupation[e.rx]?.[e.ry]??[])i.isTechno()&&!i.isBuilding()&&i.zone===s.ZoneType.Air||t.push(i);return t}getAirObjectsOnTile(e){let t=[];for(var i of this.tileOccupation[e.rx]?.[e.ry]??[])i.isUnit()&&i.zone===s.ZoneType.Air&&t.push(i);return t}getObjectsOnTileByLayer(e,t){if(t===n.Ground)return this.getGroundObjectsOnTile(e);if(t===n.Air)return this.getAirObjectsOnTile(e);if(t===n.All)return this.getObjectsOnTile(e);throw new Error(`Unhandled layer type "${t}"`)}getEmptyTiles(){return[...this.emptyTiles]}})}}})),System.register("game/map/BridgeOverlayTypes",["util/math"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e}],execute:function(){var t;(t=r=r||{})[t.NotBridge=0]="NotBridge",t[t.Concrete=1]="Concrete",t[t.Wood=2]="Wood",e("OverlayBridgeType",r),e("BridgeOverlayTypes",s=class{static getOverlayBridgeType(e){return i.isBetween(e,this.minHighBridgeConcreteId,this.maxHighBridgeConcreteId)||i.isBetween(e,this.minLowBridgeConcreteId,this.maxLowBridgeConcreteId)?r.Concrete:i.isBetween(e,this.minHighBridgeWoodId,this.maxHighBridgeWoodId)||i.isBetween(e,this.minLowBridgeWoodId,this.maxLowBridgeWoodId)?r.Wood:r.NotBridge}static isBridge(e){return this.isHighBridge(e)||this.isLowBridge(e)}static isBridgePlaceholder(e){return this.bridgePlaceholderIds.includes(e)}static isHighBridge(e){return i.isBetween(e,this.minHighBridgeWoodId,this.maxHighBridgeWoodId)||i.isBetween(e,this.minHighBridgeConcreteId,this.maxHighBridgeConcreteId)}static isLowBridge(e){return i.isBetween(e,this.minLowBridgeWoodId,this.maxLowBridgeWoodId)||i.isBetween(e,this.minLowBridgeConcreteId,this.maxLowBridgeConcreteId)}static isXBridge(e){return e===this.minHighBridgeWoodId||e===this.minHighBridgeConcreteId||i.isBetween(e,this.minLowBridgeWoodId,this.minLowBridgeWoodId+8)||i.isBetween(e,this.minLowBridgeWoodId+18,this.minLowBridgeWoodId+21)||i.isBetween(e,this.minLowBridgeConcreteId,this.minLowBridgeConcreteId+8)||i.isBetween(e,this.minLowBridgeConcreteId+18,this.minLowBridgeConcreteId+21)}static isLowBridgeHead(e){return i.isBetween(e,this.minLowBridgeWoodId+18,this.minLowBridgeWoodId+25)||i.isBetween(e,this.minLowBridgeConcreteId+18,this.minLowBridgeConcreteId+25)}static isLowBridgeHeadStart(e){return i.isBetween(e,this.minLowBridgeWoodId+20,this.minLowBridgeWoodId+23)||i.isBetween(e,this.minLowBridgeConcreteId+20,this.minLowBridgeConcreteId+23)}static calculateLowBridgeOverlayId(e,t){let i;if(e===r.Concrete)i=this.minLowBridgeConcreteId;else{if(e!==r.Wood)throw new Error("Not implemented");i=this.minLowBridgeWoodId}return i+(t?0:9)}static calculateHighBridgeOverlayId(e,t){let i;if(e===r.Concrete)i=this.minHighBridgeConcreteId;else{if(e!==r.Wood)throw new Error("Not implemented");i=this.minHighBridgeWoodId}return i+(t?0:1)}}),s.minLowBridgeWoodId=74,s.maxLowBridgeWoodId=99,s.minLowBridgeConcreteId=205,s.maxLowBridgeConcreteId=230,s.minHighBridgeConcreteId=24,s.maxHighBridgeConcreteId=25,s.minHighBridgeWoodId=237,s.maxHighBridgeWoodId=238,s.bridgePlaceholderIds=[100,101,231,232]}}})),System.register("engine/type/OverlayTibType",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.NotSpecial=0]="NotSpecial",t[t.Riparius=1]="Riparius",t[t.Cruentus=2]="Cruentus",t[t.Vinifera=4]="Vinifera",t[t.Aboreus=8]="Aboreus",t[t.Ore=1]="Ore",t[t.Gems=2]="Gems",t[t.All=15]="All",e("OverlayTibType",i)}}})),System.register("game/map/OreOverlayTypes",["engine/type/OverlayTibType"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("OreOverlayTypes",r=class{static getOverlayTibType(e){return this.isRiparius(e)?i.OverlayTibType.Riparius:this.isCruentus(e)?i.OverlayTibType.Cruentus:this.isVinifera(e)?i.OverlayTibType.Vinifera:this.isAboreus(e)?i.OverlayTibType.Aboreus:i.OverlayTibType.NotSpecial}static isRiparius(e){return e>=this.minIdRiparius&&e<=this.maxIdRiparius}static isCruentus(e){return e>=this.minIdCruentus&&e<=this.maxIdCruentus}static isVinifera(e){return e>=this.minIdVinifera&&e<=this.maxIdVinifera}static isAboreus(e){return e>=this.minIdAboreus&&e<=this.maxIdAboreus}}),r.minIdRiparius=102,r.maxIdRiparius=127,r.minIdCruentus=27,r.maxIdCruentus=38,r.minIdVinifera=127,r.maxIdVinifera=146,r.minIdAboreus=147,r.maxIdAboreus=166}}})),System.register("game/gameobject/infantry/StanceType",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.None=0]="None",t[t.Guard=1]="Guard",t[t.Prone=2]="Prone",t[t.Deployed=3]="Deployed",t[t.Paradrop=4]="Paradrop",t[t.Cheer=5]="Cheer",e("StanceType",i)}}})),System.register("game/gameobject/locomotor/Locomotor",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("game/gameobject/trait/interface/NotifyUnspawn",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){(i=i||{}).onUnspawn=Symbol(),e("NotifyUnspawn",i)}}})),System.register("game/gameobject/trait/interface/NotifyOwnerChange",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){(i=i||{}).onChange=Symbol(),e("NotifyOwnerChange",i)}}})),System.register("game/Hashable",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("game/gameobject/trait/interface/NotifyTick",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){(i=i||{}).onTick=Symbol(),e("NotifyTick",i)}}})),System.register("game/type/MovementZone",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.Amphibious=0]="Amphibious",t[t.AmphibiousCrusher=1]="AmphibiousCrusher",t[t.AmphibiousDestroyer=2]="AmphibiousDestroyer",t[t.Crusher=3]="Crusher",t[t.CrusherAll=4]="CrusherAll",t[t.Destroyer=5]="Destroyer",t[t.Fly=6]="Fly",t[t.Infantry=7]="Infantry",t[t.InfantryDestroyer=8]="InfantryDestroyer",t[t.Normal=9]="Normal",t[t.Subterranean=10]="Subterranean",t[t.Water=11]="Water",e("MovementZone",i)}}})),System.register("game/AttackerInfo",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("game/gameobject/common/DeathType",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.None=0]="None",t[t.Normal=1]="Normal",t[t.Demolish=2]="Demolish",t[t.Crush=3]="Crush",t[t.Temporal=4]="Temporal",t[t.Sink=5]="Sink",e("DeathType",i)}}})),System.register("game/gameobject/task/system/CallbackTask",["game/gameobject/task/system/Task"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.Task{constructor(e){super(),this.cb=e}onTick(e){return this.cb(e),!0}},e("CallbackTask",r)}}})),System.register("data/encoding/Format80",["data/DataStream"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("Format80",class{static decode(e,t){var i=new Uint8Array(t);return this.decodeInto(e,i),i}static decodeInto(e,t){let r=new i.DataStream(new DataView(e.buffer,e.byteOffset,e.byteLength)),s=0;for(;;){var n=r.readUint8();if(0==(128&n)){var a=r.readUint8(),o=3+((112&n)>>4);this.replicatePrevious(t,s,s-(((15&n)<<8)+a),o),s+=o}else if(0==(64&n)){if(0==(o=63&n))return s;t.set(r.readUint8Array(o),s),s+=o}else if(62==(n&=63))for(var l=r.readInt16(),c=r.readUint8(),h=s+l;s=s)throw new Error(`srcIndex >= destIndex ${e} `+s);for(var u=s+l;s=s)throw new Error(`srcIndex >= destIndex ${e} `+s);for(var d=s+n;s destIndex ${i} `+t);if(t-i==1)for(let i=0;it.id===e.attachedTriggerId)))&&(e.attachedTrigger=u,h.delete(u))}for(let e of h){var d=c.find((t=>t.triggerId===e.id));if(d){let t=e;for(;t;)t.tag=d,t=t.attachedTrigger}else{let t=e;for(;t;){console.warn(`Trigger ${t.id} has no associated tag or valid root trigger. Skipping.`);var g=s.indexOf(t);-1!==g&&s.splice(g,1),t=t.attachedTrigger}}}return{triggers:s,unknownEventTypes:a,unknownActionTypes:l}}readTriggers(e){let t=[];for(var[i,r]of e.entries){var s=r.split(",");s.length<8?console.warn(`Invalid trigger ${i}=${r}. Skipping.`):(s={id:i,houseName:s[0],attachedTriggerId:""!==s[1]?s[1]:void 0,attachedTrigger:void 0,name:s[2],disabled:Boolean(Number(s[3])),difficulties:{easy:Boolean(Number(s[4])),medium:Boolean(Number(s[5])),hard:Boolean(Number(s[6]))},events:[],actions:[],tag:void 0},t.push(s))}return t}readEvents(e){let t=new Map,r=new Set;for(var[s,n]of e.entries){let e=n.split(",");if(e.length<4)console.warn(`Invalid event ${s}=${n}. Skipping.`);else{var a=Number(e.shift());let n=[];for(let t=0;te||"0"))]},n.push(l)):(r.add(o),console.warn(`Unknown event type ${o} for trigger id ${s}. Skipping.`))}t.set(s,n)}}return{events:t,unknownEventTypes:r}}readActions(e){let t=new Map,i=new Set;for(var[s,n]of e.entries){let e=n.split(",");if(e.length<9)console.warn(`Invalid action ${s}=${n}. Skipping.`);else{var a=Number(e.shift());if(e.length<8*a)console.warn(`Invalid action ${s}=${n}. Skipping.`);else{let n=[];for(let t=0;te.number<8)).sort(((e,t)=>e.numbert*o+e;this.tiles=new Array(o*r);for(let e=this.maxTileNum=0;eNumber(e))),s=n.base64StringToUint8Array(t.getConcatenatedValues()),r=new o.RgbBitmap(i,r);return a.Format5.decodeInto(s,r.data),r}}},e("MapFile",m)}}})),System.register("game/map/MapBounds",["util/geometry","game/Coords","util/event"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){e("MapBounds",class{constructor(){this.mapCutoffHeight=0,this.mapBuildableSize={x:0,y:0,width:0,height:0},this.localSize={x:0,y:0,width:0,height:0},this.fullSize={width:0,height:0},this.clampedFullSize={x:0,y:0,width:0,height:0},this.rawLocalSize={x:0,y:0,width:0,height:0},this._onLocalResize=new s.EventDispatcher}get onLocalResize(){return this._onLocalResize.asEvent()}fromMapFile(e,t){this.fullSize={width:2*e.fullSize.width,height:2*e.fullSize.height},this.clampedFullSize={x:1,y:2,width:2*(e.fullSize.width-1)-1/r.Coords.ISO_TILE_SIZE,height:2*(e.fullSize.height-1)+1-1/r.Coords.ISO_TILE_SIZE},this.mapCutoffHeight=Math.max(9,t.getCutoffTileHeight());var i={x:i=Math.max(2,e.localSize.x),y:e.localSize.y,width:Math.min(e.fullSize.width-2-i,e.localSize.width),height:e.localSize.height};return this.updateRawLocalSize(i),this}updateRawLocalSize(e){this.rawLocalSize.width&&this.rawLocalSize.height&&!i.rectContainsRect(e,this.rawLocalSize)?console.warn("New map limits must be outside old limits. Skipping."):i.rectEquals(e,this.rawLocalSize)||(this.localSize=this.computeLocalSize(e,this.fullSize.height/2,this.mapCutoffHeight),this.rawLocalSize={...e},this.mapBuildableSize={x:this.localSize.x,y:this.localSize.y+4,width:this.localSize.width-2,height:this.localSize.height-8},this._onLocalResize.dispatch(this))}computeLocalSize(e,t,i){return{x:2*e.x,y:2*e.y-4,height:Math.min(2*(e.height+5)-1,2*t-2*(e.y-3)-i),width:2*e.width}}getLocalSize(){return this.localSize}getRawLocalSize(){return this.rawLocalSize}getFullSize(){return this.fullSize}getClampedFullSize(){return this.clampedFullSize}isWithinBounds(e){return i.rectContainsPoint(this.mapBuildableSize,{x:e.dx,y:e.dy-e.z})}clampWithinBounds(e){let{x:t,y:r}=i.rectClampPoint(this.mapBuildableSize,{x:e.dx,y:e.dy-e.z});return r+=t%2-r%2,r>this.mapBuildableSize.y+this.mapBuildableSize.height&&(r-=2),{dx:t,dy:r}}isWithinHardBounds(e){var t=e.x/r.Coords.LEPTONS_PER_TILE,s=t-(n=(e.z??e.y)/r.Coords.LEPTONS_PER_TILE)+this.fullSize.width/2-1,n=t+n-this.fullSize.width/2-1;return i.rectContainsPoint(this.clampedFullSize,{x:++s,y:++n})}})}}})),System.register("game/map/tileFinder/DirectionalTileFinder",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("DirectionalTileFinder",class{constructor(e,t,i,r,s,n,a,o=(()=>!0)){this.tiles=e,this.mapBounds=t,this.startTile=i,this.maxDistance=s,this.dirX=n,this.dirY=a,this.predicate=o,this.finished=!1,this.distance=r}getNextTile(){if(!this.finished){let t;do{let i={x:this.startTile.rx,y:this.startTile.ry};i.x+=this.distance*Math.sign(this.dirX),i.y+=this.distance*Math.sign(this.dirY);var e=this.tiles.getByMapCoords(i.x,i.y);if(e&&this.mapBounds.isWithinBounds(e)&&this.predicate(e)&&(t=e),this.maxDistance&&this.distance>=this.maxDistance)return this.finished=!0,t}while(this.distance++,!t);return t}}})}}})),System.register("game/map/tileFinder/RadialTileFinder",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("RadialTileFinder",class{constructor(e,t,i,r,s,n,a,o=!0){this.tiles=e,this.mapBounds=t,this.startTile=i,this.foundation=r,this.maxDistance=n,this.predicate=a,this.checkBounds=o,this.distance=s,this.generator=this.generate()}getNextTile(){return this.generator.next().value}*generate(){var e=(e,t)=>{var i=this.tiles.getByMapCoords(e,t);if(i&&(!this.checkBounds||this.mapBounds.isWithinBounds(i))&&this.predicate(i))return i};do{var t=this.startTile.rx-this.distance,i=this.startTile.ry-this.distance,r=this.startTile.rx+this.foundation.width-1+this.distance,s=this.startTile.ry+this.foundation.height-1+this.distance;let n,a,o;if(0=t;n--)o=e(n,s),o&&(yield o);for(a=s-1;a>=i;a--)o=e(r,a),o&&(yield o);for(n=t;n{if(e.isOverlay()&&e.isBridge()){var i=e.tile;let n=this.piecesByTile.get(i);if("added"===t){if(n)throw new Error(`A bridge piece already exists at tile (${i.rx},${i.ry})`);var r=this.findBridgeAdjacentTiles(e);n={obj:e,prev:void 0,next:void 0,headType:this.computeHead(e,r.prev,r.next)},this.piecesByTile.set(i,n),this.pieces.add(n),this.connectPiece(n,r.prev,r.next),this.updateOverlayData(n),n.prev&&this.updateOverlayData(n.prev),n.next&&this.updateOverlayData(n.next)}else{if(!n)throw new Error(`Bridge piece was alredy removed at tile (${i.rx},${i.ry})`);var s=n.prev;r=n.next;this.disconnectPiece(n),this.piecesByTile.delete(i),this.pieces.delete(n),s&&this.updateOverlayData(s),r&&this.updateOverlayData(r)}}},i.onChange.subscribe(this.handleTileOccupationUpdate)}getPieceAtTile(e){return this.piecesByTile.get(e)}handlePieceHealthChange(e){this.updateOverlayData(e),e.prev&&this.updateOverlayData(e.prev),e.next&&this.updateOverlayData(e.next)}findDominoPieces(e){let t=[],i=!1,r=e.next;if(e.headType===c.None||r)for(;r;){if(t.push(r),r.headType!==c.None){i=!0;break}r=r.next}else i=!0;if(i){i=!1,t.length=0;let r=e.prev;if(e.headType===c.None||r)for(;r;){if(t.push(r),r.headType!==c.None){i=!0;break}r=r.prev}else i=!0;if(i)return[]}return t}findBridgeAdjacentTiles(e){var t=e.isXBridge(),i=new l.Vector2(Number(t),Number(!t));let r=new l.Vector2(e.tile.rx,e.tile.ry);return t=r.clone().sub(i),t=this.tiles.getByMapCoords(t.x,t.y),i=r.clone().add(i),{prev:t,next:this.tiles.getByMapCoords(i.x,i.y)}}connectPiece(e,t,i){t&&(e.prev=this.getPieceAtTile(t),e.prev&&(e.prev.next=e)),i&&(e.next=this.getPieceAtTile(i),e.next&&(e.next.prev=e))}disconnectPiece(e){e.next&&(e.next.prev=void 0,e.next=void 0),e.prev&&(e.prev.next=void 0,e.prev=void 0)}computeHead(e,t,i){var s=e.tile;return e.isHighBridge()?(s=s.z+e.tileElevation,t?.z===s?c.Start:i?.z===s?c.End:c.None):r.BridgeOverlayTypes.isLowBridgeHead(e.overlayId)?r.BridgeOverlayTypes.isLowBridgeHeadStart(e.overlayId)?c.Start:c.End:c.None}updateOverlayData(e){let t=e.obj,i=e.prev,s=e.next,n=!1;var a=t.isXBridge(),o=r.BridgeOverlayTypes.getOverlayBridgeType(t.overlayId);if(r.BridgeOverlayTypes.isLowBridgeHead(t.overlayId)){let e=0;r.BridgeOverlayTypes.isLowBridgeHeadStart(t.overlayId)?(e=a?20:22,s||e++):(e=a?18:24,i||e++),t.overlayId=(o===r.OverlayBridgeType.Wood?r.BridgeOverlayTypes.minLowBridgeWoodId:r.BridgeOverlayTypes.minLowBridgeConcreteId)+e,t.value=e,n=!0}else{let d;var l,h,u=(t.healthTrait?.health??100)<=50;d=e.headType!==c.None?e.headType===c.Start?s?u?6:(s.obj.healthTrait?.health??100)<=50?5:0:a?8:7:i?u?6:(i.obj.healthTrait?.health??100)<=50?4:0:a?7:8:(a||(h=i,i=s,s=h),i||s?i?s?(l=(i.obj.healthTrait?.health??100)<=50,h=(s.obj.healthTrait?.health??100)<=50,u||l&&h?6:l?4:h?5:0):8:7:0),a||(d+=9),t.isHighBridge()?t.value=d:(t.overlayId=(o===r.OverlayBridgeType.Wood?r.BridgeOverlayTypes.minLowBridgeWoodId:r.BridgeOverlayTypes.minLowBridgeConcreteId)+d,t.value=d,n=!0)}n&&(t.name=this.rules.getOverlayName(t.overlayId))}findClosestBridgeSpec(e){let t=new n.RadialTileFinder(this.tiles,this.mapBounds,e,{width:1,height:1},1,3,(t=>{if(t.z!==e.z)return!1;let i=this.tileOccupation.getBridgeOnTile(t);return!(!i?.isLowBridge()||this.getPieceAtTile(i.tile)?.headType===c.None)||!!this.tileSets.isHighBridgeBoundaryTile(t.tileNum)}));var i=t.getNextTile();if(i){let e,t,n,f;var o=!this.tileOccupation.getBridgeOnTile(i);let y;if(o){var l=this.findHighBridgeBoundary(i);if(!l)return;e=l.tile,t=r.OverlayBridgeType.Concrete,this.tileSets.getSetNum(i.tileNum)===this.tileSets.getGeneralValue("WoodBridgeSet")&&(t=r.OverlayBridgeType.Wood),n=l.headType===a.HighBridgeHeadType.TopLeft||l.headType===a.HighBridgeHeadType.BottomRight,f=l.headType===a.HighBridgeHeadType.TopLeft||l.headType===a.HighBridgeHeadType.TopRight,y=l.headType}else{e=this.tileOccupation.getBridgeOnTile(i).tile;let s=this.getPieceAtTile(e);if(!s)throw new Error("Bridge head is not defined");var h=r.BridgeOverlayTypes.getOverlayBridgeType(s.obj.overlayId);if(h===r.OverlayBridgeType.NotBridge)throw new Error("Expected a bridge type");t=h,n=s.obj.isXBridge(),f=s.headType===c.Start}var u=Number(n)*(f?1:-1),d=Number(!n)*(f?1:-1);let T;if(o){if(i=new s.DirectionalTileFinder(this.tiles,this.mapBounds,e,1,100,u,d,(t=>t.z===e.z&&this.tileSets.isHighBridgeBoundaryTile(t.tileNum))).getNextTile(),h=this.tileSets.getSetNum(e.tileNum),!i||this.tileSets.getSetNum(i.tileNum)!==h)return;if(!(i=this.findHighBridgeBoundary(i)))return;if(y!==this.tileSets.getOppositeHighBridgeHeadType(i.headType))return;T=i.tile}else{let t,i=1;for(var g=e.rx,p=e.ry;!t;){var m=this.tiles.getByMapCoords(g+u*i,p+d*i);if(!m)return;let e=this.getPieceAtTile(m);if(e&&e.obj.isXBridge()!==n)return;e?.headType===(f?c.End:c.Start)&&(t=e),i++}T=t.obj.tile}return{start:f?e:T,end:f?T:e,type:t,isHigh:o}}}findHighBridgeBoundary(e){var t,i=this.tileSets.getTile(e.tileNum),r=this.tileSets.getHighBridgeHeadType(i.index);if(void 0!==r){let i=0,s=0;switch(r){case a.HighBridgeHeadType.TopLeft:i=1,s=0;break;case a.HighBridgeHeadType.BottomRight:i=-1,s=0;break;case a.HighBridgeHeadType.TopRight:i=0,s=1;break;case a.HighBridgeHeadType.BottomLeft:i=0,s=-1;break;case a.HighBridgeHeadType.MiddleTlBr:i=1,s=0;break;case a.HighBridgeHeadType.MiddleTrBl:i=0,s=1;break;default:throw new Error(`Unhandled head type "${r}"`)}let l=new n.RadialTileFinder(this.tiles,this.mapBounds,e,{width:1,height:1},0,5,(t=>t.terrainType===o.TerrainType.Pavement&&t.z>=e.z&&t.tileNum===e.tileNum)),c=[];for(;t=l.getNextTile();)c.push(t);if(c.sort(((e,t)=>100*(i?i*(t.rx-e.rx):s*(t.ry-e.ry))+(i?e.ry-t.ry:e.rx-t.rx))),c.length)return{tile:c[0],headType:r}}else console.warn(`Couldn't find a valid bridge type for index "${i.index}" @ ${e.rx},`+e.ry)}canBeRepaired(e){let t,r=this.createBridgePieceTileFinder(e,(t=>!(this.getPieceAtTile(t)||this.tileSets.isHighBridgeMiddleTile(t.tileNum)&&t.z===e.start.z))),s=!1;for(var n=e.start.rx!==e.end.rx?i.TileDirection.BottomLeft:i.TileDirection.BottomRight;t=r.getNextTile();){s=!0;let i=this.tiles.getNeighbourTile(t,n),r=this.tiles.getNeighbourTile(i,n);if(e.isHigh){if([t,i,r].find((e=>this.tileOccupation.getGroundObjectsOnTile(e).some((e=>e.isBuilding()&&!e.rules.invisibleInGame)))))return!1}else if([t,i,r].find((e=>this.tileOccupation.getGroundObjectsOnTile(e).some((e=>!(e.isUnit()||e.isSmudge()||e.isOverlay()&&e.isBridgePlaceholder()))))))return!1}return s}getPieceTiles(e){var t=e.obj.tile,r=e.obj.isXBridge()?i.TileDirection.BottomLeft:i.TileDirection.BottomRight,s=this.tiles.getNeighbourTile(t,r);return[t,s,this.tiles.getNeighbourTile(s,r)]}findMapHighBridgeHeadTiles(){var e,t=this.tiles.getAllBridgeSetTiles();let i=new Set;for(e of t){var r=this.findHighBridgeBoundary(e);r&&i.add(r.tile)}return i}findBridgeSpecsForHeadTiles(e){let t=new Map;for(var i of e)(i=this.findClosestBridgeSpec(i))&&t.set(i.start.id+":"+i.end.id,i);return[...t.values()]}findAllBridgeTiles(e){let t=[];var r,s=e.start.rx!==e.end.rx?i.TileDirection.BottomLeft:i.TileDirection.BottomRight;for(r of this.findNonBuildablePieceTiles(e)){var n=this.tiles.getNeighbourTile(r,s),a=this.tiles.getNeighbourTile(n,s);t.push(r,n,a)}return t}findBridgePieces(e){let t=this.createBridgePieceTileFinder(e,(e=>!!this.getPieceAtTile(e))),i=[];for(var r;r=t.getNextTile();)i.push(this.getPieceAtTile(r));return i}findDestroyedPieceTiles(e){let t=this.createBridgePieceTileFinder(e,(t=>!(this.getPieceAtTile(t)||this.tileSets.isHighBridgeMiddleTile(t.tileNum)&&t.z===e.start.z))),i=[];for(var r;r=t.getNextTile();)i.push(r);return i}findNonBuildablePieceTiles(e){let t=this.createBridgePieceTileFinder(e,(t=>!(this.tileSets.isHighBridgeMiddleTile(t.tileNum)&&t.z===e.start.z))),i=[];for(var r;r=t.getNextTile();)i.push(r);return i}createBridgePieceTileFinder(e,t){var i=e.start.rx!==e.end.rx;return new s.DirectionalTileFinder(this.tiles,this.mapBounds,e.start,1,(i?e.end.rx-e.start.rx:e.end.ry-e.start.ry)-1,Number(i),Number(!i),t)}dispose(){this.pieces.forEach((e=>{e.prev=void 0,e.next=void 0})),this.tileOccupation.onChange.unsubscribe(this.handleTileOccupationUpdate)}})}}})),System.register("util/QuadTree",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){i=new THREE.Vector2,e("QuadTree",class e{constructor(e,t){this.box=e,this.config=t,this.parentMap=new Map,this.objects=[]}add(e,t=!0){var i=this.config.getKey(e);if(this.box.containsPoint(i)){if(!this.regions)return this.parentMap.get(e)?.remove(e),this.parentMap.set(e,this),this.objects.push({key:i,value:e}),t&&this.update(),!0;for(var r of this.regions)if(r.add(e,t))return!0}return!1}remove(e,t=!0){let i=this.parentMap.get(e);i&&(i===this?(this.parentMap.delete(e),this.objects.splice(this.objects.findIndex((t=>t.value===e)),1),t&&this.parent?.update()):i.remove(e,t))}updateObject(e){let t=this.parentMap.get(e);if(t){var i=this.config.getKey(e);if(t.box.containsPoint(i))t.objects.find((t=>t.value===e)).key=i;else{t.remove(e,!1);let i=t.parent;for(;i&&!i.add(e,!1);)i=i.parent}}}queryRange(e,t=[]){if(this.box.intersectsBox(e))if(this.regions)for(var i of this.regions)i.queryRange(e,t);else for(var r of this.objects)e.containsPoint(r.key)&&t.push(r.value);return t}update(){let e=0;if(this.regions){for(var t of this.regions)e+=t.update();e<=this.config.joinThreshold&&this.join()}else e=this.objects.length,e>=this.config.splitThreshold&&this.split()&&this.update();return e}split(){if(this.regions||this.config.maxDepth<=1)return!1;var t,i,r={getKey:this.config.getKey,joinThreshold:this.config.joinThreshold,splitThreshold:this.config.splitThreshold,maxDepth:this.config.maxDepth-1},s=this.generateRegions(),n=this.objects;for(t of(this.objects=[],this.regions=[],s)){let i=new e(t,r);i.parentMap=this.parentMap,this.regions.push(i),i.parent=this}for(i of n)this.parentMap.delete(i.value),this.add(i.value,!1);return!0}join(){if(!this.regions)return!1;for(var e of this.regions)for(var t of(e.join(),e.parent=void 0,e.objects))this.objects.push(t),this.parentMap.set(t.value,this);return!(this.regions=void 0)}generateRegions(){let e=[this.box.clone()];var t=this.box.getCenter(i);let r=e[0],s=r.clone();r.max.x=t.x,s.min.x=t.x,e.push(s);for(let i=0,n=e.length;ithis.occludeTile(t,e)))}removeOccluder(e){this.calculateTilesForGameObject(e).forEach((t=>this.unoccludeTile(t,e)))}calculateTilesForGameObject(e){var t=e.art.occupyHeight,r=Math.max(0,t-2);let s=[];var n=e.getFoundation();for(let e=1;e<=r;e++)for(let t=0;te.x===t&&e.y===i));-1!==a&&s.splice(a,1)}var o,l,c=e.tile;let h=[];for({x:o,y:l}of s){var u=this.tiles.getByMapCoords(c.rx+o,c.ry+l);u&&h.push(u)}return h}occludeTile(e,t){this.tileOcclusion[e.rx][e.ry].add(t),e.occluded=!0}unoccludeTile(e,t){let i=this.tileOcclusion[e.rx][e.ry];i.delete(t),e.occluded=0{var i=t.getSetNum(e.tileNum);r.set(e,i),t.isCLAT(i)&&(i=t.getLAT(i),r.set(e,i),e.tileNum=t.getTileNumFromSet(i))})),e.forEach((s=>{var n=r.get(s);if(t.isLAT(n)){let h=0;var a=e.getNeighbourTile(s,i.TileDirection.TopRight),o=e.getNeighbourTile(s,i.TileDirection.BottomRight),l=e.getNeighbourTile(s,i.TileDirection.BottomLeft),c=e.getNeighbourTile(s,i.TileDirection.TopLeft);a&&t.canConnectTiles(n,r.get(a))&&(h+=1),o&&t.canConnectTiles(n,r.get(o))&&(h+=2),l&&t.canConnectTiles(n,r.get(l))&&(h+=4),c&&t.canConnectTiles(n,r.get(c))&&(h+=8),0t.id===e.tagId)))}var f=this.tiles.getMapSize(),y=Math.max(f.width,f.height)/5;this.technosByTile=new o.QuadTree(new d.Box2(new u.Vector2(0,0),new u.Vector2(f.width,f.height)),{getKey:e=>{var t=e.isBuilding()?e.centerTile:e.tile;return new u.Vector2(t.rx,t.ry)},maxDepth:this.computeQuadDepth(y),splitThreshold:10,joinThreshold:5}),this.mapFile.theaterType!==h.TheaterType.Snow&&c.AutoLat.calculate(this.tiles,t)}get startingLocations(){return this.mapFile.startingLocations}computeQuadDepth(e){if(e<=1)return 1;let t=0;for(;1<=e/2;)e/=2,t++;return t+(1t.number===e))}getTileAtWaypoint(e){var t=this.getWaypoint(e);if(t&&(t=this.tiles.getByMapCoords(t.rx,t.ry)))return t}isWithinBounds(e){return this.mapBounds.isWithinBounds(e)}clampWithinBounds(e){var t=this.mapBounds.clampWithinBounds(e);let i=this.tiles.getByDisplayCoords(t.dx,t.dy);if(i&&this.mapBounds.isWithinBounds(i)){let e=i;for(;e&&this.mapBounds.isWithinBounds(e);)i=e,e=this.tiles.getByDisplayCoords(e.dx,e.dy+2)}else{let e=0;for(;!i||!this.mapBounds.isWithinBounds(i);){if(30t.objects.size>e.objects.size?t:e),o[0]);o.splice(o.indexOf(l),1);let c=[],h=this.findCenterTile([...l.objects]);l.objects.forEach((e=>{var i=this.map.tiles.getByMapCoords(t.rx+e.tile.rx-h.rx,t.ry+e.tile.ry-h.ry),o=i?.onBridgeLandType?this.map.tileOccupation.getBridgeOnTile(i):void 0;if(!i||!this.map.mapBounds.isWithinBounds(i)||a.has(i)&&!this.tileHasRoom(e,a.get(i))||e.rules.movementZone===r.MovementZone.Fly&&!e.rules.airportBound&&!this.map.terrain.getPassableSpeed(i,s.SpeedType.Amphibious,!!o)||e.rules.movementZone!==r.MovementZone.Fly&&!this.isEligibleTile(i,o,n,t))c.push(e);else{let t=a.get(i);void 0===t&&(t=[],a.set(i,t)),t.push(e)}})),o.forEach((e=>c.push(...e.objects)));let u,d=new i.RadialTileFinder(this.map.tiles,this.map.mapBounds,t,{width:1,height:1},1,5,(()=>!0));for(;c.length&&(u=d.getNextTile());){var g=c[0],p=this.map.tileOccupation.getBridgeOnTile(u);if((!a.has(u)||this.tileHasRoom(g,a.get(u)))&&(g.rules.movementZone!==r.MovementZone.Fly||g.rules.airportBound||this.map.terrain.getPassableSpeed(u,s.SpeedType.Amphibious,!!p))&&(g.rules.movementZone===r.MovementZone.Fly||this.isEligibleTile(u,p,n,t))){let e=a.get(u);void 0===e&&(e=[],a.set(u,e)),e.push(c.shift())}}let m=new Map;if(a.forEach(((e,t)=>{e.forEach((e=>m.set(e,t)))})),c.forEach((e=>m.set(e,t))),m.size!==e.length)throw new Error("We should have computed a number of positions equal to the number of input objects");return m}tileHasRoom(e,t){if(e.isInfantry()){if(t.find((e=>!e.isInfantry())))return!1;var i=e.rules.movementZone===r.MovementZone.Fly?1:3;return!(t.filter((e=>e.isInfantry())).length>=i)}return!t.length}isEligibleTile(e,t,i,r){return i?.isHighBridge()||t?.isHighBridge()?e.z+(t?.tileElevation??0)===r.z+(i?.tileElevation??0):!(!i&&!t)||Math.abs(e.z-r.z)<2}clusterObjects(e){let t=new Map;e.forEach((e=>{var i=e.tile.rx+"_"+e.tile.ry;t.set(i,[...t.get(i)||[],e])}));let i=[],r=new Set(e);for(;r.size;){let e=new Set,a=[];var s=[...r][0].tile;for(t.get(s.rx+"_"+s.ry).forEach((e=>{a.push(e)}));a.length;){var n=a.shift();e.add(n),r.delete(n);for(let e=-1;e<=1;e++)for(let i=-1;i<=1;i++)if(e||i){let s=t.get(n.tile.rx+e+"_"+(n.tile.ry+i));s&&s.length&&s.forEach((e=>{r.has(e)&&(r.delete(e),a.push(e))}))}}i.push({objects:e})}return i}findCenterTile(e){let t=0,i=0;e.forEach((e=>{t+=e.tile.rx,i+=e.tile.ry})),t=Math.round(t/e.length),i=Math.round(i/e.length);let r=this.map.tiles.getByMapCoords(t,i);if(!r&&(r=e.find((e=>Math.abs(e.tile.rx-t)<=1&&Math.abs(e.tile.ry-i)<=1))?.tile,!r))throw new Error("At least one adjacent object should have been found");return r}})}}})),System.register("game/map/tileFinder/RandomTileFinder",["game/math/GameMath"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("RandomTileFinder",class{constructor(e,t,r,s,n,a,o=!1,l=!0){this.tiles=e,this.mapBounds=t,this.startTile=r,this.maxDistance=s,this.rng=n,this.predicate=a,this.includeStartTile=o,this.checkBounds=l,this.pool=[],this.pool=new Array(i.GameMath.pow(2*this.maxDistance+1,2)).fill(0).map(((e,t)=>t)),this.generator=this.generate()}getNextTile(){return this.generator.next().value}*generate(){for(var e=(e,t)=>{var i=this.tiles.getByMapCoords(e,t);if(this.includeStartTile||i!==this.startTile)return i&&(!this.checkBounds||this.mapBounds.isWithinBounds(i))&&this.predicate(i)?i:void 0},t=2*this.maxDistance+1;this.pool.length;){var i=1{if(s?.includes(t))return!1;var i=l.tileOccupation.getBridgeOnTile(t);return(i&&this.movePositionHelper.isEligibleTile(t,i,c,e.tile)||this.movePositionHelper.isEligibleTile(t,void 0,c,e.tile))&&(!n||0===t.rampType)}));for(;;){var u=h.getNextTile();if(!u)break;if(a=u,o=l.tileOccupation.getBridgeOnTile(u),o&&!this.movePositionHelper.isEligibleTile(u,o,c,e.tile)&&(o=void 0),!t.has(u)){let t=l.terrain.findObstacles({tile:u,onBridge:o},e);if(i&&i.length&&(t=t.filter((e=>!i.includes(e.obj)))),!t.length)break}}if(a)return{tile:a,onBridge:o}}})}}})),System.register("game/gameobject/task/ScatterTask",["game/gameobject/task/move/MoveTask","game/gameobject/task/system/Task","game/gameobject/unit/ScatterPositionHelper","game/type/MovementZone"],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e}],execute:function(){a=class extends r.Task{constructor(e,t,i){super(),this.game=e,this.target=t,this.options=i}onStart(e){if(!e.moveTrait.isDisabled()&&e.rules.movementZone!==n.MovementZone.Fly){let r,n;if(this.target)({tile:r,toBridge:n}=this.target);else{var t=new s.ScatterPositionHelper(this.game).findPositions([e],this.options).get(e);if(!t)return;r=t.tile,n=!!t.onBridge}this.children.push(new i.MoveTask(this.game,r,n,{closeEnoughTiles:0,ignoredBlockers:this.options?.ignoredBlockers}))}}onTick(e){return!0}},e("ScatterTask",a)}}})),System.register("game/trait/interface/NotifyAttack",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){(i=i||{}).onAttack=Symbol(),e("NotifyAttack",i)}}})),System.register("game/gameobject/unit/CollisionType",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.None=0]="None",t[t.Ground=1]="Ground",t[t.Wall=2]="Wall",t[t.Cliff=3]="Cliff",t[t.OnBridge=4]="OnBridge",t[t.UnderBridge=5]="UnderBridge",t[t.Shore=6]="Shore",e("CollisionType",i)}}})),System.register("game/Target",["game/Coords","game/type/LandType"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("Target",class{constructor(e,t,i){this.tileOccupation=i,this.isOre=!1,e?e.isOverlay()&&e.isBridge()?(this.bridge=e,this.tile=t):e.isOverlay()&&e.isTiberium()?(this.isOre=!0,this.tile=e.tile):(this.obj=e,this.tile=e.isBuilding()?e.centerTile:e.tile):(t.landType===r.LandType.Tiberium&&(this.isOre=!0),this.tile=t)}equals(e){return this.obj===e.obj&&this.tile===e.tile&&this.bridge===e.bridge&&this.isOre===e.isOre}getWorldCoords(){return this.obj?this.obj.position.worldPosition:i.Coords.tile3dToWorld(this.tile.rx+.5,this.tile.ry+.5,this.tile.z+(this.bridge?.tileElevation??0))}isBridge(){return!this.obj&&!!this.bridge}getBridge(){return this.bridge||(this.obj?.isUnit()&&this.obj.onBridge?this.tileOccupation.getBridgeOnTile(this.obj.tile):void 0)}})}}})),System.register("game/math/geometry",["util/math","game/math/GameMath","game/math/Matrix4","game/math/Quaternion","game/math/Vector2","game/math/Vector3"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g;function p(e){return e*THREE.Math.RAD2DEG}function m(e){return e*THREE.Math.DEG2RAD}function f(e){return Math.round(p(e.angle()))}function y(e,t){var s=p(2*r.GameMath.acos(Math.abs(i.clamp(e.dot(t),-1,1))));return Math.round(s)}function T(e,t=new n.Quaternion){return t.setFromRotationMatrix(c.lookAt(e,h,u))}return t&&t.id,e("radToDeg",p),e("degToRad",m),e("rotateVec2",(function(e,t){var i=m(Math.floor(t));return e.rotateAround(l,i)})),e("angleDegFromVec2",f),e("angleDegBetweenVec2",(function(e,t){var i=f(e),r=f(t);return Math.min((i-r+360)%360,(r-i+360)%360)})),e("angleDegBetweenVec3",(function(e,t){return y(T(e,d),T(t,g))})),e("quaternionFromVec3",T),e("rotateVec3Towards",(function(e,t,i){var r=e.length(),s=T(t,d),n=T(e,g);!function(e,t,i){var r=y(e,t);0!==r&&(r=Math.min(1,i/r),e.slerp(t,r))}(n,s,i),e.set(0,0,1).applyQuaternion(n).setLength(r)})),{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e}],execute:function(){l=new a.Vector2,c=new s.Matrix4,h=new o.Vector3(0,0,0),u=new o.Vector3(0,1,0),d=new n.Quaternion,g=new n.Quaternion}}})),System.register("game/gameobject/unit/FacingUtil",["game/math/Vector2","game/math/geometry"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("FacingUtil",class e{static tick(e,t,i){if(e===t)return{facing:e,delta:0};var r=(e-t+360)%360,s=(t-e+360)%360;return Math.min(r,s)!e.isSmudge()&&!e.isUnit()))}getTiberiumType(){var e=i.OreOverlayTypes.getOverlayTibType(this.gameObject.overlayId);switch(e){case r.OverlayTibType.Ore:return s.TiberiumType.Ore;case r.OverlayTibType.Gems:return s.TiberiumType.Gems;case r.OverlayTibType.Vinifera:return s.TiberiumType.Ore;default:throw new Error("Unsupported tiberium type "+e)}}collectBail(){var e=this.getBailCount();if(e<=0)throw new Error("Attempted to collect an ore bail, but there are none left");return this.gameObject.value--,1e.isOverlay()&&e.isTiberium()));if(i){var a=Math.ceil(n.TiberiumTrait.maxBails/2);a=e.startsWith("S_CLSN")?a:r.generateRandomInt(1,a);let t=i.traits.get(n.TiberiumTrait);t.removeBails(a),t.getBailCount()||r.unspawnObject(i)}}}spawnSmudges(e,t,n){if(t.landType===s.LandType.Clear&&0===t.rampType&&n.map.mapBounds.isWithinBounds(t)&&!n.map.getObjectsOnTile(t).find((e=>!e.isUnit()))){var a=n.art.hasObject(e,i.ObjectType.Animation)?n.art.getAnimation(e):void 0;if(a?.crater){let e=a?.forceBigCraters?2:1,s=a?.scorch,o=[r.TileDirection.Bottom,r.TileDirection.BottomLeft,r.TileDirection.BottomRight].every((e=>n.map.tiles.getNeighbourTile(t,e)));a=[...n.rules.smudgeRules.values()].filter((t=>(t.crater&&t.width===e&&t.height===e||s&&t.burn)&&!((1e.tile===t))||!e.healthTrait||e.isUnit()&&e.zone===s.ZoneType.Air&&i!==s.ZoneType.Air||!e.isUnit()&&i===s.ZoneType.Air||e.isBuilding()&&e.rules.invisibleInGame||(e.isTechno()||e.isTerrain())&&e.rules.immune&&!this.rules.temporal||e.isTechno()&&!e.rules.warpable&&this.rules.temporal||this.rules.radiation&&(!e.isUnit()||e.rules.immuneToRadiation)||this.rules.psychicDamage&&(!e.isUnit()||e.rules.immuneToPsionics)||e.isOverlay()&&o.BridgeOverlayTypes.isLowBridgeHead(e.overlayId))}computeDamage(e,t,i=!1){let n=e;if(0{e[l.NotifyAttack.onAttack](t,r?.obj,n)})),t.onAttack(n,r),n.events.dispatch(new C.ObjectAttackedEvent(t,r,a)),t.isTechno()&&!this.rules.temporal&&this.supressOrScatterTarget(t,n),!o.health&&(t.isInfantry()&&(t.infDeathType=this.rules.infDeath),this.rules.temporal&&(t.deathType=i.DeathType.Temporal),t.isUnit()&&t.crashableTrait&&t.zone===s.ZoneType.Air&&!this.rules.temporal?t.crashableTrait.crash(r):n.destroyObject(t,r,void 0,a),!0)}supressOrScatterTarget(e,t){e.rules.fraidycat||e.isVehicle()&&!e.owner.isCombatant()&&e.rules.insignificant?e.unitOrderTrait.hasTasks()||(e.isInfantry()&&(e.isPanicked=!0),e.unitOrderTrait.addTask(new a.ScatterTask(t)),e.isInfantry()&&e.unitOrderTrait.addTask(new n.CallbackTask((()=>e.isPanicked=!1)).setCancellable(!1))):e.isInfantry()&&e.suppressionTrait?.supress()}createDummyWeaponInfo(){return{minRange:0,range:0,speed:Number.POSITIVE_INFINITY,type:T.WeaponType.Primary,rules:new v.WeaponRules(new b.IniSection("Dummy")),projectileRules:new S.ProjectileRules(f.ObjectType.Projectile,new b.IniSection("Dummy")),warhead:this}}detonate(e,t,i,r,n,a,o,l,c,f,T,v,b,S=!1){var C,E,x,O=c?.weapon??this.createDummyWeaponInfo(),A=c?.obj,M=c?.player,R=b?b/g.Coords.LEPTONS_PER_TILE:this.rules.cellSpread,P=this.rules.percentAtMax;let I=new Set,k=new Map,B=new u.RangeHelper(e.map.tileOccupation),j=new d.RadialTileFinder(e.map.tiles,e.map.mapBounds,i,{width:1,height:1},0,Math.ceil(R),(()=>!0));for(;C=j.getNextTile();)for(E of e.map.getObjectsOnTile(C))if((!I.has(E)||E.isBuilding())&&(o!==h.CollisionType.UnderBridge||!E.isUnit()||!E.onBridge)&&!(A&&E.isTechno()&&E.rules.typeImmune&&E.owner===M&&E.name===A.name)&&this.canDamage(E,C,a)&&(!E.isOverlay()||!(!o&&.1R||(I.add(E),k.set(E,E.isBuilding()?(k.get(E)||[]).concat(t):[t]))}}let N,L=!1;for(x of I)if(!x.isDestroyed&&!x.isCrashing){var D,F=this.computeDamage(t,x,T);if(F)for(var _ of k.get(x)){let t=F;if(0void 0!==e.position,l=e=>void 0!==e.addScalar,e("RangeHelper",class{constructor(e){this.tileOccupation=e}isInWeaponRange(e,t,i,r,s){var a=s??e;if(i.rules.limboLaunch&&2t||0{[g.MoveResult.Success,g.MoveResult.CloseEnough,g.MoveResult.Cancel].includes(e.moveTrait.lastMoveResult)||this.children.push(new c.WaitMinutesTask(1/60))})))}return!0}var i=this.game.rules.general.closeEnough,h=this.rangeHelper.tileDistance(e.tile,this.target)<=i;if(e.tile!==this.target&&(e.tile.landType!==n.LandType.Tiberium||!h||this.strictTarget)){if(e.tile!==this.target&&h&&e.tile.landType!==n.LandType.Tiberium)if(h=this.findClosestReachableOreSite(e,e.tile,!1,!0))this.target=h,t.lastOreSite=this.target;else{if(!this.forceMoveTried)return this.forceMoveTried=!0,this.children.push(new a.MoveTask(this.game,this.target,!1,{closeEnoughTiles:0,strictCloseEnough:!0})),!1;if(this.forceMoveTried=!1,!t.isEmpty())return this.returnOreIfPossible(e),!0;if(!(h=this.findClosestReachableOreSite(e,e.tile,!0,!0)))return t.status=s.HarvesterStatus.LookingForOreSite,!0;this.target=h,t.lastOreSite=this.target}return this.children.push(new a.MoveTask(this.game,this.target,!1,{closeEnoughTiles:i}),new d.CallbackTask((()=>{[g.MoveResult.Success,g.MoveResult.CloseEnough,g.MoveResult.Cancel].includes(e.moveTrait.lastMoveResult)||this.children.push(new c.WaitMinutesTask(5/60))}))),!1}this.target=e.tile,t.lastOreSite=this.target,t.status=s.HarvesterStatus.Harvesting,this.forceMoveTried=!1,this.strictTarget=!1}if(t.status!==s.HarvesterStatus.Harvesting)return!1;{if(t.isFull())return this.returnOreIfPossible(e),!0;let r=this.game.map.getObjectsOnTile(e.tile).find((e=>e.isOverlay()&&e.isTiberium()));if(!r)return this.findClosestReachableOreSite(e,t.lastOreSite??e.tile,!1)||t.isEmpty()?(t.status=s.HarvesterStatus.MovingToOreSite,this.onTick(e)):(this.returnOreIfPossible(e),!0);let n=r.traits.get(o.TiberiumTrait);if(i=n.collectBail(),n.getBailCount()||this.game.unspawnObject(r),void 0!==i)if(i===l.TiberiumType.Ore)t.ore++;else{if(i!==l.TiberiumType.Gems)throw new Error("Unsupported tiberium type "+i);t.gems++}return![...e.owner.buildings].some((e=>e.rules.refinery))&&!this.explicitOrder||(this.children.push(new c.WaitMinutesTask(1/60)),!1)}}findClosestReachableOreSite(e,t,i,s=!1){let a=e.rules.movementZone===p.MovementZone.Fly;var o,l=t=>t.landType===n.LandType.Tiberium&&(!s||a||!this.game.map.terrain.findObstacles({tile:t,onBridge:void 0},e).length);if(l(t))return t;let c=1;if(!i){let e=new r.RadialTileFinder(this.game.map.tiles,this.game.map.mapBounds,t,{width:1,height:1},c,c,l),i=[];for(;o=e.getNextTile();)i.push(o);if(i.length){let e=i.map((e=>{var t=this.game.map.getObjectsOnTile(e).find((e=>e.isOverlay()&&e.isTiberium()));if(!t)throw new Error(`Ore should exist on tile ${e.rx},${e.ry} b/c of landType`);return{tile:e,ore:t}}));return e.sort(((e,i)=>1e3*(i.ore.value-e.ore.value)+(m[1+i.tile.ry-t.ry][1+i.tile.rx-t.rx]-m[1+e.tile.ry-t.ry][1+e.tile.rx-t.rx]))),e[0].tile}c=2}var h=i?this.scanFarRadius:this.scanNearRadius;return new r.RadialTileFinder(this.game.map.tiles,this.game.map.mapBounds,t,{width:1,height:1},c,h,l).getNextTile()}getRefineryOnTile(e){return this.game.map.getObjectsOnTile(e).find((e=>e.isBuilding()&&e.rules.refinery))}returnOreIfPossible(e){1===e.unitOrderTrait.getTasks().length&&e.unitOrderTrait.addTask(new h.ReturnOreTask(this.game))}getTargetLinesConfig(e){return{pathNodes:this.initialTarget?[{tile:this.initialTarget,onBridge:void 0}]:[]}}},e("GatherOreTask",f)}}})),System.register("game/gameobject/task/harvester/ReturnOreTask",["game/gameobject/task/system/Task","game/gameobject/unit/RangeHelper","game/map/tileFinder/RadialTileFinder","game/gameobject/task/move/MoveTask","game/gameobject/task/TurnTask","game/gameobject/task/system/WaitMinutesTask","engine/type/TiberiumType","game/gameobject/trait/HarvesterTrait","game/gameobject/task/harvester/TeleportMoveToRefineryTask","game/gameobject/task/harvester/GatherOreTask","game/gameobject/task/system/CallbackTask","game/gameobject/trait/MoveTrait","game/gameobject/unit/ZoneType","game/math/Vector2"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p,m,f;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e},function(e){m=e}],execute:function(){f=class extends i.Task{constructor(e,t,i=!1,s=!1){super(),this.game=e,this.forceTarget=t,this.resetLastOreSite=i,this.explicitOrder=s,this.useChildTargetLines=!0,this.preventOpportunityFire=!1,this.rangeHelper=new r.RangeHelper(e.map.tileOccupation)}onStart(e){if(!e.isVehicle()||!e.harvesterTrait)throw new Error(`Unit ${e.name} is not a harvester.`);e.harvesterTrait.status=c.HarvesterStatus.MovingToRefinery,this.resetLastOreSite&&(e.harvesterTrait.lastOreSite=void 0)}onEnd(e){this.target?.isSpawned&&(this.target.dockTrait.undockUnit(e),this.target.dockTrait.unreserveDockForUnit(e)),e.harvesterTrait.status!==c.HarvesterStatus.LookingForRefinery&&(e.harvesterTrait.status=c.HarvesterStatus.Idle)}onTick(e){if(this.isCancelling())return!0;let t=e.harvesterTrait;if(t.status===c.HarvesterStatus.LookingForRefinery)return!0;if(t.status===c.HarvesterStatus.MovingToRefinery){if(!this.target||!this.isValidTargetRefinery(this.target,e)||e.tile!==this.findRefineryDockingTile(this.target)){var i=this.forceTarget??this.findClosestReachableRefinery(e);if(!i)return t.status=c.HarvesterStatus.LookingForRefinery,!0;this.target&&this.target!==i&&this.target.dockTrait.hasReservedDockForUnit(e)&&this.target.dockTrait.unreserveDockForUnit(e),this.target=i}let a=this.target.dockTrait.getFirstAvailableDockNumber(),l=!1;void 0===a&&(a=this.target.dockTrait.getFirstEmptyDockNumber(),void 0!==a&&(l=!this.target.dockTrait.hasReservedDockForUnit(e)));let u=this.findRefineryDockingTile(this.target);var r=this.rangeHelper.tileDistance(e,u);if(void 0===a||l||r>this.game.rules.general.harvesterTooFarDistance&&!this.explicitOrder){var s=this.findReachableQueueingTile(e);return!s||(e.tile!==s&&this.children.push(e.rules.teleporter?new h.TeleportMoveToRefineryTask(this.game,u,s,(()=>this.chronoMinerCanTeleport(e,u,this.target))):new n.MoveTask(this.game,s,!1),new d.CallbackTask((()=>{e.moveTrait.lastMoveResult===g.MoveResult.Fail?t.status=c.HarvesterStatus.LookingForRefinery:e.moveTrait.lastMoveResult===g.MoveResult.CloseEnough?this.children.push(new o.WaitMinutesTask(5/60)):e.moveTrait.lastMoveResult===g.MoveResult.Success&&this.children.push(new o.WaitMinutesTask(2/60))}))),!1)}if(this.target.dockTrait.hasReservedDockForUnit(e)||this.target.dockTrait.reserveDockAt(e,a),void 0===this.reservedDockNumber&&(this.reservedDockNumber=this.target.dockTrait.getReservedDockForUnit(e)),e.tile!==u)return this.children.push(e.rules.teleporter?new h.TeleportMoveToRefineryTask(this.game,u,void 0,(()=>this.chronoMinerCanTeleport(e,u,this.target))):new n.MoveTask(this.game,u,!1,{closeEnoughTiles:0,strictCloseEnough:!0}),new d.CallbackTask((()=>{e.moveTrait.lastMoveResult===g.MoveResult.Fail&&(t.status=c.HarvesterStatus.LookingForRefinery)}))),!1;t.status=c.HarvesterStatus.Docking}if(!this.isValidTargetRefinery(this.target,e))return t.status=c.HarvesterStatus.MovingToRefinery,this.forceTarget=void 0,this.onTick(e);if(t.status===c.HarvesterStatus.Docking){if(270!==e.direction)return this.children.push(new a.TurnTask(270)),!1;this.target.dockTrait.dockUnitAt(e,this.reservedDockNumber),this.reservedDockNumber=void 0,t.status=c.HarvesterStatus.PreparingToUnload}return t.status===c.HarvesterStatus.PreparingToUnload?(this.preventOpportunityFire=!0,this.children.push(new o.WaitMinutesTask(2/60)),t.status=c.HarvesterStatus.Unloading,!1):t.status===c.HarvesterStatus.Unloading&&(i=t.ore*this.game.rules.getTiberium(l.TiberiumType.Ore).value+t.gems*this.game.rules.getTiberium(l.TiberiumType.Gems).value,this.target.owner.credits+=i,r=[...this.target.owner.buildings].filter((e=>e.rules.orePurifier&&(!e.poweredTrait||!this.target.owner.powerTrait?.isLowPower()))).length,s=this.game.rules.general.purifierBonus,this.target.owner.credits+=r*Math.floor(i*s),t.ore=0,t.gems=0,1===e.unitOrderTrait.getTasks().length&&e.unitOrderTrait.addTask(new u.GatherOreTask(this.game)),!0)}isValidTargetRefinery(e,t){return e.isSpawned&&this.game.areFriendly(e,t)&&!e.warpedOutTrait.isActive()}findClosestReachableRefinery(e){let t=this.rangeHelper,i=[...e.owner.buildings].filter((e=>e.rules.refinery&&e.dockTrait&&!e.warpedOutTrait.isActive())).sort(((i,r)=>t.distance2(e,i)-t.distance2(e,r)));var r=i[0],s=i.find((e=>0this.game.rules.general.harvesterTooFarDistance?r:s}findReachableQueueingTile(e){if(this.target.art.queueingCell){var t=new m.Vector2(this.target.tile.rx,this.target.tile.ry).add(this.target.art.queueingCell);if((t=this.game.map.tiles.getByMapCoords(t.x,t.y))&&this.isValidQueueingTile(t,e))return t}return new s.RadialTileFinder(this.game.map.tiles,this.game.map.mapBounds,this.target.tile,this.target.getFoundation(),1,1,(t=>this.isValidQueueingTile(t,e))).getNextTile()}isValidQueueingTile(e,t){return t.zone===p.ZoneType.Air||0this.game.rules.general.chronoHarvTooFarDistance||r<=1||!this.isValidTargetRefinery(i,e)||0===i.dockTrait.getAvailableDockCount()&&!i.dockTrait.hasReservedDockForUnit(e))}},e("ReturnOreTask",f)}}})),System.register("game/gameobject/trait/interface/NotifySpawn",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){(i=i||{}).onSpawn=Symbol(),e("NotifySpawn",i)}}})),System.register("game/gameobject/trait/interface/NotifyTeleport",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){(i=i||{}).onBeforeTeleport=Symbol(),e("NotifyTeleport",i)}}})),System.register("game/gameobject/trait/interface/NotifyOrder",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){(i=i||{}).onPush=Symbol(),e("NotifyOrder",i)}}})),System.register("game/gameobject/trait/HarvesterTrait",["game/gameobject/trait/interface/NotifyTick","game/gameobject/task/harvester/ReturnOreTask","game/gameobject/task/harvester/GatherOreTask","game/gameobject/trait/interface/NotifySpawn","game/gameobject/trait/interface/NotifyOwnerChange","game/GameSpeed","game/gameobject/trait/interface/NotifyTeleport","game/gameobject/trait/interface/NotifyOrder","game/order/OrderType","game/type/LandType"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e}],execute:function(){var t;(t=d=d||{})[t.Idle=0]="Idle",t[t.LookingForOreSite=1]="LookingForOreSite",t[t.MovingToOreSite=2]="MovingToOreSite",t[t.Harvesting=3]="Harvesting",t[t.LookingForRefinery=4]="LookingForRefinery",t[t.MovingToRefinery=5]="MovingToRefinery",t[t.Docking=6]="Docking",t[t.PreparingToUnload=7]="PreparingToUnload",t[t.Unloading=8]="Unloading",e("HarvesterStatus",d),g=class{constructor(e){this.storage=e,this.ore=0,this.gems=0,this.status=d.Idle,this.lastGatherExplicit=!1,this.autoGatherOnNextIdle=!1,this.ticksSinceLastRefineryCheck=0,this.ticksSinceLastOreCheck=0}[n.NotifySpawn.onSpawn](e,t){e.owner.isCombatant()&&t.afterTick((()=>{e.unitOrderTrait.addTask(new s.GatherOreTask(t))}))}[a.NotifyOwnerChange.onChange](e,t,i){!t.isCombatant()&&e.owner.isCombatant()&&i.afterTick((()=>{e.unitOrderTrait.addTask(new s.GatherOreTask(i))}))}[i.NotifyTick.onTick](e,t){this.status===d.LookingForRefinery?this.ticksSinceLastRefineryCheck++>5*o.GameSpeed.BASE_TICKS_PER_SECOND&&(this.ticksSinceLastRefineryCheck=0,e.unitOrderTrait.hasTasks()?this.ticksSinceLastRefineryCheck=-25*o.GameSpeed.BASE_TICKS_PER_SECOND:[...e.owner.buildings].some((e=>e.rules.refinery))||this.lastGatherExplicit?e.unitOrderTrait.addTask(new r.ReturnOreTask(t)):this.status=d.Idle):this.status===d.LookingForOreSite?this.ticksSinceLastOreCheck++>20*o.GameSpeed.BASE_TICKS_PER_SECOND&&(this.ticksSinceLastOreCheck=0,e.unitOrderTrait.hasTasks()||e.unitOrderTrait.addTask(new s.GatherOreTask(t))):this.status===d.Idle&&this.autoGatherOnNextIdle&&e.unitOrderTrait.isIdle()&&e.tile.landType===u.LandType.Tiberium&&(this.autoGatherOnNextIdle=!1,e.unitOrderTrait.addTask(new s.GatherOreTask(t,e.tile,!0)))}[l.NotifyTeleport.onBeforeTeleport](e,t,i,n){!n&&e.owner.isCombatant()&&(this.status=d.Idle,this.lastOreSite=void 0,i&&e.rules.teleporter&&t.afterTick((()=>{e.unitOrderTrait.addTask(new(this.isFull()?r.ReturnOreTask:s.GatherOreTask)(t))})))}[c.NotifyOrder.onPush](e,t){this.autoGatherOnNextIdle=[h.OrderType.AttackMove,h.OrderType.Move,h.OrderType.ForceMove,h.OrderType.Scatter].includes(t),[d.LookingForRefinery,d.LookingForOreSite].includes(this.status)&&(this.status=d.Idle)}isFull(){return this.ore+this.gems>=this.storage}isEmpty(){return!this.ore&&!this.gems}getHash(){return 100*this.ore+this.gems}debugGetState(){return{ore:this.ore,gems:this.gems}}},e("HarvesterTrait",g)}}})),System.register("game/gameobject/trait/interface/NotifyDestroy",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){(i=i||{}).onDestroy=Symbol(),e("NotifyDestroy",i)}}})),System.register("game/event/LeaveTransportEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("LeaveTransportEvent",class{constructor(e){this.target=e,this.type=i.EventType.LeaveTransport}})}}})),System.register("game/gameobject/trait/TransportTrait",["util/math","game/gameobject/trait/interface/NotifyDestroy","game/gameobject/task/ScatterTask","game/event/LeaveTransportEvent","game/gameobject/trait/interface/NotifyTick","game/gameobject/unit/ZoneType"],(function(e,t){"use strict";var i,r,s,n,a,o,l;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e}],execute:function(){l=class{constructor(e){this.obj=e,this.units=[],this.loadQueue=[]}unitFitsInside(e){return e.rules.size<=this.obj.rules.sizeLimit&&e.rules.size<=this.getAvailableCapacity()}getAvailableCapacity(){return this.obj.rules.passengers-this.units.reduce(((e,t)=>e+t.rules.size),0)}addToLoadQueue(e){return this.loadQueue.push(e),this.loadQueue.length-1}unitIsFirstInLoadQueue(e){return this.loadQueue[0]===e}removeFromLoadQueue(e){var t=this.loadQueue.indexOf(e);-1!==t&&this.loadQueue.splice(t,1)}[a.NotifyTick.onTick](e,t){this.loadQueue=this.loadQueue.filter((e=>!e.isDestroyed&&!e.isCrashing))}[r.NotifyDestroy.onDestroy](e,t,i,r){var s=!!e.armedTrait?.deathWeapon,n=i?.weapon?.warhead.rules.parasite;if(r||s||e.zone===o.ZoneType.Air||n)for(var a of this.units)s&&a.armedTrait&&(a.armedTrait.deathWeapon=void 0),a.position.tileElevation=e.position.tileElevation,a.zone=e.zone,a.onBridge=e.onBridge,a.position.tile=e.tile,t.destroyObject(a,i,!0);else this.spawnSurvivors(t);this.units=[]}spawnSurvivors(e){var t=this.obj;if(this.units.length){for(var i of this.units)0e.getHash())))}debugGetState(){return this.units.map((e=>e.debugGetState()))}dispose(){this.obj=void 0}},e("TransportTrait",l)}}})),System.register("game/gameobject/trait/TurretTrait",["game/gameobject/unit/FacingUtil","game/gameobject/trait/interface/NotifyTick"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class{constructor(){this.facing=0,this.desiredFacing=0}isRotating(){return this.facing!==this.desiredFacing}[r.NotifyTick.onTick](e){var t;this.desiredFacing!==this.facing&&(t=e.rules.rot,this.facing=i.FacingUtil.tick(this.facing,this.desiredFacing,t||Number.POSITIVE_INFINITY).facing)}},e("TurretTrait",s)}}})),System.register("game/art/FlhCoords",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("FlhCoords",class e{constructor(e){this.forward=0,this.lateral=0,this.vertical=0,e&&3===e.length&&this.fromArray(e)}fromArray(e){return this.forward=e[0],this.lateral=e[1],this.vertical=e[2],this}clone(){return new e([this.forward,this.lateral,this.vertical])}})}}})),System.register("game/event/WeaponFireEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("WeaponFireEvent",class{constructor(e,t){this.weapon=e,this.gameObject=t,this.type=i.EventType.WeaponFire}})}}})),System.register("game/type/LandTargeting",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.LandOk=0]="LandOk",t[t.LandNotOk=1]="LandNotOk",t[t.LandSecondary=2]="LandSecondary",e("LandTargeting",i)}}})),System.register("game/type/NavalTargeting",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.UnderwaterNever=0]="UnderwaterNever",t[t.UnderwaterSecondary=1]="UnderwaterSecondary",t[t.UnderwaterOnly=2]="UnderwaterOnly",t[t.OrganicSecondary=3]="OrganicSecondary",t[t.SealSpecial=4]="SealSpecial",t[t.NavalAll=5]="NavalAll",t[t.NavalNone=6]="NavalNone",e("NavalTargeting",i)}}})),System.register("game/WeaponTargeting",["game/gameobject/infantry/StanceType","game/gameobject/unit/ZoneType","game/type/LandTargeting","game/type/LandType","game/type/NavalTargeting","game/type/SpeedType","game/WeaponType"],(function(e,t){"use strict";var i,r,s,n,a,o,l;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e}],execute:function(){e("WeaponTargeting",class{constructor(e,t,i,r,s,n){this.weaponType=e,this.projectileRules=t,this.weaponRules=i,this.warheadRules=r,this.gameObject=s,this.generalRules=n,this.targetChecks=[],this.initConditions()}initConditions(){this.projectileRules.isAntiGround||this.targetChecks.push((e=>!!e));const e=this.generalRules.prism.type;this.gameObject.name===e&&this.weaponType===l.WeaponType.Secondary?this.targetChecks.push(((t,i,r,s,n)=>!(!n||!t?.isBuilding()||t.name!==e||t.owner!==this.gameObject.owner))):this.warheadRules.electricAssault?this.targetChecks.push(((e,t,i,r,s)=>!(!r&&!s||!e?.isBuilding()||!e.overpoweredTrait||e.owner!==this.gameObject.owner))):this.weaponRules.damage<0?this.targetChecks.push(((e,t,i)=>!!(e!==this.gameObject&&e?.isUnit()&&i.areFriendly(e,this.gameObject)&&e.healthTrait.health<100&&this.gameObject.isAircraft()===e.isAircraft()))):(this.gameObject.rules.attackCursorOnFriendlies||this.warheadRules.bombDisarm?this.targetChecks.push(((e,t,i,r,s)=>!s&&!!(!this.warheadRules.bombDisarm||e?.isTechno()&&e.tntChargeTrait?.hasCharge()))):this.targetChecks.push(((e,t,i,r)=>!((!r||this.warheadRules.mindControl)&&e?.isTechno()&&i.areFriendly(e,this.gameObject)))),this.targetChecks.push(((e,t,i)=>!(e?.isTechno()&&e.cloakableTrait?.isCloaked()&&!i.alliances.haveSharedIntel(this.gameObject.owner,e.owner)))),this.weaponRules.limboLaunch&&this.targetChecks.push(((e,t,i,r,s)=>!(s&&e&&(e.isVehicle()||e.isAircraft())&&e.parasiteableTrait?.isInfested()))),this.gameObject.rules.ivan&&this.targetChecks.push((e=>!(!e?.isTechno()||!e.tntChargeTrait||e.tntChargeTrait.hasCharge()))),this.warheadRules.parasite&&this.targetChecks.push(((e,t,i,r)=>!!(!e&&r||e?.isInfantry()||(e?.isVehicle()||e?.isAircraft())&&e.parasiteableTrait))),this.warheadRules.mindControl&&this.targetChecks.push((e=>!(!e?.isTechno()||!e.mindControllableTrait))),this.warheadRules.temporal||this.targetChecks.push(((e,t,i,r,s)=>!(s&&e?.isTechno()&&e.warpedOutTrait.isInvulnerable())))),this.targetChecks.push(((e,t)=>this.canTargetZone(e,t)))}canTarget(e,t,i,r,s){return this.targetChecks.every((n=>n(e,t,i,r,s)))}canTargetZone(e,t){let s;if(e?.isUnit()){if(e?.isInfantry()&&e.stance===i.StanceType.Paradrop)return this.projectileRules.isAntiAir&&(this.projectileRules.isAntiGround||this.weaponType===l.WeaponType.Secondary);if(e.zone===r.ZoneType.Air)return this.projectileRules.isAntiAir;if(this.weaponType===l.WeaponType.Secondary&&this.projectileRules.isAntiAir)return!1;s=e.zone}else s=t.landType===n.LandType.Water?r.ZoneType.Water:r.ZoneType.Ground;return s===r.ZoneType.Water?this.canTargetNaval(this.gameObject.rules.navalTargeting,this.gameObject,e,this.weaponType):this.canTargetLand(this.gameObject.rules.landTargeting,this.weaponType)}canTargetLand(e,t){switch(e){case s.LandTargeting.LandOk:return!0;case s.LandTargeting.LandNotOk:return!1;case s.LandTargeting.LandSecondary:return t===l.WeaponType.Secondary;default:throw new Error(`Unhandled LandTargeting value "${e}"`)}}canTargetNaval(e,t,i,r){switch(e){case a.NavalTargeting.UnderwaterNever:return!i||!(i.isVehicle()&&i.submergibleTrait?.isSubmerged());case a.NavalTargeting.UnderwaterSecondary:return i&&i.isVehicle()&&i.submergibleTrait&&!t.rules.spawned?r===l.WeaponType.Secondary:r===l.WeaponType.Primary;case a.NavalTargeting.UnderwaterOnly:return!!(i&&i.isVehicle()&&i.submergibleTrait);case a.NavalTargeting.OrganicSecondary:return i?.isTechno()&&i.rules.organic?r===l.WeaponType.Secondary:r===l.WeaponType.Primary;case a.NavalTargeting.SealSpecial:return i?.isTechno()&&i.rules.naval&&!i.rules.organic&&(i.isBuilding()||i.rules.speedType===o.SpeedType.Float)?r===l.WeaponType.Secondary:r===l.WeaponType.Primary;case a.NavalTargeting.NavalAll:return!0;case a.NavalTargeting.NavalNone:return!1;default:throw new Error(`Unhandled NavalTargeting value "${e}"`)}}})}}})),System.register("game/Weapon",["game/Warhead","game/art/FlhCoords","game/event/WeaponFireEvent","game/math/geometry","game/rules/ObjectRules","game/Coords","engine/type/ObjectType","game/WeaponTargeting","game/WeaponType","game/math/Vector2","game/math/Vector3"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e}],execute:function(){50,5,2,1,e("Weapon",g=class e{constructor(e,t,i,r,s,n,a){this.type=e,this.gameObject=t,this.rules=i,this.warhead=r,this.projectileRules=s,this.flh=n,this.targeting=a,this.cooldownTicks=0,this.burstsLeft=0,this.burstIndex=0,this.useBurstDelay=!1,this.lateralMuzzleMult=1,this.distributedFireAngle=t.rules.distributedFire&&t.rules.radialFireSegments?-90:0}static factory(t,s,n,a,o){var l=a.getWeapon(t);let h=l.warhead;h===i.Warhead.SPECIAL_WARHEAD_NAME&&(h=e.findSpecialWarheadName(l,n,a));var u=new i.Warhead(a.getWarhead(h)),d=a.getProjectile(l.projectile),g=new c.WeaponTargeting(s,d,l,u.rules,n,a.general);return new this(s,n,l,u,d,o||new r.FlhCoords,g)}static findSpecialWarheadName(e,t,i){let r;if(!e.spawner)throw new Error(`Weapon "${e.name} can't use "Special" warhead without Spawner=yes`);if(t.rules.spawns===i.general.v3Rocket.type)r=i.combatDamage.v3Warhead;else if(t.rules.spawns===i.general.dMisl.type)r=i.combatDamage.dMislWarhead;else{if(!t.rules.spawns)throw new Error(`Can't use "Special" warhead on unit type "${t.name}" without "Spawns"`);var s=i.getObject(t.rules.spawns,l.ObjectType.Aircraft);if(!s.primary)throw new Error(`Spawned unit "${s.name}" doesn't have a primary weapon`);r=i.getWeapon(s.primary).warhead}return r}static computeSpeed(e,t){return t.arcing?.75*a.ObjectRules.iniSpeedToLeptonsPerTick(50,100):!t.rot||t.inviso||e.isLaser||e.isElectricBolt?Number.POSITIVE_INFINITY:e.speed}get name(){return this.rules.name}get minRange(){return this.rules.minimumRange}get range(){return this.gameObject.isBuilding()&&!this.gameObject.overpoweredTrait&&this.type===h.WeaponType.Secondary&&this.gameObject.primaryWeapon?Math.min(this.gameObject.primaryWeapon.rules.range,this.rules.range):this.rules.range}get speed(){return e.computeSpeed(this.rules,this.projectileRules)}get rof(){let e=this.rules.rof;return this.gameObject.isBuilding()&&this.gameObject.garrisonTrait?.isOccupied()&&(e/=this.gameObject.garrisonTrait.units.length),this.gameObject.veteranTrait&&(e*=this.gameObject.veteranTrait.getVeteranRofMultiplier()),Math.floor(e)}getCooldownTicks(){return this.cooldownTicks}expireCooldown(){this.cooldownTicks=0}resetCooldown(){this.cooldownTicks=this.rof}hasBurstsLeft(){return 0t.map.isWithinBounds(e)));let i=[...p];for(g of d){var m=t.rules.getObject(g,n.ObjectType.Infantry);if(t.map.terrain.getPassableSpeed(e.tile,m.speedType,!e.isBuilding()&&e.onBridge,void 0,!0)){let r=t.createUnitForPlayer(m,e.owner),s=i.length?i.splice(t.generateRandomInt(0,i.length-1),1)[0]:void 0;s=s||p[t.generateRandomInt(0,p.length-1)],r.isInfantry()&&(r.position.subCell=o.Infantry.SUB_CELLS[0]),r.veteranTrait&&e.owner.canProduceVeteran(r.rules)&&r.veteranTrait.setVeteranLevel(l.VeteranLevel.Veteran),t.spawnObject(r,s),e.isBuilding()&&r.unitOrderTrait.addTask(new a.ScatterTask(t,void 0,{ignoredBlockers:e.isDestroyed?void 0:[e]}))}}}}},e("CrewedTrait",c)}}})),System.register("game/gameobject/trait/GunnerTrait",["game/gameobject/unit/VeteranLevel","game/gameobject/trait/interface/NotifyTick"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class{[r.NotifyTick.onTick](e){var t,r;!!e.transportTrait.units.length!==this.lastHadGunner&&(this.lastHadGunner=!!e.transportTrait.units.length,r=t=e.transportTrait.units[0]?.rules.ifvMode??0,(t=e.rules.turretIndexesByIfvMode.get(t)??0){n.push({x:e,y:t})});var a=i-e,o=r-t,l=Math.abs(a),c=Math.abs(o);let h=0;var u=0=i:r<=i;r+=u)s(r,n),h+=c,h<<1>=l&&(n+=d,h-=l);else for(let i=e,n=t;d<0?n>=r:n<=r;n+=d)s(i,n),h+=l,h<<1>=c&&(i+=u,h-=c);return n})),{setters:[],execute:function(){}}})),System.register("game/gameobject/unit/LosHelper",["util/bresenham","game/type/LandType"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=e=>void 0!==e.position,e("LosHelper",class{constructor(e,t){this.tiles=e,this.tileOccupation=t}hasLineOfSight(e,t,n){var a=n.warhead.rules.wall||!n.projectileRules.subjectToWalls,o=n.projectileRules.subjectToCliffs,l=n.rules.spawner;let c=0,h=!1;if(!a||o||l){var u,d,g=s(e)?e.tile:e,p=s(t)?t.tile:t;for({x:u,y:d}of i.bresenham(g.rx,g.ry,p.rx,p.ry)){var m=this.tiles.getByMapCoords(u,d);if(!m)return!1;if(!a&&m.landType===r.LandType.Wall)return!1;if(o)if(m.landType===r.LandType.Cliff){if(m.z>g.z)return!1;h=!0}else{if(m.z>g.z&&h)return!1;h=!1}if(l&&c<2&&this.tileOccupation.getBridgeOnTile(m)?.isHighBridge())return!1;c++}}return!0}})}}})),System.register("game/gameobject/task/move/MoveInWeaponRangeTask",["game/gameobject/task/move/MoveTask","game/gameobject/GameObject","game/gameobject/unit/RangeHelper","game/Coords","game/gameobject/unit/LosHelper","game/map/tileFinder/RadialTileFinder","game/type/MovementZone","game/gameobject/unit/ZoneType","game/gameobject/trait/MoveTrait","game/map/tileFinder/RandomTileFinder","game/type/LocomotorType","util/bresenham","game/gameobject/unit/FacingUtil","game/math/Vector2"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p,m,f;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e},function(e){m=e}],execute:function(){e("STRAFE_CLOSE_ENOUGH",2),f=class extends i.MoveTask{constructor(e,t,i,n){super(e,t instanceof r.GameObject?t.isBuilding()?t.centerTile:t.tile:t,i,{pathFinderIgnoredBlockers:t instanceof r.GameObject&&00Math.SQRT2&&this.updateTarget(s,!1)}this.bomberInitialLock=this.isCloseEnoughToDest(e,e.tile),super.onStart(e)}cancel(){this.bomberManeuverTile?this.cancelRequested=!0:super.cancel()}shouldAirStrafe(e){return e.rules.movementZone===l.MovementZone.Fly&&e.rules.locomotor===d.LocomotorType.Aircraft&&e.rules.fighter&&1this.rangeHelper.isInWeaponRange(e,t,this.weapon,this.game.rules,i))).getNextTile()}hasReachedDestination(e){return super.hasReachedDestination(e)||this.canStopAtTile(e,e.tile,e.onBridge)}canStopAtTile(e,t,i){if(e.zone!==c.ZoneType.Air&&this.target instanceof r.GameObject&&this.game.map.tileOccupation.isTileOccupiedBy(t,this.target)&&(!this.target.isUnit()||this.target.tile===t&&this.target.moveTrait.moveState!==h.MoveState.Moving))return!1;if(e.zone!==c.ZoneType.Air){if(!super.canStopAtTile(e,t,i))return!1}else if(this.game.map.tileOccupation.getAirObjectsOnTile(t).filter((t=>t.isUnit()&&t.moveTrait.moveState!==h.MoveState.Moving&&t!==e)).length)return!1;return!(this.isBombingRun(e)&&!this.bomberCanReturn(t))&&(!!this.isCancelling()||this.isCloseEnoughToDest(e,t))}isCloseEnoughToDest(e,t){if(e.rules.balloonHover&&!e.rules.hoverAttack)return this.rangeHelper.isInTileRange(t,this.target,0,0);if(this.weapon.rules.cellRangefinding||!e.isInfantry())return this.rangeHelper.isInWeaponRange(e,this.target,this.weapon,this.game.rules,t)&&this.losHelper.hasLineOfSight(t,this.target,this.weapon);var i=e.zone===c.ZoneType.Air?e.position.computeSubCellOffset(e.position.desiredSubCell):e.position.getTileOffset(),{minRange:r,range:s}=this.rangeHelper.computeWeaponRangeVsTarget(t,this.target,this.weapon,this.game.rules);i=n.Coords.tile3dToWorld(t.rx+i.x/n.Coords.LEPTONS_PER_TILE,t.ry+i.y/n.Coords.LEPTONS_PER_TILE,t.z+e.position.tileElevation);return(e.isUnit()&&e.rules.movementZone===l.MovementZone.Fly?this.rangeHelper.isInRange2(i,this.target,r,s):this.rangeHelper.isInRange3(i,this.target,r,s))&&this.losHelper.hasLineOfSight(t,this.target,this.weapon)}findRelocationTile(e,t,i){if(i.rules.movementZone!==l.MovementZone.Fly)return super.findRelocationTile(e,t,i);var r=this.game.map;return new u.RandomTileFinder(r.tiles,r.mapBounds,e,1,this.game,(e=>this.isCancelling()||this.isCloseEnoughToDest(i,e))).getNextTile()}retarget(e,t){var i=e instanceof r.GameObject?e.isBuilding()?e.centerTile:e.tile:e;this.bomberManeuverTile?this.bomberQueuedTargetTile=i:(this.updateTarget(i,t),this.recalcMinRange=!0),this.target=e,this.options?.ignoredBlockers&&(this.options.ignoredBlockers=e instanceof r.GameObject?[e]:void 0),this.options??(this.options={}),this.options.pathFinderIgnoredBlockers=e instanceof r.GameObject?[e]:void 0}onTick(e){if(this.recalcMinRange){this.recalcMinRange=!1;var t=this.findMinRangeRelocationTile(e,this.targetTile);if(t!==this.targetTile){if(!t)return this.cancel(),!1;this.updateTarget(t,!!t.onBridgeLandType)}}if(this.shouldAirStrafe(e)&&!this.isCancelling()&&(this.updateTarget(this.target instanceof r.GameObject?this.target.isBuilding()?this.target.centerTile:this.target.tile:this.target,!1),!this.isAirStrafeCloseEnough(e)||(i=this.findStrafeDestination(e,this.targetTile))&&this.updateTarget(i,!1)),this.isBombingRun(e)&&!this.isCancelling()&&(!e.ammo||this.weapon.getBurstsFired()||this.bomberInitialLock)&&!this.bomberManeuverTile){this.bomberInitialLock=!1;let t=e.position.getMapPosition();var i=this.target instanceof r.GameObject?this.target.isBuilding()?this.target.centerTile:this.target.tile:this.target;let s=new m.Vector2(i.rx+.5,i.ry+.5).clone().multiplyScalar(n.Coords.LEPTONS_PER_TILE).sub(t),a=s.length();if(a||(s.copy(p.FacingUtil.toMapCoords(e.direction)),a=Number.EPSILON),i=t.clone().add(s.setLength(a+7*n.Coords.LEPTONS_PER_TILE)).multiplyScalar(1/n.Coords.LEPTONS_PER_TILE).floor(),!(i=g.bresenham(i.x,i.y,e.tile.rx,e.tile.ry)).length)throw new Error("Bresenham returned no tiles");i=i[0],this.bomberManeuverTile=this.game.map.tiles.getByMapCoords(i.x,i.y)??this.game.map.tiles.getPlaceholderTile(i.x,i.y),this.options.allowOutOfBoundsTarget=!0,this.updateTarget(this.bomberManeuverTile,!1)}return this.bomberManeuverTile&&this.bomberCanReturn(e.tile)&&(this.bomberManeuverTile=void 0,this.bomberQueuedTargetTile&&(this.updateTarget(this.bomberQueuedTargetTile,!1),this.recalcMinRange=!0,this.bomberQueuedTargetTile=void 0)),this.cancelRequested&&(this.bomberManeuverTile||(this.cancelRequested=!1,this.cancel())),!!(this.isBombingRun(e)&&this.isCancelling()&&this.forceCancel(e))||super.onTick(e)}forceCancel(e){return!this.bomberManeuverTile&&super.forceCancel(e)}findMinRangeRelocationTile(e,t){var{minRange:i,range:r}=this.rangeHelper.computeWeaponRangeVsTarget(e,this.target,this.weapon,this.game.rules);return e.rules.locomotor===d.LocomotorType.Chrono?this.rangeHelper.isInRange(e,this.target,r-1,r,this.weapon.rules.cellRangefinding)?t:this.findTileInRange(e,t,r-1,2*r)??t:this.rangeHelper.isInRange(e,this.target,i,Number.POSITIVE_INFINITY,this.weapon.rules.cellRangefinding)?t:this.findTileInRange(e,t,2*i,r-i)}findTileInRange(e,t,i,r){let s=this.game.map;var n,a=new m.Vector2(e.tile.rx-t.rx,e.tile.ry-t.ry).setLength(i).floor().add(new m.Vector2(t.rx,t.ry));let l;for(n of g.bresenham(a.x,a.y,t.rx,t.ry))if(l=s.tiles.getByMapCoords(n.x,n.y),l)break;if(l){return new o.RadialTileFinder(s.tiles,s.mapBounds,l,{width:1,height:1},0,r,(t=>this.rangeHelper.isInWeaponRange(e,this.target,this.weapon,this.game.rules,t)&&this.losHelper.hasLineOfSight(t,this.target,this.weapon)&&0e.blocking));if(!r&&s)return!1;if(!t.isSpawned)return!1;if(e.status===i.TaskStatus.NotStarted)throw new Error("Attempted tick on a non-started task");if(e.isRunning()||e.isCancelling()){var n=e.isCancelling(),a=!!e.waitingForChildrenToFinish||e.onTick(t);return e.children.length&&!s&&a&&(r=e.children.every((e=>e.status===i.TaskStatus.Cancelled||e.status===i.TaskStatus.Finished)),e.waitingForChildrenToFinish=!r),(a=a&&r)&&(e.onEnd(t),e.status=n?i.TaskStatus.Cancelled:i.TaskStatus.Finished),a}return!0}tickChildren(e,t){let r=!0;if(e.length){let n,a=new Set;for(;t.isSpawned&&(n=e.find((e=>!a.has(e))));){let o;if(n.status===i.TaskStatus.NotStarted&&this.startTask(n,t),n.status===i.TaskStatus.Running||n.status===i.TaskStatus.Cancelling)o=!0===this.tickTask(n,t);else{if(n.status!==i.TaskStatus.Cancelled)throw new Error("Unhandled task status "+i.TaskStatus[n.status]);o=!0}if(o){var s=e.indexOf(n);-1!==s&&e.splice(s,1)}else{if(r=!1,n.blocking)break;a.add(n)}}}return r}})}}})),System.register("game/type/VhpScan",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.None=0]="None",t[t.Normal=1]="Normal",t[t.Strong=2]="Strong",e("VhpScan",i)}}})),System.register("game/event/ObjectDisguiseChangeEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("ObjectDisguiseChangeEvent",class{constructor(e){this.target=e,this.type=i.EventType.ObjectDisguiseChange}})}}})),System.register("game/gameobject/trait/DisguiseTrait",["engine/type/ObjectType","game/event/ObjectDisguiseChangeEvent","game/SideType","game/gameobject/trait/AttackTrait","game/gameobject/trait/interface/NotifyDamage","game/gameobject/trait/interface/NotifySpawn","game/gameobject/trait/interface/NotifyTick","game/gameobject/trait/MoveTrait"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e}],execute:function(){h=class{constructor(){this.isActive=!1,this.cooldownTicks=0}isDisguised(){return this.isActive}getDisguise(){return this.isActive?this.disguisedAs:void 0}hasTerrainDisguise(){return this.getDisguise()?.rules.type===i.ObjectType.Terrain}disguiseAs(e,t,i){this.disguisedAs={rules:e.rules,owner:e.owner},this.isActive=!0,i.events.dispatch(new r.ObjectDisguiseChangeEvent(t))}revealDisguise(e,t){this.cooldownTicks=t.rules.general.infantryBlinkDisguiseTime,this.isActive=!1,t.events.dispatch(new r.ObjectDisguiseChangeEvent(e))}[o.NotifySpawn.onSpawn](e,t){var r;!this.disguisedAs&&e.rules.permaDisguise&&e.isInfantry()&&e.owner.country&&(r=this.getDefaultInfantryDisguise(e.owner.country.side,t.rules.general))&&(r=t.rules.getObject(r,i.ObjectType.Infantry),this.disguisedAs={rules:r,owner:e.owner},this.isActive=!0)}getDefaultInfantryDisguise(e,t){switch(e){case s.SideType.GDI:return t.alliedDisguise;case s.SideType.Nod:return t.sovietDisguise;default:return}}[l.NotifyTick.onTick](e,t){e.rules.permaDisguise||(e.attackTrait?.attackState===n.AttackState.JustFired||e.moveTrait.moveState!==c.MoveState.Idle?this.revealDisguise(e,t):0e!==i))),t.some((e=>0<(e?.getCooldownTicks()??0)))}expirePassiveScanCooldown(){this.passiveScanCooldownTicks=0}cancelOpportunityFire(){this.opportunityFireTask?.cancel()}selectDefaultWeapon(e){let t;if((e.isInfantry()||e.isVehicle())&&e.rules.deployFire){let i=e.armedTrait?.getDeployFireWeapon();t=e.deployerTrait?.isDeployed()?i&&!i.rules.areaFire?i:void 0:[e.primaryWeapon,e.secondaryWeapon].find((e=>e!==i))}else t=e.isBuilding()&&e.garrisonTrait?e.garrisonTrait.isOccupied()?e.owner.country.side===a.SideType.GDI?e.primaryWeapon:e.secondaryWeapon??e.primaryWeapon:void 0:e.isBuilding()&&e.overpoweredTrait?e.overpoweredTrait.getWeapon():e.primaryWeapon;return t}selectWeaponVersus(e,t,i,r=!1,s=!1){var n=t.tile;const a=t instanceof u.Target?t.obj:t;var o=this.getAvailableWeapons(e,s,a?.isOverlay()||r&&!a);return this.selectWeaponFromList(e,a,n,o,i,r,s,!1)}selectWeaponFromList(e,t,i,r,n,a,o,l){if((!t?.isInfantry()&&!t?.isVehicle()||!t.disguiseTrait||this.canAttackThroughDisguise(e,t,t.disguiseTrait,n,a,o,l))&&(t?.isBuilding()&&t.overpoweredTrait&&t.owner===e.owner&&r.find((e=>e.warhead.rules.electricAssault))&&(r=r.filter((e=>e.warhead.rules.electricAssault))),!(o&&t?.isAircraft()&&t.missileSpawnTrait&&t.zone!==s.ZoneType.Air))){var c=t?.isTechno()?t.rules.armor:void 0;for(const e of r)if(e.targeting.canTarget(t,i,n,a,o)&&(void 0===c||this.checkArmor(e.warhead.rules,c,o)))return e}}getAvailableWeapons(e,t,i){let r;var s;return r=(e.isInfantry()||e.isVehicle())&&e.rules.deployFire&&e.armedTrait?(s=e.armedTrait.getDeployFireWeapon(),[e.deployerTrait?.isDeployed()?s.rules.areaFire?void 0:s:s===e.secondaryWeapon?e.primaryWeapon:e.secondaryWeapon]):e.isBuilding()&&e.garrisonTrait?e.garrisonTrait.isOccupied()?[e.owner.country.side===a.SideType.GDI?e.primaryWeapon:e.secondaryWeapon??e.primaryWeapon]:[]:e.isBuilding()&&e.overpoweredTrait?[e.overpoweredTrait.getWeapon()]:i||t?[e.primaryWeapon,!i&&t&&e.secondaryWeapon&&(e.secondaryWeapon.projectileRules.isAntiAir||e.secondaryWeapon.rules.spawner||e.secondaryWeapon.warhead.rules.electricAssault)?e.secondaryWeapon:void 0]:[e.primaryWeapon,e.secondaryWeapon],r.filter((e=>e&&!e.rules.neverUse))}canAttackThroughDisguise(e,t,i,r,s,n,a){if(!s&&i.hasTerrainDisguise()&&!r.areFriendly(e,t)&&!e.owner.sharedDetectDisguiseTrait?.has(t))return!1;if(n){if(a&&t.moveTrait.isIdle()&&!e.rules.detectDisguise&&!r.areFriendly(t,e))return!1;var o=i.getDisguise();if(o?.owner&&!e.rules.detectDisguise&&!e.owner.sharedDetectDisguiseTrait?.has(t)&&(o.owner===e.owner||r.alliances.areAllied(e.owner,o.owner)))return!1}return!0}checkArmor(e,t,i){var s=e.ivanBomb||e.bombDisarm||e.nukeMaker?1:e.verses.get(t);return void 0===s?(console.warn(`Unhandled ArmorType ${r.ArmorType[t]} in warhead ${e.name} verses`),!1):!(100*s<=(i?1:0))}createAttackTask(e,t,i,r,s){return new n.AttackTask(e,e.createTarget(t,i),r,s)}[o.NotifyTick.onTick](e,t){if(!this.isDisabled()){var i;if(this.opportunityFireTask&&(!e.unitOrderTrait.hasTasks()||e.isUnit()&&!e.unitOrderTrait.getTasks()[0].preventOpportunityFire||(e.unitOrderTrait.getTasks()[0]instanceof n.AttackTask?this.opportunityFireTask=void 0:this.opportunityFireTask.cancel()),this.opportunityFireTask&&(i=[this.opportunityFireTask],this.taskRunner.tick(i,e),i.length||(this.opportunityFireTask=void 0))),!this.opportunityFireTask&&this.retaliateTarget){var r=this.retaliateTarget;let i;this.retaliateTarget=void 0,!e.unitOrderTrait.hasTasks()&&t.isValidTarget(r)&&(i=this.selectWeaponVersus(e,r,t,!1))&&e.unitOrderTrait.addTask(this.createAttackTask(t,r,r.tile,i,{holdGround:e.rules.movementZone===m.MovementZone.Fly}))}if(!this.opportunityFireTask&&this.shouldPassiveAcquire(e))if(0{[p.MoveResult.Success,p.MoveResult.CloseEnough].includes(e.moveTrait.lastMoveResult)||e.resetGuardModeToIdle(),e.guardArea=void 0})))}}}[c.NotifyDamage.onDamage](e,t,i,r){this.isDisabled()||!this.retaliateTarget&&!this.opportunityFireTask&&r&&r.obj&&r.weapon&&this.shouldRetaliate(e,t,i,r.obj,r.weapon.warhead)&&(this.retaliateTarget=r.obj)}[y.NotifyTeleport.onBeforeTeleport](e,t,i,r){r||(this.attackState=w.Idle,this.currentTarget=void 0,this.retaliateTarget=void 0,this.opportunityFireTask=void 0)}shouldPassiveAcquire(e){if(!e.owner.isCombatant()&&e.rules.needsEngineer||!e.rules.canPassiveAquire||!e.primaryWeapon)return!1;if(e.mindControllerTrait?.isAtCapacity())return!1;if(e.isUnit()&&e.rules.opportunityFire){if(e.unitOrderTrait.hasTasks()&&e.unitOrderTrait.getTasks()[0].preventOpportunityFire)return!1}else if(e.unitOrderTrait.hasTasks())return!1;return!0}shouldRetaliate(e,t,i,r,s){return!(i<1||t.areFriendly(e,r)||!e.rules.canRetaliate||!e.primaryWeapon||s.rules.temporal||r.rules.missileSpawn||e.unitOrderTrait.hasTasks()||!t.isValidTarget(r)||(r.isInfantry()||r.isVehicle())&&r.disguiseTrait&&!e.rules.detectDisguise||e.mindControllerTrait?.isAtCapacity()||!this.selectWeaponVersus(e,r,t,!1)||(e.isBuilding()||r.isBuilding()?this.rangeHelper.tileDistance(e,r):this.rangeHelper.distance2(e,r)/f.Coords.LEPTONS_PER_TILE)>e.sight)}scanForTarget(e,t,i,r,s,n=!1){let a={},o=Number.NEGATIVE_INFINITY;var l=this.getAvailableWeapons(e,!0,!1),c=r??(e.rules.guardRange||t.range)+1+3+i.rules.elevationModel.bonusCap+(t.projectileRules.isAntiAir?e.rules.airRangeBonus:0);for(const t of this.scanTechnosAround(e,c,i)){var h,u=this.selectWeaponFromList(e,t,t.tile,l,i,!1,!0,!0);u&&this.canPassiveAcquire(t,i)&&i.isValidTarget(t)&&(r?this.rangeHelper.isInRange(e,t,u.minRange,r,u.rules.cellRangefinding)&&(!s||this.rangeHelper.isInRange2(s,t,0,r)):this.rangeHelper.isInWeaponRange(e,t,u,i.rules))&&(n||this.losHelper.hasLineOfSight(e,t,u))&&(h=this.rangeHelper.distance3(e,t)/f.Coords.LEPTONS_PER_TILE,(h=this.computeThreat(t,e,u,h,i.rules.general.threat))>o&&(a={target:t,weapon:u},o=h))}return a.target&&e.rules.distributedFire&&this.updateDistributedFireHistory(a),a}scanTechnosAround(e,t,i){var r=e.getFoundation();const s=new b.Vector2(e.tile.rx,e.tile.ry),n=new b.Vector2(e.tile.rx+r.width-1,e.tile.ry+r.height-1);return s.addScalar(-t),n.addScalar(t),r=new S.Box2(s,n),i.map.technosByTile.queryRange(r)}canPassiveAcquire(e,t){return!e.owner.isNeutral&&!e.rules.civilian&&!e.rules.insignificant&&(1e.warhead.rules.verses.get(t.rules.armor)??0)).reduce(((e,t)=>Math.max(e,t)),0)*n.targetEffectivenessCoefficientDefault;return e.attackTrait?.currentTarget?.obj===t&&(a*=-1),a+=e.rules.specialThreatValue*n.targetSpecialThreatCoefficientDefault,a+=(r.warhead.rules.verses.get(e.rules.armor)??0)*n.myEffectivenessCoefficientDefault,a+=e.healthTrait.health/100*n.targetStrengthCoefficientDefault,a+=s*n.targetDistanceCoefficientDefault,t.rules.distributedFire&&(a-=1e6*(this.distributedFireHistory.get(e)??0)),t.rules.vhpScan===T.VhpScan.Strong&&e.healthTrait.getProjectedHitPoints()<=0&&(a-=1e6),a}updateDistributedFireHistory(e){if(50!==this.distributedFireHistory.get(e.target)){for(var[t,i]of this.distributedFireHistory)--i<=0?this.distributedFireHistory.delete(t):this.distributedFireHistory.set(t,i);this.distributedFireHistory.set(e.target,50)}}dispose(){this.distributedFireHistory.clear()}},e("AttackTrait",C)}}})),System.register("game/gameobject/task/AttackTask",["game/gameobject/task/system/Task","game/gameobject/unit/RangeHelper","game/gameobject/task/system/WaitMinutesTask","game/WeaponType","game/gameobject/task/move/MoveInWeaponRangeTask","game/gameobject/unit/FacingUtil","game/gameobject/task/TurnTask","game/gameobject/task/system/WaitTicksTask","game/gameobject/trait/AttackTrait","game/gameobject/GameObject","game/gameobject/unit/LosHelper","game/gameobject/trait/MoveTrait","game/GameSpeed","game/Coords","engine/type/ObjectType","game/map/tileFinder/RadialTileFinder","game/gameobject/unit/MovePositionHelper","game/gameobject/unit/ZoneType","game/type/MovementZone","game/gameobject/task/system/TaskStatus","game/gameobject/task/move/MoveTask","game/math/Vector3","game/math/Vector2"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p,m,f,y,T,v,b,S,w,C,E,x,O;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e},function(e){m=e},function(e){f=e},function(e){y=e},function(e){T=e},function(e){v=e},function(e){b=e},function(e){S=e},function(e){w=e},function(e){C=e},function(e){E=e}],execute:function(){3,x=4*11.25,O=class e extends i.Task{constructor(e,t,i,s={}){super(),this.game=e,this.target=t,this.weapon=i,this.options=s,this.moveExecuted=!1,this.moveAttempts=0,this.rangeCheckCooldown=0,this.lastInRangeTargetPosition=new C.Vector3,this.lastInRangeSelfPosition=new C.Vector3,this.initialIndirectTarget=!1,this.forceDropTarget=!1,this.rangeHelper=new r.RangeHelper(e.map.tileOccupation),this.losHelper=new d.LosHelper(e.map.tiles,e.map.tileOccupation),this.targetLinesConfig={pathNodes:[]},this.updateTargetLines(this.target,!0)}duplicate(){return new e(this.game,this.target,this.weapon,this.options)}getWeapon(){return this.weapon}setWeapon(e){this.weapon=e}setForceAttack(e){this.options.force=e}requestTargetUpdate(e){this.target.equals(e)||(this.needsTargetUpdate=e)}onTargetChange(e){let t=e.attackTrait,i=this.target;t.currentTarget=i,this.lastValidTargetPosition=i.obj?{tile:i.tile,onBridge:i.getBridge()}:void 0,this.initialTargetOwner=i.obj?.isTechno()?i.obj.owner:void 0,this.initialIndirectTarget=!i.obj&&this.game.map.tileOccupation.getObjectsOnTile(i.tile).some((e=>e.isOverlay()&&!e.isBridgePlaceholder()||e.isTerrain())),this.updateTargetLines(i,!0)}updateTargetLines(e,t){this.targetLinesConfig.target=e.obj,this.targetLinesConfig.pathNodes=e.obj?[]:[{tile:e.tile,onBridge:e.getBridge()}],this.targetLinesConfig.isAttack=t}onStart(e){if(!e.attackTrait)throw new Error(`Object ${e.name} has no attack trait`);if(0!==e.ammo){let r=this.game.map.tileOccupation;var t,i;e.attackTrait.attackState=h.AttackState.CheckRange,this.onTargetChange(e),this.initialSelfPosition={tile:e.tile,onBridge:e.isUnit()&&e.onBridge?r.getBridgeOnTile(e.tile):void 0},this.weapon.rules.limboLaunch&&e.isUnit()&&!this.target.obj&&(this.forceDropTarget=!0,({reachable:t,fallback:i}=this.findReachableMeleePosition(this.target.tile,!!this.target.getBridge(),{width:1,height:1},e)),!t&&i&&(this.lastValidTargetPosition=i,this.updateTargetLines(this.game.createTarget(i.onBridge,i.tile),!1))),this.weapon.rules.limboLaunch&&this.target.obj?.isTechno()&&e.isUnit()&&!this.rangeHelper.isInWeaponRange(e,this.target.obj,this.weapon,this.game.rules)&&(({reachable:t,fallback:i}=this.findReachableMeleePosition(this.target.obj.tile,this.target.obj.isUnit()&&this.target.obj.onBridge,this.target.obj.getFoundation(),e)),t||(1<(e.unitOrderTrait.waypointPath?.waypoints?.length??0)?this.cancel():(this.forceDropTarget=!0,i&&(this.lastValidTargetPosition=i,this.updateTargetLines(this.game.createTarget(i.onBridge,i.tile),!1))))),this.rangeHelper.isInWeaponRange(e,this.target.obj??this.target.tile,this.weapon,this.game.rules)&&e.isUnit()&&e.rules.movementZone===b.MovementZone.Fly&&e.zone!==v.ZoneType.Air&&(e.rules.hoverAttack||e.isAircraft())&&this.children.push(new w.MoveTask(this.game,e.tile,!1).setCancellable(!1))}else this.cancel()}findReachableMeleePosition(e,t,i,r){let s,n=this.game.map,a=n.tileOccupation,o=t?a.getBridgeOnTile(e):void 0,l=new T.MovePositionHelper(n),c=r.rules.movementZone===b.MovementZone.Fly,h=(t,i)=>c||0{let i=!1;var n;return h(t,void 0)&&(s=s??{tile:t,onBridge:void 0},i=!0),void 0!==t.onBridgeLandType&&(n=a.getBridgeOnTile(t),h(t,n)&&(s=s??{tile:t,onBridge:n},i=!0)),!!i&&this.rangeHelper.isInWeaponRange(r,e,this.weapon,this.game.rules,t)}));return{reachable:u.getNextTile(),fallback:s}}onEnd(e){e.isVehicle()&&e.turretTrait&&(e.turretTrait.desiredFacing=e.direction),e.attackTrait.attackState=h.AttackState.Idle,e.attackTrait.currentTarget=void 0;var t=this.game.rules.general.prism.type;e.isBuilding()&&e.name===t&&this.weapon.type!==n.WeaponType.Secondary&&this.countSupportBeamsAndFireDownTowers(e,t),this.weapon.rules.limboLaunch&&e.attackTrait.expirePassiveScanCooldown(),(e.isInfantry()||e.isVehicle())&&(e.isFiring=!1),this.weapon.hasBurstsLeft()&&this.weapon.resetBursts()}forceCancel(e){if(e.rules.movementZone!==b.MovementZone.Fly)return!1;if(!this.cancellable||this.children.some((e=>!e.cancellable)))return!1;if(this.status===S.TaskStatus.Running||this.status===S.TaskStatus.Cancelling){if(this.children.filter((e=>e instanceof w.MoveTask)).some((t=>!t.forceCancel(e))))return!1;this.onEnd(e),(e.isInfantry()||e.isVehicle())&&(e.isFiring=!1)}return this.status=S.TaskStatus.Cancelled,!0}onTick(e){let t=e.attackTrait;(e.isInfantry()||e.isVehicle())&&t.attackState!==h.AttackState.Firing&&(e.isFiring=!1);let i=this.target.obj,r=this.children.find((e=>e instanceof a.MoveInWeaponRangeTask));if(this.isCancelling()&&t.attackState!==h.AttackState.FireUp)return!e.airSpawnTrait?.isLaunchingMissiles()&&(r?.cancel(),!0);let d=!1;if(t.attackState===h.AttackState.FireUp){if(t.isDisabled())return!0;t.attackState=h.AttackState.Firing,d=!0}if(t.attackState===h.AttackState.Firing){if(this.initialIndirectTarget&&!this.game.map.getObjectsOnTile(this.target.tile).find((e=>e.isOverlay()&&!e.isBridgePlaceholder()||e.isTerrain())))return this.cancel(),this.onTick(e);if(d){var f=this.target.obj||this.target.tile;if(!this.game.isValidTarget(this.target.obj)||this.shouldDropTarget(this.target.obj)||!this.weapon.targeting.canTarget(this.target.obj,this.target.tile,this.game,!!this.options.force,!!this.options.passive)||!this.rangeHelper.isInWeaponRange(e,f,this.weapon,this.game.rules)||!this.losHelper.hasLineOfSight(e,f,this.weapon))return t.attackState=h.AttackState.CheckRange,this.onTick(e)}if(this.weapon.rules.limboLaunch){if((i?.isVehicle()||i?.isAircraft())&&i.parasiteableTrait?.isInfested())return!0;if(e.rules.movementZone!==b.MovementZone.Fly&&i?.isUnit()&&i.zone===v.ZoneType.Air)return!0}if(this.target.tile.onBridgeLandType&&e.tile.onBridgeLandType&&e.isUnit()&&(this.game.map.tileOccupation.getBridgeOnTile(this.target.tile)?.isHighBridge()||this.game.map.tileOccupation.getBridgeOnTile(e.tile)?.isHighBridge())&&(i?i.isUnit()&&(i.zone===v.ZoneType.Air||i.onBridge):this.target.isBridge())!==(e.zone===v.ZoneType.Air||e.onBridge)&&this.game.map.bridges.findHighBridgeBoundary(e.tile)?.tile===this.game.map.bridges.findHighBridgeBoundary(this.target.tile)?.tile)return!0;let s=1;if(f=this.game.rules.general.prism.type,e.isBuilding()&&e.name===f&&this.weapon.type!==n.WeaponType.Secondary&&(s=1+(f=this.countSupportBeamsAndFireDownTowers(e,f))*this.game.rules.general.prism.supportModifier),this.weapon.rules.spawner&&(e.isVehicle()||e.isAircraft())&&e.parasiteableTrait?.isParalyzed())return!0;if(0===e.ammo)return e.isAircraft()&&(e.rules.fighter||e.rules.spawned)&&r?.cancel(),!0;let a=!1;if(this.weapon.rules.limboLaunch&&r){if(!r.forceCancel(e))return!1;e.moveTrait.lastTargetOffset=void 0,e.moveTrait.lastVelocity=void 0,a=!0}return this.weapon.fire(this.target,this.game,s),!!a||(!!this.weapon.rules.fireOnce||!(!this.options.passive||!e.rules.distributedFire)||(t.attackState=h.AttackState.JustFired,!1))}if(t.attackState===h.AttackState.JustFired)return t.attackState=h.AttackState.PrepareToFire,this.onTick(e);this.needsTargetUpdate&&(this.target=this.needsTargetUpdate,i=this.target.obj,this.needsTargetUpdate=void 0,this.onTargetChange(e),i||r?.retarget(this.target.tile,!!this.target.getBridge())),i?.isTechno()&&i.replacedBy&&(T=this.game.createTarget(i.replacedBy,i.replacedBy.tile),this.target=T,i=i.replacedBy,this.onTargetChange(e));let y=this.game.isValidTarget(i)&&!this.shouldDropTarget(i);if(y){let r=this.weapon.targeting.canTarget(i,this.target.tile,this.game,!!this.options.force,!!this.options.passive);if(!r||!e.armedTrait.isEquippedWithWeapon(this.weapon)){var T=t.selectWeaponVersus(e,this.target,this.game,this.options.force,this.options.passive);if(T){if(this.setWeapon(T),t.attackState!==h.AttackState.CheckRange)return t.attackState=h.AttackState.CheckRange,this.onTick(e);r=!0}else r=!1}y=r}if(y&&(S=this.lastTargetTpCheck,i?.isUnit()&&S&&i.moveTrait.lastTeleportTick>=S?(y=!1,this.rangeCheckCooldown=0):this.lastTargetTpCheck=this.game.currentTick),y&&i&&(this.lastValidTargetPosition={tile:i.tile,onBridge:this.target.getBridge()}),y||(this.targetLinesConfig.isAttack=!1),t.attackState===h.AttackState.CheckRange){if(0this.weapon.range)r.retarget(this.target.obj,!!this.target.getBridge()),this.lastSelfTileBeforeMove=e.tile,this.lastSelfMoveTargetTile=this.target.obj?.tile??this.target.tile;else{if(void 0!==this.options.leashTiles&&this.rangeHelper.tileDistance(this.initialSelfPosition.tile,e.tile)>this.options.leashTiles)return r.cancel(),!0;var w=n instanceof u.GameObject&&n.isUnit()?n.moveTrait.baseSpeed:0,O=Math.ceil((this.rangeHelper.tileDistance(e,n)-(this.weapon.range+1))/((e.moveTrait.baseSpeed+w)/m.Coords.LEPTONS_PER_TILE));03||(0!e.cancellable))&&this.weapon.rules.limboLaunch)return!1;if(r&&r.shouldAirStrafe(e)&&this.target.obj?.isUnit()&&this.target.obj.moveTrait.isMoving()&&1=w)return!1}else if(Math.abs(A-e.direction)>=w){if(e.isAircraft())return e.direction=o.FacingUtil.tick(e.direction,A,e.rules.rot).facing,!1;if(r)return!1;if(e.isVehicle())return!!this.options.disallowTurning||(this.children.push(new l.TurnTask(A)),!1);e.direction=A}}return this.losHelper.hasLineOfSight(e,this.target.obj||this.target.tile,this.weapon)?!t.isOnCooldown(e)&&((!this.weapon.warhead.rules.temporal||e.temporalTrait.getTarget()!==this.target.obj)&&(this.weapon.rules.suicide&&this.weapon.type!==n.WeaponType.DeathWeapon?(this.game.destroyObject(e,{player:e.owner,obj:e,weapon:this.weapon}),!0):(A=this.game.rules.general.prism.type,e.isBuilding()&&e.name===A&&this.weapon.type!==n.WeaponType.Secondary&&this.fireUpPrismSupportTowers(e,A),(e.isInfantry()||e.isVehicle())&&(e.isFiring=!0),e.art.fireUp?(this.children.push(new c.WaitTicksTask(e.art.fireUp).setCancellable(!1)),t.attackState=h.AttackState.FireUp,!1):(t.attackState=h.AttackState.Firing,this.onTick(e))))):(t.attackState=h.AttackState.CheckRange,this.onTick(e))}shouldDropTarget(e){return this.forceDropTarget||e?.isTechno()&&(this.weapon.rules.limboLaunch&&((e.isVehicle()||e.isAircraft())&&e.parasiteableTrait?.isInfested()||e.invulnerableTrait.isActive())||e.warpedOutTrait.isInvulnerable()&&!this.weapon.warhead.rules.temporal||this.initialTargetOwner!==e.owner)}fireUpPrismSupportTowers(e,t){var i;for(i of e.owner.getOwnedObjectsByType(f.ObjectType.Building).filter((e=>e.name===t&&e.secondaryWeapon&&!e.unitOrderTrait.hasTasks()&&e.attackTrait&&!e.attackTrait.isDisabled()&&!e.attackTrait.isOnCooldown(e))).filter((t=>this.rangeHelper.isInWeaponRange(t,e,t.secondaryWeapon,this.game.rules))).slice(0,this.game.rules.general.prism.supportMax))i.unitOrderTrait.addTask(i.attackTrait.createAttackTask(this.game,e,e.centerTile,i.secondaryWeapon,{passive:!0}))}countSupportBeamsAndFireDownTowers(e,t){var i,r=e.owner.getOwnedObjectsByType(f.ObjectType.Building).filter((i=>i.name===t&&i.attackTrait?.currentTarget?.obj===e));for(i of r)i.unitOrderTrait.getCurrentTask()?.cancel();return Math.min(this.game.rules.general.prism.supportMax,r.length)}getTargetLinesConfig(){return this.targetLinesConfig}},e("AttackTask",O)}}})),System.register("game/gameobject/trait/ParasiteableTrait",["game/gameobject/common/DeathType","game/gameobject/unit/ZoneType","game/gameobject/Vehicle","game/gameobject/trait/interface/NotifyAttack","game/gameobject/trait/interface/NotifyDestroy","game/gameobject/trait/interface/NotifyHeal","game/gameobject/trait/interface/NotifyDamage","game/gameobject/trait/interface/NotifyTeleport","game/gameobject/trait/interface/NotifyTick","game/type/MovementZone","game/gameobject/task/system/WaitMinutesTask","game/GameSpeed","game/map/tileFinder/RadialTileFinder","game/gameobject/task/AttackTask"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p,m,f,y;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e},function(e){m=e}],execute:function(){f=()=>s.ROCKING_TICKS+2,y=class{constructor(e){this.gameObject=e,this.beingBoarded=!1}infest(e,t){this.beingBoarded=!1,this.parasite=e,this.parasiteWeapon=t,e.rules.organic?this.damageTickCooldown=f():this.damageTickCooldown=0,this.lastExternalDamageInflicted=void 0,this.lastExternalDamageTick=void 0,t.warhead.rules.paralyzes&&this.gameObject.moveTrait.setDisabled(!0)}isInfested(){return!(!this.parasite||this.parasite.isDestroyed)||this.beingBoarded}isParalyzed(){return!!this.parasiteWeapon?.warhead.rules.paralyzes}uninfest(){this.parasite&&(this.parasiteWeapon.warhead.rules.paralyzes&&this.gameObject.moveTrait.setDisabled(!1),this.parasite=void 0,this.parasiteWeapon=void 0)}getParasite(){return this.parasite}[h.NotifyTick.onTick](e,t){if(this.parasite)if(this.parasite.isDestroyed)this.uninfest();else if(0t.rules.suppressionThreshold&&e.currentTick-this.lastExternalDamageTick<2*this.lastExternalDamageInflicted}[c.NotifyTeleport.onBeforeTeleport](e,t,i,r){var s;i&&r&&this.parasite&&!this.parasite.isDestroyed&&(this.parasiteWeapon.expireCooldown(),s=this.parasite,this.evictOrDestroyParasite(e,t,!0),s.isDestroyed||this.stunParasite(s,t))}stunParasite(e,t){e.unitOrderTrait.addTaskToFront(new d.WaitMinutesTask(10/60).setCancellable(!1)),e.isVehicle()&&e.submergibleTrait&&(e.submergibleTrait.emerge(e,t),e.cloakableTrait?.uncloak(t),e.submergibleTrait.setCooldown(10*g.GameSpeed.BASE_TICKS_PER_SECOND))}evictOrDestroyParasite(e,t,s=!1){if(this.parasite&&!this.parasite.isDestroyed){var n=e.zone===r.ZoneType.Air;if(n&&this.parasite.rules.movementZone!==u.MovementZone.Fly||!n&&!t.map.terrain.getPassableSpeed(e.tile,this.parasite.rules.speedType,e.onBridge)&&!t.map.getObjectsOnTile(e.tile).find((e=>e.isBuilding())))this.parasite.deathType=i.DeathType.None,t.destroyObject(this.parasite,{player:e.owner,obj:e});else{let r=e.tile,a=e.onBridge;if(!s&&!e.isDestroyed||this.parasite.rules.organic){if(!(n=new p.RadialTileFinder(t.map.tiles,t.map.mapBounds,r,{width:1,height:1},1,1,(e=>0t.isBuilding()&&t.dockTrait?.isDocked(e)))||t.map.getTileZone(e.tile)!==a.ZoneType.Water&&0!(e.isInfantry()&&e.stance===h.StanceType.Paradrop))).reduce(((e,t)=>Math.max(e,t.tileElevation+t.art.height)),0),i.Coords.tileHeightToWorld(o)+e.rules.jumpjetHeight);var n,o,u=e.position.worldPosition.y;g!==u?(n=e.rules.jumpjetClimb,o=Math.abs(g-u),n=Math.sign(g-u)*Math.min(n,o),o=e.tileElevation,e.position.moveByLeptons3(new d.Vector3(0,n,0)),e.moveTrait.handleElevationChange(o,t)):s&&(e.zone=a.ZoneType.Ground,e.onBridge=!!r,t.events.dispatch(new l.ObjectLandEvent(e)))}}static tickCrash(e,t,i){var r=2*e.rules.jumpjetCrash;return e.direction=(e.direction-6+360)%360,new d.Vector3(0,-r,0)}onNewWaypoint(e,t,i){this.currentMoveDir=r.FacingUtil.toMapCoords(e.direction),this.cancelDestLeptons=void 0}tick(e,t,l,c){if(e.zone!==a.ZoneType.Air&&(e.onBridge=!1,e.zone=a.ZoneType.Air,this.game.events.dispatch(new o.ObjectLiftOffEvent(e))),c){if(!this.cancelDestLeptons){let t=e.tile;this.game.map.isWithinBounds(t)||(t=this.game.map.clampWithinBounds(t)),this.cancelDestLeptons=this.computeCancelDest(t,l)}l=this.cancelDestLeptons}var u=e.position.getMapPosition();let g=l.clone().sub(u);var p=this.findTilesToCheckForBlockers(e.tile,u,this.currentMoveDir,g.length()).map((e=>e.z+this.game.map.getGroundObjectsOnTile(e).filter((e=>!(e.isDestroyed||e.isInfantry()&&e.stance===h.StanceType.Paradrop))).reduce(((e,t)=>Math.max(e,t.tileElevation+t.art.height)),0))).reduce(((e,t)=>Math.max(e,t)),0);let m=0;(void 0===this.lastClearZ||2=g.length()):((u=A||w?s.TargetUtil.computeTurnCircle(u,this.currentMoveDir,Math.sign(w)*e.rules.jumpjetTurnRate,A):void 0)&&n.circleContainsPoint(u,l)?(O=0,this.currentHorizSpeed=0):O=A,!1)),M=S?(E=!0,g):this.currentMoveDir.clone().setLength(O);let R=new d.Vector3(M.x,x,M.y);return S=R.clone(),e.moveTrait.velocity.copy(S),{distance:R,done:E&&C}}findTilesToCheckForBlockers(e,t,r,s){var n=r.clone().setLength(Math.min(s,i.Coords.LEPTONS_PER_TILE)).add(t).multiplyScalar(1/i.Coords.LEPTONS_PER_TILE).floor(),a=this.game.map.tiles.getByMapCoords(n.x,n.y);if(!a||a===e)return[e];n=Math.sign(a.rx-e.rx),a=Math.sign(a.ry-e.ry);let o,l=[e];return n&&(o=this.game.map.tiles.getByMapCoords(e.rx+n,e.ry),o&&l.push(o)),a&&(o=this.game.map.tiles.getByMapCoords(e.rx,e.ry+a),o&&l.push(o)),n&&a&&(o=this.game.map.tiles.getByMapCoords(e.rx+n,e.ry+a),o&&l.push(o)),l}computeCancelDest(e,t){var r=t.clone().multiplyScalar(1/i.Coords.LEPTONS_PER_TILE).floor().multiplyScalar(i.Coords.LEPTONS_PER_TILE);r=t.clone().sub(r);return new u.Vector2(e.rx,e.ry).multiplyScalar(i.Coords.LEPTONS_PER_TILE).add(r)}})}}})),System.register("game/gameobject/task/MoveToDockTask",["game/gameobject/task/system/Task","game/map/tileFinder/RadialTileFinder","game/gameobject/task/move/MoveTask","game/gameobject/task/system/WaitMinutesTask","game/gameobject/task/system/CallbackTask","game/gameobject/trait/MoveTrait","game/type/MovementZone","game/gameobject/trait/interface/NotifyTick","game/Coords","game/math/Vector2"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e}],execute:function(){var t;(t=d=d||{})[t.Idle=0]="Idle",t[t.MoveToQueueingTile=1]="MoveToQueueingTile",t[t.WaitForTurn=2]="WaitForTurn",t[t.MoveToDock=3]="MoveToDock",t[t.Docking=4]="Docking",t[t.Docked=5]="Docked",g=class extends i.Task{constructor(e,t){super(),this.game=e,this.target=t,this.useChildTargetLines=!0,this.preventOpportunityFire=!1,this.dockingStatus=d.Idle}onStart(e){if(!this.target.dockTrait)throw new Error(`Target object "${this.target.name}" is not a valid dock`);var t;this.target.dockTrait.hasReservedDockForUnit(e)?this.dockingStatus=d.MoveToDock:void 0!==(t=this.target.dockTrait.getFirstAvailableDockNumber())?(this.target.dockTrait.reserveDockAt(e,t),this.dockingStatus=d.MoveToDock):this.target.helipadTrait?this.cancel():this.dockingStatus=d.MoveToQueueingTile}onEnd(e){this.dockingStatus!==d.Docked&&this.target.isSpawned&&(this.target.dockTrait.undockUnit(e),this.target.dockTrait.unreserveDockForUnit(e)),this.dockingStatus=d.Idle}onTick(e){if(this.isCancelling())return!0;if(!this.isValidTarget(this.target,e))return!0;if(this.dockingStatus===d.MoveToQueueingTile){var t=this.findReachableQueueingTile(e);if(!t)return!0;if(e.tile!==t)return this.children.push(new s.MoveTask(this.game,t,!1,{closeEnoughTiles:5}),new a.CallbackTask((()=>{e.moveTrait.lastMoveResult===o.MoveResult.Fail?this.cancel():e.moveTrait.lastMoveResult===o.MoveResult.CloseEnough&&(this.game.map.tileOccupation.isTileOccupiedBy(e.tile,this.target)||(this.dockingStatus=d.WaitForTurn))}))),!1;this.dockingStatus=d.WaitForTurn}if(this.dockingStatus===d.WaitForTurn){if(void 0===(r=this.target.dockTrait.getFirstAvailableDockNumber()))return this.children.push(new n.WaitMinutesTask(1/60)),!1;this.target.dockTrait.reserveDockAt(e,r),this.dockingStatus=d.MoveToDock}if(this.dockingStatus===d.MoveToDock){var i=this.target.dockTrait.getReservedDockForUnit(e),r=this.target.dockTrait.getDockTile(i);i=h.Coords.vecWorldToGround(this.target.dockTrait.getDockOffset(i)).add(this.target.position.getMapPosition()).sub(new u.Vector2(r.rx,r.ry).multiplyScalar(h.Coords.LEPTONS_PER_TILE));if(e.tile!==r)return this.children.push(new s.MoveTask(this.game,r,!1,{targetOffset:e.isAircraft()?i:void 0,closeEnoughTiles:0,strictCloseEnough:!0}),new a.CallbackTask((()=>{e.moveTrait.lastMoveResult===o.MoveResult.Fail&&this.cancel()}))),this.game.afterTick((()=>e.unitOrderTrait[c.NotifyTick.onTick](e,this.game))),!1;this.dockingStatus=d.Docking}return this.dockingStatus===d.Docking&&(i=this.target.dockTrait.getReservedDockForUnit(e),this.target.dockTrait.unreserveDockForUnit(e),this.target.dockTrait.dockUnitAt(e,i),e.isAircraft()&&e.airportBoundTrait&&this.target.helipadTrait&&(e.airportBoundTrait.preferredAirport=this.target),this.dockingStatus=d.Docked,!0)}isValidTarget(e,t){return e.isSpawned&&this.game.areFriendly(e,t)}findReachableQueueingTile(e){var t=this.target.getFoundation();t=new u.Vector2(this.target.tile.rx+t.width,this.target.tile.ry+t.height);return(t=this.game.map.tiles.getByMapCoords(t.x,t.y))&&this.isValidQueueingTile(t,e)?t:new r.RadialTileFinder(this.game.map.tiles,this.game.map.mapBounds,this.target.tile,this.target.getFoundation(),1,1,(t=>this.isValidQueueingTile(t,e))).getNextTile()}isValidQueueingTile(e,t){return(t.rules.movementZone===l.MovementZone.Fly||0i.Coords.LEPTONS_PER_TILE?f.CircleStrafe:f.HoverStrafe:this.maneuverType=f.None,this.deceleratingToTurn=!1),e.zone!==a.ZoneType.Air&&(e.onBridge=!1,e.zone=a.ZoneType.Air,this.game.events.dispatch(new o.ObjectLiftOffEvent(e)));var y=e.tile.onBridgeLandType?this.game.map.tileOccupation.getBridgeOnTile(e.tile):void 0,T=e.tile.z+(y?.tileElevation??0),v=e.rules.flightLevel??this.game.rules.general.flightLevel,b=i.Coords.tileHeightToWorld(T)+v,S=(y=e.position.worldPosition.y,r.FacingUtil.fromMapCoords(u));let w;switch(e.direction===S&&this.maneuverType===f.None&&d<=i.Coords.LEPTONS_PER_TILE?this.maneuverType=f.HoverStrafe:e.direction===S&&this.maneuverType===f.CircleStrafe&&(this.maneuverType=f.None),this.maneuverType){case f.HoverStrafe:if(e.attackTrait?.currentTarget){let t=i.Coords.vecWorldToGround(e.attackTrait.currentTarget.getWorldCoords());w=r.FacingUtil.fromMapCoords(t.sub(h))}else w=e.airportBoundTrait?.preferredAirport?.dockTrait?.hasReservedDockForUnit(e)?0:270;break;case f.CircleStrafe:case f.None:w=S;break;default:throw new Error('Unknown maneuver type "'+this.maneuverType)}var{facing:C,delta:E}=r.FacingUtil.tick(e.direction,w,e.rules.rot);let x;switch(e.direction=C,e.roll=Math.sign(E)*e.rules.pitchAngle,this.maneuverType){case f.HoverStrafe:x=S;break;case f.CircleStrafe:x=(C-90*Math.sign(E)+360)%360;break;case f.None:x=C;break;default:throw new Error('Unknown maneuver type "'+this.maneuverType)}void 0===this.thrustFacing&&(this.thrustFacing=x);T=5i.Coords.LEPTONS_PER_TILE?this.deceleratingToTurn=!0:this.maneuverType===f.None&&(this.maneuverType=f.HoverStrafe)),M=I,!1):(M=Math.min(I,d),d<=I),k=d<1?(O=!0,u):O?u:this.currentMoveDir.clone().setLength(M);let B=new g.Vector3(k.x,A,k.y);return d=B.clone(),e.moveTrait.velocity.copy(d),{distance:B,done:O&&R}}computeCancelDest(e,t){var r=t.clone().multiplyScalar(1/i.Coords.LEPTONS_PER_TILE).floor().multiplyScalar(i.Coords.LEPTONS_PER_TILE);r=t.clone().sub(r);return new d.Vector2(e.rx,e.ry).multiplyScalar(i.Coords.LEPTONS_PER_TILE).add(r)}})}}})),System.register("game/gameobject/trait/interface/NotifyCrash",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){(i=i||{}).onCrash=Symbol(),e("NotifyCrash",i)}}})),System.register("game/gameobject/trait/CrashableTrait",["game/event/ObjectCrashingEvent","game/type/LocomotorType","game/gameobject/trait/interface/NotifyTick","game/gameobject/locomotor/JumpjetLocomotor","game/gameobject/locomotor/WingedLocomotor","game/gameobject/trait/interface/NotifyCrash"],(function(e,t){"use strict";var i,r,s,n,a,o,l;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e}],execute:function(){l=class{constructor(e){this.gameObject=e,this.crashingEvtSent=!1,this.crashState={}}[s.NotifyTick.onTick](e,t){if(e.isCrashing){if(this.crashingEvtSent||(this.crashingEvtSent=!0,e.traits.filter(o.NotifyCrash).forEach((i=>i[o.NotifyCrash.onCrash](e,t))),t.events.dispatch(new i.ObjectCrashingEvent(e))),e.rules.locomotor!==r.LocomotorType.Jumpjet&&e.rules.locomotor!==r.LocomotorType.Aircraft)throw new Error("Crashing logic not implemented for locomotor "+r.LocomotorType[e.rules.locomotor]);{let i;if(e.rules.locomotor===r.LocomotorType.Jumpjet)i=n.JumpjetLocomotor.tickCrash(e,t,this.crashState);else{if(e.rules.locomotor!==r.LocomotorType.Aircraft)throw new Error(`Unhandled locomotor type "${e.rules.locomotor}"`);if(!e.isAircraft())throw new Error(`Obj "${e.name}#${e.id} is not an aircraft`);i=a.WingedLocomotor.tickCrash(e,t,this.crashState)}let o=!1;var s,l,c=i.clone().add(e.position.worldPosition);t.map.isWithinHardBounds(c)?(l=e.tile,s=e.tileElevation,e.position.moveByLeptons3(i),e.tile!==l&&e.moveTrait.handleTileChange(l,void 0,!1,t),l=(c=e.tile.onBridgeLandType?t.map.tileOccupation.getBridgeOnTile(e.tile):void 0)?.tileElevation??0,e.position.tileElevation=Math.max(e.position.tileElevation,l),e.position.tileElevation===l&&(e.zone=t.map.getTileZone(e.tile),e.onBridge=!!c,o=!0),e.tileElevation!==s&&e.moveTrait.handleElevationChange(s,t)):o=!0,o&&t.destroyObject(e,this.attackerInfo)}}}crash(e){this.attackerInfo=e,this.gameObject.isCrashing=!0,this.gameObject.cachedTraits.tick.length=0,this.gameObject.cachedTraits.tick=[this]}dispose(){this.gameObject=void 0}},e("CrashableTrait",l)}}})),System.register("game/event/ShipSubmergeChangeEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("ShipSubmergeChangeEvent",class{constructor(e){this.target=e,this.type=i.EventType.ShipSubmergeChange}})}}})),System.register("game/gameobject/trait/SubmergibleTrait",["game/event/ShipSubmergeChangeEvent","game/GameSpeed","game/gameobject/trait/AttackTrait","game/gameobject/trait/interface/NotifyDamage","game/gameobject/trait/interface/NotifyTick"],(function(e,t){"use strict";var i,r,s,n,a,o;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){o=class{constructor(){this.isActive=!1}isSubmerged(){return this.isActive}setCooldown(e){this.cooldownTicks=e}[a.NotifyTick.onTick](e,t){this.isActive||e.parasiteableTrait?.isInfested()||(e.attackTrait&&e.attackTrait.attackState!==s.AttackState.Idle&&!e.moveTrait.isMoving()?this.cooldownTicks=Math.max(this.cooldownTicks??0,5*r.GameSpeed.BASE_TICKS_PER_SECOND):this.cooldownTicks??(this.cooldownTicks=Math.floor(60*t.rules.general.cloakDelay*r.GameSpeed.BASE_TICKS_PER_SECOND)),0=o.general.shipSinkingWeight||!t.naval),y.moveTrait=new n.MoveTrait(y,c),y.traits.add(y.moveTrait),t.crashable&&(y.crashableTrait=new g.CrashableTrait(y),y.traits.add(y.crashableTrait)),t.crewed&&(y.crewedTrait=new h.CrewedTrait,y.traits.add(y.crewedTrait)),t.harvester&&(y.harvesterTrait=new r.HarvesterTrait(t.storage),y.traits.add(y.harvesterTrait)),t.passengers&&(y.transportTrait=new s.TransportTrait(y),y.traits.add(y.transportTrait),t.gunner&&(y.gunnerTrait=new u.GunnerTrait,y.traits.add(y.gunnerTrait))),t.turret&&(y.turretTrait=new a.TurretTrait,y.traits.add(y.turretTrait)),t.consideredAircraft&&!t.landable||y.traits.add(new l.DockableTrait),t.parasiteable&&(y.parasiteableTrait=new d.ParasiteableTrait(y),y.traits.add(y.parasiteableTrait)),t.naval&&t.underwater&&(y.submergibleTrait=new p.SubmergibleTrait,y.traits.add(y.submergibleTrait)),t.locomotor===m.LocomotorType.Hover&&y.traits.add(new f.HoverBobTrait),[m.LocomotorType.Vehicle,m.LocomotorType.Chrono].includes(t.locomotor)&&i.isVoxel&&(y.tilterTrait=new T.TilterTrait,y.traits.add(y.tilterTrait)),y}isUnit(){return!0}isVehicle(){return!0}getUiName(){if(this.gunnerTrait){var e=this.armedTrait.getSpecialWeaponIndex(),t=this.gunnerTrait.getUiNameForIfvMode(e,this.transportTrait?.units[0]?.name);e="name:"+this.name;return t?`{${t}} {${e}}`:e}return super.getUiName()}update(e){this.rocking&&(this.rocking.ticksLeft--,this.rocking.ticksLeft||(this.rocking=void 0)),super.update(e)}applyRocking(e,t){this.rocking={ticksLeft:this.rocking?.ticksLeft??34,facing:e,factor:t}}},e("Vehicle",v)}}})),System.register("game/gameobject/Unit",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("game/gameobject/trait/DockableTrait",["game/gameobject/trait/interface/NotifyUnspawn","game/gameobject/trait/interface/NotifyOwnerChange","game/gameobject/trait/interface/NotifyTeleport"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=class{[i.NotifyUnspawn.onUnspawn](e){this.undock(e),this.reservedDock?.dockTrait.unreserveDockForUnit(e)}[r.NotifyOwnerChange.onChange](e){e.owner!==this.dock?.owner&&this.undock(e),e.owner!==this.reservedDock?.owner&&this.reservedDock?.dockTrait.unreserveDockForUnit(e)}[s.NotifyTeleport.onBeforeTeleport](e,t,i,r){r||this.undock(e)}undock(e){this.dock&&!this.dock.isDisposed&&this.dock.dockTrait.undockUnit(e)}dispose(){this.dock=void 0,this.reservedDock=void 0}},e("DockableTrait",n)}}})),System.register("game/gameobject/trait/AirportBoundTrait",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("AirportBoundTrait",class{constructor(e){this.airportNames=e}findAvailableAirport(e){return[...e.owner.buildings].find((e=>e.dockTrait&&this.airportNames.includes(e.name)&&0e.rules.spawner));e.ammo&&!(o&&e.attackTrait.currentTarget?o.equals(e.attackTrait.currentTarget):o===e.attackTrait.currentTarget||!o&&this.parent.isUnit()&&(this.parent.unitOrderTrait.getCurrentTask()instanceof r.MoveTask||this.parent.unitOrderTrait.getCurrentTask()instanceof i.AttackTask))&&(!o||a&&c.isInWeaponRange(this.parent,o.obj??o.tile,a,t.rules))?o&&e.primaryWeapon.targeting.canTarget(o.obj,o.tile,t,!0,!1)?!l||l instanceof r.MoveTask?(e.unitOrderTrait.cancelAllTasks(),e.unitOrderTrait.addTask(e.attackTrait.createAttackTask(t,o.obj,o.tile,e.primaryWeapon,{force:!0}))):e.attackTrait.attackState!==n.AttackState.Idle&&l.requestTargetUpdate(o):l?l instanceof r.MoveTask||l.cancel():this.tryMoveToParent(e,this.parent,t):this.tryMoveToParent(e,this.parent,t)}}tryMoveToParent(e,t,i){if(e.tile!==t.tile){let s=e.unitOrderTrait.getCurrentTask();s?s instanceof r.MoveTask&&s.updateTarget(t.tile,!!t.isUnit()&&t.onBridge):e.unitOrderTrait.addTask(new r.MoveTask(i,t.tile,!!t.isUnit()&&t.onBridge,{closeEnoughTiles:0,strictCloseEnough:!0}))}}},e("SpawnLinkTrait",o)}}})),System.register("game/gameobject/trait/MissileSpawnTrait",["game/gameobject/unit/CollisionType","game/gameobject/trait/interface/NotifyDestroy"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class{setWarhead(e){return this.warhead=e,this}setDamage(e){return this.damage=e,this}setLauncher(e){return this.launcher=e,this}[r.NotifyDestroy.onDestroy](e,t){this.warhead&&this.damage&&this.launcher&&this.warhead.detonate(t,this.damage,e.tile,e.tileElevation,e.position.worldPosition,e.zone,i.CollisionType.None,t.createTarget(void 0,e.tile),{player:e.owner,obj:this.launcher,weapon:void 0},!1,!1,void 0)}dispose(){this.launcher=void 0}},e("MissileSpawnTrait",s)}}})),System.register("game/gameobject/task/system/TaskGroup",["game/gameobject/task/system/Task"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.Task{constructor(...e){super(),this.children.push(...e)}onTick(e){return!0}},e("TaskGroup",r)}}})),System.register("game/gameobject/trait/UnlandableTrait",["game/math/Vector2","util/bresenham","util/typeGuard","game/gameobject/task/move/MoveTask","game/gameobject/task/system/CallbackTask","game/gameobject/task/system/TaskGroup","game/gameobject/trait/interface/NotifyTick"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e}],execute:function(){c=class{constructor(){this.enabled=!0}setEnabled(e){this.enabled=e}[l.NotifyTick.onTick](e,t){var i;this.enabled&&(e.owner.isNeutral||e.name===t.rules.general.paradrop.paradropPlane)&&e.unitOrderTrait.isIdle()&&(i=this.chooseExitTile(e.tile,t),e.unitOrderTrait.addTask(new o.TaskGroup(new n.MoveTask(t,i,!1,{allowOutOfBoundsTarget:!0}),new a.CallbackTask((e=>t.unspawnObject(e)))).setCancellable(!1)))}chooseExitTile(e,t){var n=t.map.tiles.getMapSize(),a=.5t.map.tiles.getByMapCoords(e.x,e.y))).filter(s.isNotNullOrUndefined);if(!a.length)throw new Error("No valid exit tile found");return a[a.length-1]}},e("UnlandableTrait",c)}}})),System.register("game/gameobject/Aircraft",["engine/type/ObjectType","game/gameobject/trait/MoveTrait","game/gameobject/unit/ZoneType","game/gameobject/trait/DockableTrait","game/gameobject/Techno","game/gameobject/trait/ParasiteableTrait","game/gameobject/trait/CrashableTrait","game/gameobject/trait/AirportBoundTrait","game/gameobject/trait/SpawnLinkTrait","game/gameobject/trait/MissileSpawnTrait","game/gameobject/unit/CrateBonuses","game/gameobject/trait/UnlandableTrait"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e}],execute:function(){p=class extends a.Techno{constructor(e,t,r){super(i.ObjectType.Aircraft,e,t,r),this.pitch=0,this.yaw=0,this.roll=0,this.onBridge=!1,this.zone=s.ZoneType.Ground,this.crateBonuses=new d.CrateBonuses}get direction(){return this.yaw}set direction(e){this.yaw=e}get isMoving(){return this.moveTrait.isMoving()}static factory(e,t,i,s,a){let d=new this(e,t,i);return d.rules.airportBound&&d.rules.dock.length&&(d.airportBoundTrait=new c.AirportBoundTrait(d.rules.dock),d.traits.add(d.airportBoundTrait)),d.rules.missileSpawn||(d.crashableTrait=new l.CrashableTrait(d),d.traits.add(d.crashableTrait)),d.rules.spawned&&(d.rules.missileSpawn?(d.missileSpawnTrait=new u.MissileSpawnTrait,d.traits.add(d.missileSpawnTrait)):(d.spawnLinkTrait=new h.SpawnLinkTrait,d.traits.add(d.spawnLinkTrait))),d.moveTrait=new r.MoveTrait(d,a),d.traits.add(d.moveTrait),t.dock.length&&d.traits.add(new n.DockableTrait),t.landable&&e!==s.general.paradrop.paradropPlane||d.traits.add(new g.UnlandableTrait),t.parasiteable&&(d.parasiteableTrait=new o.ParasiteableTrait(d),d.traits.add(d.parasiteableTrait)),d}isUnit(){return!0}isAircraft(){return!0}},e("Aircraft",p)}}})),System.register("util/array",[],(function(e,t){"use strict";return t&&t.id,e("findReverse",(function(e,t){for(let i=e.length-1;0<=i;i--)if(t(e[i],i,e))return e[i]})),e("findIndexReverse",(function(e,t){for(let i=e.length-1;0<=i;i--)if(t(e[i],i,e))return i;return-1})),e("equals",(function(e,t){if(e.length!==t.length)return!1;for(let i=0,r=e.length;ie.isUnit()&&e.owner===t.owner&&e.tile===i&&e.onBridge===!!h&&!(e.isInfantry()&&e.stance===c.StanceType.Paradrop)&&!(e.isAircraft()&&e.missileSpawnTrait)));return r.find((e=>e.moveTrait.collisionState===n.CollisionState.Waiting||e.unitOrderTrait.hasTasks()))?(this.children.push(new s.WaitTicksTask(5)),t.moveTrait.collisionState=n.CollisionState.Waiting,t.moveTrait.moveState=n.MoveState.PlanMove,!1):(r.forEach((t=>{t.unitOrderTrait.addTask(new e(this.game,this.fromDirection))})),this.children.push(new s.WaitTicksTask(1)),t.moveTrait.collisionState=n.CollisionState.Waiting,t.moveTrait.moveState=n.MoveState.PlanMove,!(this.chainPushIssued=!0))}}},e("MoveAsideTask",h)}}})),System.register("game/gameobject/Terrain",["engine/type/ObjectType","game/gameobject/GameObject"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.GameObject{constructor(e,t,r){super(i.ObjectType.Terrain,e,t,r),this.radarInvisible=this.rules.radarInvisible}static factory(e,t,i){return new this(e,t,i)}},e("Terrain",s)}}})),System.register("game/gameobject/locomotor/ChronoLocomotor",["game/math/Vector2","game/math/Vector3"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("ChronoLocomotor",class{constructor(e){this.game=e,this.ignoresTerrain=!0,this.distanceToWaypoint=new i.Vector2}onNewWaypoint(e,t){}tick(e,t,i,s){if(s)return{distance:new r.Vector3,done:!0};this.distanceToWaypoint.copy(t).sub(e.position.getMapPosition());var n,a=this.game.rules.general;return a.chronoTrigger&&(a=(n=this.distanceToWaypoint.length())=this.cruiseAltitude)){y=!1;break}this.flightPhase=u.Midcourse;case u.Midcourse:var T,v=new l.Vector2(m.x,m.z).length();if(!this.missileRules.lazyCurve){n.rotateVec3Towards(this.currentVelocity,new o.Vector3(this.currentVelocity.x,0,this.currentVelocity.z),e.rules.rot),this.currentVelocity.y<1&&(T=this.currentVelocity.length(),this.currentVelocity.y=0,this.currentVelocity.setLength(T)),n.rotateVec3Towards(this.currentVelocity,new o.Vector3(m.x,this.currentVelocity.y,m.z),e.rules.rot),e.direction=a.FacingUtil.fromMapCoords(i.Coords.vecWorldToGround(this.currentVelocity)),e.pitch=Math.sign(this.currentVelocity.y)*n.angleDegBetweenVec3(this.currentVelocity,new o.Vector3(this.currentVelocity.x,0,this.currentVelocity.z)),v/(p.y-this.targetPosition.y)<1&&(this.flightPhase=u.Terminal);break}this.flightPhase=u.Terminal;var b=p.clone().add(this.currentVelocity.clone().setLength(v/3/h.GameMath.cos(n.degToRad(e.pitch)))),S=this.targetPosition.clone().lerp(p,.15).setY(b.y);this.descentCurve=new c.CubicBezierCurve3(p,b,S,this.targetPosition);case u.Terminal:if(b=this.missileRules.bodyLength,this.missileRules.lazyCurve){var w=this.descentCurve.getLength();this.descentTravelled??(this.descentTravelled=0),this.descentTravelled+=Math.min(g,w-b-this.descentTravelled),S=this.descentTravelled/w;let t=this.descentCurve.getPointAt(S),i=this.descentCurve.getTangentAt(S);this.currentVelocity.copy(t.sub(p)),S=i.clone().setY(0),e.pitch=Math.sign(i.y-S.y)*n.angleDegBetweenVec3(S,i),y=1<=(this.descentTravelled+b)/w}else n.rotateVec3Towards(this.currentVelocity,m,e.rules.rot),e.direction=a.FacingUtil.fromMapCoords(i.Coords.vecWorldToGround(this.currentVelocity)),e.pitch=Math.sign(this.currentVelocity.y)*n.angleDegBetweenVec3(this.currentVelocity,new o.Vector3(this.currentVelocity.x,0,this.currentVelocity.z)),((w=m.length()-b)e.obj.isSpawned&&e.node.tile===e.obj.tile)),this.computeGroundPath(e)):[],e.rules.movementZone===s.MovementZone.Fly?(this.targetLinesConfig.pathNodes=i.map((({tile:e,onBridge:t})=>({tile:e,onBridge:t}))),i.length&&(this.targetLinesConfig.pathNodes[0].onBridge=this.toBridge?this.game.map.tileOccupation.getBridgeOnTile(this.targetTile):void 0)):this.targetLinesConfig.pathNodes=i,this.path=i}computeAirPath(e){return[{tile:this.targetTile,onBridge:void 0},{tile:e.tile,onBridge:void 0}]}computeDirectJumpPath(e){let t=this.game.map;var i=e.onBridge?t.tileOccupation.getBridgeOnTile(e.tile):void 0;let r=this.targetTile,s=this.toBridge?t.tileOccupation.getBridgeOnTile(this.targetTile):void 0,n=this.options?.ignoredBlockers;var a=new u.RadialTileFinder(t.tiles,t.mapBounds,r,{width:1,height:1},0,5,(i=>0!n?.includes(e.obj))))).getNextTile();return a?(a!==r&&(r=a,s=t.tileOccupation.getBridgeOnTile(r)),[{tile:r,onBridge:s},{tile:e.tile,onBridge:i}]):[]}computeGroundPath(e){let t,i=e.tile,r=e.onBridge?this.game.map.tileOccupation.getBridgeOnTile(i):void 0;e.moveTrait.moveState===o.MoveState.Moving&&e.moveTrait.currentWaypoint&&(i=e.moveTrait.currentWaypoint.tile,r=e.moveTrait.currentWaypoint.onBridge);var s=this.toBridge?this.game.map.tileOccupation.getBridgeOnTile(this.targetTile):void 0,n=this.nodeIsBlockedForPathfinding({tile:this.targetTile,onBridge:s},e);if(Math.abs(i.rx-this.targetTile.rx)<=1&&Math.abs(i.ry-this.targetTile.ry)<=1&&new h.MovePositionHelper(this.game.map).isEligibleTile(i,r,s,this.targetTile)&&n)t=[];else{const n=this.game.map.getObjectsOnTile(i).find((e=>e.isBuilding()));if(n&&!this.game.map.terrain.getPassableSpeed(i,e.rules.speedType,!1)){this.options??(this.options={});var a=this.options?.ignoredBlockers?.includes(n);if(this.options.ignoredBlockers=[...new Set([...this.options?.ignoredBlockers??[],n])],!a&&n.dockTrait){let e=new Set(n.dockTrait?.getAllDockTiles());this.game.map.tileOccupation.calculateTilesForGameObject(n.tile,n).filter((t=>!e.has(t))).forEach((e=>this.blockedPathNodes.push({node:{tile:e,onBridge:void 0},obj:n})))}}a=this.game.map.getGroundObjectsOnTile(this.targetTile).find((t=>(t.isInfantry()||t.isVehicle())&&t.disguiseTrait?.hasTerrainDisguise()&&!(this.game.alliances.haveSharedIntel(e.owner,t.owner)||t.owner.sharedDetectDisguiseTrait?.has(e)))),a&&this.blockedPathNodes.push({node:{tile:this.targetTile,onBridge:s},obj:a}),t=this.game.map.terrain.computePath(e.rules.speedType,i,!!r,this.targetTile,this.toBridge,{maxExpandedNodes:this.allObstaclesAreBlockers?Math.min(300,this.options?.maxExpandedPathNodes??Number.POSITIVE_INFINITY):this.options?.maxExpandedPathNodes,bestEffort:!this.options?.strictCloseEnough,ignoredBlockers:[...new Set([...this.options?.ignoredBlockers??[],...this.options?.pathFinderIgnoredBlockers??[]])],excludeTiles:this.allObstaclesAreBlockers||this.blockedPathNodes.length?t=>this.nodeIsBlockedForPathfinding(t,e):void 0})}return t}nodeIsBlockedForPathfinding(e,t){return this.allObstaclesAreBlockers?!!this.game.map.terrain.findObstacles(e,t).find((e=>!this.options?.ignoredBlockers?.includes(e.obj))):!!this.blockedPathNodes.find((({node:t})=>t.tile===e.tile&&t.onBridge===e.onBridge))}updateDestination(e,t){var i=e.length?e[0].tile:this.targetTile;this.destinationLeptons.set(i.rx*p.Coords.LEPTONS_PER_TILE,i.ry*p.Coords.LEPTONS_PER_TILE).add(t)}canStopAtTile(e,t,i){if(e.zone===f.ZoneType.Air){if((!e.isAircraft()||!e.airportBoundTrait)&&!e.rules.spawned&&(!this.game.map.terrain.getPassableSpeed(t,a.SpeedType.Amphibious,i)||this.game.map.getObjectsOnTile(t).filter((i=>i.isBuilding()&&!i.isDestroyed&&!i.dockTrait?.hasReservedDockForUnit(e)&&!e.rules.dock.includes(i.name)||i.isUnit()&&i.tile===t&&i.moveTrait.moveState!==o.MoveState.Moving&&i!==e)).length))return!1}else if(e.isInfantry()){let r=this.game.map.getGroundObjectsOnTile(t).filter((r=>r.isInfantry()&&r.tile===t&&r.onBridge===i&&r.moveTrait.moveState!==o.MoveState.Moving&&r!==e));if(2t.position.subCell===e.position.subCell)))return!1}return!(e.zone!==f.ZoneType.Air&&e.rules.tooBigToFitUnderBridge&&!i&&t.onBridgeLandType&&this.game.map.tileOccupation.getBridgeOnTile(t)?.isHighBridge()||!this.isCancelling()&&this.options?.strictCloseEnough&&void 0!==this.options?.closeEnoughTiles&&!this.isCloseEnoughToDest(e,t,this.options.closeEnoughTiles))}isCloseEnoughToDest(e,t,i){if(void 0===i)return!0;return!(new d.RangeHelper(this.game.map.tileOccupation).tileDistance(this.targetTile,t)>i)}hasReachedDestination(e){return!this.path.length}updateTarget(e,t){this.targetTile=e,this.toBridge=t,this.needsPathUpdate=!0,this.targetChangeRequested=!0}onEnd(e){e.moveTrait.collisionState=o.CollisionState.Resolved,e.moveTrait.currentWaypoint=void 0,this.targetOffset.equals(this.computeTargetOffset(e))||(e.moveTrait.lastTargetOffset=this.targetOffset)}forceCancel(e){return!(!this.cancellable||this.children.some((e=>!e.cancellable))||!this.options?.allowOutOfBoundsTarget&&!this.game.map.isWithinBounds(e.tile)||(this.status!==m.TaskStatus.Running&&this.status!==m.TaskStatus.Cancelling||(e.moveTrait.unreservePathNodes(),e.moveTrait.lastMoveResult=o.MoveResult.Cancel,this.onEnd(e),e.moveTrait.lastTargetOffset=this.targetOffset,e.moveTrait.lastVelocity=e.moveTrait.velocity.clone()),this.status=m.TaskStatus.Cancelled,0))}onTick(e){if(e.moveTrait.isDisabled()&&e.moveTrait.moveState===o.MoveState.ReachedNextWaypoint)return!!this.isCancelling()&&(e.moveTrait.lastMoveResult=o.MoveResult.Cancel,!0);this.needsPathUpdate&&(e.moveTrait.moveState===o.MoveState.PlanMove&&(this.inPlanningForTicks=void 0,e.moveTrait.currentWaypoint=void 0,e.moveTrait.collisionState=o.CollisionState.Resolved,e.moveTrait.moveState=o.MoveState.ReachedNextWaypoint,e.moveTrait.velocity.set(0,0,0)),this.computePath(e,e.moveTrait.locomotor),this.path.length||this.unreachableTargets.push({tile:this.targetTile,toBridge:this.toBridge}),this.updateDestination(this.path,this.targetOffset),this.targetLinesConfig.isRecalc=!this.targetChangeRequested,this.targetChangeRequested=!1,this.needsPathUpdate=!1,this.allObstaclesAreBlockers=!1);let t=this.game.map;if(e.moveTrait.moveState===o.MoveState.ReachedNextWaypoint){e.moveTrait.unreservePathNodes();var i=this.path.findIndex((t=>t===e.moveTrait.currentWaypoint));if(-1!==i?this.path.splice(i):this.path.pop(),e.moveTrait.currentWaypoint=void 0,this.isCancelling()?!this.cancelProcessed:this.hasReachedDestination(e)){var r=!this.isCancelling()&&!this.isCloseEnoughToDest(e,e.tile,this.options?.closeEnoughTiles);if(!r&&this.canStopAtTile(e,e.tile,e.onBridge))return e.moveTrait.lastMoveResult=this.isCancelling()?o.MoveResult.Cancel:o.MoveResult.Success,!0;{if(this.unreachableTargets.length>5)return e.moveTrait.lastMoveResult=o.MoveResult.Fail,this.log(e,"bail_max_unreachable_dest"),!0;let s=e.tile,n=e.onBridge?t.tileOccupation.getBridgeOnTile(s):void 0;return r&&(s=this.targetTile,n=this.toBridge?t.tileOccupation.getBridgeOnTile(s):void 0),(i=this.findRelocationTile(s,n,e))?(r=!n||n.isHighBridge()?t.tileOccupation.getBridgeOnTile(i):void 0,this.updateTarget(i,!!r),this.isCancelling()&&(this.cancelProcessed=!0,this.cancelRepositionPending=!0),!1):(e.moveTrait.lastMoveResult=r?o.MoveResult.Fail:o.MoveResult.CloseEnough,this.log(e,"bail_no_free_dest"),!0)}}if(this.cancelProcessed&&!this.path.length)return e.moveTrait.lastMoveResult=o.MoveResult.Cancel,!0;this.cancelProcessed=!1,e.moveTrait.moveState=o.MoveState.PlanMove;let s=e.moveTrait.locomotor;if(e.moveTrait.currentWaypoint=s.selectNextWaypoint?s.selectNextWaypoint(e,this.path):this.path[this.path.length-1],this.currentWaypointLeptons.set(e.moveTrait.currentWaypoint.tile.rx,e.moveTrait.currentWaypoint.tile.ry).multiplyScalar(p.Coords.LEPTONS_PER_TILE).add(this.targetOffset),r=s.onNewWaypoint(e,this.currentWaypointLeptons,this.destinationLeptons))return this.children.push(...r),!1}if(e.moveTrait.moveState===o.MoveState.PlanMove){if(this.isCancelling()&&!this.cancelRepositionPending)return e.moveTrait.currentWaypoint=void 0,e.moveTrait.moveState=o.MoveState.ReachedNextWaypoint,this.onTick(e);if(this.inPlanningForTicks=void 0===this.inPlanningForTicks?0:this.inPlanningForTicks+1,this.inPlanningForTicks>200)return this.needsPathUpdate=!0,this.allObstaclesAreBlockers=!0,e.moveTrait.velocity.set(0,0,0),this.log(e,"repath_plan_timeout"),!1;if(e.rules.movementZone!==s.MovementZone.Fly&&!e.moveTrait.locomotor.ignoresTerrain){let i=this.path.slice(this.path.indexOf(e.moveTrait.currentWaypoint)).reverse();var h,u,d,g=e.moveTrait.velocity.length();for(h of i){if(!t.terrain.getPassableSpeed(h.tile,e.rules.speedType,!!h.onBridge,this.options?.ignoredBlockers))return this.options?.stopOnBlocker&&t.terrain.findObstacles(h,e).some((e=>e.obj===this.options.stopOnBlocker))?(e.moveTrait.lastMoveResult=o.MoveResult.CloseEnough,!0):(this.needsPathUpdate=!0,e.moveTrait.currentWaypoint=void 0,e.moveTrait.moveState=o.MoveState.ReachedNextWaypoint,this.onTick(e));if(!h.onBridge){var m=t.getGroundObjectsOnTile(h.tile).find((e=>e.isOverlay()&&e.rules.crate));if(m&&this.game.crateGeneratorTrait.peekInsideCrate(m)===S.PowerupType.Unit&&(this.game.crateGeneratorTrait.pickupCrate(e,m,this.game),m=this.game.map.getGroundObjectsOnTile(h.tile).find((e=>e.isUnit()&&!e.onBridge)),m))return this.needsPathUpdate=!0,this.blockedPathNodes.push({node:h,obj:m}),e.moveTrait.currentWaypoint=void 0,e.moveTrait.moveState=o.MoveState.ReachedNextWaypoint,this.onTick(e)}for(u of t.terrain.findObstacles(h,e).filter((e=>!this.options?.ignoredBlockers?.includes(e.obj)))){if(u.static)return this.needsPathUpdate=!0,e.moveTrait.currentWaypoint=void 0,e.moveTrait.moveState=o.MoveState.ReachedNextWaypoint,this.onTick(e);if(u.obj.rules.crushable){if(!(e.rules.speedType!==a.SpeedType.Track||!e.crusher||u.obj.isTechno()&&this.game.areFriendly(u.obj,e)))continue;if(!u.obj.isTechno())return this.needsPathUpdate=!0,e.moveTrait.currentWaypoint=void 0,e.moveTrait.moveState=o.MoveState.ReachedNextWaypoint,this.onTick(e)}if(u.obj.isTerrain()){if(!e.isInfantry())throw new Error(`Obstacle ${u.obj.name} should be a blocker for non infantry`);var y=this.findFreeSubCell(e,h);return void 0!==y?this.relocateToSubCell(e,y):(this.needsPathUpdate=!0,this.blockedPathNodes.push({node:h,obj:u.obj}),e.moveTrait.currentWaypoint=void 0,e.moveTrait.moveState=o.MoveState.ReachedNextWaypoint),this.onTick(e)}if(!u.obj.isTechno())throw new Error("Unexpected obstacle of type "+u.obj.type);const r=u.obj;var T=r.isUnit()?r.moveTrait.velocity.length():0;if(!r.isAircraft()||r.zone!==f.ZoneType.Ground||!this.options?.ignoredBlockers?.some((e=>e.isBuilding()&&e.dockTrait?.isDocked(r)))){if(1===i.length&&r.isUnit()&&T&&g&&g<=T&&e.direction===r.direction&&r.tile===h.tile&&r.moveTrait.currentWaypoint?.tile!==h.tile)break;if(r.isBuilding()||r.moveTrait.moveState===o.MoveState.Idle||r.moveTrait.collisionState!==o.CollisionState.Resolved){if(!g&&e.moveTrait.collisionState!==o.CollisionState.Resolved&&r.isUnit()&&r.moveTrait.collisionState!==o.CollisionState.Resolved)return this.inPlanningForTicks+1>200&&(this.needsPathUpdate=!0,this.allObstaclesAreBlockers=!0,this.log(e,"repath_waited_too_long_blocker "+r.id),e.moveTrait.velocity.set(0,0,0)),!1;{if(r.isInfantry()&&e.isInfantry()&&r.moveTrait.collisionState===o.CollisionState.Resolved){var x=this.findFreeSubCell(e,h);if(void 0!==x)return this.relocateToSubCell(e,x),this.onTick(e)}if(y=n.findIndexReverse(this.path.slice(0,this.path.indexOf(h)),(i=>!t.terrain.findObstacles(i,e).length)),-1===y){if(this.canStopAtTile(e,e.tile,e.onBridge)&&this.isCloseEnoughToDest(e,e.tile,this.options?.closeEnoughTiles))return e.moveTrait.lastMoveResult=o.MoveResult.CloseEnough,this.log(e,"bail_waypoints_blocked_close_enough"),!0;if(!(0===this.options?.closeEnoughTiles||Math.abs(e.tile.rx-this.targetTile.rx)<=1&&Math.abs(e.tile.ry-this.targetTile.ry)<=1))return this.needsPathUpdate=!0,this.blockedPathNodes.push(...this.path.slice(0,this.path.indexOf(h)+1).map((i=>({node:i,obj:t.terrain.findObstacles(i,e)[0].obj})))),e.moveTrait.velocity.set(0,0,0),this.log(e,"repath_waypoints_blocked_too_far"),!1}let s;if(s=-1!==y?(x=this.path[y],t.terrain.computePath(e.rules.speedType,e.tile,e.onBridge,x.tile,!!x.onBridge,{maxExpandedNodes:15,bestEffort:!1,excludeTiles:i=>!!t.terrain.findObstacles(i,e).length})):[],s.length||r.owner!==e.owner||1!==i.length)return s.length?(this.path.splice(y,this.path.length,...s),e.moveTrait.currentWaypoint=void 0,e.moveTrait.moveState=o.MoveState.ReachedNextWaypoint,this.onTick(e)):((O=this.selectWeaponVsObstacle(e,r))?(this.children.push(e.attackTrait.createAttackTask(this.game,r,r.tile,O,{passive:!0,holdGround:!0})),e.moveTrait.velocity.set(0,0,0)):this.options?.forceWaitOnPathBlocked?(this.children.push(new l.WaitTicksTask(40)),this.inPlanningForTicks=0,e.moveTrait.velocity.set(0,0,0),e.moveTrait.collisionState=o.CollisionState.Waiting):(this.needsPathUpdate=!0,this.blockedPathNodes.push({node:h,obj:r}),r.isBuilding()&&(this.allObstaclesAreBlockers=!0),this.log(e,"repath_unavoidable_blocker "+r.id),e.moveTrait.velocity.set(0,0,0)),!1);if(O=r.unitOrderTrait.hasTasks(),this.pushTried||r.isBuilding()||r.moveTrait.collisionState===o.CollisionState.Waiting||O||r.isAircraft()&&r.missileSpawnTrait)return!this.options?.forceWaitOnPathBlocked&&(r.isBuilding()||O&&r.moveTrait.moveState===o.MoveState.Idle||this.inPlanningForTicks+40>200)?(this.needsPathUpdate=!0,this.allObstaclesAreBlockers=!0,this.log(e,"repath_blocker_busy_wait_timeout "+r.id),e.moveTrait.velocity.set(0,0,0)):(this.children.push(new l.WaitTicksTask(40)),this.options?.forceWaitOnPathBlocked?this.inPlanningForTicks=0:this.inPlanningForTicks+=40,e.moveTrait.velocity.set(0,0,0),e.moveTrait.collisionState=o.CollisionState.Waiting),!1;var O=new E.Vector2(r.tile.rx-e.tile.rx,r.tile.ry-e.tile.ry);return this.pushTried=!0,r.unitOrderTrait.addTask(new c.MoveAsideTask(this.game,O)),this.children.push(new l.WaitTicksTask(1)),e.moveTrait.velocity.set(0,0,0),e.moveTrait.collisionState=o.CollisionState.Waiting,this.log(e,"push "+r.id),!1}}if(!g)return this.inPlanningForTicks>40&&(e.moveTrait.collisionState=o.CollisionState.Waiting),!1;if(180===Math.abs(e.direction-r.direction))return e.moveTrait.velocity.set(0,0,0),e.moveTrait.collisionState=o.CollisionState.Waiting,!1;if(Math.abs(e.direction-r.direction)<=45&&1.5*T!t.terrain.findObstacles(i,e).length));if(-1!==i&&(T=this.path[i],T=t.terrain.computePath(e.rules.speedType,e.tile,e.onBridge,T.tile,!!T.onBridge,{maxExpandedNodes:15,bestEffort:!1,excludeTiles:r=>!!t.terrain.findObstacles(r,e).length||this.path.findIndex((e=>e.tile===r.tile&&e.onBridge===r.onBridge))>i}),T.length))return this.path.splice(i,this.path.length,...T),e.moveTrait.currentWaypoint=void 0,e.moveTrait.moveState=o.MoveState.ReachedNextWaypoint,this.onTick(e)}return e.moveTrait.collisionState=o.CollisionState.Waiting,e.moveTrait.velocity.set(0,0,0),!1}return e.moveTrait.velocity.set(0,0,0),e.moveTrait.collisionState=o.CollisionState.Waiting,!1}}}if(e.rules.speedType===a.SpeedType.Track&&g)if(0<(M=this.path.indexOf(e.moveTrait.currentWaypoint))){let i=this.path[M-1];for(d of t.getGroundObjectsOnTile(i.tile).filter((t=>t.isUnit()&&t.onBridge===!!i.onBridge&&t.rules.crushable&&t.veteranTrait?.hasVeteranAbility(C.VeteranAbility.SCATTER)&&!this.game.areFriendly(t,e))))d.unitOrderTrait.hasTasks()||d.unitOrderTrait.addTask(new w.ScatterTask(this.game))}e.moveTrait.reservedPathNodes.length||(e.moveTrait.reservedPathNodes.push(...i),i.forEach((i=>{t.tileOccupation.occupySingleTile(i.tile,e)})))}e.moveTrait.moveState=o.MoveState.Moving,this.inPlanningForTicks=void 0,this.unreachableTargets.length=0,this.pushTried=!1,e.moveTrait.collisionState===o.CollisionState.Waiting&&(e.moveTrait.collisionState=o.CollisionState.Resolved)}if(e.moveTrait.moveState===o.MoveState.Moving){let t=e.moveTrait.locomotor,{distance:i,done:s,isTeleport:a}=t.tick(e,this.currentWaypointLeptons,this.destinationLeptons,(this.isCancelling()||!this.path.length)&&!this.cancelRepositionPending);if(a&&e.traits.filter(b.NotifyTeleport).forEach((t=>{t[b.NotifyTeleport.onBeforeTeleport](e,this.game,!0,!0)})),i.length()&&(r=e.tile,M=t.allowOutOfBounds,i.y?(A=e.tileElevation,e.position.moveByLeptons3(i,M),e.moveTrait.handleElevationChange(A,this.game)):e.position.moveByLeptons(i.x,i.z,M),e.tile!==r)){var A=e.onBridge?this.game.map.tileOccupation.getBridgeOnTile(r):void 0,M=n.findReverse(this.path,(t=>t.tile===e.tile));A=M?M.onBridge:A||e.moveTrait.currentWaypoint.onBridge?this.game.map.tileOccupation.getBridgeOnTile(e.tile):void 0;if(e.moveTrait.handleTileChange(r,A,!1,this.game,a),a&&(e.moveTrait.lastTeleportTick=this.game.currentTick,this.game.events.dispatch(new v.ObjectTeleportEvent(e,!0,r))),e.isDestroyed)return!0}if(s)return e.moveTrait.moveState=o.MoveState.ReachedNextWaypoint,this.onTick(e)}return!1}selectWeaponVsObstacle(e,t){let i;if(!this.game.areFriendly(t,e)&&e.attackTrait&&!e.attackTrait.isDisabled()&&e.attackTrait.isIdle()&&(i=e.attackTrait.selectWeaponVersus(e,t,this.game,!1,!0))&&i.name!==e.armedTrait?.deathWeapon?.name&&(!i.rules.limboLaunch||!i.warhead.rules.parasite)&&!i.warhead.rules.mindControl)return i}findRelocationTile(e,t,i){let r,n=this.game.map;if(i.rules.movementZone===s.MovementZone.Fly){r=new T.RandomTileFinder(n.tiles,n.mapBounds,e,1,this.game,(e=>!0)).getNextTile()}else{let s=new h.MovePositionHelper(n),a=new u.RadialTileFinder(n.tiles,n.mapBounds,e,{width:1,height:1},0,5,(r=>{let a=!t||t.isHighBridge()?n.tileOccupation.getBridgeOnTile(r):void 0;return!this.unreachableTargets.find((e=>e.tile===r&&e.toBridge===!!a))&&(i.zone===f.ZoneType.Air||!n.terrain.findObstacles({tile:r,onBridge:a},i).length&&s.isEligibleTile(r,a,t,e))&&this.canStopAtTile(i,r,!!a)}));r=a.getNextTile()}return r}findFreeSubCell(e,t){let i=this.game.map.getGroundObjectsOnTile(t.tile);var s=i.filter((i=>i.isInfantry()&&i.onBridge===!!t.onBridge&&i!==e)).map((e=>e.position.desiredSubCell)),n=i.filter((e=>e.isTerrain())).map((e=>e.rules.getOccupiedSubCells(this.game.map.getTheaterType()))).flat();let a=[...s,...n];return r.Infantry.SUB_CELLS.find((e=>-1===a.indexOf(e)))}relocateToSubCell(e,t){e.position.desiredSubCell=t;var i=e.position.computeSubCellOffset(t);this.targetOffset=i,this.currentWaypointLeptons.set(e.moveTrait.currentWaypoint.tile.rx,e.moveTrait.currentWaypoint.tile.ry).multiplyScalar(p.Coords.LEPTONS_PER_TILE).add(this.targetOffset),this.updateDestination(this.path,this.targetOffset),e.moveTrait.locomotor.onWaypointUpdate?.(e,this.currentWaypointLeptons,this.destinationLeptons)}getTargetLinesConfig(e){var t;return this.path||((t=e.moveTrait).locomotor??(t.locomotor=new y.LocomotorFactory(this.game).create(e)),this.computePath(e,e.moveTrait.locomotor),this.targetLinesConfig.isRecalc=!1),this.targetLinesConfig}log(e,t){this.logger.debug(`<${e.id}>: `+t)}},e("MoveTask",x)}}})),System.register("game/trait/interface/NotifyTileChange",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){(i=i||{}).onTileChange=Symbol(),e("NotifyTileChange",i)}}})),System.register("game/event/EnterTileEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("EnterTileEvent",class{constructor(e,t){this.target=e,this.source=t,this.type=i.EventType.EnterTile}})}}})),System.register("game/trait/interface/NotifyElevationChange",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){(i=i||{}).onElevationChange=Symbol(),e("NotifyElevationChange",i)}}})),System.register("game/gameobject/trait/MoveTrait",["game/gameobject/task/move/MoveTask","game/gameobject/trait/interface/NotifyTick","game/gameobject/trait/interface/NotifyDestroy","game/gameobject/unit/ZoneType","game/gameobject/infantry/InfDeathType","game/event/ObjectTeleportEvent","game/gameobject/common/DeathType","game/gameobject/trait/interface/NotifyTeleport","game/type/LocomotorType","game/gameobject/locomotor/JumpjetLocomotor","game/type/SpeedType","game/gameobject/locomotor/WingedLocomotor","game/gameobject/infantry/StanceType","game/trait/interface/NotifyTileChange","game/gameobject/trait/interface/NotifyTileChange","game/event/EnterTileEvent","game/math/Vector3","game/trait/interface/NotifyElevationChange"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p,m,f,y,T,v,b,S,w,C,E;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e},function(e){m=e},function(e){f=e},function(e){y=e},function(e){T=e},function(e){v=e}],execute:function(){var t;(t=b=b||{})[t.Idle=0]="Idle",t[t.ReachedNextWaypoint=1]="ReachedNextWaypoint",t[t.PlanMove=2]="PlanMove",t[t.Moving=3]="Moving",e("MoveState",b),(t=S=S||{})[t.Success=0]="Success",t[t.Cancel=1]="Cancel",t[t.CloseEnough=2]="CloseEnough",t[t.Fail=3]="Fail",e("MoveResult",S),(t=w=w||{})[t.Waiting=0]="Waiting",t[t.Resolved=1]="Resolved",e("CollisionState",w),C=e=>e instanceof i.MoveTask||e.children[0]&&C(e.children[0]),E=class{constructor(e,t){this.gameObject=e,this.tileOccupation=t,this.disabled=!1,this.speedPenalty=0,this.velocity=new T.Vector3,this.reservedPathNodes=[],this.moveState=b.Idle,this.collisionState=w.Resolved}get baseSpeed(){return this.gameObject.rules.speed*(this.gameObject.veteranTrait?.getVeteranSpeedMultiplier()??1)*this.gameObject.crateBonuses.speed*(this.gameObject.isVehicle()&&this.gameObject.healthTrait.health<=50&&this.gameObject.rules.locomotor!==h.LocomotorType.Hover?.75:1)*(1-this.speedPenalty)}isDisabled(){return this.disabled}setDisabled(e){this.disabled=e}isMoving(){return this.moveState===b.Moving}isIdle(){return this.moveState===b.Idle}isWaiting(){return this.collisionState===w.Waiting}[r.NotifyTick.onTick](e,t){var i;this.moveState!==b.Idle&&this.collisionState===w.Resolved&&((i=e.unitOrderTrait.getCurrentTask())&&C(i)||(this.velocity.set(0,0,0),this.moveState=b.Idle,this.locomotor=void 0,!i&&!e.attackTrait?.currentTarget&&e.isVehicle()&&e.turretTrait&&(e.turretTrait.desiredFacing=e.direction))),this.moveState===b.Idle&&(e.rules.locomotor===h.LocomotorType.Jumpjet?u.JumpjetLocomotor.tickStationary(e,t):e.isAircraft()&&e.rules.locomotor===h.LocomotorType.Aircraft&&g.WingedLocomotor.tickStationary(e,t))}[s.NotifyDestroy.onDestroy](e,t){this.unreservePathNodes()}teleportUnitToTile(e,t,i,r,s){let n=this.gameObject;var a=n.tile;n.traits.filter(c.NotifyTeleport).forEach((e=>{e[c.NotifyTeleport.onBeforeTeleport](n,s,i,r)})),n.position.tileElevation=n.tileElevation,n.position.tile=e,n.position.subCell=n.position.desiredSubCell,this.handleTileChange(a,t,!0,s,!0),r||(this.unreservePathNodes(),this.speedPenalty=0,this.velocity.set(0,0,0),this.moveState=b.Idle,this.collisionState=w.Resolved,this.locomotor=void 0,this.currentWaypoint=void 0,this.lastTargetOffset=void 0,this.lastVelocity=void 0,this.lastMoveResult=S.Cancel,n.isVehicle()&&(n.spinVelocity=0,n.turretTrait&&(n.turretTrait.desiredFacing=n.direction))),this.lastTeleportTick=s.currentTick,s.events.dispatch(new o.ObjectTeleportEvent(n,i,a))}handleTileChange(e,t,i,r,s=!1){const o=this.gameObject;if(r.map.tileOccupation.unoccupyTileRange(e,o),r.map.tileOccupation.occupyTileRange(o.tile,o),r.map.technosByTile.updateObject(o),o.zone!==n.ZoneType.Air){var c=o.onBridge?r.map.tileOccupation.getBridgeOnTile(e):void 0,h=o.onBridge?e.onBridgeLandType:e.landType,u=t?o.tile.onBridgeLandType:o.tile.landType;h!==u&&(0e.tile===o.tile&&!!e.onBridge===o.onBridge));if(-1!==c&&o.moveTrait.reservedPathNodes.splice(c,1),o.crusher)for(g of r.map.getGroundObjectsOnTile(o.tile).filter((e=>(!e.isUnit()||e.onBridge===o.onBridge)&&e.rules.crushable&&!(e.isInfantry()&&e.stance===p.StanceType.Paradrop)&&(!(e.isTechno()&&!i)||!r.areFriendly(e,o)))))g.isDestroyed||(g.isInfantry()&&(g.infDeathType=a.InfDeathType.None),o.isVehicle()&&g.isOverlay()&&g.rules.wall&&o.applyRocking(0,.5),g.deathType=l.DeathType.Crush,r.destroyObject(g,{player:o.owner,obj:o}));o.onBridge||(c=r.map.tileOccupation.getGroundObjectsOnTile(o.tile).find((e=>e.isOverlay()&&e.rules.crate)))&&r.crateGeneratorTrait.pickupCrate(o,c,r)}r.traits.filter(m.NotifyTileChange).forEach((t=>{t[m.NotifyTileChange.onTileChange](o,r,e,s)})),o.traits.filter(f.NotifyTileChange).forEach((t=>{t[f.NotifyTileChange.onTileChange](o,r,e,s)})),r.events.dispatch(new y.EnterTileEvent(o.tile,o))}handleElevationChange(e,t){t.traits.filter(v.NotifyElevationChange).forEach((i=>{i[v.NotifyElevationChange.onElevationChange](this.gameObject,t,e)}))}unreservePathNodes(){this.reservedPathNodes.forEach((e=>{e.tile!==this.gameObject.tile&&this.tileOccupation.unoccupySingleTile(e.tile,this.gameObject)})),this.reservedPathNodes.length=0}dispose(){this.gameObject=void 0}},e("MoveTrait",E)}}})),System.register("game/gameobject/trait/SuppressionTrait",["game/gameobject/trait/interface/NotifyTick"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class{constructor(){this.suppressionTicks=0,this.enabled=!0}disable(){this.enabled=!1}isSuppressed(){return this.enabled&&0e.rules.spySat))&&s.mapShroudTrait.resetShroud(t.owner,s),0100*this.evacThreshold}[s.NotifyDamage.onDamage](e,t){e.healthTrait.health<=100*this.evacThreshold&&this.evacuate(t)}[i.NotifyDestroy.onDestroy](e,t,i,r){if(r){for(var s of this.units)t.destroyObject(s,i,!0);this.units=[]}else this.evacuate(t)}getHash(){return n.fnv32a(this.units.map((e=>e.getHash())))}debugGetState(){return{units:this.units.map((e=>e.debugGetState()))}}dispose(){this.building=void 0}evacuate(e,t=!1){let i=this.building,s=this.units;if(s.length){let d=new Map;for(var n of s)d.set(n.rules.speedType,(d.get(n.rules.speedType)||[]).concat(n));for(let[n,a]of d){var l,c=new r.RadialTileFinder(e.map.tiles,e.map.mapBounds,i.tile,i.art.foundation,1,1,(t=>0{e[n.NotifyPower.onPowerChange](this.player,i)})),i.events.dispatch(new s.PowerChangeEvent(this.player,this.power,this.drain))}}updateLevel(e){var t=this.level;this.level=this.power>=this.drain&&!this.blackoutFrames?o.Normal:o.Low,this.level!==t&&(t===o.Normal&&this.level===o.Low&&(e.traits.filter(n.NotifyPower).forEach((t=>{t[n.NotifyPower.onPowerLow](this.player,e)})),e.events.dispatch(new i.PowerLowEvent(this.player))),t===o.Low&&this.level===o.Normal&&(e.traits.filter(n.NotifyPower).forEach((t=>{t[n.NotifyPower.onPowerRestore](this.player,e)})),e.events.dispatch(new r.PowerRestoreEvent(this.player))))}getHash(){return a.fnv32a([this.power,this.drain])}debugGetState(){return{power:this.power,drain:this.drain}}dispose(){this.player=void 0,this.powerByObject.clear()}})}}})),System.register("game/gameobject/trait/PoweredTrait",["game/player/trait/PowerTrait"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("PoweredTrait",class{constructor(e){this.obj=e,this.turnedOn=!0}setTurnedOn(e){this.turnedOn=e}isCharged(){return!!this.obj.isBuilding()&&!!this.obj.overpoweredTrait?.hasChargersToPowerOn()}isPoweredOn(e=!1){return!(!this.obj||!this.turnedOn||(e||!this.isCharged())&&(!this.obj.rules.power&&this.obj.rules.needsEngineer?this.obj.owner.isNeutral:!this.obj.owner.powerTrait||this.obj.owner.powerTrait?.level===i.PowerLevel.Low))}dispose(){this.obj=void 0}})}}})),System.register("game/player/production/ProductionQueue",["util/event"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e}],execute:function(){var t;(t=r=r||{})[t.Structures=0]="Structures",t[t.Armory=1]="Armory",t[t.Infantry=2]="Infantry",t[t.Vehicles=3]="Vehicles",t[t.Aircrafts=4]="Aircrafts",t[t.Ships=5]="Ships",e("QueueType",r),(t=s=s||{})[t.Idle=0]="Idle",t[t.Active=1]="Active",t[t.OnHold=2]="OnHold",t[t.Ready=3]="Ready",e("QueueStatus",s),e("ProductionQueue",class{constructor(e,t,r){this.type=e,this._maxSize=t,this.maxItemQuantity=r,this.items=[],this.size=0,this._status=s.Idle,this._onUpdate=new i.EventDispatcher}get onUpdate(){return this._onUpdate.asEvent()}get status(){return this._status}set status(e){var t=this._status;(this._status=e)!==t&&this._onUpdate.dispatch(this)}get maxSize(){return this._maxSize}set maxSize(e){var t=this.size;this.size=Math.min(e,this.size);let i=0,r=0;for(;i<=this.size&&rthis.size&&(e.quantity-=i-this.size),0t.rules===e))}getFirst(){return this.items[0]}getAll(){return[...this.items]}push(e,t,i){t=Math.min(this.maxSize-this.size,t);var r=this.find(e).reduce(((e,t)=>e+t.quantity),0);t=Math.min(this.maxItemQuantity-r,t),this.items[this.items.length-1]?.rules===e?this.items[this.items.length-1].quantity+=t:this.items.push({rules:e,quantity:t,creditsEach:i,creditsSpent:0,creditsSpentLeftover:0,progress:0}),this.size+=t,t&&(this._status===s.Idle&&(this._status=s.Active),this._onUpdate.dispatch(this))}pop(e,t){this.remove(e,t,!1)}shift(e,t){this.remove(e,t,!0)}remove(e,t,i){let n=this.find(e);if(!n.length)throw new Error(`Can't remove non-existent item ${e.name} from queue `+r[this.type]);var a;if(n.reduce(((e,t)=>e+t.quantity),0)0!0)){this.tiles=e,this.mapBounds=t,this.startTile=r,this.maxDistance=n,this.predicate=a,this.dirVec=new i.Vector2(10,0),this.finished=!1,this.diagonal=!0,this.distance=s}getNextTile(){if(!this.finished){let t;do{let r={x:this.startTile.rx,y:this.startTile.ry};r.x+=this.distance*Math.sign(this.dirVec.x),r.y+=this.distance*Math.sign(this.dirVec.y),this.dirVec.rotateAround(new i.Vector2,Math.PI/4*(this.diagonal?1:2)).round();var e=this.tiles.getByMapCoords(r.x,r.y);if(e&&this.mapBounds.isWithinBounds(e)&&this.predicate(e)&&(t=e),!this.dirVec.angle()){if(this.maxDistance&&this.distance>=this.maxDistance)return this.finished=!0,t;this.distance++}}while(!t);return t}}})}}})),System.register("game/gameobject/trait/DockTrait",["game/gameobject/trait/interface/NotifyDestroy","game/gameobject/trait/interface/NotifyOwnerChange","game/gameobject/trait/interface/NotifySell","game/gameobject/trait/DockableTrait","game/Coords","game/gameobject/trait/interface/NotifyTick","game/gameobject/trait/interface/NotifySpawn","util/typeGuard","game/gameobject/task/MoveToDockTask","game/gameobject/task/move/MoveTask","game/gameobject/task/system/CallbackTask","game/gameobject/task/system/TaskGroup","game/gameobject/trait/interface/NotifyUnspawn"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p,m;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e}],execute:function(){m=class{constructor(e,t,i,r){this.building=e,this.tiles=t,this.numberOfDocks=i,this.dockingOffsets=r,this.ticksWhenWarpedOut=!0,this.unitsByDockNumber=new Array(i).fill(void 0),this.reservedDocks=new Array(i).fill(void 0)}[l.NotifySpawn.onSpawn](){this.dockTiles=[];for(let t=0;tt.helipadTrait&&(t.dockTrait?.getAvailableDockCount()??!1)&&t!==e))){let e=i.dockTrait?.getAvailableDockCount()??0;for(;0{i.crashableTrait?i.crashableTrait.crash({player:e.owner}):t.destroyObject(i,{player:e.owner})}))).setCancellable(!1))),a++}else{var n,a=e.rules.unitRepair&&!e.rules.naval;for(n of this.unitsByDockNumber)n&&(a?t.sellTrait.sell(n):this.undockUnit(n))}}[r.NotifyOwnerChange.onChange](e,t,i){for(var r of this.unitsByDockNumber)r&&i.changeObjectOwner(r,e.owner)}getFirstAvailableDockNumber(){if(!this.building?.warpedOutTrait.isActive()){var e=this.unitsByDockNumber.findIndex(((e,t)=>!e&&!this.reservedDocks[t]));if(-1!==e)return e}}getAvailableDockCount(){return this.building?.warpedOutTrait.isActive()?0:this.unitsByDockNumber.filter(((e,t)=>!e&&!this.reservedDocks[t])).length}getFirstEmptyDockNumber(){if(!this.building?.warpedOutTrait.isActive()){var e=this.unitsByDockNumber.findIndex((e=>!e));if(-1!==e)return e}}getDockOffset(e){if(e>this.numberOfDocks-1)throw new RangeError(`Index ${e} exceeds available docks (${this.numberOfDocks})`);return this.dockingOffsets[e]}getDockTile(e){if(e>this.numberOfDocks-1)throw new RangeError(`Index ${e} exceeds available docks (${this.numberOfDocks})`);return this.dockTiles[e]}getDockNumberByTile(e){var t=this.dockTiles.indexOf(e);if(-1!==t)return t}getAllDockTiles(){return[...this.dockTiles]}findDockTile(e){if(e>this.numberOfDocks-1)throw new RangeError(`Index ${e} exceeds available docks (${this.numberOfDocks})`);var t=this.building.position.getMapPosition(),i=this.getDockOffset(e);return this.tiles.getByMapCoords(Math.floor((t.x+i.x)/a.Coords.LEPTONS_PER_TILE),Math.floor((t.y+i.z)/a.Coords.LEPTONS_PER_TILE))}isValidUnitForDock(e){return(this.building.unitRepairTrait&&e.isVehicle()&&!this.building.helipadTrait&&(!e.rules.consideredAircraft||e.rules.landable)||e.rules.dock.includes(this.building.name)&&!(e.isAircraft()&&!this.building.helipadTrait))&&this.building.rules.naval===e.rules.naval}dockUnitAt(e,t){if(t>this.numberOfDocks-1)throw new RangeError(`Index ${t} exceeds available docks (${this.numberOfDocks})`);if(this.unitsByDockNumber[t])throw new Error("Another unit is already docked at dock #"+t);let i=e.traits.find(n.DockableTrait);if(!i)throw new Error(`Unit "${e.name}" cannot be docked to `+this.building.name);this.unitsByDockNumber[t]=e,i.dock=this.building}undockUnitAt(e){if(e>this.numberOfDocks-1)throw new RangeError(`Index ${e} exceeds available docks (${this.numberOfDocks})`);let t=this.unitsByDockNumber[e];t&&(this.unitsByDockNumber[e]=void 0,t.traits.get(n.DockableTrait).dock=void 0)}undockUnit(e){var t=this.unitsByDockNumber.indexOf(e);-1!==t&&this.undockUnitAt(t)}isDocked(e){return this.unitsByDockNumber.includes(e)}hasDockedUnits(){return!!this.unitsByDockNumber.find((e=>e))}getDockedUnits(){return this.unitsByDockNumber.filter(c.isNotNullOrUndefined)}reserveDockAt(e,t){if(t>this.numberOfDocks-1)throw new RangeError(`Index ${t} exceeds available docks (${this.numberOfDocks})`);if(this.reservedDocks[t])throw new Error(`Dock #${t} is already reserved by `+this.reservedDocks[t].name);(this.reservedDocks[t]=e).traits.get(n.DockableTrait).reservedDock?.dockTrait.unreserveDockForUnit(e),e.traits.get(n.DockableTrait).reservedDock=this.building}unreserveDockAt(e){if(e>this.numberOfDocks-1)throw new RangeError(`Index ${e} exceeds available docks (${this.numberOfDocks})`);let t=this.reservedDocks[e];t&&(this.reservedDocks[e]=void 0,t.traits.get(n.DockableTrait).reservedDock=void 0)}unreserveDockForUnit(e){var t=this.reservedDocks.indexOf(e);-1!==t&&this.unreserveDockAt(t)}hasReservedDockForUnit(e){return!!this.reservedDocks.includes(e)}hasReservedDockAt(e){return!!this.reservedDocks[e]}getReservedDockForUnit(e){var t=this.reservedDocks.indexOf(e);if(-1!==t)return t}dispose(){this.building=void 0}},e("DockTrait",m)}}})),System.register("game/event/FactoryProduceUnitEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("FactoryProduceUnitEvent",class{constructor(e){this.target=e,this.type=i.EventType.FactoryProduceUnit}})}}})),System.register("game/gameobject/trait/interface/NotifyWarpChange",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){(i=i||{}).onChange=Symbol(),e("NotifyWarpChange",i)}}})),System.register("game/trait/interface/NotifyProduceUnit",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){(i=i||{}).onProduce=Symbol(),e("NotifyProduceUnit",i)}}})),System.register("game/gameobject/trait/FactoryTrait",["game/gameobject/trait/interface/NotifyTick","game/player/production/ProductionQueue","game/rules/TechnoRules","game/gameobject/task/move/ExitFactoryTask","engine/type/TerrainType","game/gameobject/trait/interface/NotifySpawn","game/gameobject/trait/MoveTrait","game/map/tileFinder/CardinalTileFinder","game/gameobject/trait/DockTrait","game/event/FactoryProduceUnitEvent","game/gameobject/Infantry","game/map/TileOccupation","game/gameobject/task/move/MoveTask","game/map/tileFinder/RadialTileFinder","game/gameobject/trait/interface/NotifyWarpChange","game/gameobject/unit/VeteranLevel","game/trait/interface/NotifyProduceUnit","game/math/Vector2"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p,m,f,y,T,v,b,S;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e},function(e){m=e},function(e){f=e},function(e){y=e},function(e){T=e},function(e){v=e}],execute:function(){var t;(t=b=b||{})[t.Idle=0]="Idle",t[t.Delivering=1]="Delivering",e("FactoryStatus",b),S=class{constructor(e,t=!1){this.type=e,this.isCloningVats=t,this.status=b.Idle}[o.NotifySpawn.onSpawn](e,t){this.resetRallyPoint(e,t)}resetRallyPoint(e,t){var i;[s.FactoryType.BuildingType,s.FactoryType.AircraftType].includes(this.type)||(i=this.computeDefaultRallyPoint(e,this.type,t.map),e.rallyTrait?.changeRallyPoint(i,e,t))}[f.NotifyWarpChange.onChange](e,t,i){if(e.owner.production){let t=[];for(var n of(t=this.type===s.FactoryType.BuildingType?[r.QueueType.Structures,r.QueueType.Armory]:[e.owner.production.getQueueTypeForFactory(this.type)],t))e.owner.production.getQueue(n).notifyUpdated()}}[i.NotifyTick.onTick](e,t){if(this.status===b.Delivering){if(!this.deliveringUnit||this.deliveringUnit.isDestroyed){if(this.buildingProductionTicks=this.buildingProductionTicks??1,0e.factoryTrait?.type===s.FactoryType.AircraftType&&e.helipadTrait))){if(r)break;r=this.produceAircraftAt(i,a,t)}if(!r)return}else if(this.produceGroundUnitAt(e,a,t),!this.isCloningVats&&this.type===s.FactoryType.InfantryType){let i=[...e.owner.buildings].find((e=>e.factoryTrait&&e.rules.cloning));i?.factoryTrait.status===b.Idle&&i?.factoryTrait.produceGroundUnitAt(i,a,t)}e.owner.addUnitsBuilt(a.rules.type,1),a.creditsSpent=0,a.progress=0,n.shift(a.rules,1),n.currentSize&&(n.status=r.QueueStatus.Active)}}}}produceGroundUnitAt(e,t,i){let r=i.createUnitForPlayer(t.rules,e.owner);t.rules.trainable&&e.owner.canProduceVeteran(r.rules)&&r.veteranTrait?.setVeteranLevel(y.VeteranLevel.Veteran),r.isInfantry()&&(r.position.subCell=d.Infantry.SUB_CELLS[0]);let a,o=this.computeInternalRallyPoint(e,this.type,e.rallyTrait.getRallyPoint(),i.map);var c;let h;if(this.type!==s.FactoryType.UnitType&&(o=e.rallyTrait.findRallyPointforUnit(r,o,i.map,!1,e.tile.z)),a=this.type===s.FactoryType.NavalUnitType?o:(c=this.computeExitCoords(e,this.type),i.map.tiles.getByMapCoords(Math.floor(c.rx),Math.floor(c.ry))),r.rules.consideredAircraft&&(o=a),e.rallyTrait.getRallyPoint()!==o&&(h=e.rallyTrait.findRallyNodeForUnit(r,i.map)),r.isInfantry()){let e=i.map.tileOccupation.getObjectsOnTileByLayer(h?.tile??o,r.rules.consideredAircraft?g.LayerType.Air:g.LayerType.Ground).filter((e=>e.isInfantry()&&e.moveTrait.moveState!==l.MoveState.Moving)).map((e=>e.position.subCell));r.position.subCell=d.Infantry.SUB_CELLS.find((t=>!e.includes(t)))??d.Infantry.SUB_CELLS[0]}r.direction=270,i.spawnObject(r,a),i.traits.filter(T.NotifyProduceUnit).forEach((e=>{e[T.NotifyProduceUnit.onProduce](r,i)})),i.events.dispatch(new u.FactoryProduceUnitEvent(r)),r.rules.consideredAircraft?(c=h??{tile:o,onBridge:void 0},r.unitOrderTrait.addTask(new p.MoveTask(i,c.tile,!!c.onBridge,{closeEnoughTiles:i.rules.general.closeEnough}))):r.unitOrderTrait.addTask(new n.ExitFactoryTask(i,e,o,h)),this.status=b.Delivering,this.deliveringUnit=r}produceAircraftAt(e,t,i){let r=e.traits.find(h.DockTrait);if(!r)return!1;var s=r.getFirstAvailableDockNumber();if(void 0===s)return!1;let n=i.createUnitForPlayer(t.rules,e.owner);t.rules.trainable&&e.owner.canProduceVeteran(n.rules)&&n.veteranTrait?.setVeteranLevel(y.VeteranLevel.Veteran);var a=r.getDockOffset(s);return n.position.moveToLeptons(e.position.getMapPosition()),n.position.moveByLeptons3(a),i.spawnObject(n,n.position.tile),r.dockUnitAt(n,s),n.isAircraft()&&n.airportBoundTrait&&(n.airportBoundTrait.preferredAirport=e),i.traits.filter(T.NotifyProduceUnit).forEach((e=>{e[T.NotifyProduceUnit.onProduce](n,i)})),i.events.dispatch(new u.FactoryProduceUnitEvent(n)),!0}computeExitCoords(e,t){if(t===s.FactoryType.InfantryType)return this.computeBarracksDefaultExitCoords(e);if(t===s.FactoryType.UnitType)return this.computeWarFactoryExitCoords(e);throw new Error("Unsupported factory type "+s.FactoryType[t])}computeInternalRallyPoint(e,t,i,r){let n,a;if(t===s.FactoryType.NavalUnitType)a=this.computeNavalInternalRallyPoint(e,i,r);else{if(t===s.FactoryType.InfantryType)n=this.computeBarracksInternalRallyCoords(e);else{if(t!==s.FactoryType.UnitType)throw new Error("Unsupported factory type "+s.FactoryType[t]);n=this.computeWarFactoryInternalRallyCoords(e)}a=r.tiles.getByMapCoords(n.rx,n.ry)}return a??this.findTileAdjacentToBuilding(e,r)}computeDefaultRallyPoint(e,t,i){let r,n;if(t===s.FactoryType.NavalUnitType)n=this.computeNavalDefaultRallyPoint(e,i);else{if(t===s.FactoryType.InfantryType)r=this.computeBarracksInternalRallyCoords(e);else{if(t!==s.FactoryType.UnitType)throw new Error("Unsupported factory type "+s.FactoryType[t]);r=this.computeWarFactoryDefaultRallyCoords(e)}n=i.tiles.getByMapCoords(r.rx,r.ry)}return n??this.findTileAdjacentToBuilding(e,i)}findTileAdjacentToBuilding(e,t){return new m.RadialTileFinder(t.tiles,t.mapBounds,e.tile,e.getFoundation(),1,1,(()=>!0)).getNextTile()}computeBarracksDefaultExitCoords(e){var t=e.getFoundation();let i,r;return t.width<=2||t.height<=2?(i=t.width-1,r=t.height-1,e.rules.gdiBarracks&&2e.terrainType===a.TerrainType.Water&&!t.getObjectsOnTile(e).find((e=>e.isBuilding()||e.isOverlay()&&e.isBridge()))));return i.diagonal=!1,i.getNextTile()??t.tiles.getByMapCoords(e.tile.rx+e.getFoundation().width,e.tile.ry+e.getFoundation().height)}computeNavalInternalRallyPoint(e,t,i){var r=new v.Vector2(t.rx,t.ry).sub(new v.Vector2(e.centerTile.rx,e.centerTile.ry));return i.tiles.getByMapCoords(e.centerTile.rx+Math.sign(r.x)*(Math.floor(e.getFoundation().width/2)+1),e.centerTile.ry+Math.sign(r.y)*(Math.floor(e.getFoundation().height/2)+1))}},e("FactoryTrait",S)}}})),System.register("game/map/tileFinder/RadialBackFirstTileFinder",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("RadialBackFirstTileFinder",class{constructor(e,t,i,r,s,n,a,o=!0){this.tiles=e,this.mapBounds=t,this.startTile=i,this.foundation=r,this.maxDistance=n,this.predicate=a,this.checkBounds=o,this.distance=s,this.generator=this.generate()}getNextTile(){return this.generator.next().value}*generate(){var e=(e,t)=>{var i=this.tiles.getByMapCoords(e,t);if(i&&(!this.checkBounds||this.mapBounds.isWithinBounds(i))&&this.predicate(i))return i};do{var t=this.startTile.rx-this.distance,i=this.startTile.ry-this.distance,r=this.startTile.rx+this.foundation.width-1+this.distance,s=this.startTile.ry+this.foundation.height-1+this.distance;let n,a,o;if(0=i;a--)o=e(r,a),o&&(yield o);for(n=r;n>=t;n--)o=e(n,s),o&&(yield o)}else this.predicate(this.startTile)&&(yield this.startTile)}while(this.distance++,this.distance<=this.maxDistance)}})}}})),System.register("game/gameobject/trait/FreeUnitTrait",["game/gameobject/trait/interface/NotifySpawn","engine/type/ObjectType","game/map/tileFinder/RadialBackFirstTileFinder"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=class{[i.NotifySpawn.onSpawn](e,t){if(!e.owner.isNeutral){let n;if(t.rules.hasObject(e.rules.freeUnit,r.ObjectType.Vehicle))n=t.rules.getObject(e.rules.freeUnit,r.ObjectType.Vehicle);else{if(!t.rules.hasObject(e.rules.freeUnit,r.ObjectType.Infantry))return void console.warn(`Free unit "${e.rules.freeUnit}" is not a vehicle or infantry type.`);n=t.rules.getObject(e.rules.freeUnit,r.ObjectType.Infantry)}let a,o=t.createUnitForPlayer(n,e.owner);var i=new s.RadialBackFirstTileFinder(t.map.tiles,t.map.mapBounds,e.tile,e.getFoundation(),1,1,(i=>{var r=0e.isOverlay()))})).getNextTile()??a;if(!i)return e.owner.removeOwnedObject(o),void o.dispose();t.spawnObject(o,i)}}},e("FreeUnitTrait",n)}}})),System.register("game/gameobject/trait/CabHutTrait",["engine/type/ObjectType","game/map/BridgeOverlayTypes","game/gameobject/task/ScatterTask","game/gameobject/unit/ZoneType","game/gameobject/common/DeathType"],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){e("CabHutTrait",class{constructor(e,t){this.gameObject=e,this.bridges=t,this.checkedClosestBridge=!1}canRepairBridge(){var e=this.findClosestBridgeBounds();return e?this.bridges.canBeRepaired(e):(console.warn(`No bridge associated with hut at ${this.gameObject.tile.rx}, ${this.gameObject.tile.ry}.`),!1)}repairBridge(e,t){var s=this.findClosestBridgeBounds();if(!s)throw new Error("No bridge bounds found");var n=this.bridges.findDestroyedPieceTiles(s),a=s.start.rx!==s.end.rx;let o;o=s.isHigh?r.BridgeOverlayTypes.calculateHighBridgeOverlayId(s.type,a):r.BridgeOverlayTypes.calculateLowBridgeOverlayId(s.type,a);var l,c,h=e.rules.getOverlayName(o);for(l of n){let r=e.createObject(i.ObjectType.Overlay,h);r.overlayId=o,r.value=0,r.position.tileElevation=s.isHigh?4:0,e.spawnObject(r,l),this.updateUnitsUnderBridgePiece(l,s,e,t)}for(c of this.bridges.findBridgePieces(s))c.obj.bridgeTrait.bridgeSpec=s}updateUnitsUnderBridgePiece(e,t,i,r){var a;for(let o of this.bridges.getPieceTiles(this.bridges.getPieceAtTile(e)))if(t.isHigh){i.map.getGroundObjectsOnTile(o).filter((e=>e.tile===o&&e.isUnit()&&!e.unitOrderTrait.hasTasks()&&e.rules.tooBigToFitUnderBridge)).forEach((e=>e.unitOrderTrait.addTask(new s.ScatterTask(i))))}else for(a of i.map.getGroundObjectsOnTile(o))a.isUnit()&&(i.map.terrain.getPassableSpeed(o,a.rules.speedType,!0)?(a.zone=n.ZoneType.Ground,a.onBridge=!0):a.isDestroyed||i.destroyObject(a,{player:r}))}demolishBridge(e,t){var i=this.getBridgePieces();if(i)for(var r of i)r.obj.isLowBridge()&&e.map.getTileZone(r.obj.tile,!0)!==n.ZoneType.Water||r.obj.isDestroyed||(r.obj.deathType=a.DeathType.Demolish,e.destroyObject(r.obj,t,!0))}getBridgePieces(){var e=this.findClosestBridgeBounds();if(e)return this.bridges.findBridgePieces(e)}findClosestBridgeBounds(){return this.checkedClosestBridge||(this.checkedClosestBridge=!0,this.closestBridge=this.bridges.findClosestBridgeSpec(this.gameObject.tile)),this.closestBridge}dispose(){this.gameObject=void 0}})}}})),System.register("game/gameobject/trait/OilDerrickTrait",["game/gameobject/trait/interface/NotifyOwnerChange","game/gameobject/trait/interface/NotifyTick","game/gameobject/trait/interface/NotifySpawn"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=class{constructor(){this.isActive=!1,this.produceCashCooldown=0}[s.NotifySpawn.onSpawn](e){e.owner.isNeutral||(this.isActive=!0)}[i.NotifyOwnerChange.onChange](e,t){t.isNeutral&&!e.owner.isNeutral&&(e.owner.credits=Math.max(0,e.owner.credits+e.rules.produceCashStartup),this.isActive=!0,this.produceCashCooldown=e.rules.produceCashDelay)}[r.NotifyTick.onTick](e){this.isActive&&(this.produceCashCooldown--,this.produceCashCooldown<=0&&(this.produceCashCooldown=e.rules.produceCashDelay,e.owner.credits=Math.max(0,e.owner.credits+e.rules.produceCashAmount)))}},e("OilDerrickTrait",n)}}})),System.register("game/gameobject/trait/OverpoweredTrait",["game/gameobject/task/AttackTask","game/gameobject/trait/interface/NotifyTick"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class{constructor(e){this.obj=e,this.chargers=new Set}isOverpowered(){let e=1;return this.obj?.poweredTrait?.isPoweredOn(!0)||(e+=2),this.chargers.size>=e}hasChargersToPowerOn(){return 2<=this.chargers.size}chargeFrom(e){this.chargers.add(e),this.swapAttackTaskWeapon()}[r.NotifyTick.onTick](e){if(0{(i.isDestroyed||i.isCrashing||i.owner!==e.owner||i.attackTrait?.currentTarget?.obj!==e)&&(this.chargers.delete(i),t=!0)})),t&&this.swapAttackTaskWeapon()}}swapAttackTaskWeapon(){let e=this.obj?.unitOrderTrait.getCurrentTask();var t;e instanceof i.AttackTask&&((t=this.getWeapon())?e.setWeapon(t):e.cancel())}getWeapon(){return this.isOverpowered()?this.obj?.secondaryWeapon:this.obj?.primaryWeapon}dispose(){this.obj=void 0,this.chargers.clear()}},e("OverpoweredTrait",s)}}})),System.register("game/event/UnitRepairFinishEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("UnitRepairFinishEvent",class{constructor(e,t){this.target=e,this.from=t,this.type=i.EventType.UnitRepairFinish}})}}})),System.register("game/event/UnitRepairStartEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("UnitRepairStartEvent",class{constructor(e){this.target=e,this.type=i.EventType.UnitRepairStart}})}}})),System.register("game/gameobject/trait/UnitRepairTrait",["game/event/UnitRepairFinishEvent","game/event/UnitRepairStartEvent","game/GameSpeed","game/math/Vector2","game/gameobject/task/move/MoveTask","game/gameobject/unit/ZoneType","game/gameobject/trait/interface/NotifySpawn","game/gameobject/trait/interface/NotifyTick"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e}],execute:function(){var t;(t=h=h||{})[t.Idle=0]="Idle",t[t.Repairing=1]="Repairing",e("RepairStatus",h),u=class{constructor(){this.status=h.Idle,this.cooldownTicks=0,this.lastRepairTickSuccessful=!1}[l.NotifySpawn.onSpawn](e,t){this.resetRallyPoint(e,t)}resetRallyPoint(e,t){var i;e.factoryTrait||(i=this.computeDefaultRallyPoint(e,t.map),e.rallyTrait.changeRallyPoint(i,e,t))}[c.NotifyTick.onTick](e,t){if(e.dockTrait&&(!e.rules.needsEngineer||!e.owner.isNeutral))if(!e.dockTrait.hasDockedUnits()||e.dockTrait.getDockedUnits().some((e=>e.zone===o.ZoneType.Air))||e.poweredTrait&&!e.poweredTrait.isPoweredOn())this.status=h.Idle;else if(this.cooldownTicks<=0){var n,l,c=t.rules.general.repair;c=e.rules.unitReload?c.reloadRate:c.uRepairRate;this.cooldownTicks+=s.GameSpeed.BASE_TICKS_PER_SECOND*c*60;let u=!1;for(n of e.dockTrait.getDockedUnits())n.zone!==o.ZoneType.Air&&(n.healthTrait.health<100&&t.areFriendly(n,e)?(this.tickRepair(n,t,e)&&(u=!0),!u||this.status!==h.Idle&&this.lastRepairTickSuccessful||e.helipadTrait||t.events.dispatch(new r.UnitRepairStartEvent(n))):((l=e.rallyTrait.findRallyNodeForUnit(n,t.map))&&(e.dockTrait.undockUnit(n),n.unitOrderTrait.addTask(new a.MoveTask(t,l.tile,!!l.onBridge,{closeEnoughTiles:t.rules.general.closeEnough}))),e.helipadTrait||t.events.dispatch(new i.UnitRepairFinishEvent(n,e))));this.lastRepairTickSuccessful=u,this.status=u?h.Repairing:h.Idle}else this.cooldownTicks--}tickRepair(e,t,i){var r=t.rules.general.repair,s=Math.floor(r.repairStep),n=r.repairPercent;let a;if(n){if(r=n*e.purchaseValue/e.healthTrait.maxHitPoints,n=Math.min(i.owner.credits,Math.max(1,Math.floor(r*s))),a=r&&n?Math.floor(n/r):s,!n)return!1;i.owner.credits-=n}else a=s;return a=Math.min(a,e.healthTrait.maxHitPoints-e.healthTrait.getHitPoints()),!!a&&(e.healthTrait.healBy(a,i,t),!0)}computeDefaultRallyPoint(e,t){var i=e.getFoundation();i=new n.Vector2(e.tile.rx,e.tile.ry+i.height);return t.tiles.getByMapCoords(i.x,i.y)??e.tile}},e("UnitRepairTrait",u)}}})),System.register("game/gameobject/trait/RallyTrait",["engine/type/TerrainType","game/map/tileFinder/RadialTileFinder","game/rules/TechnoRules","game/type/MovementZone","game/type/SpeedType"],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){e("RallyTrait",class{getRallyPoint(){return this.rallyPoint}changeRallyPoint(e,t,i){var r=this.findValidRallyPoint(t,e,i.map);r&&(this.rallyPoint=r)}findValidRallyPoint(e,t,n){let o=new r.RadialTileFinder(n.tiles,n.mapBounds,t,{width:1,height:1},0,20,(t=>e.rules.naval===(t.terrainType===i.TerrainType.Water)&&!n.tileOccupation.isTileOccupiedBy(t,e))),l=o.getNextTile();if(!l&&e.factoryTrait?.type===s.FactoryType.NavalUnitType){var{width:c,height:h}=e.getFoundation();for(let t=0;t{var r=!o||o.isHighBridge()?i.tileOccupation.getBridgeOnTile(t):void 0;return!(l?[]:i.terrain.findObstacles({tile:t,onBridge:r},e)).length&&(void 0===a||Math.abs(a-(t.z+(r?.tileElevation??0)))<4)&&(!s||!i.getObjectsOnTile(t).find((e=>e.isBuilding()&&!e.isDestroyed)))&&(l||0this.activeFor)&&(this.reset(),!0)}})}}})),System.register("game/gameobject/trait/C4ChargeTrait",["game/gameobject/common/DeathType","game/gameobject/unit/Timer","game/gameobject/trait/interface/NotifyTick"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=class{constructor(){this.timer=new r.Timer}hasCharge(){return this.timer.isActive()}setCharge(e,t){this.hasCharge()||(this.timer.setActiveFor(e),this.attackerInfo=t)}[s.NotifyTick.onTick](e,t){this.timer.isActive()&&!0===this.timer.tick(t.currentTick)&&(e.invulnerableTrait.isActive()||(e.isBuilding()&&e.cabHutTrait?e.cabHutTrait.demolishBridge(t,this.attackerInfo):(e.deathType=i.DeathType.Demolish,t.destroyObject(e,this.attackerInfo,!0))))}},e("C4ChargeTrait",n)}}})),System.register("game/gameobject/trait/HelipadTrait",["engine/type/ObjectType","game/gameobject/trait/interface/NotifyOwnerChange","game/gameobject/trait/interface/NotifyUnspawn"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=class{[r.NotifyOwnerChange.onChange](e,t,i){this.checkAircraftsForPlayer(t,i)}[s.NotifyUnspawn.onUnspawn](e,t){this.checkAircraftsForPlayer(e.owner,t)}checkAircraftsForPlayer(e,t){let r=t.rules.general.padAircraft;var s;for(s of e.getOwnedObjectsByType(i.ObjectType.Aircraft).filter((e=>r.includes(e.name))))s.airportBoundTrait&&(s.airportBoundTrait.preferredAirport=void 0)}},e("HelipadTrait",n)}}})),System.register("game/gameobject/trait/AmmoTrait",["util/math"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("AmmoTrait",class{constructor(e,t=e){this.maxAmmo=e,this.ammo=t}get ammo(){return this._ammo}set ammo(e){this._ammo=i.clamp(e,0,this.maxAmmo)}isFull(){return this.ammo===this.maxAmmo}})}}})),System.register("game/gameobject/trait/UnitReloadTrait",["game/GameSpeed","game/gameobject/unit/ZoneType","game/gameobject/trait/interface/NotifyTick"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=class{[s.NotifyTick.onTick](e,t){if(e.dockTrait&&e.dockTrait.hasDockedUnits()&&!e.dockTrait.getDockedUnits().every((e=>!this.canReloadUnit(e))))if(void 0===this.cooldownTicks&&(this.cooldownTicks=i.GameSpeed.BASE_TICKS_PER_SECOND*t.rules.general.repair.reloadRate*60),this.cooldownTicks<=0){this.cooldownTicks=i.GameSpeed.BASE_TICKS_PER_SECOND*t.rules.general.repair.reloadRate*60;let s=e.dockTrait.getDockedUnits();var r;for(r of 0===s[0].ammo?s.slice(0,1):s)this.canReloadUnit(r)&&r.ammoTrait.ammo++}else this.cooldownTicks--}canReloadUnit(e){return!(!e.ammoTrait||!e.rules.manualReload||e.ammoTrait.isFull()||e.zone===r.ZoneType.Air)}},e("UnitReloadTrait",n)}}})),System.register("game/gameobject/task/WaitForBuildUpTask",["game/gameobject/Building","game/gameobject/task/system/CallbackTask","game/gameobject/task/system/TaskGroup","game/gameobject/task/system/WaitMinutesTask"],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e}],execute:function(){a=class extends s.TaskGroup{constructor(e){super(new n.WaitMinutesTask(e),new r.CallbackTask((e=>e.buildStatus=i.BuildStatus.Ready))),this.cancellable=!1}},e("WaitForBuildUpTask",a)}}})),System.register("game/gameobject/trait/SuperWeaponTrait",["engine/type/ObjectType","game/gameobject/trait/interface/NotifyOwnerChange","game/gameobject/trait/interface/NotifySpawn","game/gameobject/trait/interface/NotifyUnspawn"],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e}],execute:function(){a=class{constructor(e){this.name=e}getSuperWeapon(e){return e.owner.superWeaponsTrait?.get(this.name)}[s.NotifySpawn.onSpawn](e,t){this.addSuperWeaponToPlayerIfNeeded(e.owner,t)}[n.NotifyUnspawn.onUnspawn](e,t){this.removeSuperWeaponFromPlayerIfNeeded(e.owner)}[r.NotifyOwnerChange.onChange](e,t,i){this.removeSuperWeaponFromPlayerIfNeeded(t),this.addSuperWeaponToPlayerIfNeeded(e.owner,i)}addSuperWeaponToPlayerIfNeeded(e,t){if(e.superWeaponsTrait&&!e.superWeaponsTrait.has(this.name)){let i=t.createSuperWeapon(this.name,e);e.superWeaponsTrait.add(i),i.rules.isPowered&&e.powerTrait?.isLowPower()&&i.pauseTimer()}}removeSuperWeaponFromPlayerIfNeeded(e){let t=e.superWeaponsTrait;var r;t&&(e.getOwnedObjectsByType(i.ObjectType.Building).some((e=>e.superWeaponTrait?.name===this.name))||(r=t.get(this.name))&&!r.isGift&&t.remove(this.name))}},e("SuperWeaponTrait",a)}}})),System.register("game/map/MapShroud",["util/event","game/GameSpeed","engine/type/TerrainType","util/math"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e}],execute:function(){var t;5,4.25,o=(1<<(a=3))-1,(t=l=l||{})[t.Unexplored=0]="Unexplored",t[t.TemporaryReveal=1]="TemporaryReveal",t[t.Explored=2]="Explored",e("ShroudType",l),(c=c||{})[c.Darken=1<>a<=this.size.width||t>=this.size.height?l.Unexplored:this.tiles[e+t*this.size.width]&o??l.Unexplored}invalidateFull(){this.fullInvalidation=!0}invalidate(e,t,i){var r=e.sx+e.sy*this.size.width;let s=this.invalidations.get(r);s||(s={center:e,elevation:0,radius:0},this.invalidations.set(r,s)),s.elevation=Math.max(s.elevation,t),s.radius=Math.max(s.radius,i)}revealFrom(e){var t,i,r=e.sight;r&&(t=e.tile.z+e.tileElevation,i=this.rxyzToSxy(e.tile.rx,e.tile.ry,t),this.invalidate(i,t,r))}revealAround(e,t){var i=this.rxyzToSxy(e.rx,e.ry,e.z);this.invalidate(i,Number.POSITIVE_INFINITY,t)}unrevealAround(e,t){var i=[],r=this.rxyzToSxy(e.rx,e.ry,e.z);this.setValueAround(r,t,Number.POSITIVE_INFINITY,i,l.Unexplored,l.Explored),this._onChange.dispatch(this,{type:"incremental",coords:i})}revealTemporarily(e){var t=this.rxyzToSxy(e.tile.rx,e.tile.ry,e.tile.z+e.tileElevation);this.temporaryReveals.set(t,5*r.GameSpeed.BASE_TICKS_PER_SECOND)}revealObject(e){var t=this.rxyzToSxy(e.tile.rx,e.tile.ry,e.tile.z+e.tileElevation);this.invalidate(t,Number.POSITIVE_INFINITY,4.25)}toggleFlagsAround(e,t,i,r){var s=[],n=this.rxyzToSxy(e.rx,e.ry,e.z);this.setValueAround(n,t,Number.POSITIVE_INFINITY,s,void 0,void 0,r?{setFlags:i}:{clearFlags:i}),this._onChange.dispatch(this,{type:"incremental",coords:s})}update(){let e=[];if(this.invalidations.size){for(var t of this.invalidations.values())this.setValueAround(t.center,t.radius,t.elevation,e,l.Explored,[l.Unexplored,l.TemporaryReveal]);this.invalidations.clear()}this.temporaryReveals.size&&this.temporaryReveals.forEach(((t,i)=>{t<=0?(this.setValueAround(i,3,Number.POSITIVE_INFINITY,e,l.Unexplored,l.TemporaryReveal),this.temporaryReveals.delete(i)):(t===5*r.GameSpeed.BASE_TICKS_PER_SECOND&&this.setValueAround(i,3,Number.POSITIVE_INFINITY,e,l.TemporaryReveal,l.Unexplored),this.temporaryReveals.set(i,t-1))})),this.fullInvalidation?(this.fullInvalidation=!1,this._onChange.dispatch(this,{type:"full"})):e.length&&this._onChange.dispatch(this,{type:"incremental",coords:e})}setValueAround(e,t,i,r,s,l=void 0,{setFlags:c,clearFlags:h}={}){var u=Math.ceil(t),d=n.clamp(e.sx-u,0,this.size.width-1),g=n.clamp(e.sx+u,0,this.size.width-1),p=n.clamp(e.sy-u,0,this.size.height-1),m=n.clamp(e.sy+u,0,this.size.height-1),f=this.size.width;for(let n=d;n<=g;n++)for(let u=p;u<=m;u++){var y=n+u*f,T=this.tiles[y]&o,v=this.tiles[y]>>a<t*t+1||this.tileElevation[y]>=i+4||(this.tiles[y]=(s??T)|d,T===s&&v===d||r.push({sx:n,sy:u}))}}revealAll(){this.tiles.fill(l.Explored),this._onChange.dispatch(this,{type:"clear"})}reset(){this.tiles.fill(l.Unexplored),this._onChange.dispatch(this,{type:"cover"})}})}}})),System.register("game/gameobject/trait/GapGeneratorTrait",["game/GameSpeed","game/map/MapShroud","game/math/Box2","game/math/Vector2","game/rules/TechnoRules","game/gameobject/unit/RangeHelper","game/gameobject/trait/interface/NotifyOwnerChange","game/gameobject/trait/interface/NotifySpawn","game/gameobject/trait/interface/NotifyTick","game/gameobject/trait/interface/NotifyUnspawn","game/gameobject/trait/interface/NotifyWarpChange"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e}],execute:function(){g=class{constructor(e){this.radiusTiles=e,this.refreshTicks=0}[h.NotifyTick.onTick](e,t){0[...e.buildings])).flat().filter((i=>i.gapGeneratorTrait&&i!==e&&t.tileDistance(i,e)<=i.gapGeneratorTrait.radiusTiles+this.radiusTiles))}for(var c of n)t.toggleFlagsAround(c.tile,c.gapGeneratorTrait.radiusTiles,r.ShroudFlag.Darken,!0)}}}update(e,t){let r;this.refreshTicks=5*i.GameSpeed.BASE_TICKS_PER_SECOND;var o,l,c,h,u=e.owner.buildings.has(e)&&e.poweredTrait?.isPoweredOn();for(o of t.getCombatants())if(o!==e.owner&&!t.alliances.areAllied(e.owner,o)){let i=t.mapShroudTrait.getPlayerShroud(o);if(i)if(u)for(h of(i.unrevealAround(e.tile,this.radiusTiles),r||(c=this.radiusTiles+a.TechnoRules.MAX_SIGHT,l=new n.Vector2(e.tile.rx,e.tile.ry).addScalar(-c),c=new n.Vector2(e.tile.rx,e.tile.ry).addScalar(c),r=t.map.technosByTile.queryRange(new s.Box2(l,c))),r))h.owner===o||t.alliances.areAllied(h.owner,o)?i.revealFrom(h):h.rules.revealToAll&&i.revealObject(h);else[...o.buildings].some((e=>e.rules.spySat))&&i.revealAround(e.tile,this.radiusTiles)}}},e("GapGeneratorTrait",g)}}})),System.register("game/gameobject/trait/PsychicDetectorTrait",["game/Coords","game/GameSpeed","game/gameobject/unit/RangeHelper","game/gameobject/trait/interface/NotifyTick","game/gameobject/trait/interface/NotifyWarpChange"],(function(e,t){"use strict";var i,r,s,n,a,o,l;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){o=r.GameSpeed.BASE_TICKS_PER_SECOND,l=class{constructor(e){this.radiusTiles=e,this.detectionLines=[],this.nextScan=o}[n.NotifyTick.onTick](e,t){e.owner.powerTrait?.isLowPower()?this.disable():(0i!==e.owner&&!t.alliances.areAllied(i,e.owner)));let n=[],a=new s.RangeHelper(t.map.tileOccupation);var o,l,c,h=t=>a.distance2(t,e)/i.Coords.LEPTONS_PER_TILE<=this.radiusTiles;for(o of r)for(var u of o.getOwnedObjects())u.attackTrait?.currentTarget?h((l=u.attackTrait.currentTarget).obj??l.tile)&&n.push({source:u,target:l}):u.isUnit()&&u.unitOrderTrait.targetLinesConfig&&((c=u.unitOrderTrait.targetLinesConfig).target?h(c.target)&&(l=t.createTarget(c.target,c.target.tile),n.push({source:u,target:l})):(c=c.pathNodes[0])&&h(c.tile)&&(c=t.createTarget(c.onBridge,c.tile),n.push({source:u,target:c})));return n}},e("PsychicDetectorTrait",l)}}})),System.register("game/gameobject/trait/HospitalTrait",["engine/type/ObjectType","game/event/UnitRepairFinishEvent","game/GameSpeed","game/map/tileFinder/RadialTileFinder","game/gameobject/task/ScatterTask","game/gameobject/trait/interface/NotifyDestroy","game/gameobject/trait/interface/NotifyTick"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e}],execute:function(){c=class{constructor(){this.healQueue=[]}addToHealQueue(e){return this.healQueue.push(e),this.healQueue.length-1}unitIsFirstInHealQueue(e){return this.healQueue[0]===e}removeFromHealQueue(e){var t=this.healQueue.indexOf(e);-1!==t&&this.healQueue.splice(t,1)}startHealing(e){if(this.unit)throw new Error(`Already busy healing unit ${i.ObjectType[this.unit.type]}#${this.unit.id}}`);this.unit=e,this.healTicks=5*s.GameSpeed.BASE_TICKS_PER_SECOND}[l.NotifyTick.onTick](e,t){var i;this.healQueue=this.healQueue.filter((e=>!e.isDestroyed&&!e.isCrashing)),this.unit&&void 0!==this.healTicks&&(0this.canEvacuateTo(r,e,t,i))).getNextTile(),r?(i.unlimboObject(e,r),e.unitOrderTrait.addTask(new a.ScatterTask(i))):i.destroyObject(e,{player:e.owner})}canEvacuateTo(e,t,i,r){return 0t instanceof e)):this.allTraits.filter((t=>this.traitImplements(t,e))),this.traitsByTypeCache.set(e,t)),t}get(e){var t=this.find(e);if(!t)throw new Error("No matching trait found");return t}find(e){return this.filter(e)[0]}getAll(){return this.allTraits}traitImplements(e,t){for(var i of Object.getOwnPropertyNames(t))if(void 0===e[t[i]])return!1;return!0}clear(){this.allTraits.length=0,this.traitsByTypeCache.clear()}dispose(){this.getAll().forEach((e=>e.dispose?.())),this.clear()}})}}})),System.register("game/player/trait/RadarTrait",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("RadarTrait",class{constructor(){this.disabled=!0,this.activeEvents=[]}isDisabled(){return this.disabled}setDisabled(e){this.disabled=e}})}}})),System.register("game/player/production/Production",["game/player/production/ProductionQueue","game/rules/TechnoRules","engine/type/ObjectType","util/event","game/rules/GeneralRules","game/SideType"],(function(e,t){"use strict";var i,r,s,n,a,o,l;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e}],execute:function(){l=(new Map).set("POWER",a.PrereqCategory.Power).set("FACTORY",a.PrereqCategory.Factory).set("BARRACKS",a.PrereqCategory.Barracks).set("RADAR",a.PrereqCategory.Radar).set("TECH",a.PrereqCategory.Tech).set("PROC",a.PrereqCategory.Proc),e("Production",class e{constructor(e,t,i,r,s){this.player=e,this.maxTechLevel=t,this.gameOpts=i,this.rules=r,this.allAvailableObjects=s,this.buildSpeedModifier=1,this.queues=new Map,this._onQueueUpdate=new n.EventDispatcher,this.primaryFactories=new Map,this.factoryCounts=new Map,this.veteranTypes=new Set,this.stolenTech=new Set}static factory(t,r,s,n){let a=new e(t,r.mpDialogSettings.techLevel,s,r,n);var o=r.general.maximumQueuedObjects+1;return a.addQueue(i.QueueType.Structures,new i.ProductionQueue(i.QueueType.Structures,1,1)),a.addQueue(i.QueueType.Armory,new i.ProductionQueue(i.QueueType.Armory,1,1)),a.addQueue(i.QueueType.Infantry,new i.ProductionQueue(i.QueueType.Infantry,o,o)),a.addQueue(i.QueueType.Vehicles,new i.ProductionQueue(i.QueueType.Vehicles,o,o)),a.addQueue(i.QueueType.Ships,new i.ProductionQueue(i.QueueType.Ships,o,o)),a.addQueue(i.QueueType.Aircrafts,new i.ProductionQueue(i.QueueType.Aircrafts,0,o)),a}get onQueueUpdate(){return this._onQueueUpdate.asEvent()}addQueue(e,t){this.queues.set(e,t),t.onUpdate.subscribe((()=>this._onQueueUpdate.dispatch(this,t)))}getQueue(e){var t=this.queues.get(e);if(!t)throw new Error("No queue found with type "+i.QueueType[e]);return t}getAllQueues(){return[...this.queues.values()]}getQueueTypeForObject(e){if(e.type===s.ObjectType.Building)return e.buildCat===r.BuildCat.Combat?i.QueueType.Armory:i.QueueType.Structures;if(e.type===s.ObjectType.Infantry)return i.QueueType.Infantry;if(e.type===s.ObjectType.Vehicle)return e.naval?i.QueueType.Ships:i.QueueType.Vehicles;if(e.type===s.ObjectType.Aircraft)return i.QueueType.Aircrafts;throw new Error("Unsupported object type "+s.ObjectType[e.type])}getQueueForObject(e){return this.getQueue(this.getQueueTypeForObject(e))}getQueueTypeForFactory(e){if(e===r.FactoryType.InfantryType)return i.QueueType.Infantry;if(e===r.FactoryType.UnitType)return i.QueueType.Vehicles;if(e===r.FactoryType.AircraftType)return i.QueueType.Aircrafts;if(e===r.FactoryType.NavalUnitType)return i.QueueType.Ships;throw new Error("Unsupported factory type "+r.FactoryType[e])}getFactoryTypeForQueueType(e){if(e===i.QueueType.Structures||e===i.QueueType.Armory)return r.FactoryType.BuildingType;if(e===i.QueueType.Infantry)return r.FactoryType.InfantryType;if(e===i.QueueType.Vehicles)return r.FactoryType.UnitType;if(e===i.QueueType.Aircrafts)return r.FactoryType.AircraftType;if(e===i.QueueType.Ships)return r.FactoryType.NavalUnitType;throw new Error("Unsupported queue type "+i.QueueType[e])}getQueueForFactory(e){return this.getQueue(this.getQueueTypeForFactory(e))}isAvailableForProduction(e){return e.isAvailableTo(this.player.country)&&-1!==e.techLevel&&e.techLevel<=this.maxTechLevel&&!(0===e.buildLimit&&!this.player.isAi)&&!(e.superWeapon&&this.rules.getSuperWeapon(e.superWeapon).disableableFromShell&&!this.gameOpts.superWeapons)&&this.hasFactoryFor(e)&&this.meetsPrerequisites(e)&&this.meetsStolenTech(e)}getAvailableObjects(){return this.allAvailableObjects.filter((e=>this.isAvailableForProduction(e)))}hasFactoryFor(e){if(e.owner.length){let t=this.getFactoryTypeFor(e);return!![...this.player.buildings].find((i=>i.factoryTrait?.type===t&&(t!==r.FactoryType.UnitType||i.rules.naval===e.naval)&&!!i.rules.owner.find((t=>e.owner.includes(t)))))}return!0}meetsStolenTech(e){return e.requiresStolenAlliedTech?this.stolenTech.has(o.SideType.GDI):!e.requiresStolenSovietTech||this.stolenTech.has(o.SideType.Nod)}getFactoryTypeFor(e){return e.type===s.ObjectType.Building?r.FactoryType.BuildingType:e.type===s.ObjectType.Infantry?r.FactoryType.InfantryType:e.type===s.ObjectType.Aircraft?r.FactoryType.AircraftType:e.naval?r.FactoryType.NavalUnitType:r.FactoryType.UnitType}meetsPrerequisites(e){let t=[...this.player.buildings].map((e=>e.name));var i;for(i of e.prerequisite)if(i=i.toUpperCase(),l.has(i)){var r=l.get(i);if(void 0===r)throw new Error("Unknown prereqName "+i);var s,n=this.rules.general.prereqCategories.get(r);if(void 0===n)throw new Error(`Missing prerequisite category ${r} in rules`);let e=!1;for(s of n)if(-1!==t.indexOf(s)){e=!0;break}if(!e)return!1}else if(-1===t.indexOf(i))return!1;return!0}getPrimaryFactory(e){return this.primaryFactories.get(e)}setPrimaryFactory(e){e.rules.factory&&this.primaryFactories.set(e.rules.factory,e)}isPrimaryFactory(e){return this.getPrimaryFactory(e.rules.factory)===e}incrementFactoryCount(e){this.factoryCounts.set(e,(this.factoryCounts.get(e)??0)+1)}decrementFactoryCount(e){if(!this.factoryCounts.get(e))throw new Error(`Can't decrement factory count ${r.FactoryType[e]}. Already 0`);this.factoryCounts.set(e,this.factoryCounts.get(e)-1)}getFactoryCount(e){return this.factoryCounts.get(e)??0}crownPrimaryFactoryHeir(e){var t=[...this.player.buildings].find((t=>t.rules.factory===e));t?this.primaryFactories.set(e,t):this.primaryFactories.delete(e)}hasAnyFactory(){return 0!e.limboData))),i}getOwnedObjects(e=!1){let t=[];return[...this.objectsByType.values()].forEach((e=>{e.forEach((e=>t.push(e)))})),e||(t=t.filter((e=>!e.limboData))),t}removeAllOwnedObjects(){this.objectsByType.forEach((e=>e.clear())),this.objectsById.clear()}get buildings(){return this.getOrCreateObjectsForType(r.ObjectType.Building)}addUnitsBuilt(e,t){this.unitsBuiltByType.set(e,(this.unitsBuiltByType.get(e)??0)+t)}getUnitsBuilt(e){return void 0!==e?this.unitsBuiltByType.get(e)??0:[...this.unitsBuiltByType.values()].reduce(((e,t)=>e+t),0)}addUnitsKilled(e,t){this.unitsKilledByType.set(e,(this.unitsKilledByType.get(e)??0)+t)}getUnitsKilled(e){return void 0!==e?this.unitsKilledByType.get(e)??0:[...this.unitsKilledByType.values()].reduce(((e,t)=>e+t),0)}addUnitsLost(e,t){this.unitsLostByType.set(e,(this.unitsLostByType.get(e)??0)+t)}getUnitsLost(e){return void 0!==e?this.unitsLostByType.get(e)??0:[...this.unitsLostByType.values()].reduce(((e,t)=>e+t),0)}isCombatant(){return!this.isNeutral&&!this.isObserver&&!this.defeated}canProduceVeteran(e){if(!this.production||!this.country)throw new Error("Non-combatants can't produce units");var t=this.production.getQueueTypeForObject(e);t=this.production.getFactoryTypeForQueueType(t);return this.production.hasVeteranType(t)||this.country.hasVeteranUnit(e.type,e.name)}getHash(){return n.fnv32a([this.credits,...this.traits.getAll().map((e=>e.getHash?.()??0))])}debugGetState(){return{name:this.name,credits:this.credits,traits:this.traits.getAll().reduce(((e,t)=>{var i=t.debugGetState?.();return void 0!==i&&(e[t.constructor.name]=i),e}),{})}}dispose(){this.traits.dispose(),this.production?.dispose()}})}}})),System.register("game/art/Art",["game/art/ObjectArt","engine/type/ObjectType","game/rules/ObjectRules","data/IniSection"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e}],execute:function(){e("Art",class{constructor(e,t,i,r){this.rules=e,this.artIni=t,this.mapFile=i,this.logger=r,this.objectArt=new Map,this.parse()}hasObject(e,t){return this.objectArt.get(t)?.has(e)}getObject(e,t){if(!e)throw new Error(`Must specify an art name for type "${r.ObjectType[t]}"`);var a=this.objectArt.get(t)?.get(e);return a||(this.logger?.debug(`Missing art for object "${e}"`),new i.ObjectArt(t,this.rules.hasObject(e,t)?this.rules.getObject(e,t):new s.ObjectRules(t,new n.IniSection(e)),new n.IniSection(e)))}getAnimation(e){return this.getObject(e,r.ObjectType.Animation)}getProjectile(e){var t=this.rules.getProjectile(e),r=t.imageName;let s=this.artIni.getSection(r);return s||(this.logger?.debug(`Image ${r} (Projectile: ${e}) has no section in art.ini`),s=new n.IniSection(r)),i.ObjectArt.factory(t.type,t,this.artIni,s)}getIni(){return this.artIni}parse(){this.rules.allObjectRules.forEach(((e,t)=>{let s=new Map;this.objectArt.set(t,s),e.forEach((e=>{var t=this.artIni.getSection(e.imageName),n=this.artIni.getSection(e.name);(t=this.applyUnitMapOverrides(e,this.mapFile,n,t))?(t=i.ObjectArt.factory(e.type,e,this.artIni,t),s.set(e.name,t)):this.logger?.debug(`${r.ObjectType[e.type]} "${e.name}" has no art section "${e.imageName}"`)}))})),[[r.ObjectType.Animation,this.rules.animationNames]].forEach((([e,t])=>{let a=new Map;this.objectArt.set(e,a),t.forEach((t=>{var o,l=this.artIni.getSection(t);l?(o=new s.ObjectRules(e,new n.IniSection(t)),l=new i.ObjectArt(e,o,l),a.set(t,l)):this.logger?.debug(r.ObjectType[e]+` "${t}" has no art section`)}))}))}applyUnitMapOverrides(e,t,i,s){if([r.ObjectType.Infantry,r.ObjectType.Vehicle,r.ObjectType.Aircraft].includes(e.type)&&t?.getSection(e.name)?.getString("Image")&&i){let t=i.clone();s?.entries.forEach(((e,i)=>{t.set(i,e)})),s=t,this.logger?.debug(`${r.ObjectType[e.type]} "${e.name}": Using merged art sections ${e.name} and `+e.imageName)}return s}})}}})),System.register("game/gameobject/task/morph/PackBuildingTask",["game/gameobject/task/system/Task","game/gameobject/Building","game/gameobject/task/system/WaitMinutesTask"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=class extends i.Task{onTick(e){return!(e.buildStatus!==r.BuildStatus.BuildDown&&(e.buildStatus=r.BuildStatus.BuildDown,!e.rules.wall)&&(this.children.push(new s.WaitMinutesTask(.035)),1))}},e("PackBuildingTask",n)}}})),System.register("util/disposable/LegacyDisposable",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("util/disposable/CompositeDisposable",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){i=e=>!e.dispose,e("CompositeDisposable",class{constructor(){this.disposables=new Set}add(...e){e.map((e=>this.disposables.add("function"==typeof e?{dispose:e}:e)))}remove(...e){e.map((e=>this.disposables.delete(e)))}dispose(){this.disposables.forEach((e=>{"function"==typeof e?e():i(e)?e.destroy():e.dispose()})),this.disposables.clear()}})}}})),System.register("game/ConstructionWorker",["util/geometry","engine/type/ObjectType","game/type/SpeedType","game/map/tileFinder/CardinalTileFinder","game/gameobject/task/morph/PackBuildingTask","game/gameobject/task/system/CallbackTask","game/gameobject/task/system/TaskGroup","util/disposable/CompositeDisposable","game/event/EventType"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e}],execute:function(){e("ConstructionWorker",class{constructor(e,t,i,r,s){this.player=e,this.rules=t,this.art=i,this.map=r,this.game=s,this.adjacencyMaps=new Map,this.disposables=new c.CompositeDisposable;let n=({object:e})=>{e.isBuilding()&&this.adjacencyMaps.clear()};this.map.tileOccupation.onChange.subscribe(n),this.disposables.add((()=>this.map.tileOccupation.onChange.unsubscribe(n))),this.disposables.add(this.game.events.subscribe(h.EventType.AllianceChange,(()=>this.adjacencyMaps.clear())),this.game.events.subscribe(h.EventType.ObjectOwnerChange,(e=>{e.target.isBuilding()&&this.adjacencyMaps.clear()})),this.game.events.subscribe(h.EventType.ObjectDestroy,(e=>{e.target.isBuilding()&&e.target.rules.leaveRubble&&this.adjacencyMaps.clear()})))}getAdjacentRect(e,t,i){return{x:e.rx-i,y:e.ry-i,width:t.width+2*i,height:t.height+2*i}}getAdjacencyMap(e){var t;let i=[];for(t of[...this.player.buildings,...this.game.gameOpts.buildOffAlly?this.game.alliances.getAllies(this.player).map((e=>[...e.buildings].filter((e=>e.rules.eligibileForAllyBuilding)))).flat():[]])t.rules.baseNormal&&i.push(this.getAdjacentRect(t.tile,t.art.foundation,e));return i}meetsAdjacency(e,t){let r=this.adjacencyMaps.get(t);for(var s of(r||(r=this.getAdjacencyMap(t),this.adjacencyMaps.set(t,r)),r))if(i.rectIntersect(e,s))return!0;return!1}getPlacementPreview(e,t,i={}){var{normalizedTile:s=!1,ignoreObjects:n,ignoreAdjacent:a=!1}=i,o=this.rules.getBuilding(e),l=this.art.getObject(e,r.ObjectType.Building);let c=[];var h=l.foundation,u=s?t:this.normalizePlacementTileCoords(l,t);let d=!0;l={x:u.rx,y:u.ry,width:h.width,height:h.height},o.constructionYard||a||this.meetsAdjacency(l,o.adjacent)||(d=!1);for(let e=0;e{c.push({rx:e.rx,ry:e.ry,buildable:!0})}))}return c}canPlaceAt(e,t,i={}){var{normalizedTile:s=!1,ignoreObjects:n,ignoreAdjacent:a=!1}=i,o=this.rules.getBuilding(e),l=(h=this.art.getObject(e,r.ObjectType.Building)).foundation,c=s?t:this.normalizePlacementTileCoords(h,t),h={x:c.rx,y:c.ry,width:l.width,height:l.height};if(!o.constructionYard&&!a&&!this.meetsAdjacency(h,o.adjacent))return!1;for(let e=0;e{t!==n&&e.push([t,s])})),e))r.push(this.executePlacement(a[0],a[1]));t.forEach((e=>{var t=this.map.getObjectsOnTile(e).find((e=>e.isBuilding()&&e.name===s.name&&e.owner===this.player));this.connectWall(t)}))}else{var o,l=this.executePlacement(n,s);for(o of(r.push(l),this.map.tileOccupation.calculateTilesForGameObject(n,l))){var c=this.map.getObjectsOnTile(o).find((e=>e.isSmudge()));c&&this.game.unspawnObject(c)}}return r}normalizePlacementTileCoords(e,t){var i=e.foundationCenter;return{rx:t.rx-i.x,ry:t.ry-i.y}}normalizePlacementTile(e,t){var i=this.art.getObject(e,r.ObjectType.Building),s=this.normalizePlacementTileCoords(i,t);if(!(i=this.map.tiles.getByMapCoords(s.rx,s.ry)))throw new Error(`Can't build outside map (${s.rx}, ${s.ry})`);return i}unplace(e,t){e.unitOrderTrait.cancelAllTasks(),e.unitOrderTrait.addTasks(new l.TaskGroup(new a.PackBuildingTask,new o.CallbackTask((()=>{this.game.unspawnObject(e),e.rules.wall&&this.updateAdjacentWalls(e),t()}))).setCancellable(!1))}executePlacement(e,t){let i=this.game.createObject(r.ObjectType.Building,t.name);return this.game.changeObjectOwner(i,this.player),i.purchaseValue=this.game.sellTrait.computePurchaseValue(t,this.player),this.game.spawnObject(i,e),i}getWallConnectingTiles(e,t){var i,r=t.guardRange+1;let s=[];for(i of[[0,1],[0,-1],[1,0],[-1,0]]){let a=[];for(let o=0;oe.isBuilding()&&e.name===t.name&&e.owner===this.player))){s=s.concat(a);break}if(!this.isTileBuildable(n,t))break;a.push(n)}}return s}getAdjacentBuildingData(e,t){var i;let r=[];for(i of[[0,1],[0,-1],[1,0],[-1,0]]){var s={x:e.rx+i[0],y:e.ry+i[1]},n=this.map.tiles.getByMapCoords(s.x,s.y);n&&(s=this.map.getObjectsOnTile(n).find((e=>e.isBuilding()&&e.name===t&&e.owner===this.player)))&&r.push({direction:i,tile:n,building:s})}return r}updateAdjacentWalls(e){let t=new n.CardinalTileFinder(this.map.tiles,this.map.mapBounds,e.tile,1,1);for(t.diagonal=!1;i=t.getNextTile();){var i=this.map.getObjectsOnTile(i).find((t=>t.isBuilding()&&t.name===e.rules.name&&t.owner===this.player));i&&this.connectWall(i)}}connectWall(e){let t=this.getAdjacentBuildingData(e.tile,e.name);this.updateWallType(e,t.map((e=>e.direction))),t.forEach((e=>{let t=this.getAdjacentBuildingData(e.tile,e.building.name);this.updateWallType(e.building,t.map((e=>e.direction)))}))}updateWallType(e,t){for(var i of(e.wallType=[0,0,0,0],t))0===i[0]&&-1===i[1]&&(e.wallType[0]=1),1===i[0]&&0===i[1]&&(e.wallType[1]=1),0===i[0]&&1===i[1]&&(e.wallType[2]=1),-1===i[0]&&0===i[1]&&(e.wallType[3]=1)}isTileBuildable(e,t,i){return!!this.map.isWithinBounds(e)&&!this.game.mapShroudTrait.getPlayerShroud(this.player)?.isShrouded(e)&&!this.map.getGroundObjectsOnTile(e).some((e=>!(i?.includes(e)||e.isBuilding()&&e.rules.invisibleInGame||e.isSmudge())))&&(t.waterBound?01.5+(a?.tileElevation??0)?n.ZoneType.Air:a&&1.5{var t=new u.RangeHelper(this.tileOccupation).distance2(this.target.getWorldCoords(),this)/o.Coords.LEPTONS_PER_TILE;this.initialTileDistToTarget=t,this.maxSpeed=this.computeMaxSpeed(this.fromWeapon.speed,t,e.rules.audioVisual.gravity)})),this.isHoming()){if(1===this.iniRot&&(this.homingMoveDir=this.target.getWorldCoords().clone().sub(this.position.worldPosition)),this.fromObject?.isAircraft()&&this.rules.isAntiGround&&!this.rules.isAntiAir){let t=this.target.obj;!t?.isVehicle()||t.isDestroyed||t.veteranLevel!==b.VeteranLevel.Elite||t.unitOrderTrait.hasTasks()||t.unitOrderTrait.addTask(new S.ScatterTask(e))}}else if(this.rules.vertical){let e=this.position.clone();e.tileElevation=this.fromWeapon.warhead.rules.nukeMaker?o.Coords.worldToTileHeight(this.fromWeapon.projectileRules.detonationAltitude):0,this.aimPoint=e.worldPosition.clone()}else{let t=this.target.getWorldCoords().clone();e.afterTick((()=>{var i=this.target.getWorldCoords().clone().sub(t).length()>o.Coords.LEPTONS_PER_TILE;let r=i?t:this.target.obj?.isUnit()&&this.target.obj.moveTrait.velocity.length()&&isFinite(this.maxSpeed)?this.computeAimPointVersusMovingTarget(this.target.obj,this.maxSpeed,this.position.worldPosition,e.map):this.target.getWorldCoords().clone();this.aimPoint=r,this.snapToTarget=!i&&isFinite(this.maxSpeed)&&!this.fromWeapon.warhead.rules.sonic,(this.rules.inaccurate||this.rules.flakScatter)&&(this.adjustAimForBallisticScatter(e,r),this.snapToTarget=!1),!i&&this.rules.arcing&&(this.rules.inaccurate?(this.overshootTiles=this.calculateInaccurateBallisticOvershoot(e),this.snapToTarget=!1):this.target.obj?.isVehicle()&&this.target.obj.moveTrait.isMoving()&&(this.overshootTiles=this.calculateBallisticOvershootVsMoving(e,this.target.obj),this.overshootTiles&&(this.snapToTarget=!1))),r.clone().sub(this.position.worldPosition).length()=o.Coords.LEPTONS_PER_TILE)?(C=this.lastTargetLockPosition,this.targetLockLost=!0):this.lastTargetLockPosition=C.clone(),this.isHoming()){if(this.target.obj?.isUnit()&&(this.target.obj.isDestroyed||this.target.obj.isCrashing||!this.target.obj.isSpawned)&&(this.fromWeapon.rules.limboLaunch||this.homingTravelDistance>=2*o.Coords.LEPTONS_PER_TILE))return void this.detonate(e);if(this.homingMoveDir||(s=a.FacingUtil.toMapCoords(this.direction),this.homingMoveDir=new A.Vector3(s.x,0,s.y),this.fromObject?.isAircraft()&&(this.homingMoveDir.y=-9999999,this.homingMoveDir.normalize())),this.fromWeapon.rules.limboLaunch){if(!this.targetLockLost){if(10this.fromPlayer!==e&&!t.alliances.areAllied(this.fromPlayer,e)})}computeBaseDamage(e){var t=this.fromWeapon,i=t.warhead;let r=t.rules.damage;t.type===n.WeaponType.DeathWeapon&&i.rules.ivanBomb&&(r=e.rules.combatDamage.ivanDamage);let s=r*this.baseDamageMultiplier;return t.type===n.WeaponType.DeathWeapon&&this.fromObject&&(s*=this.fromObject.rules.deathWeaponDamageModifier),s*=this.veteranDamageMult,s}detonate(e,t=x.CollisionType.None){var i=this.fromWeapon;let r=i.warhead;var a,o=this.zone=this.collisionHelper.computeDetonationZone(this.tile,this.tileElevation,t);let l=this.tile;i.type===n.WeaponType.DeathWeapon&&r.rules.ivanBomb&&(r=new w.Warhead(e.rules.getWarhead(e.rules.combatDamage.ivanWarhead)));let d=this.computeBaseDamage(e);e.destroyObject(this),this.state=M.Detonation;let g=this.target.obj,m=!1;if(r.rules.parasite&&g?.isUnit()&&l===g.tile&&r.canDamage(g,l,o))if(g.isInfantry())d=Number.POSITIVE_INFINITY;else if(g.parasiteableTrait&&this.fromObject?.isUnit()){if(!(this.fromWeapon instanceof s.Weapon))throw new Error("Projectile with parasite warhead must have a weapon reference");g.parasiteableTrait.infest(this.fromObject,this.fromWeapon),m=!0}let v=!0;if(m&&(v=!1),r.rules.sonic&&(v=!1),r.rules.ivanBomb&&(v=!1,!g?.isTechno()||!g.tntChargeTrait||g.tntChargeTrait.hasCharge()||g.isDestroyed||g.warpedOutTrait.isInvulnerable()||(a=e.rules.combatDamage.ivanTimedDelay,g.tntChargeTrait.setCharge(a,e.currentTick,{player:this.fromPlayer}))),r.rules.bombDisarm&&(v=!1,g?.isTechno()&&g.tntChargeTrait?.hasCharge()&&!g.isDestroyed&&g.tntChargeTrait.removeCharge()),r.rules.mindControl&&(v=!1,this.fromObject&&!this.fromObject.isDestroyed&&g?.isTechno()&&g.mindControllableTrait&&!g.mindControllableTrait?.isActive()&&!e.areFriendly(g,this.fromObject)&&r.canDamage(g,l,o)&&!g.invulnerableTrait.isActive()&&this.fromObject.mindControllerTrait.control(g,e)),r.rules.temporal&&(v=!1,this.fromObject&&!this.fromObject.isDestroyed&&g?.isTechno()&&r.canDamage(g,l,o)&&!g.invulnerableTrait.isActive()&&(r.inflictDamage(0,g,{player:this.fromPlayer,weapon:i,obj:this.fromObject},e),this.fromObject.temporalTrait.updateTarget(g,i,e))),r.rules.makesDisguise&&(v=!1,this.fromObject&&!this.fromObject.isDestroyed&&(this.fromObject.isInfantry()||this.fromObject.isVehicle())&&g?.isUnit()&&g.type===this.fromObject.type&&this.fromObject.disguiseTrait?.disguiseAs(g,this.fromObject,e)),r.rules.electricAssault&&(this.fromObject?.isUnit()&&!this.fromObject.isDestroyed&&g?.isBuilding()&&!g.isDestroyed&&g.overpoweredTrait&&g.owner===this.fromPlayer&&g.overpoweredTrait.chargeFrom(this.fromObject),v=!1),v&&r.detonate(e,d,l,this.tileElevation,this.position.worldPosition,o,t,this.target,{player:this.fromPlayer,weapon:i,obj:this.fromObject},this.isShrapnel,!1,this.impactAnim),r.rules.nukeMaker){let t;t=this.fromObject?(b=s.Weapon.factory(s.Weapon.NUKE_PAYLOAD_NAME,n.WeaponType.Primary,this.fromObject,e.rules),e.createProjectile(b.projectileRules.name,this.fromObject,b,this.target,!1)):e.createLooseProjectile(s.Weapon.NUKE_PAYLOAD_NAME,this.fromPlayer,this.target),t.isNuke=!0,t.impactAnim="NUKEBALL";var b=this.target.tile;t.position.moveToTileCoords(b.rx+.5,b.ry+.5),t.position.tileElevation=this.position.tileElevation,e.spawnObject(t,b)}if(this.rules.shrapnelCount&&this.rules.shrapnelWeapon&&((this.target.obj?!this.target.obj.isBuilding():e.map.getGroundObjectsOnTile(this.target.tile).some((e=>e.isTerrain()))&&!i.projectileRules.isAntiAir)||this.isShrapnel)){let t=e.rules.getWeapon(this.rules.shrapnelWeapon);var S,C=e.rules.getProjectile(t.projectile);let i=this.rules.shrapnelCount,r=new u.RangeHelper(e.map.tileOccupation),s=new h.RadialTileFinder(e.map.tiles,e.map.mapBounds,l,{width:1,height:1},1,t.range,(e=>r.isInTileRange(l,e,t.minimumRange,t.range))),n=new Set;for(;0e.isValidTarget(t)&&(t.isTerrain()||t.isTechno()&&t.owner!==this.fromPlayer&&!e.alliances.areAllied(t.owner,this.fromPlayer)&&!(t.isInfantry()&&t.stance===y.StanceType.Paradrop)))))if(!n.has(E)&&(n.add(E),i=Math.max(0,i-1-(E.isTechno()?.5:0)),Math.floor(i)<=0))break}for(S of n){var A=e.createTarget(S.isTerrain()?void 0:S,S.tile);this.createShrapnel(e,A,t.name)}i=Math.floor(i);let a=new p.RandomTileFinder(e.map.tiles,e.map.mapBounds,l,t.range,e,(e=>r.isInTileRange(l,e,t.minimumRange,t.range)));for(let r=0;r{var s=e.map.tileOccupation.getBridgeOnTile(t);return 0100*this.conditionYellow?l.HealthLevel.Green:this.health>100*this.conditionRed?l.HealthLevel.Yellow:l.HealthLevel.Red}setHitPoints(e){if(e!==Math.floor(e))throw new Error(`Value ${e} is not an integer`);this.hitPoints=i.clamp(e,0,this.maxHitPoints),this._computedHealth=this.hitPoints/this.maxHitPoints*100}getHitPoints(){return this.hitPoints}getProjectedHitPoints(){return this.projectedHitPoints}inflictDamage(e,t,i){var s=this.hitPoints,a=this.health;this.applyHitPoints(s-e,i),s!==this.hitPoints&&0{s[r.NotifyDamage.onDamage](this.gameObject,i,e,t)})),i.events.dispatch(new n.InflictDamageEvent(this.gameObject,t,e,this.health,a)))}healBy(e,t,i){if(e<0)throw new Error("Can't heal by negative value "+e);if(this.hitPoints{e[o.NotifyHeal.onHeal]?.(this.gameObject,i,s,t)}))}}healToFull(e,t){if(this.hitPoints{i[o.NotifyHeal.onHeal]?.(this.gameObject,t,r,e)}))}}applyHitPoints(e,t){let i=this.health;this.setHitPoints(e),i!==this.health&&(t.traits.filter(s.NotifyHealthChange).forEach((e=>{e[s.NotifyHealthChange.onChange](this.gameObject,t,i)})),this.gameObject.traits.filter(a.NotifyHealthChange).forEach((e=>{e[a.NotifyHealthChange.onChange](this.gameObject,t,i)})),t.events.dispatch(new h.HealthChangeEvent(this.gameObject,this.health,i)))}projectDamage(e){if(e<0)throw new Error("Projected damage must be positive");this.projectedHitPoints=Math.max(-30,this.projectedHitPoints-e)}[c.NotifyTick.onTick](e,t){t.currentTick%4==0&&(this.projectedHitPoints=Math.min(this.projectedHitPoints+1,this.hitPoints))}getHash(){return this.hitPoints}debugGetState(){return{hitPoints:this.hitPoints}}dispose(){this.gameObject=void 0}},e("HealthTrait",u)}}})),System.register("game/gameobject/trait/BridgeTrait",["game/gameobject/trait/interface/NotifyDamage","game/gameobject/trait/interface/NotifyTick","game/gameobject/trait/interface/NotifyDestroy","game/gameobject/infantry/InfDeathType","game/type/LandType","game/gameobject/unit/ZoneType","game/gameobject/infantry/StanceType"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e}],execute:function(){c=class e{constructor(e){this.bridges=e,this.needsImageUpdate=!1,this.dominoHandled=!1}[i.NotifyDamage.onDamage](){this.needsImageUpdate=!0}[r.NotifyTick.onTick](e){this.needsImageUpdate&&(this.needsImageUpdate=!1,this.bridges.handlePieceHealthChange(this.bridges.getPieceAtTile(e.tile)))}[s.NotifyDestroy.onDestroy](t,i,r){var s=this.bridges.getPieceAtTile(t.tile);this.dominoHandled||this.bridges.findDominoPieces(s).filter((e=>!e.obj.isDestroyed)).forEach((t=>{t.obj.traits.get(e).dominoHandled=!0,i.destroyObject(t.obj,r)})),i.map.tileOccupation.calculateTilesForGameObject(t.tile,t).forEach((e=>{let s=a.getLandType(e.terrainType),c=i.rules.getLandRules(s);i.map.getGroundObjectsOnTile(e).forEach((e=>{e.isUnit()&&e.onBridge&&!e.isDestroyed&&(t.isLowBridge()&&0this.cooldownTicks&&(this.ticksSinceLastSpawn=0,this.status=c.Spawning,this.spawnTiberium(e.tile,t))}spawnTiberium(e,t){for(let u=1;u<=2;u++){let d=new r.RadialTileFinder(t.map.tiles,t.map.mapBounds,e,{width:1,height:1},u,u,(e=>l.TiberiumTrait.canBePlacedOn(e,t.map)));var i=d.getNextTile();if(i){var c=a.OreSpread.calculateOverlayId(o.OverlayTibType.Ore,i);if(void 0===c)throw new Error("Expected an overlayId");let e=t.createObject(n.ObjectType.Overlay,t.rules.getOverlayName(c));return e.overlayId=c,e.value=3,void t.spawnObject(e,i)}let g;for(d=new r.RadialTileFinder(t.map.tiles,t.map.mapBounds,e,{width:1,height:1},u,u,(e=>e.landType===s.LandType.Tiberium));!g;){var h=d.getNextTile();if(!h)break;g=t.map.getObjectsOnTile(h).find((e=>e.isOverlay()&&e.isTiberium()&&e.traits.get(l.TiberiumTrait).getBailCount()+1<=l.TiberiumTrait.maxBails))}if(g)return void g.traits.get(l.TiberiumTrait).spawnBails(1)}}},e("TiberiumTreeTrait",h)}}})),System.register("game/gameobject/trait/AutoRepairTrait",["game/gameobject/trait/interface/NotifyTick","game/gameobject/trait/interface/NotifyOwnerChange","game/GameSpeed"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=class{constructor(e=!1){this.freeRepair=e,this.disabled=!0,this.cooldownTicks=0,this.healLeftover=0}isDisabled(){return this.disabled}setDisabled(e){this.disabled=e}[i.NotifyTick.onTick](e,t){if(!this.isDisabled())if(100===e.healthTrait.health&&this.setDisabled(!0),this.cooldownTicks<=0){var i=t.rules.general.repair,r=e.isInfantry()?i.iRepairRate:e.isBuilding()?i.repairRate:i.uRepairRate;this.cooldownTicks+=s.GameSpeed.BASE_TICKS_PER_SECOND*r*60;var n=e.isInfantry()?i.iRepairStep:i.repairStep;let a;(r=this.freeRepair?0:i.repairPercent)?(i=r*e.purchaseValue/e.healthTrait.maxHitPoints,(r=Math.min(e.owner.credits,Math.max(1,Math.floor(i*n))))?(a=i?r/i:n,e.owner.credits-=r):(a=0,this.setDisabled(!0))):a=n,a&&(a+=this.healLeftover,a=Math.min(e.healthTrait.maxHitPoints-e.healthTrait.getHitPoints(),a),a&&(n=Math.floor(a),this.healLeftover=a-n,n&&e.healthTrait.healBy(n,e,t)))}else this.cooldownTicks--}[r.NotifyOwnerChange.onChange](){this.setDisabled(!0)}},e("AutoRepairTrait",n)}}})),System.register("game/trait/interface/NotifyTargetDestroy",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){(i=i||{}).onDestroy=Symbol(),e("NotifyTargetDestroy",i)}}})),System.register("game/event/UnitPromoteEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("UnitPromoteEvent",class{constructor(e){this.target=e,this.type=i.EventType.UnitPromote}})}}})),System.register("game/gameobject/trait/SelfHealingTrait",["game/gameobject/trait/interface/NotifyTick","game/GameSpeed"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class{constructor(){this.cooldownTicks=0}[i.NotifyTick.onTick](e,t){100!==e.healthTrait.health&&(this.cooldownTicks<=0?(this.cooldownTicks+=r.GameSpeed.BASE_TICKS_PER_SECOND*t.rules.general.repair.repairRate*60,e.healthTrait.healBy(1,e,t)):this.cooldownTicks--)}},e("SelfHealingTrait",s)}}})),System.register("game/event/ObjectCloakChangeEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("ObjectCloakChangeEvent",class{constructor(e){this.target=e,this.type=i.EventType.ObjectCloakChange}})}}})),System.register("game/gameobject/trait/CloakableTrait",["game/event/ObjectCloakChangeEvent","game/GameSpeed","game/gameobject/trait/interface/NotifyDamage","game/gameobject/trait/interface/NotifySpawn","game/gameobject/trait/interface/NotifyTick"],(function(e,t){"use strict";var i,r,s,n,a,o;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){o=class{constructor(e,t){this.gameObject=e,this.cloakDelayMinutes=t,this.isActive=!1,this.resetCloakCooldown()}isCloaked(){return this.isActive}uncloak(e){var t=this.isActive;this.resetCloakCooldown(),t&&(this.isActive=!1,e.events.dispatch(new i.ObjectCloakChangeEvent(this.gameObject)))}resetCloakCooldown(){this.cooldownTicks=Math.floor(60*this.cloakDelayMinutes*r.GameSpeed.BASE_TICKS_PER_SECOND)}[n.NotifySpawn.onSpawn](e,t){this.resetCloakCooldown()}[a.NotifyTick.onTick](e,t){0t===e||t?.rules.neverUse)).reduce(((e,t)=>Math.max(e,t.range)),0);t=Math.max(t,this.gameObject.rules.guardRange);return Math.min(15,2*t-1)}getDeployFireWeapon(){if(this.gameObject.rules.deployFire)return this.gameObject.rules.deployFireWeapon===r.WeaponType.Primary?this.primaryWeapon:this.secondaryWeapon}isEquippedWithWeapon(e){return[this.primaryWeapon,this.secondaryWeapon].includes(e)}getWeapons(){return[this.primaryWeapon,this.secondaryWeapon].filter(o.isNotNullOrUndefined)}[s.NotifyTick.onTick](){this.primaryWeapon&&this.primaryWeapon.tick(),this.secondaryWeapon&&this.secondaryWeapon.tick()}[n.NotifyDestroy.onDestroy](e,t,i){!this.deathWeapon||i?.weapon?.warhead.rules.temporal||e.crashableTrait&&!e.isCrashing||i?.obj?.isVehicle()&&i.weapon?.rules.suicide&&i.obj.transportTrait?.units.find((t=>t===e))||this.deathWeapon.fire(t.createTarget(e,e.tile),t)}dispose(){this.gameObject=void 0,this.primaryWeapon=void 0,this.secondaryWeapon=void 0,this.deathWeapon=void 0}},e("ArmedTrait",l)}}})),System.register("game/gameobject/trait/SensorsTrait",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("SensorsTrait",class{})}}})),System.register("game/gameobject/trait/VeteranTrait",["game/gameobject/unit/VeteranLevel","game/trait/interface/NotifyTargetDestroy","game/event/UnitPromoteEvent","game/gameobject/unit/VeteranAbility","game/gameobject/trait/SelfHealingTrait","game/gameobject/trait/CloakableTrait","game/gameobject/trait/ArmedTrait","game/gameobject/trait/SensorsTrait"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e}],execute:function(){h=class{constructor(e,t){this.gameObject=e,this.veteranRules=t,this.veteranLevel=i.VeteranLevel.None,this.xp=0,this.promotionThresh=e.rules.cost*t.veteranRatio+1}[r.NotifyTargetDestroy.onDestroy](e,t,i,r){e.isDestroyed&&!e.isCrashing||t.isTechno()&&(t.rules.dontScore||t.rules.insignificant||(i&&(i.warhead.rules.temporal||i.warhead.rules.parasite&&e.rules.organic)||!r.areFriendly(e,t))&&(this.veteranLevel>=this.veteranRules.veteranCap||this.gainXP(t.rules.cost*(t.veteranLevel+1))&&this.handlePromotion(e,r)))}setRelativeXP(e){this.gainXP(Math.floor(e*this.promotionThresh))}gainXP(e){if(this.xp+=e,this.xp>=this.promotionThresh){var t=Math.min(this.veteranLevel+Math.floor(this.xp/this.promotionThresh),this.veteranRules.veteranCap),i=t-this.veteranLevel;if(i)return this.xp-=i*this.promotionThresh,this.setVeteranLevel(t),!0}return!1}promote(e,t){var i=Math.min(this.veteranLevel+e,this.veteranRules.veteranCap);i-this.veteranLevel&&(this.setVeteranLevel(i),this.handlePromotion(this.gameObject,t))}isMaxLevel(){return this.veteranLevel===this.veteranRules.veteranCap}isElite(){return this.veteranLevel===i.VeteranLevel.Elite}setVeteranLevel(e){this.veteranLevel=e,this.veteranLevel===i.VeteranLevel.Elite&&this.gameObject.armedTrait?.toggleEliteWeapons(!0)}handlePromotion(e,t){this.hasVeteranAbility(n.VeteranAbility.SELF_HEAL)&&(e.traits.find(a.SelfHealingTrait)||t.addObjectTrait(e,new a.SelfHealingTrait)),this.hasVeteranAbility(n.VeteranAbility.CLOAK)&&(e.cloakableTrait||(e.cloakableTrait=new o.CloakableTrait(e,t.rules.general.cloakDelay),t.addObjectTrait(e,e.cloakableTrait))),this.hasVeteranAbility(n.VeteranAbility.EXPLODES)&&(e.explodes||(e.explodes=!0,e.armedTrait||(e.armedTrait=new l.ArmedTrait(e,t.rules),t.addObjectTrait(e,e.armedTrait)))),this.hasVeteranAbility(n.VeteranAbility.RADAR_INVISIBLE)&&(e.radarInvisible||(e.radarInvisible=!0)),this.hasVeteranAbility(n.VeteranAbility.SENSORS)&&(e.sensorsTrait||(e.sensorsTrait=new c.SensorsTrait,t.addObjectTrait(e,e.sensorsTrait))),e.isInfantry()&&this.hasVeteranAbility(n.VeteranAbility.FEARLESS)&&e.suppressionTrait?.disable(),this.hasVeteranAbility(n.VeteranAbility.C4)&&(e.c4||(e.c4=!0)),this.hasVeteranAbility(n.VeteranAbility.GUARD_AREA)&&(e.defaultToGuardArea||(e.defaultToGuardArea=!0,e.unitOrderTrait.isIdle()&&e.resetGuardModeToIdle())),this.hasVeteranAbility(n.VeteranAbility.CRUSHER)&&(e.crusher||(e.crusher=!0)),t.events.dispatch(new s.UnitPromoteEvent(e))}getVeteranSightMultiplier(){return this.getVeteranAbilityMultiplier(n.VeteranAbility.SIGHT)}getVeteranSpeedMultiplier(){return this.getVeteranAbilityMultiplier(n.VeteranAbility.FASTER)}getVeteranArmorMultiplier(){return this.getVeteranAbilityMultiplier(n.VeteranAbility.STRONGER)}getVeteranDamageMultiplier(){return this.getVeteranAbilityMultiplier(n.VeteranAbility.FIREPOWER)}getVeteranRofMultiplier(){return this.getVeteranAbilityMultiplier(n.VeteranAbility.ROF)}hasVeteranAbility(e){return this.veteranLevel===i.VeteranLevel.Veteran&&this.gameObject.rules.veteranAbilities.has(e)||this.veteranLevel>=i.VeteranLevel.Elite&&this.gameObject.rules.eliteAbilities.has(e)}getVeteranAbilityMultiplier(e){let t=1;return(this.veteranLevel===i.VeteranLevel.Veteran&&this.gameObject.rules.veteranAbilities.has(e)||this.veteranLevel>=i.VeteranLevel.Elite&&this.gameObject.rules.eliteAbilities.has(e))&&(t=this.getVeteranRulesMultiplier(e)),t}getVeteranRulesMultiplier(e){switch(e){case n.VeteranAbility.FASTER:return this.veteranRules.veteranSpeed;case n.VeteranAbility.STRONGER:return this.veteranRules.veteranArmor;case n.VeteranAbility.FIREPOWER:return this.veteranRules.veteranCombat;case n.VeteranAbility.ROF:return this.veteranRules.veteranROF;case n.VeteranAbility.SIGHT:return this.veteranRules.veteranSight;default:throw new Error("Unhandled VeteranAbility "+e)}}dispose(){this.gameObject=void 0}},e("VeteranTrait",h)}}})),System.register("game/gameobject/trait/InvulnerableTrait",["game/gameobject/unit/Timer","game/gameobject/trait/interface/NotifyTick"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class{constructor(){this.timer=new i.Timer}isActive(){return this.timer.isActive()}setActiveFor(e,t){this.timer.setActiveFor(e,t)}[r.NotifyTick.onTick](e,t){this.timer.tick(t.currentTick)}},e("InvulnerableTrait",s)}}})),System.register("game/trait/interface/NotifyWarpChange",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){(i=i||{}).onChange=Symbol(),e("NotifyWarpChange",i)}}})),System.register("game/gameobject/trait/WarpedOutTrait",["game/gameobject/trait/interface/NotifyWarpChange","game/trait/interface/NotifyWarpChange","game/gameobject/trait/interface/NotifyTick"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=class{constructor(e){this.gameObject=e,this.ticksWhenWarpedOut=!0,this.remainingTicks=0,this.invulnerable=!1}isActive(){return 0{i[r.NotifyWarpChange.onChange](this.gameObject,t,e)})),this.gameObject.traits.filter(i.NotifyWarpChange).forEach((r=>{r[i.NotifyWarpChange.onChange](this.gameObject,t,e)}))}expire(e){this.remainingTicks=0,this.notifyChange(!1,e)}isInvulnerable(){return this.isActive()&&this.invulnerable}[s.NotifyTick.onTick](e,t){0this.maxCapacity;){this.targets.shift().mindControllableTrait.restore(t)}}cleanTarget(e){var t=this.targets.indexOf(e);-1!==t&&this.targets.splice(t,1)}[i.NotifyUnspawn.onUnspawn](e,t){for(var i of this.targets)i.mindControllableTrait.restore(t);this.targets.length=0}dispose(){this.gameObject=void 0}},e("MindControllerTrait",r)}}})),System.register("game/gameobject/trait/TemporalTrait",["game/gameobject/common/DeathType","game/gameobject/task/AttackTask","game/gameobject/task/move/MoveTask","game/gameobject/trait/interface/NotifyDestroy","game/gameobject/trait/interface/NotifyTick"],(function(e,t){"use strict";var i,r,s,n,a,o;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){o=class{constructor(e){this.gameObject=e,this.ticksWhenWarpedOut=!0,this.attackers=new Set}[a.NotifyTick.onTick](e,t){if(e.attackTrait&&(e.attackTrait.currentTarget&&!e.warpedOutTrait.isActive()||this.releaseCurrentTarget(t)),void 0!==this.eraseTicks)for(var r of this.attackers){var s=r.temporalTrait.currentWeapon;if(!s)throw new Error(`Attacker "${r.name}" is no longer targeting "${e.name}"`);var n=s.rules.damage;if(this.eraseTicks-=n,this.eraseTicks<=0){e.deathType=i.DeathType.Temporal,t.destroyObject(e,{player:r.owner,obj:r,weapon:s},!0),this.eraseTicks=void 0;break}}}getTarget(){return this.currentTarget}updateTarget(e,t,i){if(this.currentTarget!==e){this.releaseCurrentTarget(i),this.currentTarget=e,this.currentWeapon=t;var n=e.temporalTrait.attackers.size;if(e.temporalTrait.attackers.add(this.gameObject),!n){e.warpedOutTrait.setActive(!0,!0,i);let t=e.unitOrderTrait.getCurrentTask();(t&&t instanceof r.AttackTask||t instanceof s.MoveTask)&&t.cancel(),e.temporalTrait.eraseTicks=10*e.healthTrait.maxHitPoints}}}releaseCurrentTarget(e){if(this.currentTarget){if(!this.currentTarget.isDisposed){let t=this.currentTarget.temporalTrait.attackers;t.delete(this.gameObject),t.size||(this.currentTarget.warpedOutTrait.expire(e),this.currentTarget.temporalTrait.eraseTicks=void 0)}this.currentTarget=void 0,this.currentWeapon=void 0}}[n.NotifyDestroy.onDestroy](e,t){this.releaseCurrentTarget(t)}dispose(){this.gameObject=void 0,this.attackers.clear()}},e("TemporalTrait",o)}}})),System.register("game/gameobject/trait/AirSpawnTrait",["game/Coords","engine/type/ObjectType","game/Warhead","game/gameobject/unit/CollisionType","game/gameobject/task/move/MoveTask","game/gameobject/task/system/CallbackTask","game/gameobject/task/system/TaskGroup","game/gameobject/unit/FacingUtil","game/gameobject/trait/interface/NotifyDestroy","game/gameobject/trait/interface/NotifyOwnerChange","game/gameobject/trait/interface/NotifySpawn","game/gameobject/trait/interface/NotifyTeleport","game/gameobject/trait/interface/NotifyTick","game/gameobject/trait/interface/NotifyUnspawn","game/gameobject/trait/interface/NotifyWarpChange","game/gameobject/unit/ZoneType"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p,m,f,y,T;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e},function(e){m=e},function(e){f=e},function(e){y=e}],execute:function(){T=class{constructor(){this.spawns=[],this.storage=[],this.missileLaunches=[],this.nextRegenTicks=[]}get availableSpawns(){return this.storage.length}debugSetStorage(e,t){this.storage.length=t,this.storage.fill(e,0,t)}isLaunchingMissiles(){return 0!e.isDestroyed)),this.missileLaunches=this.missileLaunches.filter((e=>!e.missile.isDestroyed)),this.spawns.length0{var a,o;s.isDestroyed||(t.unspawnObject(s),s.dispose(),o=i.Coords.vecGroundToWorld(c.FacingUtil.toMapCoords(s.direction).multiplyScalar(1)),a=r.targetWorldPos.clone().add(o),o=t.map.getTileZone(r.targetTile),r.warhead.detonate(t,r.damage,r.targetTile,r.targetBridge?.tileElevation??0,a,o,r.targetBridge?n.CollisionType.OnBridge:n.CollisionType.None,r.target,{player:s.owner,obj:e,weapon:void 0},!1,!1,void 0))}))).setCancellable(!1)),-1===(g=this.spawns.indexOf(s)))throw new Error("Missile not found in spawns list");this.spawns.splice(g,1),this.missileLaunches.splice(this.missileLaunches.indexOf(r),1)}}}}[u.NotifyOwnerChange.onChange](e,t,i){for(var r of this.spawns)r.isDestroyed||i.changeObjectOwner(r,e.owner)}[f.NotifyWarpChange.onChange](e,t,i){i&&this.removeMissileLaunches(t)}[g.NotifyTeleport.onBeforeTeleport](e,t,i,r){r||this.removeMissileLaunches(t)}removeMissileLaunches(e){if(this.missileLaunches.length){for(var t of this.missileLaunches){if(e.unspawnObject(t.missile),t.missile.dispose(),-1===(t=this.spawns.indexOf(t.missile)))throw new Error("Missile not found in spawns list");this.spawns.splice(t,1)}this.missileLaunches.length=0}}prepareLaunch(e,t,i){if(this.storage.length){let a=this.storage[0];if(!a.ammo)return;if(this.storage.shift(),a.missileSpawnTrait){let o,l;var r=e.veteranTrait?.isElite(),n=i.rules;if(e.rules.spawns===n.general.v3Rocket.type)o=r?n.combatDamage.v3EliteWarhead:n.combatDamage.v3Warhead,l=r?n.general.v3Rocket.eliteDamage:n.general.v3Rocket.damage;else{if(e.rules.spawns!==n.general.dMisl.type)throw new Error(`Unhandled missile type "${e.rules.spawns}"`);o=r?n.combatDamage.dMislEliteWarhead:n.combatDamage.dMislWarhead,l=r?n.general.dMisl.eliteDamage:n.general.dMisl.damage}n=new s.Warhead(i.rules.getWarhead(o)),a.missileSpawnTrait.setDamage(l).setWarhead(n).setLauncher(e),this.missileLaunches.push({missile:a,targetTile:(t.obj?.isUnit()?t.obj:t).tile,targetBridge:t.getBridge(),targetWorldPos:t.getWorldCoords().clone(),target:t,warhead:n,damage:l,pauseFrames:void 0})}else{if(!a.spawnLinkTrait)throw new Error(`Aircraft "${a.name}" must have Spawned=yes to be launchable`);a.spawnLinkTrait.setParent(e)}return a}}storeAircraft(e,t){if(!this.spawns.includes(e))throw new Error(`Object "${e.name}#${e.id}" not found in list of linked spawns`);if(e.limboData)throw new Error(`Object "${e.name}#${e.id}" is already in limbo`);t.limboObject(e,{selected:!1,controlGroup:void 0}),this.storage.push(e)}},e("AirSpawnTrait",T)}}})),System.register("game/gameobject/trait/SpawnDebrisTrait",["engine/type/ObjectType","game/gameobject/common/DeathType","game/gameobject/trait/interface/NotifyCrash","game/gameobject/trait/interface/NotifyDestroy"],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e}],execute:function(){a=class{[s.NotifyCrash.onCrash](e,t){this.handleDestroy(e,t)}[n.NotifyDestroy.onDestroy](e,t,i){i?.weapon?.warhead.rules.temporal||e.isCrashing||e.deathType!==r.DeathType.Sink&&e.isSpawned&&this.handleDestroy(e,t)}handleDestroy(e,t){var i,r;(e.isVehicle()||e.isBuilding()||e.isOverlay())&&(i=e.isOverlay()?0:e.rules.minDebris,r=e.isOverlay()?t.rules.general.bridgeVoxelMax:e.rules.maxDebris,0<(r=t.generateRandomInt(i,r))&&this.spawnDebris(e,t,r))}spawnDebris(e,t,r){let s=e.position.getMapPosition();if(t.map.isWithinHardBounds(s)){let n=e.isOverlay()?[]:e.isVehicle()?e.rules.debrisTypes:e.rules.debrisAnims;n.length||(n=t.rules.audioVisual.metallicDebris),n=n.filter((e=>t.rules.hasObject(e,i.ObjectType.VoxelAnim)||t.art.hasObject(e,i.ObjectType.Animation))),new Array(r).fill(0).map((()=>n[t.generateRandomInt(0,n.length-1)])).map((e=>t.createObject(i.ObjectType.Debris,e))).forEach((i=>{i.position.moveToLeptons(s),i.position.tileElevation=e.position.tileElevation,t.spawnObject(i,i.position.tile)}))}}},e("SpawnDebrisTrait",a)}}})),System.register("game/gameobject/Debris",["game/gameobject/GameObject","engine/type/ObjectType","game/gameobject/unit/ZoneType","game/Warhead","game/gameobject/unit/FacingUtil","game/gameobject/common/AnimTerrainEffect","game/gameobject/unit/CollisionHelper","game/gameobject/unit/CollisionType","game/math/Vector3","util/math"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e}],execute:function(){d=class extends i.GameObject{constructor(e,t,i,n){super(r.ObjectType.Debris,e,t,i),this.age=0,this.direction=0,this.rotationAxis=new h.Vector3,this.angularVelocity=0,this.zone=s.ZoneType.Air,this.velocity=new h.Vector3,this.collisionHelper=new l.CollisionHelper(n)}static factory(e,t,i,r){return new this(e,t,i,r)}onSpawn(e){super.onSpawn(e),this.direction=e.generateRandomInt(0,359),this.xySpeed=u.lerp(0,this.rules.maxXYVel,e.generateRandom()),this.zSpeed=u.lerp(this.rules.minZVel,this.rules.maxZVel||1.5*this.rules.minZVel,e.generateRandom()),this.rotationAxis.set(e.generateRandom(),e.generateRandom(),e.generateRandom()).normalize(),this.angularVelocity=u.lerp(this.rules.minAngularVelocity,this.rules.maxAngularVelocity,e.generateRandom())}update(e){if(super.update(e),this.age++,this.rules.duration&&this.age>this.rules.duration)return this.velocity.set(0,0,0),void this.detonate(e);--this.zSpeed;var t=a.FacingUtil.toMapCoords(this.direction).setLength(this.xySpeed);let i=new h.Vector3(t.x,this.zSpeed,t.y);var r=this.position.clone();t=i.clone().add(this.position.worldPosition);if(e.map.isWithinHardBounds(t)){this.position.moveByLeptons3(i);let t=!1;(r=this.collisionHelper.checkCollisions(this.position,r,{cliffs:!0,ground:!0,shore:!1,walls:!0,buildings:!1}))&&(!([c.CollisionType.Ground,c.CollisionType.OnBridge].includes(r)&&0e?.warhead.rules.mindControl))&&(q.mindControllerTrait=new j.MindControllerTrait(q),q.traits.add(q.mindControllerTrait)),q.rules.spawns&&(q.airSpawnTrait=new D.AirSpawnTrait,q.traits.add(q.airSpawnTrait)),q.rules.maxDebris&&q.traits.add(new F.SpawnDebrisTrait)),q.isTechno()||q.isOverlay()||q.isTerrain()){var $=q.isOverlay()&&v.BridgeOverlayTypes.isBridge(V.getOverlayId(q.name));let e=q.rules.strength;!e&&q.isTerrain()&&(e=V.general.treeStrength),$&&(e=V.combatDamage.bridgeStrength),(e||q.isTechno())&&(q.healthTrait=new y.HealthTrait(e,q,V.audioVisual.conditionYellow,V.audioVisual.conditionRed),q.traits.add(q.healthTrait)),q.isOverlay()&&$&&(q.bridgeTrait=new T.BridgeTrait(this.bridges),q.traits.add(q.bridgeTrait),v.BridgeOverlayTypes.getOverlayBridgeType(V.getOverlayId(q.name))===v.OverlayBridgeType.Concrete&&q.traits.add(new F.SpawnDebrisTrait))}return q.isOverlay()&&q.isOverlay()&&b.OreOverlayTypes.getOverlayTibType(V.getOverlayId(q.name))!==S.OverlayTibType.NotSpecial&&q.traits.add(new w.TiberiumTrait(q)),q.isTerrain()&&q.rules.spawnsTiberium&&q.traits.add(new C.TiberiumTreeTrait(q.rules)),q.cachedTraits.tick.push(...q.traits.filter(H.NotifyTick)),q}})}}})),System.register("game/PlayerList",["game/SideType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("PlayerList",class{constructor(){this.players=[]}addPlayer(e){this.players.push(e)}getPlayerAt(e){if(e>=this.players.length)throw new RangeError(`Player #${e} out of bounds`);return this.players[e]}getPlayerByName(e){var t=this.players.find((t=>t.name===e));if(!t)throw new Error(`Player with name "${e}" not found`);return t}getPlayerNumber(e){var t=this.players.indexOf(e);if(-1===t)throw new Error(`Player ${e.name} not found`);return t}getCombatants(){return this.players.filter((e=>e.isCombatant()))}getNonNeutral(){return this.players.filter((e=>!e.isNeutral))}getCivilian(){return this.players.find((e=>e.country?.side===i.SideType.Civilian))}getAll(){return this.players}})}}})),System.register("game/Alliances",["util/math"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e}],execute:function(){var t;r=class{constructor(e,t){this.first=e,this.second=t}has(e){return this.first===e||this.second===e}equals(e){return this.first===e.first&&this.second===e.second||this.first===e.second&&this.second===e.first}},(t=s=s||{})[t.Requested=0]="Requested",t[t.Formed=1]="Formed",e("AllianceStatus",s),e("Alliances",class{constructor(e){this.playerList=e,this.alliances=[]}findByPlayers(e,t){let i=new r(e,t);return this.alliances.find((e=>e.players.equals(i)))}filterByPlayer(e){return this.alliances.filter((t=>t.players.first===e||t.players.second===e))}request(e,t){if(!this.canRequestAlliance(t))throw new Error(`Player ${t.name} is not a human combatant.`);if(this.canFormAlliance(e,t)){if(this.findByPlayers(e,t))throw new Error(`Can't request alliance because an alliance is already pending or formed between ${e.name} and ${t.name}.`);return this.setAlliance(e,t,s.Requested)}}cancelRequest(e,t){var i=this.findByPlayers(e,t);if(!i||i.status!==s.Requested)throw new Error(`There is no pending alliance request for player ${t.name} from player `+e.name);if(i.players.first!==e)throw new Error(`Can't cancel request initiated by the other player (${t.name})`);this.alliances.splice(this.alliances.indexOf(i),1)}acceptRequest(e,t){if(this.canFormAlliance(e,t)){let i=this.findByPlayers(e,t);if(!i||i.status!==s.Requested)throw new Error(`There is no pending alliance request for player ${t.name} from player `+e.name);if(i.players.first!==e)throw new Error("Can't accept own alliance request for player "+t.name);i.status=s.Formed}}setAlliance(e,t,i){if(!this.canFormAlliance(e,t))throw new Error(`Can't form alliance between players "${e.name}" and "${t.name}"`);var s;if(this.findByPlayers(e,t))throw new Error(`An alliance already exists between players ${e.name} and `+t.name);return s={players:new r(e,t),status:i},this.alliances.push(s),s}breakAlliance(e,t){var i=this.findByPlayers(e,t);if(!i||i.status!==s.Formed)throw new Error(`There is no alliance between player ${e.name} and player `+t.name);this.alliances.splice(this.alliances.indexOf(i),1)}areAllied(e,t){var i=this.findByPlayers(e,t);return!!i&&i.status===s.Formed}getAllies(e){return this.filterByPlayer(e).filter((e=>e.status===s.Formed)).map((t=>t.players.first===e?t.players.second:t.players.first))}haveSharedIntel(e,t){return e.isObserver||t.isObserver||e===t||this.areAllied(e,t)}canRequestAlliance(e){return e.isCombatant()&&!e.isAi}canFormAlliance(e,t){let i=this.getHostilePlayers();if(0===i.filter((i=>i.has(e)&&!i.has(t))).length)return!1;if(0===i.filter((i=>i.has(t)&&!i.has(e))).length)return!1;let s=new r(e,t);return!!i.filter((e=>!e.equals(s))).length}getHostilePlayers(){var e,t=this.playerList.getCombatants();let i=[];for(let s=0;s[this.playerList.getPlayerNumber(e.players.first),this.playerList.getPlayerNumber(e.players.second),e.status])).flat())}debugGetState(){return this.alliances.map((e=>({first:e.players.first,second:e.players.second,status:e.status})))}})}}})),System.register("game/gameobject/selection/SelectionLevel",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.None=0]="None",t[t.Hover=1]="Hover",t[t.Selected=2]="Selected",t[t.SelectedHover=3]="SelectedHover",e("SelectionLevel",i)}}})),System.register("game/gameobject/selection/SelectionModel",["game/gameobject/selection/SelectionLevel"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("SelectionModel",class{constructor(e){this.selectionLevel=i.SelectionLevel.None,e.isBuilding()&&e.rules.wall?this.maxSelectionLevel=i.SelectionLevel.None:this.maxSelectionLevel=e.rules.selectable?i.SelectionLevel.Selected|i.SelectionLevel.Hover:i.SelectionLevel.Hover}getSelectionLevel(){return this.selectionLevel}setSelectionLevel(e){this.selectionLevel=Math.min(this.maxSelectionLevel,e)}setHover(e){this.setSelectionLevel(e?this.selectionLevel|i.SelectionLevel.Hover:this.selectionLevel&~i.SelectionLevel.Hover)}setSelected(e){this.setSelectionLevel(e?this.selectionLevel|i.SelectionLevel.Selected:this.selectionLevel&~i.SelectionLevel.Selected)}isHovered(){return this.selectionLevel>>i.SelectionLevel.Hover&1}isSelected(){return this.selectionLevel>=i.SelectionLevel.Selected}getControlGroupNumber(){return this.controlGroupNumber}setControlGroupNumber(e){this.controlGroupNumber=e}})}}})),System.register("game/gameobject/selection/SelectionList",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("game/gameobject/selection/UnitSelection",["game/gameobject/selection/SelectionModel","util/math"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("UnitSelection",class{constructor(){this.selectedUnits=new Set,this.selectionModelsByUnit=new Map,this.groups=new Map,this.hashNeedsUpdate=!0}getOrCreateSelectionModel(e){let t=this.selectionModelsByUnit.get(e);return t||(t=new i.SelectionModel(e),this.selectionModelsByUnit.set(e,t)),t}deselectAll(){this.selectedUnits.forEach((e=>this.selectionModelsByUnit.get(e)?.setSelected(!1))),this.selectedUnits.clear(),this.hashNeedsUpdate=!0}addToSelection(e){this.selectedUnits.add(e),this.getOrCreateSelectionModel(e).setSelected(!0),this.hashNeedsUpdate=!0}removeFromSelection(e){e.forEach((e=>{this.selectedUnits.delete(e),this.getOrCreateSelectionModel(e).setSelected(!1)})),this.hashNeedsUpdate=!0}getSelectedUnits(){return[...this.selectedUnits].filter((e=>!e.isDestroyed&&!e.isCrashing&&!e.isDisposed&&e.isSpawned))}isSelected(e){return this.selectedUnits.has(e)}cleanupUnit(e){this.selectionModelsByUnit.delete(e),this.selectedUnits.delete(e),this.unassignUnitsFromGroup([e]),this.hashNeedsUpdate=!0}updateHash(){this.hash=r.fnv32a([...this.selectedUnits].map((e=>e.id)))}getHash(){return this.hashNeedsUpdate&&(this.updateHash(),this.hashNeedsUpdate=!1),this.hash}createGroup(e){this.addUnitsToGroup(e,this.getSelectedUnits())}addUnitsToGroup(e,t,i=!0){this.unassignUnitsFromGroup(t);let r=this.groups.get(e);for(var s of(r||(r=new Set,this.groups.set(e,r)),i&&([...r.values()].forEach((e=>this.selectionModelsByUnit.get(e)?.setControlGroupNumber(void 0))),r.clear()),t))r.add(s),this.getOrCreateSelectionModel(s).setControlGroupNumber(e)}addGroupToSelection(e){if(this.groups.has(e))for(var t of[...this.groups.get(e)])this.addToSelection(t)}selectGroup(e){this.deselectAll(),this.addGroupToSelection(e)}getGroupUnits(e){return[...this.groups.get(e)??[]]}unassignUnitsFromGroup(e){for(var t of this.groups.values())for(var i of e)t.delete(i)}})}}})),System.register("game/StartingUnitsGenerator",["engine/type/ObjectType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("StartingUnitsGenerator",class{static generate(e,t,r,s){var n,a=r.reduce(((e,t)=>e+t.cost),0)/r.length*e;let o=[],l=a,c=(r=r.filter((e=>e.isAvailableTo(s)&&e.hasOwner(s)))).filter((e=>t.includes(e.name)));for(n of c){if(l<=0)break;var h=2/3/c.length;l-=(h=Math.ceil(h*a/n.cost))*n.cost,o.push({name:n.name,type:i.ObjectType.Vehicle,count:h})}var u,d=r.filter((e=>!c.includes(e))),g=l/d.length;for(u of d){if(l<=0)break;var p=Math.ceil(g/u.cost);l-=p*u.cost,o.push({name:u.name,type:i.ObjectType.Infantry,count:p})}return o}})}}})),System.register("game/event/GameEvent",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("game/event/ObjectOwnerChangeEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("ObjectOwnerChangeEvent",class{constructor(e,t){this.target=e,this.prevOwner=t,this.type=i.EventType.ObjectOwnerChange}})}}})),System.register("game/event/RadarEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("RadarEvent",class{constructor(e,t,r){this.target=e,this.radarEventType=t,this.tile=r,this.type=i.EventType.RadarEvent}})}}})),System.register("game/event/ObjectDestroyEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("ObjectDestroyEvent",class{constructor(e,t,r){this.target=e,this.attackerInfo=t,this.incidental=r,this.type=i.EventType.ObjectDestroy}})}}})),System.register("game/event/LightningStormManifestEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("LightningStormManifestEvent",class{constructor(e){this.target=e,this.type=i.EventType.LightningStormManifest}})}}})),System.register("game/event/LightningStormCloudEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("LightningStormCloudEvent",class{constructor(e){this.position=e,this.type=i.EventType.LightningStormCloud}})}}})),System.register("game/event/SuperWeaponActivateEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("SuperWeaponActivateEvent",class{constructor(e,t,r,s,n){this.target=e,this.owner=t,this.atTile=r,this.atTile2=s,this.noSfxWarning=n,this.type=i.EventType.SuperWeaponActivate}})}}})),System.register("game/event/BuildingInfiltrationEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("BuildingInfiltrationEvent",class{constructor(e,t){this.target=e,this.source=t,this.type=i.EventType.BuildingInfiltration}})}}})),System.register("game/event/PingLocationEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("PingLocationEvent",class{constructor(e,t){this.tile=e,this.player=t,this.type=i.EventType.PingLocation}})}}})),System.register("game/event/BuildingPlaceEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("BuildingPlaceEvent",class{constructor(e){this.target=e,this.type=i.EventType.BuildingPlace}})}}})),System.register("game/event/BuildingFailedPlaceEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("BuildingFailedPlaceEvent",class{constructor(e,t,r){this.name=e,this.player=t,this.tile=r,this.type=i.EventType.BuildingFailedPlace}})}}})),System.register("game/event/PlayerResignedEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("PlayerResignedEvent",class{constructor(e){this.target=e,this.type=i.EventType.PlayerResigned}})}}})),System.register("game/event/PlayerDisconnectedEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("PlayerDroppedEvent",class{constructor(e){this.target=e,this.type=i.EventType.PlayerDropped}})}}})),System.register("game/event/AllianceChangeEvent",["game/event/EventType"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){var t;(t=r=r||{})[t.Requested=0]="Requested",t[t.Formed=1]="Formed",t[t.Broken=2]="Broken",e("AllianceEventType",r),e("AllianceChangeEvent",class{constructor(e,t,r){this.alliance=e,this.changeType=t,this.from=r,this.type=i.EventType.AllianceChange}})}}})),System.register("game/event/EventMap",["game/event/EventType"],(function(e,t){"use strict";return t&&t.id,{setters:[function(e){}],execute:function(){}}})),System.register("game/GameEventBus",["util/event"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("GameEventBus",class{constructor(){this.dispatcher=new i.EventDispatcher,this.dispatchersByType=new Map}dispatch(e){this.dispatcher.dispatch(void 0,e),this.dispatchersByType.get(e.type)?.dispatch(void 0,e)}subscribe(e,t){let i,r;return r="function"==typeof e?e:(i=e,t),void 0===i?(this.dispatcher.subscribe(r),()=>this.unsubscribe(r)):this.subscribeType(i,r)}unsubscribe(e,t){let i,r;r="function"==typeof e?e:(i=e,t),void 0===i?this.dispatcher.unsubscribe(r):this.unsubscribeType(i,r)}subscribeType(e,t){let r=this.dispatchersByType.get(e);return r||(r=new i.EventDispatcher,this.dispatchersByType.set(e,r)),r.subscribe(t),()=>this.unsubscribeType(e,t)}unsubscribeType(e,t){this.dispatchersByType.get(e)?.unsubscribe(t)}})}}})),System.register("game/event/PlayerDefeatedEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("PlayerDefeatedEvent",class{constructor(e){this.target=e,this.type=i.EventType.PlayerDefeated}})}}})),System.register("game/trait/interface/NotifyTick",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){(i=i||{}).onTick=Symbol(),e("NotifyTick",i)}}})),System.register("game/trait/interface/NotifyDestroy",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){(i=i||{}).onDestroy=Symbol(),e("NotifyDestroy",i)}}})),System.register("game/trait/interface/NotifySpawn",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){(i=i||{}).onSpawn=Symbol(),e("NotifySpawn",i)}}})),System.register("game/event/BuildingSellEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("BuildingSellEvent",class{constructor(e){this.target=e,this.type=i.EventType.BuildingSell}})}}})),System.register("game/trait/SellTrait",["game/event/BuildingSellEvent","game/gameobject/trait/interface/NotifySell"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("SellTrait",class{constructor(e,t){this.game=e,this.generalRules=t}sell(e){if(!e.rules.unsellable){let t=this.computeRefundValue(e);t&&(e.rules.wall&&(t=0),e.traits.filter(r.NotifySell).forEach((t=>{t[r.NotifySell.onSell](e,this.game)})),e.isBuilding()?this.game.getConstructionWorker(e.owner).unplace(e,(()=>this.afterObjectUnspawned(e,t))):(this.game.unspawnObject(e),this.afterObjectUnspawned(e,t)))}}afterObjectUnspawned(e,t){e.owner.credits+=t,e.isBuilding()&&this.game.events.dispatch(new i.BuildingSellEvent(e)),e.dispose()}computeRefundValue(e){let t=0;return 0e.rules.radar&&!e.warpedOutTrait.isActive()))||e.powerTrait.level===n.PowerLevel.Low||[...this.activeLightningStrikes.entries()].some((([i,r])=>r&&i!==e&&!t.alliances.areAllied(i,e))),e.radarTrait.setDisabled(r),i!==r&&t.events.dispatch(new a.RadarOnOffEvent(e,!r)))}[u.NotifyAttack.onAttack](e,t,i){e.isTechno()&&(!e.isBuilding()||e.rules.canBeOccupied||e.rules.needsEngineer?e.isVehicle()&&e.harvesterTrait&&this.addEventForPlayer(c.RadarEventType.HarvesterUnderAttack,e.owner,e.tile,i):this.addEventForPlayer(c.RadarEventType.BaseUnderAttack,e.owner,e.tile,i))}addEventForPlayer(e,t,i,r){let s=t.radarTrait;if(s){let n=r.rules.general.radar;s.activeEvents=s.activeEvents.filter((e=>r.currentTick-e.startTickt.type===e&&a.isInTileRange(i,t.tile,0,n.getEventSuppresionDistance(t.type))))||(s.activeEvents.push({startTick:r.currentTick,tile:i,type:e}),r.events.dispatch(new h.RadarEvent(t,e,i)))}}},e("RadarTrait",f)}}})),System.register("game/trait/MapShroudTrait",["game/map/MapShroud","game/trait/interface/NotifyTick","game/trait/interface/NotifyOwnerChange","game/trait/interface/NotifyAllianceChange","util/typeGuard","game/trait/interface/NotifySpawn","game/trait/interface/NotifyUnspawn","game/trait/RadarTrait","game/rules/general/RadarRules","engine/type/ObjectType","game/trait/interface/NotifyPower","game/trait/interface/NotifyElevationChange"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e}],execute:function(){p=class{constructor(e,t){this.map=e,this.alliances=t,this.shroudByPlayer=new Map,this.revealedToAll=new Set,this.gapGenerators=new Set,this.handleTileOccupationUpdate=({object:e,type:t})=>{if("removed"!==t&&e.isTechno()){var i,r=e.owner;for(i of[r,...this.alliances.getAllies(r)])this.shroudByPlayer.get(i)?.revealFrom(e)}}}getPlayerShroud(e){return this.shroudByPlayer.get(e)}init(e){e.map.tileOccupation.onChange.subscribe(this.handleTileOccupationUpdate);let t=(new i.MapShroud).fromTiles(this.map.tiles);for(var r of e.getCombatants()){let i=t.clone();this.shroudByPlayer.set(r,i),this.revealObjects(i,r,e),i.update()}}[g.NotifyElevationChange.onElevationChange](e,t,i){if(Math.floor(e.tileElevation)!==Math.floor(i)){var r,s=e.owner;for(r of[s,...this.alliances.getAllies(s)])this.shroudByPlayer.get(r)?.revealFrom(e)}}[r.NotifyTick.onTick](e){for(var[t,i]of this.shroudByPlayer)t.defeated&&!t.isObserver?this.shroudByPlayer.delete(t):i.update()}[s.NotifyOwnerChange.onChange](e,t,i){if(e.isBuilding()&&e.rules.spySat&&(this.revealMap(e.owner,i),t.getOwnedObjectsByType(u.ObjectType.Building).find((e=>e.rules.spySat))||this.resetShroud(t,i)),e.isSpawned)for(var r of[e.owner,...i.alliances.getAllies(e.owner)])this.shroudByPlayer.get(r)?.revealFrom(e)}[n.NotifyAllianceChange.onChange](e,t,i){if(t){let t=this.getPlayerShroud(e.players.first);var r,s,n=i.alliances.getAllies(e.players.first).map((e=>this.getPlayerShroud(e))).filter(a.isNotNullOrUndefined);for(r of n)t.merge(r);for(s of(t.invalidateFull(),n))s.copy(t),s.invalidateFull()}}[o.NotifySpawn.onSpawn](e,t){if(e.isBuilding()){if(e.rules.spySat&&this.revealMap(e.owner,t),e.rules.revealToAll)for(var i of(this.revealedToAll.add(e),t.getCombatants()))i===e.owner||t.alliances.areAllied(e.owner,i)||(this.shroudByPlayer.get(i)?.revealObject(e),t.traits.get(c.RadarTrait).addEventForPlayer(h.RadarEventType.EnemyObjectSensed,i,e.centerTile,t));e.gapGeneratorTrait&&this.gapGenerators.add(e)}}[l.NotifyUnspawn.onUnspawn](e,t){e.isBuilding()&&(e.rules.spySat&&(e.owner.getOwnedObjectsByType(u.ObjectType.Building).find((e=>e.rules.spySat))||this.resetShroud(e.owner,t)),e.rules.revealToAll&&this.revealedToAll.delete(e),e.gapGeneratorTrait&&this.gapGenerators.delete(e))}[d.NotifyPower.onPowerLow](e,t){this.updateGaps(t,e)}[d.NotifyPower.onPowerRestore](e,t){this.updateGaps(t,e)}[d.NotifyPower.onPowerChange](e,t){}revealMap(e,t){this.shroudByPlayer.get(e)?.revealAll(),this.markOwnGapTiles(t,e),this.updateGaps(t)}resetShroud(e,t){let i=this.shroudByPlayer.get(e);i&&(i.reset(),this.markOwnGapTiles(t,e),this.revealObjects(i,e,t))}revealObjects(e,t,i){var r;for(r of[...t.getOwnedObjects(),...i.alliances.getAllies(t).map((e=>e.getOwnedObjects())).flat()])e.revealFrom(r);this.revealedToAll.forEach((t=>e.revealObject(t)))}updateGaps(e,t){for(var i of this.gapGenerators)t&&i.owner!==t||i.gapGeneratorTrait.update(i,e)}markOwnGapTiles(e,t){for(var r of this.gapGenerators)r.owner!==t&&!e.alliances.areAllied(r.owner,t)||this.getPlayerShroud(t)?.toggleFlagsAround(r.tile,r.gapGeneratorTrait.radiusTiles,i.ShroudFlag.Darken,!0)}dispose(){this.map.tileOccupation.onChange.unsubscribe(this.handleTileOccupationUpdate)}},e("MapShroudTrait",p)}}})),System.register("game/event/ObjectUnspawnEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("ObjectUnspawnEvent",class{constructor(e){this.gameObject=e,this.type=i.EventType.ObjectUnspawn}})}}})),System.register("game/event/ObjectSpawnEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("ObjectSpawnEvent",class{constructor(e){this.gameObject=e,this.type=i.EventType.ObjectSpawn}})}}})),System.register("game/trait/MapRadiationTrait",["game/gameobject/infantry/StanceType","game/gameobject/unit/RangeHelper","game/map/tileFinder/RadialTileFinder","game/Warhead","util/event","util/math","game/trait/interface/NotifyTick"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e}],execute:function(){c=class{constructor(e){this.map=e,this.radSites=new Map,this.radLevelByTile=new Map,this._onChange=new a.EventDispatcher}get onChange(){return this._onChange.asEvent()}getRadLevel(e){return this.radLevelByTile.get(e)}[l.NotifyTick.onTick](e){var t;this.radLevelByTile.size&&(t=e.rules.radiation,void 0===this.nextDamage?this.nextDamage=Math.max(0,t.radApplicationDelay-1):this.nextDamage<=0?(this.applyDamage(e),this.nextDamage=Math.max(0,t.radApplicationDelay)):this.nextDamage--,void 0===this.nextDecay?this.nextDecay=Math.max(0,t.radLevelDelay-1):this.nextDecay<=0?(this.applyDecay(Math.ceil(t.radLevelDelay/t.radDurationMultiple)),this.radLevelByTile.size?this.nextDecay=Math.max(0,t.radLevelDelay):this.nextDecay=void 0):this.nextDecay--)}applyDamage(e){let t=e.rules.radiation,r=new n.Warhead(e.rules.getWarhead(t.radSiteWarhead));this.radLevelByTile.forEach(((s,n)=>{var a,o,l=Math.min(t.radLevelMax,s)*t.radLevelFactor;for(a of e.map.getGroundObjectsOnTile(n).filter((e=>e.isUnit()&&!(e.isInfantry()&&e.stance===i.StanceType.Paradrop&&1{var s=t-e;s<=0?this.radSites.delete(r):(this.radSites.set(r,{radLevel:s,radius:i}),this.setRadLevelAround(r,i,s))})),this._onChange.dispatch(this,t)}createRadSite(e,t,i){var r;(t-=this.radSites.get(e)?.radLevel??0)<=0||(this.radSites.set(e,{radLevel:(this.radSites.get(e)?.radLevel??0)+t,radius:i}),(r=this.setRadLevelAround(e,i,t)).size&&this._onChange.dispatch(this,r))}setRadLevelAround(e,t,i){let n=new r.RangeHelper(this.map.tileOccupation),a=new s.RadialTileFinder(this.map.tiles,this.map.mapBounds,e,{width:1,height:1},0,t,(e=>!!e),!1);var l;let c=new Set;for(;l=a.getNextTile();){var h=n.tileDistance(e,l);h<=t&&(h=Math.ceil(o.lerp(i,0*i,h/t)),this.radLevelByTile.set(l,Math.min(1e3,(this.radLevelByTile.get(l)??0)+h)),c.add(l))}return c}getRadSiteLevel(e){return this.radSites.get(e)?.radLevel}},e("MapRadiationTrait",c)}}})),System.register("util/Serializable",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("game/action/ActionType",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.NoAction=0]="NoAction",t[t.DropPlayer=1]="DropPlayer",t[t.ObserveGame=2]="ObserveGame",t[t.ResignGame=3]="ResignGame",t[t.DebugCommand=4]="DebugCommand",t[t.PlaceBuilding=5]="PlaceBuilding",t[t.SellBuilding=6]="SellBuilding",t[t.ToggleRepair=7]="ToggleRepair",t[t.SelectUnits=8]="SelectUnits",t[t.OrderUnits=9]="OrderUnits",t[t.UpdateQueue=10]="UpdateQueue",t[t.ToggleAlliance=11]="ToggleAlliance",t[t.ActivateSuperWeapon=12]="ActivateSuperWeapon",t[t.PingLocation=13]="PingLocation",e("ActionType",i)}}})),System.register("game/action/Action",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("Action",class{constructor(e){this.actionType=e}unserialize(e){}serialize(){return new Uint8Array}print(){return""}})}}})),System.register("game/action/ActionFactory",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("ActionFactory",class{constructor(){this.factories=new Map}registerFactory(e,t){this.factories.set(e,t)}create(e){let t=this.factories.get(e);if(!t)throw new Error("No factory registered for action type "+e);return t.create()}})}}})),System.register("game/action/ActionQueue",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("ActionQueue",class{constructor(){this.actions=[]}push(...e){this.actions.push(...e)}getLast(){return this.actions[this.actions.length-1]}dequeueAll(){var e=[...this.actions];return this.actions.length=0,e}dequeueLast(){return this.actions.pop()}clear(){this.actions.length=0}})}}})),System.register("game/trait/interface/NotifyPlaceBuilding",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){(i=i||{}).onPlace=Symbol(),e("NotifyPlaceBuilding",i)}}})),System.register("game/action/PlaceBuildingAction",["game/action/Action","data/DataStream","game/event/BuildingPlaceEvent","game/player/production/ProductionQueue","game/rules/TechnoRules","game/gameobject/trait/FactoryTrait","game/action/ActionType","game/event/BuildingFailedPlaceEvent","game/trait/interface/NotifyPlaceBuilding","engine/type/ObjectType"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e}],execute:function(){d=class extends i.Action{constructor(e){super(l.ActionType.PlaceBuilding),this.game=e}unserialize(e){let t=new r.DataStream(e);this.buildingRules=this.game.rules.getTechnoByInternalId(t.readUint32(),u.ObjectType.Building),this.tile={x:t.readUint16(),y:t.readUint16()}}serialize(){let e=new r.DataStream(8);return e.writeUint32(this.buildingRules.index),e.writeUint16(this.tile.x),e.writeUint16(this.tile.y),e.toUint8Array()}print(){return`Place building ${this.buildingRules.name} at tile (${this.tile.x}, ${this.tile.y})`}process(){var e=this.game.map.tiles.getByMapCoords(this.tile.x,this.tile.y);if(e){var t=this.player;const i=this.tryPlaceBuilding(t,e);i?(this.game.traits.filter(h.NotifyPlaceBuilding).forEach((e=>{e[h.NotifyPlaceBuilding.onPlace](i,this.game)})),this.game.events.dispatch(new s.BuildingPlaceEvent(i))):this.game.events.dispatch(new c.BuildingFailedPlaceEvent(this.buildingRules.name,t,e))}else console.warn(`Tile ${this.tile.x},${this.tile.y} doesn't exist`)}tryPlaceBuilding(e,t){var i=this.buildingRules;if(e.production){let s=e.production.getQueueForObject(i);if(s.status===n.QueueStatus.Ready&&s.getFirst().rules===i){let n=this.game.getConstructionWorker(e);if(e.production.isAvailableForProduction(i)&&n.canPlaceAt(i.name,t,{normalizedTile:!0})){var r=n.placeAt(i.name,t,!0);e.addUnitsBuilt(u.ObjectType.Building,1),s.shift(i,1);let l=e.production.getPrimaryFactory(a.FactoryType.BuildingType);return l&&(l.factoryTrait.status=o.FactoryStatus.Delivering),r[0]}}}}},e("PlaceBuildingAction",d)}}})),System.register("game/action/SellBuildingAction",["game/action/Action","data/DataStream","game/gameobject/Building","game/action/ActionType"],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e}],execute:function(){a=class extends i.Action{constructor(e){super(n.ActionType.SellBuilding),this.game=e}unserialize(e){this.buildingId=new r.DataStream(e).readUint32()}serialize(){return new r.DataStream(4).writeUint32(this.buildingId).toUint8Array()}print(){return"Sell building "+this.buildingId}process(){var e=this.player;if(this.game.getWorld().hasObjectId(this.buildingId)){let t=this.game.getObjectById(this.buildingId);t.isBuilding()&&(e!==t.owner||t.isDestroyed||t.buildStatus!==s.BuildStatus.Ready||t.warpedOutTrait.isActive()||this.game.sellTrait.sell(t))}}},e("SellBuildingAction",a)}}})),System.register("game/event/BuildingRepairStartEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("BuildingRepairStartEvent",class{constructor(e){this.target=e,this.type=i.EventType.BuildingRepairStart}})}}})),System.register("game/action/ToggleRepairAction",["game/action/Action","data/DataStream","game/gameobject/trait/AutoRepairTrait","game/event/BuildingRepairStartEvent","game/action/ActionType"],(function(e,t){"use strict";var i,r,s,n,a,o;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){o=class extends i.Action{constructor(e){super(a.ActionType.ToggleRepair),this.game=e}unserialize(e){this.buildingId=new r.DataStream(e).readUint32()}serialize(){return new r.DataStream(4).writeUint32(this.buildingId).toUint8Array()}print(){return"Toggle repair "+this.buildingId}process(){var e=this.player;if(this.game.getWorld().hasObjectId(this.buildingId)){let t=this.game.getObjectById(this.buildingId);if(t.isBuilding()&&e===t.owner&&!t.isDestroyed&&t.rules.repairable&&t.rules.clickRepairable&&100!==t.healthTrait.health){let e=t.traits.get(s.AutoRepairTrait);e.setDisabled(!e.isDisabled()),e.isDisabled()||this.game.events.dispatch(new n.BuildingRepairStartEvent(t))}}}},e("ToggleRepairAction",o)}}})),System.register("game/action/ToggleAllianceAction",["game/action/Action","game/Alliances","game/event/AllianceChangeEvent","game/trait/interface/NotifyAllianceChange","game/action/ActionType"],(function(e,t){"use strict";var i,r,s,n,a,o;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){o=class extends i.Action{constructor(e){super(a.ActionType.ToggleAlliance),this.game=e}unserialize(e){this.toPlayer=this.game.getPlayer(e[0]),this.toggle=Boolean(e[1])}serialize(){return new Uint8Array([this.game.getPlayerNumber(this.toPlayer),this.toggle?1:0])}print(){return`Toggle alliance ${this.toggle?"on":"off"} with `+this.toPlayer.name}process(){if((a=this.game.rules.mpDialogSettings).alliesAllowed&&a.allyChangeAllowed){var e,t=this.player,i=this.toPlayer,a=this.toggle;let o=t,l=i,c=this.game.alliances;if(!t.defeated&&c.canRequestAlliance(l)){let i=c.findByPlayers(o,l);i?i.status===r.AllianceStatus.Formed?a||(c.breakAlliance(o,l),this.game.onAllianceChange(i,o,!1)):i.status===r.AllianceStatus.Requested&&(i.players.first===l?a&&c.canFormAlliance(o,l)&&(c.acceptRequest(l,o),this.game.onAllianceChange(i,o,!0),1!==(t=this.game.getCombatants().filter((e=>e!==o&&!c.areAllied(o,e)))).length||(e=c.findByPlayers(t[0],o))&&c.cancelRequest(e.players.first,e.players.second),1!==(e=this.game.getCombatants().filter((e=>e!==l&&!c.areAllied(l,e)))).length||(e=c.findByPlayers(e[0],l))&&c.cancelRequest(e.players.first,e.players.second)):a||(c.cancelRequest(o,l),this.game.events.dispatch(new s.AllianceChangeEvent(i,s.AllianceEventType.Broken,o)),this.game.traits.filter(n.NotifyAllianceChange).forEach((e=>{e[n.NotifyAllianceChange.onChange](i,!1,this.game)})))):a&&c.canFormAlliance(o,l)&&(a=c.request(o,l))&&this.game.events.dispatch(new s.AllianceChangeEvent(a,s.AllianceEventType.Requested,o))}}}},e("ToggleAllianceAction",o)}}})),System.register("game/action/UpdateQueueAction",["game/action/Action","data/DataStream","game/player/production/ProductionQueue","engine/type/ObjectType","game/action/ActionType"],(function(e,t){"use strict";var i,r,s,n,a,o,l;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){var t;(t=o=o||{})[t.Add=0]="Add",t[t.Cancel=1]="Cancel",t[t.Pause=2]="Pause",t[t.Resume=3]="Resume",e("UpdateType",o),l=class extends i.Action{constructor(e){super(a.ActionType.UpdateQueue),this.game=e}unserialize(e){let t=new r.DataStream(e);var i,s;this.queueType=t.readUint8(),this.updateType=t.readUint8(),this.updateType!==o.Add&&this.updateType!==o.Cancel||(i=t.readUint32(),s=t.readUint8(),this.item=this.game.rules.getTechnoByInternalId(i,s),this.quantity=t.readUint16())}serialize(){let e=new r.DataStream(9);if(e.dynamicSize=!1,e.writeUint8(this.queueType),e.writeUint8(this.updateType),this.updateType===o.Add||this.updateType===o.Cancel){if(void 0===this.quantity)throw new Error("Missing quantity");if(65535e+t.quantity),0),a=e.getOwnedObjectsByType(t.type,!0).filter((e=>e.name===t.name)).length,(a=Number.isFinite(t.buildLimit)?Math.max(0,t.buildLimit-(a+r)):Number.POSITIVE_INFINITY)&&e.production.isAvailableForProduction(t)&&(l=Math.min(i.maxSize-i.currentSize,i.maxItemQuantity-r,a),0<(c=Math.min(this.quantity,l))&&i.push(t,c,t.cost)))}else if(this.updateType===o.Cancel){if([s.QueueStatus.Ready,s.QueueStatus.OnHold,s.QueueStatus.Active].includes(i.status)){let r=i.find(t);var l,c;r.length&&(l=r.reduce(((e,t)=>e+t.quantity),0),0<(c=Math.min(l,this.quantity))&&(i.pop(t,c),c===l&&(e.credits+=r[0].creditsSpent)))}}else this.updateType===o.Pause&&i.status===s.QueueStatus.Active&&(i.status=s.QueueStatus.OnHold)}},e("UpdateQueueAction",l)}}})),System.register("game/gameobject/selection/UnitSelectionLite",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("UnitSelectionLite",class{constructor(e){this.player=e,this.selectedUnits=new Set}update(e){var t,i=[...e].reverse().find((e=>e.owner!==this.player));for(t of(i&&(e=[i]),this.selectedUnits.clear(),e))t.rules.selectable&&this.selectedUnits.add(t)}getSelectedUnits(){return[...this.selectedUnits].filter((e=>!e.isDestroyed&&!e.isCrashing))}isSelected(e){return this.selectedUnits.has(e)}})}}})),System.register("game/action/OrderActionContext",["game/gameobject/selection/UnitSelectionLite"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("OrderActionContext",class{constructor(){this.unitSelectionByPlayer=new Map}getOrCreateSelection(e){let t=this.unitSelectionByPlayer.get(e);return t||(t=new i.UnitSelectionLite(e),this.unitSelectionByPlayer.set(e,t)),t}})}}})),System.register("game/event/ObjectMorphEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("ObjectMorphEvent",class{constructor(e,t){this.from=e,this.to=t,this.type=i.EventType.ObjectMorph}})}}})),System.register("game/gameobject/task/morph/MorphIntoTask",["game/gameobject/task/system/Task","engine/type/ObjectType","game/gameobject/Building","game/gameobject/task/move/MoveTask","game/event/ObjectMorphEvent","game/gameobject/task/TurnTask","game/gameobject/task/morph/PackBuildingTask"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e}],execute:function(){c=class extends i.Task{constructor(e){super(),this.game=e}onStart(e){if(!this.morphInto)throw new Error("morphInto not set");e.isBuilding()&&e.buildStatus!==s.BuildStatus.BuildDown&&this.morphInto.type!==r.ObjectType.Building&&this.children.push(new l.PackBuildingTask),e.isVehicle()&&this.morphInto.type===r.ObjectType.Building&&this.children.push(new o.TurnTask(180))}onTick(e){if(!this.morphInto)throw new Error("morphInto not set");let t=this.game.getUnitSelection();var i=t.isSelected(e),s=t.getOrCreateSelectionModel(e).getControlGroupNumber();let o;if(this.morphInto.type===r.ObjectType.Building){if(e.isVehicle()&&e.parasiteableTrait?.isInfested())return!0;var l=e.tile;let t=this.game.getConstructionWorker(e.owner);if(!t.canPlaceAt(this.morphInto.name,l,{ignoreAdjacent:!0,ignoreObjects:[e]}))return!0;this.game.unspawnObject(e),e.dispose(),[o]=t.placeAt(this.morphInto.name,l),o.healthTrait.health=e.healthTrait.health}else{let t=e.unitOrderTrait.getTasks().filter((e=>e instanceof n.MoveTask));this.game.unspawnObject(e),e.dispose(),o=this.game.createUnitForPlayer(this.morphInto,e.owner),o.direction=180,o.healthTrait.health=e.healthTrait.health,l=e.art.foundationCenter,this.game.spawnObject(o,this.game.map.tiles.getByMapCoords(e.tile.rx+l.x,e.tile.ry+l.y)),t.forEach((e=>o.unitOrderTrait.addTask(e)))}return o.purchaseValue=e.purchaseValue,e.replacedBy=o,i&&t.addToSelection(o),void 0!==s&&t.addUnitsToGroup(s,[o],!1),this.game.events.dispatch(new a.ObjectMorphEvent(e,o)),!0}},e("MorphIntoTask",c)}}})),System.register("game/gameobject/task/morph/DeployIntoTask",["game/gameobject/task/morph/MorphIntoTask","engine/type/ObjectType"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends i.MorphIntoTask{onStart(e){var t=e.rules.deploysInto;if(!t)throw new Error(`Object type "${e.name}" doesn't deploy into anything`);this.morphInto=this.game.rules.getObject(t,r.ObjectType.Building),super.onStart(e)}onTick(e){return!!this.isCancelling()||super.onTick(e)}},e("DeployIntoTask",s)}}})),System.register("game/event/UnitDeployUndeployEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("UnitDeployUndeployEvent",class{constructor(e,t){this.unit=e,this.deployType=t,this.type=i.EventType.UnitDeployUndeploy}})}}})),System.register("game/event/PrimaryFactoryChangeEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("PrimaryFactoryChangeEvent",class{constructor(e){this.target=e,this.type=i.EventType.PrimaryFactoryChange}})}}})),System.register("game/gameobject/task/EvacuateTransportTask",["game/event/LeaveTransportEvent","game/gameobject/unit/FacingUtil","game/gameobject/unit/MovePositionHelper","game/gameobject/task/move/MoveTask","game/gameobject/task/ScatterTask","game/gameobject/task/system/Task","game/gameobject/task/TurnTask","game/gameobject/task/system/WaitMinutesTask","game/gameobject/unit/ZoneType","game/gameobject/task/system/CallbackTask"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e}],execute:function(){var t;(t=d=d||{})[t.None=0]="None",t[t.OnlyPassengers=1]="OnlyPassengers",t[t.All=2]="All",g=class extends o.Task{constructor(e,t){super(),this.game=e,this.soft=t,this.evacState=d.None,this.evacTries=0,this.turnPerformed=!1,this.preventLanding=!1}forceEvac(){this.evacState=d.All}onStart(e){if(!e.transportTrait)throw new Error(`Object "${e.name}" is not a valid transport`);var t=e.transportTrait;0e.zone!==h.ZoneType.Air))),!1;let t=e.transportTrait.units;if(!t.length||e.rules.gunner&&1===t.length&&this.evacState!==d.All)return!0;var i=t[t.length-1],r=this.findValidEvacTarget(e,i);if(r&&!this.turnPerformed){this.turnPerformed=!0;var s=(r.dir+180)%360;if(e.direction!==s)return this.children.push(new l.TurnTask(s)),!1}return this.evacuateUnit(i,e,r)?(t.pop(),this.children.push(new c.WaitMinutesTask(1/60)),!1):!(++this.evacTries<=3&&(this.children.push(new c.WaitMinutesTask(.05)),1))}evacuateUnit(e,t,r){if(!r)return!this.soft&&(e.position.tile=t.tile,e.position.tileElevation=t.tileElevation,e.onBridge=t.onBridge,e.zone=t.zone,this.game.destroyObject(e,{player:e.owner}),!0);var{spawnNode:s,moveNode:o}=r;return e.position.tileElevation=s.onBridge?.tileElevation??0,e.onBridge=!!s.onBridge,e.zone=this.game.map.getTileZone(s.tile,!s.onBridge),this.game.unlimboObject(e,s.tile),e.unitOrderTrait.unmarkNextQueuedOrder(),o?e.unitOrderTrait.addTask(new n.MoveTask(this.game,o.tile,!!o.onBridge)):e.unitOrderTrait.addTask(new a.ScatterTask(this.game)),this.game.events.dispatch(new i.LeaveTransportEvent(t)),!0}findValidEvacTarget(e,t){let i=this.game.map,n=new s.MovePositionHelper(i);var a,o,l,c,h,u=e.onBridge?i.tileOccupation.getBridgeOnTile(e.tile):void 0,d=(e.direction+180)%360;let g;for(let s=0;s<=180;s+=45)for(a of s&&s<180?[d+s,d-s]:[d]){var p=r.FacingUtil.toMapCoords(a);let s,d=e.tile,v=u;for(let r=1;r<=2;r++){if(2===r){if(!s)break;d=s.tile,v=s.onBridge}var m,f=e.tile.rx+Math.sign(p.x)*r,y=e.tile.ry+Math.sign(p.y)*r,T=i.tiles.getByMapCoords(f,y);if(!T||!i.mapBounds.isWithinBounds(T))break;let u=[i.tileOccupation.getBridgeOnTile(T)];for(m of(u[0]&&u.push(void 0),u))if(o=T,l=m,c=v,h=d,0this.isAllowed()?s.PointerType.Deploy:s.PointerType.NoDeploy,this.targetOptional=!t,this.singleSelectionRequired=t}isValid(){if(this.targeted&&(!this.target.obj||this.target.obj!==this.sourceObject))return!1;let e=this.sourceObject;return!!(e.isInfantry()&&e.deployerTrait&&![a.StanceType.Cheer].includes(e.stance)||e.isVehicle()&&e.deployerTrait||e.isVehicle()&&e.rules.deploysInto||e.isVehicle()&&e.transportTrait||e.isBuilding()&&e.rules.factory&&!e.owner.production?.isPrimaryFactory(e)||e.isBuilding()&&e.garrisonTrait?.units.length)}isAllowed(){let e=this.sourceObject;if(e.isVehicle()&&e.transportTrait)return!!(e.transportTrait.units.length&&0{e.deployerTrait.toggleDeployed(),this.game.events.dispatch(new l.UnitDeployUndeployEvent(e,e.deployerTrait.isDeployed()?"undeploy":"deploy"))}))]:e.isBuilding()&&e.garrisonTrait?.units.length?[new o.CallbackTask((()=>{e.garrisonTrait.evacuate(this.game,!0)}))]:void 0}onAdd(e,t){let i=this.sourceObject;if(i.isBuilding()&&i.rules.factory)return i.owner.production.setPrimaryFactory(i),this.game.events.dispatch(new c.PrimaryFactoryChangeEvent(i)),!1;if(i.isVehicle()&&i.transportTrait&&!t&&this.isValid()&&this.isAllowed()){let t=e.find((e=>e.constructor===h.EvacuateTransportTask&&!e.isCancelling()));if(t)return t.forceEvac(),!1}return!0}},e("DeployOrder",d)}}})),System.register("game/gameobject/task/morph/UndeployIntoTask",["game/gameobject/task/morph/MorphIntoTask","engine/type/ObjectType"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends i.MorphIntoTask{onStart(e){var t=e.rules.undeploysInto;if(!t)throw new Error(`Object type "${e.name}" doesn't undeploy into anything`);this.morphInto=this.game.rules.getObject(t,r.ObjectType.Vehicle),super.onStart(e)}},e("UndeployIntoTask",s)}}})),System.register("game/order/OrderFeedbackType",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.None=0]="None",t[t.Move=1]="Move",t[t.Attack=2]="Attack",t[t.Enter=3]="Enter",t[t.Capture=4]="Capture",t[t.SpecialAttack=5]="SpecialAttack",e("OrderFeedbackType",i)}}})),System.register("game/event/RallyPointChangeEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("RallyPointChangeEvent",class{constructor(e){this.target=e,this.type=i.EventType.RallyPointChange}})}}})),System.register("game/gameobject/task/move/MoveToBlockTask",["game/gameobject/trait/MoveTrait","game/gameobject/task/system/Task","game/gameobject/task/move/MoveTask"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=class extends r.Task{constructor(e,t){super(),this.game=e,this.target=t,this.preventOpportunityFire=!1,this.useChildTargetLines=!0,this.attackPerformed=!1}onStart(e){this.children.push(new s.MoveTask(this.game,this.target.centerTile,!1,{closeEnoughTiles:1,pathFinderIgnoredBlockers:[this.target],stopOnBlocker:this.target}))}onTick(e){if(this.attackPerformed||this.isCancelling()||!e.attackTrait||e.attackTrait.isDisabled())return!0;if(e.moveTrait.lastMoveResult!==i.MoveResult.CloseEnough)return!0;var t=e.attackTrait.selectWeaponVersus(e,this.target,this.game,!0);return!(t&&(this.children.push(e.attackTrait.createAttackTask(this.game,this.target,this.target.tile,t,{force:!0})),this.attackPerformed=!0))}},e("MoveToBlockTask",n)}}})),System.register("game/order/MoveOrder",["game/order/Order","game/order/OrderType","gui/PointerType","game/gameobject/task/morph/UndeployIntoTask","game/gameobject/task/move/MoveTask","game/order/OrderFeedbackType","game/event/RallyPointChangeEvent","game/type/MovementZone","game/type/SpeedType","game/gameobject/task/AttackTask","game/gameobject/Building","game/gameobject/task/WaitForBuildUpTask","game/gameobject/task/move/MoveToBlockTask","game/type/LandType"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p,m,f;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e},function(e){m=e}],execute:function(){f=class extends i.Order{constructor(e,t,i,s=!1){super(s?r.OrderType.ForceMove:r.OrderType.Move),this.game=e,this.map=t,this.unitSelection=i,this.forceMove=s,this.targetOptional=!1,this.feedbackType=o.OrderFeedbackType.Move}getPointerType(e){let t=this.isAllowed();var i,r,n,a;return!t||this.forceMove||this.sourceObject.isBuilding()||this.game.mapShroudTrait.getPlayerShroud(this.sourceObject.owner)?.isShrouded(this.target.tile,this.target.obj?.tileElevation)||(i=!!this.target.getBridge(),r=this.sourceObject.rules.speedType,n=this.sourceObject.rules.movementZone===c.MovementZone.Fly,a=this.map.getObjectsOnTile(this.target.tile).some((e=>(e.isInfantry()||e.isVehicle())&&e.disguiseTrait?.hasTerrainDisguise())),t=n?this.sourceObject.rules.airportBound||this.target.tile.landType===m.LandType.Cliff||0e instanceof g.WaitForBuildUpTask))?.setCancellable(!0),!0;if(!i&&this.sourceObject.isBuilding()&&this.sourceObject.rallyTrait?.getRallyPoint())return this.sourceObject.rallyTrait.changeRallyPoint(this.target.tile,this.sourceObject,this.game),this.game.events.dispatch(new l.RallyPointChangeEvent(this.sourceObject)),!1;if(!this.isEnemyBuildingBlock()&&!t&&this.isValid()&&this.isAllowed()){this.sourceObject.attackTrait?.cancelOpportunityFire();let t=e.find((e=>e.constructor===a.MoveTask&&!e.isCancelling()));if(t)return t.updateTarget(this.target.tile,!!this.target.getBridge()),t.children.length&&t.children[0]instanceof u.AttackTask&&t.children[0].cancel(),e.splice(e.indexOf(t)+1),this.sourceObject.unitOrderTrait.clearOrders(),!1;if(this.sourceObject.isUnit()&&this.sourceObject.rules.movementZone===c.MovementZone.Fly){let t=e.find((e=>e.constructor===u.AttackTask&&!e.isCancelling()));t&&t.forceCancel(this.sourceObject)&&e.splice(e.indexOf(t))}}return!0}},e("MoveOrder",f)}}})),System.register("game/gameobject/task/move/MoveOutsideTask",["game/gameobject/task/move/MoveTask"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.MoveTask{constructor(e,t){super(e,t.tile,!1,{ignoredBlockers:[t]}),this.target=t,this.cancellable=!1}canStopAtTile(e,t,i){return!this.game.map.tileOccupation.isTileOccupiedBy(t,this.target)&&super.canStopAtTile(e,t,i)}},e("MoveOutsideTask",r)}}})),System.register("game/gameobject/task/move/MoveInsideTask",["game/gameobject/task/move/MoveTask"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class e extends i.MoveTask{constructor(t,i){super(t,e.chooseTargetFoundationTile(i,t),!1,{ignoredBlockers:[i],closeEnoughTiles:0}),this.target=i}static chooseTargetFoundationTile(e,t){if(e.isBuilding()){let i=e.centerTile;return t.map.mapBounds.isWithinBounds(i)||(i=t.map.tileOccupation.calculateTilesForGameObject(e.tile,e).find((e=>t.map.mapBounds.isWithinBounds(e)))??e.tile),i}return e.tile}hasReachedDestination(e){return super.hasReachedDestination(e)||this.canStopAtTile(e,e.tile,e.onBridge)}canStopAtTile(e,t,i){var r=this.game.map.tileOccupation.isTileOccupiedBy(t,this.target);return!(this.isCancelling()&&r||!this.isCancelling()&&!r)}isCloseEnoughToDest(e,t,i){return this.game.map.tileOccupation.isTileOccupiedBy(t,this.target)}},e("MoveInsideTask",r)}}})),System.register("game/event/BuildingGarrisonEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("BuildingGarrisonEvent",class{constructor(e){this.target=e,this.type=i.EventType.BuildingGarrison}})}}})),System.register("game/event/EnterObjectEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("EnterObjectEvent",class{constructor(e,t){this.target=e,this.source=t,this.type=i.EventType.EnterObject}})}}})),System.register("game/gameobject/task/GarrisonBuildingTask",["game/gameobject/task/system/Task","game/gameobject/task/move/MoveOutsideTask","game/gameobject/task/move/MoveInsideTask","game/event/BuildingGarrisonEvent","game/event/EnterObjectEvent"],(function(e,t){"use strict";var i,r,s,n,a,o;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){o=class extends i.Task{constructor(e,t){super(),this.game=e,this.target=t,this.aborted=!1,this.movePerformed=!1,this.preventOpportunityFire=!1}isAllowed(e){return!this.target.isDestroyed&&this.target.garrisonTrait?.canBeOccupied()&&this.target.garrisonTrait.units.length0{[h.MoveResult.Success,h.MoveResult.CloseEnough].includes(e.moveTrait.lastMoveResult)||this.cancel()}))),this.state=d.WaitForTurn,this.queueingTile=t,!1)}if(this.state===d.WaitForTurn){if(!this.target.hospitalTrait.unitIsFirstInHealQueue(e))return!1;this.queueingTile=void 0,this.state=d.MoveToTarget}if(this.state===d.MoveToTarget){if(!this.isAllowed(e))return!0;if(!this.game.map.tileOccupation.isTileOccupiedBy(e.tile,this.target))return!(!this.movePerformed&&(this.children.push(new s.MoveInsideTask(this.game,this.target)),this.movePerformed=!0));this.state=d.EnterTarget}return this.state===d.EnterTarget&&(!this.isAllowed(e)||this.isCancelling()?(this.children.push(new r.MoveOutsideTask(this.game,this.target)),this.state=d.ClearTarget,!1):(this.game.limboObject(e,{selected:!1,controlGroup:this.game.getUnitSelection().getOrCreateSelectionModel(e).getControlGroupNumber()}),this.target.hospitalTrait.startHealing(e),this.game.events.dispatch(new u.EnterObjectEvent(this.target,e)),!0))}getTargetLinesConfig(e){return{target:this.queueingTile?void 0:this.target,pathNodes:this.queueingTile?[{tile:this.queueingTile,onBridge:void 0}]:[]}}},e("EnterHospitalTask",g)}}})),System.register("game/order/OccupyOrder",["game/order/Order","game/order/OrderType","gui/PointerType","game/gameobject/task/GarrisonBuildingTask","game/gameobject/unit/RangeHelper","game/order/OrderFeedbackType","game/type/MovementZone","game/type/LocomotorType","game/gameobject/task/EnterRecyclerTask","game/gameobject/task/InfiltrateBuildingTask","game/gameobject/task/EnterHospitalTask"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e}],execute:function(){g=class extends i.Order{constructor(e){super(r.OrderType.Occupy),this.game=e,this.targetOptional=!1,this.terminal=!0,this.feedbackType=o.OrderFeedbackType.Capture}getPointerType(e){return e?this.isAllowed()?s.PointerType.OccupyMini:s.PointerType.NoActionMini:this.isAllowed()?s.PointerType.Occupy:s.PointerType.NoOccupy}isValid(){return!!(this.target.obj?.isSpawned&&this.target.obj?.isBuilding()&&this.sourceObject.isInfantry())&&(!!this.isInfantryRecycle(this.sourceObject,this.target.obj)||(this.target.obj.isBuilding()&&this.target.obj.hospitalTrait?this.game.areFriendly(this.sourceObject,this.target.obj)&&this.sourceObject.isInfantry():this.target.obj.garrisonTrait?this.target.obj.garrisonTrait.canBeOccupied()&&this.sourceObject.rules.occupier&&!(this.target.obj.garrisonTrait.units.length&&this.target.obj.garrisonTrait.units[0].owner!==this.sourceObject.owner)&&!this.sourceObject.mindControllableTrait?.isActive()&&!this.sourceObject.mindControllerTrait?.isActive():!(!this.target.obj.rules.spyable||!this.sourceObject.rules.infiltrate||this.game.areFriendly(this.sourceObject,this.target.obj))))}isInfantryRecycle(e,t){return t.rules.cloning&&e.owner===t.owner}isAllowed(){var e=this.target.obj,t=this.sourceObject;return this.isInfantryRecycle(t,e)?t.rules.movementZone!==l.MovementZone.Fly&&t.rules.locomotor!==c.LocomotorType.Chrono&&0e instanceof n.GarrisonBuildingTask||e instanceof u.InfiltrateBuildingTask));if(this.isValid()&&this.isAllowed()&&t&&!t.isCancelling()&&t.target===this.target.obj&&new a.RangeHelper(this.game.map.tileOccupation).isInTileRange(this.sourceObject,this.target.obj,0,Math.SQRT2))return!1}return!0}},e("OccupyOrder",g)}}})),System.register("game/gameobject/task/PlantC4Task",["game/gameobject/task/system/Task","game/gameobject/task/move/MoveOutsideTask","game/gameobject/task/move/MoveInsideTask","game/GameSpeed","game/event/EnterObjectEvent"],(function(e,t){"use strict";var i,r,s,n,a,o;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){o=class extends i.Task{constructor(e,t){super(),this.game=e,this.target=t,this.aborted=!1,this.movePerformed=!1,this.preventOpportunityFire=!1}isAllowed(e){return!this.target.isDestroyed&&!this.target.invulnerableTrait.isActive()}onTick(e){if(this.isCancelling()&&!this.movePerformed||this.aborted||e.moveTrait.isDisabled())return!0;if(!this.game.map.tileOccupation.isTileOccupiedBy(e.tile,this.target))return!(!this.movePerformed&&(this.children.push(new s.MoveInsideTask(this.game,this.target)),this.movePerformed=!0,this.preventOpportunityFire=!0));if(!this.isAllowed(e)||this.isCancelling())return this.children.push(new r.MoveOutsideTask(this.game,this.target)),!(this.aborted=!0);var t=Math.floor(60*this.game.rules.combatDamage.c4Delay*n.GameSpeed.BASE_TICKS_PER_SECOND);return this.target.c4ChargeTrait.setCharge(t,{player:e.owner,obj:e}),this.game.events.dispatch(new a.EnterObjectEvent(this.target,e)),this.children.push(new r.MoveOutsideTask(this.game,this.target)),!(this.aborted=!0)}getTargetLinesConfig(e){return{target:this.target,pathNodes:[],isAttack:!0}}},e("PlantC4Task",o)}}})),System.register("game/order/AttackOrder",["game/order/Order","game/order/OrderType","gui/PointerType","game/gameobject/task/AttackTask","game/gameobject/unit/RangeHelper","game/order/OrderFeedbackType","game/gameobject/unit/LosHelper","game/type/ArmorType","game/gameobject/task/PlantC4Task","game/gameobject/unit/ZoneType","game/gameobject/task/move/MoveTask","game/type/MovementZone","game/type/LocomotorType"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p,m;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e}],execute:function(){m=class extends i.Order{constructor(e,{forceAttack:t,noIvanBomb:i}={}){super(t?r.OrderType.ForceAttack:r.OrderType.Attack),this.game=e,this.isC4=!1,this.forceAttack=!!t,this.ivanBombAllowed=!i||!!t,this.targetOptional=!1,this.feedbackType=o.OrderFeedbackType.None,this.rangeHelper=new a.RangeHelper(this.game.map.tileOccupation),this.losHelper=new l.LosHelper(this.game.map.tiles,e.map.tileOccupation)}getPointerType(e,t){if(!this.isAllowed())return e?s.PointerType.NoActionMini:s.PointerType.NoAction;if(this.isC4)return s.PointerType.C4;var i=this.sourceObject.attackTrait?.selectWeaponVersus(this.sourceObject,this.target,this.game,this.forceAttack);return i?.rules.sabotageCursor?s.PointerType.C4:this.ivanBombAllowed&&this.sourceObject.rules.ivan&&i?.warhead.rules.ivanBomb?s.PointerType.Dynamite:i?.warhead.rules.bombDisarm?s.PointerType.DefuseBomb:i&&i.rules.damage<0?s.PointerType.RepairMove:(i=t.every((e=>{if(!e.attackTrait)return!0;var t=e.attackTrait.selectWeaponVersus(e,this.target,this.game,this.forceAttack);return!t||this.rangeHelper.isInWeaponRange(e,this.target.obj||this.target.tile,t,this.game.rules)&&this.losHelper.hasLineOfSight(e,this.target.obj||this.target.tile,t)})),e?s.PointerType.AttackMini:i?s.PointerType.AttackRange:s.PointerType.AttackNoRange)}isValid(){if(!this.sourceObject.attackTrait)return!1;if(this.forceAttack&&this.game.mapShroudTrait.getPlayerShroud(this.sourceObject.owner)?.isShrouded(this.target.tile,this.target.obj?.tileElevation)&&!this.sourceObject.isBuilding())return!1;let e=this.target.obj;var t=this.game.map.getGroundObjectsOnTile(this.target.tile).find((e=>e.isTerrain()));return this.terminal=!e&&!t,this.sourceObject.c4&&e?.isBuilding()&&e.c4ChargeTrait&&(this.forceAttack||!this.game.areFriendly(e,this.sourceObject)||e.cabHutTrait)?(this.isC4=!0,this.feedbackType=o.OrderFeedbackType.SpecialAttack,!0):(this.isC4=!1,this.feedbackType=o.OrderFeedbackType.Attack,!!this.game.isValidTarget(e)&&(!(!e&&t?.rules.immune)&&(!!(e||this.target.tile!==this.sourceObject.tile||this.sourceObject.isUnit()&&this.sourceObject.zone===u.ZoneType.Air)&&(e!==this.sourceObject&&(!!(t=this.sourceObject.attackTrait.selectWeaponVersus(this.sourceObject,this.target,this.game,this.forceAttack))&&!(!this.ivanBombAllowed&&t.warhead.rules.ivanBomb)&&!(e?.isBuilding()&&e.cabHutTrait&&!t.warhead.rules.ivanBomb&&!t.warhead.rules.bombDisarm)&&!!(this.sourceObject.isUnit()&&this.sourceObject.moveTrait&&!this.sourceObject.moveTrait.isDisabled()||this.rangeHelper.isInWeaponRange(this.sourceObject,e||this.target.tile,t,this.game.rules))&&!(this.sourceObject.airSpawnTrait&&t.rules.spawner&&!this.game.map.isWithinBounds(this.target.tile))&&(!!this.forceAttack||(!e?.isBuilding()||!e.hospitalTrait)&&!(!e||!e.healthTrait)&&!e.isDestroyed&&!e.isCrashing&&(!(!e.isOverlay()||!(t.warhead.rules.wall||t.warhead.rules.wood&&e.rules.armor===c.ArmorType.Wood))||e.isTechno())))))))}isAllowed(){return!this.sourceObject.attackTrait.isDisabled()}process(){if(this.isC4)return[new h.PlantC4Task(this.game,this.target.obj)];var e=this.sourceObject.attackTrait.selectWeaponVersus(this.sourceObject,this.target,this.game,this.forceAttack);return[new n.AttackTask(this.game,this.target,e,{force:this.forceAttack})]}onAdd(e,t){let i=this.sourceObject;if(!t&&i.isUnit()&&this.isValid()&&this.isAllowed())if(i.rules.movementZone===g.MovementZone.Fly){let t=e.find((e=>(e.constructor===d.MoveTask||e.constructor===n.AttackTask)&&!e.isCancelling()));t&&(i.moveTrait.currentWaypoint?.tile===this.target.tile||i.isAircraft()||t.constructor===n.AttackTask)&&t.forceCancel(i)&&e.splice(e.indexOf(t))}else{e.length&&i.isUnit()&&(i.rules.locomotor===p.LocomotorType.Vehicle||i.rules.locomotor===p.LocomotorType.Ship)&&(i.moveTrait.speedPenalty=.5);let t=e.find((e=>e.constructor===n.AttackTask&&!e.isCancelling()));if(t?.getWeapon().warhead.rules.temporal)return t.setForceAttack(this.forceAttack),t.requestTargetUpdate(this.target),!1}return!0}},e("AttackOrder",m)}}})),System.register("game/order/StopOrder",["game/order/Order","game/order/OrderType","gui/PointerType","game/type/LocomotorType","game/gameobject/task/system/CallbackTask"],(function(e,t){"use strict";var i,r,s,n,a,o;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){o=class extends i.Order{constructor(e){super(r.OrderType.Stop),this.game=e,this.getPointerType=()=>s.PointerType.NoAction}isValid(){return this.sourceObject.isTechno()}isAllowed(){return!0}process(){return[new a.CallbackTask((e=>{!e.isUnit()||e.rules.locomotor!==n.LocomotorType.Vehicle&&e.rules.locomotor!==n.LocomotorType.Ship||(e.moveTrait.speedPenalty=0)}))]}onAdd(e,t){let i=this.sourceObject;return t||!e.length||!i.isUnit()||i.rules.locomotor!==n.LocomotorType.Vehicle&&i.rules.locomotor!==n.LocomotorType.Ship||(i.moveTrait.speedPenalty=.5),i.isBuilding()&&i.rallyTrait?.getRallyPoint()&&(i.unitRepairTrait?.resetRallyPoint(i,this.game),i.factoryTrait?.resetRallyPoint(i,this.game)),!0}},e("StopOrder",o)}}})),System.register("game/gameobject/task/CheerTask",["game/gameobject/task/system/Task","game/art/SequenceType","game/gameobject/infantry/StanceType","game/gameobject/task/system/WaitMinutesTask"],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e}],execute:function(){a=class extends i.Task{constructor(){super(),this.executed=!1,this.cancellable=!1}onTick(e){return this.executed?(e.stance=s.StanceType.None,!0):!e.isInfantry()||!e.art.sequences.has(r.SequenceType.Cheer)||e.stance!==s.StanceType.None&&e.stance!==s.StanceType.Guard||(e.stance=s.StanceType.Cheer,this.children.push(new n.WaitMinutesTask(1/60).setCancellable(!1)),!(this.executed=!0))}},e("CheerTask",a)}}})),System.register("game/order/CheerOrder",["game/order/Order","game/order/OrderType","gui/PointerType","game/gameobject/task/CheerTask","game/gameobject/infantry/StanceType"],(function(e,t){"use strict";var i,r,s,n,a,o;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){o=class extends i.Order{constructor(){super(r.OrderType.Cheer),this.getPointerType=()=>s.PointerType.NoAction}isValid(){return this.sourceObject.isInfantry()&&[a.StanceType.None,a.StanceType.Guard].includes(this.sourceObject.stance)}isAllowed(){return!0}process(){return[new n.CheerTask]}},e("CheerOrder",o)}}})),System.register("game/order/DockOrder",["game/order/Order","game/order/OrderType","gui/PointerType","game/gameobject/Building","game/gameobject/task/harvester/ReturnOreTask","game/order/OrderFeedbackType","game/gameobject/task/MoveToDockTask"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e}],execute:function(){c=class extends i.Order{constructor(e){super(r.OrderType.Dock),this.game=e,this.targetOptional=!1,this.feedbackType=o.OrderFeedbackType.Move}getPointerType(e){return e?this.isAllowed()?s.PointerType.OccupyMini:s.PointerType.NoActionMini:this.isAllowed()?s.PointerType.Occupy:s.PointerType.NoOccupy}isValid(){if(!this.target.obj?.isBuilding()||this.target.obj.isDestroyed||!this.target.obj.dockTrait||this.target.obj.buildStatus!==n.BuildStatus.Ready||!this.sourceObject.isUnit()||this.target.obj.warpedOutTrait.isActive())return!1;var e=!(this.target.obj.rules.refinery||this.target.obj.unitRepairTrait);return this.game.areFriendly(this.target.obj,this.sourceObject)&&this.target.obj.dockTrait.isValidUnitForDock(this.sourceObject)&&!this.target.obj.dockTrait.isDocked(this.sourceObject)&&!(this.target.obj.unitRepairTrait&&!this.sourceObject.rules.dock.includes(this.target.obj.name)&&100===this.sourceObject.healthTrait.health)&&(!e||0<(this.target.obj.dockTrait.getAvailableDockCount()??0)||this.target.obj.dockTrait.hasReservedDockForUnit(this.sourceObject))}isAllowed(){return!0}process(){var e=this.target.obj;return e.rules.refinery&&this.sourceObject.isVehicle()&&this.sourceObject.harvesterTrait?[new a.ReturnOreTask(this.game,e,!0,!0)]:e.unitRepairTrait||this.sourceObject.rules.dock.includes(e.name)?[new l.MoveToDockTask(this.game,e)]:[]}},e("DockOrder",c)}}})),System.register("game/order/GatherOrder",["game/order/Order","game/order/OrderType","gui/PointerType","game/gameobject/task/harvester/GatherOreTask","game/order/OrderFeedbackType"],(function(e,t){"use strict";var i,r,s,n,a,o;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){o=class extends i.Order{constructor(e){super(r.OrderType.Gather),this.game=e,this.targetOptional=!1,this.feedbackType=a.OrderFeedbackType.Move}getPointerType(e){return e?s.PointerType.AttackMini:s.PointerType.AttackNoRange}isValid(){return!(!this.sourceObject.isVehicle()||!this.sourceObject.harvesterTrait||this.sourceObject.moveTrait.isDisabled()||this.game.mapShroudTrait.getPlayerShroud(this.sourceObject.owner)?.isShrouded(this.target.tile,this.target.obj?.tileElevation))&&this.target.isOre}isAllowed(){return!0}process(){return[new n.GatherOreTask(this.game,this.target.tile,!0)]}},e("GatherOrder",o)}}})),System.register("game/order/AttackMoveOrder",["game/order/OrderType","gui/PointerType","game/gameobject/task/move/AttackMoveTask","game/order/OrderFeedbackType","game/type/MovementZone","game/order/AttackOrder","game/gameobject/task/PlantC4Task","game/gameobject/task/move/AttackMoveTargetTask","game/gameobject/task/move/MoveTask","game/gameobject/task/AttackTask","game/type/LocomotorType"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e}],execute:function(){g=class extends o.AttackOrder{constructor(e,t){super(e),this.map=t,this.orderType=i.OrderType.AttackMove,this.targetOptional=!1,this.feedbackType=n.OrderFeedbackType.Attack}getPointerType(e,t){if(this.target.obj?.isTechno()){let i=super.getPointerType(e,t);return i!==r.PointerType.AttackRange&&i!==r.PointerType.AttackNoRange||(i=r.PointerType.AttackMove),i}let i=this.isAllowed();var s,n;return i&&(s=!!this.target.getBridge(),n=this.sourceObject.rules.speedType,i=this.sourceObject.rules.movementZone===a.MovementZone.Fly||0[h.MoveTask,u.AttackTask,c.AttackMoveTargetTask].includes(e.constructor)&&!e.isCancelling()));t&&(i.moveTrait.currentWaypoint?.tile===this.target.tile||i.isAircraft()||t.constructor===u.AttackTask||t.constructor===c.AttackMoveTargetTask)&&t.forceCancel(i)&&e.splice(e.indexOf(t))}else e.length&&i.isUnit()&&(i.rules.locomotor===d.LocomotorType.Vehicle||i.rules.locomotor===d.LocomotorType.Ship)&&(i.moveTrait.speedPenalty=.5);return!0}},e("AttackMoveOrder",g)}}})),System.register("game/event/BuildingRepairFullEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("BuildingRepairFullEvent",class{constructor(e,t){this.target=e,this.source=t,this.type=i.EventType.BuildingRepairFull}})}}})),System.register("game/event/BridgeRepairEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("BridgeRepairEvent",class{constructor(e,t){this.source=e,this.tile=t,this.type=i.EventType.BridgeRepair}})}}})),System.register("game/gameobject/task/RepairBuildingTask",["game/gameobject/task/system/Task","game/gameobject/task/move/MoveOutsideTask","game/gameobject/task/move/MoveInsideTask","game/event/BuildingRepairFullEvent","game/event/BridgeRepairEvent","game/event/EnterObjectEvent"],(function(e,t){"use strict";var i,r,s,n,a,o,l;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e}],execute:function(){l=class extends i.Task{constructor(e,t){super(),this.game=e,this.target=t,this.aborted=!1,this.movePerformed=!1}isAllowed(e){return this.target.cabHutTrait?this.target.cabHutTrait.canRepairBridge():e.rules.engineer&&!this.target.isDestroyed&&this.target.rules.repairable&&this.target.healthTrait.health<100&&(!this.target.owner.isCombatant()||this.game.areFriendly(e,this.target))}onTick(e){return!(!(this.isCancelling()&&!this.movePerformed||this.aborted||e.moveTrait.isDisabled())&&(this.game.map.tileOccupation.isTileOccupiedBy(e.tile,this.target)?!this.isAllowed(e)||this.isCancelling()?(this.children.push(new r.MoveOutsideTask(this.game,this.target)),this.aborted=!0):(this.game.unspawnObject(e),this.target.cabHutTrait?(this.target.cabHutTrait.repairBridge(this.game,e.owner),this.game.events.dispatch(new a.BridgeRepairEvent(e.owner,this.target.centerTile))):(this.target.healthTrait.healToFull(e,this.game),this.game.events.dispatch(new n.BuildingRepairFullEvent(this.target,e.owner))),this.game.events.dispatch(new o.EnterObjectEvent(this.target,e)),0):!this.movePerformed&&(this.children.push(new s.MoveInsideTask(this.game,this.target)),this.movePerformed=!0)))}getTargetLinesConfig(e){return{target:this.target,pathNodes:[]}}},e("RepairBuildingTask",l)}}})),System.register("game/order/RepairOrder",["game/order/Order","game/order/OrderType","gui/PointerType","game/gameobject/unit/RangeHelper","game/gameobject/task/RepairBuildingTask","game/order/OrderFeedbackType"],(function(e,t){"use strict";var i,r,s,n,a,o,l;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e}],execute:function(){l=class extends i.Order{constructor(e){super(r.OrderType.Repair),this.game=e,this.targetOptional=!1,this.terminal=!0,this.feedbackType=o.OrderFeedbackType.Capture}getPointerType(e){return e?this.isAllowed()?s.PointerType.OccupyMini:s.PointerType.NoActionMini:this.isAllowed()?s.PointerType.RepairMove:s.PointerType.NoRepair}isValid(){return!!this.target.obj?.isBuilding()&&!this.target.obj.isDestroyed&&this.sourceObject.isInfantry()&&this.sourceObject.rules.engineer}isAllowed(){let e=this.target.obj;return e.cabHutTrait?e.cabHutTrait.canRepairBridge():!(!(e.rules.repairable&&e.healthTrait.health<100)||e.owner.isCombatant()&&!this.game.areFriendly(e,this.sourceObject))}process(){var e=this.target.obj;return[new a.RepairBuildingTask(this.game,e)]}onAdd(e,t){if(!t){let t=e.find((e=>e instanceof a.RepairBuildingTask));if(this.isValid()&&this.isAllowed()&&t&&!t.isCancelling()&&t.target===this.target.obj&&new n.RangeHelper(this.game.map.tileOccupation).isInTileRange(this.sourceObject,this.target.obj,0,Math.SQRT2))return!1}return!0}},e("RepairOrder",l)}}})),System.register("game/order/GuardAreaOrder",["game/order/Order","game/order/OrderType","gui/PointerType","game/gameobject/task/system/CallbackTask","game/gameobject/task/move/MoveTask","game/order/OrderFeedbackType","game/gameobject/trait/MoveTrait","game/gameobject/task/harvester/GatherOreTask"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e}],execute:function(){h=class extends i.Order{constructor(e,t){super(t?r.OrderType.GuardArea:r.OrderType.Guard),this.game=e,this.targeted=t,this.getPointerType=e=>e?this.isAllowed()?s.PointerType.GuardMini:s.PointerType.NoActionMini:this.isAllowed()?s.PointerType.Guard:s.PointerType.NoMove,this.terminal=!0,this.targetOptional=!t,this.minimapAllowed=t,this.feedbackType=t?o.OrderFeedbackType.Move:o.OrderFeedbackType.None}isValid(){return this.sourceObject.isUnit()&&(!!this.targetOptional||!this.sourceObject.moveTrait.isDisabled())&&!(this.target&&this.game.mapShroudTrait.getPlayerShroud(this.sourceObject.owner)?.isShrouded(this.target.tile,this.target.obj?.tileElevation)&&!this.sourceObject.rules.moveToShroud)}isAllowed(){return!0}process(){let e=this.targeted?this.target.tile:void 0;const t=this.sourceObject;if(!e&&t.isVehicle()&&t.harvesterTrait)return[new n.CallbackTask((()=>t.harvesterTrait.lastOreSite=void 0)),new c.GatherOreTask(this.game,void 0,!0)];let i=[];return e&&i.push(new a.MoveTask(this.game,e,!!this.target.getBridge(),{closeEnoughTiles:this.game.rules.general.closeEnough})),i.push(new n.CallbackTask((t=>{e&&![l.MoveResult.Success,l.MoveResult.CloseEnough].includes(this.sourceObject.moveTrait?.lastMoveResult)||(this.sourceObject.guardMode=!0)}))),i}},e("GuardAreaOrder",h)}}})),System.register("game/order/ScatterOrder",["game/order/Order","game/order/OrderType","gui/PointerType","game/gameobject/task/ScatterTask","game/type/MovementZone"],(function(e,t){"use strict";var i,r,s,n,a,o;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){o=class extends i.Order{constructor(e){super(r.OrderType.Scatter),this.game=e,this.getPointerType=()=>s.PointerType.NoAction}isValid(){return(this.sourceObject.isInfantry()||this.sourceObject.isVehicle())&&this.sourceObject.rules.movementZone!==a.MovementZone.Fly&&!this.sourceObject.moveTrait.isDisabled()}isAllowed(){return!0}process(){if(!this.target)throw new Error("Target should be set for executing a scatter order. See OrderUnitsAction.");return[new n.ScatterTask(this.game,{tile:this.target.tile,toBridge:!!this.target.getBridge()})]}},e("ScatterOrder",o)}}})),System.register("game/event/EnterTransportEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("EnterTransportEvent",class{constructor(e){this.target=e,this.type=i.EventType.EnterTransport}})}}})),System.register("game/gameobject/task/EnterTransportTask",["game/gameobject/task/system/Task","game/gameobject/task/move/MoveOutsideTask","game/gameobject/task/move/MoveInsideTask","game/event/EnterTransportEvent","game/gameobject/unit/ZoneType","game/gameobject/trait/MoveTrait","game/map/tileFinder/RadialTileFinder","game/gameobject/unit/MovePositionHelper","game/gameobject/task/move/MoveTask","game/gameobject/task/system/CallbackTask","game/event/EnterObjectEvent"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e}],execute:function(){var t;(t=g=g||{})[t.MoveToQueueingTile=0]="MoveToQueueingTile",t[t.WaitForTurn=1]="WaitForTurn",t[t.MoveToTransport=2]="MoveToTransport",t[t.EnterTransport=3]="EnterTransport",t[t.ClearTransport=4]="ClearTransport",p=class extends i.Task{constructor(e,t){super(),this.game=e,this.target=t,this.movePerformed=!1,this.preventOpportunityFire=!1}isAllowed(e){return!this.target.isDestroyed&&!this.target.isCrashing&&this.game.areFriendly(this.target,e)&&e.zone!==a.ZoneType.Air&&this.target.zone!==a.ZoneType.Air&&this.target.transportTrait.unitFitsInside(e)&&this.target.moveTrait.moveState===o.MoveState.Idle&&!this.target.warpedOutTrait.isActive()&&!e.mindControllableTrait?.isActive()&&!e.mindControllerTrait?.isActive()}onStart(e){if(!this.target.transportTrait)throw new Error(`Unit ${this.target.name} is not a valid transport`);this.initialTargetTile=this.target.tile,0{let n=[this.game.map.tileOccupation.getBridgeOnTile(t)];for(var a of(n[0]&&n.push(void 0),n))if(0{[o.MoveResult.Success,o.MoveResult.CloseEnough].includes(e.moveTrait.lastMoveResult)||this.cancel()}))),this.queueingNode={tile:t,onBridge:i},this.state=g.WaitForTurn,!1)}if(this.state===g.WaitForTurn){if(!this.target.transportTrait.unitIsFirstInLoadQueue(e))return!1;this.queueingNode=void 0,this.state=g.MoveToTransport}if(this.state===g.MoveToTransport){if(!this.isAllowed(e))return!0;if(!this.game.map.tileOccupation.isTileOccupiedBy(e.tile,this.target))return!(!this.movePerformed&&(this.children.push(new s.MoveInsideTask(this.game,this.target)),this.movePerformed=!0,this.preventOpportunityFire=!0));this.state=g.EnterTransport}return this.state===g.EnterTransport&&(!this.isAllowed(e)||this.isCancelling()?(this.children.push(new r.MoveOutsideTask(this.game,this.target)),this.state=g.ClearTransport,!1):(this.game.limboObject(e,{selected:!1,controlGroup:this.game.getUnitSelection().getOrCreateSelectionModel(e).getControlGroupNumber(),inTransport:!0}),this.game.events.dispatch(new n.EnterTransportEvent(this.target)),this.game.events.dispatch(new d.EnterObjectEvent(this.target,e)),this.target.transportTrait.units.push(e),!0))}getTargetLinesConfig(e){return{target:this.queueingNode?void 0:this.target,pathNodes:this.queueingNode?[this.queueingNode]:[]}}},e("EnterTransportTask",p)}}})),System.register("game/order/EnterTransportOrder",["game/order/Order","game/order/OrderType","gui/PointerType","game/gameobject/unit/RangeHelper","game/order/OrderFeedbackType","game/gameobject/task/EnterTransportTask","game/gameobject/unit/ZoneType","game/gameobject/trait/MoveTrait","game/gameobject/task/system/CallbackTask","game/gameobject/task/move/MoveTask"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e}],execute:function(){d=class extends i.Order{constructor(e){super(r.OrderType.EnterTransport),this.game=e,this.targetOptional=!1,this.terminal=!0,this.feedbackType=a.OrderFeedbackType.Enter}getPointerType(e){return e?this.isAllowed()?s.PointerType.OccupyMini:s.PointerType.NoActionMini:this.isAllowed()?s.PointerType.Occupy:s.PointerType.NoOccupy}isValid(){return!(!this.target.obj?.isVehicle()||!this.target.obj.transportTrait||this.target.obj.isDestroyed||this.target.obj===this.sourceObject||!this.game.areFriendly(this.target.obj,this.sourceObject)||!this.sourceObject.isVehicle()&&!this.sourceObject.isInfantry())}isAllowed(){let e=this.target.obj,t=this.sourceObject;return t.zone!==l.ZoneType.Air&&e.zone!==l.ZoneType.Air&&e.transportTrait.unitFitsInside(t)&&e.moveTrait.moveState===c.MoveState.Idle&&!e.warpedOutTrait.isActive()&&!t.mindControllableTrait?.isActive()&&!t.mindControllerTrait?.isActive()}process(){let e=this.sourceObject,t=this.target.obj;return this.game.map.terrain.getPassableSpeed(t.tile,e.rules.speedType,e.onBridge)?[new o.EnterTransportTask(this.game,t)]:[new h.CallbackTask((()=>{t.unitOrderTrait.addTask(new u.MoveTask(this.game,e.tile,e.onBridge)),t.unitOrderTrait.addTask(new h.CallbackTask((()=>{this.game.map.terrain.getPassableSpeed(t.tile,e.rules.speedType,e.onBridge)&&e.unitOrderTrait.addTask(new o.EnterTransportTask(this.game,t))})))}))]}onAdd(e,t){if(!t){let t=e.find((e=>e instanceof o.EnterTransportTask));if(this.isValid()&&this.isAllowed()&&t&&!t.isCancelling()&&t.target===this.target.obj&&new n.RangeHelper(this.game.map.tileOccupation).isInTileRange(this.sourceObject,this.target.obj,0,Math.SQRT2))return!1}return!0}},e("EnterTransportOrder",d)}}})),System.register("game/event/BuildingCaptureEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("BuildingCaptureEvent",class{constructor(e){this.target=e,this.type=i.EventType.BuildingCapture}})}}})),System.register("game/gameobject/task/CaptureBuildingTask",["game/gameobject/task/system/Task","game/gameobject/Building","game/gameobject/task/move/MoveOutsideTask","game/gameobject/task/move/MoveInsideTask","game/event/BuildingCaptureEvent","game/event/EnterObjectEvent"],(function(e,t){"use strict";var i,r,s,n,a,o,l;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e}],execute:function(){l=class extends i.Task{constructor(e,t){super(),this.game=e,this.target=t,this.aborted=!1,this.movePerformed=!1}isAllowed(e){return e.rules.engineer&&this.target.rules.capturable&&!this.target.isDestroyed&&this.target.buildStatus!==r.BuildStatus.BuildDown&&!this.game.areFriendly(e,this.target)}onTick(e){return!(!(this.isCancelling()&&!this.movePerformed||this.aborted||e.moveTrait.isDisabled())&&(this.game.map.tileOccupation.isTileOccupiedBy(e.tile,this.target)?!this.isAllowed(e)||this.isCancelling()?(this.children.push(new s.MoveOutsideTask(this.game,this.target)),this.aborted=!0):(this.game.unspawnObject(e),e.owner.buildingsCaptured++,this.game.changeObjectOwner(this.target,e.owner),this.game.events.dispatch(new a.BuildingCaptureEvent(this.target)),this.game.events.dispatch(new o.EnterObjectEvent(this.target,e)),0):!this.movePerformed&&(this.children.push(new n.MoveInsideTask(this.game,this.target)),this.movePerformed=!0)))}getTargetLinesConfig(e){return{target:this.target,pathNodes:[]}}},e("CaptureBuildingTask",l)}}})),System.register("game/order/CaptureOrder",["game/order/Order","game/order/OrderType","gui/PointerType","game/gameobject/unit/RangeHelper","game/gameobject/task/CaptureBuildingTask","game/order/OrderFeedbackType"],(function(e,t){"use strict";var i,r,s,n,a,o,l;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e}],execute:function(){l=class extends i.Order{constructor(e){super(r.OrderType.Capture),this.game=e,this.targetOptional=!1,this.terminal=!0,this.feedbackType=o.OrderFeedbackType.Capture}getPointerType(e){return e?this.isAllowed()?s.PointerType.OccupyMini:s.PointerType.NoActionMini:this.isAllowed()?s.PointerType.Occupy:s.PointerType.NoOccupy}isValid(){return!(this.target.obj?.isDestroyed||!this.target.obj?.isBuilding()||!this.sourceObject.isInfantry())&&this.target.obj.rules.capturable&&this.sourceObject.rules.engineer&&!this.game.areFriendly(this.sourceObject,this.target.obj)}isAllowed(){return!0}process(){return[new a.CaptureBuildingTask(this.game,this.target.obj)]}onAdd(e,t){if(!t){let t=e.find((e=>e instanceof a.CaptureBuildingTask));if(this.isValid()&&this.isAllowed()&&t&&!t.isCancelling()&&t.target===this.target.obj&&new n.RangeHelper(this.game.map.tileOccupation).isInTileRange(this.sourceObject,this.target.obj,0,Math.SQRT2))return!1}return!0}},e("CaptureOrder",l)}}})),System.register("game/order/OrderFactory",["game/order/OrderType","game/order/DeployOrder","game/order/MoveOrder","game/order/OccupyOrder","game/order/AttackOrder","game/order/StopOrder","game/order/CheerOrder","game/order/DockOrder","game/order/GatherOrder","game/order/AttackMoveOrder","game/order/RepairOrder","game/order/GuardAreaOrder","game/order/ScatterOrder","game/order/EnterTransportOrder","game/order/CaptureOrder"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p,m,f;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e},function(e){m=e},function(e){f=e}],execute:function(){e("OrderFactory",class{constructor(e,t){this.game=e,this.map=t}create(e,t){switch(e){case i.OrderType.Deploy:return new r.DeployOrder(this.game,!0);case i.OrderType.DeploySelected:return new r.DeployOrder(this.game,!1);case i.OrderType.ForceMove:return new s.MoveOrder(this.game,this.map,t,!0);case i.OrderType.Move:return new s.MoveOrder(this.game,this.map,t);case i.OrderType.ForceAttack:return new a.AttackOrder(this.game,{forceAttack:!0});case i.OrderType.Attack:return new a.AttackOrder(this.game,{noIvanBomb:!0});case i.OrderType.PlaceBomb:return new a.AttackOrder(this.game);case i.OrderType.AttackMove:return new u.AttackMoveOrder(this.game,this.map);case i.OrderType.Capture:return new f.CaptureOrder(this.game);case i.OrderType.Occupy:return new n.OccupyOrder(this.game);case i.OrderType.Stop:return new o.StopOrder(this.game);case i.OrderType.Cheer:return new l.CheerOrder;case i.OrderType.Dock:return new c.DockOrder(this.game);case i.OrderType.Gather:return new h.GatherOrder(this.game);case i.OrderType.Repair:return new d.RepairOrder(this.game);case i.OrderType.Guard:return new g.GuardAreaOrder(this.game,!1);case i.OrderType.GuardArea:return new g.GuardAreaOrder(this.game,!0);case i.OrderType.Scatter:return new p.ScatterOrder(this.game);case i.OrderType.EnterTransport:return new m.EnterTransportOrder(this.game);default:throw new Error("Unhandled order type "+i.OrderType[e])}}})}}})),System.register("game/order/orderPriorities",["game/order/OrderType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("orderPriorities",[i.OrderType.Occupy,i.OrderType.Dock,i.OrderType.Attack,i.OrderType.Capture,i.OrderType.Repair,i.OrderType.EnterTransport,i.OrderType.PlaceBomb,i.OrderType.Deploy,i.OrderType.Gather])}}})),System.register("game/event/CheerEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("CheerEvent",class{constructor(e){this.player=e,this.type=i.EventType.Cheer}})}}})),System.register("game/event/DeployNotAllowedEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("DeployNotAllowedEvent",class{constructor(e){this.target=e,this.type=i.EventType.DeployNotAllowed}})}}})),System.register("game/action/OrderUnitsAction",["data/DataStream","game/action/Action","game/order/OrderType","game/order/orderPriorities","game/order/MoveOrder","game/gameobject/unit/MovePositionHelper","game/order/DeployOrder","game/event/CheerEvent","game/event/DeployNotAllowedEvent","util/typeGuard","game/gameobject/unit/ScatterPositionHelper","game/action/ActionType"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e}],execute:function(){e("ORDER_UNIT_LIMIT",128),p=class extends r.Action{constructor(e,t,i,r){super(g.ActionType.OrderUnits),this.game=e,this.map=t,this.orderActionContext=i,this.orderFactory=r,this.queue=!1,this.isInvalid=!1}unserialize(e){let t=new i.DataStream(e);this.orderType=t.readUint8();var r=t.readUint8();if(0!==r){var s=t.readUint16(),n=t.readUint16();let e;if(this.queue=2"}, tile: ${this.target.tile.rx},${this.target.tile.ry}]`+(this.queue?"(queue)":""):"")}process(){if(!this.isInvalid){let t=this.player;const i=this.game.mapShroudTrait.getPlayerShroud(t);if(i){const r=this.target?.obj;if(r){if(!this.game.map.tileOccupation.calculateTilesForGameObject(r.tile,r).find((e=>!i.isShrouded(e,r.tileElevation))))return}let n=this.validateOrders(t).slice(0,128),l=[],h=[],u=[],g=[],p=[];if(n.forEach((e=>{(e instanceof a.MoveOrder?h:e.orderType===s.OrderType.Scatter?u:e.orderType===s.OrderType.DeploySelected?g:e.orderType===s.OrderType.Cheer?p:l).push(e)})),h.length&&this.target)if(h[0].isEnemyBuildingBlock())h.forEach((e=>l.push(e)));else{let t=this.target.getBridge();var e=h.map((e=>e.sourceObject));let i=new o.MovePositionHelper(this.map).findPositions(e,this.target.tile,t);h.forEach((e=>{var r=i.get(e.sourceObject),s=!t||t.isHighBridge()?this.map.tileOccupation.getBridgeOnTile(r):t;r=this.game.createTarget(s,r);e.target=r,l.push(e)}))}if(u.length){e=u.map((e=>e.sourceObject)).filter((e=>e.isInfantry()||e.isVehicle()));let t=new d.ScatterPositionHelper(this.game).findPositions(e);u.forEach((e=>{var i=t.get(e.sourceObject);i&&(i=this.game.createTarget(i.onBridge,i.tile),e.target=i,l.push(e))}))}if(g.length){let e=[];g.forEach((t=>{((t.sourceObject.isInfantry()||t.sourceObject.isVehicle())&&t.sourceObject.deployerTrait?e:l).push(t)}));let t=e.filter((e=>!e.sourceObject.deployerTrait.isDeployed()));t.length?t.forEach((e=>l.push(e))):e.forEach((e=>l.push(e)))}p.length&&(t.cheerCooldownTicks||(t.cheerCooldownTicks=this.game.rules.general.maximumCheerRate,l.push(...p),this.game.events.dispatch(new c.CheerEvent(t)))),l.forEach((e=>e.sourceObject.unitOrderTrait.addOrder(e,this.queue))),this.updateWaypointPaths(l)}}}validateOrders(e){let t=this.orderActionContext.getOrCreateSelection(e);var i,r=t.getSelectedUnits();let a=this.orderFactory.create(this.orderType,t);a.target=this.target;let o=[];for(i of r)if(!(i.owner!==e||i.rules.spawned||i.isDestroyed||i.isCrashing||i.isDisposed||i.warpedOutTrait.isActive()||(a.sourceObject=i,a instanceof l.DeployOrder&&a.isValid()&&!a.isAllowed()&&this.game.events.dispatch(new h.DeployNotAllowedEvent(i)),a.singleSelectionRequired&&1e.sourceObject));var t=[...new Set(r.map((e=>e.unitOrderTrait.waypointPath)).filter(u.isNotNullOrUndefined))];if(t.length<=1){var i={orderType:this.orderType,target:this.target,terminal:e.some((e=>e.terminal)),next:void 0};if(0===t.length){let e={units:r,waypoints:[i]};r.forEach((t=>{t.unitOrderTrait.waypointPath=e}))}else{let e=t[0];e.waypoints[e.waypoints.length-1].next=i,e.waypoints.push(i)}}}}},e("OrderUnitsAction",p)}}})),System.register("game/action/SelectUnitsAction",["game/action/Action","game/action/ActionType","data/DataStream","game/action/OrderUnitsAction"],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e}],execute:function(){a=class extends i.Action{constructor(e,t){super(r.ActionType.SelectUnits),this.orderActionContext=t}get unitIds(){return this._unitIds}set unitIds(e){this._unitIds=e.slice(0,n.ORDER_UNIT_LIMIT)}unserialize(e){let t=new s.DataStream(e);this.unitIds=new Array(e.byteLength/4);for(let i=0;ir.map.tiles.getByMapCoords(e.x,e.y)??r.map.tiles.getPlaceholderTile(e.x,e.y)));for(;a.length;){var o=a[0];o=i.Coords.tileToWorld(o.rx+.5,o.ry+.5);if(r.map.isWithinHardBounds(new m.Vector2(o.x,o.y)))break;a.shift()}if(!a.length)throw new Error("No valid paradrop path found");return{fromTile:a[0],toTile:a[a.length-1]}}onTick(e){if(this.state===T.Spawning){if(00e.isVehicle()&&e.onBridge===i||e.isBuilding()&&!e.isDestroyed||e.isInfantry()&&e.stance===n.StanceType.Paradrop)))return!1;if(!(s=this.findFreeSubCell(e,t)))return!1;this.passengerCount--;let r=e.createUnitForPlayer(this.passengerRules,this.owner);r.stance=n.StanceType.Paradrop,r.position.tileElevation=this.pdPlane.tileElevation,r.position.subCell=s,r.onBridge=i,r.rules.trainable&&this.owner.canProduceVeteran(r.rules)&&r.veteranTrait?.setVeteranLevel(u.VeteranLevel.Veteran),e.spawnObject(r,t),r.unitOrderTrait.addTask(new o.ParadropTask(e).setCancellable(!1))}else{if(!(0e.isTerrain())).map((t=>t.rules.getOccupiedSubCells(e.map.getTheaterType()))).flat();var r=s.Infantry.SUB_CELLS.filter((e=>-1===i.indexOf(e)));if(r.length)return 1e.rules.nukeSilo));if(s){n.Weapon.factory(t.name,a.WeaponType.Primary,s,e.rules).fire(i,e)}else this.fireLooseNuke(t,i,e)}fireLooseNuke(e,t,r){var n=new s.Vector2(this.tile.rx+.5,this.tile.ry+.5).multiplyScalar(i.Coords.LEPTONS_PER_TILE);if(r.map.isWithinHardBounds(n)){let s=r.createLooseProjectile(e.name,this.owner,t);s.position.moveToLeptons(n),s.position.tileElevation=i.Coords.worldToTileHeight(s.rules.detonationAltitude),r.spawnObject(s,s.position.tile)}}onTick(e){return!0}},e("NukeEffect",l)}}})),System.register("game/superweapon/LightningStormEffect",["game/Coords","game/event/LightningStormCloudEvent","game/event/LightningStormManifestEvent","game/gameobject/unit/CollisionType","game/gameobject/unit/RangeHelper","game/GameSpeed","game/map/tileFinder/RandomTileFinder","game/Warhead","game/superweapon/SuperWeaponEffect"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e}],execute:function(){var t;(t=u=u||{})[t.Approaching=0]="Approaching",t[t.Manifesting=1]="Manifesting",d=class extends h.SuperWeaponEffect{constructor(){super(...arguments),this.state=u.Approaching,this.clouds=[]}onStart(e){var t=e.rules.general.lightningStorm;this.manifestStartTimer=t.deferment,this.manifestEndTimer=t.duration,this.nextDirectHitTimer=0,this.nextRandomHitTimer=0}onTick(e){if(this.state===u.Approaching&&(0!this.clouds.some((r=>i.tileDistance(e,r.tile)!0));for(;t=a.getNextTile();)for(r of e.map.getGroundObjectsOnTile(t))!r.isTechno()||r.isUnit()&&r.tile!==t||r.rules.missileSpawn||(r.rules.organic?r.isDestroyed||e.destroyObject(r,n):(r.invulnerableTrait.setActiveFor(s,e.currentTick),(r.isVehicle()||r.isAircraft())&&r.parasiteableTrait?.isInfested()&&r.parasiteableTrait.destroyParasite(n,e)))}onTick(e){return!0}},e("IronCurtainEffect",s)}}})),System.register("game/superweapon/ChronoSphereEffect",["game/gameobject/common/DeathType","game/gameobject/infantry/StanceType","game/gameobject/unit/ZoneType","game/map/tileFinder/RadialTileFinder","game/type/MovementZone","game/type/SpeedType","game/superweapon/SuperWeaponEffect"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e}],execute:function(){c=class extends l.SuperWeaponEffect{constructor(e,t,i,r){super(e,t,i),this.tile2=r,this.objectsToTeleport=[]}onStart(e){this.delayTicks=e.rules.general.chronoDelay;let t=e.map.tiles;for(let o=-1;o<=1;o++)for(let l=-1;l<=1;l++){var i=t.getByMapCoords(this.tile.rx+o,this.tile.ry+l);if(i){var s,n=!!i.onBridgeLandType,a=t.getByMapCoords(this.tile2.rx+o,this.tile2.ry+l);for(s of e.map.getGroundObjectsOnTile(i))!s.isUnit()||s.tile!==i||s.onBridge!==n||s.isInfantry()&&s.stance===r.StanceType.Paradrop||s.isDisposed||(s.rules.organic&&!s.rules.teleporter||!a?e.destroyObject(s,{player:this.owner}):s.warpedOutTrait.isActive()||(s.warpedOutTrait.setActive(!0,!0,e),this.objectsToTeleport.push({obj:s,destTile:a})))}}}onTick(e){if(0e.isBuilding()));var t=p.some((t=>e.rules.general.padAircraft.includes(t.name))),l=e.rules.general.padAircraft.includes(h.name)&&!!m?.helipadTrait&&!!m.dockTrait?.getAllDockTiles().includes(u)&&!m.dockTrait.hasReservedDockAt(m.dockTrait.getDockNumberByTile(u))&&m.owner===h.owner;let f=!1,y=h.rules.speedType;h.rules.movementZone===a.MovementZone.Fly&&(y=o.SpeedType.Wheel);var c=e.map.mapBounds.isWithinBounds(u);if(!(l||e.map.terrain.getPassableSpeed(u,y,!!g)&&c)){let r=!1;if(!t&&(00e===t))||t.onBridge!==!!g&&t.tile===u||2{i[m.NotifySuperWeaponDeactivate.onDeactivate](t.type,t.owner,e)})));this.effects=this.effects.filter((e=>e.status!==s.EffectStatus.Finished))}[n.NotifyPower.onPowerLow](e,t){e.superWeaponsTrait?.getAll()?.filter((e=>e.rules.isPowered)).forEach((e=>{this.updateTimer(e,!1)}))}[n.NotifyPower.onPowerRestore](e,t){e.superWeaponsTrait?.getAll()?.filter((e=>e.rules.isPowered)).forEach((e=>{this.updateTimer(e,!0)}))}[n.NotifyPower.onPowerChange](e,t){}[i.NotifyWarpChange.onChange](e,t){var i;e.owner.powerTrait&&e.isBuilding()&&e.superWeaponTrait&&(i=e.superWeaponTrait.getSuperWeapon(e))&&this.updateTimer(i,!e.owner.powerTrait.isLowPower())}updateTimer(e,t){var i=this.superWeaponHasValidBuilding(e);t&&i?e.resumeTimer():e.pauseTimer()}superWeaponHasValidBuilding(e){return[...e.owner.buildings].find((t=>!(t.superWeaponTrait?.getSuperWeapon(t)!==e||t.warpedOutTrait.isActive()&&e.rules.isPowered)))}addEffect(e){this.effects.push(e)}activateSuperWeapon(e,t,i,s,n){let a=t.superWeaponsTrait?.getAll().find((t=>t.rules.type===e));if(a&&a.status===r.SuperWeaponStatus.Ready){if(a.oneTimeOnly)for(var o of(t.superWeaponsTrait.remove(a.name),t.buildings))o.rules.superWeapon===a.name&&o.superWeaponTrait&&o.superWeaponTrait.addSuperWeaponToPlayerIfNeeded(t,i);else a.resetTimer();this.activateEffect(a.rules,t,i,s,n)}}activateEffect(e,t,i,r,s,n=!1){const a=e.type;if(void 0!==a){let b=[];switch(a){case o.SuperWeaponType.AmerParaDrop:for(var[m,f]of i.rules.general.paradrop.amerParaDrop.entries())b.push(new h.ParadropEffect(a,t,r,f,m));break;case o.SuperWeaponType.ParaDrop:{let e=i.rules.general.paradrop.getParadropSquads(t.country.side);for(var[y,T]of e.entries())b.push(new h.ParadropEffect(a,t,r,T,y));break}case o.SuperWeaponType.MultiMissile:if(!e.weaponType)throw new Error("Missing WeaponType in super weapon rules");b.push(new u.NukeEffect(a,t,r,e.weaponType));break;case o.SuperWeaponType.LightningStorm:b.push(new d.LightningStormEffect(a,t,r));break;case o.SuperWeaponType.IronCurtain:b.push(new g.IronCurtainEffect(a,t,r));break;case o.SuperWeaponType.ChronoSphere:if(!s)throw new Error("Missing tile2 action param");b.push(new p.ChronoSphereEffect(a,t,r,s))}for(var v of b)this.addEffect(v);i.traits.filter(l.NotifySuperWeaponActivate).forEach((e=>{e[l.NotifySuperWeaponActivate.onActivate](a,t,i,r,s)})),i.events.dispatch(new c.SuperWeaponActivateEvent(a,t,r,s,n))}}},e("SuperWeaponsTrait",f)}}})),System.register("game/action/ActivateSuperWeaponAction",["data/DataStream","game/action/Action","game/action/ActionType","game/type/SuperWeaponType","game/trait/SuperWeaponsTrait"],(function(e,t){"use strict";var i,r,s,n,a,o;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){o=class extends r.Action{constructor(e){super(s.ActionType.ActivateSuperWeapon),this.game=e}unserialize(e){let t=new i.DataStream(e);this.superWeaponType=t.readUint8();var r=t.readUint8();this.tile={x:t.readUint16(),y:t.readUint16()},this.tile2=2{var t=__classPrivateFieldGet(this,i,"m",n).call(this,e);!t||void 0!==a&&a!==t.type||o(t)}));return __classPrivateFieldGet(this,s,"f").push(l),l}dispose(){for(var e of __classPrivateFieldGet(this,s,"f"))e();__classPrivateFieldGet(this,s,"f").length=0}}),r=new WeakMap,s=new WeakMap,i=new WeakSet,n=function(e){switch(e.type){case a.EventType.ObjectOwnerChange:return{type:o.ObjectOwnerChange,prevOwnerName:e.prevOwner.name,newOwnerName:e.target.owner.name,target:e.target.id};case a.EventType.ObjectSpawn:return{type:o.ObjectSpawn,target:e.gameObject.id};case a.EventType.ObjectUnspawn:return{type:o.ObjectUnspawn,target:e.gameObject.id};case a.EventType.ObjectDestroy:{let t=e;return t.target.isProjectile()?void 0:{type:o.ObjectDestroy,target:t.target.id,attackerInfo:t.attackerInfo?{playerName:t.attackerInfo.player.name,objId:t.attackerInfo.obj?.id,weaponName:t.attackerInfo.weapon?.rules.name}:void 0}}default:return}}}}})),System.register("game/api/interface/PlayerData",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("game/api/interface/GameObjectData",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("game/api/interface/UnitData",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("game/api/interface/TileResourceData",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("game/api/interface/PathNode",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("game/api/interface/PathFinderOptions",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("game/api/MapApi",["game/gameobject/trait/TiberiumTrait","engine/type/TiberiumType","game/math/Vector2"],(function(e,t){"use strict";var i,r,s,n,a,o,l;return t&&t.id,{setters:[function(e){a=e},function(e){o=e},function(e){l=e}],execute:function(){e("MapApi",class{constructor(e){i.add(this),r.set(this,void 0),s.set(this,void 0),__classPrivateFieldSet(this,r,e,"f"),__classPrivateFieldSet(this,s,e.map,"f")}getRealMapSize(){return __classPrivateFieldGet(this,s,"f").tiles.getMapSize()}getStartingLocations(){return __classPrivateFieldGet(this,s,"f").startingLocations.map((e=>new l.Vector2(e.x,e.y)))}getTheaterType(){return __classPrivateFieldGet(this,s,"f").getTheaterType()}getTile(e,t){var i=__classPrivateFieldGet(this,s,"f").tiles.getByMapCoords(e,t);if(i&&__classPrivateFieldGet(this,s,"f").mapBounds.isWithinBounds(i))return i}getTilesInRect(e,t){return __classPrivateFieldGet(this,s,"f").tiles.getInRectangle(e,t).filter((e=>__classPrivateFieldGet(this,s,"f").mapBounds.isWithinBounds(e)))}getObjectsOnTile(e){return __classPrivateFieldGet(this,s,"f").getObjectsOnTile(e).map((e=>e.id))}hasBridgeOnTile(e){return!!e.onBridgeLandType}hasHighBridgeOnTile(e){return!!__classPrivateFieldGet(this,s,"f").tileOccupation.getBridgeOnTile(e)?.isHighBridge()}isPassableTile(e,t,i){return 0<__classPrivateFieldGet(this,s,"f").terrain.getPassableSpeed(e,t,i)}findPath(e,t,i,s){let n=__classPrivateFieldGet(this,r,"f").map.terrain.computePath(e,t.tile,t.onBridge,i.tile,i.onBridge,{bestEffort:s?.bestEffort,excludeTiles:s?.excludeNodes?e=>s.excludeNodes({tile:e.tile,onBridge:!!e.onBridge}):void 0,maxExpandedNodes:s?.maxExpandedNodes});return n.map((e=>({tile:e.tile,onBridge:!!e.onBridge})))}isVisibleTile(e,t,i=0){var s=__classPrivateFieldGet(this,r,"f").getPlayerByName(t);if(!s)throw new Error(`Player "${t}" doesn't exist`);return!__classPrivateFieldGet(this,r,"f").mapShroudTrait.getPlayerShroud(s)?.isShrouded(e,i)}getTileResourceData(e){var t=__classPrivateFieldGet(this,s,"f").getObjectsOnTile(e).find((e=>e.isOverlay()&&e.isTiberium()||e.isTerrain()&&e.rules.spawnsTiberium));return t?__classPrivateFieldGet(this,i,"m",n).call(this,t):void 0}getAllTilesResourceData(){var e;let t=[];for(e of __classPrivateFieldGet(this,r,"f").getWorld().getAllObjects()){var s=__classPrivateFieldGet(this,i,"m",n).call(this,e);s&&t.push(s)}return t}}),r=new WeakMap,s=new WeakMap,i=new WeakSet,n=function(e){let t;if(e.isOverlay()&&e.isTiberium()){let s=e.traits.get(a.TiberiumTrait);var i=s.getTiberiumType(),r=s.getBailCount();t={tile:e.tile,ore:i===o.TiberiumType.Ore?r:0,gems:i===o.TiberiumType.Gems?r:0,spawnsOre:!1}}else e.isTerrain()&&e.rules.spawnsTiberium&&(t={tile:e.tile,ore:0,gems:0,spawnsOre:!0});return t}}}})),System.register("game/api/interface/BuildingPlacementData",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("game/api/interface/SuperWeaponData",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("game/api/RulesApi",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){e("RulesApi",class{constructor(e){i.set(this,void 0),__classPrivateFieldSet(this,i,e,"f")}get allObjectRules(){return __classPrivateFieldGet(this,i,"f").allObjectRules}get buildingRules(){return __classPrivateFieldGet(this,i,"f").buildingRules}get infantryRules(){return __classPrivateFieldGet(this,i,"f").infantryRules}get vehicleRules(){return __classPrivateFieldGet(this,i,"f").vehicleRules}get aircraftRules(){return __classPrivateFieldGet(this,i,"f").aircraftRules}get terrainRules(){return __classPrivateFieldGet(this,i,"f").terrainRules}get overlayRules(){return __classPrivateFieldGet(this,i,"f").overlayRules}get countryRules(){return __classPrivateFieldGet(this,i,"f").countryRules}get general(){return __classPrivateFieldGet(this,i,"f").general}get ai(){return __classPrivateFieldGet(this,i,"f").ai}get crateRules(){return __classPrivateFieldGet(this,i,"f").crateRules}get combatDamage(){return __classPrivateFieldGet(this,i,"f").combatDamage}get radiation(){return __classPrivateFieldGet(this,i,"f").radiation}hasObject(e,t){return __classPrivateFieldGet(this,i,"f").hasObject(e,t)}getObject(e,t){return __classPrivateFieldGet(this,i,"f").getObject(e,t)}getBuilding(e){return __classPrivateFieldGet(this,i,"f").getBuilding(e)}getWeapon(e){return __classPrivateFieldGet(this,i,"f").getWeapon(e)}getWarhead(e){return __classPrivateFieldGet(this,i,"f").getWarhead(e)}getProjectile(e){return __classPrivateFieldGet(this,i,"f").getProjectile(e)}getOverlayName(e){return __classPrivateFieldGet(this,i,"f").getOverlayName(e)}getOverlayId(e){return __classPrivateFieldGet(this,i,"f").getOverlayId(e)}getOverlay(e){return __classPrivateFieldGet(this,i,"f").getOverlay(e)}getCountry(e){return __classPrivateFieldGet(this,i,"f").getCountry(e)}getMultiplayerCountries(){return __classPrivateFieldGet(this,i,"f").getMultiplayerCountries()}getIni(){return __classPrivateFieldGet(this,i,"f").getIni()}}),i=new WeakMap}}})),System.register("game/api/GameApi",["game/player/trait/PowerTrait","game/api/MapApi","engine/type/ObjectType","game/GameSpeed","game/api/RulesApi"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h;return t&&t.id,{setters:[function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e}],execute:function(){e("GameApi",class{constructor(e,t){i.add(this),r.set(this,void 0),s.set(this,void 0),__classPrivateFieldSet(this,r,e,"f"),__classPrivateFieldSet(this,s,t,"f"),this.mapApi=new o.MapApi(e),this.rulesApi=new h.RulesApi(e.rules)}isPlayerDefeated(e){return __classPrivateFieldGet(this,r,"f").getPlayerByName(e).defeated}areAlliedPlayers(e,t){var i=__classPrivateFieldGet(this,r,"f").getPlayerByName(e);if(!i)throw new Error(`Player "${e}" doesn't exist`);var s=__classPrivateFieldGet(this,r,"f").getPlayerByName(t);if(!s)throw new Error(`Player "${t}" doesn't exist`);return __classPrivateFieldGet(this,r,"f").alliances.areAllied(i,s)}canPlaceBuilding(e,t,i){var s=__classPrivateFieldGet(this,r,"f").getPlayerByName(e);if(!s)throw new Error(`Player "${e}" doesn't exist`);return __classPrivateFieldGet(this,r,"f").getConstructionWorker(s).canPlaceAt(t,i,{normalizedTile:!0})}getBuildingPlacementData(e){var t=__classPrivateFieldGet(this,r,"f").art.getObject(e,l.ObjectType.Building);return{foundation:t.foundation,foundationCenter:t.foundationCenter}}getPlayers(){return __classPrivateFieldGet(this,r,"f").getNonNeutralPlayers().map((e=>e.name))}getPlayerData(e){let t=__classPrivateFieldGet(this,r,"f").getPlayerByName(e);if(!t)throw new Error(`Player "${e}" doesn't exist`);return{name:t.name,country:t.country,startLocation:this.mapApi.getStartingLocations()[t.startLocation],isObserver:t.isObserver,isAi:t.isAi,isCombatant:t.isCombatant(),credits:t.credits,power:{total:t.powerTrait?.power??0,drain:t.powerTrait?.drain??0,isLowPower:t.powerTrait?.level===a.PowerLevel.Low},radarDisabled:!!t.radarTrait?.isDisabled()}}getAllTerrainObjects(){return __classPrivateFieldGet(this,r,"f").getWorld().getAllObjects().filter((e=>e.isTerrain())).map((e=>e.id))}getAllUnits(e=(()=>!0)){return __classPrivateFieldGet(this,r,"f").getWorld().getAllObjects().filter((t=>t.isTechno()&&e(t.rules))).map((e=>e.id))}getNeutralUnits(e=(()=>!0)){return __classPrivateFieldGet(this,r,"f").getCivilianPlayer().getOwnedObjects().filter((t=>e(t.rules))).map((e=>e.id))}getUnitsInArea(e){return __classPrivateFieldGet(this,r,"f").map.technosByTile.queryRange(e).map((e=>e.id))}getVisibleUnits(e,t,i=(()=>!0)){const s=__classPrivateFieldGet(this,r,"f").getPlayerByName(e);if(!s)throw new Error(`Player "${e}" doesn't exist`);if("self"===t)return s.getOwnedObjects().filter((e=>i(e.rules))).map((e=>e.id));let n;if("allied"===t)n=e=>e.owner===s||__classPrivateFieldGet(this,r,"f").alliances.areAllied(e.owner,s);else{if("hostile"!==t&&"enemy"!==t)throw new Error("Unexpected type "+t);{let e=__classPrivateFieldGet(this,r,"f").mapShroudTrait.getPlayerShroud(s);n=i=>__classPrivateFieldGet(this,r,"f").map.tileOccupation.calculateTilesForGameObject(i.tile,i).some((t=>!e?.isShrouded(t,i.tileElevation)))&&i.owner!==s&&!__classPrivateFieldGet(this,r,"f").alliances.areAllied(i.owner,s)&&("enemy"!==t||i.owner.isCombatant())}}return __classPrivateFieldGet(this,r,"f").getWorld().getAllObjects().filter((e=>e.isTechno()&&n(e)&&i(e.rules))).map((e=>e.id))}getGameObjectData(e){if(__classPrivateFieldGet(this,r,"f").getWorld().hasObjectId(e)){let t=__classPrivateFieldGet(this,r,"f").getObjectById(e);return{id:t.id,type:t.type,name:t.name,rules:t.rules,tile:t.tile,tileElevation:t.tileElevation,worldPosition:t.position.worldPosition.clone(),foundation:t.getFoundation(),hitPoints:t.healthTrait?.getHitPoints(),maxHitPoints:t.healthTrait?.maxHitPoints}}}getUnitData(e){var t=this.getGameObjectData(e);if(t){let s=__classPrivateFieldGet(this,r,"f").getObjectById(e);if(!s.isTechno())throw new Error(`Game object with id ${e} is not a Techno type`);return{...t,owner:s.owner.name,sight:s.sight,veteranLevel:s.veteranLevel,guardMode:s.guardMode,purchaseValue:s.purchaseValue,primaryWeapon:s.primaryWeapon?__classPrivateFieldGet(this,i,"m",n).call(this,s.primaryWeapon):void 0,secondaryWeapon:s.secondaryWeapon?__classPrivateFieldGet(this,i,"m",n).call(this,s.secondaryWeapon):void 0,deathWeapon:s.armedTrait?.deathWeapon?__classPrivateFieldGet(this,i,"m",n).call(this,s.armedTrait.deathWeapon):void 0,attackState:s.attackTrait?.attackState,direction:s.direction,onBridge:s.isInfantry()||s.isVehicle()?s.onBridge:void 0,zone:s.isUnit()?s.zone:void 0,buildStatus:s.isBuilding()?s.buildStatus:void 0,factory:s.isBuilding()&&s.factoryTrait?{deliveringUnit:s.factoryTrait.deliveringUnit?.id,status:s.factoryTrait.status}:void 0,rallyPoint:s.isBuilding()?s.rallyTrait?.getRallyPoint():void 0,isPoweredOn:s.isBuilding()&&s.poweredTrait?.isPoweredOn(),hasWrenchRepair:s.isBuilding()&&!s.autoRepairTrait.isDisabled(),turretFacing:s.isBuilding()||s.isVehicle()?s.turretTrait?.facing:void 0,turretNo:s.isVehicle()?s.turretNo:void 0,garrisonUnitCount:s.isBuilding()?s.garrisonTrait?.units.length:void 0,garrisonUnitsMax:s.isBuilding()?s.garrisonTrait?.maxOccupants:void 0,isIdle:!s.unitOrderTrait.hasTasks(),canMove:s.isUnit()?!s.moveTrait.isDisabled():void 0,velocity:s.isUnit()?s.moveTrait.velocity.clone():void 0,stance:s.isInfantry()?s.stance:void 0,harvestedOre:s.isVehicle()?s.harvesterTrait?.ore:void 0,harvestedGems:s.isVehicle()?s.harvesterTrait?.gems:void 0,ammo:s.isAircraft()?s.ammo:void 0,isWarpedOut:s.warpedOutTrait.isActive(),mindControlledBy:s.mindControllableTrait?.getController()?.id,tntTimer:s.tntChargeTrait?.getTicksLeft()}}}getAllSuperWeaponData(){return __classPrivateFieldGet(this,r,"f").getCombatants().map((e=>e.superWeaponsTrait.getAll().map((t=>({playerName:e.name,type:t.rules.type,status:t.status,timerSeconds:t.getTimerSeconds()}))))).flat()}getGeneralRules(){return __classPrivateFieldGet(this,r,"f").rules.general}getRulesIni(){return __classPrivateFieldGet(this,r,"f").rules.getIni()}getArtIni(){return __classPrivateFieldGet(this,r,"f").art.getIni()}getAiIni(){return __classPrivateFieldGet(this,r,"f").ai.getIni()}generateRandomInt(e,t){if(__classPrivateFieldGet(this,s,"f"))return __classPrivateFieldGet(this,r,"f").generateRandomInt(e,t);var i=this.generateRandom();return Math.round(i*(t-e))+e}generateRandom(){return __classPrivateFieldGet(this,s,"f")?__classPrivateFieldGet(this,r,"f").generateRandom():Math.random()}getTickRate(){return __classPrivateFieldGet(this,r,"f").speed.value*c.GameSpeed.BASE_TICKS_PER_SECOND}getBaseTickRate(){return c.GameSpeed.BASE_TICKS_PER_SECOND}getCurrentTick(){return __classPrivateFieldGet(this,r,"f").currentTick}getCurrentTime(){return __classPrivateFieldGet(this,r,"f").currentTime/1e3}}),r=new WeakMap,s=new WeakMap,i=new WeakSet,n=function(e){return{type:e.type,rules:e.rules,projectileRules:e.projectileRules,warheadRules:e.warhead.rules,minRange:e.minRange,maxRange:e.range,speed:e.speed,cooldownTicks:e.getCooldownTicks()}}}}})),System.register("util/format",["util/string"],(function(e,t){"use strict";var i;return t&&t.id,e("formatTimeDuration",(function(e,t=!1){var r=Math.floor(e/3600);e-=3600*r;var s=Math.floor(e/60),n=e-=60*s;return[...r||!t?[r]:[],i.pad(s,"00"),i.pad(n,"00")].join(":")})),{setters:[function(e){i=e}],execute:function(){}}})),System.register("game/api/LoggerApi",["util/format","util/Logger"],(function(e,t){"use strict";var i,r,s,n,a,o;return t&&t.id,{setters:[function(e){a=e},function(e){o=e}],execute:function(){e("LoggerApi",class{constructor(e,t){i.add(this),r.set(this,void 0),s.set(this,void 0),__classPrivateFieldSet(this,r,e,"f"),__classPrivateFieldSet(this,s,t,"f")}setDebugLevel(e){__classPrivateFieldGet(this,r,"f").setLevel(e?o.AppLogger.DEBUG:o.AppLogger.WARN)}debug(...e){__classPrivateFieldGet(this,r,"f").debug(__classPrivateFieldGet(this,i,"m",n).call(this),...e)}info(...e){__classPrivateFieldGet(this,r,"f").info(__classPrivateFieldGet(this,i,"m",n).call(this),...e)}log(...e){__classPrivateFieldGet(this,r,"f").log(__classPrivateFieldGet(this,i,"m",n).call(this),...e)}warn(...e){__classPrivateFieldGet(this,r,"f").warn(__classPrivateFieldGet(this,i,"m",n).call(this),...e)}error(...e){__classPrivateFieldGet(this,r,"f").error(__classPrivateFieldGet(this,i,"m",n).call(this),...e)}time(e){__classPrivateFieldGet(this,r,"f").time(e)}timeEnd(e){__classPrivateFieldGet(this,r,"f").timeEnd(e)}}),r=new WeakMap,s=new WeakMap,i=new WeakSet,n=function(){return"["+a.formatTimeDuration(Math.floor(__classPrivateFieldGet(this,s,"f").getCurrentTime()))+"]"}}}})),System.register("game/api/ProductionApi",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){e("ProductionApi",class{constructor(e){i.set(this,void 0),__classPrivateFieldSet(this,i,e,"f")}isAvailableForProduction(e){return __classPrivateFieldGet(this,i,"f").isAvailableForProduction(e)}getAvailableObjects(e){let t=__classPrivateFieldGet(this,i,"f").getAvailableObjects();return void 0!==e&&(t=t.filter((t=>this.getQueueTypeForObject(t)===e))),t}getQueueTypeForObject(e){return __classPrivateFieldGet(this,i,"f").getQueueTypeForObject(e)}getQueueData(e){let t=__classPrivateFieldGet(this,i,"f").getQueue(e);return{size:t.currentSize,maxSize:t.maxSize,status:t.status,type:t.type,items:t.getAll().map((e=>({rules:e.rules,quantity:e.quantity})))}}}),i=new WeakMap}}})),System.register("game/bot/Bot",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){e("Bot",class{constructor(e,t){this.name=e,this.country=t,i.set(this,!1)}setGameApi(e){this.gameApi=e}setActionsApi(e){this.actionsApi=e}setProductionApi(e){this.productionApi=e}setLogger(e){this.logger=e,this.logger.setDebugLevel(__classPrivateFieldGet(this,i,"f"))}setDebugMode(e){return __classPrivateFieldSet(this,i,e,"f"),this.logger?.setDebugLevel(e),this}getDebugMode(){return __classPrivateFieldGet(this,i,"f")}onGameStart(e){}onGameTick(e){}onGameEvent(e,t){}}),i=new WeakMap}}})),System.register("game/api/ActionsApi",["game/action/ActionType","game/action/UpdateQueueAction","game/action/DebugAction"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u;return t&&t.id,{setters:[function(e){c=e},function(e){h=e},function(e){u=e}],execute:function(){e("ActionsApi",class{constructor(e,t,l,c,h){i.add(this),r.set(this,void 0),s.set(this,void 0),n.set(this,void 0),a.set(this,void 0),o.set(this,void 0),__classPrivateFieldSet(this,r,t,"f"),__classPrivateFieldSet(this,s,l,"f"),__classPrivateFieldSet(this,n,e,"f"),__classPrivateFieldSet(this,a,c,"f"),__classPrivateFieldSet(this,o,h,"f")}placeBuilding(e,t,r){__classPrivateFieldGet(this,i,"m",l).call(this,c.ActionType.PlaceBuilding,(i=>{i.buildingRules=__classPrivateFieldGet(this,n,"f").rules.getBuilding(e),i.tile={x:t,y:r}}))}sellBuilding(e){__classPrivateFieldGet(this,i,"m",l).call(this,c.ActionType.SellBuilding,(t=>{t.buildingId=e}))}toggleRepairWrench(e){__classPrivateFieldGet(this,i,"m",l).call(this,c.ActionType.ToggleRepair,(t=>{t.buildingId=e}))}toggleAlliance(e,t){__classPrivateFieldGet(this,i,"m",l).call(this,c.ActionType.ToggleAlliance,(i=>{i.toPlayer=__classPrivateFieldGet(this,n,"f").getPlayerByName(e),i.toggle=t}))}pauseProduction(e){__classPrivateFieldGet(this,i,"m",l).call(this,c.ActionType.UpdateQueue,(t=>{t.queueType=e,t.updateType=h.UpdateType.Pause}))}resumeProduction(e){__classPrivateFieldGet(this,i,"m",l).call(this,c.ActionType.UpdateQueue,(t=>{t.queueType=e,t.updateType=h.UpdateType.Resume}))}queueForProduction(e,t,r,s){let a=__classPrivateFieldGet(this,n,"f").rules.getObject(t,r);__classPrivateFieldGet(this,i,"m",l).call(this,c.ActionType.UpdateQueue,(t=>{t.queueType=e,t.updateType=h.UpdateType.Add,t.item=a,t.quantity=s}))}unqueueFromProduction(e,t,r,s){let a=__classPrivateFieldGet(this,n,"f").rules.getObject(t,r);__classPrivateFieldGet(this,i,"m",l).call(this,c.ActionType.UpdateQueue,(t=>{t.queueType=e,t.updateType=h.UpdateType.Cancel,t.item=a,t.quantity=s}))}activateSuperWeapon(e,t,r){__classPrivateFieldGet(this,i,"m",l).call(this,c.ActionType.ActivateSuperWeapon,(i=>{i.superWeaponType=e,i.tile={x:t.rx,y:t.ry},i.tile2=r?{x:r.rx,y:r.ry}:void 0}))}orderUnits(e,t,r,s,a){let o;if(__classPrivateFieldGet(this,i,"m",l).call(this,c.ActionType.SelectUnits,(t=>{t.unitIds=e})),r){let e,t;if(s){e=void 0;var h=__classPrivateFieldGet(this,n,"f").map.tiles.getByMapCoords(r,s);if(!h)throw new Error(`No tile found at rx,ry=${r},`+s);t=h,a&&(e=__classPrivateFieldGet(this,n,"f").map.tileOccupation.getBridgeOnTile(h))}else{if(!__classPrivateFieldGet(this,n,"f").getWorld().hasObjectId(r))return;e=__classPrivateFieldGet(this,n,"f").getObjectById(r),t=e.tile}o=__classPrivateFieldGet(this,n,"f").createTarget(e,t)}__classPrivateFieldGet(this,i,"m",l).call(this,c.ActionType.OrderUnits,(e=>{e.orderType=t,e.target=o}))}sayAll(e){__classPrivateFieldGet(this,o,"f")?.sayAll(__classPrivateFieldGet(this,a,"f").name,e)}setGlobalDebugText(e){__classPrivateFieldGet(this,a,"f").getDebugMode()&&__classPrivateFieldGet(this,i,"m",l).call(this,c.ActionType.DebugCommand,(t=>{t.command=new u.DebugCommand(u.DebugCommandType.SetGlobalDebugText,{text:e||""})}))}setUnitDebugText(e,t){__classPrivateFieldGet(this,a,"f").getDebugMode()&&__classPrivateFieldGet(this,i,"m",l).call(this,c.ActionType.DebugCommand,(i=>{i.command=new u.DebugCommand(u.DebugCommandType.SetUnitDebugText,{unitId:e,label:t})}))}quitGame(){__classPrivateFieldGet(this,i,"m",l).call(this,c.ActionType.ResignGame)}}),r=new WeakMap,s=new WeakMap,n=new WeakMap,a=new WeakMap,o=new WeakMap,i=new WeakSet,l=function(e,t){let i=__classPrivateFieldGet(this,r,"f").create(e);i.player=__classPrivateFieldGet(this,n,"f").getPlayerByName(__classPrivateFieldGet(this,a,"f").name),t?.(i),__classPrivateFieldGet(this,s,"f").push(i)}}}})),System.register("game/api/interface/PlayerStats",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("game/type/PipColor",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.Green=0]="Green",t[t.Yellow=1]="Yellow",t[t.White=2]="White",t[t.Red=3]="Red",t[t.Blue=4]="Blue",e("PipColor",i)}}})),System.register("game/api/index",["game/bot/Bot","game/api/EventsApi","game/math/GameMath","game/math/Box2","game/math/Vector2","game/math/Vector3","game/math/Euler","game/math/Quaternion","game/math/Matrix4","game/math/Spherical","game/math/Cylindrical","engine/TheaterType","engine/type/ObjectType","game/gameobject/Building","game/gameobject/infantry/StanceType","game/gameobject/unit/ZoneType","game/gameobject/trait/AttackTrait","game/gameobject/trait/FactoryTrait","game/gameobject/unit/VeteranLevel","game/order/OrderType","game/player/production/ProductionQueue","game/rules/GeneralRules","game/rules/general/RadarRules","game/type/SpeedType","game/WeaponType","game/rules/TechnoRules","data/map/tag/TagRepeatType","engine/type/TerrainType","game/gameobject/infantry/InfDeathType","game/gameobject/unit/VeteranAbility","game/SideType","game/type/ArmorType","game/type/LandTargeting","game/type/LandType","game/type/LocomotorType","game/type/MovementZone","game/type/NavalTargeting","game/type/PipColor","game/type/SuperWeaponType","game/SuperWeapon","game/type/VhpScan"],(function(e,t){"use strict";return t&&t.id,{setters:[function(t){e({Bot:t.Bot})},function(t){e({ApiEventType:t.ApiEventType})},function(t){e({GameMath:t.GameMath})},function(t){e({Box2:t.Box2})},function(t){e({Vector2:t.Vector2})},function(t){e({Vector3:t.Vector3})},function(t){e({Euler:t.Euler})},function(t){e({Quaternion:t.Quaternion})},function(t){e({Matrix4:t.Matrix4})},function(t){e({Spherical:t.Spherical})},function(t){e({Cylindrical:t.Cylindrical})},function(t){e({TheaterType:t.TheaterType})},function(t){e({ObjectType:t.ObjectType})},function(t){e({BuildStatus:t.BuildStatus})},function(t){e({StanceType:t.StanceType})},function(t){e({ZoneType:t.ZoneType})},function(t){e({AttackState:t.AttackState})},function(t){e({FactoryStatus:t.FactoryStatus})},function(t){e({VeteranLevel:t.VeteranLevel})},function(t){e({OrderType:t.OrderType})},function(t){e({QueueType:t.QueueType}),e({QueueStatus:t.QueueStatus})},function(t){e({PrereqCategory:t.PrereqCategory})},function(t){e({RadarEventType:t.RadarEventType})},function(t){e({SpeedType:t.SpeedType})},function(t){e({WeaponType:t.WeaponType})},function(t){e({FactoryType:t.FactoryType}),e({BuildCat:t.BuildCat})},function(t){e({TagRepeatType:t.TagRepeatType})},function(t){e({TerrainType:t.TerrainType})},function(t){e({InfDeathType:t.InfDeathType})},function(t){e({VeteranAbility:t.VeteranAbility})},function(t){e({SideType:t.SideType})},function(t){e({ArmorType:t.ArmorType})},function(t){e({LandTargeting:t.LandTargeting})},function(t){e({LandType:t.LandType})},function(t){e({LocomotorType:t.LocomotorType})},function(t){e({MovementZone:t.MovementZone})},function(t){e({NavalTargeting:t.NavalTargeting})},function(t){e({PipColor:t.PipColor})},function(t){e({SuperWeaponType:t.SuperWeaponType})},function(t){e({SuperWeaponStatus:t.SuperWeaponStatus})},function(t){e({VhpScan:t.VhpScan})}],execute:function(){}}})),System.register("game/bot/BotsLib",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("game/bot/DummyBot",["game/bot/Bot","game/order/OrderType"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){var t;(t=s=s||{})[t.Initial=0]="Initial",t[t.Deployed=1]="Deployed",t[t.Attacking=2]="Attacking",t[t.Defeated=3]="Defeated",n=class extends i.Bot{constructor(){super(...arguments),this.botState=s.Initial}onGameStart(e){var t=e.getTickRate();this.tickRatio=Math.ceil(t/5),this.enemyPlayers=e.getPlayers().filter((t=>t!==this.name&&!e.areAlliedPlayers(this.name,t)))}onGameTick(e){if(e.getCurrentTick()%this.tickRatio==0)switch(this.botState){case s.Initial:{const i=e.getGeneralRules().baseUnit;if(e.getVisibleUnits(this.name,"self",(e=>e.constructionYard)).length){this.botState=s.Deployed;break}var t=e.getVisibleUnits(this.name,"self",(e=>i.includes(e.name)));t.length&&this.actionsApi.orderUnits([t[0]],r.OrderType.DeploySelected);break}case s.Deployed:break;case s.Attacking:e.getVisibleUnits(this.name,"self",(e=>e.isSelectableCombatant)).length||(this.botState=s.Defeated,this.actionsApi.quitGame())}}},e("DummyBot",n)}}})),System.register("game/bot/BotFactory",["game/gameopts/GameOpts","game/bot/DummyBot"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("BotFactory",class{constructor(e){this.botsLib=e}create(e){if(!e.isAi)throw new Error(`Player "${e.name}" is not an AI`);switch(e.aiDifficulty){case i.AiDifficulty.Easy:return new r.DummyBot(e.name,e.country.name);case i.AiDifficulty.Medium:if(this.botsLib.SupalosaBot)return new this.botsLib.SupalosaBot(e.name,e.country.name);default:throw new Error(`Unsupported AI difficulty "${e.aiDifficulty}"`)}}})}}})),System.register("game/BotManager",["util/disposable/CompositeDisposable","util/Logger","game/action/ActionQueue","game/api/ActionsApi","game/api/EventsApi","game/api/GameApi","game/api/LoggerApi","game/api/ProductionApi"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e}],execute:function(){e("BotManager",class{constructor(e,t,r,s,n){this.actionFactory=e,this.actionQueue=t,this.botFactory=r,this.botDebugIndex=s,this.actionLogger=n,this.bots=new Map,this.disposables=new i.CompositeDisposable}static factory(e,t,i,r){return new this(e,new s.ActionQueue,t,i,r)}init(e){this.gameApi=new o.GameApi(e,!0);let t=new a.EventsApi(e.events);var i,s;for(i of e.getCombatants().filter((e=>e.isAi)))this.bots.set(i,this.botFactory.create(i));this.updateDebugBotIndex(this.botDebugIndex.value,e);let h=t=>this.updateDebugBotIndex(t,e);for(s of(this.botDebugIndex.onChange.subscribe(h),this.disposables.add((()=>this.botDebugIndex.onChange.unsubscribe(h))),t.subscribe((e=>this.bots.forEach((t=>t.onGameEvent(e,this.gameApi))))),this.disposables.add(t),this.bots.values()))s.setGameApi(this.gameApi),s.setActionsApi(new n.ActionsApi(e,this.actionFactory,this.actionQueue,s)),s.setProductionApi(new c.ProductionApi(e.getPlayerByName(s.name).production)),s.setLogger(new l.LoggerApi(r.AppLogger.get(s.name),this.gameApi)),s.onGameStart(this.gameApi)}update(e){var t,i;for(t of this.actionQueue.dequeueAll()){t.process();var r=t.print();r&&this.actionLogger.debug(`(${t.player.name})@${e.currentTick}: `+r)}for(i of e.getCombatants().filter((e=>e.isAi)))this.bots.get(i).onGameTick(this.gameApi)}updateDebugBotIndex(e,t){var i,r=0(r??0)&&t.production.hasAnyFactory()&&this.clearStale())}}[o.NotifyProduceUnit.onProduce](){this.clearStale()}[a.NotifyPlaceBuilding.onPlace](e){e.wallTrait||this.clearStale()}[s.NotifyDestroy.onDestroy](e,t,i){!e.isBuilding()||e.owner.isNeutral||e.wallTrait||e.rules.insignificant||i?.obj&&t.areFriendly(e,i.obj)||this.clearStale()}[n.NotifyOwnerChange.onChange](e,t,i){e.isBuilding()&&!t.isNeutral&&(i.alliances.areAllied(e.owner,t)||this.clearStale())}},e("StalemateDetectTrait",c),c.graceMinutes=5}}})),System.register("game/Prng",["mersenne-twister"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("Prng",class{constructor(e){this.prng=new i.default(e)}generateRandomInt(e,t){var i=this.prng.random();return this.lastRandom=i,Math.round(i*(t-e))+e}generateRandom(){var e=this.prng.random();return this.lastRandom=e}getLastRandom(){return this.lastRandom}})}}})),System.register("game/trigger/TriggerTarget",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("game/trigger/TriggerCondition",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("TriggerCondition",class{constructor(e,t){this.event=e,this.trigger=t,this.blocking=!1,this.targets=[]}init(e){var t=e.getAllPlayers().find((e=>e.country?.name===this.trigger.houseName));t&&(this.player=t)}setTargets(e){this.targets=e}reset(){}getDebugName(){return`${this.event.triggerId}[${this.event.eventIndex}] (${this.trigger.name}).`}})}}})),System.register("game/trigger/TriggerInstance",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("game/trigger/TriggerExecutor",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("TriggerExecutor",class{constructor(e,t){this.action=e,this.trigger=t}getDebugName(){return`${this.action.triggerId}[${this.action.index}] (${this.trigger.name}).`}})}}})),System.register("game/trigger/executor/AddSuperWeaponExecutor",["game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerExecutor{constructor(e,t,i){super(e,t),this.oneTimeOnly=i,this.superWeaponIdx=Number(e.params[1])}execute(e){var t=[...e.rules.superWeaponRules.values()].find((e=>e.index===this.superWeaponIdx));if(t){let i=e.getAllPlayers().find((e=>e.country?.name===this.trigger.houseName));if(i&&i.superWeaponsTrait&&!i.superWeaponsTrait.has(t.name)){let r=e.createSuperWeapon(t.name,i,this.oneTimeOnly);r.isGift=!0,i.superWeaponsTrait.add(r)}}else console.warn(`No superweapon found with index "${this.superWeaponIdx}". Skipping action ${this.getDebugName()}.`)}},e("AddSuperWeaponExecutor",r)}}})),System.register("game/trigger/executor/ApplyDamageExecutor",["game/Coords","game/gameobject/unit/CollisionType","game/Warhead","game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e}],execute:function(){a=class extends n.TriggerExecutor{constructor(e,t,i){super(e,t),this.damage=i}execute(e){var t=Number(this.action.params[1]),n=e.map.getTileAtWaypoint(t);if(n){var a=e.rules.getWarhead(s.Warhead.HE_WARHEAD_NAME);let t=new s.Warhead(a);var o=e.map.tileOccupation.getBridgeOnTile(n),l=o?.tileElevation??0;a=e.map.getTileZone(n);t.detonate(e,this.damage,n,l,i.Coords.tile3dToWorld(n.rx+.5,n.ry+.5,n.z+l),a,o?r.CollisionType.OnBridge:r.CollisionType.None,e.createTarget(o,n),void 0,!1,!1,void 0)}else console.warn(`No valid location found for waypoint ${t}. Skipping action ${this.getDebugName()}.`)}},e("ApplyDamageExecutor",a)}}})),System.register("game/trigger/executor/ChangeHouseAllExecutor",["game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerExecutor{execute(e){let t=e.getAllPlayers().find((e=>e.country?.name===this.trigger.houseName));if(t){let s=Number(this.action.params[1]);var i=e.getAllPlayers().find((e=>e.country?.id===s));if(i)for(var r of t.getOwnedObjects(!0))e.changeObjectOwner(r,i)}}},e("ChangeHouseAllExecutor",r)}}})),System.register("game/trigger/executor/ChangeHouseExecutor",["game/gameobject/GameObject","game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerExecutor{constructor(e,t){super(e,t),this.houseId=Number(e.params[1])}execute(e,t){var r=e.getAllPlayers().find((e=>e.country?.id===this.houseId));if(r)for(var s of t)s instanceof i.GameObject&&s.isSpawned&&e.changeObjectOwner(s,r)}},e("ChangeHouseExecutor",s)}}})),System.register("game/trigger/executor/CheerExecutor",["engine/type/ObjectType","game/gameobject/task/CheerTask","game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=class extends s.TriggerExecutor{constructor(e,t){super(e,t),this.houseId=Number(e.params[1])}execute(e){let t=e.getAllPlayers().filter((e=>e.country&&!e.defeated));if(-1!==this.houseId&&(t=t.filter((e=>e.country?.id===this.houseId))),t.length)for(var s of t[0].getOwnedObjectsByType(i.ObjectType.Infantry))s.unitOrderTrait.isIdle()&&s.unitOrderTrait.addTask(new r.CheerTask)}},e("CheerExecutor",n)}}})),System.register("game/trigger/executor/CreateCrateExecutor",["game/type/PowerupType","game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=new Map([[0,e=>{var t=e.rules.powerups.powerups.find((e=>e.type===i.PowerupType.Money));return t?{...t,data:"5000"}:void 0}],[1,i.PowerupType.Unit],[2,i.PowerupType.HealBase],[3,i.PowerupType.Cloak],[4,i.PowerupType.Explosion],[5,i.PowerupType.Napalm],[6,i.PowerupType.Money],[7,i.PowerupType.Darkness],[8,i.PowerupType.Reveal],[9,i.PowerupType.Armor],[10,i.PowerupType.Speed],[11,i.PowerupType.Firepower],[12,i.PowerupType.ICBM],[13,void 0],[14,i.PowerupType.Veteran],[15,void 0],[16,i.PowerupType.Gas],[17,i.PowerupType.Tiberium],[18,void 0]]),n=class extends r.TriggerExecutor{execute(e){var t=Number(this.action.params[1]),i=this.action.params[6],r=e.map.getTileAtWaypoint(i);if(r)if(s.has(t)){const i=s.get(t);(t="function"==typeof i?i(e):e.rules.powerups.powerups.find((e=>e.type===i)))&&e.crateGeneratorTrait.spawnCrateAt(r,t,e)}else e.crateGeneratorTrait.spawnRandomCrateAt(r,e);else console.warn(`No valid location found for waypoint ${i}. Skipping action ${this.getDebugName()}.`)}},e("CreateCrateExecutor",n)}}})),System.register("game/trigger/executor/CreateRadarEventExecutor",["game/rules/general/RadarRules","game/trait/RadarTrait","game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=class extends s.TriggerExecutor{execute(e){var t=Number(this.action.params[1])-1;if(Object.values(i.RadarEventType).includes(t)){var s=this.action.params[6],n=e.map.getTileAtWaypoint(s);if(n)for(var a of e.getCombatants())e.traits.get(r.RadarTrait).addEventForPlayer(t,a,n,e);else console.warn(`No valid location found for waypoint ${s}. Skipping action ${this.getDebugName()}.`)}else console.warn(`Unknown radar event type "${1+t}". Skipping action ${this.getDebugName()}.`)}},e("CreateRadarEventExecutor",n)}}})),System.register("game/trigger/executor/DestroyObjectExecutor",["game/gameobject/GameObject","game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerExecutor{execute(e,t){for(var r of t)r instanceof i.GameObject&&r.isSpawned&&e.destroyObject(r)}},e("DestroyObjectExecutor",s)}}})),System.register("game/trigger/executor/DestroyTagExecutor",["game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerExecutor{execute(e){var t=this.action.params[1];e.triggers.destroyTag(t)}},e("DestroyTagExecutor",r)}}})),System.register("game/trigger/executor/DestroyTriggerExecutor",["game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerExecutor{execute(e){var t=this.action.params[1];e.triggers.destroyTrigger(t)}},e("DestroyTriggerExecutor",r)}}})),System.register("game/trigger/executor/DetonateWarheadExecutor",["game/Coords","game/gameobject/unit/CollisionType","game/Warhead","game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e}],execute:function(){a=class extends n.TriggerExecutor{execute(e){var t=Number(this.action.params[1]),n=this.action.params[6],a=e.map.getTileAtWaypoint(n);if(a){let c,h;try{c=e.rules.getWeaponByInternalId(t)}catch(n){if(n instanceof RangeError)return void console.warn(`Weapon with internal ID "${t}" not found. Skipping action ${this.getDebugName()}.`);throw n}try{h=e.rules.getWarhead(c.warhead)}catch(n){return void console.warn(`Warhead "${c.warhead}" not found. Skipping action ${this.getDebugName()}.`)}let u=new s.Warhead(h);var o=e.map.tileOccupation.getBridgeOnTile(a),l=o?.tileElevation??0;t=e.map.getTileZone(a);u.detonate(e,c.damage,a,l,i.Coords.tile3dToWorld(a.rx+.5,a.ry+.5,a.z+l),t,o?r.CollisionType.OnBridge:r.CollisionType.None,e.createTarget(o,a),void 0,!1,!1,void 0)}else console.warn(`No valid location found for waypoint ${n}. Skipping action ${this.getDebugName()}.`)}},e("DetonateWarheadExecutor",a)}}})),System.register("game/trigger/executor/EvictOccupiersExecutor",["game/gameobject/GameObject","game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerExecutor{execute(e,t){for(var r of t)r instanceof i.GameObject&&r.isBuilding()&&r.garrisonTrait&&!r.isDestroyed&&r.garrisonTrait.evacuate(e)}},e("EvictOccupiersExecutor",s)}}})),System.register("game/trigger/executor/FireSaleExecutor",["game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerExecutor{constructor(e,t){super(e,t),this.houseId=Number(e.params[1])}execute(e){var t=e.getAllPlayers().find((e=>e.country?.id===this.houseId));if(t)for(var i of t.buildings)e.sellTrait.sell(i)}},e("FireSaleExecutor",r)}}})),System.register("game/trigger/executor/ForceEndExecutor",["game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerExecutor{execute(e){e.end()}},e("ForceEndExecutor",r)}}})),System.register("game/trigger/executor/ForceTriggerExecutor",["game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerExecutor{execute(e){var t=this.action.params[1];e.triggers.forceTrigger(t,e)}},e("ForceTriggerExecutor",r)}}})),System.register("game/trigger/executor/GlobalVariableExecutor",["game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerExecutor{constructor(e,t,i){super(e,t),this.value=i,this.variableIdx=Number(e.params[1])}execute(e){e.triggers.toggleGlobalVariable(this.variableIdx,this.value)}},e("GlobalVariableExecutor",r)}}})),System.register("game/trigger/executor/IronCurtainExecutor",["game/trait/SuperWeaponsTrait","game/type/SuperWeaponType","game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=class extends s.TriggerExecutor{execute(e){var t,s,n=this.action.params[6],a=e.map.getTileAtWaypoint(n);a?!(t=e.getAllPlayers().find((e=>!e.defeated&&e.country?.name===this.trigger.houseName)))||(s=[...e.rules.superWeaponRules.values()].find((e=>e.type===r.SuperWeaponType.IronCurtain)))&&e.traits.get(i.SuperWeaponsTrait).activateEffect(s,t,e,a,void 0,!0):console.warn(`No valid location found for waypoint ${n}. Skipping action ${this.getDebugName()}.`)}},e("IronCurtainExecutor",n)}}})),System.register("game/trigger/executor/LightningStrikeExecutor",["game/trait/SuperWeaponsTrait","game/type/SuperWeaponType","game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=class extends s.TriggerExecutor{execute(e){var t,s,n=this.action.params[6],a=e.map.getTileAtWaypoint(n);a?!(t=e.getAllPlayers().find((e=>!e.defeated&&e.country?.name===this.trigger.houseName)))||(s=[...e.rules.superWeaponRules.values()].find((e=>e.type===r.SuperWeaponType.LightningStorm)))&&e.traits.get(i.SuperWeaponsTrait).activateEffect(s,t,e,a,void 0,!0):console.warn(`No valid location found for waypoint ${n}. Skipping action ${this.getDebugName()}.`)}},e("LightningStrikeExecutor",n)}}})),System.register("game/trigger/executor/LocalVariableExecutor",["game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerExecutor{constructor(e,t,i){super(e,t),this.value=i,this.variableIdx=Number(e.params[1])}execute(e){e.triggers.toggleLocalVariable(this.variableIdx,this.value)}},e("LocalVariableExecutor",r)}}})),System.register("game/trigger/executor/NoActionExecutor",["game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerExecutor{execute(){}},e("NoActionExecutor",r)}}})),System.register("game/trigger/executor/NukeStrikeExecutor",["game/trait/SuperWeaponsTrait","game/type/SuperWeaponType","game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=class extends s.TriggerExecutor{execute(e){var t,s,n=this.action.params[6],a=e.map.getTileAtWaypoint(n);a?!(t=e.getAllPlayers().find((e=>!e.defeated&&e.country?.name===this.trigger.houseName)))||(s=[...e.rules.superWeaponRules.values()].find((e=>e.type===r.SuperWeaponType.MultiMissile)))&&e.traits.get(i.SuperWeaponsTrait).activateEffect(s,t,e,a,void 0,!0):console.warn(`No valid location found for waypoint ${n}. Skipping action ${this.getDebugName()}.`)}},e("NukeStrikeExecutor",n)}}})),System.register("game/event/TriggerAnimEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("TriggerAnimEvent",class{constructor(e,t){this.name=e,this.tile=t,this.type=i.EventType.TriggerAnim}})}}})),System.register("game/trigger/executor/PlayAnimAtExecutor",["game/event/TriggerAnimEvent","game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerExecutor{execute(e){var t,r=this.action,s=Number(r.params[1]),n=e.rules.getAnimationName(s);void 0!==n?(t=r.params[6],(r=e.map.getTileAtWaypoint(t))?e.events.dispatch(new i.TriggerAnimEvent(n,r)):console.warn(`No valid location found for waypoint ${t}. Skipping action ${this.getDebugName()}.`)):console.warn(`No animation found for index "${s}". Skipping action `+this.getDebugName())}},e("PlayAnimAtExecutor",s)}}})),System.register("game/event/TriggerSoundFxEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("TriggerSoundFxEvent",class{constructor(e,t){this.soundId=e,this.tile=t,this.type=i.EventType.TriggerSoundFx}})}}})),System.register("game/trigger/executor/PlaySoundFxAtExecutor",["game/event/TriggerSoundFxEvent","game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerExecutor{execute(e){var t,r=(t=this.action).params[1],s=t.params[6];(t=e.map.getTileAtWaypoint(s))?e.events.dispatch(new i.TriggerSoundFxEvent(r,t)):console.warn(`No valid location found for waypoint ${s}. Skipping action ${this.getDebugName()}.`)}},e("PlaySoundFxAtExecutor",s)}}})),System.register("game/trigger/executor/PlaySoundFxExecutor",["game/event/TriggerSoundFxEvent","game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerExecutor{execute(e){e.events.dispatch(new i.TriggerSoundFxEvent(this.action.params[1]))}},e("PlaySoundFxExecutor",s)}}})),System.register("game/event/TriggerEvaEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("TriggerEvaEvent",class{constructor(e){this.soundId=e,this.type=i.EventType.TriggerEva}})}}})),System.register("game/trigger/executor/PlaySpeechExecutor",["game/event/TriggerEvaEvent","game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerExecutor{execute(e){e.events.dispatch(new i.TriggerEvaEvent(this.action.params[1]))}},e("PlaySpeechExecutor",s)}}})),System.register("game/trigger/executor/ReshroudMapExecutor",["game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerExecutor{execute(e){for(var t of e.getCombatants())e.mapShroudTrait.resetShroud(t,e)}},e("ReshroudMapExecutor",r)}}})),System.register("game/trigger/executor/ResizePlayerViewExecutor",["game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerExecutor{execute(e){var[t,i,r,s]=this.action.params.slice(2,6).map(Number);e.map.mapBounds.updateRawLocalSize({x:t,y:i,width:r,height:s})}},e("ResizePlayerViewExecutor",r)}}})),System.register("game/trigger/executor/RevealAroundWaypointExecutor",["game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerExecutor{execute(e){var t=Number(this.action.params[1]),i=e.map.getTileAtWaypoint(t);if(i)for(var r of e.getCombatants())e.mapShroudTrait.getPlayerShroud(r)?.revealAround(i,e.rules.general.revealTriggerRadius);else console.warn(`No valid location found for waypoint ${t}. Skipping action ${this.getDebugName()}.`)}},e("RevealAroundWaypointExecutor",r)}}})),System.register("game/trigger/executor/RevealMapExecutor",["game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerExecutor{execute(e){for(var t of e.getCombatants())e.mapShroudTrait.revealMap(t,e)}},e("RevealMapExecutor",r)}}})),System.register("game/trigger/executor/SellBuildingExecutor",["game/gameobject/GameObject","game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerExecutor{execute(e,t){for(var r of t)r instanceof i.GameObject&&r.isBuilding()&&!r.isDestroyed&&e.sellTrait.sell(r)}},e("SellBuildingExecutor",s)}}})),System.register("game/trigger/executor/SetAmbientLightExecutor",["game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerExecutor{execute(e){var t=Number(this.action.params[1])/100;e.mapLightingTrait.setTargetAmbientIntensity(t)}},e("SetAmbientLightExecutor",r)}}})),System.register("util/number",[],(function(e,t){"use strict";return t&&t.id,e("int32ToFloat32",(function(e){let t=new DataView(new ArrayBuffer(4));return t.setInt32(0,e),t.getFloat32(0)})),{setters:[],execute:function(){}}})),System.register("game/trigger/executor/SetAmbientRateExecutor",["util/number","game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerExecutor{execute(e){var t=i.int32ToFloat32(Number(this.action.params[1]));e.mapLightingTrait.setAmbientChangeRate(t)}},e("SetAmbientRateExecutor",s)}}})),System.register("game/trigger/executor/SetAmbientStepExecutor",["util/number","game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerExecutor{execute(e){var t=i.int32ToFloat32(Number(this.action.params[1]));e.mapLightingTrait.setAmbientChangeStep(t)}},e("SetAmbientStepExecutor",s)}}})),System.register("game/event/TriggerStopSoundFxEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("TriggerStopSoundFxEvent",class{constructor(e){this.tile=e,this.type=i.EventType.TriggerStopSoundFx}})}}})),System.register("game/trigger/executor/StopSoundFxAtExecutor",["game/event/TriggerStopSoundFxEvent","game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerExecutor{execute(e){var t=this.action.params[6],r=e.map.getTileAtWaypoint(t);r?e.events.dispatch(new i.TriggerStopSoundFxEvent(r)):console.warn(`No valid location found for waypoint ${t}. Skipping action ${this.getDebugName()}.`)}},e("StopSoundFxAtExecutor",s)}}})),System.register("game/event/TriggerTextEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("TriggerTextEvent",class{constructor(e){this.label=e,this.type=i.EventType.TriggerText}})}}})),System.register("game/trigger/executor/TextTriggerExecutor",["game/event/TriggerTextEvent","game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerExecutor{execute(e){e.events.dispatch(new i.TriggerTextEvent(this.action.params[1]))}},e("TextTriggerExecutor",s)}}})),System.register("game/trigger/executor/TimerExtendExecutor",["game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerExecutor{execute(e){e.countdownTimer.addSeconds(Number(this.action.params[1]))}},e("TimerExtendExecutor",r)}}})),System.register("game/trigger/executor/TimerSetExecutor",["game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerExecutor{execute(e){e.countdownTimer.setSeconds(Number(this.action.params[1]))}},e("TimerSetExecutor",r)}}})),System.register("game/trigger/executor/TimerShortenExecutor",["game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerExecutor{execute(e){e.countdownTimer.addSeconds(-Number(this.action.params[1]))}},e("TimerShortenExecutor",r)}}})),System.register("game/trigger/executor/TimerStartExecutor",["game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerExecutor{execute(e){e.countdownTimer.start()}},e("TimerStartExecutor",r)}}})),System.register("game/trigger/executor/TimerStopExecutor",["game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerExecutor{execute(e){e.countdownTimer.stop()}},e("TimerStopExecutor",r)}}})),System.register("game/trigger/executor/TimerTextExecutor",["game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerExecutor{execute(e){e.countdownTimer.text=this.action.params[1]}},e("TimerTextExecutor",r)}}})),System.register("game/trigger/executor/ToggleTriggerExecutor",["game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerExecutor{constructor(e,t,i){super(e,t),this.triggerEnable=i}execute(e){var t=this.action.params[1];e.triggers.setTriggerEnabled(t,this.triggerEnable)}},e("ToggleTriggerExecutor",r)}}})),System.register("game/trigger/executor/TurnOnOffBuildingExecutor",["game/gameobject/GameObject","game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerExecutor{constructor(e,t,i){super(e,t),this.turnOn=i}execute(e,t){for(var r of t)r instanceof i.GameObject&&r.isBuilding()&&r.poweredTrait?.setTurnedOn(this.turnOn)}},e("TurnOnOffBuildingExecutor",s)}}})),System.register("game/trigger/executor/UnrevealAroundWaypointExecutor",["game/trigger/TriggerExecutor"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerExecutor{execute(e){var t=Number(this.action.params[1]),i=e.map.getTileAtWaypoint(t);if(i)for(var r of e.getCombatants())e.mapShroudTrait.getPlayerShroud(r)?.unrevealAround(i,e.rules.general.revealTriggerRadius);else console.warn(`No valid location found for waypoint ${t}. Skipping action ${this.getDebugName()}.`)}},e("UnrevealAroundWaypointExecutor",r)}}})),System.register("game/trigger/TriggerExecutorFactory",["data/map/trigger/TriggerActionType","game/trigger/executor/AddSuperWeaponExecutor","game/trigger/executor/ApplyDamageExecutor","game/trigger/executor/ChangeHouseAllExecutor","game/trigger/executor/ChangeHouseExecutor","game/trigger/executor/CheerExecutor","game/trigger/executor/CreateCrateExecutor","game/trigger/executor/CreateRadarEventExecutor","game/trigger/executor/DestroyObjectExecutor","game/trigger/executor/DestroyTagExecutor","game/trigger/executor/DestroyTriggerExecutor","game/trigger/executor/DetonateWarheadExecutor","game/trigger/executor/EvictOccupiersExecutor","game/trigger/executor/FireSaleExecutor","game/trigger/executor/ForceEndExecutor","game/trigger/executor/ForceTriggerExecutor","game/trigger/executor/GlobalVariableExecutor","game/trigger/executor/IronCurtainExecutor","game/trigger/executor/LightningStrikeExecutor","game/trigger/executor/LocalVariableExecutor","game/trigger/executor/NoActionExecutor","game/trigger/executor/NukeStrikeExecutor","game/trigger/executor/PlayAnimAtExecutor","game/trigger/executor/PlaySoundFxAtExecutor","game/trigger/executor/PlaySoundFxExecutor","game/trigger/executor/PlaySpeechExecutor","game/trigger/executor/ReshroudMapExecutor","game/trigger/executor/ResizePlayerViewExecutor","game/trigger/executor/RevealAroundWaypointExecutor","game/trigger/executor/RevealMapExecutor","game/trigger/executor/SellBuildingExecutor","game/trigger/executor/SetAmbientLightExecutor","game/trigger/executor/SetAmbientRateExecutor","game/trigger/executor/SetAmbientStepExecutor","game/trigger/executor/StopSoundFxAtExecutor","game/trigger/executor/TextTriggerExecutor","game/trigger/executor/TimerExtendExecutor","game/trigger/executor/TimerSetExecutor","game/trigger/executor/TimerShortenExecutor","game/trigger/executor/TimerStartExecutor","game/trigger/executor/TimerStopExecutor","game/trigger/executor/TimerTextExecutor","game/trigger/executor/ToggleTriggerExecutor","game/trigger/executor/TurnOnOffBuildingExecutor","game/trigger/executor/UnrevealAroundWaypointExecutor"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p,m,f,y,T,v,b,S,w,C,E,x,O,A,M,R,P,I,k,B,j,N,L,D,F,_,U,H,G,V,W,z,K;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e},function(e){m=e},function(e){f=e},function(e){y=e},function(e){T=e},function(e){v=e},function(e){b=e},function(e){S=e},function(e){w=e},function(e){C=e},function(e){E=e},function(e){x=e},function(e){O=e},function(e){A=e},function(e){M=e},function(e){R=e},function(e){P=e},function(e){I=e},function(e){k=e},function(e){B=e},function(e){j=e},function(e){N=e},function(e){L=e},function(e){D=e},function(e){F=e},function(e){_=e},function(e){U=e},function(e){H=e},function(e){G=e},function(e){V=e},function(e){W=e},function(e){z=e},function(e){K=e}],execute:function(){e("TriggerExecutorFactory",class{create(e,t){switch(e.type){case i.TriggerActionType.NoAction:return new w.NoActionExecutor(e,t);case i.TriggerActionType.FireSale:return new m.FireSaleExecutor(e,t);case i.TriggerActionType.TextTrigger:return new D.TextTriggerExecutor(e,t);case i.TriggerActionType.DestroyTrigger:return new d.DestroyTriggerExecutor(e,t);case i.TriggerActionType.ChangeHouse:return new a.ChangeHouseExecutor(e,t);case i.TriggerActionType.RevealMap:return new I.RevealMapExecutor(e,t);case i.TriggerActionType.RevealAroundWaypoint:return new P.RevealAroundWaypointExecutor(e,t);case i.TriggerActionType.PlaySoundFx:return new O.PlaySoundFxExecutor(e,t);case i.TriggerActionType.PlaySpeech:return new A.PlaySpeechExecutor(e,t);case i.TriggerActionType.ForceTrigger:return new y.ForceTriggerExecutor(e,t);case i.TriggerActionType.TimerStart:return new H.TimerStartExecutor(e,t);case i.TriggerActionType.TimerStop:return new G.TimerStopExecutor(e,t);case i.TriggerActionType.TimerExtend:return new F.TimerExtendExecutor(e,t);case i.TriggerActionType.TimerShorten:return new U.TimerShortenExecutor(e,t);case i.TriggerActionType.TimerSet:return new _.TimerSetExecutor(e,t);case i.TriggerActionType.GlobalSet:return new T.GlobalVariableExecutor(e,t,!0);case i.TriggerActionType.GlobalClear:return new T.GlobalVariableExecutor(e,t,!1);case i.TriggerActionType.DestroyObject:return new h.DestroyObjectExecutor(e,t);case i.TriggerActionType.AddOneTimeSuperWeapon:return new r.AddSuperWeaponExecutor(e,t,!0);case i.TriggerActionType.AddRepeatingSuperWeapon:return new r.AddSuperWeaponExecutor(e,t,!1);case i.TriggerActionType.AllChangeHouse:return new n.ChangeHouseAllExecutor(e,t);case i.TriggerActionType.ResizePlayerView:return new R.ResizePlayerViewExecutor(e,t);case i.TriggerActionType.PlayAnimAt:return new E.PlayAnimAtExecutor(e,t);case i.TriggerActionType.DetonateWarhead:return new g.DetonateWarheadExecutor(e,t);case i.TriggerActionType.ReshroudMap:return new M.ReshroudMapExecutor(e,t);case i.TriggerActionType.EnableTrigger:return new W.ToggleTriggerExecutor(e,t,!0);case i.TriggerActionType.DisableTrigger:return new W.ToggleTriggerExecutor(e,t,!1);case i.TriggerActionType.CreateRadarEvent:return new c.CreateRadarEventExecutor(e,t);case i.TriggerActionType.LocalSet:return new S.LocalVariableExecutor(e,t,!0);case i.TriggerActionType.LocalClear:return new S.LocalVariableExecutor(e,t,!1);case i.TriggerActionType.SellBuilding:return new k.SellBuildingExecutor(e,t);case i.TriggerActionType.TurnOffBuilding:return new z.TurnOnOffBuildingExecutor(e,t,!1);case i.TriggerActionType.TurnOnBuilding:return new z.TurnOnOffBuildingExecutor(e,t,!0);case i.TriggerActionType.ApplyOneHundredDamage:return new s.ApplyDamageExecutor(e,t,100);case i.TriggerActionType.ForceEnd:return new f.ForceEndExecutor(e,t);case i.TriggerActionType.DestroyTag:return new u.DestroyTagExecutor(e,t);case i.TriggerActionType.SetAmbientStep:return new N.SetAmbientStepExecutor(e,t);case i.TriggerActionType.SetAmbientRate:return new j.SetAmbientRateExecutor(e,t);case i.TriggerActionType.SetAmbientLight:return new B.SetAmbientLightExecutor(e,t);case i.TriggerActionType.NukeStrike:return new C.NukeStrikeExecutor(e,t);case i.TriggerActionType.PlaySoundFxAt:return new x.PlaySoundFxAtExecutor(e,t);case i.TriggerActionType.UnrevealAroundWaypoint:return new K.UnrevealAroundWaypointExecutor(e,t);case i.TriggerActionType.LightningStrike:return new b.LightningStrikeExecutor(e,t);case i.TriggerActionType.TimerText:return new V.TimerTextExecutor(e,t);case i.TriggerActionType.CreateCrate:return new l.CreateCrateExecutor(e,t);case i.TriggerActionType.IronCurtainAt:return new v.IronCurtainExecutor(e,t);case i.TriggerActionType.EvictOccupiers:return new p.EvictOccupiersExecutor(e,t);case i.TriggerActionType.Cheer:return new o.CheerExecutor(e,t);case i.TriggerActionType.StopSoundsAt:return new L.StopSoundFxAtExecutor(e,t);default:throw new Error(`Unhandled action type "${i.TriggerActionType[e.type]}"`)}}})}}})),System.register("game/trigger/condition/AmbientLightCondition",["game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerCondition{constructor(e,t,i){super(e,t),this.type=i,this.threshold=Number(e.params[1])/100}check(e){var t=this.previousAmbient,i=e.mapLightingTrait.getAmbient().ambient;return this.previousAmbient=i,void 0!==t&&t!==i&&("above"===this.type?i>=this.threshold&&tthis.threshold)}},e("AmbientLightCondition",r)}}})),System.register("game/trigger/condition/AnyEventCondition",["game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerCondition{check(e){return!0}},e("AnyEventCondition",r)}}})),System.register("game/trigger/condition/AttackedByAnyCondition",["game/event/EventType","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerCondition{check(e,t){return t.filter((t=>{if(t.type!==i.EventType.ObjectAttacked)return!1;let r=t.target;if(!r.isTechno()||!this.targets.includes(r))return!1;var s=t.attacker?.player;return(!s||!e.alliances.areAllied(s,r.owner)&&s!==r.owner)&&!t.incidental})).map((e=>e.target))}},e("AttackedByAnyCondition",s)}}})),System.register("game/trigger/condition/AttackedByHouseCondition",["game/event/EventType","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerCondition{constructor(e,t){super(e,t),this.houseId=Number(e.params[1])}check(e,t){return t.filter((e=>{if(e.type!==i.EventType.ObjectAttacked)return!1;let t=e.target;if(!t.isTechno()||!this.targets.includes(t))return!1;var r=e.attacker?.player;return r&&(-1===this.houseId||r?.country?.id===this.houseId)})).map((e=>e.target))}},e("AttackedByHouseCondition",s)}}})),System.register("game/trigger/condition/BuildingExistsCondition",["game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerCondition{constructor(e,t,i=!1){super(e,t),this.negate=i,this.objectIndex=Number(e.params[1])}check(){if(!this.player)return!1;for(var e of this.player.buildings)if(e.rules.index===this.objectIndex)return!this.negate;return this.negate}},e("BuildingExistsCondition",r)}}})),System.register("game/trigger/condition/BuildObjectTypeCondition",["game/trigger/TriggerCondition","game/event/EventType"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends i.TriggerCondition{constructor(e,t,i){super(e,t),this.objectType=i,this.objectIndex=Number(e.params[1])}check(e,t){return t.some((e=>e.type===r.EventType.ObjectSpawn&&e.gameObject.type===this.objectType&&e.gameObject.rules.index===this.objectIndex))}},e("BuildObjectTypeCondition",s)}}})),System.register("game/trigger/condition/ComesNearWaypointCondition",["game/event/EventType","game/gameobject/unit/RangeHelper","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=class extends s.TriggerCondition{constructor(e,t){super(e,t)}init(e){super.init(e);var t=Number(this.event.params[1]);this.waypointTile=e.map.getTileAtWaypoint(t),this.waypointTile||console.warn(`No valid location found for waypoint ${t}. Skipping event ${this.getDebugName()}.`)}check(e,t){if(!this.waypointTile||!this.player)return!1;for(var s of t)if(s.type===i.EventType.EnterTile&&s.source.owner===this.player){if(new r.RangeHelper(e.map.tileOccupation).tileDistance(s.target,this.waypointTile)<2)return!0}return!1}},e("ComesNearWaypointCondition",n)}}})),System.register("game/trigger/condition/CreditsBelowCondition",["game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerCondition{constructor(e,t){super(e,t),this.threshold=Number(e.params[1])}check(e,t){return!!this.player&&this.player.creditsthis.threshold}},e("CreditsExceedCondition",r)}}})),System.register("game/trigger/condition/CrossHorizLineCondition",["game/event/EventType","game/gameobject/unit/ZoneType","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=class extends s.TriggerCondition{constructor(e,t){super(e,t),this.houseId=Number(this.event.params[1])}check(e,t){return t.filter((e=>e.type===i.EventType.EnterTile&&e.source.zone!==r.ZoneType.Air&&this.targets.some((t=>t.ry===e.target.ry))&&(-1===this.houseId||e.source.owner.country?.id===this.houseId))).map((e=>e.target))}},e("CrossHorizLineCondition",n)}}})),System.register("game/trigger/condition/CrossVertLineCondition",["game/event/EventType","game/gameobject/unit/ZoneType","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=class extends s.TriggerCondition{constructor(e,t){super(e,t),this.houseId=Number(this.event.params[1])}check(e,t){return t.filter((e=>e.type===i.EventType.EnterTile&&e.source.zone!==r.ZoneType.Air&&this.targets.some((t=>t.rx===e.target.rx))&&(-1===this.houseId||e.source.owner.country?.id===this.houseId))).map((e=>e.target))}},e("CrossVertLineCondition",n)}}})),System.register("game/trigger/condition/DestroyedAllBuildingsCondition",["game/event/EventType","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerCondition{constructor(e,t){super(e,t),this.allDestroyed=!1,this.houseId=Number(e.params[1])}check(e,t){return!!this.allDestroyed||!!t.some((e=>{if(e.type!==i.EventType.ObjectDestroy)return!1;let t=e.target;return!(!t.isBuilding()||t.owner.country?.id!==this.houseId||t.owner.buildings.size)}))&&(this.allDestroyed=!0)}},e("DestroyedAllBuildingsCondition",s)}}})),System.register("game/trigger/condition/DestroyedAllCondition",["game/event/EventType","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerCondition{constructor(e,t){super(e,t),this.allDestroyed=!1,this.houseId=Number(e.params[1])}check(e,t){return!!this.allDestroyed||!!t.some((e=>{if(e.type!==i.EventType.ObjectDestroy)return!1;let t=e.target;return!(!t.isTechno()||t.owner.country?.id!==this.houseId||t.owner.getOwnedObjects(!0).length)}))&&(this.allDestroyed=!0)}},e("DestroyedAllCondition",s)}}})),System.register("game/trigger/condition/DestroyedAllUnitsCondition",["engine/type/ObjectType","game/event/EventType","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=class extends s.TriggerCondition{constructor(e,t){super(e,t),this.allDestroyed=!1,this.houseId=Number(e.params[1])}check(e,t){return!!this.allDestroyed||!!t.some((e=>{if(e.type!==r.EventType.ObjectDestroy)return!1;let t=e.target;return!(!t.isUnit()||t.owner.country?.id!==this.houseId||this.hasUnitsLeft(t.owner))}))&&(this.allDestroyed=!0)}hasUnitsLeft(e){var t;for(t of[i.ObjectType.Aircraft,i.ObjectType.Vehicle,i.ObjectType.Infantry])if(e.getOwnedObjectsByType(t,!0).length)return!0;return!1}},e("DestroyedAllUnitsCondition",n)}}})),System.register("game/trigger/condition/DestroyedAllUnitsLandCondition",["engine/type/ObjectType","game/event/EventType","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=class extends s.TriggerCondition{constructor(e,t){super(e,t),this.allDestroyed=!1,this.houseId=Number(e.params[1])}check(e,t){return!!this.allDestroyed||!!t.some((e=>{if(e.type!==r.EventType.ObjectDestroy)return!1;let t=e.target;return!(!t.isUnit()||t.owner.country?.id!==this.houseId||this.hasLandUnitsLeft(t.owner))}))&&(this.allDestroyed=!0)}hasLandUnitsLeft(e){var t;for(t of[i.ObjectType.Vehicle,i.ObjectType.Infantry])if(e.getOwnedObjectsByType(t,!0).filter((e=>!e.rules.naval)).length)return!0;return!1}},e("DestroyedAllUnitsLandCondition",n)}}})),System.register("game/trigger/condition/DestroyedAllUnitsNavalCondition",["engine/type/ObjectType","game/event/EventType","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=class extends s.TriggerCondition{constructor(e,t){super(e,t),this.allDestroyed=!1,this.houseId=Number(e.params[1])}check(e,t){return!!this.allDestroyed||!!t.some((e=>{if(e.type!==r.EventType.ObjectDestroy)return!1;let t=e.target;return!(!t.isVehicle()||t.owner.country?.id!==this.houseId||t.owner.getOwnedObjectsByType(i.ObjectType.Vehicle,!0).filter((e=>e.rules.naval)).length)}))&&(this.allDestroyed=!0)}},e("DestroyedAllUnitsNavalCondition",n)}}})),System.register("game/trigger/condition/DestroyedBridgeCondition",["game/event/EventType","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerCondition{check(e,t){return t.filter((t=>{if(t.type!==i.EventType.ObjectDestroy)return!1;let r=t.target;if(!r.isOverlay()||!r.isBridge())return!1;var s=r.bridgeTrait?.bridgeSpec;if(!s)return!1;return e.map.bridges.findAllBridgeTiles(s).find((e=>this.targets.includes(e)))})).map((e=>e.target.tile))}},e("DestroyedBridgeCondition",s)}}})),System.register("game/trigger/condition/DestroyedBuildingsCondition",["game/event/EventType","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerCondition{constructor(e,t){super(e,t),this.count=0,this.threshold=Number(e.params[1])}check(e,t){if(!this.player)return!1;if(this.count>=this.threshold)return!0;for(var r of t)if(r.type===i.EventType.ObjectDestroy){let e=r.target;e.isBuilding()&&e.owner.country?.id===this.houseId&&this.count++}return this.count>=this.threshold}},e("DestroyedBuildingsCondition",s)}}})),System.register("game/trigger/condition/DestroyedByAnyCondition",["game/event/EventType","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerCondition{check(e,t){return t.filter((t=>{if(t.type!==i.EventType.ObjectDestroy)return!1;let r=t.target;if(!r.isTechno()||!this.targets.includes(r))return!1;var s=t.attackerInfo?.player;return(!s||!e.alliances.areAllied(s,r.owner)&&s!==r.owner)&&!t.incidental})).map((e=>e.target))}},e("DestroyedByAnyCondition",s)}}})),System.register("game/trigger/condition/DestroyedOrCapturedCondition",["game/event/EventType","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerCondition{check(e,t){return t.filter((e=>{if(e.type!==i.EventType.ObjectDestroy&&e.type!==i.EventType.ObjectOwnerChange)return!1;let t=e.target;return!(!t.isTechno()||!this.targets.includes(t))})).map((e=>e.target))}},e("DestroyedOrCapturedCondition",s)}}})),System.register("game/trigger/condition/DestroyedOrCapturedOrInfiltratedCondition",["game/event/EventType","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerCondition{constructor(){super(...arguments),this.eventsFilter=[i.EventType.ObjectDestroy,i.EventType.ObjectOwnerChange,i.EventType.BuildingInfiltration]}check(e,t){return t.filter((e=>{if(!this.eventsFilter.includes(e.type))return!1;let t=e.target;return!(!t.isTechno()||!this.targets.includes(t))})).map((e=>e.target))}},e("DestroyedOrCapturedOrInfiltratedCondition",s)}}})),System.register("game/trigger/condition/DestroyedUnitsCondition",["game/event/EventType","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerCondition{constructor(e,t){super(e,t),this.count=0,this.threshold=Number(e.params[1])}check(e,t){if(!this.player)return!1;if(this.count>=this.threshold)return!0;for(var r of t)if(r.type===i.EventType.ObjectDestroy){let e=r.target;e.isUnit()&&e.owner.country?.id===this.houseId&&this.count++}return this.count>=this.threshold}},e("DestroyedUnitsCondition",s)}}})),System.register("game/trigger/condition/ElapsedScenarioTimeCondition",["game/GameSpeed","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerCondition{constructor(e,t){super(e,t),this.timerTicks=Number(this.event.params[1])*i.GameSpeed.BASE_TICKS_PER_SECOND}check(e){return e.currentTick>this.timerTicks}},e("ElapsedScenarioTimeCondition",s)}}})),System.register("game/trigger/condition/ElapsedTimeCondition",["game/GameSpeed","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerCondition{constructor(e,t){super(e,t),this.elapsedTicks=0,this.timerTicks=Number(this.event.params[1])*i.GameSpeed.BASE_TICKS_PER_SECOND}check(e){return this.elapsedTicks++>this.timerTicks}reset(){this.elapsedTicks=0}},e("ElapsedTimeCondition",s)}}})),System.register("game/trigger/condition/EnteredByCondition",["game/event/EventType","game/gameobject/unit/ZoneType","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=class extends s.TriggerCondition{constructor(e,t){super(e,t),this.houseId=Number(this.event.params[1])}check(e,t){return t.filter((e=>(e.type===i.EventType.EnterObject||e.type===i.EventType.EnterTile)&&this.targets.includes(e.target)&&(e.type!==i.EventType.EnterTile||e.source.zone!==r.ZoneType.Air)&&(-1===this.houseId||e.source.owner.country?.id===this.houseId))).map((e=>e.target))}},e("EnteredByCondition",n)}}})),System.register("game/trigger/condition/GlobalVariableCondition",["game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerCondition{constructor(e,t,i){super(e,t),this.value=i,this.blocking=!0,this.variableIdx=Number(e.params[1])}check(e){return e.triggers.getGlobalVariable(this.variableIdx)===this.value}},e("GlobalVariableCondition",r)}}})),System.register("game/trigger/condition/HealthBelowAnyCondition",["game/event/EventType","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerCondition{constructor(e,t,i){super(e,t),this.threshold=i}check(e,t){return t.filter((e=>{if(e.type!==i.EventType.HealthChange)return!1;let t=e.target;return!(!t.isTechno()||!this.targets.includes(t))&&e.currentHealththis.threshold})).map((e=>e.target))}},e("HealthBelowAnyCondition",s)}}})),System.register("game/trigger/condition/HealthBelowCombatCondition",["game/event/EventType","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerCondition{constructor(e,t,i){super(e,t),this.threshold=i}check(e,t){return t.filter((e=>{if(e.type!==i.EventType.InflictDamage)return!1;let t=e.target;return!(!t.isTechno()||!this.targets.includes(t))&&e.currentHealththis.threshold})).map((e=>e.target))}},e("HealthBelowCombatCondition",s)}}})),System.register("game/trigger/condition/LocalVariableCondition",["game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerCondition{constructor(e,t,i){super(e,t),this.value=i,this.blocking=!0,this.variableIdx=Number(e.params[1])}check(e){return e.triggers.getLocalVariable(this.variableIdx)===this.value}},e("LocalVariableCondition",r)}}})),System.register("game/trigger/condition/LowPowerCondition",["game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerCondition{constructor(e,t){super(e,t),this.houseId=Number(this.event.params[1])}init(e){super.init(e),this.targetPlayer=e.getAllPlayers().find((e=>e.country?.id===this.houseId))}check(){return!!this.targetPlayer?.powerTrait?.isLowPower()}},e("LowPowerCondition",r)}}})),System.register("game/trigger/condition/NoEventCondition",["game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerCondition{check(e){return!1}},e("NoEventCondition",r)}}})),System.register("game/trigger/condition/NoFactoriesLeftCondition",["game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.TriggerCondition{check(){if(!this.player)return!1;for(var e of this.player.buildings)if(e.factoryTrait)return!1;return!0}},e("NoFactoriesLeftCondition",r)}}})),System.register("game/trigger/condition/PickupCrateAnyCondition",["game/event/EventType","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerCondition{check(e,t){return t.some((e=>e.type===i.EventType.CratePickup))}},e("PickupCrateAnyCondition",s)}}})),System.register("game/trigger/condition/PickupCrateCondition",["game/event/EventType","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerCondition{check(e,t){return t.filter((e=>e.type===i.EventType.CratePickup&&this.targets.includes(e.source))).map((e=>e.source))}},e("PickupCrateCondition",s)}}})),System.register("game/trigger/condition/RandomDelayCondition",["game/GameSpeed","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerCondition{constructor(){super(...arguments),this.elapsedTicks=0}check(e){return this.timerTicks??(this.timerTicks=Math.floor(e.generateRandomInt(50,150)/100*Number(this.event.params[1]))*i.GameSpeed.BASE_TICKS_PER_SECOND),this.elapsedTicks++>this.timerTicks}reset(){this.timerTicks=void 0,this.elapsedTicks=0}},e("RandomDelayCondition",s)}}})),System.register("game/trigger/condition/SpiedByCondition",["game/event/EventType","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerCondition{constructor(e,t){super(e,t),this.houseId=Number(this.event.params[1])}check(e,t){return t.filter((e=>e.type===i.EventType.BuildingInfiltration&&this.targets.includes(e.target)&&(-1===this.houseId||e.source.owner.country?.id===this.houseId))).map((e=>e.target))}},e("SpiedByCondition",s)}}})),System.register("game/trigger/condition/SpyEnteringAsHouseCondition",["game/event/EventType","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerCondition{constructor(e,t){super(e,t),this.houseId=Number(e.params[1])}check(e,t){return t.filter((e=>{if(e.type!==i.EventType.BuildingInfiltration)return!1;var t=e.target;return!!this.targets.includes(t)&&(-1===this.houseId||e.source.disguiseTrait?.getDisguise()?.owner?.country?.id===this.houseId)})).map((e=>e.target))}},e("SpyEnteringAsHouseCondition",s)}}})),System.register("game/trigger/condition/SpyEnteringAsInfantryCondition",["game/event/EventType","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerCondition{constructor(e,t){super(e,t),this.infantryIdx=Number(e.params[1])}check(e,t){return t.filter((e=>{if(e.type!==i.EventType.BuildingInfiltration)return!1;var t=e.target;return!!this.targets.includes(t)&&e.source.disguiseTrait?.getDisguise()?.rules.index===this.infantryIdx})).map((e=>e.target))}},e("SpyEnteringAsInfantryCondition",s)}}})),System.register("game/trigger/condition/TimerExpiredCondition",["game/event/EventType","game/trigger/TriggerCondition"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.TriggerCondition{check(e,t){return t.some((e=>e.type===i.EventType.TimerExpire))}},e("TimerExpiredCondition",s)}}})),System.register("game/trigger/TriggerConditionFactory",["data/map/trigger/TriggerEventType","engine/type/ObjectType","game/trigger/condition/AmbientLightCondition","game/trigger/condition/AnyEventCondition","game/trigger/condition/AttackedByAnyCondition","game/trigger/condition/AttackedByHouseCondition","game/trigger/condition/BuildingExistsCondition","game/trigger/condition/BuildObjectTypeCondition","game/trigger/condition/ComesNearWaypointCondition","game/trigger/condition/CreditsBelowCondition","game/trigger/condition/CreditsExceedCondition","game/trigger/condition/CrossHorizLineCondition","game/trigger/condition/CrossVertLineCondition","game/trigger/condition/DestroyedAllBuildingsCondition","game/trigger/condition/DestroyedAllCondition","game/trigger/condition/DestroyedAllUnitsCondition","game/trigger/condition/DestroyedAllUnitsLandCondition","game/trigger/condition/DestroyedAllUnitsNavalCondition","game/trigger/condition/DestroyedBridgeCondition","game/trigger/condition/DestroyedBuildingsCondition","game/trigger/condition/DestroyedByAnyCondition","game/trigger/condition/DestroyedOrCapturedCondition","game/trigger/condition/DestroyedOrCapturedOrInfiltratedCondition","game/trigger/condition/DestroyedUnitsCondition","game/trigger/condition/ElapsedScenarioTimeCondition","game/trigger/condition/ElapsedTimeCondition","game/trigger/condition/EnteredByCondition","game/trigger/condition/GlobalVariableCondition","game/trigger/condition/HealthBelowAnyCondition","game/trigger/condition/HealthBelowCombatCondition","game/trigger/condition/LocalVariableCondition","game/trigger/condition/LowPowerCondition","game/trigger/condition/NoEventCondition","game/trigger/condition/NoFactoriesLeftCondition","game/trigger/condition/PickupCrateAnyCondition","game/trigger/condition/PickupCrateCondition","game/trigger/condition/RandomDelayCondition","game/trigger/condition/SpiedByCondition","game/trigger/condition/SpyEnteringAsHouseCondition","game/trigger/condition/SpyEnteringAsInfantryCondition","game/trigger/condition/TimerExpiredCondition"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p,m,f,y,T,v,b,S,w,C,E,x,O,A,M,R,P,I,k,B,j,N,L,D,F,_,U,H,G;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e},function(e){m=e},function(e){f=e},function(e){y=e},function(e){T=e},function(e){v=e},function(e){b=e},function(e){S=e},function(e){w=e},function(e){C=e},function(e){E=e},function(e){x=e},function(e){O=e},function(e){A=e},function(e){M=e},function(e){R=e},function(e){P=e},function(e){I=e},function(e){k=e},function(e){B=e},function(e){j=e},function(e){N=e},function(e){L=e},function(e){D=e},function(e){F=e},function(e){_=e},function(e){U=e},function(e){H=e},function(e){G=e}],execute:function(){e("TriggerConditionFactory",class{create(e,t){switch(e.type){case i.TriggerEventType.NoEvent:return new j.NoEventCondition(e,t);case i.TriggerEventType.EnteredBy:return new M.EnteredByCondition(e,t);case i.TriggerEventType.SpiedBy:return new _.SpiedByCondition(e,t);case i.TriggerEventType.AttackedByAny:return new a.AttackedByAnyCondition(e,t);case i.TriggerEventType.DestroyedByAny:return new w.DestroyedByAnyCondition(e,t);case i.TriggerEventType.AnyEvent:return new n.AnyEventCondition(e,t);case i.TriggerEventType.DestroyedAllUnits:return new y.DestroyedAllUnitsCondition(e,t);case i.TriggerEventType.DestroyedAllBuildings:return new m.DestroyedAllBuildingsCondition(e,t);case i.TriggerEventType.DestroyedAll:return new f.DestroyedAllCondition(e,t);case i.TriggerEventType.CreditsExceed:return new d.CreditsExceedCondition(e,t);case i.TriggerEventType.ElapsedTime:return new A.ElapsedTimeCondition(e,t);case i.TriggerEventType.MissionTimerExpired:return new G.TimerExpiredCondition(e,t);case i.TriggerEventType.DestroyedBuildings:return new S.DestroyedBuildingsCondition(e,t);case i.TriggerEventType.DestroyedUnits:return new x.DestroyedUnitsCondition(e,t);case i.TriggerEventType.NoFactoriesLeft:return new N.NoFactoriesLeftCondition(e,t);case i.TriggerEventType.BuildBuilding:return new c.BuildObjectTypeCondition(e,t,r.ObjectType.Building);case i.TriggerEventType.BuildUnit:return new c.BuildObjectTypeCondition(e,t,r.ObjectType.Vehicle);case i.TriggerEventType.BuildInfantry:return new c.BuildObjectTypeCondition(e,t,r.ObjectType.Infantry);case i.TriggerEventType.BuildAircraft:return new c.BuildObjectTypeCondition(e,t,r.ObjectType.Aircraft);case i.TriggerEventType.CrossesHorizontalLine:return new g.CrossHorizLineCondition(e,t);case i.TriggerEventType.CrossesVerticalLine:return new p.CrossVertLineCondition(e,t);case i.TriggerEventType.GlobalIsSet:return new R.GlobalVariableCondition(e,t,!0);case i.TriggerEventType.GlobalIsCleared:return new R.GlobalVariableCondition(e,t,!1);case i.TriggerEventType.DestroyedOrCaptured:return new C.DestroyedOrCapturedCondition(e,t);case i.TriggerEventType.LowPower:return new B.LowPowerCondition(e,t);case i.TriggerEventType.DestroyedBridge:return new b.DestroyedBridgeCondition(e,t);case i.TriggerEventType.BuildingExists:return new l.BuildingExistsCondition(e,t);case i.TriggerEventType.ComesNearWaypoint:return new h.ComesNearWaypointCondition(e,t);case i.TriggerEventType.LocalIsSet:return new k.LocalVariableCondition(e,t,!0);case i.TriggerEventType.LocalIsCleared:return new k.LocalVariableCondition(e,t,!1);case i.TriggerEventType.FirstDamagedCombat:return new I.HealthBelowCombatCondition(e,t,100);case i.TriggerEventType.HalfHealthCombat:return new I.HealthBelowCombatCondition(e,t,50);case i.TriggerEventType.QuarterHealthCombat:return new I.HealthBelowCombatCondition(e,t,25);case i.TriggerEventType.FirstDamagedAny:return new P.HealthBelowAnyCondition(e,t,100);case i.TriggerEventType.HalfHealthAny:return new P.HealthBelowAnyCondition(e,t,50);case i.TriggerEventType.QuarterHealthAny:return new P.HealthBelowAnyCondition(e,t,25);case i.TriggerEventType.AttackedByHouse:return new o.AttackedByHouseCondition(e,t);case i.TriggerEventType.AmbientLightBelow:return new s.AmbientLightCondition(e,t,"below");case i.TriggerEventType.AmbientLightAbove:return new s.AmbientLightCondition(e,t,"above");case i.TriggerEventType.ElapsedScenarioTime:return new O.ElapsedScenarioTimeCondition(e,t);case i.TriggerEventType.DestroyedOrCapturedOrInfiltrated:return new E.DestroyedOrCapturedOrInfiltratedCondition(e,t);case i.TriggerEventType.PickupCrate:return new D.PickupCrateCondition(e,t);case i.TriggerEventType.PickupCrateAny:return new L.PickupCrateAnyCondition(e,t);case i.TriggerEventType.RandomDelay:return new F.RandomDelayCondition(e,t);case i.TriggerEventType.CreditsBelow:return new u.CreditsBelowCondition(e,t);case i.TriggerEventType.SpyEnteringAsHouse:return new U.SpyEnteringAsHouseCondition(e,t);case i.TriggerEventType.SpyEnteringAsInfantry:return new H.SpyEnteringAsInfantryCondition(e,t);case i.TriggerEventType.DestroyedAllUnitsNaval:return new v.DestroyedAllUnitsNavalCondition(e,t);case i.TriggerEventType.DestroyedAllUnitsLand:return new T.DestroyedAllUnitsLandCondition(e,t);case i.TriggerEventType.BuildingNotExists:return new l.BuildingExistsCondition(e,t,!0);default:throw new Error(`Unhandled trigger event type "${i.TriggerEventType[e.type]}"`)}}})}}})),System.register("game/trigger/TriggerManager",["data/map/tag/TagRepeatType","game/trigger/TriggerExecutorFactory","game/trigger/TriggerConditionFactory","util/disposable/CompositeDisposable","data/map/Variable"],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){e("TriggerManager",class{constructor(){this.disposables=new n.CompositeDisposable,this.triggerInstances=new Map,this.targetsByTag=new Map,this.conditionFactory=new s.TriggerConditionFactory,this.executorFactory=new r.TriggerExecutorFactory,this.pendingGameEvents=[],this.globalVariables=new Map,this.localVariables=new Map}init(e){var t,i,r,s,n=e.map.getInitialMapObjects().technos;for(let t of n)if(t.tag){let i=this.targetsByTag.get(t.tag);i||(i=[],this.targetsByTag.set(t.tag,i));var a=e.map.tiles.getByMapCoords(t.rx,t.ry);!a||(a=e.map.getObjectsOnTile(a).find((e=>e.name===t.name&&e.type===t.type)))&&i.push(a)}for(t of e.map.getCellTags()){var o=e.map.tiles.getByMapCoords(t.coords.x,t.coords.y);if(o){let e=this.targetsByTag.get(t.tagId);e||(e=[],this.targetsByTag.set(t.tagId,e)),e.push(o)}else console.warn(`CellTag out of bounds at (${t.coords.x}, ${t.coords.y}). Skipping.`)}for([i,r]of e.map.getVariables())this.localVariables.set(i,r.clone());for(s of e.map.getTriggers())this.triggerInstances.set(s.id,this.createTriggerInstance(s,e));this.disposables.add(e.events.subscribe((e=>this.pendingGameEvents.push(e))))}createTriggerInstance(e,t){let r=this.targetsByTag.get(e.tag.id)??[];return{trigger:e,conditions:e.events.map((i=>{let s=this.conditionFactory.create(i,e);return s.setTargets(r),s.init(t),s})).sort(((e,t)=>Number(t.blocking)-Number(e.blocking))),targets:r,remainingTargets:new Set(e.tag.repeatType===i.TagRepeatType.OnceAll?r:[]),disabled:e.disabled,finished:!1}}update(e){var t,r=this.pendingGameEvents.splice(0,this.pendingGameEvents.length);for(t of this.triggerInstances.values())if(!t.finished&&!t.disabled){let l=!0,c=[];for(var s of t.conditions){var n=s.check(e,r);if("boolean"==typeof n?n||(l=!1):n.length?c.push(...n):l=!1,s.blocking&&!l)break}if(l){var a=t.trigger;t.conditions.forEach((e=>e.reset?.()));let r=[];if(a.tag.repeatType===i.TagRepeatType.OnceAll){for(var o of c)t.remainingTargets.delete(o);if(t.remainingTargets.size)continue;r=c.length?[c[c.length-1]]:[]}else r=t.targets;this.executeActions(a,r,e),a.tag.repeatType!==i.TagRepeatType.Repeat&&(t.finished=!0)}}}executeActions(e,t,i){for(var r of e.actions){this.executorFactory.create(r,e).execute(i,t)}}setTriggerEnabled(e,t){let i=this.triggerInstances.get(e);i&&(i.disabled=!t)}forceTrigger(e,t){var i=this.triggerInstances.get(e);i&&this.executeActions(i.trigger,i.targets,t)}destroyTrigger(e){this.triggerInstances.delete(e)}destroyTag(e){let t=[];for(var[i,r]of this.triggerInstances)r.trigger.tag.id===e&&t.push(i);for(var s of t)this.destroyTrigger(s)}getGlobalVariable(e){return!!this.globalVariables.get(e)?.value}toggleGlobalVariable(e,t){let i=this.globalVariables.get(e);void 0===i?this.globalVariables.set(e,new a.Variable("No name",t)):i.value=t}getLocalVariable(e){return!!this.localVariables.get(e)?.value}toggleLocalVariable(e,t){let i=this.localVariables.get(e);void 0===i?this.localVariables.set(e,new a.Variable("No name",t)):i.value=t}dispose(){this.disposables.dispose()}})}}})),System.register("game/trait/MapLightingTrait",["data/map/MapLighting","game/GameSpeed","util/event","game/trait/interface/NotifyTick"],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e}],execute:function(){a=class{constructor(e,t){this.mapLighting=new i.MapLighting,this._onChange=new s.EventDispatcher,this.ambientChangeRate=e.ambientChangeRate,this.ambientChangeStep=e.ambientChangeStep,t&&this.mapLighting.copy(t)}get onChange(){return this._onChange.asEvent()}setAmbientChangeRate(e){this.ambientChangeRate=e}setAmbientChangeStep(e){this.ambientChangeStep=e}setTargetAmbientIntensity(e){this.targetAmbient=e}getAmbient(){return this.mapLighting}[n.NotifyTick.onTick](){var e;void 0!==this.targetAmbient&&(this.ambientUpdateTicks??(this.ambientUpdateTicks=Math.floor(60*r.GameSpeed.BASE_TICKS_PER_SECOND*this.ambientChangeRate)),this.ambientUpdateTicks<=0?(this.ambientUpdateTicks=void 0,e=this.mapLighting.ambient,(e=this.targetAmbient-e)?(e=Math.sign(e)*Math.min(this.ambientChangeStep,Math.abs(e)),this.mapLighting.ambient+=e,this._onChange.dispatch(this,this.mapLighting)):this.targetAmbient=void 0):this.ambientUpdateTicks--)}},e("MapLightingTrait",a)}}})),System.register("game/event/TimerExpireEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("TimerExpireEvent",class{constructor(e){this.target=e,this.type=i.EventType.TimerExpire}})}}})),System.register("game/CountdownTimer",["game/event/TimerExpireEvent","game/GameSpeed"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("CountdownTimer",class{constructor(){this.ticks=0,this.running=!1}getSeconds(){return Math.floor(this.ticks/r.GameSpeed.BASE_TICKS_PER_SECOND)}setSeconds(e){this.ticks=Math.max(0,Math.floor(r.GameSpeed.BASE_TICKS_PER_SECOND*e))}addSeconds(e){this.ticks=Math.max(0,this.ticks+Math.floor(r.GameSpeed.BASE_TICKS_PER_SECOND*e))}start(){this.running=!0}stop(){this.running=!1}isRunning(){return this.running}update(e){this.running&&(0e.credits=this.gameOpts.credits)),this.rules.mpDialogSettings.alliesAllowed&&this.createInitialTeams()}start(){this.status=$.Started,this.currentTick=0,this.currentTime=0,this.botManager.init(this),this.triggers.init(this)}createInitialTeams(){for(let s=0;se?.teamId===s&&e.countryId!==U.OBS_COUNTRY_ID)).map((e=>r.isHumanPlayerInfo(e)?e.name:this.getAiPlayerName(e)));if(1!m.isBetween(this.rules.getObject(e,s.ObjectType.Vehicle).techLevel,0,this.rules.mpDialogSettings.techLevel))),t=this.map.getInitialMapObjects();this.createInitialMapTerrains(t.terrains,e),this.createInitialMapOverlays(t.overlays,e),this.createInitialMapSmudges(t.smudges),this.createInitialMapTechnos(t.technos)}createInitialMapTerrains(e,t){for(var i of e){var r,n,a=i.name;this.validateMapObjectRulesAndArt(a,s.ObjectType.Terrain)&&((r=this.map.tiles.getByMapCoords(i.rx,i.ry))?(n=this.rules.getObject(a,s.ObjectType.Terrain),t&&n.spawnsTiberium||(a=this.createObject(s.ObjectType.Terrain,a),this.spawnObject(a,r))):console.warn(`Invalid map object location (${i.rx},${i.ry})`,i))}}createInitialMapOverlays(e,t){let i=new Map,r=new Map;for(var n of e){var o=this.rules.getOverlayName(n.id);if(this.validateMapObjectRulesAndArt(o,s.ObjectType.Overlay)){let e=this.createObject(s.ObjectType.Overlay,o);e.overlayId=n.id,e.value=n.value;let c=n.rx,h=n.ry;e.isBridge()&&e.isHighBridge()&&(e.position.tileElevation=4,c+=e.isXBridge()?0:-1,h+=e.isXBridge()?-1:0);var l=this.map.tiles.getByMapCoords(c,h);if(l)if(e.rules.tiberium&&(o=k.OreOverlayTypes.getOverlayTibType(n.id),void 0!==(o=a.OreSpread.calculateOverlayId(o,l))&&o!==n.id&&(e.dispose(),e=this.createObject(s.ObjectType.Overlay,this.rules.getOverlayName(o)),e.overlayId=o,e.value=n.value)),p.BridgeOverlayTypes.isLowBridge(n.id))p.BridgeOverlayTypes.isBridgePlaceholder(n.id)||(i.set(l,n.value),1===n.value?r.set(l,e):e.dispose());else{if(e.isTiberium()){if(![I.OverlayTibType.Ore,I.OverlayTibType.Gems,I.OverlayTibType.Vinifera].includes(k.OreOverlayTypes.getOverlayTibType(e.overlayId))){console.warn(`Found unsupported TS tiberium overlay ${e.overlayId} @${l.rx},${l.ry}. Skipping.`);continue}if(this.map.getObjectsOnTile(l).find((e=>e.isTerrain()))){e.dispose();continue}}t&&e.isTiberium()?e.dispose():this.spawnObject(e,l)}else console.warn(`Invalid map object location (${c},${h})`,n),e.dispose()}}for(var[c,h]of r){var u=h.isXBridge(),d=this.map.tiles.getByMapCoords(c.rx+(u?0:-1),c.ry+(u?-1:0));u=this.map.tiles.getByMapCoords(c.rx+(u?0:1),c.ry+(u?1:0));d&&u&&(0===i.get(d)||2===i.get(u))?(h.value=0,this.spawnObject(h,d)):(h.dispose(),console.warn(`Invalid bridge segment @${c.rx},${c.ry}. Skipping.`))}var g,m=[...r.keys()].filter((e=>this.map.bridges.getPieceAtTile(e)?.headType!==L.BridgeHeadType.None)),f=this.map.bridges.findMapHighBridgeHeadTiles();let y=this.map.bridges.findBridgeSpecsForHeadTiles([...m,...f]);for(g of y)for(var T of this.map.bridges.findBridgePieces(g))T.obj.bridgeTrait.bridgeSpec=g;f=y.map((e=>this.map.bridges.findAllBridgeTiles(e))).flat();var v,b=p.BridgeOverlayTypes.bridgePlaceholderIds[0],S=this.rules.getOverlayName(b);for(v of f){let e=this.createObject(s.ObjectType.Overlay,S);e.overlayId=b,this.spawnObject(e,v)}}createInitialMapSmudges(e){for(var t of e){var i=t.name,r=this.map.tiles.getByMapCoords(t.rx,t.ry);r?(i=this.createObject(s.ObjectType.Smudge,i),this.spawnObject(i,r)):console.warn(`Invalid map object location (${t.rx},${t.ry})`,t)}}createInitialMapTechnos(e){let t=new Map(this.playerList.getAll().filter((e=>!!e.country)).map((e=>[e.country.name,e]))),i=this.map.getTags();for(let a of e){var r=a.name;if(this.validateMapObjectRulesAndArt(r,a.type)){var s=this.map.tiles.getByMapCoords(a.rx,a.ry);if(s){var n=t.get(a.owner);if(n){if(n.isNeutral){let e=this.createObject(a.type,r);a.tag&&(e.tag=i.find((e=>e.id===a.tag))),e.healthTrait.health=a.health/256*100;let t=!1;if(!e.healthTrait.health){if(!e.isBuilding()||!e.rules.leaveRubble){e.dispose();continue}t=!0}if(a.isInfantry()||a.isVehicle()||a.isAircraft()){e.direction=(-a.direction/256*360+360)%360,a.isInfantry()&&(e.position.subCell=a.subCell);let t=!1;a.onBridge&&(void 0===s.onBridgeLandType?console.warn(`Cannot place unit "${a.name}" on a bridge because no bridge was found at ${s.rx}, `+s.ry):t=!0),e.onBridge=t,e.zone=H.getZoneType(t?s.onBridgeLandType:s.landType),t&&(e.position.tileElevation+=this.map.tileOccupation.getBridgeOnTile(s)?.tileElevation??0),a.veterancy&&e.veteranTrait?.setRelativeXP(a.veterancy)}else e.poweredTrait?.setTurnedOn(a.poweredOn);this.changeObjectOwner(e,n),this.spawnObject(e,s),t&&this.destroyObject(e,void 0,!0)}}else console.warn(`Invalid owner "${a.owner}" for map object`,a)}else console.warn(`Invalid map object location (${a.rx},${a.ry})`,a)}}}validateMapObjectRulesAndArt(e,t){return this.rules.hasObject(e,t)?!!this.art.hasObject(e,t)||(console.warn(`Map object '${e}' has no art section. Skipping.`),!1):(console.warn(`Map object '${e}' has no rules section. Skipping.`),!1)}createPlayerInitialUnits(){let e=this.playerList.getCombatants().map((e=>e.country));var t=[...this.rules.infantryRules.values(),...this.rules.vehicleRules.values()].filter((t=>t.allowedToStartInMultiplayer&&!t.naval&&-1!==t.techLevel&&t.techLevel<=this.rules.mpDialogSettings.techLevel&&!this.rules.general.baseUnit.includes(t.name)&&e.some((e=>t.isAvailableTo(e)&&t.hasOwner(e)))));for(let e of this.playerList.getCombatants()){var i=this.map.startingLocations[e.startLocation],r=this.map.tiles.getByMapCoords(i.x,i.y);let m=this.rules.general.baseUnit.find((t=>{let i=this.rules.getObject(t,s.ObjectType.Vehicle);return i.isAvailableTo(e.country)&&i.hasOwner(e.country)}));if(!m)throw new Error("No suitable MCV found for player country "+e.country);i=this.rules.getObject(m,s.ObjectType.Vehicle),i=this.createUnitForPlayer(i,e),this.spawnObject(i,r);let f=h.StartingUnitsGenerator.generate(this.gameOpts.unitCount,[...this.rules.vehicleRules.keys()],t,e.country);var n,a,l;this.gameModeType===v.GameModeType.Unholy&&f.push(...this.rules.general.baseUnit.filter((e=>e!==m)).map((e=>({name:e,type:s.ObjectType.Vehicle,count:1}))));let y=[],T=!1,b=new u.CardinalTileFinder(this.map.tiles,this.map.mapBounds,r,4,4,(e=>!this.map.getGroundObjectsOnTile(e).find((e=>!(e.isSmudge()||e.isOverlay()&&e.isTiberium())))&&0!this.map.getGroundObjectsOnTile(e).find((e=>!(e.isSmudge()||e.isOverlay()&&e.isTiberium())))&&0{t[C.NotifySpawn.onSpawn](e,this)})),this.events.dispatch(new P.ObjectSpawnEvent(e))}doUnspawnObject(e){var t=e.tile;e.isProjectile()||e.isDebris()||this.map.tileOccupation.unoccupyTileRange(t,e),e.art.canHideThings&&this.map.tileOcclusion.removeOccluder(e),e.isTechno()&&(this.unitSelection.cleanupUnit(e),this.map.technosByTile.remove(e)),this.world.removeObject(e),this.updatableObjects.delete(e),e.onUnspawn(this),this.traits.filter(E.NotifyUnspawn).forEach((t=>{t[E.NotifyUnspawn.onUnspawn](e,this)})),this.events.dispatch(new A.ObjectUnspawnEvent(e))}destroyObject(e,t,i=!1,r=!1){if(e.isDestroyed)throw new Error(`Object with ID "${e.id}" is already destroyed`);if(e.isTechno()){let i=e.mindControllableTrait?.getOriginalOwner()??e.owner;!t||e.isBuilding()&&!i.isCombatant()||(t.player.addUnitsKilled(e.type,1),t.player===i||this.alliances.areAllied(t.player,i)||(t.player.score+=e.rules.points)),i.isNeutral||i.addUnitsLost(e.type,1)}if(e.isDestroyed=!0,e.healthTrait&&(e.healthTrait.health=0),e.onDestroy(this,t,i),this.traits.filter(w.NotifyDestroy).forEach((i=>{i[w.NotifyDestroy.onDestroy](e,this,t)})),t?.obj?.traits.filter(M.NotifyTargetDestroy).forEach((i=>{i[M.NotifyTargetDestroy.onDestroy](t.obj,e,t.weapon,this)})),this.events.dispatch(new y.ObjectDestroyEvent(e,t,r)),e.isBuilding()&&e.rules.leaveRubble&&e.deathType!==N.DeathType.Temporal){e.owner.removeOwnedObject(e),this.unitSelection.cleanupUnit(e);var s=this.map.tileOccupation.calculateTilesForGameObject(e.tile,e);this.map.terrain.invalidateTiles(s),e.art.canHideThings&&this.map.tileOcclusion.removeOccluder(e),this.updatableObjects.delete(e),e.onUnspawn(this),this.traits.filter(E.NotifyUnspawn).forEach((t=>{t[E.NotifyUnspawn.onUnspawn](e,this)})),this.events.dispatch(new A.ObjectUnspawnEvent(e))}else if(e.isSpawned)this.unspawnObject(e);else if(e.isTechno()&&e.owner){if(!e.limboData)throw new Error(`Object with ID "${e.id}" should be in limbo but has no limboData`);e.owner.removeOwnedObject(e)}e.dispose()}getObjectById(e){return this.world.getObjectById(e)}changeObjectOwner(e,t){const i=e.owner;i&&i.removeOwnedObject(e),t.addOwnedObject(e),i&&i!==t&&(this.traits.filter(x.NotifyOwnerChange).forEach((t=>{t[x.NotifyOwnerChange.onChange](e,i,this)})),e.onOwnerChange(i,this),this.events.dispatch(new O.ObjectOwnerChangeEvent(e,i)))}addObjectTrait(e,t){e.addTrait(t),this.traits.filter(q.NotifyObjectTraitAdd).forEach((i=>{i[q.NotifyObjectTraitAdd.onAdd](e,t,this)}))}onAllianceChange(e,t,i){this.events.dispatch(new F.AllianceChangeEvent(e,i?F.AllianceEventType.Formed:F.AllianceEventType.Broken,t)),this.traits.filter(_.NotifyAllianceChange).forEach((t=>{t[_.NotifyAllianceChange.onChange](e,i,this)}))}update(){if(this.status!==$.NotStarted){for(var e of(this.botManager.update(this),this.status!==$.Ended&&(void 0===this.lastGameEndCheck||1e3<=this.currentTime-this.lastGameEndCheck)&&(this.checkGameEndConditions(),this.lastGameEndCheck=this.currentTime),[...this.updatableObjects]))e.isSpawned&&e.update(this);if(this.playerList.getCombatants().forEach((e=>e.cheerCooldownTicks=Math.max(0,e.cheerCooldownTicks-1))),this.traits.filter(S.NotifyTick).forEach((e=>{e[S.NotifyTick.onTick](this)})),this.localPlayer&&!this.localPlayer.isObserver&&!this.localPlayer.defeated){var t=this.unitSelection.getSelectedUnits();if(1===t.length){let e=t[0];if(e.isTechno()&&e.owner!==this.localPlayer){let t=this.mapShroudTrait.getPlayerShroud(this.localPlayer);this.map.tileOccupation.calculateTilesForGameObject(e.tile,e).find((i=>!t.isShrouded(i,e.tileElevation)))||(this.unitSelection.deselectAll(),this.unitSelection.cleanupUnit(e))}}}for(var i of this.afterTickCallbacks)i();this.afterTickCallbacks.length=0,this.triggers.update(this),this.countdownTimer.update(this),this.currentTick++,this.currentTime+=1e3/j.GameSpeed.BASE_TICKS_PER_SECOND}}afterTick(e){this.afterTickCallbacks.push(e)}checkGameEndConditions(){this.updateDefeatedPlayers(this.playerList.getCombatants()),(this.localPlayer?.defeated&&!this.localPlayer.isObserver||!this.alliances.getHostilePlayers().length&&1{let r;if(t)r=!0;else{let t;t=i?(t=[...e.getOwnedObjectsByType(s.ObjectType.Building,!0)].some((e=>!e.rules.insignificant)),t||e.getOwnedObjects(!0).some((e=>this.rules.general.baseUnit.includes(e.name)))):e.getOwnedObjects(!0).some((e=>!e.rules.insignificant&&!e.limboData?.inTransport)),r=!t}r&&(e.defeated=!0,this.removeAllPlayerAssets(e),this.events.dispatch(new T.PlayerDefeatedEvent(e)))}))}removeAllPlayerAssets(e){e.getOwnedObjects().forEach((e=>{e.isDestroyed||this.destroyObject(e,void 0,!0)})),e.getOwnedObjects(!0).forEach((e=>{e.isDestroyed||(e.limboData?.inTransport?this.changeObjectOwner(e,this.getCivilianPlayer()):this.destroyObject(e,void 0,!0))}))}generateRandomInt(e,t){return this.prng.generateRandomInt(e,t)}generateRandom(){return this.prng.generateRandom()}getHash(){return m.fnv32a([...new Uint8Array(new Float64Array([this.prng.getLastRandom()]).buffer),this.nextObjectId.value,...this.world.getAllObjects().map((e=>e.getHash())),...this.playerList.getAll().map((e=>e.getHash())),this.alliances.getHash(),...this.traits.getAll().map((e=>e.getHash?.()??0))])}debugGetState(){return{currentTick:this.currentTick,lastRandom:this.prng.getLastRandom(),nextObjectId:this.nextObjectId.value,objects:this.world.getAllObjects().map((e=>e.debugGetState())),players:this.playerList.getAll().map((e=>e.debugGetState())),alliances:this.alliances.debugGetState(),traits:this.traits.getAll().reduce(((e,t)=>{var i=t.debugGetState?.();return void 0!==i&&(e[t.constructor.name]=i),e}),{})}}dispose(){this.world.getAllObjects().forEach((e=>e.dispose())),this.playerList.getAll().forEach((e=>e.dispose())),this.constructionWorkers.forEach((e=>e.dispose())),this.botManager.dispose(),this.triggers.dispose(),this.map.dispose(),this.traits.dispose()}})}}})),System.register("game/gameobject/trait/interface/NotifyDamage",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){(i=i||{}).onDamage=Symbol(),e("NotifyDamage",i)}}})),System.register("game/gameobject/trait/WallTrait",["game/gameobject/trait/interface/NotifyDamage","game/type/LandType"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class{constructor(){this.linkedDamageHandled=!1}[i.NotifyDamage.onDamage](e,t,i,s){if(!this.linkedDamageHandled){var n=Math.floor(i/2);if(n)for(var a of t.map.tiles.getAllNeighbourTiles(e.tile))if(a.landType===r.LandType.Wall){let e=t.map.getObjectsOnTile(a).find((e=>(e.isBuilding()||e.isOverlay())&&e.wallTrait));e.wallTrait.linkedDamageHandled=!0,e.healthTrait.inflictDamage(n,s,t),e.wallTrait.linkedDamageHandled=!1,e.healthTrait.health||t.destroyObject(e,s)}}}},e("WallTrait",s)}}})),System.register("game/gameobject/Overlay",["engine/type/ObjectType","game/gameobject/GameObject","game/map/BridgeOverlayTypes","game/map/OreOverlayTypes","engine/type/OverlayTibType","game/gameobject/trait/WallTrait"],(function(e,t){"use strict";var i,r,s,n,a,o,l;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e}],execute:function(){l=class extends r.GameObject{constructor(e,t,r){super(i.ObjectType.Overlay,e,t,r),this.radarInvisible=this.rules.radarInvisible}static factory(e,t,i){let r=new this(e,t,i);return t.wall&&(r.wallTrait=new o.WallTrait,r.traits.add(r.wallTrait)),r}isTiberium(){return n.OreOverlayTypes.getOverlayTibType(this.overlayId)!==a.OverlayTibType.NotSpecial}isBridge(){return s.BridgeOverlayTypes.isBridge(this.overlayId)}isXBridge(){return s.BridgeOverlayTypes.isXBridge(this.overlayId)}isHighBridge(){return s.BridgeOverlayTypes.isHighBridge(this.overlayId)}isLowBridge(){return s.BridgeOverlayTypes.isLowBridge(this.overlayId)}isBridgePlaceholder(){return s.BridgeOverlayTypes.isBridgePlaceholder(this.overlayId)}getFoundation(){let e={width:1,height:1};return this.isBridge()&&(this.isXBridge()?e.height+=2:e.width+=2),e}},e("Overlay",l)}}})),System.register("game/map/Terrain",["game/map/TileCollection","game/type/SpeedType","ngraph.graph","ngraph.path","util/typeGuard","game/map/tileFinder/RadialTileFinder","util/geometry","game/type/LandType","game/rules/TerrainRules"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e}],execute:function(){e("Terrain",class{constructor(e,t,i,s,n){this.tiles=e,this.theaterType=t,this.mapBounds=i,this.tileOccupation=s,this.rules=n,this.passabilityGraphs=new Map,this.invalidatedTiles=new Map,this.handleTileOccupationUpdate=({tiles:e,object:t})=>{var i=e.filter((e=>{let i=r.SpeedType.Foot;return t.isTerrain()&&t.rules.getOccupationBits(this.theaterType)!==h.OccupationBits.All&&(i=r.SpeedType.Wheel),t.isOverlay()&&(t.isBridge()||t.isTiberium())||this.isBlockerObject(t,e,!1,i)||this.isBlockerObject(t,e,!0,i)||t.isBuilding()&&t.rules.leaveRubble}));i.length&&this.invalidateTiles(i)},this.handleMapBoundsResize=()=>{this.passabilityGraphs.clear()},s.onChange.subscribe(this.handleTileOccupationUpdate),i.onLocalResize.subscribe(this.handleMapBoundsResize)}invalidateTiles(e){e.length&&[...this.passabilityGraphs.keys()].forEach((t=>{let i=this.invalidatedTiles.get(t);i?e.forEach((e=>i.add(e))):this.invalidatedTiles.set(t,new Set(e))}))}computePath(e,t,i,r,s,{maxExpandedNodes:a=Number.POSITIVE_INFINITY,bestEffort:l=!0,excludeTiles:c,ignoredBlockers:h=[]}={}){let u=this.computePassabilityGraph(e);var d=h.map((e=>this.tileOccupation.calculateTilesForGameObject(e.tile,e))).reduce(((e,t)=>e.concat(t)),[]);if(d.length&&this.updatePassability(d,e,u,h),!this.getPassableSpeed(t,e,i,h))return d.length&&this.updatePassability(d,e,u),[];var g,p=this.getNodeId(r,s),m=!!u.hasNode(p);m||((g=new o.RadialTileFinder(this.tiles,this.mapBounds,r,{width:1,height:1},1,5,(t=>0({tile:e.data.tile,onBridge:e.data.onBridge})));return(y.length<2||c&&y.length&&(!l&&y[0].tile!==r||y[y.length-1].tile!==t))&&(y=[]),!m&&u.hasNode(p)&&u.removeNode(p),d.length&&this.updatePassability(d,e,u),y}computeAllPassabilityGraphs(){Object.keys(r.SpeedType).forEach((e=>{var t=Number(e);isNaN(t)||t===r.SpeedType.Winged||this.computePassabilityGraph(t)}))}computePassabilityGraph(e){let t=this.passabilityGraphs.get(e);if(t){let i=this.invalidatedTiles.get(e);i?.size&&(this.updatePassability([...i],e,t),i.clear())}else t=s.default({multigraph:!0}),this.passabilityGraphs.set(e,t),this.tiles.forEach((i=>{this.computePassability(i,e,t)}));return t}updatePassability(e,t,r,s=[]){let n=new Set;e.forEach((e=>{[e,this.tiles.getNeighbourTile(e,i.TileDirection.Right),this.tiles.getNeighbourTile(e,i.TileDirection.BottomRight),this.tiles.getNeighbourTile(e,i.TileDirection.Bottom),this.tiles.getNeighbourTile(e,i.TileDirection.BottomLeft)].filter(a.isNotNullOrUndefined).forEach((e=>n.add(e)))})),e.forEach((e=>{r.removeNode(this.getNodeId(e,!1)),r.removeNode(this.getNodeId(e,!0))})),n.forEach((e=>{this.computePassability(e,t,r,s)}))}computePassability(e,t,r,s=[]){var n=[i.TileDirection.Left,i.TileDirection.TopLeft,i.TileDirection.Top,i.TileDirection.TopRight];let a=this.getPassableSpeed(e,t,!1,s);if(a){var o,l=this.getNodeId(e,!1);for(o of(r.hasNode(l)||r.addNode(l,{speed:a,tile:e,onBridge:void 0}),n))this.connectTiles(e,void 0,o,t,r,s)}var c=this.tileOccupation.getBridgeOnTile(e);if(c&&(a=this.getPassableSpeed(e,t,!0,s),a)){var h;l=this.getNodeId(e,!0);for(h of(r.hasNode(l)||r.addNode(l,{speed:a,tile:e,onBridge:c}),n))this.connectTiles(e,c,h,t,r,s)}}connectTiles(e,t,i,r,s,n=[]){var a=this.tiles.getNeighbourTile(e,i);if(a){let i=this.tileOccupation.getBridgeOnTile(a);var o=t||i?0:1;if(Math.abs(e.z+(t?.tileElevation??0)-(a.z+(i?.tileElevation??0)))>o){if(!i?.isHighBridge()&&!t?.isHighBridge()||0!==Math.abs(e.z-a.z)||!s.hasNode(this.getNodeId(e,!1)))return;t=i=void 0}var l=this.getPassableSpeed(a,r,!!i,n);l&&(o=this.getNodeId(a,!!i),s.hasNode(o)||s.addNode(o,{speed:l,tile:a,onBridge:i}),a=this.getNodeId(e,!!t),s.getLink(a,o)||s.addLink(a,o))}}getNodeId(e,t){return e.id+(t?"_bridge":"")}getPassableSpeed(e,t,i,s=[],n=!1){if(!this.mapBounds.isWithinBounds(e))return 0;let a=i?e.onBridgeLandType:e.landType;if(void 0===a)return 0;a===c.LandType.Wall&&t===r.SpeedType.Track&&(a=c.getLandType(e.terrainType));var o,l=this.rules.getLandRules(a).getSpeedModifier(t);if(!l)return 0;if(!n)for(o of this.tileOccupation.getObjectsOnTile(e))if(this.isBlockerObject(o,e,i,t)&&!s.includes(o))return 0;return l}isBlockerObject(e,t,i,s){if(e.isTerrain()&&s===r.SpeedType.Foot&&e.rules.getOccupationBits(this.theaterType)!==h.OccupationBits.All)return!1;if(e.isBuilding()){if(e.rules.invisibleInGame)return!1;if(e.isDestroyed&&e.rules.leaveRubble)return!1;if(e.rules.gate)return!1;var n=e.art.foundation;let i=e.rules.numberImpassableRows;return s===r.SpeedType.Foot?i=n.width:e.rules.weaponsFactory&&!i&&(i=n.width-1),n={x:e.tile.rx,y:e.tile.ry,width:(i||n.width)-1,height:n.height-1},l.rectContainsPoint(n,{x:t.rx,y:t.ry})}return!(e.isAircraft()||e.isInfantry()||e.isVehicle()||e.isSmudge()||e.isOverlay()&&(i&&e.isBridge()||!i&&e.isHighBridge()||e.isTiberium()||e.rules.crate||e.isBridgePlaceholder())||s===r.SpeedType.Track&&e.rules.crushable)}findObstacles(e,t){var i,s,n=t.rules.speedType;let a=[];for(i of this.tileOccupation.getGroundObjectsOnTile(e.tile))i!==t&&((s=this.isBlockerObject(i,e.tile,!!e.onBridge,n))||i.isUnit()&&(i.tile===e.tile&&i.onBridge===!!e.onBridge||i.moveTrait.reservedPathNodes.find((t=>t.tile===e.tile&&!!t.onBridge==!!e.onBridge)))||n===r.SpeedType.Track&&i.rules.crushable||n===r.SpeedType.Foot&&i.isTerrain()||i.isBuilding()&&i.rules.gate)&&(s={obj:i,static:s},i.isInfantry()&&t.isInfantry()?i.position.desiredSubCell===t.position.desiredSubCell&&a.push(s):i.isTerrain()&&t.isInfantry()&&!i.rules.getOccupiedSubCells(this.theaterType).includes(t.position.desiredSubCell)||a.push(s));return a}dispose(){this.tileOccupation.onChange.unsubscribe(this.handleTileOccupationUpdate),this.mapBounds.onLocalResize.unsubscribe(this.handleMapBoundsResize)}})}}})),System.register("game/gameobject/task/system/TargetLinesConfig",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("cloneConfig",(e=>e?{...e}:void 0)),e("configsAreEqual",((e,t)=>!e&&!t||e?.isAttack===t?.isAttack&&e?.pathNodes===t?.pathNodes&&e?.target===t?.target)),e("configHasTarget",(e=>!(!e?.pathNodes.length&&!e?.target)))}}})),System.register("game/gameobject/task/system/Task",["game/gameobject/task/system/TaskStatus"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("Task",class{constructor(){this.status=i.TaskStatus.NotStarted,this.children=[],this.cancellable=!0,this.useChildTargetLines=!1,this.blocking=!0,this.waitingForChildrenToFinish=!1,this.preventOpportunityFire=!0,this.preventLanding=!0}isRunning(){return this.status===i.TaskStatus.Running}isCancelling(){return this.status===i.TaskStatus.Cancelling}setCancellable(e){return this.cancellable=e,this}onStart(e){}onEnd(e){}cancel(){if(this.cancellable)if(this.status===i.TaskStatus.Running)this.status=i.TaskStatus.Cancelling,this.children.length&&this.children.forEach((e=>e.cancel()));else if(this.status===i.TaskStatus.NotStarted&&(this.status=i.TaskStatus.Cancelled,this.children.length))throw new Error("Should't have any children before starting a task")}getTargetLinesConfig(e){}})}}})),System.register("game/order/Order",["gui/PointerType","game/order/OrderFeedbackType"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("Order",class{constructor(e){this.orderType=e,this.targetOptional=!0,this.minimapAllowed=!0,this.singleSelectionRequired=!1,this.terminal=!1,this.feedbackType=r.OrderFeedbackType.None}getPointerType(e,t){return e?i.PointerType.Mini:i.PointerType.Default}set(e,t){return this.sourceObject=e,this.target=t,this}isValid(){return!0}isAllowed(){return!0}onAdd(e,t){return!0}})}}})),System.register("game/gameobject/trait/UnitOrderTrait",["game/gameobject/task/system/TaskRunner","game/gameobject/task/system/TaskStatus","game/gameobject/trait/interface/NotifyTick","game/gameobject/task/system/WaitTicksTask","game/gameobject/trait/interface/NotifyOwnerChange","game/gameobject/task/system/CallbackTask","game/gameobject/trait/interface/NotifyTeleport","game/gameobject/trait/interface/NotifyOrder"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e}],execute:function(){h=class{constructor(e){this.gameObject=e,this.orders=[],this.queuedOrders=new Set,this.tasks=[],this.taskRunner=new i.TaskRunner}[s.NotifyTick.onTick](e,t){if(e.isSpawned){var i=this.hasTasks(),r=this.tasks.find((e=>!e.isCancelling()));i&&this.taskRunner.tick(this.tasks,e);var s,a=this.orders.length;if(a&&(!i||!r)){let t,r=!1;for(;(t=this.orders[0])&&(t.isValid()&&t.isAllowed()&&((s=t.process())&&(this.queuedOrders.has(t)&&(this.tasks.push(new n.WaitTicksTask(5)),this.tasks.push(new o.CallbackTask((()=>{e.resetGuardModeToIdle()})))),this.tasks.push(...s),i||this.taskRunner.tick(this.tasks,e)),r=!0),this.orders.shift(),this.queuedOrders.delete(t),this.waypointPath&&(this.currentWaypoint?(this.cleanupWaypoint(this.currentWaypoint,this.waypointPath),this.currentWaypoint=this.currentWaypoint?.next):this.currentWaypoint=this.waypointPath.waypoints[0],this.currentWaypoint||this.cleanupWaypointPath()),!r););}!a&&!i&&this.waypointPath&&this.currentWaypoint&&(this.cleanupWaypoint(this.currentWaypoint,this.waypointPath),this.cleanupWaypointPath());let t=r;for(;t?.useChildTargetLines;){var l=t.children.find((e=>!e.isCancelling()));if(!l)break;t=l}this.targetLinesTask!==t&&(this.targetLinesTask=t,this.targetLinesConfig=t?.getTargetLinesConfig(this.gameObject))}}[a.NotifyOwnerChange.onChange](){this.clearOrders(),this.cancelAllTasks()}[l.NotifyTeleport.onBeforeTeleport](e,t,i,r){i&&!r&&(this.clearOrders(),this.tasks.length=0)}addOrder(e,t=!1){!1!==e.onAdd(this.tasks,t)?(t||(this.clearOrders(),this.tasks=this.tasks.filter((e=>e.status!==r.TaskStatus.NotStarted)),this.tasks.forEach((e=>e.cancel()))),this.orders.push(e),t&&this.queuedOrders.add(e),this.gameObject.traits.filter(c.NotifyOrder).forEach((t=>{t[c.NotifyOrder.onPush](this.gameObject,e.orderType)}))):this.targetLinesTask=void 0}clearOrders(){this.orders.length=0,this.queuedOrders.clear(),this.currentWaypoint&&this.waypointPath&&this.cleanupWaypoint(this.currentWaypoint,this.waypointPath),this.cleanupWaypointPath(),this.gameObject.resetGuardModeToIdle()}unmarkNextQueuedOrder(){this.orders.length&&this.queuedOrders.delete(this.orders[0])}hasTasks(){return!!this.tasks.length}isIdle(){return!this.orders.length&&!this.tasks.length}getCurrentTask(){return this.tasks[0]}cancelAllTasks(){this.tasks.forEach((e=>e.cancel()))}addTask(e){this.tasks.push(e)}addTasks(...e){e.forEach((e=>this.addTask(e)))}addTaskToFront(e){this.tasks.unshift(e)}addTaskNext(e){this.tasks.splice(1,0,e)}getTasks(){return[...this.tasks]}dispose(){this.clearOrders(),this.tasks.length=0,this.gameObject=void 0}cleanupWaypointPath(){this.waypointPath&&(this.waypointPath.units.splice(this.waypointPath.units.indexOf(this.gameObject),1),this.waypointPath.units.length||(this.waypointPath.waypoints.forEach((e=>e.next=void 0)),this.waypointPath.waypoints.length=0),this.waypointPath=void 0),this.currentWaypoint=void 0}cleanupWaypoint(e,t){if(!t.units.find((t=>t!==this.gameObject&&(t.unitOrderTrait.currentWaypoint??t.unitOrderTrait.waypointPath?.waypoints[0])===e))&&!t.waypoints.find((t=>t.next===e))){var i=t.waypoints.indexOf(e);if(-1===i)throw new Error("Given waypoint not found in waypoint path");t.waypoints.splice(i,1)}}},e("UnitOrderTrait",h)}}})),System.register("game/gameobject/Techno",["game/gameobject/GameObject","game/rules/TechnoRules","game/gameobject/unit/VeteranLevel","game/gameobject/trait/interface/NotifyTick"],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e}],execute:function(){a=class extends i.GameObject{constructor(e,t,i,r){super(e,t,i,r),this.explodes=this.rules.explodes,this.radarInvisible=this.rules.radarInvisible,this.c4=this.rules.c4,this.crusher=this.rules.crusher,this.defaultToGuardArea=this.rules.defaultToGuardArea,this.guardMode=this.rules.defaultToGuardArea,this.purchaseValue=this.rules.cost}get primaryWeapon(){return this.armedTrait?.primaryWeapon}get secondaryWeapon(){return this.armedTrait?.secondaryWeapon}get ammo(){return this.ammoTrait?.ammo}get sight(){return Math.min(r.TechnoRules.MAX_SIGHT,this.rules.sight*(this.veteranTrait?.getVeteranSightMultiplier()??1))}get veteranLevel(){return this.veteranTrait?.veteranLevel??s.VeteranLevel.None}resetGuardModeToIdle(){this.guardMode=this.defaultToGuardArea,this.guardArea=void 0}update(e){if(this.warpedOutTrait.isActive())for(var t of this.cachedTraits.tick)t.ticksWhenWarpedOut&&t[n.NotifyTick.onTick](this,e);else super.update(e)}isTechno(){return!0}},e("Techno",a)}}})),System.register("game/event/CratePickupEvent",["game/event/EventType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("CratePickupEvent",class{constructor(e,t,r,s){this.target=e,this.player=t,this.source=r,this.tile=s,this.type=i.EventType.CratePickup}})}}})),System.register("game/trait/CrateGeneratorTrait",["engine/type/ObjectType","engine/type/TerrainType","game/event/CratePickupEvent","game/gameobject/unit/RangeHelper","game/gameobject/unit/ZoneType","game/gameopts/constants","game/GameSpeed","game/map/tileFinder/RadialTileFinder","game/type/PowerupType","game/type/SpeedType","game/trait/interface/NotifyTick","game/type/SuperWeaponType","game/trait/SuperWeaponsTrait","game/gameobject/trait/CloakableTrait","game/Warhead","game/gameobject/unit/CollisionType","game/map/tileFinder/RandomTileFinder","game/map/OreSpread","engine/type/OverlayTibType","game/gameobject/trait/TiberiumTrait","game/math/Vector2","game/math/Box2"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p,m,f,y,T,v,b,S,w,C,E;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e},function(e){m=e},function(e){f=e},function(e){y=e},function(e){T=e},function(e){v=e},function(e){b=e},function(e){S=e},function(e){w=e},function(e){C=e}],execute:function(){e("UNSUPPORTED_POWERUP_TYPES",[h.PowerupType.IonStorm,h.PowerupType.Gas,h.PowerupType.Pod,h.PowerupType.Squad]),E=class{constructor(e){this.randomCrateSpawn=e,this.crates=[],this.availEdgeTiles=[],this.allTiles=[]}init(e){var t=e.map.tiles.getMapSize();let i=e.map.tiles,r=[],s=0;for(let o=0;oe.countryId!==o.OBS_COUNTRY_ID)).length}[d.NotifyTick.onTick](e){for(var t of this.crates)t.ticksLeft--,t.ticksLeft<=0&&(e.unspawnObject(t.obj),t.obj.dispose());if(this.crates=this.crates.filter((e=>0e.waterAllowed)):t).length){var r,s=t.reduce(((e,t)=>e+t.probShares),0),n=i.generateRandomInt(0,s);let e=0;for(r of t)if(e+=r.probShares,nt.obj===e))?.powerup.type}pickupCrate(e,t,i){let r=this.crates.find((e=>e.obj===t));if(r){this.crates.splice(this.crates.indexOf(r),1),i.unspawnObject(r.obj),r.obj.dispose();let t=this.grantPowerup(e,r.powerup,r.obj.tile,i);var n;return void 0!==t&&(e.owner.cratesPickedUp++,n=i.rules.powerups.powerups.find((e=>e.type===t)),i.events.dispatch(new s.CratePickupEvent(n,e.owner,e,r.obj.tile))),this.randomCrateSpawn&&this.spawnCrateAtRandom(this.allTiles,i),t}}grantPowerup(e,t,r,s){let n=e.owner,a=!1;if(n.isCombatant()){if(t.type===h.PowerupType.Unit){let e;if(![...n.buildings].some((e=>e.rules.constructionYard))&&s.rules.crateRules.freeMCV){let t=s.rules.general.baseUnit;if(!n.getOwnedObjects(!0).some((e=>t.includes(e.name)))&&n.credits>=[...s.rules.ai.buildPower,...s.rules.ai.buildRefinery].map((e=>s.rules.getBuilding(e))).filter((e=>e.aiBasePlanningSide===n.country.side)).reduce(((e,t)=>e+t.cost),0)){var o=t.find((e=>{let t=s.rules.getObject(e,i.ObjectType.Vehicle);return t.isAvailableTo(n.country)&&t.hasOwner(n.country)}));if(!o)throw new Error("No suitable MCV found for player country "+n.country);e=s.rules.getObject(o,i.ObjectType.Vehicle)}}if(e||(o=(o=s.rules.crateRules.unitCrateType)?s.rules.hasObject(o,i.ObjectType.Vehicle)?[s.rules.getObject(o,i.ObjectType.Vehicle)]:[]:[...s.rules.vehicleRules.values()].filter((e=>e.crateGoodie&&00e.type===g.SuperWeaponType.MultiMissile)),l&&n.superWeaponsTrait&&!n.superWeaponsTrait.has(l.name)){let e=s.createSuperWeapon(l.name,n,!0);e.isGift=!0,n.superWeaponsTrait.add(e),a=!0}}else if(t.type===h.PowerupType.Invulnerability){var P=[...s.rules.superWeaponRules.values()].find((e=>e.type===g.SuperWeaponType.IronCurtain));P&&(s.traits.get(p.SuperWeaponsTrait).activateEffect(P,n,s,r,void 0,!0),a=!0)}else if(t.type===h.PowerupType.Explosion||t.type===h.PowerupType.Napalm){a=!0;var I=Number(t.data);P=t.type===h.PowerupType.Napalm?s.rules.combatDamage.flameDamage:s.rules.combatDamage.c4Warhead;new f.Warhead(s.rules.getWarhead(P)).detonate(s,I,e.tile,e.tileElevation,e.position.worldPosition,e.zone,y.CollisionType.None,s.createTarget(e,e.tile),{player:e.owner,weapon:void 0},!1,!1,void 0,0)}else{if(t.type!==h.PowerupType.Tiberium)return void console.warn(`Unhandled powerup type "${h.PowerupType[t.type]}"`);{let e,t=new T.RandomTileFinder(s.map.tiles,s.map.mapBounds,r,2,s,(e=>S.TiberiumTrait.canBePlacedOn(e,s.map))),n=0;for(;n++<6&&(e=t.getNextTile());){var k=v.OreSpread.calculateOverlayId(b.OverlayTibType.Ore,e);if(void 0===k)throw new Error("Expected an overlayId");let t=s.createObject(i.ObjectType.Overlay,s.rules.getOverlayName(k));t.overlayId=k,t.value=3,s.spawnObject(t,e),a=!0}}}return a?t.type:(I=s.rules.powerups.powerups.find((e=>e.type===h.PowerupType.Money&&0e.owner===i&&e.isUnit()&&s.tileDistance(e,t)<=r))}},e("CrateGeneratorTrait",E)}}})),System.register("game/rules/PowerupsRules",["game/trait/CrateGeneratorTrait","game/type/PowerupType"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("PowerupsRules",class{constructor(){this.powerups=[]}readIni(e){for(var[t,s]of e.entries){let[e,a,o,l]=s.split(",");var s,n=Number(e);void 0!==(s=r.PowerupType[t])?i.UNSUPPORTED_POWERUP_TYPES.includes(s)||this.powerups.push({type:s,probShares:n,animName:""!==a.toLowerCase()?a:void 0,waterAllowed:"yes"===o,data:l}):console.warn(`Unknown powerup "${t}". Skipping.`)}return this}})}}})),System.register("game/rules/mpAllowedColors",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("mpAllowedColors",["Gold","DarkRed","DarkBlue","DarkGreen","Orange","DarkSky","Purple","Magenta"])}}})),System.register("game/rules/Rules",["util/Color","engine/type/ObjectType","game/rules/CountryRules","game/rules/WeaponRules","game/rules/AudioVisualRules","game/rules/GeneralRules","game/rules/MpDialogSettings","game/type/LandType","game/rules/LandRules","game/rules/WarheadRules","game/rules/ProjectileRules","game/rules/ObjectRulesFactory","game/rules/CombatDamageRules","game/rules/TiberiumRules","game/rules/AiRules","game/rules/ElevationModelRules","game/rules/RadiationRules","game/rules/SuperWeaponRules","game/rules/CrateRules","game/rules/PowerupsRules","game/rules/mpAllowedColors","util/typeGuard","game/Weapon"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p,m,f,y,T,v,b,S,w,C,E;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e},function(e){m=e},function(e){f=e},function(e){y=e},function(e){T=e},function(e){v=e},function(e){b=e},function(e){S=e},function(e){w=e},function(e){C=e},function(e){E=e}],execute:function(){e("Rules",class{constructor(e,t){this.ini=e,this.logger=t,this.buildingTypes=new Map,this.vehicleTypes=new Map,this.infantryTypes=new Map,this.aircraftTypes=new Map,this.terrainTypes=new Map,this.overlayTypes=new Map,this.overlayIdsByType=new Map,this.animationTypes=new Map,this.animationNames=new Set,this.voxelAnimTypes=new Map,this.smudgeTypes=new Map,this.warheadTypes=new Map,this.tiberiumTypes=new Map,this.superWeaponTypes=new Map,this.countryTypes=new Map,this.weaponTypes=new Map,this.allObjectRules=new Map,this.buildingRules=new Map,this.infantryRules=new Map,this.vehicleRules=new Map,this.aircraftRules=new Map,this.terrainRules=new Map,this.overlayRules=new Map,this.smudgeRules=new Map,this.voxelAnimRules=new Map,this.countryRules=new Map,this.warheadRules=new Map,this.powerups=new S.PowerupsRules,this.colors=new Map,this.general=new o.GeneralRules,this.ai=new f.AiRules,this.crateRules=new b.CrateRules,this.elevationModel=new y.ElevationModelRules,this.mpDialogSettings=new l.MpDialogSettings,this.audioVisual=new a.AudioVisualRules,this.combatDamage=new p.CombatDamageRules,this.radiation=new T.RadiationRules,this.landRules=new Map,this.tiberiumRules=new Map,this.superWeaponRules=new Map,this.cachedWeaponRules=new Map,this.cachedProjectileRules=new Map,this.init()}hasObject(e,t){return this.allObjectRules.get(t)?.has(e)}getObject(e,t){var i=this.allObjectRules.get(t)?.get(e);if(!i)throw new Error(`Missing rules for object "${e}"`);return i}getTechnoByInternalId(e,t){let i;if(t===r.ObjectType.Building)i=this.buildingTypes.get(e);else if(t===r.ObjectType.Infantry)i=this.infantryTypes.get(e);else if(t===r.ObjectType.Vehicle)i=this.vehicleTypes.get(e);else{if(t!==r.ObjectType.Aircraft)throw new Error(`Type ${r.ObjectType[t]} is not a techno type`);i=this.aircraftTypes.get(e)}if(void 0===i)throw new Error(`Object type "${r.ObjectType[t]}" with ID "${e}" not found`);return this.getObject(i,t)}getBuilding(e){var t=this.buildingRules.get(e);if(!t)throw new Error(`Missing rules for building "${e}"`);return t}getWeapon(e){let t=this.cachedWeaponRules.get(e);if(!t){var i=this.ini.getSection(e);if(!i)throw new Error(`Weapon ${e} is missing ini section`);t=new n.WeaponRules(i),this.cachedWeaponRules.set(e,t)}return t}getWeaponByInternalId(e){var t=this.weaponTypes.get(e);if(!t)throw new RangeError(`Weapon with internal ID "${e}" not found`);return this.getWeapon(t)}getWarhead(e){let t=this.warheadRules.get(e.toLowerCase());var i;if(t||(i=this.ini.getSection(e))&&(t=new u.WarheadRules(i),this.warheadRules.set(e.toLowerCase(),t)),!t)throw new Error("Unknown warhead "+e);return t}getProjectile(e){let t=this.cachedProjectileRules.get(e);if(!t){var i=this.ini.getSection(e);if(!i)throw new Error(`Projectile ${e} is missing ini section`);t=new d.ProjectileRules(r.ObjectType.Projectile,i),this.cachedProjectileRules.set(e,t)}return t}getOverlayName(e){var t=this.overlayTypes.get(e);if(!t)throw new Error("Invalid overlay id "+e);return t}hasOverlayId(e){return this.overlayTypes.has(e)}getOverlayId(e){var t=this.overlayIdsByType.get(e);if(void 0===t)throw new Error("Invalid overlay name "+e);return t}getOverlay(e){var t=this.overlayRules.get(e);if(!t)throw new Error(`Missing rules for overlay "${e}"`);return t}getAnimationName(e){return this.animationTypes.get(e)}getCountry(e){if(!this.countryRules.has(e))throw new Error("Unknown country "+e);return this.countryRules.get(e)}getMultiplayerCountries(){return[...this.countryRules.values()].filter((e=>e.multiplay))}getMultiplayerColors(){let e=new Map;return w.mpAllowedColors.forEach((t=>{if(!this.colors.has(t))throw new Error(`Multiplayer color "${t}" does not exist in the rules [Colors] section.`);e.set(t,this.colors.get(t))})),e}getLandRules(e){let t=this.landRules.get(e);var i;return t||(i=e===c.LandType.Cliff?"Rock":c.LandType[e],t=(new h.LandRules).readIni(this.ini.getOrCreateSection(i)),this.landRules.set(e,t)),t}getTiberium(e){var t=this.tiberiumTypes.get(e);if(!t)throw new Error("Unknown tiberium type "+e);return this.tiberiumRules.get(t)}getSuperWeapon(e){if(!this.superWeaponRules.has(e))throw new Error(`Unknown superweapon type "${e}"`);return this.superWeaponRules.get(e)}getIni(){return this.ini}applySpecialFlags(e){e.initialVeteran&&(this.general.veteran.initialVeteran=!0)}init(){this.readAudioVisual(),this.readCombatDamage(),this.readRadiation(),this.readGeneral(),this.readAi(),this.readCrateRules(),this.readElevationModel(),this.readMpDialogSettings(),this.readObjectTypes("BuildingTypes",this.buildingTypes),this.readObjectTypes("InfantryTypes",this.infantryTypes),this.readObjectTypes("VehicleTypes",this.vehicleTypes),this.readObjectTypes("AircraftTypes",this.aircraftTypes),this.readObjectTypes("TerrainTypes",this.terrainTypes),this.readObjectTypes("SmudgeTypes",this.smudgeTypes),this.readObjectTypes("Animations",this.animationTypes),this.animationNames=new Set(this.animationTypes.values()),this.readObjectTypes("VoxelAnims",this.voxelAnimTypes),this.readObjectTypes("OverlayTypes",this.overlayTypes),this.overlayTypes.forEach(((e,t)=>this.overlayIdsByType.set(e,t))),this.readColors(),this.readObjectTypes("Countries",this.countryTypes),this.readObjectTypes("Warheads",this.warheadTypes),this.readObjectTypes("Tiberiums",this.tiberiumTypes),this.readObjectTypes("SuperWeaponTypes",this.superWeaponTypes),this.allObjectRules.set(r.ObjectType.Building,this.buildingRules).set(r.ObjectType.Infantry,this.infantryRules).set(r.ObjectType.Vehicle,this.vehicleRules).set(r.ObjectType.Aircraft,this.aircraftRules).set(r.ObjectType.Terrain,this.terrainRules).set(r.ObjectType.Overlay,this.overlayRules).set(r.ObjectType.Smudge,this.smudgeRules).set(r.ObjectType.VoxelAnim,this.voxelAnimRules),this.readObjects(r.ObjectType.Building,this.buildingTypes,this.buildingRules),this.readObjects(r.ObjectType.Infantry,this.infantryTypes,this.infantryRules),this.readObjects(r.ObjectType.Vehicle,this.vehicleTypes,this.vehicleRules),this.readObjects(r.ObjectType.Aircraft,this.aircraftTypes,this.aircraftRules),this.readObjects(r.ObjectType.Terrain,this.terrainTypes,this.terrainRules),this.readObjects(r.ObjectType.Overlay,this.overlayTypes,this.overlayRules),this.readObjects(r.ObjectType.Smudge,this.smudgeTypes,this.smudgeRules),this.readObjects(r.ObjectType.VoxelAnim,this.voxelAnimTypes,this.voxelAnimRules),this.readCountries(),this.readWarheads(),this.readPowerups(),this.readTiberiums(),this.readSuperWeapons(),this.buildWeaponsList()}readAudioVisual(){var e=this.ini.getSection("AudioVisual");if(!e)throw new Error("Missing [AudioVisual] section");this.audioVisual.readIni(e)}readCombatDamage(){var e=this.ini.getSection("CombatDamage");if(!e)throw new Error("Missing [CombatDamage] section");this.combatDamage.readIni(e)}readRadiation(){var e=this.ini.getSection("Radiation");if(!e)throw new Error("Missing [Radiation] section");this.radiation.readIni(e)}readGeneral(){var e=this.ini.getSection("General");if(!e)throw new Error("Missing [General] section");this.general.readIni(e)}readAi(){var e=this.ini.getSection("AI");if(!e)throw new Error("Missing [AI] section");this.ai.readIni(e)}readCrateRules(){var e=this.ini.getSection("CrateRules");if(!e)throw new Error("Missing [CrateRules] section");this.crateRules.readIni(e)}readElevationModel(){var e=this.ini.getSection("ElevationModel");if(!e)throw new Error("Missing [ElevationModel] section");this.elevationModel.readIni(e)}readMpDialogSettings(){var e=this.ini.getSection("MultiplayerDialogSettings");if(!e)throw new Error("Missing [MultiplayerDialogSettings] section");this.mpDialogSettings.readIni(e)}readObjectTypes(e,t){let i=this.ini.getSection(e);if(!i)throw new Error(`Missing [${e}] section`);let r=0,s=new Set;i.entries.forEach(((i,n)=>{Number.isNaN(Number(n))?this.logger?.debug(`Non-numeric id "${n}" found in rules section [${e}]. Skipping.`):s.has(i)?this.logger?.debug(`Duplicate type "${i}" in rules section [${e}]. Skipping.`):(t.set(r++,i),s.add(i))}))}readColors(){let e=this.ini.getSection("Colors");if(!e)throw new Error("Missing [Colors] section");e.entries.forEach(((e,t)=>{var[r,s,n]=e.split(","),n=i.Color.fromHsv(parseInt(r,10),parseInt(s,10),parseInt(n,10));this.colors.set(t,n)}))}readObjects(e,t,i){t.forEach(((t,s)=>{var n=this.ini.getSection(t);n?(n=(new g.ObjectRulesFactory).create(e,n,s),i.set(t,n)):this.logger?.debug(r.ObjectType[e]+` type "${t}" has no rules section`)}))}readCountries(){this.countryTypes.forEach(((e,t)=>{var i=this.ini.getSection(e);if(!i)throw new Error("Missing ini section for country "+e);let r=new s.CountryRules(t);r.readIni(i),this.countryRules.set(e,r)}))}readWarheads(){this.warheadTypes.forEach((e=>{var t=this.ini.getSection(e);t?(t=new u.WarheadRules(t),this.warheadRules.set(e.toLowerCase(),t)):this.logger?.debug(`Warhead "${e}" has no rules section`)}))}readPowerups(){var e=this.ini.getSection("Powerups");if(!e)throw new Error("Missing [Powerups] section");this.powerups.readIni(e)}readTiberiums(){this.tiberiumTypes.forEach((e=>{var t=this.ini.getSection(e);if(!t)throw new Error("Missing rules section for tiberium type "+e);this.tiberiumRules.set(e,(new m.TiberiumRules).readIni(t))}))}readSuperWeapons(){this.superWeaponTypes.forEach(((e,t)=>{var i=this.ini.getSection(e);if(!i)throw new Error("Missing rules section for superweapon type "+e);this.superWeaponRules.set(e,new v.SuperWeaponRules(t).readIni(i))}))}buildWeaponsList(){let e=new Set;for(var t of(e.add(this.general.dropPodWeapon),this.superWeaponRules.values()))t.weaponType&&e.add(t.weaponType);var i,r;e.add(E.Weapon.NUKE_PAYLOAD_NAME);for(let t of[...this.buildingRules.values(),...this.aircraftRules.values(),...this.vehicleRules.values(),...this.infantryRules.values()])for(i of[t.deathWeapon,t.primary,t.secondary,t.elitePrimary,t.eliteSecondary,t.occupyWeapon,t.eliteOccupyWeapon,...t.weaponCount?new Array(t.weaponCount).fill(0).map(((e,i)=>[t.getWeaponAtIndex(i),t.getEliteWeaponAtIndex(i)])).flat():[]].filter(C.isNotNullOrUndefined).filter((e=>""!==e)))e.add(i);let s=0;for(r of e)this.weaponTypes.set(s++,r)}})}}})),System.register("game/Country",["engine/type/ObjectType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("Country",class{constructor(e){this.rules=e}static factory(e,t){return new this(t.getCountry(e))}get id(){return this.rules.id}get side(){return this.rules.side}get name(){return this.rules.name}isPlayable(){return this.rules.multiplay&&!this.rules.multiplayPassive}hasVeteranUnit(e,t){let r=[];switch(e){case i.ObjectType.Aircraft:r=this.rules.veteranAircraft;break;case i.ObjectType.Infantry:r=this.rules.veteranInfantry;break;case i.ObjectType.Vehicle:r=this.rules.veteranUnits;break;default:throw new Error(`Unsupported object type "${i.ObjectType[e]}"`)}return r.includes(t)}})}}})),System.register("game/rules/TechnoRules",["engine/type/ObjectType","game/SideType","game/type/SpeedType","game/type/PipColor","game/type/LocomotorType","game/type/MovementZone","game/type/ArmorType","game/type/LandTargeting","game/type/NavalTargeting","game/rules/ObjectRules","game/WeaponType","game/gameobject/unit/VeteranAbility","game/type/VhpScan","game/math/Vector3"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p,m,f,y,T;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e},function(e){m=e}],execute:function(){var t;(t=f=f||{})[t.Combat=0]="Combat",t[t.Tech=1]="Tech",t[t.Resource=2]="Resource",t[t.Power=3]="Power",e("BuildCat",f),(t=y=y||{})[t.None=0]="None",t[t.BuildingType=1]="BuildingType",t[t.InfantryType=2]="InfantryType",t[t.UnitType=3]="UnitType",t[t.NavalUnitType=4]="NavalUnitType",t[t.AircraftType=5]="AircraftType",e("FactoryType",y),T=class e extends u.ObjectRules{parse(){super.parse(),this.owner=this.ini.getArray("Owner");var t=this.ini.getNumber("AIBasePlanningSide");this.aiBasePlanningSide=-1!==t&&void 0!==r.SideType[t]?t:void 0,this.requiredHouses=this.ini.getArray("RequiredHouses"),this.forbiddenHouses=this.ini.getArray("ForbiddenHouses"),this.requiresStolenAlliedTech=this.ini.getBool("RequiresStolenAlliedTech"),this.requiresStolenSovietTech=this.ini.getBool("RequiresStolenSovietTech"),this.techLevel=this.ini.getNumber("TechLevel",-1),this.cost=this.ini.getNumber("Cost"),this.points=this.ini.getNumber("Points"),this.power=this.ini.getNumber("Power"),this.powered=this.ini.getBool("Powered"),this.prerequisite=this.ini.getArray("Prerequisite"),this.soylent=this.ini.getNumber("Soylent"),this.crateGoodie=this.ini.getBool("CrateGoodie"),this.buildCat=this.ini.getEnum("BuildCat",f,f.Combat),this.adjacent=this.ini.getNumber("Adjacent",1),this.baseNormal=this.ini.getBool("BaseNormal",!0),this.buildLimit=this.ini.getNumber("BuildLimit",Number.POSITIVE_INFINITY),this.airRangeBonus=this.ini.getNumber("AirRangeBonus"),this.guardRange=this.ini.getNumber("GuardRange"),this.defaultToGuardArea=this.ini.getBool("DefaultToGuardArea"),this.eligibileForAllyBuilding=this.ini.getBool("EligibileForAllyBuilding"),this.numberImpassableRows=this.ini.getNumber("NumberImpassableRows"),this.bridgeRepairHut=this.ini.getBool("BridgeRepairHut"),this.constructionYard=this.ini.getBool("ConstructionYard"),this.refinery=this.ini.getBool("Refinery"),this.unitRepair=this.ini.getBool("UnitRepair"),this.unitReload=this.ini.getBool("UnitReload"),this.isBaseDefense=this.ini.getBool("IsBaseDefense"),this.superWeapon=this.parseWeaponName(this.ini.getString("SuperWeapon")),this.chargedAnimTime=this.ini.getNumber("ChargedAnimTime");var T=this.ini.getBool("Naval");this.naval=T,this.underwater=this.ini.getBool("Underwater"),this.waterBound=this.ini.getBool("WaterBound"),this.orePurifier=this.ini.getBool("OrePurifier"),this.cloning=this.ini.getBool("Cloning"),this.nukeSilo=this.ini.getBool("NukeSilo"),this.repairable=this.ini.getBool("Repairable",this.type===i.ObjectType.Building),this.clickRepairable=this.ini.getBool("ClickRepairable",this.type===i.ObjectType.Building),this.unsellable=this.ini.getBool("Unsellable"),this.gdiBarracks=this.ini.getBool("GDIBarracks"),this.nodBarracks=this.ini.getBool("NODBarracks"),this.numberOfDocks=this.ini.getNumber("NumberOfDocks"),this.unitRepair&&!this.numberOfDocks&&(this.numberOfDocks=1),this.factory=this.ini.getEnum("Factory",y,y.None),this.factory===y.UnitType&&T&&(this.factory=y.NavalUnitType),this.weaponsFactory=this.ini.getBool("WeaponsFactory"),this.helipad=this.ini.getBool("Helipad"),this.hospital=this.ini.getBool("Hospital"),this.landTargeting=this.ini.getEnumNumeric("LandTargeting",c.LandTargeting,c.LandTargeting.LandOk),this.navalTargeting=this.ini.getEnumNumeric("NavalTargeting",h.NavalTargeting,h.NavalTargeting.UnderwaterNever),this.tooBigToFitUnderBridge=this.ini.getBool("TooBigToFitUnderBridge",this.type===i.ObjectType.Building),this.canBeOccupied=this.ini.getBool("CanBeOccupied"),this.maxNumberOccupants=this.ini.getNumber("MaxNumberOccupants"),this.leaveRubble=this.ini.getBool("LeaveRubble"),this.undeploysInto=this.ini.getString("UndeploysInto"),this.deploysInto=this.ini.getString("DeploysInto"),this.capturable=this.ini.getBool("Capturable"),this.spyable=this.ini.getBool("Spyable"),this.needsEngineer=this.ini.getBool("NeedsEngineer"),this.c4=this.ini.getBool("C4"),this.canC4=this.ini.getBool("CanC4",!0),this.produceCashStartup=this.ini.getNumber("ProduceCashStartup"),this.produceCashAmount=this.ini.getNumber("ProduceCashAmount"),this.produceCashDelay=this.ini.getNumber("ProduceCashDelay"),this.explosion=this.ini.getArray("Explosion"),this.explodes=this.ini.getBool("Explodes"),this.ifvMode=this.ini.getNumber("IFVMode"),this.turretIndexesByIfvMode=this.parseTurretIndexes(),this.turret=this.ini.getBool("Turret"),this.turretCount=this.ini.getNumber("TurretCount",this.turret?1:0),this.turretAnim=this.ini.getString("TurretAnim"),this.turretAnimIsVoxel=this.ini.getBool("TurretAnimIsVoxel"),this.turretAnimX=this.ini.getNumber("TurretAnimX"),this.turretAnimY=this.ini.getNumber("TurretAnimY"),this.turretAnimZAdjust=this.ini.getNumber("TurretAnimZAdjust"),this.isChargeTurret=this.ini.getBool("IsChargeTurret"),this.overpowerable=this.ini.getBool("Overpowerable"),this.freeUnit=this.ini.getString("FreeUnit"),this.primary=this.parseWeaponName(this.ini.getString("Primary")),this.secondary=this.parseWeaponName(this.ini.getString("Secondary")),this.elitePrimary=this.parseWeaponName(this.ini.getString("ElitePrimary")),this.eliteSecondary=this.parseWeaponName(this.ini.getString("EliteSecondary")),this.weaponCount=this.ini.getNumber("WeaponCount"),this.deathWeapon=this.parseWeaponName(this.ini.getString("DeathWeapon")),this.deathWeaponDamageModifier=this.ini.getNumber("DeathWeaponDamageModifier",1),this.occupyWeapon=this.parseWeaponName(this.ini.getString("OccupyWeapon")),this.eliteOccupyWeapon=this.parseWeaponName(this.ini.getString("EliteOccupyWeapon")),this.veteranAbilities=new Set(this.ini.getEnumArray("VeteranAbilities",g.VeteranAbility)),this.eliteAbilities=new Set([...this.veteranAbilities,...this.ini.getEnumArray("EliteAbilities",g.VeteranAbility)]),this.selfHealing=this.ini.getBool("SelfHealing"),this.wall=this.ini.getBool("Wall"),this.gate=this.ini.getBool("Gate"),this.armor=this.ini.getEnum("Armor",l.ArmorType,l.ArmorType.None,!0),this.strength=Math.floor(this.ini.getNumber("Strength")),this.immune=this.ini.getBool("Immune"),this.immuneToRadiation=this.ini.getBool("ImmuneToRadiation"),this.immuneToPsionics=this.ini.getBool("ImmuneToPsionics"),this.typeImmune=this.ini.getBool("TypeImmune"),this.warpable=this.ini.getBool("Warpable",!0),this.isTilter=this.ini.getBool("IsTilter",!0),this.walkRate=this.ini.getNumber("WalkRate",1),this.idleRate=this.ini.getNumber("IdleRate",0),this.noSpawnAlt=this.ini.getBool("NoSpawnAlt"),this.crusher=this.ini.getBool("Crusher"),this.consideredAircraft=this.ini.getBool("ConsideredAircraft"),this.crashable=this.ini.getBool("Crashable");var v=this.ini.getBool("Landable");this.landable=v,this.airportBound=this.ini.getBool("AirportBound"),this.balloonHover=this.ini.getBool("BalloonHover"),this.hoverAttack=this.ini.getBool("HoverAttack"),this.omniFire=this.ini.getBool("OmniFire"),this.fighter=this.ini.getBool("Fighter"),this.flightLevel=this.ini.getNumber("FlightLevel")||void 0;var b=this.ini.getString("Locomotor");t=this.type===i.ObjectType.Building?a.LocomotorType.Statue:a.LocomotorType.Chrono;if(b?(T=a.locomotorTypesByClsId.get(b))?this.locomotor=T:(console.warn(`Object rules "${this.name}" has invalid Locomotor "${b}"`),this.locomotor=t):this.locomotor=t,this.locomotor!==a.LocomotorType.Statue){let e=a.defaultSpeedsByLocomotor.get(this.locomotor);void 0===e&&(this.type===i.ObjectType.Aircraft||this.consideredAircraft?e=s.SpeedType.Winged:this.type===i.ObjectType.Vehicle?e=this.crusher?s.SpeedType.Track:s.SpeedType.Wheel:this.type===i.ObjectType.Infantry&&(e=s.SpeedType.Foot)),this.speedType=this.ini.getEnum("SpeedType",s.SpeedType,e,!0)}t=[a.LocomotorType.Ship,a.LocomotorType.Vehicle,a.LocomotorType.Chrono].includes(this.locomotor)?65:100,this.speed=u.ObjectRules.iniSpeedToLeptonsPerTick(this.ini.getNumber("Speed"),t),this.movementZone=this.ini.getEnum("MovementZone",o.MovementZone,o.MovementZone.Normal),this.fearless=this.ini.getBool("Fearless"),this.deployer=this.ini.getBool("Deployer"),this.deployFire=this.ini.getBool("DeployFire"),this.deployFireWeapon=this.ini.getNumber("DeployFireWeapon",d.WeaponType.Secondary),this.undeployDelay=this.ini.getNumber("UndeployDelay"),this.fraidycat=this.ini.getBool("Fraidycat",!1),this.isHuman=!this.ini.getBool("NotHuman"),this.organic=this.type===i.ObjectType.Infantry||this.ini.getBool("Organic"),this.occupier=this.ini.getBool("Occupier"),this.engineer=this.ini.getBool("Engineer"),this.ivan=this.ini.getBool("Ivan"),this.civilian=this.ini.getBool("Civilian"),this.agent=this.ini.getBool("Agent"),this.infiltrate=this.ini.getBool("Infiltrate"),this.threatPosed=this.ini.getNumber("ThreatPosed"),this.specialThreatValue=this.ini.getNumber("SpecialThreatValue"),this.canPassiveAquire=this.ini.getBool("CanPassiveAquire",!0),this.canRetaliate=this.ini.getBool("CanRetaliate",!0),this.preventAttackMove=this.ini.getBool("PreventAttackMove"),this.opportunityFire=this.ini.getBool("OpportunityFire"),this.distributedFire=this.ini.getBool("DistributedFire"),this.radialFireSegments=this.ini.getNumber("RadialFireSegments"),this.attackCursorOnFriendlies=this.ini.getBool("AttackCursorOnFriendlies"),this.bombable=this.ini.getBool("Bombable",!0),this.trainable=this.ini.getBool("Trainable",this.type!==i.ObjectType.Building),this.crewed=this.ini.getBool("Crewed"),this.parasiteable=this.ini.getBool("Parasiteable",this.type!==i.ObjectType.Building),this.suppressionThreshold=this.ini.getNumber("SuppressionThreshold"),this.reselectIfLimboed=this.ini.getBool("ReselectIfLimboed"),this.rejoinTeamIfLimboed=this.ini.getBool("RejoinTeamIfLimboed"),this.weight=this.ini.getNumber("Weight"),this.accelerates=this.ini.getBool("Accelerates",!0),this.accelerationFactor=this.ini.getNumber("AccelerationFactor",.03),this.teleporter=this.ini.getBool("Teleporter"),this.canDisguise=this.ini.getBool("CanDisguise"),this.disguiseWhenStill=this.ini.getBool("DisguiseWhenStill"),this.permaDisguise=this.ini.getBool("PermaDisguise"),this.detectDisguise=this.ini.getBool("DetectDisguise"),this.detectDisguiseRange=this.ini.getNumber("DetectDisguiseRange"),this.cloakable=this.ini.getBool("Cloakable"),this.sensors=this.ini.getBool("Sensors"),this.sensorArray=this.ini.getBool("SensorArray"),this.sensorsSight=this.ini.getNumber("SensorsSight"),this.burstDelay=this.parseBurstDelay(),this.vhpScan=this.ini.getEnum("VHPScan",p.VhpScan,p.VhpScan.None,!0),this.pip=this.ini.getEnum("Pip",n.PipColor,n.PipColor.Green,!0),this.passengers=this.ini.getNumber("Passengers"),this.gunner=this.ini.getBool("Gunner"),this.ammo=this.ini.getNumber("Ammo",-1),this.initialAmmo=this.ini.getNumber("InitialAmmo",-1),this.manualReload=this.ini.getBool("ManualReload",this.type===i.ObjectType.Aircraft),this.storage=this.ini.getNumber("Storage"),this.spawned=this.ini.getBool("Spawned"),this.spawns=this.ini.getString("Spawns"),this.spawnsNumber=this.ini.getNumber("SpawnsNumber"),this.spawnRegenRate=this.ini.getNumber("SpawnRegenRate"),this.spawnReloadRate=this.ini.getNumber("SpawnReloadRate"),this.missileSpawn=this.ini.getBool("MissileSpawn"),this.size=this.ini.getNumber("Size",1),this.sizeLimit=this.ini.getNumber("SizeLimit"),this.sight=Math.min(e.MAX_SIGHT,this.ini.getNumber("Sight",1)),this.spySat=this.ini.getBool("SpySat"),this.gapGenerator=this.ini.getBool("GapGenerator"),this.gapRadiusInCells=this.ini.getNumber("GapRadiusInCells"),this.psychicDetectionRadius=this.ini.getNumber("PsychicDetectionRadius"),this.hasRadialIndicator=this.ini.getBool("HasRadialIndicator"),this.harvester=this.ini.getBool("Harvester"),this.unloadingClass=this.ini.getString("UnloadingClass"),this.dock=this.ini.getArray("Dock"),this.radar=this.ini.getBool("Radar"),this.radarInvisible=this.ini.getBool("RadarInvisible"),this.revealToAll=this.ini.getBool("RevealToAll"),this.selectable=!(this.type===i.ObjectType.Aircraft&&!v)&&this.ini.getBool("Selectable",!0),this.isSelectableCombatant=this.ini.getBool("IsSelectableCombatant"),this.invisibleInGame=this.ini.getBool("InvisibleInGame"),this.moveToShroud=this.ini.getBool("MoveToShroud",this.type!==i.ObjectType.Aircraft),this.leadershipRating=this.ini.getNumber("LeadershipRating",5),this.allowedToStartInMultiplayer=this.ini.getBool("AllowedToStartInMultiplayer",!0),this.rot=u.ObjectRules.iniRotToDegsPerTick(this.ini.getNumber("ROT",0)),this.jumpjetAccel=this.ini.getNumber("JumpJetAccel",2),this.jumpjetClimb=this.ini.getNumber("JumpjetClimb",5),this.jumpjetCrash=this.ini.getNumber("JumpjetCrash",5),this.jumpjetDeviation=this.ini.getNumber("JumpjetDeviation",40),this.jumpjetHeight=this.ini.getNumber("JumpjetHeight",500),this.jumpjetNoWobbles=this.ini.getBool("JumpjetNoWobbles"),this.jumpjetSpeed=this.ini.getNumber("JumpjetSpeed",14),this.jumpjetTurnRate=u.ObjectRules.iniRotToDegsPerTick(this.ini.getNumber("JumpJetTurnRate",4)),this.jumpjetWobbles=this.ini.getNumber("JumpjetWobbles",.15),this.pitchSpeed=this.ini.getNumber("PitchSpeed",.25),this.pitchAngle=1<=this.pitchSpeed?0:20,this.damageParticleSystems=this.ini.getArray("DamageParticleSystems"),v=this.ini.getNumberArray("DamageSmokeOffset",void 0,[0,0,0]),this.damageSmokeOffset=new m.Vector3(v[0],v[2]/Math.SQRT2,v[1]),this.minDebris=this.ini.getNumber("MinDebris"),this.maxDebris=this.ini.getNumber("MaxDebris"),this.debrisTypes=this.ini.getArray("DebrisTypes"),this.debrisAnims=this.ini.getArray("DebrisAnims"),this.isLightpost="GALITE"===this.imageName,this.lightVisibility=this.ini.getNumber("LightVisibility",5e3),this.lightIntensity=this.ini.getNumber("LightIntensity"),this.lightRedTint=this.ini.getNumber("LightRedTint",1),this.lightGreenTint=this.ini.getNumber("LightGreenTint",1),this.lightBlueTint=this.ini.getNumber("LightBlueTint",1),this.ambientSound=this.ini.getString("AmbientSound")||void 0,this.createSound=this.ini.getString("CreateSound")||void 0,this.deploySound=this.ini.getString("DeploySound")||void 0,this.undeploySound=this.ini.getString("UndeploySound")||void 0,this.voiceSelect=this.ini.getString("VoiceSelect")||void 0,this.voiceMove=this.ini.getString("VoiceMove")||void 0,this.voiceAttack=this.ini.getString("VoiceAttack")||void 0,this.voiceFeedback=this.ini.getString("VoiceFeedback")||void 0,this.voiceSpecialAttack=this.ini.getString("VoiceSpecialAttack")||void 0,this.voiceEnter=this.ini.getString("VoiceEnter")||void 0,this.voiceCapture=this.ini.getString("VoiceCapture")||void 0,this.voiceCrashing=this.ini.getString("VoiceCrashing")||void 0,this.crashingSound=this.ini.getString("CrashingSound")||void 0,this.impactLandSound=this.ini.getString("ImpactLandSound")||void 0,this.auxSound1=this.ini.getString("AuxSound1")||void 0,this.auxSound2=this.ini.getString("AuxSound2")||void 0,this.dieSound=this.ini.getString("DieSound")||void 0,this.moveSound=this.ini.getString("MoveSound")||void 0,this.enterWaterSound=this.ini.getString("EnterWaterSound")||void 0,this.leaveWaterSound=this.ini.getString("LeaveWaterSound")||void 0,this.turretRotateSound=this.ini.getString("TurretRotateSound")||void 0,this.workingSound=this.ini.getString("WorkingSound")||void 0,this.notWorkingSound=this.ini.getString("NotWorkingSound")||void 0,this.chronoInSound=this.ini.getString("ChronoInSound")||void 0,this.chronoOutSound=this.ini.getString("ChronoOutSound")||void 0,this.enterTransportSound=this.ini.getString("EnterTransportSound")||void 0,this.leaveTransportSound=this.ini.getString("LeaveTransportSound")||void 0}parseWeaponName(e){return e&&"none"!==e.toLowerCase()?e:void 0}parseTurretIndexes(){let e=new Map;return this.ini.getBool("Gunner")&&this.ini.entries.forEach(((t,i)=>{var r=i.match(/^(.*)TurretWeapon$/i);r&&(r=r[1]+"TurretIndex",this.ini.has(r)&&e.set(Number(t),this.ini.getNumber(r)))})),e}parseBurstDelay(){let e=[];for(let t=0;t<4;++t)e.push(this.ini.has("BurstDelay"+t)?this.ini.getNumber("BurstDelay"+t):void 0);return e}hasOwner(e){return!!this.owner.length&&-1!==this.owner.indexOf(e.name)}isAvailableTo(e){return(!this.requiredHouses.length||-1!==this.requiredHouses.indexOf(e.name))&&-1===this.forbiddenHouses.indexOf(e.name)}get proneWhenAttacked(){return!this.fearless&&this.isHuman}getWeaponAtIndex(e){return this.parseWeaponName(this.ini.getString("Weapon"+(e+1)))}getEliteWeaponAtIndex(e){return this.parseWeaponName(this.ini.getString("EliteWeapon"+(e+1)))}},e("TechnoRules",T),T.MAX_SIGHT=11}}})),System.register("game/art/RotorData",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("game/art/ObjectArt",["engine/type/PaletteType","engine/type/ObjectType","game/Coords","game/art/SequenceReader","engine/type/LightingType","game/type/LandType","game/rules/OverlayRules","game/rules/TechnoRules","game/rules/TerrainRules","game/rules/ProjectileRules","game/art/FlhCoords","game/math/Vector2","game/math/Vector3"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p,m;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e}],execute:function(){e("ObjectArt",m=class e{constructor(e,t,i){this.sequences=new Map,this.dockingOffsets=[],this.type=e,this.rules=t,this.art=i,this.init()}static getDefaultPalette(e){switch(e){case r.ObjectType.Building:case r.ObjectType.Aircraft:case r.ObjectType.Infantry:case r.ObjectType.Vehicle:case r.ObjectType.Projectile:case r.ObjectType.VoxelAnim:return i.PaletteType.Unit;case r.ObjectType.Overlay:return i.PaletteType.Overlay;case r.ObjectType.Smudge:case r.ObjectType.Terrain:return i.PaletteType.Iso;default:return r.ObjectType.Animation,i.PaletteType.Anim}}static getDefaultLighting(e){switch(e){case r.ObjectType.Animation:return a.LightingType.None;case r.ObjectType.Aircraft:case r.ObjectType.Building:case r.ObjectType.Infantry:case r.ObjectType.Vehicle:return a.LightingType.Ambient;case r.ObjectType.Projectile:case r.ObjectType.VoxelAnim:return a.LightingType.Global;case r.ObjectType.Overlay:case r.ObjectType.Smudge:case r.ObjectType.Terrain:default:return a.LightingType.Full}}static getDefaultRemapability(e){switch(e){case r.ObjectType.Aircraft:case r.ObjectType.Building:case r.ObjectType.Infantry:case r.ObjectType.Vehicle:return!0;case r.ObjectType.Overlay:case r.ObjectType.Smudge:case r.ObjectType.Terrain:case r.ObjectType.Animation:case r.ObjectType.Projectile:case r.ObjectType.VoxelAnim:return!1;default:throw new Error("Unknown object type "+e)}}static getDefaultDrawOffset(e){switch(e){case r.ObjectType.Animation:case r.ObjectType.Building:case r.ObjectType.Vehicle:case r.ObjectType.Infantry:case r.ObjectType.Overlay:case r.ObjectType.Smudge:case r.ObjectType.Projectile:case r.ObjectType.VoxelAnim:return new g.Vector2(0,0);case r.ObjectType.Terrain:case r.ObjectType.Aircraft:return new g.Vector2(0,(s.Coords.ISO_TILE_SIZE+1)/2);default:throw new Error("Unknown object type "+e)}}static getDefaultShadow(e){switch(e){case r.ObjectType.Overlay:case r.ObjectType.Building:case r.ObjectType.Infantry:case r.ObjectType.Terrain:case r.ObjectType.Vehicle:case r.ObjectType.Aircraft:return!0;default:case r.ObjectType.Smudge:case r.ObjectType.Animation:case r.ObjectType.Projectile:case r.ObjectType.VoxelAnim:return!1}}static getDefaultHeight(e){switch(e){case r.ObjectType.Building:return 2;case r.ObjectType.Infantry:case r.ObjectType.Vehicle:case r.ObjectType.Aircraft:return 1;default:return 0}}static factory(e,t,i,s){let a=new this(e,t,s);var o;return e===r.ObjectType.Infantry&&(!(o=s.getString("Sequence"))||(o=i.getSection(o))&&(a.sequences=(new n.SequenceReader).readIni(o))),a}init(){this.image=[r.ObjectType.Infantry,r.ObjectType.Vehicle,r.ObjectType.Aircraft].includes(this.type)?"":this.art.getString("Image"),this.report=this.art.getString("Report")||void 0,this.readRotors(),this.noHva=this.art.getBool("NoHVA"),this.startSound=this.art.getString("StartSound")||void 0,this.readMuzzleFlash(),this.readPaletteAndLightingTypes(),this.readRemapability(),this.readFlatness(),this.readDockingOffsets();var t=this.art.getNumberArray("QueueingCell");this.queueingCell=t.length?new g.Vector2(t[0],t[1]):void 0,this.demandLoad=this.art.getBool("DemandLoad");var i=this.art.getBool("UseLineTrail"),s=this.art.getNumberArray("LineTrailColor");t=this.art.getNumber("LineTrailColorDecrement",e.DEFAULT_LINE_TRAIL_DEC);i&&s.length?(this.useLineTrail=!0,this.lineTrailColor=s,this.lineTrailColorDecrement=t):this.useLineTrail=!1,this.crater=this.art.getBool("Crater"),this.forceBigCraters=this.art.getBool("ForceBigCraters"),this.scorch=this.art.getBool("Scorch"),this.height=this.art.getNumber("Height",e.getDefaultHeight(this.type)),this.isVoxel=this.art.getBool("Voxel"),this.occupyHeight=this.art.getNumber("OccupyHeight",this.height),this.type===r.ObjectType.Building?this.canHideThings=this.art.getBool("CanHideThings",!0):this.canHideThings=!1,this.canBeHidden=this.art.getBool("CanBeHidden",!0),this.addOccupy=this.readAddRemoveOccupy("AddOccupy"),this.removeOccupy=this.readAddRemoveOccupy("RemoveOccupy"),this.rotates=this.art.getBool("Rotates")}get imageName(){return(this.image||this.rules.imageName)+(this.rules.alternateArcticArt?"A":"")}get cameo(){return(this.art.getString("Cameo")||e.MISSING_CAMEO).toLowerCase()}get altCameo(){return(this.art.getString("AltCameo")||e.MISSING_CAMEO).toLowerCase()}get useTheaterExtension(){return this.art.getBool("Theater")}readPaletteAndLightingTypes(){this.paletteType=i.PaletteType.Default,this.lightingType=a.LightingType.Default,(this.rules instanceof l.OverlayRules?this.rules.noUseTileLandType:void 0)&&(this.paletteType=i.PaletteType.Iso,this.lightingType=a.LightingType.Full),this.art.getBool("TerrainPalette")||this.art.getBool("ShouldUseCellDrawer")?this.paletteType=i.PaletteType.Iso:this.art.getBool("AnimPalette")?(this.paletteType=i.PaletteType.Anim,this.lightingType=a.LightingType.None):this.art.getString("Palette")&&(this.paletteType=i.PaletteType.Custom,this.customPaletteName=this.art.getString("Palette")),this.art.getBool("AltPalette")&&(this.paletteType=i.PaletteType.Unit),(this.rules instanceof l.OverlayRules||this.rules instanceof c.TechnoRules)&&this.rules.wall&&(this.paletteType=i.PaletteType.Unit,this.lightingType=a.LightingType.Ambient),(this.rules instanceof h.TerrainRules||this.rules instanceof c.TechnoRules)&&this.rules.gate&&(this.paletteType=i.PaletteType.Unit),this.rules instanceof h.TerrainRules&&this.rules.spawnsTiberium&&(this.paletteType=i.PaletteType.Unit,this.lightingType=a.LightingType.None),this.rules instanceof l.OverlayRules&&(this.rules.isVeins&&(this.paletteType=i.PaletteType.Unit,this.lightingType=a.LightingType.None),this.rules.isVeinholeMonster&&(this.paletteType=i.PaletteType.Unit,this.lightingType=a.LightingType.None),this.rules.tiberium&&(this.lightingType=a.LightingType.None),this.rules.land===o.LandType.Railroad&&(this.paletteType=i.PaletteType.Iso,this.lightingType=a.LightingType.Full),this.rules.crate&&(this.paletteType=i.PaletteType.Iso,this.lightingType=a.LightingType.Full)),this.paletteType===i.PaletteType.Default&&(this.paletteType=e.getDefaultPalette(this.type)),this.lightingType===a.LightingType.Default&&(this.lightingType=e.getDefaultLighting(this.type))}readRemapability(){this.remapable=e.getDefaultRemapability(this.type),this.art.getBool("TerrainPalette")||this.art.getBool("AnimPalette")?this.remapable=!1:this.rules instanceof u.ProjectileRules&&this.rules.firersPalette&&(this.remapable=!0)}readFlatness(){let e=!1;this.type===r.ObjectType.Building||this.type===r.ObjectType.Animation?e=this.art.getBool("Flat"):this.type===r.ObjectType.Smudge&&(e=!0),this.rules instanceof l.OverlayRules&&(this.rules.wall||this.rules.crate||this.rules.isARock||(e=!0)),this.flat=e}readRotors(){var e=this.art.getArray("Rotors");if(e.length){let i=[];for(let r=0;r{t[l.NotifySpawn.onSpawn](this,e)}))}onUnspawn(e){this.isSpawned=!1,this.traits.filter(c.NotifyUnspawn).forEach((t=>{t[c.NotifyUnspawn.onUnspawn](this,e)}))}onDestroy(e,t,i){this.traits.filter(n.NotifyDestroy).forEach((r=>{r[n.NotifyDestroy.onDestroy](this,e,t,i)}))}onOwnerChange(e,t){this.traits.filter(o.NotifyOwnerChange).forEach((i=>{i[o.NotifyOwnerChange.onChange](this,e,t)}))}onAttack(e,t){this.traits.filter(h.NotifyAttack).forEach((i=>{i[h.NotifyAttack.onAttack](this,t,e)}))}addTrait(e){this.traits.add(e),e[s.NotifyTick.onTick]&&this.cachedTraits.tick.push(e)}getUiName(){return this.rules.uiName}getHash(){var e=this.position.worldPosition;return a.fnv32a([this.id,...new Uint8Array(new Float64Array([e.x,e.y,e.z]).buffer),...this.traits.getAll().map((e=>e.getHash?.()??0))])}debugGetState(){return{id:this.id,position:this.position.worldPosition.toArray(),traits:this.traits.getAll().reduce(((e,t)=>{var i=t.debugGetState?.();return void 0!==i&&(e[t.constructor.name]=i),e}),{})}}dispose(){this.isDisposed=!0,this.traits.dispose(),this.cachedTraits.tick.length=0}})}}})),System.register("game/World",["util/event"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("World",class{constructor(){this.allObjects=new Map,this._onObjectSpawned=new i.EventDispatcher,this._onObjectRemoved=new i.EventDispatcher}get onObjectSpawned(){return this._onObjectSpawned.asEvent()}get onObjectRemoved(){return this._onObjectRemoved.asEvent()}spawnObject(e){if(this.allObjects.has(e.id))throw new Error("Trying to add an already existing object");this.allObjects.set(e.id,e),this._onObjectSpawned.dispatch(this,e)}removeObject(e){if(!this.allObjects.has(e.id))throw new Error("Trying to remove non-existent object");this.allObjects.delete(e.id),this._onObjectRemoved.dispatch(this,e)}hasObjectId(e){return this.allObjects.has(e)}getObjectById(e){if(!this.allObjects.has(e))throw new Error(`Object with id ${e} doesn't exist`);return this.allObjects.get(e)}getAllObjects(){return[...this.allObjects.values()]}})}}})),System.register("engine/gfx/RenderableContainer",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("RenderableContainer",class{constructor(e){this.children=new Set,this.renderQueue=[],e&&this.set3DObject(e)}set3DObject(e){this.container=e}get3DObject(){return this.container}getChildren(){return[...this.children]}add(...e){for(var t of e)this.children.has(t)||(this.children.add(t),this.renderQueue.push(t))}remove(...e){for(var t of e){var i;this.children.has(t)&&(this.children.delete(t),-1===(i=this.renderQueue.indexOf(t))?(t=t.get3DObject())&&t.parent&&this.get3DObject().remove(t):this.renderQueue.splice(i,1))}}removeAll(){this.remove(...this.children)}processRenderQueue(){if(!this.get3DObject())throw new Error("A THREE.Object3D must be passed in the constructor or using the setter.");let e;for(;e=this.renderQueue.shift();){e.create3DObject();var t=e.get3DObject();t&&this.get3DObject().add(t)}}create3DObject(){this.processRenderQueue()}update(e,t){for(var i of(this.renderQueue.length&&this.processRenderQueue(),this.children))this.renderQueue.length&&this.processRenderQueue(),i.update(e,t)}})}}})),System.register("engine/renderable/CameraPan",["util/math"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("CameraPan",class{constructor(e){this.freeCamera=e,this.pan={x:0,y:0}}setPanLimits(e){this.panLimits=e,this.setPan({x:this.pan.x,y:this.pan.y})}getPanLimits(){return{...this.panLimits}}getPan(){return{...this.pan}}setPan(e){this.panLimits&&!this.freeCamera.value&&(e.x=i.clamp(e.x,this.panLimits.x,this.panLimits.x+this.panLimits.width),e.y=i.clamp(e.y,this.panLimits.y,this.panLimits.y+this.panLimits.height)),this.pan={x:e.x,y:e.y}}})}}})),System.register("engine/renderable/CameraZoom",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("CameraZoom",class{constructor(e){this.freeCamera=e,this.zoom=1}getZoom(){return this.zoom}applyStep(e){this.freeCamera.value&&(this.zoom=Math.max(.1,this.zoom+e))}})}}})),System.register("engine/Lighting",["engine/type/LightingType","data/map/MapLighting","util/event","util/disposable/CompositeDisposable"],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e}],execute:function(){a=new THREE.Vector3,e("Lighting",class{constructor(e){if(this.baseAmbient=new r.MapLighting,this.tileLights=new Map,this.disposables=new n.CompositeDisposable,this._onChange=new s.EventDispatcher,e){this.baseAmbient.copy(e.getAmbient());let t=e=>{this.baseAmbient.copy(e),this._onChange.dispatch(this,void 0)};e.onChange.subscribe(t),this.disposables.add((()=>e.onChange.unsubscribe(t)))}}get onChange(){return this._onChange.asEvent()}get mapLighting(){return this.ambientOverride??this.baseAmbient}forceUpdate(e){this._onChange.dispatch(this,e)}applyAmbientOverride(e){this.ambientOverride=e,this._onChange.dispatch(this,void 0)}getBaseAmbient(){return(new r.MapLighting).copy(this.baseAmbient)}addTileLight(e,t){this.tileLights.has(e)||this.tileLights.set(e,new Set),this.tileLights.get(e).add(t)}removeTileLight(e,t){let i=this.tileLights.get(e);i&&(i.delete(t),i.size||this.tileLights.delete(e))}compute(e,t,r=0){return e===i.LightingType.None?new THREE.Vector3(1,1,1):this.computeTint(e).add(this.computeTileTint(t,e,a)).multiplyScalar(this.mapLighting.ambient+this.mapLighting.ground+this.computeLevel(e,t.z+r)+this.computeTileLightIntensity(t))}computeNoAmbient(e,t,i=0){return this.computeLevel(e,t.z+i)+this.computeTileLightIntensity(t)}computeLevel(e,t){return e>=i.LightingType.Level?this.mapLighting.level*(t-1):0}computeTint(e){let t=1,r=1,s=1;return(e>=i.LightingType.Full||this.mapLighting.forceTint)&&(t=this.mapLighting.red,r=this.mapLighting.green,s=this.mapLighting.blue),new THREE.Vector3(t,r,s)}computeTileTint(e,t,r=new THREE.Vector3){let s=0,n=0,a=0;if(t>=i.LightingType.Full){var o=this.tileLights.get(e);if(o?.size)for(var l of o)s+=l.red,n+=l.green,a+=l.blue}return r.set(s,n,a)}computeTileLightIntensity(e){let t=0;var i=this.tileLights.get(e);if(i?.size)for(var r of i)t+=r.intensity;return t}getAmbientIntensity(){return this.mapLighting.ambient+this.mapLighting.ground}dispose(){this.disposables.dispose()}})}}})),System.register("engine/renderable/entity/unit/ShadowQuality",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.Off=0]="Off",t[t.Low=1]="Low",t[t.Medium=2]="Medium",t[t.High=3]="High",e("ShadowQuality",i)}}})),System.register("engine/gfx/batch/BatchedMesh",[],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.Instancing=0]="Instancing",t[t.Merging=1]="Merging",e("BatchMode",i),r=class extends THREE.Mesh{constructor(e,t,r=i.Instancing){super(e,t),this.geometry=e,this.material=t,this.batchMode=r,this.isBatchedMesh=!0,this.castShadow=!1,this.opacity=1,this.extraLight=new THREE.Vector3(0,0,0),this.paletteIndex=0,this.clippingPlanes=[],this.clippingPlanesHash="",this.layers.disable(0)}getOpacity(){return this.opacity}setOpacity(e){this.opacity=e}getExtraLight(){return this.extraLight}setExtraLight(e){this.extraLight=e}getPaletteIndex(){return this.paletteIndex}setPaletteIndex(e){this.paletteIndex=e}getClippingPlanes(){return this.clippingPlanes}setClippingPlanes(e){this.clippingPlanes=e,this.updateClippingPlanesHash(e)}updateClippingPlanesHash(e){this.clippingPlanesHash=e.map((e=>[...e.normal.toArray(),e.constant])).flat().join(",")}getClippingPlanesHash(){return this.clippingPlanesHash}},e("BatchedMesh",r)}}})),System.register("engine/gfx/material/paletteShaderLib",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("paletteShaderLib",{uniforms:{palette:{type:"t",value:null},paletteOffsetCount:{value:[0,1]},extraLight:{value:new THREE.Vector3(0,0,0)}},instanceParsVertex:"\n#ifdef INSTANCE_TRANSFORM\n attribute float instancePaletteOffset;\n varying float vInstancePaletteOffset;\n attribute vec3 instanceExtraLight;\n varying vec3 vInstanceExtraLight;\n#endif\n",instanceVertex:"\n #ifdef INSTANCE_TRANSFORM\n vInstancePaletteOffset = instancePaletteOffset;\n vInstanceExtraLight = instanceExtraLight;\n #endif\n",paletteColorParsVertex:"\n#ifdef VERTEX_PALETTE_OFFSET\n attribute float vertexPaletteOffset;\n varying float vVertexPaletteOffset;\n#endif\n",paletteColorVertex:"\n #ifdef VERTEX_PALETTE_OFFSET\n vVertexPaletteOffset = vertexPaletteOffset;\n #endif\n",paletteColorParsFrag:"\nuniform sampler2D palette;\n#ifdef VERTEX_PALETTE_OFFSET\n varying float vVertexPaletteOffset;\n#endif\nuniform vec2 paletteOffsetCount;\nuniform vec3 extraLight;\n\n#ifdef INSTANCE_TRANSFORM\nvarying float vInstancePaletteOffset;\nvarying vec3 vInstanceExtraLight;\n#endif\n",paletteColorFrag:"\n float paletteColorIndex;\n\n #ifdef USE_MAP\n paletteColorIndex = texelColor.a;\n #endif\n\n #ifdef USE_COLOR\n paletteColorIndex = vColor.r;\n #endif\n\n #ifdef INSTANCE_TRANSFORM\n diffuseColor = texture2D(palette, vec2(paletteColorIndex, (vInstancePaletteOffset + 0.5) / paletteOffsetCount.y));\n #elif defined(VERTEX_PALETTE_OFFSET)\n diffuseColor = texture2D(palette, vec2(paletteColorIndex, (vVertexPaletteOffset + 0.5) / paletteOffsetCount.y));\n #else\n diffuseColor = texture2D(palette, vec2(paletteColorIndex, (paletteOffsetCount.x + 0.5) / paletteOffsetCount.y));\n #endif\n\n #ifdef INSTANCE_OPACITY\n diffuseColor.a *= vInstanceOpacity * opacity;\n #else\n diffuseColor.a *= opacity;\n #endif\n diffuseColor = clamp(diffuseColor, 0.0, 1.0);\n",paletteBasicLightFragment:"\n #ifdef INSTANCE_TRANSFORM\n diffuseColor.rgb += vInstanceExtraLight.rgb * diffuseColor.rgb;\n #else\n diffuseColor.rgb += extraLight.rgb * diffuseColor.rgb;\n #endif\n\n diffuseColor = clamp(diffuseColor, 0.0, 1.0);\n",paletteFullLightFragment:"\n #ifdef INSTANCE_TRANSFORM\n vec3 extraIrradiance = vInstanceExtraLight.rgb;\n #else\n vec3 extraIrradiance = extraLight.rgb;\n #endif\n\n #if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n #pragma unroll_loop\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n getDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\n directLight.color = extraIrradiance;\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n #endif\n\n #if defined( RE_IndirectDiffuse )\n RE_IndirectDiffuse( extraIrradiance, geometry, material, reflectedLight );\n #endif\n",vertexColorMultParsVertex:"\n#ifdef USE_VERTEX_COLOR_MULT\nattribute vec4 vertexColorMult;\nvarying vec4 vVertexColorMult;\n#endif\n",vertexColorMultVertex:"\n #ifdef USE_VERTEX_COLOR_MULT\n vVertexColorMult = vertexColorMult;\n #endif\n",vertexColorMultParsFrag:"\n#ifdef USE_VERTEX_COLOR_MULT\nvarying vec4 vVertexColorMult;\n#endif\n",vertexColorMultFrag:"\n #ifdef USE_VERTEX_COLOR_MULT\n diffuseColor.rgba *= vVertexColorMult.rgba;\n #endif\n"})}}})),System.register("engine/gfx/material/PalettePhongMaterial",["engine/gfx/material/paletteShaderLib"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r={uniforms:THREE.UniformsUtils.merge([THREE.ShaderLib.phong.uniforms,i.paletteShaderLib.uniforms]),vertexShader:THREE.ShaderChunk.meshphong_vert.replace("#include ","#include \n"+i.paletteShaderLib.instanceParsVertex).replace("void main() {","void main() {\n"+i.paletteShaderLib.instanceVertex),fragmentShader:THREE.ShaderChunk.meshphong_frag.replace("#include ","#include \n"+i.paletteShaderLib.paletteColorParsFrag).replace("#include ","#include \n"+i.paletteShaderLib.paletteColorFrag).replace("#include ","#include \n"+i.paletteShaderLib.paletteFullLightFragment)},s=class extends THREE.MeshPhongMaterial{constructor({palette:e,paletteCount:t,paletteOffset:i,extraLight:s,...n}={}){super(n),this.uniforms=THREE.UniformsUtils.clone(r.uniforms),e&&(this.palette=e),t&&(this.paletteCount=t),i&&(this.paletteOffset=i),s&&this.extraLight.copy(s),this.vertexShader=r.vertexShader,this.fragmentShader=r.fragmentShader,this.type="PalettePhongMaterial"}get palette(){return this.uniforms.palette.value}set palette(e){this.uniforms.palette.value=e}get paletteOffset(){return this.uniforms.paletteOffsetCount.value[0]}set paletteOffset(e){this.uniforms.paletteOffsetCount.value[0]=e}get paletteCount(){return this.uniforms.paletteOffsetCount.value[1]}set paletteCount(e){this.uniforms.paletteOffsetCount.value[1]=e}get extraLight(){return this.uniforms?.extraLight.value}set extraLight(e){this.uniforms.extraLight.value=e}copy(e){return super.copy(e),this.fragmentShader=e.fragmentShader,this.vertexShader=e.vertexShader,this.uniforms=THREE.UniformsUtils.clone(e.uniforms),this.palette=e.palette,this}},e("PalettePhongMaterial",s)}}})),System.register("engine/gfx/batch/InstancedMesh",[],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[],execute:function(){(i=new THREE.MeshDepthMaterial).depthPacking=THREE.RGBADepthPacking,i.clipping=!0,i.defines={INSTANCE_TRANSFORM:""},a=THREE.ShaderLib.distanceRGBA,r=THREE.UniformsUtils.clone(a.uniforms),s={USE_SHADOWMAP:"",INSTANCE_TRANSFORM:""},n=new THREE.ShaderMaterial({defines:s,uniforms:r,vertexShader:a.vertexShader,fragmentShader:a.fragmentShader,clipping:!0}),a=class extends THREE.Mesh{constructor(e,t,r,s,a=!1){super((new THREE.InstancedBufferGeometry).copy(e)),this.maxInstances=r,this.uniformScale=s,this.useInstanceColor=a,this.initAttributes(this.geometry),this.material=this.decorateMaterial(t.clone()),this.frustumCulled=!1,this.customDepthMaterial=i,this.customDistanceMaterial=n}initAttributes(e){let t=[];for(let e=0;e<4;e++)t.push({name:"instanceMatrix"+e,data:new Float32Array(4*this.maxInstances),itemSize:4,normalized:!0});for(var{name:i,data:r,itemSize:s,normalized:n}of(this.useInstanceColor&&t.push({name:"instanceColor",data:new Uint8Array(3*this.maxInstances),itemSize:3,normalized:!0}),t.push({name:"instanceOpacity",data:new Float32Array(this.maxInstances).fill(1),itemSize:1,normalized:!0}),t)){let t=new THREE.InstancedBufferAttribute(r,s,n,1);t.dynamic=!0,e.addAttribute(i,t)}this.instanceMatrixAttributes=new Array(4).fill(0).map(((t,i)=>e.getAttribute("instanceMatrix"+i)))}decorateMaterial(e){let t=e;return t.defines??(t.defines={}),t.defines.INSTANCE_TRANSFORM="",this.uniformScale?t.defines.INSTANCE_UNIFORM="":delete t.defines.INSTANCE_UNIFORM,this.useInstanceColor?t.defines.INSTANCE_COLOR="":delete t.defines.INSTANCE_COLOR,t.defines.INSTANCE_OPACITY="",e}setRenderCount(e){if(e>this.maxInstances)throw new RangeError("Exceeded maximum number of instances");this.geometry.maxInstancedCount=e}setMatrixAt(e,t){for(let r=0;r<4;r++){var i=4*r;this.instanceMatrixAttributes[r].setXYZW(e,t.elements[i++],t.elements[i++],t.elements[i++],t.elements[+i])}}updateFromMeshes(e){var t,i=!!e[0].material.palette,r=this.geometry.attributes;let s=r.instanceOpacity,n=r.instancePaletteOffset,a=r.instanceExtraLight;for(let t=0,r=e.length;tthis.maxInstances)throw new RangeError("Meshes array exceeds max number of instances");var t;e.length?(t=!!e[0].material.palette,this.instancedMesh||(this.instancedMesh=new i.InstancedMesh(e[0].geometry,e[0].material,this.maxInstances,!0),this.instancedMesh.castShadow=this._castShadow,this.instancedMesh.renderOrder=this._renderOrder,this.instancedMesh.material.clippingPlanes=this._clippingPlanes,t&&(this.instancedMesh.geometry.addAttribute("instancePaletteOffset",new THREE.InstancedBufferAttribute(new Float32Array(this.maxInstances),1)),this.instancedMesh.geometry.addAttribute("instanceExtraLight",new THREE.InstancedBufferAttribute(new Float32Array(3*this.maxInstances),3))),this.target?.add(this.instancedMesh)),this.instancedMesh.updateFromMeshes(e)):this.instancedMesh&&(this.target?.remove(this.instancedMesh),this.instancedMesh.dispose(),this.instancedMesh=void 0)}update(){}dispose(){this.instancedMesh?.dispose()}})}}})),System.register("engine/gfx/material/PaletteBasicMaterial",["engine/gfx/material/paletteShaderLib"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r={uniforms:THREE.UniformsUtils.merge([THREE.ShaderLib.basic.uniforms,i.paletteShaderLib.uniforms]),vertexShader:THREE.ShaderChunk.meshbasic_vert.replace("#include ","#include \n"+[i.paletteShaderLib.instanceParsVertex,i.paletteShaderLib.paletteColorParsVertex,i.paletteShaderLib.vertexColorMultParsVertex].join("\n")).replace("void main() {","void main() {\n"+[i.paletteShaderLib.instanceVertex,i.paletteShaderLib.paletteColorVertex,i.paletteShaderLib.vertexColorMultVertex].join("\n")),fragmentShader:THREE.ShaderChunk.meshbasic_frag.replace("#include ","#include \n"+[i.paletteShaderLib.paletteColorParsFrag,i.paletteShaderLib.vertexColorMultParsFrag].join("\n")).replace("#include ","#include \n"+[i.paletteShaderLib.paletteColorFrag,i.paletteShaderLib.paletteBasicLightFragment,i.paletteShaderLib.vertexColorMultFrag].join("\n"))},s=class extends THREE.MeshBasicMaterial{constructor({palette:e,paletteCount:t,paletteOffset:i,extraLight:s,useVertexColorMult:n,...a}={}){super(a),this.uniforms=THREE.UniformsUtils.clone(r.uniforms),e&&(this.palette=e),t&&(this.paletteCount=t),i&&(this.paletteOffset=i),s&&this.extraLight.copy(s),n&&(this.useVertexColorMult=n),this.vertexShader=r.vertexShader,this.fragmentShader=r.fragmentShader,this.type="PaletteBasicMaterial"}get palette(){return this.uniforms.palette.value}set palette(e){this.uniforms.palette.value=e}get paletteOffset(){return this.uniforms.paletteOffsetCount.value[0]}set paletteOffset(e){this.uniforms.paletteOffsetCount.value[0]=e}get paletteCount(){return this.uniforms.paletteOffsetCount.value[1]}set paletteCount(e){this.uniforms.paletteOffsetCount.value[1]=e}get extraLight(){return this.uniforms.extraLight.value}set extraLight(e){this.uniforms.extraLight.value=e}set useVertexColorMult(e){e?(this.defines??(this.defines={}),this.defines.USE_VERTEX_COLOR_MULT=""):this.defines&&delete this.defines.USE_VERTEX_COLOR_MULT}copy(e){return super.copy(e),this.fragmentShader=e.fragmentShader,this.vertexShader=e.vertexShader,this.uniforms=THREE.UniformsUtils.clone(e.uniforms),this.palette=e.palette,this}},e("PaletteBasicMaterial",s)}}})),System.register("engine/gfx/batch/MergedSpriteMesh",["util/array","engine/gfx/material/PaletteBasicMaterial"],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=new THREE.Vector3,n=new THREE.Vector4,a=class e extends THREE.Mesh{constructor(t,i,r){super(e.createMergedGeometry(t,r,i)),this.maxInstances=r,this.material=this.decorateMaterial(i.clone()),this.verticesPerItem=t.getAttribute("position").count,this.indicesPerItem=t.index?.count,this.frustumCulled=!1}static createMergedGeometry(e,t,i){let s=new THREE.BufferGeometry;for(var n of Object.keys(e.attributes)){let i=e.getAttribute(n);var a=new i.array.constructor(t*i.array.length);s.addAttribute(n,new THREE.BufferAttribute(a,i.itemSize,i.normalized))}var o,l=e.getAttribute("position").count;for(o of(i instanceof r.PaletteBasicMaterial&&s.addAttribute("vertexColorMult",new THREE.BufferAttribute(new Float32Array(l*t*4),4)),i.palette&&s.addAttribute("vertexPaletteOffset",new THREE.BufferAttribute(new Float32Array(l*t),1)),Object.values(s.attributes)))o.setDynamic(!0);if(e.index){s.setIndex(new THREE.BufferAttribute(new Uint32Array(t*e.index.array.length),1));for(let i=0;ie+t)),i*e.index.array.length)}}return s}decorateMaterial(e){let t=e;return t.defines??(t.defines={}),e.palette&&(t.defines.VERTEX_PALETTE_OFFSET=""),e instanceof r.PaletteBasicMaterial&&(t.useVertexColorMult=!0),e}updateFromMeshes(e){var t,i=this.geometry.attributes,r=i.position,a=i.uv,o=i.vertexColorMult,l=i.vertexPaletteOffset,c=e.length;if(c>this.maxInstances)throw new RangeError("Exceeded maximum number of instances");for(let t=0;tthis.maxInstances)throw new RangeError("Meshes array exceeds max number of instances");e.length?(this.mergedGeoMesh||(this.mergedGeoMesh=new i.MergedSpriteMesh(e[0].geometry,e[0].material,this.maxInstances),this.mergedGeoMesh.castShadow=this._castShadow,this.mergedGeoMesh.receiveShadow=this._receiveShadow,this.mergedGeoMesh.renderOrder=this._renderOrder,this.mergedGeoMesh.material.clippingPlanes=this._clippingPlanes,this.target?.add(this.mergedGeoMesh)),this.mergedGeoMesh.updateFromMeshes(e)):this.mergedGeoMesh&&(this.target?.remove(this.mergedGeoMesh),this.mergedGeoMesh.dispose(),this.mergedGeoMesh=void 0)}update(){}dispose(){this.mergedGeoMesh?.dispose()}})}}})),System.register("engine/gfx/batch/MeshBatchManager",["engine/gfx/batch/BatchedMesh","engine/gfx/batch/MeshInstancingBatch","engine/gfx/RenderableContainer","engine/gfx/batch/MeshMergingBatch"],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e}],execute:function(){a=class extends s.RenderableContainer{constructor(e){super(),this.renderableContainer=e,this.batches=new Map}create3DObject(){let e=this.get3DObject();e||(e=new THREE.Object3D,e.name="mesh_batch_manager",e.matrixAutoUpdate=!1,this.set3DObject(e)),super.create3DObject()}updateMeshes(){var e=this.renderableContainer.get3DObject();e&&(e=this.collectMeshes(e),e=this.fillBatches(this.groupMeshesByBatchKey(e)),this.cleanUnusedBatches(e))}collectMeshes(e){let t=[];return e.traverseVisible((e=>{e.isBatchedMesh&&t.push(e)})),t}fillBatches(e){let t=new Map([...this.batches.keys()].map((e=>[e,0])));for(var[s,a]of e){let e=this.batches.get(s),c=0;for(;a.length;){var o=a[0].batchMode===i.BatchMode.Instancing,l=o?1024:128;let t=a.splice(0,l),h=e?.[c];h||(e||(e=[],this.batches.set(s,e)),h=new(o?r.MeshInstancingBatch:n.MeshMergingBatch)(l),h.castShadow=t[0].castShadow,h.receiveShadow=t[0].receiveShadow,h.renderOrder=t[0].renderOrder,h.clippingPlanes=t[0].getClippingPlanes(),e.push(h),this.add(h),this.processRenderQueue()),h.setMeshes(t),c++}t.set(s,c)}return t}cleanUnusedBatches(e){for(var[t,i]of e){let e=this.batches.get(t);if(e){var r;for(r of e.splice(i))this.remove(r),r.dispose();e.length||this.batches.delete(t)}}}groupMeshesByBatchKey(e){let t=new Map;for(let s=0,n=e.length;se.forEach((e=>e.dispose()))))}},e("MeshBatchManager",a)}}})),System.register("engine/renderable/WorldScene",["util/geometry","engine/gfx/RenderableContainer","engine/renderable/CameraPan","engine/renderable/CameraZoom","engine/type/LightingType","game/Coords","util/event","engine/renderable/entity/unit/ShadowQuality","engine/gfx/batch/MeshBatchManager"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e}],execute:function(){.8,16e3,u=new Map([[c.ShadowQuality.High,8],[c.ShadowQuality.Medium,4],[c.ShadowQuality.Low,2]]),d=class e extends r.RenderableContainer{constructor(e,t,i,r,s,n){super(e),this.scene=e,this.camera=t,this.viewport=i,this.cameraPan=r,this.cameraZoom=s,this.shadowQuality=n,this.initialized=!1,this.ambientLight=new THREE.AmbientLight(16777215,.8),this.directionalLight=new THREE.DirectionalLight(16777215,1),this._onBeforeCameraUpdate=new l.EventDispatcher,this._onCameraUpdate=new l.EventDispatcher}get onBeforeCameraUpdate(){return this._onBeforeCameraUpdate.asEvent()}get onCameraUpdate(){return this._onCameraUpdate.asEvent()}static factory(t,i,r){let a=new THREE.Scene;a.matrixAutoUpdate=!1;var o=e.createCamera(t),l=new s.CameraPan(i),c=new n.CameraZoom(i);return new e(a,o,t,l,c,r)}static getCameraParams(e){var t=o.Coords.ISO_CAMERA_ALPHA,i=o.Coords.ISO_CAMERA_BETA,r=o.Coords.ISO_WORLD_SCALE;return{alpha:t,beta:i,d:e.height/2*o.Coords.COS_ISO_CAMERA_BETA*r,aspect:e.width/e.height,far:16e3*r}}static createCamera(e){var{alpha:t,beta:i,d:r,aspect:s,far:n}=this.getCameraParams(e);let a=new THREE.OrthographicCamera(-r*s,r*s,r,-r,0,n);return a.rotation.order="YXZ",a.rotation.y=+i,a.rotation.x=-t,a}updateViewport(t){this.viewport=t;var{d:i,aspect:r}=e.getCameraParams(t);let s=this.camera;s.left=-i*r,s.right=i*r,s.top=i,s.bottom=-i,s.updateProjectionMatrix()}updateCamera(e,t){let i=this.camera;i.updateMatrix();var r=i.matrix.elements;let s=new THREE.Vector3;i.position.set(0,0,0),i.translateZ(16e3*o.Coords.ISO_WORLD_SCALE),s.set(r[0],r[1],r[2]),s.multiplyScalar(e.x*(i.right-i.left)/this.viewport.width/i.zoom),i.position.add(s),s.set(r[4],r[5],r[6]),s.multiplyScalar(-e.y*(i.top-i.bottom)/this.viewport.height/i.zoom),i.position.add(s),i.zoom=t,i.updateProjectionMatrix(),i.updateMatrixWorld(!1)}create3DObject(){if(super.create3DObject(),!this.initialized){this.initialized=!0,this.scene.position.x-=.1*o.Coords.ISO_WORLD_SCALE,this.scene.position.z-=.1*o.Coords.ISO_WORLD_SCALE,this.scene.updateMatrix();var e=new THREE.AxesHelper(o.Coords.LEPTONS_PER_TILE);this.scene.add(e),this.scene.add(this.ambientLight);let t=this.directionalLight;t.position.set(-87.012,204.338,195.409),this.lightFocusPoint&&(t.position.x+=this.lightFocusPoint.x,t.position.z+=this.lightFocusPoint.y,t.target.position.set(this.lightFocusPoint.x,0,this.lightFocusPoint.y),t.target.updateMatrixWorld(void 0)),this.updateShadowQuality(t,this.shadowQuality.value),this.shadowQualityListener=()=>this.updateShadowQuality(t,this.shadowQuality.value),this.shadowQuality.onChange.subscribe(this.shadowQualityListener),this.scene.add(t),this.scene.add(this.camera),e=this.meshBatchManager=new h.MeshBatchManager(this),this.add(e),this.scene.autoUpdate=!1}}updateShadowQuality(e,t){var i=t!==c.ShadowQuality.Off;if(e.castShadow=i){var r=o.Coords.ISO_WORLD_SCALE;i=3500*r;let s=e.shadow.camera;if(s.right=i,s.left=-i,s.top=i,s.bottom=-i,s.near=-4e3*r,s.far=3e3*r,!(r=u.get(t)))throw new Error(`Unsupported shadow quality "${t}"`);e.shadow.mapSize.width=1024*r,e.shadow.mapSize.height=1024*r}}setLightFocusPoint(e,t){this.lightFocusPoint={x:e,y:t}}applyLighting(e){var t=e.computeTint(a.LightingType.Ambient);this.ambientLight.color.setRGB(t.x,t.y,t.z),this.directionalLight.color.setRGB(t.x,t.y,t.z),t=e.getAmbientIntensity(),this.ambientLight.intensity=.8*t,this.directionalLight.intensity=t}update(e,t){super.update(e,t),this._onBeforeCameraUpdate.dispatch(this,e);var r=this.cameraZoom.getZoom(),s=this.cameraPan.getPan();i.pointEquals(s,this.lastCameraPan)&&this.lastCameraZoom===r||(this.updateCamera(s,r),this.lastCameraZoom=r,this.lastCameraPan=s),this._onCameraUpdate.dispatch(this,e),this.scene.updateMatrixWorld(!1),this.meshBatchManager.updateMeshes()}dispose(){this.shadowQualityListener&&(this.shadowQuality.onChange.unsubscribe(this.shadowQualityListener),this.shadowQualityListener=void 0),this.directionalLight.shadow.map?.dispose(),this.meshBatchManager&&(this.meshBatchManager.dispose(),this.remove(this.meshBatchManager),this.meshBatchManager=void 0),this.scene.remove(this.ambientLight),this.scene.remove(this.directionalLight)}},e("WorldScene",d)}}})),System.register("engine/gfx/FrustumCuller",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("FrustumCuller",class{cull(e,t){var i=[];return function e(t,i,r,s=0){let n,a=t.children;var o,l=t.visible;if(i.intersectsBox(t.box)){if(t.visible=!0,null!==a)for(n=0,o=a.length;n{var{r:t,g:i,b:s}=r.getColor(e);a.data[o++]=t,a.data[o++]=i,a.data[o++]=s,a.data[o++]=e?255:0})),n.putImageData(a,0,0),s}static async canvasToBlob(e){return await new Promise(((t,i)=>{e.toBlob((r=>{if(!r)try{r=this.dataUrlToBlob(e.toDataURL())}catch(r){return void i(new Error("Failed to generate image from canvas using fallback",{cause:r}))}t(r)}))}))}static dataUrlToBlob(e){if(!(r=e.match(/^data:((.*?)(;charset=.*?)?)(;base64)?,/)))throw new Error("invalid dataURI");var t=r[2]?r[1]:"text/plain"+(r[3]||";charset=utf-8"),i=!!r[4],r=e.slice(r[0].length);let s=(i?atob:decodeURIComponent)(r),n=[];for(let e=0;ee.canvas.width||O.y+O.height>e.canvas.height)&&(E=0e.canvas.width&&(e.canvas.width=O.x+O.width),O.y+O.height>e.canvas.height&&(e.canvas.height=O.y+O.height),E&&e.putImageData(E,0,0)),n&&(e.fillStyle=n,e.fillRect(O.x,O.y,O.width,O.height)),u&&(e.strokeStyle=u,e.lineWidth=1,e.strokeRect(.5+O.x,.5+O.y,O.width-1,O.height-1)),e.fillStyle=s,e.font=S;let A=d+m;return"right"===y?A=O.width-d-f-x:"center"===y&&(A+=Math.floor((O.width-2*d-m-f-x)/2)),w=w.actualBoundingBoxAscent+g+(C.actualBoundingBoxAscent-w.actualBoundingBoxAscent),a&&(e.strokeStyle=a,e.lineWidth=2*(o??1),e.strokeText(t,O.x+A+.5,O.y+w,O.width)),e.fillText(t,O.x+A+.5,O.y+w,O.width),O}})}}})),System.register("engine/gfx/drawable/PalDrawable",["data/Bitmap"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("PalDrawable",class{constructor(e){this.pal=e}draw(){var e=this.pal.size;let t=new i.RgbaBitmap(e,1),r=0;for(let i=0,n=e;ie.hash)));if(l=e.cache.get(s))return l;let a;var o,l=t.map((e=>new n.PalDrawable(e).draw()));a=new i.RgbaBitmap(l[0].width,l.length);let c=0;for(o of l)a.drawRgbaImage(o,0,c++);return l=this.textureFromPalBitmap(a),e.cache.set(s,l),l}static textureFromPalBitmap(e){var t=s.CanvasUtils.canvasFromRgbaImageData(e.data,e.width,e.height);let i=new THREE.Texture(t);return i.minFilter=THREE.NearestFilter,i.magFilter=THREE.NearestFilter,i.needsUpdate=!0,i.flipY=!1,i}}),a.cache=new Map}}})),System.register("engine/renderable/builder/ObjectBuilder",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("engine/gfx/BufferGeometryUtils",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("BufferGeometryUtils",class{static mergeVertices(e,t=1e-4){t=Math.max(t,Number.EPSILON);const i={},r=e.getIndex();var s=e.getAttribute("position"),n=(r||s).count;let a=0;var o=Object.keys(e.attributes);const l={},c={},h=[],u=[(e,t)=>e.getX(t),(e,t)=>e.getY(t),(e,t)=>e.getZ(t),(e,t)=>e.getW(t)];for(let t=0,i=o.length;t[])))}s=Math.log10(1/t);var p=Math.pow(10,s);for(let t=0;t{if(!e.fit)throw new Error("Couldn't fit all images in a single texture");var t=e.image,i=e.fit.x,r=e.fit.y;s?.set(t,{x:i,y:r,width:e.w,height:e.h}),n.drawIndexedImage(t,i,r)})),n}return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("TextureAtlas",class{getTexture(){if(!this.texture)throw new Error("Texture atlas not initialized");return this.texture}getImageRect(e){if(!this.imageRects)throw new Error("Texture atlas not initialized");var t=this.imageRects.get(e);if(!t)throw new Error("Image not found in atlas");return t}pack(e){let t=[];e.forEach((e=>{t.push({w:e.width+e.width%2,h:e.height+e.height%2,image:e})})),t.sort(((e,t)=>1e4*(t.w-e.w)+t.h-e.h));let i=new GrowingPacker;i.fit(t);var n,a,o,l=i.root.w,c=i.root.h,h=new Map,u=s(t,l,c,h);let d=new THREE.DataTexture(u.data,l,c,THREE.AlphaFormat);d.needsUpdate=!0,d.flipY=!0,d.minFilter=THREE.NearestFilter,d.magFilter=THREE.NearestFilter,d.onUpdate=(n=t,a=l,o=c,e=>{e.image={width:e.image.width,height:e.image.height,get data(){return e.isDisposed?new Uint8Array(this.width*this.height):(console.log("TextureAtlas: Rebuilding texture for upload to GPU..."),s(n,a,o).data)}},e.addEventListener("dispose",r)}),this.width=l,this.height=c,this.imageRects=h,this.texture=d}dispose(){this.texture?.dispose()}})}}})),System.register("engine/renderable/builder/ShpTextureAtlas",["data/Bitmap","engine/gfx/TextureAtlas"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("ShpTextureAtlas",class{fromShpFile(e){let t=[];for(let r=0;re.dispose())),e.textureCache.clear(),e.geometryCache.forEach((e=>e.forEach((e=>e.dispose())))),e.geometryCache.clear()}useMaterial(t,i,r){if(t.format!==THREE.AlphaFormat)throw new Error("Texture must have format THREE.AlphaFormat");this.materialCacheKey=t.uuid+"_"+i.uuid+"_"+Number(r);let s,a=e.materialCache.get(this.materialCacheKey);return a?(s=a.material,a.usages++):(s=new n.PaletteBasicMaterial({map:t,palette:i,alphaTest:.05,paletteCount:this.batchPalettes.length,flatShading:!0,transparent:r}),a={material:s,usages:1},e.materialCache.set(this.materialCacheKey,a)),s}freeMaterial(){if(!this.materialCacheKey)throw new Error("Material cache key not set");let t=e.materialCache.get(this.materialCacheKey);t&&(1===t.usages?(e.materialCache.delete(this.materialCacheKey),t.material.dispose()):t.usages--)}setBatched(e){if(this.mesh)throw new Error("Batching can only be set before calling build()");this.useMeshBatching=e}setOffset(e){if(this.mesh)throw new Error("Offset can only be set before calling build()");this.offset=e}setFrameOffset(e){if(this.mesh)throw new Error("frameOffset can only be set before calling build()");this.frameOffset=e}initTexture(){e.prepareTexture(this.shpFile),this.atlas=e.textureCache.get(this.shpFile)}getSpriteGeometryOptions(e){e+=this.frameOffset;var t={x:(t=this.shpFile.getImage(e)).x-Math.floor(this.shpSize.width/2)+Math.floor(this.offset.x),y:t.y-Math.floor(this.shpSize.height/2)+Math.floor(this.offset.y)};return{texture:this.atlas.getTexture(),textureArea:this.atlas.getTextureArea(e),flat:this.flat,align:{x:1,y:-1},offset:t,camera:this.camera,depth:this.depth,depthOffset:this.depthOffset,scale:this.scale}}getGeometryCacheKey(e){return e+this.frameOffset+"_"+this.shpSize.width+"_"+this.shpSize.height+"_"+this.offset.x+"_"+this.offset.y+"_"+this.flat+"_"+this.depth+"_"+this.depthOffset}setFrame(e){if(this.frameNo!==e&&(this.frameNo=e,this.mesh)){let i=this.getGeometryCache();var t=this.getGeometryCacheKey(e);let s=i.get(t);s||(s=r.SpriteUtils.createSpriteGeometry(this.getSpriteGeometryOptions(e)),i.set(t,s)),this.mesh.geometry=s}}getGeometryCache(){let t=e.geometryCache.get(this.shpFile);return t||(t=new Map,e.geometryCache.set(this.shpFile,t)),t}getFrame(){return this.frameNo}setSize(e){this.shpSize={width:e.width,height:e.height}}getSize(){return this.shpSize}get frameCount(){return this.shpFile.numImages}getBatchPaletteIndex(e){var t=this.batchPalettes.findIndex((t=>t.hash===e.hash));if(-1===t)throw new Error("Provided palette not found in the list of batch palettes. Call setBatchPalettes first.");return t}setPalette(e){if(this.palette=e,this.mesh)if(this.useMeshBatching){var t=this.getBatchPaletteIndex(e);this.mesh.setPaletteIndex(t)}else{t=i.TextureUtils.textureFromPalette(e),this.mesh.material.palette=t}}setBatchPalettes(e){if(!this.useMeshBatching)throw new Error("Can't use multiple palettes when not batching");if(this.mesh)throw new Error("Palettes must be set before creating 3DObject");this.batchPalettes=e}setExtraLight(e){if(this.extraLight=e,this.mesh)if(this.useMeshBatching)this.mesh.setExtraLight(e);else{this.mesh.material.extraLight=e}}setOpacity(e){var t=this.opacity;t!==e&&(this.opacity=e,this.updateOpacity()),Math.floor(t)===Math.floor(e)||this.forceTransparent||this.updateTransparency()}setForceTransparent(e){e!==this.forceTransparent&&(this.forceTransparent=e,this.updateTransparency())}updateOpacity(){this.mesh&&(this.useMeshBatching?this.mesh.setOpacity(this.opacity):this.mesh.material.opacity=this.opacity)}updateTransparency(){var e,t,i;this.mesh&&(e=this.forceTransparent||this.opacity<1,this.useMeshBatching?(t=this.mesh.material.map,i=this.mesh.material.palette,this.freeMaterial(),this.mesh.material=this.useMaterial(t,i,e)):this.mesh.material.transparent=e)}build(){if(this.mesh)return this.mesh;this.initTexture();var e,t=this.atlas.getTexture(),s=this.getGeometryCacheKey(this.frameNo);let o,l=this.getGeometryCache(),c=l.get(s);c||(e=this.getSpriteGeometryOptions(this.frameNo),c=r.SpriteUtils.createSpriteGeometry(e),l.set(s,c));var h;s=this.opacity<1||this.forceTransparent;return this.useMeshBatching?(h=i.TextureUtils.textureFromPalettes(this.batchPalettes),h=this.useMaterial(t,h,s),o=new a.BatchedMesh(c,h,a.BatchMode.Merging),o.castShadow=!1):(h=i.TextureUtils.textureFromPalette(this.palette),s=new n.PaletteBasicMaterial({map:t,palette:h,alphaTest:.5,flatShading:!0,transparent:s}),o=new THREE.Mesh(c,s)),o.matrixAutoUpdate=!1,this.mesh=o,this.setPalette(this.palette),this.updateOpacity(),this.extraLight&&this.setExtraLight(this.extraLight),o}dispose(){this.mesh&&(this.useMeshBatching?this.freeMaterial():this.mesh.material.dispose(),this.mesh=void 0)}}),o.textureCache=new Map,o.geometryCache=new Map,o.materialCache=new Map}}})),System.register("engine/renderable/builder/VxlBuilder",["game/Coords"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("VxlBuilder",class{constructor(e){this.camera=e}build(){if(this.object)return this.object;let e=this.object=new THREE.Object3D,t=Math.cos(this.camera.rotation.y)*i.Coords.ISO_WORLD_SCALE;e.scale.set(t,t,t);let r=new THREE.Object3D;return r.rotation.x=-Math.PI/2,r.rotation.z=+Math.PI/2,r.matrixAutoUpdate=!1,r.updateMatrix(),e.add(r),(this.sections=this.createVxlMeshes()).forEach((e=>{var i;e.matrixAutoUpdate=!1,r.add(e),this.localBoundingBox||(e.geometry.boundingBox||e.geometry.computeBoundingBox(),this.localBoundingBox=new THREE.Box3(e.geometry.boundingBox.min.clone().multiplyScalar(t),e.geometry.boundingBox.max.clone().multiplyScalar(t)),i=this.localBoundingBox.min.x,this.localBoundingBox.min.x=this.localBoundingBox.min.y,this.localBoundingBox.min.y=i,i=this.localBoundingBox.max.x,this.localBoundingBox.max.x=this.localBoundingBox.max.y,this.localBoundingBox.max.y=i)})),e.matrixAutoUpdate=!1,e.updateMatrix(),e}getSection(e){if(!this.sections)throw new Error("Vxl object must be built first");return this.sections.get(e)}getLocalBoundingBox(){return this.localBoundingBox}})}}})),System.register("engine/renderable/entity/building/DamageType",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.NORMAL=0]="NORMAL",t[t.CONDITION_YELLOW=1]="CONDITION_YELLOW",t[t.CONDITION_RED=2]="CONDITION_RED",t[t.DESTROYED=3]="DESTROYED",e("DamageType",i)}}})),System.register("engine/renderable/entity/building/AnimationType",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.IDLE=0]="IDLE",t[t.PRODUCTION=1]="PRODUCTION",t[t.ACTIVE=2]="ACTIVE",t[t.SPECIAL=3]="SPECIAL",t[t.SUPER=4]="SUPER",t[t.BUILDUP=5]="BUILDUP",t[t.UNBUILD=6]="UNBUILD",t[t.FACTORY_DEPLOYING=7]="FACTORY_DEPLOYING",t[t.FACTORY_ROOF_DEPLOYING=8]="FACTORY_ROOF_DEPLOYING",t[t.SUPER_IDLE=9]="SUPER_IDLE",t[t.SUPER_CHARGE_START=10]="SUPER_CHARGE_START",t[t.SUPER_CHARGE_LOOP=11]="SUPER_CHARGE_LOOP",t[t.SUPER_CHARGE_END=12]="SUPER_CHARGE_END",t[t.SPECIAL_DOCKING=13]="SPECIAL_DOCKING",t[t.SPECIAL_REPAIR_START=14]="SPECIAL_REPAIR_START",t[t.SPECIAL_REPAIR_LOOP=15]="SPECIAL_REPAIR_LOOP",t[t.SPECIAL_REPAIR_END=16]="SPECIAL_REPAIR_END",t[t.SPECIAL_SHOOT=17]="SPECIAL_SHOOT",t[t.FACTORY_UNDER_DOOR=18]="FACTORY_UNDER_DOOR",t[t.FACTORY_UNDER_ROOF_DOOR=19]="FACTORY_UNDER_ROOF_DOOR",e("AnimationType",i)}}})),System.register("engine/gfx/OverlayUtils",["engine/gfx/CanvasUtils"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("OverlayUtils",class{static createGroundCircle(e,t){var i=new THREE.LineBasicMaterial({color:t,transparent:!0,depthTest:!1,depthWrite:!1});let r=new THREE.CircleGeometry(e,64);r.vertices.shift(),r.vertices.push(r.vertices[0]);let s=new THREE.Line(r,i);return s.rotation.x=Math.PI/2,s.renderOrder=1e6,s}static createTextBox(e,t){let r=document.createElement("canvas");r.width=r.height=0;var s=r.getContext("2d",{alpha:!t.backgroundColor||!!t.backgroundColor.match(/^rgba/)});return i.CanvasUtils.drawText(s,e,0,0,{...t,autoEnlargeCanvas:!0}),r}})}}})),System.register("engine/AnimProps",["game/GameSpeed","util/math"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("AnimProps",s=class e{constructor(e,t){this.art=e,this.init(t)}init(t){this.shadow=this.art.getBool("Shadow"),this.reverse=this.art.getBool("Reverse"),this.frameCount="number"==typeof t?t:this.shadow?t.numImages/2:t.numImages,this.end=this.art.getNumber("End",this.frameCount-1);var i=this.art.getNumberArray("RandomRate").sort();2===i.length?this.rate=r.getRandomInt(i[0],i[1])/60:this.rate=this.art.getNumber("Rate",60*e.defaultRate)/60,this.start=this.art.getNumber("Start",0),this.loopStart=this.art.getNumber("LoopStart",0),this.loopEnd=Math.max(this.loopStart,this.art.getNumber("LoopEnd",this.end+1)-1),this.loopCount=this.art.getNumber("LoopCount",1),i=this.art.getNumberArray("RandomLoopDelay").sort(),this.randomLoopDelay=2===i.length?[i[0],i[1]]:void 0}getArt(){return this.art}setArt(e){this.art=e,this.init(this.frameCount)}}),s.defaultRate=i.GameSpeed.BASE_TICKS_PER_SECOND}}})),System.register("engine/Animation",["util/math"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){var t;(t=r=r||{})[t.NOT_STARTED=0]="NOT_STARTED",t[t.RUNNING=1]="RUNNING",t[t.STOPPED=2]="STOPPED",t[t.DELAYED=3]="DELAYED",t[t.PAUSED=4]="PAUSED",e("AnimationState",r),e("Animation",class{constructor(e,t){this.props=e,this.state=r.NOT_STARTED,this.endLoopFlag=!1,this.playToEndFlag=!1,this.speed=t}getState(){return this.state}start(e,t=0){this.time=e,this.frameNo=this.props.reverse?this.props.end:this.props.start,this.loopNo=0,this.delayFrames=t,this.state=t?r.DELAYED:r.RUNNING}pause(){this.state===r.RUNNING&&(this.state=r.PAUSED)}unpause(){this.state===r.PAUSED&&(this.state=r.RUNNING)}reset(){this.state=r.NOT_STARTED}stop(){this.state=r.STOPPED}update(e){var t=(e-this.time)/1e3,i=this.props.rate*this.speed.value;if(!((i=Math.floor(t*i))<1)&&(this.time=e,this.state!==r.PAUSED)){if(0=s){t+=this.props.reverse?-e:e;break}if(-1!==this.props.loopCount&&this.loopNo>=this.props.loopCount-1)return this.frameNo=s,!0;if(this.endLoopFlag)return!(this.endLoopFlag=!1);e-=1+(this.props.reverse?t-s:s-t),t=this.props.reverse?this.props.loopEnd:this.props.loopStart,this.loopNo++,this.props.randomLoopDelay&&(this.state=r.DELAYED,this.delayFrames=i.getRandomInt(this.props.randomLoopDelay[0],this.props.randomLoopDelay[1]))}return this.frameNo=t,!1}})}}})),System.register("engine/renderable/entity/wallTypes",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("wallTypes",[[0,0,0,0],[1,0,0,0],[0,1,0,0],[1,1,0,0],[0,0,1,0],[1,0,1,0],[0,1,1,0],[1,1,1,0],[0,0,0,1],[1,0,0,1],[0,1,0,1],[1,1,0,1],[0,0,1,1],[1,0,1,1],[0,1,1,1],[1,1,1,1]])}}})),System.register("engine/renderable/WithPosition",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("WithPosition",class{constructor(){this.matrixUpdate=!1,this.position=new THREE.Vector3}setPosition(e,t,i){this.position.x=e,this.position.y=t,this.position.z=i,this.updatePosition()}getPosition(){return this.position}updatePosition(){if(this.target){let e=this.target.get3DObject();e&&(e.position.set(this.position.x,this.position.y,this.position.z),this.matrixUpdate&&(e.matrix.setPosition(e.position),e.matrixWorldNeedsUpdate=!0))}}applyTo(e){this.target=e,this.updatePosition()}})}}})),System.register("engine/IsoCoords",["game/Coords"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("IsoCoords",class e{static init(t){e.worldOrigin=t}static worldToScreen(t,r){if(!e.worldOrigin)throw new Error("Coords not initialized with world origin");return t-=e.worldOrigin.x,r-=e.worldOrigin.y,{x:(t/=i.Coords.ISO_WORLD_SCALE)-(r/=i.Coords.ISO_WORLD_SCALE),y:(t+r)/2}}static screenToWorld(t,r){if(!e.worldOrigin)throw new Error("Coords not initialized with world origin");return{x:(t+2*r)/2*i.Coords.ISO_WORLD_SCALE+e.worldOrigin.x,y:(2*r-t)/2*i.Coords.ISO_WORLD_SCALE+e.worldOrigin.y}}static vecWorldToScreen(t){let r=e.worldToScreen(t.x,t.z);return r.y-=e.tileHeightToScreen(i.Coords.worldToTileHeight(t.y)),r}static tileToScreen(t,r){var s=i.Coords.tileToWorld(t,r);return e.worldToScreen(s.x,s.y)}static tileHeightToScreen(e){return e*(i.Coords.ISO_TILE_SIZE/2)}static tile3dToScreen(t,i,r){let s=e.tileToScreen(t,i);return s.y-=e.tileHeightToScreen(r),s}static screenTileToScreen(e,t){return{x:e*i.Coords.ISO_TILE_SIZE,y:t*i.Coords.ISO_TILE_SIZE/2}}static screenToScreenTile(e,t){return{x:e/i.Coords.ISO_TILE_SIZE,y:t/(i.Coords.ISO_TILE_SIZE/2)}}static screenTileToWorld(t,i){var r=e.screenTileToScreen(t,i);return e.screenToWorld(r.x,r.y)}static getScreenTileSize(){return{width:e.tileToScreen(1,0).x-e.tileToScreen(0,1).x,height:e.tileToScreen(1,1).y-e.tileToScreen(0,0).y}}static screenDistanceToWorld(e,t){return i.Coords.screenDistanceToWorld(e,t)}})}}})),System.register("engine/renderable/entity/map/MapSurface",["game/Coords","game/theater/rampHeights","engine/gfx/BufferGeometryUtils","util/disposable/CompositeDisposable"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e}],execute:function(){e("MAGIC_OFFSET",.05),e("MapSurface",class{constructor(e,t){this._textureTilesNo=20,this.visible=!0,this.disposables=new n.CompositeDisposable,this.map=e,this.theater=t}get3DObject(){return this.target}create3DObject(){let e=this.get3DObject();e||(e=this.createObject(),e.name="map_surface_shadow",e.matrixAutoUpdate=!1,e.visible=this.visible,this.target=e)}update(){}setVisible(e){this.visible=e,this.target&&(this.target.visible=e)}createObject(){let e=[];this.map.tiles.forEach((t=>{var r=i.Coords.tile3dToWorld(t.rx,t.ry,t.z);let s=this.createRectGeometry(t.rampType);s.applyMatrix((new THREE.Matrix4).makeTranslation(r.x,r.y+.05,r.z)),e.push(s)}));var t=s.BufferGeometryUtils.mergeBufferGeometries(e);let r=new THREE.ShadowMaterial;r.transparent=!0,r.opacity=.5;let n=new THREE.Mesh(t,r);return n.receiveShadow=!0,n.renderOrder=5,n.frustumCulled=!1,this.disposables.add(t,r),n}createRectGeometry(e){var t=i.Coords.getWorldTileSize(),s=r.rampHeights[e];let n=new THREE.BufferGeometry;return t=new Float32Array([0,i.Coords.tileHeightToWorld(s[0]),t,t,i.Coords.tileHeightToWorld(s[3]),t,0,i.Coords.tileHeightToWorld(s[1]),0,t,i.Coords.tileHeightToWorld(s[2]),0]),s=new Uint16Array([0,1,2,3,2,1]),n.addAttribute("position",new THREE.BufferAttribute(t,3)),n.setIndex(new THREE.BufferAttribute(s,1)),n}dispose(){this.disposables.dispose()}})}}})),System.register("engine/renderable/ShadowRenderable",["data/Palette","engine/renderable/builder/ShpBuilder","game/Coords","engine/IsoCoords","engine/renderable/entity/map/MapSurface"],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){e("ShadowRenderable",class e{constructor(e,t,i,r=0){this.shpFile=e,this.camera=t,this.shadowHeightTileAdjust=r,this.baseFrameNo=0,this.frameOffset=0,this.visible=!0,this.useBatching=!1,this.drawOffset={...i}}static getOrCreateShadowPalette(){let t=e.shadowPalette;return t||(t=new i.Palette(new Array(768).fill(0)),e.shadowPalette=t),t}setVisible(e){var t;this.visible=e,this.object3d&&(t=this.computeShadowFrameNo(this.baseFrameNo),this.object3d.visible=e&&this.frameHasShadowData(t))}setSize(e){this.shpSize=e,this.builder?.setSize(e)}setBatched(e){this.useBatching=e,this.builder?.setBatched(e)}setBaseFrame(e){var t;this.baseFrameNo=e,this.builder&&(t=this.computeShadowFrameNo(e),this.builder.setFrame(t),this.object3d.visible=this.visible&&this.frameHasShadowData(t))}setFrameOffset(e){this.frameOffset=e,this.builder&&this.builder.setFrameOffset(e)}computeShadowFrameNo(e){return e{let l=[];a.forEach(((a,c)=>{var h=e.getString(a);if(h){let c,d,g=new s.BuildingAnimData;if(g.name=h,g.type=o,t.hasObject(h,n.ObjectType.Animation)&&(d=t.getObject(h,n.ObjectType.Animation),c=d.art),o===i.AnimationType.BUILDUP||o===i.AnimationType.UNBUILD)c=c?c.clone():new r.IniSection(h),c.has("Shadow")||c.set("Shadow","yes"),o===i.AnimationType.UNBUILD&&c.set("Reverse","yes");else if(!c)throw new Error(`Missing building anim section "${h}"`);g.art=c,g.pauseWhenUnpowered=e.getBool(a+"Powered",!0),g.showWhenUnpowered=!e.getBool(a+"PoweredLight",!1);var u=e.getString(a+"Damaged");u&&t.hasObject(u,n.ObjectType.Animation)&&(g.damagedArt=t.getObject(u,n.ObjectType.Animation).art),g.offset={x:e.getNumber(a+"X"),y:e.getNumber(a+"Y")};let p=c.getString("Image");p=p||h,g.image=p,g.flat="UnderDoorAnim"===a||"UnderRoofDoorAnim"===a||c.getBool("Flat"),d&&(g.translucent=d.translucent,g.translucency=d.translucency),l.push(g)}})),this.animsByType.set(o,l)}))}getByType(e){if(!this.animsByType.has(e))throw new Error(`Animation type "${i.AnimationType[e]}" has no data`);return this.animsByType.get(e)}getAll(){return this.animsByType}})}}})),System.register("engine/animation/Runner",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("engine/animation/SimpleRunner",["engine/Animation"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("SimpleRunner",class{tick(e){let t=this.animation;if(t)switch(t.getState()){case i.AnimationState.STOPPED:return;case i.AnimationState.NOT_STARTED:t.start(e);case i.AnimationState.RUNNING:default:t.update(e)}}getCurrentFrame(){return this.animation.getCurrentFrame()}shouldUpdate(){return this.animation.getState()!==i.AnimationState.STOPPED}})}}})),System.register("engine/sound/ChannelType",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.Master=0]="Master",t[t.Ui=1]="Ui",t[t.Ambient=2]="Ambient",t[t.Effect=3]="Effect",t[t.Voice=4]="Voice",t[t.Music=5]="Music",t[t.CreditTicks=6]="CreditTicks",e("ChannelType",i)}}})),System.register("engine/sound/Mixer",["util/event"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("Mixer",class{constructor(){this.volumes=new Map,this.mutes=new Map,this._onVolumeChange=new i.EventDispatcher}get onVolumeChange(){return this._onVolumeChange.asEvent()}setVolume(e,t){this.getVolume(e)!==t&&(this.volumes.set(e,t),this._onVolumeChange.dispatch(this,e))}getVolume(e){return this.volumes.get(e)??1}setMuted(e,t){this.mutes.set(e,t),this._onVolumeChange.dispatch(this,e)}isMuted(e){return!!this.mutes.get(e)}serialize(){return[...this.volumes.entries()].map((([e,t])=>e+","+t)).join(";")}unserialize(e){return this.volumes=new Map(e.split(";").map((e=>e.split(",").map(Number)))),this}})}}})),System.register("engine/sound/InternalPlaybackHandle",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("InternalPlaybackHandle",class{constructor(){this.playing=!0,this.isLoop=!1,this.stopRequested=!1}setNodes(e,t,i){this.sourceNode=e,this.gainNode=t,this.panNode=i,this.stopRequested?this.stop():(this.volumeRequested&&(t.gain.value=this.volumeRequested),this.panRequested&&(i.pan.value=this.panRequested))}isPlaying(){return this.playing}stop(){try{this.sourceNode instanceof AudioBufferSourceNode?this.sourceNode.stop():this.sourceNode instanceof MediaElementAudioSourceNode?this.sourceNode.mediaElement?.pause():this.stopRequested=!0,this.playing=!1}catch(e){console.error(e)}}setVolume(e){this.gainNode?this.gainNode.gain.value=e:this.volumeRequested=e}setPan(e){this.panNode?this.panNode.pan.value=e:this.panRequested=e}})}}})),System.register("engine/sound/AudioLoop",["util/math"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("AudioLoop",class{constructor(e,t,i,r,s,n,a,o,l){this.audioContext=e,this.volume=t,this.pan=i,this.rate=r,this.delayMs=s,this.attack=n,this.decay=a,this.playBuffer=l,this.isLoop=!0,this.items=[],this.playing=!1,this.handleSoundEnded=()=>{this.playing&&(this.removeCompleted(),this.fill(this.buffers),this.remainingLoops||this.items.length||this.stop())},this.remainingLoops=o}setBuffers(e){this.buffers=e,this.playing&&(this.timePointer=Math.max(this.timePointer,this.audioContext.currentTime),this.fill(this.buffers))}start(e){if(this.playing)throw new Error("Already playing");this.timePointer=e,this.playing=!0,this.buffers&&this.fill(this.buffers)}isPlaying(){return this.playing}stop(){var e;this.playing&&(this.playing=!1,this.decay&&this.buffers?(this.removeCompleted(),this.items.length&&(e=this.items[0].startTime+this.items[0].duration,this.items.splice(1).forEach((e=>e.handle.stop())),this.queueBuffer(this.buffers[this.buffers.length-1],e))):(this.items.forEach((e=>e.handle.stop())),this.items.length=0))}setVolume(e){this.volume=e,this.items.forEach((t=>t.handle.setVolume(e)))}setPan(e){this.pan=e,this.items.forEach((t=>t.handle.setPan(e)))}add(e){this.items.push(e)}removeCompleted(){this.items=this.items.filter((e=>e.startTime+e.duration>=this.audioContext.currentTime))}fill(e){let t=this.items.length?this.timePointer-this.items[0].startTime:0;for(;t<.1||this.items.length<3;){if(!this.attack||void 0!==this.bufferPointer){if(this.remainingLoops<=0)break;this.remainingLoops--}this.attack?this.bufferPointer=void 0===this.bufferPointer?0:i.getRandomInt(1,e.length-1-(this.decay?1:0)):this.bufferPointer=i.getRandomInt(0,e.length-1);var r=e[this.bufferPointer];r=this.queueBuffer(r,this.timePointer);this.timePointer+=r,t+=r}}queueBuffer(e,t){var r=this.delayMs?i.getRandomInt(this.delayMs.min,this.delayMs.max)/1e3:0,s=t+r,n=e.duration/this.rate;let{handle:a,source:o}=this.playBuffer(e,s,this.volume,this.pan,this.rate);return o.addEventListener("ended",this.handleSoundEnded),this.add({startTime:s,duration:n,handle:a}),n+r}})}}})),System.register("engine/sound/AudioSequence",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("AudioSequence",class{constructor(e,t,i,r,s,n){this.audioContext=e,this.volume=t,this.pan=i,this.rate=r,this.delayMs=s,this.playBuffer=n,this.isLoop=!1,this.items=[],this.playing=!1,this.handleSoundEnded=()=>{this.playing&&(this.removeCompleted(),this.items.length||(this.playing=!1))}}setBuffers(e){this.buffers=e,this.playing&&(this.timePointer=Math.max(this.timePointer,this.audioContext.currentTime),this.fill(this.buffers))}start(e){if(this.playing)throw new Error("Already playing");this.timePointer=e,this.playing=!0,this.buffers&&this.fill(this.buffers)}isPlaying(){return this.playing}stop(){this.playing&&(this.playing=!1,this.items.forEach((e=>e.handle.stop())),this.items.length=0)}setVolume(e){this.volume=e,this.items.forEach((t=>t.handle.setVolume(e)))}setPan(e){this.pan=e,this.items.forEach((t=>t.handle.setPan(e)))}add(e){this.items.push(e)}removeCompleted(){this.items=this.items.filter((e=>e.startTime+e.duration>=this.audioContext.currentTime))}fill(e){let t=this.delayMs?this.delayMs/1e3:0;for(var i of e)i=this.queueBuffer(i,this.timePointer,t),this.timePointer+=i,t=0}queueBuffer(e,t,i){var r=t+i,s=e.duration/this.rate;let{handle:n,source:a}=this.playBuffer(e,r,this.volume,this.pan,this.rate);return a.addEventListener("ended",this.handleSoundEnded),this.add({startTime:r,duration:s,handle:n}),s+i}})}}})),System.register("engine/sound/AudioSystem",["engine/sound/ChannelType","util/disposable/CompositeDisposable","engine/sound/InternalPlaybackHandle","engine/sound/AudioLoop","engine/sound/AudioSequence"],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){e("AudioSystem",class{constructor(e){this.mixer=e,this.channels=new Map,this.audioBufferCache=new Map,this.disposables=new r.CompositeDisposable,this.soundsPlaying=new Set,this.handleVolumeChange=(e,t)=>{this.getChannel(e).gain.value=t.isMuted(e)?0:t.getVolume(e)}}isInitialized(){return!!this.audioContext}isSuspended(){return"running"!==this.audioContext?.state}async canAutoPlay(){let e,t=document.createElement("audio");t.src="data:audio/mpeg;base64,/+MYxAAAAANIAUAAAASEEB/jwOFM/0MM/90b/+RhST//w4NFwOjf///PZu////9lns5GFDv//l9GlUIEEIAAAgIg8Ir/JGq3/+MYxDsLIj5QMYcoAP0dv9HIjUcH//yYSg+CIbkGP//8w0bLVjUP///3Z0x5QCAv/yLjwtGKTEFNRTMuOTeqqqqqqqqqqqqq/+MYxEkNmdJkUYc4AKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";try{await t.play(),e=!0}catch(t){e=!1}return t.srcObject=null,e}initialize(){this.isInitialized()||(this.audioContext=new AudioContext,this.mixer.onVolumeChange.subscribe(this.handleVolumeChange),this.disposables.add((()=>this.mixer.onVolumeChange.unsubscribe(this.handleVolumeChange))),this.createChannels(this.audioContext,this.mixer))}dispose(){this.disposables.dispose(),this.audioContext&&(this.audioContext.close(),this.soundsPlaying.clear())}createChannels(e,t){let r=Object.keys(i.ChannelType).map(Number).filter((e=>!Number.isNaN(e)));r.forEach((i=>{let r=e.createGain();r.gain.value=t.getVolume(i),this.channels.set(i,r)}));let s=this.getChannel(i.ChannelType.Master);r.forEach((t=>{let r=this.getChannel(t);var n;t===i.ChannelType.Master?r.connect(e.destination):t===i.ChannelType.Effect?(n=e.createDynamicsCompressor(),r.connect(n).connect(s)):r.connect(s)}))}getChannel(e){if(!this.channels.has(e))throw new Error(`Sound channel "${e}" doesn't exist`);return this.channels.get(e)}setMuted(e){this.mixer.setMuted(i.ChannelType.Master,e)}playWavFile(e,t,i=1,r=0,s=0,n=1,a=!1){if(!this.isInitialized())throw new Error("Can't play audio file because audio system is not initialized");var o=this.audioContext.currentTime+s/1e3;return this.removeSuspendedSounds(),this.playWavFileAtTime(e,t,o,i,r,n,a)}removeSuspendedSounds(){this.isSuspended()&&this.soundsPlaying.forEach((e=>{try{e instanceof AudioBufferSourceNode?e.stop():e.mediaElement?.pause()}catch(e){console.error(e)}}))}playWavLoop(e,t,i=1,r=0,a,o=1,l=!1,c=!1,h=Number.POSITIVE_INFINITY){if(!this.isInitialized())throw new Error("Can't play audio sequence because audio system is not initialized");let u=this.audioContext;this.removeSuspendedSounds();let d=new n.AudioLoop(u,i,r,o,a,l,c,h,((e,i,r,n,a)=>{var o=new s.InternalPlaybackHandle;return{handle:o,source:this.playAudioBuffer(o,e,t,r,n,i,a,!1)}}));return Promise.all(e.map((e=>this.decodeFile(e,u)))).then((e=>{d.setBuffers(e)})).catch((e=>console.error(e))),d.start(u.currentTime),d}playWavSequence(e,t,i=1,r=0,n=0,o=1){if(!this.isInitialized())throw new Error("Can't play audio sequence because audio system is not initialized");let l=this.audioContext;this.removeSuspendedSounds();let c=new a.AudioSequence(l,i,r,o,n,((e,i,r,n,a)=>{var o=new s.InternalPlaybackHandle;return{handle:o,source:this.playAudioBuffer(o,e,t,r,n,i,a,!1)}}));return Promise.all(e.map((e=>this.decodeFile(e,l)))).then((e=>{c.setBuffers(e)})).catch((e=>console.error(e))),c.start(l.currentTime),c}async decodeFile(e,t){let i=this.audioBufferCache.get(e);var r;return i||(r=new Uint8Array(e.getData()).buffer,i=await t.decodeAudioData(r),100<=this.audioBufferCache.size&&this.audioBufferCache.delete(this.audioBufferCache.keys().next().value),this.audioBufferCache.set(e,i)),i}playWavFileAtTime(e,t,i,r=1,n=0,a=1,o=!1){if(!this.isInitialized())throw new Error("Can't play audio file because audio system is not initialized");let l=this.audioContext,c=new s.InternalPlaybackHandle;var h=this.audioBufferCache.get(e);if(h)this.playAudioBuffer(c,h,t,r,n,i,a,o);else{let s;try{var u=e.getData();s=new Uint8Array(u).buffer}catch(h){return console.error("Failed to decode wav file",h),c}(async()=>{var h=await l.decodeAudioData(s);100<=this.audioBufferCache.size&&this.audioBufferCache.delete(this.audioBufferCache.keys().next().value),this.audioBufferCache.set(e,h),c.stopRequested||this.playAudioBuffer(c,h,t,r,n,i,a,o)})().catch((e=>console.error(e)))}return c}playAudioBuffer(e,t,i,r,s,n,a,o){let l=this.audioContext,c=l.createGain();c.gain.value=r;let h=l.createStereoPanner();h.pan.value=s;let u=l.createBufferSource();return u.buffer=t,u.playbackRate.value=a,u.loop=o,u.connect(h).connect(c).connect(this.getChannel(i)),e.setNodes(u,c,h),u.addEventListener("ended",(()=>{this.soundsPlaying.delete(u),e.playing=!1})),this.soundsPlaying.add(u),u.start(n),u}async playMp3File(e,t,i=1,r=0,n=!1,a){if(!this.isInitialized())throw new Error("Can't play audio file because audio system is not initialized");this.removeSuspendedSounds();var o=new s.InternalPlaybackHandle;let l=document.createElement("audio");l.loop=n;let c=l.src=URL.createObjectURL(e.asFile());return l.onended=l.onpause=()=>{URL.revokeObjectURL(c),l=void 0},a&&l.addEventListener("ended",a,{once:!0}),await this.playMedia(o,l,t,i,r),o}async playMedia(e,t,i,r,s){let n=this.audioContext,a=n.createGain();a.gain.value=r;let o=n.createStereoPanner();o.pan.value=s;let l=n.createMediaElementSource(t);return l.connect(o).connect(a).connect(this.getChannel(i)),e.setNodes(l,a,o),l.addEventListener("ended",(()=>{this.soundsPlaying.delete(l),e.playing=!1})),this.soundsPlaying.add(l),await(l.mediaElement.play()?.catch((e=>console.error(e)))),l}})}}})),System.register("engine/sound/SoundKey",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.CreateInfantrySound=0]="CreateInfantrySound",t[t.CreateUnitSound=1]="CreateUnitSound",t[t.CreateAircraftSound=2]="CreateAircraftSound",t[t.SpySatActivationSound=3]="SpySatActivationSound",t[t.SpySatDeactivationSound=4]="SpySatDeactivationSound",t[t.UpgradeVeteranSound=5]="UpgradeVeteranSound",t[t.UpgradeEliteSound=6]="UpgradeEliteSound",t[t.BaseUnderAttackSound=7]="BaseUnderAttackSound",t[t.BuildingGarrisonedSound=8]="BuildingGarrisonedSound",t[t.BuildingRepairedSound=9]="BuildingRepairedSound",t[t.CheerSound=10]="CheerSound",t[t.PlaceBeaconSound=11]="PlaceBeaconSound",t[t.StartPlanningModeSound=12]="StartPlanningModeSound",t[t.EndPlanningModeSound=13]="EndPlanningModeSound",t[t.AddPlanningModeCommandSound=14]="AddPlanningModeCommandSound",t[t.ExecutePlanSound=15]="ExecutePlanSound",t[t.CratePromoteSound=16]="CratePromoteSound",t[t.CrateMoneySound=17]="CrateMoneySound",t[t.CrateRevealSound=18]="CrateRevealSound",t[t.CrateFireSound=19]="CrateFireSound",t[t.CrateArmourSound=20]="CrateArmourSound",t[t.CrateSpeedSound=21]="CrateSpeedSound",t[t.CrateUnitSound=22]="CrateUnitSound",t[t.GUIMainButtonSound=23]="GUIMainButtonSound",t[t.GUIBuildSound=24]="GUIBuildSound",t[t.GUITabSound=25]="GUITabSound",t[t.GUIOpenSound=26]="GUIOpenSound",t[t.GUICloseSound=27]="GUICloseSound",t[t.GUIMoveOutSound=28]="GUIMoveOutSound",t[t.GUIMoveInSound=29]="GUIMoveInSound",t[t.GUIComboOpenSound=30]="GUIComboOpenSound",t[t.GUIComboCloseSound=31]="GUIComboCloseSound",t[t.GUICheckboxSound=32]="GUICheckboxSound",t[t.ScoreAnimSound=33]="ScoreAnimSound",t[t.SinkingSound=34]="SinkingSound",t[t.ImpactWaterSound=35]="ImpactWaterSound",t[t.ImpactLandSound=36]="ImpactLandSound",t[t.BombTickingSound=37]="BombTickingSound",t[t.ChronoInSound=38]="ChronoInSound",t[t.ChronoOutSound=39]="ChronoOutSound",t[t.BombAttachSound=40]="BombAttachSound",t[t.YuriMindControlSound=41]="YuriMindControlSound",t[t.DigSound=42]="DigSound",t[t.CloakSound=43]="CloakSound",t[t.SellSound=44]="SellSound",t[t.GameClosed=45]="GameClosed",t[t.IncomingMessage=46]="IncomingMessage",t[t.MessageCharTyped=47]="MessageCharTyped",t[t.SystemError=48]="SystemError",t[t.OptionsChanged=49]="OptionsChanged",t[t.GameForming=50]="GameForming",t[t.PlayerLeft=51]="PlayerLeft",t[t.PlayerJoined=52]="PlayerJoined",t[t.Construction=53]="Construction",t[t.BuildingDieSound=54]="BuildingDieSound",t[t.BuildingSlam=55]="BuildingSlam",t[t.RadarOn=56]="RadarOn",t[t.RadarOff=57]="RadarOff",t[t.MovieOn=58]="MovieOn",t[t.MovieOff=59]="MovieOff",t[t.ScoldSound=60]="ScoldSound",t[t.TeslaCharge=61]="TeslaCharge",t[t.TeslaZap=62]="TeslaZap",t[t.BuildingDamageSound=63]="BuildingDamageSound",t[t.ChuteSound=64]="ChuteSound",t[t.GenericClick=65]="GenericClick",t[t.GenericBeep=66]="GenericBeep",t[t.BuildingDrop=67]="BuildingDrop",t[t.StopSound=68]="StopSound",t[t.GuardSound=69]="GuardSound",t[t.ScatterSound=70]="ScatterSound",t[t.DeploySound=71]="DeploySound",t[t.StormSound=72]="StormSound",t[t.LightningSounds=73]="LightningSounds",t[t.ShellButtonSlideSound=74]="ShellButtonSlideSound",t[t.QuickMatchTimer=75]="QuickMatchTimer",e("SoundKey",i)}}})),System.register("engine/sound/SoundSpec",["engine/sound/SoundSpecs"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("SoundSpec",class{read(e,t){let r=e.getNumber("Range",t.range);var s;return-2===r&&(r=Number.POSITIVE_INFINITY),this.name=e.name,this.control=new Set(e.getEnumArray("Control",i.SoundControl,/\s+/,[],!0)),this.sounds=e.getArray("Sounds",/\s+/).map((e=>e.replace(/^\$/,""))),this.volume=e.has("Volume")?e.getNumber("Volume",t.volume):e.getNumber("volume",t.volume),this.delay=this.createMinMaxPair(e.getNumberArray("Delay",/\s+/,[])),this.priority=e.getEnum("Priority",i.SoundPriority,t.priority,!0),this.type=e.getEnumArray("Type",i.SoundType,/\s+/,t.type,!0),this.type.some((e=>[i.SoundType.Screen,i.SoundType.Local,i.SoundType.Global].includes(e)))||(s=t.type.find((e=>[i.SoundType.Screen,i.SoundType.Local,i.SoundType.Global].includes(e))))&&this.type.push(s),this.fShift=this.createMinMaxPair(e.getNumberArray("FShift",/\s+/,[])),this.limit=e.getNumber("Limit",t.limit),this.loop=e.getNumber("Loop"),this.range=r,this.minVolume=e.getNumber("MinVolume",t.minVolume),this.vShift=this.createMinMaxPair(e.getNumberArray(e.has("Vshift")?"Vshift":"VShift",/\s+/,[])),this.attack=e.getNumber("Attack"),this.decay=e.getNumber("Decay"),this}createMinMaxPair(e){if(e.length){let[t,i]=e;return void 0===i&&(i=t),{min:t,max:i}}}})}}})),System.register("engine/sound/SoundSpecs",["engine/sound/SoundSpec"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e}],execute:function(){var t;(t=r=r||{})[t.Global=0]="Global",t[t.Normal=1]="Normal",t[t.Screen=2]="Screen",t[t.Local=3]="Local",t[t.Player=4]="Player",t[t.Unshroud=5]="Unshroud",t[t.Shroud=6]="Shroud",e("SoundType",r),(t=s=s||{})[t.Lowest=0]="Lowest",t[t.Low=1]="Low",t[t.Normal=2]="Normal",t[t.High=3]="High",t[t.Critical=4]="Critical",e("SoundPriority",s),(t=n=n||{})[t.All=0]="All",t[t.Loop=1]="Loop",t[t.Random=2]="Random",t[t.Predelay=3]="Predelay",t[t.Interrupt=4]="Interrupt",t[t.Attack=5]="Attack",t[t.Decay=6]="Decay",t[t.Ambient=7]="Ambient",e("SoundControl",n),e("SoundSpecs",class{constructor(e){this.ini=e,this.specs=new Map,this.parse()}parse(){let e=this.ini.getSection("Defaults");if(e){this.defaults={minVolume:e.getNumber("MinVolume"),range:e.getNumber("Range"),volume:e.getNumber("Volume"),limit:e.getNumber("Limit"),type:e.getEnumArray("Type",r,/\s+/,[],!0),priority:e.getEnum("Priority",s,s.Normal,!0)};let a=this.ini.getSection("SoundList");var t,n;if(a)for(t of new Set(a.entries.values()))t&&((n=this.ini.getSection(t))?this.specs.set(t,(new i.SoundSpec).read(n,this.defaults)):console.warn(`Missing sound section [${t}]`));else console.warn("Missing sound [SoundList] section. Sounds will not be played.")}else console.warn("Missing sound [Defaults] section. Sounds will not be played.")}getSpec(e){return this.specs.get(e)}getAll(){return[...this.specs.values()]}})}}})),System.register("engine/sound/Sound",["engine/sound/ChannelType","engine/sound/SoundKey","engine/sound/SoundSpecs","util/math","util/typeGuard"],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){e("Sound",class{constructor(e,t,s,n,a){this.audioSystem=e,this.audioFiles=t,this.soundSpecs=s,this.audioVisualRules=n,this.document=a,this.playbackHandles=new Map,this.handleClick=e=>{let t=e.target;t.matches("button, .menu-button:not(.disabled)")?this.play(r.SoundKey.GUIMainButtonSound,i.ChannelType.Ui):t.matches(".list-item")?this.play(r.SoundKey.GenericClick,i.ChannelType.Ui):t instanceof HTMLInputElement&&["checkbox","radio","range"].includes(t.type)&&!t.disabled?this.play(r.SoundKey.GUICheckboxSound,i.ChannelType.Ui):(t instanceof HTMLSelectElement&&!t.disabled||t.matches(".select:not(.disabled) *"))&&this.play(r.SoundKey.GUIComboOpenSound,i.ChannelType.Ui)}}initialize(){this.audioSystem.initialize(),this.document.addEventListener("click",this.handleClick)}dispose(){this.audioSystem.dispose(),this.document.removeEventListener("click",this.handleClick)}getSoundKey(e){let t;if("string"==typeof r.SoundKey[e]){if(t=this.audioVisualRules.ini.getString(r.SoundKey[e]),!t)return}else t=e;return t}getSoundSpec(e){var t=this.getSoundKey(e);if(t){var i=this.soundSpecs.getSpec(t);if(i)return i;console.warn(`Sound "${t}" is not defined`)}else console.warn(`No sound is defined for key "${r.SoundKey[e]}"`)}play(e,t){let i=this.getSoundSpec(e);if(i){var r=i.control.has(s.SoundControl.Loop)?i.loop||Number.POSITIVE_INFINITY:0;return this.playWithOptions(i,t,i.volume/100,0,i.limit,r)}}playWithOptions(e,t,i,r,o,l){if(e.sounds.length){this.cleanOldHandles();let p=this.playbackHandles.get(e.name);if(p||(p=[],this.playbackHandles.set(e.name,p)),o&&p.length>=o){if(!e.control.has(s.SoundControl.Interrupt))return;p.shift().stop()}var c=1+(e.fShift?n.getRandomInt(e.fShift.min,e.fShift.max)/100:0);let m;var h=e.control.has(s.SoundControl.Attack),u=e.control.has(s.SoundControl.Decay);if(l&&(1this.getWavFile(e))).filter(a.isNotNullOrUndefined);m=this.audioSystem.playWavLoop(d,t,i,r,e.delay,c,h,u,l)}else{let o=0;if(e.delay&&(o=n.getRandomInt(e.delay.min,e.delay.max)),h||u){var g=this.buildAttackDecaySequence(e,h,u,!1).map((e=>this.getWavFile(e))).filter(a.isNotNullOrUndefined);m=this.audioSystem.playWavSequence(g,t,i,r,o,c)}else{let a;if(a=e.control.has(s.SoundControl.Random)?e.sounds[n.getRandomInt(0,e.sounds.length-1)]:e.sounds[0],!(g=this.getWavFile(a)))return;m=this.audioSystem.playWavFile(g,t,i,r,o,c,0!==l)}}return m&&p.push(m),m}}buildAttackDecaySequence(e,t,i,r){var s=t?e.attack||1:0,a=i?e.decay||1:0,o=e.sounds.slice(s,e.sounds.length-a);let l=[];return 0e.isPlaying())),this.playbackHandles.set(e,t)}})}}})),System.register("engine/util/WorldViewportHelper",["engine/IsoCoords"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("WorldViewportHelper",class{constructor(e){this.scene=e}distanceToViewport(e){var t=this.scene.viewport;t=new THREE.Box2(new THREE.Vector2(t.x,t.y),new THREE.Vector2(t.x+t.width-1,t.x+t.height-1));return this.distanceToScreenBox(e,t)}distanceToScreenBox(e,t){var r=i.IsoCoords.vecWorldToScreen(e),s=i.IsoCoords.worldToScreen(0,0),n=this.scene.cameraPan.getPan();return t.distanceToPoint(new THREE.Vector2(r.x-s.x-n.x+this.scene.viewport.width/2,r.y-s.y-n.y+this.scene.viewport.height/2))}distanceToViewportCenter(e){var t=i.IsoCoords.vecWorldToScreen(e),r=i.IsoCoords.worldToScreen(0,0),s=this.scene.cameraPan.getPan(),n=this.scene.viewport;return new THREE.Vector2(t.x-r.x-s.x+this.scene.viewport.width/2,t.y-r.y-s.y+this.scene.viewport.height/2).sub(new THREE.Vector2(n.x+n.width/2,n.y+n.height/2))}intersectsScreenBox(e,t){return 0===this.distanceToScreenBox(e,t)}})}}})),System.register("engine/util/MapTileIntersectHelper",["util/geometry","game/Coords","engine/IsoCoords"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){e("MapTileIntersectHelper",class{constructor(e,t){this.map=e,this.scene=t}getTileAtScreenPoint(e){var t=this.scene.viewport;if(i.rectContainsPoint(t,e))return(t=this.intersectTilesByScreenPos(e)).length?t[0]:void 0}intersectTilesByScreenPos(e){var t=s.IsoCoords.worldToScreen(0,0),i=this.scene.cameraPan.getPan(),n=(t={x:e.x+t.x+i.x-this.scene.viewport.width/2,y:e.y+t.y+i.y-this.scene.viewport.height/2},i=s.IsoCoords.screenToWorld(t.x,t.y),i=new THREE.Vector2(i.x,i.y).multiplyScalar(1/r.Coords.LEPTONS_PER_TILE).floor(),this.map.tiles.getByMapCoords(i.x,i.y));if(!n)return console.warn(`Tile coordinates (${i.x},${i.y}) out of range`),[];let a=[];var o;for(let e=0;e<30;e++)for(o of[{x:n.rx+e,y:n.ry+e},{x:n.rx+e+1,y:n.ry+e},{x:n.rx+e,y:n.ry+e+1}]){var l={x:o.x,y:o.y};(l=this.map.tiles.getByMapCoords(l.x,l.y))&&a.push(l)}let c=[],h=new THREE.Triangle;var u,d=new THREE.Vector3(t.x,0,t.y);for(u of a){var g=s.IsoCoords.tile3dToScreen(u.rx,u.ry,u.z),p=s.IsoCoords.tile3dToScreen(u.rx,u.ry+1.1,u.z),m=s.IsoCoords.tile3dToScreen(u.rx+1.1,u.ry,u.z),f=s.IsoCoords.tile3dToScreen(u.rx+1.1,u.ry+1.1,u.z);h.b.x=p.x,h.b.z=p.y,h.c.x=m.x,h.c.z=m.y,h.a.x=g.x,h.a.z=g.y,g=h.containsPoint(d),h.a.x=f.x,h.a.z=f.y,f=h.containsPoint(d),(g||f)&&c.unshift(u)}for(;!c.length;)c=this.intersectTilesByScreenPos({x:e.x,y:e.y-s.IsoCoords.tileHeightToScreen(1)});return c}})}}})),System.register("engine/sound/WorldSound",["engine/sound/SoundKey","engine/sound/ChannelType","engine/sound/SoundSpecs","util/math","util/geometry","game/map/MapShroud","game/Coords","util/typeGuard"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e}],execute:function(){e("WorldSound",h=class e{constructor(t,i,r,s,n,o,l,h){this.sound=t,this.localPlayer=i,this.shroud=r,this.worldViewportHelper=s,this.mapTileIntersectHelper=n,this.world=o,this.worldScene=l,this.renderer=h,this.soundInstances=[],this.handleObjectRemoved=e=>{this.soundInstances.forEach((t=>{t.gameObject===e&&t.handle.stop()}))},this.handleFrame=e=>{let t=!1;this.lastViewport&&a.rectEquals(this.worldScene.viewport,this.lastViewport)||(this.lastViewport=this.worldScene.viewport,t=!0),(!this.lastUpdate||200<=e-this.lastUpdate)&&(t=!0),t&&(this.update(),this.lastUpdate=e)},this.noShroudSpecs=e.noShroudKeys.map((e=>{var t=this.sound.getSoundSpec(e);if(t)return t;console.warn(`Sound key "${e}" doesn't have a corresponding sound.ini entry`)})).filter(c.isNotNullOrUndefined)}init(){this.renderer.onFrame.subscribe(this.handleFrame),this.world.onObjectRemoved.subscribe(this.handleObjectRemoved)}dispose(){this.renderer.onFrame.unsubscribe(this.handleFrame),this.world.onObjectRemoved.unsubscribe(this.handleObjectRemoved),this.soundInstances.forEach((e=>e.handle.stop()))}update(){var e=this.mapTileIntersectHelper.getTileAtScreenPoint({x:this.worldScene.viewport.x+this.worldScene.viewport.width/2,y:this.worldScene.viewport.y+this.worldScene.viewport.height/2});if(e){this.tileAtViewportCenter=e,this.cleanOldInstances();let r=new Map;for(var t of this.soundInstances){var i=t.gameObject?.position.worldPosition??t.worldPos;let{volume:e,pan:s}=this.computeVolumeAndPan(t.spec,i,t.player,t.gain);0=t.spec.limit?e=0:r.set(t.spec,i+1)),t.handle.setVolume(e),t.handle.setPan(s),t.volume=e}}else console.warn("No tile found at viewport center. Can't update local sound positions.")}cleanOldInstances(){this.soundInstances=this.soundInstances.filter((e=>e.handle.isPlaying()))}playEffect(e,t,i,n=1,a){let o=this.sound.getSoundSpec(e);if(o&&(!o.type.includes(s.SoundType.Player)||i===this.localPlayer)){let e,u;t.position?(e=t.position.worldPosition,u=t):e=t;var l=o.control.has(s.SoundControl.Loop)||o.control.has(s.SoundControl.Ambient),c=l?o.loop||Number.POSITIVE_INFINITY:0;l&&void 0!==a&&(n=a);let{volume:d,pan:g}=this.computeVolumeAndPan(o,e,i,n),p=o.limit;if(l&&o.limit&&(p=0,this.cleanOldInstances(),this.soundInstances.filter((e=>e.spec===o&&0=o.limit&&(d=0)),l||d||!o.limit){var h=o.control.has(s.SoundControl.Ambient)||o.name.startsWith("_Amb_")?r.ChannelType.Ambient:r.ChannelType.Effect;return(c=this.sound.playWithOptions(o,h,d,g,p,c))&&this.soundInstances.push({spec:o,gameObject:u,worldPos:e,player:i,handle:c,gain:n,volume:d,loop:l}),c}}}computeVolumeAndPan(e,t,i,r=1){let a=e.volume/100,c=0;var h,u,d;return e.type.includes(s.SoundType.Global)&&i!==this.localPlayer&&(a=e.minVolume/100),a*=r,(e.type.includes(s.SoundType.Screen)||e.type.includes(s.SoundType.Global))&&(h=this.worldViewportHelper.distanceToViewportCenter(t),c=n.clamp(h.x/(this.worldScene.viewport.width/2),-1,1)),e.type.includes(s.SoundType.Screen)?(u=this.worldViewportHelper.distanceToViewport(t),d=(this.worldScene.viewport.height+this.worldScene.viewport.width)/2/3,a*=THREE.Math.lerp(1,0,Math.min(1,u/d))):e.type.includes(s.SoundType.Local)&&(this.tileAtViewportCenter?(u=new THREE.Vector2(t.x/l.Coords.LEPTONS_PER_TILE-this.tileAtViewportCenter.rx,t.z/l.Coords.LEPTONS_PER_TILE-this.tileAtViewportCenter.ry).length(),(d=e.range*Math.SQRT2){e.material.uniforms.resolution.value.copy(this.computeResolution(this.camera))}))),this.needsUpdate){this.needsUpdate=!1,this.lineMesh.geometry=this.createLineGeometry(this.sourcePos,this.targetPos),this.shadowLineMesh.geometry=this.createShadowLineGeometry(this.sourcePos,this.targetPos),this.lineMesh.material.uniforms.color.value=this.color.clone();let e=this.sourcePos.distanceTo(this.targetPos);[this.lineMesh,this.shadowLineMesh].forEach((t=>{let i=t.material;i.uniforms.dashArray.value=this.computeDashArray(e),i.depthTest=void 0===this.renderOrder})),this.lineMesh.renderOrder=this.renderOrder??0,this.shadowLineMesh.renderOrder=void 0!==this.renderOrder?this.renderOrder-1:0}[this.lineMesh,this.shadowLineMesh].forEach((e=>{let i=e.material;i.uniforms.dashOffset.value-=i.uniforms.dashArray.value/50*t}))}createLineMesh(){let e=this.sourcePos.clone();var t=this.targetPos.clone();let i=new THREE.Mesh(this.createLineGeometry(e,t),this.createLineMaterial(this.color.clone(),e.distanceTo(t)));return this.renderOrder&&(i.renderOrder=this.renderOrder),i}createLineShadowMesh(){let e=new THREE.Mesh(this.createShadowLineGeometry(this.sourcePos,this.targetPos),this.createLineMaterial(new THREE.Color(0),this.sourcePos.distanceTo(this.targetPos)));return this.renderOrder&&(e.renderOrder=this.renderOrder-1),e}createShadowLineGeometry(e,t){var i=new THREE.Vector3(+r.Coords.ISO_WORLD_SCALE,0,+r.Coords.ISO_WORLD_SCALE);return this.createLineGeometry(e.clone().add(i),t.clone().add(i))}createLineGeometry(e,t){let r=new THREE.Geometry;r.vertices.push(e,t);let s=new i.MeshLine;return s.setGeometry(r),s.geometry}createLineMaterial(e,t){return new i.MeshLineMaterial({color:e,lineWidth:2,resolution:this.computeResolution(this.camera),transparent:!0,sizeAttenuation:0,dashArray:this.computeDashArray(t),depthTest:void 0===this.renderOrder})}computeDashArray(e){return Math.min(1,5/e)*r.Coords.ISO_WORLD_SCALE}computeResolution(e){var t=e.top,i=e.right/e.top,s=2*t/Math.cos(e.rotation.y);return new THREE.Vector2(s*i,s).multiplyScalar(t*Math.cos(this.camera.rotation.x)/r.Coords.ISO_WORLD_SCALE)}remove(){this.container.remove(this)}dispose(){this.wrapper&&[this.lineMesh,this.shadowLineMesh].forEach((e=>{e&&(e.geometry.dispose(),e.material.dispose())}))}})}}})),System.register("engine/renderable/entity/unit/FlyerHelperMode",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.Always=0]="Always",t[t.Selected=1]="Selected",t[t.Never=2]="Never",e("FlyerHelperMode",i)}}})),System.register("engine/renderable/entity/unit/DebugLabel",["engine/gfx/SpriteUtils","engine/gfx/CanvasUtils","game/Coords"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){e("DebugLabel",class{constructor(e,t,i){this.text=e,this.color=t,this.camera=i}get3DObject(){return this.mesh}create3DObject(){if(!this.mesh){let t=new THREE.Color(this.color);var e=.5<.299*t.r+.587*t.g+.114*t.b?"black":"white";e=this.texture=this.createTexture(this.text,"#"+t.getHexString(),e);this.mesh=this.createMesh(e)}}createMesh(e){var t=i.SpriteUtils.createSpriteGeometry({texture:e,camera:this.camera,align:{x:0,y:-1},offset:{x:0,y:s.Coords.ISO_TILE_SIZE/4},scale:s.Coords.ISO_WORLD_SCALE}),r=new THREE.MeshBasicMaterial({map:e,side:THREE.DoubleSide,transparent:!0,depthTest:!1,flatShading:!0});let n=new THREE.Mesh(t,r);return n.matrixAutoUpdate=!1,n}createTexture(e,t,i){let s=document.createElement("canvas");s.width=s.height=0;let n=s.getContext("2d"),a=0;for(var o of e.split("\n"))a+=(o=r.CanvasUtils.drawText(n,o,0,a,{color:t,outlineColor:i,outlineWidth:2,fontFamily:"'Fira Sans Condensed', Arial, sans-serif",fontSize:10,fontWeight:"400",paddingTop:3,paddingBottom:3,paddingLeft:3,paddingRight:3,autoEnlargeCanvas:!0})).height;var l=s.width,c=s.height;c=n.getImageData(0,0,l,c);s.width+=1,s.height+=1,n.putImageData(c,1,1);let h=new THREE.Texture(s);return h.minFilter=THREE.NearestFilter,h.magFilter=THREE.NearestFilter,h.needsUpdate=!0,h.flipY=!0,h}update(){}dispose(){this.texture?.dispose(),this.mesh?.material?.dispose(),this.mesh?.geometry.dispose()}})}}})),System.register("engine/renderable/entity/PipOverlay",["engine/gfx/TextureAtlas","data/Bitmap","engine/gfx/SpriteUtils","game/Coords","engine/gfx/TextureUtils","game/gameobject/selection/SelectionLevel","game/type/PipColor","util/disposable/CompositeDisposable","engine/gfx/OverlayUtils","engine/renderable/fx/RallyPointFx","engine/renderable/entity/unit/FlyerHelperMode","game/gameobject/unit/ZoneType","engine/gfx/BufferGeometryUtils","engine/gfx/material/PaletteBasicMaterial","engine/gfx/batch/BatchedMesh","game/gameobject/unit/HealthLevel","engine/renderable/entity/unit/DebugLabel"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p,m,f,y,T,v,b,S,w,C;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e},function(e){m=e},function(e){f=e},function(e){y=e},function(e){T=e}],execute:function(){-1,v={width:8,height:11},b=1,S={0:o.SelectionLevel.Hover,2:o.SelectionLevel.Selected,1:o.SelectionLevel.Hover,3:o.SelectionLevel.Hover,4:o.SelectionLevel.Selected,5:o.SelectionLevel.Selected},w=(new Map).set(y.HealthLevel.Green,15).set(y.HealthLevel.Yellow,16).set(y.HealthLevel.Red,17),e("PipOverlay",C=class e{constructor(e,t,i,r,s,n,a,o,l,h,u,d,g,p,m,f){this.paradropRules=e,this.audioVisualRules=t,this.gameObject=i,this.viewer=r,this.alliances=s,this.selectionModel=n,this.imageFinder=a,this.palette=o,this.camera=l,this.strings=h,this.flyerHelperOpt=u,this.hiddenObjectsOpt=d,this.debugTextEnabled=g,this.animFactory=p,this.useSpriteBatching=m,this.useMeshInstancing=f,this.lastPrimaryFactory=!1,this.invalidatedElements=[],this.disposables=new c.CompositeDisposable}static clearCaches(){e.atlasCache?.dispose(),e.atlasCache=void 0,e.atlasImageHandles.clear(),[...e.unitHealthTextures.values()].forEach((e=>e.dispose())),e.unitHealthTextures.clear(),e.unitHealthMaterials.forEach((e=>e.dispose())),e.unitHealthMaterials.clear(),[...e.controlGroupTextures.values()].forEach((e=>e.dispose())),e.controlGroupTextures.clear(),e.controlGroupMaterials.forEach((e=>e.dispose())),e.controlGroupMaterials.clear(),[...e.primaryFactoryTextures.values()].forEach((e=>e.dispose())),e.primaryFactoryTextures.clear(),e.primaryFactoryMaterials.forEach((e=>e.dispose())),e.primaryFactoryMaterials.clear()}create3DObject(){let t=this.rootObj;if(!t){var i;if(t=new THREE.Object3D,t.name="pip_overlay",t.matrixAutoUpdate=!1,e.atlasCache||(i=this.initTexture(),e.atlasCache=i,[...e.atlasImageHandles.keys()].forEach((t=>{var i=s.SpriteUtils.createSpriteGeometry(this.buildSpriteGeometry(t));e.geometries.set(t,i)})),e.material=new m.PaletteBasicMaterial({map:e.atlasCache.getTexture(),palette:a.TextureUtils.textureFromPalette(this.palette),alphaTest:.5,flatShading:!0,transparent:!0,depthTest:!1})),this.gameObject.isBuilding()){var r;this.healthBar=this.createBuildingHealthBar(this.gameObject),t.add(this.healthBar),1<=this.gameObject.art.height&&(n=this.selectionBox=this.createBuildingSelectionBox(this.gameObject),t.add(n)),(r=this.createBuildingOccupationInfo(this.gameObject))&&(t.add(r),this.pipsSprite=r),this.lastPipsDataKey=this.gameObject.garrisonTrait?.units.length}else{var{healthBarWrapper:n,selectionBox:r}=this.createUnitHealthBar(this.gameObject);if(this.healthBar=n,this.selectionBox=r,t.add(this.healthBar),this.gameObject.art.isVoxel&&(this.gameObject.rules.consideredAircraft||this.gameObject.isAircraft())&&!this.gameObject.rules.missileSpawn){let e=this.animFactory(this.audioVisualRules.flyerHelper);this.flyHelper=e,e.create3DObject(),t.add(e.get3DObject())}if(this.gameObject.isUnit()){let e=this.animFactory(this.audioVisualRules.behind);e.setRenderOrder(999995),this.behindAnim=e}}if(this.gameObject.debugLabel&&this.debugTextEnabled.value){let e=new T.DebugLabel(this.gameObject.debugLabel,this.gameObject.owner.color.asHex(),this.camera);this.debugLabel=e,e.create3DObject(),e.get3DObject().renderOrder=999999,t.add(e.get3DObject())}this.lastHealth=this.gameObject.healthTrait.health,this.lastOwner=this.gameObject.owner,this.rootObj=t}}onCreate(e){this.gameObject.isBuilding()&&this.gameObject.rallyTrait&&(this.rallyLine=new u.RallyPointFx(this.camera,new THREE.Vector3,new THREE.Vector3,new THREE.Color,999999),this.rallyLine.visible=!1,e.addEffect(this.rallyLine),this.disposables.add((()=>this.rallyLine.remove()),this.rallyLine))}initTexture(){e.pipBrdFile=this.imageFinder.find("pipbrd",!1),e.pipsFile=this.imageFinder.find("pips",!1),e.pips2File=this.imageFinder.find("pips2",!1);let t=[e.pipBrdFile,e.pipsFile,e.pips2File],s=[];t.forEach((t=>{for(let a=0;a100*this.audioVisualRules.conditionYellow?1:r>100*this.audioVisualRules.conditionRed?2:4,i=l+"_"+i+"_"+o;let c=e.buildingHealthGeoCache.get(i);if(!c){let t=[];var h=e.pipsFile.getImage(0),u=e.pipsFile.getImage(l);for(let i=0;i100*this.audioVisualRules.conditionYellow?y.HealthLevel.Green:o>100*this.audioVisualRules.conditionRed?y.HealthLevel.Yellow:y.HealthLevel.Red,void 0===(o=w.get(s)))throw new Error(`Unhandled health level "${s}"`);var l=e.pipsFile.getImage(o),c=new r.IndexedBitmap(l.width,l.height,l.imageData),h=(t-1)*i.height;for(let e=0;e{let l=this.createBuildingSelectionCornerMesh();l.matrixAutoUpdate=!1,l.position.set(s*r*i.width,n.Coords.tileHeightToWorld(e.art.height),a*r*i.height),l.rotation.y=o*Math.PI/2,l.scale.set((o%2==0?i.width:i.height)/4*n.Coords.getWorldTileSize(),n.Coords.tileHeightToWorld(e.art.height/4),(o%2==0?i.height:i.width)/4*n.Coords.getWorldTileSize()),l.updateMatrix(),t.add(l)})),t}createBuildingSelectionCornerMesh(){var e=[0,0,0,1,0,0,0,0,0,0,-1,0,0,0,0,0,0,1],t=new Array(e.length).fill(1);let i=new THREE.BufferGeometry;return i.addAttribute("position",new THREE.BufferAttribute(new Float32Array(e),3)),i.addAttribute("color",new THREE.BufferAttribute(new Float32Array(t),3)),t=new THREE.LineBasicMaterial({vertexColors:THREE.VertexColors}),this.disposables.add(i,t),new THREE.LineSegments(i,t)}createBuildingOccupationInfo(t){if(t.garrisonTrait?.units.length&&!this.objectIsOpaqueToViewer()){var i=t.garrisonTrait.units.length,r=t.rules.maxNumberOccupants;let h=[];var s=4*n.Coords.ISO_WORLD_SCALE,a=e.pipsFile.getImage(6),o=e.pipsFile.getImage(7);for(let c=1;c<=r;c++){var l=c<=i?o:a;let r=e.geometries.get(l).clone();l=s*c+s/2,r.applyMatrix((new THREE.Matrix4).makeTranslation(l,0,t.art.foundation.height*n.Coords.getWorldTileSize())),h.push(r)}var c=p.BufferGeometryUtils.mergeBufferGeometries(h);let u=this.useSpriteBatching?new f.BatchedMesh(c,e.material,f.BatchMode.Merging):new THREE.Mesh(c,e.material);return u.matrixAutoUpdate=!1,u.renderOrder=999999,u}}createPipsSprite(t,i,r=!1){if(!this.objectIsOpaqueToViewer()){let h=[];var s=e.pips2File.getImage(r?12:0).width,a=e.pips2File.getImage(r?13:0);for(let c=0;c=S[0]||r>=S[3])&&(this.invalidatedElements[0]=void 0,this.updateHealthBarSprite(r));var i=this.computePipsDataKey(t);if(this.lastPipsDataKey===i&&this.lastOwner===t.owner||(this.lastPipsDataKey=i,this.invalidatedElements[1]=!0),this.invalidatedElements[1]&&r>=S[1]&&(this.invalidatedElements[1]=void 0,this.updatePipsSprite()),i=this.selectionModel.getControlGroupNumber(),this.lastControlGroup!==i&&(this.lastControlGroup=i,this.invalidatedElements[3]=!0),this.invalidatedElements[3]&&r>=S[3]&&(this.invalidatedElements[3]=void 0,this.updateControlGroupSprite(i)),i=t.isBuilding()&&!!t.rules.factory&&t.owner.production?.getPrimaryFactory(t.rules.factory)===t,this.lastPrimaryFactory===i&&this.lastOwner===t.owner||(this.lastPrimaryFactory=i,this.invalidatedElements[4]=!0),this.invalidatedElements[4]&&r>=S[4]&&(this.invalidatedElements[4]=void 0,this.updatePrimaryFactorySprite(i)),i=t.isBuilding()&&t.rallyTrait?.getRallyPoint()||void 0,this.lastRallyPoint===i&&this.lastOwner===t.owner||(this.lastRallyPoint=i,this.invalidatedElements[5]=!0),this.invalidatedElements[5]&&r>=S[5]&&this.rallyLine&&(this.invalidatedElements[5]=void 0,this.updateRallyPointLine(i,this.rallyLine)),t.isBuilding()?(i=!t.autoRepairTrait.isDisabled(),this.lastRepairState!==i&&(this.lastRepairState=i,this.updateRepairWrenchSprite(i))):this.lastVeteranLevel!==t.veteranLevel&&(this.lastVeteranLevel=t.veteranLevel,this.updateVeteranIndicatorSprite(t)),this.updateFlyerHelper(r,e),this.updateBehindAnim(e),this.updateDebugLabel(),void 0===this.lastSelectionLevel||this.lastSelectionLevel!==r){this.lastSelectionLevel=r,new Map([[0,this.healthBar],[2,this.selectionBox],[1,this.pipsSprite],[3,this.controlGroupSprite],[4,this.primaryFactorySprite],[5,this.rallyLine]]).forEach(((e,t)=>{e&&(e.visible=r>=S[t])}))}this.lastOwner=t.owner,this.lastDebugTextEnabled=this.debugTextEnabled.value,this.repairWrench?.update(e)}}updateFlyerHelper(e,t){if(this.flyHelper&&this.gameObject.isUnit()){let r;switch(this.flyerHelperOpt.value){case d.FlyerHelperMode.Never:r=!1;break;case d.FlyerHelperMode.Always:r=!0;break;case d.FlyerHelperMode.Selected:r=e>=o.SelectionLevel.Selected;break;default:r=!1}r=r&&this.gameObject.zone===g.ZoneType.Air;let s=this.flyHelper.get3DObject();var i;s.visible=r,r&&(this.flyHelper.update(t),(i=-n.Coords.tileHeightToWorld(this.gameObject.tileElevation))!==s.position.y&&(s.position.y=i,s.updateMatrix()))}}updateBehindAnim(e){this.behindAnim&&(this.hiddenObjectsOpt.value&&this.gameObject.isSpawned&&this.gameObject.tile.occluded&&this.gameObject.art.canBeHidden&&this.gameObject.zone!==g.ZoneType.Air?(this.behindAnim?.update(e),this.behindAnim.get3DObject()?.parent||(this.behindAnim.create3DObject(),this.rootObj.add(this.behindAnim.get3DObject()),this.behindAnim.get3DObject().updateMatrix())):this.behindAnim.get3DObject()?.parent&&this.rootObj.remove(this.behindAnim.get3DObject()))}updateDebugLabel(){if((this.gameObject.debugLabel!==this.lastDebugLabel||this.gameObject.owner!==this.lastOwner||this.debugTextEnabled.value!==this.lastDebugTextEnabled)&&(this.lastDebugLabel=this.gameObject.debugLabel,this.debugLabel&&(this.rootObj.remove(this.debugLabel.get3DObject()),this.debugLabel.dispose(),this.debugLabel=void 0),this.gameObject.debugLabel&&this.debugTextEnabled.value)){let e=new T.DebugLabel(this.gameObject.debugLabel,this.gameObject.owner.color.asHex(),this.camera);this.debugLabel=e,e.create3DObject(),e.get3DObject().renderOrder=999999,this.rootObj.add(e.get3DObject())}}updateRepairWrenchSprite(e){this.repairWrench&&this.rootObj.remove(this.repairWrench.get3DObject()),e&&(this.repairWrench=this.createRepairWrench(),this.repairWrench&&(this.repairWrench.create3DObject(),this.rootObj.add(this.repairWrench.get3DObject())))}updateVeteranIndicatorSprite(t){var i;this.veteranIndicator&&this.rootObj.remove(this.veteranIndicator),this.veteranIndicator=this.createVeteranIndicator(t),this.veteranIndicator&&(this.rootObj.add(this.veteranIndicator),i=n.Coords.screenDistanceToWorld(Math.floor(e.pipBrdFile.getImage(t.isInfantry()?1:0).width/2)-Math.floor(e.pipsFile.getImage(13).width/2),0),this.veteranIndicator.position.x=i.x,this.veteranIndicator.position.y=0,this.veteranIndicator.position.z=i.y,this.veteranIndicator.updateMatrix())}updateRallyPointLine(e,t){t.visible=!1,e&&(this.objectIsOpaqueToViewer()||(t.sourcePos=this.gameObject.position.worldPosition,t.targetPos=n.Coords.tile3dToWorld(e.rx+.5,e.ry+.5,e.z),t.color=new THREE.Color(this.gameObject.owner.color.asHex()),t.needsUpdate=!0,t.visible=!0))}updatePrimaryFactorySprite(e){var t;this.primaryFactorySprite&&this.rootObj.remove(this.primaryFactorySprite),!e||(t=this.primaryFactorySprite=this.createPrimaryFactorySprite())&&this.rootObj.add(t)}updateControlGroupSprite(t){if(this.controlGroupSprite&&this.rootObj.remove(this.controlGroupSprite),void 0!==t){let r=this.controlGroupSprite=this.createControlGroupSprite(t),s=this.gameObject;var i;s.isBuilding()?(r.position.x=1,r.position.y=n.Coords.tileHeightToWorld(s.art.height-.5),r.position.z=n.Coords.getWorldTileSize()*s.art.foundation.height):s.isInfantry()?(i=n.Coords.screenDistanceToWorld(-(v.width+2*b+e.pipBrdFile.getImage(1).width/2+1),-e.pipBrdFile.height/2),r.position.x=i.x,r.position.y=this.healthBar.position.y,r.position.z=i.y):(i=n.Coords.screenDistanceToWorld(-e.pipBrdFile.getImage(0).width/2,e.pipBrdFile.height/2),r.position.x=i.x,r.position.y=this.healthBar.position.y,r.position.z=i.y),r.updateMatrix(),this.rootObj.add(r)}}updatePipsSprite(){this.pipsSprite&&(this.rootObj.remove(this.pipsSprite),this.pipsSprite=void 0);let e,t=this.gameObject;if(t.isBuilding())e=this.createBuildingOccupationInfo(t);else if(t.isVehicle()){let s,n=[];var i,r;t.harvesterTrait&&0{let t=0;e.isVehicle()&&(n.push(l.PipColor.Blue),t++),n.push(...new Array(e.rules.size-t).fill(e.isVehicle()?l.PipColor.Red:e.rules.pip))}))):t.airSpawnTrait&&(n=new Array(t.airSpawnTrait.availableSpawns).fill(l.PipColor.Yellow),s=t.rules.spawnsNumber),s&&(e=this.createPipsSprite(n,s))}else t.isAircraft()&&t.ammo&&t.name!==this.paradropRules.paradropPlane&&!t.rules.missileSpawn&&(e=this.createPipsSprite(new Array(t.ammo).fill(l.PipColor.Green),t.ammo,!0));e&&(e.updateMatrix(),this.rootObj.add(e),this.pipsSprite=e)}computePipsDataKey(e){let t;return e.isBuilding()?t=e.garrisonTrait?.units.length:e.isVehicle()?e.harvesterTrait?t=e.harvesterTrait.ore+"_"+e.harvesterTrait.gems:e.transportTrait?t=e.transportTrait.units.length:e.airSpawnTrait&&(t=e.airSpawnTrait.availableSpawns):e.isAircraft()&&(t=e.ammo),t}updateHealthBarSprite(e){if(this.healthBar){if(this.rootObj.remove(this.healthBar),this.gameObject.isBuilding())this.healthBar=this.createBuildingHealthBar(this.gameObject);else{let{healthBarWrapper:t,selectionBox:i}=this.createUnitHealthBar(this.gameObject);this.healthBar=t,this.selectionBox=i,i.visible=e>=S[2]}this.rootObj.add(this.healthBar)}}createRepairWrench(){let e=this.animFactory("WRENCH");return e.setRenderOrder(999998),e}objectIsOpaqueToViewer(){return!(!this.viewer||this.viewer.isObserver||this.gameObject.owner===this.viewer||this.alliances.areAllied(this.gameObject.owner,this.viewer))}dispose(){this.disposables.dispose(),this.repairWrench?.dispose(),this.flyHelper?.dispose(),this.behindAnim?.dispose(),this.debugLabel?.dispose(),this.animFactory=void 0}}),C.atlasImageHandles=new Map,C.geometries=new Map,C.buildingHealthGeoCache=new Map,C.unitHealthGeoCache=new Map,C.unitHealthTextures=new Map,C.unitHealthMaterials=new Map,C.controlGroupTextures=new Map,C.controlGroupMaterials=new Map,C.primaryFactoryTextures=new Map,C.primaryFactoryMaterials=new Map}}})),System.register("engine/renderable/entity/HighlightAnimRunner",["engine/animation/SimpleRunner","engine/Animation","engine/AnimProps","data/IniSection","data/ShpFile"],(function(e,t){"use strict";var i,r,s,n,a,o;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){o=class extends i.SimpleRunner{constructor(e,t=.5,i=2,o=5){super(),this.maxAmount=t;let l=new s.AnimProps(new n.IniSection("dummy"),new a.ShpFile);l.rate=o,l.loopEnd=i-1,l.loopCount=2,this.animation=new r.Animation(l,e),this.animation.stop()}animate(e){this.animation.props.loopCount=e,this.animation.reset()}getValue(){return(1-this.getCurrentFrame())*this.maxAmount}},e("HighlightAnimRunner",o)}}})),System.register("engine/renderable/entity/InvulnerableAnimRunner",["engine/animation/SimpleRunner","engine/Animation","engine/AnimProps","data/IniSection","data/ShpFile"],(function(e,t){"use strict";var i,r,s,n,a,o;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){o=class extends i.SimpleRunner{constructor(e,t=-.75,i=-.5,o=10,l=10){super(),this.minAmount=t,this.maxAmount=i,this.steps=o;let c=new s.AnimProps(new n.IniSection("dummy"),new a.ShpFile);c.rate=l,c.loopEnd=o,c.loopCount=-1,this.animation=new r.Animation(c,e),this.animation.stop()}animate(){this.animation.reset()}getValue(){return this.minAmount+(1+Math.sin(2*Math.PI*this.getCurrentFrame()/this.steps))/2*(this.maxAmount-this.minAmount)}},e("InvulnerableAnimRunner",o)}}})),System.register("engine/renderable/RenderablePlugin",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("engine/gfx/geometry/BufferGeometrySerializer",["data/DataStream"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("BufferGeometrySerializer",class{serialize(e){if(Object.keys(e.morphAttributes).length)throw new Error("Morph attributes are not supported");if(1this.getTypedArrayByteSize(e.array))).reduce(((e,t)=>e+t),0)+1+(s?this.getTypedArrayByteSize(s.array):0);let a=new i.DataStream(new ArrayBuffer(n));for(t of(a.writeUint8(r.length),r)){var o=e.getAttribute(t);a.writeCString(t,20),a.writeUint8(o.itemSize),a.writeUint8(Number(o.normalized)),this.writeTypedArray(a,o.array)}return a.writeUint8(Number(Boolean(s))),s&&this.writeTypedArray(a,s.array),a.seek(0),a.dynamicSize=!1,a.buffer}unserialize(e){let t=new THREE.BufferGeometry;var i,r=e.readUint8();for(let i=0;i!e.startsWith(t)))}async clearStorageFiles(t=(()=>!0)){let i=this.cacheDir;if(i)for await(var r of i.getEntries())r.startsWith(e.cacheFilePrefix)&&t(r)&&await i.deleteFile(r)}getCacheFileName(t,i){var r=this.getModPrefix();return""+e.cacheFilePrefix+r+t.replace(".vxl","")+"_"+i}getModPrefix(){return this.activeMod?this.activeMod+"#":"#"}clear(){this.geometries.forEach((e=>{for(var t of(e.dispose(),Object.keys(e.attributes)))e.removeAttribute(t)})),this.geometries.clear()}get(e){return this.geometries.get(e)}set(e,t){this.geometries.set(e,t)}}),a.cacheFilePrefix="geocache_"}}})),System.register("engine/renderable/entity/unit/ModelQuality",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.Low=0]="Low",t[t.High=1]="High",e("ModelQuality",i)}}})),System.register("engine/renderable/builder/vxlGeometry/VxlGeometryMonotoneBuilder",["engine/gfx/BufferGeometryUtils"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("VxlGeometryMonotoneBuilder",class{build(e,t=!1){let s=e.getAllVoxels().voxelField;var{vertices:n,faces:a}=function(e,t){for(var i=[],s=[],n=0;n<3;++n){var a=(n+1)%3,o=(n+2)%3,l=new Int32Array(3),c=new Int32Array(3),h=new Int32Array(2*(t[a]+1)),u=new Int32Array(t[a]),d=new Int32Array(t[a]),g=new Int32Array(2*t[o]),p=new Int32Array(2*t[o]),m=new Int32Array(24*t[o]),f=[[0,0],[0,0]];for(c[n]=1,l[n]=-1;l[n]z[1]);var q=K?p[G]:g[H],$=K?N.right[G]:N.left[H];if(K!==V)for(;_+3{var r=s.get(e,t,i);return r?r.colorIndex:0}:(e,t,i)=>{var r=s.get(e,t,i);return r?r.normalIndex+256*r.colorIndex:0},[e.sizeX,e.sizeY,e.sizeZ]),o=e.minBounds,l=e.scale,c=e.getNormals();let h=new Float32Array(3*n.length),u=new Float32Array(3*n.length),d=new Float32Array(3*n.length),g=0,p=0,m=0;for(let e=0,i=n.length;ethis.cache.loadFromStorage(e,t))))).every(r.isNotNullOrUndefined)}async persistToStorage(e,t,i){for(let s=0;s{var n=this.vxlGeometryPool.get(e);let o=new r.BatchedMesh(n,t),l=e.transfMatrix,c=this.hvaFile?.sections[i];c&&(l=e.scaleHvaMatrix(c.getMatrix(0))),o.applyMatrix(l),a.set(e.name,o),o.castShadow=this.castShadow,o.setPaletteIndex(s),this.extraLight&&o.setExtraLight(this.extraLight),o.setOpacity(this.opacity),o.setClippingPlanes(this.clippingPlanes)})),a}useMaterial(t){let i,r=e.materialCache.get(t);return r?(i=r.material,r.usages++):(i=new n.PalettePhongMaterial({palette:t,paletteCount:this.palettes.length,vertexColors:THREE.VertexColors,transparent:!0}),r={material:i,usages:1},e.materialCache.set(t,r)),i}freeMaterial(){let t=e.materialCache.get(this.materialCacheKey);t&&(1===t.usages?(e.materialCache.delete(this.materialCacheKey),t.material.dispose()):t.usages--)}getPaletteIndex(e){var t=this.palettes.findIndex((t=>t.hash===e.hash));if(-1===t)throw new Error("Provided palette not found in the list of available palettes");return t}setPalette(e){if(this.palette=e,this.object){let t=this.getPaletteIndex(e);this.sections.forEach((e=>e.setPaletteIndex(t)))}}setExtraLight(e){this.extraLight=e,this.object&&this.sections.forEach((t=>t.setExtraLight(e)))}setShadow(e){this.castShadow=e,this.sections?.forEach((t=>{t.castShadow=e}))}setClippingPlanes(e){this.clippingPlanes=e,this.object&&this.sections.forEach((t=>t.setClippingPlanes(e)))}setOpacity(e){this.opacity=e,this.object&&this.sections.forEach((t=>t.setOpacity(e)))}dispose(){this.object&&(this.freeMaterial(),this.object=void 0)}},e("VxlBatchedBuilder",a),a.materialCache=new Map}}})),System.register("engine/renderable/builder/VxlNonBatchedBuilder",["engine/gfx/TextureUtils","engine/renderable/builder/VxlBuilder","engine/gfx/material/PalettePhongMaterial"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=class extends r.VxlBuilder{constructor(e,t,i,r,s){super(s),this.vxlFile=e,this.hvaFile=t,this.palette=i,this.vxlGeometryPool=r,this.clippingPlanes=[],this.castShadow=!0}createVxlMeshes(){var e=this.palette;e=i.TextureUtils.textureFromPalette(e);let t=this.material=new s.PalettePhongMaterial({palette:e,vertexColors:THREE.VertexColors});this.extraLight&&(t.extraLight=this.extraLight),t.clippingPlanes=this.clippingPlanes;let r=this.vxlFile.sections,n=new Map;return r.forEach(((e,i)=>{var r=this.vxlGeometryPool.get(e);let s=new THREE.Mesh(r,t),a=e.transfMatrix,o=this.hvaFile?.sections[i];o&&(a=e.scaleHvaMatrix(o.getMatrix(0))),s.applyMatrix(a),n.set(e.name,s),s.castShadow=this.castShadow})),n}setPalette(e){var t;this.palette=e,this.object&&(t=i.TextureUtils.textureFromPalette(e),this.material.palette=t)}setExtraLight(e){this.extraLight=e,this.object&&(this.material.extraLight=e)}setShadow(e){this.castShadow=e,this.sections?.forEach((t=>t.castShadow=e))}setClippingPlanes(e){this.clippingPlanes=e,this.object&&(this.material.clippingPlanes=e)}setOpacity(e){this.material.transparent=e<1,this.material.opacity=e}dispose(){this.object&&this.material.dispose()}},e("VxlNonBatchedBuilder",n)}}})),System.register("engine/renderable/builder/VxlBuilderFactory",["engine/renderable/builder/VxlBatchedBuilder","engine/renderable/builder/VxlNonBatchedBuilder"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("VxlBuilderFactory",class{constructor(e,t,i){this.vxlGeometryPool=e,this.useBatching=t,this.camera=i}create(e,t,s,n){return this.useBatching?new i.VxlBatchedBuilder(e,t,s,n,this.vxlGeometryPool,this.camera):new r.VxlNonBatchedBuilder(e,t,n,this.vxlGeometryPool,this.camera)}})}}})),System.register("engine/renderable/builder/ShpAggregator",["data/ShpFile","data/ShpImage"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("ShpAggregator",class{static getShpFrameInfo(e,t){return{file:e,hasShadow:t,frameCount:Math.floor(e.numImages*(t?.5:1))}}aggregate(e,t){let s=new i.ShpFile;s.filename=t;let n=[],a=new Map,o=0;for(var{file:l,hasShadow:c,frameCount:h}of e)if(!a.has(l)){a.set(l,o);for(let e=0;es.addImage(e))),{file:s,imageIndexes:a}}})}}})),System.register("engine/renderable/entity/building/BuildingShpHelper",["engine/AnimProps","engine/ImageFinder","engine/renderable/builder/ShpAggregator"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){e("BuildingShpHelper",class{constructor(e){this.imageFinder=e}getShpFrameInfos(e,t,r,n){let a=new Map;for(var[o,l]of(t&&a.set(t,s.ShpAggregator.getShpFrameInfo(t,e.hasShadow)),r&&a.set(r,s.ShpAggregator.getShpFrameInfo(r,e.hasShadow)),n))o=new i.AnimProps(o.art,l),o=s.ShpAggregator.getShpFrameInfo(l,o.shadow),a.set(l,o);return a}collectAnimShpFiles(e,t){let i=new Map;return e.getAll().forEach(((e,s)=>{for(var n of e){let s;try{s=this.imageFinder.find(n.image,t.useTheaterExtension)}catch(e){if(e instanceof r.ImageFinder.MissingImageError){console.warn(e.message);continue}throw e}i.set(n,s)}})),i}})}}})),System.register("engine/renderable/entity/unit/ExtraLightHelper",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("ExtraLightHelper",class{static multiplyShp(e,t,i){e.copy(t).add(t.clone().addScalar(1).multiplyScalar(i))}static multiplyVxl(e,t,i,r){e.copy(t).addScalar(2*r*i)}})}}})),System.register("engine/renderable/AlphaRenderable",["data/Palette","engine/renderable/builder/ShpBuilder","util/Color","game/Coords"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e}],execute:function(){e("AlphaRenderable",class e{constructor(e,t,i){this.shpFile=e,this.camera=t,this.visible=!0,this.drawOffset={...i}}static getOrCreateAlphaPalette(){let t=e.alphaPalette;if(!t){t=new i.Palette(new Array(768).fill(0));let n=[];for(let e=0;e<256;e++){var r=127e.dispose())),e.geometryCache.clear()}useMaterial(t){this.materialCacheKey=t.uuid;let i,r=e.materialCache.get(this.materialCacheKey);return r?(i=r.material,r.usages++):(i=new n.PaletteBasicMaterial({map:e.getOrCreateTexture(),palette:t,alphaTest:.05,paletteCount:this.batchPalettes.length,flatShading:!0,transparent:!0}),r={material:i,usages:1},e.materialCache.set(this.materialCacheKey,r)),i}freeMaterial(){if(!this.materialCacheKey)throw new Error("Material cache key not set");let t=e.materialCache.get(this.materialCacheKey);t&&(1===t.usages?(e.materialCache.delete(this.materialCacheKey),t.material.dispose()):t.usages--)}getGeometryCacheKey(){return this.foundation.width+"_"+this.foundation.height+"_"+this.height}setBatched(e){if(this.mesh)throw new Error("Batching can only be set before calling build()");this.useMeshBatching=e}getBatchPaletteIndex(e){var t=this.batchPalettes.findIndex((t=>t.hash===e.hash));if(-1===t)throw new Error("Provided palette not found in the list of batch palettes. Call setBatchPalettes first.");return t}setPalette(e){if(this.palette=e,this.mesh)if(this.useMeshBatching){var t=this.getBatchPaletteIndex(e);this.mesh.setPaletteIndex(t)}else{t=s.TextureUtils.textureFromPalette(e),this.mesh.material.palette=t}}setBatchPalettes(e){if(!this.useMeshBatching)throw new Error("Can't use multiple palettes when not batching");if(this.mesh)throw new Error("Palettes must be set before creating 3DObject");this.batchPalettes=e}setOpacity(e){this.opacity!==e&&(this.opacity=e,this.updateOpacity())}updateOpacity(){this.mesh&&(this.useMeshBatching?this.mesh.setOpacity(this.opacity):this.mesh.material.opacity=this.opacity)}create3DObject(){if(!this.mesh){var t,i,l=this.getGeometryCacheKey();let c,h=e.geometryCache,u=h.get(l);u||(u=r.DebugUtils.createBoxGeometry(this.foundation,this.height,this.options?.centerFoundation),h.set(l,u)),this.useMeshBatching?(t=s.TextureUtils.textureFromPalettes(this.batchPalettes),i=this.useMaterial(t),c=new o.BatchedMesh(u,i,o.BatchMode.Merging),c.castShadow=!1):(t=s.TextureUtils.textureFromPalette(this.palette),i=e.getOrCreateTexture(),i=new n.PaletteBasicMaterial({palette:t,map:i,alphaTest:.05,transparent:!0}),c=new a.Mesh(u,i)),c.matrixAutoUpdate=!1,this.mesh=c,this.setPalette(this.palette),this.updateOpacity()}}get3DObject(){return this.mesh}update(e){}dispose(){this.mesh&&(this.useMeshBatching?this.freeMaterial():this.mesh.material.dispose(),this.mesh=void 0)}}),l.geometryCache=new Map,l.materialCache=new Map}}})),System.register("engine/renderable/entity/Building",["engine/renderable/builder/ShpBuilder","engine/renderable/entity/building/DamageType","engine/renderable/entity/building/AnimationType","engine/gfx/OverlayUtils","game/gameobject/Building","engine/Animation","engine/renderable/entity/wallTypes","game/Coords","util/math","engine/AnimProps","engine/renderable/WithPosition","engine/renderable/ShpRenderable","engine/ImageFinder","engine/gfx/DebugUtils","engine/renderable/MapSpriteTranslation","engine/renderable/entity/building/BuildingAnimArtProps","util/typeGuard","engine/renderable/entity/HighlightAnimRunner","game/rules/TechnoRules","game/gameobject/trait/AttackTrait","game/SideType","game/gameobject/trait/FactoryTrait","game/gameobject/trait/UnitRepairTrait","game/gameobject/common/DeathType","engine/renderable/entity/InvulnerableAnimRunner","engine/renderable/entity/building/BuildingShpHelper","engine/renderable/entity/unit/ExtraLightHelper","engine/renderable/AlphaRenderable","engine/renderable/DebugRenderable","engine/gfx/MathUtils"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p,m,f,y,T,v,b,S,w,C,E,x,O,A,M,R,P,I,k,B,j;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e},function(e){m=e},function(e){f=e},function(e){y=e},function(e){T=e},function(e){v=e},function(e){b=e},function(e){S=e},function(e){w=e},function(e){C=e},function(e){E=e},function(e){x=e},function(e){O=e},function(e){A=e},function(e){M=e},function(e){R=e},function(e){P=e},function(e){I=e}],execute:function(){k=(new Map).set(s.AnimationType.PRODUCTION,s.AnimationType.IDLE).set(s.AnimationType.BUILDUP,s.AnimationType.IDLE).set(s.AnimationType.SPECIAL_DOCKING,s.AnimationType.IDLE).set(s.AnimationType.SPECIAL_REPAIR_START,s.AnimationType.SPECIAL_REPAIR_LOOP).set(s.AnimationType.SPECIAL_REPAIR_LOOP,s.AnimationType.SPECIAL_REPAIR_END).set(s.AnimationType.SPECIAL_REPAIR_END,s.AnimationType.IDLE).set(s.AnimationType.SUPER_CHARGE_START,s.AnimationType.SUPER_CHARGE_LOOP).set(s.AnimationType.SUPER_CHARGE_LOOP,s.AnimationType.SUPER_CHARGE_END).set(s.AnimationType.SUPER_CHARGE_END,s.AnimationType.IDLE).set(s.AnimationType.FACTORY_DEPLOYING,s.AnimationType.IDLE).set(s.AnimationType.FACTORY_ROOF_DEPLOYING,s.AnimationType.IDLE),B=(new Map).set(s.AnimationType.SUPER_CHARGE_START,[s.AnimationType.SUPER,1]).set(s.AnimationType.SUPER_CHARGE_LOOP,[s.AnimationType.SUPER,2]).set(s.AnimationType.SUPER_CHARGE_END,[s.AnimationType.SUPER,3]).set(s.AnimationType.SPECIAL_REPAIR_START,[s.AnimationType.SPECIAL,0]).set(s.AnimationType.SPECIAL_REPAIR_LOOP,[s.AnimationType.SPECIAL,1]).set(s.AnimationType.SPECIAL_REPAIR_END,[s.AnimationType.SPECIAL,2]).set(s.AnimationType.SPECIAL_DOCKING,[s.AnimationType.SPECIAL,0]).set(s.AnimationType.SPECIAL_SHOOT,[s.AnimationType.SPECIAL,0]).set(s.AnimationType.FACTORY_DEPLOYING,[s.AnimationType.FACTORY_DEPLOYING,0]).set(s.AnimationType.FACTORY_UNDER_DOOR,[s.AnimationType.FACTORY_DEPLOYING,1]).set(s.AnimationType.FACTORY_ROOF_DEPLOYING,[s.AnimationType.FACTORY_ROOF_DEPLOYING,0]).set(s.AnimationType.FACTORY_UNDER_ROOF_DOOR,[s.AnimationType.FACTORY_ROOF_DEPLOYING,1]),e("Building",j=class e{constructor(e,t,i,r,n,a,o,l,c,h,u,g,m,f,T,b,S,w,C,E,x,M=s.AnimationType.IDLE){this.gameObject=e,this.selectionModel=t,this.rules=i,this.art=r,this.imageFinder=n,this.voxels=o,this.voxelAnims=l,this.palette=c,this.animPalette=h,this.isoPalette=u,this.camera=g,this.lighting=m,this.debugFrame=f,this.gameSpeed=T,this.vxlBuilderFactory=b,this.useSpriteBatching=S,this.buildingImageDataCache=C,this.pipOverlay=E,this.worldSound=x,this.initialAnimType=M,this.animObjects=new Map,this.animations=new Map,this.animSounds=new Map,this.powered=!0,this.repairStopRequested=!1,this.repairStartRequested=!1,this.highlightAnimRunner=new v.HighlightAnimRunner(this.gameSpeed),this.invulnAnimRunner=new O.InvulnerableAnimRunner(this.gameSpeed),this.plugins=[],this.objectArt=e.art,this.objectRules=e.rules,this.type=this.objectRules.name,this.paletteRemaps=[...this.rules.colors.values()].map((e=>this.palette.clone().remap(e))),this.palette.remap(this.gameObject.owner.color),this.lastOwnerColor=this.gameObject.owner.color,this.updateBaseLight(),this.vxlExtraLight=(new THREE.Vector3).copy(this.baseVxlExtraLight),this.shpExtraLight=(new THREE.Vector3).copy(this.baseShpExtraLight);var R=this.animArtProps=new y.BuildingAnimArtProps;let P,I;this.animArtProps.read(this.objectArt.art,this.art);try{P=this.imageFinder.findByObjectArt(this.objectArt)}catch(e){if(!(e instanceof p.ImageFinder.MissingImageError))throw e;console.warn(e.message)}this.mainShpFile=P;try{I=this.objectArt.bibShape?this.imageFinder.find(this.objectArt.bibShape,this.objectArt.useTheaterExtension):void 0}catch(e){if(!(e instanceof p.ImageFinder.MissingImageError))throw e;console.warn(e.message)}this.bibShpFile=I;let k=new A.BuildingShpHelper(this.imageFinder);R=this.animShpFiles=k.collectAnimShpFiles(R,this.objectArt);let B=this.shpFrameInfos=k.getShpFrameInfos(this.objectArt,P,I,R),j=this.buildingImageDataCache.get(this.gameObject.name);j||(j=w.aggregate(B.values(),`agg_${this.objectRules.name}.shp`),this.buildingImageDataCache.set(this.gameObject.name,j)),this.aggregatedImageData=j,this.withPosition=new d.WithPosition}updateBaseLight(){this.baseShpExtraLight=this.lighting.compute(this.objectArt.lightingType,this.gameObject.tile).addScalar(-1),this.baseVxlExtraLight=(new THREE.Vector3).setScalar(this.lighting.computeNoAmbient(this.objectArt.lightingType,this.gameObject.tile))}updateLighting(){this.updateBaseLight(),this.vxlExtraLight.copy(this.baseVxlExtraLight),this.shpExtraLight.copy(this.baseShpExtraLight),this.plugins.forEach((e=>e.updateLighting?.()))}get3DObject(){return this.target}getIntersectTarget(){return this.intersectTarget}updateIntersectTarget(){this.intersectTarget=[this.placeholderObj?.get3DObject(),this.mainObj?.getShapeMesh(),this.bib?.getShapeMesh(),...[...this.animObjects.values()].flat().map((e=>e.getShapeMesh()))].filter(T.isNotNullOrUndefined)}getUiName(){var e=this.plugins.reduce(((e,t)=>t.getUiNameOverride?.()??e),void 0);return void 0!==e?e:this.gameObject.getUiName()}create3DObject(){let e=this.get3DObject();if(!e){e=new THREE.Object3D,e.name="building_"+this.type,e.userData.id=this.gameObject.id,this.target=e,e.matrixAutoUpdate=!1,this.withPosition.matrixUpdate=!0,this.withPosition.applyTo(this);var t=this.gameObject.rules.alphaImage;if(t){var r=this.imageFinder.tryFind(t,!1);if(r){let t=new R.AlphaRenderable(r,this.camera,new THREE.Vector2(0,(c.Coords.ISO_TILE_SIZE+1)/2));t.create3DObject(),e.add(t.get3DObject())}else console.warn(`<${this.objectRules.name}>: Alpha image "${t}" not found`)}this.objectRules.lightIntensity&&(this.createLamp(e),this.objectRules.isLightpost)||(this.createObjects(e),this.updateIntersectTarget(),this.pipOverlay&&(this.pipOverlay.create3DObject(),e.add(this.pipOverlay.get3DObject())),this.updateImage(this.computeDamageType(this.gameObject.healthTrait.health)),this.mainObj?.setExtraLight(this.shpExtraLight),[...this.animObjects.values()].forEach((e=>{e.forEach((e=>{this.animations.get(e).props.getArt().has("UseNormalLight")||e.setExtraLight(this.shpExtraLight)}))})),this.bib?.setExtraLight(this.shpExtraLight),this.turretBuilders?.forEach((e=>{e instanceof i.ShpBuilder?e.setExtraLight(this.shpExtraLight):e.setExtraLight(this.vxlExtraLight)})))}}createLamp(t){var i=this.objectRules;let r=(1+i.lightRedTint)*(1+Math.abs(i.lightIntensity))-1,s=(1+i.lightGreenTint)*(1+Math.abs(i.lightIntensity))-1,n=(1+i.lightBlueTint)*(1+Math.abs(i.lightIntensity))-1;var a=Math.max(r,s,n);1e.shouldDisableHighlight?.()))||this.highlightAnimRunner.animate(2)}update(e){if(!this.objectRules.isLightpost){this.gameObject.isDestroyed||void 0!==this.currentAnimType||this.setAnimation(this.initialAnimType,e),this.plugins.forEach((t=>t.update(e))),this.pipOverlay?.update(e);var t=this.gameObject.c4ChargeTrait?.hasCharge();!this.gameObject.isDestroyed&&this.lastHasC4Charge!==t&&t&&(this.lastHasC4Charge=t,this.highlight());var i=this.highlightAnimRunner.shouldUpdate(),n=this.gameObject.invulnerableTrait.isActive();t=n!==this.lastInvulnerable;(this.lastInvulnerable=n)&&t&&this.invulnAnimRunner.animate(),this.invulnAnimRunner.shouldUpdate()&&this.invulnAnimRunner.tick(e),(i||t||n)&&(i&&this.highlightAnimRunner.tick(e),n=n?this.invulnAnimRunner.getValue():0,c=(i?this.highlightAnimRunner.getValue():0)||n,n=this.lighting.getAmbientIntensity(),M.ExtraLightHelper.multiplyVxl(this.vxlExtraLight,this.baseVxlExtraLight,n,c),M.ExtraLightHelper.multiplyShp(this.shpExtraLight,this.baseShpExtraLight,c));var l,c=this.gameObject.warpedOutTrait.isActive();if(c!==this.lastWarpedOut){let e=(this.lastWarpedOut=c)?.5:1;for(l of[this.mainObj,this.bib,...[...this.animObjects.values()].flat()])l?.setOpacity(e);this.turretBuilders?.forEach((t=>t.setOpacity(e))),this.placeholderObj?.setOpacity(e)}this.gameObject.isDestroyed||(h=this.gameObject.owner.color,this.lastOwnerColor!==h&&(this.palette.remap(h),this.mainObj?.setPalette(this.palette),[...this.animObjects.values()].forEach((e=>{e.forEach((e=>e.setPalette(this.palette)))})),this.bib?.setPalette(this.palette),this.turretBuilders?.forEach((e=>e.setPalette(this.palette))),this.placeholderObj?.setPalette(this.palette),this.lastOwnerColor=h)),!this.gameObject.isDestroyed&&k.has(this.currentAnimType)&&(u=k.get(this.currentAnimType),this.hasObjectWithStoppedAnimation(this.currentAnimType)&&this.setAnimation(u,e)),this.gameObject.isDestroyed||this.gameObject.buildStatus!==a.BuildStatus.BuildDown||this.currentAnimType===s.AnimationType.UNBUILD||this.setAnimation(s.AnimationType.UNBUILD,e);var h=this.gameObject.attackTrait?.attackState;if((void 0===this.lastAttackState||this.lastAttackState!==h&&!this.gameObject.isDestroyed)&&(this.lastAttackState=h,!this.gameObject.isDestroyed&&this.hasAnimation(s.AnimationType.SPECIAL_SHOOT)&&(h===S.AttackState.FireUp?this.setAnimation(s.AnimationType.SPECIAL_SHOOT,e):this.currentAnimType===s.AnimationType.SPECIAL_SHOOT&&this.setAnimation(s.AnimationType.IDLE,e)),h===S.AttackState.JustFired&&this.objectArt.muzzleFlash)){let e=this.createMuzzleFlashAnim(this.spriteOffset,this.renderableManager);e&&(e.create3DObject(),this.spriteWrap.add(e.get3DObject()),this.muzzleAnims=this.muzzleAnims||[],this.muzzleAnims.push(e))}var u=this.gameObject.factoryTrait;if(u){var d=u.status;if(this.lastFactoryStatus!==d&&!this.gameObject.isDestroyed&&(h=this.lastFactoryStatus,this.lastFactoryStatus=d,void 0!==h)){let t,i=!1;[b.FactoryType.BuildingType,b.FactoryType.NavalUnitType].includes(u.type)?t=s.AnimationType.PRODUCTION:u.type===b.FactoryType.UnitType?(t=u.deliveringUnit?.rules.consideredAircraft?s.AnimationType.FACTORY_ROOF_DEPLOYING:s.AnimationType.FACTORY_DEPLOYING,i=!0):t=void 0,t&&this.hasAnimation(t)&&(d===C.FactoryStatus.Delivering?this.setAnimation(t,e):i&&this.setAnimation(s.AnimationType.IDLE,e))}}d=this.gameObject.unitRepairTrait?.status,this.lastRepairStatus===d||this.gameObject.isDestroyed||(m=this.lastRepairStatus,this.lastRepairStatus=d,this.hasAnimation(s.AnimationType.SPECIAL_REPAIR_START)&&(d===E.RepairStatus.Repairing?(this.currentAnimType!==s.AnimationType.SPECIAL_REPAIR_LOOP&&this.currentAnimType!==s.AnimationType.SPECIAL_REPAIR_END||m!==E.RepairStatus.Idle?this.setAnimation(s.AnimationType.SPECIAL_REPAIR_START,e):this.repairStartRequested=!0,this.repairStopRequested=!1):(this.currentAnimType===s.AnimationType.SPECIAL_REPAIR_START?this.repairStopRequested=!0:this.endCurrentAnimation(),this.repairStartRequested=!1)));let y=this.gameObject.superWeaponTrait?.getSuperWeapon(this.gameObject);!y||!this.hasAnimation(s.AnimationType.SUPER_CHARGE_START)||this.gameObject.isDestroyed||(f=y.getTimerSeconds()<=60*this.objectRules.chargedAnimTime)!==this.lastSuperWeaponAlmostCharged&&((this.lastSuperWeaponAlmostCharged=f)?this.setAnimation(s.AnimationType.SUPER_CHARGE_START,e):this.endCurrentAnimation()),this.repairStopRequested&&this.currentAnimType===s.AnimationType.SPECIAL_REPAIR_LOOP&&(this.endCurrentAnimation(),this.repairStopRequested=!1),this.repairStartRequested&&this.currentAnimType===s.AnimationType.IDLE&&(this.setAnimation(s.AnimationType.SPECIAL_REPAIR_START,e),this.repairStartRequested=!1),this.muzzleAnims&&this.updateMuzzleAnims(e),c||(this.animations.forEach(((t,i)=>{switch(t.getState()){case o.AnimationState.STOPPED:return;case o.AnimationState.DELAYED:t.update(e),i.get3DObject().visible=t.getState()!==o.AnimationState.DELAYED;break;case o.AnimationState.NOT_STARTED:t.start(e);case o.AnimationState.RUNNING:default:t.update(e)}i.setFrame(t.getCurrentFrame())})),this.animObjects.forEach(((e,t)=>{let i=this.animArtProps.getByType(t);e.forEach(((e,t)=>{var r=i[t];let s=this.animations.get(e);var n=r.translucent;r=r.translucency;if(n||0{e.setPosition(c.Coords.tile3dToWorld(s,n,0).add(this.withPosition.getPosition()))}))}}updateMuzzleAnims(e){let t=this.muzzleAnims,i=[];t.forEach((t=>{t.update(e),t.isAnimFinished()&&(this.spriteWrap.remove(t.get3DObject()),t.dispose(),i.push(t))})),i.forEach((e=>t.splice(t.indexOf(e),1)))}getNormalizedAnimType(e){let t=0,i=e;return B.has(e)&&([i,t]=B.get(e)),[i,t]}hasObjectWithStoppedAnimation(e){var t,[t,i]=this.getNormalizedAnimType(e);if(t=this.animObjects.get(t)){let r=this.animations.get(t[i]);if(!r)throw new Error(`Missing animation for type '${s.AnimationType[e]}'`);if(r.getState()===o.AnimationState.STOPPED)return!0}return!1}computeDamageType(e){if(!e)return r.DamageType.DESTROYED;let t;return t=e>100*this.rules.audioVisual.conditionYellow?r.DamageType.NORMAL:e>100*this.rules.audioVisual.conditionRed?r.DamageType.CONDITION_YELLOW:r.DamageType.CONDITION_RED,(t&&this.objectRules.canBeOccupied||t===r.DamageType.CONDITION_RED)&&(t-=1),t}updateImage(e){let t=e===r.DamageType.DESTROYED;t?(this.objectRules.leaveRubble&&this.rubbleObj&&(this.rubbleObj.get3DObject().visible=!0),this.mainObj&&(this.mainObj.get3DObject().visible=!1)):this.objectRules.wall?this.updateWallImage(this.gameObject.wallType,e):this.updateMainObjFrame(!!this.gameObject.garrisonTrait?.isOccupied(),e),this.bib&&(t&&(this.bib.get3DObject().visible=!1),this.bib.setFrame(e!==r.DamageType.NORMAL?1:0)),this.turret&&t&&(this.turret.visible=!1),this.animObjects.forEach(((i,n)=>{i.forEach(((a,o)=>{if(n!==s.AnimationType.BUILDUP&&n!==s.AnimationType.UNBUILD){t&&i.forEach((e=>e.get3DObject().visible=!1));let h=this.animations.get(a);var l=e!==r.DamageType.NORMAL,c=this.animArtProps.getByType(n)[o];!l||c.damagedArt?(h.props.setArt(l?c.damagedArt:c.art),h.rewind()):console.warn(`<${this.gameObject.name}>: Missing damaged anim ${s.AnimationType[n]},`+o)}}))}));let i=e!==r.DamageType.NORMAL&&!t;this.fireObjects.forEach((e=>{e.get3DObject().visible=i;let t=this.animations.get(e);t.rewind();var r=t.props.getArt().get("StartSound");r&&this.handleSoundChange(r,e,i,.15)}))}updateMainObjFrame(e,t){let i=e?2:t;this.mainShpFile&&this.mainObj&&(i>=this.shpFrameInfos.get(this.mainShpFile).frameCount&&(console.warn(`Building ${this.objectRules.name} has damage frame `+i+` (occupied=${e}, damageType=${r.DamageType[t]}) out of bounds`),i=r.DamageType.NORMAL),this.mainObj.setFrame(i))}needsWallImageRefresh(){var e=this.gameObject.wallType,t=this.lastWallType;return this.objectRules.wall&&(!t||e[0]!==t[0]||e[1]!==t[1]||e[2]!==t[2]||e[3]!==t[3])}updateWallImage(e,t){if(this.objectRules.wall&&this.mainObj&&this.mainShpFile){let r=this.findWallImageIndex(e);-1===r&&(console.warn("Invalid wall type",e),r=0);var i=r+t*(i=this.shpFrameInfos.get(this.mainShpFile).frameCount{o.add(e)})),this.fireObjects=this.createFireObjects(n),this.fireObjects.forEach((e=>{a.add(e.get3DObject())})),this.objectRules.turret&&(({turret:u,turretRot:t}=this.createTurretObject(n,s)),this.turret=u,this.turretRot=t,a.add(this.turret)),this.bibShpFile){this.bib=this.createBibObject(this.bibShpFile,n),this.bib.create3DObject();let e=this.bib.get3DObject();I.MathUtils.translateTowardsCamera(e,this.camera,-1),e.updateMatrix(),a.add(this.bib.get3DObject())}if((this.gameObject.primaryWeapon||this.gameObject.rules.hasRadialIndicator)&&(n=this.gameObject.psychicDetectorTrait?.radiusTiles??this.gameObject.gapGeneratorTrait?.radiusTiles??this.gameObject.primaryWeapon?.range)){let t=this.rangeCircle=this.createRangeCircle(n);t.matrixAutoUpdate=!1,t.position.x=s.x/2,t.position.z=s.y/2,t.updateMatrix(),t.visible=!1,e.add(t)}a.position.x=s.x,a.position.z=s.y,a.updateMatrix(),e.add(a)}computeSpriteAnchorOffset(e){var t=this.objectArt.getDrawOffset();return{x:e.x+t.x,y:e.y+t.y}}createMainObject(e,t,i=!1){let r=!1;this.objectRules.turret&&"CAOUTP"!==this.objectRules.name&&(r=!0);let s=g.ShpRenderable.factory(this.aggregatedImageData.file,this.palette,this.camera,t,this.objectArt.hasShadow,0,!r,0,i);return s.setSize(e),s.setFrameOffset(this.aggregatedImageData.imageIndexes.get(e)),s.setBatched(this.useSpriteBatching),this.useSpriteBatching&&s.setBatchPalettes(this.paletteRemaps),s.setFlat(r),s}createRubbleObject(e){var t=this.mainShpFile;if(t){let i=g.ShpRenderable.factory(this.aggregatedImageData.file,this.isoPalette,this.camera,e,this.objectArt.hasShadow);if(i.setSize(t),!(this.shpFrameInfos.get(t).frameCount<4))return i.setFrameOffset(this.aggregatedImageData.imageIndexes.get(t)),i.setBatched(this.useSpriteBatching),this.useSpriteBatching&&i.setBatchPalettes([this.isoPalette]),i.setFlat(!0),i.setFrame(3),i;console.warn(`Building image ${this.objectArt.imageName} has no rubble frame (missing 4th frame)`)}}createAnimObjects(e,t){let i=[];return this.animArtProps.getAll().forEach(((r,s)=>{let n=[],a=1;for(var o of r){var l=this.animShpFiles.get(o);if(l){let r=this.createAnimObject(o,l,e,a++,t);r&&(i.push(r.get3DObject()),n.push(r))}}this.animObjects.set(s,n)})),i}createFireObjects(e){let t=[],r=0;for(;;){let a=this.objectArt.art.getString("DamageFireOffset"+r++);if(!a)break;var s=this.rules.audioVisual.fireNames,n=s[h.getRandomInt(0,s.length-1)];let l;try{l=this.imageFinder.find(n,this.objectArt.useTheaterExtension)}catch(e){if(e instanceof p.ImageFinder.MissingImageError){console.warn(e.message);continue}throw e}s=a.split(/\.|,/).filter((e=>""!==e));let d=parseInt(s[0],10),m=parseInt(s[1],10);s=this.animPalette;let f=new i.ShpBuilder(l,s,this.camera,c.Coords.ISO_WORLD_SCALE,!0,3);f.setOffset({x:e.x+d,y:e.y+m});let y=new g.ShpRenderable(f);y.setBatched(this.useSpriteBatching),this.useSpriteBatching&&y.setBatchPalettes([s]),y.create3DObject(),y.get3DObject().visible=!1,n=this.art.getAnimation(n),n=new u.AnimProps(n.art,l),this.animations.set(y,new o.Animation(n,this.gameSpeed)),t.push(y)}return t}createMuzzleFlashAnim(e,t){if(this.objectArt.muzzleFlash?.length){var i=h.getRandomInt(0,this.objectArt.muzzleFlash.length-1),r=this.objectArt.muzzleFlash[i];if((i=this.gameObject.owner.country?.side===w.SideType.GDI?this.gameObject.primaryWeapon:this.gameObject.secondaryWeapon)&&(i=i.rules.anim).length){i=i[h.getRandomInt(0,i.length-1)];let s={x:e.x+r.x,y:e.y+r.y};return t.createAnim(i,(e=>{e.extraOffset=s}),!0)}}}createAnimObject(e,t,i,r,s){var n=e.art,a=new u.AnimProps(n,t);n={x:i.x+e.offset.x,y:i.y+e.offset.y};let l=g.ShpRenderable.factory(this.aggregatedImageData.file,this.palette,this.camera,n,a.shadow,0,!e.flat,r,s&&!e.flat);return l.setSize(t),l.setFrameOffset(this.aggregatedImageData.imageIndexes.get(t)),l.setBatched(this.useSpriteBatching),this.useSpriteBatching&&l.setBatchPalettes(this.paletteRemaps),l.setFlat(e.flat),(e.translucent||0e.castShadow=!1))}else console.warn(`Turret missing for building ${this.type}. Vxl file ${e} not found. `);if(n.toLowerCase().includes("tur")){let t=e.replace("tur","barl");if(u=this.voxels.get(t)){var d=l?this.voxelAnims.get(t.replace(".vxl",".hva")):void 0;let e=this.vxlBuilderFactory.create(u,d,this.paletteRemaps,this.palette);this.turretBuilders.push(e);let i=e.build();i.children.forEach((e=>e.castShadow=!1)),s.add(i)}}d=c.Coords.screenDistanceToWorld(a.x,a.y),r.position.x=-t.x+d.x,r.position.z=-t.y+d.y}else{let r;try{r=this.imageFinder.find(n,this.objectArt.useTheaterExtension)}catch(t){if(!(t instanceof p.ImageFinder.MissingImageError))throw t;console.warn(t.message)}if(r){let t=new i.ShpBuilder(r,this.palette,this.camera,c.Coords.ISO_WORLD_SCALE,!0,2);t.setBatched(this.useSpriteBatching),this.useSpriteBatching&&t.setBatchPalettes(this.paletteRemaps),this.turretBuilders.push(t),t.setOffset({x:e.x+a.x,y:e.y+a.y}),o=t.build()}}return o&&s.add(o),r.add(s),I.MathUtils.translateTowardsCamera(r,this.camera,-(this.objectRules.turretAnimZAdjust+this.objectRules.turretAnimY/Math.cos(this.camera.rotation.y))*c.Coords.ISO_WORLD_SCALE),r.updateMatrix(),{turret:r,turretRot:s}}createRangeCircle(e){var t=e*c.Coords.getWorldTileSize();let i=this.gameObject.owner.color;return n.OverlayUtils.createGroundCircle(t,i.asHex())}toggleRangeCircleVisibility(e){this.rangeCircle&&(this.rangeCircle.visible=e)}setAnimationVisibility(e,t,i=-1){let r=this.animObjects.get(e);if(void 0===r)throw new Error(`Missing animObjects for animType "${s.AnimationType[e]}"`);if(-1!==i){if(i>=r.length)throw new RangeError(`Index ${i} exceeds length of animation objects (${r.length}) of type `+s.AnimationType[e]);r=[r[i]]}for(var n of r){n.get3DObject().visible=t;let e=this.animations.get(n).props.getArt(),i=e.get("Report");i=i||e.get("StartSound"),i&&this.handleSoundChange(i,n,t)}}setActiveAnimationVisible(){let e=this.animArtProps.getByType(s.AnimationType.ACTIVE);this.objectRules.refinery&&(e=[e[0]]),e.forEach((({showWhenUnpowered:e},t)=>{try{this.setAnimationVisibility(s.AnimationType.ACTIVE,this.powered||e,t)}catch(e){RangeError}}))}setPowered(e){if(this.powered=e,this.currentAnimType===s.AnimationType.IDLE&&this.setActiveAnimationVisible(),this.objectRules.superWeapon&&this.hasAnimation(s.AnimationType.SUPER)){var[t,i]=this.getNormalizedAnimType(s.AnimationType.SUPER_CHARGE_LOOP),r=this.animObjects.get(t);if(void 0===r)throw new Error(`Missing anim object for normalized anim type "${s.AnimationType[t]}"`);i=r[i];let n=this.animations.get(i);e?n.unpause():n.pause()}else this.animObjects.get(s.AnimationType.ACTIVE).forEach(((t,i)=>{let r=this.animations.get(t);r&&(!e&&this.animArtProps.getByType(s.AnimationType.ACTIVE)[i].pauseWhenUnpowered?r.pause():r.unpause())}))}hasAnimation(e){return e===s.AnimationType.IDLE||([e]=this.getNormalizedAnimType(e),this.animObjects.has(e)&&!!this.animObjects.get(e).length)}setAnimation(e,t){if(!this.gameObject.healthTrait.health)throw new Error("We can't switch building animation for a destroyed building");switch(this.hasAnimation(e)||(e=s.AnimationType.IDLE),this.currentAnimType=e,this.setAnimationVisibility(s.AnimationType.IDLE,!1),this.setAnimationVisibility(s.AnimationType.SPECIAL,!1),this.setAnimationVisibility(s.AnimationType.PRODUCTION,!1),this.setAnimationVisibility(s.AnimationType.SUPER,!1),this.setAnimationVisibility(s.AnimationType.BUILDUP,!1),this.setAnimationVisibility(s.AnimationType.UNBUILD,!1),this.setAnimationVisibility(s.AnimationType.FACTORY_DEPLOYING,!1),this.setAnimationVisibility(s.AnimationType.FACTORY_ROOF_DEPLOYING,!1),this.setActiveAnimationVisible(),e!==s.AnimationType.BUILDUP&&e!==s.AnimationType.UNBUILD?(this.mainObj&&(this.mainObj.get3DObject().visible=!0),this.bib&&(this.bib.get3DObject().visible=!0),this.turret&&(this.turret.visible=!0)):(this.mainObj&&(this.mainObj.get3DObject().visible=!1),this.bib&&(this.bib.get3DObject().visible=!1),this.turret&&(this.turret.visible=!1)),e!==s.AnimationType.FACTORY_DEPLOYING&&e!==s.AnimationType.FACTORY_ROOF_DEPLOYING||this.mainObj&&(this.mainObj.get3DObject().visible=!1),e){case s.AnimationType.PRODUCTION:this.setAnimationVisibility(s.AnimationType.PRODUCTION,!0),this.animObjects.get(s.AnimationType.PRODUCTION).forEach((e=>{this.animations.get(e).start(t)}));break;case s.AnimationType.BUILDUP:this.setAnimationVisibility(s.AnimationType.ACTIVE,!1),this.setAnimationVisibility(s.AnimationType.BUILDUP,!0),this.animObjects.get(s.AnimationType.BUILDUP).forEach((e=>{this.animations.get(e).start(t)}));break;case s.AnimationType.UNBUILD:this.setAnimationVisibility(s.AnimationType.ACTIVE,!1),this.setAnimationVisibility(s.AnimationType.UNBUILD,!0),this.animObjects.get(s.AnimationType.UNBUILD).forEach((e=>{this.animations.get(e).start(t)}));break;case s.AnimationType.FACTORY_DEPLOYING:if(this.hasAnimation(s.AnimationType.FACTORY_DEPLOYING)&&this.objectRules.factory){this.setAnimationVisibility(s.AnimationType.FACTORY_DEPLOYING,!0),this.animObjects.get(s.AnimationType.FACTORY_DEPLOYING).forEach((e=>{this.animations.get(e).start(t)}));break}case s.AnimationType.FACTORY_ROOF_DEPLOYING:if(this.hasAnimation(s.AnimationType.FACTORY_ROOF_DEPLOYING)&&this.objectRules.factory){this.setAnimationVisibility(s.AnimationType.FACTORY_ROOF_DEPLOYING,!0),this.animObjects.get(s.AnimationType.FACTORY_ROOF_DEPLOYING).forEach((e=>{this.animations.get(e).start(t)}));break}case s.AnimationType.SPECIAL_REPAIR_START:case s.AnimationType.SPECIAL_REPAIR_LOOP:case s.AnimationType.SPECIAL_REPAIR_END:case s.AnimationType.SPECIAL_DOCKING:if(this.hasAnimation(s.AnimationType.SPECIAL)&&(e===s.AnimationType.SPECIAL_DOCKING&&this.objectRules.refinery||e!==s.AnimationType.SPECIAL_DOCKING&&this.objectRules.unitRepair)){var[i,r]=this.getNormalizedAnimType(e);this.setAnimationVisibility(i,!0,r),r=this.animObjects.get(i)[r],this.animations.get(r).start(t);break}case s.AnimationType.SPECIAL_SHOOT:if(this.objectRules.isBaseDefense){this.setAnimationVisibility(s.AnimationType.ACTIVE,!1);var[r,n]=this.getNormalizedAnimType(e);this.setAnimationVisibility(r,!0,n),n=this.animObjects.get(r)[n],this.animations.get(n).start(t);break}case s.AnimationType.SUPER_CHARGE_START:case s.AnimationType.SUPER_CHARGE_LOOP:case s.AnimationType.SUPER_CHARGE_END:if(this.objectRules.superWeapon&&this.hasAnimation(s.AnimationType.SUPER)){var[n,a]=this.getNormalizedAnimType(e);this.setAnimationVisibility(n,!0,a),a=this.animObjects.get(n)[a],this.animations.get(a).start(t);break}case s.AnimationType.IDLE:default:this.currentAnimType=s.AnimationType.IDLE,this.objectRules.superWeapon&&this.hasAnimation(s.AnimationType.SUPER)?(this.setAnimationVisibility(s.AnimationType.SUPER,!0,0),a=this.animObjects.get(s.AnimationType.SUPER)[0],this.animations.get(a).start(t)):(this.setAnimationVisibility(s.AnimationType.IDLE,!0),this.animObjects.get(s.AnimationType.IDLE).forEach((e=>{this.animations.get(e).start(t)})))}}doWithAnimation(e,t){var[i,r]=this.getNormalizedAnimType(e);let n=this.animObjects.get(i);if(void 0===n)throw new Error(`Missing animObjects for anim type "${s.AnimationType[i]}"`);i!==e&&(n=[n[r]]),n.forEach(((e,i)=>{t(this.animations.get(e),e)}))}doWithCurrentAnimation(e){this.doWithAnimation(this.currentAnimType,e)}endCurrentAnimation(){this.doWithCurrentAnimation((e=>e.endLoop()))}handleSoundChange(e,t,i,r=1){if(i){var s;this.animSounds.has(t)&&this.animSounds.get(t).isPlaying()||(s=this.worldSound?.playEffect(e,this.gameObject,this.gameObject.owner,r))&&this.animSounds.set(t,s)}else{let e=this.animSounds.get(t);e&&e.isLoop&&(e.stop(),this.animSounds.delete(t))}}onCreate(e){this.renderableManager=e,this.plugins.forEach((t=>t.onCreate(e))),this.objectRules.ambientSound&&(this.ambientSound=this.worldSound?.playEffect(this.objectRules.ambientSound,this.gameObject,void 0,.25)),this.pipOverlay?.onCreate(e)}onRemove(e){if(this.renderableManager=void 0,this.plugins.forEach((t=>t.onRemove(e))),this.animSounds.forEach((e=>e.stop())),this.ambientSound?.stop(),this.turretRotateSound?.stop(),this.poweredSound?.stop(),this.gameObject.isDestroyed)return this.gameObject.deathType===x.DeathType.Temporal||this.gameObject.deathType===x.DeathType.None?void 0:void(this.objectRules.explosion.length&&this.createExplosionAnims(e))}dispose(){this.plugins.forEach((e=>e.dispose())),this.pipOverlay?.dispose(),this.placeholderObj?.dispose(),this.mainObj?.dispose(),this.rubbleObj?.dispose(),this.bib?.dispose(),this.fireObjects?.forEach((e=>e.dispose())),this.turretBuilders?.forEach((e=>e.dispose())),[...this.animObjects?.values()].forEach((e=>e.forEach((e=>e.dispose()))))}}),j.lampTextures=new Map}}})),System.register("engine/renderable/entity/BoxIntersectObject3D",[],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[],execute:function(){i=new THREE.Ray,r=new THREE.Matrix4,s=new THREE.Box3,n=new THREE.Vector3,a=class extends THREE.Object3D{constructor(e){super(),this.boxSize=e}raycast(e,t){if(this.parent){r.getInverse(this.parent.matrixWorld),i.copy(e.ray).applyMatrix4(r),n.copy(this.position);let a=s.setFromCenterAndSize(n,this.boxSize);if(i.intersectsBox(a)){const i=new THREE.Vector3;a.getCenter(i),i.applyMatrix4(this.parent.matrixWorld),t.push({distance:e.ray.origin.distanceTo(i),point:i,object:this})}}}},e("BoxIntersectObject3D",a)}}})),System.register("engine/renderable/entity/unit/RotorHelper",["game/gameobject/unit/ZoneType","util/math"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("RotorHelper",class{static computeRotationStep(e,t,s){var n=e.zone===i.ZoneType.Air,a=e.rules.idleRate,o=n||!!s.idleSpeed||!!a;let l=s.speed??67;n||(s.idleSpeed?l=s.idleSpeed:a&&(l/=a));var c=Math.sign(l);n=Math.abs(THREE.Math.degToRad(l)),a=Math.abs(t);return c*r.clamp(a+.1*(o?1:a/n*-.5),0,n)}})}}})),System.register("engine/renderable/entity/Vehicle",["liang-barsky","game/gameobject/Vehicle","game/Coords","engine/renderable/WithPosition","engine/gfx/DebugUtils","engine/renderable/ShpRenderable","engine/ImageFinder","engine/renderable/MapSpriteTranslation","engine/Animation","engine/AnimProps","data/IniSection","engine/animation/SimpleRunner","util/math","engine/type/ObjectType","game/type/SpeedType","engine/renderable/entity/HighlightAnimRunner","game/gameobject/unit/VeteranLevel","game/gameobject/trait/HarvesterTrait","game/gameobject/common/DeathType","game/gameobject/unit/FacingUtil","game/gameobject/unit/ZoneType","engine/renderable/entity/InvulnerableAnimRunner","game/GameSpeed","engine/renderable/entity/BoxIntersectObject3D","engine/renderable/entity/unit/RotorHelper","engine/renderable/entity/unit/ExtraLightHelper","engine/renderable/DebugRenderable","engine/gfx/MathUtils"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p,m,f,y,T,v,b,S,w,C,E,x,O,A,M,R,P,I;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e},function(e){m=e},function(e){f=e},function(e){y=e},function(e){T=e},function(e){v=e},function(e){b=e},function(e){S=e},function(e){w=e},function(e){C=e},function(e){E=e},function(e){x=e},function(e){O=e},function(e){A=e},function(e){M=e},function(e){R=e}],execute:function(){var t;P=Math.PI/4,(t=I=I||{})[t.Grab=0]="Grab",t[t.Shake1=1]="Shake1",t[t.Shake2=2]="Shake2",e("Vehicle",class{constructor(e,t,i,r,s,a,o,l,c,h,u,d,g,p,m,f,T){this.gameObject=e,this.rules=t,this.imageFinder=r,this.voxels=a,this.voxelAnims=o,this.palette=l,this.camera=c,this.lighting=h,this.debugFrame=u,this.gameSpeed=d,this.selectionModel=g,this.vxlBuilderFactory=p,this.useSpriteBatching=m,this.pipOverlay=f,this.worldSound=T,this.rotorSpeeds=[],this.vxlBuilders=[],this.highlightAnimRunner=new y.HighlightAnimRunner(this.gameSpeed),this.invulnAnimRunner=new C.InvulnerableAnimRunner(this.gameSpeed),this.plugins=[],this.objectRules=e.rules,this.objectArt=e.art,this.label="vehicle_"+this.objectRules.name,this.paletteRemaps=[...this.rules.colors.values()].map((e=>this.palette.clone().remap(e))),this.palette.remap(this.gameObject.owner.color),this.lastOwnerColor=this.gameObject.owner.color,this.updateBaseLight(),this.vxlExtraLight=(new THREE.Vector3).copy(this.baseVxlExtraLight),this.shpExtraLight=(new THREE.Vector3).copy(this.baseShpExtraLight),this.withPosition=new n.WithPosition}updateBaseLight(){this.baseShpExtraLight=this.lighting.compute(this.objectArt.lightingType,this.gameObject.tile,this.gameObject.tileElevation).addScalar(-1).addScalar(this.rules.audioVisual.extraUnitLight),this.baseVxlExtraLight=(new THREE.Vector3).addScalar(this.lighting.computeNoAmbient(this.objectArt.lightingType,this.gameObject.tile,this.gameObject.tileElevation)+this.rules.audioVisual.extraUnitLight)}registerPlugin(e){this.plugins.push(e)}updateLighting(){this.plugins.forEach((e=>e.updateLighting?.())),this.updateBaseLight(),this.vxlExtraLight.copy(this.baseVxlExtraLight),this.shpExtraLight.copy(this.baseShpExtraLight)}get3DObject(){return this.target}create3DObject(){let e=this.get3DObject();e||(e=new x.BoxIntersectObject3D(new THREE.Vector3(1,1/3,1).multiplyScalar(s.Coords.LEPTONS_PER_TILE)),e.name=this.label,e.userData.id=this.gameObject.id,this.target=e,e.matrixAutoUpdate=!1,this.withPosition.matrixUpdate=!0,this.withPosition.applyTo(this),this.createObjects(e),this.vxlBuilders.forEach((e=>e.setExtraLight(this.vxlExtraLight))),this.shpRenderable?.setExtraLight(this.shpExtraLight),this.pipOverlay&&(this.pipOverlay.create3DObject(),this.posObj?.add(this.pipOverlay.get3DObject())))}updateClippingPlanes(e,t=!1){if(t||this.objectRules.naval&&!this.objectRules.underwater){var i=s.Coords.tileHeightToWorld(e);let t=[new THREE.Plane(new THREE.Vector3(0,1,0),-i)];this.vxlBuilders.forEach((e=>e.setClippingPlanes(t)))}}getIntersectTarget(){return this.target}getUiName(){var e=this.plugins.reduce(((e,t)=>t.getUiNameOverride?.()??e),void 0);return void 0!==e?e:this.gameObject.getUiName()}setPosition(e){this.withPosition.setPosition(e.x,e.y,e.z)}getPosition(){return this.withPosition.getPosition()}highlight(){this.plugins.some((e=>e.shouldDisableHighlight?.()))||this.highlightAnimRunner.animation.getState()!==h.AnimationState.RUNNING&&this.highlightAnimRunner.animate(2)}update(e,t=0){this.plugins.forEach((t=>t.update(e))),this.pipOverlay?.update(e),this.gameObject.veteranLevel!==this.lastVeteranLevel&&(this.gameObject.veteranLevel===T.VeteranLevel.Elite&&void 0!==this.lastVeteranLevel&&this.highlightAnimRunner.animate(30),this.lastVeteranLevel=this.gameObject.veteranLevel);var i=this.gameObject.tile.z+this.gameObject.tileElevation,r=void 0===this.lastElevation||this.lastElevation!==i;r&&(this.lastElevation=i,this.updateBaseLight(),this.updateClippingPlanes(this.gameObject.tile.z));var n=this.gameObject.invulnerableTrait.isActive(),a=n!==this.lastInvulnerable;this.lastInvulnerable=n;var o=this.highlightAnimRunner.shouldUpdate();o&&this.highlightAnimRunner.tick(e),n&&a&&this.invulnAnimRunner.animate(),this.invulnAnimRunner.shouldUpdate()&&this.invulnAnimRunner.tick(e);var l=this.gameObject.warpedOutTrait.isActive(),c=l!==this.lastWarpedOut;this.lastWarpedOut=l;var p=this.gameObject.cloakableTrait?.isCloaked(),m=p!==this.lastCloaked;this.lastCloaked=p;let f=this.gameObject.submergibleTrait?.isSubmerged();if(i=f!==this.lastSubmerged,this.lastSubmerged=f,c||m||i){let e=l||p||f?.5:1;this.shpRenderable?.setOpacity(e),this.shpRenderable?.setFlat(!!f),this.vxlBuilders.forEach((t=>{t.setOpacity(e),t.setShadow(!f)})),this.placeholder?.setOpacity(e)}if((r||a||n||o)&&(y=n?this.invulnAnimRunner.getValue():0,S=(o?this.highlightAnimRunner.getValue():0)||y,v=this.lighting.getAmbientIntensity(),A.ExtraLightHelper.multiplyVxl(this.vxlExtraLight,this.baseVxlExtraLight,v,S),A.ExtraLightHelper.multiplyShp(this.shpExtraLight,this.baseShpExtraLight,S)),this.gameObject.isDestroyed&&this.resolveObjectRemove){if(this.squidGrabAnim&&(this.posObj?.remove(this.squidGrabAnim.get3DObject()),this.squidGrabAnim.dispose(),this.squidGrabAnim=void 0),this.destroyStartTime||(this.destroyStartTime=e),this.isSinker()){(E=1<=(C=(e-this.destroyStartTime)/3e3))?this.mainObj.visible=!1:(this.objectRules.naval&&(this.mainObj.rotation.x=Math.PI/4*C),this.mainObj.position.y=-16*s.Coords.ISO_WORLD_SCALE*C,this.mainObj.position.z=8*s.Coords.ISO_WORLD_SCALE*C,this.mainObj.updateMatrix());let t=!1;this.sinkWakeAnims.forEach((t=>t.update(e))),this.sinkWakeAnims.filter((e=>!e.isAnimFinished())).length||(this.sinkWakeAnims.forEach((e=>this.get3DObject().remove(e.get3DObject()))),this.sinkWakeAnims.length=0,t=!0),E&&t&&this.resolveObjectRemove()}}else if(!this.gameObject.warpedOutTrait.isActive()){let i=(Math.floor(this.gameObject.direction+this.gameObject.spinVelocity*t)+360)%360;var y=i!==this.lastDirection;y&&void 0!==this.lastDirection&&this.objectArt.isVoxel&&this.gameObject.zone===w.ZoneType.Air&&(x=i-this.lastDirection,void 0!==this.lastDirectionDelta&&Math.abs(x)<2&&Math.abs(this.lastDirectionDelta)<2&&Math.sign(x)!==Math.sign(this.lastDirectionDelta)?i=this.lastDirection:this.lastDirectionDelta=x),this.lastDirection=i;var v=this.gameObject.owner.color;this.lastOwnerColor!==v&&(this.palette.remap(v),this.lastOwnerColor=v,this.vxlBuilders.forEach((e=>e.setPalette(this.palette))),this.shpRenderable?.setPalette(this.palette),this.placeholder?.setPalette(this.palette));var b,S=this.gameObject.isMoving||!this.objectArt.isVoxel&&!!this.gameObject.spinVelocity,C=this.gameObject.isFiring,E=void 0===this.lastMoving||this.lastMoving!==S,x=void 0===this.lastFiring||this.lastFiring!==C;if(0{this.rotorSpeeds[t]=O.RotorHelper.computeRotationStep(this.gameObject,this.rotorSpeeds[t]??0,this.objectArt.rotors[t]),this.rotorSpeeds[t]&&(e.rotateOnAxis(this.objectArt.rotors[t].axis,this.rotorSpeeds[t]),e.updateMatrix())}))}startRocking(e,t,r){if(this.bodyVxlBuilder){this.rockingStartTime=r,this.rockingFactor=t;var s=this.bodyVxlBuilder.getLocalBoundingBox();let a=new THREE.Box2(new THREE.Vector2(s.min.x,s.min.y),new THREE.Vector2(s.max.x,s.max.y));var n=THREE.Math.degToRad(S.FacingUtil.toWorldDeg(e));s=new THREE.Vector2;let o=new THREE.Vector2(10,0).rotateAround(new THREE.Vector2,n).setLength(a.getSize(s).length()+1);s=o.toArray(),i.default([0,0],s,[a.min.x,a.min.y,a.max.x,a.max.y]),this.rockingPoint=new THREE.Vector3(s[0],0,s[1]),s=o.clone().rotateAround(new THREE.Vector2,-Math.PI/2).normalize(),this.rockingAxis=new THREE.Vector3(s.x,0,s.y)}}updateRocking(e,t){if(this.rockingStartTime){var i=e-this.rockingStartTime;let n=this.rockingFactor;t||(n*=1-Math.min(1,this.gameObject.rules.weight/5));var s=i||n?Math.min(1,i/(r.ROCKING_TICKS/E.GameSpeed.BASE_TICKS_PER_SECOND*1e3)*this.gameSpeed.value/n):0;i=P*n*(1-Math.pow(2*(s-.5),2));this.rockingTiltObj.position.set(0,0,0),this.rockingTiltObj.rotation.set(0,0,0),this.rockingTiltObj.scale.set(1,1,1),R.MathUtils.rotateObjectAboutPoint(this.rockingTiltObj,this.rockingPoint,this.rockingAxis,i),this.rockingTiltObj.updateMatrix(),1!==s&&0!==n||(this.rockingStartTime=void 0)}}updateSquidGrab(e,t,i,r,n,a,o){var l;if(i&&(this.squidGrabAnim&&(this.posObj?.remove(this.squidGrabAnim.get3DObject()),this.squidGrabAnim.dispose(),this.squidGrabAnim=void 0),t&&(this.squidGrabAnim=this.renderableManager.createAnim("SQDG",(e=>{e.extraOffset={x:0,y:-s.Coords.ISO_TILE_SIZE/4},e.setExtraLight(this.shpExtraLight)}),!0),this.squidGrabAnim.remapColor(this.gameObject.parasiteableTrait.getParasite().owner.color),this.squidGrabAnim.create3DObject(),this.posObj?.add(this.squidGrabAnim.get3DObject()))),t&&(r||i)&&this.updateSquidGrabAnim(this.squidGrabAnim.getAnimProps(),n,I.Grab),t&&o&&a&&(l=0{let t=this.withPosition.getPosition().clone();var i={x:p.getRandomInt(-s.Coords.ISO_TILE_SIZE/2,s.Coords.ISO_TILE_SIZE/2)*s.Coords.ISO_WORLD_SCALE,y:p.getRandomInt(-s.Coords.ISO_TILE_SIZE/2,s.Coords.ISO_TILE_SIZE/2)*s.Coords.ISO_WORLD_SCALE};e.setPosition(t.add(new THREE.Vector3(i.x,0,i.y)))}))}}this.squidGrabAnim?.update(e)}updateShapeAnimation(e,t){if(this.shpAnimRunner){let r=this.shpAnimRunner.animation.props;var i;t?(r.loopEnd=this.objectArt.firingFrames-1,r.rate=u.AnimProps.defaultRate/2):e||this.objectRules.naval?(r.loopEnd=this.objectArt.walkFrames-1,i=this.objectRules.naval&&!e?this.objectRules.idleRate:this.objectRules.walkRate,r.rate=u.AnimProps.defaultRate/i):r.loopEnd=0,this.shpAnimRunner.animation.rewind()}}updateShapeFrame(e,t,i){if(this.shpRenderable&&this.shpAnimRunner){let n;var r,s=Math.round((45-e+360)%360/360*8)%8;n=i?(r=this.shpAnimRunner.animation.getCurrentFrame(),8*this.objectArt.walkFrames+8+this.objectArt.firingFrames*s+r):t||this.objectRules.naval?(r=this.shpAnimRunner.animation.getCurrentFrame(),this.objectArt.walkFrames*s+r):8*this.objectArt.walkFrames+s,this.shpRenderable.setFrame(n)}}updateSquidGrabAnim(e,t,i){var s=Math.round((360-t)%360/360*8)%8;e.start=10*s+80*i,e.end=10*s+9+80*i,e.loopStart=e.start,e.loopEnd=e.end,e.loopCount=0,e.rate=10/(r.ROCKING_TICKS/E.GameSpeed.BASE_TICKS_PER_SECOND/(this.rockingFactor??1))}createObjects(e){if(this.debugFrame.value){let t=a.DebugUtils.createWireframe({width:1,height:1},1);t.translateX(-s.Coords.getWorldTileSize()/2),t.translateZ(-s.Coords.getWorldTileSize()/2),e.add(t)}let t=this.tiltObj=new THREE.Object3D;t.matrixAutoUpdate=!1,t.rotation.order="YXZ";let i=this.dirWrapObj=new THREE.Object3D;i.matrixAutoUpdate=!1;var r=this.mainObj=this.createMainObject();let n=this.rockingTiltObj=new THREE.Object3D;n.matrixAutoUpdate=!1,n.rotation.order="YXZ",n.add(r),i.add(n),t.add(i);let o=this.posObj=new THREE.Object3D;o.matrixAutoUpdate=!1,o.add(t),e.add(o)}computeSpriteAnchorOffset(e){var t=this.objectArt.getDrawOffset();return{x:e.x+t.x,y:e.y+t.y}}createMainObject(){let e=new THREE.Object3D;if(e.matrixAutoUpdate=!1,this.objectArt.isVoxel){var t=!this.objectArt.noHva,i=this.objectArt.imageName.toLowerCase(),r=i+".vxl",s=this.voxels.get(r);if(s){var n=t?this.voxelAnims.get(i+".hva"):void 0;let r=this.bodyVxlBuilder=this.vxlBuilderFactory.create(s,n,this.paletteRemaps,this.palette);this.vxlBuilders.push(r),n=this.mainVxl=r.build(),e.add(n),this.objectArt.rotors&&(this.rotors=this.objectArt.rotors.map((e=>{var t=r.getSection(e.name);if(!t)throw new Error(`Vehicle "${this.objectRules.name}" VXL section "${e.name}" not found`);return t})))}else console.warn(`VXL missing for vehicle ${this.objectRules.name}. Vxl file ${r} not found. `),e.add(this.createPlaceholder());if(this.objectRules.spawns&&this.objectRules.noSpawnAlt){let r=i+"wo.vxl";if(p=this.voxels.get(r)){var a=t?this.voxelAnims.get(r.replace(".vxl",".hva")):void 0;let i=this.vxlBuilderFactory.create(p,a,this.paletteRemaps,this.palette);this.vxlBuilders.push(i);let s=this.noSpawnAltVxl=i.build();s.visible=!1,e.add(s)}else console.warn(`<${this.gameObject.name}>: Couldn't find noSpawnAlt image "${r}"`)}if(this.gameObject.harvesterTrait&&this.objectRules.unloadingClass){var p,f=this.rules.getObject(this.objectRules.unloadingClass,m.ObjectType.Vehicle).imageName.toLowerCase();if(p=this.voxels.get(f+".vxl")){a=t?this.voxelAnims.get(f+".hva"):void 0;let i=this.vxlBuilderFactory.create(p,a,this.paletteRemaps,this.palette);this.vxlBuilders.push(i);let r=this.harvesterAltVxl=i.build();r.visible=!1,e.add(r)}else console.warn(`<${this.gameObject.name}>: Couldn't find UnloadingClass image "${f}.vxl"`)}if(this.gameObject.turretTrait){let r=e;if(f=this.objectArt.turretOffset){let t=new THREE.Object3D;t.matrixAutoUpdate=!1,t.position.z=-f,t.updateMatrix(),e.add(t),r=t}let s,n=[];for(let e=0;e: Missing turret file "${r}"`),n.push(void 0)}this.currentTurretIdx=this.gameObject.turretNo,this.allTurrets=n,1e&&s.add(e)))):s=this.turret=n[0],s&&r.add(s);let a=i+"barl.vxl";if(f=this.voxels.get(a)){var v=t?this.voxelAnims.get(a.replace(".vxl",".hva")):void 0;let e=this.vxlBuilderFactory.create(f,v,this.paletteRemaps,this.palette);this.vxlBuilders.push(e);var b=this.barrel=e.build();r.add(b)}}}else{let t=new c.MapSpriteTranslation(1,1);var{spriteOffset:v,anchorPointWorld:b}=t.compute();v=this.computeSpriteAnchorOffset(v);let r;try{r=this.imageFinder.findByObjectArt(this.objectArt)}catch(i){if(!(i instanceof l.ImageFinder.MissingImageError))throw i;console.warn(`<${this.gameObject.name}>: `+i.message)}if(r){let t=this.shpRenderable=o.ShpRenderable.factory(r,this.palette,this.camera,v,this.objectArt.hasShadow);t.setBatched(this.useSpriteBatching),this.useSpriteBatching&&t.setBatchPalettes(this.paletteRemaps),t.create3DObject(),e.add(t.get3DObject()),e.position.x=b.x,e.position.z=b.y,e.updateMatrix();let i=new u.AnimProps(new d.IniSection("dummy"),r);i.loopCount=-1,b=new h.Animation(i,this.gameSpeed),this.shpAnimRunner=new g.SimpleRunner,this.shpAnimRunner.animation=b}else e.add(this.createPlaceholder())}return e}createPlaceholder(){return this.placeholder=new M.DebugRenderable({width:.5,height:.5},this.objectArt.height,this.palette,{centerFoundation:!0}),this.placeholder.setBatched(this.useSpriteBatching),this.useSpriteBatching&&this.placeholder.setBatchPalettes(this.paletteRemaps),this.placeholder.create3DObject(),this.placeholder.get3DObject()}updateActiveTurret(e){this.allTurrets.forEach(((t,i)=>{t&&(t.visible=i===e)}))}updateBodyVxl(){var e=!!this.noSpawnAltVxl&&!this.gameObject.airSpawnTrait.availableSpawns,t=!!this.harvesterAltVxl&&!!this.gameObject.harvesterTrait&&[v.HarvesterStatus.PreparingToUnload,v.HarvesterStatus.Unloading].includes(this.gameObject.harvesterTrait.status);this.noSpawnAltVxl&&(this.noSpawnAltVxl.visible=e),this.harvesterAltVxl&&(this.harvesterAltVxl.visible=t),this.mainVxl&&(this.mainVxl.visible=!e&&!t)}isSinker(){return this.gameObject.zone===w.ZoneType.Water&&this.gameObject.isSinker}onCreate(e){this.renderableManager=e,this.plugins.forEach((t=>t.onCreate(e))),this.objectRules.ambientSound&&(this.ambientSound=this.worldSound?.playEffect(this.objectRules.ambientSound,this.gameObject))}onRemove(e){if(this.renderableManager=void 0,this.plugins.forEach((t=>t.onRemove(e))),this.ambientSound?.stop(),this.gameObject.isDestroyed&&this.gameObject.isVehicle()&&this.get3DObject()){if(this.gameObject.deathType===b.DeathType.Temporal)return;if(this.gameObject.deathType===b.DeathType.None)return;if(this.gameObject.deathType===b.DeathType.Crush)return;if(!this.isSinker()||this.objectRules.underwater||this.gameObject.deathType!==b.DeathType.Sink&&this.objectRules.speedType===f.SpeedType.Hover){if(this.objectRules.underwater&&this.objectRules.organic)return;if(!this.objectRules.explosion.length)return;if(this.gameObject.explodes&&this.objectRules.deathWeapon)return;var t=(t=this.objectRules.explosion)[p.getRandomInt(0,t.length-1)];return void e.createTransientAnim(t,(e=>e.setPosition(this.withPosition.getPosition())))}if(this.isSinker()){var i=this.rules.audioVisual.wake;this.sinkWakeAnims=[];for(let t=0;t<5;t++){let t=e.createAnim(i,void 0,!0);var r={x:p.getRandomInt(-15,15)*s.Coords.ISO_WORLD_SCALE,y:p.getRandomInt(-15,15)*s.Coords.ISO_WORLD_SCALE};t.setPosition(new THREE.Vector3(r.x,0,r.y)),this.sinkWakeAnims.push(t),t.create3DObject(),this.get3DObject().add(t.get3DObject())}this.gameObject.rules.naval||this.updateClippingPlanes(this.gameObject.tile.z,!0)}return new Promise((e=>this.resolveObjectRemove=e))}}dispose(){this.plugins.forEach((e=>e.dispose())),this.pipOverlay?.dispose(),this.shpRenderable?.dispose(),this.vxlBuilders.forEach((e=>e.dispose())),this.sinkWakeAnims?.forEach((e=>e.dispose())),this.squidGrabAnim?.dispose(),this.placeholder?.dispose()}})}}})),System.register("engine/renderable/builder/BatchShpBuilder",["engine/renderable/builder/ShpTextureAtlas","engine/gfx/SpriteUtils","engine/gfx/TextureUtils","engine/gfx/material/PaletteBasicMaterial"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e}],execute:function(){e("BatchShpBuilder",class{constructor(e,t,i,r,s=1,n=!1,a=1e4,o=1){this.shpFile=e,this.palette=t,this.camera=i,this.textureCache=r,this.opacity=s,this.transparent=n,this.batchSize=a,this.scale=o,this.specIndexes=new Map}get verticesPerSprite(){return r.SpriteUtils.VERTICES_PER_SPRITE}get trianglesPerSprite(){return r.SpriteUtils.TRIANGLES_PER_SPRITE}initTexture(){var e;this.textureCache.has(this.shpFile)?this.atlas=this.textureCache.get(this.shpFile):(e=(new i.ShpTextureAtlas).fromShpFile(this.shpFile),this.textureCache.set(this.shpFile,e),this.atlas=e)}getSpriteGeometryOptions(e){var t={x:(t=this.shpFile.getImage(e.frameNo)).x-e.shpFile.width/2+e.offset.x,y:t.y-e.shpFile.height/2+e.offset.y};return{texture:this.atlas.getTexture(),textureArea:this.atlas.getTextureArea(e.frameNo),flat:e.flat,depth:e.depth,align:{x:1,y:-1},offset:t,camera:this.camera,scale:this.scale}}setPalette(e){if(this.palette=e,this.mesh){var t=s.TextureUtils.textureFromPalette(e);this.mesh.material.palette=t}}build(){if(this.mesh)return this.mesh;this.initTexture();var e=s.TextureUtils.textureFromPalette(this.palette);let t=new THREE.BufferGeometry;var i,a=this.batchSize*this.verticesPerSprite,o=new THREE.BufferAttribute(new Float32Array(3*a),3);t.addAttribute("position",o),this.positionAttribute=o,t.addAttribute("uv",new THREE.BufferAttribute(new Float32Array(2*a),2)),r.SpriteUtils.USE_INDEXED_GEOMETRY&&(i=this.batchSize*this.trianglesPerSprite*3,t.setIndex(new THREE.BufferAttribute(new Uint32Array(3*i),1)));var l;a=new THREE.BufferAttribute(new Float32Array(4*a),4);t.addAttribute("vertexColorMult",a),this.colorMultAttribute=a;let c=0;for(l of this.specIndexes.keys())this.specIndexes.set(l,c),this.setSpecGeometry(l,t,c),c++;if(this.firstFreeSpriteIdx=ce+i*this.verticesPerSprite)),i*a.index.array.length),t.index.needsUpdate=!0);var o;s=e.lightMult??new THREE.Vector3(1,1,1);for(o of(this.setLightingAt(i,s,this.colorMultAttribute.array),this.setVisibilityAt(i,!0,this.colorMultAttribute.array),Object.values(t.attributes)))o.needsUpdate=!0}has(e){return this.specIndexes.has(e)}remove(e){if(this.specIndexes.has(e)){if(this.mesh){var t=this.specIndexes.get(e);this.setVisibilityAt(t,!1,this.colorMultAttribute.array),this.colorMultAttribute.needsUpdate=!0,this.positionAttribute.array[t*this.verticesPerSprite*3]=this.firstFreeSpriteIdx,this.firstFreeSpriteIdx=t}this.specIndexes.delete(e)}}update(e){var t;!this.specIndexes.has(e)||(t=this.mesh?.geometry)&&this.setSpecGeometry(e,t,this.specIndexes.get(e))}isFull(){return this.specIndexes.size===this.batchSize}isEmpty(){return 0===this.specIndexes.size}setLightingAt(e,t,i){for(let r=0;r{var r=i.lightMult??new THREE.Vector3(1,1,1);this.setLightingAt(t,r,e)})),this.colorMultAttribute.needsUpdate=!0}}dispose(){this.mesh&&(this.mesh.geometry.dispose(),this.mesh.material.dispose())}})}}})),System.register("engine/renderable/entity/map/MapSpriteBatchLayer",["game/Coords","engine/ImageFinder","engine/renderable/builder/BatchShpBuilder","engine/renderable/builder/ShpAggregator","engine/renderable/MapSpriteTranslation","engine/renderable/ShadowRenderable","util/typeGuard"],(function(e,t){"use strict";var i,r,s,n,a,o,l;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e}],execute:function(){e("MapSpriteBatchLayer",class{constructor(e,t,i,r,s,n,a,o,l){this.label=e,this.spriteUseDepth=i,this.theater=r,this.art=s,this.imageFinder=n,this.camera=a,this.lighting=o,this.shpAggregator=l,this.textureCache=new Map,this.batchShpSpecsByObject=new Map,this.batchShpBuilders=new Map,this.shadowBatchShpBuilders=[],this.batchedObjectRules=new Set(t),this.aggregatedImageData=this.createAggregatedShpFile(`agg_${e}.shp`)}get3DObject(){return this.target}create3DObject(){let e=this.get3DObject();e||(e=new THREE.Object3D,e.name=this.label,e.matrixAutoUpdate=!1,this.target=e)}createAggregatedShpFile(e){var t=[...this.batchedObjectRules.values()].map((e=>{var t=this.art.getObject(e.name,e.type);let i;try{i=this.imageFinder.findByObjectArt(t)}catch(e){if(e instanceof r.ImageFinder.MissingImageError)return;throw e}return n.ShpAggregator.getShpFrameInfo(i,t.hasShadow)})).filter(l.isNotNullOrUndefined);return this.shpAggregator.aggregate(t,e)}update(e){}updateLighting(){this.batchShpSpecsByObject.forEach(((e,t)=>{e.main.lightMult?.copy(this.lighting.compute(t.art.lightingType,t.tile))})),[...this.batchShpBuilders.values()].flat().forEach((e=>e.updateLighting()))}shouldBeBatched(e){return this.batchedObjectRules.has(e.rules)}getBatchKey(e){return e.art.paletteType+"_"+e.art.customPaletteName}addObject(e){var t=this.getBatchKey(e);let r=this.batchShpBuilders.get(t);r||(r=[],this.batchShpBuilders.set(t,r));let n,a=r.find((e=>!e.isFull()));if(!a){if(!this.get3DObject())throw new Error("Not implemented");{var l=this.theater.getPalette(e.art.paletteType,e.art.customPaletteName);let t=new s.BatchShpBuilder(this.aggregatedImageData.file,l,this.camera,this.textureCache,void 0,void 0,void 0,i.Coords.ISO_WORLD_SCALE);r.push(t),this.get3DObject().add(t.build()),a=t}}if(l=this.buildBatchShpSpec(e,this.aggregatedImageData),a.add(l),e.art.hasShadow){let e=this.shadowBatchShpBuilders.find((e=>!e.isFull()));if(!e){if(!this.get3DObject())throw new Error("Not implemented");{let t=new s.BatchShpBuilder(this.aggregatedImageData.file,o.ShadowRenderable.getOrCreateShadowPalette(),this.camera,this.textureCache,.5,!0,void 0,i.Coords.ISO_WORLD_SCALE);this.shadowBatchShpBuilders.push(t),this.get3DObject().add(t.build()),e=t}}n=this.buildShadowBatchShpSpec(l,this.aggregatedImageData),e.add(n)}this.batchShpSpecsByObject.set(e,{main:l,shadow:n})}buildBatchShpSpec(e,t){var i=e.getFoundation();let r=new a.MapSpriteTranslation(i.width,i.height),s=e.position.worldPosition.clone(),{spriteOffset:n,anchorPointWorld:o}=r.compute();s.x+=o.x,s.z+=o.y;var l=this.imageFinder.findByObjectArt(e.art);if(void 0===(i=t.imageIndexes.get(l)))throw new Error("SHP file not found in aggregated image data");return{shpFile:l,frameNo:i,depth:this.spriteUseDepth(e),flat:e.art.flat,position:s,offset:n.clone().add(e.art.getDrawOffset()),lightMult:this.lighting.compute(e.art.lightingType,e.tile)}}buildShadowBatchShpSpec(e,t){var i=t.imageIndexes.get(e.shpFile);if(void 0===i)throw new Error("SHP file not found in aggregated image data");return{...e,position:e.position.clone().add(new THREE.Vector3(0,.1,0)),flat:!0,frameNo:i+t.file.numImages/2,lightMult:void 0}}removeObject(e){const t=this.batchShpSpecsByObject.get(e);if(t){var i=this.getBatchKey(e);let r=this.batchShpBuilders.get(i),s=r?.find((e=>e.has(t.main)));if(s){if(s.remove(t.main),s.isEmpty()&&1e.has(t.shadow)));e?.remove(t.shadow),e?.isEmpty()&&1=i.main.shpFile.numImages*(i.shadow?.5:1))){var r=this.aggregatedImageData.imageIndexes.get(i.main.shpFile);i.main.frameNo=r+t,i.shadow&&(i.shadow.frameNo=i.main.frameNo+this.aggregatedImageData.file.numImages/2),r=this.getBatchKey(e);let s=this.batchShpBuilders.get(r)?.find((e=>e.has(i.main)));if(s?.update(i.main),i.shadow){let e=this.shadowBatchShpBuilders.find((e=>e.has(i.shadow)));e?.update(i.shadow)}}}dispose(){[...this.batchShpBuilders.values(),...this.shadowBatchShpBuilders].flat().forEach((e=>e.dispose())),[...this.textureCache.values()].forEach((e=>e.dispose())),this.textureCache.clear()}})}}})),System.register("engine/renderable/entity/Terrain",["engine/renderable/WithPosition","engine/ImageFinder","engine/gfx/DebugUtils","engine/renderable/MapSpriteTranslation","engine/renderable/ShpRenderable","game/gameobject/trait/TiberiumTreeTrait","engine/animation/SimpleRunner","engine/AnimProps","engine/Animation","data/IniSection","engine/renderable/AlphaRenderable"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e}],execute:function(){e("Terrain",class{constructor(e,t,i,r,s,n,a,o,l){this.gameObject=e,this.terrainLayer=t,this.imageFinder=i,this.palette=r,this.camera=s,this.lighting=n,this.debugFrame=a,this.gameSpeed=o,this.useSpriteBatching=l,this.objectArt=e.art,this.label="terrain_"+e.rules.name,this.init()}init(){this.tiberiumTreeTrait=this.gameObject.traits.find(o.TiberiumTreeTrait),this.withPosition=new i.WithPosition,this.extraLight=new THREE.Vector3,this.updateLighting()}updateLighting(){this.extraLight.copy(this.lighting.compute(this.objectArt.lightingType,this.gameObject.tile)).addScalar(-1)}get3DObject(){return this.target}create3DObject(){let e=this.get3DObject();e||(e=new THREE.Object3D,e.name=this.label,this.target=e,e.matrixAutoUpdate=!1,this.withPosition.matrixUpdate=!0,this.withPosition.applyTo(this),this.createObjects(e))}setPosition(e){this.withPosition.setPosition(e.x,e.y,e.z)}getPosition(){return this.withPosition.getPosition()}update(e){var t;this.tiberiumTreeTrait&&((t=this.tiberiumTreeTrait.status)!==this.lastTiberiumSpawnStatus&&(this.lastTiberiumSpawnStatus=t)===o.SpawnStatus.Spawning&&this.animationRunner?.animation.reset(),this.animationRunner&&(this.animationRunner.tick(e),this.animationRunner.animation.getState()!==h.AnimationState.STOPPED?this.mainObj.setFrame(this.animationRunner.getCurrentFrame()):this.mainObj.setFrame(0)))}createObjects(e){var t={width:1,height:1};let i;this.debugFrame.value&&(g=s.DebugUtils.createWireframe(t,2),e.add(g));try{i=this.imageFinder.findByObjectArt(this.objectArt)}catch(o){if(o instanceof r.ImageFinder.MissingImageError)return void console.warn(o.message);throw o}var o=this.gameObject.rules.alphaImage;if(o){var g=this.imageFinder.tryFind(o,!1);if(g){let t=new d.AlphaRenderable(g,this.camera,this.objectArt.getDrawOffset());t.create3DObject(),e.add(t.get3DObject())}else console.warn(`<${this.gameObject.name}>: Alpha image "${o}" not found`)}if(this.terrainLayer?.shouldBeBatched(this.gameObject))this.terrainLayer.addObject(this.gameObject);else{let r=new THREE.Object3D;r.matrixAutoUpdate=!1;let s=new n.MapSpriteTranslation(t.width,t.height),{spriteOffset:o,anchorPointWorld:d}=s.compute();r.position.x=d.x,r.position.z=d.y,r.updateMatrix(),t=o.clone().add(this.objectArt.getDrawOffset());let g=a.ShpRenderable.factory(i,this.palette,this.camera,t,this.objectArt.hasShadow);if(g.setBatched(this.useSpriteBatching),this.useSpriteBatching&&g.setBatchPalettes([this.palette]),g.setFrame(0),g.setExtraLight(this.extraLight),g.create3DObject(),r.add(g.get3DObject()),this.mainObj=g,this.tiberiumTreeTrait){let e=new u.IniSection("dummy");this.gameObject.rules.animationRate&&(e.set("Rate",""+60*this.gameObject.rules.animationRate),e.set("Shadow","yes")),t=new c.AnimProps(e,i);let r=new h.Animation(t,this.gameSpeed);this.animationRunner=new l.SimpleRunner,this.animationRunner.animation=r,r.stop()}e.add(r)}}onRemove(){this.terrainLayer?.hasObject(this.gameObject)&&this.terrainLayer.removeObject(this.gameObject)}dispose(){this.mainObj?.dispose()}})}}})),System.register("engine/renderable/entity/Overlay",["data/ShpFile","game/Coords","engine/renderable/WithPosition","engine/gfx/DebugUtils","engine/renderable/MapSpriteTranslation","engine/renderable/ShpRenderable","util/math","game/map/BridgeOverlayTypes","engine/type/ObjectType","game/gameobject/common/DeathType","engine/renderable/entity/BoxIntersectObject3D","engine/gfx/MathUtils","engine/renderable/entity/map/MapSurface"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e}],execute:function(){e("Overlay",class{constructor(e,t,i,r,s,n,a,o,l,c,h){this.gameObject=e,this.rules=t,this.art=i,this.imageFinder=r,this.palette=s,this.camera=n,this.lighting=a,this.debugFrame=o,this.bridgeImageCache=l,this.mapOverlayLayer=c,this.useSpriteBatching=h,this.isInvisible=!1,this.objectRules=e.rules,this.objectArt=e.art,this.label="overlay_"+this.objectRules.name,this.init()}init(){this.withPosition=new s.WithPosition,this.extraLight=new THREE.Vector3,this.updateLighting()}updateLighting(){var e=this.objectArt.lightingType;this.extraLight.copy(this.lighting.compute(e,this.gameObject.tile,this.gameObject.isHighBridge()?4:0)).addScalar(-1)}get3DObject(){return this.target}create3DObject(){let e=this.get3DObject();e||(e=new THREE.Object3D,e.name=this.label,e.userData.id=this.gameObject.id,this.target=e,e.matrixAutoUpdate=!1,this.withPosition.matrixUpdate=!0,this.withPosition.applyTo(this),this.createObjects(e))}update(e){var t;this.isInvisible||(t=1e4*this.gameObject.overlayId+this.gameObject.value)!==this.lastOverlayHash&&(this.lastOverlayHash=t,t=this.computeFrame(),this.mainRenderable?t{e.setPosition(r.Coords.tile3dToWorld(n,a,0).add(this.withPosition.getPosition()))}))}}}dispose(){this.mainRenderable?.dispose()}})}}})),System.register("engine/renderable/entity/Smudge",["engine/renderable/builder/ShpBuilder","engine/renderable/WithPosition","engine/ImageFinder","engine/gfx/DebugUtils","engine/renderable/MapSpriteTranslation","game/Coords"],(function(e,t){"use strict";var i,r,s,n,a,o;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e}],execute:function(){e("Smudge",class{constructor(e,t,i,r,s,n,a){this.gameObject=e,this.imageFinder=t,this.palette=i,this.camera=r,this.lighting=s,this.debugFrame=n,this.mapSmudgeLayer=a,this.objectArt=e.art,this.label="smudge_"+e.name,this.init()}init(){this.withPosition=new r.WithPosition,this.extraLight=new THREE.Vector3,this.updateLighting()}updateLighting(){this.extraLight.copy(this.lighting.compute(this.objectArt.lightingType,this.gameObject.tile)).addScalar(-1)}get3DObject(){return this.target}create3DObject(){let e=this.get3DObject();e||(e=new THREE.Object3D,e.name=this.label,this.target=e,e.matrixAutoUpdate=!1,this.withPosition.matrixUpdate=!0,this.withPosition.applyTo(this),this.createObjects(e))}update(e){}setPosition(e){this.withPosition.setPosition(e.x,e.y,e.z)}getPosition(){return this.withPosition.getPosition()}createObjects(e){var t,r={width:1,height:1};let l=new THREE.Object3D;if(l.matrixAutoUpdate=!1,this.debugFrame.value&&(t=n.DebugUtils.createWireframe(r,0),e.add(t)),this.mapSmudgeLayer?.shouldBeBatched(this.gameObject))this.mapSmudgeLayer.addObject(this.gameObject);else{let n;try{n=this.imageFinder.findByObjectArt(this.objectArt)}catch(t){if(t instanceof s.ImageFinder.MissingImageError)return void console.warn(t.message);throw t}let c=new a.MapSpriteTranslation(r.width,r.height),{spriteOffset:h,anchorPointWorld:u}=c.compute();r=h.clone().add(this.objectArt.getDrawOffset());let d=this.builder=new i.ShpBuilder(n,this.palette,this.camera,o.Coords.ISO_WORLD_SCALE);d.setOffset(r),d.flat=this.objectArt.flat,d.setExtraLight(this.extraLight),r=d.build(),l.add(r),l.position.x=u.x,l.position.z=u.y,l.updateMatrix(),e.add(l)}}onRemove(){this.mapSmudgeLayer?.hasObject(this.gameObject)&&this.mapSmudgeLayer.removeObject(this.gameObject)}dispose(){this.builder?.dispose()}})}}})),System.register("game/gameobject/infantry/sequenceMap",["game/gameobject/unit/ZoneType","game/art/SequenceType","game/gameobject/infantry/StanceType","game/gameobject/infantry/InfDeathType"],(function(e,t){"use strict";var i,r,s,n,a,o,l;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e}],execute:function(){e("getFireSequenceBy",a=(e,t=s.StanceType.None)=>t===s.StanceType.Deployed?r.SequenceType.DeployedFire:e===i.ZoneType.Water?r.SequenceType.WetAttack:e===i.ZoneType.Air?r.SequenceType.FireFly:t===s.StanceType.Prone?r.SequenceType.FireProne:r.SequenceType.FireUp),e("getMoveSequenceBy",o=(e,t,n)=>e===i.ZoneType.Air?r.SequenceType.Fly:e===i.ZoneType.Water?r.SequenceType.Swim:t===s.StanceType.Prone?r.SequenceType.Crawl:n?r.SequenceType.Panic:r.SequenceType.Walk),e("getIdleSequenceBy",((e,t=s.StanceType.None)=>t===s.StanceType.Deployed?[r.SequenceType.DeployedIdle]:e===i.ZoneType.Water?[r.SequenceType.WetIdle1,r.SequenceType.WetIdle2]:e!==i.ZoneType.Air?[r.SequenceType.Idle1,r.SequenceType.Idle2]:void 0)),e("getStillSequenceBy",l=(e,t=s.StanceType.None)=>t===s.StanceType.Deployed?r.SequenceType.Deployed:e===i.ZoneType.Water?r.SequenceType.Tread:e===i.ZoneType.Air?r.SequenceType.Hover:t===s.StanceType.Prone?r.SequenceType.Prone:t===s.StanceType.Guard?r.SequenceType.Guard:t===s.StanceType.Paradrop?r.SequenceType.Paradrop:r.SequenceType.Ready),e("getStanceTransitionSequenceBy",((e,t)=>e===s.StanceType.Prone?r.SequenceType.Up:t===s.StanceType.Prone?r.SequenceType.Down:e===s.StanceType.Deployed?r.SequenceType.Undeploy:t===s.StanceType.Deployed?r.SequenceType.Deploy:t===s.StanceType.Cheer?r.SequenceType.Cheer:void 0)),e("getCrashingSequences",(e=>{let t=[...e.art.sequences.keys()];var i=[r.SequenceType.AirDeathStart,r.SequenceType.AirDeathFalling].filter((e=>t.includes(e)));if(i.length)return i})),e("getDeathSequence",((e,t)=>{var s=e.zone,a=e.rules.isHuman;let o,l=[...e.art.sequences.keys()];return e.isCrashing?o=[r.SequenceType.AirDeathFinish]:s===i.ZoneType.Air?o=[r.SequenceType.Tumble]:s===i.ZoneType.Water?![n.InfDeathType.Gunfire,n.InfDeathType.Explode].includes(t)&&a||(o=[r.SequenceType.WetDie1,r.SequenceType.WetDie2]):t!==n.InfDeathType.Gunfire&&a?t===n.InfDeathType.Explode&&(o=[r.SequenceType.Die2]):o=[r.SequenceType.Die1],o&&(o=o.filter((e=>l.includes(e))),o.length||(o=void 0)),o})),e("getDeathAnim",((e,t)=>t===n.InfDeathType.ExplodeAlt?e.audioVisual.infantryExplode:t===n.InfDeathType.Fire?e.audioVisual.flamingInfantry:t===n.InfDeathType.Electro?[...e.animationNames][1]:t===n.InfDeathType.HeadExplode?e.audioVisual.infantryHeadPop:t===n.InfDeathType.Nuke?e.audioVisual.infantryNuked:void 0)),e("findSequence",((e,t,r,n,c,h)=>{var u=e=>-1!==h.indexOf(e);let d;return n&&(d=a(e,t),u(d)||(d=a(e),u(d)||(d=void 0))),void 0===d&&r&&(d=o(e,t,c),u(d)||(d=o(e,s.StanceType.None,c),u(d)||(d=void 0))),void 0===d&&(d=l(e,t),u(d)||(d=l(e),u(d)||(d=l(i.ZoneType.Ground)))),d}))}}})),System.register("engine/renderable/entity/unit/BlobShadow",["game/Coords","game/gameobject/unit/ZoneType","game/gameobject/infantry/StanceType","engine/gfx/batch/BatchedMesh"],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e}],execute:function(){e("BlobShadow",a=class e{constructor(e,t,i){this.gameObject=e,this.radius=t,this.useMeshInstancing=i}get3DObject(){return this.obj}create3DObject(){if(!this.obj){let t=e.geometries.get(this.radius);t||(t=new THREE.CircleBufferGeometry(this.radius*i.Coords.ISO_WORLD_SCALE),e.geometries.set(this.radius,t)),this.obj=new(this.useMeshInstancing?n.BatchedMesh:THREE.Mesh)(t,e.mat),this.obj.rotation.x=-Math.PI/2,this.obj.matrixAutoUpdate=!1}}update(e,t){let n=this.obj;var a,o,l=this.gameObject.zone===r.ZoneType.Air||this.gameObject.isInfantry()&&this.gameObject.stance===s.StanceType.Paradrop;(n.visible=l)&&(a=this.gameObject.tile.z,o=this.gameObject.tileElevation,l=!!this.gameObject.tile.onBridgeLandType,a===this.lastTileZ&&o===this.lastTileElevation&&l===this.lastBridgeBelow||(this.lastTileZ=a,this.lastTileElevation=o,this.lastBridgeBelow=l,l=this.gameObject.position.getBridgeBelow(),n.position.y=i.Coords.tileHeightToWorld(-o)+(l?i.Coords.tileHeightToWorld(l.tileElevation)+.01*i.Coords.ISO_WORLD_SCALE:0),n.updateMatrix()))}dispose(){}}),a.geometries=new Map,a.mat=new THREE.MeshBasicMaterial({color:0,transparent:!0,opacity:.5,alphaTest:0})}}})),System.register("engine/renderable/entity/Infantry",["engine/renderable/WithPosition","engine/ImageFinder","engine/gfx/DebugUtils","engine/renderable/ShpRenderable","game/Coords","engine/animation/SimpleRunner","engine/Animation","engine/AnimProps","data/IniSection","game/gameobject/infantry/sequenceMap","game/gameobject/unit/ZoneType","game/gameobject/infantry/StanceType","game/art/SequenceType","util/math","game/gameobject/infantry/InfDeathType","game/gameobject/unit/VeteranLevel","engine/renderable/entity/HighlightAnimRunner","game/gameobject/common/DeathType","game/type/MovementZone","engine/renderable/entity/unit/BlobShadow","engine/renderable/entity/BoxIntersectObject3D","engine/renderable/entity/unit/ExtraLightHelper","engine/renderable/DebugRenderable","engine/gfx/MathUtils"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p,m,f,y,T,v,b,S,w,C,E,x;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e},function(e){m=e},function(e){f=e},function(e){y=e},function(e){T=e},function(e){v=e},function(e){b=e},function(e){S=e},function(e){w=e},function(e){C=e},function(e){E=e},function(e){x=e}],execute:function(){e("Infantry",class{constructor(e,t,r,s,n,a,o,l,c,h,u,d,g,p,m){this.gameObject=e,this.rules=t,this.art=r,this.imageFinder=s,this.palette=a,this.camera=o,this.lighting=l,this.debugFrame=c,this.gameSpeed=h,this.selectionModel=u,this.useSpriteBatching=d,this.useMeshInstancing=g,this.pipOverlay=p,this.worldSound=m,this.crashingSequencePlaying=!1,this.deathAnimSequencePlaying=!1,this.idleActionDue=!1,this.disguiseChanged=!1,this.highlightAnimRunner=new T.HighlightAnimRunner(this.gameSpeed),this.plugins=[],this.objectArt=e.art,this.label="infantry_"+e.rules.name,this.paletteRemaps=[...this.rules.colors.values()].map((e=>this.palette.clone().remap(e))),this.palette=this.palette.remap(this.gameObject.owner.color),this.withPosition=new i.WithPosition,this.updateBaseLight(),this.extraLight=(new THREE.Vector3).copy(this.baseExtraLight)}updateBaseLight(){this.baseExtraLight=this.lighting.compute(this.objectArt.lightingType,this.gameObject.tile,this.gameObject.tileElevation).addScalar(-1+this.rules.audioVisual.extraInfantryLight)}registerPlugin(e){this.plugins.push(e)}updateLighting(){this.plugins.forEach((e=>e.updateLighting?.())),this.updateBaseLight(),this.extraLight.copy(this.baseExtraLight)}get3DObject(){return this.target}getIntersectTarget(){return this.target}getUiName(){var e=this.plugins.reduce(((e,t)=>t.getUiNameOverride?.()??e),void 0);return void 0!==e?e:this.gameObject.getUiName()}create3DObject(){let e=this.get3DObject();e||(e=new w.BoxIntersectObject3D(new THREE.Vector3(.5,2/3,.5).multiplyScalar(a.Coords.LEPTONS_PER_TILE)),e.name=this.label,e.userData.id=this.gameObject.id,this.target=e,e.matrixAutoUpdate=!1,this.withPosition.matrixUpdate=!0,this.withPosition.applyTo(this),this.createObjects(e),this.shpRenderable?.setExtraLight(this.extraLight),this.pipOverlay&&(this.pipOverlay.create3DObject(),this.posWrap.add(this.pipOverlay.get3DObject())))}setPosition(e){this.withPosition.setPosition(e.x,e.y,e.z)}getPosition(){return this.withPosition.getPosition()}highlight(){this.plugins.some((e=>e.shouldDisableHighlight?.()))||this.highlightAnimRunner.animation.getState()!==l.AnimationState.RUNNING&&this.highlightAnimRunner.animate(2)}update(e){this.plugins.forEach((t=>t.update(e)));var{zone:t,stance:i,isCrashing:r,isMoving:s,isFiring:n,isPanicked:o,owner:c,veteranLevel:h}=this.gameObject;this.pipOverlay?.update(e),this.blobShadow?.update(e),h!==this.lastVeteranLevel&&(h===y.VeteranLevel.Elite&&void 0!==this.lastVeteranLevel&&this.highlightAnimRunner.animate(30),this.lastVeteranLevel=h);var m=this.gameObject.tile.z+this.gameObject.tileElevation;void 0!==this.lastElevation&&this.lastElevation===m||(this.lastElevation=m,this.updateBaseLight(),this.extraLight.copy(this.baseExtraLight)),this.highlightAnimRunner.shouldUpdate()&&(this.highlightAnimRunner.tick(e),C.ExtraLightHelper.multiplyShp(this.extraLight,this.baseExtraLight,this.highlightAnimRunner.getValue()));var T=this.disguise?.owner??c;this.lastOwnerColor!==T.color&&(this.palette.remap(T.color),(this.shpRenderable??this.placeholder)?.setPalette(this.palette),this.lastOwnerColor=T.color);var v=this.gameObject.warpedOutTrait.isActive(),h=v!==this.lastWarpedOut;if(this.lastWarpedOut=v,m=this.gameObject.cloakableTrait?.isCloaked(),T=m!==this.lastCloaked,this.lastCloaked=m,(h||T)&&(this.shpRenderable??this.placeholder)?.setOpacity(v||m?.5:1),r||void 0!==this.lastZone&&this.lastZone===t||(t===d.ZoneType.Water?this.gameObject.rules.enterWaterSound&&this.worldSound?.playEffect(this.gameObject.rules.enterWaterSound,this.gameObject,c):this.lastZone===d.ZoneType.Water&&this.gameObject.rules.leaveWaterSound&&this.worldSound?.playEffect(this.gameObject.rules.leaveWaterSound,this.gameObject,c),this.blobShadow&&this.shpRenderable?.setShadowVisible(!this.blobShadow.get3DObject().visible)),this.gameObject.isDestroyed&&this.deathPromiseResolve)if(this.deadBodyAnimRenderable){if((this.shpRenderable??this.placeholder).get3DObject().visible=!1,this.deadBodyAnimRenderable.update(e),this.deadBodyAnimRenderable.isAnimFinished())return void this.deathPromiseResolve()}else{if(!this.deathAnimRenderable){if(this.deathAnimSequencePlaying)return this.animRunner&&this.animRunner.animation.getState()!==l.AnimationState.STOPPED?(this.animRunner.tick(e),void this.updateShapeFrame(this.computeFacingNumber(this.gameObject.direction))):void([f.InfDeathType.Gunfire,f.InfDeathType.Explode].includes(this.gameObject.infDeathType)&&this.gameObject.rules.isHuman&&this.gameObject.zone===d.ZoneType.Ground?this.prepareDeadBodyAnim():this.deathPromiseResolve());if(m=this.sequenceQueue.shift())return this.deathAnimSequencePlaying=!0,void this.setAnimParams(m,e,!1);throw new Error("We should have a death sequence scheduled right now")}if((this.shpRenderable??this.placeholder).get3DObject().visible=!1,this.deathAnimRenderable.update(e),this.deathAnimRenderable.isAnimFinished())return void([f.InfDeathType.Gunfire,f.InfDeathType.Explode].includes(this.gameObject.infDeathType)&&this.gameObject.rules.isHuman?this.prepareDeadBodyAnim():this.deathPromiseResolve())}else{if(this.gameObject.warpedOutTrait.isActive())return;r&&(this.crashingSequencePlaying||(this.crashingSequencePlaying=!0,(b=u.getCrashingSequences(this.gameObject))&&(this.sequenceQueue=b)))}void 0!==this.lastDirection&&this.lastDirection===this.gameObject.direction||(this.lastDirection=this.gameObject.direction,this.computedDirection=this.gameObject.direction);var b=this.idleActionDue;this.idleActionDue=this.gameObject.idleActionTrait.actionDueThisTick();let S=this.idleActionDue&&!b;if(void 0===this.lastMoving||this.lastMoving!==s||void 0===this.lastFiring||this.lastFiring!==n||void 0===this.lastZone||this.lastZone!==t||void 0===this.lastPanicked||this.lastPanicked!==o||this.disguiseChanged){var w=this.disguiseChanged,E=this.lastFiring!==n;if(this.lastMoving=s,this.lastFiring=n,this.lastZone=t,this.lastPanicked=o,this.computedDirection=this.gameObject.direction,this.disguiseChanged=!1,!r&&(this.sequenceQueue=[],!E||n||w)){let r=this.findSequenceBy(t,i,s,n,o);void 0!==r&&(this.disguise&&[p.SequenceType.FireUp,p.SequenceType.FireProne].includes(r)&&(r=p.SequenceType.Ready),this.setAnimParams(r,e,!n))}}if(void 0!==this.lastStance&&this.lastStance===i||(this.sequenceQueue=[],S=!1,E=u.getStanceTransitionSequenceBy(this.lastStance,i),this.lastStance=i,E&&this.objectArt.sequences.has(E)&&this.sequenceQueue.push(E),void 0!==(w=this.findSequenceBy(t,i,s,n,o))&&this.sequenceQueue.push(w),void 0!==this.currentSequenceParams?.onlyFacing&&(this.computedDirection=this.directionFromFacingNo(this.currentSequenceParams.onlyFacing)),w=this.sequenceQueue.shift(),this.setAnimParams(w,e,!E),w===p.SequenceType.Paradrop?(w=this.rules.audioVisual.parachute,this.paradropAnim=this.renderableManager.createAnim(w,void 0,!0),this.paradropAnim.remapColor(c.color),this.paradropAnim.create3DObject(),this.paradropAnim.get3DObject().position.y=a.Coords.tileHeightToWorld(1),this.paradropAnim.get3DObject().updateMatrix(),this.posWrap.add(this.paradropAnim.get3DObject())):this.paradropAnim&&(this.paradropAnim.endAnimationLoop(),this.blobShadow&&(this.posWrap.remove(this.blobShadow.get3DObject()),this.blobShadow.dispose(),this.blobShadow=void 0,this.shpRenderable?.setShadowVisible(!0)))),this.paradropAnim&&(this.paradropAnim.update(e),this.paradropAnim.isAnimFinished()&&(this.posWrap.remove(this.paradropAnim.get3DObject()),this.paradropAnim=void 0)),this.sequenceQueue.length||s||n||i!==g.StanceType.None&&i!==g.StanceType.Guard||t===d.ZoneType.Air||!S||(.5<=Math.random()?(c=this.findIdleSequence(t,i,this.objectArt))&&this.setAnimParams(c,e,!1):this.computedDirection=Math.floor(360*Math.random())),this.animRunner){if(this.animRunner.animation.getState()===l.AnimationState.STOPPED&&this.currentSequenceParams){let r;[p.SequenceType.Idle1,p.SequenceType.Idle2].includes(this.currentSequenceParams.type)&&void 0!==this.currentSequenceParams.onlyFacing&&(this.computedDirection=this.directionFromFacingNo(this.currentSequenceParams.onlyFacing)),r=this.sequenceQueue.length?this.sequenceQueue.shift():this.findSequenceBy(t,i,s,n,o),void 0!==r&&this.setAnimParams(r,e,!n)}this.animRunner.tick(e),n=this.computeFacingNumber(this.computedDirection),this.updateShapeFrame(n)}}findIdleSequence(e,t,i){let r=u.getIdleSequenceBy(e,t);if(r?.length&&(r=r.filter((e=>i.sequences.has(e))),r.length||e===d.ZoneType.Ground||(r=u.getIdleSequenceBy(d.ZoneType.Ground,t)?.filter((e=>i.sequences.has(e))))),r)return r[m.getRandomInt(0,r.length-1)]}prepareDeadBodyAnim(){var e=(e=this.rules.audioVisual.deadBodies)[m.getRandomInt(0,e.length-1)];this.deadBodyAnimRenderable=this.renderableManager.createAnim(e,void 0,!0),this.deadBodyAnimRenderable.create3DObject(),this.posWrap.add(this.deadBodyAnimRenderable.get3DObject())}findSequenceBy(e,t,i,r,s){var n=u.findSequence(e,t,i,r,s,[...this.objectArt.sequences.keys()]);if(void 0!==n)return n;console.warn(`Couldn't find a sequence for infantry "${this.gameObject.name}" (moving=${i}, firing=${r})`)}setAnimParams(e,t,i=!0){if(this.animRunner){var r=this.objectArt.sequences.get(e);if(r){this.currentSequenceParams=r;let s=this.animRunner.animation.props;s.loopCount=i?-1:1,s.loopEnd=r.frameCount-1,[p.SequenceType.Deploy,p.SequenceType.Undeploy,p.SequenceType.Paradrop].includes(e)?e===p.SequenceType.Paradrop?s.rate=2*c.AnimProps.defaultRate:s.rate=c.AnimProps.defaultRate:s.rate=c.AnimProps.defaultRate/2,[p.SequenceType.Walk].includes(e)&&(s.rate/=1.33),this.animRunner.animation.start(t)}else console.warn(`Infantry "${this.gameObject.name}" is missing sequence "${p.SequenceType[e]}"`)}}updateShapeFrame(e){var t,i;this.currentSequenceParams&&this.shpRenderable&&this.animRunner&&(({startFrame:t,facingMult:i}=this.currentSequenceParams),(i=t+i*e+this.animRunner.animation.getCurrentFrame()): `+e.message)}if(!t)return this.placeholder=new E.DebugRenderable({width:.25,height:.25},this.objectArt.height,this.palette,{centerFoundation:!0}),this.placeholder.setBatched(this.useSpriteBatching),this.useSpriteBatching&&this.placeholder.setBatchPalettes(this.paletteRemaps),this.placeholder.create3DObject(),this.placeholder.get3DObject();var i=e.getDrawOffset();let s=this.shpRenderable=n.ShpRenderable.factory(t,this.palette,this.camera,i,e.hasShadow);s.setBatched(this.useSpriteBatching),this.useSpriteBatching&&s.setBatchPalettes(this.paletteRemaps),s.create3DObject();let u=s.get3DObject();return x.MathUtils.translateTowardsCamera(u,this.camera,15*a.Coords.ISO_WORLD_SCALE),u.updateMatrix(),i=new c.AnimProps(new h.IniSection("dummy"),t),i=new l.Animation(i,this.gameSpeed),this.animRunner=new o.SimpleRunner,this.animRunner.animation=i,u}setDisguise(e){this.gameObject.isDestroyed||this.gameObject.isCrashing||(this.objectArt=e?.objectArt??this.gameObject.art,this.updateShpRenderableFromArt(this.objectArt),this.disguiseChanged=!0,this.disguise=e)}updateShpRenderableFromArt(e){var t=(this.shpRenderable??this.placeholder)?.get3DObject();t&&(this.posWrap.remove(t),(this.shpRenderable??this.placeholder)?.dispose()),this.posWrap.add(this.createMainObject(e))}onCreate(e){this.renderableManager=e,this.plugins.forEach((t=>t.onCreate(e))),this.gameObject.rules.ambientSound&&(this.ambientSound=this.worldSound?.playEffect(this.gameObject.rules.ambientSound,this.gameObject))}onRemove(e){if(this.renderableManager=void 0,this.plugins.forEach((t=>t.onRemove(e))),this.ambientSound?.stop(),this.gameObject.isDestroyed&&this.gameObject.deathType!==v.DeathType.Temporal&&this.gameObject.stance!==g.StanceType.Paradrop){var t,i=u.getDeathSequence(this.gameObject,this.gameObject.infDeathType);if(i)1{this.deathPromiseResolve=()=>{this.renderableManager=void 0,e()}}))}}dispose(){this.plugins.forEach((e=>e.dispose())),this.pipOverlay?.dispose(),this.shpRenderable?.dispose(),this.placeholder?.dispose(),this.deathAnimRenderable?.dispose(),this.deadBodyAnimRenderable?.dispose(),this.paradropAnim?.dispose(),this.blobShadow?.dispose()}})}}})),System.register("engine/renderable/entity/Aircraft",["game/Coords","engine/renderable/WithPosition","engine/gfx/DebugUtils","util/math","game/gameobject/unit/VeteranLevel","engine/renderable/entity/HighlightAnimRunner","engine/Animation","game/gameobject/common/DeathType","game/gameobject/unit/ZoneType","engine/renderable/entity/InvulnerableAnimRunner","engine/renderable/entity/BoxIntersectObject3D","engine/renderable/entity/unit/RotorHelper","engine/renderable/entity/unit/ExtraLightHelper","engine/renderable/DebugRenderable"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p,m;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e},function(e){m=e}],execute:function(){e("Aircraft",class{constructor(e,t,i,r,s,n,a,l,c,h,d,g,p){this.gameObject=e,this.rules=t,this.voxels=i,this.voxelAnims=r,this.palette=s,this.lighting=a,this.debugFrame=l,this.gameSpeed=c,this.selectionModel=h,this.vxlBuilderFactory=d,this.useSpriteBatching=g,this.pipOverlay=p,this.rotorSpeeds=[],this.vxlBuilders=[],this.highlightAnimRunner=new o.HighlightAnimRunner(this.gameSpeed),this.invulnAnimRunner=new u.InvulnerableAnimRunner(this.gameSpeed),this.plugins=[],this.objectRules=e.rules,this.objectArt=e.art,this.label="aircraft_"+this.objectRules.name,this.init()}init(){this.paletteRemaps=[...this.rules.colors.values()].map((e=>this.palette.clone().remap(e))),this.palette.remap(this.gameObject.owner.color),this.lastOwnerColor=this.gameObject.owner.color,this.withPosition=new r.WithPosition,this.updateBaseLight(),this.extraLight=(new THREE.Vector3).copy(this.baseExtraLight)}updateBaseLight(){this.baseExtraLight=(new THREE.Vector3).setScalar(this.lighting.computeNoAmbient(this.objectArt.lightingType,this.gameObject.tile)+this.rules.audioVisual.extraAircraftLight)}updateLighting(){this.plugins.forEach((e=>e.updateLighting?.())),this.updateBaseLight(),this.extraLight.copy(this.baseExtraLight)}get3DObject(){return this.target}getIntersectTarget(){return this.target}getUiName(){var e=this.plugins.reduce(((e,t)=>t.getUiNameOverride?.()??e),void 0);return void 0!==e?e:this.gameObject.getUiName()}create3DObject(){let e=this.get3DObject();e||(e=new d.BoxIntersectObject3D(new THREE.Vector3(1,1/3,1).multiplyScalar(i.Coords.LEPTONS_PER_TILE*(this.gameObject.rules.spawned?.5:1))),e.name=this.label,e.userData.id=this.gameObject.id,this.target=e,e.matrixAutoUpdate=!1,this.withPosition.matrixUpdate=!0,this.withPosition.applyTo(this),this.createObjects(e),this.vxlBuilders.forEach((e=>e.setExtraLight(this.extraLight))),this.pipOverlay&&(this.pipOverlay.create3DObject(),this.posObj?.add(this.pipOverlay.get3DObject())))}setPosition(e){this.withPosition.setPosition(e.x,e.y,e.z)}getPosition(){return this.withPosition.getPosition()}registerPlugin(e){this.plugins.push(e)}highlight(){this.plugins.some((e=>e.shouldDisableHighlight?.()))||this.highlightAnimRunner.animation.getState()!==l.AnimationState.RUNNING&&this.highlightAnimRunner.animate(2)}update(e){this.plugins.forEach((t=>t.update(e))),this.pipOverlay?.update(e),this.gameObject.veteranLevel!==this.lastVeteranLevel&&(this.gameObject.veteranLevel===a.VeteranLevel.Elite&&void 0!==this.lastVeteranLevel&&this.highlightAnimRunner.animate(30),this.lastVeteranLevel=this.gameObject.veteranLevel);var t=this.highlightAnimRunner.shouldUpdate(),i=this.gameObject.invulnerableTrait.isActive(),r=i!==this.lastInvulnerable;(this.lastInvulnerable=i)&&r&&this.invulnAnimRunner.animate(),this.invulnAnimRunner.shouldUpdate()&&this.invulnAnimRunner.tick(e),(t||r)&&(t&&this.highlightAnimRunner.tick(e),s=i?this.invulnAnimRunner.getValue():0,o=(t?this.highlightAnimRunner.getValue():0)||s,n=this.lighting.getAmbientIntensity(),p.ExtraLightHelper.multiplyVxl(this.extraLight,this.baseExtraLight,n,o));var s=(t=this.gameObject.warpedOutTrait.isActive())!==this.lastWarpedOut;this.lastWarpedOut=t;var n=this.gameObject.cloakableTrait?.isCloaked(),o=n!==this.lastCloaked;if(this.lastCloaked=n,s||o){let e=t||n?.5:1;this.vxlBuilders.forEach((t=>t.setOpacity(e))),this.placeholder?.setOpacity(e)}n=this.gameObject.owner.color,this.lastOwnerColor!==n&&(this.palette.remap(n),this.lastOwnerColor=n,this.vxlBuilders.forEach((e=>e.setPalette(this.palette))),this.placeholder?.setPalette(this.palette)),(n=this.gameObject.zone)!==this.lastZone&&(this.gameObject.rules.missileSpawn&&n===h.ZoneType.Air&&this.lastZone!==h.ZoneType.Air&&this.renderableManager.createTransientAnim("V3TAKOFF",(e=>e.setPosition(this.withPosition.getPosition()))),this.lastZone=n),this.updateVxlRotation()}updateVxlRotation(){var{pitch:e,yaw:t,roll:i}=this.gameObject;this.tiltObj.rotation.z=THREE.Math.degToRad(i),this.tiltObj.rotation.x=THREE.Math.degToRad(e),this.tiltObj.rotation.y=THREE.Math.degToRad(t),this.rotors&&this.rotors.forEach(((e,t)=>{this.rotorSpeeds[t]=g.RotorHelper.computeRotationStep(this.gameObject,this.rotorSpeeds[t]??0,this.objectArt.rotors[t]),this.rotorSpeeds[t]&&(e.rotateOnAxis(this.objectArt.rotors[t].axis,this.rotorSpeeds[t]),e.updateMatrix())}))}createObjects(e){if(this.debugFrame.value){let t=s.DebugUtils.createWireframe({width:1,height:1},1);t.translateX(-i.Coords.getWorldTileSize()/2),t.translateZ(-i.Coords.getWorldTileSize()/2),e.add(t)}let t=this.tiltObj=new THREE.Object3D;t.rotation.order="YXZ";var r=this.createMainObject();t.add(r);let n=this.posObj=new THREE.Object3D;n.matrixAutoUpdate=!1,n.add(t),e.add(n)}createMainObject(){var e=this.objectArt.imageName.toLowerCase(),t=e+".vxl",i=this.voxels.get(t);if(!i)return console.warn(`VXL missing for aircraft ${this.objectRules.name}. Vxl file ${t} not found. `),this.placeholder=new m.DebugRenderable({width:.5,height:.5},this.objectArt.height,this.palette,{centerFoundation:!0}),this.placeholder.setBatched(this.useSpriteBatching),this.useSpriteBatching&&this.placeholder.setBatchPalettes(this.paletteRemaps),this.placeholder.create3DObject(),this.placeholder.get3DObject();t=this.objectArt.noHva?void 0:this.voxelAnims.get(e+".hva"),e=[...this.rules.colors.values()].map((e=>this.palette.clone().remap(e)));let r=this.vxlBuilderFactory.create(i,t,e,this.palette);return this.vxlBuilders.push(r),e=r.build(),this.objectArt.rotors&&(this.rotors=this.objectArt.rotors.map((e=>{var t=r.getSection(e.name);if(!t)throw new Error(`Aircraft "${this.objectRules.name}" VXL section "${e.name}" not found`);return t}))),e}onCreate(e){this.renderableManager=e,this.plugins.forEach((t=>t.onCreate(e)))}onRemove(e){var t;this.renderableManager=void 0,this.plugins.forEach((t=>t.onRemove(e))),this.gameObject.isDestroyed&&this.objectRules.explosion.length&&this.gameObject.deathType!==c.DeathType.Temporal&&this.gameObject.deathType!==c.DeathType.None&&(t=(t=this.objectRules.explosion)[n.getRandomInt(0,t.length-1)],e.createTransientAnim(t,(e=>{let t=this.withPosition.getPosition();this.gameObject.rules.missileSpawn&&(t=t.clone().add(this.gameObject.moveTrait.velocity.clone().setLength(this.rules.general.getMissileRules(this.gameObject.name).bodyLength))),e.setPosition(t)})))}dispose(){this.plugins.forEach((e=>e.dispose())),this.pipOverlay?.dispose(),this.vxlBuilders.forEach((e=>e.dispose())),this.placeholder?.dispose()}})}}})),System.register("engine/renderable/entity/TransientAnim",["engine/renderable/entity/Anim"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.Anim{constructor(e,t,i,r,s,n,a,o,l,c,h){super(e,t,i,r,s,n,a,o,l,void 0,h),this.container=c}update(e){var t;!this.isAnimNotStarted()||(t=this.objectArt.report)&&this.worldSound?.playEffect(t,this.getPosition()),super.update(e),this.isAnimFinished()&&(this.remove(),this.dispose())}remove(){this.container.remove(this)}},e("TransientAnim",r)}}})),System.register("engine/renderable/fx/LaserFx",["three.meshline","game/Coords"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("LaserFx",class{constructor(e,t,i,r,s,n){this.camera=e,this.sourcePos=t,this.targetPos=i,this.color=r,this.durationSeconds=s,this.width=n}setContainer(e){this.container=e}get3DObject(){return this.lineMesh}create3DObject(){this.lineMesh||(this.lineMesh=this.createObject(),this.lineMesh.name="fx_laser")}update(e){this.firstUpdateMillis||(this.firstUpdateMillis=e),this.timeLeft=Math.max(0,1-(e-this.firstUpdateMillis)/(1e3*this.durationSeconds)),this.lineMesh.material.uniforms.opacity.value=+this.timeLeft,this.isFinished()&&(this.container.remove(this),this.dispose())}createObject(){var e=this.sourcePos.clone(),t=this.targetPos.clone();let s=new THREE.Geometry;s.vertices.push(e,t);let n=new i.MeshLine;n.setGeometry(s);var a=this.camera.top;e=this.camera.right/this.camera.top,e=(t=2*a/Math.cos(this.camera.rotation.y))*e,a=new i.MeshLineMaterial({color:this.color.clone(),lineWidth:this.width,resolution:new THREE.Vector2(e,t).multiplyScalar(a*Math.cos(this.camera.rotation.x)/r.Coords.ISO_WORLD_SCALE),transparent:!0,sizeAttenuation:0,blending:THREE.AdditiveBlending});return new THREE.Mesh(n.geometry,a)}isFinished(){return 0===this.timeLeft}dispose(){this.lineMesh&&(this.lineMesh.geometry.dispose(),this.lineMesh.material.dispose())}})}}})),System.register("engine/renderable/fx/TeslaFx",["game/Coords"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("TeslaFx",class{constructor(e,t,i,r,s){this.sourcePos=e,this.targetPos=t,this.primaryColor=i,this.secondaryColor=r,this.durationSeconds=s,this.bolts=[],this.boltMeshes=[]}setContainer(e){this.container=e}get3DObject(){return this.target}create3DObject(){if(!this.target){this.target=new THREE.Object3D,this.target.name="fx_tesla";var e=this.primaryColor.getHex();[e,e,this.secondaryColor.getHex()].forEach((e=>{try{var{mesh:t,bolt:i}=this.createBolt(e);this.boltMeshes.push(t),this.bolts.push(i),this.target.add(t)}catch(e){console.warn("Couldn't create lightning FX",[e])}}))}}update(e){this.firstUpdateMillis||(this.firstUpdateMillis=e);let t=(e-this.firstUpdateMillis)/1e3;this.timeLeft=Math.max(0,1-t/this.durationSeconds);try{this.bolts.forEach((e=>e.update(t)))}catch(e){console.warn("Couldn't update lightning FX",[e])}this.isFinished()&&(this.container.remove(this),this.dispose())}createBolt(e){var t=this.sourcePos.clone(),r=this.targetPos.clone();t=new THREE.LightningStrike({sourceOffset:t,destOffset:r,radius0:.3*i.Coords.ISO_WORLD_SCALE,radius1:.3*i.Coords.ISO_WORLD_SCALE,isEternal:!0,timeScale:2,propagationTimeFactor:.05,vanishingTimeFactor:.95,ramification:0,roughness:.85,straightness:.7}),r=new THREE.MeshBasicMaterial({color:e});return{mesh:new THREE.Mesh(t,r),bolt:t}}isFinished(){return 0===this.timeLeft}dispose(){this.boltMeshes.forEach((e=>{e.geometry.dispose(),e.material.dispose()}))}})}}})),System.register("engine/renderable/fx/LineTrailFx",["game/art/ObjectArt","game/Coords"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("LineTrailFx",class{constructor(e,t,i,r,s){this.lazyTarget=e,this.trailColor=t,this.trailDecrement=i,this.gameSpeed=r,this.camera=s,this.trailInitialized=!1}setContainer(e){this.container=e}get3DObject(){return this.placeholderObj}create3DObject(){this.placeholderObj||(this.placeholderObj=new THREE.Object3D,this.placeholderObj.name="fx_linetrail_placeholder")}update(e){var t;void 0!==this.timeLeft&&(t=this.prevUpdateMillis,this.prevUpdateMillis=e,t&&(this.timeLeft=Math.max(0,this.timeLeft-(e-t)/1e3))),this.trailInitialized||(this.trailInitialized=!0,(t=this.createTrail(this.trailColor,this.trailDecrement))?this.trail=t:this.timeLeft=0),this.trail&&(this.trail.advance(),this.lastTargetMatrix=this.trail.targetObject.matrixWorld),this.isFinished()&&(this.container.remove(this),this.dispose())}createTrail(e,t){var s=this.lazyTarget();if(s){let o=new THREE.TrailRenderer(this.container.get3DObject()),l=THREE.TrailRenderer.createBaseMaterial();l.uniforms.headColor.value.set(e.r,e.g,e.b,1),l.uniforms.tailColor.value.set(e.r,e.g,e.b,0);var n=Math.floor(3/this.gameSpeed.value*50/(t/i.ObjectArt.DEFAULT_LINE_TRAIL_DEC)),a=.8*r.Coords.ISO_WORLD_SCALE;let c=new THREE.PlaneGeometry(a,a);return a=(new THREE.Quaternion).setFromEuler(this.camera.rotation),c.applyMatrix((new THREE.Matrix4).makeRotationFromQuaternion(a)),o.initialize(l,n,!1,0,c.vertices,s),o.activate(),o}}isFinished(){return 0===this.timeLeft}requestFinishAndDispose(){this.timeLeft=.8/this.gameSpeed.value}stopTracking(){if(this.trail&&this.lastTargetMatrix){let e=new THREE.Object3D;e.updateMatrixWorld=()=>{},e.matrixWorld=this.lastTargetMatrix,this.trail.targetObject=e}}dispose(){this.trail?.deactivate(),this.trail?.material.dispose(),this.trail?.geometry.dispose()}})}}})),System.register("engine/renderable/fx/SparkFx",["game/Coords"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){1,r=100,e("SparkFx",class e{constructor(e,t,i,r){this.pos=e,this.color=t,this.spawnDurationSeconds=i,this.gameSpeed=r,this.totalDurationSeconds=i+1}setContainer(e){this.container=e}create3DObject(){var t;this.particleGroup||(e.sparkTex||(e.sparkTex=new THREE.DataTexture(new Uint8Array(4).fill(255),1,1,THREE.RGBAFormat),e.sparkTex.needsUpdate=!0),this.particleGroup=new SPE.Group({texture:{value:e.sparkTex},maxParticleCount:100}),this.particleGroup.mesh.name="fx_spark",this.particleGroup.mesh.frustumCulled=!1,t=this.particleEmitter=new SPE.Emitter({maxAge:{value:1},position:{value:this.pos,spread:new THREE.Vector3(10,0,10).multiplyScalar(i.Coords.ISO_WORLD_SCALE)},acceleration:{value:new THREE.Vector3(0,-50,0).multiplyScalar(i.Coords.ISO_WORLD_SCALE),spread:new THREE.Vector3(0,0,0)},velocity:{value:new THREE.Vector3(0,30,0).multiplyScalar(i.Coords.ISO_WORLD_SCALE),spread:new THREE.Vector3(40,5,40).multiplyScalar(i.Coords.ISO_WORLD_SCALE)},color:{value:[this.color]},opacity:{value:[1,.5]},size:{value:1},particleCount:r}),this.particleGroup.addEmitter(t))}get3DObject(){return this.particleGroup?.mesh}update(e){var t;this.lastUpdateMillis?(t=e-this.lastUpdateMillis,this.particleGroup.tick(t/1e3*this.gameSpeed.value)):(this.firstUpdateMillis=e,this.particleGroup.tick(0)),this.lastUpdateMillis=e,this.particleEmitter.alive&&e-this.firstUpdateMillis>=1e3*this.spawnDurationSeconds/this.gameSpeed.value&&this.particleEmitter.disable(),this.timeLeft=Math.max(0,1-(e-this.firstUpdateMillis)/(1e3*this.totalDurationSeconds/this.gameSpeed.value)),this.timeLeft||(this.container.remove(this),this.dispose())}dispose(){this.particleGroup?.mesh.geometry.dispose(),this.particleGroup?.mesh.material.dispose()}})}}})),System.register("engine/renderable/fx/RadBeamFx",["three.meshline","game/Coords","util/math"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){e("RadBeamFx",class{constructor(e,t,i,r,s,n){this.camera=e,this.sourcePos=t,this.targetPos=i,this.color=r,this.durationSeconds=s,this.width=n,this.amplitude=0}setContainer(e){this.container=e}get3DObject(){return this.lineMesh}create3DObject(){this.lineMesh||(this.lineMesh=this.createObject(),this.lineMesh.name="fx_radbeam")}update(e){this.firstUpdateMillis||(this.firstUpdateMillis=e),this.timeLeft=Math.max(0,1-(e-this.firstUpdateMillis)/(1e3*this.durationSeconds));var t=s.truncToDecimals(r.Coords.LEPTONS_PER_TILE/6*(1-this.timeLeft),1);t!==this.amplitude&&(this.amplitude=t,this.lineMesh.geometry.dispose(),this.lineMesh.geometry=this.createLineGeometry(this.sourcePos,this.targetPos,t)),this.isFinished()&&(this.container.remove(this),this.dispose())}createObject(){var e=this.sourcePos.clone(),t=this.targetPos.clone(),s=this.createLineGeometry(e,t,this.amplitude),n=this.camera.top;e=this.camera.right/this.camera.top,e=(t=2*n/Math.cos(this.camera.rotation.y))*e,n=new i.MeshLineMaterial({color:this.color.clone(),lineWidth:this.width,resolution:new THREE.Vector2(e,t).multiplyScalar(n*Math.cos(this.camera.rotation.x)/r.Coords.ISO_WORLD_SCALE),transparent:!0,sizeAttenuation:0});return new THREE.Mesh(s,n)}createLineGeometry(e,t,s){let n=[];var a=t.clone().sub(e).length()/r.Coords.LEPTONS_PER_TILE,o=15*a;let l=new THREE.Vector3;for(let i=0;i<=o;i++){var c=i/o;l.lerpVectors(e,t,c),l.y+=s*Math.sin(c*a*(r.Coords.LEPTONS_PER_TILE/Math.PI)),n.push(l.x,l.y,l.z)}let h=new i.MeshLine;return h.setGeometry(n),h.geometry}isFinished(){return 0===this.timeLeft}dispose(){this.lineMesh&&(this.lineMesh.geometry.dispose(),this.lineMesh.material.dispose())}})}}})),System.register("engine/gfx/lighting/LightingFx",["data/map/MapLighting"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){var t;(t=r=r||{})[t.Normal=0]="Normal",t[t.High=1]="High",e("LightingFxPriority",r),e("LightingFx",class{constructor(){this.priority=r.Normal,this.mapLighting=new i.MapLighting,this.isRunning=!1}update(e,t){return{done:!0}}})}}})),System.register("engine/gfx/lighting/LightingDirector",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("LightingDirector",class{constructor(e,t,i){this.lighting=e,this.renderer=t,this.gameSpeed=i,this.effects=[],this.onFrame=e=>{if(this.effects.length){let t=!1;this.effects.slice().forEach(((i,r)=>{i.isRunning||(i.isRunning=!0,i.startTime=e,i.mapLighting.copy(this.lighting.getBaseAmbient()));var s=i.update(e,this.gameSpeed.value);s.done&&(this.effects.splice(this.effects.indexOf(i),1),r||(t=!0)),r||s.updated&&this.lighting.applyAmbientOverride(i.mapLighting)})),this.effects.length?t&&this.lighting.applyAmbientOverride(this.effects[0].mapLighting):this.lighting.applyAmbientOverride(void 0)}}}init(){this.renderer.onFrame.subscribe(this.onFrame)}addEffect(e){this.effects.push(e),this.effects.sort(((e,t)=>t.priority-e.priority))}dispose(){this.renderer.onFrame.unsubscribe(this.onFrame)}})}}})),System.register("engine/gfx/lighting/NukeLightingFx",["engine/gfx/lighting/LightingFx"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.LightingFx{constructor(){super(),this.priority=i.LightingFxPriority.High}update(e,t){let i=!1,r=!1;this.initialAmbient??(this.initialAmbient=this.mapLighting.ambient);let s,n=(e-this.startTime)/1e3*t;var a;return 3.3<=n?(n-=3.3,a=Math.min(1,n/.5),s=this.initialAmbient+1.5*(1-a),1===a&&(r=!0)):n<.3&&(a=n/.3,s=this.initialAmbient+1.5*a),void 0!==s&&this.mapLighting.ambient!==s&&(i=!0,this.mapLighting.ambient=s),{done:r,updated:i}}},e("NukeLightingFx",r)}}})),System.register("engine/renderable/entity/Projectile",["engine/renderable/WithPosition","engine/renderable/ShpRenderable","game/gameobject/Projectile","game/Coords","engine/renderable/fx/LaserFx","game/WeaponType","engine/renderable/fx/TeslaFx","game/GameSpeed","engine/renderable/fx/LineTrailFx","engine/renderable/fx/SparkFx","engine/renderable/fx/RadBeamFx","engine/renderable/entity/unit/BlobShadow","engine/gfx/lighting/NukeLightingFx","engine/gfx/batch/BatchedMesh","game/rules/ObjectRules","game/math/geometry","engine/type/PaletteType"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p,m,f,y,T;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e},function(e){m=e},function(e){f=e},function(e){y=e},function(e){T=e}],execute:function(){e("Projectile",class e{constructor(e,t,r,s,n,a,o,l,c,h,u,d,g,p,m){var f,y;this.gameObject=e,this.rules=t,this.imageFinder=r,this.voxels=s,this.voxelAnims=n,this.theater=a,this.palette=o,this.specialPalette=l,this.camera=c,this.gameSpeed=h,this.lighting=u,this.lightingDirector=d,this.vxlBuilderFactory=g,this.useSpriteBatching=p,this.useMeshInstancing=m,this.plugins=[],this.objectArt=e.art,this.label="projectile_"+e.rules.name,this.withPosition=new i.WithPosition,this.extraLight=new THREE.Vector3,this.updateLighting(),this.gameObject.rules.firersPalette&&(f=(y=this.gameObject.fromObject)?.art.paletteType??T.PaletteType.Unit,y=y?.art.customPaletteName,this.palette=this.theater.getPalette(f,y),this.gameObject.art.remapable&&(this.palette=this.palette.clone(),this.palette.remap(this.gameObject.fromPlayer.color))),this.gameObject.rules.firersPalette&&this.objectArt.remapable?this.paletteRemaps=[...this.rules.colors.values()].map((e=>this.palette.clone().remap(e))):this.paletteRemaps=[this.palette]}registerPlugin(e){this.plugins.push(e)}updateLighting(){this.plugins.forEach((e=>e.updateLighting?.())),this.objectArt.isVoxel?this.extraLight.setScalar(this.lighting.computeNoAmbient(this.objectArt.lightingType,this.gameObject.tile,this.gameObject.tileElevation)):this.extraLight.copy(this.lighting.compute(this.objectArt.lightingType,this.gameObject.tile,this.gameObject.tileElevation)).addScalar(-1)}getIntersectTarget(){}get3DObject(){return this.target}create3DObject(){let e=this.get3DObject();e||(e=new THREE.Object3D,e.name=this.label,this.target=e,e.matrixAutoUpdate=!1,this.withPosition.matrixUpdate=!0,this.withPosition.applyTo(this),this.createObjects(e))}setPosition(e){this.withPosition.setPosition(e.x,e.y,e.z)}getPosition(){return this.withPosition.getPosition()}update(e,t){if(this.plugins.forEach((t=>t.update(e))),0{e.setPosition(this.withPosition.getPosition())})),this.gameObject.isNuke&&this.lightingDirector.addEffect(new p.NukeLightingFx)))}updateShapeFrame(e){let t=0;this.objectArt.rotates&&(t=Math.round((e-45+360)%360/360*32)%32),this.shpRenderable.setFrame(t)}createObjects(t){if(this.gameObject.fromWeapon.rules.isSonic){e.sonicWaveGeometry??(e.sonicWaveGeometry=this.createSonicWaveGeometry()),e.sonicWaveMaterial??(e.sonicWaveMaterial=new THREE.MeshBasicMaterial({color:48340,blending:THREE.CustomBlending,blendEquation:THREE.AddEquation,blendSrc:THREE.DstColorFactor,blendDst:THREE.OneFactor,transparent:!0,opacity:.25,alphaTest:.01,depthTest:!1,depthWrite:!1}));let i=new(this.useMeshInstancing?m.BatchedMesh:THREE.Mesh)(e.sonicWaveGeometry,e.sonicWaveMaterial);return i.rotation.order="YXZ",i.rotation.x=-Math.PI/2,i.rotation.y=THREE.Math.degToRad(this.gameObject.direction),i.updateMatrix(),i.matrixAutoUpdate=!1,t.add(i),void(this.sonicWaveMesh=i)}if(!this.gameObject.rules.inviso&&this.gameObject.rules.imageName!==f.ObjectRules.IMAGE_NONE){if(this.gameObject.art.isVoxel){var i=this.objectArt.imageName.toLowerCase(),s=i+".vxl",n=this.voxels.get(s);if(!n)throw new Error(`VXL missing for projectile ${this.gameObject.rules.name}. Vxl file ${s} not found. `);var a=this.objectArt.noHva?void 0:this.voxelAnims.get(i+".hva");let e=this.vxlBuilder=this.vxlBuilderFactory.create(n,a,this.paletteRemaps,this.palette);e.setExtraLight(this.extraLight),s=e.build();let r=this.vxlRotWrapper=new THREE.Object3D;r.rotation.order="YXZ",r.matrixAutoUpdate=!1,r.add(s),t.add(r)}else{i=this.imageFinder.findByObjectArt(this.objectArt),n=this.objectArt.getDrawOffset(),a=this.gameObject.rules.arcing,s=this.gameObject.rules.shadow&&!a&&1t.onCreate(e)));var t=this.gameObject.fromObject?.name===this.rules.general.prism.type&&this.gameObject.fromWeapon.type===o.WeaponType.Secondary;let i;i=this.gameObject.fromObject?this.gameObject.fromWeapon.type===o.WeaponType.Primary||this.gameObject.fromWeapon.type===o.WeaponType.DeathWeapon||t?this.gameObject.fromObject.art.primaryFirePixelOffset:this.gameObject.fromObject.art.secondaryFirePixelOffset:[];var r,s;t=this.gameObject.fromWeapon.rules;if(this.gameObject.fromWeapon.type!==o.WeaponType.DeathWeapon&&!t.limboLaunch){let t;(g=this.gameObject.fromWeapon.rules.anim).length?t=1===g.length?g[0]:(p=this.gameObject.direction,g[Math.round((45-p+360)%360/360*8)%8]):this.gameObject.fromWeapon.warhead.rules.nukeMaker&&(t=this.rules.audioVisual.nukeTakeOff),t&&e.createTransientAnim(t,(e=>{e.setPosition(this.gameObject.position.worldPosition),i.length&&(e.extraOffset={x:i[0],y:-i[1]/2})}))}if(t.isLaser){let r=this.gameObject.position.worldPosition.clone(),s=new THREE.Vector3;i.length&&(m=n.Coords.screenDistanceToWorld(i[0],0),s.x=4*m.x,s.z=4*m.y,s.y=4*n.Coords.tileHeightToWorld(-i[1]/(n.Coords.ISO_TILE_SIZE/2)));let l=this.gameObject.target.getWorldCoords().clone();this.gameObject.fromObject?.name===this.rules.general.prism.type&&this.gameObject.fromWeapon.type===o.WeaponType.Secondary&&(s.y+=this.gameObject.fromObject.art.primaryFireFlh.vertical,l.add(s)),r.add(s);var g=new THREE.Color(t.isHouseColor?this.gameObject.fromPlayer.color.asHex():16711680),p=t.laserDuration/c.GameSpeed.BASE_TICKS_PER_SECOND/this.gameSpeed.value,m=2*(1e/255))):new THREE.Color(...this.rules.radiation.radColor.map((e=>e/255))),r=1/this.gameSpeed.value,r=new d.RadBeamFx(this.camera,y,T,f,r,1),e.addEffect(r)),this.objectArt.useLineTrail&&(r=(new THREE.Color).fromArray(this.objectArt.lineTrailColor.map((e=>e/255))),s=this.objectArt.lineTrailColorDecrement,s=new h.LineTrailFx((()=>this.target),r,s,this.gameSpeed,this.camera),e.addEffect(s),this.lineTrailFx=s),t.useSparkParticles&&(s=this.gameObject.position.worldPosition.clone(),t=20/c.GameSpeed.BASE_TICKS_PER_SECOND,t=new u.SparkFx(s,new THREE.Color(1,1,1),t,this.gameSpeed),e.addEffect(t))}onRemove(e){this.renderableManager=void 0,this.plugins.forEach((t=>t.onRemove(e))),this.gameObject.overshootTiles&&this.lineTrailFx?.stopTracking(),this.lineTrailFx?.requestFinishAndDispose()}dispose(){this.plugins.forEach((e=>e.dispose())),this.shpRenderable?.dispose(),this.vxlBuilder?.dispose(),this.blobShadow?.dispose()}})}}})),System.register("engine/gfx/drawable/TmpDrawable",["data/Bitmap"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("TmpDrawable",class{drawTileBlock(e,t,i,r,s,n){let a=t.data;var o=r/2;let l=i/2-2+t.width*n+s;var c=t.width*t.height;let h=0,u=0,d=0;for(;u=T.images.length)return;var v=T.images[g.subTile];c.set(g,v),(y=t.get(v))||(y=(new s.TmpDrawable).draw(v,T.blockWidth,T.blockHeight),t.set(v,y))}let b=new n.TextureAtlas,S=[];t.forEach((e=>{S.push(e)})),b.pack(S),this.disposables.add(b);let w=[],C=[];for(let e=0,r=this.allTiles.length;ee.dispose()));let I=new THREE.Mesh(R,M);I.matrixAutoUpdate=!1,I.frustumCulled=!1,e.add(I),this.disposables.add(R,M);let k=[];for(P of this.allTiles){var B=P.tileNum;let t=f.getTile(B);if(!t)return;var j=t.getAnimation();if(j&&P.subTile===j.subTile){B=this.lighting.compute(l.LightingType.Full,P).addScalar(-1),this.tileAnimLightMultsByTile.set(P,B);let t=new o.Anim(j.name,this.art.getAnimation(j.name),{x:j.offsetX,y:j.offsetY+(i.Coords.ISO_TILE_SIZE+1)/2},this.imageFinder,this.theater,this.camera,this.debugFrame,this.gameSpeed,this.useSpriteBatching,B,this.worldSound,p);B=i.Coords.tile3dToWorld(P.rx,P.ry,P.z),t.setPosition(B),t.create3DObject(),k.push(t),e.add(t.get3DObject()),this.disposables.add(t)}}this.anims=k}update(e){for(var t of this.anims)t.update(e)}updateLighting(e){if(e){for(var t of e){var i,r,s,n=this.tileIndexes.get(t);void 0!==n&&(({x:i,y:r,z:s}=this.lighting.compute(l.LightingType.Full,t)),this.updateColorMultBufferAtIndex(n,i,r,s,this.colorMultAttribute.array)),this.tileAnimLightMultsByTile.get(t)?.copy(this.lighting.compute(l.LightingType.Full,t))}this.colorMultAttribute.needsUpdate=!0}else{let e=[];for(var a of this.allTiles){var{x:o,y:c,z:a}=this.lighting.compute(l.LightingType.Full,a);e.push(o,c,a)}this.updateColorMultBuffer(e,this.colorMultAttribute.array),this.colorMultAttribute.needsUpdate=!0,this.tileAnimLightMultsByTile.forEach(((e,t)=>{e.copy(this.lighting.compute(l.LightingType.Full,t))}))}}updateColorMultBuffer(e,t){var i=a.SpriteUtils.VERTICES_PER_SPRITE,r=e.length/3;let s=0;for(let a=0;athis.needsLinesUpdate=!0,this.map=e,this.theater=t,this.camera=i}get3DObject(){return this.target}create3DObject(){let e=this.get3DObject();if(!e){if(e=new THREE.Object3D,e.name="map_tile_layer_debug",e.visible=this.visible,e.matrixAutoUpdate=!1,this.visible){if(!this.tileOverlay){let t=this.tileOverlay=this.createTileOverlay();t.matrixAutoUpdate=!1,t.frustumCulled=!1,e.add(t)}this.setupLines(e)}this.target=e}}update(){this.needsLinesUpdate&&this.visible&&(this.needsLinesUpdate=!1,this.destroyLines(),this.setupLines(this.target))}setVisible(e){if(e!==this.visible&&(this.visible=e,this.target))if(this.target.visible=e,this.visible){if(!this.tileOverlay){let e=this.tileOverlay=this.createTileOverlay();e.matrixAutoUpdate=!1,this.target.add(e)}this.setupLines(this.target)}else this.destroyLines()}setupLines(e){this.lines=new THREE.Object3D,this.lines.matrixAutoUpdate=!1,this.lines.add(this.createConnectivityLines(n.SpeedType.Foot,65280));let t=this.createConnectivityLines(n.SpeedType.Float,255);t.position.y=1,t.updateMatrix(),this.lines.add(t),e.add(this.lines),this.map.tileOccupation.onChange.subscribe(this.handleTileOccupationChanged)}destroyLines(){this.lines&&(this.target.remove(this.lines),this.lines=void 0,this.map.tileOccupation.onChange.unsubscribe(this.handleTileOccupationChanged))}createTileOverlay(){let e=[];this.map.tiles.forEach((t=>{var r=i.Coords.tile3dToWorld(t.rx,t.ry,t.z+1),n=l.IsoCoords.getScreenTileSize();let a=s.SpriteUtils.createSpriteGeometry({texture:this.getTileTexture(),textureArea:{x:t.z*n.width,y:2*t.rampType*n.height,width:n.width,height:2*n.height},align:{x:0,y:-1},camera:this.camera,scale:i.Coords.ISO_WORLD_SCALE});a.applyMatrix((new THREE.Matrix4).makeTranslation(r.x,r.y,r.z)),e.push(a)}));var t=o.BufferGeometryUtils.mergeBufferGeometries(e),r=new THREE.MeshBasicMaterial({map:this.getTileTexture(),alphaTest:.5,transparent:!0,opacity:.7,flatShading:!0});return this.disposables.add(t,r),new THREE.Mesh(t,r)}getTileTexture(){let t=e.textureCache;if(!t){var s=l.IsoCoords.getScreenTileSize(),n=this._textureTilesNo;let d=document.createElement("canvas"),g=d.getContext("2d");if(!g)throw new Error("Could not acquire canvas 2d context");d.width=s.width*n,d.height=2*s.height*r.rampHeights.length;let p=l.IsoCoords.tileToScreen(0,0);p.x+=-s.width/2;var a=i.Coords.ISO_TILE_SIZE/2;for(let e=0;e{var t=r.getNode(e.fromId),n=r.getNode(e.toId);s.vertices.push(i.Coords.tile3dToWorld(t.data.tile.rx+.5,t.data.tile.ry+.5,t.data.tile.z+(t.data.onBridge?.tileElevation??0)),i.Coords.tile3dToWorld(n.data.tile.rx+.5,n.data.tile.ry+.5,n.data.tile.z+(n.data.onBridge?.tileElevation??0)))}));var n=new THREE.LineBasicMaterial({color:t,transparent:!0,depthTest:!1,depthWrite:!1});let a=new THREE.LineSegments(s,n);return a.matrixAutoUpdate=!1,this.disposables.add(s,n),a}onRemove(){this.lines&&this.destroyLines()}dispose(){this.disposables.dispose()}})}}})),System.register("engine/renderable/WithVisibility",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("WithVisibility",class{constructor(){this.visible=!0}setVisible(e){this.visible=e,this.updateVisibility()}isVisible(){return this.visible}updateVisibility(){if(this.target){let e=this.target.get3DObject();e&&(e.visible=this.visible)}}applyTo(e){this.target=e,this.updateVisibility()}})}}})),System.register("engine/renderable/entity/map/MapBounds",["engine/IsoCoords","engine/renderable/WithVisibility","util/disposable/CompositeDisposable"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){e("MapBounds",class{constructor(e){this.map=e,this.withVisibility=new r.WithVisibility,this.disposables=new s.CompositeDisposable;let t=()=>{this.target&&this.wrapperObj&&(this.target.remove(this.wrapperObj),this.wrapperObj=this.build(),this.target.add(this.wrapperObj))};e.mapBounds.onLocalResize.subscribe(t),this.disposables.add((()=>e.mapBounds.onLocalResize.unsubscribe(t)))}build(){var e=this.map.mapBounds.getClampedFullSize(),t=this.map.mapBounds.getLocalSize();let i=this.createBoundRect({x:e.x,y:e.y},{x:e.x+e.width,y:e.y+e.height},16711680);i.matrixAutoUpdate=!1;let r=this.createBoundRect({x:t.x,y:t.y},{x:t.x+t.width,y:t.y+t.height-1},255);r.matrixAutoUpdate=!1;let s=new THREE.Object3D;return s.matrixAutoUpdate=!1,s.add(i),s.add(r),s}createBoundRect(e,t,r){var s=i.IsoCoords.screenTileToWorld(e.x,e.y),n=i.IsoCoords.screenTileToWorld(t.x,t.y),a=i.IsoCoords.screenTileToWorld(t.x,e.y),o=i.IsoCoords.screenTileToWorld(e.x,t.y),l=new THREE.LineBasicMaterial({color:r,transparent:!0,depthTest:!1,depthWrite:!1});let c=new THREE.Geometry;c.vertices.push(new THREE.Vector3(s.x,0,s.y),new THREE.Vector3(o.x,0,o.y),new THREE.Vector3(n.x,0,n.y),new THREE.Vector3(a.x,0,a.y),new THREE.Vector3(s.x,0,s.y)),this.disposables.add(c,l);let h=new THREE.Line(c,l);return h.renderOrder=1e6,h}get3DObject(){return this.target}create3DObject(){if(!this.target){let e=new THREE.Object3D;e.matrixAutoUpdate=!1,e.name="map_bounds",e.visible=this.withVisibility.isVisible(),this.target=e,!this.wrapperObj&&e.visible&&(this.wrapperObj=this.build(),this.target.add(this.wrapperObj))}}update(){}setVisible(e){e!==this.withVisibility.isVisible()&&(this.withVisibility.setVisible(e),this.target&&((this.target.visible=e)?(this.wrapperObj||(this.wrapperObj=this.build()),this.target.add(this.wrapperObj)):this.wrapperObj&&this.target.remove(this.wrapperObj)))}dispose(){this.disposables.dispose()}})}}})),System.register("engine/renderable/entity/map/MapShroudLayer",["game/Coords","engine/gfx/TextureUtils","engine/gfx/SpriteUtils","util/disposable/CompositeDisposable","engine/renderable/builder/ShpTextureAtlas","data/Palette","util/Color","game/map/MapShroud","engine/gfx/BufferGeometryUtils","engine/gfx/material/PaletteBasicMaterial"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e}],execute:function(){d=[[1,32],[4,33],[8,34],[2,35],[5,36],[12,37],[10,38],[3,39],[13,40],[14,41],[11,42],[7,43],[9,44],[6,45],[15,46]].reduce(((e,t)=>(e[t[0]]=t[1],e)),new Array(16).fill(void 0)),g=[[24,16],[34,17],[50,18],[65,19],[97,20],[132,21],[152,22],[196,23],[18,24],[33,25],[68,26],[136,27],[26,28],[35,29],[69,30],[140,31]].reduce(((e,t)=>(e[t[0]]=t[1],e)),new Array(256).fill(void 0)),p=[0,5,12,13,10,15,14,15,3,7,15,15,11,15,15,15],e("MapShroudLayer",class{constructor(e,t,i){this.shroud=e,this.imageFinder=t,this.camera=i,this.disposables=new n.CompositeDisposable,this.needsIncrementalUpdate=[],this.needsFullUpdate=!1,this.onShroudChange=e=>{"incremental"===e.type?this.needsIncrementalUpdate.push(...e.coords):this.needsFullUpdate=e.type},this.camera=i}get3DObject(){return this.target}create3DObject(){let e=this.get3DObject();e||(e=new THREE.Object3D,e.name="map_shroud_layer",e.matrixAutoUpdate=!1,this.target=e,this.createTileObjects(e),this.shroud.onChange.subscribe(this.onShroudChange),this.disposables.add((()=>this.shroud.onChange.unsubscribe(this.onShroudChange))))}createTileObjects(e){var t=this.imageFinder.find("shroud",!1);let i=(new a.ShpTextureAtlas).fromShpFile(t);this.disposables.add(i);let n=new o.Palette,c=[new l.Color(0,0,0),new l.Color(0,0,0)];for(let e=0;e<254;e++){var d=Math.min(255,Math.floor(e/125*255));c.push(new l.Color(d,d,d))}n.setColors(c),t=r.TextureUtils.textureFromPalette(n);let g=[],p=0;var m=this.shroud.getSize();for(let e=0;ee.dispose()));let v=new THREE.Mesh(T,t);v.renderOrder=999999,v.matrixAutoUpdate=!1,v.frustumCulled=!1,e.add(v),this.disposables.add(T,t)}createTileGeometry(e,t,r){var{rx:n,ry:a}=this.shroud.shroudCoordsToWorld(e),a=i.Coords.tile3dToWorld(n,a,0);let o=s.SpriteUtils.createSpriteGeometry(this.getTileGeometryOptions(t,r));return o.applyMatrix((new THREE.Matrix4).makeTranslation(a.x,a.y,a.z)),o}getTileGeometryOptions(e,t){return{texture:e.getTexture(),textureArea:e.getTextureArea(t),flat:!0,align:{x:0,y:-1},camera:this.camera,scale:i.Coords.ISO_WORLD_SCALE}}update(e){var t;this.needsFullUpdate&&("cover"===this.needsFullUpdate||"clear"===this.needsFullUpdate?this.toggleAllTiles("cover"===this.needsFullUpdate?c.ShroudType.Unexplored:c.ShroudType.Explored):(this.updateAllTiles(),this.needsIncrementalUpdate=[]),this.uvAttribute.needsUpdate=!0,this.needsFullUpdate=!1),this.needsIncrementalUpdate.length&&(t=this.extendToAdjacentTiles(this.needsIncrementalUpdate),this.updateTiles(t),this.uvAttribute.needsUpdate=!0,this.needsIncrementalUpdate.length=0)}extendToAdjacentTiles(e){let t=new Map;var i,r=this.shroud.getSize();for(i of e)for(let e=-1;e<=1;e++)for(let a=-1;a<=1;a++){var s=i.sx+e,n=i.sy+a;0<=s&&0<=n&&s>1));if(0{for(var t of e)this.invalidatedRadTiles.add(t)},this._objects=[],this.init()}get3DObject(){return this.target}getGameObject(){return this.gameObj}init(){var e=this.getGameObject();this.tileLayer=new i.MapTileLayer(e,this.theater,this.art,this.imageFinder,this.camera,this.debugWireframe,this.gameSpeed,this.worldSound,this.lighting,this.useSpriteBatching),this.addObject(this.tileLayer),this.debugLayer=new r.MapTileLayerDebug(e,this.theater,this.camera),this.debugLayer.setVisible(!1),this.addObject(this.debugLayer),this.mapSurface=new s.MapSurface(e,this.theater),this.addObject(this.mapSurface),this.mapBounds=new n.MapBounds(e),this.mapBounds.setVisible(!1),this.mapShroud&&(this.shroudLayer=new a.MapShroudLayer(this.mapShroud,this.imageFinder,this.camera),this.addObject(this.shroudLayer)),this.addObject(this.mapBounds),e=new o.ShpAggregator,this.terrainLayer=new l.MapSpriteBatchLayer("map_terrain_layer",[...this.rules.terrainRules.values()].filter((e=>!e.isAnimated&&this.art.hasObject(e.name,e.type))),(()=>!1),this.theater,this.art,this.imageFinder,this.camera,this.lighting,e),this.addObject(this.terrainLayer),this.overlayLayer=new l.MapSpriteBatchLayer("map_overlay_layer",[...this.rules.overlayRules.values()].filter((e=>this.art.hasObject(e.name,e.type)&&!c.BridgeOverlayTypes.isBridge(this.rules.getOverlayId(e.name)))),(e=>e.rules.wall),this.theater,this.art,this.imageFinder,this.camera,this.lighting,e),this.addObject(this.overlayLayer),this.smudgeLayer=new l.MapSpriteBatchLayer("map_smudge_layer",[...this.rules.smudgeRules.values()].filter((e=>this.art.hasObject(e.name,e.type))),(()=>!1),this.theater,this.art,this.imageFinder,this.camera,this.lighting,e),this.addObject(this.smudgeLayer),this.mapRadiation.onChange.subscribe(this.handleRadChange)}addObject(e){this._objects.push(e)}create3DObject(){let e=this.get3DObject();if(!e){e=new THREE.Object3D,e.name="map",e.matrixAutoUpdate=!1,this.target=e;for(let t=0,i=this._objects.length;ti.update(e,t))),this.invalidatedRadTiles.size){for(var i of this.invalidatedRadTiles){var r,s=this.mapRadiation.getRadLevel(i);s?(r=Math.min(1,s/this.rules.radiation.radLevelMax),this.radTileLights.has(i)&&this.lighting.removeTileLight(i,this.radTileLights.get(i)),s=this.rules.radiation.radColor,r={intensity:this.rules.radiation.radLightFactor*r,red:s[0]/255*r,green:s[1]/255*r,blue:s[2]/255*r},this.lighting.addTileLight(i,r),this.radTileLights.set(i,r)):(this.lighting.removeTileLight(i,this.radTileLights.get(i)),this.radTileLights.delete(i))}this.lighting.forceUpdate([...this.invalidatedRadTiles]),this.invalidatedRadTiles.clear()}}updateLighting(e){this.tileLayer.updateLighting(e),this.terrainLayer.updateLighting(),this.overlayLayer.updateLighting(),this.smudgeLayer.updateLighting()}dispose(){this.mapRadiation.onChange.unsubscribe(this.handleRadChange),this.tileLayer.dispose(),this.debugLayer.dispose(),this.terrainLayer.dispose(),this.overlayLayer.dispose(),this.smudgeLayer.dispose(),this.shroudLayer?.dispose(),this.mapBounds.dispose(),this.mapSurface.dispose()}})}}})),System.register("engine/renderable/entity/plugin/HarvesterPlugin",["game/gameobject/trait/HarvesterTrait","game/Coords"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("HarvesterPlugin",class{constructor(e,t){this.gameObject=e,this.harvesterTrait=t}onCreate(e){this.renderableManager=e}update(e){if(this.gameObject.warpedOutTrait.isActive())return this.disposeHarvAnim(),void(this.lastHarvesterStatus=void 0);var t;!this.renderableManager||(t=this.harvesterTrait.status)!==this.lastHarvesterStatus&&(this.lastHarvesterStatus=t,this.disposeHarvAnim(),t===i.HarvesterStatus.Harvesting&&(this.harvestAnim=this.renderableManager.createTransientAnim("OREGATH",(e=>{var t=this.gameObject.tile;e.setPosition(r.Coords.tile3dToWorld(t.rx+.5,t.ry+.5,t.z)),e.create3DObject();let i=e.getAnimProps();var s=Math.floor(e.getShpFile().numImages/8);t=(this.gameObject.direction-45+360)%360,t=Math.round(t/360*8)%8*s;i.loopStart=i.start=t,i.loopEnd=t+s-1,i.loopCount=-1}))))}disposeHarvAnim(){this.harvestAnim?.remove(),this.harvestAnim?.dispose(),this.harvestAnim=void 0}onRemove(){this.disposeHarvAnim()}dispose(){this.disposeHarvAnim()}})}}})),System.register("engine/renderable/entity/plugin/MoveSoundFxPlugin",["game/gameobject/unit/ZoneType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("MoveSoundFxPlugin",class{constructor(e,t,i){this.gameObject=e,this.moveSound=t,this.worldSound=i,this.lastMovingOrRotating=!1}onCreate(){}update(){var e;this.gameObject.isDestroyed||this.gameObject.isCrashing||(e=!this.gameObject.warpedOutTrait.isActive()&&!!(!this.gameObject.rules.balloonHover&&this.gameObject.rules.hoverAttack&&this.gameObject.zone===i.ZoneType.Air||this.gameObject.spinVelocity||!this.gameObject.moveTrait.isIdle()&&!this.gameObject.moveTrait.isWaiting()))!==this.lastMovingOrRotating&&((this.lastMovingOrRotating=e)?this.soundHandle&&this.soundHandle.isPlaying()||(this.soundHandle=this.worldSound.playEffect(this.moveSound,this.gameObject,this.gameObject.owner,.35)):this.soundHandle?.isLoop&&(this.soundHandle.stop(),this.soundHandle=void 0))}onRemove(){this.soundHandle?.stop()}dispose(){this.soundHandle?.stop()}})}}})),System.register("engine/renderable/entity/plugin/VehicleDisguisePlugin",["engine/renderable/MapSpriteTranslation","engine/renderable/ShpRenderable","engine/type/ObjectType"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){e("VehicleDisguisePlugin",class{constructor(e,t,i,r,s,n,a,o,l,c,h,u){this.gameObject=e,this.disguiseTrait=t,this.localPlayer=i,this.alliances=r,this.renderable=s,this.art=n,this.imageFinder=a,this.theater=o,this.camera=l,this.lighting=c,this.gameSpeed=h,this.useSpriteBatching=u,this.lastRenderDisguised=!1,this.canSeeThroughDisguise=!1}onCreate(){}update(e){if(!this.gameObject.isDestroyed&&!this.gameObject.warpedOutTrait.isActive()){let i=this.disguiseTrait.isDisguised();var t=i!==this.lastDisguised;if(t&&(this.lastDisguised=i,this.disguisedAt=i?e:void 0),i&&(this.canSeeThroughDisguise=!this.localPlayer||this.alliances.haveSharedIntel(this.localPlayer,this.gameObject.owner)||!!this.localPlayer.sharedDetectDisguiseTrait?.has(this.gameObject)),i&&this.canSeeThroughDisguise&&(i=!this.localPlayer?.sharedDetectDisguiseTrait?.has(this.gameObject)&&Math.floor((e-this.disguisedAt)*this.gameSpeed.value/1e3)%16<=3),this.lastRenderDisguised!==i&&(this.lastRenderDisguised=i,this.renderable.mainObj.visible=!i,this.renderable.posObj.visible=!i||this.canSeeThroughDisguise,this.disguiseObj&&(this.disguiseObj.visible=!1),i)){if((t=this.disguiseTrait.getDisguise()).rules.type!==s.ObjectType.Terrain)throw new Error("Unsupported disguise type "+s.ObjectType[t.rules.type]);t=this.art.getObject(t.rules.name,s.ObjectType.Terrain),this.disguiseObj||(this.disguiseObj=this.createDisguiseObj(t),this.renderable.get3DObject().add(this.disguiseObj)),this.disguiseObj.visible=!0,t=this.lighting.compute(t.lightingType,this.gameObject.tile,this.gameObject.tileElevation).addScalar(-1),this.disguiseRenderable.setExtraLight(t)}}}createDisguiseObj(e){let t=new THREE.Object3D;t.matrixAutoUpdate=!1;let s=new i.MapSpriteTranslation(1,1);var{spriteOffset:n,anchorPointWorld:a}=s.compute();t.position.x=a.x,t.position.z=a.y,t.updateMatrix();var o=this.imageFinder.findByObjectArt(e),a=this.theater.getPalette(e.paletteType,e.customPaletteName);let l=r.ShpRenderable.factory(o,a,this.camera,n,e.hasShadow);return l.setBatched(this.useSpriteBatching),this.useSpriteBatching&&l.setBatchPalettes([a]),l.setFrame(0),l.create3DObject(),t.add(l.get3DObject()),this.disguiseRenderable=l,t}updateLighting(){if(this.disguiseObj?.visible&&this.disguiseRenderable){var e=this.disguiseTrait.getDisguise();if(e){if(e.rules.type!==s.ObjectType.Terrain)throw new Error("Unsupported disguise type "+s.ObjectType[e.rules.type]);e=this.art.getObject(e.rules.name,s.ObjectType.Terrain),this.disguiseRenderable.setExtraLight(this.lighting.compute(e.lightingType,this.gameObject.tile,this.gameObject.tileElevation).addScalar(-1))}}}onRemove(){this.disguiseObj&&(this.renderable.get3DObject().remove(this.disguiseObj),this.disguiseObj=void 0)}getUiNameOverride(){if(this.gameObject.disguiseTrait?.hasTerrainDisguise()&&!this.canSeeThroughDisguise)return""}shouldDisableHighlight(){return!!this.gameObject.disguiseTrait?.hasTerrainDisguise()&&!this.canSeeThroughDisguise}dispose(){this.disguiseRenderable?.dispose()}})}}})),System.register("engine/renderable/entity/plugin/ChronoSparkleFxPlugin",["game/Coords"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("ChronoSparkleFxPlugin",class{constructor(e,t){this.gameObject=e,this.sparkleAnimName=t,this.objMoveTrait=e.isUnit()?e.moveTrait:void 0}onCreate(e){this.renderableManager=e}update(){if(!this.gameObject.isDestroyed&&!this.gameObject.isCrashing&&this.renderableManager){var e=this.objMoveTrait?.lastTeleportTick,t=e!==this.lastTeleport;let r=this.gameObject.warpedOutTrait.isActive();(r!==this.lastWarpedOut||t)&&(this.lastTeleport=e,(this.lastWarpedOut=r)||t?(this.chronoSparkleAnim?.endAnimationLoop(),this.chronoSparkleAnim=this.renderableManager.createTransientAnim(this.sparkleAnimName,(e=>{e.extraOffset={x:0,y:i.Coords.ISO_TILE_SIZE/2},e.setPosition(this.gameObject.position.worldPosition.clone()),e.create3DObject(),e.getAnimProps().loopCount=r?-1:1}))):r||this.chronoSparkleAnim?.endAnimationLoop())}}onRemove(){this.renderableManager=void 0,this.chronoSparkleAnim?.endAnimationLoop()}dispose(){}})}}})),System.register("engine/renderable/entity/plugin/TntFxPlugin",["engine/type/ObjectType","engine/sound/SoundKey"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("TntFxPlugin",class{constructor(e,t,i,r,s,n,a,o,l,c){this.gameObject=e,this.tntChargeTrait=t,this.frameDurationTicks=i,this.renderable=r,this.imageFinder=s,this.art=n,this.alliances=a,this.viewer=o,this.worldSound=l,this.animFactory=c,this.lastHasCharge=!1}onCreate(){this.animStepCount=Math.floor(this.imageFinder.findByObjectArt(this.art.getObject("BOMBCURS",i.ObjectType.Animation)).numImages/2)}update(e){if(this.gameObject.isDestroyed||this.gameObject.isCrashing)this.gameObject.rules.leaveRubble&&(this.disposeBombAnim(),this.soundHandle?.stop());else{var t=this.tntChargeTrait.hasCharge(),i=t!==this.lastHasCharge;let n;n=t?(s=1-this.tntChargeTrait.getTicksLeft()/this.tntChargeTrait.getInitialTicks(),Math.floor(2*s*(this.animStepCount-1))):0;var s=n!==this.lastStartFrame;if(this.bombAnim?.update(e),i||s)if(this.lastHasCharge=t,this.lastStartFrame=n,t){if(i&&(this.soundHandle?.stop(),this.soundHandle=this.worldSound?.playEffect(r.SoundKey.BombTickingSound,this.gameObject)),this.disposeBombAnim(),i=this.gameObject.tntChargeTrait.getChargeOwner(),!this.viewer||this.alliances.haveSharedIntel(i,this.viewer)){let e=this.bombAnim=this.animFactory("BOMBCURS");e.setRenderOrder(999995),e.create3DObject();let t=e.getAnimProps();t.loopCount=-1,t.start=t.loopStart=n,t.end=n+2-1,t.loopEnd=t.end,t.rate/=this.frameDurationTicks,this.renderable.get3DObject()?.add(e.get3DObject())}}else this.disposeBombAnim(),this.soundHandle?.stop()}}disposeBombAnim(){this.bombAnim?.get3DObject()&&this.renderable.get3DObject()?.remove(this.bombAnim.get3DObject()),this.bombAnim?.dispose()}onRemove(){this.disposeBombAnim(),this.soundHandle?.stop()}dispose(){this.disposeBombAnim(),this.soundHandle?.stop()}})}}})),System.register("engine/renderable/fx/MindControlLinkFx",["game/Coords"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("MindControlLinkFx",class{constructor(e,t,i,r){this.sourcePos=e,this.targetPos=t,this.color=i,this.heightTiles=r,this.colorAnimProgress=0}setContainer(e){this.container=e}get3DObject(){return this.lineMesh}create3DObject(){this.lineMesh||(this.lineMesh=this.createObject(),this.lineMesh.name="fx_mclink")}updateEndpoints(e,t){var i=!e.equals(this.sourcePos)||!t.equals(this.targetPos);this.sourcePos=e,this.targetPos=t,i&&this.lineMesh&&(this.lineMesh.geometry.dispose(),this.lineMesh.geometry=this.createLineGeometry(this.sourcePos,this.targetPos,this.heightTiles,this.color,this.colorAnimProgress))}update(e){this.lastUpdate??(this.lastUpdate=e),this.colorAnimProgress+=(e-this.lastUpdate)/1e3,this.colorAnimProgress-=Math.floor(this.colorAnimProgress),this.lastUpdate=e,this.lineMesh.geometry.dispose(),this.lineMesh.geometry=this.createLineGeometry(this.sourcePos,this.targetPos,this.heightTiles,this.color,this.colorAnimProgress)}createObject(){var e=this.sourcePos,t=this.targetPos;e=this.createLineGeometry(e,t,this.heightTiles,this.color,this.colorAnimProgress),t=new THREE.LineBasicMaterial({vertexColors:THREE.VertexColors,transparent:!0});let i=new THREE.Line(e,t);return i.renderOrder=1e6,i}createLineGeometry(e,t,r,s,n){var a=new THREE.Color(16777215),o=1.5*n,l=t.clone().sub(e).length()/i.Coords.LEPTONS_PER_TILE,c=Math.floor(15*l);let h=new Float32Array(3*c),u=new Float32Array(3*c),d=new THREE.Vector3;for(let n=0;n<=c;n++){var g=n/c;d.lerpVectors(e,t,g),d.y+=i.Coords.LEPTONS_PER_TILE/4+r*i.Coords.LEPTONS_PER_TILE*Math.sin(g*Math.PI),h[3*n]=d.x,h[3*n+1]=d.y,h[3*n+2]=d.z;let l=s;ge.removeAndDispose())),this.links.clear()}})}}})),System.register("engine/renderable/entity/plugin/InfantryDisguisePlugin",["engine/type/ObjectType"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("InfantryDisguisePlugin",class{constructor(e,t,i,r,s,n,a){this.gameObject=e,this.disguiseTrait=t,this.localPlayer=i,this.alliances=r,this.renderable=s,this.art=n,this.gameSpeed=a,this.canSeeThroughDisguise=!1}onCreate(){}update(e){if(!this.gameObject.isDestroyed&&!this.gameObject.warpedOutTrait.isActive()){let r=this.disguiseTrait.getDisguise();var t;r!==this.lastDisguise&&(this.lastDisguise=r,this.disguisedAt=r?e:void 0),r&&(this.canSeeThroughDisguise=!this.localPlayer||this.alliances.haveSharedIntel(this.localPlayer,this.gameObject.owner)||!!this.localPlayer.sharedDetectDisguiseTrait?.has(this.gameObject)),r&&this.canSeeThroughDisguise&&(r=this.localPlayer?.sharedDetectDisguiseTrait?.has(this.gameObject)?void 0:Math.floor((e-this.disguisedAt)*this.gameSpeed.value/1e3)%16<=3?r:void 0),this.lastRenderDisguise!==r&&(this.lastRenderDisguise=r,r?(t=this.art.getObject(r.rules.name,i.ObjectType.Infantry),this.renderable.setDisguise({objectArt:t,owner:r.owner})):this.renderable.setDisguise(void 0))}}onRemove(){}getUiNameOverride(){var e=this.gameObject.disguiseTrait?.getDisguise();if(e&&!this.canSeeThroughDisguise)return e.rules.uiName}dispose(){}})}}})),System.register("engine/renderable/fx/DetectionLineFx",["three.meshline","game/Coords"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=new THREE.Color(16777215),e("DetectionLineFx",n=class e{constructor(e,t,i,r,s){this.camera=e,this.sourcePos=t,this.targetPos=i,this.color=r,this.renderOrder=s,this.needsUpdate=!1,this.cameraHash=this.camera.top+"_"+this.camera.right,this.computedColor=r,this.lineHeadMaterial=new THREE.MeshBasicMaterial({color:16777215,transparent:!0,depthTest:!1,depthWrite:!1})}setContainer(e){this.container=e}get3DObject(){return this.wrapper}create3DObject(){this.wrapper||(this.wrapper=new THREE.Object3D,this.wrapper.name="fx_detectionline",this.lineMesh=this.createLineMesh(),this.srcLineHead=this.createLineHead(),this.destLineHead=this.createLineHead(),this.wrapper.add(this.srcLineHead),this.wrapper.add(this.destLineHead),this.wrapper.add(this.lineMesh),this.needsUpdate=!0)}update(e){this.lastUpdateMillis||(this.lastUpdateMillis=e);var t=(e-this.lastUpdateMillis)/(1e3/120);this.lastUpdateMillis=e;var i=this.camera.top+"_"+this.camera.right;i!==this.cameraHash&&(this.cameraHash=i,this.lineMesh.material.uniforms.resolution.value.copy(this.computeResolution(this.camera)));let r=this.lineMesh.material;this.needsUpdate&&(this.needsUpdate=!1,this.lineMesh.geometry.dispose(),this.lineMesh.geometry=this.createLineGeometry(this.sourcePos,this.targetPos),i=this.sourcePos.distanceTo(this.targetPos),r.uniforms.dashArray.value=this.computeDashArray(i),this.srcLineHead.position.copy(this.sourcePos),this.destLineHead.position.copy(this.targetPos)),r.uniforms.dashOffset.value-=r.uniforms.dashArray.value/50*t,t=Math.sin(e%1e3/1e3*Math.PI);let n=this.computedColor.copy(this.color).lerp(s,t);this.lineMesh.material.uniforms.color.value=n.clone(),this.lineHeadMaterial.color.set(n)}createLineMesh(){let e=this.sourcePos.clone();var t=this.targetPos.clone();let i=new THREE.Mesh(this.createLineGeometry(e,t),this.createLineMaterial(this.color.clone(),e.distanceTo(t)));return i.renderOrder=this.renderOrder,i}createLineGeometry(e,t){let r=new THREE.Geometry;r.vertices.push(e,t);let s=new i.MeshLine;return s.setGeometry(r),s.geometry}createLineMaterial(e,t){return new i.MeshLineMaterial({color:e,lineWidth:1,resolution:this.computeResolution(this.camera),transparent:!0,sizeAttenuation:0,dashArray:this.computeDashArray(t),depthTest:!1})}createLineHead(){let t=new THREE.Mesh(e.lineHeadGeometry,this.lineHeadMaterial);var i=(new THREE.Quaternion).setFromEuler(this.camera.rotation);return t.setRotationFromQuaternion(i),t.renderOrder=this.renderOrder,t}computeDashArray(e){return Math.min(1,5/e)*r.Coords.ISO_WORLD_SCALE}computeResolution(e){var t=e.top,i=e.right/e.top,s=2*t/Math.cos(e.rotation.y);return new THREE.Vector2(s*i,s).multiplyScalar(t*Math.cos(this.camera.rotation.x)/r.Coords.ISO_WORLD_SCALE)}remove(){this.container.remove(this)}dispose(){this.wrapper&&(this.lineMesh.geometry.dispose(),this.lineMesh.material.dispose(),this.lineHeadMaterial.dispose())}}),n.lineHeadGeometry=new THREE.PlaneGeometry(3*r.Coords.ISO_WORLD_SCALE,3*r.Coords.ISO_WORLD_SCALE)}}})),System.register("engine/renderable/entity/building/PsychicDetectPlugin",["engine/renderable/fx/DetectionLineFx"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("PsychicDetectPlugin",class{constructor(e,t,i,r){this.gameObject=e,this.psychicDetectorTrait=t,this.localPlayer=i,this.camera=r,this.lineEffects=new Map}onCreate(e){this.renderableManager=e}update(e){if(this.localPlayer===this.gameObject.owner){let e=this.psychicDetectorTrait.detectionLines;var t,r,s,n,a=e!==this.lastDetectionLines;this.lastDetectionLines=e;let d=e.map((e=>({hash:e.source.id+"_"+(e.target.obj?.id??e.target.tile.id),line:e})));if(a){for(let e of this.lineEffects.keys())d.find((({hash:t})=>t===e))||(this.disposeLine(this.lineEffects.get(e)),this.lineEffects.delete(e));for(var{line:o,hash:l}of d)this.lineEffects.has(l)||(t=o.source.position.worldPosition.clone(),r=o.target.getWorldCoords().clone(),o=new THREE.Color(o.source.owner.color.asHex()),o=new i.DetectionLineFx(this.camera,t,r,o,1e6),this.lineEffects.set(l,o),this.renderableManager.addEffect(o))}for({line:s,hash:n}of d){let e=this.lineEffects.get(n);if(!e)throw new Error("Line hash should have been found");var c=s.source.position.worldPosition.clone(),h=s.target.getWorldCoords().clone(),u=new THREE.Color(s.source.owner.color.asHex());e.color.equals(u)||(e.color.copy(u),e.needsUpdate=!0),e.sourcePos.equals(c)||(e.sourcePos.copy(c),e.needsUpdate=!0),e.targetPos.equals(h)||(e.targetPos.copy(h),e.needsUpdate=!0)}}else this.lineEffects.forEach((e=>this.disposeLine(e)))}onRemove(){this.renderableManager=void 0,this.dispose()}dispose(){this.lineEffects.forEach((e=>this.disposeLine(e)))}disposeLine(e){e.remove(),e.dispose()}})}}})),System.register("engine/gfx/ImageUtils",["data/Bitmap","engine/gfx/CanvasUtils"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("ImageUtils",class e{static async convertShpToPng(t,i){var s=e.convertShpToCanvas(t,i);return await r.CanvasUtils.canvasToBlob(s)}static convertShpToBitmap(e,t,r=!1){let s=0,n=0,a=e.width,o=e.height;a!==o&&r&&(s=a>o?0:Math.floor((o-a)/2),n=a>o?Math.floor((a-o)/2):0,a=o=Math.max(a,o));let l=new i.IndexedBitmap(e.numImages*a,o);for(let t=0;te.dispose())),this.textureCache.clear()}setContainer(e){this.container=e}create3DObject(){if(!this.particleGroup){let a=e.textureCache.get(this.shpFile);a||(n=r.ImageUtils.convertShpToCanvas(this.shpFile,this.palette,!0),a=new THREE.Texture(n),a.minFilter=THREE.NearestFilter,a.magFilter=THREE.NearestFilter,a.needsUpdate=!0,a.flipY=!0,e.textureCache.set(this.shpFile,a)),this.particleGroup=new SPE.Group({texture:{value:a,frames:new THREE.Vector2(this.shpFile.numImages,1),frameCount:this.shpFile.numImages,loop:1},maxParticleCount:1e3,hasPerspective:!1,transparent:!0,alphaTest:0,blending:THREE.NormalBlending}),this.particleGroup.mesh.name="fx_trailer_smoke",this.particleGroup.mesh.frustumCulled=!1;var t=new i.AnimProps(this.smokeArt.art,this.shpFile),n=(this.smokeArt.art.getBool("Normalized")?2:1)*t.rate/this.spawnDelayFrames;t=this.particleMaxAge=this.shpFile.numImages/t.rate,t=this.particleEmitter=new SPE.Emitter({particleCount:s,maxAge:{value:t},activeMultiplier:n/(s/t),position:{value:this.pos},acceleration:{value:new THREE.Vector3},velocity:{value:new THREE.Vector3},opacity:{value:this.smokeArt.translucent?[1,0]:1-this.smokeArt.translucency},size:{value:Math.max(this.shpFile.height,this.shpFile.width)}});this.particleGroup.addEmitter(t)}}get3DObject(){return this.particleGroup?.mesh}update(e){var t;this.particleEmitter.position.value=this.pos,this.lastUpdateMillis?(t=e-this.lastUpdateMillis,this.particleGroup.tick(t/1e3*this.gameSpeed.value)):(this.firstUpdateMillis=e,this.particleGroup.tick(0)),this.lastUpdateMillis=e,this.finishRequested&&(this.finishRequested=!1,this.finishProcessed||(this.finishProcessed=!0,t=(e-this.firstUpdateMillis)/1e3*this.gameSpeed.value,this.lifetimeSeconds=t+this.particleMaxAge),this.particleEmitter.alive&&this.particleEmitter.disable()),this.timeLeft=Math.max(0,1-(e-this.firstUpdateMillis)/(1e3*this.lifetimeSeconds/this.gameSpeed.value)),this.timeLeft||(this.container.remove(this),this.dispose())}finishAndRemove(){this.finishRequested=!0}disable(){this.particleEmitter.disable()}enable(){this.particleEmitter.enable()}dispose(){this.particleGroup?.mesh.geometry.dispose(),this.particleGroup?.mesh.material.dispose()}}),n.textureCache=new Map}}})),System.register("engine/renderable/entity/plugin/TrailerSmokePlugin",["engine/renderable/fx/TrailerSmokeFx"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("TrailerSmokePlugin",class{constructor(e,t,i,r,s){this.gameObject=e,this.art=t,this.theater=i,this.imageFinder=r,this.gameSpeed=s}onCreate(e){this.initialPosition=this.gameObject.position.worldPosition.clone(),this.renderableManager=e}update(e){if(this.renderableManager&&!this.trailerFx&&!this.gameObject.position.worldPosition.equals(this.initialPosition)){if(this.gameObject.isAircraft()){let e;this.gameObject.rules.missileSpawn?e=this.art.getAnimation("V3TRAIL"):this.gameObject.isCrashing&&(e=this.art.getAnimation("SGRYSMK1")),e&&(r=this.imageFinder.findByObjectArt(e),s=this.theater.getPalette(e.paletteType),t=this.gameObject.art.spawnDelay,this.trailerFx=new i.TrailerSmokeFx(this.gameObject.position.worldPosition,t,e,r,s,this.gameSpeed),this.renderableManager.addEffect(this.trailerFx))}var t,r,s,n;!this.gameObject.isProjectile()&&!this.gameObject.isDebris()||(n=this.gameObject.isProjectile()?this.gameObject.art.trailer:this.gameObject.rules.trailerAnim)&&(t=this.art.getAnimation(n),r=this.imageFinder.findByObjectArt(t),s=this.theater.getPalette(t.paletteType),n=this.gameObject.isProjectile()?this.gameObject.art.spawnDelay:this.gameObject.rules.trailerSeparation,this.trailerFx=new i.TrailerSmokeFx(this.gameObject.position.worldPosition,n,t,r,s,this.gameSpeed),this.renderableManager.addEffect(this.trailerFx))}}onRemove(e){this.renderableManager=void 0,this.trailerFx?.finishAndRemove()}dispose(){this.trailerFx?.finishAndRemove()}})}}})),System.register("engine/renderable/fx/DamageSmokeFx",["engine/AnimProps","engine/gfx/ImageUtils"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=1e3,e("DamageSmokeFx",n=class e{constructor(e,t,i,r,s){this.gameObject=e,this.smokeArt=t,this.shpFile=i,this.palette=r,this.gameSpeed=s,this.lifetimeSeconds=Number.POSITIVE_INFINITY,this.finishRequested=!1}static clearTextureCache(){this.textureCache.forEach((e=>e.dispose())),this.textureCache.clear()}setContainer(e){this.container=e}create3DObject(){if(!this.particleGroup){let l=e.textureCache.get(this.shpFile);l||(a=r.ImageUtils.convertShpToCanvas(this.shpFile,this.palette,!0),l=new THREE.Texture(a),l.minFilter=THREE.NearestFilter,l.magFilter=THREE.NearestFilter,l.needsUpdate=!0,l.flipY=!1,e.textureCache.set(this.shpFile,l)),this.particleGroup=new SPE.Group({texture:{value:l,frames:new THREE.Vector2(this.shpFile.numImages,1),frameCount:this.shpFile.numImages,loop:1},maxParticleCount:1e3,hasPerspective:!1,transparent:!0,alphaTest:0,blending:THREE.NormalBlending}),this.particleGroup.mesh.name="fx_damage_smoke",this.particleGroup.mesh.frustumCulled=!1;var t=new i.AnimProps(this.smokeArt.art,this.shpFile),n=(o=(this.smokeArt.art.getBool("Normalized")?2:1)*t.rate)/10,a=this.particleMaxAge=2*this.shpFile.numImages/t.rate,o=(t=9*o,.05*o);t=this.particleEmitter=new SPE.Emitter({particleCount:s,maxAge:{value:a},activeMultiplier:n/(s/a),position:{value:this.computeEmitterPosition()},acceleration:{value:new THREE.Vector3(0,-o,0),spread:new THREE.Vector3(2,0,2)},velocity:{value:new THREE.Vector3(0,t,0),spread:new THREE.Vector3(.1*t,0,.1*t)},opacity:{value:.5},size:{value:Math.max(this.shpFile.height,this.shpFile.width)}});this.particleGroup.addEmitter(t)}}computeEmitterPosition(){return this.gameObject.position.worldPosition.clone().add(this.gameObject.rules.damageSmokeOffset)}get3DObject(){return this.particleGroup?.mesh}update(e){var t;this.particleEmitter.position.value=this.computeEmitterPosition(),this.lastUpdateMillis?(t=e-this.lastUpdateMillis,this.particleGroup.tick(t/1e3*this.gameSpeed.value)):(this.firstUpdateMillis=e,this.particleGroup.tick(0)),this.lastUpdateMillis=e,this.finishRequested&&(this.finishRequested=!1,this.particleEmitter.alive&&(t=(e-this.firstUpdateMillis)/1e3*this.gameSpeed.value,this.lifetimeSeconds=t+this.particleMaxAge,this.particleEmitter.disable())),this.timeLeft=Math.max(0,1-(e-this.firstUpdateMillis)/(1e3*this.lifetimeSeconds/this.gameSpeed.value)),this.timeLeft||(this.container.remove(this),this.dispose())}finishAndRemove(){this.finishRequested=!0}dispose(){this.particleGroup?.mesh.geometry.dispose(),this.particleGroup?.mesh.material.dispose()}}),n.textureCache=new Map}}})),System.register("engine/renderable/entity/plugin/DamageSmokePlugin",["engine/renderable/fx/DamageSmokeFx"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("DamageSmokePlugin",class{constructor(e,t,i,r,s){this.gameObject=e,this.art=t,this.theater=i,this.imageFinder=r,this.gameSpeed=s}onCreate(e){this.renderableManager=e}update(e){var t,r,s;this.renderableManager&&((s=this.gameObject.healthTrait.health<50)===this.lastDamaged||this.gameObject.isDestroyed||((this.lastDamaged=s)?this.smokeFx||(this.smokeStartTime=e,(t=this.art.getAnimation("SGRYSMK1"))&&(r=this.imageFinder.findByObjectArt(t),s=this.theater.getPalette(t.paletteType),this.smokeFx=new i.DamageSmokeFx(this.gameObject,t,r,s,this.gameSpeed),this.renderableManager.addEffect(this.smokeFx))):this.disposeSmokeFx()),this.smokeFx&&this.smokeStartTime&&e-this.smokeStartTime>=8e4/this.gameSpeed.value&&this.disposeSmokeFx())}disposeSmokeFx(){this.smokeFx&&(this.smokeFx.finishAndRemove(),this.smokeFx=void 0)}onRemove(e){this.renderableManager=void 0,this.disposeSmokeFx()}dispose(){this.disposeSmokeFx()}})}}})),System.register("engine/renderable/entity/plugin/ShipWakeTrailPlugin",["game/Coords","engine/renderable/fx/TrailerSmokeFx","game/gameobject/unit/ZoneType","game/type/LandType","game/type/LocomotorType"],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){e("ShipWakeTrailPlugin",class{constructor(e,t,i,r,s,n){this.gameObject=e,this.rules=t,this.art=i,this.theater=r,this.imageFinder=s,this.gameSpeed=n,this.trailPos=new THREE.Vector3}onCreate(e){this.renderableManager=e}update(e){var t,o,l,c,h,u;this.renderableManager&&(this.trailPos.copy(this.gameObject.position.worldPosition),this.trailPos.y=i.Coords.tileHeightToWorld(this.gameObject.tile.z),this.gameObject.rules.locomotor===a.LocomotorType.Hover&&(l=this.rules.general.hover.height,this.trailPos.x-=l,this.trailPos.z-=l),t=(c=this.gameObject.moveTrait.isMoving())!==this.lastMoving,o=(h=this.gameObject.submergibleTrait?.isSubmerged())!==this.lastSubmerged,l=(u=this.gameObject.zone===s.ZoneType.Water&&this.gameObject.tile.landType===n.LandType.Water)!==this.lastInWater,(t||o||l)&&(this.lastMoving=c,this.lastSubmerged=h,this.lastInWater=u,c&&!h&&u?this.trailerFx?this.trailerFx.enable():(l=this.art.getAnimation(this.rules.audioVisual.wake))&&(c=this.imageFinder.findByObjectArt(l),h=this.theater.getPalette(l.paletteType),u=this.gameObject.art.spawnDelay,this.trailerFx=new r.TrailerSmokeFx(this.trailPos,u,l,c,h,this.gameSpeed),this.renderableManager.addEffect(this.trailerFx)):this.trailerFx?.disable()))}onRemove(e){this.renderableManager=void 0,this.trailerFx?.finishAndRemove()}dispose(){this.trailerFx?.finishAndRemove()}})}}})),System.register("engine/renderable/entity/plugin/ObjectCloakPlugin",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("ObjectCloakPlugin",class{constructor(e,t,i,r){this.gameObject=e,this.localPlayer=t,this.alliances=i,this.renderable=r,this.lastCanSeeThroughCloak=!1}onCreate(){}update(e){var t=!!this.gameObject.cloakableTrait?.isCloaked()&&!this.gameObject.isDestroyed,i=t!==this.lastCloaked,r=t&&(!this.localPlayer||this.alliances.haveSharedIntel(this.localPlayer,this.gameObject.owner)),s=r!==this.lastCanSeeThroughCloak;(i||s)&&(this.lastCloaked=t,this.lastCanSeeThroughCloak=r,this.renderable.get3DObject().visible=!t||r)}onRemove(){}dispose(){}})}}})),System.register("engine/renderable/entity/Debris",["engine/renderable/WithPosition","engine/renderable/ShpRenderable","engine/renderable/MapSpriteTranslation","engine/Animation","engine/AnimProps","engine/animation/SimpleRunner","game/Coords","engine/renderable/ShadowRenderable"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e}],execute:function(){e("Debris",class{constructor(e,t,i,r,s,n,a,o,l,c,h){this.gameObject=e,this.rules=t,this.imageFinder=i,this.voxels=r,this.palette=n,this.camera=a,this.lighting=o,this.gameSpeed=l,this.vxlBuilderFactory=c,this.useSpriteBatching=h,this.plugins=[],this.objectRules=e.rules,this.objectArt=e.art,this.label="debris_"+this.objectRules.name,this.init()}init(){this.baseShpExtraLight=this.lighting.compute(this.objectArt.lightingType,this.gameObject.tile,this.gameObject.tileElevation).addScalar(-1),this.baseVxlExtraLight=(new THREE.Vector3).addScalar(this.lighting.computeNoAmbient(this.objectArt.lightingType,this.gameObject.tile,this.gameObject.tileElevation)),this.vxlExtraLight=(new THREE.Vector3).copy(this.baseVxlExtraLight),this.shpExtraLight=(new THREE.Vector3).copy(this.baseShpExtraLight),this.withPosition=new i.WithPosition}registerPlugin(e){this.plugins.push(e)}updateLighting(){this.plugins.forEach((e=>e.updateLighting?.())),this.baseShpExtraLight=this.lighting.compute(this.objectArt.lightingType,this.gameObject.tile,this.gameObject.tileElevation).addScalar(-1),this.baseVxlExtraLight=(new THREE.Vector3).addScalar(this.lighting.computeNoAmbient(this.objectArt.lightingType,this.gameObject.tile,this.gameObject.tileElevation)),this.vxlExtraLight.copy(this.baseVxlExtraLight),this.shpExtraLight.copy(this.baseShpExtraLight)}get3DObject(){return this.target}create3DObject(){let e=this.get3DObject();e||(e=new THREE.Object3D,e.name=this.label,this.target=e,e.matrixAutoUpdate=!1,this.withPosition.matrixUpdate=!0,this.withPosition.applyTo(this),this.createObjects(e),this.vxlBuilder?.setExtraLight(this.vxlExtraLight),this.shpRenderable?.setExtraLight(this.shpExtraLight))}setPosition(e){this.withPosition.setPosition(e.x,e.y,e.z)}getPosition(){return this.withPosition.getPosition()}update(e,t=0){this.plugins.forEach((t=>t.update(e)));var i=this.gameObject.tile.z+this.gameObject.tileElevation;if((void 0===this.lastElevation||this.lastElevation!==i)&&(this.lastElevation=i,this.baseVxlExtraLight=(new THREE.Vector3).addScalar(this.lighting.computeNoAmbient(this.objectArt.lightingType,this.gameObject.tile,this.gameObject.tileElevation)),this.baseShpExtraLight=this.lighting.compute(this.objectArt.lightingType,this.gameObject.tile,this.gameObject.tileElevation).addScalar(-1),this.vxlExtraLight.copy(this.baseVxlExtraLight),this.shpExtraLight.copy(this.baseShpExtraLight),this.shadowWrap&&(this.shadowWrap.position.y=-l.Coords.tileHeightToWorld(this.gameObject.tileElevation),this.shadowWrap.updateMatrix())),0t.onCreate(e)))}onRemove(e){var t;this.plugins.forEach((t=>t.onRemove(e))),this.gameObject.isDestroyed&&this.get3DObject()&&(t=this.gameObject.explodeAnim)&&e.createTransientAnim(t,(e=>e.setPosition(this.withPosition.getPosition())))}dispose(){this.plugins.forEach((e=>e.dispose())),this.shpRenderable?.dispose(),this.shpShadowRenderable?.dispose(),this.vxlBuilder?.dispose()}})}}})),System.register("engine/renderable/entity/RenderableFactory",["engine/renderable/entity/Building","engine/renderable/entity/Vehicle","engine/renderable/entity/Terrain","engine/renderable/entity/Overlay","engine/renderable/entity/Smudge","engine/renderable/entity/building/AnimationType","engine/renderable/entity/Infantry","engine/renderable/entity/PipOverlay","engine/renderable/entity/Aircraft","engine/renderable/entity/TransientAnim","engine/renderable/entity/Projectile","engine/type/ObjectType","engine/renderable/entity/plugin/HarvesterPlugin","engine/renderable/entity/Anim","engine/renderable/entity/plugin/MoveSoundFxPlugin","engine/renderable/entity/plugin/VehicleDisguisePlugin","engine/renderable/entity/plugin/ChronoSparkleFxPlugin","engine/renderable/entity/plugin/TntFxPlugin","engine/renderable/entity/plugin/MindControlLinkPlugin","engine/renderable/entity/plugin/InfantryDisguisePlugin","engine/renderable/entity/building/PsychicDetectPlugin","engine/renderable/entity/plugin/TrailerSmokePlugin","engine/renderable/entity/plugin/DamageSmokePlugin","game/type/LocomotorType","engine/renderable/entity/plugin/ShipWakeTrailPlugin","engine/renderable/entity/plugin/ObjectCloakPlugin","engine/renderable/entity/Debris","engine/renderable/builder/ShpAggregator"],(function(e,t){"use strict";var i,r,s,n,a,o,l,c,h,u,d,g,p,m,f,y,T,v,b,S,w,C,E,x,O,A,M,R;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e},function(e){o=e},function(e){l=e},function(e){c=e},function(e){h=e},function(e){u=e},function(e){d=e},function(e){g=e},function(e){p=e},function(e){m=e},function(e){f=e},function(e){y=e},function(e){T=e},function(e){v=e},function(e){b=e},function(e){S=e},function(e){w=e},function(e){C=e},function(e){E=e},function(e){x=e},function(e){O=e},function(e){A=e},function(e){M=e},function(e){R=e}],execute:function(){e("RenderableFactory",class{constructor(e,t,i,r,s,n,a,o,l,c,h,u,d,g,p,m,f,y,T,v,b,S,w,C=!1,E=!1){this.localPlayer=e,this.unitSelection=t,this.alliances=i,this.rules=r,this.art=s,this.mapRenderable=n,this.imageFinder=a,this.palettes=o,this.voxels=l,this.voxelAnims=c,this.theater=h,this.camera=u,this.lighting=d,this.lightingDirector=g,this.debugWireframes=p,this.debugText=m,this.gameSpeed=f,this.worldSound=y,this.strings=T,this.flyerHelperOpt=v,this.hiddenObjectsOpt=b,this.vxlBuilderFactory=S,this.buildingImageDataCache=w,this.useSpriteBatching=C,this.useMeshInstancing=E,this.bridgeImageCache=new Map}createTransientAnim(e,t){var i=this.art.getObject(e,g.ObjectType.Animation);return new u.TransientAnim(e,i,{x:0,y:0},this.imageFinder,this.theater,this.camera,this.debugWireframes,this.gameSpeed,this.useSpriteBatching,t,this.worldSound)}createAnim(e){var t=this.art.getObject(e,g.ObjectType.Animation);return new m.Anim(e,t,{x:0,y:0},this.imageFinder,this.theater,this.camera,this.debugWireframes,this.gameSpeed,this.useSpriteBatching,void 0,this.worldSound)}create(e){let t=this.theater.getPalette(e.art.paletteType,e.art.customPaletteName),u=[];if((e.isAircraft()||e.isProjectile()||e.isDebris())&&u.push(new C.TrailerSmokePlugin(e,this.art,this.theater,this.imageFinder,this.gameSpeed)),e.isTechno()){t=t.clone();var g=this.unitSelection.getOrCreateSelectionModel(e),m=new c.PipOverlay(this.rules.general.paradrop,this.rules.audioVisual,e,this.localPlayer,this.alliances,g,this.imageFinder,this.palettes.get("palette.pal"),this.camera,this.strings,this.flyerHelperOpt,this.hiddenObjectsOpt,this.debugText,(e=>this.createAnim(e)),this.useSpriteBatching,this.useMeshInstancing);let s;if(!e.isUnit()||(I=e.rules.moveSound)&&this.worldSound&&u.push(new f.MoveSoundFxPlugin(e,I,this.worldSound)),u.push(new T.ChronoSparkleFxPlugin(e,this.rules.audioVisual.chronoSparkle1)),e.mindControllerTrait&&u.push(new b.MindControlLinkPlugin(e,g,this.alliances,this.localPlayer)),e.isBuilding()){var P=this.theater.animPalette,I=this.theater.isoPalette;s=new i.Building(e,g,this.rules,this.art,this.imageFinder,this.theater,this.voxels,this.voxelAnims,t,P,I,this.camera,this.lighting,this.debugWireframes,this.gameSpeed,this.vxlBuilderFactory,this.useSpriteBatching,new R.ShpAggregator,this.buildingImageDataCache,m,this.worldSound,o.AnimationType.BUILDUP),e.psychicDetectorTrait&&u.push(new w.PsychicDetectPlugin(e,e.psychicDetectorTrait,this.localPlayer,this.camera))}else if(e.isVehicle())s=new r.Vehicle(e,this.rules,this.art,this.imageFinder,this.theater,this.voxels,this.voxelAnims,t,this.camera,this.lighting,this.debugWireframes,this.gameSpeed,g,this.vxlBuilderFactory,this.useSpriteBatching,m,this.worldSound),e.rules.damageParticleSystems.length&&u.push(new E.DamageSmokePlugin(e,this.art,this.theater,this.imageFinder,this.gameSpeed)),e.rules.locomotor!==x.LocomotorType.Ship&&e.rules.locomotor!==x.LocomotorType.Hover||u.push(new O.ShipWakeTrailPlugin(e,this.rules,this.art,this.theater,this.imageFinder,this.gameSpeed)),e.harvesterTrait&&this.mapRenderable&&u.push(new p.HarvesterPlugin(e,e.harvesterTrait)),e.disguiseTrait&&u.push(new y.VehicleDisguisePlugin(e,e.disguiseTrait,this.localPlayer,this.alliances,s,this.art,this.imageFinder,this.theater,this.camera,this.lighting,this.gameSpeed,this.useSpriteBatching));else if(e.isInfantry())s=new l.Infantry(e,this.rules,this.art,this.imageFinder,this.theater,t,this.camera,this.lighting,this.debugWireframes,this.gameSpeed,g,this.useSpriteBatching,this.useMeshInstancing,m,this.worldSound),e.disguiseTrait&&u.push(new S.InfantryDisguisePlugin(e,e.disguiseTrait,this.localPlayer,this.alliances,s,this.art,this.gameSpeed));else{if(!e.isAircraft())throw new Error("Unhandled game object type "+e.type);s=new h.Aircraft(e,this.rules,this.voxels,this.voxelAnims,t,this.camera,this.lighting,this.debugWireframes,this.gameSpeed,g,this.vxlBuilderFactory,this.useSpriteBatching,m)}return e.tntChargeTrait&&u.push(new v.TntFxPlugin(e,e.tntChargeTrait,this.rules.combatDamage.ivanIconFlickerRate,s,this.imageFinder,this.art,this.alliances,this.localPlayer,this.worldSound,(e=>this.createAnim(e)))),u.push(new A.ObjectCloakPlugin(e,this.localPlayer,this.alliances,s)),u.forEach((e=>s.registerPlugin(e))),s}if(e.isTerrain())return new s.Terrain(e,this.mapRenderable?.terrainLayer,this.imageFinder,t,this.camera,this.lighting,this.debugWireframes,this.gameSpeed,this.useSpriteBatching);if(e.isOverlay())return new n.Overlay(e,this.rules,this.art,this.imageFinder,t,this.camera,this.lighting,this.debugWireframes,this.bridgeImageCache,this.mapRenderable?.overlayLayer,this.useSpriteBatching);if(e.isProjectile()){let i=new d.Projectile(e,this.rules,this.imageFinder,this.voxels,this.voxelAnims,this.theater,t,this.palettes.get("palette.pal"),this.camera,this.gameSpeed,this.lighting,this.lightingDirector,this.vxlBuilderFactory,this.useSpriteBatching,this.useMeshInstancing);return u.forEach((e=>i.registerPlugin(e))),i}if(e.isSmudge())return new a.Smudge(e,this.imageFinder,t,this.camera,this.lighting,this.debugWireframes,this.mapRenderable?.smudgeLayer);if(e.isDebris()){let i=new M.Debris(e,this.rules,this.imageFinder,this.voxels,this.voxelAnims,t,this.camera,this.lighting,this.gameSpeed,this.vxlBuilderFactory,this.useSpriteBatching);return u.forEach((e=>i.registerPlugin(e))),i}throw new Error("Not implemented")}})}}})),System.register("engine/RenderableManager",["engine/gfx/OctreeContainer"],(function(e,t){"use strict";var i;return t&&t.id,{setters:[function(e){i=e}],execute:function(){e("RenderableManager",class{constructor(e,t,i,r){this.world=e,this.worldScene=t,this.camera=i,this.renderableFactory=r,this.renderablesByGameObject=new Map,this.renderablesById=new Map,this.positionListeners=new Map,this.onCameraUpdate=()=>{this.container.cullChildren()},this.onWorldObjectSpawned=e=>{var t=e.isTechno()&&e.rules.isLightpost;let i=this.createRenderable(e,t?this.worldScene:this.container);i.onCreate&&i.onCreate(this),t=({tileChanged:t})=>this.onObjectPositionChanged(e,t),this.positionListeners.set(e,t),e.position.onPositionChange.subscribe(t)},this.onWorldObjectRemoved=e=>{e.position.onPositionChange.unsubscribe(this.positionListeners.get(e)),this.positionListeners.delete(e);let t=this.renderablesByGameObject.get(e);if(t.onRemove){let i=t.onRemove(this);i?i.then((()=>this.removeAndDisposeRenderable(t,e))).catch((e=>console.error(e))):this.removeAndDisposeRenderable(t,e)}else this.removeAndDisposeRenderable(t,e)}}init(){let e=this.container=i.OctreeContainer.factory(this.camera);e.autoCull=!1,this.worldScene.add(e),this.worldScene.onCameraUpdate.subscribe(this.onCameraUpdate),this.world.getAllObjects().forEach((e=>this.onWorldObjectSpawned(e))),this.world.onObjectSpawned.subscribe(this.onWorldObjectSpawned),this.world.onObjectRemoved.subscribe(this.onWorldObjectRemoved)}getRenderableById(e){return this.renderablesById.get(e)}getRenderableByGameObject(e){return this.renderablesByGameObject.get(e)}getRenderableContainer(){return this.container}onObjectPositionChanged(e,t){let i=this.renderablesByGameObject.get(e);i.setPosition(e.position.worldPosition),e.isTechno()&&e.rules.isLightpost||this.container.updateChild(i)}removeAndDisposeRenderable(e,t){(t.isTechno()&&t.rules.isLightpost?this.worldScene:this.container).remove(e),e.dispose?.(),this.renderablesByGameObject.delete(t),this.renderablesById.delete(t.id)}createTransientAnim(e,t){var i=this.renderableFactory.createTransientAnim(e,this.container);return t?.(i),this.container.add(i),i}createAnim(e,t,i=!1){var r=this.renderableFactory.createAnim(e);return t?.(r),i||this.container.add(r),r}addEffect(e){e.setContainer(this.worldScene),this.worldScene.add(e)}dispose(){this.worldScene.remove(this.container),this.container=void 0,this.worldScene.onCameraUpdate.unsubscribe(this.onCameraUpdate),this.world.onObjectSpawned.unsubscribe(this.onWorldObjectSpawned),this.world.onObjectRemoved.unsubscribe(this.onWorldObjectRemoved),this.onWorldObjectRemoved=void 0,this.onWorldObjectSpawned=void 0,this.positionListeners.forEach(((e,t)=>t.position.onPositionChange.unsubscribe(e))),this.positionListeners.clear(),this.renderablesById.forEach((e=>e.dispose?.()))}createRenderable(e,t){let i=this.renderableFactory.create(e);return i.setPosition(e.position.worldPosition),t.add(i),this.renderablesByGameObject.set(e,i),this.renderablesById.set(e.id,i),i}updateLighting(){for(var e of this.renderablesById.values())e.updateLighting()}})}}})),System.register("engine/gfx/Renderable",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("engine/gfx/Scene",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("engine/gfx/RendererError",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){i=class extends Error{},e("RendererError",i)}}})),System.register("engine/gfx/Renderer",["stats.js","util/event","engine/gfx/RendererError"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){e("Renderer",class{constructor(e,t){this.isContextLost=!1,this._onFrame=new r.EventDispatcher,this.handleContextLost=e=>{e.preventDefault(),this.isContextLost=!0},this.handleContextRestored=()=>{var e=this.renderer.domElement;this.renderer.dispose(),this.renderer=this.createGlRenderer(e),this.isContextLost=!1},this.width=e,this.height=t,this.scenes=new Set}get onFrame(){return this._onFrame.asEvent()}getCanvas(){return this.renderer.domElement}getStats(){return this.stats}supportsInstancing(){if(!this.renderer)throw new Error("Renderer not yet initialized");return!!this.renderer.extensions.get("ANGLE_instanced_arrays")}initStats(e){this.stats||(this.stats=new i.default,this.stats.showPanel(0),this.stats.dom.style.top="auto",this.stats.dom.style.bottom="0px",this.stats.dom.classList.add("stats-layer"),e.appendChild(this.stats.dom))}destroyStats(){this.stats&&(this.stats.dom.parentNode.removeChild(this.stats.dom),this.stats=void 0)}init(e){let t=this.createGlRenderer();e.appendChild(t.domElement),t.domElement.addEventListener("contextmenu",(e=>{e.preventDefault()})),t.domElement.addEventListener("mousedown",(e=>{e.preventDefault()})),t.domElement.addEventListener("wheel",(e=>{e.stopPropagation()}),{passive:!0}),t.domElement.addEventListener("webglcontextlost",this.handleContextLost),t.domElement.addEventListener("webglcontextrestored",this.handleContextRestored),this.renderer=t}createGlRenderer(e){let t;try{t=new THREE.WebGLRenderer({canvas:e,preserveDrawingBuffer:!0,powerPreference:"high-performance"})}catch(e){throw new s.RendererError("Failed to initialize WebGL renderer",{cause:e})}return t.setSize(this.width,this.height),t.autoClear=!1,t.autoClearDepth=!1,t.shadowMap.enabled=!0,t.localClippingEnabled=!0,t.toneMapping=THREE.NoToneMapping,t}setViewportSize(e,t){this.width=e,this.height=t,this.renderer&&this.renderer.setSize(e,t)}addScene(e){this.scenes.add(e),e.create3DObject()}removeScene(e){this.scenes.delete(e)}getScenes(){return[...this.scenes]}update(e,t){this.scenes.forEach((i=>{i.update(e,t)})),this._onFrame.dispatch(this,e)}render(){this.isContextLost||(this.renderer.clear(),this.scenes.forEach((e=>{this.renderer.clearDepth(),this.renderer.setViewport(e.viewport.x,e.viewport.y,e.viewport.width,e.viewport.height),this.renderer.render(e.scene,e.camera)})))}flush(){this.renderer.renderLists.dispose()}destroy(){this.renderer.domElement.remove(),this.renderer.domElement.removeEventListener("webglcontextlost",this.handleContextLost),this.renderer.domElement.removeEventListener("webglcontextrestored",this.handleContextRestored),this.renderer.dispose(),this.destroyStats()}})}}})),System.register("gui/LazyHtmlElement",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("LazyHtmlElement",class{constructor(e){this.children=new Set,this.rendered=!1,e&&this.setElement(e)}setElement(e){this.element=e}getElement(){return this.element}getChildren(){return[...this.children]}isRendered(){return this.rendered}add(...e){for(var t of e)this.children.has(t)||(this.children.add(t),this.rendered&&this.renderChild(t))}remove(...e){for(var t of e)this.children.has(t)&&(this.children.delete(t),this.rendered&&this.unrenderChild(t))}removeAll(){this.remove(...this.children)}render(){if(!this.element)throw new Error("An HTML element must be passed in the constructor or using the setter.");this.children.forEach((e=>this.renderChild(e))),this.rendered=!0}renderChild(e){e.render();var t=e.getElement();t&&this.getElement().appendChild(t)}unrenderChild(e){var t=e.getElement();t&&(e.unrender(),t.parentElement===this.getElement()&&this.getElement().removeChild(t))}unrender(){this.isRendered()&&(this.children.forEach((e=>this.unrenderChild(e))),this.rendered=!1)}})}}})),System.register("gui/HtmlContainer",["gui/LazyHtmlElement"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e}],execute:function(){r=class extends i.LazyHtmlElement{constructor(){super(...arguments),this.visible=!0,this.left=0,this.top=0,this.width=0,this.height=0,this.relativeMode=!1,this.translateMode=!1}render(){var e;this.isRendered()||((e=this.getElement())||(e=document.createElement("div"),this.setElement(e)),this.updateMode(),this.updatePosition(),this.updateVisibility(),this.updateSize()),super.render()}setRelativeMode(e){this.relativeMode=e,this.updateMode()}setTranslateMode(e){this.translateMode=e,this.updatePosition()}setPosition(e,t){this.left=e,this.top=t,this.updatePosition()}setSize(e,t){this.width=e,this.height=t,this.updateSize()}getSize(){return{width:this.width,height:this.height}}setVisible(e){e!==this.visible&&(this.visible=e,this.updateVisibility())}updateMode(){let e=this.getElement();e&&(this.relativeMode?e.style.position="relative":(e.style.overflow="visible",e.style.position="absolute"))}updatePosition(){let e=this.getElement();e&&(this.translateMode?(e.style.top=e.style.left="0",e.style.transform=`translate(${this.left}px, ${this.top}px)`):(e.style.left=this.left+"px",e.style.top=this.top+"px",e.style.transform=""))}updateSize(){let e=this.getElement();e&&(e.style.width="number"==typeof this.width?this.width+"px":this.width,e.style.height="number"==typeof this.height?this.height+"px":this.height)}hide(){this.setVisible(!1)}show(){this.setVisible(!0)}updateVisibility(){let e=this.getElement();e&&(e.style.display=this.visible?"block":"none")}},e("HtmlContainer",r)}}})),System.register("util/mouse",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("util/dom",[],(function(e,t){"use strict";return t&&t.id,e("getOffset",(function(e){let t=0,i=0;for(;t+=e.offsetTop||0,i+=e.offsetLeft||0,e=e.offsetParent;);return{top:t,left:i}})),e("contains",(function(e,t){do{if(t===e)return!0}while(t=t.parentElement);return!1})),{setters:[],execute:function(){}}})),System.register("gui/CanvasMetrics",["util/disposable/CompositeDisposable","util/dom"],(function(e,t){"use strict";var i,r;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){e("CanvasMetrics",class{constructor(e,t){this.canvas=e,this.window=t,this.x=0,this.y=0,this.width=0,this.height=0,this.disposables=new i.CompositeDisposable,this.updateCanvasBoxMetrics=()=>{var e=r.getOffset(this.canvas);this.x=e.left,this.y=e.top,this.width=this.canvas.width,this.height=this.canvas.height}}init(){this.updateCanvasBoxMetrics(),this.window.addEventListener("resize",this.updateCanvasBoxMetrics),this.disposables.add((()=>this.window.removeEventListener("resize",this.updateCanvasBoxMetrics)))}notifyViewportChange(){this.updateCanvasBoxMetrics()}dispose(){this.disposables.dispose()}})}}})),System.register("gui/PointerEvents",["util/disposable/CompositeDisposable","util/array","util/math"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=(e,t)=>!!e.visible&&(e===t||!!e.parent&&n(e.parent,t)),e("PointerEvents",class{constructor(e,t,s,n){this.renderer=e,this.lockModePointer=t,this.document=s,this.canvasMetrics=n,this.disposables=new i.CompositeDisposable,this.canvasContext={handlers:new Map},this.objectContexts=new Map,this.intersectionsEnabled=!0,this.clickPaths=new Map,this.touchFingers=0,this.onDblClick=e=>{0===e.button&&this.onMouseEvent("dblclick",e)},this.onMouseMove=e=>{let t=this.getPointerPosition(e);if(this.intersectionsEnabled){let o=this.currentHoverPath?[...this.currentHoverPath]:void 0;var i=o?.[0],s=this.findObjectUnderPointer(t);let l=s?.object;if(this.currentHoverPath=void 0,l&&(this.currentHoverPath=[l],l.traverseAncestors((e=>{this.currentHoverPath.push(e)}))),!r.equals(this.currentHoverPath??[],o??[])){if(o)for(var n of o)this.currentHoverPath&&this.currentHoverPath.includes(n)||this.notify("mouseleave",n,t,e,void 0,!1);if(this.currentHoverPath)for(var a of this.currentHoverPath)o&&o.includes(a)||this.notify("mouseenter",a,t,e,s,!1);i&&this.notify("mouseout",i,t,e),l&&this.notify("mouseover",l,t,e,s)}l?this.notify("mousemove",l,t,e,s):this.renderer.getScenes().forEach((i=>this.notify("mousemove",i.get3DObject(),t,e)))}this.notify("mousemove","canvas",t,e)},this.onMouseDown=e=>{this.onMouseEvent("mousedown",e)},this.onMouseUp=e=>{this.onMouseEvent("mouseup",e)},this.onMouseWheel=e=>{this.onMouseEvent("wheel",e)},this.onTouchMove=e=>{if(e.preventDefault(),this.initialTouchEvent?.touches){let i=this.initialTouchEvent.touches[0];var t=[...e.changedTouches].find((e=>i.identifier===e.identifier));t&&(this.touchStartBuffer&&(clearTimeout(this.touchStartBuffer.timeoutId),this.touchStartBuffer.cb(),this.touchStartBuffer=void 0),t=this.fakeMouseEventFromTouch(t,e),this.onMouseMove(t))}},this.onTouchStart=e=>{e.preventDefault();let t=e.touches;var i,r;1{this.touchFingers=1;var i=this.fakeMouseEventFromTouch(t[0],e);this.onMouseEvent("mousedown",i)},r=setTimeout(i,50),this.touchStartBuffer={cb:i,timeoutId:r},this.initialTouchEvent=e)},this.onTouchEnd=e=>{if(e.preventDefault(),this.initialTouchEvent?.touches){let r=this.initialTouchEvent.touches[0];var t=[...e.changedTouches].find((e=>r.identifier===e.identifier));if(t){this.touchStartBuffer&&(clearTimeout(this.touchStartBuffer.timeoutId),this.touchStartBuffer.cb(),this.touchStartBuffer=void 0);var i=2===this.touchFingers?2:0;let r=this.fakeMouseEventFromTouch(t,e,i);r.touchDuration=e.timeStamp-this.initialTouchEvent.timeStamp,this.touchFingers=0,this.initialTouchEvent=void 0,this.onMouseEvent("mouseup",r)}}};let a=e.getCanvas();a.addEventListener("dblclick",this.onDblClick,!1),a.addEventListener("mousemove",this.onMouseMove,!1),a.addEventListener("mousedown",this.onMouseDown,!1),a.addEventListener("mouseup",this.onMouseUp,!1),a.addEventListener("touchmove",this.onTouchMove,!1),a.addEventListener("touchstart",this.onTouchStart,!1),a.addEventListener("touchend",this.onTouchEnd,!1),a.addEventListener("wheel",this.onMouseWheel,{passive:!0}),this.disposables.add((()=>{a.removeEventListener("dblclick",this.onDblClick,!1),a.removeEventListener("mousemove",this.onMouseMove,!1),a.removeEventListener("mousedown",this.onMouseDown,!1),a.removeEventListener("mouseup",this.onMouseUp,!1),a.removeEventListener("touchmove",this.onTouchMove,!1),a.removeEventListener("touchstart",this.onTouchStart,!1),a.removeEventListener("touchend",this.onTouchEnd,!1),a.removeEventListener("wheel",this.onMouseWheel,!1)}))}addEventListener(e,t,i,r=!1){let s="canvas"===e?this.canvasContext:this.getOrCreateObjectContext(e),n=s.handlers.get(t);return n||(n=[],s.handlers.set(t,n)),n.push({callback:i,useCapture:r}),()=>this.removeEventListener(e,t,i,r)}removeEventListener(e,t,i,r=!1){let s="canvas"===e?this.canvasContext:this.objectContexts.get(e);if(s&&s.handlers.has(t)){let n=s.handlers.get(t);n=n.filter((e=>!(e.callback===i&&e.useCapture===r))),n.length?s.handlers.set(t,n):s.handlers.delete(t),s.handlers.size||"canvas"===e||this.objectContexts.delete(e)}}getOrCreateObjectContext(e){if(!e)throw new Error("Undefined Object3D instance.");let t=this.objectContexts.get(e);return t||(t={handlers:new Map},this.objectContexts.set(e,t)),t}fakeMouseEventFromTouch(e,t,i=0){var r=this.computeTouchPosition(e);return{offsetX:r.x,offsetY:r.y,button:i,isTouch:!0,detail:1,altKey:t.altKey,ctrlKey:t.ctrlKey,metaKey:t.metaKey,shiftKey:t.shiftKey,timeStamp:t.timeStamp}}computeTouchPosition(e){let t={x:e.pageX-this.canvasMetrics.x,y:e.pageY-this.canvasMetrics.y};return t.x=s.clamp(t.x,0,this.canvasMetrics.width-1),t.y=s.clamp(t.y,0,this.canvasMetrics.height-1),t}onMouseEvent(e,t){let i=this.getPointerPosition(t);var r=this.findObjectUnderPointer(i);if(r?this.notify(e,r.object,i,t,r):this.renderer.getScenes().forEach((r=>this.notify(e,r.get3DObject(),i,t))),this.notify(e,"canvas",i,t),"mousedown"===e||"mouseup"===e){let n=r?.object,a=[];if(n&&(a=[n],n.traverseAncestors((e=>{a.push(e)}))),"mousedown"===e)this.clickPaths.set(t.button,a);else{let e=this.clickPaths.get(t.button);this.clickPaths.delete(t.button);let n=!1;for(var s of a)if(e?.includes(s)){this.notify("click",s,i,t,r),n=!0;break}n||this.renderer.getScenes().forEach((e=>this.notify("click",e.get3DObject(),i,t))),this.notify("click","canvas",i,t)}}}getPointerPosition(e){return this.document.pointerLockElement?this.lockModePointer:{x:e.offsetX,y:e.offsetY}}findObjectUnderPointer(e){let t=this.renderer.getScenes(),i=this.groupObjectsByScene();for(let s=t.length-1;0<=s;s--){let a=new THREE.Raycaster;var r=this.normalizePointer(e,t[s].viewport);a.setFromCamera(r,t[s].camera),r=i.get(t[s].scene).filter((e=>n(e,t[s].get3DObject())));let o=a.intersectObjects(r,!0);if(o.length){if(1===o.length)return o[0];let e=new Set(o.map((e=>e.object)));return o.forEach((t=>{e.has(t.object)&&t.object.traverseAncestors((t=>{e.has(t)&&e.delete(t)}))})),o.filter((t=>e.has(t.object)))[0]}}}normalizePointer(e,t){return{x:(e.x-t.x)/t.width*2-1,y:-(e.y-t.y)/t.height*2+1}}groupObjectsByScene(){let e=new Map;return this.renderer.getScenes().forEach((t=>e.set(t.get3DObject(),[]))),[...this.objectContexts.keys()].forEach((t=>{if("Scene"!==t.type){let i=t;for(;i.parent;)i=i.parent;"Scene"===i.type&&e.get(i).push(t)}})),e}notify(e,t,i,r,s,n=!0){let a="canvas"===t?this.canvasContext:this.objectContexts.get(t),o=a?.handlers.get(e);o&&o.length||"canvas"!==t&&t.parent&&n&&this.notify(e,t.parent,i,r,s),o?.forEach((a=>{let o=!0;a.callback({type:e,target:"canvas"!==t?t:void 0,pointer:{...i},intersection:s,button:r.button,isTouch:!!r.isTouch,touchDuration:r.touchDuration,clicks:r.detail,altKey:r.altKey,ctrlKey:r.ctrlKey,metaKey:r.metaKey,shiftKey:r.shiftKey,timeStamp:r.timeStamp,wheelDeltaY:r.deltaY??0,stopPropagation:()=>{o=!1}}),o&&"canvas"!==t&&!a.useCapture&&t.parent&&n&&this.notify(e,t.parent,i,r,s)}))}dispose(){this.touchStartBuffer&&(clearTimeout(this.touchStartBuffer.timeoutId),this.touchStartBuffer=void 0),this.disposables.dispose()}})}}})),System.register("gui/UiObject",["engine/renderable/WithPosition","engine/gfx/RenderableContainer","util/event","engine/renderable/WithVisibility"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e}],execute:function(){e("UiObject",class e{constructor(e,t){this.rendered=!1,this.eventHandlers=[],this._onFrame=new s.EventDispatcher,this._onDispose=new s.EventDispatcher,e&&this.set3DObject(e),t&&this.setHtmlContainer(t),this.withPosition=new i.WithPosition,this.withVisibility=new n.WithVisibility,this.container=new r.RenderableContainer}get onFrame(){return this._onFrame.asEvent()}get onDispose(){return this._onDispose.asEvent()}static zIndexToWorld(e){return-e}get3DObject(){return this.target}set3DObject(e){(this.target=e).matrixAutoUpdate=!1}getRenderableContainer(){return this.container}getHtmlContainer(){return this.htmlContainer}setHtmlContainer(e){this.htmlContainer=e}setPosition(e,t){var i=this.withPosition.getPosition().z||0;this.withPosition.setPosition(e,t,i),this.htmlContainer?.setPosition(e,t)}getPosition(){var{x:e,y:t}=this.withPosition.getPosition();return{x:e,y:t}}setZIndex(t){var i=this.withPosition.getPosition();this.withPosition.setPosition(i.x,i.y,e.zIndexToWorld(t))}setVisible(e){this.withVisibility.setVisible(e),this.htmlContainer?.setVisible(e)}isVisible(){return this.withVisibility.isVisible()}setTooltip(e){this.tooltip=e,this.updateTooltip()}updateTooltip(){let e=this.get3DObject();e&&(e.userData.tooltip=this.tooltip)}setPointerEvents(e){if(this.pointerEvents)throw new Error("A PointerEvents instance is already set");this.pointerEvents=e}addEventListener(e,t){return this.eventHandlers.push({eventName:e,handler:t}),this.rendered&&this.setupEventListener(e,t),()=>this.removeEventListener(e,t)}removeEventListener(e,t){var i=this.eventHandlers.findIndex((i=>e===i.eventName&&t===i.handler));-1!==i&&(this.eventHandlers[i].disposer?.(),this.eventHandlers.splice(i,1))}setupEventListener(e,t){if(!this.pointerEvents)throw new Error("A PointerEvents object must be provided prior to setting up an event listener");var i=this.pointerEvents.addEventListener(this.get3DObject(),e,t);let r=this.eventHandlers.find((i=>e===i.eventName&&t===i.handler));r&&(r.disposer=i)}create3DObject(){if(!this.get3DObject())throw new Error("Expecting a THREE.Object3D to have been set by now");this.rendered||(this.rendered=!0,this.withPosition.matrixUpdate=!0,this.withPosition.applyTo(this),this.withVisibility.applyTo(this),this.htmlContainer?.render(),this.htmlContainer?.setPosition(this.withPosition.getPosition().x,this.withPosition.getPosition().y),this.htmlContainer?.setVisible(this.withVisibility.isVisible()),this.container.set3DObject(this.get3DObject()),this.container.create3DObject(),this.updateTooltip(),this.eventHandlers.forEach((e=>this.setupEventListener(e.eventName,e.handler))))}update(e){this.container.update(e),this._onFrame.dispatch(this,e)}add(...e){this.container.add(...e),e.map((e=>e.getHtmlContainer())).forEach((e=>{if(e){if(!this.htmlContainer)throw new Error("Can't add an UiObject that defines an HTMLContainer to a parent that doesn't provide an HTML container.");this.htmlContainer.add(e)}}))}remove(...e){e.map((e=>e.getHtmlContainer())).forEach((e=>e&&this.htmlContainer?.remove(e))),this.container.remove(...e)}removeAll(){this.container.removeAll()}destroy(){this.container.getChildren().forEach((e=>e.destroy?.())),this.htmlContainer?.unrender(),this.eventHandlers.forEach((e=>e.disposer?.())),this.eventHandlers.length=0,this._onFrame=new s.EventDispatcher,this._onDispose.dispatch(),this._onDispose=new s.EventDispatcher}})}}})),System.register("gui/UiScene",["gui/UiObject","gui/HtmlContainer","engine/gfx/batch/MeshBatchManager"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){n=class e extends i.UiObject{constructor(e,t,i,r){super(e,r),this.scene=e,this.camera=t,this.viewport=i}static factory(t){let i=new THREE.Scene;i.matrixAutoUpdate=!1;var s=e.createCamera(t),n=new r.HtmlContainer;return new e(i,s,t,n)}static createCamera(e){var t=e.height/2,i=e.width/e.height;let r=new THREE.OrthographicCamera(-t*i,t*i,t,-t,-1e3,1e3);return r.rotation.x=Math.PI,r.position.x=-e.x+e.width/2,r.position.y=-e.y+e.height/2,r.position.z=-1e3,r}setCamera(e){this.camera=e}setViewport(e){this.viewport=e}create3DObject(){var e;super.create3DObject(),this.meshBatchManager||(e=this.meshBatchManager=new s.MeshBatchManager(this.getRenderableContainer()),this.getRenderableContainer().add(e),this.scene.autoUpdate=!1)}update(e){super.update(e),this.meshBatchManager&&(this.scene.updateMatrixWorld(!1),this.meshBatchManager.updateMeshes())}get menuViewport(){return{x:Math.max(0,(this.viewport.width-800)/2),y:Math.max(0,(this.viewport.height-600)/2),width:800,height:600}}destroy(){super.destroy(),this.meshBatchManager?.dispose()}},e("UiScene",n)}}})),System.register("network/PlayerRankType",[],(function(e,t){"use strict";var i;return t&&t.id,{setters:[],execute:function(){var t;(t=i=i||{})[t.None=0]="None",t[t.Private=1]="Private",t[t.Corporal=2]="Corporal",t[t.Sergeant=3]="Sergeant",t[t.Lieutenant=4]="Lieutenant",t[t.Major=5]="Major",t[t.Colonel=6]="Colonel",t[t.BrigGeneral=7]="BrigGeneral",t[t.General=8]="General",t[t.FiveStarGeneral=9]="FiveStarGeneral",t[t.CommanderInChief=10]="CommanderInChief",e("PlayerRankType",i)}}})),System.register("network/PlayerProfile",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("network/chat/SystemMessage",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("network/gservConfig",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("API_VERSION",1),e("RECIPIENT_ALL","#all"),e("RECIPIENT_TEAM","#team"),e("TURN_TIMEOUT_MILLIS",3e4),e("LAG_STATE_THRESH_MILLIS",1e3),e("CON_INFO_THRESH_MILLIS",2e3),e("MAX_MAP_TRANSFER_BYTES",2097152)}}})),System.register("gui/chat/ChatMessageFormat",["react","network/chat/ChatMessage","network/gservConfig"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){e("ChatMessageFormat",class{constructor(e,t,i){this.strings=e,this.localUsername=t,this.userColors=i}formatPrefixPlain(e){let t;if(e.to.type===r.ChatRecipientType.Channel)t=e.to.name===s.RECIPIENT_TEAM?this.strings.get("TS:ChatFromAllies",e.from):this.strings.get("TS:ChatFrom",e.from);else if(e.to.type===r.ChatRecipientType.Page)t=this.strings.get("TS:PageFrom",e.from);else{if(e.to.type!==r.ChatRecipientType.Whisper)throw new Error("Unknown message type "+e.to.type);t=e.from===this.localUsername?this.strings.get("TS:To",e.to.name):this.strings.get("TXT_FROM",e.from)}return t}formatPrefixHtml(e,t){let n=e.to.type===r.ChatRecipientType.Whisper&&e.from===this.localUsername?e.to.name:e.from,a=n;var o,l="{user}";let c;if(e.to.type!==r.ChatRecipientType.Page&&(void 0!==(o=this.userColors?.get(e.from))&&(a=i.default.createElement("span",{style:{color:o}},a)),t&&(h=this.strings.get("TS:ChatUserLink",l).split(l),a=i.default.createElement("span",{className:"user-link",onClick:()=>t(n)},h[0],a,h[1]))),e.to.type===r.ChatRecipientType.Channel)c=e.to.name===s.RECIPIENT_TEAM?this.strings.get("TS:ChatFromAllies",l):this.strings.get("TS:ChatFrom",l);else if(e.to.type===r.ChatRecipientType.Page)c=this.strings.get("TS:PageFrom",l);else{if(e.to.type!==r.ChatRecipientType.Whisper)throw new Error("Unknown message type "+e.to.type);c=e.from===this.localUsername?this.strings.get("TS:To",l):this.strings.get("TXT_FROM",l)}var[h,l]=c.split(l);return i.default.createElement(i.default.Fragment,null,h,a,l)}})}}})),System.register("gui/chat/ChatHistory",["network/chat/ChatMessage","network/gservConfig","util/BoxedVar","util/event"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e}],execute:function(){e("ChatHistory",class{constructor(){this.lastWhisperFrom=new s.BoxedVar(void 0),this.lastWhisperTo=new s.BoxedVar(void 0),this.lastComposeTarget=new s.BoxedVar({type:i.ChatRecipientType.Channel,name:r.RECIPIENT_ALL}),this.messages=[],this._onNewMessage=new n.EventDispatcher}get onNewMessage(){return this._onNewMessage.asEvent()}addChatMessage(e){this.messages.push(e),this._onNewMessage.dispatch(this,e)}getAll(){return this.messages}})}}})),System.register("gui/component/ChatInput",["react","network/chat/ChatMessage","network/gservConfig"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e}],execute:function(){"",n=({chatHistory:e,channels:t,strings:n,className:a,tooltip:o,forceColor:l,noCycleHint:c,submitEmpty:h,onKeyDown:u,onKeyUp:d,onBlur:g,onCancel:p,onSubmit:m},f)=>{const y=i.useRef(null),[T,v]=i.useState((()=>P())),[b,S]=i.useState((()=>{var i=e?.lastComposeTarget.value;return I(i)?i:{type:r.ChatRecipientType.Channel,name:t[0]??""}})),[w,C]=i.useState(),[E,x]=i.useState(),[O,A]=i.useState(!1),[M,R]=i.useState(!1);function P(){const i=(t.length?t:[""]).map((e=>({type:r.ChatRecipientType.Channel,name:e})));var s,n;return e&&(s=e.lastWhisperFrom.value,n=e.lastWhisperTo.value,s&&i.push({type:r.ChatRecipientType.Whisper,name:s}),n&&n!==s&&i.push({type:r.ChatRecipientType.Whisper,name:n})),i}function I(e){return e&&(e.type!==r.ChatRecipientType.Channel||t.includes(e.name))}function k(t){e&&(e.lastComposeTarget.value=t),S(t)}i.useEffect((()=>{y.current?.focus()}),[]),i.useEffect((()=>{if(e){let t=e=>{b!==e&&I(e)&&(S(e),y.current?.focus())},i=()=>{v(P())};return e.lastComposeTarget.onChange.subscribe(t),e.lastWhisperFrom.onChange.subscribe(i),e.lastWhisperTo.onChange.subscribe(i),()=>{e.lastComposeTarget.onChange.unsubscribe(t),e.lastWhisperFrom.onChange.unsubscribe(i),e.lastWhisperTo.onChange.unsubscribe(i)}}}),[b,e,t]),i.useImperativeHandle(f,(()=>({send(){let e=y.current;var t;!e||(t=e.value).length&&(m({recipient:b,value:t}),e.value="",e.focus(),x(t))}})),[b]);var B=function(e){if(e.type===r.ChatRecipientType.Channel)return e.name===s.RECIPIENT_TEAM?n.get("TS:ToAllies"):e.name===s.RECIPIENT_ALL?n.get("TS:ToAll"):"";if(e.type===r.ChatRecipientType.Whisper)return n.get("TS:To",e.name);throw new Error(`Recipient type ${e.type} not implemented`)}(b);let j=!c&&O&&!M&&(1{"Tab"===e.key&&e.preventDefault(),e.repeat||C(e.key),u?.(e)},onKeyUp:e=>{let t=e.target;var i;"Enter"===e.key?"Enter"===w&&(((i=t.value).length||h)&&m({recipient:b,value:i}),i.length&&(t.value="",x(i))):"Tab"===e.key?"Tab"===w&&function(e){if(1!==T.length||T[0].name!==e.name){let i=T.findIndex((t=>t.type===e.type&&t.name===e.name));i=-1===i?0:(i+1)%T.length;var t=T[i];R(!0),k(t)}}(b):"ArrowUp"===e.key&&E?t.value=E:"Escape"===e.key&&"Process"!==w&&(p?.(0===t.value.length),t.value=""),d?.(e)},onChange:t=>{let i=t.target.value;var s=i.match(/^\/(?:page|whisper|w|msg|m) ([A-Za-z0-9-_']+) /i);s&&(k({type:r.ChatRecipientType.Whisper,name:s[1]}),t.target.value="");var n=i.match(/^\/r(eply)? /i);n&&(void 0!==e?.lastWhisperFrom.value&&k({type:r.ChatRecipientType.Whisper,name:e.lastWhisperFrom.value}),t.target.value=""),s||n||void 0===j||R(!0)},onFocus:()=>{A(!0)},onBlur:()=>{A(!1),g?.()}}))},e("ChatInput",i.forwardRef(n))}}})),System.register("gui/component/Chat",["react","classnames","network/chat/ChatMessage","gui/chat/ChatMessageFormat","gui/component/ChatInput"],(function(e,t){"use strict";var i,r,s,n,a,o,l;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e},function(e){a=e}],execute:function(){o=(new Map).set(s.ChatRecipientType.Channel,"type-channel").set(s.ChatRecipientType.Page,"type-page").set(s.ChatRecipientType.Whisper,"type-whisper"),l=class extends i.default.Component{constructor(){super(...arguments),this.prevMessageCount=0}render(){let{messages:e,tooltips:t,strings:r,chatHistory:s,channels:n}=this.props;return i.default.createElement("div",{className:"chat-wrapper"},i.default.createElement("div",{className:"messages",ref:e=>this.messageList=e,"data-r-tooltip":t?.output},e.map(((e,t)=>this.renderMessage(e,t)))),i.default.createElement("div",{className:"new-message-wrapper"},i.default.createElement(a.ChatInput,{ref:e=>this.textBox=e,chatHistory:s,channels:n,className:"new-message",tooltip:t?.input,strings:r,onSubmit:this.props.onSendMessage,onCancel:this.props.onCancelMessage}),i.default.createElement("button",{className:"icon-button send-message-button","data-r-tooltip":t?.button,onClick:()=>this.textBox.send()})))}componentDidUpdate(e,t){var i,r;this.props.messages[0]===this.prevOldestMessage&&this.props.messages.length===this.prevMessageCount||(this.prevMessageCount=this.props.messages.length,this.prevOldestMessage=this.props.messages[0],i=this.messageList.scrollHeight,r=this.messageList.clientHeight,i!==this.prevScrollHeight&&(!this.prevScrollHeight||Math.abs(this.messageList.scrollTop-(this.prevScrollHeight-r))<=1)&&(this.messageList.scrollTop=i-r),this.prevScrollHeight=i)}renderMessage(e,t){let a,l=["message"];return void 0!==e.from&&(a=new n.ChatMessageFormat(this.props.strings,this.props.localUsername,this.props.userColors).formatPrefixHtml(e,(t=>{this.props.chatHistory&&e.to&&e.to.type!==s.ChatRecipientType.Page&&(this.props.chatHistory.lastComposeTarget.value={type:s.ChatRecipientType.Whisper,name:t})})),l.push(o.get(e.to.type),{"operator-message":e.operator})),i.default.createElement("div",{key:t,className:r.default(l)},a?i.default.createElement(i.default.Fragment,null,i.default.createElement("span",null,a)," ",e.text):e.text)}},e("Chat",l)}}}));System.register("gui/screen/mainMenu/lobby/component/viewmodel/lobby",[],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[],execute:function(){var t,a;(t=i=i||{})[t.Singleplayer=0]="Singleplayer",t[t.MultiplayerHost=1]="MultiplayerHost",t[t.MultiplayerGuest=2]="MultiplayerGuest",e("LobbyType",i),(a=r=r||{})[a.Player=1]="Player",a[a.Ai=2]="Ai",a[a.Observer=3]="Observer",e("SlotType",r),(a=s=s||{})[a.Open=1]="Open",a[a.Closed=2]="Closed",a[a.Occupied=3]="Occupied",e("SlotOccupation",s),(a=n=n||{})[a.NotReady=1]="NotReady",a[a.Ready=2]="Ready",a[a.Host=3]="Host",e("PlayerStatus",n)}}})),System.register("gui/UiObjectSprite",["engine/renderable/builder/ShpBuilder","gui/UiObject"],(function(e,t){"use strict";var i,r,s;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=class extends r.UiObject{constructor(e){super(),this.builder=e}static fromShpFile(e,t,r){let s=new i.ShpBuilder(e,t,r);return s.setBatched(!0),s.setBatchPalettes([t]),s.setOffset({x:Math.floor(e.width/2),y:Math.floor(e.height/2)}),new this(s)}setAnimationRunner(e){this.animationRunner=e}getAnimationRunner(){return this.animationRunner}update(e){super.update(e),this.animationRunner&&(this.animationRunner.tick(e),this.animationRunner.shouldUpdate()&&this.setFrame(this.animationRunner.getCurrentFrame()))}getSize(){return this.builder.getSize()}setFrame(e){this.builder.setFrame(e)}getFrame(){return this.builder.getFrame()}getFrameCount(){return this.builder.frameCount}setTransparent(e){this.get3DObject()?this.builder.setForceTransparent(e):this.initialTransparency=e}setOpacity(e){this.get3DObject()?this.builder.setOpacity(e):this.initialOpacity=e}setLightMult(e){this.get3DObject()?this.builder.setExtraLight((new THREE.Vector3).addScalar(-1+e)):this.initialLightMult=e}create3DObject(){this.set3DObject(this.builder.build()),super.create3DObject(),void 0!==this.initialTransparency&&this.builder.setForceTransparent(this.initialTransparency),void 0!==this.initialOpacity&&this.builder.setOpacity(this.initialOpacity),void 0!==this.initialLightMult&&this.builder.setExtraLight((new THREE.Vector3).addScalar(this.initialLightMult))}destroy(){super.destroy(),this.builder.dispose()}},e("UiObjectSprite",s)}}})),System.register("gui/jsx/UiComponent",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){e("UiComponent",class{constructor(e){this.props=e,this.uiObject=this.createUiObject(e)}getUiObject(){return this.uiObject}})}}})),System.register("gui/ShpSpriteBatch",["gui/UiObject","gui/HtmlContainer","data/ShpFile","engine/renderable/builder/BatchShpBuilder"],(function(e,t){"use strict";var i,r,s,n,a;return t&&t.id,{setters:[function(e){i=e},function(e){r=e},function(e){s=e},function(e){n=e}],execute:function(){a=class extends i.UiObject{constructor(e,t,i,s){super(new THREE.Object3D,new r.HtmlContainer),this.spriteProps=e,this.getShpFile=t,this.getPalette=i,this.camera=s,this.textureCache=new Map,this.batchShpBuilders=[]}create3DObject(){super.create3DObject();var e=this.createAggregatedShpFile();this.createObjects(this.get3DObject(),e)}createAggregatedShpFile(){let e=new s.ShpFile;e.filename="agg_unnamed_spritebatch.shp";let t=new Map,i=0;for(var r of this.spriteProps){r=("string"==typeof r.image?this.getShpFile(r.image):r.image).getImage(r.frame??0),t.has(r)||(e.addImage(r),t.set(r,i),i++)}return{file:e,imageIndexes:t}}createObjects(e,t){let r=new Map;for(var s of this.spriteProps){var a=("string"==typeof s.palette?this.getPalette(s.palette):s.palette).hash;r.set(a,(r.get(a)??[]).concat(s))}for(var o of r.values()){var l,c="string"==typeof o[0].palette?this.getPalette(o[0].palette):o[0].palette;let r=[];for(l of o){let e="string"==typeof l.image?this.getShpFile(l.image):l.image;var h=t.imageIndexes.get(e.getImage(l.frame??0));if(void 0===h)throw new Error("Missing frame in aggregated sprite shp file");h={position:new THREE.Vector3(l.x??0,l.y??0,i.UiObject.zIndexToWorld(l.zIndex??0)),shpFile:e,depth:!1,flat:!1,frameNo:h,offset:{x:e.width/2,y:e.height/2}},r.push(h)}if(r.length){let i=new n.BatchShpBuilder(t.file,c,this.camera,this.textureCache,void 0,void 0,r.length);r.forEach((e=>i.add(e))),this.batchShpBuilders.push(i),e.add(i.build())}}}destroy(){super.destroy(),this.batchShpBuilders.forEach((e=>e.dispose())),[...this.textureCache.values()].forEach((e=>e.dispose())),this.textureCache.clear()}},e("ShpSpriteBatch",a)}}})),System.register("gui/jsx/jsx",[],(function(e,t){"use strict";return t&&t.id,e("createRef",(function(){return{current:void 0}})),e("jsx",(function(e,t,...i){let{ref:r,...s}=t=t||{};return{isJsxElement:!0,type:e,props:{...s,children:1{if(null==t||!t.isJsxElement)return[];if("string"==typeof t.type)if(s=t.props.children,"fragment"===t.type)r=void 0;else{let e=i[t.type];if(!e)throw new Error(`No renderer defined for intrinsic JSX element "${t.type}"`);var a=e({ref:t.ref,...t.props});r=a.obj,r&&(n=r),a.children&&(s=a.children)}else{let e=new t.type(t.props);r=e.getUiObject(),s=e.defineChildren?.()||t.props.children,e.onRender&&r.onFrame.subscribeOnce((t=>e.onRender(t))),e.onFrame&&r.onFrame.subscribe((t=>e.onFrame(t))),e.onDispose&&r.onDispose.subscribe((()=>e.onDispose())),n=e}return a=s?(Array.isArray(s)?s:[s]).map((t=>e(t,i))).reduce(((e,t)=>[...e,...t]),[]):[],r&&r.add(...a),n&&t.ref&&("function"==typeof t.ref?t.ref?.(n):t.ref.current=n),r?[r]:null!==r?a:[]})).reduce(((e,t)=>[...e,...t]),[])})),{setters:[],execute:function(){}}})),System.register("gui/screen/mainMenu/component/viewmodel/MenuButtonConfig",[],(function(e,t){"use strict";return t&&t.id,{setters:[],execute:function(){}}})),System.register("gui/screen/mainMenu/component/MenuVideo",["react","util/disposable/CompositeDisposable"],(function(e,t){"use strict";var i,r,s,n;return t&&t.id,{setters:[function(e){i=e},function(e){r=e}],execute:function(){s=new Map([["mp4","video/mp4"],["webm","video/webm"]]),n=class extends i.default.Component{constructor(){super(...arguments),this.el=null,this.disposables=new r.CompositeDisposable,this.disposed=!1}render(){const e=this.props.src;let t,r;return"string"==typeof e?(r=e,t=s.get(e.split("?")[0].split(".").pop())??"video/webm"):(r=URL.createObjectURL(e),t=e.type,this.disposables.add((()=>{URL.revokeObjectURL(r)}))),i.default.createElement("div",{className:"video-wrapper",ref:e=>this.el=e,dangerouslySetInnerHTML:{__html:`\n \n