@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
145 lines (143 loc) • 25.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const ts_utils_1 = require("@neo-one/ts-utils");
const typescript_1 = tslib_1.__importDefault(require("typescript"));
const types_1 = require("../types");
class ArrayBindingHelper extends types_1.TypedHelper {
constructor(options) {
super(options);
this.value = options.value;
}
emit(sb, node, optionsIn) {
const options = sb.pushValueOptions(optionsIn);
const restElement = node.elements.find((element) => ts_utils_1.tsUtils.node.getDotDotDotToken(element) !== undefined);
const elements = restElement === undefined ? [...node.elements] : node.elements.slice(0, -1);
const handleCommon = (setup, getNext, getRemaining) => (innerOptions) => {
setup(innerOptions);
elements.forEach((element, idx) => {
if (typescript_1.default.isOmittedExpression(element)) {
return;
}
const name = ts_utils_1.tsUtils.node.getNameNode(element);
const initializer = ts_utils_1.tsUtils.initializer.getInitializer(element);
const elementType = sb.context.analysis.getType(name);
if (typescript_1.default.isIdentifier(name)) {
sb.scope.add(ts_utils_1.tsUtils.node.getText(name));
}
sb.emitOp(element, 'DUP');
getNext(element, innerOptions, idx);
if (initializer !== undefined) {
sb.emitHelper(node, options, sb.helpers.if({
condition: () => {
sb.emitOp(node, 'DUP');
sb.emitHelper(node, options, sb.helpers.isUndefined);
},
whenTrue: () => {
sb.emitOp(node, 'DROP');
sb.visit(initializer, options);
},
}));
}
if (typescript_1.default.isIdentifier(name)) {
sb.scope.set(sb, node, options, ts_utils_1.tsUtils.node.getText(name));
}
else if (typescript_1.default.isArrayBindingPattern(name)) {
sb.emitHelper(name, options, sb.helpers.arrayBinding({ type: elementType }));
}
else {
sb.emitHelper(name, options, sb.helpers.objectBinding({ type: elementType }));
}
});
if (restElement === undefined) {
sb.emitOp(node, 'DROP');
}
else {
sb.scope.add(ts_utils_1.tsUtils.node.getNameOrThrow(restElement));
getRemaining(restElement, innerOptions);
sb.emitHelper(node, options, sb.helpers.wrapArray);
sb.scope.set(sb, node, options, ts_utils_1.tsUtils.node.getNameOrThrow(restElement));
}
};
const handleArray = handleCommon(() => {
}, (element, innerOptions, idx) => {
sb.emitPushInt(element, idx);
sb.emitHelper(element, innerOptions, sb.helpers.getArrayIndex);
}, (element, innerOptions) => {
sb.emitHelper(element, innerOptions, sb.helpers.unwrapArray);
sb.emitPushInt(element, elements.length);
sb.emitHelper(element, innerOptions, sb.helpers.arrSlice({ hasEnd: false }));
});
const handleMapLike = (element) => (innerOption) => {
sb.emitOp(element, 'ROT');
sb.emitOp(element, 'ROT');
sb.emitPushInt(element, 2);
sb.emitOp(element, 'PACK');
sb.emitHelper(element, innerOption, sb.helpers.wrapArray);
sb.emitOp(element, 'OVER');
sb.emitOp(element, 'SWAP');
sb.emitOp(element, 'APPEND');
};
const handleMap = handleCommon((innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapMap);
sb.emitSysCall(node, 'Neo.Iterator.Create');
}, (element, innerOptions) => {
sb.emitOp(element, 'DUP');
sb.emitSysCall(element, 'Neo.Enumerator.Next');
sb.emitOp(element, 'DROP');
sb.emitOp(element, 'DUP');
sb.emitSysCall(element, 'Neo.Enumerator.Value');
sb.emitOp(element, 'SWAP');
sb.emitSysCall(element, 'Neo.Iterator.Key');
sb.emitPushInt(element, 2);
sb.emitOp(element, 'PACK');
sb.emitHelper(element, innerOptions, sb.helpers.wrapArray);
}, (element, innerOptions) => {
sb.emitPushInt(element, 0);
sb.emitOp(element, 'NEWARRAY');
sb.emitHelper(element, innerOptions, sb.helpers.rawIteratorReduce({
each: handleMapLike(element),
}));
});
const handleSetLike = (element) => () => {
sb.emitOp(element, 'ROT');
sb.emitOp(element, 'DROP');
sb.emitOp(element, 'TUCK');
sb.emitOp(element, 'SWAP');
sb.emitOp(element, 'APPEND');
};
const handleSet = handleCommon((innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapSet);
sb.emitSysCall(node, 'Neo.Iterator.Create');
}, (element) => {
sb.emitOp(element, 'DUP');
sb.emitSysCall(element, 'Neo.Enumerator.Next');
sb.emitOp(element, 'DROP');
sb.emitSysCall(element, 'Neo.Iterator.Key');
}, (element, innerOptions) => {
sb.emitPushInt(element, 0);
sb.emitOp(element, 'NEWARRAY');
sb.emitHelper(element, innerOptions, sb.helpers.rawIteratorReduce({
each: handleSetLike(element),
}));
});
const handleUnsupported = () => {
sb.context.reportUnsupported(node);
};
if (this.value !== undefined) {
sb.visit(this.value, options);
}
sb.emitHelper(node, options, sb.helpers.forIterableType({
type: this.type,
array: handleArray,
map: handleMap,
set: handleSet,
arrayStorage: handleUnsupported,
mapStorage: handleUnsupported,
setStorage: handleUnsupported,
iterableIterator: handleUnsupported,
}));
}
}
exports.ArrayBindingHelper = ArrayBindingHelper;
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFTO1lBQ2QsR0FBRyxFQUFFLFNBQVM7WUFDZCxZQUFZLEVBQUUsaUJBQWlCO1lBQy9CLFVBQVUsRUFBRSxpQkFBaUI7WUFDN0IsVUFBVSxFQUFFLGlCQUFpQjtZQUM3QixnQkFBZ0IsRUFBRSxpQkFBaUI7U0FDcEMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0NBQ0Y7QUE1T0QsZ0RBNE9DIiwiZmlsZSI6Im5lby1vbmUtc21hcnQtY29udHJhY3QtY29tcGlsZXIvc3JjL2NvbXBpbGUvaGVscGVyL2JpbmQvQXJyYXlCaW5kaW5nSGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHNVdGlscyB9IGZyb20gJ0BuZW8tb25lL3RzLXV0aWxzJztcbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBUeXBlZEhlbHBlciwgVHlwZWRIZWxwZXJPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFycmF5QmluZGluZ0hlbHBlck9wdGlvbnMgZXh0ZW5kcyBUeXBlZEhlbHBlck9wdGlvbnMge1xuICByZWFkb25seSB2YWx1ZT86IHRzLk5vZGU7XG59XG5cbi8vIFthcnJheVZhbF1cbmV4cG9ydCBjbGFzcyBBcnJheUJpbmRpbmdIZWxwZXIgZXh0ZW5kcyBUeXBlZEhlbHBlcjx0cy5BcnJheUJpbmRpbmdQYXR0ZXJuPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdmFsdWU/OiB0cy5Ob2RlO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBBcnJheUJpbmRpbmdIZWxwZXJPcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG4gICAgdGhpcy52YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZW1pdChzYjogU2NyaXB0QnVpbGRlciwgbm9kZTogdHMuQXJyYXlCaW5kaW5nUGF0dGVybiwgb3B0aW9uc0luOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zSW4pO1xuICAgIGNvbnN0IHJlc3RFbGVtZW50ID0gbm9kZS5lbGVtZW50cy5maW5kKChlbGVtZW50KSA9PiB0c1V0aWxzLm5vZGUuZ2V0RG90RG90RG90VG9rZW4oZWxlbWVudCkgIT09IHVuZGVmaW5lZCk7XG4gICAgY29uc3QgZWxlbWVudHMgPSByZXN0RWxlbWVudCA9PT0gdW5kZWZpbmVkID8gWy4uLm5vZGUuZWxlbWVudHNdIDogbm9kZS5lbGVtZW50cy5zbGljZSgwLCAtMSk7XG5cbiAgICBjb25zdCBoYW5kbGVDb21tb24gPSAoXG4gICAgICBzZXR1cDogKGlubmVyT3B0aW9uczogVmlzaXRPcHRpb25zKSA9PiB2b2lkLFxuICAgICAgZ2V0TmV4dDogKG5vZGU6IHRzLk5vZGUsIGlubmVyT3B0aW9uczogVmlzaXRPcHRpb25zLCBpZHg6IG51bWJlcikgPT4gdm9pZCxcbiAgICAgIGdldFJlbWFpbmluZzogKG5vZGU6IHRzLk5vZGUsIGlubmVyT3B0aW9uczogVmlzaXRPcHRpb25zKSA9PiB2b2lkLFxuICAgICkgPT4gKGlubmVyT3B0aW9uczogVmlzaXRPcHRpb25zKSA9PiB7XG4gICAgICBzZXR1cChpbm5lck9wdGlvbnMpO1xuXG4gICAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50LCBpZHgpID0+IHtcbiAgICAgICAgaWYgKHRzLmlzT21pdHRlZEV4cHJlc3Npb24oZWxlbWVudCkpIHtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5hbWUgPSB0c1V0aWxzLm5vZGUuZ2V0TmFtZU5vZGUoZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGluaXRpYWxpemVyID0gdHNVdGlscy5pbml0aWFsaXplci5nZXRJbml0aWFsaXplcihlbGVtZW50KTtcbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGUgPSBzYi5jb250ZXh0LmFuYWx5c2lzLmdldFR5cGUobmFtZSk7XG5cbiAgICAgICAgaWYgKHRzLmlzSWRlbnRpZmllcihuYW1lKSkge1xuICAgICAgICAgIHNiLnNjb3BlLmFkZCh0c1V0aWxzLm5vZGUuZ2V0VGV4dChuYW1lKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBbYXJyYXlWYWwsIGFycmF5VmFsXVxuICAgICAgICBzYi5lbWl0T3AoZWxlbWVudCwgJ0RVUCcpO1xuICAgICAgICAvLyBbdmFsLCBhcnJheVZhbF1cbiAgICAgICAgZ2V0TmV4dChlbGVtZW50LCBpbm5lck9wdGlvbnMsIGlkeCk7XG5cbiAgICAgICAgaWYgKGluaXRpYWxpemVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBzYi5oZWxwZXJzLmlmKHtcbiAgICAgICAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gW3ZhbCwgdmFsLCBhcnJheVZhbF1cbiAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RVUCcpO1xuICAgICAgICAgICAgICAgIC8vIFtib29sZWFuLCB2YWwsIGFycmF5VmFsXVxuICAgICAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy5pc1VuZGVmaW5lZCk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHdoZW5UcnVlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gW2FycmF5VmFsXVxuICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgICAgICAgICAgIC8vIFt2YWwsIGFycmF5VmFsXVxuICAgICAgICAgICAgICAgIHNiLnZpc2l0KGluaXRpYWxpemVyLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHMuaXNJZGVudGlmaWVyKG5hbWUpKSB7XG4gICAgICAgICAgLy8gW2FycmF5VmFsXVxuICAgICAgICAgIHNiLnNjb3BlLnNldChzYiwgbm9kZSwgb3B0aW9ucywgdHNVdGlscy5ub2RlLmdldFRleHQobmFtZSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRzLmlzQXJyYXlCaW5kaW5nUGF0dGVybihuYW1lKSkge1xuICAgICAgICAgIHNiLmVtaXRIZWxwZXIobmFtZSwgb3B0aW9ucywgc2IuaGVscGVycy5hcnJheUJpbmRpbmcoeyB0eXBlOiBlbGVtZW50VHlwZSB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2IuZW1pdEhlbHBlcihuYW1lLCBvcHRpb25zLCBzYi5oZWxwZXJzLm9iamVjdEJpbmRpbmcoeyB0eXBlOiBlbGVtZW50VHlwZSB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVzdEVsZW1lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBbXVxuICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNiLnNjb3BlLmFkZCh0c1V0aWxzLm5vZGUuZ2V0TmFtZU9yVGhyb3cocmVzdEVsZW1lbnQpKTtcblxuICAgICAgICAvLyBbYXJyXVxuICAgICAgICBnZXRSZW1haW5pbmcocmVzdEVsZW1lbnQsIGlubmVyT3B0aW9ucyk7XG4gICAgICAgIC8vIFthcnJheVZhbF1cbiAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLndyYXBBcnJheSk7XG4gICAgICAgIC8vIFtdXG4gICAgICAgIHNiLnNjb3BlLnNldChzYiwgbm9kZSwgb3B0aW9ucywgdHNVdGlscy5ub2RlLmdldE5hbWVPclRocm93KHJlc3RFbGVtZW50KSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZUFycmF5ID0gaGFuZGxlQ29tbW9uKFxuICAgICAgKCkgPT4ge1xuICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICB9LFxuICAgICAgKGVsZW1lbnQsIGlubmVyT3B0aW9ucywgaWR4KSA9PiB7XG4gICAgICAgIHNiLmVtaXRQdXNoSW50KGVsZW1lbnQsIGlkeCk7XG4gICAgICAgIHNiLmVtaXRIZWxwZXIoZWxlbWVudCwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLmdldEFycmF5SW5kZXgpO1xuICAgICAgfSxcbiAgICAgIChlbGVtZW50LCBpbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgLy8gW2Fycl1cbiAgICAgICAgc2IuZW1pdEhlbHBlcihlbGVtZW50LCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMudW53cmFwQXJyYXkpO1xuICAgICAgICAvLyBbbnVtYmVyLCBhcnJdXG4gICAgICAgIHNiLmVtaXRQdXNoSW50KGVsZW1lbnQsIGVsZW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIC8vIFthcnJdXG4gICAgICAgIHNiLmVtaXRIZWxwZXIoZWxlbWVudCwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLmFyclNsaWNlKHsgaGFzRW5kOiBmYWxzZSB9KSk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCBoYW5kbGVNYXBMaWtlID0gKGVsZW1lbnQ6IHRzLk5vZGUpID0+IChpbm5lck9wdGlvbjogVmlzaXRPcHRpb25zKSA9PiB7XG4gICAgICAvLyBbdmFsdWUsIGFyck91dCwga2V5XVxuICAgICAgc2IuZW1pdE9wKGVsZW1lbnQsICdST1QnKTtcbiAgICAgIC8vIFtrZXksIHZhbHVlLCBhcnJPdXRdXG4gICAgICBzYi5lbWl0T3AoZWxlbWVudCwgJ1JPVCcpO1xuICAgICAgLy8gWzIsIGtleSwgdmFsdWUsIGFyck91dF1cbiAgICAgIHNiLmVtaXRQdXNoSW50KGVsZW1lbnQsIDIpO1xuICAgICAgLy8gW2FyciwgYXJyT3V0XVxuICAgICAgc2IuZW1pdE9wKGVsZW1lbnQsICdQQUNLJyk7XG4gICAgICAvLyBbdmFsLCBhcnJPdXRdXG4gICAgICBzYi5lbWl0SGVscGVyKGVsZW1lbnQsIGlubmVyT3B0aW9uLCBzYi5oZWxwZXJzLndyYXBBcnJheSk7XG4gICAgICAvLyBbYXJyT3V0LCB2YWwsIGFyck91dF1cbiAgICAgIHNiLmVtaXRPcChlbGVtZW50LCAnT1ZFUicpO1xuICAgICAgLy8gW3ZhbCwgYXJyT3V0LCBhcnJPdXRdXG4gICAgICBzYi5lbWl0T3AoZWxlbWVudCwgJ1NXQVAnKTtcbiAgICAgIC8vIFthcnJPdXRdXG4gICAgICBzYi5lbWl0T3AoZWxlbWVudCwgJ0FQUEVORCcpO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVNYXAgPSBoYW5kbGVDb21tb24oXG4gICAgICAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgIC8vIFttYXBdXG4gICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnVud3JhcE1hcCk7XG4gICAgICAgIC8vIFtpdGVyYXRvcl1cbiAgICAgICAgc2IuZW1pdFN5c0NhbGwobm9kZSwgJ05lby5JdGVyYXRvci5DcmVhdGUnKTtcbiAgICAgIH0sXG4gICAgICAoZWxlbWVudCwgaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgIC8vIFtpdGVyYXRvciwgaXRlcmF0b3JdXG4gICAgICAgIHNiLmVtaXRPcChlbGVtZW50LCAnRFVQJyk7XG4gICAgICAgIC8vIFtib29sZWFuLCBpdGVyYXRvcl1cbiAgICAgICAgc2IuZW1pdFN5c0NhbGwoZWxlbWVudCwgJ05lby5FbnVtZXJhdG9yLk5leHQnKTtcbiAgICAgICAgLy8gW2l0ZXJhdG9yXVxuICAgICAgICBzYi5lbWl0T3AoZWxlbWVudCwgJ0RST1AnKTtcbiAgICAgICAgLy8gW2l0ZXJhdG9yLCBpdGVyYXRvcl1cbiAgICAgICAgc2IuZW1pdE9wKGVsZW1lbnQsICdEVVAnKTtcbiAgICAgICAgLy8gW3ZhbCwgaXRlcmF0b3JdXG4gICAgICAgIHNiLmVtaXRTeXNDYWxsKGVsZW1lbnQsICdOZW8uRW51bWVyYXRvci5WYWx1ZScpO1xuICAgICAgICAvLyBbaXRlcmF0b3IsIHZhbF1cbiAgICAgICAgc2IuZW1pdE9wKGVsZW1lbnQsICdTV0FQJyk7XG4gICAgICAgIC8vIFtrZXksIHZhbF1cbiAgICAgICAgc2IuZW1pdFN5c0NhbGwoZWxlbWVudCwgJ05lby5JdGVyYXRvci5LZXknKTtcbiAgICAgICAgLy8gWzIsIGtleSwgdmFsXVxuICAgICAgICBzYi5lbWl0UHVzaEludChlbGVtZW50LCAyKTtcbiAgICAgICAgLy8gW2Fycl1cbiAgICAgICAgc2IuZW1pdE9wKGVsZW1lbnQsICdQQUNLJyk7XG4gICAgICAgIC8vIFt2YWxdXG4gICAgICAgIHNiLmVtaXRIZWxwZXIoZWxlbWVudCwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLndyYXBBcnJheSk7XG4gICAgICB9LFxuICAgICAgKGVsZW1lbnQsIGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAvLyBbMCwgaXRlcmF0b3JdXG4gICAgICAgIHNiLmVtaXRQdXNoSW50KGVsZW1lbnQsIDApO1xuICAgICAgICAvLyBbYXJyLCBpdGVyYXRvcl1cbiAgICAgICAgc2IuZW1pdE9wKGVsZW1lbnQsICdORVdBUlJBWScpO1xuICAgICAgICAvLyBbYXJyXVxuICAgICAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgaW5uZXJPcHRpb25zLFxuICAgICAgICAgIHNiLmhlbHBlcnMucmF3SXRlcmF0b3JSZWR1Y2Uoe1xuICAgICAgICAgICAgZWFjaDogaGFuZGxlTWFwTGlrZShlbGVtZW50KSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNvbnN0IGhhbmRsZVNldExpa2UgPSAoZWxlbWVudDogdHMuTm9kZSkgPT4gKCkgPT4ge1xuICAgICAgLy8gW3ZhbHVlLCBhcnJPdXQsIGtleV1cbiAgICAgIHNiLmVtaXRPcChlbGVtZW50LCAnUk9UJyk7XG4gICAgICAvLyBbYXJyT3V0LCBrZXldXG4gICAgICBzYi5lbWl0T3AoZWxlbWVudCwgJ0RST1AnKTtcbiAgICAgIC8vIFthcnJPdXQsIGtleSwgYXJyT3V0XVxuICAgICAgc2IuZW1pdE9wKGVsZW1lbnQsICdUVUNLJyk7XG4gICAgICAvLyBba2V5LCBhcnJPdXQsIGFyck91dF1cbiAgICAgIHNiLmVtaXRPcChlbGVtZW50LCAnU1dBUCcpO1xuICAgICAgLy8gW2Fyck91dF1cbiAgICAgIHNiLmVtaXRPcChlbGVtZW50LCAnQVBQRU5EJyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZVNldCA9IGhhbmRsZUNvbW1vbihcbiAgICAgIChpbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgLy8gW21hcF1cbiAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMudW53cmFwU2V0KTtcbiAgICAgICAgLy8gW2l0ZXJhdG9yXVxuICAgICAgICBzYi5lbWl0U3lzQ2FsbChub2RlLCAnTmVvLkl0ZXJhdG9yLkNyZWF0ZScpO1xuICAgICAgfSxcbiAgICAgIChlbGVtZW50KSA9PiB7XG4gICAgICAgIC8vIFtpdGVyYXRvciwgaXRlcmF0b3JdXG4gICAgICAgIHNiLmVtaXRPcChlbGVtZW50LCAnRFVQJyk7XG4gICAgICAgIC8vIFtib29sZWFuLCBpdGVyYXRvcl1cbiAgICAgICAgc2IuZW1pdFN5c0NhbGwoZWxlbWVudCwgJ05lby5FbnVtZXJhdG9yLk5leHQnKTtcbiAgICAgICAgLy8gW2l0ZXJhdG9yXVxuICAgICAgICBzYi5lbWl0T3AoZWxlbWVudCwgJ0RST1AnKTtcbiAgICAgICAgLy8gW3ZhbF1cbiAgICAgICAgc2IuZW1pdFN5c0NhbGwoZWxlbWVudCwgJ05lby5JdGVyYXRvci5LZXknKTtcbiAgICAgIH0sXG4gICAgICAoZWxlbWVudCwgaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgIC8vIFswLCBpdGVyYXRvcl1cbiAgICAgICAgc2IuZW1pdFB1c2hJbnQoZWxlbWVudCwgMCk7XG4gICAgICAgIC8vIFthcnIsIGl0ZXJhdG9yXVxuICAgICAgICBzYi5lbWl0T3AoZWxlbWVudCwgJ05FV0FSUkFZJyk7XG4gICAgICAgIC8vIFthcnJdXG4gICAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBpbm5lck9wdGlvbnMsXG4gICAgICAgICAgc2IuaGVscGVycy5yYXdJdGVyYXRvclJlZHVjZSh7XG4gICAgICAgICAgICBlYWNoOiBoYW5kbGVTZXRMaWtlKGVsZW1lbnQpLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3QgaGFuZGxlVW5zdXBwb3J0ZWQgPSAoKSA9PiB7XG4gICAgICBzYi5jb250ZXh0LnJlcG9ydFVuc3VwcG9ydGVkKG5vZGUpO1xuICAgIH07XG5cbiAgICBpZiAodGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBbdmFsXVxuICAgICAgc2IudmlzaXQodGhpcy52YWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICBub2RlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHNiLmhlbHBlcnMuZm9ySXRlcmFibGVUeXBlKHtcbiAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICBhcnJheTogaGFuZGxlQXJyYXksXG4gICAgICAgIG1hcDogaGFuZGxlTWFwLFxuICAgICAgICBzZXQ6IGhhbmRsZVNldCxcbiAgICAgICAgYXJyYXlTdG9yYWdlOiBoYW5kbGVVbnN1cHBvcnRlZCxcbiAgICAgICAgbWFwU3RvcmFnZTogaGFuZGxlVW5zdXBwb3J0ZWQsXG4gICAgICAgIHNldFN0b3JhZ2U6IGhhbmRsZVVuc3VwcG9ydGVkLFxuICAgICAgICBpdGVyYWJsZUl0ZXJhdG9yOiBoYW5kbGVVbnN1cHBvcnRlZCxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==