UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

119 lines (117 loc) 23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const constants_1 = require("../../constants"); const Helper_1 = require("../Helper"); class CreateIterableIteratorBaseHelper extends Helper_1.Helper { constructor({ handleNext, hasFilter = false }) { super(); this.handleNext = handleNext; this.hasFilter = hasFilter; } emit(sb, node, options) { if (!options.pushValue) { sb.emitOp(node, 'DROP'); return; } sb.emitOp(node, 'NEWMAP'); sb.emitOp(node, 'TUCK'); sb.emitPushInt(node, constants_1.IterableIteratorSlots.internalIterator); sb.emitOp(node, 'ROT'); sb.emitOp(node, 'SETITEM'); sb.emitOp(node, 'DUP'); sb.emitHelper(node, options, sb.helpers.wrapIterableIterator); sb.emitOp(node, 'TUCK'); sb.emitOp(node, 'OVER'); sb.emitOp(node, 'OVER'); sb.emitHelper(node, options, sb.helpers.createFunctionArray({ body: (innerOptionsIn) => { const innerOptions = sb.pushValueOptions(innerOptionsIn); sb.emitOp(node, 'DROP'); sb.scope.getThis(sb, node, innerOptions); sb.emitHelper(node, innerOptions, sb.helpers.return); }, })); sb.emitHelper(node, options, sb.helpers.bindFunctionThis({ overwrite: true })); sb.emitPushInt(node, constants_1.IterableIteratorSlots.iterator); sb.emitOp(node, 'SWAP'); sb.emitOp(node, 'SETITEM'); sb.emitHelper(node, options, sb.helpers.createFunctionArray({ body: (innerOptionsIn) => { const innerOptions = sb.pushValueOptions(innerOptionsIn); sb.emitOp(node, 'DROP'); sb.scope.getThis(sb, node, innerOptions); sb.emitHelper(node, innerOptions, sb.helpers.unwrapIterableIterator); sb.emitPushInt(node, constants_1.IterableIteratorSlots.internalIterator); sb.emitOp(node, 'PICKITEM'); if (this.hasFilter) { sb.emitHelper(node, innerOptions, sb.helpers.forLoop({ condition: () => { sb.emitHelper(node, innerOptions, sb.helpers.if({ condition: () => { sb.emitOp(node, 'DUP'); sb.emitSysCall(node, 'Neo.Enumerator.Next'); }, whenTrue: () => { sb.emitHelper(node, innerOptions, sb.helpers.if({ condition: () => { sb.emitOp(node, 'DUP'); this.handleNext(innerOptions); }, whenTrue: () => { sb.emitOp(node, 'NIP'); sb.emitPushBoolean(node, false); sb.emitHelper(node, innerOptions, sb.helpers.wrapBoolean); sb.emitPushBoolean(node, false); }, whenFalse: () => { sb.emitOp(node, 'DROP'); sb.emitPushBoolean(node, true); }, })); }, whenFalse: () => { sb.emitOp(node, 'DROP'); sb.emitHelper(node, innerOptions, sb.helpers.wrapUndefined); sb.emitPushBoolean(node, true); sb.emitHelper(node, innerOptions, sb.helpers.wrapBoolean); sb.emitPushBoolean(node, false); }, })); }, each: () => { }, cleanup: () => { }, })); } else { sb.emitHelper(node, innerOptions, sb.helpers.if({ condition: () => { sb.emitOp(node, 'DUP'); sb.emitSysCall(node, 'Neo.Enumerator.Next'); }, whenTrue: () => { this.handleNext(innerOptions); sb.emitPushBoolean(node, false); sb.emitHelper(node, innerOptions, sb.helpers.wrapBoolean); }, whenFalse: () => { sb.emitOp(node, 'DROP'); sb.emitHelper(node, innerOptions, sb.helpers.wrapUndefined); sb.emitPushBoolean(node, true); sb.emitHelper(node, innerOptions, sb.helpers.wrapBoolean); }, })); } sb.emitHelper(node, innerOptions, sb.helpers.createIteratorResult); sb.emitHelper(node, innerOptions, sb.helpers.return); }, })); sb.emitHelper(node, options, sb.helpers.bindFunctionThis({ overwrite: true })); sb.emitPushInt(node, constants_1.IterableIteratorSlots.next); sb.emitOp(node, 'SWAP'); sb.emitOp(node, 'SETITEM'); } } exports.CreateIterableIteratorBaseHelper = CreateIterableIteratorBaseHelper; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNyZWF0ZUl0ZXJhYmxlSXRlcmF0b3JCYXNlSGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsK0NBQXdEO0FBR3hELHNDQUFtQztBQVNuQyxNQUFhLGdDQUFpQyxTQUFRLGVBQU07SUFJMUQsWUFBbUIsRUFBRSxVQUFVLEVBQUUsU0FBUyxHQUFHLEtBQUssRUFBMkM7UUFDM0YsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBRU0sSUFBSSxDQUFDLEVBQWlCLEVBQUUsSUFBYSxFQUFFLE9BQXFCO1FBQ2pFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQ3RCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRXhCLE9BQU87U0FDUjtRQUdELEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRTFCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXhCLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGlDQUFxQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFN0QsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFdkIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFM0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFdkIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUU5RCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV4QixFQUFF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Q0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFFbkUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdkQsQ0FBQztTQUNGLENBQUMsQ0FDSCxDQUFDO1FBRUYsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRS9FLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGlDQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWpELEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXhCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7Q0FDRjtBQW5NRCw0RUFtTUMiLCJmaWxlIjoibmVvLW9uZS1zbWFydC1jb250cmFjdC1jb21waWxlci9zcmMvY29tcGlsZS9oZWxwZXIvaXRlcmFibGVJdGVyYXRvci9DcmVhdGVJdGVyYWJsZUl0ZXJhdG9yQmFzZUhlbHBlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IEl0ZXJhYmxlSXRlcmF0b3JTbG90cyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBTY3JpcHRCdWlsZGVyIH0gZnJvbSAnLi4vLi4vc2InO1xuaW1wb3J0IHsgVmlzaXRPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgSGVscGVyIH0gZnJvbSAnLi4vSGVscGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVJdGVyYWJsZUl0ZXJhdG9yQmFzZUhlbHBlck9wdGlvbnMge1xuICByZWFkb25seSBoYW5kbGVOZXh0OiAob3B0aW9uczogVmlzaXRPcHRpb25zKSA9PiB2b2lkO1xuICByZWFkb25seSBoYXNGaWx0ZXI/OiBib29sZWFuO1xufVxuXG4vLyBJbnB1dDogW2l0ZXJhdG9yXVxuLy8gT3V0cHV0OiBbdmFsXVxuZXhwb3J0IGNsYXNzIENyZWF0ZUl0ZXJhYmxlSXRlcmF0b3JCYXNlSGVscGVyIGV4dGVuZHMgSGVscGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVOZXh0OiAob3B0aW9uczogVmlzaXRPcHRpb25zKSA9PiB2b2lkO1xuICBwcml2YXRlIHJlYWRvbmx5IGhhc0ZpbHRlcjogYm9vbGVhbjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoeyBoYW5kbGVOZXh0LCBoYXNGaWx0ZXIgPSBmYWxzZSB9OiBDcmVhdGVJdGVyYWJsZUl0ZXJhdG9yQmFzZUhlbHBlck9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuaGFuZGxlTmV4dCA9IGhhbmRsZU5leHQ7XG4gICAgdGhpcy5oYXNGaWx0ZXIgPSBoYXNGaWx0ZXI7XG4gIH1cblxuICBwdWJsaWMgZW1pdChzYjogU2NyaXB0QnVpbGRlciwgbm9kZTogdHMuTm9kZSwgb3B0aW9uczogVmlzaXRPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCFvcHRpb25zLnB1c2hWYWx1ZSkge1xuICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBbbWFwLCBpdGVyYXRvcl1cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ05FV01BUCcpO1xuICAgIC8vIFttYXAsIGl0ZXJhdG9yLCBtYXBdXG4gICAgc2IuZW1pdE9wKG5vZGUsICdUVUNLJyk7XG4gICAgLy8gW251bWJlciwgbWFwLCBpdGVyYXRvciwgbWFwXVxuICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIEl0ZXJhYmxlSXRlcmF0b3JTbG90cy5pbnRlcm5hbEl0ZXJhdG9yKTtcbiAgICAvLyBbaXRlcmF0b3IsIG51bWJlciwgbWFwLCBtYXBdXG4gICAgc2IuZW1pdE9wKG5vZGUsICdST1QnKTtcbiAgICAvLyBbbWFwXVxuICAgIHNiLmVtaXRPcChub2RlLCAnU0VUSVRFTScpO1xuICAgIC8vIFttYXAsIG1hcF1cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ0RVUCcpO1xuICAgIC8vIFt2YWwsIG1hcF1cbiAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMud3JhcEl0ZXJhYmxlSXRlcmF0b3IpO1xuICAgIC8vIFt2YWwsIG1hcCwgdmFsXVxuICAgIHNiLmVtaXRPcChub2RlLCAnVFVDSycpO1xuICAgIC8vIFttYXAsIHZhbCwgbWFwLCB2YWxdXG4gICAgc2IuZW1pdE9wKG5vZGUsICdPVkVSJyk7XG4gICAgLy8gW3ZhbCwgbWFwLCB2YWwsIG1hcCwgdmFsXVxuICAgIHNiLmVtaXRPcChub2RlLCAnT1ZFUicpO1xuICAgIC8vIFtmYXJyLCB2YWwsIG1hcCwgdmFsLCBtYXAsIHZhbF1cbiAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgbm9kZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzYi5oZWxwZXJzLmNyZWF0ZUZ1bmN0aW9uQXJyYXkoe1xuICAgICAgICBib2R5OiAoaW5uZXJPcHRpb25zSW4pID0+IHtcbiAgICAgICAgICBjb25zdCBpbm5lck9wdGlvbnMgPSBzYi5wdXNoVmFsdWVPcHRpb25zKGlubmVyT3B0aW9uc0luKTtcbiAgICAgICAgICAvLyBbXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgICAgIC8vIFt2YWxdXG4gICAgICAgICAgc2Iuc2NvcGUuZ2V0VGhpcyhzYiwgbm9kZSwgaW5uZXJPcHRpb25zKTtcbiAgICAgICAgICAvLyBbXVxuICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnJldHVybik7XG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIC8vIFtmYXJyLCBtYXAsIHZhbCwgbWFwLCB2YWxdXG4gICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLmJpbmRGdW5jdGlvblRoaXMoeyBvdmVyd3JpdGU6IHRydWUgfSkpO1xuICAgIC8vIFtudW1iZXIsIGZhcnIsIG1hcCwgdmFsLCBtYXAsIHZhbF1cbiAgICBzYi5lbWl0UHVzaEludChub2RlLCBJdGVyYWJsZUl0ZXJhdG9yU2xvdHMuaXRlcmF0b3IpO1xuICAgIC8vIFtmYXJyLCBudW1iZXIsIG1hcCwgdmFsLCBtYXAsIHZhbF1cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAvLyBbdmFsLCBtYXAsIHZhbF1cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ1NFVElURU0nKTtcbiAgICAvLyBbZmFyciwgdmFsLCBtYXAsIHZhbF1cbiAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgbm9kZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzYi5oZWxwZXJzLmNyZWF0ZUZ1bmN0aW9uQXJyYXkoe1xuICAgICAgICBib2R5OiAoaW5uZXJPcHRpb25zSW4pID0+IHtcbiAgICAgICAgICBjb25zdCBpbm5lck9wdGlvbnMgPSBzYi5wdXNoVmFsdWVPcHRpb25zKGlubmVyT3B0aW9uc0luKTtcbiAgICAgICAgICAvLyBbXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgICAgIC8vIFt2YWxdXG4gICAgICAgICAgc2Iuc2NvcGUuZ2V0VGhpcyhzYiwgbm9kZSwgaW5uZXJPcHRpb25zKTtcbiAgICAgICAgICAvLyBbbWFwXVxuICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnVud3JhcEl0ZXJhYmxlSXRlcmF0b3IpO1xuICAgICAgICAgIC8vIFtudW1iZXIsIG1hcF1cbiAgICAgICAgICBzYi5lbWl0UHVzaEludChub2RlLCBJdGVyYWJsZUl0ZXJhdG9yU2xvdHMuaW50ZXJuYWxJdGVyYXRvcik7XG4gICAgICAgICAgLy8gW2l0ZXJhdG9yXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnUElDS0lURU0nKTtcbiAgICAgICAgICBpZiAodGhpcy5oYXNGaWx0ZXIpIHtcbiAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgIGlubmVyT3B0aW9ucyxcbiAgICAgICAgICAgICAgc2IuaGVscGVycy5mb3JMb29wKHtcbiAgICAgICAgICAgICAgICBjb25kaXRpb246ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgICAgIGlubmVyT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgc2IuaGVscGVycy5pZih7XG4gICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBbaXRlcmF0b3IsIGl0ZXJhdG9yXVxuICAgICAgICAgICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEVVAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFtib29sZWFuLCBpdGVyYXRvcl1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNiLmVtaXRTeXNDYWxsKG5vZGUsICdOZW8uRW51bWVyYXRvci5OZXh0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICB3aGVuVHJ1ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzYi5oZWxwZXJzLmlmKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb246ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFtpdGVyYXRvciwgaXRlcmF0b3JdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RVUCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gW2Jvb2xlYW4sIHZhbHVlVmFsLCBpdGVyYXRvcl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlTmV4dChpbm5lck9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlblRydWU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFt2YWx1ZVZhbF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnTklQJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBbYm9vbGVhbiwgdmFsdWVWYWxdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYi5lbWl0UHVzaEJvb2xlYW4obm9kZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gW2RvbmVWYWwsIHZhbHVlVmFsXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMud3JhcEJvb2xlYW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gW2Jvb2xlYW4sIGRvbmVWYWwsIHZhbHVlVmFsXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2IuZW1pdFB1c2hCb29sZWFuKG5vZGUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW5GYWxzZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gW2l0ZXJhdG9yXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBbYm9vbGVhbiwgaXRlcmF0b3JdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYi5lbWl0UHVzaEJvb2xlYW4obm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgd2hlbkZhbHNlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBbdmFsdWVWYWxdXG4gICAgICAgICAgICAgICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy53cmFwVW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFtib29sZWFuLCB2YWx1ZVZhbF1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNiLmVtaXRQdXNoQm9vbGVhbihub2RlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFtkb25lVmFsLCB2YWx1ZVZhbF1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLndyYXBCb29sZWFuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFtib29sZWFuLCBkb25lVmFsLCB2YWx1ZVZhbF1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNiLmVtaXRQdXNoQm9vbGVhbihub2RlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZWFjaDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2xlYW51cDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgaW5uZXJPcHRpb25zLFxuICAgICAgICAgICAgICBzYi5oZWxwZXJzLmlmKHtcbiAgICAgICAgICAgICAgICBjb25kaXRpb246ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIFtpdGVyYXRvciwgaXRlcmF0b3JdXG4gICAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RVUCcpO1xuICAgICAgICAgICAgICAgICAgLy8gW2Jvb2xlYW4sIGl0ZXJhdG9yXVxuICAgICAgICAgICAgICAgICAgc2IuZW1pdFN5c0NhbGwobm9kZSwgJ05lby5FbnVtZXJhdG9yLk5leHQnKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHdoZW5UcnVlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyBbdmFsdWVWYWxdXG4gICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZU5leHQoaW5uZXJPcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgIC8vIFtib29sZWFuLCB2YWx1ZVZhbF1cbiAgICAgICAgICAgICAgICAgIHNiLmVtaXRQdXNoQm9vbGVhbihub2RlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAvLyBbZG9uZVZhbCwgdmFsdWVWYWxdXG4gICAgICAgICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy53cmFwQm9vbGVhbik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB3aGVuRmFsc2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIFtdXG4gICAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgICAgICAgICAgICAgIC8vIFt2YWx1ZVZhbF1cbiAgICAgICAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLndyYXBVbmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgLy8gW2Jvb2xlYW4sIHZhbHVlVmFsXVxuICAgICAgICAgICAgICAgICAgc2IuZW1pdFB1c2hCb29sZWFuKG5vZGUsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgLy8gW2RvbmVWYWwsIHZhbHVlVmFsXVxuICAgICAgICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMud3JhcEJvb2xlYW4pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gW3ZhbF1cbiAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy5jcmVhdGVJdGVyYXRvclJlc3VsdCk7XG4gICAgICAgICAgLy8gW11cbiAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy5yZXR1cm4pO1xuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgKTtcbiAgICAvLyBbZmFyciwgbWFwLCB2YWxdXG4gICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLmJpbmRGdW5jdGlvblRoaXMoeyBvdmVyd3JpdGU6IHRydWUgfSkpO1xuICAgIC8vIFtudW1iZXIsIGZhcnIsIG1hcCwgdmFsXVxuICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIEl0ZXJhYmxlSXRlcmF0b3JTbG90cy5uZXh0KTtcbiAgICAvLyBbZmFyciwgbnVtYmVyLCBtYXAsIHZhbF1cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAvLyBbdmFsXVxuICAgIHNiLmVtaXRPcChub2RlLCAnU0VUSVRFTScpO1xuICB9XG59XG4iXX0=