UNPKG

@glimmer/compiler

Version:
164 lines (144 loc) 20.9 kB
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } import { dict, assertNever } from '@glimmer/util'; var WireFormatDebugger = function () { function WireFormatDebugger(program, _parameters) { _classCallCheck(this, WireFormatDebugger); this.program = program; } WireFormatDebugger.prototype.format = function format() { var out = []; for (var _iterator = this.program.statements, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { var _ref; if (_isArray) { if (_i >= _iterator.length) break; _ref = _iterator[_i++]; } else { _i = _iterator.next(); if (_i.done) break; _ref = _i.value; } var statement = _ref; out.push(this.formatOpcode(statement)); } return out; }; WireFormatDebugger.prototype.formatOpcode = function formatOpcode(opcode) { if (Array.isArray(opcode)) { switch (opcode[0]) { case 1 /* Append */: return ['append', this.formatOpcode(opcode[1]), opcode[2]]; case 5 /* Block */: return ['block', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3]), this.formatBlocks(opcode[4])]; case 9 /* OpenElement */: return ['open-element', opcode[1], opcode[2]]; case 11 /* CloseElement */: return ['close-element']; case 10 /* FlushElement */: return ['flush-element']; case 12 /* StaticAttr */: return ['static-attr', opcode[1], opcode[2], opcode[3]]; case 13 /* DynamicAttr */: return ['dynamic-attr', opcode[1], this.formatOpcode(opcode[2]), opcode[3]]; case 14 /* ComponentAttr */: return ['component-attr', opcode[1], this.formatOpcode(opcode[2]), opcode[3]]; case 15 /* AttrSplat */: return ['attr-splat']; case 16 /* Yield */: return ['yield', opcode[1], this.formatParams(opcode[2])]; case 17 /* Partial */: return ['partial', this.formatOpcode(opcode[1]), opcode[2]]; case 18 /* DynamicArg */: return ['dynamic-arg', opcode[1], this.formatOpcode(opcode[2])]; case 19 /* StaticArg */: return ['static-arg', opcode[1], this.formatOpcode(opcode[2])]; case 20 /* TrustingDynamicAttr */: return ['trusting-dynamic-attr', opcode[1], this.formatOpcode(opcode[2]), opcode[3]]; case 21 /* TrustingComponentAttr */: return ['trusting-component-attr', opcode[1], this.formatOpcode(opcode[2]), opcode[3]]; case 22 /* Debugger */: return ['debugger', opcode[1]]; case 2 /* Comment */: return ['comment', opcode[1]]; case 3 /* Modifier */: return ['modifier', this.formatOpcode(opcode[1]), this.formatParams(opcode[4]), this.formatHash(opcode[5])]; case 7 /* Component */: return ['component', opcode[1], this.formatAttrs(opcode[2]), this.formatHash(opcode[3]), this.formatBlocks(opcode[4])]; // case Op.DynamicComponent: // return [ // 'dynamic-component', // this.formatOpcode(opcode[1]), // this.formatAttrs(opcode[2]), // this.formatHash(opcode[3]), // this.formatBlocks(opcode[4]), // ]; case 24 /* GetSymbol */: return ['get-symbol', this.program.symbols[opcode[1]], opcode[1]]; case 25 /* GetFree */: return ['get-free', this.program.upvars[opcode[1]]]; case 26 /* GetContextualFree */: return ['get-contextual-free', this.program.upvars[opcode[1]], opcode[2]]; case 27 /* GetPath */: return ['get-path', this.formatOpcode(opcode[1]), opcode[2]]; case 28 /* HasBlock */: return ['has-block', opcode[1]]; case 29 /* HasBlockParams */: return ['has-block-params', opcode[1]]; case 30 /* Undefined */: return ['undefined']; case 31 /* Call */: return ['call', this.formatOpcode(opcode[3]), this.formatParams(opcode[4]), this.formatHash(opcode[5])]; case 32 /* Concat */: return ['concat', this.formatParams(opcode[1])]; default: { var opName = opcode[0]; throw assertNever(opName, 'unexpected ' + opName); } } } else { return opcode; } }; WireFormatDebugger.prototype.formatAttrs = function formatAttrs(opcodes) { var _this = this; if (opcodes === null) return null; return opcodes.map(function (o) { return _this.formatOpcode(o); }); }; WireFormatDebugger.prototype.formatParams = function formatParams(opcodes) { var _this2 = this; if (opcodes === null) return null; return opcodes.map(function (o) { return _this2.formatOpcode(o); }); }; WireFormatDebugger.prototype.formatHash = function formatHash(hash) { var _this3 = this; if (hash === null) return null; return hash[0].reduce(function (accum, key, index) { accum[key] = _this3.formatOpcode(hash[1][index]); return accum; }, dict()); }; WireFormatDebugger.prototype.formatBlocks = function formatBlocks(blocks) { var _this4 = this; if (blocks === null) return null; return blocks[0].reduce(function (accum, key, index) { accum[key] = _this4.formatBlock(blocks[1][index]); return accum; }, dict()); }; WireFormatDebugger.prototype.formatBlock = function formatBlock(block) { var _this5 = this; return { parameters: block.parameters, statements: block.statements.map(function (s) { return _this5.formatOpcode(s); }) }; }; return WireFormatDebugger; }(); export default WireFormatDebugger; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi93aXJlLWZvcm1hdC1kZWJ1Zy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU9BLFNBQUEsSUFBQSxFQUFBLFdBQUEsUUFBQSxlQUFBOztJQUVjLGtCO0FBQ1osZ0NBQUEsT0FBQSxFQUFBLFdBQUEsRUFBNEU7QUFBQTs7QUFBeEQsYUFBQSxPQUFBLEdBQUEsT0FBQTtBQUE0RDs7aUNBRWhGLE0scUJBQU07QUFDSixZQUFJLE1BQUosRUFBQTtBQUVBLDZCQUFzQixLQUFBLE9BQUEsQ0FBdEIsVUFBQSxrSEFBK0M7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBLGdCQUEvQyxTQUErQzs7QUFDN0MsZ0JBQUEsSUFBQSxDQUFTLEtBQUEsWUFBQSxDQUFULFNBQVMsQ0FBVDtBQUNEO0FBRUQsZUFBQSxHQUFBO0FBQ0QsSzs7aUNBRUQsWSx5QkFBQSxNLEVBQXNDO0FBQ3BDLFlBQUksTUFBQSxPQUFBLENBQUosTUFBSSxDQUFKLEVBQTJCO0FBQ3pCLG9CQUFRLE9BQVIsQ0FBUSxDQUFSO0FBQ0UscUJBQUEsQ0FBQSxDQUFBLFlBQUE7QUFDRSwyQkFBTyxDQUFBLFFBQUEsRUFBVyxLQUFBLFlBQUEsQ0FBa0IsT0FBN0IsQ0FBNkIsQ0FBbEIsQ0FBWCxFQUF5QyxPQUFoRCxDQUFnRCxDQUF6QyxDQUFQO0FBRUYscUJBQUEsQ0FBQSxDQUFBLFdBQUE7QUFDRSwyQkFBTyxDQUFBLE9BQUEsRUFFTCxLQUFBLFlBQUEsQ0FBa0IsT0FGYixDQUVhLENBQWxCLENBRkssRUFHTCxLQUFBLFlBQUEsQ0FBa0IsT0FIYixDQUdhLENBQWxCLENBSEssRUFJTCxLQUFBLFVBQUEsQ0FBZ0IsT0FKWCxDQUlXLENBQWhCLENBSkssRUFLTCxLQUFBLFlBQUEsQ0FBa0IsT0FMcEIsQ0FLb0IsQ0FBbEIsQ0FMSyxDQUFQO0FBUUYscUJBQUEsQ0FBQSxDQUFB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LEtBQStCLENBQWxCLENBQWI7QUFDQSxtQkFBQSxLQUFBO0FBRkssU0FBQSxFQUFQLE1BQU8sQ0FBUDtBQUlELEs7O2lDQUVPLFkseUJBQUEsTSxFQUEyQztBQUFBOztBQUNqRCxZQUFJLFdBQUosSUFBQSxFQUFxQixPQUFBLElBQUE7QUFFckIsZUFBTyxPQUFBLENBQUEsRUFBQSxNQUFBLENBQWlCLFVBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxLQUFBLEVBQXNCO0FBQzVDLGtCQUFBLEdBQUEsSUFBYSxPQUFBLFdBQUEsQ0FBaUIsT0FBQSxDQUFBLEVBQTlCLEtBQThCLENBQWpCLENBQWI7QUFDQSxtQkFBQSxLQUFBO0FBRkssU0FBQSxFQUFQLE1BQU8sQ0FBUDtBQUlELEs7O2lDQUVPLFcsd0JBQUEsSyxFQUF3QztBQUFBOztBQUM5QyxlQUFPO0FBQ0wsd0JBQVksTUFEUCxVQUFBO0FBRUwsd0JBQVksTUFBQSxVQUFBLENBQUEsR0FBQSxDQUFxQjtBQUFBLHVCQUFLLE9BQUEsWUFBQSxDQUExQixDQUEwQixDQUFMO0FBQUEsYUFBckI7QUFGUCxTQUFQO0FBSUQsSzs7Ozs7ZUE5S1csa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBXaXJlRm9ybWF0LFxuICBTZXhwT3Bjb2RlcyBhcyBPcCxcbiAgT3B0aW9uLFxuICBTZXJpYWxpemVkSW5saW5lQmxvY2ssXG4gIFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrLFxufSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGRpY3QsIGFzc2VydE5ldmVyIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdpcmVGb3JtYXREZWJ1Z2dlciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcHJvZ3JhbTogU2VyaWFsaXplZFRlbXBsYXRlQmxvY2ssIF9wYXJhbWV0ZXJzPzogbnVtYmVyW10pIHt9XG5cbiAgZm9ybWF0KCk6IHVua25vd24ge1xuICAgIGxldCBvdXQgPSBbXTtcblxuICAgIGZvciAobGV0IHN0YXRlbWVudCBvZiB0aGlzLnByb2dyYW0uc3RhdGVtZW50cykge1xuICAgICAgb3V0LnB1c2godGhpcy5mb3JtYXRPcGNvZGUoc3RhdGVtZW50KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZvcm1hdE9wY29kZShvcGNvZGU6IFdpcmVGb3JtYXQuU3ludGF4KTogdW5rbm93biB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3Bjb2RlKSkge1xuICAgICAgc3dpdGNoIChvcGNvZGVbMF0pIHtcbiAgICAgICAgY2FzZSBPcC5BcHBlbmQ6XG4gICAgICAgICAgcmV0dXJuIFsnYXBwZW5kJywgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKSwgb3Bjb2RlWzJdXTtcblxuICAgICAgICBjYXNlIE9wLkJsb2NrOlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnYmxvY2snLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0UGFyYW1zKG9wY29kZVsyXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdEhhc2gob3Bjb2RlWzNdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0QmxvY2tzKG9wY29kZVs0XSksXG4gICAgICAgICAgXTtcblxuICAgICAgICBjYXNlIE9wLk9wZW5FbGVtZW50OlxuICAgICAgICAgIHJldHVybiBbJ29wZW4tZWxlbWVudCcsIG9wY29kZVsxXSwgb3Bjb2RlWzJdXTtcblxuICAgICAgICBjYXNlIE9wLkNsb3NlRWxlbWVudDpcbiAgICAgICAgICByZXR1cm4gWydjbG9zZS1lbGVtZW50J107XG5cbiAgICAgICAgY2FzZSBPcC5GbHVzaEVsZW1lbnQ6XG4gICAgICAgICAgcmV0dXJuIFsnZmx1c2gtZWxlbWVudCddO1xuXG4gICAgICAgIGNhc2UgT3AuU3RhdGljQXR0cjpcbiAgICAgICAgICByZXR1cm4gWydzdGF0aWMtYXR0cicsIG9wY29kZVsxXSwgb3Bjb2RlWzJdLCBvcGNvZGVbM11dO1xuXG4gICAgICAgIGNhc2UgT3AuRHluYW1pY0F0dHI6XG4gICAgICAgICAgcmV0dXJuIFsnZHluYW1pYy1hdHRyJywgb3Bjb2RlWzFdLCB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbMl0pLCBvcGNvZGVbM11dO1xuXG4gICAgICAgIGNhc2UgT3AuQ29tcG9uZW50QXR0cjpcbiAgICAgICAgICByZXR1cm4gWydjb21wb25lbnQtYXR0cicsIG9wY29kZVsxXSwgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzJdKSwgb3Bjb2RlWzNdXTtcblxuICAgICAgICBjYXNlIE9wLkF0dHJTcGxhdDpcbiAgICAgICAgICByZXR1cm4gWydhdHRyLXNwbGF0J107XG5cbiAgICAgICAgY2FzZSBPcC5ZaWVsZDpcbiAgICAgICAgICByZXR1cm4gWyd5aWVsZCcsIG9wY29kZVsxXSwgdGhpcy5mb3JtYXRQYXJhbXMob3Bjb2RlWzJdKV07XG5cbiAgICAgICAgY2FzZSBPcC5QYXJ0aWFsOlxuICAgICAgICAgIHJldHVybiBbJ3BhcnRpYWwnLCB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbMV0pLCBvcGNvZGVbMl1dO1xuXG4gICAgICAgIGNhc2UgT3AuRHluYW1pY0FyZzpcbiAgICAgICAgICByZXR1cm4gWydkeW5hbWljLWFyZycsIG9wY29kZVsxXSwgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzJdKV07XG5cbiAgICAgICAgY2FzZSBPcC5TdGF0aWNBcmc6XG4gICAgICAgICAgcmV0dXJuIFsnc3RhdGljLWFyZycsIG9wY29kZVsxXSwgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzJdKV07XG5cbiAgICAgICAgY2FzZSBPcC5UcnVzdGluZ0R5bmFtaWNBdHRyOlxuICAgICAgICAgIHJldHVybiBbJ3RydXN0aW5nLWR5bmFtaWMtYXR0cicsIG9wY29kZVsxXSwgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzJdKSwgb3Bjb2RlWzNdXTtcblxuICAgICAgICBjYXNlIE9wLlRydXN0aW5nQ29tcG9uZW50QXR0cjpcbiAgICAgICAgICByZXR1cm4gWyd0cnVzdGluZy1jb21wb25lbnQtYXR0cicsIG9wY29kZVsxXSwgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzJdKSwgb3Bjb2RlWzNdXTtcblxuICAgICAgICBjYXNlIE9wLkRlYnVnZ2VyOlxuICAgICAgICAgIHJldHVybiBbJ2RlYnVnZ2VyJywgb3Bjb2RlWzFdXTtcblxuICAgICAgICBjYXNlIE9wLkNvbW1lbnQ6XG4gICAgICAgICAgcmV0dXJuIFsnY29tbWVudCcsIG9wY29kZVsxXV07XG5cbiAgICAgICAgY2FzZSBPcC5Nb2RpZmllcjpcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ21vZGlmaWVyJyxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsxXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdFBhcmFtcyhvcGNvZGVbNF0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRIYXNoKG9wY29kZVs1XSksXG4gICAgICAgICAgXTtcblxuICAgICAgICBjYXNlIE9wLkNvbXBvbmVudDpcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ2NvbXBvbmVudCcsXG4gICAgICAgICAgICBvcGNvZGVbMV0sXG4gICAgICAgICAgICB0aGlzLmZvcm1hdEF0dHJzKG9wY29kZVsyXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdEhhc2gob3Bjb2RlWzNdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0QmxvY2tzKG9wY29kZVs0XSksXG4gICAgICAgICAgXTtcblxuICAgICAgICAvLyBjYXNlIE9wLkR5bmFtaWNDb21wb25lbnQ6XG4gICAgICAgIC8vICAgcmV0dXJuIFtcbiAgICAgICAgLy8gICAgICdkeW5hbWljLWNvbXBvbmVudCcsXG4gICAgICAgIC8vICAgICB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbMV0pLFxuICAgICAgICAvLyAgICAgdGhpcy5mb3JtYXRBdHRycyhvcGNvZGVbMl0pLFxuICAgICAgICAvLyAgICAgdGhpcy5mb3JtYXRIYXNoKG9wY29kZVszXSksXG4gICAgICAgIC8vICAgICB0aGlzLmZvcm1hdEJsb2NrcyhvcGNvZGVbNF0pLFxuICAgICAgICAvLyAgIF07XG5cbiAgICAgICAgY2FzZSBPcC5HZXRTeW1ib2w6XG4gICAgICAgICAgcmV0dXJuIFsnZ2V0LXN5bWJvbCcsIHRoaXMucHJvZ3JhbS5zeW1ib2xzW29wY29kZVsxXV0sIG9wY29kZVsxXV07XG5cbiAgICAgICAgY2FzZSBPcC5HZXRGcmVlOlxuICAgICAgICAgIHJldHVybiBbJ2dldC1mcmVlJywgdGhpcy5wcm9ncmFtLnVwdmFyc1tvcGNvZGVbMV1dXTtcblxuICAgICAgICBjYXNlIE9wLkdldENvbnRleHR1YWxGcmVlOlxuICAgICAgICAgIHJldHVybiBbJ2dldC1jb250ZXh0dWFsLWZyZWUnLCB0aGlzLnByb2dyYW0udXB2YXJzW29wY29kZVsxXV0sIG9wY29kZVsyXV07XG5cbiAgICAgICAgY2FzZSBPcC5HZXRQYXRoOlxuICAgICAgICAgIHJldHVybiBbJ2dldC1wYXRoJywgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKSwgb3Bjb2RlWzJdXTtcblxuICAgICAgICBjYXNlIE9wLkhhc0Jsb2NrOlxuICAgICAgICAgIHJldHVybiBbJ2hhcy1ibG9jaycsIG9wY29kZVsxXV07XG5cbiAgICAgICAgY2FzZSBPcC5IYXNCbG9ja1BhcmFtczpcbiAgICAgICAgICByZXR1cm4gWydoYXMtYmxvY2stcGFyYW1zJywgb3Bjb2RlWzFdXTtcblxuICAgICAgICBjYXNlIE9wLlVuZGVmaW5lZDpcbiAgICAgICAgICByZXR1cm4gWyd1bmRlZmluZWQnXTtcblxuICAgICAgICBjYXNlIE9wLkNhbGw6XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdjYWxsJyxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVszXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdFBhcmFtcyhvcGNvZGVbNF0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRIYXNoKG9wY29kZVs1XSksXG4gICAgICAgICAgXTtcblxuICAgICAgICBjYXNlIE9wLkNvbmNhdDpcbiAgICAgICAgICByZXR1cm4gWydjb25jYXQnLCB0aGlzLmZvcm1hdFBhcmFtcyhvcGNvZGVbMV0gYXMgV2lyZUZvcm1hdC5Db3JlLlBhcmFtcyldO1xuXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBsZXQgb3BOYW1lID0gb3Bjb2RlWzBdO1xuICAgICAgICAgIHRocm93IGFzc2VydE5ldmVyKG9wTmFtZSwgYHVuZXhwZWN0ZWQgJHtvcE5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wY29kZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdEF0dHJzKG9wY29kZXM6IE9wdGlvbjxXaXJlRm9ybWF0LkF0dHJpYnV0ZVtdPik6IE9wdGlvbjx1bmtub3duW10+IHtcbiAgICBpZiAob3Bjb2RlcyA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIG9wY29kZXMubWFwKG8gPT4gdGhpcy5mb3JtYXRPcGNvZGUobykpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRQYXJhbXMob3Bjb2RlczogT3B0aW9uPFdpcmVGb3JtYXQuRXhwcmVzc2lvbltdPik6IE9wdGlvbjx1bmtub3duW10+IHtcbiAgICBpZiAob3Bjb2RlcyA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIG9wY29kZXMubWFwKG8gPT4gdGhpcy5mb3JtYXRPcGNvZGUobykpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRIYXNoKGhhc2g6IFdpcmVGb3JtYXQuQ29yZS5IYXNoKTogT3B0aW9uPG9iamVjdD4ge1xuICAgIGlmIChoYXNoID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiBoYXNoWzBdLnJlZHVjZSgoYWNjdW0sIGtleSwgaW5kZXgpID0+IHtcbiAgICAgIGFjY3VtW2tleV0gPSB0aGlzLmZvcm1hdE9wY29kZShoYXNoWzFdW2luZGV4XSk7XG4gICAgICByZXR1cm4gYWNjdW07XG4gICAgfSwgZGljdCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0QmxvY2tzKGJsb2NrczogV2lyZUZvcm1hdC5Db3JlLkJsb2Nrcyk6IE9wdGlvbjxvYmplY3Q+IHtcbiAgICBpZiAoYmxvY2tzID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiBibG9ja3NbMF0ucmVkdWNlKChhY2N1bSwga2V5LCBpbmRleCkgPT4ge1xuICAgICAgYWNjdW1ba2V5XSA9IHRoaXMuZm9ybWF0QmxvY2soYmxvY2tzWzFdW2luZGV4XSk7XG4gICAgICByZXR1cm4gYWNjdW07XG4gICAgfSwgZGljdCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0QmxvY2soYmxvY2s6IFNlcmlhbGl6ZWRJbmxpbmVCbG9jayk6IG9iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmFtZXRlcnM6IGJsb2NrLnBhcmFtZXRlcnMsXG4gICAgICBzdGF0ZW1lbnRzOiBibG9jay5zdGF0ZW1lbnRzLm1hcChzID0+IHRoaXMuZm9ybWF0T3Bjb2RlKHMpKSxcbiAgICB9O1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9