@glimmer/compiler
Version:
173 lines (170 loc) • 17.8 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.SymbolAllocator = undefined;
var _util = require('@glimmer/util');
class SymbolAllocator {
constructor(ops, locations) {
this.ops = ops;
this.locations = locations;
this.symbolStack = new _util.Stack();
}
process() {
let out = [];
let locations = [];
let { ops } = this;
for (let i = 0; i < ops.length; i++) {
let op = ops[i];
let location = this.locations[i];
let result = this.dispatch(op);
out.push(result);
locations.push(location);
}
return { ops: out, locations };
}
dispatch(op) {
let name = op[0];
let operand = op[1];
return this[name](operand) || op;
}
get symbols() {
return this.symbolStack.current;
}
startProgram(op) {
this.symbolStack.push(op.symbols);
}
endProgram() {
this.symbolStack.pop();
}
startBlock(op) {
this.symbolStack.push(op.symbols);
}
endBlock() {
this.symbolStack.pop();
}
openNamedBlock(op) {
this.symbolStack.push(op.symbols);
}
closeNamedBlock(_op) {
this.symbolStack.pop();
}
flushElement(op) {
this.symbolStack.push(op.symbols);
}
closeElement(_op) {
this.symbolStack.pop();
}
closeComponent(_op) {
this.symbolStack.pop();
}
closeDynamicComponent(_op) {
this.symbolStack.pop();
}
attrSplat() {
return ['attrSplat', this.symbols.allocateBlock('attrs')];
}
getFree(name) {
let symbol = this.symbols.allocateFree(name);
return ['getFree', symbol];
}
getArg(name) {
let symbol = this.symbols.allocateNamed(name);
return ['getSymbol', symbol];
}
getThis() {
return ['getSymbol', 0];
}
getVar([name, context]) {
if (this.symbols.has(name)) {
let symbol = this.symbols.get(name);
return ['getSymbol', symbol];
} else {
let symbol = this.symbols.allocateFree(name);
return ['getFreeWithContext', [symbol, context]];
}
}
getPath(rest) {
return ['getPath', rest];
}
yield(op) {
return ['yield', this.symbols.allocateBlock(op)];
}
debugger(_op) {
return ['debugger', this.symbols.getEvalInfo()];
}
hasBlock(op) {
if (op === 0) {
throw new Error('Cannot hasBlock this');
}
return ['hasBlock', this.symbols.allocateBlock(op)];
}
hasBlockParams(op) {
if (op === 0) {
throw new Error('Cannot hasBlockParams this');
}
return ['hasBlockParams', this.symbols.allocateBlock(op)];
}
partial() {
return ['partial', this.symbols.getEvalInfo()];
}
block([template, inverse]) {
return ['block', [template, inverse]];
}
modifier() {
return ['modifier'];
}
helper() {
return ['helper'];
}
text(content) {
return ['text', content];
}
comment(comment) {
return ['comment', comment];
}
openComponent(element) {
return ['openComponent', element];
}
openElement([element, simple]) {
return ['openElement', [element, simple]];
}
staticArg(name) {
return ['staticArg', name];
}
dynamicArg(name) {
return ['dynamicArg', name];
}
staticAttr([name, ns]) {
return ['staticAttr', [name, ns]];
}
trustingAttr([name, ns]) {
return ['trustingAttr', [name, ns]];
}
dynamicAttr([name, ns]) {
return ['dynamicAttr', [name, ns]];
}
componentAttr([name, ns]) {
return ['componentAttr', [name, ns]];
}
trustingComponentAttr([name, ns]) {
return ['trustedComponentAttr', [name, ns]];
}
append(trusted) {
return ['append', trusted];
}
literal(value) {
return ['literal', value];
}
prepareArray(count) {
return ['prepareArray', count];
}
prepareObject(count) {
return ['prepareObject', count];
}
concat() {
return ['concat'];
}
}
exports.SymbolAllocator = SymbolAllocator;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9hbGxvY2F0ZS1zeW1ib2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQWtCTSxNQUFBLGVBQUEsQ0FBc0I7QUFHMUIsZ0JBQUEsR0FBQSxFQUFBLFNBQUEsRUFFc0Q7QUFENUMsYUFBQSxHQUFBLEdBQUEsR0FBQTtBQUNBLGFBQUEsU0FBQSxHQUFBLFNBQUE7QUFKRixhQUFBLFdBQUEsR0FBYyxJQUFkLFdBQWMsRUFBZDtBQUtKO0FBRUosY0FBTztBQUlMLFlBQUksTUFBSixFQUFBO0FBQ0EsWUFBSSxZQUFKLEVBQUE7QUFDQSxZQUFJLEVBQUEsR0FBQSxLQUFKLElBQUE7QUFFQSxhQUFLLElBQUksSUFBVCxDQUFBLEVBQWdCLElBQUksSUFBcEIsTUFBQSxFQUFBLEdBQUEsRUFBcUM7QUFDbkMsZ0JBQUksS0FBSyxJQUFULENBQVMsQ0FBVDtBQUNBLGdCQUFJLFdBQVcsS0FBQSxTQUFBLENBQWYsQ0FBZSxDQUFmO0FBQ0EsZ0JBQUksU0FBUyxLQUFBLFFBQUEsQ0FBYixFQUFhLENBQWI7QUFFQSxnQkFBQSxJQUFBLENBQUEsTUFBQTtBQUNBLHNCQUFBLElBQUEsQ0FBQSxRQUFBO0FBQ0Q7QUFFRCxlQUFPLEVBQUUsS0FBRixHQUFBLEVBQVAsU0FBTyxFQUFQO0FBQ0Q7QUFFRCxhQUFBLEVBQUEsRUFBaUQ7QUFDL0MsWUFBSSxPQUFPLEdBQVgsQ0FBVyxDQUFYO0FBQ0EsWUFBSSxVQUFVLEdBQWQsQ0FBYyxDQUFkO0FBRUEsZUFBUSxLQUFBLElBQUEsRUFBQSxPQUFBLEtBQVIsRUFBQTtBQUNEO0FBRUQsUUFBQSxPQUFBLEdBQVc7QUFDVCxlQUFjLEtBQUEsV0FBQSxDQUFkLE9BQUE7QUFDRDtBQUVELGlCQUFBLEVBQUEsRUFBNkI7QUFDM0IsYUFBQSxXQUFBLENBQUEsSUFBQSxDQUFzQixHQUF0QixPQUFBO0FBQ0Q7QUFFRCxpQkFBVTtBQUNSLGFBQUEs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aEIsQ0FBUDtBQUNEO0FBRUQsa0JBQWMsQ0FBQSxJQUFBLEVBQWQsRUFBYyxDQUFkLEVBQWtEO0FBQ2hELGVBQU8sQ0FBQSxlQUFBLEVBQWtCLENBQUEsSUFBQSxFQUF6QixFQUF5QixDQUFsQixDQUFQO0FBQ0Q7QUFFRCwwQkFBc0IsQ0FBQSxJQUFBLEVBQXRCLEVBQXNCLENBQXRCLEVBQTBEO0FBQ3hELGVBQU8sQ0FBQSxzQkFBQSxFQUF5QixDQUFBLElBQUEsRUFBaEMsRUFBZ0MsQ0FBekIsQ0FBUDtBQUNEO0FBRUQsV0FBQSxPQUFBLEVBQXVCO0FBQ3JCLGVBQU8sQ0FBQSxRQUFBLEVBQVAsT0FBTyxDQUFQO0FBQ0Q7QUFFRCxZQUFBLEtBQUEsRUFBMkQ7QUFDekQsZUFBTyxDQUFBLFNBQUEsRUFBUCxLQUFPLENBQVA7QUFDRDtBQUVELGlCQUFBLEtBQUEsRUFBMEI7QUFDeEIsZUFBTyxDQUFBLGNBQUEsRUFBUCxLQUFPLENBQVA7QUFDRDtBQUVELGtCQUFBLEtBQUEsRUFBMkI7QUFDekIsZUFBTyxDQUFBLGVBQUEsRUFBUCxLQUFPLENBQVA7QUFDRDtBQUVELGFBQU07QUFDSixlQUFPLENBQVAsUUFBTyxDQUFQO0FBQ0Q7QUF4TnlCO1FBQXRCLGUsR0FBQSxlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgUHJvY2Vzc29yLFxuICBPcCxcbiAgQWxsb2NhdGVTeW1ib2xzT3BzLFxuICBQYXRoSGVhZCxcbiAgSmF2YVNjcmlwdENvbXBpbGVyT3BzLFxuICBPcHMsXG4gIFNvdXJjZUxvY2F0aW9uLFxufSBmcm9tICcuL2NvbXBpbGVyLW9wcyc7XG5pbXBvcnQgeyBBU1QgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuaW1wb3J0IHsgT3B0aW9uLCBFeHByZXNzaW9uQ29udGV4dCB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgU3RhY2ssIGV4cGVjdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuXG5leHBvcnQgdHlwZSBJblZhcmlhYmxlID0gUGF0aEhlYWQ7XG5leHBvcnQgdHlwZSBPdXRWYXJpYWJsZSA9IG51bWJlcjtcblxuZXhwb3J0IHR5cGUgT3V0ID0gT3BzPEphdmFTY3JpcHRDb21waWxlck9wcz47XG5cbmV4cG9ydCBjbGFzcyBTeW1ib2xBbGxvY2F0b3IgaW1wbGVtZW50cyBQcm9jZXNzb3I8QWxsb2NhdGVTeW1ib2xzT3BzPiB7XG4gIHByaXZhdGUgc3ltYm9sU3RhY2sgPSBuZXcgU3RhY2s8QVNULlN5bWJvbHM+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBvcHM6IHJlYWRvbmx5IE9wczxBbGxvY2F0ZVN5bWJvbHNPcHM+W10sXG4gICAgcHJpdmF0ZSBsb2NhdGlvbnM6IHJlYWRvbmx5IE9wdGlvbjxTb3VyY2VMb2NhdGlvbj5bXVxuICApIHt9XG5cbiAgcHJvY2VzcygpOiB7XG4gICAgb3BzOiByZWFkb25seSBPcHM8SmF2YVNjcmlwdENvbXBpbGVyT3BzPltdO1xuICAgIHJlYWRvbmx5IGxvY2F0aW9uczogT3B0aW9uPFNvdXJjZUxvY2F0aW9uPltdO1xuICB9IHtcbiAgICBsZXQgb3V0ID0gW107XG4gICAgbGV0IGxvY2F0aW9ucyA9IFtdO1xuICAgIGxldCB7IG9wcyB9ID0gdGhpcztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgb3AgPSBvcHNbaV07XG4gICAgICBsZXQgbG9jYXRpb24gPSB0aGlzLmxvY2F0aW9uc1tpXTtcbiAgICAgIGxldCByZXN1bHQgPSB0aGlzLmRpc3BhdGNoKG9wKTtcblxuICAgICAgb3V0LnB1c2gocmVzdWx0KTtcbiAgICAgIGxvY2F0aW9ucy5wdXNoKGxvY2F0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBvcHM6IG91dCwgbG9jYXRpb25zIH07XG4gIH1cblxuICBkaXNwYXRjaDxPIGV4dGVuZHMgT3BzPEFsbG9jYXRlU3ltYm9sc09wcz4+KG9wOiBPKTogT3BzPEphdmFTY3JpcHRDb21waWxlck9wcz4ge1xuICAgIGxldCBuYW1lID0gb3BbMF07XG4gICAgbGV0IG9wZXJhbmQgPSBvcFsxXTtcblxuICAgIHJldHVybiAodGhpc1tuYW1lXSBhcyBhbnkpKG9wZXJhbmQpIHx8ICgob3AgYXMgdW5rbm93bikgYXMgT3BzPEphdmFTY3JpcHRDb21waWxlck9wcz4pO1xuICB9XG5cbiAgZ2V0IHN5bWJvbHMoKTogQVNULlN5bWJvbHMge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5zeW1ib2xTdGFjay5jdXJyZW50LCAnRXhwZWN0ZWQgYSBzeW1ib2wgdGFibGUgb24gdGhlIHN0YWNrJyk7XG4gIH1cblxuICBzdGFydFByb2dyYW0ob3A6IEFTVC5UZW1wbGF0ZSkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChvcC5zeW1ib2xzISk7XG4gIH1cblxuICBlbmRQcm9ncmFtKCkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucG9wKCk7XG4gIH1cblxuICBzdGFydEJsb2NrKG9wOiBBU1QuQmxvY2spIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnB1c2gob3Auc3ltYm9scyEpO1xuICB9XG5cbiAgZW5kQmxvY2soKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wb3AoKTtcbiAgfVxuXG4gIG9wZW5OYW1lZEJsb2NrKG9wOiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnB1c2gob3Auc3ltYm9scyEpO1xuICB9XG5cbiAgY2xvc2VOYW1lZEJsb2NrKF9vcDogQVNULkVsZW1lbnROb2RlKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wb3AoKTtcbiAgfVxuXG4gIGZsdXNoRWxlbWVudChvcDogQVNULkVsZW1lbnROb2RlKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wdXNoKG9wLnN5bWJvbHMhKTtcbiAgfVxuXG4gIGNsb3NlRWxlbWVudChfb3A6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucG9wKCk7XG4gIH1cblxuICBjbG9zZUNvbXBvbmVudChfb3A6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucG9wKCk7XG4gIH1cblxuICBjbG9zZUR5bmFtaWNDb21wb25lbnQoX29wOiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnBvcCgpO1xuICB9XG5cbiAgYXR0clNwbGF0KCk6IE9wPEphdmFTY3JpcHRDb21waWxlck9wcywgJ2F0dHJTcGxhdCc+IHtcbiAgICByZXR1cm4gWydhdHRyU3BsYXQnLCB0aGlzLnN5bWJvbHMuYWxsb2NhdGVCbG9jaygnYXR0cnMnKV07XG4gIH1cblxuICBnZXRGcmVlKG5hbWU6IHN0cmluZyk6IE9wPEphdmFTY3JpcHRDb21waWxlck9wcywgJ2dldEZyZWUnPiB7XG4gICAgbGV0IHN5bWJvbCA9IHRoaXMuc3ltYm9scy5hbGxvY2F0ZUZyZWUobmFtZSk7XG4gICAgcmV0dXJuIFsnZ2V0RnJlZScsIHN5bWJvbF07XG4gIH1cblxuICBnZXRBcmcobmFtZTogc3RyaW5nKTogT3A8SmF2YVNjcmlwdENvbXBpbGVyT3BzLCAnZ2V0U3ltYm9sJz4ge1xuICAgIGxldCBzeW1ib2wgPSB0aGlzLnN5bWJvbHMuYWxsb2NhdGVOYW1lZChuYW1lKTtcbiAgICByZXR1cm4gWydnZXRTeW1ib2wnLCBzeW1ib2xdO1xuICB9XG5cbiAgZ2V0VGhpcygpOiBPcDxKYXZhU2NyaXB0Q29tcGlsZXJPcHMsICdnZXRTeW1ib2wnPiB7XG4gICAgcmV0dXJuIFsnZ2V0U3ltYm9sJywgMF07XG4gIH1cblxuICBnZXRWYXIoW25hbWUsIGNvbnRleHRdOiBbc3RyaW5nLCBFeHByZXNzaW9uQ29udGV4dF0pOiBPcDxcbiAgICBKYXZhU2NyaXB0Q29tcGlsZXJPcHMsXG4gICAgJ2dldFN5bWJvbCcgfCAnZ2V0RnJlZScgfCAnZ2V0RnJlZVdpdGhDb250ZXh0J1xuICA+IHtcbiAgICBpZiAodGhpcy5zeW1ib2xzLmhhcyhuYW1lKSkge1xuICAgICAgbGV0IHN5bWJvbCA9IHRoaXMuc3ltYm9scy5nZXQobmFtZSk7XG4gICAgICByZXR1cm4gWydnZXRTeW1ib2wnLCBzeW1ib2xdO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgc3ltYm9sID0gdGhpcy5zeW1ib2xzLmFsbG9jYXRlRnJlZShuYW1lKTtcbiAgICAgIHJldHVybiBbJ2dldEZyZWVXaXRoQ29udGV4dCcsIFtzeW1ib2wsIGNvbnRleHRdXTtcbiAgICB9XG4gIH1cblxuICBnZXRQYXRoKHJlc3Q6IHN0cmluZ1tdKTogT3A8SmF2YVNjcmlwdENvbXBpbGVyT3BzLCAnZ2V0UGF0aCc+IHtcbiAgICByZXR1cm4gWydnZXRQYXRoJywgcmVzdF07XG4gIH1cblxuICB5aWVsZChvcDogc3RyaW5nKTogT3A8SmF2YVNjcmlwdENvbXBpbGVyT3BzLCAneWllbGQnPiB7XG4gICAgcmV0dXJuIFsneWllbGQnLCB0aGlzLnN5bWJvbHMuYWxsb2NhdGVCbG9jayhvcCldO1xuICB9XG5cbiAgZGVidWdnZXIoX29wOiBPcHRpb248SW5WYXJpYWJsZVtdPik6IE9wPEphdmFTY3JpcHRDb21waWxlck9wcywgJ2RlYnVnZ2VyJz4ge1xuICAgIHJldHVybiBbJ2RlYnVnZ2VyJywgdGhpcy5zeW1ib2xzLmdldEV2YWxJbmZvKCldO1xuICB9XG5cbiAgaGFzQmxvY2sob3A6IEluVmFyaWFibGUpOiBPcDxKYXZhU2NyaXB0Q29tcGlsZXJPcHMsICdoYXNCbG9jayc+IHtcbiAgICBpZiAob3AgPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGhhc0Jsb2NrIHRoaXMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gWydoYXNCbG9jaycsIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKG9wKV07XG4gIH1cblxuICBoYXNCbG9ja1BhcmFtcyhvcDogSW5WYXJpYWJsZSk6IE9wPEphdmFTY3JpcHRDb21waWxlck9wcywgJ2hhc0Jsb2NrUGFyYW1zJz4ge1xuICAgIGlmIChvcCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaGFzQmxvY2tQYXJhbXMgdGhpcycpO1xuICAgIH1cblxuICAgIHJldHVybiBbJ2hhc0Jsb2NrUGFyYW1zJywgdGhpcy5zeW1ib2xzLmFsbG9jYXRlQmxvY2sob3ApXTtcbiAgfVxuXG4gIHBhcnRpYWwoKTogT3A8SmF2YVNjcmlwdENvbXBpbGVyT3BzLCAncGFydGlhbCc+IHtcbiAgICByZXR1cm4gWydwYXJ0aWFsJywgdGhpcy5zeW1ib2xzLmdldEV2YWxJbmZvKCldO1xuICB9XG5cbiAgYmxvY2soW3RlbXBsYXRlLCBpbnZlcnNlXTogW251bWJlciwgT3B0aW9uPG51bWJlcj5dKTogT3A8SmF2YVNjcmlwdENvbXBpbGVyT3BzLCAnYmxvY2snPiB7XG4gICAgcmV0dXJuIFsnYmxvY2snLCBbdGVtcGxhdGUsIGludmVyc2VdXTtcbiAgfVxuXG4gIG1vZGlmaWVyKCk6IE91dCB7XG4gICAgcmV0dXJuIFsnbW9kaWZpZXInXTtcbiAgfVxuXG4gIGhlbHBlcigpOiBPcDxKYXZhU2NyaXB0Q29tcGlsZXJPcHMsICdoZWxwZXInPiB7XG4gICAgcmV0dXJuIFsnaGVscGVyJ107XG4gIH1cblxuICB0ZXh0KGNvbnRlbnQ6IHN0cmluZyk6IE91dCB7XG4gICAgcmV0dXJuIFsndGV4dCcsIGNvbnRlbnRdO1xuICB9XG5cbiAgY29tbWVudChjb21tZW50OiBzdHJpbmcpOiBPdXQge1xuICAgIHJldHVybiBbJ2NvbW1lbnQnLCBjb21tZW50XTtcbiAgfVxuXG4gIG9wZW5Db21wb25lbnQoZWxlbWVudDogQVNULkVsZW1lbnROb2RlKTogT3V0IHtcbiAgICByZXR1cm4gWydvcGVuQ29tcG9uZW50JywgZWxlbWVudF07XG4gIH1cblxuICBvcGVuRWxlbWVudChbZWxlbWVudCwgc2ltcGxlXTogW0FTVC5FbGVtZW50Tm9kZSwgYm9vbGVhbl0pOiBPdXQge1xuICAgIHJldHVybiBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnQsIHNpbXBsZV1dO1xuICB9XG5cbiAgc3RhdGljQXJnKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBbJ3N0YXRpY0FyZycsIG5hbWVdO1xuICB9XG5cbiAgZHluYW1pY0FyZyhuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gWydkeW5hbWljQXJnJywgbmFtZV07XG4gIH1cblxuICBzdGF0aWNBdHRyKFtuYW1lLCBuc106IFtzdHJpbmcsIE9wdGlvbjxzdHJpbmc+XSkge1xuICAgIHJldHVybiBbJ3N0YXRpY0F0dHInLCBbbmFtZSwgbnNdXTtcbiAgfVxuXG4gIHRydXN0aW5nQXR0cihbbmFtZSwgbnNdOiBbc3RyaW5nLCBPcHRpb248c3RyaW5nPl0pIHtcbiAgICByZXR1cm4gWyd0cnVzdGluZ0F0dHInLCBbbmFtZSwgbnNdXTtcbiAgfVxuXG4gIGR5bmFtaWNBdHRyKFtuYW1lLCBuc106IFtzdHJpbmcsIE9wdGlvbjxzdHJpbmc+XSkge1xuICAgIHJldHVybiBbJ2R5bmFtaWNBdHRyJywgW25hbWUsIG5zXV07XG4gIH1cblxuICBjb21wb25lbnRBdHRyKFtuYW1lLCBuc106IFtzdHJpbmcsIE9wdGlvbjxzdHJpbmc+XSkge1xuICAgIHJldHVybiBbJ2NvbXBvbmVudEF0dHInLCBbbmFtZSwgbnNdXTtcbiAgfVxuXG4gIHRydXN0aW5nQ29tcG9uZW50QXR0cihbbmFtZSwgbnNdOiBbc3RyaW5nLCBPcHRpb248c3RyaW5nPl0pIHtcbiAgICByZXR1cm4gWyd0cnVzdGVkQ29tcG9uZW50QXR0cicsIFtuYW1lLCBuc11dO1xuICB9XG5cbiAgYXBwZW5kKHRydXN0ZWQ6IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gWydhcHBlbmQnLCB0cnVzdGVkXTtcbiAgfVxuXG4gIGxpdGVyYWwodmFsdWU6IHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkKTogT3A8QWxsb2NhdGVTeW1ib2xzT3BzLCAnbGl0ZXJhbCc+IHtcbiAgICByZXR1cm4gWydsaXRlcmFsJywgdmFsdWVdO1xuICB9XG5cbiAgcHJlcGFyZUFycmF5KGNvdW50OiBudW1iZXIpIHtcbiAgICByZXR1cm4gWydwcmVwYXJlQXJyYXknLCBjb3VudF07XG4gIH1cblxuICBwcmVwYXJlT2JqZWN0KGNvdW50OiBudW1iZXIpIHtcbiAgICByZXR1cm4gWydwcmVwYXJlT2JqZWN0JywgY291bnRdO1xuICB9XG5cbiAgY29uY2F0KCkge1xuICAgIHJldHVybiBbJ2NvbmNhdCddO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9
;