UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

137 lines (134 loc) • 21.6 kB
import { Vector3 } from '@jsprismarine/math'; import { Item } from '../../item/Item.es.js'; import Identifiers from '../Identifiers.es.js'; import { NetworkUtil } from '../NetworkUtil.es.js'; import DataPacket from './DataPacket.es.js'; 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.networkDeserialize(stream), 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 DataPacket { static NetID = Identifiers.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: NetworkUtil.readBlockPosition(this), blockFace: this.readVarInt(), hotbarSlot: this.readVarInt(), itemInHand: Item.networkDeserialize(this), playerPosition: new Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE()), clickPosition: new 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.networkDeserialize(this), playerPosition: new Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE()), clickPosition: new Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE()) }; break; case 4 /* RELASE_ITEM */: this.transactionData = { actionType: this.readUnsignedVarInt(), hotbarSlot: this.readVarInt(), itemInHand: Item.networkDeserialize(this), headRotation: new Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE()) }; break; default: throw new TypeError(`Unknown transaction type ${this.transactionType}`); } } } export { ActionSource, InventoryAction, LegacySlotChange, TransactionType, UseItemAction, InventoryTransactionPacket as default }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW52ZW50b3J5VHJhbnNhY3Rpb25QYWNrZXQuZXMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9uZXR3b3JrL3BhY2tldC9JbnZlbnRvcnlUcmFuc2FjdGlvblBhY2tldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBCaW5hcnlTdHJlYW0gZnJvbSAnQGpzcHJpc21hcmluZS9qc2JpbmFyeXV0aWxzJztcbmltcG9ydCB7IFZlY3RvcjMgfSBmcm9tICdAanNwcmlzbWFyaW5lL21hdGgnO1xuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uLy4uL2l0ZW0vSXRlbSc7XG5pbXBvcnQgdHlwZSBCbG9ja1Bvc2l0aW9uIGZyb20gJy4uLy4uL3dvcmxkL0Jsb2NrUG9zaXRpb24nO1xuaW1wb3J0IElkZW50aWZpZXJzIGZyb20gJy4uL0lkZW50aWZpZXJzJztcbmltcG9ydCB7IE5ldHdvcmtVdGlsIH0gZnJvbSAnLi4vTmV0d29ya1V0aWwnO1xuaW1wb3J0IERhdGFQYWNrZXQgZnJvbSAnLi9EYXRhUGFja2V0JztcblxuZXhwb3J0IGVudW0gVXNlSXRlbUFjdGlvbiB7XG4gICAgQ0xJQ0tfQkxPQ0ssXG4gICAgQ0xJQ0tfQUlSLFxuICAgIEJSRUFLX0JMT0NLXG59XG5cbmV4cG9ydCBlbnVtIFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgTk9STUFMLFxuICAgIE1JU01BVENILFxuICAgIFVTRV9JVEVNLFxuICAgIFVTRV9JVEVNX09OX0VOVElUWSxcbiAgICBSRUxBU0VfSVRFTVxufVxuXG5leHBvcnQgY2xhc3MgTGVnYWN5U2xvdENoYW5nZSB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgY29udGFpbmVySWQ6IG51bWJlcixcbiAgICAgICAgcHVibGljIHNsb3RzOiBudW1iZXJbXVxuICAgICkge31cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbU5ldHdvcmsoc3RyZWFtOiBCaW5hcnlTdHJlYW0pOiBMZWdhY3lTbG90Q2hhbmdlIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVySWQgPSBzdHJlYW0ucmVhZEJ5dGUoKTtcbiAgICAgICAgY29uc3Qgc2xvdENvdW50ID0gc3RyZWFtLnJlYWRVbnNpZ25lZFZhckludCgpO1xuICAgICAgICBjb25zdCBzbG90cyA9IEFycmF5LmZyb20oc3RyZWFtLnJlYWQoc2xvdENvdW50KSk7XG4gICAgICAgIHJldHVybiBuZXcgTGVnYWN5U2xvdENoYW5nZShjb250YWluZXJJZCwgc2xvdHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b05ldHdvcmsoc3RyZWFtOiBCaW5hcnlTdHJlYW0pOiB2b2lkIHtcbiAgICAgICAgc3RyZWFtLndyaXRlQnl0ZSh0aGlzLmNvbnRhaW5lcklkKTtcbiAgICAgICAgc3RyZWFtLndyaXRlVW5zaWduZWRWYXJJbnQodGhpcy5zbG90cy5sZW5ndGgpO1xuICAgICAgICBzdHJlYW0ud3JpdGUoQnVmZmVyLmZyb20odGhpcy5zbG90cykpO1xuICAgIH1cbn1cblxuZXhwb3J0IGVudW0gQWN0aW9uU291cmNlIHtcbiAgICBJTlZBTElEID0gLTEsXG4gICAgQ09OVEFJTkVSLFxuICAgIEdMT0JBTCxcbiAgICBXT1JMRCxcbiAgICBDUkVBVElWRSxcbiAgICBVTlRSQUNLRURfSU5URVJBQ1RJT05fVUkgPSAxMDAsXG4gICAgTk9OX0lNUExFTUVOVEVEX1RPRE8gPSA5OTk5OVxufVxuXG5leHBvcnQgY2xhc3MgSW52ZW50b3J5QWN0aW9uIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBzb3VyY2VUeXBlOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyB3aW5kb3dJZDogbnVtYmVyIHwgbnVsbCxcbiAgICAgICAgcHVibGljIHNvdXJjZUZsYWdzOiBudW1iZXIgfCBudWxsLFxuICAgICAgICBwdWJsaWMgdGFyZ2V0U2xvdDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgb2xkSXRlbTogSXRlbSxcbiAgICAgICAgcHVibGljIG5ld0l0ZW06IEl0ZW1cbiAgICApIHt9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21OZXR3b3JrKHN0cmVhbTogQmluYXJ5U3RyZWFtKTogSW52ZW50b3J5QWN0aW9uIHtcbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IHN0cmVhbS5yZWFkVW5zaWduZWRWYXJJbnQoKTtcbiAgICAgICAgY29uc3Qgd2luZG93SWQgPVxuICAgICAgICAgICAgc291cmNlVHlwZSA9PT0gQWN0aW9uU291cmNlLkNPTlRBSU5FUiB8fCBzb3VyY2VUeXBlID09PSBBY3Rpb25Tb3VyY2UuTk9OX0lNUExFTUVOVEVEX1RPRE9cbiAgICAgICAgICAgICAgICA/IHN0cmVhbS5yZWFkVmFySW50KClcbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGNvbnN0IHNvdXJjZUZsYWdzID0gc291cmNlVHlwZSA9PT0gQWN0aW9uU291cmNlLldPUkxEID8gc3RyZWFtLnJlYWRVbnNpZ25lZFZhckludCgpIDogbnVsbDtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnZlbnRvcnlBY3Rpb24oXG4gICAgICAgICAgICBzb3VyY2VUeXBlLFxuICAgICAgICAgICAgd2luZG93SWQsXG4gICAgICAgICAgICBzb3VyY2VGbGFncyxcbiAgICAgICAgICAgIHN0cmVhbS5yZWFkVW5zaWduZWRWYXJJbnQoKSxcbiAgICAgICAgICAgIEl0ZW0ubmV0d29ya0Rlc2VyaWFsaXplKHN0cmVhbSksXG4gICAgICAgICAgICBJdGVtLm5ldHdvcmtEZXNlcmlhbGl6ZShzdHJlYW0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvTmV0d29yayhzdHJlYW06IEJpbmFyeVN0cmVhbSk6IHZvaWQge1xuICAgICAgICBzdHJlYW0ud3JpdGVVbnNpZ25lZFZhckludCh0aGlzLnNvdXJjZVR5cGUpO1xuICAgICAgICBbQWN0aW9uU291cmNlLkNPTlRBSU5FUiwgQWN0aW9uU291cmNlLk5PTl9JTVBMRU1FTlRFRF9UT0RPXS5pbmNsdWRlcyh0aGlzLnNvdXJjZVR5cGUpICYmXG4gICAgICAgICAgICBzdHJlYW0ud3JpdGVWYXJJbnQodGhpcy53aW5kb3dJZCEpO1xuICAgICAgICB0aGlzLnNvdXJjZVR5cGUgPT09IEFjdGlvblNvdXJjZS5XT1JMRCAmJiBzdHJlYW0ud3JpdGVVbnNpZ25lZFZhckludCh0aGlzLnNvdXJjZUZsYWdzISk7XG4gICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkVmFySW50KHRoaXMudGFyZ2V0U2xvdCk7XG4gICAgICAgIHRoaXMub2xkSXRlbS5uZXR3b3JrU2VyaWFsaXplKHN0cmVhbSk7XG4gICAgICAgIHRoaXMubmV3SXRlbS5uZXR3b3JrU2VyaWFsaXplKHN0cmVhbSk7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uRGF0YSB7XG4gICAgYWN0aW9uVHlwZTogbnVtYmVyO1xuICAgIGhvdGJhclNsb3Q6IG51bWJlcjtcbiAgICBpdGVtSW5IYW5kOiBJdGVtO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZUl0ZW1EYXRhIGV4dGVuZHMgVHJhbnNhY3Rpb25EYXRhIHtcbiAgICBibG9ja1Bvc2l0aW9uOiBCbG9ja1Bvc2l0aW9uO1xuICAgIGJsb2NrRmFjZTogbnVtYmVyO1xuICAgIHBsYXllclBvc2l0aW9uOiBWZWN0b3IzO1xuICAgIGNsaWNrUG9zaXRpb246IFZlY3RvcjM7XG4gICAgYmxvY2tSdW50aW1lSWQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VJdGVtT25FbnRpdHlEYXRhIGV4dGVuZHMgVHJhbnNhY3Rpb25EYXRhIHtcbiAgICBlbnRpdHlSdW50aW1lSWQ6IGJpZ2ludDtcbiAgICBwbGF5ZXJQb3NpdGlvbjogVmVjdG9yMztcbiAgICBjbGlja1Bvc2l0aW9uOiBWZWN0b3IzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbGFzZUl0ZW1EYXRhIGV4dGVuZHMgVHJhbnNhY3Rpb25EYXRhIHtcbiAgICBoZWFkUm90YXRpb246IFZlY3RvcjM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEludmVudG9yeVRyYW5zYWN0aW9uUGFja2V0IGV4dGVuZHMgRGF0YVBhY2tldCB7XG4gICAgcHVibGljIHN0YXRpYyBOZXRJRCA9IElkZW50aWZpZXJzLkludmVudG9yeVRyYW5zYWN0aW9uUGFja2V0O1xuXG4gICAgcHVibGljIGxlZ2FjeVJlcXVlc3RJZCE6IG51bWJlcjtcbiAgICBwdWJsaWMgbGVnYWN5U2xvdENoYW5nZXMhOiBMZWdhY3lTbG90Q2hhbmdlW107XG5cbiAgICBwdWJsaWMgdHJhbnNhY3Rpb25UeXBlITogVHJhbnNhY3Rpb25UeXBlO1xuICAgIHB1YmxpYyBpbnZlbnRvcnlBY3Rpb25zITogSW52ZW50b3J5QWN0aW9uW107XG5cbiAgICBwdWJsaWMgdHJhbnNhY3Rpb25EYXRhITogVHJhbnNhY3Rpb25EYXRhO1xuXG4gICAgcHVibGljIGRlY29kZVBheWxvYWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubGVnYWN5UmVxdWVzdElkID0gdGhpcy5yZWFkVmFySW50KCk7XG4gICAgICAgIGlmICh0aGlzLmxlZ2FjeVJlcXVlc3RJZCAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3Qgc2xvdENoYW5nZXMgPSB0aGlzLnJlYWRVbnNpZ25lZFZhckludCgpO1xuICAgICAgICAgICAgdGhpcy5sZWdhY3lTbG90Q2hhbmdlcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IHNsb3RDaGFuZ2VzIH0sICgpID0+IExlZ2FjeVNsb3RDaGFuZ2UuZnJvbU5ldHdvcmsodGhpcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmFuc2FjdGlvblR5cGUgPSB0aGlzLnJlYWRVbnNpZ25lZFZhckludCgpO1xuXG4gICAgICAgIGNvbnN0IGFjdGlvbnNDb3VudCA9IHRoaXMucmVhZFVuc2lnbmVkVmFySW50KCk7XG4gICAgICAgIHRoaXMuaW52ZW50b3J5QWN0aW9ucyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGFjdGlvbnNDb3VudCB9LCAoKSA9PiBJbnZlbnRvcnlBY3Rpb24uZnJvbU5ldHdvcmsodGhpcykpO1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy50cmFuc2FjdGlvblR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLk5PUk1BTDpcbiAgICAgICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLk1JU01BVENIOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuVVNFX0lURU06XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRhdGEgPSA8VXNlSXRlbURhdGE+e1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlOiB0aGlzLnJlYWRVbnNpZ25lZFZhckludCgpLFxuICAgICAgICAgICAgICAgICAgICBibG9ja1Bvc2l0aW9uOiBOZXR3b3JrVXRpbC5yZWFkQmxvY2tQb3NpdGlvbih0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tGYWNlOiB0aGlzLnJlYWRWYXJJbnQoKSxcbiAgICAgICAgICAgICAgICAgICAgaG90YmFyU2xvdDogdGhpcy5yZWFkVmFySW50KCksXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1JbkhhbmQ6IEl0ZW0ubmV0d29ya0Rlc2VyaWFsaXplKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICBwbGF5ZXJQb3NpdGlvbjogbmV3IFZlY3RvcjModGhpcy5yZWFkRmxvYXRMRSgpLCB0aGlzLnJlYWRGbG9hdExFKCksIHRoaXMucmVhZEZsb2F0TEUoKSksXG4gICAgICAgICAgICAgICAgICAgIGNsaWNrUG9zaXRpb246IG5ldyBWZWN0b3IzKHRoaXMucmVhZEZsb2F0TEUoKSwgdGhpcy5yZWFkRmxvYXRMRSgpLCB0aGlzLnJlYWRGbG9hdExFKCkpLFxuICAgICAgICAgICAgICAgICAgICBibG9ja1J1bnRpbWVJZDogdGhpcy5yZWFkVW5zaWduZWRWYXJJbnQoKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5VU0VfSVRFTV9PTl9FTlRJVFk6XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRhdGEgPSA8VXNlSXRlbU9uRW50aXR5RGF0YT57XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVJ1bnRpbWVJZDogdGhpcy5yZWFkVW5zaWduZWRWYXJMb25nKCksXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGU6IHRoaXMucmVhZFVuc2lnbmVkVmFySW50KCksXG4gICAgICAgICAgICAgICAgICAgIGhvdGJhclNsb3Q6IHRoaXMucmVhZFZhckludCgpLFxuICAgICAgICAgICAgICAgICAgICBpdGVtSW5IYW5kOiBJdGVtLm5ldHdvcmtEZXNlcmlhbGl6ZSh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgcGxheWVyUG9zaXRpb246IG5ldyBWZWN0b3IzKHRoaXMucmVhZEZsb2F0TEUoKSwgdGhpcy5yZWFkRmxvYXRMRSgpLCB0aGlzLnJlYWRGbG9hdExFKCkpLFxuICAgICAgICAgICAgICAgICAgICBjbGlja1Bvc2l0aW9uOiBuZXcgVmVjdG9yMyh0aGlzLnJlYWRGbG9hdExFKCksIHRoaXMucmVhZEZsb2F0TEUoKSwgdGhpcy5yZWFkRmxvYXRMRSgpKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5SRUxBU0VfSVRFTTpcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRGF0YSA9IDxSZWxhc2VJdGVtRGF0YT57XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGU6IHRoaXMucmVhZFVuc2lnbmVkVmFySW50KCksXG4gICAgICAgICAgICAgICAgICAgIGhvdGJhclNsb3Q6IHRoaXMucmVhZFZhckludCgpLFxuICAgICAgICAgICAgICAgICAgICBpdGVtSW5IYW5kOiBJdGVtLm5ldHdvcmtEZXNlcmlhbGl6ZSh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgaGVhZFJvdGF0aW9uOiBuZXcgVmVjdG9yMyh0aGlzLnJlYWRGbG9hdExFKCksIHRoaXMucmVhZEZsb2F0TEUoKSwgdGhpcy5yZWFkRmxvYXRMRSgpKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVua25vd24gdHJhbnNhY3Rpb24gdHlwZSAke3RoaXMudHJhbnNhY3Rpb25UeXBlfWApO1xuICAgICAgICB9XG4gICAgfVxufVxuIl0sIm5hbWVzIjpbIlVzZUl0ZW1BY3Rpb24iLCJUcmFuc2FjdGlvblR5cGUiLCJBY3Rpb25Tb3VyY2UiXSwibWFwcGluZ3MiOiI7Ozs7OztBQVFZLElBQUEsYUFBQSxxQkFBQUEsY0FBTCxLQUFBO0FBQ0gsRUFBQUEsY0FBQSxDQUFBLGNBQUEsQ0FBQSxhQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxhQUFBO0FBQ0EsRUFBQUEsY0FBQSxDQUFBLGNBQUEsQ0FBQSxXQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxXQUFBO0FBQ0EsRUFBQUEsY0FBQSxDQUFBLGNBQUEsQ0FBQSxhQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxhQUFBO0FBSFEsRUFBQUEsT0FBQUEsY0FBQUE7QUFBQSxDQUFBLEVBQUEsYUFBQSxJQUFBLEVBQUE7QUFNQSxJQUFBLGVBQUEscUJBQUFDLGdCQUFMLEtBQUE7QUFDSCxFQUFBQSxnQkFBQSxDQUFBLGdCQUFBLENBQUEsUUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsUUFBQTtBQUNBLEVBQUFBLGdCQUFBLENBQUEsZ0JBQUEsQ0FBQSxVQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxVQUFBO0FBQ0EsRUFBQUEsZ0JBQUEsQ0FBQSxnQkFBQSxDQUFBLFVBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxHQUFBLFVBQUE7QUFDQSxFQUFBQSxnQkFBQSxDQUFBLGdCQUFBLENBQUEsb0JBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxHQUFBLG9CQUFBO0FBQ0EsRUFBQUEsZ0JBQUEsQ0FBQSxnQkFBQSxDQUFBLGFBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxHQUFBLGFBQUE7QUFMUSxFQUFBQSxPQUFBQSxnQkFBQUE7QUFBQSxDQUFBLEVBQUEsZUFBQSxJQUFBLEVBQUE7QUFRTCxNQUFNLGdCQUFpQixDQUFBO0FBQUEsRUFDbkIsV0FBQSxDQUNJLGFBQ0EsS0FDVCxFQUFBO0FBRlMsSUFBQSxJQUFBLENBQUEsV0FBQSxHQUFBLFdBQUE7QUFDQSxJQUFBLElBQUEsQ0FBQSxLQUFBLEdBQUEsS0FBQTtBQUFBO0FBQ1IsRUFFSCxPQUFjLFlBQVksTUFBd0MsRUFBQTtBQUM5RCxJQUFNLE1BQUEsV0FBQSxHQUFjLE9BQU8sUUFBUyxFQUFBO0FBQ3BDLElBQU0sTUFBQSxTQUFBLEdBQVksT0FBTyxrQkFBbUIsRUFBQTtBQUM1QyxJQUFBLE1BQU0sUUFBUSxLQUFNLENBQUEsSUFBQSxDQUFLLE1BQU8sQ0FBQSxJQUFBLENBQUssU0FBUyxDQUFDLENBQUE7QUFDL0MsSUFBTyxPQUFBLElBQUksZ0JBQWlCLENBQUEsV0FBQSxFQUFhLEtBQUssQ0FBQTtBQUFBO0FBQ2xELEVBRU8sVUFBVSxNQUE0QixFQUFBO0FBQ3pDLElBQU8sTUFBQSxDQUFBLFNBQUEsQ0FBVSxLQUFLLFdBQVcsQ0FBQTtBQUNqQyxJQUFPLE1BQUEsQ0FBQSxtQkFBQSxDQUFvQixJQUFLLENBQUEsS0FBQSxDQUFNLE1BQU0sQ0FBQTtBQUM1QyxJQUFBLE1BQUEsQ0FBTyxLQUFNLENBQUEsTUFBQSxDQUFPLElBQUssQ0FBQSxJQUFBLENBQUssS0FBSyxDQUFDLENBQUE7QUFBQTtBQUU1QztBQUVZLElBQUEsWUFBQSxxQkFBQUMsYUFBTCxLQUFBO0FBQ0gsRUFBQUEsYUFBQUEsQ0FBQUEsYUFBQUEsQ0FBQSxhQUFVLENBQVYsQ0FBQSxDQUFBLEdBQUEsU0FBQTtBQUNBLEVBQUFBLGFBQUEsQ0FBQSxhQUFBLENBQUEsV0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsV0FBQTtBQUNBLEVBQUFBLGFBQUEsQ0FBQSxhQUFBLENBQUEsUUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsUUFBQTtBQUNBLEVBQUFBLGFBQUEsQ0FBQSxhQUFBLENBQUEsT0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsT0FBQTtBQUNBLEVBQUFBLGFBQUEsQ0FBQSxhQUFBLENBQUEsVUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsVUFBQTtBQUNBLEVBQUFBLGFBQUFBLENBQUFBLGFBQUFBLENBQUEsOEJBQTJCLEdBQTNCLENBQUEsR0FBQSwwQkFBQTtBQUNBLEVBQUFBLGFBQUFBLENBQUFBLGFBQUFBLENBQUEsMEJBQXVCLEtBQXZCLENBQUEsR0FBQSxzQkFBQTtBQVBRLEVBQUFBLE9BQUFBLGFBQUFBO0FBQUEsQ0FBQSxFQUFBLFlBQUEsSUFBQSxFQUFBO0FBVUwsTUFBTSxlQUFnQixDQUFBO0FBQUEsRUFDbEIsWUFDSSxVQUNBLEVBQUEsUUFBQSxFQUNBLFdBQ0EsRUFBQSxVQUFBLEVBQ0EsU0FDQSxPQUNULEVBQUE7QUFOUyxJQUFBLElBQUEsQ0FBQSxVQUFBLEdBQUEsVUFBQTtBQUNBLElBQUEsSUFBQSxDQUFBLFFBQUEsR0FBQSxRQUFBO0FBQ0EsSUFBQSxJQUFBLENBQUEsV0FBQSxHQUFBLFdBQUE7QUFDQSxJQUFBLElBQUEsQ0FBQSxVQUFBLEdBQUEsVUFBQTtBQUNBLElBQUEsSUFBQSxDQUFBLE9BQUEsR0FBQSxPQUFBO0FBQ0EsSUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLE9BQUE7QUFBQTtBQUNSLEVBRUgsT0FBYyxZQUFZLE1BQXVDLEVBQUE7QUFDN0QsSUFBTSxNQUFBLFVBQUEsR0FBYSxPQUFPLGtCQUFtQixFQUFBO0FBQzdDLElBQUEsTUFBTSxXQUNGLFVBQWUsS0FBQSxDQUFBLG9CQUEwQixlQUFlLEtBQ2xELDhCQUFBLE1BQUEsQ0FBTyxZQUNQLEdBQUEsSUFBQTtBQUNWLElBQUEsTUFBTSxXQUFjLEdBQUEsVUFBQSxLQUFlLENBQXFCLGVBQUEsTUFBQSxDQUFPLG9CQUF1QixHQUFBLElBQUE7QUFDdEYsSUFBQSxPQUFPLElBQUksZUFBQTtBQUFBLE1BQ1AsVUFBQTtBQUFBLE1BQ0EsUUFBQTtBQUFBLE1BQ0EsV0FBQTtBQUFBLE1BQ0EsT0FBTyxrQkFBbUIsRUFBQTtBQUFBLE1BQzFCLElBQUEsQ0FBSyxtQkFBbUIsTUFBTSxDQUFBO0FBQUEsTUFDOUIsSUFBQSxDQUFLLG1CQUFtQixNQUFNO0FBQUEsS0FDbEM7QUFBQTtBQUNKLEVBRU8sVUFBVSxNQUE0QixFQUFBO0FBQ3pDLElBQU8sTUFBQSxDQUFBLG1CQUFBLENBQW9CLEtBQUssVUFBVSxDQUFBO0FBQzFDLElBQUMsQ0FBQSxDQUFBLGtCQUF3QixLQUFpQyw0QkFBQSxDQUFFLFFBQVMsQ0FBQSxJQUFBLENBQUssVUFBVSxDQUNoRixJQUFBLE1BQUEsQ0FBTyxXQUFZLENBQUEsSUFBQSxDQUFLLFFBQVMsQ0FBQTtBQUNyQyxJQUFBLElBQUEsQ0FBSyxVQUFlLEtBQUEsQ0FBQSxnQkFBc0IsTUFBTyxDQUFBLG1CQUFBLENBQW9CLEtBQUssV0FBWSxDQUFBO0FBQ3RGLElBQU8sTUFBQSxDQUFBLG1CQUFBLENBQW9CLEtBQUssVUFBVSxDQUFBO0FBQzFDLElBQUssSUFBQSxDQUFBLE9BQUEsQ0FBUSxpQkFBaUIsTUFBTSxDQUFBO0FBQ3BDLElBQUssSUFBQSxDQUFBLE9BQUEsQ0FBUSxpQkFBaUIsTUFBTSxDQUFBO0FBQUE7QUFFNUM7QUEwQkEsTUFBcUIsbUNBQW1DLFVBQVcsQ0FBQTtBQUFBLEVBQy9ELE9BQWMsUUFBUSxXQUFZLENBQUEsMEJBQUE7QUFBQSxFQUUzQixlQUFBO0FBQUEsRUFDQSxpQkFBQTtBQUFBLEVBRUEsZUFBQTtBQUFBLEVBQ0EsZ0JBQUE7QUFBQSxFQUVBLGVBQUE7QUFBQSxFQUVBLGFBQXNCLEdBQUE7QUFDekIsSUFBSyxJQUFBLENBQUEsZUFBQSxHQUFrQixLQUFLLFVBQVcsRUFBQTtBQUN2QyxJQUFJLElBQUEsSUFBQSxDQUFLLG9CQUFvQixDQUFHLEVBQUE7QUFDNUIsTUFBTSxNQUFBLFdBQUEsR0FBYyxLQUFLLGtCQUFtQixFQUFBO0FBQzVDLE1BQUssSUFBQSxDQUFBLGlCQUFBLEdBQW9CLEtBQU0sQ0FBQSxJQUFBLENBQUssRUFBRSxNQUFBLEVBQVEsV0FBWSxFQUFBLEVBQUcsTUFBTSxnQkFBQSxDQUFpQixXQUFZLENBQUEsSUFBSSxDQUFDLENBQUE7QUFBQTtBQUd6RyxJQUFLLElBQUEsQ0FBQSxlQUFBLEdBQWtCLEtBQUssa0JBQW1CLEVBQUE7QUFFL0MsSUFBTSxNQUFBLFlBQUEsR0FBZSxLQUFLLGtCQUFtQixFQUFBO0FBQzdDLElBQUssSUFBQSxDQUFBLGdCQUFBLEdBQW1CLEtBQU0sQ0FBQSxJQUFBLENBQUssRUFBRSxNQUFBLEVBQVEsWUFBYSxFQUFBLEVBQUcsTUFBTSxlQUFBLENBQWdCLFdBQVksQ0FBQSxJQUFJLENBQUMsQ0FBQTtBQUVwRyxJQUFBLFFBQVEsS0FBSyxlQUFpQjtBQUFBLE1BQzFCLEtBQUssQ0FBQTtBQUFBLE1BQ0wsS0FBSyxDQUFBO0FBQ0QsUUFBQTtBQUFBLE1BQ0osS0FBSyxDQUFBO0FBQ0QsUUFBQSxJQUFBLENBQUssZUFBK0IsR0FBQTtBQUFBLFVBQ2hDLFVBQUEsRUFBWSxLQUFLLGtCQUFtQixFQUFBO0FBQUEsVUFDcEMsYUFBQSxFQUFlLFdBQVksQ0FBQSxpQkFBQSxDQUFrQixJQUFJLENBQUE7QUFBQSxVQUNqRCxTQUFBLEVBQVcsS0FBSyxVQUFXLEVBQUE7QUFBQSxVQUMzQixVQUFBLEVBQVksS0FBSyxVQUFXLEVBQUE7QUFBQSxVQUM1QixVQUFBLEVBQVksSUFBSyxDQUFBLGtCQUFBLENBQW1CLElBQUksQ0FBQTtBQUFBLFVBQ3hDLGNBQUEsRUFBZ0IsSUFBSSxPQUFBLENBQVEsSUFBSyxDQUFBLFdBQUEsRUFBZSxFQUFBLElBQUEsQ0FBSyxXQUFZLEVBQUEsRUFBRyxJQUFLLENBQUEsV0FBQSxFQUFhLENBQUE7QUFBQSxVQUN0RixhQUFBLEVBQWUsSUFBSSxPQUFBLENBQVEsSUFBSyxDQUFBLFdBQUEsRUFBZSxFQUFBLElBQUEsQ0FBSyxXQUFZLEVBQUEsRUFBRyxJQUFLLENBQUEsV0FBQSxFQUFhLENBQUE7QUFBQSxVQUNyRixjQUFBLEVBQWdCLEtBQUssa0JBQW1CO0FBQUEsU0FDNUM7QUFDQSxRQUFBO0FBQUEsTUFDSixLQUFLLENBQUE7QUFDRCxRQUFBLElBQUEsQ0FBSyxlQUF1QyxHQUFBO0FBQUEsVUFDeEMsZUFBQSxFQUFpQixLQUFLLG1CQUFvQixFQUFBO0FBQUEsVUFDMUMsVUFBQSxFQUFZLEtBQUssa0JBQW1CLEVBQUE7QUFBQSxVQUNwQyxVQUFBLEVBQVksS0FBSyxVQUFXLEVBQUE7QUFBQSxVQUM1QixVQUFBLEVBQVksSUFBSyxDQUFBLGtCQUFBLENBQW1CLElBQUksQ0FBQTtBQUFBLFVBQ3hDLGNBQUEsRUFBZ0IsSUFBSSxPQUFBLENBQVEsSUFBSyxDQUFBLFdBQUEsRUFBZSxFQUFBLElBQUEsQ0FBSyxXQUFZLEVBQUEsRUFBRyxJQUFLLENBQUEsV0FBQSxFQUFhLENBQUE7QUFBQSxVQUN0RixhQUFBLEVBQWUsSUFBSSxPQUFBLENBQVEsSUFBSyxDQUFBLFdBQUEsRUFBZSxFQUFBLElBQUEsQ0FBSyxXQUFZLEVBQUEsRUFBRyxJQUFLLENBQUEsV0FBQSxFQUFhO0FBQUEsU0FDekY7QUFDQSxRQUFBO0FBQUEsTUFDSixLQUFLLENBQUE7QUFDRCxRQUFBLElBQUEsQ0FBSyxlQUFrQyxHQUFBO0FBQUEsVUFDbkMsVUFBQSxFQUFZLEtBQUssa0JBQW1CLEVBQUE7QUFBQSxVQUNwQyxVQUFBLEVBQVksS0FBSyxVQUFXLEVBQUE7QUFBQSxVQUM1QixVQUFBLEVBQVksSUFBSyxDQUFBLGtCQUFBLENBQW1CLElBQUksQ0FBQTtBQUFBLFVBQ3hDLFlBQUEsRUFBYyxJQUFJLE9BQUEsQ0FBUSxJQUFLLENBQUEsV0FBQSxFQUFlLEVBQUEsSUFBQSxDQUFLLFdBQVksRUFBQSxFQUFHLElBQUssQ0FBQSxXQUFBLEVBQWE7QUFBQSxTQUN4RjtBQUNBLFFBQUE7QUFBQSxNQUNKO0FBQ0ksUUFBQSxNQUFNLElBQUksU0FBQSxDQUFVLENBQTRCLHlCQUFBLEVBQUEsSUFBQSxDQUFLLGVBQWUsQ0FBRSxDQUFBLENBQUE7QUFBQTtBQUM5RTtBQUVSOzs7OyJ9