UNPKG

@firestone-hs/replay-parser

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.9.

119 lines 18.6 kB
import { BlockType } from '@firestone-hs/reference-data'; import isEqual from 'lodash-es/isEqual'; import uniq from 'lodash-es/uniq'; import { AttachingEnchantmentAction } from '../../models/action/attaching-enchantment-action'; import { CardTargetAction } from '../../models/action/card-target-action'; import { TradeAction } from '../../models/action/trade-action'; import { ActionHistoryItem } from '../../models/history/action-history-item'; import { ActionButtonUsedAction, CardPlayedFromHandAction } from '../../models/models'; import { ActionHelper } from './action-helper'; export class CardTargetParser { constructor(allCards) { this.allCards = allCards; } applies(item) { return item instanceof ActionHistoryItem; } parse(item, currentTurn, entitiesBeforeAction, history) { if (parseInt(item.node.attributes.type) !== BlockType.POWER && parseInt(item.node.attributes.type) !== BlockType.TRIGGER) { return; } const originId = parseInt(item.node.attributes.entity); const entity = entitiesBeforeAction.get(originId); if (!entity) { return []; } // Remove the dummy effects if ([ 'DALA_744d', "BG20_GEM_No_Impact" /* CardIds.BloodGemNoImpactToken */, "BGDUO20_GEM_No_Impact_Copy" /* CardIds.BloodGemNoImpactFromTeammateDnt_BGDUO20_GEM_No_Impact_Copy */, ].includes(entity.cardID)) { return []; } const targetId = parseInt(item.node.attributes.target); if (targetId > 0) { return [ CardTargetAction.create({ timestamp: item.timestamp, index: item.index, originId, targetIds: [targetId], }, this.allCards), ]; } return []; } reduce(actions) { return ActionHelper.combineActions(actions, (previous, current) => this.shouldMergeActions(previous, current), (previous, current) => this.mergeActions(previous, current)); } shouldMergeActions(previousAction, currentAction) { if (previousAction instanceof CardTargetAction && currentAction instanceof CardTargetAction) { if (previousAction.originId === currentAction.originId) { return true; } } if (previousAction instanceof ActionButtonUsedAction) { return previousAction.entityId === currentAction.originId; } if (previousAction instanceof TradeAction) { return previousAction.originId === currentAction.originId; } if (previousAction instanceof AttachingEnchantmentAction && currentAction instanceof CardTargetAction) { if (previousAction.originId === currentAction.originId && isEqual(previousAction.targetIds, currentAction.targetIds)) { return true; } } if (previousAction instanceof CardPlayedFromHandAction && currentAction instanceof CardTargetAction) { if (previousAction.entityId === currentAction.originId) { return true; } } return false; } mergeActions(previousAction, currentAction) { if (currentAction instanceof AttachingEnchantmentAction) { console.warn('incorrect AttachingEnchantmentAction as current action for card-target-parser', currentAction); return; } if (previousAction instanceof ActionButtonUsedAction) { // // console.log('merging actions', previousAction, currentAction); return ActionHelper.mergeIntoFirstAction(previousAction, currentAction, { entities: currentAction.entities, entityId: previousAction.entityId, originId: currentAction.originId, targetIds: uniq([ ...uniq(previousAction.targetIds || []), ...uniq(currentAction.targetIds || []), ]), }); } else if (previousAction instanceof CardPlayedFromHandAction) { // // console.log('merging actions', previousAction, currentAction); return ActionHelper.mergeIntoFirstAction(previousAction, currentAction, { entities: currentAction.entities, entityId: previousAction.entityId, originId: currentAction.originId, targetIds: uniq([ ...uniq(previousAction.targetIds || []), ...uniq(currentAction.targetIds || []), ]), }); } else if (previousAction instanceof CardTargetAction) { return CardTargetAction.create({ timestamp: previousAction.timestamp, index: previousAction.index, entities: currentAction.entities, originId: currentAction.originId, targetIds: uniq([...uniq(previousAction.targetIds || []), ...uniq(currentAction.targetIds || [])]), }, this.allCards); } else if (previousAction instanceof AttachingEnchantmentAction || previousAction instanceof TradeAction) { return previousAction; } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC10YXJnZXQtcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmVwbGF5LXBhcnNlci9zcmMvbGliL3NlcnZpY2VzL2FjdGlvbi9jYXJkLXRhcmdldC1wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVyxNQUFNLDhCQUE4QixDQUFDO0FBRWxFLE9BQU8sT0FBTyxNQUFNLG1CQUFtQixDQUFDO0FBQ3hDLE9BQU8sSUFBSSxNQUFNLGdCQUFnQixDQUFDO0FBRWxDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUUvRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHL0MsTUFBTSxPQUFPLGdCQUFnQjtJQUM1QixZQUFvQixRQUF5QjtRQUF6QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtJQUFHLENBQUM7SUFFMUMsT0FBTyxDQUFDLElBQWlCO1FBQy9CLE9BQU8sSUFBSSxZQUFZLGlCQUFpQixDQUFDO0lBQzFDLENBQUM7SUFFTSxLQUFLLENBQ1gsSUFBdUIsRUFDdkIsV0FBbUIsRUFDbkIsb0JBQXlDLEVBQ3pDLE9BQStCO1FBRS9CLElBQ0MsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVMsQ0FBQyxLQUFLO1lBQ3ZELFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJ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RyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDbEcsRUFDRCxJQUFJLENBQUMsUUFBUSxDQUNiLENBQUM7U0FDRjthQUFNLElBQUksY0FBYyxZQUFZLDBCQUEwQixJQUFJLGNBQWMsWUFBWSxXQUFXLEVBQUU7WUFDekcsT0FBTyxjQUFjLENBQUM7U0FDdEI7SUFDRixDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCbG9ja1R5cGUsIENhcmRJZHMgfSBmcm9tICdAZmlyZXN0b25lLWhzL3JlZmVyZW5jZS1kYXRhJztcclxuaW1wb3J0IHsgTWFwIH0gZnJvbSAnaW1tdXRhYmxlJztcclxuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoLWVzL2lzRXF1YWwnO1xyXG5pbXBvcnQgdW5pcSBmcm9tICdsb2Rhc2gtZXMvdW5pcSc7XHJcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9hY3Rpb24vYWN0aW9uJztcclxuaW1wb3J0IHsgQXR0YWNoaW5nRW5jaGFudG1lbnRBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvYWN0aW9uL2F0dGFjaGluZy1lbmNoYW50bWVudC1hY3Rpb24nO1xyXG5pbXBvcnQgeyBDYXJkVGFyZ2V0QWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjdGlvbi9jYXJkLXRhcmdldC1hY3Rpb24nO1xyXG5pbXBvcnQgeyBUcmFkZUFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9hY3Rpb24vdHJhZGUtYWN0aW9uJztcclxuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dhbWUvZW50aXR5JztcclxuaW1wb3J0IHsgQWN0aW9uSGlzdG9yeUl0ZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvaGlzdG9yeS9hY3Rpb24taGlzdG9yeS1pdGVtJztcclxuaW1wb3J0IHsgSGlzdG9yeUl0ZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvaGlzdG9yeS9oaXN0b3J5LWl0ZW0nO1xyXG5pbXBvcnQgeyBBY3Rpb25CdXR0b25Vc2VkQWN0aW9uLCBDYXJkUGxheWVkRnJvbUhhbmRBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvbW9kZWxzJztcclxuaW1wb3J0IHsgQWxsQ2FyZHNTZXJ2aWNlIH0gZnJvbSAnLi4vYWxsLWNhcmRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY3Rpb25IZWxwZXIgfSBmcm9tICcuL2FjdGlvbi1oZWxwZXInO1xyXG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tICcuL3BhcnNlcic7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2FyZFRhcmdldFBhcnNlciBpbXBsZW1lbnRzIFBhcnNlciB7XHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSBhbGxDYXJkczogQWxsQ2FyZHNTZXJ2aWNlKSB7fVxyXG5cclxuXHRwdWJsaWMgYXBwbGllcyhpdGVtOiBIaXN0b3J5SXRlbSk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIGl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25IaXN0b3J5SXRlbTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBwYXJzZShcclxuXHRcdGl0ZW06IEFjdGlvbkhpc3RvcnlJdGVtLFxyXG5cdFx0Y3VycmVudFR1cm46IG51bWJlcixcclxuXHRcdGVudGl0aWVzQmVmb3JlQWN0aW9uOiBNYXA8bnVtYmVyLCBFbnRpdHk+LFxyXG5cdFx0aGlzdG9yeTogcmVhZG9ubHkgSGlzdG9yeUl0ZW1bXSxcclxuXHQpOiBBY3Rpb25bXSB7XHJcblx0XHRpZiAoXHJcblx0XHRcdHBhcnNlSW50KGl0ZW0ubm9kZS5hdHRyaWJ1dGVzLnR5cGUpICE9PSBCbG9ja1R5cGUuUE9XRVIgJiZcclxuXHRcdFx0cGFyc2VJbnQoaXRlbS5ub2RlLmF0dHJpYnV0ZXMudHlwZSkgIT09IEJsb2NrVHlwZS5UUklHR0VSXHJcblx0XHQpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3Qgb3JpZ2luSWQgPSBwYXJzZUludChpdGVtLm5vZGUuYXR0cmlidXRlcy5lbnRpdHkpO1xyXG5cdFx0Y29uc3QgZW50aXR5ID0gZW50aXRpZXNCZWZvcmVBY3Rpb24uZ2V0KG9yaWdpbklkKTtcclxuXHRcdGlmICghZW50aXR5KSB7XHJcblx0XHRcdHJldHVybiBbXTtcclxuXHRcdH1cclxuXHRcdC8vIFJlbW92ZSB0aGUgZHVtbXkgZWZmZWN0c1xyXG5cdFx0aWYgKFxyXG5cdFx0XHRbXHJcblx0XHRcdFx0J0RBTEFfNzQ0ZCcsXHJcblx0XHRcdFx0Q2FyZElkcy5CbG9vZEdlbU5vSW1wYWN0VG9rZW4sXHJcblx0XHRcdFx0Q2FyZElkcy5CbG9vZEdlbU5vSW1wYWN0RnJvbVRlYW1tYXRlRG50X0JHRFVPMjBfR0VNX05vX0ltcGFjdF9Db3B5LFxyXG5cdFx0XHRdLmluY2x1ZGVzKGVudGl0eS5jYXJkSUQpXHJcblx0XHQpIHtcclxuXHRcdFx0cmV0dXJuIFtdO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgdGFyZ2V0SWQgPSBwYXJzZUludChpdGVtLm5vZGUuYXR0cmlidXRlcy50YXJnZXQpO1xyXG5cdFx0aWYgKHRhcmdldElkID4gMCkge1xyXG5cdFx0XHRyZXR1cm4gW1xyXG5cdFx0XHRcdENhcmRUYXJnZXRBY3Rpb24uY3JlYXRlKFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHR0aW1lc3RhbXA6IGl0ZW0udGltZXN0YW1wLFxyXG5cdFx0XHRcdFx0XHRpbmRleDogaXRlbS5pbmRleCxcclxuXHRcdFx0XHRcdFx0b3JpZ2luSWQsXHJcblx0XHRcdFx0XHRcdHRhcmdldElkczogW3RhcmdldElkXSxcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR0aGlzLmFsbENhcmRzLFxyXG5cdFx0XHRcdCksXHJcblx0XHRcdF07XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gW107XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgcmVkdWNlKGFjdGlvbnM6IHJlYWRvbmx5IEFjdGlvbltdKTogcmVhZG9ubHkgQWN0aW9uW10ge1xyXG5cdFx0cmV0dXJuIEFjdGlvbkhlbHBlci5jb21iaW5lQWN0aW9uczxBY3Rpb24+KFxyXG5cdFx0XHRhY3Rpb25zLFxyXG5cdFx0XHQocHJldmlvdXMsIGN1cnJlbnQpID0+IHRoaXMuc2hvdWxkTWVyZ2VBY3Rpb25zKHByZXZpb3VzLCBjdXJyZW50KSxcclxuXHRcdFx0KHByZXZpb3VzLCBjdXJyZW50KSA9PiB0aGlzLm1lcmdlQWN0aW9ucyhwcmV2aW91cywgY3VycmVudCksXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzaG91bGRNZXJnZUFjdGlvbnMocHJldmlvdXNBY3Rpb246IEFjdGlvbiwgY3VycmVudEFjdGlvbjogQWN0aW9uKTogYm9vbGVhbiB7XHJcblx0XHRpZiAocHJldmlvdXNBY3Rpb24gaW5zdGFuY2VvZiBDYXJkVGFyZ2V0QWN0aW9uICYmIGN1cnJlbnRBY3Rpb24gaW5zdGFuY2VvZiBDYXJkVGFyZ2V0QWN0aW9uKSB7XHJcblx0XHRcdGlmICgocHJldmlvdXNBY3Rpb24gYXMgQ2FyZFRhcmdldEFjdGlvbikub3JpZ2luSWQgPT09IChjdXJyZW50QWN0aW9uIGFzIENhcmRUYXJnZXRBY3Rpb24pLm9yaWdpbklkKSB7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChwcmV2aW91c0FjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkJ1dHRvblVzZWRBY3Rpb24pIHtcclxuXHRcdFx0cmV0dXJuIHByZXZpb3VzQWN0aW9uLmVudGl0eUlkID09PSBjdXJyZW50QWN0aW9uLm9yaWdpbklkO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHByZXZpb3VzQWN0aW9uIGluc3RhbmNlb2YgVHJhZGVBY3Rpb24pIHtcclxuXHRcdFx0cmV0dXJuIHByZXZpb3VzQWN0aW9uLm9yaWdpbklkID09PSBjdXJyZW50QWN0aW9uLm9yaWdpbklkO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHByZXZpb3VzQWN0aW9uIGluc3RhbmNlb2YgQXR0YWNoaW5nRW5jaGFudG1lbnRBY3Rpb24gJiYgY3VycmVudEFjdGlvbiBpbnN0YW5jZW9mIENhcmRUYXJnZXRBY3Rpb24pIHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdHByZXZpb3VzQWN0aW9uLm9yaWdpbklkID09PSBjdXJyZW50QWN0aW9uLm9yaWdpbklkICYmXHJcblx0XHRcdFx0aXNFcXVhbChwcmV2aW91c0FjdGlvbi50YXJnZXRJZHMsIGN1cnJlbnRBY3Rpb24udGFyZ2V0SWRzKVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHByZXZpb3VzQWN0aW9uIGluc3RhbmNlb2YgQ2FyZFBsYXllZEZyb21IYW5kQWN0aW9uICYmIGN1cnJlbnRBY3Rpb24gaW5zdGFuY2VvZiBDYXJkVGFyZ2V0QWN0aW9uKSB7XHJcblx0XHRcdGlmIChwcmV2aW91c0FjdGlvbi5lbnRpdHlJZCA9PT0gY3VycmVudEFjdGlvbi5vcmlnaW5JZCkge1xyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIG1lcmdlQWN0aW9ucyhwcmV2aW91c0FjdGlvbjogQWN0aW9uLCBjdXJyZW50QWN0aW9uOiBBY3Rpb24pOiBBY3Rpb24ge1xyXG5cdFx0aWYgKGN1cnJlbnRBY3Rpb24gaW5zdGFuY2VvZiBBdHRhY2hpbmdFbmNoYW50bWVudEFjdGlvbikge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oXHJcblx0XHRcdFx0J2luY29ycmVjdCBBdHRhY2hpbmdFbmNoYW50bWVudEFjdGlvbiBhcyBjdXJyZW50IGFjdGlvbiBmb3IgY2FyZC10YXJnZXQtcGFyc2VyJyxcclxuXHRcdFx0XHRjdXJyZW50QWN0aW9uLFxyXG5cdFx0XHQpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRpZiAocHJldmlvdXNBY3Rpb24gaW5zdGFuY2VvZiBBY3Rpb25CdXR0b25Vc2VkQWN0aW9uKSB7XHJcblx0XHRcdC8vIC8vIGNvbnNvbGUubG9nKCdtZXJnaW5nIGFjdGlvbnMnLCBwcmV2aW91c0FjdGlvbiwgY3VycmVudEFjdGlvbik7XHJcblx0XHRcdHJldHVybiBBY3Rpb25IZWxwZXIubWVyZ2VJbnRvRmlyc3RBY3Rpb24ocHJldmlvdXNBY3Rpb24sIGN1cnJlbnRBY3Rpb24sIHtcclxuXHRcdFx0XHRlbnRpdGllczogY3VycmVudEFjdGlvbi5lbnRpdGllcyxcclxuXHRcdFx0XHRlbnRpdHlJZDogcHJldmlvdXNBY3Rpb24uZW50aXR5SWQsXHJcblx0XHRcdFx0b3JpZ2luSWQ6IGN1cnJlbnRBY3Rpb24ub3JpZ2luSWQsXHJcblx0XHRcdFx0dGFyZ2V0SWRzOiB1bmlxKFtcclxuXHRcdFx0XHRcdC4uLnVuaXEocHJldmlvdXNBY3Rpb24udGFyZ2V0SWRzIHx8IFtdKSxcclxuXHRcdFx0XHRcdC4uLnVuaXEoY3VycmVudEFjdGlvbi50YXJnZXRJZHMgfHwgW10pLFxyXG5cdFx0XHRcdF0pIGFzIHJlYWRvbmx5IG51bWJlcltdLFxyXG5cdFx0XHR9IGFzIEFjdGlvbkJ1dHRvblVzZWRBY3Rpb24pO1xyXG5cdFx0fSBlbHNlIGlmIChwcmV2aW91c0FjdGlvbiBpbnN0YW5jZW9mIENhcmRQbGF5ZWRGcm9tSGFuZEFjdGlvbikge1xyXG5cdFx0XHQvLyAvLyBjb25zb2xlLmxvZygnbWVyZ2luZyBhY3Rpb25zJywgcHJldmlvdXNBY3Rpb24sIGN1cnJlbnRBY3Rpb24pO1xyXG5cdFx0XHRyZXR1cm4gQWN0aW9uSGVscGVyLm1lcmdlSW50b0ZpcnN0QWN0aW9uKHByZXZpb3VzQWN0aW9uLCBjdXJyZW50QWN0aW9uLCB7XHJcblx0XHRcdFx0ZW50aXRpZXM6IGN1cnJlbnRBY3Rpb24uZW50aXRpZXMsXHJcblx0XHRcdFx0ZW50aXR5SWQ6IHByZXZpb3VzQWN0aW9uLmVudGl0eUlkLFxyXG5cdFx0XHRcdG9yaWdpbklkOiBjdXJyZW50QWN0aW9uLm9yaWdpbklkLFxyXG5cdFx0XHRcdHRhcmdldElkczogdW5pcShbXHJcblx0XHRcdFx0XHQuLi51bmlxKHByZXZpb3VzQWN0aW9uLnRhcmdldElkcyB8fCBbXSksXHJcblx0XHRcdFx0XHQuLi51bmlxKGN1cnJlbnRBY3Rpb24udGFyZ2V0SWRzIHx8IFtdKSxcclxuXHRcdFx0XHRdKSBhcyByZWFkb25seSBudW1iZXJbXSxcclxuXHRcdFx0fSBhcyBDYXJkUGxheWVkRnJvbUhhbmRBY3Rpb24pO1xyXG5cdFx0fSBlbHNlIGlmIChwcmV2aW91c0FjdGlvbiBpbnN0YW5jZW9mIENhcmRUYXJnZXRBY3Rpb24pIHtcclxuXHRcdFx0cmV0dXJuIENhcmRUYXJnZXRBY3Rpb24uY3JlYXRlKFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdHRpbWVzdGFtcDogcHJldmlvdXNBY3Rpb24udGltZXN0YW1wLFxyXG5cdFx0XHRcdFx0aW5kZXg6IHByZXZpb3VzQWN0aW9uLmluZGV4LFxyXG5cdFx0XHRcdFx0ZW50aXRpZXM6IGN1cnJlbnRBY3Rpb24uZW50aXRpZXMsXHJcblx0XHRcdFx0XHRvcmlnaW5JZDogY3VycmVudEFjdGlvbi5vcmlnaW5JZCxcclxuXHRcdFx0XHRcdHRhcmdldElkczogdW5pcShbLi4udW5pcShwcmV2aW91c0FjdGlvbi50YXJnZXRJZHMgfHwgW10pLCAuLi51bmlxKGN1cnJlbnRBY3Rpb24udGFyZ2V0SWRzIHx8IFtdKV0pLFxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0dGhpcy5hbGxDYXJkcyxcclxuXHRcdFx0KTtcclxuXHRcdH0gZWxzZSBpZiAocHJldmlvdXNBY3Rpb24gaW5zdGFuY2VvZiBBdHRhY2hpbmdFbmNoYW50bWVudEFjdGlvbiB8fCBwcmV2aW91c0FjdGlvbiBpbnN0YW5jZW9mIFRyYWRlQWN0aW9uKSB7XHJcblx0XHRcdHJldHVybiBwcmV2aW91c0FjdGlvbjtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIl19