UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

195 lines (188 loc) • 18.3 kB
'use strict'; Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } }); const math = require('@jsprismarine/math'); const entity_Entity = require('./entity/Entity.cjs.cjs'); require('./network/packet/ActorFallPacket.cjs.cjs'); require('./network/packet/AddActorPacket.cjs.cjs'); require('./network/packet/AddItemActorPacket.cjs.cjs'); require('./network/packet/AddPlayerPacket.cjs.cjs'); require('./network/packet/AnimatePacket.cjs.cjs'); require('./network/packet/AvailableActorIdentifiersPacket.cjs.cjs'); require('./network/packet/AvailableCommandsPacket.cjs.cjs'); require('@jsprismarine/jsbinaryutils'); require('zlib'); require('./network/CompressionProvider.cjs.cjs'); require('./network/packet/NetworkSettingsPacket.cjs.cjs'); require('./network/packet/BiomeDefinitionListPacket.cjs.cjs'); require('./network/packet/ChangeDimensionPacket.cjs.cjs'); require('./network/packet/ChunkRadiusUpdatedPacket.cjs.cjs'); require('./network/packet/CommandRequestPacket.cjs.cjs'); require('./network/packet/ContainerClosePacket.cjs.cjs'); require('./network/packet/ContainerOpenPacket.cjs.cjs'); require('./network/packet/CreativeContentPacket.cjs.cjs'); require('./network/packet/DisconnectPacket.cjs.cjs'); require('./network/packet/EmoteListPacket.cjs.cjs'); require('./network/packet/InteractPacket.cjs.cjs'); require('./network/packet/InventoryContentPacket.cjs.cjs'); require('./network/packet/InventoryTransactionPacket.cjs.cjs'); require('./network/packet/ItemComponentPacket.cjs.cjs'); require('./network/packet/ItemStackRequestPacket.cjs.cjs'); require('./network/packet/ItemStackResponsePacket.cjs.cjs'); require('./network/packet/LevelChunkPacket.cjs.cjs'); require('./network/packet/LevelSoundEventPacket.cjs.cjs'); require('./network/packet/LoginPacket.cjs.cjs'); require('./network/packet/MobEquipmentPacket.cjs.cjs'); require('./network/packet/MoveActorAbsolutePacket.cjs.cjs'); require('./network/packet/MovePlayerPacket.cjs.cjs'); require('./network/packet/NetworkChunkPublisherUpdatePacket.cjs.cjs'); require('./network/packet/OnScreenTextureAnimationPacket.cjs.cjs'); require('./network/packet/PacketViolationWarningPacket.cjs.cjs'); require('./network/packet/PlaySoundPacket.cjs.cjs'); require('./network/packet/PlayStatusPacket.cjs.cjs'); require('./network/packet/PlayerActionPacket.cjs.cjs'); require('./network/packet/PlayerListPacket.cjs.cjs'); require('./network/packet/PlayerSkinPacket.cjs.cjs'); require('./network/packet/RemoveActorPacket.cjs.cjs'); require('./network/packet/RequestChunkRadiusPacket.cjs.cjs'); require('./network/packet/RequestNetworkSettingsPacket.cjs.cjs'); require('./network/packet/ResourcePackResponsePacket.cjs.cjs'); require('./network/packet/ResourcePackStackPacket.cjs.cjs'); require('./network/packet/ResourcePacksInfoPacket.cjs.cjs'); require('./network/packet/ServerSettingsRequestPacket.cjs.cjs'); require('./network/packet/SetActorDataPacket.cjs.cjs'); require('./network/packet/SetDefaultGametypePacket.cjs.cjs'); require('./network/packet/SetHealthPacket.cjs.cjs'); require('./network/packet/SetLocalPlayerAsInitializedPacket.cjs.cjs'); require('./network/packet/SetPlayerGametypePacket.cjs.cjs'); require('./network/packet/SetTimePacket.cjs.cjs'); require('./network/packet/ShowProfilePacket.cjs.cjs'); require('./network/packet/StartGamePacket.cjs.cjs'); require('./network/packet/TextPacket.cjs.cjs'); require('./network/packet/TickSyncPacket.cjs.cjs'); require('./network/packet/TransferPacket.cjs.cjs'); require('./network/packet/UpdateAdventureSettingsPacket.cjs.cjs'); require('./network/packet/UpdateAttributesPacket.cjs.cjs'); require('./network/packet/UpdateBlockPacket.cjs.cjs'); require('./network/packet/WorldEventPacket.cjs.cjs'); require('@jsprismarine/bedrock-data'); require('./block/BlockToolType.cjs.cjs'); const process = require('node:process'); const readline = require('node:readline'); const _interopDefault = e => e && e.__esModule ? e : { default: e }; const process__default = /*#__PURE__*/_interopDefault(process); const readline__default = /*#__PURE__*/_interopDefault(readline); class Console extends entity_Entity.EntityLike { cli; constructor(server, runtimeId = BigInt(-1)) { const world = server.getWorldManager().getDefaultWorld(); super({ server, runtimeId, world }); } /** * On enable hook. * @group Lifecycle */ async enable() { if (this.cli) return; if (!process__default.default.stdin.setRawMode) { return; } process__default.default.stdin.setRawMode(true); process__default.default.stdin.setNoDelay(true); process__default.default.stdin.setKeepAlive(true); process__default.default.stdin.resume(); this.cli = readline__default.default.createInterface({ input: process__default.default.stdin, output: process__default.default.stdout, terminal: true, prompt: "> ", tabSize: 4, removeHistoryDuplicates: true, completer: this.complete.bind(this) }); this.server.on("chat", async (evt) => { if (evt.isCancelled()) return; await this.sendMessage(evt.getChat().getMessage()); }); this.server.getLogger().setConsole(this); this.cli.on("keypress", async (_, key) => { switch (key.name) { case "c": { if (key.ctrl) { await this.server.shutdown(); } break; } } }); this.cli.on("line", (input) => { if (input.trim() === "") return; this.cli?.output.write(`\x1B[2D`); void this.server.getCommandManager().dispatchCommand(this, this, input); }); } /** * On disable hook. * @group Lifecycle */ async disable() { this.cli?.close(); this.cli?.removeAllListeners(); } async complete(line, callback) { const commands = Array.from(this.server.getCommandManager().getCommands().values()).map( (command) => command.name ); const completions = commands.reverse().filter((value, index, self) => self.indexOf(value) === index).reverse(); const hits = completions.filter((c) => c.startsWith(line)); return callback(null, [hits.length ? hits : completions, line]); } write(line) { this.cli?.output.write(`\x1B[${this.cli.getPrompt().length}D`); this.cli?.output.write(`\r${line} \r`); this.cli?._refreshLine?.(); this.cli?.prompt(); } getName() { return "CONSOLE"; } getFormattedUsername() { return "[CONSOLE]"; } async sendMessage(message) { this.server.getLogger().info(message); } getWorld() { return this.server.getWorldManager().getDefaultWorld(); } isPlayer() { return false; } isOp() { return true; } getX() { return 0; } getY() { return 0; } getZ() { return 0; } getPosition() { return new math.Vector3(0, 0, 0); } getType() { return "jsprismarine:console"; } isConsole() { return true; } } exports.default = Console; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uc29sZS5janMuY2pzIiwic291cmNlcyI6WyIuLi9zcmMvQ29uc29sZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSAnQGpzcHJpc21hcmluZS9tYXRoJztcbmltcG9ydCB0eXBlIHsgU2VydmVyLCBTZXJ2aWNlIH0gZnJvbSAnLi8nO1xuaW1wb3J0IHsgRW50aXR5TGlrZSB9IGZyb20gJy4vZW50aXR5Lyc7XG5pbXBvcnQgdHlwZSBDaGF0RXZlbnQgZnJvbSAnLi9ldmVudHMvY2hhdC9DaGF0RXZlbnQnO1xuXG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHR5cGUgeyBDb21wbGV0ZXJSZXN1bHQgfSBmcm9tICdub2RlOnJlYWRsaW5lJztcbmltcG9ydCByZWFkbGluZSBmcm9tICdub2RlOnJlYWRsaW5lJztcblxuLy8gRXh0ZW5kIGJ1aWx0aW4gYHJlYWRsaW5lLkludGVyZmFjZWAgdHlwZVxuZGVjbGFyZSBtb2R1bGUgJ25vZGU6cmVhZGxpbmUnIHtcbiAgICBpbnRlcmZhY2UgSW50ZXJmYWNlIHtcbiAgICAgICAgc2V0UmF3TW9kZT8obW9kZTogYm9vbGVhbik6IHZvaWQ7XG4gICAgICAgIG91dHB1dDoge1xuICAgICAgICAgICAgd3JpdGU6IChkYXRhOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgICAgIH07XG4gICAgICAgIGlucHV0OiBhbnk7XG4gICAgICAgIF9yZWZyZXNoTGluZT8oKTogdm9pZDtcbiAgICB9XG59XG5cbi8qKlxuICogU2VydmVyIGNvbnNvbGUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnNvbGUgZXh0ZW5kcyBFbnRpdHlMaWtlIGltcGxlbWVudHMgU2VydmljZSB7XG4gICAgcHJpdmF0ZSBjbGk/OiByZWFkbGluZS5JbnRlcmZhY2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2VydmVyOiBTZXJ2ZXIsIHJ1bnRpbWVJZCA9IEJpZ0ludCgtMSkpIHtcbiAgICAgICAgY29uc3Qgd29ybGQgPSBzZXJ2ZXIuZ2V0V29ybGRNYW5hZ2VyKCkuZ2V0RGVmYXVsdFdvcmxkKCkhO1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBzZXJ2ZXIsXG4gICAgICAgICAgICBydW50aW1lSWQsXG4gICAgICAgICAgICB3b3JsZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbiBlbmFibGUgaG9vay5cbiAgICAgKiBAZ3JvdXAgTGlmZWN5Y2xlXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIGVuYWJsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGVuYWJsZSB0aGUgY29uc29sZSB0d2ljZS5cbiAgICAgICAgaWYgKHRoaXMuY2xpKSByZXR1cm47XG5cbiAgICAgICAgaWYgKCFwcm9jZXNzLnN0ZGluLnNldFJhd01vZGUgYXMgYW55KSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgaGVhZGxlc3MgbW9kZXMgYmV0dGVyIChlZyB1bml0IHRlc3RpbmcpLlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvY2Vzcy5zdGRpbi5zZXRSYXdNb2RlKHRydWUpO1xuICAgICAgICBwcm9jZXNzLnN0ZGluLnNldE5vRGVsYXkodHJ1ZSk7XG4gICAgICAgIHByb2Nlc3Muc3RkaW4uc2V0S2VlcEFsaXZlKHRydWUpO1xuICAgICAgICBwcm9jZXNzLnN0ZGluLnJlc3VtZSgpO1xuXG4gICAgICAgIHRoaXMuY2xpID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHtcbiAgICAgICAgICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgICAgICAgICAgb3V0cHV0OiBwcm9jZXNzLnN0ZG91dCxcbiAgICAgICAgICAgIHRlcm1pbmFsOiB0cnVlLFxuICAgICAgICAgICAgcHJvbXB0OiAnPiAnLFxuICAgICAgICAgICAgdGFiU2l6ZTogNCxcbiAgICAgICAgICAgIHJlbW92ZUhpc3RvcnlEdXBsaWNhdGVzOiB0cnVlLFxuICAgICAgICAgICAgY29tcGxldGVyOiB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcylcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zZXJ2ZXIub24oJ2NoYXQnLCBhc3luYyAoZXZ0OiBDaGF0RXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldnQuaXNDYW5jZWxsZWQoKSkgcmV0dXJuO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZW5kTWVzc2FnZShldnQuZ2V0Q2hhdCgpLmdldE1lc3NhZ2UoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlcnZlci5nZXRMb2dnZXIoKS5zZXRDb25zb2xlKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuY2xpLm9uKCdrZXlwcmVzcycsIGFzeW5jIChfLCBrZXkpID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5Lm5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjJzoge1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LmN0cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2VydmVyLnNodXRkb3duKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNsaS5vbignbGluZScsIChpbnB1dDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5wdXQudHJpbSgpID09PSAnJykgcmV0dXJuO1xuXG4gICAgICAgICAgICAvLyBGaXggY3Vyc29yIHBvc2l0aW9uaW5nLlxuICAgICAgICAgICAgdGhpcy5jbGk/Lm91dHB1dC53cml0ZShgXFx4MWJbMkRgKTtcblxuICAgICAgICAgICAgdm9pZCB0aGlzLnNlcnZlci5nZXRDb21tYW5kTWFuYWdlcigpLmRpc3BhdGNoQ29tbWFuZCh0aGlzIGFzIGFueSwgdGhpcyBhcyBhbnksIGlucHV0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gZGlzYWJsZSBob29rLlxuICAgICAqIEBncm91cCBMaWZlY3ljbGVcbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgZGlzYWJsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5jbGk/LmNsb3NlKCk7XG4gICAgICAgIHRoaXMuY2xpPy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNvbXBsZXRlKGxpbmU6IHN0cmluZywgY2FsbGJhY2s6IChlcnI/OiBudWxsIHwgRXJyb3IsIHJlc3VsdD86IENvbXBsZXRlclJlc3VsdCkgPT4gdm9pZCkge1xuICAgICAgICBjb25zdCBjb21tYW5kcyA9IEFycmF5LmZyb20odGhpcy5zZXJ2ZXIuZ2V0Q29tbWFuZE1hbmFnZXIoKS5nZXRDb21tYW5kcygpLnZhbHVlcygpKS5tYXAoXG4gICAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5uYW1lXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gTWVyZ2UgYW5kIHJlbW92ZSBkdXBsaWNhdGVzLlxuICAgICAgICBjb25zdCBjb21wbGV0aW9ucyA9IGNvbW1hbmRzXG4gICAgICAgICAgICAucmV2ZXJzZSgpIC8vIFJldmVyc2UgdG8gcmVtb3ZlIGR1cGxpY2F0ZXMgYXQgdGhlIGVuZC5cbiAgICAgICAgICAgIC5maWx0ZXIoKHZhbHVlLCBpbmRleCwgc2VsZikgPT4gc2VsZi5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXgpXG4gICAgICAgICAgICAucmV2ZXJzZSgpOyAvLyBSZXN0b3JlLlxuXG4gICAgICAgIC8vIFRPRE86IEhhbmRsZSBhcmd1bWVudHMuXG4gICAgICAgIGNvbnN0IGhpdHMgPSBjb21wbGV0aW9ucy5maWx0ZXIoKGMpID0+IGMuc3RhcnRzV2l0aChsaW5lKSk7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCBbaGl0cy5sZW5ndGggPyBoaXRzIDogY29tcGxldGlvbnMsIGxpbmVdKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGUobGluZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgcHJvbXB0IHRoYXQncyBwcmVmaXhlZCB3aGVuIGxvZ2dpbmcuXG4gICAgICAgIHRoaXMuY2xpPy5vdXRwdXQud3JpdGUoYFxceDFiWyR7dGhpcy5jbGkuZ2V0UHJvbXB0KCkubGVuZ3RofURgKTtcblxuICAgICAgICAvLyBXcml0ZSB0aGUgbGluZS5cbiAgICAgICAgdGhpcy5jbGk/Lm91dHB1dC53cml0ZShgXFxyJHtsaW5lfVxcblxccmApO1xuXG4gICAgICAgIHRoaXMuY2xpPy5fcmVmcmVzaExpbmU/LigpO1xuICAgICAgICB0aGlzLmNsaT8ucHJvbXB0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICdDT05TT0xFJztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Rm9ybWF0dGVkVXNlcm5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICdbQ09OU09MRV0nO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZW5kTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5zZXJ2ZXIuZ2V0TG9nZ2VyKCkuaW5mbyhtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0V29ybGQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZlci5nZXRXb3JsZE1hbmFnZXIoKS5nZXREZWZhdWx0V29ybGQoKSE7XG4gICAgfVxuXG4gICAgcHVibGljIGlzUGxheWVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGlzT3AoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRYKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0WSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcHVibGljIGdldFooKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBvc2l0aW9uKCk6IFZlY3RvcjMge1xuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoMCwgMCwgMCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFR5cGUoKSB7XG4gICAgICAgIHJldHVybiAnanNwcmlzbWFyaW5lOmNvbnNvbGUnO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0NvbnNvbGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6WyJFbnRpdHlMaWtlIiwicHJvY2VzcyIsInJlYWRsaW5lIiwiVmVjdG9yMyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0JBLE1BQXFCLGdCQUFnQkEsd0JBQThCLENBQUE7QUFBQSxFQUN2RCxHQUFBO0FBQUEsRUFFRCxXQUFZLENBQUEsTUFBQSxFQUFnQixTQUFZLEdBQUEsTUFBQSxDQUFPLEVBQUUsQ0FBRyxFQUFBO0FBQ3ZELElBQUEsTUFBTSxLQUFRLEdBQUEsTUFBQSxDQUFPLGVBQWdCLEVBQUEsQ0FBRSxlQUFnQixFQUFBO0FBQ3ZELElBQU0sS0FBQSxDQUFBO0FBQUEsTUFDRixNQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsTUFDQTtBQUFBLEtBQ0gsQ0FBQTtBQUFBO0FBQ0w7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1BLE1BQWEsTUFBd0IsR0FBQTtBQUVqQyxJQUFBLElBQUksS0FBSyxHQUFLLEVBQUE7QUFFZCxJQUFJLElBQUEsQ0FBQ0Msd0JBQVEsQ0FBQSxLQUFBLENBQU0sVUFBbUIsRUFBQTtBQUVsQyxNQUFBO0FBQUE7QUFHSixJQUFRQSx3QkFBQSxDQUFBLEtBQUEsQ0FBTSxXQUFXLElBQUksQ0FBQTtBQUM3QixJQUFRQSx3QkFBQSxDQUFBLEtBQUEsQ0FBTSxXQUFXLElBQUksQ0FBQTtBQUM3QixJQUFRQSx3QkFBQSxDQUFBLEtBQUEsQ0FBTSxhQUFhLElBQUksQ0FBQTtBQUMvQixJQUFBQSx3QkFBQSxDQUFRLE1BQU0sTUFBTyxFQUFBO0FBRXJCLElBQUssSUFBQSxDQUFBLEdBQUEsR0FBTUMsMEJBQVMsZUFBZ0IsQ0FBQTtBQUFBLE1BQ2hDLE9BQU9ELHdCQUFRLENBQUEsS0FBQTtBQUFBLE1BQ2YsUUFBUUEsd0JBQVEsQ0FBQSxNQUFBO0FBQUEsTUFDaEIsUUFBVSxFQUFBLElBQUE7QUFBQSxNQUNWLE1BQVEsRUFBQSxJQUFBO0FBQUEsTUFDUixPQUFTLEVBQUEsQ0FBQTtBQUFBLE1BQ1QsdUJBQXlCLEVBQUEsSUFBQTtBQUFBLE1BQ3pCLFNBQVcsRUFBQSxJQUFBLENBQUssUUFBUyxDQUFBLElBQUEsQ0FBSyxJQUFJO0FBQUEsS0FDckMsQ0FBQTtBQUVELElBQUEsSUFBQSxDQUFLLE1BQU8sQ0FBQSxFQUFBLENBQUcsTUFBUSxFQUFBLE9BQU8sR0FBbUIsS0FBQTtBQUM3QyxNQUFJLElBQUEsR0FBQSxDQUFJLGFBQWUsRUFBQTtBQUN2QixNQUFBLE1BQU0sS0FBSyxXQUFZLENBQUEsR0FBQSxDQUFJLE9BQVEsRUFBQSxDQUFFLFlBQVksQ0FBQTtBQUFBLEtBQ3BELENBQUE7QUFDRCxJQUFBLElBQUEsQ0FBSyxNQUFPLENBQUEsU0FBQSxFQUFZLENBQUEsVUFBQSxDQUFXLElBQUksQ0FBQTtBQUV2QyxJQUFBLElBQUEsQ0FBSyxHQUFJLENBQUEsRUFBQSxDQUFHLFVBQVksRUFBQSxPQUFPLEdBQUcsR0FBUSxLQUFBO0FBQ3RDLE1BQUEsUUFBUSxJQUFJLElBQU07QUFBQSxRQUNkLEtBQUssR0FBSyxFQUFBO0FBQ04sVUFBQSxJQUFJLElBQUksSUFBTSxFQUFBO0FBQ1YsWUFBTSxNQUFBLElBQUEsQ0FBSyxPQUFPLFFBQVMsRUFBQTtBQUFBO0FBRS9CLFVBQUE7QUFBQTtBQUlKO0FBQ0osS0FDSCxDQUFBO0FBRUQsSUFBQSxJQUFBLENBQUssR0FBSSxDQUFBLEVBQUEsQ0FBRyxNQUFRLEVBQUEsQ0FBQyxLQUFrQixLQUFBO0FBQ25DLE1BQUksSUFBQSxLQUFBLENBQU0sSUFBSyxFQUFBLEtBQU0sRUFBSSxFQUFBO0FBR3pCLE1BQUssSUFBQSxDQUFBLEdBQUEsRUFBSyxNQUFPLENBQUEsS0FBQSxDQUFNLENBQVMsT0FBQSxDQUFBLENBQUE7QUFFaEMsTUFBQSxLQUFLLEtBQUssTUFBTyxDQUFBLGlCQUFBLEdBQW9CLGVBQWdCLENBQUEsSUFBQSxFQUFhLE1BQWEsS0FBSyxDQUFBO0FBQUEsS0FDdkYsQ0FBQTtBQUFBO0FBQ0w7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1BLE1BQWEsT0FBeUIsR0FBQTtBQUNsQyxJQUFBLElBQUEsQ0FBSyxLQUFLLEtBQU0sRUFBQTtBQUNoQixJQUFBLElBQUEsQ0FBSyxLQUFLLGtCQUFtQixFQUFBO0FBQUE7QUFDakMsRUFFQSxNQUFjLFFBQVMsQ0FBQSxJQUFBLEVBQWMsUUFBa0UsRUFBQTtBQUNuRyxJQUFNLE1BQUEsUUFBQSxHQUFXLEtBQU0sQ0FBQSxJQUFBLENBQUssSUFBSyxDQUFBLE1BQUEsQ0FBTyxpQkFBa0IsRUFBQSxDQUFFLFdBQVksRUFBQSxDQUFFLE1BQU8sRUFBQyxDQUFFLENBQUEsR0FBQTtBQUFBLE1BQ2hGLENBQUMsWUFBWSxPQUFRLENBQUE7QUFBQSxLQUN6QjtBQUdBLElBQUEsTUFBTSxXQUFjLEdBQUEsUUFBQSxDQUNmLE9BQVEsRUFBQSxDQUNSLE9BQU8sQ0FBQyxLQUFBLEVBQU8sS0FBTyxFQUFBLElBQUEsS0FBUyxLQUFLLE9BQVEsQ0FBQSxLQUFLLENBQU0sS0FBQSxLQUFLLEVBQzVELE9BQVEsRUFBQTtBQUdiLElBQU0sTUFBQSxJQUFBLEdBQU8sWUFBWSxNQUFPLENBQUEsQ0FBQyxNQUFNLENBQUUsQ0FBQSxVQUFBLENBQVcsSUFBSSxDQUFDLENBQUE7QUFDekQsSUFBTyxPQUFBLFFBQUEsQ0FBUyxNQUFNLENBQUMsSUFBQSxDQUFLLFNBQVMsSUFBTyxHQUFBLFdBQUEsRUFBYSxJQUFJLENBQUMsQ0FBQTtBQUFBO0FBQ2xFLEVBRU8sTUFBTSxJQUFvQixFQUFBO0FBRTdCLElBQUssSUFBQSxDQUFBLEdBQUEsRUFBSyxPQUFPLEtBQU0sQ0FBQSxDQUFBLEtBQUEsRUFBUSxLQUFLLEdBQUksQ0FBQSxTQUFBLEVBQVksQ0FBQSxNQUFNLENBQUcsQ0FBQSxDQUFBLENBQUE7QUFHN0QsSUFBQSxJQUFBLENBQUssR0FBSyxFQUFBLE1BQUEsQ0FBTyxLQUFNLENBQUEsQ0FBQSxFQUFBLEVBQUssSUFBSTtBQUFBLEVBQU0sQ0FBQSxDQUFBO0FBRXRDLElBQUEsSUFBQSxDQUFLLEtBQUssWUFBZSxJQUFBO0FBQ3pCLElBQUEsSUFBQSxDQUFLLEtBQUssTUFBTyxFQUFBO0FBQUE7QUFDckIsRUFFTyxPQUFrQixHQUFBO0FBQ3JCLElBQU8sT0FBQSxTQUFBO0FBQUE7QUFDWCxFQUVPLG9CQUErQixHQUFBO0FBQ2xDLElBQU8sT0FBQSxXQUFBO0FBQUE7QUFDWCxFQUVBLE1BQWEsWUFBWSxPQUFnQyxFQUFBO0FBQ3JELElBQUEsSUFBQSxDQUFLLE1BQU8sQ0FBQSxTQUFBLEVBQVksQ0FBQSxJQUFBLENBQUssT0FBTyxDQUFBO0FBQUE7QUFDeEMsRUFFTyxRQUFXLEdBQUE7QUFDZCxJQUFBLE9BQU8sSUFBSyxDQUFBLE1BQUEsQ0FBTyxlQUFnQixFQUFBLENBQUUsZUFBZ0IsRUFBQTtBQUFBO0FBQ3pELEVBRU8sUUFBb0IsR0FBQTtBQUN2QixJQUFPLE9BQUEsS0FBQTtBQUFBO0FBQ1gsRUFFTyxJQUFnQixHQUFBO0FBQ25CLElBQU8sT0FBQSxJQUFBO0FBQUE7QUFDWCxFQUVPLElBQWUsR0FBQTtBQUNsQixJQUFPLE9BQUEsQ0FBQTtBQUFBO0FBQ1gsRUFDTyxJQUFlLEdBQUE7QUFDbEIsSUFBTyxPQUFBLENBQUE7QUFBQTtBQUNYLEVBQ08sSUFBZSxHQUFBO0FBQ2xCLElBQU8sT0FBQSxDQUFBO0FBQUE7QUFDWCxFQUVPLFdBQXVCLEdBQUE7QUFDMUIsSUFBQSxPQUFPLElBQUlFLFlBQUEsQ0FBUSxDQUFHLEVBQUEsQ0FBQSxFQUFHLENBQUMsQ0FBQTtBQUFBO0FBQzlCLEVBRU8sT0FBVSxHQUFBO0FBQ2IsSUFBTyxPQUFBLHNCQUFBO0FBQUE7QUFDWCxFQUVPLFNBQXFCLEdBQUE7QUFDeEIsSUFBTyxPQUFBLElBQUE7QUFBQTtBQUVmOzs7OyJ9