@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
129 lines (127 loc) • 20.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const Helper_1 = require("../Helper");
class BufferSliceHelper extends Helper_1.Helper {
constructor({ hasEnd = false }) {
super();
this.hasEnd = hasEnd;
}
emit(sb, node, options) {
if (!options.pushValue) {
sb.emitOp(node, 'DROP');
sb.emitOp(node, 'DROP');
return;
}
if (this.hasEnd) {
sb.emitOp(node, 'ROT');
sb.emitOp(node, 'SWAP');
sb.emitHelper(node, options, sb.helpers.if({
condition: () => {
sb.emitOp(node, 'TUCK');
sb.emitPushInt(node, 0);
sb.emitOp(node, 'LT');
},
whenTrue: () => {
sb.emitOp(node, 'TUCK');
sb.emitOp(node, 'SIZE');
sb.emitOp(node, 'ADD');
sb.emitOp(node, 'SWAP');
},
}));
sb.emitOp(node, 'ROT');
sb.emitHelper(node, options, sb.helpers.if({
condition: () => {
sb.emitOp(node, 'TUCK');
sb.emitPushInt(node, 0);
sb.emitOp(node, 'LT');
},
whenTrue: () => {
sb.emitOp(node, 'TUCK');
sb.emitOp(node, 'SIZE');
sb.emitOp(node, 'ADD');
sb.emitOp(node, 'SWAP');
},
}));
sb.emitOp(node, 'ROT');
sb.emitOp(node, 'ROT');
sb.emitHelper(node, options, sb.helpers.if({
condition: () => {
sb.emitOp(node, 'TUCK');
sb.emitOp(node, 'OVER');
sb.emitOp(node, 'LTE');
},
whenTrue: () => {
sb.emitOp(node, 'DROP');
sb.emitOp(node, 'DROP');
sb.emitOp(node, 'DROP');
sb.emitPushBuffer(node, Buffer.alloc(0, 0));
},
whenFalse: () => {
sb.emitOp(node, 'TUCK');
sb.emitOp(node, 'SUB');
sb.emitOp(node, 'ROT');
sb.emitOp(node, 'ROT');
sb.emitOp(node, 'OVER');
sb.emitOp(node, 'SIZE');
sb.emitOp(node, 'SWAP');
sb.emitOp(node, 'SUB');
sb.emitOp(node, 'RIGHT');
sb.emitOp(node, 'SWAP');
sb.emitOp(node, 'LEFT');
},
}));
}
else {
sb.emitHelper(node, options, sb.helpers.if({
condition: () => {
sb.emitOp(node, 'DUP');
sb.emitPushInt(node, 0);
sb.emitOp(node, 'LT');
},
whenTrue: () => {
sb.emitPushInt(node, -1);
sb.emitOp(node, 'MUL');
sb.emitHelper(node, options, sb.helpers.if({
condition: () => {
sb.emitOp(node, 'TUCK');
sb.emitOp(node, 'OVER');
sb.emitOp(node, 'SIZE');
sb.emitOp(node, 'GT');
},
whenTrue: () => {
sb.emitOp(node, 'NIP');
},
whenFalse: () => {
sb.emitOp(node, 'SWAP');
sb.emitOp(node, 'RIGHT');
},
}));
},
whenFalse: () => {
sb.emitOp(node, 'OVER');
sb.emitOp(node, 'SIZE');
sb.emitOp(node, 'SWAP');
sb.emitOp(node, 'SUB');
sb.emitHelper(node, options, sb.helpers.if({
condition: () => {
sb.emitOp(node, 'TUCK');
sb.emitPushInt(node, 0);
sb.emitOp(node, 'LTE');
},
whenTrue: () => {
sb.emitOp(node, 'DROP');
sb.emitOp(node, 'DROP');
sb.emitPushBuffer(node, Buffer.alloc(0, 0));
},
whenFalse: () => {
sb.emitOp(node, 'SWAP');
sb.emitOp(node, 'RIGHT');
},
}));
},
}));
}
}
}
exports.BufferSliceHelper = BufferSliceHelper;
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QUUsTUFBTSxDQUFDLENBQUM7NEJBRXhCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDOzRCQUV4QixFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM5QyxDQUFDO3dCQUNELFNBQVMsRUFBRSxHQUFHLEVBQUU7NEJBRWQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7NEJBRXhCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO3dCQUMzQixDQUFDO3FCQUNGLENBQUMsQ0FDSCxDQUFDO2dCQUNKLENBQUM7YUFDRixDQUFDLENBQ0gsQ0FBQztTQUNIO0lBQ0gsQ0FBQztDQUNGO0FBak5ELDhDQWlOQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL2hlbHBlci9idWZmZXIvQnVmZmVyU2xpY2VIZWxwZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBTY3JpcHRCdWlsZGVyIH0gZnJvbSAnLi4vLi4vc2InO1xuaW1wb3J0IHsgVmlzaXRPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgSGVscGVyIH0gZnJvbSAnLi4vSGVscGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBCdWZmZXJTbGljZUhlbHBlck9wdGlvbnMge1xuICByZWFkb25seSBoYXNFbmQ/OiBib29sZWFuO1xufVxuXG4vLyBJbnB1dDogW3N0YXJ0LCBlbmQ/LCBidWZmZXJdXG4vLyBPdXRwdXQ6IFtudW1iZXJdXG5leHBvcnQgY2xhc3MgQnVmZmVyU2xpY2VIZWxwZXIgZXh0ZW5kcyBIZWxwZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGhhc0VuZDogYm9vbGVhbjtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHsgaGFzRW5kID0gZmFsc2UgfTogQnVmZmVyU2xpY2VIZWxwZXJPcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmhhc0VuZCA9IGhhc0VuZDtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0KHNiOiBTY3JpcHRCdWlsZGVyLCBub2RlOiB0cy5Ob2RlLCBvcHRpb25zOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIW9wdGlvbnMucHVzaFZhbHVlKSB7XG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzRW5kKSB7XG4gICAgICAvLyBbYnVmZmVyLCBzdGFydCwgZW5kXVxuICAgICAgc2IuZW1pdE9wKG5vZGUsICdST1QnKTtcbiAgICAgIC8vIFtzdGFydCwgYnVmZmVyLCBlbmRdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgIG5vZGUsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHNiLmhlbHBlcnMuaWYoe1xuICAgICAgICAgIGNvbmRpdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgLy8gW3N0YXJ0LCBidWZmZXIsIHN0YXJ0LCBlbmRdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1RVQ0snKTtcbiAgICAgICAgICAgIC8vIFswLCBzdGFydCwgYnVmZmVyLCBzdGFydCwgZW5kXVxuICAgICAgICAgICAgc2IuZW1pdFB1c2hJbnQobm9kZSwgMCk7XG4gICAgICAgICAgICAvLyBbc3RhcnQgPCAwLCBidWZmZXIsIHN0YXJ0LCBlbmRdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0xUJyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aGVuVHJ1ZTogKCkgPT4ge1xuICAgICAgICAgICAgLy8gW2J1ZmZlciwgc3RhcnQsIGJ1ZmZlciwgZW5kXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdUVUNLJyk7XG4gICAgICAgICAgICAvLyBbc2l6ZSwgc3RhcnQsIGJ1ZmZlciwgZW5kXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdTSVpFJyk7XG4gICAgICAgICAgICAvLyBbc3RhcnQsIGJ1ZmZlciwgZW5kXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdBREQnKTtcbiAgICAgICAgICAgIC8vIFtidWZmZXIsIHN0YXJ0LCBlbmRdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICAvLyBbZW5kLCBidWZmZXIsIHN0YXJ0XVxuICAgICAgc2IuZW1pdE9wKG5vZGUsICdST1QnKTtcbiAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgIG5vZGUsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHNiLmhlbHBlcnMuaWYoe1xuICAgICAgICAgIGNvbmRpdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgLy8gW2VuZCwgYnVmZmVyLCBlbmQsIHN0YXJ0XVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdUVUNLJyk7XG4gICAgICAgICAgICAvLyBbMCwgZW5kLCBidWZmZXIsIGVuZCwgc3RhcnRdXG4gICAgICAgICAgICBzYi5lbWl0UHVzaEludChub2RlLCAwKTtcbiAgICAgICAgICAgIC8vIFtlbmQgPCAwLCBidWZmZXIsIGVuZCwgc3RhcnRdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0xUJyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aGVuVHJ1ZTogKCkgPT4ge1xuICAgICAgICAgICAgLy8gW2J1ZmZlciwgZW5kLCBidWZmZXIsIHN0YXJ0XVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdUVUNLJyk7XG4gICAgICAgICAgICAvLyBbc2l6ZSwgZW5kLCBidWZmZXIsIHN0YXJ0XVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdTSVpFJyk7XG4gICAgICAgICAgICAvLyBbZW5kLCBidWZmZXIsIHN0YXJ0XVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdBREQnKTtcbiAgICAgICAgICAgIC8vIFtidWZmZXIsIGVuZCwgc3RhcnRdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICAvLyBbc3RhcnQsIGJ1ZmZlciwgZW5kXVxuICAgICAgc2IuZW1pdE9wKG5vZGUsICdST1QnKTtcbiAgICAgIC8vIFtlbmQsIHN0YXJ0LCBidWZmZXJdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ1JPVCcpO1xuICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgbm9kZSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgc2IuaGVscGVycy5pZih7XG4gICAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBbZW5kLCBzdGFydCwgZW5kLCBidWZmZXJdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1RVQ0snKTtcbiAgICAgICAgICAgIC8vIFtzdGFydCwgZW5kLCBzdGFydCwgZW5kLCBidWZmZXJdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ09WRVInKTtcbiAgICAgICAgICAgIC8vIFtlbmQgPD0gc3RhcnQsIHN0YXJ0LCBlbmQsIGJ1ZmZlcl1cbiAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnTFRFJyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aGVuVHJ1ZTogKCkgPT4ge1xuICAgICAgICAgICAgLy8gW2VuZCwgYnVmZmVyXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICAgICAgICAvLyBbYnVmZmVyXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICAgICAgICAvLyBbXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICAgICAgICAvLyBbYnVmZmVyXVxuICAgICAgICAgICAgc2IuZW1pdFB1c2hCdWZmZXIobm9kZSwgQnVmZmVyLmFsbG9jKDAsIDApKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdoZW5GYWxzZTogKCkgPT4ge1xuICAgICAgICAgICAgLy8gW3N0YXJ0LCBlbmQsIHN0YXJ0LCBidWZmZXJdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1RVQ0snKTtcbiAgICAgICAgICAgIC8vIFtsZWZ0LCBzdGFydCwgYnVmZmVyXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdTVUInKTtcbiAgICAgICAgICAgIC8vIFtidWZmZXIsIGxlZnQsIHN0YXJ0XVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdST1QnKTtcbiAgICAgICAgICAgIC8vIFtzdGFydCwgYnVmZmVyLCBsZWZ0XVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdST1QnKTtcbiAgICAgICAgICAgIC8vIFtidWZmZXIsIHN0YXJ0LCBidWZmZXIsIGxlZnRdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ09WRVInKTtcbiAgICAgICAgICAgIC8vIFtsZW5ndGgsIHN0YXJ0LCBidWZmZXIsIGxlZnRdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NJWkUnKTtcbiAgICAgICAgICAgIC8vIFtzdGFydCwgbGVuZ3RoLCBidWZmZXIsIGxlZnRdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgICAgICAgIC8vIFtyaWdodCwgYnVmZmVyLCBsZWZ0XVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdTVUInKTtcbiAgICAgICAgICAgIC8vIFtidWZmZXIsIGxlZnRdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1JJR0hUJyk7XG4gICAgICAgICAgICAvLyBbbGVmdCwgYnVmZmVyXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdTV0FQJyk7XG4gICAgICAgICAgICAvLyBbYnVmZmVyXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdMRUZUJyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgICBub2RlLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBzYi5oZWxwZXJzLmlmKHtcbiAgICAgICAgICBjb25kaXRpb246ICgpID0+IHtcbiAgICAgICAgICAgIC8vIFtzdGFydCwgc3RhcnQsIGJ1ZmZlcl1cbiAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFVQJyk7XG4gICAgICAgICAgICAvLyBbMCwgc3RhcnQsIHN0YXJ0LCBidWZmZXJdXG4gICAgICAgICAgICBzYi5lbWl0UHVzaEludChub2RlLCAwKTtcbiAgICAgICAgICAgIC8vIFtzdGFydCA8IDAsIHN0YXJ0LCBidWZmZXJdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0xUJyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aGVuVHJ1ZTogKCkgPT4ge1xuICAgICAgICAgICAgLy8gWy0xLCBzdGFydCwgYnVmZmVyXVxuICAgICAgICAgICAgc2IuZW1pdFB1c2hJbnQobm9kZSwgLTEpO1xuICAgICAgICAgICAgLy8gW3JpZ2h0LCBidWZmZXJdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ01VTCcpO1xuICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgc2IuaGVscGVycy5pZih7XG4gICAgICAgICAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyBbcmlnaHQsIGJ1ZmZlciwgcmlnaHRdXG4gICAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1RVQ0snKTtcbiAgICAgICAgICAgICAgICAgIC8vIFtidWZmZXIsIHJpZ2h0LCBidWZmZXIsIHJpZ2h0XVxuICAgICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdPVkVSJyk7XG4gICAgICAgICAgICAgICAgICAvLyBbbGVuZ3RoLCByaWdodCwgYnVmZmVyLCByaWdodF1cbiAgICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnU0laRScpO1xuICAgICAgICAgICAgICAgICAgLy8gW3JpZ2h0ID4gbGVuZ3RoLCBidWZmZXIsIHJpZ2h0XVxuICAgICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdHVCcpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgd2hlblRydWU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIFtidWZmZXJdXG4gICAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ05JUCcpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgd2hlbkZhbHNlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyBbcmlnaHQsIGJ1ZmZlcl1cbiAgICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnU1dBUCcpO1xuICAgICAgICAgICAgICAgICAgLy8gW2J1ZmZlcl1cbiAgICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnUklHSFQnKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aGVuRmFsc2U6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIFtidWZmZXIsIHN0YXJ0LCBidWZmZXJdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ09WRVInKTtcbiAgICAgICAgICAgIC8vIFtsZW5ndGgsIHN0YXJ0LCBidWZmZXJdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NJWkUnKTtcbiAgICAgICAgICAgIC8vIFtzdGFydCwgbGVuZ3RoLCBidWZmZXJdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgICAgICAgIC8vIFtyaWdodCwgYnVmZmVyXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdTVUInKTtcbiAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICAgIHNiLmhlbHBlcnMuaWYoe1xuICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gW3JpZ2h0LCBidWZmZXIsIHJpZ2h0XVxuICAgICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdUVUNLJyk7XG4gICAgICAgICAgICAgICAgICAvLyBbMCwgcmlnaHQsIGJ1ZmZlciwgcmlnaHRdXG4gICAgICAgICAgICAgICAgICBzYi5lbWl0UHVzaEludChub2RlLCAwKTtcbiAgICAgICAgICAgICAgICAgIC8vIFtyaWdodCA8IDAsIGJ1ZmZlciwgcmlnaHRdXG4gICAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0xURScpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgd2hlblRydWU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIFtyaWdodF1cbiAgICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgICAgICAgICAgICAgLy8gW11cbiAgICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgICAgICAgICAgICAgLy8gW2J1ZmZlcl1cbiAgICAgICAgICAgICAgICAgIHNiLmVtaXRQdXNoQnVmZmVyKG5vZGUsIEJ1ZmZlci5hbGxvYygwLCAwKSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB3aGVuRmFsc2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIFtyaWdodCwgYnVmZmVyXVxuICAgICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdTV0FQJyk7XG4gICAgICAgICAgICAgICAgICAvLyBbYnVmZmVyXVxuICAgICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdSSUdIVCcpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=