@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
74 lines (73 loc) • 17.1 kB
JavaScript
;
Object.defineProperties(exports, {
__esModule: { value: true },
[Symbol.toStringTag]: { value: "Module" }
});
require("../../_virtual/_rolldown/runtime.cjs.cjs");
const require_block_BlockMappings = require("../../block/BlockMappings.cjs.cjs");
const require_network_Identifiers = require("../Identifiers.cjs.cjs");
const require_network_packet_InventoryTransactionPacket = require("../packet/InventoryTransactionPacket.cjs.cjs");
const require_network_packet_LevelSoundEventPacket = require("../packet/LevelSoundEventPacket.cjs.cjs");
const require_network_packet_UpdateBlockPacket = require("../packet/UpdateBlockPacket.cjs.cjs");
let _jsprismarine_minecraft = require("@jsprismarine/minecraft");
//#region src/network/handler/InventoryTransactionHandler.ts
var InventoryTransactionHandler = class {
static NetID = require_network_Identifiers.default.InventoryTransactionPacket;
async handle(packet, server, connection) {
const player = connection.getPlayer();
if (!player.isOnline()) return;
if (player.gamemode === _jsprismarine_minecraft.Gametype.SPECTATOR) return;
switch (packet.transactionType) {
case require_network_packet_InventoryTransactionPacket.TransactionType.NORMAL:
packet.inventoryActions.forEach(async (action) => {
switch (action.sourceType) {
case 0: break;
default: server.getLogger().debug(`Unknown source type: ${action.sourceType}`);
}
});
break;
case require_network_packet_InventoryTransactionPacket.TransactionType.USE_ITEM: {
const useItemData = packet.transactionData;
switch (useItemData.actionType) {
case require_network_packet_InventoryTransactionPacket.UseItemAction.CLICK_BLOCK:
await player.getWorld().useItemOn(server.getBlockManager().getBlockByIdAndMeta(useItemData.itemInHand.getId(), useItemData.itemInHand.meta), useItemData.blockPosition, useItemData.blockFace, useItemData.clickPosition, player);
break;
case require_network_packet_InventoryTransactionPacket.UseItemAction.CLICK_AIR: break;
case require_network_packet_InventoryTransactionPacket.UseItemAction.BREAK_BLOCK: {
const chunk = await player.getWorld().getChunkAt(useItemData.blockPosition);
const blockId = chunk.getBlock(useItemData.blockPosition);
const block = server.getBlockManager().getBlockByIdAndMeta(blockId.id, blockId.meta);
if (!block) return;
const pk = new require_network_packet_UpdateBlockPacket.default();
pk.x = useItemData.blockPosition.getX();
pk.y = useItemData.blockPosition.getY();
pk.z = useItemData.blockPosition.getZ();
pk.blockRuntimeId = require_block_BlockMappings.BlockMappings.getRuntimeId("minecraft:air");
await Promise.all(server.getSessionManager().getAllPlayers().filter((p) => p.getWorld().getUUID() === player.getWorld().getUUID()).map(async (player) => player.getNetworkSession().getConnection().sendDataPacket(pk)));
const chunkPos = useItemData.blockPosition;
chunk.setBlock(chunkPos.getX(), chunkPos.getY(), chunkPos.getZ(), server.getBlockManager().getBlock("minecraft:air"));
const soundPk = new require_network_packet_LevelSoundEventPacket.default();
soundPk.sound = 5;
soundPk.positionX = player.getX();
soundPk.positionY = player.getY();
soundPk.positionZ = player.getZ();
soundPk.extraData = require_block_BlockMappings.BlockMappings.getRuntimeId(block.getName());
soundPk.entityType = ":";
soundPk.isBabyMob = false;
soundPk.disableRelativeVolume = false;
await Promise.all(player.getWorld().getPlayers().map((target) => target.getNetworkSession().send(soundPk)));
break;
}
default: server.getLogger().debug(`Unknown action type: ${useItemData.actionType}`);
}
break;
}
default:
server.getLogger().verbose(`Unknown type: ${packet.transactionType}`);
throw new Error("Invalid InventoryTransactionType");
}
}
};
//#endregion
exports.default = InventoryTransactionHandler;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW52ZW50b3J5VHJhbnNhY3Rpb25IYW5kbGVyLmNqcy5janMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25ldHdvcmsvaGFuZGxlci9JbnZlbnRvcnlUcmFuc2FjdGlvbkhhbmRsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2FtZXR5cGUgfSBmcm9tICdAanNwcmlzbWFyaW5lL21pbmVjcmFmdCc7XG5pbXBvcnQgdHlwZSB7IFBsYXllclNlc3Npb24gfSBmcm9tICcuLi8uLi8nO1xuaW1wb3J0IHR5cGUgU2VydmVyIGZyb20gJy4uLy4uL1NlcnZlcic7XG5pbXBvcnQgeyBCbG9ja01hcHBpbmdzIH0gZnJvbSAnLi4vLi4vYmxvY2svQmxvY2tNYXBwaW5ncyc7XG5pbXBvcnQgSWRlbnRpZmllcnMgZnJvbSAnLi4vSWRlbnRpZmllcnMnO1xuaW1wb3J0IHR5cGUgeyBJbnZlbnRvcnlUcmFuc2FjdGlvblBhY2tldCB9IGZyb20gJy4uL1BhY2tldHMnO1xuaW1wb3J0IHsgTGV2ZWxTb3VuZEV2ZW50UGFja2V0LCBVcGRhdGVCbG9ja1BhY2tldCB9IGZyb20gJy4uL1BhY2tldHMnO1xuaW1wb3J0IHR5cGUgeyBVc2VJdGVtRGF0YSB9IGZyb20gJy4uL3BhY2tldC9JbnZlbnRvcnlUcmFuc2FjdGlvblBhY2tldCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUsIFVzZUl0ZW1BY3Rpb24gfSBmcm9tICcuLi9wYWNrZXQvSW52ZW50b3J5VHJhbnNhY3Rpb25QYWNrZXQnO1xuaW1wb3J0IHR5cGUgUGFja2V0SGFuZGxlciBmcm9tICcuL1BhY2tldEhhbmRsZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnZlbnRvcnlUcmFuc2FjdGlvbkhhbmRsZXIgaW1wbGVtZW50cyBQYWNrZXRIYW5kbGVyPEludmVudG9yeVRyYW5zYWN0aW9uUGFja2V0PiB7XG4gICAgcHVibGljIHN0YXRpYyBOZXRJRCA9IElkZW50aWZpZXJzLkludmVudG9yeVRyYW5zYWN0aW9uUGFja2V0O1xuXG4gICAgcHVibGljIGFzeW5jIGhhbmRsZShwYWNrZXQ6IEludmVudG9yeVRyYW5zYWN0aW9uUGFja2V0LCBzZXJ2ZXI6IFNlcnZlciwgY29ubmVjdGlvbjogUGxheWVyU2Vzc2lvbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBwbGF5ZXIgPSBjb25uZWN0aW9uLmdldFBsYXllcigpO1xuICAgICAgICBpZiAoIXBsYXllci5pc09ubGluZSgpKSByZXR1cm47XG4gICAgICAgIGlmIChwbGF5ZXIuZ2FtZW1vZGUgPT09IEdhbWV0eXBlLlNQRUNUQVRPUikgcmV0dXJuOyAvLyBTcGVjdGF0b3JzIHNob3VsZG4ndCBiZSBhYmxlIHRvIGludGVyYWN0IHdpdGggdGhlIHdvcmxkLlxuXG4gICAgICAgIHN3aXRjaCAocGFja2V0LnRyYW5zYWN0aW9uVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuTk9STUFMOiB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogcmVmYWN0b3IgdGhpcyBjcmFwLlxuICAgICAgICAgICAgICAgIC8vIHByb2JhYmx5IGJhc2UgaXQgb24gaHR0cHM6Ly9naXRodWIuY29tL3BtbXAvUG9ja2V0TWluZS1NUC9ibG9iL2QxOWRiNWQyZTQ0ZDA5MjU3OThjMjg4MjQ3YzNiZGRiNzFkMjM5NzUvc3JjL3BvY2tldG1pbmUvUGxheWVyLnBocCNMMjM5OSBvciBzb21ldGhpbmcgc2ltaWxhci5cbiAgICAgICAgICAgICAgICAvLyBsZXQgbW92ZWRJdGVtOiBDb250YWluZXJFbnRyeSB8IG51bGw7XG4gICAgICAgICAgICAgICAgcGFja2V0LmludmVudG9yeUFjdGlvbnMuZm9yRWFjaChhc3luYyAoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uLnNvdXJjZVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYWNrIGZvciBjcmVhdGl2ZSBpbnZlbnRvcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmlmIChhY3Rpb24ud2luZG93SWQgPT09IDEyNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIGNyZWF0aXZlIGludmVudG9yeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGxheWVyLmdhbWVtb2RlICE9PSAxKSB0aHJvdyBuZXcgRXJyb3IoYFBsYXllciBpc24ndCBpbiBjcmVhdGl2ZSBtb2RlYCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgaWQgPSBhY3Rpb24ub2xkSXRlbS5nZXRJZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCBtZXRhID0gYWN0aW9uLm9sZEl0ZW0ubWV0YTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCBpdGVtID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgc2VydmVyLmdldEl0ZW1NYW5hZ2VyKCkuZ2V0SXRlbUJ5SWQoaWQpID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIHNlcnZlci5nZXRCbG9ja01hbmFnZXIoKS5nZXRCbG9ja0J5SWRBbmRNZXRhKGlkLCBtZXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgY291bnQgPSA2NDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb3ZlZEl0ZW0gPSBuZXcgQ29udGFpbmVyRW50cnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICBjb3VudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24ubmV3SXRlbS5nZXRJZCgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vdmVkSXRlbSA9IHBsYXllci5nZXRJbnZlbnRvcnkoKS5nZXRJdGVtKGFjdGlvbi50YXJnZXRTbG90KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxheWVyLmdldEludmVudG9yeSgpLnJlbW92ZUl0ZW0oYWN0aW9uLnRhcmdldFNsb3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtb3ZlZEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLmdldExvZ2dlcigpLmRlYnVnKGBtb3ZlZEl0ZW0gaXMgdW5kZWZpbmVkYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5ZXIuZ2V0SW52ZW50b3J5KCkuc2V0SXRlbShhY3Rpb24udGFyZ2V0U2xvdCwgbW92ZWRJdGVtKTsqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuZ2V0TG9nZ2VyKCkuZGVidWcoYFVua25vd24gc291cmNlIHR5cGU6ICR7YWN0aW9uLnNvdXJjZVR5cGV9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlVTRV9JVEVNOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXNlSXRlbURhdGEgPSA8VXNlSXRlbURhdGE+cGFja2V0LnRyYW5zYWN0aW9uRGF0YTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHVzZUl0ZW1EYXRhLmFjdGlvblR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBVc2VJdGVtQWN0aW9uLkNMSUNLX0JMT0NLOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcGxheWVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFdvcmxkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXNlSXRlbU9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRCbG9ja01hbmFnZXIoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldEJsb2NrQnlJZEFuZE1ldGEodXNlSXRlbURhdGEuaXRlbUluSGFuZC5nZXRJZCgpLCB1c2VJdGVtRGF0YS5pdGVtSW5IYW5kLm1ldGEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VJdGVtRGF0YS5ibG9ja1Bvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VJdGVtRGF0YS5ibG9ja0ZhY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUl0ZW1EYXRhLmNsaWNrUG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXllclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBVc2VJdGVtQWN0aW9uLkNMSUNLX0FJUjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFVzZUl0ZW1BY3Rpb24uQlJFQUtfQkxPQ0s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNodW5rID0gYXdhaXQgcGxheWVyLmdldFdvcmxkKCkuZ2V0Q2h1bmtBdCh1c2VJdGVtRGF0YS5ibG9ja1Bvc2l0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tJZCA9IGNodW5rLmdldEJsb2NrKHVzZUl0ZW1EYXRhLmJsb2NrUG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBzZXJ2ZXIuZ2V0QmxvY2tNYW5hZ2VyKCkuZ2V0QmxvY2tCeUlkQW5kTWV0YShibG9ja0lkLmlkLCBibG9ja0lkLm1ldGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwayA9IG5ldyBVcGRhdGVCbG9ja1BhY2tldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGsueCA9IHVzZUl0ZW1EYXRhLmJsb2NrUG9zaXRpb24uZ2V0WCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGsueSA9IHVzZUl0ZW1EYXRhLmJsb2NrUG9zaXRpb24uZ2V0WSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGsueiA9IHVzZUl0ZW1EYXRhLmJsb2NrUG9zaXRpb24uZ2V0WigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogcnVuIGEgZnVuY3Rpb24gZnJvbSBibG9jay5nZXRCcmVha0NvbnNlcXVlbmNlcygpIGJlY2F1c2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBicm9rZW4gYmxvY2sgbWF5IHBsYWNlIG1vcmUgYmxvY2tzIG9yIHJ1biBibG9jayByZWxhdGVkIGNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBleGFtcGxlLCBpY2Ugc2hvdWxkIHJlcGxhY2UgaXRzZWxmIHdpdGggYSB3YXRlciBzb3VyY2UgYmxvY2tcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIHN1cnZpdmFsXG4gICAgICAgICAgICAgICAgICAgICAgICBway5ibG9ja1J1bnRpbWVJZCA9IEJsb2NrTWFwcGluZ3MuZ2V0UnVudGltZUlkKCdtaW5lY3JhZnQ6YWlyJyk7IC8vIEFpclxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTZW5kIGJsb2NrLWJyZWFrIHBhY2tldCB0byBhbGwgcGxheWVycyBpbiB0aGUgc2FtZSB3b3JsZFxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRTZXNzaW9uTWFuYWdlcigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRBbGxQbGF5ZXJzKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigocCkgPT4gcC5nZXRXb3JsZCgpLmdldFVVSUQoKSA9PT0gcGxheWVyLmdldFdvcmxkKCkuZ2V0VVVJRCgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGFzeW5jIChwbGF5ZXIpID0+IHBsYXllci5nZXROZXR3b3JrU2Vzc2lvbigpLmdldENvbm5lY3Rpb24oKS5zZW5kRGF0YVBhY2tldChwaykpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaHVua1BvcyA9IHVzZUl0ZW1EYXRhLmJsb2NrUG9zaXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBjaHVuay5zZXRCbG9jayhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVua1Bvcy5nZXRYKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtQb3MuZ2V0WSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rUG9zLmdldFooKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuZ2V0QmxvY2tNYW5hZ2VyKCkuZ2V0QmxvY2soJ21pbmVjcmFmdDphaXInKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvdW5kUGsgPSBuZXcgTGV2ZWxTb3VuZEV2ZW50UGFja2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VuZFBrLnNvdW5kID0gNTsgLy8gVE9ETzogZW51bVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VuZFBrLnBvc2l0aW9uWCA9IHBsYXllci5nZXRYKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VuZFBrLnBvc2l0aW9uWSA9IHBsYXllci5nZXRZKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VuZFBrLnBvc2l0aW9uWiA9IHBsYXllci5nZXRaKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vID8gMCBvciBpZCAmIDB4ZlxuICAgICAgICAgICAgICAgICAgICAgICAgc291bmRQay5leHRyYURhdGEgPSBCbG9ja01hcHBpbmdzLmdldFJ1bnRpbWVJZChibG9jay5nZXROYW1lKCkpOyAvLyBJbiB0aGlzIGNhc2UgcmVmZXJzIHRvIGJsb2NrIHJ1bnRpbWUgSWRcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdW5kUGsuZW50aXR5VHlwZSA9ICc6JztcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdW5kUGsuaXNCYWJ5TW9iID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VuZFBrLmRpc2FibGVSZWxhdGl2ZVZvbHVtZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFdvcmxkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFBsYXllcnMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKCh0YXJnZXQpID0+IHRhcmdldC5nZXROZXR3b3JrU2Vzc2lvbigpLnNlbmQoc291bmRQaykpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLmdldExvZ2dlcigpLmRlYnVnKGBVbmtub3duIGFjdGlvbiB0eXBlOiAke3VzZUl0ZW1EYXRhLmFjdGlvblR5cGV9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXIuZ2V0TG9nZ2VyKCkudmVyYm9zZShgVW5rbm93biB0eXBlOiAke3BhY2tldC50cmFuc2FjdGlvblR5cGV9YCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEludmVudG9yeVRyYW5zYWN0aW9uVHlwZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBV0EsSUFBcUIsOEJBQXJCLE1BQXNHO0NBQ2xHLE9BQWMsUUFBUSw0QkFBQSxRQUFZO0NBRWxDLE1BQWEsT0FBTyxR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