UNPKG

ember-legacy-class-transform

Version:
251 lines (246 loc) 25 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.Arguments = undefined; var _util = require('@glimmer/util'); var _reference = require('@glimmer/reference'); var _references = require('../references'); class Arguments { constructor() { this.stack = null; this.positional = new PositionalArguments(); this.named = new NamedArguments(); } empty() { this.setup(null, true); return this; } setup(stack, synthetic) { this.stack = stack; let names = stack.fromTop(0); let namedCount = names.length; let positionalCount = stack.fromTop(namedCount + 1); let start = positionalCount + namedCount + 2; let positional = this.positional; positional.setup(stack, start, positionalCount); let named = this.named; named.setup(stack, namedCount, names, synthetic); } get tag() { return (0, _reference.combineTagged)([this.positional, this.named]); } get length() { return this.positional.length + this.named.length; } at(pos) { return this.positional.at(pos); } get(name) { return this.named.get(name); } capture() { return { tag: this.tag, length: this.length, positional: this.positional.capture(), named: this.named.capture() }; } clear() { let { stack, length } = this; stack.pop(length + 2); } } exports.Arguments = Arguments; class PositionalArguments { constructor() { this.length = 0; this.stack = null; this.start = 0; this._tag = null; this._references = null; } setup(stack, start, length) { this.stack = stack; this.start = start; this.length = length; this._tag = null; this._references = null; } get tag() { let tag = this._tag; if (!tag) { tag = this._tag = (0, _reference.combineTagged)(this.references); } return tag; } at(position) { let { start, length } = this; if (position < 0 || position >= length) { return _references.UNDEFINED_REFERENCE; } // stack: pos1, pos2, pos3, named1, named2 // start: 4 (top - 4) // // at(0) === pos1 === top - start // at(1) === pos2 === top - (start - 1) // at(2) === pos3 === top - (start - 2) let fromTop = start - position - 1; return this.stack.fromTop(fromTop); } capture() { return new CapturedPositionalArguments(this.tag, this.references); } get references() { let references = this._references; if (!references) { let { length } = this; references = this._references = new Array(length); for (let i = 0; i < length; i++) { references[i] = this.at(i); } } return references; } } class CapturedPositionalArguments { constructor(tag, references, length = references.length) { this.tag = tag; this.references = references; this.length = length; } at(position) { return this.references[position]; } value() { return this.references.map(this.valueOf); } get(name) { let { references, length } = this; if (name === 'length') { return _references.PrimitiveReference.create(length); } else { let idx = parseInt(name, 10); if (idx < 0 || idx >= length) { return _references.UNDEFINED_REFERENCE; } else { return references[idx]; } } } valueOf(reference) { return reference.value(); } } class NamedArguments { constructor() { this.length = 0; this._tag = null; this._references = null; this._names = null; this._realNames = _util.EMPTY_ARRAY; } setup(stack, length, names, synthetic) { this.stack = stack; this.length = length; this._tag = null; this._references = null; if (synthetic) { this._names = names; this._realNames = _util.EMPTY_ARRAY; } else { this._names = null; this._realNames = names; } } get tag() { return (0, _reference.combineTagged)(this.references); } get names() { let names = this._names; if (!names) { names = this._names = this._realNames.map(this.sliceName); } return names; } has(name) { return this.names.indexOf(name) !== -1; } get(name) { let { names, length } = this; let idx = names.indexOf(name); if (idx === -1) { return _references.UNDEFINED_REFERENCE; } // stack: pos1, pos2, pos3, named1, named2 // start: 4 (top - 4) // namedDict: { named1: 1, named2: 0 }; // // get('named1') === named1 === top - (start - 1) // get('named2') === named2 === top - start let fromTop = length - idx; return this.stack.fromTop(fromTop); } capture() { return new CapturedNamedArguments(this.tag, this.names, this.references); } get references() { let references = this._references; if (!references) { let { names, length } = this; references = this._references = []; for (let i = 0; i < length; i++) { references[i] = this.get(names[i]); } } return references; } sliceName(name) { return name.slice(1); } } class CapturedNamedArguments { constructor(tag, names, references) { this.tag = tag; this.names = names; this.references = references; this.length = names.length; this._map = null; } get map() { let map = this._map; if (!map) { let { names, references } = this; map = this._map = (0, _util.dict)(); for (let i = 0; i < names.length; i++) { let name = names[i]; map[name] = references[i]; } } return map; } has(name) { return this.names.indexOf(name) !== -1; } get(name) { let { names, references } = this; let idx = names.indexOf(name); if (idx === -1) { return _references.UNDEFINED_REFERENCE; } else { return references[idx]; } } value() { let { names, references } = this; let out = (0, _util.dict)(); for (let i = 0; i < names.length; i++) { let name = names[i]; out[name] = references[i].value(); } return out; } } exports.default = new Arguments(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi92bS9hcmd1bWVudHMuanMiXSwibmFtZXMiOlsiQXJndW1lbnRzIiwiY29uc3RydWN0b3IiLCJzdGFjayIsInBvc2l0aW9uYWwiLCJQb3NpdGlvbmFsQXJndW1lbnRzIiwibmFtZWQiLCJOYW1lZEFyZ3VtZW50cyIsImVtcHR5Iiwic2V0dXAiLCJzeW50aGV0aWMiLCJuYW1lcyIsImZyb21Ub3AiLCJuYW1lZENvdW50IiwibGVuZ3RoIiwicG9zaXRpb25hbENvdW50Iiwic3RhcnQiLCJ0YWciLCJhdCIsInBvcyIsImdldCIsIm5hbWUiLCJjYXB0dXJlIiwiY2xlYXIiLCJwb3AiLCJfdGFnIiwiX3JlZmVyZW5jZXMiLCJyZWZlcmVuY2VzIiwicG9zaXRpb24iLCJDYXB0dXJlZFBvc2l0aW9uYWxBcmd1bWVudHMiLCJBcnJheSIsImkiLCJ2YWx1ZSIsIm1hcCIsInZhbHVlT2YiLCJjcmVhdGUiLCJpZHgiLCJwYXJzZUludCIsInJlZmVyZW5jZSIsIl9uYW1lcyIsIl9yZWFsTmFtZXMiLCJzbGljZU5hbWUiLCJoYXMiLCJpbmRleE9mIiwiQ2FwdHVyZWROYW1lZEFyZ3VtZW50cyIsInNsaWNlIiwiX21hcCIsIm91dCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNPLE1BQU1BLFNBQU4sQ0FBZ0I7QUFDbkJDLGtCQUFjO0FBQ1YsYUFBS0MsS0FBTCxHQUFhLElBQWI7QUFDQSxhQUFLQyxVQUFMLEdBQWtCLElBQUlDLG1CQUFKLEVBQWxCO0FBQ0EsYUFBS0MsS0FBTCxHQUFhLElBQUlDLGNBQUosRUFBYjtBQUNIO0FBQ0RDLFlBQVE7QUFDSixhQUFLQyxLQUFMLENBQVcsSUFBWCxFQUFpQixJQUFqQjtBQUNBLGVBQU8sSUFBUDtBQUNIO0FBQ0RBLFVBQU1OLEtBQU4sRUFBYU8sU0FBYixFQUF3QjtBQUNwQixhQUFLUCxLQUFMLEdBQWFBLEtBQWI7QUFDQSxZQUFJUSxRQUFRUixNQUFNUyxPQUFOLENBQWMsQ0FBZCxDQUFaO0FB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QU1vQixDQUFOLENBQVg7QUFDQWdCLGdCQUFJMUIsSUFBSixJQUFZTSxXQUFXSSxDQUFYLEVBQWNDLEtBQWQsRUFBWjtBQUNIO0FBQ0QsZUFBT2UsR0FBUDtBQUNIO0FBeEN3QjtrQkEwQ2QsSUFBSTlDLFNBQUosRSIsImZpbGUiOiJsaWIvdm0vYXJndW1lbnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGljdCwgRU1QVFlfQVJSQVkgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IGNvbWJpbmVUYWdnZWQgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgUHJpbWl0aXZlUmVmZXJlbmNlLCBVTkRFRklORURfUkVGRVJFTkNFIH0gZnJvbSAnLi4vcmVmZXJlbmNlcyc7XG5leHBvcnQgY2xhc3MgQXJndW1lbnRzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5zdGFjayA9IG51bGw7XG4gICAgICAgIHRoaXMucG9zaXRpb25hbCA9IG5ldyBQb3NpdGlvbmFsQXJndW1lbnRzKCk7XG4gICAgICAgIHRoaXMubmFtZWQgPSBuZXcgTmFtZWRBcmd1bWVudHMoKTtcbiAgICB9XG4gICAgZW1wdHkoKSB7XG4gICAgICAgIHRoaXMuc2V0dXAobnVsbCwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzZXR1cChzdGFjaywgc3ludGhldGljKSB7XG4gICAgICAgIHRoaXMuc3RhY2sgPSBzdGFjaztcbiAgICAgICAgbGV0IG5hbWVzID0gc3RhY2suZnJvbVRvcCgwKTtcbiAgICAgICAgbGV0IG5hbWVkQ291bnQgPSBuYW1lcy5sZW5ndGg7XG4gICAgICAgIGxldCBwb3NpdGlvbmFsQ291bnQgPSBzdGFjay5mcm9tVG9wKG5hbWVkQ291bnQgKyAxKTtcbiAgICAgICAgbGV0IHN0YXJ0ID0gcG9zaXRpb25hbENvdW50ICsgbmFtZWRDb3VudCArIDI7XG4gICAgICAgIGxldCBwb3NpdGlvbmFsID0gdGhpcy5wb3NpdGlvbmFsO1xuICAgICAgICBwb3NpdGlvbmFsLnNldHVwKHN0YWNrLCBzdGFydCwgcG9zaXRpb25hbENvdW50KTtcbiAgICAgICAgbGV0IG5hbWVkID0gdGhpcy5uYW1lZDtcbiAgICAgICAgbmFtZWQuc2V0dXAoc3RhY2ssIG5hbWVkQ291bnQsIG5hbWVzLCBzeW50aGV0aWMpO1xuICAgIH1cbiAgICBnZXQgdGFnKCkge1xuICAgICAgICByZXR1cm4gY29tYmluZVRhZ2dlZChbdGhpcy5wb3NpdGlvbmFsLCB0aGlzLm5hbWVkXSk7XG4gICAgfVxuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uYWwubGVuZ3RoICsgdGhpcy5uYW1lZC5sZW5ndGg7XG4gICAgfVxuICAgIGF0KHBvcykge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbmFsLmF0KHBvcyk7XG4gICAgfVxuICAgIGdldChuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWVkLmdldChuYW1lKTtcbiAgICB9XG4gICAgY2FwdHVyZSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRhZzogdGhpcy50YWcsXG4gICAgICAgICAgICBsZW5ndGg6IHRoaXMubGVuZ3RoLFxuICAgICAgICAgICAgcG9zaXRpb25hbDogdGhpcy5wb3NpdGlvbmFsLmNhcHR1cmUoKSxcbiAgICAgICAgICAgIG5hbWVkOiB0aGlzLm5hbWVkLmNhcHR1cmUoKVxuICAgICAgICB9O1xuICAgIH1cbiAgICBjbGVhcigpIHtcbiAgICAgICAgbGV0IHsgc3RhY2ssIGxlbmd0aCB9ID0gdGhpcztcbiAgICAgICAgc3RhY2sucG9wKGxlbmd0aCArIDIpO1xuICAgIH1cbn1cbmNsYXNzIFBvc2l0aW9uYWxBcmd1bWVudHMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuc3RhY2sgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXJ0ID0gMDtcbiAgICAgICAgdGhpcy5fdGFnID0gbnVsbDtcbiAgICAgICAgdGhpcy5fcmVmZXJlbmNlcyA9IG51bGw7XG4gICAgfVxuICAgIHNldHVwKHN0YWNrLCBzdGFydCwgbGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc3RhY2sgPSBzdGFjaztcbiAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgICAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aDtcbiAgICAgICAgdGhpcy5fdGFnID0gbnVsbDtcbiAgICAgICAgdGhpcy5fcmVmZXJlbmNlcyA9IG51bGw7XG4gICAgfVxuICAgIGdldCB0YWcoKSB7XG4gICAgICAgIGxldCB0YWcgPSB0aGlzLl90YWc7XG4gICAgICAgIGlmICghdGFnKSB7XG4gICAgICAgICAgICB0YWcgPSB0aGlzLl90YWcgPSBjb21iaW5lVGFnZ2VkKHRoaXMucmVmZXJlbmNlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhZztcbiAgICB9XG4gICAgYXQocG9zaXRpb24pIHtcbiAgICAgICAgbGV0IHsgc3RhcnQsIGxlbmd0aCB9ID0gdGhpcztcbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBsZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBVTkRFRklORURfUkVGRVJFTkNFO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN0YWNrOiBwb3MxLCBwb3MyLCBwb3MzLCBuYW1lZDEsIG5hbWVkMlxuICAgICAgICAvLyBzdGFydDogNCAodG9wIC0gNClcbiAgICAgICAgLy9cbiAgICAgICAgLy8gYXQoMCkgPT09IHBvczEgPT09IHRvcCAtIHN0YXJ0XG4gICAgICAgIC8vIGF0KDEpID09PSBwb3MyID09PSB0b3AgLSAoc3RhcnQgLSAxKVxuICAgICAgICAvLyBhdCgyKSA9PT0gcG9zMyA9PT0gdG9wIC0gKHN0YXJ0IC0gMilcbiAgICAgICAgbGV0IGZyb21Ub3AgPSBzdGFydCAtIHBvc2l0aW9uIC0gMTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhY2suZnJvbVRvcChmcm9tVG9wKTtcbiAgICB9XG4gICAgY2FwdHVyZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDYXB0dXJlZFBvc2l0aW9uYWxBcmd1bWVudHModGhpcy50YWcsIHRoaXMucmVmZXJlbmNlcyk7XG4gICAgfVxuICAgIGdldCByZWZlcmVuY2VzKCkge1xuICAgICAgICBsZXQgcmVmZXJlbmNlcyA9IHRoaXMuX3JlZmVyZW5jZXM7XG4gICAgICAgIGlmICghcmVmZXJlbmNlcykge1xuICAgICAgICAgICAgbGV0IHsgbGVuZ3RoIH0gPSB0aGlzO1xuICAgICAgICAgICAgcmVmZXJlbmNlcyA9IHRoaXMuX3JlZmVyZW5jZXMgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VzW2ldID0gdGhpcy5hdChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVmZXJlbmNlcztcbiAgICB9XG59XG5jbGFzcyBDYXB0dXJlZFBvc2l0aW9uYWxBcmd1bWVudHMge1xuICAgIGNvbnN0cnVjdG9yKHRhZywgcmVmZXJlbmNlcywgbGVuZ3RoID0gcmVmZXJlbmNlcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy50YWcgPSB0YWc7XG4gICAgICAgIHRoaXMucmVmZXJlbmNlcyA9IHJlZmVyZW5jZXM7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoO1xuICAgIH1cbiAgICBhdChwb3NpdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VzW3Bvc2l0aW9uXTtcbiAgICB9XG4gICAgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZXMubWFwKHRoaXMudmFsdWVPZik7XG4gICAgfVxuICAgIGdldChuYW1lKSB7XG4gICAgICAgIGxldCB7IHJlZmVyZW5jZXMsIGxlbmd0aCB9ID0gdGhpcztcbiAgICAgICAgaWYgKG5hbWUgPT09ICdsZW5ndGgnKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJpbWl0aXZlUmVmZXJlbmNlLmNyZWF0ZShsZW5ndGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGlkeCA9IHBhcnNlSW50KG5hbWUsIDEwKTtcbiAgICAgICAgICAgIGlmIChpZHggPCAwIHx8IGlkeCA+PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gVU5ERUZJTkVEX1JFRkVSRU5DRTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXNbaWR4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB2YWx1ZU9mKHJlZmVyZW5jZSkge1xuICAgICAgICByZXR1cm4gcmVmZXJlbmNlLnZhbHVlKCk7XG4gICAgfVxufVxuY2xhc3MgTmFtZWRBcmd1bWVudHMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuX3RhZyA9IG51bGw7XG4gICAgICAgIHRoaXMuX3JlZmVyZW5jZXMgPSBudWxsO1xuICAgICAgICB0aGlzLl9uYW1lcyA9IG51bGw7XG4gICAgICAgIHRoaXMuX3JlYWxOYW1lcyA9IEVNUFRZX0FSUkFZO1xuICAgIH1cbiAgICBzZXR1cChzdGFjaywgbGVuZ3RoLCBuYW1lcywgc3ludGhldGljKSB7XG4gICAgICAgIHRoaXMuc3RhY2sgPSBzdGFjaztcbiAgICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGg7XG4gICAgICAgIHRoaXMuX3RhZyA9IG51bGw7XG4gICAgICAgIHRoaXMuX3JlZmVyZW5jZXMgPSBudWxsO1xuICAgICAgICBpZiAoc3ludGhldGljKSB7XG4gICAgICAgICAgICB0aGlzLl9uYW1lcyA9IG5hbWVzO1xuICAgICAgICAgICAgdGhpcy5fcmVhbE5hbWVzID0gRU1QVFlfQVJSQVk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uYW1lcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9yZWFsTmFtZXMgPSBuYW1lcztcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgdGFnKCkge1xuICAgICAgICByZXR1cm4gY29tYmluZVRhZ2dlZCh0aGlzLnJlZmVyZW5jZXMpO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIGxldCBuYW1lcyA9IHRoaXMuX25hbWVzO1xuICAgICAgICBpZiAoIW5hbWVzKSB7XG4gICAgICAgICAgICBuYW1lcyA9IHRoaXMuX25hbWVzID0gdGhpcy5fcmVhbE5hbWVzLm1hcCh0aGlzLnNsaWNlTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5hbWVzO1xuICAgIH1cbiAgICBoYXMobmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lcy5pbmRleE9mKG5hbWUpICE9PSAtMTtcbiAgICB9XG4gICAgZ2V0KG5hbWUpIHtcbiAgICAgICAgbGV0IHsgbmFtZXMsIGxlbmd0aCB9ID0gdGhpcztcbiAgICAgICAgbGV0IGlkeCA9IG5hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gVU5ERUZJTkVEX1JFRkVSRU5DRTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzdGFjazogcG9zMSwgcG9zMiwgcG9zMywgbmFtZWQxLCBuYW1lZDJcbiAgICAgICAgLy8gc3RhcnQ6IDQgKHRvcCAtIDQpXG4gICAgICAgIC8vIG5hbWVkRGljdDogeyBuYW1lZDE6IDEsIG5hbWVkMjogMCB9O1xuICAgICAgICAvL1xuICAgICAgICAvLyBnZXQoJ25hbWVkMScpID09PSBuYW1lZDEgPT09IHRvcCAtIChzdGFydCAtIDEpXG4gICAgICAgIC8vIGdldCgnbmFtZWQyJykgPT09IG5hbWVkMiA9PT0gdG9wIC0gc3RhcnRcbiAgICAgICAgbGV0IGZyb21Ub3AgPSBsZW5ndGggLSBpZHg7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YWNrLmZyb21Ub3AoZnJvbVRvcCk7XG4gICAgfVxuICAgIGNhcHR1cmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2FwdHVyZWROYW1lZEFyZ3VtZW50cyh0aGlzLnRhZywgdGhpcy5uYW1lcywgdGhpcy5yZWZlcmVuY2VzKTtcbiAgICB9XG4gICAgZ2V0IHJlZmVyZW5jZXMoKSB7XG4gICAgICAgIGxldCByZWZlcmVuY2VzID0gdGhpcy5fcmVmZXJlbmNlcztcbiAgICAgICAgaWYgKCFyZWZlcmVuY2VzKSB7XG4gICAgICAgICAgICBsZXQgeyBuYW1lcywgbGVuZ3RoIH0gPSB0aGlzO1xuICAgICAgICAgICAgcmVmZXJlbmNlcyA9IHRoaXMuX3JlZmVyZW5jZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VzW2ldID0gdGhpcy5nZXQobmFtZXNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWZlcmVuY2VzO1xuICAgIH1cbiAgICBzbGljZU5hbWUobmFtZSkge1xuICAgICAgICByZXR1cm4gbmFtZS5zbGljZSgxKTtcbiAgICB9XG59XG5jbGFzcyBDYXB0dXJlZE5hbWVkQXJndW1lbnRzIHtcbiAgICBjb25zdHJ1Y3Rvcih0YWcsIG5hbWVzLCByZWZlcmVuY2VzKSB7XG4gICAgICAgIHRoaXMudGFnID0gdGFnO1xuICAgICAgICB0aGlzLm5hbWVzID0gbmFtZXM7XG4gICAgICAgIHRoaXMucmVmZXJlbmNlcyA9IHJlZmVyZW5jZXM7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gbmFtZXMubGVuZ3RoO1xuICAgICAgICB0aGlzLl9tYXAgPSBudWxsO1xuICAgIH1cbiAgICBnZXQgbWFwKCkge1xuICAgICAgICBsZXQgbWFwID0gdGhpcy5fbWFwO1xuICAgICAgICBpZiAoIW1hcCkge1xuICAgICAgICAgICAgbGV0IHsgbmFtZXMsIHJlZmVyZW5jZXMgfSA9IHRoaXM7XG4gICAgICAgICAgICBtYXAgPSB0aGlzLl9tYXAgPSBkaWN0KCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBuYW1lc1tpXTtcbiAgICAgICAgICAgICAgICBtYXBbbmFtZV0gPSByZWZlcmVuY2VzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgfVxuICAgIGhhcyhuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWVzLmluZGV4T2YobmFtZSkgIT09IC0xO1xuICAgIH1cbiAgICBnZXQobmFtZSkge1xuICAgICAgICBsZXQgeyBuYW1lcywgcmVmZXJlbmNlcyB9ID0gdGhpcztcbiAgICAgICAgbGV0IGlkeCA9IG5hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gVU5ERUZJTkVEX1JFRkVSRU5DRTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzW2lkeF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFsdWUoKSB7XG4gICAgICAgIGxldCB7IG5hbWVzLCByZWZlcmVuY2VzIH0gPSB0aGlzO1xuICAgICAgICBsZXQgb3V0ID0gZGljdCgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgbmFtZSA9IG5hbWVzW2ldO1xuICAgICAgICAgICAgb3V0W25hbWVdID0gcmVmZXJlbmNlc1tpXS52YWx1ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxufVxuZXhwb3J0IGRlZmF1bHQgbmV3IEFyZ3VtZW50cygpOyJdfQ==