UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

146 lines (141 loc) • 22.2 kB
'use strict'; Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } }); const math = require('@jsprismarine/math'); const item_Item = require('../../item/Item.cjs.cjs'); const network_Identifiers = require('../Identifiers.cjs.cjs'); const network_NetworkUtil = require('../NetworkUtil.cjs.cjs'); const network_packet_DataPacket = require('./DataPacket.cjs.cjs'); var UseItemAction = /* @__PURE__ */ ((UseItemAction2) => { UseItemAction2[UseItemAction2["CLICK_BLOCK"] = 0] = "CLICK_BLOCK"; UseItemAction2[UseItemAction2["CLICK_AIR"] = 1] = "CLICK_AIR"; UseItemAction2[UseItemAction2["BREAK_BLOCK"] = 2] = "BREAK_BLOCK"; return UseItemAction2; })(UseItemAction || {}); var TransactionType = /* @__PURE__ */ ((TransactionType2) => { TransactionType2[TransactionType2["NORMAL"] = 0] = "NORMAL"; TransactionType2[TransactionType2["MISMATCH"] = 1] = "MISMATCH"; TransactionType2[TransactionType2["USE_ITEM"] = 2] = "USE_ITEM"; TransactionType2[TransactionType2["USE_ITEM_ON_ENTITY"] = 3] = "USE_ITEM_ON_ENTITY"; TransactionType2[TransactionType2["RELASE_ITEM"] = 4] = "RELASE_ITEM"; return TransactionType2; })(TransactionType || {}); class LegacySlotChange { constructor(containerId, slots) { this.containerId = containerId; this.slots = slots; } static fromNetwork(stream) { const containerId = stream.readByte(); const slotCount = stream.readUnsignedVarInt(); const slots = Array.from(stream.read(slotCount)); return new LegacySlotChange(containerId, slots); } toNetwork(stream) { stream.writeByte(this.containerId); stream.writeUnsignedVarInt(this.slots.length); stream.write(Buffer.from(this.slots)); } } var ActionSource = /* @__PURE__ */ ((ActionSource2) => { ActionSource2[ActionSource2["INVALID"] = -1] = "INVALID"; ActionSource2[ActionSource2["CONTAINER"] = 0] = "CONTAINER"; ActionSource2[ActionSource2["GLOBAL"] = 1] = "GLOBAL"; ActionSource2[ActionSource2["WORLD"] = 2] = "WORLD"; ActionSource2[ActionSource2["CREATIVE"] = 3] = "CREATIVE"; ActionSource2[ActionSource2["UNTRACKED_INTERACTION_UI"] = 100] = "UNTRACKED_INTERACTION_UI"; ActionSource2[ActionSource2["NON_IMPLEMENTED_TODO"] = 99999] = "NON_IMPLEMENTED_TODO"; return ActionSource2; })(ActionSource || {}); class InventoryAction { constructor(sourceType, windowId, sourceFlags, targetSlot, oldItem, newItem) { this.sourceType = sourceType; this.windowId = windowId; this.sourceFlags = sourceFlags; this.targetSlot = targetSlot; this.oldItem = oldItem; this.newItem = newItem; } static fromNetwork(stream) { const sourceType = stream.readUnsignedVarInt(); const windowId = sourceType === 0 /* CONTAINER */ || sourceType === 99999 /* NON_IMPLEMENTED_TODO */ ? stream.readVarInt() : null; const sourceFlags = sourceType === 2 /* WORLD */ ? stream.readUnsignedVarInt() : null; return new InventoryAction( sourceType, windowId, sourceFlags, stream.readUnsignedVarInt(), item_Item.Item.networkDeserialize(stream), item_Item.Item.networkDeserialize(stream) ); } toNetwork(stream) { stream.writeUnsignedVarInt(this.sourceType); [0 /* CONTAINER */, 99999 /* NON_IMPLEMENTED_TODO */].includes(this.sourceType) && stream.writeVarInt(this.windowId); this.sourceType === 2 /* WORLD */ && stream.writeUnsignedVarInt(this.sourceFlags); stream.writeUnsignedVarInt(this.targetSlot); this.oldItem.networkSerialize(stream); this.newItem.networkSerialize(stream); } } class InventoryTransactionPacket extends network_packet_DataPacket.default { static NetID = network_Identifiers.default.InventoryTransactionPacket; legacyRequestId; legacySlotChanges; transactionType; inventoryActions; transactionData; decodePayload() { this.legacyRequestId = this.readVarInt(); if (this.legacyRequestId !== 0) { const slotChanges = this.readUnsignedVarInt(); this.legacySlotChanges = Array.from({ length: slotChanges }, () => LegacySlotChange.fromNetwork(this)); } this.transactionType = this.readUnsignedVarInt(); const actionsCount = this.readUnsignedVarInt(); this.inventoryActions = Array.from({ length: actionsCount }, () => InventoryAction.fromNetwork(this)); switch (this.transactionType) { case 0 /* NORMAL */: case 1 /* MISMATCH */: break; case 2 /* USE_ITEM */: this.transactionData = { actionType: this.readUnsignedVarInt(), blockPosition: network_NetworkUtil.NetworkUtil.readBlockPosition(this), blockFace: this.readVarInt(), hotbarSlot: this.readVarInt(), itemInHand: item_Item.Item.networkDeserialize(this), playerPosition: new math.Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE()), clickPosition: new math.Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE()), blockRuntimeId: this.readUnsignedVarInt() }; break; case 3 /* USE_ITEM_ON_ENTITY */: this.transactionData = { entityRuntimeId: this.readUnsignedVarLong(), actionType: this.readUnsignedVarInt(), hotbarSlot: this.readVarInt(), itemInHand: item_Item.Item.networkDeserialize(this), playerPosition: new math.Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE()), clickPosition: new math.Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE()) }; break; case 4 /* RELASE_ITEM */: this.transactionData = { actionType: this.readUnsignedVarInt(), hotbarSlot: this.readVarInt(), itemInHand: item_Item.Item.networkDeserialize(this), headRotation: new math.Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE()) }; break; default: throw new TypeError(`Unknown transaction type ${this.transactionType}`); } } } exports.ActionSource = ActionSource; exports.InventoryAction = InventoryAction; exports.LegacySlotChange = LegacySlotChange; exports.TransactionType = TransactionType; exports.UseItemAction = UseItemAction; exports.default = InventoryTransactionPacket; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW52ZW50b3J5VHJhbnNhY3Rpb25QYWNrZXQuY2pzLmNqcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25ldHdvcmsvcGFja2V0L0ludmVudG9yeVRyYW5zYWN0aW9uUGFja2V0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIEJpbmFyeVN0cmVhbSBmcm9tICdAanNwcmlzbWFyaW5lL2pzYmluYXJ5dXRpbHMnO1xuaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gJ0Bqc3ByaXNtYXJpbmUvbWF0aCc7XG5pbXBvcnQgeyBJdGVtIH0gZnJvbSAnLi4vLi4vaXRlbS9JdGVtJztcbmltcG9ydCB0eXBlIEJsb2NrUG9zaXRpb24gZnJvbSAnLi4vLi4vd29ybGQvQmxvY2tQb3NpdGlvbic7XG5pbXBvcnQgSWRlbnRpZmllcnMgZnJvbSAnLi4vSWRlbnRpZmllcnMnO1xuaW1wb3J0IHsgTmV0d29ya1V0aWwgfSBmcm9tICcuLi9OZXR3b3JrVXRpbCc7XG5pbXBvcnQgRGF0YVBhY2tldCBmcm9tICcuL0RhdGFQYWNrZXQnO1xuXG5leHBvcnQgZW51bSBVc2VJdGVtQWN0aW9uIHtcbiAgICBDTElDS19CTE9DSyxcbiAgICBDTElDS19BSVIsXG4gICAgQlJFQUtfQkxPQ0tcbn1cblxuZXhwb3J0IGVudW0gVHJhbnNhY3Rpb25UeXBlIHtcbiAgICBOT1JNQUwsXG4gICAgTUlTTUFUQ0gsXG4gICAgVVNFX0lURU0sXG4gICAgVVNFX0lURU1fT05fRU5USVRZLFxuICAgIFJFTEFTRV9JVEVNXG59XG5cbmV4cG9ydCBjbGFzcyBMZWdhY3lTbG90Q2hhbmdlIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBjb250YWluZXJJZDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgc2xvdHM6IG51bWJlcltdXG4gICAgKSB7fVxuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tTmV0d29yayhzdHJlYW06IEJpbmFyeVN0cmVhbSk6IExlZ2FjeVNsb3RDaGFuZ2Uge1xuICAgICAgICBjb25zdCBjb250YWluZXJJZCA9IHN0cmVhbS5yZWFkQnl0ZSgpO1xuICAgICAgICBjb25zdCBzbG90Q291bnQgPSBzdHJlYW0ucmVhZFVuc2lnbmVkVmFySW50KCk7XG4gICAgICAgIGNvbnN0IHNsb3RzID0gQXJyYXkuZnJvbShzdHJlYW0ucmVhZChzbG90Q291bnQpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBMZWdhY3lTbG90Q2hhbmdlKGNvbnRhaW5lcklkLCBzbG90cyk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvTmV0d29yayhzdHJlYW06IEJpbmFyeVN0cmVhbSk6IHZvaWQge1xuICAgICAgICBzdHJlYW0ud3JpdGVCeXRlKHRoaXMuY29udGFpbmVySWQpO1xuICAgICAgICBzdHJlYW0ud3JpdGVVbnNpZ25lZFZhckludCh0aGlzLnNsb3RzLmxlbmd0aCk7XG4gICAgICAgIHN0cmVhbS53cml0ZShCdWZmZXIuZnJvbSh0aGlzLnNsb3RzKSk7XG4gICAgfVxufVxuXG5leHBvcnQgZW51bSBBY3Rpb25Tb3VyY2Uge1xuICAgIElOVkFMSUQgPSAtMSxcbiAgICBDT05UQUlORVIsXG4gICAgR0xPQkFMLFxuICAgIFdPUkxELFxuICAgIENSRUFUSVZFLFxuICAgIFVOVFJBQ0tFRF9JTlRFUkFDVElPTl9VSSA9IDEwMCxcbiAgICBOT05fSU1QTEVNRU5URURfVE9ETyA9IDk5OTk5XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZlbnRvcnlBY3Rpb24ge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHNvdXJjZVR5cGU6IG51bWJlcixcbiAgICAgICAgcHVibGljIHdpbmRvd0lkOiBudW1iZXIgfCBudWxsLFxuICAgICAgICBwdWJsaWMgc291cmNlRmxhZ3M6IG51bWJlciB8IG51bGwsXG4gICAgICAgIHB1YmxpYyB0YXJnZXRTbG90OiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBvbGRJdGVtOiBJdGVtLFxuICAgICAgICBwdWJsaWMgbmV3SXRlbTogSXRlbVxuICAgICkge31cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbU5ldHdvcmsoc3RyZWFtOiBCaW5hcnlTdHJlYW0pOiBJbnZlbnRvcnlBY3Rpb24ge1xuICAgICAgICBjb25zdCBzb3VyY2VUeXBlID0gc3RyZWFtLnJlYWRVbnNpZ25lZFZhckludCgpO1xuICAgICAgICBjb25zdCB3aW5kb3dJZCA9XG4gICAgICAgICAgICBzb3VyY2VUeXBlID09PSBBY3Rpb25Tb3VyY2UuQ09OVEFJTkVSIHx8IHNvdXJjZVR5cGUgPT09IEFjdGlvblNvdXJjZS5OT05fSU1QTEVNRU5URURfVE9ET1xuICAgICAgICAgICAgICAgID8gc3RyZWFtLnJlYWRWYXJJbnQoKVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgY29uc3Qgc291cmNlRmxhZ3MgPSBzb3VyY2VUeXBlID09PSBBY3Rpb25Tb3VyY2UuV09STEQgPyBzdHJlYW0ucmVhZFVuc2lnbmVkVmFySW50KCkgOiBudWxsO1xuICAgICAgICByZXR1cm4gbmV3IEludmVudG9yeUFjdGlvbihcbiAgICAgICAgICAgIHNvdXJjZVR5cGUsXG4gICAgICAgICAgICB3aW5kb3dJZCxcbiAgICAgICAgICAgIHNvdXJjZUZsYWdzLFxuICAgICAgICAgICAgc3RyZWFtLnJlYWRVbnNpZ25lZFZhckludCgpLFxuICAgICAgICAgICAgSXRlbS5uZXR3b3JrRGVzZXJpYWxpemUoc3RyZWFtKSxcbiAgICAgICAgICAgIEl0ZW0ubmV0d29ya0Rlc2VyaWFsaXplKHN0cmVhbSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9OZXR3b3JrKHN0cmVhbTogQmluYXJ5U3RyZWFtKTogdm9pZCB7XG4gICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkVmFySW50KHRoaXMuc291cmNlVHlwZSk7XG4gICAgICAgIFtBY3Rpb25Tb3VyY2UuQ09OVEFJTkVSLCBBY3Rpb25Tb3VyY2UuTk9OX0lNUExFTUVOVEVEX1RPRE9dLmluY2x1ZGVzKHRoaXMuc291cmNlVHlwZSkgJiZcbiAgICAgICAgICAgIHN0cmVhbS53cml0ZVZhckludCh0aGlzLndpbmRvd0lkISk7XG4gICAgICAgIHRoaXMuc291cmNlVHlwZSA9PT0gQWN0aW9uU291cmNlLldPUkxEICYmIHN0cmVhbS53cml0ZVVuc2lnbmVkVmFySW50KHRoaXMuc291cmNlRmxhZ3MhKTtcbiAgICAgICAgc3RyZWFtLndyaXRlVW5zaWduZWRWYXJJbnQodGhpcy50YXJnZXRTbG90KTtcbiAgICAgICAgdGhpcy5vbGRJdGVtLm5ldHdvcmtTZXJpYWxpemUoc3RyZWFtKTtcbiAgICAgICAgdGhpcy5uZXdJdGVtLm5ldHdvcmtTZXJpYWxpemUoc3RyZWFtKTtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25EYXRhIHtcbiAgICBhY3Rpb25UeXBlOiBudW1iZXI7XG4gICAgaG90YmFyU2xvdDogbnVtYmVyO1xuICAgIGl0ZW1JbkhhbmQ6IEl0ZW07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlSXRlbURhdGEgZXh0ZW5kcyBUcmFuc2FjdGlvbkRhdGEge1xuICAgIGJsb2NrUG9zaXRpb246IEJsb2NrUG9zaXRpb247XG4gICAgYmxvY2tGYWNlOiBudW1iZXI7XG4gICAgcGxheWVyUG9zaXRpb246IFZlY3RvcjM7XG4gICAgY2xpY2tQb3NpdGlvbjogVmVjdG9yMztcbiAgICBibG9ja1J1bnRpbWVJZDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZUl0ZW1PbkVudGl0eURhdGEgZXh0ZW5kcyBUcmFuc2FjdGlvbkRhdGEge1xuICAgIGVudGl0eVJ1bnRpbWVJZDogYmlnaW50O1xuICAgIHBsYXllclBvc2l0aW9uOiBWZWN0b3IzO1xuICAgIGNsaWNrUG9zaXRpb246IFZlY3RvcjM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVsYXNlSXRlbURhdGEgZXh0ZW5kcyBUcmFuc2FjdGlvbkRhdGEge1xuICAgIGhlYWRSb3RhdGlvbjogVmVjdG9yMztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW52ZW50b3J5VHJhbnNhY3Rpb25QYWNrZXQgZXh0ZW5kcyBEYXRhUGFja2V0IHtcbiAgICBwdWJsaWMgc3RhdGljIE5ldElEID0gSWRlbnRpZmllcnMuSW52ZW50b3J5VHJhbnNhY3Rpb25QYWNrZXQ7XG5cbiAgICBwdWJsaWMgbGVnYWN5UmVxdWVzdElkITogbnVtYmVyO1xuICAgIHB1YmxpYyBsZWdhY3lTbG90Q2hhbmdlcyE6IExlZ2FjeVNsb3RDaGFuZ2VbXTtcblxuICAgIHB1YmxpYyB0cmFuc2FjdGlvblR5cGUhOiBUcmFuc2FjdGlvblR5cGU7XG4gICAgcHVibGljIGludmVudG9yeUFjdGlvbnMhOiBJbnZlbnRvcnlBY3Rpb25bXTtcblxuICAgIHB1YmxpYyB0cmFuc2FjdGlvbkRhdGEhOiBUcmFuc2FjdGlvbkRhdGE7XG5cbiAgICBwdWJsaWMgZGVjb2RlUGF5bG9hZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sZWdhY3lSZXF1ZXN0SWQgPSB0aGlzLnJlYWRWYXJJbnQoKTtcbiAgICAgICAgaWYgKHRoaXMubGVnYWN5UmVxdWVzdElkICE9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBzbG90Q2hhbmdlcyA9IHRoaXMucmVhZFVuc2lnbmVkVmFySW50KCk7XG4gICAgICAgICAgICB0aGlzLmxlZ2FjeVNsb3RDaGFuZ2VzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogc2xvdENoYW5nZXMgfSwgKCkgPT4gTGVnYWN5U2xvdENoYW5nZS5mcm9tTmV0d29yayh0aGlzKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uVHlwZSA9IHRoaXMucmVhZFVuc2lnbmVkVmFySW50KCk7XG5cbiAgICAgICAgY29uc3QgYWN0aW9uc0NvdW50ID0gdGhpcy5yZWFkVW5zaWduZWRWYXJJbnQoKTtcbiAgICAgICAgdGhpcy5pbnZlbnRvcnlBY3Rpb25zID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogYWN0aW9uc0NvdW50IH0sICgpID0+IEludmVudG9yeUFjdGlvbi5mcm9tTmV0d29yayh0aGlzKSk7XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLnRyYW5zYWN0aW9uVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuTk9STUFMOlxuICAgICAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuTUlTTUFUQ0g6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5VU0VfSVRFTTpcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRGF0YSA9IDxVc2VJdGVtRGF0YT57XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGU6IHRoaXMucmVhZFVuc2lnbmVkVmFySW50KCksXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrUG9zaXRpb246IE5ldHdvcmtVdGlsLnJlYWRCbG9ja1Bvc2l0aW9uKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICBibG9ja0ZhY2U6IHRoaXMucmVhZFZhckludCgpLFxuICAgICAgICAgICAgICAgICAgICBob3RiYXJTbG90OiB0aGlzLnJlYWRWYXJJbnQoKSxcbiAgICAgICAgICAgICAgICAgICAgaXRlbUluSGFuZDogSXRlbS5uZXR3b3JrRGVzZXJpYWxpemUodGhpcyksXG4gICAgICAgICAgICAgICAgICAgIHBsYXllclBvc2l0aW9uOiBuZXcgVmVjdG9yMyh0aGlzLnJlYWRGbG9hdExFKCksIHRoaXMucmVhZEZsb2F0TEUoKSwgdGhpcy5yZWFkRmxvYXRMRSgpKSxcbiAgICAgICAgICAgICAgICAgICAgY2xpY2tQb3NpdGlvbjogbmV3IFZlY3RvcjModGhpcy5yZWFkRmxvYXRMRSgpLCB0aGlzLnJlYWRGbG9hdExFKCksIHRoaXMucmVhZEZsb2F0TEUoKSksXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrUnVudGltZUlkOiB0aGlzLnJlYWRVbnNpZ25lZFZhckludCgpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlVTRV9JVEVNX09OX0VOVElUWTpcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRGF0YSA9IDxVc2VJdGVtT25FbnRpdHlEYXRhPntcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5UnVudGltZUlkOiB0aGlzLnJlYWRVbnNpZ25lZFZhckxvbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZTogdGhpcy5yZWFkVW5zaWduZWRWYXJJbnQoKSxcbiAgICAgICAgICAgICAgICAgICAgaG90YmFyU2xvdDogdGhpcy5yZWFkVmFySW50KCksXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1JbkhhbmQ6IEl0ZW0ubmV0d29ya0Rlc2VyaWFsaXplKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICBwbGF5ZXJQb3NpdGlvbjogbmV3IFZlY3RvcjModGhpcy5yZWFkRmxvYXRMRSgpLCB0aGlzLnJlYWRGbG9hdExFKCksIHRoaXMucmVhZEZsb2F0TEUoKSksXG4gICAgICAgICAgICAgICAgICAgIGNsaWNrUG9zaXRpb246IG5ldyBWZWN0b3IzKHRoaXMucmVhZEZsb2F0TEUoKSwgdGhpcy5yZWFkRmxvYXRMRSgpLCB0aGlzLnJlYWRGbG9hdExFKCkpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlJFTEFTRV9JVEVNOlxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25EYXRhID0gPFJlbGFzZUl0ZW1EYXRhPntcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZTogdGhpcy5yZWFkVW5zaWduZWRWYXJJbnQoKSxcbiAgICAgICAgICAgICAgICAgICAgaG90YmFyU2xvdDogdGhpcy5yZWFkVmFySW50KCksXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1JbkhhbmQ6IEl0ZW0ubmV0d29ya0Rlc2VyaWFsaXplKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICBoZWFkUm90YXRpb246IG5ldyBWZWN0b3IzKHRoaXMucmVhZEZsb2F0TEUoKSwgdGhpcy5yZWFkRmxvYXRMRSgpLCB0aGlzLnJlYWRGbG9hdExFKCkpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5rbm93biB0cmFuc2FjdGlvbiB0eXBlICR7dGhpcy50cmFuc2FjdGlvblR5cGV9YCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXSwibmFtZXMiOlsiVXNlSXRlbUFjdGlvbiIsIlRyYW5zYWN0aW9uVHlwZSIsIkFjdGlvblNvdXJjZSIsIkl0ZW0iLCJEYXRhUGFja2V0IiwiSWRlbnRpZmllcnMiLCJOZXR3b3JrVXRpbCIsIlZlY3RvcjMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFRWSxJQUFBLGFBQUEscUJBQUFBLGNBQUwsS0FBQTtBQUNILEVBQUFBLGNBQUEsQ0FBQSxjQUFBLENBQUEsYUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsYUFBQTtBQUNBLEVBQUFBLGNBQUEsQ0FBQSxjQUFBLENBQUEsV0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsV0FBQTtBQUNBLEVBQUFBLGNBQUEsQ0FBQSxjQUFBLENBQUEsYUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsYUFBQTtBQUhRLEVBQUFBLE9BQUFBLGNBQUFBO0FBQUEsQ0FBQSxFQUFBLGFBQUEsSUFBQSxFQUFBO0FBTUEsSUFBQSxlQUFBLHFCQUFBQyxnQkFBTCxLQUFBO0FBQ0gsRUFBQUEsZ0JBQUEsQ0FBQSxnQkFBQSxDQUFBLFFBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxHQUFBLFFBQUE7QUFDQSxFQUFBQSxnQkFBQSxDQUFBLGdCQUFBLENBQUEsVUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsVUFBQTtBQUNBLEVBQUFBLGdCQUFBLENBQUEs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