Socket
Socket
Sign inDemoInstall

@glimmer/object

Package Overview
Dependencies
Maintainers
11
Versions
160
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@glimmer/object - npm Package Compare versions

Comparing version 0.47.9 to 0.48.0

50

dist/commonjs/es2017/index.js

@@ -1,2 +0,2 @@

'use strict';
"use strict";

@@ -6,12 +6,9 @@ Object.defineProperty(exports, "__esModule", {

});
var _object = require('./lib/object');
Object.defineProperty(exports, 'default', {
Object.defineProperty(exports, "default", {
enumerable: true,
get: function () {
return _interopRequireDefault(_object).default;
return _object.default;
}
});
Object.defineProperty(exports, 'ClassMeta', {
Object.defineProperty(exports, "ClassMeta", {
enumerable: true,

@@ -22,3 +19,3 @@ get: function () {

});
Object.defineProperty(exports, 'InstanceMeta', {
Object.defineProperty(exports, "InstanceMeta", {
enumerable: true,

@@ -29,6 +26,3 @@ get: function () {

});
var _computed = require('./lib/computed');
Object.defineProperty(exports, 'computed', {
Object.defineProperty(exports, "computed", {
enumerable: true,

@@ -39,3 +33,3 @@ get: function () {

});
Object.defineProperty(exports, 'observer', {
Object.defineProperty(exports, "observer", {
enumerable: true,

@@ -46,6 +40,3 @@ get: function () {

});
var _mixin = require('./lib/mixin');
Object.defineProperty(exports, 'Mixin', {
Object.defineProperty(exports, "Mixin", {
enumerable: true,

@@ -56,3 +47,3 @@ get: function () {

});
Object.defineProperty(exports, 'Blueprint', {
Object.defineProperty(exports, "Blueprint", {
enumerable: true,

@@ -63,3 +54,3 @@ get: function () {

});
Object.defineProperty(exports, 'toMixin', {
Object.defineProperty(exports, "toMixin", {
enumerable: true,

@@ -70,6 +61,3 @@ get: function () {

});
var _descriptors = require('./lib/descriptors');
Object.defineProperty(exports, 'aliasMethod', {
Object.defineProperty(exports, "aliasMethod", {
enumerable: true,

@@ -80,3 +68,3 @@ get: function () {

});
Object.defineProperty(exports, 'alias', {
Object.defineProperty(exports, "alias", {
enumerable: true,

@@ -88,3 +76,13 @@ get: function () {

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OzttQkFBQSxTOzs7Ozs7bUJBQUEsWTs7Ozs7Ozs7O3FCQUNBLFE7Ozs7OztxQkFBQSxROzs7Ozs7Ozs7a0JBQ0EsSzs7Ozs7O2tCQUFBLFM7Ozs7OztrQkFBQSxPOzs7Ozs7Ozs7d0JBQ0EsVzs7Ozs7O3dCQUFBLEsiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBkZWZhdWx0LCBDbGFzc01ldGEsIEluc3RhbmNlTWV0YSwgR2xpbW1lck9iamVjdEZhY3RvcnkgfSBmcm9tICcuL2xpYi9vYmplY3QnO1xuZXhwb3J0IHsgY29tcHV0ZWQsIG9ic2VydmVyIH0gZnJvbSAnLi9saWIvY29tcHV0ZWQnO1xuZXhwb3J0IHsgTWl4aW4sIEJsdWVwcmludCwgdG9NaXhpbiB9IGZyb20gJy4vbGliL21peGluJztcbmV4cG9ydCB7IGFsaWFzTWV0aG9kLCBhbGlhcyB9IGZyb20gJy4vbGliL2Rlc2NyaXB0b3JzJztcbiJdLCJzb3VyY2VSb290IjoiIn0=
var _object = _interopRequireWildcard(require("./lib/object"));
var _computed = require("./lib/computed");
var _mixin = require("./lib/mixin");
var _descriptors = require("./lib/descriptors");
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGRlZmF1bHQsIENsYXNzTWV0YSwgSW5zdGFuY2VNZXRhLCBHbGltbWVyT2JqZWN0RmFjdG9yeSB9IGZyb20gJy4vbGliL29iamVjdCc7XG5leHBvcnQgeyBjb21wdXRlZCwgb2JzZXJ2ZXIgfSBmcm9tICcuL2xpYi9jb21wdXRlZCc7XG5leHBvcnQgeyBNaXhpbiwgQmx1ZXByaW50LCB0b01peGluIH0gZnJvbSAnLi9saWIvbWl4aW4nO1xuZXhwb3J0IHsgYWxpYXNNZXRob2QsIGFsaWFzIH0gZnJvbSAnLi9saWIvZGVzY3JpcHRvcnMnO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==

@@ -1,155 +0,192 @@

'use strict';
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
value: true
});
exports.ComputedBlueprint = undefined;
exports.computed = computed;
exports.observer = observer;
exports.ComputedBlueprint = void 0;
var _objectReference = require('@glimmer/object-reference');
var _objectReference = require("@glimmer/object-reference");
var _object = require('./object');
var _object = require("./object");
var _mixin = require('./mixin');
var _mixin = require("./mixin");
var _a;
class ComputedBlueprint extends _mixin.Blueprint {
constructor(accessor, deps = []) {
super();
this.metadata = {};
this.accessor = accessor;
this.deps = deps;
}
descriptor(_target, key, classMeta) {
classMeta.addReferenceTypeFor(key, (0, _objectReference.ComputedReferenceBlueprint)(key, this.deps));
classMeta.addPropertyMetadata(key, this.metadata);
classMeta.addSlotFor(key);
return new Computed(this.accessor);
}
property(...paths) {
this.deps = paths.map(d => d.split('.'));
return this;
}
meta(object) {
this.metadata = object;
return this;
}
volatile() {
return this;
}
constructor(accessor, deps = []) {
super();
this.metadata = {};
this.accessor = accessor;
this.deps = deps;
}
descriptor(_target, key, classMeta) {
classMeta.addReferenceTypeFor(key, (0, _objectReference.ComputedReferenceBlueprint)(key, this.deps));
classMeta.addPropertyMetadata(key, this.metadata);
classMeta.addSlotFor(key);
return new Computed(this.accessor);
}
property(...paths) {
this.deps = paths.map(d => d.split('.'));
return this;
}
meta(object) {
this.metadata = object;
return this;
}
volatile() {
return this;
}
}
exports.ComputedBlueprint = ComputedBlueprint;
class Computed {
constructor(accessor) {
this[_a] = true;
this.accessor = accessor;
this.enumerable = false;
this.configurable = false;
}
define(prototype, key, home) {
Object.defineProperty(prototype, key, wrapAccessor(home, key, this.accessor));
}
constructor(accessor) {
this[_a] = true;
this.accessor = accessor;
this.enumerable = false;
this.configurable = false;
}
define(prototype, key, home) {
Object.defineProperty(prototype, key, wrapAccessor(home, key, this.accessor));
}
}
_a = _mixin.DESCRIPTOR;
function wrapAccessor(home, accessorName, _desc) {
let superDesc = getPropertyDescriptor(home, accessorName);
let originalGet;
let originalSet;
let desc = {
enumerable: true,
configurable: true
let superDesc = getPropertyDescriptor(home, accessorName);
let originalGet;
let originalSet;
let desc = {
enumerable: true,
configurable: true
};
let get = _desc.get;
if (get && get.length > 0) {
originalGet = function () {
return get.call(this, accessorName);
};
let get = _desc.get;
if (get && get.length > 0) {
originalGet = function () {
return get.call(this, accessorName);
};
} else {
originalGet = _desc.get;
}
let set = _desc.set;
if (set && set.length > 1) {
originalSet = function (value) {
return set.call(this, accessorName, value);
};
} else {
originalSet = _desc.set;
}
let cacheGet = function () {
if (_objectReference.Meta.exists(this)) {
let slot = _objectReference.Meta.for(this).getSlots()[accessorName];
if (slot !== _object.EMPTY_CACHE) return slot;
}
return originalGet.call(this);
} else {
originalGet = _desc.get;
}
let set = _desc.set;
if (set && set.length > 1) {
originalSet = function (value) {
return set.call(this, accessorName, value);
};
let cacheSet;
if (originalSet) {
cacheSet = function (value) {
let meta = _objectReference.Meta.for(this);
let slots = meta.getSlots();
let ret = originalSet.call(this, value);
if (ret !== undefined) {
slots[accessorName] = ret;
}
};
} else {
cacheSet = function (value) {
let meta = _objectReference.Meta.for(this);
let slots = meta.getSlots();
if (value !== undefined) slots[accessorName] = value;
};
} else {
originalSet = _desc.set;
}
let cacheGet = function () {
if (_objectReference.Meta.exists(this)) {
let slot = _objectReference.Meta.for(this).getSlots()[accessorName];
if (slot !== _object.EMPTY_CACHE) return slot;
}
if (!superDesc || 'value' in superDesc) {
desc.get = cacheGet;
desc.set = cacheSet;
return desc;
}
desc.get = function () {
let lastSuper = this._super;
this._super = function () {
return superDesc.get.call(this);
};
try {
return cacheGet.call(this);
} finally {
this._super = lastSuper;
}
return originalGet.call(this);
};
let cacheSet;
if (originalSet) {
cacheSet = function (value) {
let meta = _objectReference.Meta.for(this);
let slots = meta.getSlots();
let ret = originalSet.call(this, value);
if (ret !== undefined) {
slots[accessorName] = ret;
}
};
desc.set = function (val) {
let lastSuper = this._super;
this._super = function () {
return superDesc.set.call(this, val);
};
try {
return cacheSet.call(this, val);
} finally {
this._super = lastSuper;
}
} else {
cacheSet = function (value) {
let meta = _objectReference.Meta.for(this);
let slots = meta.getSlots();
if (value !== undefined) slots[accessorName] = value;
};
}
if (!superDesc || 'value' in superDesc) {
desc.get = cacheGet;
desc.set = cacheSet;
return desc;
}
desc.get = function () {
let lastSuper = this._super;
this._super = function () {
return superDesc.get.call(this);
};
try {
return cacheGet.call(this);
} finally {
this._super = lastSuper;
}
};
desc.set = function (val) {
let lastSuper = this._super;
this._super = function () {
return superDesc.set.call(this, val);
};
try {
return cacheSet.call(this, val);
} finally {
this._super = lastSuper;
}
};
return desc;
}
function getPropertyDescriptor(subject, name) {
let pd = Object.getOwnPropertyDescriptor(subject, name);
let proto = Object.getPrototypeOf(subject);
while (typeof pd === 'undefined' && proto !== null) {
pd = Object.getOwnPropertyDescriptor(proto, name);
proto = Object.getPrototypeOf(proto);
}
return pd;
let pd = Object.getOwnPropertyDescriptor(subject, name);
let proto = Object.getPrototypeOf(subject);
while (typeof pd === 'undefined' && proto !== null) {
pd = Object.getOwnPropertyDescriptor(proto, name);
proto = Object.getPrototypeOf(proto);
}
return pd;
}
function computed(...args) {
let last = args.pop();
let deps = args;
if (typeof last === 'function') {
return new ComputedBlueprint({
get: last
}).property(...deps);
} else if (typeof last === 'object') {
return new ComputedBlueprint(last).property(...deps);
} else {
throw new TypeError('computed expects a function or an object as last argument');
}
let last = args.pop();
let deps = args;
if (typeof last === 'function') {
return new ComputedBlueprint({
get: last
}).property(...deps);
} else if (typeof last === 'object') {
return new ComputedBlueprint(last).property(...deps);
} else {
throw new TypeError('computed expects a function or an object as last argument');
}
}
function observer(..._args) {}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvY29tcHV0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O1FBa01NLFEsR0FBQSxRO1FBZUEsUSxHQUFBLFE7O0FBak5OOztBQUNBOztBQUNBOzs7QUF5Qk0sTUFBQSxpQkFBQSxTQUFBLGdCQUFBLENBQTBDO0FBSzlDLGdCQUFBLFFBQUEsRUFBMEMsT0FBMUMsRUFBQSxFQUErRDtBQUM3RDtBQUhNLGFBQUEsUUFBQSxHQUFBLEVBQUE7QUFJTixhQUFBLFFBQUEsR0FBQSxRQUFBO0FBQ0EsYUFBQSxJQUFBLEdBQUEsSUFBQTtBQUNEO0FBRUQsZUFBQSxPQUFBLEVBQUEsR0FBQSxFQUFBLFNBQUEsRUFBNkQ7QUFDM0Qsa0JBQUEsbUJBQUEsQ0FBQSxHQUFBLEVBQW1DLGlEQUFBLEdBQUEsRUFBZ0MsS0FBbkUsSUFBbUMsQ0FBbkM7QUFDQSxrQkFBQSxtQkFBQSxDQUFBLEdBQUEsRUFBbUMsS0FBbkMsUUFBQTtBQUNBLGtCQUFBLFVBQUEsQ0FBQSxHQUFBO0FBQ0EsZUFBTyxJQUFBLFFBQUEsQ0FBYSxLQUFwQixRQUFPLENBQVA7QUFDRDtBQUVELGFBQVMsR0FBVCxLQUFBLEVBQTJCO0FBQ3pCLGFBQUEsSUFBQSxHQUFZLE1BQUEsR0FBQSxDQUFVLEtBQUssRUFBQSxLQUFBLENBQTNCLEdBQTJCLENBQWYsQ0FBWjtBQUNBLGVBQUEsSUFBQTtBQUNEO0FBRUQsU0FBQSxNQUFBLEVBQW1CO0FBQ2pCLGFBQUEsUUFBQSxHQUFBLE1BQUE7QUFDQSxlQUFBLElBQUE7QUFDRDtBQUVELGVBQVE7QUFDTixlQUFBLElBQUE7QUFDRDtBQTlCNkM7UUFBMUMsaUIsR0FBQSxpQjtBQWlDTixNQUFBLFFBQUEsQ0FBYztBQU9aLGdCQUFBLFFBQUEsRUFBd0M7QUFGeEMsYUFBQSxFQUFBLElBQUEsSUFBQTtBQUdFLGFBQUEsUUFBQSxHQUFBLFFBQUE7QUFDQSxhQUFBLFVBQUEsR0FBQSxL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QUNGO0FBRUssU0FBQSxRQUFBLENBQW1CLEdBQW5CLEtBQUEsRUFBa0MsQ0FBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXB1dGVkUmVmZXJlbmNlQmx1ZXByaW50LCBNZXRhIH0gZnJvbSAnQGdsaW1tZXIvb2JqZWN0LXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBFTVBUWV9DQUNIRSwgQ2xhc3NNZXRhIH0gZnJvbSAnLi9vYmplY3QnO1xuaW1wb3J0IHsgRGVzY3JpcHRvciwgQmx1ZXByaW50LCBERVNDUklQVE9SIH0gZnJvbSAnLi9taXhpbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcHV0ZWRHZXRDYWxsYmFjayB7XG4gICgpOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGVnYWN5Q29tcHV0ZWRHZXRDYWxsYmFjayB7XG4gIChrZXk6IHN0cmluZyk6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wdXRlZFNldENhbGxiYWNrIHtcbiAgKHZhbDogYW55KTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExlZ2FjeUNvbXB1dGVkU2V0Q2FsbGJhY2sge1xuICAoa2V5OiBzdHJpbmcsIHZhbDogYW55KTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXB1dGVkRGVzY3JpcHRvciB7XG4gIGdldD86IENvbXB1dGVkR2V0Q2FsbGJhY2sgfCBMZWdhY3lDb21wdXRlZEdldENhbGxiYWNrO1xuICBzZXQ/OiBDb21wdXRlZFNldENhbGxiYWNrIHwgTGVnYWN5Q29tcHV0ZWRTZXRDYWxsYmFjaztcbn1cblxudHlwZSBDb21wdXRlZEFyZ3VtZW50ID0gQ29tcHV0ZWRHZXRDYWxsYmFjayB8IENvbXB1dGVkRGVzY3JpcHRvcjtcblxuZXhwb3J0IGNsYXNzIENvbXB1dGVkQmx1ZXByaW50IGV4dGVuZHMgQmx1ZXByaW50IHtcbiAgcHJpdmF0ZSBhY2Nlc3NvcjogQ29tcHV0ZWREZXNjcmlwdG9yO1xuICBwcml2YXRlIGRlcHM6IHN0cmluZ1tdW107XG4gIHByaXZhdGUgbWV0YWRhdGE6IE9iamVjdCA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKGFjY2Vzc29yOiBDb21wdXRlZERlc2NyaXB0b3IsIGRlcHM6IHN0cmluZ1tdW10gPSBbXSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hY2Nlc3NvciA9IGFjY2Vzc29yO1xuICAgIHRoaXMuZGVwcyA9IGRlcHM7XG4gIH1cblxuICBkZXNjcmlwdG9yKF90YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIGNsYXNzTWV0YTogQ2xhc3NNZXRhKTogRGVzY3JpcHRvciB7XG4gICAgY2xhc3NNZXRhLmFkZFJlZmVyZW5jZVR5cGVGb3Ioa2V5LCBDb21wdXRlZFJlZmVyZW5jZUJsdWVwcmludChrZXksIHRoaXMuZGVwcykpO1xuICAgIGNsYXNzTWV0YS5hZGRQcm9wZXJ0eU1ldGFkYXRhKGtleSwgdGhpcy5tZXRhZGF0YSk7XG4gICAgY2xhc3NNZXRhLmFkZFNsb3RGb3Ioa2V5KTtcbiAgICByZXR1cm4gbmV3IENvbXB1dGVkKHRoaXMuYWNjZXNzb3IpO1xuICB9XG5cbiAgcHJvcGVydHkoLi4ucGF0aHM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5kZXBzID0gcGF0aHMubWFwKGQgPT4gZC5zcGxpdCgnLicpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG1ldGEob2JqZWN0OiBPYmplY3QpIHtcbiAgICB0aGlzLm1ldGFkYXRhID0gb2JqZWN0O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdm9sYXRpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuY2xhc3MgQ29tcHV0ZWQgaW1wbGVtZW50cyBEZXNjcmlwdG9yIHtcbiAgZW51bWVyYWJsZTogYm9vbGVhbjtcbiAgY29uZmlndXJhYmxlOiBib29sZWFuO1xuXG4gIHByaXZhdGUgYWNjZXNzb3I6IENvbXB1dGVkRGVzY3JpcHRvcjtcbiAgW0RFU0NSSVBUT1JdID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihhY2Nlc3NvcjogQ29tcHV0ZWREZXNjcmlwdG9yKSB7XG4gICAgdGhpcy5hY2Nlc3NvciA9IGFjY2Vzc29yO1xuICAgIHRoaXMuZW51bWVyYWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuY29uZmlndXJhYmxlID0gZmFsc2U7XG4gIH1cblxuICBkZWZpbmUocHJvdG90eXBlOiBPYmplY3QsIGtleTogc3RyaW5nLCBob21lOiBPYmplY3QpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCBrZXksIHdyYXBBY2Nlc3Nvcihob21lLCBrZXksIHRoaXMuYWNjZXNzb3IpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3cmFwQWNjZXNzb3IoXG4gIGhvbWU6IE9iamVjdCxcbiAgYWNjZXNzb3JOYW1lOiBzdHJpbmcsXG4gIF9kZXNjOiBDb21wdXRlZERlc2NyaXB0b3Jcbik6IFByb3BlcnR5RGVzY3JpcHRvciB7XG4gIGxldCBzdXBlckRlc2MgPSBnZXRQcm9wZXJ0eURlc2NyaXB0b3IoaG9tZSwgYWNjZXNzb3JOYW1lKTtcblxuICBsZXQgb3JpZ2luYWxHZXQ6IENvbXB1dGVkR2V0Q2FsbGJhY2s7XG4gIGxldCBvcmlnaW5hbFNldDogQ29tcHV0ZWRTZXRDYWxsYmFjaztcblxuICBsZXQgZGVzYzogUHJvcGVydHlEZXNjcmlwdG9yID0ge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICB9O1xuXG4gIGxldCBnZXQgPSBfZGVzYy5nZXQ7XG5cbiAgaWYgKGdldCAmJiBnZXQubGVuZ3RoID4gMCkge1xuICAgIG9yaWdpbmFsR2V0ID0gZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgICByZXR1cm4gKGdldCBhcyBhbnkpLmNhbGwodGhpcywgYWNjZXNzb3JOYW1lKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIG9yaWdpbmFsR2V0ID0gX2Rlc2MuZ2V0IGFzIENvbXB1dGVkR2V0Q2FsbGJhY2s7XG4gIH1cblxuICBsZXQgc2V0ID0gX2Rlc2Muc2V0O1xuXG4gIGlmIChzZXQgJiYgc2V0Lmxlbmd0aCA+IDEpIHtcbiAgICBvcmlnaW5hbFNldCA9IGZ1bmN0aW9uKHRoaXM6IGFueSwgdmFsdWU6IGFueSkge1xuICAgICAgcmV0dXJuIChzZXQgYXMgYW55KS5jYWxsKHRoaXMsIGFjY2Vzc29yTmFtZSwgdmFsdWUpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgb3JpZ2luYWxTZXQgPSBfZGVzYy5zZXQgYXMgQ29tcHV0ZWRHZXRDYWxsYmFjaztcbiAgfVxuXG4gIGxldCBjYWNoZUdldCA9IGZ1bmN0aW9uKHRoaXM6IGFueSkge1xuICAgIGlmIChNZXRhLmV4aXN0cyh0aGlzKSkge1xuICAgICAgbGV0IHNsb3QgPSBNZXRhLmZvcih0aGlzKS5nZXRTbG90cygpW2FjY2Vzc29yTmFtZV07XG4gICAgICBpZiAoc2xvdCAhPT0gRU1QVFlfQ0FDSEUpIHJldHVybiBzbG90O1xuICAgIH1cblxuICAgIHJldHVybiBvcmlnaW5hbEdldC5jYWxsKHRoaXMpO1xuICB9O1xuXG4gIGxldCBjYWNoZVNldDogKHZhbHVlOiBhbnkpID0+IHZvaWQ7XG5cbiAgaWYgKG9yaWdpbmFsU2V0KSB7XG4gICAgY2FjaGVTZXQgPSBmdW5jdGlvbih0aGlzOiBhbnksIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgIGxldCBtZXRhID0gTWV0YS5mb3IodGhpcyk7XG4gICAgICBsZXQgc2xvdHMgPSBtZXRhLmdldFNsb3RzKCk7XG5cbiAgICAgIGxldCByZXQgPSBvcmlnaW5hbFNldC5jYWxsKHRoaXMsIHZhbHVlKTtcblxuICAgICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNsb3RzW2FjY2Vzc29yTmFtZV0gPSByZXQ7XG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjYWNoZVNldCA9IGZ1bmN0aW9uKHRoaXM6IGFueSwgdmFsdWU6IGFueSkge1xuICAgICAgbGV0IG1ldGEgPSBNZXRhLmZvcih0aGlzKTtcbiAgICAgIGxldCBzbG90cyA9IG1ldGEuZ2V0U2xvdHMoKTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSBzbG90c1thY2Nlc3Nvck5hbWVdID0gdmFsdWU7XG4gICAgfTtcbiAgfVxuXG4gIGlmICghc3VwZXJEZXNjIHx8ICd2YWx1ZScgaW4gc3VwZXJEZXNjKSB7XG4gICAgZGVzYy5nZXQgPSBjYWNoZUdldDtcbiAgICBkZXNjLnNldCA9IGNhY2hlU2V0O1xuICAgIHJldHVybiBkZXNjO1xuICB9XG5cbiAgZGVzYy5nZXQgPSBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICBsZXQgbGFzdFN1cGVyID0gdGhpcy5fc3VwZXI7XG4gICAgdGhpcy5fc3VwZXIgPSBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICAgIHJldHVybiAoc3VwZXJEZXNjIGFzIGFueSkuZ2V0LmNhbGwodGhpcyk7XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY2FjaGVHZXQuY2FsbCh0aGlzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fc3VwZXIgPSBsYXN0U3VwZXI7XG4gICAgfVxuICB9O1xuXG4gIGRlc2Muc2V0ID0gZnVuY3Rpb24odGhpczogYW55LCB2YWw6IGFueSkge1xuICAgIGxldCBsYXN0U3VwZXIgPSB0aGlzLl9zdXBlcjtcbiAgICB0aGlzLl9zdXBlciA9IGZ1bmN0aW9uKHRoaXM6IGFueSkge1xuICAgICAgcmV0dXJuIChzdXBlckRlc2MgYXMgYW55KS5zZXQuY2FsbCh0aGlzLCB2YWwpO1xuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGNhY2hlU2V0LmNhbGwodGhpcywgdmFsKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fc3VwZXIgPSBsYXN0U3VwZXI7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBkZXNjO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eURlc2NyaXB0b3Ioc3ViamVjdDogYW55LCBuYW1lOiBzdHJpbmcpIHtcbiAgbGV0IHBkID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzdWJqZWN0LCBuYW1lKTtcbiAgbGV0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHN1YmplY3QpO1xuICB3aGlsZSAodHlwZW9mIHBkID09PSAndW5kZWZpbmVkJyAmJiBwcm90byAhPT0gbnVsbCkge1xuICAgIHBkID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgbmFtZSk7XG4gICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICB9XG4gIHJldHVybiBwZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVkKGRlc2M6IENvbXB1dGVkRGVzY3JpcHRvcik6IENvbXB1dGVkQmx1ZXByaW50O1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVkKFxuICBnZXR0ZXI6IENvbXB1dGVkR2V0Q2FsbGJhY2sgfCBMZWdhY3lDb21wdXRlZEdldENhbGxiYWNrXG4pOiBDb21wdXRlZEJsdWVwcmludDtcbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlZCguLi5hcmdzOiBhbnlbXSk6IENvbXB1dGVkQmx1ZXByaW50O1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZWQoLi4uYXJnczogYW55W10pIHtcbiAgbGV0IGxhc3Q6IENvbXB1dGVkQXJndW1lbnQgPSBhcmdzLnBvcCgpO1xuICBsZXQgZGVwcyA9IGFyZ3M7XG5cbiAgaWYgKHR5cGVvZiBsYXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG5ldyBDb21wdXRlZEJsdWVwcmludCh7XG4gICAgICBnZXQ6IGxhc3QgYXMgQ29tcHV0ZWRHZXRDYWxsYmFjayB8IExlZ2FjeUNvbXB1dGVkR2V0Q2FsbGJhY2ssXG4gICAgfSkucHJvcGVydHkoLi4uZGVwcyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGxhc3QgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG5ldyBDb21wdXRlZEJsdWVwcmludChsYXN0IGFzIENvbXB1dGVkRGVzY3JpcHRvcikucHJvcGVydHkoLi4uZGVwcyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY29tcHV0ZWQgZXhwZWN0cyBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCBhcyBsYXN0IGFyZ3VtZW50Jyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9ic2VydmVyKC4uLl9hcmdzOiBhbnlbXSkge31cbiJdLCJzb3VyY2VSb290IjoiIn0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvY29tcHV0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7QUF5Qk0sTUFBQSxpQkFBQSxTQUFBLGdCQUFBLENBQTBDO0FBSzlDLEVBQUEsV0FBQSxDQUFBLFFBQUEsRUFBMEMsSUFBQSxHQUExQyxFQUFBLEVBQStEO0FBQzdEO0FBSE0sU0FBQSxRQUFBLEdBQUEsRUFBQTtBQUlOLFNBQUEsUUFBQSxHQUFBLFFBQUE7QUFDQSxTQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0Q7O0FBRUQsRUFBQSxVQUFVLENBQUEsT0FBQSxFQUFBLEdBQUEsRUFBQSxTQUFBLEVBQW1EO0FBQzNELElBQUEsU0FBUyxDQUFULG1CQUFBLENBQUEsR0FBQSxFQUFtQyxpREFBMEIsR0FBMUIsRUFBZ0MsS0FBbkUsSUFBbUMsQ0FBbkM7QUFDQSxJQUFBLFNBQVMsQ0FBVCxtQkFBQSxDQUFBLEdBQUEsRUFBbUMsS0FBbkMsUUFBQTtBQUNBLElBQUEsU0FBUyxDQUFULFVBQUEsQ0FBQSxHQUFBO0FBQ0EsV0FBTyxJQUFBLFFBQUEsQ0FBYSxLQUFwQixRQUFPLENBQVA7QUFDRDs7QUFFRCxFQUFBLFFBQVEsQ0FBQyxHQUFELEtBQUEsRUFBbUI7QUFDekIsU0FBQSxJQUFBLEdBQVksS0FBSyxDQUFMLEdBQUEsQ0FBVSxDQUFDLElBQUksQ0FBQyxDQUFELEtBQUEsQ0FBM0IsR0FBMkIsQ0FBZixDQUFaO0FBQ0EsV0FBQSxJQUFBO0FBQ0Q7O0FBRUQsRUFBQSxJQUFJLENBQUEsTUFBQSxFQUFlO0FBQ2pCLFNBQUEsUUFBQSxHQUFBLE1BQUE7QUFDQSxXQUFBLElBQUE7QUFDRDs7QUFFRCxFQUFBLFFBQVEsR0FBQTtBQUNOLFdBQUEsSUFBQTtBQUNEOztBQTlCNkM7Ozs7QUFpQ2hELE1BQUEsUUFBQSxDQUFjO0FBT1osRUFBQSxXQUFBLENBQUEsUUFBQSxFQUF3QztB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QUFBLEtBQUEsRUFBTCxJQUFLLENBQUw7QUFDQSxJQUFBLEtBQUssR0FBRyxNQUFNLENBQU4sY0FBQSxDQUFSLEtBQVEsQ0FBUjtBQUNEOztBQUNELFNBQUEsRUFBQTtBQUNEOztBQVFLLFNBQUEsUUFBQSxDQUFtQixHQUFuQixJQUFBLEVBQWlDO0FBQ3JDLE1BQUksSUFBSSxHQUFxQixJQUFJLENBQWpDLEdBQTZCLEVBQTdCO0FBQ0EsTUFBSSxJQUFJLEdBQVIsSUFBQTs7QUFFQSxNQUFJLE9BQUEsSUFBQSxLQUFKLFVBQUEsRUFBZ0M7QUFDOUIsV0FBTyxJQUFBLGlCQUFBLENBQXNCO0FBQzNCLE1BQUEsR0FBRyxFQUFFO0FBRHNCLEtBQXRCLEVBQUEsUUFBQSxDQUVLLEdBRlosSUFBTyxDQUFQO0FBREYsR0FBQSxNQUlPLElBQUksT0FBQSxJQUFBLEtBQUosUUFBQSxFQUE4QjtBQUNuQyxXQUFPLElBQUEsaUJBQUEsQ0FBQSxJQUFBLEVBQUEsUUFBQSxDQUEyRCxHQUFsRSxJQUFPLENBQVA7QUFESyxHQUFBLE1BRUE7QUFDTCxVQUFNLElBQUEsU0FBQSxDQUFOLDJEQUFNLENBQU47QUFDRDtBQUNGOztBQUVLLFNBQUEsUUFBQSxDQUFtQixHQUFuQixLQUFBLEVBQWtDLENBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wdXRlZFJlZmVyZW5jZUJsdWVwcmludCwgTWV0YSB9IGZyb20gJ0BnbGltbWVyL29iamVjdC1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgRU1QVFlfQ0FDSEUsIENsYXNzTWV0YSB9IGZyb20gJy4vb2JqZWN0JztcbmltcG9ydCB7IERlc2NyaXB0b3IsIEJsdWVwcmludCwgREVTQ1JJUFRPUiB9IGZyb20gJy4vbWl4aW4nO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbXB1dGVkR2V0Q2FsbGJhY2sge1xuICAoKTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExlZ2FjeUNvbXB1dGVkR2V0Q2FsbGJhY2sge1xuICAoa2V5OiBzdHJpbmcpOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcHV0ZWRTZXRDYWxsYmFjayB7XG4gICh2YWw6IGFueSk6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMZWdhY3lDb21wdXRlZFNldENhbGxiYWNrIHtcbiAgKGtleTogc3RyaW5nLCB2YWw6IGFueSk6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wdXRlZERlc2NyaXB0b3Ige1xuICBnZXQ/OiBDb21wdXRlZEdldENhbGxiYWNrIHwgTGVnYWN5Q29tcHV0ZWRHZXRDYWxsYmFjaztcbiAgc2V0PzogQ29tcHV0ZWRTZXRDYWxsYmFjayB8IExlZ2FjeUNvbXB1dGVkU2V0Q2FsbGJhY2s7XG59XG5cbnR5cGUgQ29tcHV0ZWRBcmd1bWVudCA9IENvbXB1dGVkR2V0Q2FsbGJhY2sgfCBDb21wdXRlZERlc2NyaXB0b3I7XG5cbmV4cG9ydCBjbGFzcyBDb21wdXRlZEJsdWVwcmludCBleHRlbmRzIEJsdWVwcmludCB7XG4gIHByaXZhdGUgYWNjZXNzb3I6IENvbXB1dGVkRGVzY3JpcHRvcjtcbiAgcHJpdmF0ZSBkZXBzOiBzdHJpbmdbXVtdO1xuICBwcml2YXRlIG1ldGFkYXRhOiBPYmplY3QgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihhY2Nlc3NvcjogQ29tcHV0ZWREZXNjcmlwdG9yLCBkZXBzOiBzdHJpbmdbXVtdID0gW10pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWNjZXNzb3IgPSBhY2Nlc3NvcjtcbiAgICB0aGlzLmRlcHMgPSBkZXBzO1xuICB9XG5cbiAgZGVzY3JpcHRvcihfdGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nLCBjbGFzc01ldGE6IENsYXNzTWV0YSk6IERlc2NyaXB0b3Ige1xuICAgIGNsYXNzTWV0YS5hZGRSZWZlcmVuY2VUeXBlRm9yKGtleSwgQ29tcHV0ZWRSZWZlcmVuY2VCbHVlcHJpbnQoa2V5LCB0aGlzLmRlcHMpKTtcbiAgICBjbGFzc01ldGEuYWRkUHJvcGVydHlNZXRhZGF0YShrZXksIHRoaXMubWV0YWRhdGEpO1xuICAgIGNsYXNzTWV0YS5hZGRTbG90Rm9yKGtleSk7XG4gICAgcmV0dXJuIG5ldyBDb21wdXRlZCh0aGlzLmFjY2Vzc29yKTtcbiAgfVxuXG4gIHByb3BlcnR5KC4uLnBhdGhzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZGVwcyA9IHBhdGhzLm1hcChkID0+IGQuc3BsaXQoJy4nKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtZXRhKG9iamVjdDogT2JqZWN0KSB7XG4gICAgdGhpcy5tZXRhZGF0YSA9IG9iamVjdDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHZvbGF0aWxlKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbmNsYXNzIENvbXB1dGVkIGltcGxlbWVudHMgRGVzY3JpcHRvciB7XG4gIGVudW1lcmFibGU6IGJvb2xlYW47XG4gIGNvbmZpZ3VyYWJsZTogYm9vbGVhbjtcblxuICBwcml2YXRlIGFjY2Vzc29yOiBDb21wdXRlZERlc2NyaXB0b3I7XG4gIFtERVNDUklQVE9SXSA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoYWNjZXNzb3I6IENvbXB1dGVkRGVzY3JpcHRvcikge1xuICAgIHRoaXMuYWNjZXNzb3IgPSBhY2Nlc3NvcjtcbiAgICB0aGlzLmVudW1lcmFibGUgPSBmYWxzZTtcbiAgICB0aGlzLmNvbmZpZ3VyYWJsZSA9IGZhbHNlO1xuICB9XG5cbiAgZGVmaW5lKHByb3RvdHlwZTogT2JqZWN0LCBrZXk6IHN0cmluZywgaG9tZTogT2JqZWN0KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwga2V5LCB3cmFwQWNjZXNzb3IoaG9tZSwga2V5LCB0aGlzLmFjY2Vzc29yKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gd3JhcEFjY2Vzc29yKFxuICBob21lOiBPYmplY3QsXG4gIGFjY2Vzc29yTmFtZTogc3RyaW5nLFxuICBfZGVzYzogQ29tcHV0ZWREZXNjcmlwdG9yXG4pOiBQcm9wZXJ0eURlc2NyaXB0b3Ige1xuICBsZXQgc3VwZXJEZXNjID0gZ2V0UHJvcGVydHlEZXNjcmlwdG9yKGhvbWUsIGFjY2Vzc29yTmFtZSk7XG5cbiAgbGV0IG9yaWdpbmFsR2V0OiBDb21wdXRlZEdldENhbGxiYWNrO1xuICBsZXQgb3JpZ2luYWxTZXQ6IENvbXB1dGVkU2V0Q2FsbGJhY2s7XG5cbiAgbGV0IGRlc2M6IFByb3BlcnR5RGVzY3JpcHRvciA9IHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgfTtcblxuICBsZXQgZ2V0ID0gX2Rlc2MuZ2V0O1xuXG4gIGlmIChnZXQgJiYgZ2V0Lmxlbmd0aCA+IDApIHtcbiAgICBvcmlnaW5hbEdldCA9IGZ1bmN0aW9uKHRoaXM6IGFueSkge1xuICAgICAgcmV0dXJuIChnZXQgYXMgYW55KS5jYWxsKHRoaXMsIGFjY2Vzc29yTmFtZSk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBvcmlnaW5hbEdldCA9IF9kZXNjLmdldCBhcyBDb21wdXRlZEdldENhbGxiYWNrO1xuICB9XG5cbiAgbGV0IHNldCA9IF9kZXNjLnNldDtcblxuICBpZiAoc2V0ICYmIHNldC5sZW5ndGggPiAxKSB7XG4gICAgb3JpZ2luYWxTZXQgPSBmdW5jdGlvbih0aGlzOiBhbnksIHZhbHVlOiBhbnkpIHtcbiAgICAgIHJldHVybiAoc2V0IGFzIGFueSkuY2FsbCh0aGlzLCBhY2Nlc3Nvck5hbWUsIHZhbHVlKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIG9yaWdpbmFsU2V0ID0gX2Rlc2Muc2V0IGFzIENvbXB1dGVkR2V0Q2FsbGJhY2s7XG4gIH1cblxuICBsZXQgY2FjaGVHZXQgPSBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICBpZiAoTWV0YS5leGlzdHModGhpcykpIHtcbiAgICAgIGxldCBzbG90ID0gTWV0YS5mb3IodGhpcykuZ2V0U2xvdHMoKVthY2Nlc3Nvck5hbWVdO1xuICAgICAgaWYgKHNsb3QgIT09IEVNUFRZX0NBQ0hFKSByZXR1cm4gc2xvdDtcbiAgICB9XG5cbiAgICByZXR1cm4gb3JpZ2luYWxHZXQuY2FsbCh0aGlzKTtcbiAgfTtcblxuICBsZXQgY2FjaGVTZXQ6ICh2YWx1ZTogYW55KSA9PiB2b2lkO1xuXG4gIGlmIChvcmlnaW5hbFNldCkge1xuICAgIGNhY2hlU2V0ID0gZnVuY3Rpb24odGhpczogYW55LCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICBsZXQgbWV0YSA9IE1ldGEuZm9yKHRoaXMpO1xuICAgICAgbGV0IHNsb3RzID0gbWV0YS5nZXRTbG90cygpO1xuXG4gICAgICBsZXQgcmV0ID0gb3JpZ2luYWxTZXQuY2FsbCh0aGlzLCB2YWx1ZSk7XG5cbiAgICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzbG90c1thY2Nlc3Nvck5hbWVdID0gcmV0O1xuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgY2FjaGVTZXQgPSBmdW5jdGlvbih0aGlzOiBhbnksIHZhbHVlOiBhbnkpIHtcbiAgICAgIGxldCBtZXRhID0gTWV0YS5mb3IodGhpcyk7XG4gICAgICBsZXQgc2xvdHMgPSBtZXRhLmdldFNsb3RzKCk7XG4gICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgc2xvdHNbYWNjZXNzb3JOYW1lXSA9IHZhbHVlO1xuICAgIH07XG4gIH1cblxuICBpZiAoIXN1cGVyRGVzYyB8fCAndmFsdWUnIGluIHN1cGVyRGVzYykge1xuICAgIGRlc2MuZ2V0ID0gY2FjaGVHZXQ7XG4gICAgZGVzYy5zZXQgPSBjYWNoZVNldDtcbiAgICByZXR1cm4gZGVzYztcbiAgfVxuXG4gIGRlc2MuZ2V0ID0gZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgbGV0IGxhc3RTdXBlciA9IHRoaXMuX3N1cGVyO1xuICAgIHRoaXMuX3N1cGVyID0gZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgICByZXR1cm4gKHN1cGVyRGVzYyBhcyBhbnkpLmdldC5jYWxsKHRoaXMpO1xuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGNhY2hlR2V0LmNhbGwodGhpcyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX3N1cGVyID0gbGFzdFN1cGVyO1xuICAgIH1cbiAgfTtcblxuICBkZXNjLnNldCA9IGZ1bmN0aW9uKHRoaXM6IGFueSwgdmFsOiBhbnkpIHtcbiAgICBsZXQgbGFzdFN1cGVyID0gdGhpcy5fc3VwZXI7XG4gICAgdGhpcy5fc3VwZXIgPSBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICAgIHJldHVybiAoc3VwZXJEZXNjIGFzIGFueSkuc2V0LmNhbGwodGhpcywgdmFsKTtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjYWNoZVNldC5jYWxsKHRoaXMsIHZhbCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX3N1cGVyID0gbGFzdFN1cGVyO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gZGVzYztcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHN1YmplY3Q6IGFueSwgbmFtZTogc3RyaW5nKSB7XG4gIGxldCBwZCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc3ViamVjdCwgbmFtZSk7XG4gIGxldCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihzdWJqZWN0KTtcbiAgd2hpbGUgKHR5cGVvZiBwZCA9PT0gJ3VuZGVmaW5lZCcgJiYgcHJvdG8gIT09IG51bGwpIHtcbiAgICBwZCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIG5hbWUpO1xuICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcbiAgfVxuICByZXR1cm4gcGQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlZChkZXNjOiBDb21wdXRlZERlc2NyaXB0b3IpOiBDb21wdXRlZEJsdWVwcmludDtcbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlZChcbiAgZ2V0dGVyOiBDb21wdXRlZEdldENhbGxiYWNrIHwgTGVnYWN5Q29tcHV0ZWRHZXRDYWxsYmFja1xuKTogQ29tcHV0ZWRCbHVlcHJpbnQ7XG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZWQoLi4uYXJnczogYW55W10pOiBDb21wdXRlZEJsdWVwcmludDtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVkKC4uLmFyZ3M6IGFueVtdKSB7XG4gIGxldCBsYXN0OiBDb21wdXRlZEFyZ3VtZW50ID0gYXJncy5wb3AoKTtcbiAgbGV0IGRlcHMgPSBhcmdzO1xuXG4gIGlmICh0eXBlb2YgbGFzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBuZXcgQ29tcHV0ZWRCbHVlcHJpbnQoe1xuICAgICAgZ2V0OiBsYXN0IGFzIENvbXB1dGVkR2V0Q2FsbGJhY2sgfCBMZWdhY3lDb21wdXRlZEdldENhbGxiYWNrLFxuICAgIH0pLnByb3BlcnR5KC4uLmRlcHMpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBsYXN0ID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBuZXcgQ29tcHV0ZWRCbHVlcHJpbnQobGFzdCBhcyBDb21wdXRlZERlc2NyaXB0b3IpLnByb3BlcnR5KC4uLmRlcHMpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NvbXB1dGVkIGV4cGVjdHMgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QgYXMgbGFzdCBhcmd1bWVudCcpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZlciguLi5fYXJnczogYW55W10pIHt9XG4iXSwic291cmNlUm9vdCI6IiJ9

@@ -1,5 +0,5 @@

'use strict';
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
value: true
});

@@ -9,56 +9,74 @@ exports.aliasMethod = aliasMethod;

var _mixin = require('./mixin');
var _mixin = require("./mixin");
var _computed = require('./computed');
var _computed = require("./computed");
class AliasMethodDescriptor extends _mixin.Descriptor {
constructor(name) {
super();
this.name = name;
}
define(target, key, _home) {
let name = this.name;
Object.defineProperty(target, key, {
enumerable: true,
configurable: true,
get() {
return this[name];
}
});
}
constructor(name) {
super();
this.name = name;
}
define(target, key, _home) {
let name = this.name;
Object.defineProperty(target, key, {
enumerable: true,
configurable: true,
get() {
return this[name];
}
});
}
}
class AliasMethodBlueprint extends _mixin.Blueprint {
constructor(name) {
super();
this.name = name;
}
descriptor(_target, _key, _meta) {
return new AliasMethodDescriptor(this.name);
}
constructor(name) {
super();
this.name = name;
}
descriptor(_target, _key, _meta) {
return new AliasMethodDescriptor(this.name);
}
}
function aliasMethod(name) {
return new AliasMethodBlueprint(name);
return new AliasMethodBlueprint(name);
}
class AliasBlueprint extends _computed.ComputedBlueprint {
constructor(name) {
let parent = name.slice(0, -1);
let last = name[name.length - 1];
let get = function () {
return name.reduce((obj, n) => obj[n], this);
};
let set = function (value) {
let p = parent.reduce((obj, n) => obj[n], this);
p[last] = value;
};
super({ get, set }, [name]);
this.name = name;
}
descriptor(target, key, meta) {
if (this.name[0] === key) throw new Error(`Setting alias '${key}' on self`);
return super.descriptor(target, key, meta);
}
constructor(name) {
let parent = name.slice(0, -1);
let last = name[name.length - 1];
let get = function () {
return name.reduce((obj, n) => obj[n], this);
};
let set = function (value) {
let p = parent.reduce((obj, n) => obj[n], this);
p[last] = value;
};
super({
get,
set
}, [name]);
this.name = name;
}
descriptor(target, key, meta) {
if (this.name[0] === key) throw new Error(`Setting alias '${key}' on self`);
return super.descriptor(target, key, meta);
}
}
function alias(name) {
return new AliasBlueprint(name.split('.'));
return new AliasBlueprint(name.split('.'));
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvZGVzY3JpcHRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7UUF1Q00sVyxHQUFBLFc7UUE4QkEsSyxHQUFBLEs7Ozs7QUFuRU47O0FBR0EsTUFBQSxxQkFBQSxTQUFBLGlCQUFBLENBQThDO0FBRzVDLGdCQUFBLElBQUEsRUFBd0I7QUFDdEI7QUFDQSxhQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0Q7QUFFRCxXQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsS0FBQSxFQUErQztBQUM3QyxZQUFJLE9BQU8sS0FBWCxJQUFBO0FBRUEsZUFBQSxjQUFBLENBQUEsTUFBQSxFQUFBLEdBQUEsRUFBbUM7QUFDakMsd0JBRGlDLElBQUE7QUFFakMsMEJBRmlDLElBQUE7QUFHakMsa0JBQUc7QUFDRCx1QkFBTyxLQUFQLElBQU8sQ0FBUDtBQUNEO0FBTGdDLFNBQW5DO0FBT0Q7QUFsQjJDO0FBcUI5QyxNQUFBLG9CQUFBLFNBQUEsZ0JBQUEsQ0FBNEM7QUFHMUMsZ0JBQUEsSUFBQSxFQUF3QjtBQUN0QjtBQUNBLGFBQUEsSUFBQSxHQUFBLElBQUE7QUFDRDtBQUVELGVBQUEsT0FBQSxFQUFBLElBQUEsRUFBQSxLQUFBLEVBQTBEO0FBQ3hELGVBQU8sSUFBQSxxQkFBQSxDQUEwQixLQUFqQyxJQUFPLENBQVA7QUFDRDtBQVZ5QztBQWF0QyxTQUFBLFdBQUEsQ0FBQSxJQUFBLEVBQWtDO0FBQ3RDLFdBQU8sSUFBQSxvQkFBQSxDQUFQLElBQU8sQ0FBUDtBQUNEO0FBRUQsTUFBQSxjQUFBLFNBQUEsMkJBQUEsQ0FBOEM7QUFHNUMsZ0JBQUEsSUFBQSxFQUEwQjtBQUN4QixZQUFJLFNBQVMsS0FBQSxLQUFBLENBQUEsQ0FBQSxFQUFjLENBQTNCLENBQWEsQ0FBYjtBQUNBLFlBQUksT0FBTyxLQUFLLEtBQUEsTUFBQSxHQUFoQixDQUFXLENBQVg7QUFFQSxZQUFJLE1BQU0sWUFBQTtBQUNSLG1CQUFPLEtBQUEsTUFBQSxDQUFZLENBQUEsR0FBQSxFQUFBLENBQUEsS0FBWSxJQUF4QixDQUF3QixDQUF4QixFQUFQLElBQU8sQ0FBUDtBQURGLFNBQUE7QUFJQSxZQUFJLE1BQU0sVUFBQSxLQUFBLEVBQThCO0FBQ3RDLGdCQUFJLElBQUksT0FBQSxNQUFBLENBQWMsQ0FBQSxHQUFBLEVBQUEsQ0FBQSxLQUFZLElBQTFCLENBQTBCLENBQTFCLEVBQVIsSUFBUSxDQUFSO0FBQ0EsY0FBQSxJQUFBLElBQUEsS0FBQTtBQUZGLFNBQUE7QUFLQSxjQUFNLEVBQUEsR0FBQSxFQUFOLEdBQU0sRUFBTixFQUFvQixDQUFwQixJQUFvQixDQUFwQjtBQUNBLGFBQUEsSUFBQSxHQUFBLElBQUE7QUFDRDtBQUVELGVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLEVBQXVEO0FBQ3JELFlBQUksS0FBQSxJQUFBLENBQUEsQ0FBQSxNQUFKLEdBQUEsRUFBMEIsTUFBTSxJQUFBLEtBQUEsQ0FBVSxrQkFBa0IsR0FBbEMsV0FBTSxDQUFOO0FBQzFCLGVBQU8sTUFBQSxVQUFBLENBQUEsTUFBQSxFQUFBLEdBQUEsRUFBUCxJQUFPLENBQVA7QUFDRDtBQXZCMkM7QUEwQnhDLFNBQUEsS0FBQSxDQUFBLElBQUEsRUFBNEI7QUFDaEMsV0FBTyxJQUFBLGNBQUEsQ0FBbUIsS0FBQSxLQUFBLENBQTFCLEdBQTBCLENBQW5CLENBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJsdWVwcmludCwgRGVzY3JpcHRvciB9IGZyb20gJy4vbWl4aW4nO1xuaW1wb3J0IHsgQ2xhc3NNZXRhIH0gZnJvbSAnLi9vYmplY3QnO1xuaW1wb3J0IHsgQ29tcHV0ZWRCbHVlcHJpbnQgfSBmcm9tICcuL2NvbXB1dGVkJztcbmltcG9ydCB7IERpY3QgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcblxuY2xhc3MgQWxpYXNNZXRob2REZXNjcmlwdG9yIGV4dGVuZHMgRGVzY3JpcHRvciB7XG4gIHByaXZhdGUgbmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIGRlZmluZSh0YXJnZXQ6IERpY3QsIGtleTogc3RyaW5nLCBfaG9tZTogT2JqZWN0KSB7XG4gICAgbGV0IG5hbWUgPSB0aGlzLm5hbWUgYXMgc3RyaW5nO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0KHRoaXM6IHR5cGVvZiB0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbbmFtZV07XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbmNsYXNzIEFsaWFzTWV0aG9kQmx1ZXByaW50IGV4dGVuZHMgQmx1ZXByaW50IHtcbiAgcHJpdmF0ZSBuYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgZGVzY3JpcHRvcihfdGFyZ2V0OiBPYmplY3QsIF9rZXk6IHN0cmluZywgX21ldGE6IENsYXNzTWV0YSk6IERlc2NyaXB0b3Ige1xuICAgIHJldHVybiBuZXcgQWxpYXNNZXRob2REZXNjcmlwdG9yKHRoaXMubmFtZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsaWFzTWV0aG9kKG5hbWU6IHN0cmluZyk6IEJsdWVwcmludCB7XG4gIHJldHVybiBuZXcgQWxpYXNNZXRob2RCbHVlcHJpbnQobmFtZSk7XG59XG5cbmNsYXNzIEFsaWFzQmx1ZXByaW50IGV4dGVuZHMgQ29tcHV0ZWRCbHVlcHJpbnQge1xuICBwcml2YXRlIG5hbWU6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZ1tdKSB7XG4gICAgbGV0IHBhcmVudCA9IG5hbWUuc2xpY2UoMCwgLTEpO1xuICAgIGxldCBsYXN0ID0gbmFtZVtuYW1lLmxlbmd0aCAtIDFdO1xuXG4gICAgbGV0IGdldCA9IGZ1bmN0aW9uKHRoaXM6IGFueSkge1xuICAgICAgcmV0dXJuIG5hbWUucmVkdWNlKChvYmosIG4pID0+IG9ialtuXSwgdGhpcyk7XG4gICAgfTtcblxuICAgIGxldCBzZXQgPSBmdW5jdGlvbih0aGlzOiBhbnksIHZhbHVlOiBhbnkpIHtcbiAgICAgIGxldCBwID0gcGFyZW50LnJlZHVjZSgob2JqLCBuKSA9PiBvYmpbbl0sIHRoaXMpO1xuICAgICAgcFtsYXN0XSA9IHZhbHVlO1xuICAgIH07XG5cbiAgICBzdXBlcih7IGdldCwgc2V0IH0sIFtuYW1lXSk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIGRlc2NyaXB0b3IodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nLCBtZXRhOiBDbGFzc01ldGEpOiBEZXNjcmlwdG9yIHtcbiAgICBpZiAodGhpcy5uYW1lWzBdID09PSBrZXkpIHRocm93IG5ldyBFcnJvcihgU2V0dGluZyBhbGlhcyAnJHtrZXl9JyBvbiBzZWxmYCk7XG4gICAgcmV0dXJuIHN1cGVyLmRlc2NyaXB0b3IodGFyZ2V0LCBrZXksIG1ldGEpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGlhcyhuYW1lOiBzdHJpbmcpOiBCbHVlcHJpbnQge1xuICByZXR1cm4gbmV3IEFsaWFzQmx1ZXByaW50KG5hbWUuc3BsaXQoJy4nKSk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvZGVzY3JpcHRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFHQSxNQUFBLHFCQUFBLFNBQUEsaUJBQUEsQ0FBOEM7QUFHNUMsRUFBQSxXQUFBLENBQUEsSUFBQSxFQUF3QjtBQUN0QjtBQUNBLFNBQUEsSUFBQSxHQUFBLElBQUE7QUFDRDs7QUFFRCxFQUFBLE1BQU0sQ0FBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLEtBQUEsRUFBeUM7QUFDN0MsUUFBSSxJQUFJLEdBQUcsS0FBWCxJQUFBO0FBRUEsSUFBQSxNQUFNLENBQU4sY0FBQSxDQUFBLE1BQUEsRUFBQSxHQUFBLEVBQW1DO0FBQ2pDLE1BQUEsVUFBVSxFQUR1QixJQUFBO0FBRWpDLE1BQUEsWUFBWSxFQUZxQixJQUFBOztBQUdqQyxNQUFBLEdBQUcsR0FBQTtBQUNELGVBQU8sS0FBUCxJQUFPLENBQVA7QUFDRDs7QUFMZ0MsS0FBbkM7QUFPRDs7QUFsQjJDOztBQXFCOUMsTUFBQSxvQkFBQSxTQUFBLGdCQUFBLENBQTRDO0FBRzFDLEVBQUEsV0FBQSxDQUFBLElBQUEsRUFBd0I7QUFDdEI7QUFDQSxTQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0Q7O0FBRUQsRUFBQSxVQUFVLENBQUEsT0FBQSxFQUFBLElBQUEsRUFBQSxLQUFBLEVBQWdEO0FBQ3hELFdBQU8sSUFBQSxxQkFBQSxDQUEwQixLQUFqQyxJQUFPLENBQVA7QUFDRDs7QUFWeUM7O0FBYXRDLFNBQUEsV0FBQSxDQUFBLElBQUEsRUFBa0M7QUFDdEMsU0FBTyxJQUFBLG9CQUFBLENBQVAsSUFBTyxDQUFQO0FBQ0Q7O0FBRUQsTUFBQSxjQUFBLFNBQUEsMkJBQUEsQ0FBOEM7QUFHNUMsRUFBQSxXQUFBLENBQUEsSUFBQSxFQUEwQjtBQUN4QixRQUFJLE1BQU0sR0FBRyxJQUFJLENBQUosS0FBQSxDQUFBLENBQUEsRUFBYyxDQUEzQixDQUFhLENBQWI7QUFDQSxRQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFKLE1BQUEsR0FBaEIsQ0FBZSxDQUFmOztBQUVBLFFBQUksR0FBRyxHQUFHLFlBQUE7QUFDUixhQUFPLElBQUksQ0FBSixNQUFBLENBQVksQ0FBQSxHQUFBLEVBQUEsQ0FBQSxLQUFZLEdBQUcsQ0FBM0IsQ0FBMkIsQ0FBM0IsRUFBUCxJQUFPLENBQVA7QUFERixLQUFBOztBQUlBLFFBQUksR0FBRyxHQUFHLFVBQUEsS0FBQSxFQUE4QjtBQUN0QyxVQUFJLENBQUMsR0FBRyxNQUFNLENBQU4sTUFBQSxDQUFjLENBQUEsR0FBQSxFQUFBLENBQUEsS0FBWSxHQUFHLENBQTdCLENBQTZCLENBQTdCLEVBQVIsSUFBUSxDQUFSO0FBQ0EsTUFBQSxDQUFDLENBQUQsSUFBQyxDQUFELEdBQUEsS0FBQTtBQUZGLEtBQUE7O0FBS0EsVUFBTTtBQUFBLE1BQUEsR0FBQTtBQUFPLE1BQUE7QUFBUCxLQUFOLEVBQW9CLENBQXBCLElBQW9CLENBQXBCO0FBQ0EsU0FBQSxJQUFBLEdBQUEsSUFBQTtBQUNEOztBQUVELEVBQUEsVUFBVSxDQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxFQUE2QztBQUNyRCxRQUFJLEtBQUEsSUFBQSxDQUFBLENBQUEsTUFBSixHQUFBLEVBQTBCLE1BQU0sSUFBQSxLQUFBLENBQVUsa0JBQWtCLEdBQWxDLFdBQU0sQ0FBTjtBQUMxQixXQUFPLE1BQUEsVUFBQSxDQUFBLE1BQUEsRUFBQSxHQUFBLEVBQVAsSUFBTyxDQUFQO0FBQ0Q7O0FBdkIyQzs7QUEwQnhDLFNBQUEsS0FBQSxDQUFBLElBQUEsRUFBNEI7QUFDaEMsU0FBTyxJQUFBLGNBQUEsQ0FBbUIsSUFBSSxDQUFKLEtBQUEsQ0FBMUIsR0FBMEIsQ0FBbkIsQ0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmx1ZXByaW50LCBEZXNjcmlwdG9yIH0gZnJvbSAnLi9taXhpbic7XG5pbXBvcnQgeyBDbGFzc01ldGEgfSBmcm9tICcuL29iamVjdCc7XG5pbXBvcnQgeyBDb21wdXRlZEJsdWVwcmludCB9IGZyb20gJy4vY29tcHV0ZWQnO1xuaW1wb3J0IHsgRGljdCB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuXG5jbGFzcyBBbGlhc01ldGhvZERlc2NyaXB0b3IgZXh0ZW5kcyBEZXNjcmlwdG9yIHtcbiAgcHJpdmF0ZSBuYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgZGVmaW5lKHRhcmdldDogRGljdCwga2V5OiBzdHJpbmcsIF9ob21lOiBPYmplY3QpIHtcbiAgICBsZXQgbmFtZSA9IHRoaXMubmFtZSBhcyBzdHJpbmc7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQodGhpczogdHlwZW9mIHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGhpc1tuYW1lXTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuY2xhc3MgQWxpYXNNZXRob2RCbHVlcHJpbnQgZXh0ZW5kcyBCbHVlcHJpbnQge1xuICBwcml2YXRlIG5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBkZXNjcmlwdG9yKF90YXJnZXQ6IE9iamVjdCwgX2tleTogc3RyaW5nLCBfbWV0YTogQ2xhc3NNZXRhKTogRGVzY3JpcHRvciB7XG4gICAgcmV0dXJuIG5ldyBBbGlhc01ldGhvZERlc2NyaXB0b3IodGhpcy5uYW1lKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxpYXNNZXRob2QobmFtZTogc3RyaW5nKTogQmx1ZXByaW50IHtcbiAgcmV0dXJuIG5ldyBBbGlhc01ldGhvZEJsdWVwcmludChuYW1lKTtcbn1cblxuY2xhc3MgQWxpYXNCbHVlcHJpbnQgZXh0ZW5kcyBDb21wdXRlZEJsdWVwcmludCB7XG4gIHByaXZhdGUgbmFtZTogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nW10pIHtcbiAgICBsZXQgcGFyZW50ID0gbmFtZS5zbGljZSgwLCAtMSk7XG4gICAgbGV0IGxhc3QgPSBuYW1lW25hbWUubGVuZ3RoIC0gMV07XG5cbiAgICBsZXQgZ2V0ID0gZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgICByZXR1cm4gbmFtZS5yZWR1Y2UoKG9iaiwgbikgPT4gb2JqW25dLCB0aGlzKTtcbiAgICB9O1xuXG4gICAgbGV0IHNldCA9IGZ1bmN0aW9uKHRoaXM6IGFueSwgdmFsdWU6IGFueSkge1xuICAgICAgbGV0IHAgPSBwYXJlbnQucmVkdWNlKChvYmosIG4pID0+IG9ialtuXSwgdGhpcyk7XG4gICAgICBwW2xhc3RdID0gdmFsdWU7XG4gICAgfTtcblxuICAgIHN1cGVyKHsgZ2V0LCBzZXQgfSwgW25hbWVdKTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgZGVzY3JpcHRvcih0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIG1ldGE6IENsYXNzTWV0YSk6IERlc2NyaXB0b3Ige1xuICAgIGlmICh0aGlzLm5hbWVbMF0gPT09IGtleSkgdGhyb3cgbmV3IEVycm9yKGBTZXR0aW5nIGFsaWFzICcke2tleX0nIG9uIHNlbGZgKTtcbiAgICByZXR1cm4gc3VwZXIuZGVzY3JpcHRvcih0YXJnZXQsIGtleSwgbWV0YSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsaWFzKG5hbWU6IHN0cmluZyk6IEJsdWVwcmludCB7XG4gIHJldHVybiBuZXcgQWxpYXNCbHVlcHJpbnQobmFtZS5zcGxpdCgnLicpKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=

@@ -1,7 +0,6 @@

'use strict';
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
value: true
});
exports.AccessorBlueprint = exports.DataBlueprint = exports.Mixin = exports.Blueprint = exports.Descriptor = exports.BLUEPRINT = exports.DESCRIPTOR = undefined;
exports.extend = extend;

@@ -11,273 +10,385 @@ exports.relinkSubclasses = relinkSubclasses;

exports.wrapMethod = wrapMethod;
exports.AccessorBlueprint = exports.DataBlueprint = exports.Mixin = exports.Blueprint = exports.Descriptor = exports.BLUEPRINT = exports.DESCRIPTOR = void 0;
var _objectReference = require('@glimmer/object-reference');
var _objectReference = require("@glimmer/object-reference");
var _util = require('@glimmer/util');
var _util = require("@glimmer/util");
var _object = require('./object');
var _object = require("./object");
var _utils = require('./utils');
var _utils = require("./utils");
var _a, _b;
const { isArray } = Array;
const DESCRIPTOR = exports.DESCRIPTOR = (0, _util.symbol)('DESCRIPTOR');
const BLUEPRINT = exports.BLUEPRINT = (0, _util.symbol)('BLUEPRINT');
const {
isArray
} = Array;
const DESCRIPTOR = (0, _util.symbol)('DESCRIPTOR');
exports.DESCRIPTOR = DESCRIPTOR;
const BLUEPRINT = (0, _util.symbol)('BLUEPRINT');
exports.BLUEPRINT = BLUEPRINT;
class Descriptor {
constructor() {
this[_a] = true;
}
constructor() {
this[_a] = true;
}
}
exports.Descriptor = Descriptor;
_a = DESCRIPTOR;
class Blueprint {
constructor() {
this[_b] = true;
}
constructor() {
this[_b] = true;
}
}
exports.Blueprint = Blueprint;
_b = BLUEPRINT;
class Mixin {
constructor(extensions, mixins) {
this.extensions = null; // assigned before used
this.concatenatedProperties = [];
this.mergedProperties = [];
this.dependencies = [];
this.reopen(extensions);
this.dependencies.push(...mixins);
constructor(extensions, mixins) {
this.extensions = null; // assigned before used
this.concatenatedProperties = [];
this.mergedProperties = [];
this.dependencies = [];
this.reopen(extensions);
this.dependencies.push(...mixins);
}
static create(...args) {
let extensions = args[args.length - 1];
if (args.length === 0) {
return new this({}, []);
} else if (extensions instanceof Mixin) {
return new this({}, args);
} else {
let deps = args.slice(0, -1).map(toMixin);
return new this(extensions, deps);
}
static create(...args) {
let extensions = args[args.length - 1];
if (args.length === 0) {
return new this({}, []);
} else if (extensions instanceof Mixin) {
return new this({}, args);
} else {
let deps = args.slice(0, -1).map(toMixin);
return new this(extensions, deps);
}
}
static mixins(obj) {
if (typeof obj !== 'object' || obj === null) return [];
let meta = _object.ClassMeta.for(obj);
if (!meta) return [];
return meta.getAppliedMixins();
}
detect(obj) {
if (typeof obj !== 'object' || obj === null) return false;
if (obj instanceof Mixin) {
return obj.dependencies.indexOf(this) !== -1;
}
static mixins(obj) {
if (typeof obj !== 'object' || obj === null) return [];
let meta = _object.ClassMeta.for(obj);
if (!meta) return [];
return meta.getAppliedMixins();
let meta = _object.ClassMeta.for(obj);
return !!meta && meta.hasAppliedMixin(this);
}
reopen(extensions) {
if (this.extensions) {
this.dependencies.push(toMixin(this.extensions));
}
detect(obj) {
if (typeof obj !== 'object' || obj === null) return false;
if (obj instanceof Mixin) {
return obj.dependencies.indexOf(this) !== -1;
}
let meta = _object.ClassMeta.for(obj);
return !!meta && meta.hasAppliedMixin(this);
if (typeof extensions === 'object' && 'concatenatedProperties' in extensions) {
let concat;
let rawConcat = extensions.concatenatedProperties;
if (isArray(rawConcat)) {
concat = rawConcat.slice();
} else if (rawConcat === null || rawConcat === undefined) {
concat = [];
} else {
concat = [rawConcat];
}
delete extensions.concatenatedProperties;
this.concatenatedProperties = concat;
}
reopen(extensions) {
if (this.extensions) {
this.dependencies.push(toMixin(this.extensions));
}
if (typeof extensions === 'object' && 'concatenatedProperties' in extensions) {
let concat;
let rawConcat = extensions.concatenatedProperties;
if (isArray(rawConcat)) {
concat = rawConcat.slice();
} else if (rawConcat === null || rawConcat === undefined) {
concat = [];
} else {
concat = [rawConcat];
}
delete extensions.concatenatedProperties;
this.concatenatedProperties = concat;
}
if (typeof extensions === 'object' && 'mergedProperties' in extensions) {
let merged;
let rawMerged = extensions.mergedProperties;
if (isArray(rawMerged)) {
merged = rawMerged.slice();
} else if (rawMerged === null || rawMerged === undefined) {
merged = [];
} else {
merged = [rawMerged];
}
delete extensions.mergedProperties;
this.mergedProperties = merged;
}
let normalized = Object.keys(extensions).reduce((obj, key) => {
let value = extensions[key];
switch (typeof value) {
case 'function':
obj[key] = new MethodBlueprint({ value });
break;
case 'object':
if (value && BLUEPRINT in value) {
obj[key] = value;
break;
}
/* falls through */
default:
obj[key] = new DataBlueprint({ value });
}
return obj;
}, (0, _util.dict)());
this.extensions = (0, _util.dict)();
(0, _util.assign)(this.extensions, (0, _object.turbocharge)(normalized));
if (typeof extensions === 'object' && 'mergedProperties' in extensions) {
let merged;
let rawMerged = extensions.mergedProperties;
if (isArray(rawMerged)) {
merged = rawMerged.slice();
} else if (rawMerged === null || rawMerged === undefined) {
merged = [];
} else {
merged = [rawMerged];
}
delete extensions.mergedProperties;
this.mergedProperties = merged;
}
apply(target) {
let meta = target[_objectReference.CLASS_META] = target[_objectReference.CLASS_META] || new _object.ClassMeta();
this.dependencies.forEach(m => m.apply(target));
this.mergeProperties(target, target, meta);
meta.addMixin(this);
meta.seal();
meta.reseal(target);
return target;
}
extendPrototype(Original) {
Original.prototype = Object.create(Original.prototype);
this.dependencies.forEach(m => m.extendPrototype(Original));
this.extendPrototypeOnto(Original, Original);
}
extendPrototypeOnto(Subclass, Parent) {
this.dependencies.forEach(m => m.extendPrototypeOnto(Subclass, Parent));
this.mergeProperties(Subclass.prototype, Parent.prototype, Subclass[_objectReference.CLASS_META]);
Subclass[_objectReference.CLASS_META].addMixin(this);
}
extendStatic(Target) {
this.dependencies.forEach(m => m.extendStatic(Target));
this.mergeProperties(Target, Object.getPrototypeOf(Target), Target[_objectReference.CLASS_META][_objectReference.CLASS_META]);
Target[_objectReference.CLASS_META].addStaticMixin(this);
}
mergeProperties(target, parent, meta) {
if (meta.hasAppliedMixin(this)) return;
meta.addAppliedMixin(this);
this.mergedProperties.forEach(k => meta.addMergedProperty(k, parent[k]));
this.concatenatedProperties.forEach(k => meta.addConcatenatedProperty(k, []));
new ValueDescriptor({ value: meta.getConcatenatedProperties() }).define(target, 'concatenatedProperties');
new ValueDescriptor({ value: meta.getMergedProperties() }).define(target, 'mergedProperties');
Object.keys(this.extensions).forEach(key => {
let extension = this.extensions[key];
let desc = extension.descriptor(target, key, meta);
desc.define(target, key, parent);
});
new ValueDescriptor({ value: _utils.ROOT }).define(target, '_super');
}
let normalized = Object.keys(extensions).reduce((obj, key) => {
let value = extensions[key];
switch (typeof value) {
case 'function':
obj[key] = new MethodBlueprint({
value
});
break;
case 'object':
if (value && BLUEPRINT in value) {
obj[key] = value;
break;
}
/* falls through */
default:
obj[key] = new DataBlueprint({
value
});
}
return obj;
}, (0, _util.dict)());
this.extensions = (0, _util.dict)();
(0, _util.assign)(this.extensions, (0, _object.turbocharge)(normalized));
}
apply(target) {
let meta = target[_objectReference.CLASS_META] = target[_objectReference.CLASS_META] || new _object.ClassMeta();
this.dependencies.forEach(m => m.apply(target));
this.mergeProperties(target, target, meta);
meta.addMixin(this);
meta.seal();
meta.reseal(target);
return target;
}
extendPrototype(Original) {
Original.prototype = Object.create(Original.prototype);
this.dependencies.forEach(m => m.extendPrototype(Original));
this.extendPrototypeOnto(Original, Original);
}
extendPrototypeOnto(Subclass, Parent) {
this.dependencies.forEach(m => m.extendPrototypeOnto(Subclass, Parent));
this.mergeProperties(Subclass.prototype, Parent.prototype, Subclass[_objectReference.CLASS_META]);
Subclass[_objectReference.CLASS_META].addMixin(this);
}
extendStatic(Target) {
this.dependencies.forEach(m => m.extendStatic(Target));
this.mergeProperties(Target, Object.getPrototypeOf(Target), Target[_objectReference.CLASS_META][_objectReference.CLASS_META]);
Target[_objectReference.CLASS_META].addStaticMixin(this);
}
mergeProperties(target, parent, meta) {
if (meta.hasAppliedMixin(this)) return;
meta.addAppliedMixin(this);
this.mergedProperties.forEach(k => meta.addMergedProperty(k, parent[k]));
this.concatenatedProperties.forEach(k => meta.addConcatenatedProperty(k, []));
new ValueDescriptor({
value: meta.getConcatenatedProperties()
}).define(target, 'concatenatedProperties');
new ValueDescriptor({
value: meta.getMergedProperties()
}).define(target, 'mergedProperties');
Object.keys(this.extensions).forEach(key => {
let extension = this.extensions[key];
let desc = extension.descriptor(target, key, meta);
desc.define(target, key, parent);
});
new ValueDescriptor({
value: _utils.ROOT
}).define(target, '_super');
}
}
exports.Mixin = Mixin;
function extend(Parent, ...extensions) {
let Super = Parent;
let Subclass = class extends Super {};
Subclass[_objectReference.CLASS_META] = _object.InstanceMeta.fromParent(Parent[_objectReference.CLASS_META]);
let mixins = extensions.map(toMixin);
Parent[_objectReference.CLASS_META].addSubclass(Subclass);
mixins.forEach(m => Subclass[_objectReference.CLASS_META].addMixin(m));
_object.ClassMeta.applyAllMixins(Subclass, Parent);
return Subclass;
let Super = Parent;
let Subclass = class extends Super {};
Subclass[_objectReference.CLASS_META] = _object.InstanceMeta.fromParent(Parent[_objectReference.CLASS_META]);
let mixins = extensions.map(toMixin);
Parent[_objectReference.CLASS_META].addSubclass(Subclass);
mixins.forEach(m => Subclass[_objectReference.CLASS_META].addMixin(m));
_object.ClassMeta.applyAllMixins(Subclass, Parent);
return Subclass;
}
function relinkSubclasses(Parent) {
Parent[_objectReference.CLASS_META].getSubclasses().forEach(Subclass => {
Subclass[_objectReference.CLASS_META].reset(Parent[_objectReference.CLASS_META]);
Subclass.prototype = Object.create(Parent.prototype);
_object.ClassMeta.applyAllMixins(Subclass, Parent);
// recurse into sub-subclasses
relinkSubclasses(Subclass);
});
Parent[_objectReference.CLASS_META].getSubclasses().forEach(Subclass => {
Subclass[_objectReference.CLASS_META].reset(Parent[_objectReference.CLASS_META]);
Subclass.prototype = Object.create(Parent.prototype);
_object.ClassMeta.applyAllMixins(Subclass, Parent); // recurse into sub-subclasses
relinkSubclasses(Subclass);
});
}
function toMixin(extension) {
if (extension instanceof Mixin) return extension;else return new Mixin(extension, []);
if (extension instanceof Mixin) return extension;else return new Mixin(extension, []);
}
class ValueDescriptor extends Descriptor {
constructor({ enumerable = true, configurable = true, writable = true, value }) {
super();
this.enumerable = enumerable;
this.configurable = configurable;
this.writable = writable;
this.value = value;
}
define(target, key, _home) {
Object.defineProperty(target, key, {
enumerable: this.enumerable,
configurable: this.configurable,
writable: this.writable,
value: this.value
});
}
constructor({
enumerable = true,
configurable = true,
writable = true,
value
}) {
super();
this.enumerable = enumerable;
this.configurable = configurable;
this.writable = writable;
this.value = value;
}
define(target, key, _home) {
Object.defineProperty(target, key, {
enumerable: this.enumerable,
configurable: this.configurable,
writable: this.writable,
value: this.value
});
}
}
class DataBlueprint extends Blueprint {
constructor({ enumerable = true, configurable = true, writable = true, value }) {
super();
this.enumerable = enumerable;
this.configurable = configurable;
this.value = value;
this.writable = writable;
constructor({
enumerable = true,
configurable = true,
writable = true,
value
}) {
super();
this.enumerable = enumerable;
this.configurable = configurable;
this.value = value;
this.writable = writable;
}
descriptor(_target, key, classMeta) {
let {
enumerable,
configurable,
writable,
value
} = this;
if (classMeta.hasConcatenatedProperty(key)) {
classMeta.addConcatenatedProperty(key, value);
value = classMeta.getConcatenatedProperty(key);
} else if (classMeta.hasMergedProperty(key)) {
classMeta.addMergedProperty(key, value);
value = classMeta.getMergedProperty(key);
}
descriptor(_target, key, classMeta) {
let { enumerable, configurable, writable, value } = this;
if (classMeta.hasConcatenatedProperty(key)) {
classMeta.addConcatenatedProperty(key, value);
value = classMeta.getConcatenatedProperty(key);
} else if (classMeta.hasMergedProperty(key)) {
classMeta.addMergedProperty(key, value);
value = classMeta.getMergedProperty(key);
}
return new ValueDescriptor({ enumerable, configurable, writable, value });
}
return new ValueDescriptor({
enumerable,
configurable,
writable,
value
});
}
}
exports.DataBlueprint = DataBlueprint;
class AccessorBlueprint extends Blueprint {
constructor({ enumerable = true, configurable = true, get, set }) {
super();
this.enumerable = enumerable;
this.configurable = configurable;
this.get = get;
this.set = set;
}
descriptor(_target, _key, _classMeta) {
return new ValueDescriptor({
enumerable: this.enumerable,
configurable: this.configurable,
get: this.get,
set: this.set
});
}
constructor({
enumerable = true,
configurable = true,
get,
set
}) {
super();
this.enumerable = enumerable;
this.configurable = configurable;
this.get = get;
this.set = set;
}
descriptor(_target, _key, _classMeta) {
return new ValueDescriptor({
enumerable: this.enumerable,
configurable: this.configurable,
get: this.get,
set: this.set
});
}
}
exports.AccessorBlueprint = AccessorBlueprint;
class MethodDescriptor extends ValueDescriptor {
define(target, key, home) {
this.value = wrapMethod(home, key, this.value);
super.define(target, key, home);
}
define(target, key, home) {
this.value = wrapMethod(home, key, this.value);
super.define(target, key, home);
}
}
class MethodBlueprint extends DataBlueprint {
descriptor(target, key, classMeta) {
let desc = super.descriptor(target, key, classMeta);
return new MethodDescriptor(desc);
}
descriptor(target, key, classMeta) {
let desc = super.descriptor(target, key, classMeta);
return new MethodDescriptor(desc);
}
}
function wrapMethod(home, methodName, original) {
if (!(methodName in home)) return maybeWrap(original);
let superMethod = home[methodName];
let func = function (...args) {
if (!this) return original.apply(this, args);
let lastSuper = this._super;
this._super = superMethod;
try {
return original.apply(this, args);
} finally {
this._super = lastSuper;
}
};
func.__wrapped = true;
return func;
if (!(methodName in home)) return maybeWrap(original);
let superMethod = home[methodName];
let func = function (...args) {
if (!this) return original.apply(this, args);
let lastSuper = this._super;
this._super = superMethod;
try {
return original.apply(this, args);
} finally {
this._super = lastSuper;
}
};
func.__wrapped = true;
return func;
}
function maybeWrap(original) {
if ('__wrapped' in original) return original;
return function (...args) {
if (!this) return original.apply(this, args);
let lastSuper = this._super;
this._super = _utils.ROOT;
try {
return original.apply(this, args);
} finally {
this._super = lastSuper;
}
};
if ('__wrapped' in original) return original;
return function (...args) {
if (!this) return original.apply(this, args);
let lastSuper = this._super;
this._super = _utils.ROOT;
try {
return original.apply(this, args);
} finally {
this._super = lastSuper;
}
};
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvbWl4aW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O1FBaU1NLE0sR0FBQSxNO1FBa0JBLGdCLEdBQUEsZ0I7UUFZQSxPLEdBQUEsTztRQStHQSxVLEdBQUEsVTs7QUE5VU47O0FBQ0E7O0FBQ0E7O0FBT0E7Ozs7QUFHQSxNQUFNLEVBQUEsT0FBQSxLQUFOLEtBQUE7QUFFTyxNQUFNLGtDQUE0QixrQkFBbEMsWUFBa0MsQ0FBbEM7QUFDQSxNQUFNLGdDQUEyQixrQkFBakMsV0FBaUMsQ0FBakM7QUFFRCxNQUFBLFVBQUEsQ0FBMEI7QUFBaEMsa0JBQUE7QUFDRSxhQUFBLEVBQUEsSUFBQSxJQUFBO0FBRUQ7QUFIK0I7UUFBMUIsVSxHQUFBLFU7S0FDSCxVO0FBSUcsTUFBQSxTQUFBLENBQXlCO0FBQS9CLGtCQUFBO0FBQ0UsYUFBQSxFQUFBLElBQUEsSUFBQTtBQUVEO0FBSDhCO1FBQXpCLFMsR0FBQSxTO0tBQ0gsUztBQVdHLE1BQUEsS0FBQSxDQUFZO0FBNEJoQixnQkFBQSxVQUFBLEVBQUEsTUFBQSxFQUFtRDtBQTNCM0MsYUFBQSxVQUFBLEdBQUEsSUFBQSxDQTJCMkMsQ0EzQk47QUFDckMsYUFBQSxzQkFBQSxHQUFBLEVBQUE7QUFDQSxhQUFBLGdCQUFBLEdBQUEsRUFBQTtBQUNBLGFBQUEsWUFBQSxHQUFBLEVBQUE7QUF5Qk4sYUFBQSxNQUFBLENBQUEsVUFBQTtBQUNBLGFBQUEsWUFBQSxDQUFBLElBQUEsQ0FBdUIsR0FBdkIsTUFBQTtBQUNEO0FBekJELFdBQUEsTUFBQSxDQUFjLEdBQWQsSUFBQSxFQUE2QztBQUMzQyxZQUFJLGFBQWEsS0FBSyxLQUFBLE1BQUEsR0FBdEIsQ0FBaUIsQ0FBakI7QUFFQSxZQUFJLEtBQUEsTUFBQSxLQUFKLENBQUEsRUFBdUI7QUFDckIsbUJBQU8sSUFBQSxJQUFBLENBQUEsRUFBQSxFQUFQLEVBQU8sQ0FBUDtBQURGLFNB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QUEsVUFBQSxFQUFBLFFBQUEsRUFBc0Y7QUFDMUYsUUFBSSxFQUFHLGNBQVAsSUFBSSxDQUFKLEVBQXVDLE9BQU8sVUFBUCxRQUFPLENBQVA7QUFFdkMsUUFBSSxjQUFjLEtBQWxCLFVBQWtCLENBQWxCO0FBRUEsUUFBSSxPQUFPLFVBQThCLEdBQTlCLElBQUEsRUFBNEM7QUFDckQsWUFBSSxDQUFKLElBQUEsRUFBVyxPQUFPLFNBQUEsS0FBQSxDQUFBLElBQUEsRUFBUCxJQUFPLENBQVA7QUFFWCxZQUFJLFlBQVksS0FBaEIsTUFBQTtBQUNBLGFBQUEsTUFBQSxHQUFBLFdBQUE7QUFFQSxZQUFJO0FBQ0YsbUJBQU8sU0FBQSxLQUFBLENBQUEsSUFBQSxFQUFQLElBQU8sQ0FBUDtBQURGLFNBQUEsU0FFVTtBQUNSLGlCQUFBLE1BQUEsR0FBQSxTQUFBO0FBQ0Q7QUFWSCxLQUFBO0FBYUMsU0FBQSxTQUFBLEdBQUEsSUFBQTtBQUVELFdBQUEsSUFBQTtBQUNEO0FBRUQsU0FBQSxTQUFBLENBQUEsUUFBQSxFQUFxQztBQUNuQyxRQUFJLGVBQUosUUFBQSxFQUE2QixPQUFBLFFBQUE7QUFFN0IsV0FBTyxVQUE4QixHQUE5QixJQUFBLEVBQTRDO0FBQ2pELFlBQUksQ0FBSixJQUFBLEVBQVcsT0FBTyxTQUFBLEtBQUEsQ0FBQSxJQUFBLEVBQVAsSUFBTyxDQUFQO0FBRVgsWUFBSSxZQUFZLEtBQWhCLE1BQUE7QUFDQSxhQUFBLE1BQUEsR0FBQSxXQUFBO0FBRUEsWUFBSTtBQUNGLG1CQUFPLFNBQUEsS0FBQSxDQUFBLElBQUEsRUFBUCxJQUFPLENBQVA7QUFERixTQUFBLFNBRVU7QUFDUixpQkFBQSxNQUFBLEdBQUEsU0FBQTtBQUNEO0FBVkgsS0FBQTtBQVlEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ0xBU1NfTUVUQSB9IGZyb20gJ0BnbGltbWVyL29iamVjdC1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgZGljdCwgYXNzaWduLCBzeW1ib2wgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCBHbGltbWVyT2JqZWN0LCB7XG4gIEdsaW1tZXJPYmplY3RGYWN0b3J5LFxuICBDbGFzc01ldGEsXG4gIEluc3RhbmNlTWV0YSxcbiAgdHVyYm9jaGFyZ2UsXG59IGZyb20gJy4vb2JqZWN0JztcblxuaW1wb3J0IHsgUk9PVCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRGljdCB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuXG5jb25zdCB7IGlzQXJyYXkgfSA9IEFycmF5O1xuXG5leHBvcnQgY29uc3QgREVTQ1JJUFRPUjogdW5pcXVlIHN5bWJvbCA9IHN5bWJvbCgnREVTQ1JJUFRPUicpO1xuZXhwb3J0IGNvbnN0IEJMVUVQUklOVDogdW5pcXVlIHN5bWJvbCA9IHN5bWJvbCgnQkxVRVBSSU5UJyk7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEZXNjcmlwdG9yIHtcbiAgW0RFU0NSSVBUT1JdID0gdHJ1ZTtcbiAgYWJzdHJhY3QgZGVmaW5lKHByb3RvdHlwZTogT2JqZWN0LCBrZXk6IHN0cmluZywgaG9tZTogT2JqZWN0KTogdm9pZDtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJsdWVwcmludCB7XG4gIFtCTFVFUFJJTlRdID0gdHJ1ZTtcbiAgYWJzdHJhY3QgZGVzY3JpcHRvcih0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIGNsYXNzTWV0YTogQ2xhc3NNZXRhKTogRGVzY3JpcHRvcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHRlbnNpb25zIHtcbiAgY29uY2F0ZW5hdGVkUHJvcGVydGllcz86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbDtcbiAgbWVyZ2VkUHJvcGVydGllcz86IHN0cmluZ1tdIHwgc3RyaW5nO1xuICBfc3VwZXI/OiBGdW5jdGlvbjtcbiAgW2luZGV4OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBNaXhpbiB7XG4gIHByaXZhdGUgZXh0ZW5zaW9uczogRGljdDxhbnk+ID0gbnVsbCBhcyBhbnk7IC8vIGFzc2lnbmVkIGJlZm9yZSB1c2VkXG4gIHByaXZhdGUgY29uY2F0ZW5hdGVkUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBtZXJnZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIGRlcGVuZGVuY2llczogTWl4aW5bXSA9IFtdO1xuXG4gIHN0YXRpYyBjcmVhdGUoLi4uYXJnczogKE1peGluIHwgRXh0ZW5zaW9ucylbXSkge1xuICAgIGxldCBleHRlbnNpb25zID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbmV3IHRoaXMoe30sIFtdKTtcbiAgICB9IGVsc2UgaWYgKGV4dGVuc2lvbnMgaW5zdGFuY2VvZiBNaXhpbikge1xuICAgICAgcmV0dXJuIG5ldyB0aGlzKHt9LCBhcmdzIGFzIE1peGluW10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZGVwcyA9IGFyZ3Muc2xpY2UoMCwgLTEpLm1hcCh0b01peGluKTtcbiAgICAgIHJldHVybiBuZXcgdGhpcyhleHRlbnNpb25zIGFzIEV4dGVuc2lvbnMsIGRlcHMpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBtaXhpbnMob2JqOiBhbnkpOiBNaXhpbltdIHtcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSByZXR1cm4gW107XG5cbiAgICBsZXQgbWV0YSA9IENsYXNzTWV0YS5mb3Iob2JqKTtcbiAgICBpZiAoIW1ldGEpIHJldHVybiBbXTtcblxuICAgIHJldHVybiBtZXRhLmdldEFwcGxpZWRNaXhpbnMoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGV4dGVuc2lvbnM6IEV4dGVuc2lvbnMsIG1peGluczogTWl4aW5bXSkge1xuICAgIHRoaXMucmVvcGVuKGV4dGVuc2lvbnMpO1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzLnB1c2goLi4ubWl4aW5zKTtcbiAgfVxuXG4gIGRldGVjdChvYmo6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBvYmogPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBNaXhpbikge1xuICAgICAgcmV0dXJuIG9iai5kZXBlbmRlbmNpZXMuaW5kZXhPZih0aGlzKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgbGV0IG1ldGEgPSBDbGFzc01ldGEuZm9yKG9iaik7XG4gICAgcmV0dXJuICEhbWV0YSAmJiBtZXRhLmhhc0FwcGxpZWRNaXhpbih0aGlzKTtcbiAgfVxuXG4gIHJlb3BlbihleHRlbnNpb25zOiBFeHRlbnNpb25zKSB7XG4gICAgaWYgKHRoaXMuZXh0ZW5zaW9ucykge1xuICAgICAgdGhpcy5kZXBlbmRlbmNpZXMucHVzaCh0b01peGluKHRoaXMuZXh0ZW5zaW9ucykpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXh0ZW5zaW9ucyA9PT0gJ29iamVjdCcgJiYgJ2NvbmNhdGVuYXRlZFByb3BlcnRpZXMnIGluIGV4dGVuc2lvbnMpIHtcbiAgICAgIGxldCBjb25jYXQ6IHN0cmluZ1tdO1xuICAgICAgbGV0IHJhd0NvbmNhdCA9IGV4dGVuc2lvbnMuY29uY2F0ZW5hdGVkUHJvcGVydGllcztcblxuICAgICAgaWYgKGlzQXJyYXkocmF3Q29uY2F0KSkge1xuICAgICAgICBjb25jYXQgPSAocmF3Q29uY2F0IGFzIHN0cmluZ1tdKS5zbGljZSgpO1xuICAgICAgfSBlbHNlIGlmIChyYXdDb25jYXQgPT09IG51bGwgfHwgcmF3Q29uY2F0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uY2F0ID0gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25jYXQgPSBbcmF3Q29uY2F0IGFzIHN0cmluZ107XG4gICAgICB9XG5cbiAgICAgIGRlbGV0ZSBleHRlbnNpb25zLmNvbmNhdGVuYXRlZFByb3BlcnRpZXM7XG4gICAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSBjb25jYXQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBleHRlbnNpb25zID09PSAnb2JqZWN0JyAmJiAnbWVyZ2VkUHJvcGVydGllcycgaW4gZXh0ZW5zaW9ucykge1xuICAgICAgbGV0IG1lcmdlZDogc3RyaW5nW107XG4gICAgICBsZXQgcmF3TWVyZ2VkID0gZXh0ZW5zaW9ucy5tZXJnZWRQcm9wZXJ0aWVzO1xuXG4gICAgICBpZiAoaXNBcnJheShyYXdNZXJnZWQpKSB7XG4gICAgICAgIG1lcmdlZCA9IChyYXdNZXJnZWQgYXMgc3RyaW5nW10pLnNsaWNlKCk7XG4gICAgICB9IGVsc2UgaWYgKHJhd01lcmdlZCA9PT0gbnVsbCB8fCByYXdNZXJnZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtZXJnZWQgPSBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lcmdlZCA9IFtyYXdNZXJnZWQgYXMgc3RyaW5nXTtcbiAgICAgIH1cblxuICAgICAgZGVsZXRlIGV4dGVuc2lvbnMubWVyZ2VkUHJvcGVydGllcztcbiAgICAgIHRoaXMubWVyZ2VkUHJvcGVydGllcyA9IG1lcmdlZDtcbiAgICB9XG5cbiAgICBsZXQgbm9ybWFsaXplZDogRGljdDxCbHVlcHJpbnQ+ID0gT2JqZWN0LmtleXMoZXh0ZW5zaW9ucykucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gZXh0ZW5zaW9uc1trZXldO1xuXG4gICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgICAgb2JqW2tleV0gPSBuZXcgTWV0aG9kQmx1ZXByaW50KHsgdmFsdWUgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgaWYgKHZhbHVlICYmIEJMVUVQUklOVCBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIG9ialtrZXldID0gbmV3IERhdGFCbHVlcHJpbnQoeyB2YWx1ZSB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LCBkaWN0PEJsdWVwcmludD4oKSk7XG5cbiAgICB0aGlzLmV4dGVuc2lvbnMgPSBkaWN0PGFueT4oKTtcbiAgICBhc3NpZ24odGhpcy5leHRlbnNpb25zLCB0dXJib2NoYXJnZShub3JtYWxpemVkKSk7XG4gIH1cblxuICBhcHBseSh0YXJnZXQ6IGFueSkge1xuICAgIGxldCBtZXRhOiBDbGFzc01ldGEgPSAodGFyZ2V0W0NMQVNTX01FVEFdID0gdGFyZ2V0W0NMQVNTX01FVEFdIHx8IG5ldyBDbGFzc01ldGEoKSk7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuZm9yRWFjaChtID0+IG0uYXBwbHkodGFyZ2V0KSk7XG4gICAgdGhpcy5tZXJnZVByb3BlcnRpZXModGFyZ2V0LCB0YXJnZXQsIG1ldGEpO1xuICAgIG1ldGEuYWRkTWl4aW4odGhpcyk7XG4gICAgbWV0YS5zZWFsKCk7XG4gICAgbWV0YS5yZXNlYWwodGFyZ2V0KTtcblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBleHRlbmRQcm90b3R5cGUoT3JpZ2luYWw6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICBPcmlnaW5hbC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9yaWdpbmFsLnByb3RvdHlwZSk7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuZm9yRWFjaChtID0+IG0uZXh0ZW5kUHJvdG90eXBlKE9yaWdpbmFsKSk7XG4gICAgdGhpcy5leHRlbmRQcm90b3R5cGVPbnRvKE9yaWdpbmFsLCBPcmlnaW5hbCk7XG4gIH1cblxuICBleHRlbmRQcm90b3R5cGVPbnRvKFN1YmNsYXNzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+LCBQYXJlbnQ6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKG0gPT4gbS5leHRlbmRQcm90b3R5cGVPbnRvKFN1YmNsYXNzLCBQYXJlbnQpKTtcbiAgICB0aGlzLm1lcmdlUHJvcGVydGllcyhTdWJjbGFzcy5wcm90b3R5cGUsIFBhcmVudC5wcm90b3R5cGUsIFN1YmNsYXNzW0NMQVNTX01FVEFdKTtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5hZGRNaXhpbih0aGlzKTtcbiAgfVxuXG4gIGV4dGVuZFN0YXRpYyhUYXJnZXQ6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKG0gPT4gbS5leHRlbmRTdGF0aWMoVGFyZ2V0KSk7XG4gICAgdGhpcy5tZXJnZVByb3BlcnRpZXMoVGFyZ2V0LCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoVGFyZ2V0KSwgVGFyZ2V0W0NMQVNTX01FVEFdW0NMQVNTX01FVEFdKTtcbiAgICBUYXJnZXRbQ0xBU1NfTUVUQV0uYWRkU3RhdGljTWl4aW4odGhpcyk7XG4gIH1cblxuICBtZXJnZVByb3BlcnRpZXModGFyZ2V0OiBPYmplY3QsIHBhcmVudDogRGljdDxEaWN0PiwgbWV0YTogQ2xhc3NNZXRhKSB7XG4gICAgaWYgKG1ldGEuaGFzQXBwbGllZE1peGluKHRoaXMpKSByZXR1cm47XG4gICAgbWV0YS5hZGRBcHBsaWVkTWl4aW4odGhpcyk7XG5cbiAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXMuZm9yRWFjaChrID0+IG1ldGEuYWRkTWVyZ2VkUHJvcGVydHkoaywgcGFyZW50W2tdKSk7XG4gICAgdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzLmZvckVhY2goayA9PiBtZXRhLmFkZENvbmNhdGVuYXRlZFByb3BlcnR5KGssIFtdKSk7XG5cbiAgICBuZXcgVmFsdWVEZXNjcmlwdG9yKHsgdmFsdWU6IG1ldGEuZ2V0Q29uY2F0ZW5hdGVkUHJvcGVydGllcygpIH0pLmRlZmluZShcbiAgICAgIHRhcmdldCxcbiAgICAgICdjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzJ1xuICAgICk7XG4gICAgbmV3IFZhbHVlRGVzY3JpcHRvcih7IHZhbHVlOiBtZXRhLmdldE1lcmdlZFByb3BlcnRpZXMoKSB9KS5kZWZpbmUodGFyZ2V0LCAnbWVyZ2VkUHJvcGVydGllcycpO1xuXG4gICAgT2JqZWN0LmtleXModGhpcy5leHRlbnNpb25zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBsZXQgZXh0ZW5zaW9uOiBCbHVlcHJpbnQgPSB0aGlzLmV4dGVuc2lvbnMhW2tleV07XG4gICAgICBsZXQgZGVzYyA9IGV4dGVuc2lvbi5kZXNjcmlwdG9yKHRhcmdldCwga2V5IGFzIHN0cmluZywgbWV0YSk7XG4gICAgICBkZXNjLmRlZmluZSh0YXJnZXQsIGtleSBhcyBzdHJpbmcsIHBhcmVudCk7XG4gICAgfSk7XG5cbiAgICBuZXcgVmFsdWVEZXNjcmlwdG9yKHsgdmFsdWU6IFJPT1QgfSkuZGVmaW5lKHRhcmdldCwgJ19zdXBlcicgYXMgc3RyaW5nKTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBFeHRlbnNpb24gPSBNaXhpbiB8IEV4dGVuc2lvbnM7XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQ8VCBleHRlbmRzIEdsaW1tZXJPYmplY3Q+KFxuICBQYXJlbnQ6IEdsaW1tZXJPYmplY3RGYWN0b3J5PFQ+LFxuICAuLi5leHRlbnNpb25zOiBFeHRlbnNpb25bXVxuKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiB7XG4gIGxldCBTdXBlciA9IFBhcmVudCBhcyB0eXBlb2YgR2xpbW1lck9iamVjdDtcblxuICBsZXQgU3ViY2xhc3MgPSBjbGFzcyBleHRlbmRzIFN1cGVyIHt9O1xuICBTdWJjbGFzc1tDTEFTU19NRVRBXSA9IEluc3RhbmNlTWV0YS5mcm9tUGFyZW50KFBhcmVudFtDTEFTU19NRVRBXSk7XG5cbiAgbGV0IG1peGlucyA9IGV4dGVuc2lvbnMubWFwKHRvTWl4aW4pO1xuICBQYXJlbnRbQ0xBU1NfTUVUQV0uYWRkU3ViY2xhc3MoU3ViY2xhc3MgYXMgR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pik7XG4gIG1peGlucy5mb3JFYWNoKG0gPT4gU3ViY2xhc3NbQ0xBU1NfTUVUQV0uYWRkTWl4aW4obSkpO1xuXG4gIENsYXNzTWV0YS5hcHBseUFsbE1peGlucyhTdWJjbGFzcyBhcyBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+LCBQYXJlbnQpO1xuXG4gIHJldHVybiBTdWJjbGFzcyBhcyBhbnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxpbmtTdWJjbGFzc2VzKFBhcmVudDogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICBQYXJlbnRbQ0xBU1NfTUVUQV0uZ2V0U3ViY2xhc3NlcygpLmZvckVhY2goKFN1YmNsYXNzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KSA9PiB7XG4gICAgU3ViY2xhc3NbQ0xBU1NfTUVUQV0ucmVzZXQoUGFyZW50W0NMQVNTX01FVEFdKTtcbiAgICBTdWJjbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFBhcmVudC5wcm90b3R5cGUpO1xuXG4gICAgQ2xhc3NNZXRhLmFwcGx5QWxsTWl4aW5zKFN1YmNsYXNzLCBQYXJlbnQpO1xuXG4gICAgLy8gcmVjdXJzZSBpbnRvIHN1Yi1zdWJjbGFzc2VzXG4gICAgcmVsaW5rU3ViY2xhc3NlcyhTdWJjbGFzcyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9NaXhpbihleHRlbnNpb246IEV4dGVuc2lvbik6IE1peGluIHtcbiAgaWYgKGV4dGVuc2lvbiBpbnN0YW5jZW9mIE1peGluKSByZXR1cm4gZXh0ZW5zaW9uO1xuICBlbHNlIHJldHVybiBuZXcgTWl4aW4oZXh0ZW5zaW9uIGFzIE9iamVjdCwgW10pO1xufVxuXG5jbGFzcyBWYWx1ZURlc2NyaXB0b3IgZXh0ZW5kcyBEZXNjcmlwdG9yIHtcbiAgcHVibGljIGVudW1lcmFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyBjb25maWd1cmFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyB3cml0YWJsZTogYm9vbGVhbjtcbiAgcHVibGljIHZhbHVlOiBhbnk7XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIGVudW1lcmFibGUgPSB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZSA9IHRydWUsXG4gICAgd3JpdGFibGUgPSB0cnVlLFxuICAgIHZhbHVlLFxuICB9OiBQcm9wZXJ0eURlc2NyaXB0b3IpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZW51bWVyYWJsZSA9IGVudW1lcmFibGU7XG4gICAgdGhpcy5jb25maWd1cmFibGUgPSBjb25maWd1cmFibGU7XG4gICAgdGhpcy53cml0YWJsZSA9IHdyaXRhYmxlO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGRlZmluZSh0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIF9ob21lPzogYW55KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCB7XG4gICAgICBlbnVtZXJhYmxlOiB0aGlzLmVudW1lcmFibGUsXG4gICAgICBjb25maWd1cmFibGU6IHRoaXMuY29uZmlndXJhYmxlLFxuICAgICAgd3JpdGFibGU6IHRoaXMud3JpdGFibGUsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YUJsdWVwcmludCBleHRlbmRzIEJsdWVwcmludCB7XG4gIHB1YmxpYyBlbnVtZXJhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgY29uZmlndXJhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgdmFsdWU6IGFueTtcbiAgcHVibGljIHdyaXRhYmxlOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBlbnVtZXJhYmxlID0gdHJ1ZSxcbiAgICBjb25maWd1cmFibGUgPSB0cnVlLFxuICAgIHdyaXRhYmxlID0gdHJ1ZSxcbiAgICB2YWx1ZSxcbiAgfTogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmVudW1lcmFibGUgPSBlbnVtZXJhYmxlO1xuICAgIHRoaXMuY29uZmlndXJhYmxlID0gY29uZmlndXJhYmxlO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLndyaXRhYmxlID0gd3JpdGFibGU7XG4gIH1cblxuICBkZXNjcmlwdG9yKF90YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIGNsYXNzTWV0YTogQ2xhc3NNZXRhKTogRGVzY3JpcHRvciB7XG4gICAgbGV0IHsgZW51bWVyYWJsZSwgY29uZmlndXJhYmxlLCB3cml0YWJsZSwgdmFsdWUgfSA9IHRoaXM7XG5cbiAgICBpZiAoY2xhc3NNZXRhLmhhc0NvbmNhdGVuYXRlZFByb3BlcnR5KGtleSBhcyBzdHJpbmcpKSB7XG4gICAgICBjbGFzc01ldGEuYWRkQ29uY2F0ZW5hdGVkUHJvcGVydHkoa2V5IGFzIHN0cmluZywgdmFsdWUpO1xuICAgICAgdmFsdWUgPSBjbGFzc01ldGEuZ2V0Q29uY2F0ZW5hdGVkUHJvcGVydHkoa2V5IGFzIHN0cmluZyk7XG4gICAgfSBlbHNlIGlmIChjbGFzc01ldGEuaGFzTWVyZ2VkUHJvcGVydHkoa2V5IGFzIHN0cmluZykpIHtcbiAgICAgIGNsYXNzTWV0YS5hZGRNZXJnZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nLCB2YWx1ZSk7XG4gICAgICB2YWx1ZSA9IGNsYXNzTWV0YS5nZXRNZXJnZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFZhbHVlRGVzY3JpcHRvcih7IGVudW1lcmFibGUsIGNvbmZpZ3VyYWJsZSwgd3JpdGFibGUsIHZhbHVlIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBY2Nlc3NvckJsdWVwcmludCBleHRlbmRzIEJsdWVwcmludCB7XG4gIHB1YmxpYyBlbnVtZXJhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgY29uZmlndXJhYmxlOiBib29sZWFuO1xuICBnZXQ6ICgpID0+IGFueTtcbiAgc2V0OiAodmFsdWU6IGFueSkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgZW51bWVyYWJsZSA9IHRydWUsXG4gICAgY29uZmlndXJhYmxlID0gdHJ1ZSxcbiAgICBnZXQsXG4gICAgc2V0LFxuICB9OiBQcm9wZXJ0eURlc2NyaXB0b3IgJiB7IGdldDogYW55OyBzZXQ6IGFueSB9KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmVudW1lcmFibGUgPSBlbnVtZXJhYmxlO1xuICAgIHRoaXMuY29uZmlndXJhYmxlID0gY29uZmlndXJhYmxlO1xuICAgIHRoaXMuZ2V0ID0gZ2V0O1xuICAgIHRoaXMuc2V0ID0gc2V0O1xuICB9XG5cbiAgZGVzY3JpcHRvcihfdGFyZ2V0OiBPYmplY3QsIF9rZXk6IHN0cmluZywgX2NsYXNzTWV0YTogQ2xhc3NNZXRhKTogRGVzY3JpcHRvciB7XG4gICAgcmV0dXJuIG5ldyBWYWx1ZURlc2NyaXB0b3Ioe1xuICAgICAgZW51bWVyYWJsZTogdGhpcy5lbnVtZXJhYmxlLFxuICAgICAgY29uZmlndXJhYmxlOiB0aGlzLmNvbmZpZ3VyYWJsZSxcbiAgICAgIGdldDogdGhpcy5nZXQsXG4gICAgICBzZXQ6IHRoaXMuc2V0LFxuICAgIH0pO1xuICB9XG59XG5cbmNsYXNzIE1ldGhvZERlc2NyaXB0b3IgZXh0ZW5kcyBWYWx1ZURlc2NyaXB0b3Ige1xuICBkZWZpbmUodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nLCBob21lOiBEaWN0KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHdyYXBNZXRob2QoaG9tZSwga2V5LCB0aGlzLnZhbHVlKTtcbiAgICBzdXBlci5kZWZpbmUodGFyZ2V0LCBrZXksIGhvbWUpO1xuICB9XG59XG5cbmNsYXNzIE1ldGhvZEJsdWVwcmludCBleHRlbmRzIERhdGFCbHVlcHJpbnQge1xuICBkZXNjcmlwdG9yKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgY2xhc3NNZXRhOiBDbGFzc01ldGEpOiBNZXRob2REZXNjcmlwdG9yIHtcbiAgICBsZXQgZGVzYyA9IHN1cGVyLmRlc2NyaXB0b3IodGFyZ2V0LCBrZXksIGNsYXNzTWV0YSk7XG4gICAgcmV0dXJuIG5ldyBNZXRob2REZXNjcmlwdG9yKGRlc2MgYXMgUHJvcGVydHlEZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JhcE1ldGhvZChob21lOiBEaWN0LCBtZXRob2ROYW1lOiBzdHJpbmcsIG9yaWdpbmFsOiAoLi4uYXJnczogYW55W10pID0+IGFueSkge1xuICBpZiAoISgobWV0aG9kTmFtZSBhcyBzdHJpbmcpIGluIGhvbWUpKSByZXR1cm4gbWF5YmVXcmFwKG9yaWdpbmFsKTtcblxuICBsZXQgc3VwZXJNZXRob2QgPSBob21lW21ldGhvZE5hbWVdO1xuXG4gIGxldCBmdW5jID0gZnVuY3Rpb24odGhpczogR2xpbW1lck9iamVjdCwgLi4uYXJnczogYW55W10pIHtcbiAgICBpZiAoIXRoaXMpIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcblxuICAgIGxldCBsYXN0U3VwZXIgPSB0aGlzLl9zdXBlcjtcbiAgICB0aGlzLl9zdXBlciA9IHN1cGVyTWV0aG9kIGFzIGFueTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX3N1cGVyID0gbGFzdFN1cGVyO1xuICAgIH1cbiAgfTtcblxuICAoZnVuYyBhcyBhbnkpLl9fd3JhcHBlZCA9IHRydWU7XG5cbiAgcmV0dXJuIGZ1bmM7XG59XG5cbmZ1bmN0aW9uIG1heWJlV3JhcChvcmlnaW5hbDogRnVuY3Rpb24pIHtcbiAgaWYgKCdfX3dyYXBwZWQnIGluIG9yaWdpbmFsKSByZXR1cm4gb3JpZ2luYWw7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHRoaXM6IEdsaW1tZXJPYmplY3QsIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgaWYgKCF0aGlzKSByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG5cbiAgICBsZXQgbGFzdFN1cGVyID0gdGhpcy5fc3VwZXI7XG4gICAgdGhpcy5fc3VwZXIgPSBST09UO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fc3VwZXIgPSBsYXN0U3VwZXI7XG4gICAgfVxuICB9O1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvbWl4aW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFPQTs7OztBQUdBLE1BQU07QUFBRSxFQUFBO0FBQUYsSUFBTixLQUFBO0FBRU8sTUFBTSxVQUFVLEdBQWtCLGtCQUFsQyxZQUFrQyxDQUFsQzs7QUFDQSxNQUFNLFNBQVMsR0FBa0Isa0JBQWpDLFdBQWlDLENBQWpDOzs7QUFFRCxNQUFBLFVBQUEsQ0FBMEI7QUFBaEMsRUFBQSxXQUFBLEdBQUE7QUFDRSxTQUFBLEVBQUEsSUFBQSxJQUFBO0FBRUQ7O0FBSCtCOzs7S0FDN0IsVTs7QUFJRyxNQUFBLFNBQUEsQ0FBeUI7QUFBL0IsRUFBQSxXQUFBLEdBQUE7QUFDRSxTQUFBLEVBQUEsSUFBQSxJQUFBO0FBRUQ7O0FBSDhCOzs7S0FDNUIsUzs7QUFXRyxNQUFBLEtBQUEsQ0FBWTtBQTRCaEIsRUFBQSxXQUFBLENBQUEsVUFBQSxFQUFBLE1BQUEsRUFBbUQ7QUEzQjNDLFNBQUEsVUFBQSxHQUFBLElBQUEsQ0EyQjJDLENBM0JOOztBQUNyQyxTQUFBLHNCQUFBLEdBQUEsRUFBQTtBQUNBLFNBQUEsZ0JBQUEsR0FBQSxFQUFBO0FBQ0EsU0FBQSxZQUFBLEdBQUEsRUFBQTtBQXlCTixTQUFBLE1BQUEsQ0FBQSxVQUFBO0FBQ0EsU0FBQSxZQUFBLENBQUEsSUFBQSxDQUF1QixHQUF2QixNQUFBO0FBQ0Q7O0FBekJELFNBQUEsTUFBQSxDQUFjLEdBQWQsSUFBQSxFQUE2QztBQUMzQyxRQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFKLE1BQUEsR0FBdEIsQ0FBcUIsQ0FBckI7O0FBRUEsUUFBSSxJQUFJLENBQUosTUFBQSxLQUFKLENBQUEsRUFBdUI7QUFDckIsYUFBTyxJQUFBLElBQUEsQ0FBQSxFQUFBLEVBQVAsRUFBTyxDQUFQO0FBREYsS0FBQSxNQUVPLElBQUks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RVgsUUFBSSxTQUFTLEdBQUcsS0FBaEIsTUFBQTtBQUNBLFNBQUEsTUFBQSxHQUFBLFdBQUE7O0FBRUEsUUFBSTtBQUNGLGFBQU8sUUFBUSxDQUFSLEtBQUEsQ0FBQSxJQUFBLEVBQVAsSUFBTyxDQUFQO0FBREYsS0FBQSxTQUVVO0FBQ1IsV0FBQSxNQUFBLEdBQUEsU0FBQTtBQUNEO0FBVkgsR0FBQTtBQVlEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ0xBU1NfTUVUQSB9IGZyb20gJ0BnbGltbWVyL29iamVjdC1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgZGljdCwgYXNzaWduLCBzeW1ib2wgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCBHbGltbWVyT2JqZWN0LCB7XG4gIEdsaW1tZXJPYmplY3RGYWN0b3J5LFxuICBDbGFzc01ldGEsXG4gIEluc3RhbmNlTWV0YSxcbiAgdHVyYm9jaGFyZ2UsXG59IGZyb20gJy4vb2JqZWN0JztcblxuaW1wb3J0IHsgUk9PVCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRGljdCB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuXG5jb25zdCB7IGlzQXJyYXkgfSA9IEFycmF5O1xuXG5leHBvcnQgY29uc3QgREVTQ1JJUFRPUjogdW5pcXVlIHN5bWJvbCA9IHN5bWJvbCgnREVTQ1JJUFRPUicpO1xuZXhwb3J0IGNvbnN0IEJMVUVQUklOVDogdW5pcXVlIHN5bWJvbCA9IHN5bWJvbCgnQkxVRVBSSU5UJyk7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEZXNjcmlwdG9yIHtcbiAgW0RFU0NSSVBUT1JdID0gdHJ1ZTtcbiAgYWJzdHJhY3QgZGVmaW5lKHByb3RvdHlwZTogT2JqZWN0LCBrZXk6IHN0cmluZywgaG9tZTogT2JqZWN0KTogdm9pZDtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJsdWVwcmludCB7XG4gIFtCTFVFUFJJTlRdID0gdHJ1ZTtcbiAgYWJzdHJhY3QgZGVzY3JpcHRvcih0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIGNsYXNzTWV0YTogQ2xhc3NNZXRhKTogRGVzY3JpcHRvcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHRlbnNpb25zIHtcbiAgY29uY2F0ZW5hdGVkUHJvcGVydGllcz86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbDtcbiAgbWVyZ2VkUHJvcGVydGllcz86IHN0cmluZ1tdIHwgc3RyaW5nO1xuICBfc3VwZXI/OiBGdW5jdGlvbjtcbiAgW2luZGV4OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBNaXhpbiB7XG4gIHByaXZhdGUgZXh0ZW5zaW9uczogRGljdDxhbnk+ID0gbnVsbCBhcyBhbnk7IC8vIGFzc2lnbmVkIGJlZm9yZSB1c2VkXG4gIHByaXZhdGUgY29uY2F0ZW5hdGVkUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBtZXJnZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIGRlcGVuZGVuY2llczogTWl4aW5bXSA9IFtdO1xuXG4gIHN0YXRpYyBjcmVhdGUoLi4uYXJnczogKE1peGluIHwgRXh0ZW5zaW9ucylbXSkge1xuICAgIGxldCBleHRlbnNpb25zID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbmV3IHRoaXMoe30sIFtdKTtcbiAgICB9IGVsc2UgaWYgKGV4dGVuc2lvbnMgaW5zdGFuY2VvZiBNaXhpbikge1xuICAgICAgcmV0dXJuIG5ldyB0aGlzKHt9LCBhcmdzIGFzIE1peGluW10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZGVwcyA9IGFyZ3Muc2xpY2UoMCwgLTEpLm1hcCh0b01peGluKTtcbiAgICAgIHJldHVybiBuZXcgdGhpcyhleHRlbnNpb25zIGFzIEV4dGVuc2lvbnMsIGRlcHMpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBtaXhpbnMob2JqOiBhbnkpOiBNaXhpbltdIHtcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSByZXR1cm4gW107XG5cbiAgICBsZXQgbWV0YSA9IENsYXNzTWV0YS5mb3Iob2JqKTtcbiAgICBpZiAoIW1ldGEpIHJldHVybiBbXTtcblxuICAgIHJldHVybiBtZXRhLmdldEFwcGxpZWRNaXhpbnMoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGV4dGVuc2lvbnM6IEV4dGVuc2lvbnMsIG1peGluczogTWl4aW5bXSkge1xuICAgIHRoaXMucmVvcGVuKGV4dGVuc2lvbnMpO1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzLnB1c2goLi4ubWl4aW5zKTtcbiAgfVxuXG4gIGRldGVjdChvYmo6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBvYmogPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBNaXhpbikge1xuICAgICAgcmV0dXJuIG9iai5kZXBlbmRlbmNpZXMuaW5kZXhPZih0aGlzKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgbGV0IG1ldGEgPSBDbGFzc01ldGEuZm9yKG9iaik7XG4gICAgcmV0dXJuICEhbWV0YSAmJiBtZXRhLmhhc0FwcGxpZWRNaXhpbih0aGlzKTtcbiAgfVxuXG4gIHJlb3BlbihleHRlbnNpb25zOiBFeHRlbnNpb25zKSB7XG4gICAgaWYgKHRoaXMuZXh0ZW5zaW9ucykge1xuICAgICAgdGhpcy5kZXBlbmRlbmNpZXMucHVzaCh0b01peGluKHRoaXMuZXh0ZW5zaW9ucykpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXh0ZW5zaW9ucyA9PT0gJ29iamVjdCcgJiYgJ2NvbmNhdGVuYXRlZFByb3BlcnRpZXMnIGluIGV4dGVuc2lvbnMpIHtcbiAgICAgIGxldCBjb25jYXQ6IHN0cmluZ1tdO1xuICAgICAgbGV0IHJhd0NvbmNhdCA9IGV4dGVuc2lvbnMuY29uY2F0ZW5hdGVkUHJvcGVydGllcztcblxuICAgICAgaWYgKGlzQXJyYXkocmF3Q29uY2F0KSkge1xuICAgICAgICBjb25jYXQgPSAocmF3Q29uY2F0IGFzIHN0cmluZ1tdKS5zbGljZSgpO1xuICAgICAgfSBlbHNlIGlmIChyYXdDb25jYXQgPT09IG51bGwgfHwgcmF3Q29uY2F0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uY2F0ID0gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25jYXQgPSBbcmF3Q29uY2F0IGFzIHN0cmluZ107XG4gICAgICB9XG5cbiAgICAgIGRlbGV0ZSBleHRlbnNpb25zLmNvbmNhdGVuYXRlZFByb3BlcnRpZXM7XG4gICAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSBjb25jYXQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBleHRlbnNpb25zID09PSAnb2JqZWN0JyAmJiAnbWVyZ2VkUHJvcGVydGllcycgaW4gZXh0ZW5zaW9ucykge1xuICAgICAgbGV0IG1lcmdlZDogc3RyaW5nW107XG4gICAgICBsZXQgcmF3TWVyZ2VkID0gZXh0ZW5zaW9ucy5tZXJnZWRQcm9wZXJ0aWVzO1xuXG4gICAgICBpZiAoaXNBcnJheShyYXdNZXJnZWQpKSB7XG4gICAgICAgIG1lcmdlZCA9IChyYXdNZXJnZWQgYXMgc3RyaW5nW10pLnNsaWNlKCk7XG4gICAgICB9IGVsc2UgaWYgKHJhd01lcmdlZCA9PT0gbnVsbCB8fCByYXdNZXJnZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtZXJnZWQgPSBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lcmdlZCA9IFtyYXdNZXJnZWQgYXMgc3RyaW5nXTtcbiAgICAgIH1cblxuICAgICAgZGVsZXRlIGV4dGVuc2lvbnMubWVyZ2VkUHJvcGVydGllcztcbiAgICAgIHRoaXMubWVyZ2VkUHJvcGVydGllcyA9IG1lcmdlZDtcbiAgICB9XG5cbiAgICBsZXQgbm9ybWFsaXplZDogRGljdDxCbHVlcHJpbnQ+ID0gT2JqZWN0LmtleXMoZXh0ZW5zaW9ucykucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gZXh0ZW5zaW9uc1trZXldO1xuXG4gICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgICAgb2JqW2tleV0gPSBuZXcgTWV0aG9kQmx1ZXByaW50KHsgdmFsdWUgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgaWYgKHZhbHVlICYmIEJMVUVQUklOVCBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIG9ialtrZXldID0gbmV3IERhdGFCbHVlcHJpbnQoeyB2YWx1ZSB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LCBkaWN0PEJsdWVwcmludD4oKSk7XG5cbiAgICB0aGlzLmV4dGVuc2lvbnMgPSBkaWN0PGFueT4oKTtcbiAgICBhc3NpZ24odGhpcy5leHRlbnNpb25zLCB0dXJib2NoYXJnZShub3JtYWxpemVkKSk7XG4gIH1cblxuICBhcHBseSh0YXJnZXQ6IGFueSkge1xuICAgIGxldCBtZXRhOiBDbGFzc01ldGEgPSAodGFyZ2V0W0NMQVNTX01FVEFdID0gdGFyZ2V0W0NMQVNTX01FVEFdIHx8IG5ldyBDbGFzc01ldGEoKSk7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuZm9yRWFjaChtID0+IG0uYXBwbHkodGFyZ2V0KSk7XG4gICAgdGhpcy5tZXJnZVByb3BlcnRpZXModGFyZ2V0LCB0YXJnZXQsIG1ldGEpO1xuICAgIG1ldGEuYWRkTWl4aW4odGhpcyk7XG4gICAgbWV0YS5zZWFsKCk7XG4gICAgbWV0YS5yZXNlYWwodGFyZ2V0KTtcblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBleHRlbmRQcm90b3R5cGUoT3JpZ2luYWw6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICBPcmlnaW5hbC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9yaWdpbmFsLnByb3RvdHlwZSk7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuZm9yRWFjaChtID0+IG0uZXh0ZW5kUHJvdG90eXBlKE9yaWdpbmFsKSk7XG4gICAgdGhpcy5leHRlbmRQcm90b3R5cGVPbnRvKE9yaWdpbmFsLCBPcmlnaW5hbCk7XG4gIH1cblxuICBleHRlbmRQcm90b3R5cGVPbnRvKFN1YmNsYXNzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+LCBQYXJlbnQ6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKG0gPT4gbS5leHRlbmRQcm90b3R5cGVPbnRvKFN1YmNsYXNzLCBQYXJlbnQpKTtcbiAgICB0aGlzLm1lcmdlUHJvcGVydGllcyhTdWJjbGFzcy5wcm90b3R5cGUsIFBhcmVudC5wcm90b3R5cGUsIFN1YmNsYXNzW0NMQVNTX01FVEFdKTtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5hZGRNaXhpbih0aGlzKTtcbiAgfVxuXG4gIGV4dGVuZFN0YXRpYyhUYXJnZXQ6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKG0gPT4gbS5leHRlbmRTdGF0aWMoVGFyZ2V0KSk7XG4gICAgdGhpcy5tZXJnZVByb3BlcnRpZXMoVGFyZ2V0LCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoVGFyZ2V0KSwgVGFyZ2V0W0NMQVNTX01FVEFdW0NMQVNTX01FVEFdKTtcbiAgICBUYXJnZXRbQ0xBU1NfTUVUQV0uYWRkU3RhdGljTWl4aW4odGhpcyk7XG4gIH1cblxuICBtZXJnZVByb3BlcnRpZXModGFyZ2V0OiBPYmplY3QsIHBhcmVudDogRGljdDxEaWN0PiwgbWV0YTogQ2xhc3NNZXRhKSB7XG4gICAgaWYgKG1ldGEuaGFzQXBwbGllZE1peGluKHRoaXMpKSByZXR1cm47XG4gICAgbWV0YS5hZGRBcHBsaWVkTWl4aW4odGhpcyk7XG5cbiAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXMuZm9yRWFjaChrID0+IG1ldGEuYWRkTWVyZ2VkUHJvcGVydHkoaywgcGFyZW50W2tdKSk7XG4gICAgdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzLmZvckVhY2goayA9PiBtZXRhLmFkZENvbmNhdGVuYXRlZFByb3BlcnR5KGssIFtdKSk7XG5cbiAgICBuZXcgVmFsdWVEZXNjcmlwdG9yKHsgdmFsdWU6IG1ldGEuZ2V0Q29uY2F0ZW5hdGVkUHJvcGVydGllcygpIH0pLmRlZmluZShcbiAgICAgIHRhcmdldCxcbiAgICAgICdjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzJ1xuICAgICk7XG4gICAgbmV3IFZhbHVlRGVzY3JpcHRvcih7IHZhbHVlOiBtZXRhLmdldE1lcmdlZFByb3BlcnRpZXMoKSB9KS5kZWZpbmUodGFyZ2V0LCAnbWVyZ2VkUHJvcGVydGllcycpO1xuXG4gICAgT2JqZWN0LmtleXModGhpcy5leHRlbnNpb25zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBsZXQgZXh0ZW5zaW9uOiBCbHVlcHJpbnQgPSB0aGlzLmV4dGVuc2lvbnMhW2tleV07XG4gICAgICBsZXQgZGVzYyA9IGV4dGVuc2lvbi5kZXNjcmlwdG9yKHRhcmdldCwga2V5IGFzIHN0cmluZywgbWV0YSk7XG4gICAgICBkZXNjLmRlZmluZSh0YXJnZXQsIGtleSBhcyBzdHJpbmcsIHBhcmVudCk7XG4gICAgfSk7XG5cbiAgICBuZXcgVmFsdWVEZXNjcmlwdG9yKHsgdmFsdWU6IFJPT1QgfSkuZGVmaW5lKHRhcmdldCwgJ19zdXBlcicgYXMgc3RyaW5nKTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBFeHRlbnNpb24gPSBNaXhpbiB8IEV4dGVuc2lvbnM7XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQ8VCBleHRlbmRzIEdsaW1tZXJPYmplY3Q+KFxuICBQYXJlbnQ6IEdsaW1tZXJPYmplY3RGYWN0b3J5PFQ+LFxuICAuLi5leHRlbnNpb25zOiBFeHRlbnNpb25bXVxuKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiB7XG4gIGxldCBTdXBlciA9IFBhcmVudCBhcyB0eXBlb2YgR2xpbW1lck9iamVjdDtcblxuICBsZXQgU3ViY2xhc3MgPSBjbGFzcyBleHRlbmRzIFN1cGVyIHt9O1xuICBTdWJjbGFzc1tDTEFTU19NRVRBXSA9IEluc3RhbmNlTWV0YS5mcm9tUGFyZW50KFBhcmVudFtDTEFTU19NRVRBXSk7XG5cbiAgbGV0IG1peGlucyA9IGV4dGVuc2lvbnMubWFwKHRvTWl4aW4pO1xuICBQYXJlbnRbQ0xBU1NfTUVUQV0uYWRkU3ViY2xhc3MoU3ViY2xhc3MgYXMgR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pik7XG4gIG1peGlucy5mb3JFYWNoKG0gPT4gU3ViY2xhc3NbQ0xBU1NfTUVUQV0uYWRkTWl4aW4obSkpO1xuXG4gIENsYXNzTWV0YS5hcHBseUFsbE1peGlucyhTdWJjbGFzcyBhcyBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+LCBQYXJlbnQpO1xuXG4gIHJldHVybiBTdWJjbGFzcyBhcyBhbnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxpbmtTdWJjbGFzc2VzKFBhcmVudDogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICBQYXJlbnRbQ0xBU1NfTUVUQV0uZ2V0U3ViY2xhc3NlcygpLmZvckVhY2goKFN1YmNsYXNzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KSA9PiB7XG4gICAgU3ViY2xhc3NbQ0xBU1NfTUVUQV0ucmVzZXQoUGFyZW50W0NMQVNTX01FVEFdKTtcbiAgICBTdWJjbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFBhcmVudC5wcm90b3R5cGUpO1xuXG4gICAgQ2xhc3NNZXRhLmFwcGx5QWxsTWl4aW5zKFN1YmNsYXNzLCBQYXJlbnQpO1xuXG4gICAgLy8gcmVjdXJzZSBpbnRvIHN1Yi1zdWJjbGFzc2VzXG4gICAgcmVsaW5rU3ViY2xhc3NlcyhTdWJjbGFzcyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9NaXhpbihleHRlbnNpb246IEV4dGVuc2lvbik6IE1peGluIHtcbiAgaWYgKGV4dGVuc2lvbiBpbnN0YW5jZW9mIE1peGluKSByZXR1cm4gZXh0ZW5zaW9uO1xuICBlbHNlIHJldHVybiBuZXcgTWl4aW4oZXh0ZW5zaW9uIGFzIE9iamVjdCwgW10pO1xufVxuXG5jbGFzcyBWYWx1ZURlc2NyaXB0b3IgZXh0ZW5kcyBEZXNjcmlwdG9yIHtcbiAgcHVibGljIGVudW1lcmFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyBjb25maWd1cmFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyB3cml0YWJsZTogYm9vbGVhbjtcbiAgcHVibGljIHZhbHVlOiBhbnk7XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIGVudW1lcmFibGUgPSB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZSA9IHRydWUsXG4gICAgd3JpdGFibGUgPSB0cnVlLFxuICAgIHZhbHVlLFxuICB9OiBQcm9wZXJ0eURlc2NyaXB0b3IpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZW51bWVyYWJsZSA9IGVudW1lcmFibGU7XG4gICAgdGhpcy5jb25maWd1cmFibGUgPSBjb25maWd1cmFibGU7XG4gICAgdGhpcy53cml0YWJsZSA9IHdyaXRhYmxlO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGRlZmluZSh0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIF9ob21lPzogYW55KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCB7XG4gICAgICBlbnVtZXJhYmxlOiB0aGlzLmVudW1lcmFibGUsXG4gICAgICBjb25maWd1cmFibGU6IHRoaXMuY29uZmlndXJhYmxlLFxuICAgICAgd3JpdGFibGU6IHRoaXMud3JpdGFibGUsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YUJsdWVwcmludCBleHRlbmRzIEJsdWVwcmludCB7XG4gIHB1YmxpYyBlbnVtZXJhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgY29uZmlndXJhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgdmFsdWU6IGFueTtcbiAgcHVibGljIHdyaXRhYmxlOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBlbnVtZXJhYmxlID0gdHJ1ZSxcbiAgICBjb25maWd1cmFibGUgPSB0cnVlLFxuICAgIHdyaXRhYmxlID0gdHJ1ZSxcbiAgICB2YWx1ZSxcbiAgfTogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmVudW1lcmFibGUgPSBlbnVtZXJhYmxlO1xuICAgIHRoaXMuY29uZmlndXJhYmxlID0gY29uZmlndXJhYmxlO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLndyaXRhYmxlID0gd3JpdGFibGU7XG4gIH1cblxuICBkZXNjcmlwdG9yKF90YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIGNsYXNzTWV0YTogQ2xhc3NNZXRhKTogRGVzY3JpcHRvciB7XG4gICAgbGV0IHsgZW51bWVyYWJsZSwgY29uZmlndXJhYmxlLCB3cml0YWJsZSwgdmFsdWUgfSA9IHRoaXM7XG5cbiAgICBpZiAoY2xhc3NNZXRhLmhhc0NvbmNhdGVuYXRlZFByb3BlcnR5KGtleSBhcyBzdHJpbmcpKSB7XG4gICAgICBjbGFzc01ldGEuYWRkQ29uY2F0ZW5hdGVkUHJvcGVydHkoa2V5IGFzIHN0cmluZywgdmFsdWUpO1xuICAgICAgdmFsdWUgPSBjbGFzc01ldGEuZ2V0Q29uY2F0ZW5hdGVkUHJvcGVydHkoa2V5IGFzIHN0cmluZyk7XG4gICAgfSBlbHNlIGlmIChjbGFzc01ldGEuaGFzTWVyZ2VkUHJvcGVydHkoa2V5IGFzIHN0cmluZykpIHtcbiAgICAgIGNsYXNzTWV0YS5hZGRNZXJnZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nLCB2YWx1ZSk7XG4gICAgICB2YWx1ZSA9IGNsYXNzTWV0YS5nZXRNZXJnZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFZhbHVlRGVzY3JpcHRvcih7IGVudW1lcmFibGUsIGNvbmZpZ3VyYWJsZSwgd3JpdGFibGUsIHZhbHVlIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBY2Nlc3NvckJsdWVwcmludCBleHRlbmRzIEJsdWVwcmludCB7XG4gIHB1YmxpYyBlbnVtZXJhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgY29uZmlndXJhYmxlOiBib29sZWFuO1xuICBnZXQ6ICgpID0+IGFueTtcbiAgc2V0OiAodmFsdWU6IGFueSkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgZW51bWVyYWJsZSA9IHRydWUsXG4gICAgY29uZmlndXJhYmxlID0gdHJ1ZSxcbiAgICBnZXQsXG4gICAgc2V0LFxuICB9OiBQcm9wZXJ0eURlc2NyaXB0b3IgJiB7IGdldDogYW55OyBzZXQ6IGFueSB9KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmVudW1lcmFibGUgPSBlbnVtZXJhYmxlO1xuICAgIHRoaXMuY29uZmlndXJhYmxlID0gY29uZmlndXJhYmxlO1xuICAgIHRoaXMuZ2V0ID0gZ2V0O1xuICAgIHRoaXMuc2V0ID0gc2V0O1xuICB9XG5cbiAgZGVzY3JpcHRvcihfdGFyZ2V0OiBPYmplY3QsIF9rZXk6IHN0cmluZywgX2NsYXNzTWV0YTogQ2xhc3NNZXRhKTogRGVzY3JpcHRvciB7XG4gICAgcmV0dXJuIG5ldyBWYWx1ZURlc2NyaXB0b3Ioe1xuICAgICAgZW51bWVyYWJsZTogdGhpcy5lbnVtZXJhYmxlLFxuICAgICAgY29uZmlndXJhYmxlOiB0aGlzLmNvbmZpZ3VyYWJsZSxcbiAgICAgIGdldDogdGhpcy5nZXQsXG4gICAgICBzZXQ6IHRoaXMuc2V0LFxuICAgIH0pO1xuICB9XG59XG5cbmNsYXNzIE1ldGhvZERlc2NyaXB0b3IgZXh0ZW5kcyBWYWx1ZURlc2NyaXB0b3Ige1xuICBkZWZpbmUodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nLCBob21lOiBEaWN0KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHdyYXBNZXRob2QoaG9tZSwga2V5LCB0aGlzLnZhbHVlKTtcbiAgICBzdXBlci5kZWZpbmUodGFyZ2V0LCBrZXksIGhvbWUpO1xuICB9XG59XG5cbmNsYXNzIE1ldGhvZEJsdWVwcmludCBleHRlbmRzIERhdGFCbHVlcHJpbnQge1xuICBkZXNjcmlwdG9yKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgY2xhc3NNZXRhOiBDbGFzc01ldGEpOiBNZXRob2REZXNjcmlwdG9yIHtcbiAgICBsZXQgZGVzYyA9IHN1cGVyLmRlc2NyaXB0b3IodGFyZ2V0LCBrZXksIGNsYXNzTWV0YSk7XG4gICAgcmV0dXJuIG5ldyBNZXRob2REZXNjcmlwdG9yKGRlc2MgYXMgUHJvcGVydHlEZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JhcE1ldGhvZChob21lOiBEaWN0LCBtZXRob2ROYW1lOiBzdHJpbmcsIG9yaWdpbmFsOiAoLi4uYXJnczogYW55W10pID0+IGFueSkge1xuICBpZiAoISgobWV0aG9kTmFtZSBhcyBzdHJpbmcpIGluIGhvbWUpKSByZXR1cm4gbWF5YmVXcmFwKG9yaWdpbmFsKTtcblxuICBsZXQgc3VwZXJNZXRob2QgPSBob21lW21ldGhvZE5hbWVdO1xuXG4gIGxldCBmdW5jID0gZnVuY3Rpb24odGhpczogR2xpbW1lck9iamVjdCwgLi4uYXJnczogYW55W10pIHtcbiAgICBpZiAoIXRoaXMpIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcblxuICAgIGxldCBsYXN0U3VwZXIgPSB0aGlzLl9zdXBlcjtcbiAgICB0aGlzLl9zdXBlciA9IHN1cGVyTWV0aG9kIGFzIGFueTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX3N1cGVyID0gbGFzdFN1cGVyO1xuICAgIH1cbiAgfTtcblxuICAoZnVuYyBhcyBhbnkpLl9fd3JhcHBlZCA9IHRydWU7XG5cbiAgcmV0dXJuIGZ1bmM7XG59XG5cbmZ1bmN0aW9uIG1heWJlV3JhcChvcmlnaW5hbDogRnVuY3Rpb24pIHtcbiAgaWYgKCdfX3dyYXBwZWQnIGluIG9yaWdpbmFsKSByZXR1cm4gb3JpZ2luYWw7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHRoaXM6IEdsaW1tZXJPYmplY3QsIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgaWYgKCF0aGlzKSByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG5cbiAgICBsZXQgbGFzdFN1cGVyID0gdGhpcy5fc3VwZXI7XG4gICAgdGhpcy5fc3VwZXIgPSBST09UO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fc3VwZXIgPSBsYXN0U3VwZXI7XG4gICAgfVxuICB9O1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==

@@ -1,314 +0,412 @@

'use strict';
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
value: true
});
exports.InstanceMeta = exports.ClassMeta = exports.EMPTY_CACHE = undefined;
exports.turbocharge = turbocharge;
exports.default = exports.InstanceMeta = exports.ClassMeta = exports.EMPTY_CACHE = void 0;
var _objectReference = require('@glimmer/object-reference');
var _objectReference = require("@glimmer/object-reference");
var _util = require('@glimmer/util');
var _util = require("@glimmer/util");
var _mixin = require('./mixin');
var _mixin = require("./mixin");
var _utils = require('./utils');
var _utils = require("./utils");
var _validator = require('@glimmer/validator');
var _validator = require("@glimmer/validator");
var _a, _b;
const { isArray } = Array;
const EMPTY_CACHE = exports.EMPTY_CACHE = function EMPTY_CACHE() {};
const {
isArray
} = Array;
const EMPTY_CACHE = function EMPTY_CACHE() {};
exports.EMPTY_CACHE = EMPTY_CACHE;
function turbocharge(obj) {
// function Dummy() {}
// Dummy.prototype = obj;
return obj;
// function Dummy() {}
// Dummy.prototype = obj;
return obj;
}
class SealedMeta extends _objectReference.Meta {
addReferenceTypeFor(..._args) {
throw new Error('Cannot modify reference types on a sealed meta');
}
addReferenceTypeFor(..._args) {
throw new Error('Cannot modify reference types on a sealed meta');
}
}
class ClassMeta {
constructor() {
this.referenceTypes = (0, _util.dict)();
this.propertyMetadata = (0, _util.dict)();
this.concatenatedProperties = (0, _util.dict)();
this.hasConcatenatedProperties = false;
this.mergedProperties = (0, _util.dict)();
this.hasMergedProperties = false;
this.mixins = [];
this.appliedMixins = [];
this.staticMixins = [];
this.subclasses = [];
this.slots = [];
this.InstanceMetaConstructor = null;
constructor() {
this.referenceTypes = (0, _util.dict)();
this.propertyMetadata = (0, _util.dict)();
this.concatenatedProperties = (0, _util.dict)();
this.hasConcatenatedProperties = false;
this.mergedProperties = (0, _util.dict)();
this.hasMergedProperties = false;
this.mixins = [];
this.appliedMixins = [];
this.staticMixins = [];
this.subclasses = [];
this.slots = [];
this.InstanceMetaConstructor = null;
}
static fromParent(parent) {
let meta = new this();
meta.reset(parent);
return meta;
}
static for(object) {
if (_objectReference.CLASS_META in object) return object[_objectReference.CLASS_META];else if (object.constructor) return object.constructor[_objectReference.CLASS_META] || null;else return null;
}
init(object, attrs) {
if (typeof attrs !== 'object' || attrs === null) return;
if (this.hasConcatenatedProperties) {
let concatProps = this.concatenatedProperties;
for (let prop in concatProps) {
if (prop in attrs) {
let concat = concatProps[prop].slice();
object[prop] = concat.concat(attrs[prop]);
}
}
}
static fromParent(parent) {
let meta = new this();
meta.reset(parent);
return meta;
}
static for(object) {
if (_objectReference.CLASS_META in object) return object[_objectReference.CLASS_META];else if (object.constructor) return object.constructor[_objectReference.CLASS_META] || null;else return null;
}
init(object, attrs) {
if (typeof attrs !== 'object' || attrs === null) return;
if (this.hasConcatenatedProperties) {
let concatProps = this.concatenatedProperties;
for (let prop in concatProps) {
if (prop in attrs) {
let concat = concatProps[prop].slice();
object[prop] = concat.concat(attrs[prop]);
}
}
if (this.hasMergedProperties) {
let mergedProps = this.mergedProperties;
for (let prop in mergedProps) {
if (prop in attrs) {
let merged = (0, _util.assign)({}, mergedProps[prop]);
object[prop] = (0, _util.assign)(merged, attrs[prop]);
}
if (this.hasMergedProperties) {
let mergedProps = this.mergedProperties;
for (let prop in mergedProps) {
if (prop in attrs) {
let merged = (0, _util.assign)({}, mergedProps[prop]);
object[prop] = (0, _util.assign)(merged, attrs[prop]);
}
}
}
}
}
addStaticMixin(mixin) {
this.staticMixins.push(mixin);
}
addStaticMixin(mixin) {
this.staticMixins.push(mixin);
}
addMixin(mixin) {
this.mixins.push(mixin);
}
getStaticMixins() {
return this.staticMixins;
}
getMixins() {
return this.mixins;
}
addAppliedMixin(mixin) {
this.appliedMixins.push(mixin);
}
hasAppliedMixin(mixin) {
return this.appliedMixins.indexOf(mixin) !== -1;
}
getAppliedMixins() {
return this.appliedMixins;
}
hasStaticMixin(mixin) {
return this.staticMixins.indexOf(mixin) !== -1;
}
static applyAllMixins(Subclass, Parent) {
Subclass[_objectReference.CLASS_META].getMixins().forEach(m => m.extendPrototypeOnto(Subclass, Parent));
Subclass[_objectReference.CLASS_META].getStaticMixins().forEach(m => m.extendStatic(Subclass));
Subclass[_objectReference.CLASS_META].seal();
}
addSubclass(constructor) {
this.subclasses.push(constructor);
}
getSubclasses() {
return this.subclasses;
}
addPropertyMetadata(property, value) {
this.propertyMetadata[property] = value;
}
metadataForProperty(property) {
return this.propertyMetadata[property];
}
addReferenceTypeFor(property, type) {
this.referenceTypes[property] = type;
}
addSlotFor(property) {
this.slots.push(property);
}
hasConcatenatedProperty(property) {
if (!this.hasConcatenatedProperties) return false;
return property in this.concatenatedProperties;
}
getConcatenatedProperty(property) {
return this.concatenatedProperties[property];
}
getConcatenatedProperties() {
return Object.keys(this.concatenatedProperties);
}
addConcatenatedProperty(property, value) {
this.hasConcatenatedProperties = true;
if (property in this.concatenatedProperties) {
let val = this.concatenatedProperties[property].concat(value);
this.concatenatedProperties[property] = val;
} else {
this.concatenatedProperties[property] = value;
}
addMixin(mixin) {
this.mixins.push(mixin);
}
hasMergedProperty(property) {
if (!this.hasMergedProperties) return false;
return property in this.mergedProperties;
}
getMergedProperty(property) {
return this.mergedProperties[property];
}
getMergedProperties() {
return Object.keys(this.mergedProperties);
}
addMergedProperty(property, value) {
this.hasMergedProperties = true;
if (isArray(value)) {
throw new Error(`You passed in \`${JSON.stringify(value)}\` as the value for \`foo\` but \`foo\` cannot be an Array`);
}
getStaticMixins() {
return this.staticMixins;
if (property in this.mergedProperties && this.mergedProperties[property] && value) {
this.mergedProperties[property] = mergeMergedProperties(value, this.mergedProperties[property]);
} else {
value = value === null ? value : value || {};
this.mergedProperties[property] = value;
}
getMixins() {
return this.mixins;
}
getReferenceTypes() {
return this.referenceTypes;
}
getPropertyMetadata() {
return this.propertyMetadata;
}
reset(parent) {
this.referenceTypes = (0, _util.dict)();
this.propertyMetadata = (0, _util.dict)();
this.concatenatedProperties = (0, _util.dict)();
this.mergedProperties = (0, _util.dict)();
if (parent) {
this.hasConcatenatedProperties = parent.hasConcatenatedProperties;
for (let prop in parent.concatenatedProperties) {
this.concatenatedProperties[prop] = parent.concatenatedProperties[prop].slice();
}
this.hasMergedProperties = parent.hasMergedProperties;
for (let prop in parent.mergedProperties) {
this.mergedProperties[prop] = (0, _util.assign)({}, parent.mergedProperties[prop]);
}
(0, _util.assign)(this.referenceTypes, parent.referenceTypes);
(0, _util.assign)(this.propertyMetadata, parent.propertyMetadata);
}
addAppliedMixin(mixin) {
this.appliedMixins.push(mixin);
}
reseal(obj) {
let meta = _objectReference.Meta.for(obj);
let fresh = new this.InstanceMetaConstructor(obj, {});
let referenceTypes = meta.getReferenceTypes();
let slots = meta.getSlots();
turbocharge((0, _util.assign)(referenceTypes, this.referenceTypes));
turbocharge((0, _util.assign)(slots, fresh.getSlots()));
}
seal() {
let referenceTypes = turbocharge((0, _util.assign)({}, this.referenceTypes));
turbocharge(this.concatenatedProperties);
turbocharge(this.mergedProperties);
if (!this.hasMergedProperties && !this.hasConcatenatedProperties) {
this.init = function () {};
}
hasAppliedMixin(mixin) {
return this.appliedMixins.indexOf(mixin) !== -1;
let slots = this.slots;
class Slots {
constructor() {
slots.forEach(name => {
this[name] = EMPTY_CACHE;
});
}
}
getAppliedMixins() {
return this.appliedMixins;
}
hasStaticMixin(mixin) {
return this.staticMixins.indexOf(mixin) !== -1;
}
static applyAllMixins(Subclass, Parent) {
Subclass[_objectReference.CLASS_META].getMixins().forEach(m => m.extendPrototypeOnto(Subclass, Parent));
Subclass[_objectReference.CLASS_META].getStaticMixins().forEach(m => m.extendStatic(Subclass));
Subclass[_objectReference.CLASS_META].seal();
}
addSubclass(constructor) {
this.subclasses.push(constructor);
}
getSubclasses() {
return this.subclasses;
}
addPropertyMetadata(property, value) {
this.propertyMetadata[property] = value;
}
metadataForProperty(property) {
return this.propertyMetadata[property];
}
addReferenceTypeFor(property, type) {
this.referenceTypes[property] = type;
}
addSlotFor(property) {
this.slots.push(property);
}
hasConcatenatedProperty(property) {
if (!this.hasConcatenatedProperties) return false;
return property in this.concatenatedProperties;
}
getConcatenatedProperty(property) {
return this.concatenatedProperties[property];
}
getConcatenatedProperties() {
return Object.keys(this.concatenatedProperties);
}
addConcatenatedProperty(property, value) {
this.hasConcatenatedProperties = true;
if (property in this.concatenatedProperties) {
let val = this.concatenatedProperties[property].concat(value);
this.concatenatedProperties[property] = val;
} else {
this.concatenatedProperties[property] = value;
}
}
hasMergedProperty(property) {
if (!this.hasMergedProperties) return false;
return property in this.mergedProperties;
}
getMergedProperty(property) {
return this.mergedProperties[property];
}
getMergedProperties() {
return Object.keys(this.mergedProperties);
}
addMergedProperty(property, value) {
this.hasMergedProperties = true;
if (isArray(value)) {
throw new Error(`You passed in \`${JSON.stringify(value)}\` as the value for \`foo\` but \`foo\` cannot be an Array`);
}
if (property in this.mergedProperties && this.mergedProperties[property] && value) {
this.mergedProperties[property] = mergeMergedProperties(value, this.mergedProperties[property]);
} else {
value = value === null ? value : value || {};
this.mergedProperties[property] = value;
}
}
getReferenceTypes() {
this.InstanceMetaConstructor = class extends SealedMeta {
constructor() {
super(...arguments);
this.slots = new Slots();
this.referenceTypes = referenceTypes;
}
getReferenceTypes() {
return this.referenceTypes;
}
getPropertyMetadata() {
return this.propertyMetadata;
}
reset(parent) {
this.referenceTypes = (0, _util.dict)();
this.propertyMetadata = (0, _util.dict)();
this.concatenatedProperties = (0, _util.dict)();
this.mergedProperties = (0, _util.dict)();
if (parent) {
this.hasConcatenatedProperties = parent.hasConcatenatedProperties;
for (let prop in parent.concatenatedProperties) {
this.concatenatedProperties[prop] = parent.concatenatedProperties[prop].slice();
}
this.hasMergedProperties = parent.hasMergedProperties;
for (let prop in parent.mergedProperties) {
this.mergedProperties[prop] = (0, _util.assign)({}, parent.mergedProperties[prop]);
}
(0, _util.assign)(this.referenceTypes, parent.referenceTypes);
(0, _util.assign)(this.propertyMetadata, parent.propertyMetadata);
}
}
reseal(obj) {
let meta = _objectReference.Meta.for(obj);
let fresh = new this.InstanceMetaConstructor(obj, {});
let referenceTypes = meta.getReferenceTypes();
let slots = meta.getSlots();
turbocharge((0, _util.assign)(referenceTypes, this.referenceTypes));
turbocharge((0, _util.assign)(slots, fresh.getSlots()));
}
seal() {
let referenceTypes = turbocharge((0, _util.assign)({}, this.referenceTypes));
turbocharge(this.concatenatedProperties);
turbocharge(this.mergedProperties);
if (!this.hasMergedProperties && !this.hasConcatenatedProperties) {
this.init = function () {};
}
let slots = this.slots;
class Slots {
constructor() {
slots.forEach(name => {
this[name] = EMPTY_CACHE;
});
}
}
this.InstanceMetaConstructor = class extends SealedMeta {
constructor() {
super(...arguments);
this.slots = new Slots();
this.referenceTypes = referenceTypes;
}
getReferenceTypes() {
return this.referenceTypes;
}
referenceTypeFor(property) {
return this.referenceTypes[property] || _objectReference.PropertyReference;
}
getSlots() {
return this.slots;
}
};
turbocharge(this);
}
}
referenceTypeFor(property) {
return this.referenceTypes[property] || _objectReference.PropertyReference;
}
getSlots() {
return this.slots;
}
};
turbocharge(this);
}
}
exports.ClassMeta = ClassMeta;
function mergeMergedProperties(attrs, parent) {
let merged = (0, _util.assign)({}, parent);
for (let prop in attrs) {
if (prop in parent && typeof parent[prop] === 'function' && typeof attrs[prop] === 'function') {
let wrapped = (0, _mixin.wrapMethod)(parent, prop, attrs[prop]);
merged[prop] = wrapped;
} else {
merged[prop] = attrs[prop];
}
let merged = (0, _util.assign)({}, parent);
for (let prop in attrs) {
if (prop in parent && typeof parent[prop] === 'function' && typeof attrs[prop] === 'function') {
let wrapped = (0, _mixin.wrapMethod)(parent, prop, attrs[prop]);
merged[prop] = wrapped;
} else {
merged[prop] = attrs[prop];
}
return merged;
}
return merged;
}
class InstanceMeta extends ClassMeta {
constructor() {
super(...arguments);
this[_a] = ClassMeta.fromParent(null);
}
static fromParent(parent) {
return super.fromParent(parent);
}
reset(parent) {
super.reset(parent);
if (parent) this[_objectReference.CLASS_META].reset(parent[_objectReference.CLASS_META]);
}
seal() {
super.seal();
this[_objectReference.CLASS_META].seal();
}
constructor() {
super(...arguments);
this[_a] = ClassMeta.fromParent(null);
}
static fromParent(parent) {
return super.fromParent(parent);
}
reset(parent) {
super.reset(parent);
if (parent) this[_objectReference.CLASS_META].reset(parent[_objectReference.CLASS_META]);
}
seal() {
super.seal();
this[_objectReference.CLASS_META].seal();
}
}
exports.InstanceMeta = InstanceMeta;
_a = _objectReference.CLASS_META;
class GlimmerObject {
constructor(attrs) {
this._super = _utils.ROOT;
this._meta = null;
if (attrs) (0, _util.assign)(this, attrs);
this.constructor[_objectReference.CLASS_META].init(this, attrs || null);
this._super = _utils.ROOT;
(0, _util.initializeGuid)(this);
this.init();
constructor(attrs) {
this._super = _utils.ROOT;
this._meta = null;
if (attrs) (0, _util.assign)(this, attrs);
this.constructor[_objectReference.CLASS_META].init(this, attrs || null);
this._super = _utils.ROOT;
(0, _util.initializeGuid)(this);
this.init();
}
static extend(...extensions) {
return (0, _mixin.extend)(this, ...extensions);
}
static create(attrs) {
return new this(attrs);
}
static reopen(extensions) {
(0, _mixin.toMixin)(extensions).extendPrototype(this);
this[_objectReference.CLASS_META].seal();
(0, _mixin.relinkSubclasses)(this);
}
static reopenClass(extensions) {
(0, _mixin.toMixin)(extensions).extendStatic(this);
this[_objectReference.CLASS_META].seal();
}
static metaForProperty(property) {
let value = this[_objectReference.CLASS_META].metadataForProperty(property);
if (!value) throw new Error(`metaForProperty() could not find a computed property with key '${property}'.`);
return value;
}
static eachComputedProperty(callback) {
let metadata = this[_objectReference.CLASS_META].getPropertyMetadata();
if (!metadata) return;
for (let prop in metadata) {
callback(prop, metadata[prop]);
}
static extend(...extensions) {
return (0, _mixin.extend)(this, ...extensions);
}
static create(attrs) {
return new this(attrs);
}
static reopen(extensions) {
(0, _mixin.toMixin)(extensions).extendPrototype(this);
this[_objectReference.CLASS_META].seal();
(0, _mixin.relinkSubclasses)(this);
}
static reopenClass(extensions) {
(0, _mixin.toMixin)(extensions).extendStatic(this);
this[_objectReference.CLASS_META].seal();
}
static metaForProperty(property) {
let value = this[_objectReference.CLASS_META].metadataForProperty(property);
if (!value) throw new Error(`metaForProperty() could not find a computed property with key '${property}'.`);
return value;
}
static eachComputedProperty(callback) {
let metadata = this[_objectReference.CLASS_META].getPropertyMetadata();
if (!metadata) return;
for (let prop in metadata) {
callback(prop, metadata[prop]);
}
}
init() {}
get(key) {
return this[key];
}
set(key, value) {
this[key] = value;
(0, _validator.bump)();
}
setProperties(attrs) {
(0, _util.assign)(this, attrs);
(0, _validator.bump)();
}
destroy() {}
}
init() {}
get(key) {
return this[key];
}
set(key, value) {
this[key] = value;
(0, _validator.bump)();
}
setProperties(attrs) {
(0, _util.assign)(this, attrs);
(0, _validator.bump)();
}
destroy() {}
}
exports.default = GlimmerObject;

@@ -318,2 +416,2 @@ _b = _objectReference.CLASS_META;

GlimmerObject.isClass = true;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztRQXVDTSxXLEdBQUEsVzs7QUF2Q047O0FBTUE7O0FBQ0E7O0FBSUE7O0FBRUE7Ozs7QUFKQSxNQUFNLEVBQUEsT0FBQSxLQUFOLEtBQUE7QUFNTyxNQUFNLG9DQUFjLFNBQUEsV0FBQSxHQUFvQixDQUF4QyxDQUFBO0FBd0JELFNBQUEsV0FBQSxDQUFBLEdBQUEsRUFBK0I7QUFDbkM7QUFDQTtBQUNBLFdBQUEsR0FBQTtBQUNEO0FBRUQsTUFBQSxVQUFBLFNBQUEscUJBQUEsQ0FBc0M7QUFDcEMsd0JBQW9CLEdBQXBCLEtBQUEsRUFBbUM7QUFDakMsY0FBTSxJQUFBLEtBQUEsQ0FBTixnREFBTSxDQUFOO0FBQ0Q7QUFIbUM7QUFNaEMsTUFBQSxTQUFBLENBQWdCO0FBQXRCLGtCQUFBO0FBQ1UsYUFBQSxjQUFBLEdBQUEsaUJBQUE7QUFDQSxhQUFBLGdCQUFBLEdBQUEsaUJBQUE7QUFDQSxhQUFBLHNCQUFBLEdBQUEsaUJBQUE7QUFDQSxhQUFBLHlCQUFBLEdBQUEsS0FBQTtBQUNBLGFBQUEsZ0JBQUEsR0FBQSxpQkFBQTtBQUNBLGFBQUEsbUJBQUEsR0FBQSxLQUFBO0FBQ0EsYUFBQSxNQUFBLEdBQUEsRUFBQTtBQUNBLGFBQUEsYUFBQSxHQUFBLEVBQUE7QUFDQSxhQUFBLFlBQUEsR0FBQSxFQUFBO0FBQ0EsYUFBQSxVQUFBLEdBQUEsRUFBQTtBQUNBLGFBQUEsS0FBQSxHQUFBLEVBQUE7QUFDRCxhQUFBLHVCQUFBLEdBQUEsSUFBQTtBQWtQUjtBQWhQQyxXQUFBLFVBQUEsQ0FBQSxNQUFBLEVBQTJDO0FBQ3pDLFlBQUksT0FBTyxJQUFYLElBQVcsRUFBWDtBQUNBLGFBQUEsS0FBQSxDQUFBLE1BQUE7QUFDQSxlQUFBLElBQUE7QUFDRDtBQUVELFdBQUEsR0FBQSxDQUFBLE1BQUEsRUFBd0Q7QUFDdEQsWUFB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QSxFQUFlO0FBQ2IsZUFBTyxLQUFQLEdBQU8sQ0FBUDtBQUNEO0FBRUQsUUFBQSxHQUFBLEVBQUEsS0FBQSxFQUEyQjtBQUN6QixhQUFBLEdBQUEsSUFBQSxLQUFBO0FBQ0E7QUFDRDtBQUVELGtCQUFBLEtBQUEsRUFBMkI7QUFDekIsMEJBQUEsSUFBQSxFQUFBLEtBQUE7QUFDQTtBQUNEO0FBRUQsY0FBTyxDQUFLO0FBNUVvQjtrQkFBcEIsYTtLQUdKLDJCO0FBQUQsY0FBQSxFQUFBLElBQTZCLGFBQUEsVUFBQSxDQUE3QixJQUE2QixDQUE3QjtBQUNBLGNBQUEsT0FBQSxHQUFBLElBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBNZXRhLFxuICBJbm5lclJlZmVyZW5jZUZhY3RvcnksXG4gIFByb3BlcnR5UmVmZXJlbmNlLFxuICBDTEFTU19NRVRBLFxufSBmcm9tICdAZ2xpbW1lci9vYmplY3QtcmVmZXJlbmNlJztcbmltcG9ydCB7IGRpY3QsIGFzc2lnbiwgaW5pdGlhbGl6ZUd1aWQgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IE1peGluLCBleHRlbmQgYXMgZXh0ZW5kQ2xhc3MsIHRvTWl4aW4sIHJlbGlua1N1YmNsYXNzZXMsIHdyYXBNZXRob2QgfSBmcm9tICcuL21peGluJztcblxuY29uc3QgeyBpc0FycmF5IH0gPSBBcnJheTtcblxuaW1wb3J0IHsgUk9PVCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgT3B0aW9uLCBEaWN0IH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBidW1wIH0gZnJvbSAnQGdsaW1tZXIvdmFsaWRhdG9yJztcblxuZXhwb3J0IGNvbnN0IEVNUFRZX0NBQ0hFID0gZnVuY3Rpb24gRU1QVFlfQ0FDSEUoKSB7fTtcblxuZXhwb3J0IGludGVyZmFjZSBPYmplY3RXaXRoTWl4aW5zIHtcbiAgW0NMQVNTX01FVEFdOiBDbGFzc01ldGE7XG4gIF9tZXRhOiBNZXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbmNlV2l0aE1peGlucyB7XG4gIGNvbnN0cnVjdG9yOiBPYmplY3RXaXRoTWl4aW5zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdsaW1tZXJPYmplY3RGYWN0b3J5PFQ+IHtcbiAgbmV3IDxVPihhdHRycz86IFUpOiBHbGltbWVyT2JqZWN0ICYgVCAmIFU7XG4gIGV4dGVuZCgpOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxPYmplY3Q+O1xuICBleHRlbmQ8VD4oZXh0ZW5zaW9uOiBUKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8VD47XG4gIGV4dGVuZCguLi5leHRlbnNpb25zOiBPYmplY3RbXSk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PE9iamVjdD47XG4gIGNyZWF0ZTxVPihhdHRycz86IFUpOiBHbGltbWVyT2JqZWN0ICYgVCAmIFU7XG4gIHJlb3BlbjxVPihleHRlbnNpb25zOiBVKTogdm9pZDtcbiAgcmVvcGVuQ2xhc3M8VT4oZXh0ZW5zaW9uczogVSk6IHZvaWQ7XG4gIG1ldGFGb3JQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogT2JqZWN0O1xuICBlYWNoQ29tcHV0ZWRQcm9wZXJ0eShjYWxsYmFjazogKHM6IHN0cmluZywgbzogT2JqZWN0KSA9PiB2b2lkKTogdm9pZDtcbiAgW0NMQVNTX01FVEFdOiBJbnN0YW5jZU1ldGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0dXJib2NoYXJnZTxUPihvYmo6IFQpOiBUIHtcbiAgLy8gZnVuY3Rpb24gRHVtbXkoKSB7fVxuICAvLyBEdW1teS5wcm90b3R5cGUgPSBvYmo7XG4gIHJldHVybiBvYmo7XG59XG5cbmFic3RyYWN0IGNsYXNzIFNlYWxlZE1ldGEgZXh0ZW5kcyBNZXRhIHtcbiAgYWRkUmVmZXJlbmNlVHlwZUZvciguLi5fYXJnczogYW55W10pOiBJbm5lclJlZmVyZW5jZUZhY3Rvcnk8YW55PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbW9kaWZ5IHJlZmVyZW5jZSB0eXBlcyBvbiBhIHNlYWxlZCBtZXRhJyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENsYXNzTWV0YSB7XG4gIHByaXZhdGUgcmVmZXJlbmNlVHlwZXMgPSBkaWN0PElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+PigpO1xuICBwcml2YXRlIHByb3BlcnR5TWV0YWRhdGEgPSBkaWN0PGFueT4oKTtcbiAgcHJpdmF0ZSBjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gZGljdDxhbnlbXT4oKTtcbiAgcHJpdmF0ZSBoYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gZmFsc2U7XG4gIHByaXZhdGUgbWVyZ2VkUHJvcGVydGllcyA9IGRpY3Q8T2JqZWN0PigpO1xuICBwcml2YXRlIGhhc01lcmdlZFByb3BlcnRpZXMgPSBmYWxzZTtcbiAgcHJpdmF0ZSBtaXhpbnM6IE1peGluW10gPSBbXTtcbiAgcHJpdmF0ZSBhcHBsaWVkTWl4aW5zOiBNaXhpbltdID0gW107XG4gIHByaXZhdGUgc3RhdGljTWl4aW5zOiBNaXhpbltdID0gW107XG4gIHByaXZhdGUgc3ViY2xhc3NlczogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PltdID0gW107XG4gIHByaXZhdGUgc2xvdHM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBJbnN0YW5jZU1ldGFDb25zdHJ1Y3RvcjogT3B0aW9uPHR5cGVvZiBNZXRhPiA9IG51bGw7XG5cbiAgc3RhdGljIGZyb21QYXJlbnQocGFyZW50OiBPcHRpb248Q2xhc3NNZXRhPikge1xuICAgIGxldCBtZXRhID0gbmV3IHRoaXMoKTtcbiAgICBtZXRhLnJlc2V0KHBhcmVudCk7XG4gICAgcmV0dXJuIG1ldGE7XG4gIH1cblxuICBzdGF0aWMgZm9yKG9iamVjdDogT2JqZWN0V2l0aE1peGlucyB8IEluc3RhbmNlV2l0aE1peGlucyk6IE9wdGlvbjxDbGFzc01ldGE+IHtcbiAgICBpZiAoQ0xBU1NfTUVUQSBpbiBvYmplY3QpIHJldHVybiAob2JqZWN0IGFzIE9iamVjdFdpdGhNaXhpbnMpW0NMQVNTX01FVEFdO1xuICAgIGVsc2UgaWYgKG9iamVjdC5jb25zdHJ1Y3RvcilcbiAgICAgIHJldHVybiAob2JqZWN0IGFzIEluc3RhbmNlV2l0aE1peGlucykuY29uc3RydWN0b3JbQ0xBU1NfTUVUQV0gfHwgbnVsbDtcbiAgICBlbHNlIHJldHVybiBudWxsO1xuICB9XG5cbiAgaW5pdChvYmplY3Q6IEdsaW1tZXJPYmplY3QsIGF0dHJzOiBPcHRpb248RGljdD4pIHtcbiAgICBpZiAodHlwZW9mIGF0dHJzICE9PSAnb2JqZWN0JyB8fCBhdHRycyA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcykge1xuICAgICAgbGV0IGNvbmNhdFByb3BzID0gdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzO1xuICAgICAgZm9yIChsZXQgcHJvcCBpbiBjb25jYXRQcm9wcykge1xuICAgICAgICBpZiAocHJvcCBpbiBhdHRycykge1xuICAgICAgICAgIGxldCBjb25jYXQgPSBjb25jYXRQcm9wc1twcm9wXS5zbGljZSgpO1xuICAgICAgICAgIG9iamVjdFtwcm9wXSA9IGNvbmNhdC5jb25jYXQoYXR0cnNbcHJvcF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzTWVyZ2VkUHJvcGVydGllcykge1xuICAgICAgbGV0IG1lcmdlZFByb3BzID0gdGhpcy5tZXJnZWRQcm9wZXJ0aWVzO1xuICAgICAgZm9yIChsZXQgcHJvcCBpbiBtZXJnZWRQcm9wcykge1xuICAgICAgICBpZiAocHJvcCBpbiBhdHRycykge1xuICAgICAgICAgIGxldCBtZXJnZWQgPSBhc3NpZ24oe30sIG1lcmdlZFByb3BzW3Byb3BdKTtcbiAgICAgICAgICBvYmplY3RbcHJvcF0gPSBhc3NpZ24obWVyZ2VkLCBhdHRyc1twcm9wXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGRTdGF0aWNNaXhpbihtaXhpbjogTWl4aW4pIHtcbiAgICB0aGlzLnN0YXRpY01peGlucy5wdXNoKG1peGluKTtcbiAgfVxuXG4gIGFkZE1peGluKG1peGluOiBNaXhpbikge1xuICAgIHRoaXMubWl4aW5zLnB1c2gobWl4aW4pO1xuICB9XG5cbiAgZ2V0U3RhdGljTWl4aW5zKCk6IE1peGluW10ge1xuICAgIHJldHVybiB0aGlzLnN0YXRpY01peGlucztcbiAgfVxuXG4gIGdldE1peGlucygpOiBNaXhpbltdIHtcbiAgICByZXR1cm4gdGhpcy5taXhpbnM7XG4gIH1cblxuICBhZGRBcHBsaWVkTWl4aW4obWl4aW46IE1peGluKSB7XG4gICAgdGhpcy5hcHBsaWVkTWl4aW5zLnB1c2gobWl4aW4pO1xuICB9XG5cbiAgaGFzQXBwbGllZE1peGluKG1peGluOiBNaXhpbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFwcGxpZWRNaXhpbnMuaW5kZXhPZihtaXhpbikgIT09IC0xO1xuICB9XG5cbiAgZ2V0QXBwbGllZE1peGlucygpOiBNaXhpbltdIHtcbiAgICByZXR1cm4gdGhpcy5hcHBsaWVkTWl4aW5zO1xuICB9XG5cbiAgaGFzU3RhdGljTWl4aW4obWl4aW46IE1peGluKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGljTWl4aW5zLmluZGV4T2YobWl4aW4pICE9PSAtMTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUFsbE1peGlucyhTdWJjbGFzczogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiwgUGFyZW50OiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KSB7XG4gICAgU3ViY2xhc3NbQ0xBU1NfTUVUQV0uZ2V0TWl4aW5zKCkuZm9yRWFjaCgobTogTWl4aW4pID0+IG0uZXh0ZW5kUHJvdG90eXBlT250byhTdWJjbGFzcywgUGFyZW50KSk7XG4gICAgU3ViY2xhc3NbQ0xBU1NfTUVUQV0uZ2V0U3RhdGljTWl4aW5zKCkuZm9yRWFjaCgobTogTWl4aW4pID0+IG0uZXh0ZW5kU3RhdGljKFN1YmNsYXNzKSk7XG4gICAgU3ViY2xhc3NbQ0xBU1NfTUVUQV0uc2VhbCgpO1xuICB9XG5cbiAgYWRkU3ViY2xhc3MoY29uc3RydWN0b3I6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICB0aGlzLnN1YmNsYXNzZXMucHVzaChjb25zdHJ1Y3Rvcik7XG4gIH1cblxuICBnZXRTdWJjbGFzc2VzKCk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT5bXSB7XG4gICAgcmV0dXJuIHRoaXMuc3ViY2xhc3NlcztcbiAgfVxuXG4gIGFkZFByb3BlcnR5TWV0YWRhdGEocHJvcGVydHk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMucHJvcGVydHlNZXRhZGF0YVtwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgfVxuXG4gIG1ldGFkYXRhRm9yUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IE9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHlNZXRhZGF0YVtwcm9wZXJ0eV07XG4gIH1cblxuICBhZGRSZWZlcmVuY2VUeXBlRm9yKHByb3BlcnR5OiBzdHJpbmcsIHR5cGU6IElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+KSB7XG4gICAgdGhpcy5yZWZlcmVuY2VUeXBlc1twcm9wZXJ0eV0gPSB0eXBlO1xuICB9XG5cbiAgYWRkU2xvdEZvcihwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgdGhpcy5zbG90cy5wdXNoKHByb3BlcnR5KTtcbiAgfVxuXG4gIGhhc0NvbmNhdGVuYXRlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAocHJvcGVydHkgYXMgc3RyaW5nKSBpbiB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRDb25jYXRlbmF0ZWRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcGVydHldO1xuICB9XG5cbiAgZ2V0Q29uY2F0ZW5hdGVkUHJvcGVydGllcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcykgYXMgc3RyaW5nW107XG4gIH1cblxuICBhZGRDb25jYXRlbmF0ZWRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gdHJ1ZTtcblxuICAgIGlmICgocHJvcGVydHkgYXMgc3RyaW5nKSBpbiB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXMpIHtcbiAgICAgIGxldCB2YWwgPSB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcGVydHldLmNvbmNhdCh2YWx1ZSk7XG4gICAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcGVydHldID0gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcGVydHldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgaGFzTWVyZ2VkUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5oYXNNZXJnZWRQcm9wZXJ0aWVzKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIChwcm9wZXJ0eSBhcyBzdHJpbmcpIGluIHRoaXMubWVyZ2VkUHJvcGVydGllcztcbiAgfVxuXG4gIGdldE1lcmdlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBPYmplY3Qge1xuICAgIHJldHVybiB0aGlzLm1lcmdlZFByb3BlcnRpZXNbcHJvcGVydHldO1xuICB9XG5cbiAgZ2V0TWVyZ2VkUHJvcGVydGllcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMubWVyZ2VkUHJvcGVydGllcykgYXMgc3RyaW5nW107XG4gIH1cblxuICBhZGRNZXJnZWRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogRGljdCkge1xuICAgIHRoaXMuaGFzTWVyZ2VkUHJvcGVydGllcyA9IHRydWU7XG5cbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFlvdSBwYXNzZWQgaW4gXFxgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICApfVxcYCBhcyB0aGUgdmFsdWUgZm9yIFxcYGZvb1xcYCBidXQgXFxgZm9vXFxgIGNhbm5vdCBiZSBhbiBBcnJheWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKChwcm9wZXJ0eSBhcyBzdHJpbmcpIGluIHRoaXMubWVyZ2VkUHJvcGVydGllcyAmJiB0aGlzLm1lcmdlZFByb3BlcnRpZXNbcHJvcGVydHldICYmIHZhbHVlKSB7XG4gICAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXNbcHJvcGVydHldID0gbWVyZ2VNZXJnZWRQcm9wZXJ0aWVzKFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgKHRoaXMgYXMgYW55KS5tZXJnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5XVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB2YWx1ZSA9PT0gbnVsbCA/IHZhbHVlIDogdmFsdWUgfHwge307XG4gICAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXNbcHJvcGVydHldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmVmZXJlbmNlVHlwZXMoKTogRGljdDxJbm5lclJlZmVyZW5jZUZhY3Rvcnk8YW55Pj4ge1xuICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZVR5cGVzO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlNZXRhZGF0YSgpOiBEaWN0PGFueT4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5TWV0YWRhdGE7XG4gIH1cblxuICByZXNldChwYXJlbnQ6IE9wdGlvbjxDbGFzc01ldGE+KSB7XG4gICAgdGhpcy5yZWZlcmVuY2VUeXBlcyA9IGRpY3Q8SW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4+KCk7XG4gICAgdGhpcy5wcm9wZXJ0eU1ldGFkYXRhID0gZGljdCgpO1xuICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcyA9IGRpY3Q8YW55W10+KCk7XG4gICAgdGhpcy5tZXJnZWRQcm9wZXJ0aWVzID0gZGljdDxPYmplY3Q+KCk7XG5cbiAgICBpZiAocGFyZW50KSB7XG4gICAgICB0aGlzLmhhc0NvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSBwYXJlbnQuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcztcbiAgICAgIGZvciAobGV0IHByb3AgaW4gcGFyZW50LmNvbmNhdGVuYXRlZFByb3BlcnRpZXMpIHtcbiAgICAgICAgdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzW3Byb3BdID0gcGFyZW50LmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcF0uc2xpY2UoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5oYXNNZXJnZWRQcm9wZXJ0aWVzID0gcGFyZW50Lmhhc01lcmdlZFByb3BlcnRpZXM7XG4gICAgICBmb3IgKGxldCBwcm9wIGluIHBhcmVudC5tZXJnZWRQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wXSA9IGFzc2lnbih7fSwgcGFyZW50Lm1lcmdlZFByb3BlcnRpZXNbcHJvcF0pO1xuICAgICAgfVxuXG4gICAgICBhc3NpZ24odGhpcy5yZWZlcmVuY2VUeXBlcywgcGFyZW50LnJlZmVyZW5jZVR5cGVzKTtcbiAgICAgIGFzc2lnbih0aGlzLnByb3BlcnR5TWV0YWRhdGEsIHBhcmVudC5wcm9wZXJ0eU1ldGFkYXRhKTtcbiAgICB9XG4gIH1cblxuICByZXNlYWwob2JqOiBPYmplY3QpIHtcbiAgICBsZXQgbWV0YSA9IE1ldGEuZm9yKG9iaik7XG4gICAgbGV0IGZyZXNoID0gbmV3IHRoaXMuSW5zdGFuY2VNZXRhQ29uc3RydWN0b3IhKG9iaiwge30pO1xuICAgIGxldCByZWZlcmVuY2VUeXBlcyA9IG1ldGEuZ2V0UmVmZXJlbmNlVHlwZXMoKTtcbiAgICBsZXQgc2xvdHMgPSBtZXRhLmdldFNsb3RzKCk7XG5cbiAgICB0dXJib2NoYXJnZShhc3NpZ24ocmVmZXJlbmNlVHlwZXMsIHRoaXMucmVmZXJlbmNlVHlwZXMpKTtcbiAgICB0dXJib2NoYXJnZShhc3NpZ24oc2xvdHMsIGZyZXNoLmdldFNsb3RzKCkpKTtcbiAgfVxuXG4gIHNlYWwoKSB7XG4gICAgbGV0IHJlZmVyZW5jZVR5cGVzOiBEaWN0PElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+PiA9IHR1cmJvY2hhcmdlKFxuICAgICAgYXNzaWduKHt9LCB0aGlzLnJlZmVyZW5jZVR5cGVzKVxuICAgICk7XG4gICAgdHVyYm9jaGFyZ2UodGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKTtcbiAgICB0dXJib2NoYXJnZSh0aGlzLm1lcmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKCF0aGlzLmhhc01lcmdlZFByb3BlcnRpZXMgJiYgIXRoaXMuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcykge1xuICAgICAgdGhpcy5pbml0ID0gZnVuY3Rpb24oKSB7fTtcbiAgICB9XG5cbiAgICBsZXQgc2xvdHMgPSB0aGlzLnNsb3RzO1xuXG4gICAgY2xhc3MgU2xvdHMge1xuICAgICAgW2luZGV4OiBzdHJpbmddOiB1bmtub3duO1xuXG4gICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc2xvdHMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICB0aGlzW25hbWVdID0gRU1QVFlfQ0FDSEU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuSW5zdGFuY2VNZXRhQ29uc3RydWN0b3IgPSBjbGFzcyBleHRlbmRzIFNlYWxlZE1ldGEge1xuICAgICAgcHJvdGVjdGVkIHNsb3RzOiBTbG90cyA9IG5ldyBTbG90cygpO1xuICAgICAgcHVibGljIHJlZmVyZW5jZVR5cGVzOiBEaWN0PElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+PiA9IHJlZmVyZW5jZVR5cGVzO1xuXG4gICAgICBnZXRSZWZlcmVuY2VUeXBlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlVHlwZXM7XG4gICAgICB9XG5cbiAgICAgIHJlZmVyZW5jZVR5cGVGb3IocHJvcGVydHk6IHN0cmluZyk6IElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlVHlwZXNbcHJvcGVydHldIHx8IFByb3BlcnR5UmVmZXJlbmNlO1xuICAgICAgfVxuXG4gICAgICBnZXRTbG90cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2xvdHM7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHR1cmJvY2hhcmdlKHRoaXMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlTWVyZ2VkUHJvcGVydGllcyhhdHRyczogRGljdCwgcGFyZW50OiBEaWN0KSB7XG4gIGxldCBtZXJnZWQgPSBhc3NpZ24oe30sIHBhcmVudCk7XG5cbiAgZm9yIChsZXQgcHJvcCBpbiBhdHRycykge1xuICAgIGlmIChwcm9wIGluIHBhcmVudCAmJiB0eXBlb2YgcGFyZW50W3Byb3BdID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBhdHRyc1twcm9wXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbGV0IHdyYXBwZWQgPSB3cmFwTWV0aG9kKHBhcmVudCwgcHJvcCwgYXR0cnNbcHJvcF0gYXMgYW55KTtcbiAgICAgIG1lcmdlZFtwcm9wXSA9IHdyYXBwZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lcmdlZFtwcm9wXSA9IGF0dHJzW3Byb3BdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBJbnN0YW5jZU1ldGEgZXh0ZW5kcyBDbGFzc01ldGEge1xuICBwdWJsaWMgW0NMQVNTX01FVEFdOiBDbGFzc01ldGEgPSBDbGFzc01ldGEuZnJvbVBhcmVudChudWxsKTtcblxuICBzdGF0aWMgZnJvbVBhcmVudChwYXJlbnQ6IE9wdGlvbjxJbnN0YW5jZU1ldGE+KTogSW5zdGFuY2VNZXRhIHtcbiAgICByZXR1cm4gc3VwZXIuZnJvbVBhcmVudChwYXJlbnQpIGFzIEluc3RhbmNlTWV0YTtcbiAgfVxuXG4gIHJlc2V0KHBhcmVudDogSW5zdGFuY2VNZXRhKSB7XG4gICAgc3VwZXIucmVzZXQocGFyZW50KTtcbiAgICBpZiAocGFyZW50KSB0aGlzW0NMQVNTX01FVEFdLnJlc2V0KHBhcmVudFtDTEFTU19NRVRBXSk7XG4gIH1cblxuICBzZWFsKCkge1xuICAgIHN1cGVyLnNlYWwoKTtcbiAgICB0aGlzW0NMQVNTX01FVEFdLnNlYWwoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHbGltbWVyT2JqZWN0IHtcbiAgW2luZGV4OiBzdHJpbmddOiB1bmtub3duO1xuXG4gIHN0YXRpYyBbQ0xBU1NfTUVUQV06IEluc3RhbmNlTWV0YSA9IEluc3RhbmNlTWV0YS5mcm9tUGFyZW50KG51bGwpO1xuICBzdGF0aWMgaXNDbGFzcyA9IHRydWU7XG5cbiAgc3RhdGljIGV4dGVuZCgpOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+ICYgdHlwZW9mIEdsaW1tZXJPYmplY3Q7XG4gIHN0YXRpYyBleHRlbmQ8VD4oZXh0ZW5zaW9uOiBUKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8VD4gJiB0eXBlb2YgR2xpbW1lck9iamVjdDtcbiAgc3RhdGljIGV4dGVuZCguLi5leHRlbnNpb25zOiBPYmplY3RbXSk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4gJiB0eXBlb2YgR2xpbW1lck9iamVjdDtcblxuICBzdGF0aWMgZXh0ZW5kKHRoaXM6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4sIC4uLmV4dGVuc2lvbnM6IGFueVtdKSB7XG4gICAgcmV0dXJuIGV4dGVuZENsYXNzKHRoaXMsIC4uLmV4dGVuc2lvbnMpO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZShhdHRycz86IERpY3QgfCBudWxsKTogR2xpbW1lck9iamVjdCB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyByZW9wZW48VT4oZXh0ZW5zaW9uczogVSk6IHZvaWQge1xuICAgIHRvTWl4aW4oZXh0ZW5zaW9ucykuZXh0ZW5kUHJvdG90eXBlKHRoaXMgYXMgYW55KTtcbiAgICB0aGlzW0NMQVNTX01FVEFdLnNlYWwoKTtcblxuICAgIHJlbGlua1N1YmNsYXNzZXModGhpcyBhcyBhbnkpO1xuICB9XG5cbiAgc3RhdGljIHJlb3BlbkNsYXNzPFU+KGV4dGVuc2lvbnM6IFUpOiB2b2lkIHtcbiAgICB0b01peGluKGV4dGVuc2lvbnMpLmV4dGVuZFN0YXRpYyh0aGlzIGFzIGFueSk7XG4gICAgdGhpc1tDTEFTU19NRVRBXS5zZWFsKCk7XG4gIH1cblxuICBzdGF0aWMgbWV0YUZvclByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBPYmplY3Qge1xuICAgIGxldCB2YWx1ZSA9IHRoaXNbQ0xBU1NfTUVUQV0ubWV0YWRhdGFGb3JQcm9wZXJ0eShwcm9wZXJ0eSk7XG4gICAgaWYgKCF2YWx1ZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYG1ldGFGb3JQcm9wZXJ0eSgpIGNvdWxkIG5vdCBmaW5kIGEgY29tcHV0ZWQgcHJvcGVydHkgd2l0aCBrZXkgJyR7cHJvcGVydHl9Jy5gXG4gICAgICApO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHN0YXRpYyBlYWNoQ29tcHV0ZWRQcm9wZXJ0eShjYWxsYmFjazogKHM6IHN0cmluZywgbzogT2JqZWN0KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgbGV0IG1ldGFkYXRhID0gdGhpc1tDTEFTU19NRVRBXS5nZXRQcm9wZXJ0eU1ldGFkYXRhKCk7XG4gICAgaWYgKCFtZXRhZGF0YSkgcmV0dXJuO1xuXG4gICAgZm9yIChsZXQgcHJvcCBpbiBtZXRhZGF0YSkge1xuICAgICAgY2FsbGJhY2socHJvcCwgbWV0YWRhdGFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIF9zdXBlciA9IFJPT1Q7XG4gIF9tZXRhID0gbnVsbDtcbiAgX2d1aWQhOiBudW1iZXI7IC8vIFNldCBieSBpbml0aWFsaXplR3VpZCh0aGlzKSBpbiBjb25zdHJ1Y3RvclxuXG4gIGluaXQoKSB7fVxuXG4gIGNvbnN0cnVjdG9yKGF0dHJzPzogRGljdCB8IG51bGwpIHtcbiAgICBpZiAoYXR0cnMpIGFzc2lnbih0aGlzLCBhdHRycyk7XG4gICAgKHRoaXMuY29uc3RydWN0b3IgYXMgdHlwZW9mIEdsaW1tZXJPYmplY3QpW0NMQVNTX01FVEFdLmluaXQodGhpcywgYXR0cnMgfHwgbnVsbCk7XG4gICAgdGhpcy5fc3VwZXIgPSBST09UO1xuICAgIGluaXRpYWxpemVHdWlkKHRoaXMpO1xuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgZ2V0KGtleTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpc1trZXldO1xuICB9XG5cbiAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpc1trZXldID0gdmFsdWU7XG4gICAgYnVtcCgpO1xuICB9XG5cbiAgc2V0UHJvcGVydGllcyhhdHRyczogT2JqZWN0KSB7XG4gICAgYXNzaWduKHRoaXMsIGF0dHJzKTtcbiAgICBidW1wKCk7XG4gIH1cblxuICBkZXN0cm95KCkge31cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7O0FBTUE7O0FBQ0E7O0FBSUE7O0FBRUE7Ozs7QUFKQSxNQUFNO0FBQUUsRUFBQTtBQUFGLElBQU4sS0FBQTs7QUFNTyxNQUFNLFdBQVcsR0FBRyxTQUFBLFdBQUEsR0FBb0IsQ0FBeEMsQ0FBQTs7OztBQXdCRCxTQUFBLFdBQUEsQ0FBQSxHQUFBLEVBQStCO0FBQ25DO0FBQ0E7QUFDQSxTQUFBLEdBQUE7QUFDRDs7QUFFRCxNQUFBLFVBQUEsU0FBQSxxQkFBQSxDQUFzQztBQUNwQyxFQUFBLG1CQUFtQixDQUFDLEdBQUQsS0FBQSxFQUFnQjtBQUNqQyxVQUFNLElBQUEsS0FBQSxDQUFOLGdEQUFNLENBQU47QUFDRDs7QUFIbUM7O0FBTWhDLE1BQUEsU0FBQSxDQUFnQjtBQUF0QixFQUFBLFdBQUEsR0FBQTtBQUNVLFNBQUEsY0FBQSxHQUFBLGlCQUFBO0FBQ0EsU0FBQSxnQkFBQSxHQUFBLGlCQUFBO0FBQ0EsU0FBQSxzQkFBQSxHQUFBLGlCQUFBO0FBQ0EsU0FBQSx5QkFBQSxHQUFBLEtBQUE7QUFDQSxTQUFBLGdCQUFBLEdBQUEsaUJBQUE7QUFDQSxTQUFBLG1CQUFBLEdBQUEsS0FBQTtBQUNBLFNBQUEsTUFBQSxHQUFBLEVBQUE7QUFDQSxTQUFBLGFBQUEsR0FBQSxFQUFBO0FBQ0EsU0FBQSxZQUFBLEdBQUEsRUFBQTtBQUNBLFNBQUEsVUFBQSxHQUFBLEVBQUE7QUFDQSxTQUFBLEtBQUEsR0FBQSxFQUFBO0FBQ0QsU0FBQSx1QkFBQSxHQUFBLElBQUE7QUFrUFI7O0FBaFBDLFNBQUEsVUFBQSxDQUFBLE1BQUEsRUFBMkM7QUFDekMsUUFBSSxJQUFJLEdBQUcsSUFBWCxJQUFXLEVBQVg7QUFDQSxJQUFBLElBQUksQ0FBSixLQUFBLENBQUEsTUFBQTtBQUNBLFdBQUEsSUFBQTtBQUNEOztBQUVE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QUF1QixDQUFmLENBQVI7QUFDRDtBQUNGOztBQU1ELEVBQUEsSUFBSSxHQUFBLENBQUs7O0FBVVQsRUFBQSxHQUFHLENBQUEsR0FBQSxFQUFZO0FBQ2IsV0FBTyxLQUFQLEdBQU8sQ0FBUDtBQUNEOztBQUVELEVBQUEsR0FBRyxDQUFBLEdBQUEsRUFBQSxLQUFBLEVBQXdCO0FBQ3pCLFNBQUEsR0FBQSxJQUFBLEtBQUE7QUFDQTtBQUNEOztBQUVELEVBQUEsYUFBYSxDQUFBLEtBQUEsRUFBYztBQUN6QixzQkFBTSxJQUFOLEVBQUEsS0FBQTtBQUNBO0FBQ0Q7O0FBRUQsRUFBQSxPQUFPLEdBQUEsQ0FBSzs7QUE1RW9COzs7S0FHeEIsMkI7QUFBRCxhQUFBLENBQUEsRUFBQSxDQUFBLEdBQTZCLFlBQVksQ0FBWixVQUFBLENBQTdCLElBQTZCLENBQTdCO0FBQ0EsYUFBQSxDQUFBLE9BQUEsR0FBQSxJQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgTWV0YSxcbiAgSW5uZXJSZWZlcmVuY2VGYWN0b3J5LFxuICBQcm9wZXJ0eVJlZmVyZW5jZSxcbiAgQ0xBU1NfTUVUQSxcbn0gZnJvbSAnQGdsaW1tZXIvb2JqZWN0LXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBkaWN0LCBhc3NpZ24sIGluaXRpYWxpemVHdWlkIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBNaXhpbiwgZXh0ZW5kIGFzIGV4dGVuZENsYXNzLCB0b01peGluLCByZWxpbmtTdWJjbGFzc2VzLCB3cmFwTWV0aG9kIH0gZnJvbSAnLi9taXhpbic7XG5cbmNvbnN0IHsgaXNBcnJheSB9ID0gQXJyYXk7XG5cbmltcG9ydCB7IFJPT1QgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IE9wdGlvbiwgRGljdCB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgYnVtcCB9IGZyb20gJ0BnbGltbWVyL3ZhbGlkYXRvcic7XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9DQUNIRSA9IGZ1bmN0aW9uIEVNUFRZX0NBQ0hFKCkge307XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0V2l0aE1peGlucyB7XG4gIFtDTEFTU19NRVRBXTogQ2xhc3NNZXRhO1xuICBfbWV0YTogTWV0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnN0YW5jZVdpdGhNaXhpbnMge1xuICBjb25zdHJ1Y3RvcjogT2JqZWN0V2l0aE1peGlucztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHbGltbWVyT2JqZWN0RmFjdG9yeTxUPiB7XG4gIG5ldyA8VT4oYXR0cnM/OiBVKTogR2xpbW1lck9iamVjdCAmIFQgJiBVO1xuICBleHRlbmQoKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8T2JqZWN0PjtcbiAgZXh0ZW5kPFQ+KGV4dGVuc2lvbjogVCk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PFQ+O1xuICBleHRlbmQoLi4uZXh0ZW5zaW9uczogT2JqZWN0W10pOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxPYmplY3Q+O1xuICBjcmVhdGU8VT4oYXR0cnM/OiBVKTogR2xpbW1lck9iamVjdCAmIFQgJiBVO1xuICByZW9wZW48VT4oZXh0ZW5zaW9uczogVSk6IHZvaWQ7XG4gIHJlb3BlbkNsYXNzPFU+KGV4dGVuc2lvbnM6IFUpOiB2b2lkO1xuICBtZXRhRm9yUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IE9iamVjdDtcbiAgZWFjaENvbXB1dGVkUHJvcGVydHkoY2FsbGJhY2s6IChzOiBzdHJpbmcsIG86IE9iamVjdCkgPT4gdm9pZCk6IHZvaWQ7XG4gIFtDTEFTU19NRVRBXTogSW5zdGFuY2VNZXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHVyYm9jaGFyZ2U8VD4ob2JqOiBUKTogVCB7XG4gIC8vIGZ1bmN0aW9uIER1bW15KCkge31cbiAgLy8gRHVtbXkucHJvdG90eXBlID0gb2JqO1xuICByZXR1cm4gb2JqO1xufVxuXG5hYnN0cmFjdCBjbGFzcyBTZWFsZWRNZXRhIGV4dGVuZHMgTWV0YSB7XG4gIGFkZFJlZmVyZW5jZVR5cGVGb3IoLi4uX2FyZ3M6IGFueVtdKTogSW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4ge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IG1vZGlmeSByZWZlcmVuY2UgdHlwZXMgb24gYSBzZWFsZWQgbWV0YScpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDbGFzc01ldGEge1xuICBwcml2YXRlIHJlZmVyZW5jZVR5cGVzID0gZGljdDxJbm5lclJlZmVyZW5jZUZhY3Rvcnk8YW55Pj4oKTtcbiAgcHJpdmF0ZSBwcm9wZXJ0eU1ldGFkYXRhID0gZGljdDxhbnk+KCk7XG4gIHByaXZhdGUgY29uY2F0ZW5hdGVkUHJvcGVydGllcyA9IGRpY3Q8YW55W10+KCk7XG4gIHByaXZhdGUgaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcyA9IGZhbHNlO1xuICBwcml2YXRlIG1lcmdlZFByb3BlcnRpZXMgPSBkaWN0PE9iamVjdD4oKTtcbiAgcHJpdmF0ZSBoYXNNZXJnZWRQcm9wZXJ0aWVzID0gZmFsc2U7XG4gIHByaXZhdGUgbWl4aW5zOiBNaXhpbltdID0gW107XG4gIHByaXZhdGUgYXBwbGllZE1peGluczogTWl4aW5bXSA9IFtdO1xuICBwcml2YXRlIHN0YXRpY01peGluczogTWl4aW5bXSA9IFtdO1xuICBwcml2YXRlIHN1YmNsYXNzZXM6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT5bXSA9IFtdO1xuICBwcml2YXRlIHNsb3RzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgSW5zdGFuY2VNZXRhQ29uc3RydWN0b3I6IE9wdGlvbjx0eXBlb2YgTWV0YT4gPSBudWxsO1xuXG4gIHN0YXRpYyBmcm9tUGFyZW50KHBhcmVudDogT3B0aW9uPENsYXNzTWV0YT4pIHtcbiAgICBsZXQgbWV0YSA9IG5ldyB0aGlzKCk7XG4gICAgbWV0YS5yZXNldChwYXJlbnQpO1xuICAgIHJldHVybiBtZXRhO1xuICB9XG5cbiAgc3RhdGljIGZvcihvYmplY3Q6IE9iamVjdFdpdGhNaXhpbnMgfCBJbnN0YW5jZVdpdGhNaXhpbnMpOiBPcHRpb248Q2xhc3NNZXRhPiB7XG4gICAgaWYgKENMQVNTX01FVEEgaW4gb2JqZWN0KSByZXR1cm4gKG9iamVjdCBhcyBPYmplY3RXaXRoTWl4aW5zKVtDTEFTU19NRVRBXTtcbiAgICBlbHNlIGlmIChvYmplY3QuY29uc3RydWN0b3IpXG4gICAgICByZXR1cm4gKG9iamVjdCBhcyBJbnN0YW5jZVdpdGhNaXhpbnMpLmNvbnN0cnVjdG9yW0NMQVNTX01FVEFdIHx8IG51bGw7XG4gICAgZWxzZSByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGluaXQob2JqZWN0OiBHbGltbWVyT2JqZWN0LCBhdHRyczogT3B0aW9uPERpY3Q+KSB7XG4gICAgaWYgKHR5cGVvZiBhdHRycyAhPT0gJ29iamVjdCcgfHwgYXR0cnMgPT09IG51bGwpIHJldHVybjtcblxuICAgIGlmICh0aGlzLmhhc0NvbmNhdGVuYXRlZFByb3BlcnRpZXMpIHtcbiAgICAgIGxldCBjb25jYXRQcm9wcyA9IHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcztcbiAgICAgIGZvciAobGV0IHByb3AgaW4gY29uY2F0UHJvcHMpIHtcbiAgICAgICAgaWYgKHByb3AgaW4gYXR0cnMpIHtcbiAgICAgICAgICBsZXQgY29uY2F0ID0gY29uY2F0UHJvcHNbcHJvcF0uc2xpY2UoKTtcbiAgICAgICAgICBvYmplY3RbcHJvcF0gPSBjb25jYXQuY29uY2F0KGF0dHJzW3Byb3BdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc01lcmdlZFByb3BlcnRpZXMpIHtcbiAgICAgIGxldCBtZXJnZWRQcm9wcyA9IHRoaXMubWVyZ2VkUHJvcGVydGllcztcbiAgICAgIGZvciAobGV0IHByb3AgaW4gbWVyZ2VkUHJvcHMpIHtcbiAgICAgICAgaWYgKHByb3AgaW4gYXR0cnMpIHtcbiAgICAgICAgICBsZXQgbWVyZ2VkID0gYXNzaWduKHt9LCBtZXJnZWRQcm9wc1twcm9wXSk7XG4gICAgICAgICAgb2JqZWN0W3Byb3BdID0gYXNzaWduKG1lcmdlZCwgYXR0cnNbcHJvcF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkU3RhdGljTWl4aW4obWl4aW46IE1peGluKSB7XG4gICAgdGhpcy5zdGF0aWNNaXhpbnMucHVzaChtaXhpbik7XG4gIH1cblxuICBhZGRNaXhpbihtaXhpbjogTWl4aW4pIHtcbiAgICB0aGlzLm1peGlucy5wdXNoKG1peGluKTtcbiAgfVxuXG4gIGdldFN0YXRpY01peGlucygpOiBNaXhpbltdIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0aWNNaXhpbnM7XG4gIH1cblxuICBnZXRNaXhpbnMoKTogTWl4aW5bXSB7XG4gICAgcmV0dXJuIHRoaXMubWl4aW5zO1xuICB9XG5cbiAgYWRkQXBwbGllZE1peGluKG1peGluOiBNaXhpbikge1xuICAgIHRoaXMuYXBwbGllZE1peGlucy5wdXNoKG1peGluKTtcbiAgfVxuXG4gIGhhc0FwcGxpZWRNaXhpbihtaXhpbjogTWl4aW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hcHBsaWVkTWl4aW5zLmluZGV4T2YobWl4aW4pICE9PSAtMTtcbiAgfVxuXG4gIGdldEFwcGxpZWRNaXhpbnMoKTogTWl4aW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbGllZE1peGlucztcbiAgfVxuXG4gIGhhc1N0YXRpY01peGluKG1peGluOiBNaXhpbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRpY01peGlucy5pbmRleE9mKG1peGluKSAhPT0gLTE7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBbGxNaXhpbnMoU3ViY2xhc3M6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4sIFBhcmVudDogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICAgIFN1YmNsYXNzW0NMQVNTX01FVEFdLmdldE1peGlucygpLmZvckVhY2goKG06IE1peGluKSA9PiBtLmV4dGVuZFByb3RvdHlwZU9udG8oU3ViY2xhc3MsIFBhcmVudCkpO1xuICAgIFN1YmNsYXNzW0NMQVNTX01FVEFdLmdldFN0YXRpY01peGlucygpLmZvckVhY2goKG06IE1peGluKSA9PiBtLmV4dGVuZFN0YXRpYyhTdWJjbGFzcykpO1xuICAgIFN1YmNsYXNzW0NMQVNTX01FVEFdLnNlYWwoKTtcbiAgfVxuXG4gIGFkZFN1YmNsYXNzKGNvbnN0cnVjdG9yOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KSB7XG4gICAgdGhpcy5zdWJjbGFzc2VzLnB1c2goY29uc3RydWN0b3IpO1xuICB9XG5cbiAgZ2V0U3ViY2xhc3NlcygpOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+W10ge1xuICAgIHJldHVybiB0aGlzLnN1YmNsYXNzZXM7XG4gIH1cblxuICBhZGRQcm9wZXJ0eU1ldGFkYXRhKHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnByb3BlcnR5TWV0YWRhdGFbcHJvcGVydHldID0gdmFsdWU7XG4gIH1cblxuICBtZXRhZGF0YUZvclByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBPYmplY3Qge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5TWV0YWRhdGFbcHJvcGVydHldO1xuICB9XG5cbiAgYWRkUmVmZXJlbmNlVHlwZUZvcihwcm9wZXJ0eTogc3RyaW5nLCB0eXBlOiBJbm5lclJlZmVyZW5jZUZhY3Rvcnk8YW55Pikge1xuICAgIHRoaXMucmVmZXJlbmNlVHlwZXNbcHJvcGVydHldID0gdHlwZTtcbiAgfVxuXG4gIGFkZFNsb3RGb3IocHJvcGVydHk6IHN0cmluZykge1xuICAgIHRoaXMuc2xvdHMucHVzaChwcm9wZXJ0eSk7XG4gIH1cblxuICBoYXNDb25jYXRlbmF0ZWRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmhhc0NvbmNhdGVuYXRlZFByb3BlcnRpZXMpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKHByb3BlcnR5IGFzIHN0cmluZykgaW4gdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0Q29uY2F0ZW5hdGVkUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzW3Byb3BlcnR5XTtcbiAgfVxuXG4gIGdldENvbmNhdGVuYXRlZFByb3BlcnRpZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXMpIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgYWRkQ29uY2F0ZW5hdGVkUHJvcGVydHkocHJvcGVydHk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcyA9IHRydWU7XG5cbiAgICBpZiAoKHByb3BlcnR5IGFzIHN0cmluZykgaW4gdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSB7XG4gICAgICBsZXQgdmFsID0gdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzW3Byb3BlcnR5XS5jb25jYXQodmFsdWUpO1xuICAgICAgdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzW3Byb3BlcnR5XSA9IHZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGhhc01lcmdlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaGFzTWVyZ2VkUHJvcGVydGllcykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAocHJvcGVydHkgYXMgc3RyaW5nKSBpbiB0aGlzLm1lcmdlZFByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRNZXJnZWRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogT2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5tZXJnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5XTtcbiAgfVxuXG4gIGdldE1lcmdlZFByb3BlcnRpZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLm1lcmdlZFByb3BlcnRpZXMpIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgYWRkTWVyZ2VkUHJvcGVydHkocHJvcGVydHk6IHN0cmluZywgdmFsdWU6IERpY3QpIHtcbiAgICB0aGlzLmhhc01lcmdlZFByb3BlcnRpZXMgPSB0cnVlO1xuXG4gICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBZb3UgcGFzc2VkIGluIFxcYCR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgKX1cXGAgYXMgdGhlIHZhbHVlIGZvciBcXGBmb29cXGAgYnV0IFxcYGZvb1xcYCBjYW5ub3QgYmUgYW4gQXJyYXlgXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICgocHJvcGVydHkgYXMgc3RyaW5nKSBpbiB0aGlzLm1lcmdlZFByb3BlcnRpZXMgJiYgdGhpcy5tZXJnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5XSAmJiB2YWx1ZSkge1xuICAgICAgdGhpcy5tZXJnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5XSA9IG1lcmdlTWVyZ2VkUHJvcGVydGllcyhcbiAgICAgICAgdmFsdWUsXG4gICAgICAgICh0aGlzIGFzIGFueSkubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgPT09IG51bGwgPyB2YWx1ZSA6IHZhbHVlIHx8IHt9O1xuICAgICAgdGhpcy5tZXJnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldFJlZmVyZW5jZVR5cGVzKCk6IERpY3Q8SW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4+IHtcbiAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VUeXBlcztcbiAgfVxuXG4gIGdldFByb3BlcnR5TWV0YWRhdGEoKTogRGljdDxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eU1ldGFkYXRhO1xuICB9XG5cbiAgcmVzZXQocGFyZW50OiBPcHRpb248Q2xhc3NNZXRhPikge1xuICAgIHRoaXMucmVmZXJlbmNlVHlwZXMgPSBkaWN0PElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+PigpO1xuICAgIHRoaXMucHJvcGVydHlNZXRhZGF0YSA9IGRpY3QoKTtcbiAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSBkaWN0PGFueVtdPigpO1xuICAgIHRoaXMubWVyZ2VkUHJvcGVydGllcyA9IGRpY3Q8T2JqZWN0PigpO1xuXG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgdGhpcy5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gcGFyZW50Lmhhc0NvbmNhdGVuYXRlZFByb3BlcnRpZXM7XG4gICAgICBmb3IgKGxldCBwcm9wIGluIHBhcmVudC5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wXSA9IHBhcmVudC5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzW3Byb3BdLnNsaWNlKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaGFzTWVyZ2VkUHJvcGVydGllcyA9IHBhcmVudC5oYXNNZXJnZWRQcm9wZXJ0aWVzO1xuICAgICAgZm9yIChsZXQgcHJvcCBpbiBwYXJlbnQubWVyZ2VkUHJvcGVydGllcykge1xuICAgICAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXNbcHJvcF0gPSBhc3NpZ24oe30sIHBhcmVudC5tZXJnZWRQcm9wZXJ0aWVzW3Byb3BdKTtcbiAgICAgIH1cblxuICAgICAgYXNzaWduKHRoaXMucmVmZXJlbmNlVHlwZXMsIHBhcmVudC5yZWZlcmVuY2VUeXBlcyk7XG4gICAgICBhc3NpZ24odGhpcy5wcm9wZXJ0eU1ldGFkYXRhLCBwYXJlbnQucHJvcGVydHlNZXRhZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgcmVzZWFsKG9iajogT2JqZWN0KSB7XG4gICAgbGV0IG1ldGEgPSBNZXRhLmZvcihvYmopO1xuICAgIGxldCBmcmVzaCA9IG5ldyB0aGlzLkluc3RhbmNlTWV0YUNvbnN0cnVjdG9yIShvYmosIHt9KTtcbiAgICBsZXQgcmVmZXJlbmNlVHlwZXMgPSBtZXRhLmdldFJlZmVyZW5jZVR5cGVzKCk7XG4gICAgbGV0IHNsb3RzID0gbWV0YS5nZXRTbG90cygpO1xuXG4gICAgdHVyYm9jaGFyZ2UoYXNzaWduKHJlZmVyZW5jZVR5cGVzLCB0aGlzLnJlZmVyZW5jZVR5cGVzKSk7XG4gICAgdHVyYm9jaGFyZ2UoYXNzaWduKHNsb3RzLCBmcmVzaC5nZXRTbG90cygpKSk7XG4gIH1cblxuICBzZWFsKCkge1xuICAgIGxldCByZWZlcmVuY2VUeXBlczogRGljdDxJbm5lclJlZmVyZW5jZUZhY3Rvcnk8YW55Pj4gPSB0dXJib2NoYXJnZShcbiAgICAgIGFzc2lnbih7fSwgdGhpcy5yZWZlcmVuY2VUeXBlcylcbiAgICApO1xuICAgIHR1cmJvY2hhcmdlKHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcyk7XG4gICAgdHVyYm9jaGFyZ2UodGhpcy5tZXJnZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmICghdGhpcy5oYXNNZXJnZWRQcm9wZXJ0aWVzICYmICF0aGlzLmhhc0NvbmNhdGVuYXRlZFByb3BlcnRpZXMpIHtcbiAgICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uKCkge307XG4gICAgfVxuXG4gICAgbGV0IHNsb3RzID0gdGhpcy5zbG90cztcblxuICAgIGNsYXNzIFNsb3RzIHtcbiAgICAgIFtpbmRleDogc3RyaW5nXTogdW5rbm93bjtcblxuICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHNsb3RzLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgdGhpc1tuYW1lXSA9IEVNUFRZX0NBQ0hFO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLkluc3RhbmNlTWV0YUNvbnN0cnVjdG9yID0gY2xhc3MgZXh0ZW5kcyBTZWFsZWRNZXRhIHtcbiAgICAgIHByb3RlY3RlZCBzbG90czogU2xvdHMgPSBuZXcgU2xvdHMoKTtcbiAgICAgIHB1YmxpYyByZWZlcmVuY2VUeXBlczogRGljdDxJbm5lclJlZmVyZW5jZUZhY3Rvcnk8YW55Pj4gPSByZWZlcmVuY2VUeXBlcztcblxuICAgICAgZ2V0UmVmZXJlbmNlVHlwZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZVR5cGVzO1xuICAgICAgfVxuXG4gICAgICByZWZlcmVuY2VUeXBlRm9yKHByb3BlcnR5OiBzdHJpbmcpOiBJbm5lclJlZmVyZW5jZUZhY3Rvcnk8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZVR5cGVzW3Byb3BlcnR5XSB8fCBQcm9wZXJ0eVJlZmVyZW5jZTtcbiAgICAgIH1cblxuICAgICAgZ2V0U2xvdHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNsb3RzO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0dXJib2NoYXJnZSh0aGlzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZU1lcmdlZFByb3BlcnRpZXMoYXR0cnM6IERpY3QsIHBhcmVudDogRGljdCkge1xuICBsZXQgbWVyZ2VkID0gYXNzaWduKHt9LCBwYXJlbnQpO1xuXG4gIGZvciAobGV0IHByb3AgaW4gYXR0cnMpIHtcbiAgICBpZiAocHJvcCBpbiBwYXJlbnQgJiYgdHlwZW9mIHBhcmVudFtwcm9wXSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgYXR0cnNbcHJvcF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGxldCB3cmFwcGVkID0gd3JhcE1ldGhvZChwYXJlbnQsIHByb3AsIGF0dHJzW3Byb3BdIGFzIGFueSk7XG4gICAgICBtZXJnZWRbcHJvcF0gPSB3cmFwcGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZXJnZWRbcHJvcF0gPSBhdHRyc1twcm9wXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkO1xufVxuXG5leHBvcnQgY2xhc3MgSW5zdGFuY2VNZXRhIGV4dGVuZHMgQ2xhc3NNZXRhIHtcbiAgcHVibGljIFtDTEFTU19NRVRBXTogQ2xhc3NNZXRhID0gQ2xhc3NNZXRhLmZyb21QYXJlbnQobnVsbCk7XG5cbiAgc3RhdGljIGZyb21QYXJlbnQocGFyZW50OiBPcHRpb248SW5zdGFuY2VNZXRhPik6IEluc3RhbmNlTWV0YSB7XG4gICAgcmV0dXJuIHN1cGVyLmZyb21QYXJlbnQocGFyZW50KSBhcyBJbnN0YW5jZU1ldGE7XG4gIH1cblxuICByZXNldChwYXJlbnQ6IEluc3RhbmNlTWV0YSkge1xuICAgIHN1cGVyLnJlc2V0KHBhcmVudCk7XG4gICAgaWYgKHBhcmVudCkgdGhpc1tDTEFTU19NRVRBXS5yZXNldChwYXJlbnRbQ0xBU1NfTUVUQV0pO1xuICB9XG5cbiAgc2VhbCgpIHtcbiAgICBzdXBlci5zZWFsKCk7XG4gICAgdGhpc1tDTEFTU19NRVRBXS5zZWFsKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2xpbW1lck9iamVjdCB7XG4gIFtpbmRleDogc3RyaW5nXTogdW5rbm93bjtcblxuICBzdGF0aWMgW0NMQVNTX01FVEFdOiBJbnN0YW5jZU1ldGEgPSBJbnN0YW5jZU1ldGEuZnJvbVBhcmVudChudWxsKTtcbiAgc3RhdGljIGlzQ2xhc3MgPSB0cnVlO1xuXG4gIHN0YXRpYyBleHRlbmQoKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiAmIHR5cGVvZiBHbGltbWVyT2JqZWN0O1xuICBzdGF0aWMgZXh0ZW5kPFQ+KGV4dGVuc2lvbjogVCk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PFQ+ICYgdHlwZW9mIEdsaW1tZXJPYmplY3Q7XG4gIHN0YXRpYyBleHRlbmQoLi4uZXh0ZW5zaW9uczogT2JqZWN0W10pOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+ICYgdHlwZW9mIEdsaW1tZXJPYmplY3Q7XG5cbiAgc3RhdGljIGV4dGVuZCh0aGlzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+LCAuLi5leHRlbnNpb25zOiBhbnlbXSkge1xuICAgIHJldHVybiBleHRlbmRDbGFzcyh0aGlzLCAuLi5leHRlbnNpb25zKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGUoYXR0cnM/OiBEaWN0IHwgbnVsbCk6IEdsaW1tZXJPYmplY3Qge1xuICAgIHJldHVybiBuZXcgdGhpcyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcmVvcGVuPFU+KGV4dGVuc2lvbnM6IFUpOiB2b2lkIHtcbiAgICB0b01peGluKGV4dGVuc2lvbnMpLmV4dGVuZFByb3RvdHlwZSh0aGlzIGFzIGFueSk7XG4gICAgdGhpc1tDTEFTU19NRVRBXS5zZWFsKCk7XG5cbiAgICByZWxpbmtTdWJjbGFzc2VzKHRoaXMgYXMgYW55KTtcbiAgfVxuXG4gIHN0YXRpYyByZW9wZW5DbGFzczxVPihleHRlbnNpb25zOiBVKTogdm9pZCB7XG4gICAgdG9NaXhpbihleHRlbnNpb25zKS5leHRlbmRTdGF0aWModGhpcyBhcyBhbnkpO1xuICAgIHRoaXNbQ0xBU1NfTUVUQV0uc2VhbCgpO1xuICB9XG5cbiAgc3RhdGljIG1ldGFGb3JQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogT2JqZWN0IHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzW0NMQVNTX01FVEFdLm1ldGFkYXRhRm9yUHJvcGVydHkocHJvcGVydHkpO1xuICAgIGlmICghdmFsdWUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBtZXRhRm9yUHJvcGVydHkoKSBjb3VsZCBub3QgZmluZCBhIGNvbXB1dGVkIHByb3BlcnR5IHdpdGgga2V5ICcke3Byb3BlcnR5fScuYFxuICAgICAgKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzdGF0aWMgZWFjaENvbXB1dGVkUHJvcGVydHkoY2FsbGJhY2s6IChzOiBzdHJpbmcsIG86IE9iamVjdCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGxldCBtZXRhZGF0YSA9IHRoaXNbQ0xBU1NfTUVUQV0uZ2V0UHJvcGVydHlNZXRhZGF0YSgpO1xuICAgIGlmICghbWV0YWRhdGEpIHJldHVybjtcblxuICAgIGZvciAobGV0IHByb3AgaW4gbWV0YWRhdGEpIHtcbiAgICAgIGNhbGxiYWNrKHByb3AsIG1ldGFkYXRhW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICBfc3VwZXIgPSBST09UO1xuICBfbWV0YSA9IG51bGw7XG4gIF9ndWlkITogbnVtYmVyOyAvLyBTZXQgYnkgaW5pdGlhbGl6ZUd1aWQodGhpcykgaW4gY29uc3RydWN0b3JcblxuICBpbml0KCkge31cblxuICBjb25zdHJ1Y3RvcihhdHRycz86IERpY3QgfCBudWxsKSB7XG4gICAgaWYgKGF0dHJzKSBhc3NpZ24odGhpcywgYXR0cnMpO1xuICAgICh0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBHbGltbWVyT2JqZWN0KVtDTEFTU19NRVRBXS5pbml0KHRoaXMsIGF0dHJzIHx8IG51bGwpO1xuICAgIHRoaXMuX3N1cGVyID0gUk9PVDtcbiAgICBpbml0aWFsaXplR3VpZCh0aGlzKTtcbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIGdldChrZXk6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXNba2V5XTtcbiAgfVxuXG4gIHNldChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXNba2V5XSA9IHZhbHVlO1xuICAgIGJ1bXAoKTtcbiAgfVxuXG4gIHNldFByb3BlcnRpZXMoYXR0cnM6IE9iamVjdCkge1xuICAgIGFzc2lnbih0aGlzLCBhdHRycyk7XG4gICAgYnVtcCgpO1xuICB9XG5cbiAgZGVzdHJveSgpIHt9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9

@@ -1,30 +0,40 @@

'use strict';
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
value: true
});
exports.ROOT = ROOT;
exports.hasSuper = hasSuper;
exports.checkHasSuper = void 0;
const HAS_SUPER_PATTERN = /\.(_super|call\(this|apply\(this)/;
const checkHasSuper = exports.checkHasSuper = function () {
let sourceAvailable = function () {
return this;
}.toString().indexOf('return this') > -1;
if (sourceAvailable) {
return function checkHasSuper(func) {
return HAS_SUPER_PATTERN.test(func.toString());
};
}
return function checkHasSuper() {
return true;
const checkHasSuper = function () {
let sourceAvailable = function () {
return this;
}.toString().indexOf('return this') > -1;
if (sourceAvailable) {
return function checkHasSuper(func) {
return HAS_SUPER_PATTERN.test(func.toString());
};
}
return function checkHasSuper() {
return true;
};
}();
exports.checkHasSuper = checkHasSuper;
function ROOT(..._args) {}
ROOT.__hasSuper = false;
function hasSuper(func) {
if (func['__hasSuper'] === undefined) {
func['__hasSuper'] = checkHasSuper(func);
}
return func['__hasSuper'];
if (func['__hasSuper'] === undefined) {
func['__hasSuper'] = checkHasSuper(func);
}
return func['__hasSuper'];
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7UUF1Qk0sSSxHQUFBLEk7UUFHQSxRLEdBQUEsUTtBQXhCTixNQUFNLG9CQUFOLG1DQUFBO0FBRU8sTUFBTSx3Q0FBaUIsWUFBQTtBQUM1QixRQUFJLGtCQUNGLFlBQUE7QUFDRSxlQUFBLElBQUE7QUFERixLQUFBLENBQUEsUUFBQSxHQUFBLE9BQUEsQ0FBQSxhQUFBLElBSTRCLENBTDlCLENBQUE7QUFPQSxRQUFBLGVBQUEsRUFBcUI7QUFDbkIsZUFBTyxTQUFBLGFBQUEsQ0FBQSxJQUFBLEVBQXFDO0FBQzFDLG1CQUFPLGtCQUFBLElBQUEsQ0FBdUIsS0FBOUIsUUFBOEIsRUFBdkIsQ0FBUDtBQURGLFNBQUE7QUFHRDtBQUVELFdBQU8sU0FBQSxhQUFBLEdBQXNCO0FBQzNCLGVBQUEsSUFBQTtBQURGLEtBQUE7QUFkSyxDQUF1QixFQUF2QjtBQW1CRCxTQUFBLElBQUEsQ0FBZSxHQUFmLEtBQUEsRUFBOEIsQ0FBSTtBQUN2QyxLQUFBLFVBQUEsR0FBQSxLQUFBO0FBRUssU0FBQSxRQUFBLENBQUEsSUFBQSxFQUF3QztBQUM1QyxRQUFJLEtBQUEsWUFBQSxNQUFKLFNBQUEsRUFBc0M7QUFDcEMsYUFBQSxZQUFBLElBQXFCLGNBQXJCLElBQXFCLENBQXJCO0FBQ0Q7QUFDRCxXQUFPLEtBQVAsWUFBTyxDQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaWN0IH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5cbmNvbnN0IEhBU19TVVBFUl9QQVRURVJOID0gL1xcLihfc3VwZXJ8Y2FsbFxcKHRoaXN8YXBwbHlcXCh0aGlzKS87XG5cbmV4cG9ydCBjb25zdCBjaGVja0hhc1N1cGVyID0gKGZ1bmN0aW9uKCkge1xuICBsZXQgc291cmNlQXZhaWxhYmxlID1cbiAgICBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAgIC50b1N0cmluZygpXG4gICAgICAuaW5kZXhPZigncmV0dXJuIHRoaXMnKSA+IC0xO1xuXG4gIGlmIChzb3VyY2VBdmFpbGFibGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gY2hlY2tIYXNTdXBlcihmdW5jOiBGdW5jdGlvbikge1xuICAgICAgcmV0dXJuIEhBU19TVVBFUl9QQVRURVJOLnRlc3QoZnVuYy50b1N0cmluZygpKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGNoZWNrSGFzU3VwZXIoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG59KSgpO1xuXG5leHBvcnQgZnVuY3Rpb24gUk9PVCguLi5fYXJnczogYW55W10pIHt9XG4oUk9PVCBhcyBhbnkpLl9faGFzU3VwZXIgPSBmYWxzZTtcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1N1cGVyKGZ1bmM6IEZ1bmN0aW9uICYgRGljdCkge1xuICBpZiAoZnVuY1snX19oYXNTdXBlciddID09PSB1bmRlZmluZWQpIHtcbiAgICBmdW5jWydfX2hhc1N1cGVyJ10gPSBjaGVja0hhc1N1cGVyKGZ1bmMpO1xuICB9XG4gIHJldHVybiBmdW5jWydfX2hhc1N1cGVyJ107XG59XG4iXSwic291cmNlUm9vdCI6IiJ9
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFFQSxNQUFNLGlCQUFpQixHQUF2QixtQ0FBQTs7QUFFTyxNQUFNLGFBQWEsR0FBSSxZQUFBO0FBQzVCLE1BQUksZUFBZSxHQUNqQixZQUFBO0FBQ0UsV0FBQSxJQUFBO0FBREYsR0FBQSxDQUFBLFFBQUEsR0FBQSxPQUFBLENBQUEsYUFBQSxJQUk0QixDQUw5QixDQUFBOztBQU9BLE1BQUEsZUFBQSxFQUFxQjtBQUNuQixXQUFPLFNBQUEsYUFBQSxDQUFBLElBQUEsRUFBcUM7QUFDMUMsYUFBTyxpQkFBaUIsQ0FBakIsSUFBQSxDQUF1QixJQUFJLENBQWxDLFFBQThCLEVBQXZCLENBQVA7QUFERixLQUFBO0FBR0Q7O0FBRUQsU0FBTyxTQUFBLGFBQUEsR0FBc0I7QUFDM0IsV0FBQSxJQUFBO0FBREYsR0FBQTtBQWRLLENBQXVCLEVBQXZCOzs7O0FBbUJELFNBQUEsSUFBQSxDQUFlLEdBQWYsS0FBQSxFQUE4QixDQUFJOztBQUN2QyxJQUFZLENBQVosVUFBQSxHQUFBLEtBQUE7O0FBRUssU0FBQSxRQUFBLENBQUEsSUFBQSxFQUF3QztBQUM1QyxNQUFJLElBQUksQ0FBSixZQUFJLENBQUosS0FBSixTQUFBLEVBQXNDO0FBQ3BDLElBQUEsSUFBSSxDQUFKLFlBQUksQ0FBSixHQUFxQixhQUFhLENBQWxDLElBQWtDLENBQWxDO0FBQ0Q7O0FBQ0QsU0FBTyxJQUFJLENBQVgsWUFBVyxDQUFYO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaWN0IH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5cbmNvbnN0IEhBU19TVVBFUl9QQVRURVJOID0gL1xcLihfc3VwZXJ8Y2FsbFxcKHRoaXN8YXBwbHlcXCh0aGlzKS87XG5cbmV4cG9ydCBjb25zdCBjaGVja0hhc1N1cGVyID0gKGZ1bmN0aW9uKCkge1xuICBsZXQgc291cmNlQXZhaWxhYmxlID1cbiAgICBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAgIC50b1N0cmluZygpXG4gICAgICAuaW5kZXhPZigncmV0dXJuIHRoaXMnKSA+IC0xO1xuXG4gIGlmIChzb3VyY2VBdmFpbGFibGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gY2hlY2tIYXNTdXBlcihmdW5jOiBGdW5jdGlvbikge1xuICAgICAgcmV0dXJuIEhBU19TVVBFUl9QQVRURVJOLnRlc3QoZnVuYy50b1N0cmluZygpKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGNoZWNrSGFzU3VwZXIoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG59KSgpO1xuXG5leHBvcnQgZnVuY3Rpb24gUk9PVCguLi5fYXJnczogYW55W10pIHt9XG4oUk9PVCBhcyBhbnkpLl9faGFzU3VwZXIgPSBmYWxzZTtcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1N1cGVyKGZ1bmM6IEZ1bmN0aW9uICYgRGljdCkge1xuICBpZiAoZnVuY1snX19oYXNTdXBlciddID09PSB1bmRlZmluZWQpIHtcbiAgICBmdW5jWydfX2hhc1N1cGVyJ10gPSBjaGVja0hhc1N1cGVyKGZ1bmMpO1xuICB9XG4gIHJldHVybiBmdW5jWydfX2hhc1N1cGVyJ107XG59XG4iXSwic291cmNlUm9vdCI6IiJ9

@@ -1,2 +0,2 @@

'use strict';
"use strict";

@@ -6,12 +6,9 @@ Object.defineProperty(exports, "__esModule", {

});
var _object = require('./lib/object');
Object.defineProperty(exports, 'default', {
Object.defineProperty(exports, "default", {
enumerable: true,
get: function () {
return _interopRequireDefault(_object).default;
return _object.default;
}
});
Object.defineProperty(exports, 'ClassMeta', {
Object.defineProperty(exports, "ClassMeta", {
enumerable: true,

@@ -22,3 +19,3 @@ get: function () {

});
Object.defineProperty(exports, 'InstanceMeta', {
Object.defineProperty(exports, "InstanceMeta", {
enumerable: true,

@@ -29,6 +26,3 @@ get: function () {

});
var _computed = require('./lib/computed');
Object.defineProperty(exports, 'computed', {
Object.defineProperty(exports, "computed", {
enumerable: true,

@@ -39,3 +33,3 @@ get: function () {

});
Object.defineProperty(exports, 'observer', {
Object.defineProperty(exports, "observer", {
enumerable: true,

@@ -46,6 +40,3 @@ get: function () {

});
var _mixin = require('./lib/mixin');
Object.defineProperty(exports, 'Mixin', {
Object.defineProperty(exports, "Mixin", {
enumerable: true,

@@ -56,3 +47,3 @@ get: function () {

});
Object.defineProperty(exports, 'Blueprint', {
Object.defineProperty(exports, "Blueprint", {
enumerable: true,

@@ -63,3 +54,3 @@ get: function () {

});
Object.defineProperty(exports, 'toMixin', {
Object.defineProperty(exports, "toMixin", {
enumerable: true,

@@ -70,6 +61,3 @@ get: function () {

});
var _descriptors = require('./lib/descriptors');
Object.defineProperty(exports, 'aliasMethod', {
Object.defineProperty(exports, "aliasMethod", {
enumerable: true,

@@ -80,3 +68,3 @@ get: function () {

});
Object.defineProperty(exports, 'alias', {
Object.defineProperty(exports, "alias", {
enumerable: true,

@@ -88,3 +76,13 @@ get: function () {

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OzttQkFBQSxTOzs7Ozs7bUJBQUEsWTs7Ozs7Ozs7O3FCQUNBLFE7Ozs7OztxQkFBQSxROzs7Ozs7Ozs7a0JBQ0EsSzs7Ozs7O2tCQUFBLFM7Ozs7OztrQkFBQSxPOzs7Ozs7Ozs7d0JBQ0EsVzs7Ozs7O3dCQUFBLEsiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBkZWZhdWx0LCBDbGFzc01ldGEsIEluc3RhbmNlTWV0YSwgR2xpbW1lck9iamVjdEZhY3RvcnkgfSBmcm9tICcuL2xpYi9vYmplY3QnO1xuZXhwb3J0IHsgY29tcHV0ZWQsIG9ic2VydmVyIH0gZnJvbSAnLi9saWIvY29tcHV0ZWQnO1xuZXhwb3J0IHsgTWl4aW4sIEJsdWVwcmludCwgdG9NaXhpbiB9IGZyb20gJy4vbGliL21peGluJztcbmV4cG9ydCB7IGFsaWFzTWV0aG9kLCBhbGlhcyB9IGZyb20gJy4vbGliL2Rlc2NyaXB0b3JzJztcbiJdLCJzb3VyY2VSb290IjoiIn0=
var _object = _interopRequireWildcard(require("./lib/object"));
var _computed = require("./lib/computed");
var _mixin = require("./lib/mixin");
var _descriptors = require("./lib/descriptors");
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGRlZmF1bHQsIENsYXNzTWV0YSwgSW5zdGFuY2VNZXRhLCBHbGltbWVyT2JqZWN0RmFjdG9yeSB9IGZyb20gJy4vbGliL29iamVjdCc7XG5leHBvcnQgeyBjb21wdXRlZCwgb2JzZXJ2ZXIgfSBmcm9tICcuL2xpYi9jb21wdXRlZCc7XG5leHBvcnQgeyBNaXhpbiwgQmx1ZXByaW50LCB0b01peGluIH0gZnJvbSAnLi9saWIvbWl4aW4nO1xuZXhwb3J0IHsgYWxpYXNNZXRob2QsIGFsaWFzIH0gZnJvbSAnLi9saWIvZGVzY3JpcHRvcnMnO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
value: true
});
exports.ComputedBlueprint = undefined;
exports.computed = computed;
exports.observer = observer;
exports.ComputedBlueprint = void 0;

@@ -16,201 +16,217 @@ var _objectReference = require("@glimmer/object-reference");

function _defaults(obj, defaults) {
var keys = Object.getOwnPropertyNames(defaults);for (var i = 0; i < keys.length; i++) {
var key = keys[i];var value = Object.getOwnPropertyDescriptor(defaults, key);if (value && value.configurable && obj[key] === undefined) {
Object.defineProperty(obj, key, value);
}
}return obj;
function _inheritsLoose(subClass, superClass) {
subClass.prototype = Object.create(superClass.prototype);
subClass.prototype.constructor = subClass;
subClass.__proto__ = superClass;
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
var _a;
function _possibleConstructorReturn(self, call) {
if (!self) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}return call && (typeof call === "object" || typeof call === "function") ? call : self;
}
var ComputedBlueprint =
/*#__PURE__*/
function (_Blueprint) {
_inheritsLoose(ComputedBlueprint, _Blueprint);
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
}subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass);
}
function ComputedBlueprint(accessor, deps) {
var _this;
var _a;
var ComputedBlueprint = exports.ComputedBlueprint = function (_Blueprint) {
_inherits(ComputedBlueprint, _Blueprint);
if (deps === void 0) {
deps = [];
}
function ComputedBlueprint(accessor) {
var deps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
_this = _Blueprint.call(this) || this;
_this.metadata = {};
_this.accessor = accessor;
_this.deps = deps;
return _this;
}
_classCallCheck(this, ComputedBlueprint);
var _proto = ComputedBlueprint.prototype;
var _this = _possibleConstructorReturn(this, _Blueprint.call(this));
_proto.descriptor = function descriptor(_target, key, classMeta) {
classMeta.addReferenceTypeFor(key, (0, _objectReference.ComputedReferenceBlueprint)(key, this.deps));
classMeta.addPropertyMetadata(key, this.metadata);
classMeta.addSlotFor(key);
return new Computed(this.accessor);
};
_this.metadata = {};
_this.accessor = accessor;
_this.deps = deps;
return _this;
_proto.property = function property() {
for (var _len = arguments.length, paths = new Array(_len), _key = 0; _key < _len; _key++) {
paths[_key] = arguments[_key];
}
ComputedBlueprint.prototype.descriptor = function descriptor(_target, key, classMeta) {
classMeta.addReferenceTypeFor(key, (0, _objectReference.ComputedReferenceBlueprint)(key, this.deps));
classMeta.addPropertyMetadata(key, this.metadata);
classMeta.addSlotFor(key);
return new Computed(this.accessor);
};
this.deps = paths.map(function (d) {
return d.split('.');
});
return this;
};
ComputedBlueprint.prototype.property = function property() {
for (var _len = arguments.length, paths = Array(_len), _key = 0; _key < _len; _key++) {
paths[_key] = arguments[_key];
}
_proto.meta = function meta(object) {
this.metadata = object;
return this;
};
this.deps = paths.map(function (d) {
return d.split('.');
});
return this;
};
_proto["volatile"] = function volatile() {
return this;
};
ComputedBlueprint.prototype.meta = function meta(object) {
this.metadata = object;
return this;
};
return ComputedBlueprint;
}(_mixin.Blueprint);
ComputedBlueprint.prototype.volatile = function volatile() {
return this;
};
exports.ComputedBlueprint = ComputedBlueprint;
return ComputedBlueprint;
}(_mixin.Blueprint);
var Computed =
/*#__PURE__*/
function () {
function Computed(accessor) {
this[_a] = true;
this.accessor = accessor;
this.enumerable = false;
this.configurable = false;
}
var Computed = function () {
function Computed(accessor) {
_classCallCheck(this, Computed);
var _proto2 = Computed.prototype;
this[_a] = true;
this.accessor = accessor;
this.enumerable = false;
this.configurable = false;
}
_proto2.define = function define(prototype, key, home) {
Object.defineProperty(prototype, key, wrapAccessor(home, key, this.accessor));
};
Computed.prototype.define = function define(prototype, key, home) {
Object.defineProperty(prototype, key, wrapAccessor(home, key, this.accessor));
};
return Computed;
return Computed;
}();
_a = _mixin.DESCRIPTOR;
function wrapAccessor(home, accessorName, _desc) {
var superDesc = getPropertyDescriptor(home, accessorName);
var originalGet = void 0;
var originalSet = void 0;
var desc = {
enumerable: true,
configurable: true
var superDesc = getPropertyDescriptor(home, accessorName);
var originalGet;
var originalSet;
var desc = {
enumerable: true,
configurable: true
};
var get = _desc.get;
if (get && get.length > 0) {
originalGet = function originalGet() {
return get.call(this, accessorName);
};
var get = _desc.get;
if (get && get.length > 0) {
originalGet = function originalGet() {
return get.call(this, accessorName);
};
} else {
originalGet = _desc.get;
}
var set = _desc.set;
if (set && set.length > 1) {
originalSet = function originalSet(value) {
return set.call(this, accessorName, value);
};
} else {
originalSet = _desc.set;
}
var cacheGet = function cacheGet() {
if (_objectReference.Meta.exists(this)) {
var slot = _objectReference.Meta.for(this).getSlots()[accessorName];
if (slot !== _object.EMPTY_CACHE) return slot;
}
return originalGet.call(this);
} else {
originalGet = _desc.get;
}
var set = _desc.set;
if (set && set.length > 1) {
originalSet = function originalSet(value) {
return set.call(this, accessorName, value);
};
var cacheSet = void 0;
if (originalSet) {
cacheSet = function cacheSet(value) {
var meta = _objectReference.Meta.for(this);
var slots = meta.getSlots();
var ret = originalSet.call(this, value);
if (ret !== undefined) {
slots[accessorName] = ret;
}
};
} else {
cacheSet = function cacheSet(value) {
var meta = _objectReference.Meta.for(this);
var slots = meta.getSlots();
if (value !== undefined) slots[accessorName] = value;
};
} else {
originalSet = _desc.set;
}
var cacheGet = function cacheGet() {
if (_objectReference.Meta.exists(this)) {
var slot = _objectReference.Meta["for"](this).getSlots()[accessorName];
if (slot !== _object.EMPTY_CACHE) return slot;
}
if (!superDesc || 'value' in superDesc) {
desc.get = cacheGet;
desc.set = cacheSet;
return desc;
}
desc.get = function () {
var lastSuper = this._super;
this._super = function () {
return superDesc.get.call(this);
};
try {
return cacheGet.call(this);
} finally {
this._super = lastSuper;
}
return originalGet.call(this);
};
var cacheSet;
if (originalSet) {
cacheSet = function cacheSet(value) {
var meta = _objectReference.Meta["for"](this);
var slots = meta.getSlots();
var ret = originalSet.call(this, value);
if (ret !== undefined) {
slots[accessorName] = ret;
}
};
desc.set = function (val) {
var lastSuper = this._super;
this._super = function () {
return superDesc.set.call(this, val);
};
try {
return cacheSet.call(this, val);
} finally {
this._super = lastSuper;
}
} else {
cacheSet = function cacheSet(value) {
var meta = _objectReference.Meta["for"](this);
var slots = meta.getSlots();
if (value !== undefined) slots[accessorName] = value;
};
}
if (!superDesc || 'value' in superDesc) {
desc.get = cacheGet;
desc.set = cacheSet;
return desc;
}
desc.get = function () {
var lastSuper = this._super;
this._super = function () {
return superDesc.get.call(this);
};
try {
return cacheGet.call(this);
} finally {
this._super = lastSuper;
}
};
desc.set = function (val) {
var lastSuper = this._super;
this._super = function () {
return superDesc.set.call(this, val);
};
try {
return cacheSet.call(this, val);
} finally {
this._super = lastSuper;
}
};
return desc;
}
function getPropertyDescriptor(subject, name) {
var pd = Object.getOwnPropertyDescriptor(subject, name);
var proto = Object.getPrototypeOf(subject);
while (typeof pd === 'undefined' && proto !== null) {
pd = Object.getOwnPropertyDescriptor(proto, name);
proto = Object.getPrototypeOf(proto);
}
return pd;
var pd = Object.getOwnPropertyDescriptor(subject, name);
var proto = Object.getPrototypeOf(subject);
while (typeof pd === 'undefined' && proto !== null) {
pd = Object.getOwnPropertyDescriptor(proto, name);
proto = Object.getPrototypeOf(proto);
}
return pd;
}
function computed() {
for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
var last = args.pop();
var deps = args;
if (typeof last === 'function') {
var _ref;
var last = args.pop();
var deps = args;
return (_ref = new ComputedBlueprint({
get: last
})).property.apply(_ref, deps);
} else if (typeof last === 'object') {
var _ref2;
if (typeof last === 'function') {
var _ref;
return (_ref2 = new ComputedBlueprint(last)).property.apply(_ref2, deps);
} else {
throw new TypeError('computed expects a function or an object as last argument');
}
return (_ref = new ComputedBlueprint({
get: last
})).property.apply(_ref, deps);
} else if (typeof last === 'object') {
var _ref2;
return (_ref2 = new ComputedBlueprint(last)).property.apply(_ref2, deps);
} else {
throw new TypeError('computed expects a function or an object as last argument');
}
}
function observer() {}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvY29tcHV0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O1FBa01NLFEsR0FBQSxRO1FBZUEsUSxHQUFBLFE7O0FBak5OOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlCQSxJQUFBLGdEQUFBLFVBQUEsVUFBQSxFQUFBO0FBQUEsY0FBQSxpQkFBQSxFQUFBLFVBQUE7O0FBS0UsYUFBQSxpQkFBQSxDQUFBLFFBQUEsRUFBK0Q7QUFBQSxZQUFyQixPQUFxQixVQUFBLE1BQUEsR0FBQSxDQUFBLElBQUEsVUFBQSxDQUFBLE1BQUEsU0FBQSxHQUFBLFVBQUEsQ0FBQSxDQUFBLEdBQS9ELEVBQStEOztBQUFBLHdCQUFBLElBQUEsRUFBQSxpQkFBQTs7QUFBQSxZQUFBLFFBQUEsMkJBQUEsSUFBQSxFQUM3RCxXQUFBLElBQUEsQ0FENkQsSUFDN0QsQ0FENkQsQ0FBQTs7QUFGdkQsY0FBQSxRQUFBLEdBQUEsRUFBQTtBQUlOLGNBQUEsUUFBQSxHQUFBLFFBQUE7QUFDQSxjQUFBLElBQUEsR0FBQSxJQUFBO0FBSDZELGVBQUEsS0FBQTtBQUk5RDs7QUFUSCxzQkFBQSxTQUFBLENBQUEsVUFBQSxHQUFBLFNBQUEsVUFBQSxDQUFBLE9BQUEsRUFBQSxHQUFBLEVBQUEsU0FBQSxFQVcrRDtBQUMzRCxrQkFBQSxtQkFBQSxDQUFBLEdBQUEsRUFBbUMsaURBQUEsR0FBQSxFQUFnQyxLQUFuRSxJQUFtQyxDQUFuQztBQUNBLGtCQUFBLG1CQUFBLENBQUEsR0FBQSxFQUFtQyxLQUFuQyxRQUFBO0FBQ0Esa0JBQUEsVUFBQSxDQUFBLEdBQUE7QUFDQSxlQUFPLElBQUEsUUFBQSxDQUFhLEtBQXBCLFFBQU8sQ0FBUDtBQWZKLEtBQUE7O0FBQUEsc0JBQUEsU0FBQSxDQUFBLFFBQUEsR0FBQSxTQUFBLFFBQUEsR0FrQjZCO0FBQUEsYUFBQSxJQUFBLE9BQUEs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QUFOLDJEQUFNLENBQU47QUFDRDtBQUNGO0FBRUssU0FBQSxRQUFBLEdBQWtDLENBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wdXRlZFJlZmVyZW5jZUJsdWVwcmludCwgTWV0YSB9IGZyb20gJ0BnbGltbWVyL29iamVjdC1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgRU1QVFlfQ0FDSEUsIENsYXNzTWV0YSB9IGZyb20gJy4vb2JqZWN0JztcbmltcG9ydCB7IERlc2NyaXB0b3IsIEJsdWVwcmludCwgREVTQ1JJUFRPUiB9IGZyb20gJy4vbWl4aW4nO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbXB1dGVkR2V0Q2FsbGJhY2sge1xuICAoKTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExlZ2FjeUNvbXB1dGVkR2V0Q2FsbGJhY2sge1xuICAoa2V5OiBzdHJpbmcpOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcHV0ZWRTZXRDYWxsYmFjayB7XG4gICh2YWw6IGFueSk6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMZWdhY3lDb21wdXRlZFNldENhbGxiYWNrIHtcbiAgKGtleTogc3RyaW5nLCB2YWw6IGFueSk6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wdXRlZERlc2NyaXB0b3Ige1xuICBnZXQ/OiBDb21wdXRlZEdldENhbGxiYWNrIHwgTGVnYWN5Q29tcHV0ZWRHZXRDYWxsYmFjaztcbiAgc2V0PzogQ29tcHV0ZWRTZXRDYWxsYmFjayB8IExlZ2FjeUNvbXB1dGVkU2V0Q2FsbGJhY2s7XG59XG5cbnR5cGUgQ29tcHV0ZWRBcmd1bWVudCA9IENvbXB1dGVkR2V0Q2FsbGJhY2sgfCBDb21wdXRlZERlc2NyaXB0b3I7XG5cbmV4cG9ydCBjbGFzcyBDb21wdXRlZEJsdWVwcmludCBleHRlbmRzIEJsdWVwcmludCB7XG4gIHByaXZhdGUgYWNjZXNzb3I6IENvbXB1dGVkRGVzY3JpcHRvcjtcbiAgcHJpdmF0ZSBkZXBzOiBzdHJpbmdbXVtdO1xuICBwcml2YXRlIG1ldGFkYXRhOiBPYmplY3QgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihhY2Nlc3NvcjogQ29tcHV0ZWREZXNjcmlwdG9yLCBkZXBzOiBzdHJpbmdbXVtdID0gW10pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWNjZXNzb3IgPSBhY2Nlc3NvcjtcbiAgICB0aGlzLmRlcHMgPSBkZXBzO1xuICB9XG5cbiAgZGVzY3JpcHRvcihfdGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nLCBjbGFzc01ldGE6IENsYXNzTWV0YSk6IERlc2NyaXB0b3Ige1xuICAgIGNsYXNzTWV0YS5hZGRSZWZlcmVuY2VUeXBlRm9yKGtleSwgQ29tcHV0ZWRSZWZlcmVuY2VCbHVlcHJpbnQoa2V5LCB0aGlzLmRlcHMpKTtcbiAgICBjbGFzc01ldGEuYWRkUHJvcGVydHlNZXRhZGF0YShrZXksIHRoaXMubWV0YWRhdGEpO1xuICAgIGNsYXNzTWV0YS5hZGRTbG90Rm9yKGtleSk7XG4gICAgcmV0dXJuIG5ldyBDb21wdXRlZCh0aGlzLmFjY2Vzc29yKTtcbiAgfVxuXG4gIHByb3BlcnR5KC4uLnBhdGhzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZGVwcyA9IHBhdGhzLm1hcChkID0+IGQuc3BsaXQoJy4nKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtZXRhKG9iamVjdDogT2JqZWN0KSB7XG4gICAgdGhpcy5tZXRhZGF0YSA9IG9iamVjdDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHZvbGF0aWxlKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbmNsYXNzIENvbXB1dGVkIGltcGxlbWVudHMgRGVzY3JpcHRvciB7XG4gIGVudW1lcmFibGU6IGJvb2xlYW47XG4gIGNvbmZpZ3VyYWJsZTogYm9vbGVhbjtcblxuICBwcml2YXRlIGFjY2Vzc29yOiBDb21wdXRlZERlc2NyaXB0b3I7XG4gIFtERVNDUklQVE9SXSA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoYWNjZXNzb3I6IENvbXB1dGVkRGVzY3JpcHRvcikge1xuICAgIHRoaXMuYWNjZXNzb3IgPSBhY2Nlc3NvcjtcbiAgICB0aGlzLmVudW1lcmFibGUgPSBmYWxzZTtcbiAgICB0aGlzLmNvbmZpZ3VyYWJsZSA9IGZhbHNlO1xuICB9XG5cbiAgZGVmaW5lKHByb3RvdHlwZTogT2JqZWN0LCBrZXk6IHN0cmluZywgaG9tZTogT2JqZWN0KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwga2V5LCB3cmFwQWNjZXNzb3IoaG9tZSwga2V5LCB0aGlzLmFjY2Vzc29yKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gd3JhcEFjY2Vzc29yKFxuICBob21lOiBPYmplY3QsXG4gIGFjY2Vzc29yTmFtZTogc3RyaW5nLFxuICBfZGVzYzogQ29tcHV0ZWREZXNjcmlwdG9yXG4pOiBQcm9wZXJ0eURlc2NyaXB0b3Ige1xuICBsZXQgc3VwZXJEZXNjID0gZ2V0UHJvcGVydHlEZXNjcmlwdG9yKGhvbWUsIGFjY2Vzc29yTmFtZSk7XG5cbiAgbGV0IG9yaWdpbmFsR2V0OiBDb21wdXRlZEdldENhbGxiYWNrO1xuICBsZXQgb3JpZ2luYWxTZXQ6IENvbXB1dGVkU2V0Q2FsbGJhY2s7XG5cbiAgbGV0IGRlc2M6IFByb3BlcnR5RGVzY3JpcHRvciA9IHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgfTtcblxuICBsZXQgZ2V0ID0gX2Rlc2MuZ2V0O1xuXG4gIGlmIChnZXQgJiYgZ2V0Lmxlbmd0aCA+IDApIHtcbiAgICBvcmlnaW5hbEdldCA9IGZ1bmN0aW9uKHRoaXM6IGFueSkge1xuICAgICAgcmV0dXJuIChnZXQgYXMgYW55KS5jYWxsKHRoaXMsIGFjY2Vzc29yTmFtZSk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBvcmlnaW5hbEdldCA9IF9kZXNjLmdldCBhcyBDb21wdXRlZEdldENhbGxiYWNrO1xuICB9XG5cbiAgbGV0IHNldCA9IF9kZXNjLnNldDtcblxuICBpZiAoc2V0ICYmIHNldC5sZW5ndGggPiAxKSB7XG4gICAgb3JpZ2luYWxTZXQgPSBmdW5jdGlvbih0aGlzOiBhbnksIHZhbHVlOiBhbnkpIHtcbiAgICAgIHJldHVybiAoc2V0IGFzIGFueSkuY2FsbCh0aGlzLCBhY2Nlc3Nvck5hbWUsIHZhbHVlKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIG9yaWdpbmFsU2V0ID0gX2Rlc2Muc2V0IGFzIENvbXB1dGVkR2V0Q2FsbGJhY2s7XG4gIH1cblxuICBsZXQgY2FjaGVHZXQgPSBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICBpZiAoTWV0YS5leGlzdHModGhpcykpIHtcbiAgICAgIGxldCBzbG90ID0gTWV0YS5mb3IodGhpcykuZ2V0U2xvdHMoKVthY2Nlc3Nvck5hbWVdO1xuICAgICAgaWYgKHNsb3QgIT09IEVNUFRZX0NBQ0hFKSByZXR1cm4gc2xvdDtcbiAgICB9XG5cbiAgICByZXR1cm4gb3JpZ2luYWxHZXQuY2FsbCh0aGlzKTtcbiAgfTtcblxuICBsZXQgY2FjaGVTZXQ6ICh2YWx1ZTogYW55KSA9PiB2b2lkO1xuXG4gIGlmIChvcmlnaW5hbFNldCkge1xuICAgIGNhY2hlU2V0ID0gZnVuY3Rpb24odGhpczogYW55LCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICBsZXQgbWV0YSA9IE1ldGEuZm9yKHRoaXMpO1xuICAgICAgbGV0IHNsb3RzID0gbWV0YS5nZXRTbG90cygpO1xuXG4gICAgICBsZXQgcmV0ID0gb3JpZ2luYWxTZXQuY2FsbCh0aGlzLCB2YWx1ZSk7XG5cbiAgICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzbG90c1thY2Nlc3Nvck5hbWVdID0gcmV0O1xuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgY2FjaGVTZXQgPSBmdW5jdGlvbih0aGlzOiBhbnksIHZhbHVlOiBhbnkpIHtcbiAgICAgIGxldCBtZXRhID0gTWV0YS5mb3IodGhpcyk7XG4gICAgICBsZXQgc2xvdHMgPSBtZXRhLmdldFNsb3RzKCk7XG4gICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgc2xvdHNbYWNjZXNzb3JOYW1lXSA9IHZhbHVlO1xuICAgIH07XG4gIH1cblxuICBpZiAoIXN1cGVyRGVzYyB8fCAndmFsdWUnIGluIHN1cGVyRGVzYykge1xuICAgIGRlc2MuZ2V0ID0gY2FjaGVHZXQ7XG4gICAgZGVzYy5zZXQgPSBjYWNoZVNldDtcbiAgICByZXR1cm4gZGVzYztcbiAgfVxuXG4gIGRlc2MuZ2V0ID0gZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgbGV0IGxhc3RTdXBlciA9IHRoaXMuX3N1cGVyO1xuICAgIHRoaXMuX3N1cGVyID0gZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgICByZXR1cm4gKHN1cGVyRGVzYyBhcyBhbnkpLmdldC5jYWxsKHRoaXMpO1xuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGNhY2hlR2V0LmNhbGwodGhpcyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX3N1cGVyID0gbGFzdFN1cGVyO1xuICAgIH1cbiAgfTtcblxuICBkZXNjLnNldCA9IGZ1bmN0aW9uKHRoaXM6IGFueSwgdmFsOiBhbnkpIHtcbiAgICBsZXQgbGFzdFN1cGVyID0gdGhpcy5fc3VwZXI7XG4gICAgdGhpcy5fc3VwZXIgPSBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICAgIHJldHVybiAoc3VwZXJEZXNjIGFzIGFueSkuc2V0LmNhbGwodGhpcywgdmFsKTtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjYWNoZVNldC5jYWxsKHRoaXMsIHZhbCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX3N1cGVyID0gbGFzdFN1cGVyO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gZGVzYztcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHN1YmplY3Q6IGFueSwgbmFtZTogc3RyaW5nKSB7XG4gIGxldCBwZCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc3ViamVjdCwgbmFtZSk7XG4gIGxldCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihzdWJqZWN0KTtcbiAgd2hpbGUgKHR5cGVvZiBwZCA9PT0gJ3VuZGVmaW5lZCcgJiYgcHJvdG8gIT09IG51bGwpIHtcbiAgICBwZCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIG5hbWUpO1xuICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcbiAgfVxuICByZXR1cm4gcGQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlZChkZXNjOiBDb21wdXRlZERlc2NyaXB0b3IpOiBDb21wdXRlZEJsdWVwcmludDtcbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlZChcbiAgZ2V0dGVyOiBDb21wdXRlZEdldENhbGxiYWNrIHwgTGVnYWN5Q29tcHV0ZWRHZXRDYWxsYmFja1xuKTogQ29tcHV0ZWRCbHVlcHJpbnQ7XG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZWQoLi4uYXJnczogYW55W10pOiBDb21wdXRlZEJsdWVwcmludDtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVkKC4uLmFyZ3M6IGFueVtdKSB7XG4gIGxldCBsYXN0OiBDb21wdXRlZEFyZ3VtZW50ID0gYXJncy5wb3AoKTtcbiAgbGV0IGRlcHMgPSBhcmdzO1xuXG4gIGlmICh0eXBlb2YgbGFzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBuZXcgQ29tcHV0ZWRCbHVlcHJpbnQoe1xuICAgICAgZ2V0OiBsYXN0IGFzIENvbXB1dGVkR2V0Q2FsbGJhY2sgfCBMZWdhY3lDb21wdXRlZEdldENhbGxiYWNrLFxuICAgIH0pLnByb3BlcnR5KC4uLmRlcHMpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBsYXN0ID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBuZXcgQ29tcHV0ZWRCbHVlcHJpbnQobGFzdCBhcyBDb21wdXRlZERlc2NyaXB0b3IpLnByb3BlcnR5KC4uLmRlcHMpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NvbXB1dGVkIGV4cGVjdHMgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QgYXMgbGFzdCBhcmd1bWVudCcpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZlciguLi5fYXJnczogYW55W10pIHt9XG4iXSwic291cmNlUm9vdCI6IiJ9
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvY29tcHV0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7QUF5QkEsSUFBTSxpQkFBTjtBQUFBO0FBQUEsVUFBQSxVQUFBLEVBQUE7QUFBQSxFQUFBLGNBQUEsQ0FBQSxpQkFBQSxFQUFBLFVBQUEsQ0FBQTs7QUFLRSxXQUFBLGlCQUFBLENBQUEsUUFBQSxFQUFBLElBQUEsRUFBK0Q7QUFBQSxRQUFBLEtBQUE7O0FBQUEsUUFBckIsSUFBcUIsS0FBQSxLQUFBLENBQUEsRUFBQTtBQUFyQixNQUFBLElBQXFCLEdBQS9ELEVBQTBDO0FBQXFCOztBQUM3RCxJQUFBLEtBQUEsR0FBQSxVQUFBLENBQUEsSUFBQSxDQUFBLElBQUEsS0FBQSxJQUFBO0FBSE0sSUFBQSxLQUFBLENBQUEsUUFBQSxHQUFBLEVBQUE7QUFJTixJQUFBLEtBQUEsQ0FBQSxRQUFBLEdBQUEsUUFBQTtBQUNBLElBQUEsS0FBQSxDQUFBLElBQUEsR0FBQSxJQUFBO0FBSDZELFdBQUEsS0FBQTtBQUk5RDs7QUFUSCxNQUFBLE1BQUEsR0FBQSxpQkFBQSxDQUFBLFNBQUE7O0FBQUEsRUFBQSxNQUFBLENBQUEsVUFBQSxHQVdFLFNBQUEsVUFBQSxDQUFBLE9BQUEsRUFBQSxHQUFBLEVBQUEsU0FBQSxFQUE2RDtBQUMzRCxJQUFBLFNBQVMsQ0FBVCxtQkFBQSxDQUFBLEdBQUEsRUFBbUMsaURBQTBCLEdBQTFCLEVBQWdDLEtBQW5FLElBQW1DLENBQW5DO0FBQ0EsSUFBQSxTQUFTLENBQVQsbUJBQUEsQ0FBQSxHQUFBLEVBQW1DLEtBQW5DLFFBQUE7QUFDQSxJQUFBLFNBQVMsQ0FBVCxVQUFBLENBQUEsR0FBQTtBQUNBLFdBQU8sSUFBQSxRQUFBLENBQWEsS0FBcEIsUUFBTyxDQUFQO0FBZkosR0FBQTs7QUFBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLEdBa0JF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QUEsS0FBQSxHQUFBLENBQUEsRUFBQSxLQUFBLEdBQUEsS0FBQSxFQUFBLEtBQUEsRUFBQSxFQUFBO0FBQWpDLElBQUEsSUFBaUMsQ0FBQSxLQUFBLENBQWpDLEdBQWlDLFNBQUEsQ0FBQSxLQUFBLENBQWpDO0FBQWlDOztBQUNyQyxNQUFJLElBQUksR0FBcUIsSUFBSSxDQUFqQyxHQUE2QixFQUE3QjtBQUNBLE1BQUksSUFBSSxHQUFSLElBQUE7O0FBRUEsTUFBSSxPQUFBLElBQUEsS0FBSixVQUFBLEVBQWdDO0FBQUEsUUFBQSxJQUFBOztBQUM5QixXQUFPLENBQUEsSUFBQSxHQUFBLElBQUEsaUJBQUEsQ0FBc0I7QUFDM0IsTUFBQSxHQUFHLEVBQUU7QUFEc0IsS0FBdEIsQ0FBQSxFQUFBLFFBQUEsQ0FBQSxLQUFBLENBQUEsSUFBQSxFQUFQLElBQU8sQ0FBUDtBQURGLEdBQUEsTUFJTyxJQUFJLE9BQUEsSUFBQSxLQUFKLFFBQUEsRUFBOEI7QUFBQSxRQUFBLEtBQUE7O0FBQ25DLFdBQU8sQ0FBQSxLQUFBLEdBQUEsSUFBQSxpQkFBQSxDQUFBLElBQUEsQ0FBQSxFQUFBLFFBQUEsQ0FBQSxLQUFBLENBQUEsS0FBQSxFQUFQLElBQU8sQ0FBUDtBQURLLEdBQUEsTUFFQTtBQUNMLFVBQU0sSUFBQSxTQUFBLENBQU4sMkRBQU0sQ0FBTjtBQUNEO0FBQ0Y7O0FBRUssU0FBQSxRQUFBLEdBQWtDLENBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wdXRlZFJlZmVyZW5jZUJsdWVwcmludCwgTWV0YSB9IGZyb20gJ0BnbGltbWVyL29iamVjdC1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgRU1QVFlfQ0FDSEUsIENsYXNzTWV0YSB9IGZyb20gJy4vb2JqZWN0JztcbmltcG9ydCB7IERlc2NyaXB0b3IsIEJsdWVwcmludCwgREVTQ1JJUFRPUiB9IGZyb20gJy4vbWl4aW4nO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbXB1dGVkR2V0Q2FsbGJhY2sge1xuICAoKTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExlZ2FjeUNvbXB1dGVkR2V0Q2FsbGJhY2sge1xuICAoa2V5OiBzdHJpbmcpOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcHV0ZWRTZXRDYWxsYmFjayB7XG4gICh2YWw6IGFueSk6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMZWdhY3lDb21wdXRlZFNldENhbGxiYWNrIHtcbiAgKGtleTogc3RyaW5nLCB2YWw6IGFueSk6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wdXRlZERlc2NyaXB0b3Ige1xuICBnZXQ/OiBDb21wdXRlZEdldENhbGxiYWNrIHwgTGVnYWN5Q29tcHV0ZWRHZXRDYWxsYmFjaztcbiAgc2V0PzogQ29tcHV0ZWRTZXRDYWxsYmFjayB8IExlZ2FjeUNvbXB1dGVkU2V0Q2FsbGJhY2s7XG59XG5cbnR5cGUgQ29tcHV0ZWRBcmd1bWVudCA9IENvbXB1dGVkR2V0Q2FsbGJhY2sgfCBDb21wdXRlZERlc2NyaXB0b3I7XG5cbmV4cG9ydCBjbGFzcyBDb21wdXRlZEJsdWVwcmludCBleHRlbmRzIEJsdWVwcmludCB7XG4gIHByaXZhdGUgYWNjZXNzb3I6IENvbXB1dGVkRGVzY3JpcHRvcjtcbiAgcHJpdmF0ZSBkZXBzOiBzdHJpbmdbXVtdO1xuICBwcml2YXRlIG1ldGFkYXRhOiBPYmplY3QgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihhY2Nlc3NvcjogQ29tcHV0ZWREZXNjcmlwdG9yLCBkZXBzOiBzdHJpbmdbXVtdID0gW10pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWNjZXNzb3IgPSBhY2Nlc3NvcjtcbiAgICB0aGlzLmRlcHMgPSBkZXBzO1xuICB9XG5cbiAgZGVzY3JpcHRvcihfdGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nLCBjbGFzc01ldGE6IENsYXNzTWV0YSk6IERlc2NyaXB0b3Ige1xuICAgIGNsYXNzTWV0YS5hZGRSZWZlcmVuY2VUeXBlRm9yKGtleSwgQ29tcHV0ZWRSZWZlcmVuY2VCbHVlcHJpbnQoa2V5LCB0aGlzLmRlcHMpKTtcbiAgICBjbGFzc01ldGEuYWRkUHJvcGVydHlNZXRhZGF0YShrZXksIHRoaXMubWV0YWRhdGEpO1xuICAgIGNsYXNzTWV0YS5hZGRTbG90Rm9yKGtleSk7XG4gICAgcmV0dXJuIG5ldyBDb21wdXRlZCh0aGlzLmFjY2Vzc29yKTtcbiAgfVxuXG4gIHByb3BlcnR5KC4uLnBhdGhzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZGVwcyA9IHBhdGhzLm1hcChkID0+IGQuc3BsaXQoJy4nKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtZXRhKG9iamVjdDogT2JqZWN0KSB7XG4gICAgdGhpcy5tZXRhZGF0YSA9IG9iamVjdDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHZvbGF0aWxlKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbmNsYXNzIENvbXB1dGVkIGltcGxlbWVudHMgRGVzY3JpcHRvciB7XG4gIGVudW1lcmFibGU6IGJvb2xlYW47XG4gIGNvbmZpZ3VyYWJsZTogYm9vbGVhbjtcblxuICBwcml2YXRlIGFjY2Vzc29yOiBDb21wdXRlZERlc2NyaXB0b3I7XG4gIFtERVNDUklQVE9SXSA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoYWNjZXNzb3I6IENvbXB1dGVkRGVzY3JpcHRvcikge1xuICAgIHRoaXMuYWNjZXNzb3IgPSBhY2Nlc3NvcjtcbiAgICB0aGlzLmVudW1lcmFibGUgPSBmYWxzZTtcbiAgICB0aGlzLmNvbmZpZ3VyYWJsZSA9IGZhbHNlO1xuICB9XG5cbiAgZGVmaW5lKHByb3RvdHlwZTogT2JqZWN0LCBrZXk6IHN0cmluZywgaG9tZTogT2JqZWN0KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwga2V5LCB3cmFwQWNjZXNzb3IoaG9tZSwga2V5LCB0aGlzLmFjY2Vzc29yKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gd3JhcEFjY2Vzc29yKFxuICBob21lOiBPYmplY3QsXG4gIGFjY2Vzc29yTmFtZTogc3RyaW5nLFxuICBfZGVzYzogQ29tcHV0ZWREZXNjcmlwdG9yXG4pOiBQcm9wZXJ0eURlc2NyaXB0b3Ige1xuICBsZXQgc3VwZXJEZXNjID0gZ2V0UHJvcGVydHlEZXNjcmlwdG9yKGhvbWUsIGFjY2Vzc29yTmFtZSk7XG5cbiAgbGV0IG9yaWdpbmFsR2V0OiBDb21wdXRlZEdldENhbGxiYWNrO1xuICBsZXQgb3JpZ2luYWxTZXQ6IENvbXB1dGVkU2V0Q2FsbGJhY2s7XG5cbiAgbGV0IGRlc2M6IFByb3BlcnR5RGVzY3JpcHRvciA9IHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgfTtcblxuICBsZXQgZ2V0ID0gX2Rlc2MuZ2V0O1xuXG4gIGlmIChnZXQgJiYgZ2V0Lmxlbmd0aCA+IDApIHtcbiAgICBvcmlnaW5hbEdldCA9IGZ1bmN0aW9uKHRoaXM6IGFueSkge1xuICAgICAgcmV0dXJuIChnZXQgYXMgYW55KS5jYWxsKHRoaXMsIGFjY2Vzc29yTmFtZSk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBvcmlnaW5hbEdldCA9IF9kZXNjLmdldCBhcyBDb21wdXRlZEdldENhbGxiYWNrO1xuICB9XG5cbiAgbGV0IHNldCA9IF9kZXNjLnNldDtcblxuICBpZiAoc2V0ICYmIHNldC5sZW5ndGggPiAxKSB7XG4gICAgb3JpZ2luYWxTZXQgPSBmdW5jdGlvbih0aGlzOiBhbnksIHZhbHVlOiBhbnkpIHtcbiAgICAgIHJldHVybiAoc2V0IGFzIGFueSkuY2FsbCh0aGlzLCBhY2Nlc3Nvck5hbWUsIHZhbHVlKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIG9yaWdpbmFsU2V0ID0gX2Rlc2Muc2V0IGFzIENvbXB1dGVkR2V0Q2FsbGJhY2s7XG4gIH1cblxuICBsZXQgY2FjaGVHZXQgPSBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICBpZiAoTWV0YS5leGlzdHModGhpcykpIHtcbiAgICAgIGxldCBzbG90ID0gTWV0YS5mb3IodGhpcykuZ2V0U2xvdHMoKVthY2Nlc3Nvck5hbWVdO1xuICAgICAgaWYgKHNsb3QgIT09IEVNUFRZX0NBQ0hFKSByZXR1cm4gc2xvdDtcbiAgICB9XG5cbiAgICByZXR1cm4gb3JpZ2luYWxHZXQuY2FsbCh0aGlzKTtcbiAgfTtcblxuICBsZXQgY2FjaGVTZXQ6ICh2YWx1ZTogYW55KSA9PiB2b2lkO1xuXG4gIGlmIChvcmlnaW5hbFNldCkge1xuICAgIGNhY2hlU2V0ID0gZnVuY3Rpb24odGhpczogYW55LCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICBsZXQgbWV0YSA9IE1ldGEuZm9yKHRoaXMpO1xuICAgICAgbGV0IHNsb3RzID0gbWV0YS5nZXRTbG90cygpO1xuXG4gICAgICBsZXQgcmV0ID0gb3JpZ2luYWxTZXQuY2FsbCh0aGlzLCB2YWx1ZSk7XG5cbiAgICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzbG90c1thY2Nlc3Nvck5hbWVdID0gcmV0O1xuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgY2FjaGVTZXQgPSBmdW5jdGlvbih0aGlzOiBhbnksIHZhbHVlOiBhbnkpIHtcbiAgICAgIGxldCBtZXRhID0gTWV0YS5mb3IodGhpcyk7XG4gICAgICBsZXQgc2xvdHMgPSBtZXRhLmdldFNsb3RzKCk7XG4gICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgc2xvdHNbYWNjZXNzb3JOYW1lXSA9IHZhbHVlO1xuICAgIH07XG4gIH1cblxuICBpZiAoIXN1cGVyRGVzYyB8fCAndmFsdWUnIGluIHN1cGVyRGVzYykge1xuICAgIGRlc2MuZ2V0ID0gY2FjaGVHZXQ7XG4gICAgZGVzYy5zZXQgPSBjYWNoZVNldDtcbiAgICByZXR1cm4gZGVzYztcbiAgfVxuXG4gIGRlc2MuZ2V0ID0gZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgbGV0IGxhc3RTdXBlciA9IHRoaXMuX3N1cGVyO1xuICAgIHRoaXMuX3N1cGVyID0gZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgICByZXR1cm4gKHN1cGVyRGVzYyBhcyBhbnkpLmdldC5jYWxsKHRoaXMpO1xuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGNhY2hlR2V0LmNhbGwodGhpcyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX3N1cGVyID0gbGFzdFN1cGVyO1xuICAgIH1cbiAgfTtcblxuICBkZXNjLnNldCA9IGZ1bmN0aW9uKHRoaXM6IGFueSwgdmFsOiBhbnkpIHtcbiAgICBsZXQgbGFzdFN1cGVyID0gdGhpcy5fc3VwZXI7XG4gICAgdGhpcy5fc3VwZXIgPSBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICAgIHJldHVybiAoc3VwZXJEZXNjIGFzIGFueSkuc2V0LmNhbGwodGhpcywgdmFsKTtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjYWNoZVNldC5jYWxsKHRoaXMsIHZhbCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX3N1cGVyID0gbGFzdFN1cGVyO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gZGVzYztcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHN1YmplY3Q6IGFueSwgbmFtZTogc3RyaW5nKSB7XG4gIGxldCBwZCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc3ViamVjdCwgbmFtZSk7XG4gIGxldCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihzdWJqZWN0KTtcbiAgd2hpbGUgKHR5cGVvZiBwZCA9PT0gJ3VuZGVmaW5lZCcgJiYgcHJvdG8gIT09IG51bGwpIHtcbiAgICBwZCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIG5hbWUpO1xuICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcbiAgfVxuICByZXR1cm4gcGQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlZChkZXNjOiBDb21wdXRlZERlc2NyaXB0b3IpOiBDb21wdXRlZEJsdWVwcmludDtcbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlZChcbiAgZ2V0dGVyOiBDb21wdXRlZEdldENhbGxiYWNrIHwgTGVnYWN5Q29tcHV0ZWRHZXRDYWxsYmFja1xuKTogQ29tcHV0ZWRCbHVlcHJpbnQ7XG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZWQoLi4uYXJnczogYW55W10pOiBDb21wdXRlZEJsdWVwcmludDtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVkKC4uLmFyZ3M6IGFueVtdKSB7XG4gIGxldCBsYXN0OiBDb21wdXRlZEFyZ3VtZW50ID0gYXJncy5wb3AoKTtcbiAgbGV0IGRlcHMgPSBhcmdzO1xuXG4gIGlmICh0eXBlb2YgbGFzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBuZXcgQ29tcHV0ZWRCbHVlcHJpbnQoe1xuICAgICAgZ2V0OiBsYXN0IGFzIENvbXB1dGVkR2V0Q2FsbGJhY2sgfCBMZWdhY3lDb21wdXRlZEdldENhbGxiYWNrLFxuICAgIH0pLnByb3BlcnR5KC4uLmRlcHMpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBsYXN0ID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBuZXcgQ29tcHV0ZWRCbHVlcHJpbnQobGFzdCBhcyBDb21wdXRlZERlc2NyaXB0b3IpLnByb3BlcnR5KC4uLmRlcHMpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NvbXB1dGVkIGV4cGVjdHMgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QgYXMgbGFzdCBhcmd1bWVudCcpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZlciguLi5fYXJnczogYW55W10pIHt9XG4iXSwic291cmNlUm9vdCI6IiJ9
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
value: true
});

@@ -13,114 +13,108 @@ exports.aliasMethod = aliasMethod;

function _defaults(obj, defaults) {
var keys = Object.getOwnPropertyNames(defaults);for (var i = 0; i < keys.length; i++) {
var key = keys[i];var value = Object.getOwnPropertyDescriptor(defaults, key);if (value && value.configurable && obj[key] === undefined) {
Object.defineProperty(obj, key, value);
}
}return obj;
function _inheritsLoose(subClass, superClass) {
subClass.prototype = Object.create(superClass.prototype);
subClass.prototype.constructor = subClass;
subClass.__proto__ = superClass;
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
var AliasMethodDescriptor =
/*#__PURE__*/
function (_Descriptor) {
_inheritsLoose(AliasMethodDescriptor, _Descriptor);
function _possibleConstructorReturn(self, call) {
if (!self) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}return call && (typeof call === "object" || typeof call === "function") ? call : self;
}
function AliasMethodDescriptor(name) {
var _this;
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
}subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass);
}
_this = _Descriptor.call(this) || this;
_this.name = name;
return _this;
}
var AliasMethodDescriptor = function (_Descriptor) {
_inherits(AliasMethodDescriptor, _Descriptor);
var _proto = AliasMethodDescriptor.prototype;
function AliasMethodDescriptor(name) {
_classCallCheck(this, AliasMethodDescriptor);
_proto.define = function define(target, key, _home) {
var name = this.name;
Object.defineProperty(target, key, {
enumerable: true,
configurable: true,
get: function get() {
return this[name];
}
});
};
var _this = _possibleConstructorReturn(this, _Descriptor.call(this));
_this.name = name;
return _this;
}
AliasMethodDescriptor.prototype.define = function define(target, key, _home) {
var name = this.name;
Object.defineProperty(target, key, {
enumerable: true,
configurable: true,
get: function get() {
return this[name];
}
});
};
return AliasMethodDescriptor;
return AliasMethodDescriptor;
}(_mixin.Descriptor);
var AliasMethodBlueprint = function (_Blueprint) {
_inherits(AliasMethodBlueprint, _Blueprint);
var AliasMethodBlueprint =
/*#__PURE__*/
function (_Blueprint) {
_inheritsLoose(AliasMethodBlueprint, _Blueprint);
function AliasMethodBlueprint(name) {
_classCallCheck(this, AliasMethodBlueprint);
function AliasMethodBlueprint(name) {
var _this2;
var _this2 = _possibleConstructorReturn(this, _Blueprint.call(this));
_this2 = _Blueprint.call(this) || this;
_this2.name = name;
return _this2;
}
_this2.name = name;
return _this2;
}
var _proto2 = AliasMethodBlueprint.prototype;
AliasMethodBlueprint.prototype.descriptor = function descriptor(_target, _key, _meta) {
return new AliasMethodDescriptor(this.name);
};
_proto2.descriptor = function descriptor(_target, _key, _meta) {
return new AliasMethodDescriptor(this.name);
};
return AliasMethodBlueprint;
return AliasMethodBlueprint;
}(_mixin.Blueprint);
function aliasMethod(name) {
return new AliasMethodBlueprint(name);
return new AliasMethodBlueprint(name);
}
var AliasBlueprint = function (_ComputedBlueprint) {
_inherits(AliasBlueprint, _ComputedBlueprint);
var AliasBlueprint =
/*#__PURE__*/
function (_ComputedBlueprint) {
_inheritsLoose(AliasBlueprint, _ComputedBlueprint);
function AliasBlueprint(name) {
_classCallCheck(this, AliasBlueprint);
function AliasBlueprint(name) {
var _this3;
var parent = name.slice(0, -1);
var last = name[name.length - 1];
var get = function get() {
return name.reduce(function (obj, n) {
return obj[n];
}, this);
};
var set = function set(value) {
var p = parent.reduce(function (obj, n) {
return obj[n];
}, this);
p[last] = value;
};
var parent = name.slice(0, -1);
var last = name[name.length - 1];
var _this3 = _possibleConstructorReturn(this, _ComputedBlueprint.call(this, { get: get, set: set }, [name]));
var get = function get() {
return name.reduce(function (obj, n) {
return obj[n];
}, this);
};
_this3.name = name;
return _this3;
}
AliasBlueprint.prototype.descriptor = function descriptor(target, key, meta) {
if (this.name[0] === key) throw new Error('Setting alias \'' + key + '\' on self');
return _ComputedBlueprint.prototype.descriptor.call(this, target, key, meta);
var set = function set(value) {
var p = parent.reduce(function (obj, n) {
return obj[n];
}, this);
p[last] = value;
};
return AliasBlueprint;
_this3 = _ComputedBlueprint.call(this, {
get: get,
set: set
}, [name]) || this;
_this3.name = name;
return _this3;
}
var _proto3 = AliasBlueprint.prototype;
_proto3.descriptor = function descriptor(target, key, meta) {
if (this.name[0] === key) throw new Error("Setting alias '" + key + "' on self");
return _ComputedBlueprint.prototype.descriptor.call(this, target, key, meta);
};
return AliasBlueprint;
}(_computed.ComputedBlueprint);
function alias(name) {
return new AliasBlueprint(name.split('.'));
return new AliasBlueprint(name.split('.'));
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvZGVzY3JpcHRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7UUF1Q00sVyxHQUFBLFc7UUE4QkEsSyxHQUFBLEs7O0FBckVOOztBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBR0Esd0I7OztBQUdFLGFBQUEscUJBQUEsQ0FBQSxJQUFBLEVBQXdCO0FBQUEsd0JBQUEsSUFBQSxFQUFBLHFCQUFBOztBQUFBLFlBQUEsUUFBQSwyQkFBQSxJQUFBLEVBQ3RCLFlBQUEsSUFBQSxDQURzQixJQUN0QixDQURzQixDQUFBOztBQUV0QixjQUFBLElBQUEsR0FBQSxJQUFBO0FBRnNCLGVBQUEsS0FBQTtBQUd2Qjs7b0NBRUQsTSxtQkFBQSxNLEVBQUEsRyxFQUFBLEssRUFBK0M7QUFDN0MsWUFBSSxPQUFPLEtBQVgsSUFBQTtBQUVBLGVBQUEsY0FBQSxDQUFBLE1BQUEsRUFBQSxHQUFBLEVBQW1DO0FBQ2pDLHdCQURpQyxJQUFBO0FBRWpDLDBCQUZpQyxJQUFBO0FBQUEsaUJBQUEsU0FBQSxHQUFBLEdBRzlCO0FBQ0QsdUJBQU8sS0FBUCxJQUFPLENBQVA7QUFDRDtBQUxnQyxTQUFuQzs7OztFQVhKLGlCOztJQXFCQSx1Qjs7O0FBR0UsYUFBQSxvQkFBQSxDQUFBLElBQUEsRUFBd0I7QUFBQSx3QkFBQSxJQUFBLEVBQUEsb0JBQUE7O0FBQUEsWUFBQSxTQUFBLDJCQUFBLElBQUEsRUFDdEIsV0FBQSxJQUFBLENBRHNCLElBQ3RCLENBRHNCLENBQUE7O0FBRXRCLGVBQUEsSUFBQSxHQUFBLElBQUE7QUFGc0IsZUFBQSxNQUFBO0FBR3ZCOzttQ0FFRCxVLHVCQUFBLE8sRUFBQSxJLEVBQUEsSyxFQUEwRDtBQUN4RCxlQUFPLElBQUEscUJBQUEsQ0FBMEIsS0FBakMsSUFBTyxDQUFQOzs7O0VBVEosZ0I7O0FBYU0sU0FBQSxXQUFBLENBQUEsSUFBQSxFQUFrQztBQUN0QyxXQUFPLElBQUEsb0JBQUEsQ0FBUCxJQUFPLENBQVA7QUFDRDs7SUFFRCxpQjs7O0FBR0UsYUFBQSxjQUFBLENBQUEsSUFBQSxFQUEwQjtBQUFBLHdCQUFBLElBQUEsRUFBQSxjQUFBOztBQUN4QixZQUFJLFNBQVMsS0FBQSxLQUFBLENBQUEsQ0FBQSxFQUFjLENBQTNCLENBQWEsQ0FBYjtBQUNBLFlBQUksT0FBTyxLQUFLLEtBQUEsTUFBQSxHQUFoQixDQUFXLENBQVg7QUFFQSxZQUFJLE1BQU0sU0FBTixHQUFNLEdBQUE7QUFDUixtQkFBTyxLQUFBLE1BQUEsQ0FBWSxVQUFBLEdBQUEsRUFBQSxDQUFBLEVBQUE7QUFBQSx1QkFBWSxJQUF4QixDQUF3QixDQUFaO0FBQVosYUFBQSxFQUFQLElBQU8sQ0FBUDtBQURGLFNBQUE7QUFJQSxZQUFJLE1BQU0sU0FBTixHQUFNLENBQUEsS0FBQSxFQUE4QjtBQUN0QyxnQkFBSSxJQUFJLE9BQUEsTUFBQSxDQUFjLFVBQUEsR0FBQSxFQUFBLENBQUEsRUFBQTtBQUFBLHVCQUFZLElBQTFCLENBQTBCLENBQVo7QUFBZCxhQUFBLEVBQVIsSUFBUSxDQUFSO0FBQ0EsY0FBQSxJQUFBLElBQUEsS0FBQTtBQUZGLFNBQUE7O0FBUndCLFlBQUEsU0FBQSwyQkFBQSxJQUFBLEVBYXhCLG1CQUFBLElBQUEsQ0FBQSxJQUFBLEVBQU0sRUFBQSxLQUFBLEdBQUEsRUFBTixLQUFBLEdBQU0sRUFBTixFQUFvQixDQWJJLElBYUosQ0FBcEIsQ0Fid0IsQ0FBQTs7QUFjeEIsZUFBQSxJQUFBLEdBQUEsSUFBQTtBQWR3QixlQUFBLE1BQUE7QUFlekI7OzZCQUVELFUsdUJBQUEsTSxFQUFBLEcsRUFBQSxJLEVBQXVEO0FBQ3JELFlBQUksS0FBQSxJQUFBLENBQUEsQ0FBQSxNQUFKLEdBQUEsRUFBMEIsTUFBTSxJQUFBLEtBQUEsQ0FBQSxxQkFBTixHQUFNLEdBQU4sWUFBTSxDQUFOO0FBQzFCLGVBQU8sbUJBQUEsU0FBQSxDQUFBLFVBQUEsQ0FBQSxJQUFBLENBQUEsSUFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEVBQVAsSUFBTyxDQUFQOzs7O0VBdEJKLDJCOztBQTBCTSxTQUFBLEtBQUEsQ0FBQSxJQUFBLEVBQTRCO0FBQ2hDLFdBQU8sSUFBQSxjQUFBLENBQW1CLEtBQUEsS0FBQSxDQUExQixHQUEwQixDQUFuQixDQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCbHVlcHJpbnQsIERlc2NyaXB0b3IgfSBmcm9tICcuL21peGluJztcbmltcG9ydCB7IENsYXNzTWV0YSB9IGZyb20gJy4vb2JqZWN0JztcbmltcG9ydCB7IENvbXB1dGVkQmx1ZXByaW50IH0gZnJvbSAnLi9jb21wdXRlZCc7XG5pbXBvcnQgeyBEaWN0IH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5cbmNsYXNzIEFsaWFzTWV0aG9kRGVzY3JpcHRvciBleHRlbmRzIERlc2NyaXB0b3Ige1xuICBwcml2YXRlIG5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBkZWZpbmUodGFyZ2V0OiBEaWN0LCBrZXk6IHN0cmluZywgX2hvbWU6IE9iamVjdCkge1xuICAgIGxldCBuYW1lID0gdGhpcy5uYW1lIGFzIHN0cmluZztcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldCh0aGlzOiB0eXBlb2YgdGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzW25hbWVdO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5jbGFzcyBBbGlhc01ldGhvZEJsdWVwcmludCBleHRlbmRzIEJsdWVwcmludCB7XG4gIHByaXZhdGUgbmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIGRlc2NyaXB0b3IoX3RhcmdldDogT2JqZWN0LCBfa2V5OiBzdHJpbmcsIF9tZXRhOiBDbGFzc01ldGEpOiBEZXNjcmlwdG9yIHtcbiAgICByZXR1cm4gbmV3IEFsaWFzTWV0aG9kRGVzY3JpcHRvcih0aGlzLm5hbWUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGlhc01ldGhvZChuYW1lOiBzdHJpbmcpOiBCbHVlcHJpbnQge1xuICByZXR1cm4gbmV3IEFsaWFzTWV0aG9kQmx1ZXByaW50KG5hbWUpO1xufVxuXG5jbGFzcyBBbGlhc0JsdWVwcmludCBleHRlbmRzIENvbXB1dGVkQmx1ZXByaW50IHtcbiAgcHJpdmF0ZSBuYW1lOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmdbXSkge1xuICAgIGxldCBwYXJlbnQgPSBuYW1lLnNsaWNlKDAsIC0xKTtcbiAgICBsZXQgbGFzdCA9IG5hbWVbbmFtZS5sZW5ndGggLSAxXTtcblxuICAgIGxldCBnZXQgPSBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICAgIHJldHVybiBuYW1lLnJlZHVjZSgob2JqLCBuKSA9PiBvYmpbbl0sIHRoaXMpO1xuICAgIH07XG5cbiAgICBsZXQgc2V0ID0gZnVuY3Rpb24odGhpczogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgICBsZXQgcCA9IHBhcmVudC5yZWR1Y2UoKG9iaiwgbikgPT4gb2JqW25dLCB0aGlzKTtcbiAgICAgIHBbbGFzdF0gPSB2YWx1ZTtcbiAgICB9O1xuXG4gICAgc3VwZXIoeyBnZXQsIHNldCB9LCBbbmFtZV0pO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBkZXNjcmlwdG9yKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgbWV0YTogQ2xhc3NNZXRhKTogRGVzY3JpcHRvciB7XG4gICAgaWYgKHRoaXMubmFtZVswXSA9PT0ga2V5KSB0aHJvdyBuZXcgRXJyb3IoYFNldHRpbmcgYWxpYXMgJyR7a2V5fScgb24gc2VsZmApO1xuICAgIHJldHVybiBzdXBlci5kZXNjcmlwdG9yKHRhcmdldCwga2V5LCBtZXRhKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxpYXMobmFtZTogc3RyaW5nKTogQmx1ZXByaW50IHtcbiAgcmV0dXJuIG5ldyBBbGlhc0JsdWVwcmludChuYW1lLnNwbGl0KCcuJykpO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvZGVzY3JpcHRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7QUFFQTs7Ozs7Ozs7SUFHQSxxQjs7Ozs7QUFHRSxXQUFBLHFCQUFBLENBQUEsSUFBQSxFQUF3QjtBQUFBLFFBQUEsS0FBQTs7QUFDdEIsSUFBQSxLQUFBLEdBQUEsV0FBQSxDQUFBLElBQUEsQ0FBQSxJQUFBLEtBQUEsSUFBQTtBQUNBLElBQUEsS0FBQSxDQUFBLElBQUEsR0FBQSxJQUFBO0FBRnNCLFdBQUEsS0FBQTtBQUd2Qjs7OztTQUVELE0sR0FBQSxTQUFBLE1BQUEsQ0FBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLEtBQUEsRUFBK0M7QUFDN0MsUUFBSSxJQUFJLEdBQUcsS0FBWCxJQUFBO0FBRUEsSUFBQSxNQUFNLENBQU4sY0FBQSxDQUFBLE1BQUEsRUFBQSxHQUFBLEVBQW1DO0FBQ2pDLE1BQUEsVUFBVSxFQUR1QixJQUFBO0FBRWpDLE1BQUEsWUFBWSxFQUZxQixJQUFBO0FBR2pDLE1BQUEsR0FIaUMsRUFBQSxTQUFBLEdBQUEsR0FHOUI7QUFDRCxlQUFPLEtBQVAsSUFBTyxDQUFQO0FBQ0Q7QUFMZ0MsS0FBbkM7Ozs7RUFYSixpQjs7SUFxQkEsb0I7Ozs7O0FBR0UsV0FBQSxvQkFBQSxDQUFBLElBQUEsRUFBd0I7QUFBQSxRQUFBLE1BQUE7O0FBQ3RCLElBQUEsTUFBQSxHQUFBLFVBQUEsQ0FBQSxJQUFBLENBQUEsSUFBQSxLQUFBLElBQUE7QUFDQSxJQUFBLE1BQUEsQ0FBQSxJQUFBLEdBQUEsSUFBQTtBQUZzQixXQUFBLE1BQUE7QUFHdkI7Ozs7VUFFRCxVLEdBQUEsU0FBQSxVQUFBLENBQUEsT0FBQSxFQUFBLElBQUEsRUFBQSxLQUFBLEVBQTBEO0FBQ3hELFdBQU8sSUFBQSxxQkFBQSxDQUEwQixLQUFqQyxJQUFPLENBQVA7Ozs7RUFUSixnQjs7QUFhTSxTQUFBLFdBQUEsQ0FBQSxJQUFBLEVBQWtDO0FBQ3RDLFNBQU8sSUFBQSxvQkFBQSxDQUFQLElBQU8sQ0FBUDtBQUNEOztJQUVELGM7Ozs7O0FBR0UsV0FBQSxjQUFBLENBQUEsSUFBQSxFQUEwQjtBQUFBLFFBQUEsTUFBQTs7QUFDeEIsUUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFKLEtBQUEsQ0FBQSxDQUFBLEVBQWMsQ0FBM0IsQ0FBYSxDQUFiO0FBQ0EsUUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBSixNQUFBLEdBQWhCLENBQWUsQ0FBZjs7QUFFQSxRQUFJLEdBQUcsR0FBRyxTQUFOLEdBQU0sR0FBQTtBQUNSLGFBQU8sSUFBSSxDQUFKLE1BQUEsQ0FBWSxVQUFBLEdBQUEsRUFBQSxDQUFBLEVBQUE7QUFBQSxlQUFZLEdBQUcsQ0FBM0IsQ0FBMkIsQ0FBZjtBQUFaLE9BQUEsRUFBUCxJQUFPLENBQVA7QUFERixLQUFBOztBQUlBLFFBQUksR0FBRyxHQUFHLFNBQU4sR0FBTSxDQUFBLEtBQUEsRUFBOEI7QUFDdEMsVUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFOLE1BQUEsQ0FBYyxVQUFBLEdBQUEsRUFBQSxDQUFBLEVBQUE7QUFBQSxlQUFZLEdBQUcsQ0FBN0IsQ0FBNkIsQ0FBZjtBQUFkLE9BQUEsRUFBUixJQUFRLENBQVI7QUFDQSxNQUFBLENBQUMsQ0FBRCxJQUFDLENBQUQsR0FBQSxLQUFBO0FBRkYsS0FBQTs7QUFLQSxJQUFBLE1BQUEsR0FBQSxrQkFBQSxDQUFBLElBQUEsQ0FBQSxJQUFBLEVBQU07QUFBRSxNQUFBLEdBQUYsRUFBQSxHQUFBO0FBQU8sTUFBQSxHQUFBLEVBQUE7QUFBUCxLQUFOLEVBQW9CLENBQXBCLElBQW9CLENBQXBCLEtBQUEsSUFBQTtBQUNBLElBQUEsTUFBQSxDQUFBLElBQUEsR0FBQSxJQUFBO0FBZHdCLFdBQUEsTUFBQTtBQWV6Qjs7OztVQUVELFUsR0FBQSxTQUFBLFVBQUEsQ0FBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsRUFBdUQ7QUFDckQsUUFBSSxLQUFBLElBQUEsQ0FBQSxDQUFBLE1BQUosR0FBQSxFQUEwQixNQUFNLElBQUEsS0FBQSxDQUFBLG9CQUFOLEdBQU0sR0FBTixXQUFNLENBQU47QUFDMUIsV0FBQSxrQkFBQSxDQUFBLFNBQUEsQ0FBQSxVQUFBLENBQUEsSUFBQSxDQUFBLElBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsQ0FBQTs7OztFQXRCSiwyQjs7QUEwQk0sU0FBQSxLQUFBLENBQUEsSUFBQSxFQUE0QjtBQUNoQyxTQUFPLElBQUEsY0FBQSxDQUFtQixJQUFJLENBQUosS0FBQSxDQUExQixHQUEwQixDQUFuQixDQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCbHVlcHJpbnQsIERlc2NyaXB0b3IgfSBmcm9tICcuL21peGluJztcbmltcG9ydCB7IENsYXNzTWV0YSB9IGZyb20gJy4vb2JqZWN0JztcbmltcG9ydCB7IENvbXB1dGVkQmx1ZXByaW50IH0gZnJvbSAnLi9jb21wdXRlZCc7XG5pbXBvcnQgeyBEaWN0IH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5cbmNsYXNzIEFsaWFzTWV0aG9kRGVzY3JpcHRvciBleHRlbmRzIERlc2NyaXB0b3Ige1xuICBwcml2YXRlIG5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBkZWZpbmUodGFyZ2V0OiBEaWN0LCBrZXk6IHN0cmluZywgX2hvbWU6IE9iamVjdCkge1xuICAgIGxldCBuYW1lID0gdGhpcy5uYW1lIGFzIHN0cmluZztcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldCh0aGlzOiB0eXBlb2YgdGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzW25hbWVdO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5jbGFzcyBBbGlhc01ldGhvZEJsdWVwcmludCBleHRlbmRzIEJsdWVwcmludCB7XG4gIHByaXZhdGUgbmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIGRlc2NyaXB0b3IoX3RhcmdldDogT2JqZWN0LCBfa2V5OiBzdHJpbmcsIF9tZXRhOiBDbGFzc01ldGEpOiBEZXNjcmlwdG9yIHtcbiAgICByZXR1cm4gbmV3IEFsaWFzTWV0aG9kRGVzY3JpcHRvcih0aGlzLm5hbWUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGlhc01ldGhvZChuYW1lOiBzdHJpbmcpOiBCbHVlcHJpbnQge1xuICByZXR1cm4gbmV3IEFsaWFzTWV0aG9kQmx1ZXByaW50KG5hbWUpO1xufVxuXG5jbGFzcyBBbGlhc0JsdWVwcmludCBleHRlbmRzIENvbXB1dGVkQmx1ZXByaW50IHtcbiAgcHJpdmF0ZSBuYW1lOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmdbXSkge1xuICAgIGxldCBwYXJlbnQgPSBuYW1lLnNsaWNlKDAsIC0xKTtcbiAgICBsZXQgbGFzdCA9IG5hbWVbbmFtZS5sZW5ndGggLSAxXTtcblxuICAgIGxldCBnZXQgPSBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICAgIHJldHVybiBuYW1lLnJlZHVjZSgob2JqLCBuKSA9PiBvYmpbbl0sIHRoaXMpO1xuICAgIH07XG5cbiAgICBsZXQgc2V0ID0gZnVuY3Rpb24odGhpczogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgICBsZXQgcCA9IHBhcmVudC5yZWR1Y2UoKG9iaiwgbikgPT4gb2JqW25dLCB0aGlzKTtcbiAgICAgIHBbbGFzdF0gPSB2YWx1ZTtcbiAgICB9O1xuXG4gICAgc3VwZXIoeyBnZXQsIHNldCB9LCBbbmFtZV0pO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBkZXNjcmlwdG9yKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgbWV0YTogQ2xhc3NNZXRhKTogRGVzY3JpcHRvciB7XG4gICAgaWYgKHRoaXMubmFtZVswXSA9PT0ga2V5KSB0aHJvdyBuZXcgRXJyb3IoYFNldHRpbmcgYWxpYXMgJyR7a2V5fScgb24gc2VsZmApO1xuICAgIHJldHVybiBzdXBlci5kZXNjcmlwdG9yKHRhcmdldCwga2V5LCBtZXRhKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxpYXMobmFtZTogc3RyaW5nKTogQmx1ZXByaW50IHtcbiAgcmV0dXJuIG5ldyBBbGlhc0JsdWVwcmludChuYW1lLnNwbGl0KCcuJykpO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
value: true
});
exports.AccessorBlueprint = exports.DataBlueprint = exports.Mixin = exports.Blueprint = exports.Descriptor = exports.BLUEPRINT = exports.DESCRIPTOR = undefined;
exports.extend = extend;

@@ -11,2 +10,3 @@ exports.relinkSubclasses = relinkSubclasses;

exports.wrapMethod = wrapMethod;
exports.AccessorBlueprint = exports.DataBlueprint = exports.Mixin = exports.Blueprint = exports.Descriptor = exports.BLUEPRINT = exports.DESCRIPTOR = void 0;

@@ -21,423 +21,483 @@ var _objectReference = require("@glimmer/object-reference");

function _defaults(obj, defaults) {
var keys = Object.getOwnPropertyNames(defaults);for (var i = 0; i < keys.length; i++) {
var key = keys[i];var value = Object.getOwnPropertyDescriptor(defaults, key);if (value && value.configurable && obj[key] === undefined) {
Object.defineProperty(obj, key, value);
}
}return obj;
function _inheritsLoose(subClass, superClass) {
subClass.prototype = Object.create(superClass.prototype);
subClass.prototype.constructor = subClass;
subClass.__proto__ = superClass;
}
function _possibleConstructorReturn(self, call) {
if (!self) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}return call && (typeof call === "object" || typeof call === "function") ? call : self;
}
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
}subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass);
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
var _a, _b;
var isArray = Array.isArray;
var DESCRIPTOR = (0, _util.symbol)('DESCRIPTOR');
exports.DESCRIPTOR = DESCRIPTOR;
var BLUEPRINT = (0, _util.symbol)('BLUEPRINT');
exports.BLUEPRINT = BLUEPRINT;
var DESCRIPTOR = exports.DESCRIPTOR = (0, _util.symbol)('DESCRIPTOR');
var BLUEPRINT = exports.BLUEPRINT = (0, _util.symbol)('BLUEPRINT');
var Descriptor = exports.Descriptor = function Descriptor() {
_classCallCheck(this, Descriptor);
var Descriptor = function Descriptor() {
this[_a] = true;
};
this[_a] = true;
};
exports.Descriptor = Descriptor;
_a = DESCRIPTOR;
var Blueprint = exports.Blueprint = function Blueprint() {
_classCallCheck(this, Blueprint);
this[_b] = true;
var Blueprint = function Blueprint() {
this[_b] = true;
};
exports.Blueprint = Blueprint;
_b = BLUEPRINT;
var Mixin = exports.Mixin = function () {
function Mixin(extensions, mixins) {
var _dependencies;
_classCallCheck(this, Mixin);
var Mixin =
/*#__PURE__*/
function () {
function Mixin(extensions, mixins) {
var _this$dependencies;
this.extensions = null; // assigned before used
this.concatenatedProperties = [];
this.mergedProperties = [];
this.dependencies = [];
this.reopen(extensions);
(_dependencies = this.dependencies).push.apply(_dependencies, mixins);
this.extensions = null; // assigned before used
this.concatenatedProperties = [];
this.mergedProperties = [];
this.dependencies = [];
this.reopen(extensions);
(_this$dependencies = this.dependencies).push.apply(_this$dependencies, mixins);
}
Mixin.create = function create() {
for (var _len = arguments.length, args = new Array(_len), _key2 = 0; _key2 < _len; _key2++) {
args[_key2] = arguments[_key2];
}
Mixin.create = function create() {
for (var _len = arguments.length, args = Array(_len), _key2 = 0; _key2 < _len; _key2++) {
args[_key2] = arguments[_key2];
}
var extensions = args[args.length - 1];
var extensions = args[args.length - 1];
if (args.length === 0) {
return new this({}, []);
} else if (extensions instanceof Mixin) {
return new this({}, args);
} else {
var deps = args.slice(0, -1).map(toMixin);
return new this(extensions, deps);
}
};
if (args.length === 0) {
return new this({}, []);
} else if (extensions instanceof Mixin) {
return new this({}, args);
} else {
var deps = args.slice(0, -1).map(toMixin);
return new this(extensions, deps);
}
};
Mixin.mixins = function mixins(obj) {
if (typeof obj !== 'object' || obj === null) return [];
var meta = _object.ClassMeta.for(obj);
if (!meta) return [];
return meta.getAppliedMixins();
};
Mixin.mixins = function mixins(obj) {
if (typeof obj !== 'object' || obj === null) return [];
Mixin.prototype.detect = function detect(obj) {
if (typeof obj !== 'object' || obj === null) return false;
if (obj instanceof Mixin) {
return obj.dependencies.indexOf(this) !== -1;
}
var meta = _object.ClassMeta.for(obj);
return !!meta && meta.hasAppliedMixin(this);
};
var meta = _object.ClassMeta["for"](obj);
Mixin.prototype.reopen = function reopen(extensions) {
if (this.extensions) {
this.dependencies.push(toMixin(this.extensions));
}
if (typeof extensions === 'object' && 'concatenatedProperties' in extensions) {
var concat = void 0;
var rawConcat = extensions.concatenatedProperties;
if (isArray(rawConcat)) {
concat = rawConcat.slice();
} else if (rawConcat === null || rawConcat === undefined) {
concat = [];
} else {
concat = [rawConcat];
}
delete extensions.concatenatedProperties;
this.concatenatedProperties = concat;
}
if (typeof extensions === 'object' && 'mergedProperties' in extensions) {
var merged = void 0;
var rawMerged = extensions.mergedProperties;
if (isArray(rawMerged)) {
merged = rawMerged.slice();
} else if (rawMerged === null || rawMerged === undefined) {
merged = [];
} else {
merged = [rawMerged];
}
delete extensions.mergedProperties;
this.mergedProperties = merged;
}
var normalized = Object.keys(extensions).reduce(function (obj, key) {
var value = extensions[key];
switch (typeof value) {
case 'function':
obj[key] = new MethodBlueprint({ value: value });
break;
case 'object':
if (value && BLUEPRINT in value) {
obj[key] = value;
break;
}
/* falls through */
default:
obj[key] = new DataBlueprint({ value: value });
}
return obj;
}, (0, _util.dict)());
this.extensions = (0, _util.dict)();
(0, _util.assign)(this.extensions, (0, _object.turbocharge)(normalized));
};
if (!meta) return [];
return meta.getAppliedMixins();
};
Mixin.prototype.apply = function apply(target) {
var meta = target[_objectReference.CLASS_META] = target[_objectReference.CLASS_META] || new _object.ClassMeta();
this.dependencies.forEach(function (m) {
return m.apply(target);
});
this.mergeProperties(target, target, meta);
meta.addMixin(this);
meta.seal();
meta.reseal(target);
return target;
};
var _proto = Mixin.prototype;
Mixin.prototype.extendPrototype = function extendPrototype(Original) {
Original.prototype = Object.create(Original.prototype);
this.dependencies.forEach(function (m) {
return m.extendPrototype(Original);
});
this.extendPrototypeOnto(Original, Original);
};
_proto.detect = function detect(obj) {
if (typeof obj !== 'object' || obj === null) return false;
Mixin.prototype.extendPrototypeOnto = function extendPrototypeOnto(Subclass, Parent) {
this.dependencies.forEach(function (m) {
return m.extendPrototypeOnto(Subclass, Parent);
});
this.mergeProperties(Subclass.prototype, Parent.prototype, Subclass[_objectReference.CLASS_META]);
Subclass[_objectReference.CLASS_META].addMixin(this);
};
if (obj instanceof Mixin) {
return obj.dependencies.indexOf(this) !== -1;
}
Mixin.prototype.extendStatic = function extendStatic(Target) {
this.dependencies.forEach(function (m) {
return m.extendStatic(Target);
});
this.mergeProperties(Target, Object.getPrototypeOf(Target), Target[_objectReference.CLASS_META][_objectReference.CLASS_META]);
Target[_objectReference.CLASS_META].addStaticMixin(this);
};
var meta = _object.ClassMeta["for"](obj);
Mixin.prototype.mergeProperties = function mergeProperties(target, parent, meta) {
var _this = this;
return !!meta && meta.hasAppliedMixin(this);
};
if (meta.hasAppliedMixin(this)) return;
meta.addAppliedMixin(this);
this.mergedProperties.forEach(function (k) {
return meta.addMergedProperty(k, parent[k]);
});
this.concatenatedProperties.forEach(function (k) {
return meta.addConcatenatedProperty(k, []);
});
new ValueDescriptor({ value: meta.getConcatenatedProperties() }).define(target, 'concatenatedProperties');
new ValueDescriptor({ value: meta.getMergedProperties() }).define(target, 'mergedProperties');
Object.keys(this.extensions).forEach(function (key) {
var extension = _this.extensions[key];
var desc = extension.descriptor(target, key, meta);
desc.define(target, key, parent);
});
new ValueDescriptor({ value: _utils.ROOT }).define(target, '_super');
};
_proto.reopen = function reopen(extensions) {
if (this.extensions) {
this.dependencies.push(toMixin(this.extensions));
}
return Mixin;
if (typeof extensions === 'object' && 'concatenatedProperties' in extensions) {
var concat;
var rawConcat = extensions.concatenatedProperties;
if (isArray(rawConcat)) {
concat = rawConcat.slice();
} else if (rawConcat === null || rawConcat === undefined) {
concat = [];
} else {
concat = [rawConcat];
}
delete extensions.concatenatedProperties;
this.concatenatedProperties = concat;
}
if (typeof extensions === 'object' && 'mergedProperties' in extensions) {
var merged;
var rawMerged = extensions.mergedProperties;
if (isArray(rawMerged)) {
merged = rawMerged.slice();
} else if (rawMerged === null || rawMerged === undefined) {
merged = [];
} else {
merged = [rawMerged];
}
delete extensions.mergedProperties;
this.mergedProperties = merged;
}
var normalized = Object.keys(extensions).reduce(function (obj, key) {
var value = extensions[key];
switch (typeof value) {
case 'function':
obj[key] = new MethodBlueprint({
value: value
});
break;
case 'object':
if (value && BLUEPRINT in value) {
obj[key] = value;
break;
}
/* falls through */
default:
obj[key] = new DataBlueprint({
value: value
});
}
return obj;
}, (0, _util.dict)());
this.extensions = (0, _util.dict)();
(0, _util.assign)(this.extensions, (0, _object.turbocharge)(normalized));
};
_proto.apply = function apply(target) {
var meta = target[_objectReference.CLASS_META] = target[_objectReference.CLASS_META] || new _object.ClassMeta();
this.dependencies.forEach(function (m) {
return m.apply(target);
});
this.mergeProperties(target, target, meta);
meta.addMixin(this);
meta.seal();
meta.reseal(target);
return target;
};
_proto.extendPrototype = function extendPrototype(Original) {
Original.prototype = Object.create(Original.prototype);
this.dependencies.forEach(function (m) {
return m.extendPrototype(Original);
});
this.extendPrototypeOnto(Original, Original);
};
_proto.extendPrototypeOnto = function extendPrototypeOnto(Subclass, Parent) {
this.dependencies.forEach(function (m) {
return m.extendPrototypeOnto(Subclass, Parent);
});
this.mergeProperties(Subclass.prototype, Parent.prototype, Subclass[_objectReference.CLASS_META]);
Subclass[_objectReference.CLASS_META].addMixin(this);
};
_proto.extendStatic = function extendStatic(Target) {
this.dependencies.forEach(function (m) {
return m.extendStatic(Target);
});
this.mergeProperties(Target, Object.getPrototypeOf(Target), Target[_objectReference.CLASS_META][_objectReference.CLASS_META]);
Target[_objectReference.CLASS_META].addStaticMixin(this);
};
_proto.mergeProperties = function mergeProperties(target, parent, meta) {
var _this = this;
if (meta.hasAppliedMixin(this)) return;
meta.addAppliedMixin(this);
this.mergedProperties.forEach(function (k) {
return meta.addMergedProperty(k, parent[k]);
});
this.concatenatedProperties.forEach(function (k) {
return meta.addConcatenatedProperty(k, []);
});
new ValueDescriptor({
value: meta.getConcatenatedProperties()
}).define(target, 'concatenatedProperties');
new ValueDescriptor({
value: meta.getMergedProperties()
}).define(target, 'mergedProperties');
Object.keys(this.extensions).forEach(function (key) {
var extension = _this.extensions[key];
var desc = extension.descriptor(target, key, meta);
desc.define(target, key, parent);
});
new ValueDescriptor({
value: _utils.ROOT
}).define(target, '_super');
};
return Mixin;
}();
function extend(Parent) {
var Super = Parent;
var Subclass = function (_Super) {
_inherits(Subclass, _Super);
function Subclass() {
_classCallCheck(this, Subclass);
exports.Mixin = Mixin;
return _possibleConstructorReturn(this, _Super.apply(this, arguments));
}
function extend(Parent) {
var Super = Parent;
return Subclass;
}(Super);
Subclass[_objectReference.CLASS_META] = _object.InstanceMeta.fromParent(Parent[_objectReference.CLASS_META]);
var Subclass =
/*#__PURE__*/
function (_Super) {
_inheritsLoose(Subclass, _Super);
for (var _len2 = arguments.length, extensions = Array(_len2 > 1 ? _len2 - 1 : 0), _key3 = 1; _key3 < _len2; _key3++) {
extensions[_key3 - 1] = arguments[_key3];
function Subclass() {
return _Super.apply(this, arguments) || this;
}
var mixins = extensions.map(toMixin);
Parent[_objectReference.CLASS_META].addSubclass(Subclass);
mixins.forEach(function (m) {
return Subclass[_objectReference.CLASS_META].addMixin(m);
});
_object.ClassMeta.applyAllMixins(Subclass, Parent);
return Subclass;
}(Super);
Subclass[_objectReference.CLASS_META] = _object.InstanceMeta.fromParent(Parent[_objectReference.CLASS_META]);
for (var _len2 = arguments.length, extensions = new Array(_len2 > 1 ? _len2 - 1 : 0), _key3 = 1; _key3 < _len2; _key3++) {
extensions[_key3 - 1] = arguments[_key3];
}
var mixins = extensions.map(toMixin);
Parent[_objectReference.CLASS_META].addSubclass(Subclass);
mixins.forEach(function (m) {
return Subclass[_objectReference.CLASS_META].addMixin(m);
});
_object.ClassMeta.applyAllMixins(Subclass, Parent);
return Subclass;
}
function relinkSubclasses(Parent) {
Parent[_objectReference.CLASS_META].getSubclasses().forEach(function (Subclass) {
Subclass[_objectReference.CLASS_META].reset(Parent[_objectReference.CLASS_META]);
Subclass.prototype = Object.create(Parent.prototype);
_object.ClassMeta.applyAllMixins(Subclass, Parent);
// recurse into sub-subclasses
relinkSubclasses(Subclass);
});
Parent[_objectReference.CLASS_META].getSubclasses().forEach(function (Subclass) {
Subclass[_objectReference.CLASS_META].reset(Parent[_objectReference.CLASS_META]);
Subclass.prototype = Object.create(Parent.prototype);
_object.ClassMeta.applyAllMixins(Subclass, Parent); // recurse into sub-subclasses
relinkSubclasses(Subclass);
});
}
function toMixin(extension) {
if (extension instanceof Mixin) return extension;else return new Mixin(extension, []);
if (extension instanceof Mixin) return extension;else return new Mixin(extension, []);
}
var ValueDescriptor = function (_Descriptor) {
_inherits(ValueDescriptor, _Descriptor);
var ValueDescriptor =
/*#__PURE__*/
function (_Descriptor) {
_inheritsLoose(ValueDescriptor, _Descriptor);
function ValueDescriptor(_ref) {
var _ref$enumerable = _ref.enumerable,
enumerable = _ref$enumerable === undefined ? true : _ref$enumerable,
_ref$configurable = _ref.configurable,
configurable = _ref$configurable === undefined ? true : _ref$configurable,
_ref$writable = _ref.writable,
writable = _ref$writable === undefined ? true : _ref$writable,
value = _ref.value;
function ValueDescriptor(_ref) {
var _this2;
_classCallCheck(this, ValueDescriptor);
var _ref$enumerable = _ref.enumerable,
enumerable = _ref$enumerable === void 0 ? true : _ref$enumerable,
_ref$configurable = _ref.configurable,
configurable = _ref$configurable === void 0 ? true : _ref$configurable,
_ref$writable = _ref.writable,
writable = _ref$writable === void 0 ? true : _ref$writable,
value = _ref.value;
_this2 = _Descriptor.call(this) || this;
_this2.enumerable = enumerable;
_this2.configurable = configurable;
_this2.writable = writable;
_this2.value = value;
return _this2;
}
var _this3 = _possibleConstructorReturn(this, _Descriptor.call(this));
var _proto2 = ValueDescriptor.prototype;
_this3.enumerable = enumerable;
_this3.configurable = configurable;
_this3.writable = writable;
_this3.value = value;
return _this3;
}
_proto2.define = function define(target, key, _home) {
Object.defineProperty(target, key, {
enumerable: this.enumerable,
configurable: this.configurable,
writable: this.writable,
value: this.value
});
};
ValueDescriptor.prototype.define = function define(target, key, _home) {
Object.defineProperty(target, key, {
enumerable: this.enumerable,
configurable: this.configurable,
writable: this.writable,
value: this.value
});
};
return ValueDescriptor;
return ValueDescriptor;
}(Descriptor);
var DataBlueprint = exports.DataBlueprint = function (_Blueprint) {
_inherits(DataBlueprint, _Blueprint);
var DataBlueprint =
/*#__PURE__*/
function (_Blueprint) {
_inheritsLoose(DataBlueprint, _Blueprint);
function DataBlueprint(_ref2) {
var _ref2$enumerable = _ref2.enumerable,
enumerable = _ref2$enumerable === undefined ? true : _ref2$enumerable,
_ref2$configurable = _ref2.configurable,
configurable = _ref2$configurable === undefined ? true : _ref2$configurable,
_ref2$writable = _ref2.writable,
writable = _ref2$writable === undefined ? true : _ref2$writable,
value = _ref2.value;
function DataBlueprint(_ref2) {
var _this3;
_classCallCheck(this, DataBlueprint);
var _ref2$enumerable = _ref2.enumerable,
enumerable = _ref2$enumerable === void 0 ? true : _ref2$enumerable,
_ref2$configurable = _ref2.configurable,
configurable = _ref2$configurable === void 0 ? true : _ref2$configurable,
_ref2$writable = _ref2.writable,
writable = _ref2$writable === void 0 ? true : _ref2$writable,
value = _ref2.value;
_this3 = _Blueprint.call(this) || this;
_this3.enumerable = enumerable;
_this3.configurable = configurable;
_this3.value = value;
_this3.writable = writable;
return _this3;
}
var _this4 = _possibleConstructorReturn(this, _Blueprint.call(this));
var _proto3 = DataBlueprint.prototype;
_this4.enumerable = enumerable;
_this4.configurable = configurable;
_this4.value = value;
_this4.writable = writable;
return _this4;
_proto3.descriptor = function descriptor(_target, key, classMeta) {
var enumerable = this.enumerable,
configurable = this.configurable,
writable = this.writable,
value = this.value;
if (classMeta.hasConcatenatedProperty(key)) {
classMeta.addConcatenatedProperty(key, value);
value = classMeta.getConcatenatedProperty(key);
} else if (classMeta.hasMergedProperty(key)) {
classMeta.addMergedProperty(key, value);
value = classMeta.getMergedProperty(key);
}
DataBlueprint.prototype.descriptor = function descriptor(_target, key, classMeta) {
var enumerable = this.enumerable,
configurable = this.configurable,
writable = this.writable,
value = this.value;
return new ValueDescriptor({
enumerable: enumerable,
configurable: configurable,
writable: writable,
value: value
});
};
if (classMeta.hasConcatenatedProperty(key)) {
classMeta.addConcatenatedProperty(key, value);
value = classMeta.getConcatenatedProperty(key);
} else if (classMeta.hasMergedProperty(key)) {
classMeta.addMergedProperty(key, value);
value = classMeta.getMergedProperty(key);
}
return new ValueDescriptor({ enumerable: enumerable, configurable: configurable, writable: writable, value: value });
};
return DataBlueprint;
return DataBlueprint;
}(Blueprint);
var AccessorBlueprint = exports.AccessorBlueprint = function (_Blueprint2) {
_inherits(AccessorBlueprint, _Blueprint2);
function AccessorBlueprint(_ref3) {
var _ref3$enumerable = _ref3.enumerable,
enumerable = _ref3$enumerable === undefined ? true : _ref3$enumerable,
_ref3$configurable = _ref3.configurable,
configurable = _ref3$configurable === undefined ? true : _ref3$configurable,
get = _ref3.get,
set = _ref3.set;
exports.DataBlueprint = DataBlueprint;
_classCallCheck(this, AccessorBlueprint);
var AccessorBlueprint =
/*#__PURE__*/
function (_Blueprint2) {
_inheritsLoose(AccessorBlueprint, _Blueprint2);
var _this5 = _possibleConstructorReturn(this, _Blueprint2.call(this));
function AccessorBlueprint(_ref3) {
var _this4;
_this5.enumerable = enumerable;
_this5.configurable = configurable;
_this5.get = get;
_this5.set = set;
return _this5;
}
var _ref3$enumerable = _ref3.enumerable,
enumerable = _ref3$enumerable === void 0 ? true : _ref3$enumerable,
_ref3$configurable = _ref3.configurable,
configurable = _ref3$configurable === void 0 ? true : _ref3$configurable,
get = _ref3.get,
set = _ref3.set;
_this4 = _Blueprint2.call(this) || this;
_this4.enumerable = enumerable;
_this4.configurable = configurable;
_this4.get = get;
_this4.set = set;
return _this4;
}
AccessorBlueprint.prototype.descriptor = function descriptor(_target, _key, _classMeta) {
return new ValueDescriptor({
enumerable: this.enumerable,
configurable: this.configurable,
get: this.get,
set: this.set
});
};
var _proto4 = AccessorBlueprint.prototype;
return AccessorBlueprint;
_proto4.descriptor = function descriptor(_target, _key, _classMeta) {
return new ValueDescriptor({
enumerable: this.enumerable,
configurable: this.configurable,
get: this.get,
set: this.set
});
};
return AccessorBlueprint;
}(Blueprint);
var MethodDescriptor = function (_ValueDescriptor) {
_inherits(MethodDescriptor, _ValueDescriptor);
exports.AccessorBlueprint = AccessorBlueprint;
function MethodDescriptor() {
_classCallCheck(this, MethodDescriptor);
var MethodDescriptor =
/*#__PURE__*/
function (_ValueDescriptor) {
_inheritsLoose(MethodDescriptor, _ValueDescriptor);
return _possibleConstructorReturn(this, _ValueDescriptor.apply(this, arguments));
}
function MethodDescriptor() {
return _ValueDescriptor.apply(this, arguments) || this;
}
MethodDescriptor.prototype.define = function define(target, key, home) {
this.value = wrapMethod(home, key, this.value);
_ValueDescriptor.prototype.define.call(this, target, key, home);
};
var _proto5 = MethodDescriptor.prototype;
return MethodDescriptor;
_proto5.define = function define(target, key, home) {
this.value = wrapMethod(home, key, this.value);
_ValueDescriptor.prototype.define.call(this, target, key, home);
};
return MethodDescriptor;
}(ValueDescriptor);
var MethodBlueprint = function (_DataBlueprint) {
_inherits(MethodBlueprint, _DataBlueprint);
var MethodBlueprint =
/*#__PURE__*/
function (_DataBlueprint) {
_inheritsLoose(MethodBlueprint, _DataBlueprint);
function MethodBlueprint() {
_classCallCheck(this, MethodBlueprint);
function MethodBlueprint() {
return _DataBlueprint.apply(this, arguments) || this;
}
return _possibleConstructorReturn(this, _DataBlueprint.apply(this, arguments));
}
var _proto6 = MethodBlueprint.prototype;
MethodBlueprint.prototype.descriptor = function descriptor(target, key, classMeta) {
var desc = _DataBlueprint.prototype.descriptor.call(this, target, key, classMeta);
return new MethodDescriptor(desc);
};
_proto6.descriptor = function descriptor(target, key, classMeta) {
var desc = _DataBlueprint.prototype.descriptor.call(this, target, key, classMeta);
return MethodBlueprint;
return new MethodDescriptor(desc);
};
return MethodBlueprint;
}(DataBlueprint);
function wrapMethod(home, methodName, original) {
if (!(methodName in home)) return maybeWrap(original);
var superMethod = home[methodName];
var func = function func() {
for (var _len3 = arguments.length, args = Array(_len3), _key4 = 0; _key4 < _len3; _key4++) {
args[_key4] = arguments[_key4];
}
if (!(methodName in home)) return maybeWrap(original);
var superMethod = home[methodName];
if (!this) return original.apply(this, args);
var lastSuper = this._super;
this._super = superMethod;
try {
return original.apply(this, args);
} finally {
this._super = lastSuper;
}
};
func.__wrapped = true;
return func;
var func = function func() {
for (var _len3 = arguments.length, args = new Array(_len3), _key4 = 0; _key4 < _len3; _key4++) {
args[_key4] = arguments[_key4];
}
if (!this) return original.apply(this, args);
var lastSuper = this._super;
this._super = superMethod;
try {
return original.apply(this, args);
} finally {
this._super = lastSuper;
}
};
func.__wrapped = true;
return func;
}
function maybeWrap(original) {
if ('__wrapped' in original) return original;
return function () {
for (var _len4 = arguments.length, args = Array(_len4), _key5 = 0; _key5 < _len4; _key5++) {
args[_key5] = arguments[_key5];
}
if ('__wrapped' in original) return original;
return function () {
for (var _len4 = arguments.length, args = new Array(_len4), _key5 = 0; _key5 < _len4; _key5++) {
args[_key5] = arguments[_key5];
}
if (!this) return original.apply(this, args);
var lastSuper = this._super;
this._super = _utils.ROOT;
try {
return original.apply(this, args);
} finally {
this._super = lastSuper;
}
};
if (!this) return original.apply(this, args);
var lastSuper = this._super;
this._super = _utils.ROOT;
try {
return original.apply(this, args);
} finally {
this._super = lastSuper;
}
};
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvbWl4aW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O1FBaU1NLE0sR0FBQSxNO1FBa0JBLGdCLEdBQUEsZ0I7UUFZQSxPLEdBQUEsTztRQStHQSxVLEdBQUEsVTs7QUE5VU47O0FBQ0E7O0FBQ0E7O0FBT0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUdNLFVBQU4sTUFBTSxPOztBQUVDLElBQU0sa0NBQTRCLGtCQUFsQyxZQUFrQyxDQUFsQztBQUNBLElBQU0sZ0NBQTJCLGtCQUFqQyxXQUFpQyxDQUFqQztBQUVQLElBQUEsa0NBQUEsU0FBQSxVQUFBLEdBQUE7QUFBQSxvQkFBQSxJQUFBLEVBQUEsVUFBQTs7QUFDRSxTQUFBLEVBQUEsSUFBQSxJQUFBO0FBREYsQ0FBQTtLQUNHLFU7QUFJSCxJQUFBLGdDQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsb0JBQUEsSUFBQSxFQUFBLFNBQUE7O0FBQ0UsU0FBQSxFQUFBLElBQUEsSUFBQTtBQURGLENBQUE7S0FDRyxTO0FBV0gsSUFBQSx3QkFBQSxZQUFBO0FBNEJFLGFBQUEsS0FBQSxDQUFBLFVBQUEsRUFBQSxNQUFBLEVBQW1EO0FBQUEsWUFBQSxhQUFBOztBQUFBLHdCQUFBLElBQUEsRUFBQSxLQUFBOztBQTNCM0MsYUFBQSxVQUFBLEdBQUEsSUFBQSxDQTJCMkMsQ0EzQk47QUFDckMsYUFBQSxzQkFBQSxHQUFBLEVBQUE7QUFDQSxhQUFBLGdCQUFBLEdBQUEsRUFBQTtBQUNBLGFBQUEsWUFBQSxHQUFBLEVBQUE7QUF5Qk4sYUFBQSxNQUFBLENBQUEsVUFBQTtBQUNBLFNBQUEsZ0JBQUEsS0FBQSxZQUFBLEVBQUEsSUFBQSxDQUFBLEtBQUEsQ0FBQSxhQUFBLEVBQUEsTUFBQTtBQUNEOztBQS9CSCxVQUFBLE1BQUEsR0FBQSxTQUFBLE1BQUEsR0FNK0M7QUFBQSxhQUFBLElBQUEsT0FBQSxVQUFBLE1BQUEs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SixJQUFBLEVBQVcsT0FBTyxTQUFBLEtBQUEsQ0FBQSxJQUFBLEVBQVAsSUFBTyxDQUFQO0FBRVgsWUFBSSxZQUFZLEtBQWhCLE1BQUE7QUFDQSxhQUFBLE1BQUEsR0FBQSxXQUFBO0FBRUEsWUFBSTtBQUNGLG1CQUFPLFNBQUEsS0FBQSxDQUFBLElBQUEsRUFBUCxJQUFPLENBQVA7QUFERixTQUFBLFNBRVU7QUFDUixpQkFBQSxNQUFBLEdBQUEsU0FBQTtBQUNEO0FBVkgsS0FBQTtBQWFDLFNBQUEsU0FBQSxHQUFBLElBQUE7QUFFRCxXQUFBLElBQUE7QUFDRDtBQUVELFNBQUEsU0FBQSxDQUFBLFFBQUEsRUFBcUM7QUFDbkMsUUFBSSxlQUFKLFFBQUEsRUFBNkIsT0FBQSxRQUFBO0FBRTdCLFdBQU8sWUFBNEM7QUFBQSxhQUFBLElBQUEsUUFBQSxVQUFBLE1BQUEsRUFBNUMsT0FBNEMsTUFBQSxLQUFBLENBQUEsRUFBQSxRQUFBLENBQUEsRUFBQSxRQUFBLEtBQUEsRUFBQSxPQUFBLEVBQUE7QUFBNUMsaUJBQTRDLEtBQTVDLElBQTRDLFVBQUEsS0FBQSxDQUE1QztBQUE0Qzs7QUFDakQsWUFBSSxDQUFKLElBQUEsRUFBVyxPQUFPLFNBQUEsS0FBQSxDQUFBLElBQUEsRUFBUCxJQUFPLENBQVA7QUFFWCxZQUFJLFlBQVksS0FBaEIsTUFBQTtBQUNBLGFBQUEsTUFBQSxHQUFBLFdBQUE7QUFFQSxZQUFJO0FBQ0YsbUJBQU8sU0FBQSxLQUFBLENBQUEsSUFBQSxFQUFQLElBQU8sQ0FBUDtBQURGLFNBQUEsU0FFVTtBQUNSLGlCQUFBLE1BQUEsR0FBQSxTQUFBO0FBQ0Q7QUFWSCxLQUFBO0FBWUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDTEFTU19NRVRBIH0gZnJvbSAnQGdsaW1tZXIvb2JqZWN0LXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBkaWN0LCBhc3NpZ24sIHN5bWJvbCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IEdsaW1tZXJPYmplY3QsIHtcbiAgR2xpbW1lck9iamVjdEZhY3RvcnksXG4gIENsYXNzTWV0YSxcbiAgSW5zdGFuY2VNZXRhLFxuICB0dXJib2NoYXJnZSxcbn0gZnJvbSAnLi9vYmplY3QnO1xuXG5pbXBvcnQgeyBST09UIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBEaWN0IH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5cbmNvbnN0IHsgaXNBcnJheSB9ID0gQXJyYXk7XG5cbmV4cG9ydCBjb25zdCBERVNDUklQVE9SOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdERVNDUklQVE9SJyk7XG5leHBvcnQgY29uc3QgQkxVRVBSSU5UOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdCTFVFUFJJTlQnKTtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERlc2NyaXB0b3Ige1xuICBbREVTQ1JJUFRPUl0gPSB0cnVlO1xuICBhYnN0cmFjdCBkZWZpbmUocHJvdG90eXBlOiBPYmplY3QsIGtleTogc3RyaW5nLCBob21lOiBPYmplY3QpOiB2b2lkO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmx1ZXByaW50IHtcbiAgW0JMVUVQUklOVF0gPSB0cnVlO1xuICBhYnN0cmFjdCBkZXNjcmlwdG9yKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgY2xhc3NNZXRhOiBDbGFzc01ldGEpOiBEZXNjcmlwdG9yO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuc2lvbnMge1xuICBjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzPzogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsO1xuICBtZXJnZWRQcm9wZXJ0aWVzPzogc3RyaW5nW10gfCBzdHJpbmc7XG4gIF9zdXBlcj86IEZ1bmN0aW9uO1xuICBbaW5kZXg6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIE1peGluIHtcbiAgcHJpdmF0ZSBleHRlbnNpb25zOiBEaWN0PGFueT4gPSBudWxsIGFzIGFueTsgLy8gYXNzaWduZWQgYmVmb3JlIHVzZWRcbiAgcHJpdmF0ZSBjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIG1lcmdlZFByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgZGVwZW5kZW5jaWVzOiBNaXhpbltdID0gW107XG5cbiAgc3RhdGljIGNyZWF0ZSguLi5hcmdzOiAoTWl4aW4gfCBFeHRlbnNpb25zKVtdKSB7XG4gICAgbGV0IGV4dGVuc2lvbnMgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBuZXcgdGhpcyh7fSwgW10pO1xuICAgIH0gZWxzZSBpZiAoZXh0ZW5zaW9ucyBpbnN0YW5jZW9mIE1peGluKSB7XG4gICAgICByZXR1cm4gbmV3IHRoaXMoe30sIGFyZ3MgYXMgTWl4aW5bXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBkZXBzID0gYXJncy5zbGljZSgwLCAtMSkubWFwKHRvTWl4aW4pO1xuICAgICAgcmV0dXJuIG5ldyB0aGlzKGV4dGVuc2lvbnMgYXMgRXh0ZW5zaW9ucywgZGVwcyk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIG1peGlucyhvYmo6IGFueSk6IE1peGluW10ge1xuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBvYmogPT09IG51bGwpIHJldHVybiBbXTtcblxuICAgIGxldCBtZXRhID0gQ2xhc3NNZXRhLmZvcihvYmopO1xuICAgIGlmICghbWV0YSkgcmV0dXJuIFtdO1xuXG4gICAgcmV0dXJuIG1ldGEuZ2V0QXBwbGllZE1peGlucygpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoZXh0ZW5zaW9uczogRXh0ZW5zaW9ucywgbWl4aW5zOiBNaXhpbltdKSB7XG4gICAgdGhpcy5yZW9wZW4oZXh0ZW5zaW9ucyk7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMucHVzaCguLi5taXhpbnMpO1xuICB9XG5cbiAgZGV0ZWN0KG9iajogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IG9iaiA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIE1peGluKSB7XG4gICAgICByZXR1cm4gb2JqLmRlcGVuZGVuY2llcy5pbmRleE9mKHRoaXMpICE9PSAtMTtcbiAgICB9XG5cbiAgICBsZXQgbWV0YSA9IENsYXNzTWV0YS5mb3Iob2JqKTtcbiAgICByZXR1cm4gISFtZXRhICYmIG1ldGEuaGFzQXBwbGllZE1peGluKHRoaXMpO1xuICB9XG5cbiAgcmVvcGVuKGV4dGVuc2lvbnM6IEV4dGVuc2lvbnMpIHtcbiAgICBpZiAodGhpcy5leHRlbnNpb25zKSB7XG4gICAgICB0aGlzLmRlcGVuZGVuY2llcy5wdXNoKHRvTWl4aW4odGhpcy5leHRlbnNpb25zKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBleHRlbnNpb25zID09PSAnb2JqZWN0JyAmJiAnY29uY2F0ZW5hdGVkUHJvcGVydGllcycgaW4gZXh0ZW5zaW9ucykge1xuICAgICAgbGV0IGNvbmNhdDogc3RyaW5nW107XG4gICAgICBsZXQgcmF3Q29uY2F0ID0gZXh0ZW5zaW9ucy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzO1xuXG4gICAgICBpZiAoaXNBcnJheShyYXdDb25jYXQpKSB7XG4gICAgICAgIGNvbmNhdCA9IChyYXdDb25jYXQgYXMgc3RyaW5nW10pLnNsaWNlKCk7XG4gICAgICB9IGVsc2UgaWYgKHJhd0NvbmNhdCA9PT0gbnVsbCB8fCByYXdDb25jYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25jYXQgPSBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbmNhdCA9IFtyYXdDb25jYXQgYXMgc3RyaW5nXTtcbiAgICAgIH1cblxuICAgICAgZGVsZXRlIGV4dGVuc2lvbnMuY29uY2F0ZW5hdGVkUHJvcGVydGllcztcbiAgICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcyA9IGNvbmNhdDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGV4dGVuc2lvbnMgPT09ICdvYmplY3QnICYmICdtZXJnZWRQcm9wZXJ0aWVzJyBpbiBleHRlbnNpb25zKSB7XG4gICAgICBsZXQgbWVyZ2VkOiBzdHJpbmdbXTtcbiAgICAgIGxldCByYXdNZXJnZWQgPSBleHRlbnNpb25zLm1lcmdlZFByb3BlcnRpZXM7XG5cbiAgICAgIGlmIChpc0FycmF5KHJhd01lcmdlZCkpIHtcbiAgICAgICAgbWVyZ2VkID0gKHJhd01lcmdlZCBhcyBzdHJpbmdbXSkuc2xpY2UoKTtcbiAgICAgIH0gZWxzZSBpZiAocmF3TWVyZ2VkID09PSBudWxsIHx8IHJhd01lcmdlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1lcmdlZCA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVyZ2VkID0gW3Jhd01lcmdlZCBhcyBzdHJpbmddO1xuICAgICAgfVxuXG4gICAgICBkZWxldGUgZXh0ZW5zaW9ucy5tZXJnZWRQcm9wZXJ0aWVzO1xuICAgICAgdGhpcy5tZXJnZWRQcm9wZXJ0aWVzID0gbWVyZ2VkO1xuICAgIH1cblxuICAgIGxldCBub3JtYWxpemVkOiBEaWN0PEJsdWVwcmludD4gPSBPYmplY3Qua2V5cyhleHRlbnNpb25zKS5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBleHRlbnNpb25zW2tleV07XG5cbiAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICBvYmpba2V5XSA9IG5ldyBNZXRob2RCbHVlcHJpbnQoeyB2YWx1ZSB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICBpZiAodmFsdWUgJiYgQkxVRVBSSU5UIGluIHZhbHVlKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgb2JqW2tleV0gPSBuZXcgRGF0YUJsdWVwcmludCh7IHZhbHVlIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sIGRpY3Q8Qmx1ZXByaW50PigpKTtcblxuICAgIHRoaXMuZXh0ZW5zaW9ucyA9IGRpY3Q8YW55PigpO1xuICAgIGFzc2lnbih0aGlzLmV4dGVuc2lvbnMsIHR1cmJvY2hhcmdlKG5vcm1hbGl6ZWQpKTtcbiAgfVxuXG4gIGFwcGx5KHRhcmdldDogYW55KSB7XG4gICAgbGV0IG1ldGE6IENsYXNzTWV0YSA9ICh0YXJnZXRbQ0xBU1NfTUVUQV0gPSB0YXJnZXRbQ0xBU1NfTUVUQV0gfHwgbmV3IENsYXNzTWV0YSgpKTtcbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKG0gPT4gbS5hcHBseSh0YXJnZXQpKTtcbiAgICB0aGlzLm1lcmdlUHJvcGVydGllcyh0YXJnZXQsIHRhcmdldCwgbWV0YSk7XG4gICAgbWV0YS5hZGRNaXhpbih0aGlzKTtcbiAgICBtZXRhLnNlYWwoKTtcbiAgICBtZXRhLnJlc2VhbCh0YXJnZXQpO1xuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIGV4dGVuZFByb3RvdHlwZShPcmlnaW5hbDogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICAgIE9yaWdpbmFsLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT3JpZ2luYWwucHJvdG90eXBlKTtcbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKG0gPT4gbS5leHRlbmRQcm90b3R5cGUoT3JpZ2luYWwpKTtcbiAgICB0aGlzLmV4dGVuZFByb3RvdHlwZU9udG8oT3JpZ2luYWwsIE9yaWdpbmFsKTtcbiAgfVxuXG4gIGV4dGVuZFByb3RvdHlwZU9udG8oU3ViY2xhc3M6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4sIFBhcmVudDogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzLmZvckVhY2gobSA9PiBtLmV4dGVuZFByb3RvdHlwZU9udG8oU3ViY2xhc3MsIFBhcmVudCkpO1xuICAgIHRoaXMubWVyZ2VQcm9wZXJ0aWVzKFN1YmNsYXNzLnByb3RvdHlwZSwgUGFyZW50LnByb3RvdHlwZSwgU3ViY2xhc3NbQ0xBU1NfTUVUQV0pO1xuICAgIFN1YmNsYXNzW0NMQVNTX01FVEFdLmFkZE1peGluKHRoaXMpO1xuICB9XG5cbiAgZXh0ZW5kU3RhdGljKFRhcmdldDogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzLmZvckVhY2gobSA9PiBtLmV4dGVuZFN0YXRpYyhUYXJnZXQpKTtcbiAgICB0aGlzLm1lcmdlUHJvcGVydGllcyhUYXJnZXQsIE9iamVjdC5nZXRQcm90b3R5cGVPZihUYXJnZXQpLCBUYXJnZXRbQ0xBU1NfTUVUQV1bQ0xBU1NfTUVUQV0pO1xuICAgIFRhcmdldFtDTEFTU19NRVRBXS5hZGRTdGF0aWNNaXhpbih0aGlzKTtcbiAgfVxuXG4gIG1lcmdlUHJvcGVydGllcyh0YXJnZXQ6IE9iamVjdCwgcGFyZW50OiBEaWN0PERpY3Q+LCBtZXRhOiBDbGFzc01ldGEpIHtcbiAgICBpZiAobWV0YS5oYXNBcHBsaWVkTWl4aW4odGhpcykpIHJldHVybjtcbiAgICBtZXRhLmFkZEFwcGxpZWRNaXhpbih0aGlzKTtcblxuICAgIHRoaXMubWVyZ2VkUHJvcGVydGllcy5mb3JFYWNoKGsgPT4gbWV0YS5hZGRNZXJnZWRQcm9wZXJ0eShrLCBwYXJlbnRba10pKTtcbiAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXMuZm9yRWFjaChrID0+IG1ldGEuYWRkQ29uY2F0ZW5hdGVkUHJvcGVydHkoaywgW10pKTtcblxuICAgIG5ldyBWYWx1ZURlc2NyaXB0b3IoeyB2YWx1ZTogbWV0YS5nZXRDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKCkgfSkuZGVmaW5lKFxuICAgICAgdGFyZ2V0LFxuICAgICAgJ2NvbmNhdGVuYXRlZFByb3BlcnRpZXMnXG4gICAgKTtcbiAgICBuZXcgVmFsdWVEZXNjcmlwdG9yKHsgdmFsdWU6IG1ldGEuZ2V0TWVyZ2VkUHJvcGVydGllcygpIH0pLmRlZmluZSh0YXJnZXQsICdtZXJnZWRQcm9wZXJ0aWVzJyk7XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLmV4dGVuc2lvbnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGxldCBleHRlbnNpb246IEJsdWVwcmludCA9IHRoaXMuZXh0ZW5zaW9ucyFba2V5XTtcbiAgICAgIGxldCBkZXNjID0gZXh0ZW5zaW9uLmRlc2NyaXB0b3IodGFyZ2V0LCBrZXkgYXMgc3RyaW5nLCBtZXRhKTtcbiAgICAgIGRlc2MuZGVmaW5lKHRhcmdldCwga2V5IGFzIHN0cmluZywgcGFyZW50KTtcbiAgICB9KTtcblxuICAgIG5ldyBWYWx1ZURlc2NyaXB0b3IoeyB2YWx1ZTogUk9PVCB9KS5kZWZpbmUodGFyZ2V0LCAnX3N1cGVyJyBhcyBzdHJpbmcpO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIEV4dGVuc2lvbiA9IE1peGluIHwgRXh0ZW5zaW9ucztcblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZDxUIGV4dGVuZHMgR2xpbW1lck9iamVjdD4oXG4gIFBhcmVudDogR2xpbW1lck9iamVjdEZhY3Rvcnk8VD4sXG4gIC4uLmV4dGVuc2lvbnM6IEV4dGVuc2lvbltdXG4pOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+IHtcbiAgbGV0IFN1cGVyID0gUGFyZW50IGFzIHR5cGVvZiBHbGltbWVyT2JqZWN0O1xuXG4gIGxldCBTdWJjbGFzcyA9IGNsYXNzIGV4dGVuZHMgU3VwZXIge307XG4gIFN1YmNsYXNzW0NMQVNTX01FVEFdID0gSW5zdGFuY2VNZXRhLmZyb21QYXJlbnQoUGFyZW50W0NMQVNTX01FVEFdKTtcblxuICBsZXQgbWl4aW5zID0gZXh0ZW5zaW9ucy5tYXAodG9NaXhpbik7XG4gIFBhcmVudFtDTEFTU19NRVRBXS5hZGRTdWJjbGFzcyhTdWJjbGFzcyBhcyBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KTtcbiAgbWl4aW5zLmZvckVhY2gobSA9PiBTdWJjbGFzc1tDTEFTU19NRVRBXS5hZGRNaXhpbihtKSk7XG5cbiAgQ2xhc3NNZXRhLmFwcGx5QWxsTWl4aW5zKFN1YmNsYXNzIGFzIEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4sIFBhcmVudCk7XG5cbiAgcmV0dXJuIFN1YmNsYXNzIGFzIGFueTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbGlua1N1YmNsYXNzZXMoUGFyZW50OiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KSB7XG4gIFBhcmVudFtDTEFTU19NRVRBXS5nZXRTdWJjbGFzc2VzKCkuZm9yRWFjaCgoU3ViY2xhc3M6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pID0+IHtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5yZXNldChQYXJlbnRbQ0xBU1NfTUVUQV0pO1xuICAgIFN1YmNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUGFyZW50LnByb3RvdHlwZSk7XG5cbiAgICBDbGFzc01ldGEuYXBwbHlBbGxNaXhpbnMoU3ViY2xhc3MsIFBhcmVudCk7XG5cbiAgICAvLyByZWN1cnNlIGludG8gc3ViLXN1YmNsYXNzZXNcbiAgICByZWxpbmtTdWJjbGFzc2VzKFN1YmNsYXNzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b01peGluKGV4dGVuc2lvbjogRXh0ZW5zaW9uKTogTWl4aW4ge1xuICBpZiAoZXh0ZW5zaW9uIGluc3RhbmNlb2YgTWl4aW4pIHJldHVybiBleHRlbnNpb247XG4gIGVsc2UgcmV0dXJuIG5ldyBNaXhpbihleHRlbnNpb24gYXMgT2JqZWN0LCBbXSk7XG59XG5cbmNsYXNzIFZhbHVlRGVzY3JpcHRvciBleHRlbmRzIERlc2NyaXB0b3Ige1xuICBwdWJsaWMgZW51bWVyYWJsZTogYm9vbGVhbjtcbiAgcHVibGljIGNvbmZpZ3VyYWJsZTogYm9vbGVhbjtcbiAgcHVibGljIHdyaXRhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgdmFsdWU6IGFueTtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgZW51bWVyYWJsZSA9IHRydWUsXG4gICAgY29uZmlndXJhYmxlID0gdHJ1ZSxcbiAgICB3cml0YWJsZSA9IHRydWUsXG4gICAgdmFsdWUsXG4gIH06IFByb3BlcnR5RGVzY3JpcHRvcikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5lbnVtZXJhYmxlID0gZW51bWVyYWJsZTtcbiAgICB0aGlzLmNvbmZpZ3VyYWJsZSA9IGNvbmZpZ3VyYWJsZTtcbiAgICB0aGlzLndyaXRhYmxlID0gd3JpdGFibGU7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZGVmaW5lKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgX2hvbWU/OiBhbnkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgIGVudW1lcmFibGU6IHRoaXMuZW51bWVyYWJsZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdGhpcy5jb25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogdGhpcy53cml0YWJsZSxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhQmx1ZXByaW50IGV4dGVuZHMgQmx1ZXByaW50IHtcbiAgcHVibGljIGVudW1lcmFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyBjb25maWd1cmFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyB2YWx1ZTogYW55O1xuICBwdWJsaWMgd3JpdGFibGU6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIGVudW1lcmFibGUgPSB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZSA9IHRydWUsXG4gICAgd3JpdGFibGUgPSB0cnVlLFxuICAgIHZhbHVlLFxuICB9OiBQcm9wZXJ0eURlc2NyaXB0b3IpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZW51bWVyYWJsZSA9IGVudW1lcmFibGU7XG4gICAgdGhpcy5jb25maWd1cmFibGUgPSBjb25maWd1cmFibGU7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMud3JpdGFibGUgPSB3cml0YWJsZTtcbiAgfVxuXG4gIGRlc2NyaXB0b3IoX3RhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgY2xhc3NNZXRhOiBDbGFzc01ldGEpOiBEZXNjcmlwdG9yIHtcbiAgICBsZXQgeyBlbnVtZXJhYmxlLCBjb25maWd1cmFibGUsIHdyaXRhYmxlLCB2YWx1ZSB9ID0gdGhpcztcblxuICAgIGlmIChjbGFzc01ldGEuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydHkoa2V5IGFzIHN0cmluZykpIHtcbiAgICAgIGNsYXNzTWV0YS5hZGRDb25jYXRlbmF0ZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nLCB2YWx1ZSk7XG4gICAgICB2YWx1ZSA9IGNsYXNzTWV0YS5nZXRDb25jYXRlbmF0ZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nKTtcbiAgICB9IGVsc2UgaWYgKGNsYXNzTWV0YS5oYXNNZXJnZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nKSkge1xuICAgICAgY2xhc3NNZXRhLmFkZE1lcmdlZFByb3BlcnR5KGtleSBhcyBzdHJpbmcsIHZhbHVlKTtcbiAgICAgIHZhbHVlID0gY2xhc3NNZXRhLmdldE1lcmdlZFByb3BlcnR5KGtleSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVmFsdWVEZXNjcmlwdG9yKHsgZW51bWVyYWJsZSwgY29uZmlndXJhYmxlLCB3cml0YWJsZSwgdmFsdWUgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFjY2Vzc29yQmx1ZXByaW50IGV4dGVuZHMgQmx1ZXByaW50IHtcbiAgcHVibGljIGVudW1lcmFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyBjb25maWd1cmFibGU6IGJvb2xlYW47XG4gIGdldDogKCkgPT4gYW55O1xuICBzZXQ6ICh2YWx1ZTogYW55KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBlbnVtZXJhYmxlID0gdHJ1ZSxcbiAgICBjb25maWd1cmFibGUgPSB0cnVlLFxuICAgIGdldCxcbiAgICBzZXQsXG4gIH06IFByb3BlcnR5RGVzY3JpcHRvciAmIHsgZ2V0OiBhbnk7IHNldDogYW55IH0pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZW51bWVyYWJsZSA9IGVudW1lcmFibGU7XG4gICAgdGhpcy5jb25maWd1cmFibGUgPSBjb25maWd1cmFibGU7XG4gICAgdGhpcy5nZXQgPSBnZXQ7XG4gICAgdGhpcy5zZXQgPSBzZXQ7XG4gIH1cblxuICBkZXNjcmlwdG9yKF90YXJnZXQ6IE9iamVjdCwgX2tleTogc3RyaW5nLCBfY2xhc3NNZXRhOiBDbGFzc01ldGEpOiBEZXNjcmlwdG9yIHtcbiAgICByZXR1cm4gbmV3IFZhbHVlRGVzY3JpcHRvcih7XG4gICAgICBlbnVtZXJhYmxlOiB0aGlzLmVudW1lcmFibGUsXG4gICAgICBjb25maWd1cmFibGU6IHRoaXMuY29uZmlndXJhYmxlLFxuICAgICAgZ2V0OiB0aGlzLmdldCxcbiAgICAgIHNldDogdGhpcy5zZXQsXG4gICAgfSk7XG4gIH1cbn1cblxuY2xhc3MgTWV0aG9kRGVzY3JpcHRvciBleHRlbmRzIFZhbHVlRGVzY3JpcHRvciB7XG4gIGRlZmluZSh0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIGhvbWU6IERpY3QpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gd3JhcE1ldGhvZChob21lLCBrZXksIHRoaXMudmFsdWUpO1xuICAgIHN1cGVyLmRlZmluZSh0YXJnZXQsIGtleSwgaG9tZSk7XG4gIH1cbn1cblxuY2xhc3MgTWV0aG9kQmx1ZXByaW50IGV4dGVuZHMgRGF0YUJsdWVwcmludCB7XG4gIGRlc2NyaXB0b3IodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nLCBjbGFzc01ldGE6IENsYXNzTWV0YSk6IE1ldGhvZERlc2NyaXB0b3Ige1xuICAgIGxldCBkZXNjID0gc3VwZXIuZGVzY3JpcHRvcih0YXJnZXQsIGtleSwgY2xhc3NNZXRhKTtcbiAgICByZXR1cm4gbmV3IE1ldGhvZERlc2NyaXB0b3IoZGVzYyBhcyBQcm9wZXJ0eURlc2NyaXB0b3IpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwTWV0aG9kKGhvbWU6IERpY3QsIG1ldGhvZE5hbWU6IHN0cmluZywgb3JpZ2luYWw6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55KSB7XG4gIGlmICghKChtZXRob2ROYW1lIGFzIHN0cmluZykgaW4gaG9tZSkpIHJldHVybiBtYXliZVdyYXAob3JpZ2luYWwpO1xuXG4gIGxldCBzdXBlck1ldGhvZCA9IGhvbWVbbWV0aG9kTmFtZV07XG5cbiAgbGV0IGZ1bmMgPSBmdW5jdGlvbih0aGlzOiBHbGltbWVyT2JqZWN0LCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGlmICghdGhpcykgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXG4gICAgbGV0IGxhc3RTdXBlciA9IHRoaXMuX3N1cGVyO1xuICAgIHRoaXMuX3N1cGVyID0gc3VwZXJNZXRob2QgYXMgYW55O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fc3VwZXIgPSBsYXN0U3VwZXI7XG4gICAgfVxuICB9O1xuXG4gIChmdW5jIGFzIGFueSkuX193cmFwcGVkID0gdHJ1ZTtcblxuICByZXR1cm4gZnVuYztcbn1cblxuZnVuY3Rpb24gbWF5YmVXcmFwKG9yaWdpbmFsOiBGdW5jdGlvbikge1xuICBpZiAoJ19fd3JhcHBlZCcgaW4gb3JpZ2luYWwpIHJldHVybiBvcmlnaW5hbDtcblxuICByZXR1cm4gZnVuY3Rpb24odGhpczogR2xpbW1lck9iamVjdCwgLi4uYXJnczogYW55W10pIHtcbiAgICBpZiAoIXRoaXMpIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcblxuICAgIGxldCBsYXN0U3VwZXIgPSB0aGlzLl9zdXBlcjtcbiAgICB0aGlzLl9zdXBlciA9IFJPT1Q7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9zdXBlciA9IGxhc3RTdXBlcjtcbiAgICB9XG4gIH07XG59XG4iXSwic291cmNlUm9vdCI6IiJ9
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvbWl4aW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFPQTs7Ozs7Ozs7OztJQUdRLE8sR0FBUixLLENBQVEsTztBQUVELElBQU0sVUFBVSxHQUFrQixrQkFBbEMsWUFBa0MsQ0FBbEM7O0FBQ0EsSUFBTSxTQUFTLEdBQWtCLGtCQUFqQyxXQUFpQyxDQUFqQzs7O0FBRVAsSUFBTSxVQUFOLEdBQUEsU0FBQSxVQUFBLEdBQUE7QUFDRSxPQUFBLEVBQUEsSUFBQSxJQUFBO0FBREYsQ0FBQTs7O0tBQ0csVTs7QUFJSCxJQUFNLFNBQU4sR0FBQSxTQUFBLFNBQUEsR0FBQTtBQUNFLE9BQUEsRUFBQSxJQUFBLElBQUE7QUFERixDQUFBOzs7S0FDRyxTOztBQVdILElBQU0sS0FBTjtBQUFBO0FBQUEsWUFBQTtBQTRCRSxXQUFBLEtBQUEsQ0FBQSxVQUFBLEVBQUEsTUFBQSxFQUFtRDtBQUFBLFFBQUEsa0JBQUE7O0FBM0IzQyxTQUFBLFVBQUEsR0FBQSxJQUFBLENBMkIyQyxDQTNCTjs7QUFDckMsU0FBQSxzQkFBQSxHQUFBLEVBQUE7QUFDQSxTQUFBLGdCQUFBLEdBQUEsRUFBQTtBQUNBLFNBQUEsWUFBQSxHQUFBLEVBQUE7QUF5Qk4sU0FBQSxNQUFBLENBQUEsVUFBQTs7QUFDQSxLQUFBLGtCQUFBLEdBQUEsS0FBQSxZQUFBLEVBQUEsSUFBQSxDQUFBLEtBQUEsQ0FBQSxrQkFBQSxFQUFBLE1BQUE7QUFDRDs7QUEvQkgsRUFBQSxLQUFBLENBQUEsTUFBQSxHQU1FLFNBQUEsTUFBQSxHQUE2QztBQUFBLFNBQUEsSUFBQSxJQUFBLEdBQUEsU0FBQSxDQUFBLE1BQUEsRUFBN0MsSUFBNkMsR0FBQSxJQUFBLEtBQUEsQ0FBQSxJQUFBLENBQUEsRUFBQSxLQUFBLEdBQUEsQ0FBQSxFQUFBLEtBQUEsR0FBQSxJQUFBLEVBQUEsS0FBQSxF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YUMsRUFBQSxJQUFZLENBQVosU0FBQSxHQUFBLElBQUE7QUFFRCxTQUFBLElBQUE7QUFDRDs7QUFFRCxTQUFBLFNBQUEsQ0FBQSxRQUFBLEVBQXFDO0FBQ25DLE1BQUksZUFBSixRQUFBLEVBQTZCLE9BQUEsUUFBQTtBQUU3QixTQUFPLFlBQTRDO0FBQUEsU0FBQSxJQUFBLEtBQUEsR0FBQSxTQUFBLENBQUEsTUFBQSxFQUE1QyxJQUE0QyxHQUFBLElBQUEsS0FBQSxDQUFBLEtBQUEsQ0FBQSxFQUFBLEtBQUEsR0FBQSxDQUFBLEVBQUEsS0FBQSxHQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUEsRUFBQTtBQUE1QyxNQUFBLElBQTRDLENBQUEsS0FBQSxDQUE1QyxHQUE0QyxTQUFBLENBQUEsS0FBQSxDQUE1QztBQUE0Qzs7QUFDakQsUUFBSSxDQUFKLElBQUEsRUFBVyxPQUFPLFFBQVEsQ0FBUixLQUFBLENBQUEsSUFBQSxFQUFQLElBQU8sQ0FBUDtBQUVYLFFBQUksU0FBUyxHQUFHLEtBQWhCLE1BQUE7QUFDQSxTQUFBLE1BQUEsR0FBQSxXQUFBOztBQUVBLFFBQUk7QUFDRixhQUFPLFFBQVEsQ0FBUixLQUFBLENBQUEsSUFBQSxFQUFQLElBQU8sQ0FBUDtBQURGLEtBQUEsU0FFVTtBQUNSLFdBQUEsTUFBQSxHQUFBLFNBQUE7QUFDRDtBQVZILEdBQUE7QUFZRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENMQVNTX01FVEEgfSBmcm9tICdAZ2xpbW1lci9vYmplY3QtcmVmZXJlbmNlJztcbmltcG9ydCB7IGRpY3QsIGFzc2lnbiwgc3ltYm9sIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgR2xpbW1lck9iamVjdCwge1xuICBHbGltbWVyT2JqZWN0RmFjdG9yeSxcbiAgQ2xhc3NNZXRhLFxuICBJbnN0YW5jZU1ldGEsXG4gIHR1cmJvY2hhcmdlLFxufSBmcm9tICcuL29iamVjdCc7XG5cbmltcG9ydCB7IFJPT1QgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IERpY3QgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcblxuY29uc3QgeyBpc0FycmF5IH0gPSBBcnJheTtcblxuZXhwb3J0IGNvbnN0IERFU0NSSVBUT1I6IHVuaXF1ZSBzeW1ib2wgPSBzeW1ib2woJ0RFU0NSSVBUT1InKTtcbmV4cG9ydCBjb25zdCBCTFVFUFJJTlQ6IHVuaXF1ZSBzeW1ib2wgPSBzeW1ib2woJ0JMVUVQUklOVCcpO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGVzY3JpcHRvciB7XG4gIFtERVNDUklQVE9SXSA9IHRydWU7XG4gIGFic3RyYWN0IGRlZmluZShwcm90b3R5cGU6IE9iamVjdCwga2V5OiBzdHJpbmcsIGhvbWU6IE9iamVjdCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbHVlcHJpbnQge1xuICBbQkxVRVBSSU5UXSA9IHRydWU7XG4gIGFic3RyYWN0IGRlc2NyaXB0b3IodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nLCBjbGFzc01ldGE6IENsYXNzTWV0YSk6IERlc2NyaXB0b3I7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5zaW9ucyB7XG4gIGNvbmNhdGVuYXRlZFByb3BlcnRpZXM/OiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGw7XG4gIG1lcmdlZFByb3BlcnRpZXM/OiBzdHJpbmdbXSB8IHN0cmluZztcbiAgX3N1cGVyPzogRnVuY3Rpb247XG4gIFtpbmRleDogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgTWl4aW4ge1xuICBwcml2YXRlIGV4dGVuc2lvbnM6IERpY3Q8YW55PiA9IG51bGwgYXMgYW55OyAvLyBhc3NpZ25lZCBiZWZvcmUgdXNlZFxuICBwcml2YXRlIGNvbmNhdGVuYXRlZFByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgbWVyZ2VkUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBkZXBlbmRlbmNpZXM6IE1peGluW10gPSBbXTtcblxuICBzdGF0aWMgY3JlYXRlKC4uLmFyZ3M6IChNaXhpbiB8IEV4dGVuc2lvbnMpW10pIHtcbiAgICBsZXQgZXh0ZW5zaW9ucyA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcblxuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG5ldyB0aGlzKHt9LCBbXSk7XG4gICAgfSBlbHNlIGlmIChleHRlbnNpb25zIGluc3RhbmNlb2YgTWl4aW4pIHtcbiAgICAgIHJldHVybiBuZXcgdGhpcyh7fSwgYXJncyBhcyBNaXhpbltdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGRlcHMgPSBhcmdzLnNsaWNlKDAsIC0xKS5tYXAodG9NaXhpbik7XG4gICAgICByZXR1cm4gbmV3IHRoaXMoZXh0ZW5zaW9ucyBhcyBFeHRlbnNpb25zLCBkZXBzKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgbWl4aW5zKG9iajogYW55KTogTWl4aW5bXSB7XG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IG9iaiA9PT0gbnVsbCkgcmV0dXJuIFtdO1xuXG4gICAgbGV0IG1ldGEgPSBDbGFzc01ldGEuZm9yKG9iaik7XG4gICAgaWYgKCFtZXRhKSByZXR1cm4gW107XG5cbiAgICByZXR1cm4gbWV0YS5nZXRBcHBsaWVkTWl4aW5zKCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihleHRlbnNpb25zOiBFeHRlbnNpb25zLCBtaXhpbnM6IE1peGluW10pIHtcbiAgICB0aGlzLnJlb3BlbihleHRlbnNpb25zKTtcbiAgICB0aGlzLmRlcGVuZGVuY2llcy5wdXNoKC4uLm1peGlucyk7XG4gIH1cblxuICBkZXRlY3Qob2JqOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgTWl4aW4pIHtcbiAgICAgIHJldHVybiBvYmouZGVwZW5kZW5jaWVzLmluZGV4T2YodGhpcykgIT09IC0xO1xuICAgIH1cblxuICAgIGxldCBtZXRhID0gQ2xhc3NNZXRhLmZvcihvYmopO1xuICAgIHJldHVybiAhIW1ldGEgJiYgbWV0YS5oYXNBcHBsaWVkTWl4aW4odGhpcyk7XG4gIH1cblxuICByZW9wZW4oZXh0ZW5zaW9uczogRXh0ZW5zaW9ucykge1xuICAgIGlmICh0aGlzLmV4dGVuc2lvbnMpIHtcbiAgICAgIHRoaXMuZGVwZW5kZW5jaWVzLnB1c2godG9NaXhpbih0aGlzLmV4dGVuc2lvbnMpKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGV4dGVuc2lvbnMgPT09ICdvYmplY3QnICYmICdjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzJyBpbiBleHRlbnNpb25zKSB7XG4gICAgICBsZXQgY29uY2F0OiBzdHJpbmdbXTtcbiAgICAgIGxldCByYXdDb25jYXQgPSBleHRlbnNpb25zLmNvbmNhdGVuYXRlZFByb3BlcnRpZXM7XG5cbiAgICAgIGlmIChpc0FycmF5KHJhd0NvbmNhdCkpIHtcbiAgICAgICAgY29uY2F0ID0gKHJhd0NvbmNhdCBhcyBzdHJpbmdbXSkuc2xpY2UoKTtcbiAgICAgIH0gZWxzZSBpZiAocmF3Q29uY2F0ID09PSBudWxsIHx8IHJhd0NvbmNhdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbmNhdCA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uY2F0ID0gW3Jhd0NvbmNhdCBhcyBzdHJpbmddO1xuICAgICAgfVxuXG4gICAgICBkZWxldGUgZXh0ZW5zaW9ucy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzO1xuICAgICAgdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gY29uY2F0O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXh0ZW5zaW9ucyA9PT0gJ29iamVjdCcgJiYgJ21lcmdlZFByb3BlcnRpZXMnIGluIGV4dGVuc2lvbnMpIHtcbiAgICAgIGxldCBtZXJnZWQ6IHN0cmluZ1tdO1xuICAgICAgbGV0IHJhd01lcmdlZCA9IGV4dGVuc2lvbnMubWVyZ2VkUHJvcGVydGllcztcblxuICAgICAgaWYgKGlzQXJyYXkocmF3TWVyZ2VkKSkge1xuICAgICAgICBtZXJnZWQgPSAocmF3TWVyZ2VkIGFzIHN0cmluZ1tdKS5zbGljZSgpO1xuICAgICAgfSBlbHNlIGlmIChyYXdNZXJnZWQgPT09IG51bGwgfHwgcmF3TWVyZ2VkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWVyZ2VkID0gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXJnZWQgPSBbcmF3TWVyZ2VkIGFzIHN0cmluZ107XG4gICAgICB9XG5cbiAgICAgIGRlbGV0ZSBleHRlbnNpb25zLm1lcmdlZFByb3BlcnRpZXM7XG4gICAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXMgPSBtZXJnZWQ7XG4gICAgfVxuXG4gICAgbGV0IG5vcm1hbGl6ZWQ6IERpY3Q8Qmx1ZXByaW50PiA9IE9iamVjdC5rZXlzKGV4dGVuc2lvbnMpLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGV4dGVuc2lvbnNba2V5XTtcblxuICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgIG9ialtrZXldID0gbmV3IE1ldGhvZEJsdWVwcmludCh7IHZhbHVlIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgIGlmICh2YWx1ZSAmJiBCTFVFUFJJTlQgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBvYmpba2V5XSA9IG5ldyBEYXRhQmx1ZXByaW50KHsgdmFsdWUgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSwgZGljdDxCbHVlcHJpbnQ+KCkpO1xuXG4gICAgdGhpcy5leHRlbnNpb25zID0gZGljdDxhbnk+KCk7XG4gICAgYXNzaWduKHRoaXMuZXh0ZW5zaW9ucywgdHVyYm9jaGFyZ2Uobm9ybWFsaXplZCkpO1xuICB9XG5cbiAgYXBwbHkodGFyZ2V0OiBhbnkpIHtcbiAgICBsZXQgbWV0YTogQ2xhc3NNZXRhID0gKHRhcmdldFtDTEFTU19NRVRBXSA9IHRhcmdldFtDTEFTU19NRVRBXSB8fCBuZXcgQ2xhc3NNZXRhKCkpO1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzLmZvckVhY2gobSA9PiBtLmFwcGx5KHRhcmdldCkpO1xuICAgIHRoaXMubWVyZ2VQcm9wZXJ0aWVzKHRhcmdldCwgdGFyZ2V0LCBtZXRhKTtcbiAgICBtZXRhLmFkZE1peGluKHRoaXMpO1xuICAgIG1ldGEuc2VhbCgpO1xuICAgIG1ldGEucmVzZWFsKHRhcmdldCk7XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgZXh0ZW5kUHJvdG90eXBlKE9yaWdpbmFsOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KSB7XG4gICAgT3JpZ2luYWwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPcmlnaW5hbC5wcm90b3R5cGUpO1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzLmZvckVhY2gobSA9PiBtLmV4dGVuZFByb3RvdHlwZShPcmlnaW5hbCkpO1xuICAgIHRoaXMuZXh0ZW5kUHJvdG90eXBlT250byhPcmlnaW5hbCwgT3JpZ2luYWwpO1xuICB9XG5cbiAgZXh0ZW5kUHJvdG90eXBlT250byhTdWJjbGFzczogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiwgUGFyZW50OiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KSB7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuZm9yRWFjaChtID0+IG0uZXh0ZW5kUHJvdG90eXBlT250byhTdWJjbGFzcywgUGFyZW50KSk7XG4gICAgdGhpcy5tZXJnZVByb3BlcnRpZXMoU3ViY2xhc3MucHJvdG90eXBlLCBQYXJlbnQucHJvdG90eXBlLCBTdWJjbGFzc1tDTEFTU19NRVRBXSk7XG4gICAgU3ViY2xhc3NbQ0xBU1NfTUVUQV0uYWRkTWl4aW4odGhpcyk7XG4gIH1cblxuICBleHRlbmRTdGF0aWMoVGFyZ2V0OiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KSB7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuZm9yRWFjaChtID0+IG0uZXh0ZW5kU3RhdGljKFRhcmdldCkpO1xuICAgIHRoaXMubWVyZ2VQcm9wZXJ0aWVzKFRhcmdldCwgT2JqZWN0LmdldFByb3RvdHlwZU9mKFRhcmdldCksIFRhcmdldFtDTEFTU19NRVRBXVtDTEFTU19NRVRBXSk7XG4gICAgVGFyZ2V0W0NMQVNTX01FVEFdLmFkZFN0YXRpY01peGluKHRoaXMpO1xuICB9XG5cbiAgbWVyZ2VQcm9wZXJ0aWVzKHRhcmdldDogT2JqZWN0LCBwYXJlbnQ6IERpY3Q8RGljdD4sIG1ldGE6IENsYXNzTWV0YSkge1xuICAgIGlmIChtZXRhLmhhc0FwcGxpZWRNaXhpbih0aGlzKSkgcmV0dXJuO1xuICAgIG1ldGEuYWRkQXBwbGllZE1peGluKHRoaXMpO1xuXG4gICAgdGhpcy5tZXJnZWRQcm9wZXJ0aWVzLmZvckVhY2goayA9PiBtZXRhLmFkZE1lcmdlZFByb3BlcnR5KGssIHBhcmVudFtrXSkpO1xuICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcy5mb3JFYWNoKGsgPT4gbWV0YS5hZGRDb25jYXRlbmF0ZWRQcm9wZXJ0eShrLCBbXSkpO1xuXG4gICAgbmV3IFZhbHVlRGVzY3JpcHRvcih7IHZhbHVlOiBtZXRhLmdldENvbmNhdGVuYXRlZFByb3BlcnRpZXMoKSB9KS5kZWZpbmUoXG4gICAgICB0YXJnZXQsXG4gICAgICAnY29uY2F0ZW5hdGVkUHJvcGVydGllcydcbiAgICApO1xuICAgIG5ldyBWYWx1ZURlc2NyaXB0b3IoeyB2YWx1ZTogbWV0YS5nZXRNZXJnZWRQcm9wZXJ0aWVzKCkgfSkuZGVmaW5lKHRhcmdldCwgJ21lcmdlZFByb3BlcnRpZXMnKTtcblxuICAgIE9iamVjdC5rZXlzKHRoaXMuZXh0ZW5zaW9ucykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgbGV0IGV4dGVuc2lvbjogQmx1ZXByaW50ID0gdGhpcy5leHRlbnNpb25zIVtrZXldO1xuICAgICAgbGV0IGRlc2MgPSBleHRlbnNpb24uZGVzY3JpcHRvcih0YXJnZXQsIGtleSBhcyBzdHJpbmcsIG1ldGEpO1xuICAgICAgZGVzYy5kZWZpbmUodGFyZ2V0LCBrZXkgYXMgc3RyaW5nLCBwYXJlbnQpO1xuICAgIH0pO1xuXG4gICAgbmV3IFZhbHVlRGVzY3JpcHRvcih7IHZhbHVlOiBST09UIH0pLmRlZmluZSh0YXJnZXQsICdfc3VwZXInIGFzIHN0cmluZyk7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgRXh0ZW5zaW9uID0gTWl4aW4gfCBFeHRlbnNpb25zO1xuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kPFQgZXh0ZW5kcyBHbGltbWVyT2JqZWN0PihcbiAgUGFyZW50OiBHbGltbWVyT2JqZWN0RmFjdG9yeTxUPixcbiAgLi4uZXh0ZW5zaW9uczogRXh0ZW5zaW9uW11cbik6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4ge1xuICBsZXQgU3VwZXIgPSBQYXJlbnQgYXMgdHlwZW9mIEdsaW1tZXJPYmplY3Q7XG5cbiAgbGV0IFN1YmNsYXNzID0gY2xhc3MgZXh0ZW5kcyBTdXBlciB7fTtcbiAgU3ViY2xhc3NbQ0xBU1NfTUVUQV0gPSBJbnN0YW5jZU1ldGEuZnJvbVBhcmVudChQYXJlbnRbQ0xBU1NfTUVUQV0pO1xuXG4gIGxldCBtaXhpbnMgPSBleHRlbnNpb25zLm1hcCh0b01peGluKTtcbiAgUGFyZW50W0NMQVNTX01FVEFdLmFkZFN1YmNsYXNzKFN1YmNsYXNzIGFzIEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pO1xuICBtaXhpbnMuZm9yRWFjaChtID0+IFN1YmNsYXNzW0NMQVNTX01FVEFdLmFkZE1peGluKG0pKTtcblxuICBDbGFzc01ldGEuYXBwbHlBbGxNaXhpbnMoU3ViY2xhc3MgYXMgR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiwgUGFyZW50KTtcblxuICByZXR1cm4gU3ViY2xhc3MgYXMgYW55O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVsaW5rU3ViY2xhc3NlcyhQYXJlbnQ6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgUGFyZW50W0NMQVNTX01FVEFdLmdldFN1YmNsYXNzZXMoKS5mb3JFYWNoKChTdWJjbGFzczogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PikgPT4ge1xuICAgIFN1YmNsYXNzW0NMQVNTX01FVEFdLnJlc2V0KFBhcmVudFtDTEFTU19NRVRBXSk7XG4gICAgU3ViY2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQYXJlbnQucHJvdG90eXBlKTtcblxuICAgIENsYXNzTWV0YS5hcHBseUFsbE1peGlucyhTdWJjbGFzcywgUGFyZW50KTtcblxuICAgIC8vIHJlY3Vyc2UgaW50byBzdWItc3ViY2xhc3Nlc1xuICAgIHJlbGlua1N1YmNsYXNzZXMoU3ViY2xhc3MpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvTWl4aW4oZXh0ZW5zaW9uOiBFeHRlbnNpb24pOiBNaXhpbiB7XG4gIGlmIChleHRlbnNpb24gaW5zdGFuY2VvZiBNaXhpbikgcmV0dXJuIGV4dGVuc2lvbjtcbiAgZWxzZSByZXR1cm4gbmV3IE1peGluKGV4dGVuc2lvbiBhcyBPYmplY3QsIFtdKTtcbn1cblxuY2xhc3MgVmFsdWVEZXNjcmlwdG9yIGV4dGVuZHMgRGVzY3JpcHRvciB7XG4gIHB1YmxpYyBlbnVtZXJhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgY29uZmlndXJhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgd3JpdGFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyB2YWx1ZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBlbnVtZXJhYmxlID0gdHJ1ZSxcbiAgICBjb25maWd1cmFibGUgPSB0cnVlLFxuICAgIHdyaXRhYmxlID0gdHJ1ZSxcbiAgICB2YWx1ZSxcbiAgfTogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmVudW1lcmFibGUgPSBlbnVtZXJhYmxlO1xuICAgIHRoaXMuY29uZmlndXJhYmxlID0gY29uZmlndXJhYmxlO1xuICAgIHRoaXMud3JpdGFibGUgPSB3cml0YWJsZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBkZWZpbmUodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nLCBfaG9tZT86IGFueSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xuICAgICAgZW51bWVyYWJsZTogdGhpcy5lbnVtZXJhYmxlLFxuICAgICAgY29uZmlndXJhYmxlOiB0aGlzLmNvbmZpZ3VyYWJsZSxcbiAgICAgIHdyaXRhYmxlOiB0aGlzLndyaXRhYmxlLFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFCbHVlcHJpbnQgZXh0ZW5kcyBCbHVlcHJpbnQge1xuICBwdWJsaWMgZW51bWVyYWJsZTogYm9vbGVhbjtcbiAgcHVibGljIGNvbmZpZ3VyYWJsZTogYm9vbGVhbjtcbiAgcHVibGljIHZhbHVlOiBhbnk7XG4gIHB1YmxpYyB3cml0YWJsZTogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgZW51bWVyYWJsZSA9IHRydWUsXG4gICAgY29uZmlndXJhYmxlID0gdHJ1ZSxcbiAgICB3cml0YWJsZSA9IHRydWUsXG4gICAgdmFsdWUsXG4gIH06IFByb3BlcnR5RGVzY3JpcHRvcikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5lbnVtZXJhYmxlID0gZW51bWVyYWJsZTtcbiAgICB0aGlzLmNvbmZpZ3VyYWJsZSA9IGNvbmZpZ3VyYWJsZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy53cml0YWJsZSA9IHdyaXRhYmxlO1xuICB9XG5cbiAgZGVzY3JpcHRvcihfdGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nLCBjbGFzc01ldGE6IENsYXNzTWV0YSk6IERlc2NyaXB0b3Ige1xuICAgIGxldCB7IGVudW1lcmFibGUsIGNvbmZpZ3VyYWJsZSwgd3JpdGFibGUsIHZhbHVlIH0gPSB0aGlzO1xuXG4gICAgaWYgKGNsYXNzTWV0YS5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nKSkge1xuICAgICAgY2xhc3NNZXRhLmFkZENvbmNhdGVuYXRlZFByb3BlcnR5KGtleSBhcyBzdHJpbmcsIHZhbHVlKTtcbiAgICAgIHZhbHVlID0gY2xhc3NNZXRhLmdldENvbmNhdGVuYXRlZFByb3BlcnR5KGtleSBhcyBzdHJpbmcpO1xuICAgIH0gZWxzZSBpZiAoY2xhc3NNZXRhLmhhc01lcmdlZFByb3BlcnR5KGtleSBhcyBzdHJpbmcpKSB7XG4gICAgICBjbGFzc01ldGEuYWRkTWVyZ2VkUHJvcGVydHkoa2V5IGFzIHN0cmluZywgdmFsdWUpO1xuICAgICAgdmFsdWUgPSBjbGFzc01ldGEuZ2V0TWVyZ2VkUHJvcGVydHkoa2V5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBWYWx1ZURlc2NyaXB0b3IoeyBlbnVtZXJhYmxlLCBjb25maWd1cmFibGUsIHdyaXRhYmxlLCB2YWx1ZSB9KTtcbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWNjZXNzb3JCbHVlcHJpbnQgZXh0ZW5kcyBCbHVlcHJpbnQge1xuICBwdWJsaWMgZW51bWVyYWJsZTogYm9vbGVhbjtcbiAgcHVibGljIGNvbmZpZ3VyYWJsZTogYm9vbGVhbjtcbiAgZ2V0OiAoKSA9PiBhbnk7XG4gIHNldDogKHZhbHVlOiBhbnkpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIGVudW1lcmFibGUgPSB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZSA9IHRydWUsXG4gICAgZ2V0LFxuICAgIHNldCxcbiAgfTogUHJvcGVydHlEZXNjcmlwdG9yICYgeyBnZXQ6IGFueTsgc2V0OiBhbnkgfSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5lbnVtZXJhYmxlID0gZW51bWVyYWJsZTtcbiAgICB0aGlzLmNvbmZpZ3VyYWJsZSA9IGNvbmZpZ3VyYWJsZTtcbiAgICB0aGlzLmdldCA9IGdldDtcbiAgICB0aGlzLnNldCA9IHNldDtcbiAgfVxuXG4gIGRlc2NyaXB0b3IoX3RhcmdldDogT2JqZWN0LCBfa2V5OiBzdHJpbmcsIF9jbGFzc01ldGE6IENsYXNzTWV0YSk6IERlc2NyaXB0b3Ige1xuICAgIHJldHVybiBuZXcgVmFsdWVEZXNjcmlwdG9yKHtcbiAgICAgIGVudW1lcmFibGU6IHRoaXMuZW51bWVyYWJsZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdGhpcy5jb25maWd1cmFibGUsXG4gICAgICBnZXQ6IHRoaXMuZ2V0LFxuICAgICAgc2V0OiB0aGlzLnNldCxcbiAgICB9KTtcbiAgfVxufVxuXG5jbGFzcyBNZXRob2REZXNjcmlwdG9yIGV4dGVuZHMgVmFsdWVEZXNjcmlwdG9yIHtcbiAgZGVmaW5lKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgaG9tZTogRGljdCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB3cmFwTWV0aG9kKGhvbWUsIGtleSwgdGhpcy52YWx1ZSk7XG4gICAgc3VwZXIuZGVmaW5lKHRhcmdldCwga2V5LCBob21lKTtcbiAgfVxufVxuXG5jbGFzcyBNZXRob2RCbHVlcHJpbnQgZXh0ZW5kcyBEYXRhQmx1ZXByaW50IHtcbiAgZGVzY3JpcHRvcih0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIGNsYXNzTWV0YTogQ2xhc3NNZXRhKTogTWV0aG9kRGVzY3JpcHRvciB7XG4gICAgbGV0IGRlc2MgPSBzdXBlci5kZXNjcmlwdG9yKHRhcmdldCwga2V5LCBjbGFzc01ldGEpO1xuICAgIHJldHVybiBuZXcgTWV0aG9kRGVzY3JpcHRvcihkZXNjIGFzIFByb3BlcnR5RGVzY3JpcHRvcik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBNZXRob2QoaG9tZTogRGljdCwgbWV0aG9kTmFtZTogc3RyaW5nLCBvcmlnaW5hbDogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpIHtcbiAgaWYgKCEoKG1ldGhvZE5hbWUgYXMgc3RyaW5nKSBpbiBob21lKSkgcmV0dXJuIG1heWJlV3JhcChvcmlnaW5hbCk7XG5cbiAgbGV0IHN1cGVyTWV0aG9kID0gaG9tZVttZXRob2ROYW1lXTtcblxuICBsZXQgZnVuYyA9IGZ1bmN0aW9uKHRoaXM6IEdsaW1tZXJPYmplY3QsIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgaWYgKCF0aGlzKSByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG5cbiAgICBsZXQgbGFzdFN1cGVyID0gdGhpcy5fc3VwZXI7XG4gICAgdGhpcy5fc3VwZXIgPSBzdXBlck1ldGhvZCBhcyBhbnk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9zdXBlciA9IGxhc3RTdXBlcjtcbiAgICB9XG4gIH07XG5cbiAgKGZ1bmMgYXMgYW55KS5fX3dyYXBwZWQgPSB0cnVlO1xuXG4gIHJldHVybiBmdW5jO1xufVxuXG5mdW5jdGlvbiBtYXliZVdyYXAob3JpZ2luYWw6IEZ1bmN0aW9uKSB7XG4gIGlmICgnX193cmFwcGVkJyBpbiBvcmlnaW5hbCkgcmV0dXJuIG9yaWdpbmFsO1xuXG4gIHJldHVybiBmdW5jdGlvbih0aGlzOiBHbGltbWVyT2JqZWN0LCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGlmICghdGhpcykgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXG4gICAgbGV0IGxhc3RTdXBlciA9IHRoaXMuX3N1cGVyO1xuICAgIHRoaXMuX3N1cGVyID0gUk9PVDtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX3N1cGVyID0gbGFzdFN1cGVyO1xuICAgIH1cbiAgfTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
value: true
});
exports.InstanceMeta = exports.ClassMeta = exports.EMPTY_CACHE = undefined;
exports.turbocharge = turbocharge;
exports.default = exports.InstanceMeta = exports.ClassMeta = exports.EMPTY_CACHE = void 0;

@@ -19,426 +19,453 @@ var _objectReference = require("@glimmer/object-reference");

function _defaults(obj, defaults) {
var keys = Object.getOwnPropertyNames(defaults);for (var i = 0; i < keys.length; i++) {
var key = keys[i];var value = Object.getOwnPropertyDescriptor(defaults, key);if (value && value.configurable && obj[key] === undefined) {
Object.defineProperty(obj, key, value);
}
}return obj;
function _inheritsLoose(subClass, superClass) {
subClass.prototype = Object.create(superClass.prototype);
subClass.prototype.constructor = subClass;
subClass.__proto__ = superClass;
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
var _a, _b;
function _possibleConstructorReturn(self, call) {
if (!self) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}return call && (typeof call === "object" || typeof call === "function") ? call : self;
}
var isArray = Array.isArray;
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
}subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass);
}
var EMPTY_CACHE = function EMPTY_CACHE() {};
var _a, _b;
exports.EMPTY_CACHE = EMPTY_CACHE;
var isArray = Array.isArray;
var EMPTY_CACHE = exports.EMPTY_CACHE = function EMPTY_CACHE() {};
function turbocharge(obj) {
// function Dummy() {}
// Dummy.prototype = obj;
return obj;
// function Dummy() {}
// Dummy.prototype = obj;
return obj;
}
var SealedMeta = function (_Meta) {
_inherits(SealedMeta, _Meta);
var SealedMeta =
/*#__PURE__*/
function (_Meta) {
_inheritsLoose(SealedMeta, _Meta);
function SealedMeta() {
_classCallCheck(this, SealedMeta);
function SealedMeta() {
return _Meta.apply(this, arguments) || this;
}
return _possibleConstructorReturn(this, _Meta.apply(this, arguments));
}
var _proto = SealedMeta.prototype;
SealedMeta.prototype.addReferenceTypeFor = function addReferenceTypeFor() {
throw new Error('Cannot modify reference types on a sealed meta');
};
_proto.addReferenceTypeFor = function addReferenceTypeFor() {
throw new Error('Cannot modify reference types on a sealed meta');
};
return SealedMeta;
return SealedMeta;
}(_objectReference.Meta);
var ClassMeta = exports.ClassMeta = function () {
function ClassMeta() {
_classCallCheck(this, ClassMeta);
var ClassMeta =
/*#__PURE__*/
function () {
function ClassMeta() {
this.referenceTypes = (0, _util.dict)();
this.propertyMetadata = (0, _util.dict)();
this.concatenatedProperties = (0, _util.dict)();
this.hasConcatenatedProperties = false;
this.mergedProperties = (0, _util.dict)();
this.hasMergedProperties = false;
this.mixins = [];
this.appliedMixins = [];
this.staticMixins = [];
this.subclasses = [];
this.slots = [];
this.InstanceMetaConstructor = null;
}
this.referenceTypes = (0, _util.dict)();
this.propertyMetadata = (0, _util.dict)();
this.concatenatedProperties = (0, _util.dict)();
this.hasConcatenatedProperties = false;
this.mergedProperties = (0, _util.dict)();
this.hasMergedProperties = false;
this.mixins = [];
this.appliedMixins = [];
this.staticMixins = [];
this.subclasses = [];
this.slots = [];
this.InstanceMetaConstructor = null;
}
ClassMeta.fromParent = function fromParent(parent) {
var meta = new this();
meta.reset(parent);
return meta;
};
ClassMeta.fromParent = function fromParent(parent) {
var meta = new this();
meta.reset(parent);
return meta;
};
ClassMeta["for"] = function _for(object) {
if (_objectReference.CLASS_META in object) return object[_objectReference.CLASS_META];else if (object.constructor) return object.constructor[_objectReference.CLASS_META] || null;else return null;
};
ClassMeta.for = function _for(object) {
if (_objectReference.CLASS_META in object) return object[_objectReference.CLASS_META];else if (object.constructor) return object.constructor[_objectReference.CLASS_META] || null;else return null;
};
var _proto2 = ClassMeta.prototype;
ClassMeta.prototype.init = function init(object, attrs) {
if (typeof attrs !== 'object' || attrs === null) return;
if (this.hasConcatenatedProperties) {
var concatProps = this.concatenatedProperties;
for (var prop in concatProps) {
if (prop in attrs) {
var concat = concatProps[prop].slice();
object[prop] = concat.concat(attrs[prop]);
}
}
_proto2.init = function init(object, attrs) {
if (typeof attrs !== 'object' || attrs === null) return;
if (this.hasConcatenatedProperties) {
var concatProps = this.concatenatedProperties;
for (var prop in concatProps) {
if (prop in attrs) {
var concat = concatProps[prop].slice();
object[prop] = concat.concat(attrs[prop]);
}
if (this.hasMergedProperties) {
var mergedProps = this.mergedProperties;
for (var _prop in mergedProps) {
if (_prop in attrs) {
var merged = (0, _util.assign)({}, mergedProps[_prop]);
object[_prop] = (0, _util.assign)(merged, attrs[_prop]);
}
}
}
}
if (this.hasMergedProperties) {
var mergedProps = this.mergedProperties;
for (var _prop in mergedProps) {
if (_prop in attrs) {
var merged = (0, _util.assign)({}, mergedProps[_prop]);
object[_prop] = (0, _util.assign)(merged, attrs[_prop]);
}
};
}
}
};
ClassMeta.prototype.addStaticMixin = function addStaticMixin(mixin) {
this.staticMixins.push(mixin);
};
_proto2.addStaticMixin = function addStaticMixin(mixin) {
this.staticMixins.push(mixin);
};
ClassMeta.prototype.addMixin = function addMixin(mixin) {
this.mixins.push(mixin);
};
_proto2.addMixin = function addMixin(mixin) {
this.mixins.push(mixin);
};
ClassMeta.prototype.getStaticMixins = function getStaticMixins() {
return this.staticMixins;
};
_proto2.getStaticMixins = function getStaticMixins() {
return this.staticMixins;
};
ClassMeta.prototype.getMixins = function getMixins() {
return this.mixins;
};
_proto2.getMixins = function getMixins() {
return this.mixins;
};
ClassMeta.prototype.addAppliedMixin = function addAppliedMixin(mixin) {
this.appliedMixins.push(mixin);
};
_proto2.addAppliedMixin = function addAppliedMixin(mixin) {
this.appliedMixins.push(mixin);
};
ClassMeta.prototype.hasAppliedMixin = function hasAppliedMixin(mixin) {
return this.appliedMixins.indexOf(mixin) !== -1;
};
_proto2.hasAppliedMixin = function hasAppliedMixin(mixin) {
return this.appliedMixins.indexOf(mixin) !== -1;
};
ClassMeta.prototype.getAppliedMixins = function getAppliedMixins() {
return this.appliedMixins;
};
_proto2.getAppliedMixins = function getAppliedMixins() {
return this.appliedMixins;
};
ClassMeta.prototype.hasStaticMixin = function hasStaticMixin(mixin) {
return this.staticMixins.indexOf(mixin) !== -1;
};
_proto2.hasStaticMixin = function hasStaticMixin(mixin) {
return this.staticMixins.indexOf(mixin) !== -1;
};
ClassMeta.applyAllMixins = function applyAllMixins(Subclass, Parent) {
Subclass[_objectReference.CLASS_META].getMixins().forEach(function (m) {
return m.extendPrototypeOnto(Subclass, Parent);
});
Subclass[_objectReference.CLASS_META].getStaticMixins().forEach(function (m) {
return m.extendStatic(Subclass);
});
Subclass[_objectReference.CLASS_META].seal();
};
ClassMeta.applyAllMixins = function applyAllMixins(Subclass, Parent) {
Subclass[_objectReference.CLASS_META].getMixins().forEach(function (m) {
return m.extendPrototypeOnto(Subclass, Parent);
});
ClassMeta.prototype.addSubclass = function addSubclass(constructor) {
this.subclasses.push(constructor);
};
Subclass[_objectReference.CLASS_META].getStaticMixins().forEach(function (m) {
return m.extendStatic(Subclass);
});
ClassMeta.prototype.getSubclasses = function getSubclasses() {
return this.subclasses;
};
Subclass[_objectReference.CLASS_META].seal();
};
ClassMeta.prototype.addPropertyMetadata = function addPropertyMetadata(property, value) {
this.propertyMetadata[property] = value;
};
_proto2.addSubclass = function addSubclass(constructor) {
this.subclasses.push(constructor);
};
ClassMeta.prototype.metadataForProperty = function metadataForProperty(property) {
return this.propertyMetadata[property];
};
_proto2.getSubclasses = function getSubclasses() {
return this.subclasses;
};
ClassMeta.prototype.addReferenceTypeFor = function addReferenceTypeFor(property, type) {
this.referenceTypes[property] = type;
};
_proto2.addPropertyMetadata = function addPropertyMetadata(property, value) {
this.propertyMetadata[property] = value;
};
ClassMeta.prototype.addSlotFor = function addSlotFor(property) {
this.slots.push(property);
};
_proto2.metadataForProperty = function metadataForProperty(property) {
return this.propertyMetadata[property];
};
ClassMeta.prototype.hasConcatenatedProperty = function hasConcatenatedProperty(property) {
if (!this.hasConcatenatedProperties) return false;
return property in this.concatenatedProperties;
};
_proto2.addReferenceTypeFor = function addReferenceTypeFor(property, type) {
this.referenceTypes[property] = type;
};
ClassMeta.prototype.getConcatenatedProperty = function getConcatenatedProperty(property) {
return this.concatenatedProperties[property];
};
_proto2.addSlotFor = function addSlotFor(property) {
this.slots.push(property);
};
ClassMeta.prototype.getConcatenatedProperties = function getConcatenatedProperties() {
return Object.keys(this.concatenatedProperties);
};
_proto2.hasConcatenatedProperty = function hasConcatenatedProperty(property) {
if (!this.hasConcatenatedProperties) return false;
return property in this.concatenatedProperties;
};
ClassMeta.prototype.addConcatenatedProperty = function addConcatenatedProperty(property, value) {
this.hasConcatenatedProperties = true;
if (property in this.concatenatedProperties) {
var val = this.concatenatedProperties[property].concat(value);
this.concatenatedProperties[property] = val;
} else {
this.concatenatedProperties[property] = value;
}
};
_proto2.getConcatenatedProperty = function getConcatenatedProperty(property) {
return this.concatenatedProperties[property];
};
ClassMeta.prototype.hasMergedProperty = function hasMergedProperty(property) {
if (!this.hasMergedProperties) return false;
return property in this.mergedProperties;
};
_proto2.getConcatenatedProperties = function getConcatenatedProperties() {
return Object.keys(this.concatenatedProperties);
};
ClassMeta.prototype.getMergedProperty = function getMergedProperty(property) {
return this.mergedProperties[property];
};
_proto2.addConcatenatedProperty = function addConcatenatedProperty(property, value) {
this.hasConcatenatedProperties = true;
ClassMeta.prototype.getMergedProperties = function getMergedProperties() {
return Object.keys(this.mergedProperties);
};
if (property in this.concatenatedProperties) {
var val = this.concatenatedProperties[property].concat(value);
this.concatenatedProperties[property] = val;
} else {
this.concatenatedProperties[property] = value;
}
};
ClassMeta.prototype.addMergedProperty = function addMergedProperty(property, value) {
this.hasMergedProperties = true;
if (isArray(value)) {
throw new Error('You passed in `' + JSON.stringify(value) + '` as the value for `foo` but `foo` cannot be an Array');
}
if (property in this.mergedProperties && this.mergedProperties[property] && value) {
this.mergedProperties[property] = mergeMergedProperties(value, this.mergedProperties[property]);
} else {
value = value === null ? value : value || {};
this.mergedProperties[property] = value;
}
};
_proto2.hasMergedProperty = function hasMergedProperty(property) {
if (!this.hasMergedProperties) return false;
return property in this.mergedProperties;
};
ClassMeta.prototype.getReferenceTypes = function getReferenceTypes() {
return this.referenceTypes;
};
_proto2.getMergedProperty = function getMergedProperty(property) {
return this.mergedProperties[property];
};
ClassMeta.prototype.getPropertyMetadata = function getPropertyMetadata() {
return this.propertyMetadata;
};
_proto2.getMergedProperties = function getMergedProperties() {
return Object.keys(this.mergedProperties);
};
ClassMeta.prototype.reset = function reset(parent) {
this.referenceTypes = (0, _util.dict)();
this.propertyMetadata = (0, _util.dict)();
this.concatenatedProperties = (0, _util.dict)();
this.mergedProperties = (0, _util.dict)();
if (parent) {
this.hasConcatenatedProperties = parent.hasConcatenatedProperties;
for (var prop in parent.concatenatedProperties) {
this.concatenatedProperties[prop] = parent.concatenatedProperties[prop].slice();
}
this.hasMergedProperties = parent.hasMergedProperties;
for (var _prop2 in parent.mergedProperties) {
this.mergedProperties[_prop2] = (0, _util.assign)({}, parent.mergedProperties[_prop2]);
}
(0, _util.assign)(this.referenceTypes, parent.referenceTypes);
(0, _util.assign)(this.propertyMetadata, parent.propertyMetadata);
}
};
_proto2.addMergedProperty = function addMergedProperty(property, value) {
this.hasMergedProperties = true;
ClassMeta.prototype.reseal = function reseal(obj) {
var meta = _objectReference.Meta.for(obj);
var fresh = new this.InstanceMetaConstructor(obj, {});
var referenceTypes = meta.getReferenceTypes();
var slots = meta.getSlots();
turbocharge((0, _util.assign)(referenceTypes, this.referenceTypes));
turbocharge((0, _util.assign)(slots, fresh.getSlots()));
};
if (isArray(value)) {
throw new Error("You passed in `" + JSON.stringify(value) + "` as the value for `foo` but `foo` cannot be an Array");
}
ClassMeta.prototype.seal = function seal() {
var referenceTypes = turbocharge((0, _util.assign)({}, this.referenceTypes));
turbocharge(this.concatenatedProperties);
turbocharge(this.mergedProperties);
if (!this.hasMergedProperties && !this.hasConcatenatedProperties) {
this.init = function () {};
}
var slots = this.slots;
if (property in this.mergedProperties && this.mergedProperties[property] && value) {
this.mergedProperties[property] = mergeMergedProperties(value, this.mergedProperties[property]);
} else {
value = value === null ? value : value || {};
this.mergedProperties[property] = value;
}
};
var Slots = function Slots() {
var _this2 = this;
_proto2.getReferenceTypes = function getReferenceTypes() {
return this.referenceTypes;
};
_classCallCheck(this, Slots);
_proto2.getPropertyMetadata = function getPropertyMetadata() {
return this.propertyMetadata;
};
slots.forEach(function (name) {
_this2[name] = EMPTY_CACHE;
});
};
_proto2.reset = function reset(parent) {
this.referenceTypes = (0, _util.dict)();
this.propertyMetadata = (0, _util.dict)();
this.concatenatedProperties = (0, _util.dict)();
this.mergedProperties = (0, _util.dict)();
this.InstanceMetaConstructor = function (_SealedMeta) {
_inherits(_class, _SealedMeta);
if (parent) {
this.hasConcatenatedProperties = parent.hasConcatenatedProperties;
function _class() {
_classCallCheck(this, _class);
for (var prop in parent.concatenatedProperties) {
this.concatenatedProperties[prop] = parent.concatenatedProperties[prop].slice();
}
var _this3 = _possibleConstructorReturn(this, _SealedMeta.apply(this, arguments));
this.hasMergedProperties = parent.hasMergedProperties;
_this3.slots = new Slots();
_this3.referenceTypes = referenceTypes;
return _this3;
}
for (var _prop2 in parent.mergedProperties) {
this.mergedProperties[_prop2] = (0, _util.assign)({}, parent.mergedProperties[_prop2]);
}
_class.prototype.getReferenceTypes = function getReferenceTypes() {
return this.referenceTypes;
};
(0, _util.assign)(this.referenceTypes, parent.referenceTypes);
(0, _util.assign)(this.propertyMetadata, parent.propertyMetadata);
}
};
_class.prototype.referenceTypeFor = function referenceTypeFor(property) {
return this.referenceTypes[property] || _objectReference.PropertyReference;
};
_proto2.reseal = function reseal(obj) {
var meta = _objectReference.Meta["for"](obj);
_class.prototype.getSlots = function getSlots() {
return this.slots;
};
var fresh = new this.InstanceMetaConstructor(obj, {});
var referenceTypes = meta.getReferenceTypes();
var slots = meta.getSlots();
turbocharge((0, _util.assign)(referenceTypes, this.referenceTypes));
turbocharge((0, _util.assign)(slots, fresh.getSlots()));
};
return _class;
}(SealedMeta);
turbocharge(this);
_proto2.seal = function seal() {
var referenceTypes = turbocharge((0, _util.assign)({}, this.referenceTypes));
turbocharge(this.concatenatedProperties);
turbocharge(this.mergedProperties);
if (!this.hasMergedProperties && !this.hasConcatenatedProperties) {
this.init = function () {};
}
var slots = this.slots;
var Slots = function Slots() {
var _this = this;
slots.forEach(function (name) {
_this[name] = EMPTY_CACHE;
});
};
return ClassMeta;
this.InstanceMetaConstructor =
/*#__PURE__*/
function (_SealedMeta) {
_inheritsLoose(_class, _SealedMeta);
function _class() {
var _this2;
_this2 = _SealedMeta.apply(this, arguments) || this;
_this2.slots = new Slots();
_this2.referenceTypes = referenceTypes;
return _this2;
}
var _proto3 = _class.prototype;
_proto3.getReferenceTypes = function getReferenceTypes() {
return this.referenceTypes;
};
_proto3.referenceTypeFor = function referenceTypeFor(property) {
return this.referenceTypes[property] || _objectReference.PropertyReference;
};
_proto3.getSlots = function getSlots() {
return this.slots;
};
return _class;
}(SealedMeta);
turbocharge(this);
};
return ClassMeta;
}();
exports.ClassMeta = ClassMeta;
function mergeMergedProperties(attrs, parent) {
var merged = (0, _util.assign)({}, parent);
for (var prop in attrs) {
if (prop in parent && typeof parent[prop] === 'function' && typeof attrs[prop] === 'function') {
var wrapped = (0, _mixin.wrapMethod)(parent, prop, attrs[prop]);
merged[prop] = wrapped;
} else {
merged[prop] = attrs[prop];
}
var merged = (0, _util.assign)({}, parent);
for (var prop in attrs) {
if (prop in parent && typeof parent[prop] === 'function' && typeof attrs[prop] === 'function') {
var wrapped = (0, _mixin.wrapMethod)(parent, prop, attrs[prop]);
merged[prop] = wrapped;
} else {
merged[prop] = attrs[prop];
}
return merged;
}
return merged;
}
var InstanceMeta = exports.InstanceMeta = function (_ClassMeta) {
_inherits(InstanceMeta, _ClassMeta);
function InstanceMeta() {
_classCallCheck(this, InstanceMeta);
var InstanceMeta =
/*#__PURE__*/
function (_ClassMeta) {
_inheritsLoose(InstanceMeta, _ClassMeta);
var _this4 = _possibleConstructorReturn(this, _ClassMeta.apply(this, arguments));
function InstanceMeta() {
var _this3;
_this4[_a] = ClassMeta.fromParent(null);
return _this4;
}
_this3 = _ClassMeta.apply(this, arguments) || this;
_this3[_a] = ClassMeta.fromParent(null);
return _this3;
}
InstanceMeta.fromParent = function fromParent(parent) {
return _ClassMeta.fromParent.call(this, parent);
};
InstanceMeta.fromParent = function fromParent(parent) {
return _ClassMeta.fromParent.call(this, parent);
};
InstanceMeta.prototype.reset = function reset(parent) {
_ClassMeta.prototype.reset.call(this, parent);
if (parent) this[_objectReference.CLASS_META].reset(parent[_objectReference.CLASS_META]);
};
var _proto4 = InstanceMeta.prototype;
InstanceMeta.prototype.seal = function seal() {
_ClassMeta.prototype.seal.call(this);
this[_objectReference.CLASS_META].seal();
};
_proto4.reset = function reset(parent) {
_ClassMeta.prototype.reset.call(this, parent);
return InstanceMeta;
if (parent) this[_objectReference.CLASS_META].reset(parent[_objectReference.CLASS_META]);
};
_proto4.seal = function seal() {
_ClassMeta.prototype.seal.call(this);
this[_objectReference.CLASS_META].seal();
};
return InstanceMeta;
}(ClassMeta);
exports.InstanceMeta = InstanceMeta;
_a = _objectReference.CLASS_META;
var GlimmerObject = function () {
function GlimmerObject(attrs) {
_classCallCheck(this, GlimmerObject);
var GlimmerObject =
/*#__PURE__*/
function () {
function GlimmerObject(attrs) {
this._super = _utils.ROOT;
this._meta = null;
if (attrs) (0, _util.assign)(this, attrs);
this._super = _utils.ROOT;
this._meta = null;
if (attrs) (0, _util.assign)(this, attrs);
this.constructor[_objectReference.CLASS_META].init(this, attrs || null);
this._super = _utils.ROOT;
(0, _util.initializeGuid)(this);
this.init();
this.constructor[_objectReference.CLASS_META].init(this, attrs || null);
this._super = _utils.ROOT;
(0, _util.initializeGuid)(this);
this.init();
}
GlimmerObject.extend = function extend() {
for (var _len = arguments.length, extensions = new Array(_len), _key = 0; _key < _len; _key++) {
extensions[_key] = arguments[_key];
}
GlimmerObject.extend = function extend() {
for (var _len = arguments.length, extensions = Array(_len), _key = 0; _key < _len; _key++) {
extensions[_key] = arguments[_key];
}
return _mixin.extend.apply(void 0, [this].concat(extensions));
};
return _mixin.extend.apply(undefined, [this].concat(extensions));
};
GlimmerObject.create = function create(attrs) {
return new this(attrs);
};
GlimmerObject.create = function create(attrs) {
return new this(attrs);
};
GlimmerObject.reopen = function reopen(extensions) {
(0, _mixin.toMixin)(extensions).extendPrototype(this);
GlimmerObject.reopen = function reopen(extensions) {
(0, _mixin.toMixin)(extensions).extendPrototype(this);
this[_objectReference.CLASS_META].seal();
(0, _mixin.relinkSubclasses)(this);
};
this[_objectReference.CLASS_META].seal();
GlimmerObject.reopenClass = function reopenClass(extensions) {
(0, _mixin.toMixin)(extensions).extendStatic(this);
this[_objectReference.CLASS_META].seal();
};
(0, _mixin.relinkSubclasses)(this);
};
GlimmerObject.metaForProperty = function metaForProperty(property) {
var value = this[_objectReference.CLASS_META].metadataForProperty(property);
if (!value) throw new Error('metaForProperty() could not find a computed property with key \'' + property + '\'.');
return value;
};
GlimmerObject.reopenClass = function reopenClass(extensions) {
(0, _mixin.toMixin)(extensions).extendStatic(this);
GlimmerObject.eachComputedProperty = function eachComputedProperty(callback) {
var metadata = this[_objectReference.CLASS_META].getPropertyMetadata();
if (!metadata) return;
for (var prop in metadata) {
callback(prop, metadata[prop]);
}
};
this[_objectReference.CLASS_META].seal();
};
GlimmerObject.prototype.init = function init() {};
GlimmerObject.metaForProperty = function metaForProperty(property) {
var value = this[_objectReference.CLASS_META].metadataForProperty(property);
GlimmerObject.prototype.get = function get(key) {
return this[key];
};
if (!value) throw new Error("metaForProperty() could not find a computed property with key '" + property + "'.");
return value;
};
GlimmerObject.prototype.set = function set(key, value) {
this[key] = value;
(0, _validator.bump)();
};
GlimmerObject.eachComputedProperty = function eachComputedProperty(callback) {
var metadata = this[_objectReference.CLASS_META].getPropertyMetadata();
GlimmerObject.prototype.setProperties = function setProperties(attrs) {
(0, _util.assign)(this, attrs);
(0, _validator.bump)();
};
if (!metadata) return;
GlimmerObject.prototype.destroy = function destroy() {};
for (var prop in metadata) {
callback(prop, metadata[prop]);
}
};
return GlimmerObject;
var _proto5 = GlimmerObject.prototype;
_proto5.init = function init() {};
_proto5.get = function get(key) {
return this[key];
};
_proto5.set = function set(key, value) {
this[key] = value;
(0, _validator.bump)();
};
_proto5.setProperties = function setProperties(attrs) {
(0, _util.assign)(this, attrs);
(0, _validator.bump)();
};
_proto5.destroy = function destroy() {};
return GlimmerObject;
}();
exports.default = GlimmerObject;
_b = _objectReference.CLASS_META;
GlimmerObject[_b] = InstanceMeta.fromParent(null);
GlimmerObject.isClass = true;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztRQXVDTSxXLEdBQUEsVzs7QUF2Q047O0FBTUE7O0FBQ0E7O0FBSUE7O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUpNLFVBQU4sTUFBTSxPOztBQU1DLElBQU0sb0NBQWMsU0FBQSxXQUFBLEdBQXBCLENBQUEsQ0FBQTtBQXdCRCxTQUFBLFdBQUEsQ0FBQSxHQUFBLEVBQStCO0FBQ25DO0FBQ0E7QUFDQSxXQUFBLEdBQUE7QUFDRDs7SUFFRCxhOzs7Ozs7Ozs7eUJBQ0UsbUIsa0NBQW1DO0FBQ2pDLGNBQU0sSUFBQSxLQUFBLENBQU4sZ0RBQU0sQ0FBTjs7OztFQUZKLHFCOztBQU1BLElBQUEsZ0NBQUEsWUFBQTtBQUFBLGFBQUEsU0FBQSxHQUFBO0FBQUEsd0JBQUEsSUFBQSxFQUFBLFNBQUE7O0FBQ1UsYUFBQSxjQUFBLEdBQUEsaUJBQUE7QUFDQSxhQUFBLGdCQUFBLEdBQUEsaUJBQUE7QUFDQSxhQUFBLHNCQUFBLEdBQUEsaUJBQUE7QUFDQSxhQUFBLHlCQUFBLEdBQUEsS0FBQTtBQUNBLGFBQUEsZ0JBQUEsR0FBQSxpQkFBQTtBQUNBLGFBQUEsbUJBQUEsR0FBQSxLQUFBO0FBQ0EsYUFBQSxNQUFBLEdBQUEsRUFBQTtBQUNBLGFBQUEsYUFBQSxHQUFBLEVBQUE7QUFDQSxhQUFBLFlBQUEsR0FBQSxFQUFBO0FBQ0EsYUFBQSxVQUFBLEdBQUEsRUFBQTtBQUNBLGFBQUEsS0FBQSxHQUFBLEVBQUE7QUFDRCxhQUFBLHVCQUFBLEdBQUEsSUFBQTtBQWtQUjs7QUE5UEQsY0FBQSxVQUFBLEdBQUEsU0FBQSxVQUFBLENBQUEsTUFBQSxFQWM2QztBQUN6QyxZQUFJLE9BQU8sSUFBWCxJQUFXLEVBQVg7QUFDQSxhQUFBLEtBQUEsQ0FBQSxNQUFBO0FBQ0EsZUFBQSxJQUFBO0FBakJKLEtBQUE7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LEVBQUEsSUFBQTs7O2tCQUdGLGUsNEJBQUEsUSxFQUF1QztBQUNyQyxZQUFJLFFBQVEsS0FBQSwyQkFBQSxFQUFBLG1CQUFBLENBQVosUUFBWSxDQUFaO0FBQ0EsWUFBSSxDQUFKLEtBQUEsRUFDRSxNQUFNLElBQUEsS0FBQSxDQUFBLHFFQUFOLFFBQU0sR0FBTixLQUFNLENBQU47QUFHRixlQUFBLEtBQUE7OztrQkFHRixvQixpQ0FBQSxRLEVBQW9FO0FBQ2xFLFlBQUksV0FBVyxLQUFBLDJCQUFBLEVBQWYsbUJBQWUsRUFBZjtBQUNBLFlBQUksQ0FBSixRQUFBLEVBQWU7QUFFZixhQUFLLElBQUwsSUFBQSxJQUFBLFFBQUEsRUFBMkI7QUFDekIscUJBQUEsSUFBQSxFQUFlLFNBQWYsSUFBZSxDQUFmO0FBQ0Q7Ozs0QkFPSCxJLG1CQUFJLEM7OzRCQVVKLEcsZ0JBQUEsRyxFQUFlO0FBQ2IsZUFBTyxLQUFQLEdBQU8sQ0FBUDs7OzRCQUdGLEcsZ0JBQUEsRyxFQUFBLEssRUFBMkI7QUFDekIsYUFBQSxHQUFBLElBQUEsS0FBQTtBQUNBOzs7NEJBR0YsYSwwQkFBQSxLLEVBQTJCO0FBQ3pCLDBCQUFBLElBQUEsRUFBQSxLQUFBO0FBQ0E7Ozs0QkFHRixPLHNCQUFPLEM7Ozs7O2tCQTVFSyxhOzs7S0FHSiwyQjtBQUFELGNBQUEsRUFBQSxJQUE2QixhQUFBLFVBQUEsQ0FBN0IsSUFBNkIsQ0FBN0I7QUFDQSxjQUFBLE9BQUEsR0FBQSxJQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgTWV0YSxcbiAgSW5uZXJSZWZlcmVuY2VGYWN0b3J5LFxuICBQcm9wZXJ0eVJlZmVyZW5jZSxcbiAgQ0xBU1NfTUVUQSxcbn0gZnJvbSAnQGdsaW1tZXIvb2JqZWN0LXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBkaWN0LCBhc3NpZ24sIGluaXRpYWxpemVHdWlkIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBNaXhpbiwgZXh0ZW5kIGFzIGV4dGVuZENsYXNzLCB0b01peGluLCByZWxpbmtTdWJjbGFzc2VzLCB3cmFwTWV0aG9kIH0gZnJvbSAnLi9taXhpbic7XG5cbmNvbnN0IHsgaXNBcnJheSB9ID0gQXJyYXk7XG5cbmltcG9ydCB7IFJPT1QgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IE9wdGlvbiwgRGljdCB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgYnVtcCB9IGZyb20gJ0BnbGltbWVyL3ZhbGlkYXRvcic7XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9DQUNIRSA9IGZ1bmN0aW9uIEVNUFRZX0NBQ0hFKCkge307XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0V2l0aE1peGlucyB7XG4gIFtDTEFTU19NRVRBXTogQ2xhc3NNZXRhO1xuICBfbWV0YTogTWV0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnN0YW5jZVdpdGhNaXhpbnMge1xuICBjb25zdHJ1Y3RvcjogT2JqZWN0V2l0aE1peGlucztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHbGltbWVyT2JqZWN0RmFjdG9yeTxUPiB7XG4gIG5ldyA8VT4oYXR0cnM/OiBVKTogR2xpbW1lck9iamVjdCAmIFQgJiBVO1xuICBleHRlbmQoKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8T2JqZWN0PjtcbiAgZXh0ZW5kPFQ+KGV4dGVuc2lvbjogVCk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PFQ+O1xuICBleHRlbmQoLi4uZXh0ZW5zaW9uczogT2JqZWN0W10pOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxPYmplY3Q+O1xuICBjcmVhdGU8VT4oYXR0cnM/OiBVKTogR2xpbW1lck9iamVjdCAmIFQgJiBVO1xuICByZW9wZW48VT4oZXh0ZW5zaW9uczogVSk6IHZvaWQ7XG4gIHJlb3BlbkNsYXNzPFU+KGV4dGVuc2lvbnM6IFUpOiB2b2lkO1xuICBtZXRhRm9yUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IE9iamVjdDtcbiAgZWFjaENvbXB1dGVkUHJvcGVydHkoY2FsbGJhY2s6IChzOiBzdHJpbmcsIG86IE9iamVjdCkgPT4gdm9pZCk6IHZvaWQ7XG4gIFtDTEFTU19NRVRBXTogSW5zdGFuY2VNZXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHVyYm9jaGFyZ2U8VD4ob2JqOiBUKTogVCB7XG4gIC8vIGZ1bmN0aW9uIER1bW15KCkge31cbiAgLy8gRHVtbXkucHJvdG90eXBlID0gb2JqO1xuICByZXR1cm4gb2JqO1xufVxuXG5hYnN0cmFjdCBjbGFzcyBTZWFsZWRNZXRhIGV4dGVuZHMgTWV0YSB7XG4gIGFkZFJlZmVyZW5jZVR5cGVGb3IoLi4uX2FyZ3M6IGFueVtdKTogSW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4ge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IG1vZGlmeSByZWZlcmVuY2UgdHlwZXMgb24gYSBzZWFsZWQgbWV0YScpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDbGFzc01ldGEge1xuICBwcml2YXRlIHJlZmVyZW5jZVR5cGVzID0gZGljdDxJbm5lclJlZmVyZW5jZUZhY3Rvcnk8YW55Pj4oKTtcbiAgcHJpdmF0ZSBwcm9wZXJ0eU1ldGFkYXRhID0gZGljdDxhbnk+KCk7XG4gIHByaXZhdGUgY29uY2F0ZW5hdGVkUHJvcGVydGllcyA9IGRpY3Q8YW55W10+KCk7XG4gIHByaXZhdGUgaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcyA9IGZhbHNlO1xuICBwcml2YXRlIG1lcmdlZFByb3BlcnRpZXMgPSBkaWN0PE9iamVjdD4oKTtcbiAgcHJpdmF0ZSBoYXNNZXJnZWRQcm9wZXJ0aWVzID0gZmFsc2U7XG4gIHByaXZhdGUgbWl4aW5zOiBNaXhpbltdID0gW107XG4gIHByaXZhdGUgYXBwbGllZE1peGluczogTWl4aW5bXSA9IFtdO1xuICBwcml2YXRlIHN0YXRpY01peGluczogTWl4aW5bXSA9IFtdO1xuICBwcml2YXRlIHN1YmNsYXNzZXM6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT5bXSA9IFtdO1xuICBwcml2YXRlIHNsb3RzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgSW5zdGFuY2VNZXRhQ29uc3RydWN0b3I6IE9wdGlvbjx0eXBlb2YgTWV0YT4gPSBudWxsO1xuXG4gIHN0YXRpYyBmcm9tUGFyZW50KHBhcmVudDogT3B0aW9uPENsYXNzTWV0YT4pIHtcbiAgICBsZXQgbWV0YSA9IG5ldyB0aGlzKCk7XG4gICAgbWV0YS5yZXNldChwYXJlbnQpO1xuICAgIHJldHVybiBtZXRhO1xuICB9XG5cbiAgc3RhdGljIGZvcihvYmplY3Q6IE9iamVjdFdpdGhNaXhpbnMgfCBJbnN0YW5jZVdpdGhNaXhpbnMpOiBPcHRpb248Q2xhc3NNZXRhPiB7XG4gICAgaWYgKENMQVNTX01FVEEgaW4gb2JqZWN0KSByZXR1cm4gKG9iamVjdCBhcyBPYmplY3RXaXRoTWl4aW5zKVtDTEFTU19NRVRBXTtcbiAgICBlbHNlIGlmIChvYmplY3QuY29uc3RydWN0b3IpXG4gICAgICByZXR1cm4gKG9iamVjdCBhcyBJbnN0YW5jZVdpdGhNaXhpbnMpLmNvbnN0cnVjdG9yW0NMQVNTX01FVEFdIHx8IG51bGw7XG4gICAgZWxzZSByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGluaXQob2JqZWN0OiBHbGltbWVyT2JqZWN0LCBhdHRyczogT3B0aW9uPERpY3Q+KSB7XG4gICAgaWYgKHR5cGVvZiBhdHRycyAhPT0gJ29iamVjdCcgfHwgYXR0cnMgPT09IG51bGwpIHJldHVybjtcblxuICAgIGlmICh0aGlzLmhhc0NvbmNhdGVuYXRlZFByb3BlcnRpZXMpIHtcbiAgICAgIGxldCBjb25jYXRQcm9wcyA9IHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcztcbiAgICAgIGZvciAobGV0IHByb3AgaW4gY29uY2F0UHJvcHMpIHtcbiAgICAgICAgaWYgKHByb3AgaW4gYXR0cnMpIHtcbiAgICAgICAgICBsZXQgY29uY2F0ID0gY29uY2F0UHJvcHNbcHJvcF0uc2xpY2UoKTtcbiAgICAgICAgICBvYmplY3RbcHJvcF0gPSBjb25jYXQuY29uY2F0KGF0dHJzW3Byb3BdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc01lcmdlZFByb3BlcnRpZXMpIHtcbiAgICAgIGxldCBtZXJnZWRQcm9wcyA9IHRoaXMubWVyZ2VkUHJvcGVydGllcztcbiAgICAgIGZvciAobGV0IHByb3AgaW4gbWVyZ2VkUHJvcHMpIHtcbiAgICAgICAgaWYgKHByb3AgaW4gYXR0cnMpIHtcbiAgICAgICAgICBsZXQgbWVyZ2VkID0gYXNzaWduKHt9LCBtZXJnZWRQcm9wc1twcm9wXSk7XG4gICAgICAgICAgb2JqZWN0W3Byb3BdID0gYXNzaWduKG1lcmdlZCwgYXR0cnNbcHJvcF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkU3RhdGljTWl4aW4obWl4aW46IE1peGluKSB7XG4gICAgdGhpcy5zdGF0aWNNaXhpbnMucHVzaChtaXhpbik7XG4gIH1cblxuICBhZGRNaXhpbihtaXhpbjogTWl4aW4pIHtcbiAgICB0aGlzLm1peGlucy5wdXNoKG1peGluKTtcbiAgfVxuXG4gIGdldFN0YXRpY01peGlucygpOiBNaXhpbltdIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0aWNNaXhpbnM7XG4gIH1cblxuICBnZXRNaXhpbnMoKTogTWl4aW5bXSB7XG4gICAgcmV0dXJuIHRoaXMubWl4aW5zO1xuICB9XG5cbiAgYWRkQXBwbGllZE1peGluKG1peGluOiBNaXhpbikge1xuICAgIHRoaXMuYXBwbGllZE1peGlucy5wdXNoKG1peGluKTtcbiAgfVxuXG4gIGhhc0FwcGxpZWRNaXhpbihtaXhpbjogTWl4aW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hcHBsaWVkTWl4aW5zLmluZGV4T2YobWl4aW4pICE9PSAtMTtcbiAgfVxuXG4gIGdldEFwcGxpZWRNaXhpbnMoKTogTWl4aW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbGllZE1peGlucztcbiAgfVxuXG4gIGhhc1N0YXRpY01peGluKG1peGluOiBNaXhpbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRpY01peGlucy5pbmRleE9mKG1peGluKSAhPT0gLTE7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBbGxNaXhpbnMoU3ViY2xhc3M6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4sIFBhcmVudDogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICAgIFN1YmNsYXNzW0NMQVNTX01FVEFdLmdldE1peGlucygpLmZvckVhY2goKG06IE1peGluKSA9PiBtLmV4dGVuZFByb3RvdHlwZU9udG8oU3ViY2xhc3MsIFBhcmVudCkpO1xuICAgIFN1YmNsYXNzW0NMQVNTX01FVEFdLmdldFN0YXRpY01peGlucygpLmZvckVhY2goKG06IE1peGluKSA9PiBtLmV4dGVuZFN0YXRpYyhTdWJjbGFzcykpO1xuICAgIFN1YmNsYXNzW0NMQVNTX01FVEFdLnNlYWwoKTtcbiAgfVxuXG4gIGFkZFN1YmNsYXNzKGNvbnN0cnVjdG9yOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KSB7XG4gICAgdGhpcy5zdWJjbGFzc2VzLnB1c2goY29uc3RydWN0b3IpO1xuICB9XG5cbiAgZ2V0U3ViY2xhc3NlcygpOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+W10ge1xuICAgIHJldHVybiB0aGlzLnN1YmNsYXNzZXM7XG4gIH1cblxuICBhZGRQcm9wZXJ0eU1ldGFkYXRhKHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnByb3BlcnR5TWV0YWRhdGFbcHJvcGVydHldID0gdmFsdWU7XG4gIH1cblxuICBtZXRhZGF0YUZvclByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBPYmplY3Qge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5TWV0YWRhdGFbcHJvcGVydHldO1xuICB9XG5cbiAgYWRkUmVmZXJlbmNlVHlwZUZvcihwcm9wZXJ0eTogc3RyaW5nLCB0eXBlOiBJbm5lclJlZmVyZW5jZUZhY3Rvcnk8YW55Pikge1xuICAgIHRoaXMucmVmZXJlbmNlVHlwZXNbcHJvcGVydHldID0gdHlwZTtcbiAgfVxuXG4gIGFkZFNsb3RGb3IocHJvcGVydHk6IHN0cmluZykge1xuICAgIHRoaXMuc2xvdHMucHVzaChwcm9wZXJ0eSk7XG4gIH1cblxuICBoYXNDb25jYXRlbmF0ZWRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmhhc0NvbmNhdGVuYXRlZFByb3BlcnRpZXMpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKHByb3BlcnR5IGFzIHN0cmluZykgaW4gdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0Q29uY2F0ZW5hdGVkUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzW3Byb3BlcnR5XTtcbiAgfVxuXG4gIGdldENvbmNhdGVuYXRlZFByb3BlcnRpZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXMpIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgYWRkQ29uY2F0ZW5hdGVkUHJvcGVydHkocHJvcGVydHk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcyA9IHRydWU7XG5cbiAgICBpZiAoKHByb3BlcnR5IGFzIHN0cmluZykgaW4gdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSB7XG4gICAgICBsZXQgdmFsID0gdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzW3Byb3BlcnR5XS5jb25jYXQodmFsdWUpO1xuICAgICAgdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzW3Byb3BlcnR5XSA9IHZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGhhc01lcmdlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaGFzTWVyZ2VkUHJvcGVydGllcykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAocHJvcGVydHkgYXMgc3RyaW5nKSBpbiB0aGlzLm1lcmdlZFByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRNZXJnZWRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogT2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5tZXJnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5XTtcbiAgfVxuXG4gIGdldE1lcmdlZFByb3BlcnRpZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLm1lcmdlZFByb3BlcnRpZXMpIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgYWRkTWVyZ2VkUHJvcGVydHkocHJvcGVydHk6IHN0cmluZywgdmFsdWU6IERpY3QpIHtcbiAgICB0aGlzLmhhc01lcmdlZFByb3BlcnRpZXMgPSB0cnVlO1xuXG4gICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBZb3UgcGFzc2VkIGluIFxcYCR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgKX1cXGAgYXMgdGhlIHZhbHVlIGZvciBcXGBmb29cXGAgYnV0IFxcYGZvb1xcYCBjYW5ub3QgYmUgYW4gQXJyYXlgXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICgocHJvcGVydHkgYXMgc3RyaW5nKSBpbiB0aGlzLm1lcmdlZFByb3BlcnRpZXMgJiYgdGhpcy5tZXJnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5XSAmJiB2YWx1ZSkge1xuICAgICAgdGhpcy5tZXJnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5XSA9IG1lcmdlTWVyZ2VkUHJvcGVydGllcyhcbiAgICAgICAgdmFsdWUsXG4gICAgICAgICh0aGlzIGFzIGFueSkubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgPT09IG51bGwgPyB2YWx1ZSA6IHZhbHVlIHx8IHt9O1xuICAgICAgdGhpcy5tZXJnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldFJlZmVyZW5jZVR5cGVzKCk6IERpY3Q8SW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4+IHtcbiAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VUeXBlcztcbiAgfVxuXG4gIGdldFByb3BlcnR5TWV0YWRhdGEoKTogRGljdDxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eU1ldGFkYXRhO1xuICB9XG5cbiAgcmVzZXQocGFyZW50OiBPcHRpb248Q2xhc3NNZXRhPikge1xuICAgIHRoaXMucmVmZXJlbmNlVHlwZXMgPSBkaWN0PElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+PigpO1xuICAgIHRoaXMucHJvcGVydHlNZXRhZGF0YSA9IGRpY3QoKTtcbiAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSBkaWN0PGFueVtdPigpO1xuICAgIHRoaXMubWVyZ2VkUHJvcGVydGllcyA9IGRpY3Q8T2JqZWN0PigpO1xuXG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgdGhpcy5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gcGFyZW50Lmhhc0NvbmNhdGVuYXRlZFByb3BlcnRpZXM7XG4gICAgICBmb3IgKGxldCBwcm9wIGluIHBhcmVudC5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wXSA9IHBhcmVudC5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzW3Byb3BdLnNsaWNlKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaGFzTWVyZ2VkUHJvcGVydGllcyA9IHBhcmVudC5oYXNNZXJnZWRQcm9wZXJ0aWVzO1xuICAgICAgZm9yIChsZXQgcHJvcCBpbiBwYXJlbnQubWVyZ2VkUHJvcGVydGllcykge1xuICAgICAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXNbcHJvcF0gPSBhc3NpZ24oe30sIHBhcmVudC5tZXJnZWRQcm9wZXJ0aWVzW3Byb3BdKTtcbiAgICAgIH1cblxuICAgICAgYXNzaWduKHRoaXMucmVmZXJlbmNlVHlwZXMsIHBhcmVudC5yZWZlcmVuY2VUeXBlcyk7XG4gICAgICBhc3NpZ24odGhpcy5wcm9wZXJ0eU1ldGFkYXRhLCBwYXJlbnQucHJvcGVydHlNZXRhZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgcmVzZWFsKG9iajogT2JqZWN0KSB7XG4gICAgbGV0IG1ldGEgPSBNZXRhLmZvcihvYmopO1xuICAgIGxldCBmcmVzaCA9IG5ldyB0aGlzLkluc3RhbmNlTWV0YUNvbnN0cnVjdG9yIShvYmosIHt9KTtcbiAgICBsZXQgcmVmZXJlbmNlVHlwZXMgPSBtZXRhLmdldFJlZmVyZW5jZVR5cGVzKCk7XG4gICAgbGV0IHNsb3RzID0gbWV0YS5nZXRTbG90cygpO1xuXG4gICAgdHVyYm9jaGFyZ2UoYXNzaWduKHJlZmVyZW5jZVR5cGVzLCB0aGlzLnJlZmVyZW5jZVR5cGVzKSk7XG4gICAgdHVyYm9jaGFyZ2UoYXNzaWduKHNsb3RzLCBmcmVzaC5nZXRTbG90cygpKSk7XG4gIH1cblxuICBzZWFsKCkge1xuICAgIGxldCByZWZlcmVuY2VUeXBlczogRGljdDxJbm5lclJlZmVyZW5jZUZhY3Rvcnk8YW55Pj4gPSB0dXJib2NoYXJnZShcbiAgICAgIGFzc2lnbih7fSwgdGhpcy5yZWZlcmVuY2VUeXBlcylcbiAgICApO1xuICAgIHR1cmJvY2hhcmdlKHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcyk7XG4gICAgdHVyYm9jaGFyZ2UodGhpcy5tZXJnZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmICghdGhpcy5oYXNNZXJnZWRQcm9wZXJ0aWVzICYmICF0aGlzLmhhc0NvbmNhdGVuYXRlZFByb3BlcnRpZXMpIHtcbiAgICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uKCkge307XG4gICAgfVxuXG4gICAgbGV0IHNsb3RzID0gdGhpcy5zbG90cztcblxuICAgIGNsYXNzIFNsb3RzIHtcbiAgICAgIFtpbmRleDogc3RyaW5nXTogdW5rbm93bjtcblxuICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHNsb3RzLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgdGhpc1tuYW1lXSA9IEVNUFRZX0NBQ0hFO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLkluc3RhbmNlTWV0YUNvbnN0cnVjdG9yID0gY2xhc3MgZXh0ZW5kcyBTZWFsZWRNZXRhIHtcbiAgICAgIHByb3RlY3RlZCBzbG90czogU2xvdHMgPSBuZXcgU2xvdHMoKTtcbiAgICAgIHB1YmxpYyByZWZlcmVuY2VUeXBlczogRGljdDxJbm5lclJlZmVyZW5jZUZhY3Rvcnk8YW55Pj4gPSByZWZlcmVuY2VUeXBlcztcblxuICAgICAgZ2V0UmVmZXJlbmNlVHlwZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZVR5cGVzO1xuICAgICAgfVxuXG4gICAgICByZWZlcmVuY2VUeXBlRm9yKHByb3BlcnR5OiBzdHJpbmcpOiBJbm5lclJlZmVyZW5jZUZhY3Rvcnk8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZVR5cGVzW3Byb3BlcnR5XSB8fCBQcm9wZXJ0eVJlZmVyZW5jZTtcbiAgICAgIH1cblxuICAgICAgZ2V0U2xvdHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNsb3RzO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0dXJib2NoYXJnZSh0aGlzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZU1lcmdlZFByb3BlcnRpZXMoYXR0cnM6IERpY3QsIHBhcmVudDogRGljdCkge1xuICBsZXQgbWVyZ2VkID0gYXNzaWduKHt9LCBwYXJlbnQpO1xuXG4gIGZvciAobGV0IHByb3AgaW4gYXR0cnMpIHtcbiAgICBpZiAocHJvcCBpbiBwYXJlbnQgJiYgdHlwZW9mIHBhcmVudFtwcm9wXSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgYXR0cnNbcHJvcF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGxldCB3cmFwcGVkID0gd3JhcE1ldGhvZChwYXJlbnQsIHByb3AsIGF0dHJzW3Byb3BdIGFzIGFueSk7XG4gICAgICBtZXJnZWRbcHJvcF0gPSB3cmFwcGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZXJnZWRbcHJvcF0gPSBhdHRyc1twcm9wXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkO1xufVxuXG5leHBvcnQgY2xhc3MgSW5zdGFuY2VNZXRhIGV4dGVuZHMgQ2xhc3NNZXRhIHtcbiAgcHVibGljIFtDTEFTU19NRVRBXTogQ2xhc3NNZXRhID0gQ2xhc3NNZXRhLmZyb21QYXJlbnQobnVsbCk7XG5cbiAgc3RhdGljIGZyb21QYXJlbnQocGFyZW50OiBPcHRpb248SW5zdGFuY2VNZXRhPik6IEluc3RhbmNlTWV0YSB7XG4gICAgcmV0dXJuIHN1cGVyLmZyb21QYXJlbnQocGFyZW50KSBhcyBJbnN0YW5jZU1ldGE7XG4gIH1cblxuICByZXNldChwYXJlbnQ6IEluc3RhbmNlTWV0YSkge1xuICAgIHN1cGVyLnJlc2V0KHBhcmVudCk7XG4gICAgaWYgKHBhcmVudCkgdGhpc1tDTEFTU19NRVRBXS5yZXNldChwYXJlbnRbQ0xBU1NfTUVUQV0pO1xuICB9XG5cbiAgc2VhbCgpIHtcbiAgICBzdXBlci5zZWFsKCk7XG4gICAgdGhpc1tDTEFTU19NRVRBXS5zZWFsKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2xpbW1lck9iamVjdCB7XG4gIFtpbmRleDogc3RyaW5nXTogdW5rbm93bjtcblxuICBzdGF0aWMgW0NMQVNTX01FVEFdOiBJbnN0YW5jZU1ldGEgPSBJbnN0YW5jZU1ldGEuZnJvbVBhcmVudChudWxsKTtcbiAgc3RhdGljIGlzQ2xhc3MgPSB0cnVlO1xuXG4gIHN0YXRpYyBleHRlbmQoKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiAmIHR5cGVvZiBHbGltbWVyT2JqZWN0O1xuICBzdGF0aWMgZXh0ZW5kPFQ+KGV4dGVuc2lvbjogVCk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PFQ+ICYgdHlwZW9mIEdsaW1tZXJPYmplY3Q7XG4gIHN0YXRpYyBleHRlbmQoLi4uZXh0ZW5zaW9uczogT2JqZWN0W10pOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+ICYgdHlwZW9mIEdsaW1tZXJPYmplY3Q7XG5cbiAgc3RhdGljIGV4dGVuZCh0aGlzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+LCAuLi5leHRlbnNpb25zOiBhbnlbXSkge1xuICAgIHJldHVybiBleHRlbmRDbGFzcyh0aGlzLCAuLi5leHRlbnNpb25zKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGUoYXR0cnM/OiBEaWN0IHwgbnVsbCk6IEdsaW1tZXJPYmplY3Qge1xuICAgIHJldHVybiBuZXcgdGhpcyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcmVvcGVuPFU+KGV4dGVuc2lvbnM6IFUpOiB2b2lkIHtcbiAgICB0b01peGluKGV4dGVuc2lvbnMpLmV4dGVuZFByb3RvdHlwZSh0aGlzIGFzIGFueSk7XG4gICAgdGhpc1tDTEFTU19NRVRBXS5zZWFsKCk7XG5cbiAgICByZWxpbmtTdWJjbGFzc2VzKHRoaXMgYXMgYW55KTtcbiAgfVxuXG4gIHN0YXRpYyByZW9wZW5DbGFzczxVPihleHRlbnNpb25zOiBVKTogdm9pZCB7XG4gICAgdG9NaXhpbihleHRlbnNpb25zKS5leHRlbmRTdGF0aWModGhpcyBhcyBhbnkpO1xuICAgIHRoaXNbQ0xBU1NfTUVUQV0uc2VhbCgpO1xuICB9XG5cbiAgc3RhdGljIG1ldGFGb3JQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogT2JqZWN0IHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzW0NMQVNTX01FVEFdLm1ldGFkYXRhRm9yUHJvcGVydHkocHJvcGVydHkpO1xuICAgIGlmICghdmFsdWUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBtZXRhRm9yUHJvcGVydHkoKSBjb3VsZCBub3QgZmluZCBhIGNvbXB1dGVkIHByb3BlcnR5IHdpdGgga2V5ICcke3Byb3BlcnR5fScuYFxuICAgICAgKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzdGF0aWMgZWFjaENvbXB1dGVkUHJvcGVydHkoY2FsbGJhY2s6IChzOiBzdHJpbmcsIG86IE9iamVjdCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGxldCBtZXRhZGF0YSA9IHRoaXNbQ0xBU1NfTUVUQV0uZ2V0UHJvcGVydHlNZXRhZGF0YSgpO1xuICAgIGlmICghbWV0YWRhdGEpIHJldHVybjtcblxuICAgIGZvciAobGV0IHByb3AgaW4gbWV0YWRhdGEpIHtcbiAgICAgIGNhbGxiYWNrKHByb3AsIG1ldGFkYXRhW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICBfc3VwZXIgPSBST09UO1xuICBfbWV0YSA9IG51bGw7XG4gIF9ndWlkITogbnVtYmVyOyAvLyBTZXQgYnkgaW5pdGlhbGl6ZUd1aWQodGhpcykgaW4gY29uc3RydWN0b3JcblxuICBpbml0KCkge31cblxuICBjb25zdHJ1Y3RvcihhdHRycz86IERpY3QgfCBudWxsKSB7XG4gICAgaWYgKGF0dHJzKSBhc3NpZ24odGhpcywgYXR0cnMpO1xuICAgICh0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBHbGltbWVyT2JqZWN0KVtDTEFTU19NRVRBXS5pbml0KHRoaXMsIGF0dHJzIHx8IG51bGwpO1xuICAgIHRoaXMuX3N1cGVyID0gUk9PVDtcbiAgICBpbml0aWFsaXplR3VpZCh0aGlzKTtcbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIGdldChrZXk6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXNba2V5XTtcbiAgfVxuXG4gIHNldChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXNba2V5XSA9IHZhbHVlO1xuICAgIGJ1bXAoKTtcbiAgfVxuXG4gIHNldFByb3BlcnRpZXMoYXR0cnM6IE9iamVjdCkge1xuICAgIGFzc2lnbih0aGlzLCBhdHRycyk7XG4gICAgYnVtcCgpO1xuICB9XG5cbiAgZGVzdHJveSgpIHt9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7O0FBTUE7O0FBQ0E7O0FBSUE7O0FBRUE7Ozs7Ozs7Ozs7SUFKUSxPLEdBQVIsSyxDQUFRLE87O0FBTUQsSUFBTSxXQUFXLEdBQUcsU0FBQSxXQUFBLEdBQXBCLENBQUEsQ0FBQTs7OztBQXdCRCxTQUFBLFdBQUEsQ0FBQSxHQUFBLEVBQStCO0FBQ25DO0FBQ0E7QUFDQSxTQUFBLEdBQUE7QUFDRDs7SUFFRCxVOzs7Ozs7Ozs7OztTQUNFLG1CLEdBQUEsU0FBQSxtQkFBQSxHQUFtQztBQUNqQyxVQUFNLElBQUEsS0FBQSxDQUFOLGdEQUFNLENBQU47Ozs7RUFGSixxQjs7QUFNQSxJQUFNLFNBQU47QUFBQTtBQUFBLFlBQUE7QUFBQSxXQUFBLFNBQUEsR0FBQTtBQUNVLFNBQUEsY0FBQSxHQUFBLGlCQUFBO0FBQ0EsU0FBQSxnQkFBQSxHQUFBLGlCQUFBO0FBQ0EsU0FBQSxzQkFBQSxHQUFBLGlCQUFBO0FBQ0EsU0FBQSx5QkFBQSxHQUFBLEtBQUE7QUFDQSxTQUFBLGdCQUFBLEdBQUEsaUJBQUE7QUFDQSxTQUFBLG1CQUFBLEdBQUEsS0FBQTtBQUNBLFNBQUEsTUFBQSxHQUFBLEVBQUE7QUFDQSxTQUFBLGFBQUEsR0FBQSxFQUFBO0FBQ0EsU0FBQSxZQUFBLEdBQUEsRUFBQTtBQUNBLFNBQUEsVUFBQSxHQUFBLEVBQUE7QUFDQSxTQUFBLEtBQUEsR0FBQSxFQUFBO0FBQ0QsU0FBQSx1QkFBQSxHQUFBLElBQUE7QUFrUFI7O0FBOVBELEVBQUEsU0FBQSxDQUFBLFVBQUEsR0FjRSxTQUFBLFVBQUEsQ0FBQSxNQUFBLEVBQTJDO0FBQ3pDLFFBQUksSUFBSSxHQUFHLElBQVgsSUFBVyxFQUFYO0FBQ0EsSUFBQSxJQUFJLENBQUosS0FBQSxDQUFBLE1BQUE7QUFDQSxXQUFBLElBQUE7QUFqQkosR0FBQTs7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QUE7OztnQkFHRixvQixHQUFBLFNBQUEsb0JBQUEsQ0FBQSxRQUFBLEVBQW9FO0FBQ2xFLFFBQUksUUFBUSxHQUFHLEtBQUEsMkJBQUEsRUFBZixtQkFBZSxFQUFmOztBQUNBLFFBQUksQ0FBSixRQUFBLEVBQWU7O0FBRWYsU0FBSyxJQUFMLElBQUEsSUFBQSxRQUFBLEVBQTJCO0FBQ3pCLE1BQUEsUUFBUSxDQUFBLElBQUEsRUFBTyxRQUFRLENBQXZCLElBQXVCLENBQWYsQ0FBUjtBQUNEOzs7OztVQU9ILEksR0FBQSxTQUFBLElBQUEsR0FBSSxDOztVQVVKLEcsR0FBQSxTQUFBLEdBQUEsQ0FBQSxHQUFBLEVBQWU7QUFDYixXQUFPLEtBQVAsR0FBTyxDQUFQOzs7VUFHRixHLEdBQUEsU0FBQSxHQUFBLENBQUEsR0FBQSxFQUFBLEtBQUEsRUFBMkI7QUFDekIsU0FBQSxHQUFBLElBQUEsS0FBQTtBQUNBOzs7VUFHRixhLEdBQUEsU0FBQSxhQUFBLENBQUEsS0FBQSxFQUEyQjtBQUN6QixzQkFBTSxJQUFOLEVBQUEsS0FBQTtBQUNBOzs7VUFHRixPLEdBQUEsU0FBQSxPQUFBLEdBQU8sQzs7Ozs7O0tBekVDLDJCO0FBQUQsYUFBQSxDQUFBLEVBQUEsQ0FBQSxHQUE2QixZQUFZLENBQVosVUFBQSxDQUE3QixJQUE2QixDQUE3QjtBQUNBLGFBQUEsQ0FBQSxPQUFBLEdBQUEsSUFBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIE1ldGEsXG4gIElubmVyUmVmZXJlbmNlRmFjdG9yeSxcbiAgUHJvcGVydHlSZWZlcmVuY2UsXG4gIENMQVNTX01FVEEsXG59IGZyb20gJ0BnbGltbWVyL29iamVjdC1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgZGljdCwgYXNzaWduLCBpbml0aWFsaXplR3VpZCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgTWl4aW4sIGV4dGVuZCBhcyBleHRlbmRDbGFzcywgdG9NaXhpbiwgcmVsaW5rU3ViY2xhc3Nlcywgd3JhcE1ldGhvZCB9IGZyb20gJy4vbWl4aW4nO1xuXG5jb25zdCB7IGlzQXJyYXkgfSA9IEFycmF5O1xuXG5pbXBvcnQgeyBST09UIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBPcHRpb24sIERpY3QgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGJ1bXAgfSBmcm9tICdAZ2xpbW1lci92YWxpZGF0b3InO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfQ0FDSEUgPSBmdW5jdGlvbiBFTVBUWV9DQUNIRSgpIHt9O1xuXG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdFdpdGhNaXhpbnMge1xuICBbQ0xBU1NfTUVUQV06IENsYXNzTWV0YTtcbiAgX21ldGE6IE1ldGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFuY2VXaXRoTWl4aW5zIHtcbiAgY29uc3RydWN0b3I6IE9iamVjdFdpdGhNaXhpbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2xpbW1lck9iamVjdEZhY3Rvcnk8VD4ge1xuICBuZXcgPFU+KGF0dHJzPzogVSk6IEdsaW1tZXJPYmplY3QgJiBUICYgVTtcbiAgZXh0ZW5kKCk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PE9iamVjdD47XG4gIGV4dGVuZDxUPihleHRlbnNpb246IFQpOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxUPjtcbiAgZXh0ZW5kKC4uLmV4dGVuc2lvbnM6IE9iamVjdFtdKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8T2JqZWN0PjtcbiAgY3JlYXRlPFU+KGF0dHJzPzogVSk6IEdsaW1tZXJPYmplY3QgJiBUICYgVTtcbiAgcmVvcGVuPFU+KGV4dGVuc2lvbnM6IFUpOiB2b2lkO1xuICByZW9wZW5DbGFzczxVPihleHRlbnNpb25zOiBVKTogdm9pZDtcbiAgbWV0YUZvclByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBPYmplY3Q7XG4gIGVhY2hDb21wdXRlZFByb3BlcnR5KGNhbGxiYWNrOiAoczogc3RyaW5nLCBvOiBPYmplY3QpID0+IHZvaWQpOiB2b2lkO1xuICBbQ0xBU1NfTUVUQV06IEluc3RhbmNlTWV0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR1cmJvY2hhcmdlPFQ+KG9iajogVCk6IFQge1xuICAvLyBmdW5jdGlvbiBEdW1teSgpIHt9XG4gIC8vIER1bW15LnByb3RvdHlwZSA9IG9iajtcbiAgcmV0dXJuIG9iajtcbn1cblxuYWJzdHJhY3QgY2xhc3MgU2VhbGVkTWV0YSBleHRlbmRzIE1ldGEge1xuICBhZGRSZWZlcmVuY2VUeXBlRm9yKC4uLl9hcmdzOiBhbnlbXSk6IElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBtb2RpZnkgcmVmZXJlbmNlIHR5cGVzIG9uIGEgc2VhbGVkIG1ldGEnKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xhc3NNZXRhIHtcbiAgcHJpdmF0ZSByZWZlcmVuY2VUeXBlcyA9IGRpY3Q8SW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4+KCk7XG4gIHByaXZhdGUgcHJvcGVydHlNZXRhZGF0YSA9IGRpY3Q8YW55PigpO1xuICBwcml2YXRlIGNvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSBkaWN0PGFueVtdPigpO1xuICBwcml2YXRlIGhhc0NvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSBmYWxzZTtcbiAgcHJpdmF0ZSBtZXJnZWRQcm9wZXJ0aWVzID0gZGljdDxPYmplY3Q+KCk7XG4gIHByaXZhdGUgaGFzTWVyZ2VkUHJvcGVydGllcyA9IGZhbHNlO1xuICBwcml2YXRlIG1peGluczogTWl4aW5bXSA9IFtdO1xuICBwcml2YXRlIGFwcGxpZWRNaXhpbnM6IE1peGluW10gPSBbXTtcbiAgcHJpdmF0ZSBzdGF0aWNNaXhpbnM6IE1peGluW10gPSBbXTtcbiAgcHJpdmF0ZSBzdWJjbGFzc2VzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+W10gPSBbXTtcbiAgcHJpdmF0ZSBzbG90czogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIEluc3RhbmNlTWV0YUNvbnN0cnVjdG9yOiBPcHRpb248dHlwZW9mIE1ldGE+ID0gbnVsbDtcblxuICBzdGF0aWMgZnJvbVBhcmVudChwYXJlbnQ6IE9wdGlvbjxDbGFzc01ldGE+KSB7XG4gICAgbGV0IG1ldGEgPSBuZXcgdGhpcygpO1xuICAgIG1ldGEucmVzZXQocGFyZW50KTtcbiAgICByZXR1cm4gbWV0YTtcbiAgfVxuXG4gIHN0YXRpYyBmb3Iob2JqZWN0OiBPYmplY3RXaXRoTWl4aW5zIHwgSW5zdGFuY2VXaXRoTWl4aW5zKTogT3B0aW9uPENsYXNzTWV0YT4ge1xuICAgIGlmIChDTEFTU19NRVRBIGluIG9iamVjdCkgcmV0dXJuIChvYmplY3QgYXMgT2JqZWN0V2l0aE1peGlucylbQ0xBU1NfTUVUQV07XG4gICAgZWxzZSBpZiAob2JqZWN0LmNvbnN0cnVjdG9yKVxuICAgICAgcmV0dXJuIChvYmplY3QgYXMgSW5zdGFuY2VXaXRoTWl4aW5zKS5jb25zdHJ1Y3RvcltDTEFTU19NRVRBXSB8fCBudWxsO1xuICAgIGVsc2UgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpbml0KG9iamVjdDogR2xpbW1lck9iamVjdCwgYXR0cnM6IE9wdGlvbjxEaWN0Pikge1xuICAgIGlmICh0eXBlb2YgYXR0cnMgIT09ICdvYmplY3QnIHx8IGF0dHJzID09PSBudWxsKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSB7XG4gICAgICBsZXQgY29uY2F0UHJvcHMgPSB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXM7XG4gICAgICBmb3IgKGxldCBwcm9wIGluIGNvbmNhdFByb3BzKSB7XG4gICAgICAgIGlmIChwcm9wIGluIGF0dHJzKSB7XG4gICAgICAgICAgbGV0IGNvbmNhdCA9IGNvbmNhdFByb3BzW3Byb3BdLnNsaWNlKCk7XG4gICAgICAgICAgb2JqZWN0W3Byb3BdID0gY29uY2F0LmNvbmNhdChhdHRyc1twcm9wXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNNZXJnZWRQcm9wZXJ0aWVzKSB7XG4gICAgICBsZXQgbWVyZ2VkUHJvcHMgPSB0aGlzLm1lcmdlZFByb3BlcnRpZXM7XG4gICAgICBmb3IgKGxldCBwcm9wIGluIG1lcmdlZFByb3BzKSB7XG4gICAgICAgIGlmIChwcm9wIGluIGF0dHJzKSB7XG4gICAgICAgICAgbGV0IG1lcmdlZCA9IGFzc2lnbih7fSwgbWVyZ2VkUHJvcHNbcHJvcF0pO1xuICAgICAgICAgIG9iamVjdFtwcm9wXSA9IGFzc2lnbihtZXJnZWQsIGF0dHJzW3Byb3BdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFkZFN0YXRpY01peGluKG1peGluOiBNaXhpbikge1xuICAgIHRoaXMuc3RhdGljTWl4aW5zLnB1c2gobWl4aW4pO1xuICB9XG5cbiAgYWRkTWl4aW4obWl4aW46IE1peGluKSB7XG4gICAgdGhpcy5taXhpbnMucHVzaChtaXhpbik7XG4gIH1cblxuICBnZXRTdGF0aWNNaXhpbnMoKTogTWl4aW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGljTWl4aW5zO1xuICB9XG5cbiAgZ2V0TWl4aW5zKCk6IE1peGluW10ge1xuICAgIHJldHVybiB0aGlzLm1peGlucztcbiAgfVxuXG4gIGFkZEFwcGxpZWRNaXhpbihtaXhpbjogTWl4aW4pIHtcbiAgICB0aGlzLmFwcGxpZWRNaXhpbnMucHVzaChtaXhpbik7XG4gIH1cblxuICBoYXNBcHBsaWVkTWl4aW4obWl4aW46IE1peGluKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbGllZE1peGlucy5pbmRleE9mKG1peGluKSAhPT0gLTE7XG4gIH1cblxuICBnZXRBcHBsaWVkTWl4aW5zKCk6IE1peGluW10ge1xuICAgIHJldHVybiB0aGlzLmFwcGxpZWRNaXhpbnM7XG4gIH1cblxuICBoYXNTdGF0aWNNaXhpbihtaXhpbjogTWl4aW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0aWNNaXhpbnMuaW5kZXhPZihtaXhpbikgIT09IC0xO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QWxsTWl4aW5zKFN1YmNsYXNzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+LCBQYXJlbnQ6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5nZXRNaXhpbnMoKS5mb3JFYWNoKChtOiBNaXhpbikgPT4gbS5leHRlbmRQcm90b3R5cGVPbnRvKFN1YmNsYXNzLCBQYXJlbnQpKTtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5nZXRTdGF0aWNNaXhpbnMoKS5mb3JFYWNoKChtOiBNaXhpbikgPT4gbS5leHRlbmRTdGF0aWMoU3ViY2xhc3MpKTtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5zZWFsKCk7XG4gIH1cblxuICBhZGRTdWJjbGFzcyhjb25zdHJ1Y3RvcjogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICAgIHRoaXMuc3ViY2xhc3Nlcy5wdXNoKGNvbnN0cnVjdG9yKTtcbiAgfVxuXG4gIGdldFN1YmNsYXNzZXMoKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PltdIHtcbiAgICByZXR1cm4gdGhpcy5zdWJjbGFzc2VzO1xuICB9XG5cbiAgYWRkUHJvcGVydHlNZXRhZGF0YShwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5wcm9wZXJ0eU1ldGFkYXRhW3Byb3BlcnR5XSA9IHZhbHVlO1xuICB9XG5cbiAgbWV0YWRhdGFGb3JQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogT2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eU1ldGFkYXRhW3Byb3BlcnR5XTtcbiAgfVxuXG4gIGFkZFJlZmVyZW5jZVR5cGVGb3IocHJvcGVydHk6IHN0cmluZywgdHlwZTogSW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4pIHtcbiAgICB0aGlzLnJlZmVyZW5jZVR5cGVzW3Byb3BlcnR5XSA9IHR5cGU7XG4gIH1cblxuICBhZGRTbG90Rm9yKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICB0aGlzLnNsb3RzLnB1c2gocHJvcGVydHkpO1xuICB9XG5cbiAgaGFzQ29uY2F0ZW5hdGVkUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIChwcm9wZXJ0eSBhcyBzdHJpbmcpIGluIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcztcbiAgfVxuXG4gIGdldENvbmNhdGVuYXRlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wZXJ0eV07XG4gIH1cblxuICBnZXRDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGFkZENvbmNhdGVuYXRlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmhhc0NvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSB0cnVlO1xuXG4gICAgaWYgKChwcm9wZXJ0eSBhcyBzdHJpbmcpIGluIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcykge1xuICAgICAgbGV0IHZhbCA9IHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wZXJ0eV0uY29uY2F0KHZhbHVlKTtcbiAgICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wZXJ0eV0gPSB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBoYXNNZXJnZWRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmhhc01lcmdlZFByb3BlcnRpZXMpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKHByb3BlcnR5IGFzIHN0cmluZykgaW4gdGhpcy5tZXJnZWRQcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0TWVyZ2VkUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IE9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV07XG4gIH1cblxuICBnZXRNZXJnZWRQcm9wZXJ0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5tZXJnZWRQcm9wZXJ0aWVzKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGFkZE1lcmdlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiBEaWN0KSB7XG4gICAgdGhpcy5oYXNNZXJnZWRQcm9wZXJ0aWVzID0gdHJ1ZTtcblxuICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgWW91IHBhc3NlZCBpbiBcXGAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHZhbHVlXG4gICAgICAgICl9XFxgIGFzIHRoZSB2YWx1ZSBmb3IgXFxgZm9vXFxgIGJ1dCBcXGBmb29cXGAgY2Fubm90IGJlIGFuIEFycmF5YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoKHByb3BlcnR5IGFzIHN0cmluZykgaW4gdGhpcy5tZXJnZWRQcm9wZXJ0aWVzICYmIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV0gJiYgdmFsdWUpIHtcbiAgICAgIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV0gPSBtZXJnZU1lcmdlZFByb3BlcnRpZXMoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICAodGhpcyBhcyBhbnkpLm1lcmdlZFByb3BlcnRpZXNbcHJvcGVydHldXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlID09PSBudWxsID8gdmFsdWUgOiB2YWx1ZSB8fCB7fTtcbiAgICAgIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXRSZWZlcmVuY2VUeXBlcygpOiBEaWN0PElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+PiB7XG4gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlVHlwZXM7XG4gIH1cblxuICBnZXRQcm9wZXJ0eU1ldGFkYXRhKCk6IERpY3Q8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHlNZXRhZGF0YTtcbiAgfVxuXG4gIHJlc2V0KHBhcmVudDogT3B0aW9uPENsYXNzTWV0YT4pIHtcbiAgICB0aGlzLnJlZmVyZW5jZVR5cGVzID0gZGljdDxJbm5lclJlZmVyZW5jZUZhY3Rvcnk8YW55Pj4oKTtcbiAgICB0aGlzLnByb3BlcnR5TWV0YWRhdGEgPSBkaWN0KCk7XG4gICAgdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gZGljdDxhbnlbXT4oKTtcbiAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXMgPSBkaWN0PE9iamVjdD4oKTtcblxuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHRoaXMuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcyA9IHBhcmVudC5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzO1xuICAgICAgZm9yIChsZXQgcHJvcCBpbiBwYXJlbnQuY29uY2F0ZW5hdGVkUHJvcGVydGllcykge1xuICAgICAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcF0gPSBwYXJlbnQuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wXS5zbGljZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmhhc01lcmdlZFByb3BlcnRpZXMgPSBwYXJlbnQuaGFzTWVyZ2VkUHJvcGVydGllcztcbiAgICAgIGZvciAobGV0IHByb3AgaW4gcGFyZW50Lm1lcmdlZFByb3BlcnRpZXMpIHtcbiAgICAgICAgdGhpcy5tZXJnZWRQcm9wZXJ0aWVzW3Byb3BdID0gYXNzaWduKHt9LCBwYXJlbnQubWVyZ2VkUHJvcGVydGllc1twcm9wXSk7XG4gICAgICB9XG5cbiAgICAgIGFzc2lnbih0aGlzLnJlZmVyZW5jZVR5cGVzLCBwYXJlbnQucmVmZXJlbmNlVHlwZXMpO1xuICAgICAgYXNzaWduKHRoaXMucHJvcGVydHlNZXRhZGF0YSwgcGFyZW50LnByb3BlcnR5TWV0YWRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2VhbChvYmo6IE9iamVjdCkge1xuICAgIGxldCBtZXRhID0gTWV0YS5mb3Iob2JqKTtcbiAgICBsZXQgZnJlc2ggPSBuZXcgdGhpcy5JbnN0YW5jZU1ldGFDb25zdHJ1Y3RvciEob2JqLCB7fSk7XG4gICAgbGV0IHJlZmVyZW5jZVR5cGVzID0gbWV0YS5nZXRSZWZlcmVuY2VUeXBlcygpO1xuICAgIGxldCBzbG90cyA9IG1ldGEuZ2V0U2xvdHMoKTtcblxuICAgIHR1cmJvY2hhcmdlKGFzc2lnbihyZWZlcmVuY2VUeXBlcywgdGhpcy5yZWZlcmVuY2VUeXBlcykpO1xuICAgIHR1cmJvY2hhcmdlKGFzc2lnbihzbG90cywgZnJlc2guZ2V0U2xvdHMoKSkpO1xuICB9XG5cbiAgc2VhbCgpIHtcbiAgICBsZXQgcmVmZXJlbmNlVHlwZXM6IERpY3Q8SW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4+ID0gdHVyYm9jaGFyZ2UoXG4gICAgICBhc3NpZ24oe30sIHRoaXMucmVmZXJlbmNlVHlwZXMpXG4gICAgKTtcbiAgICB0dXJib2NoYXJnZSh0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXMpO1xuICAgIHR1cmJvY2hhcmdlKHRoaXMubWVyZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoIXRoaXMuaGFzTWVyZ2VkUHJvcGVydGllcyAmJiAhdGhpcy5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSB7XG4gICAgICB0aGlzLmluaXQgPSBmdW5jdGlvbigpIHt9O1xuICAgIH1cblxuICAgIGxldCBzbG90cyA9IHRoaXMuc2xvdHM7XG5cbiAgICBjbGFzcyBTbG90cyB7XG4gICAgICBbaW5kZXg6IHN0cmluZ106IHVua25vd247XG5cbiAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzbG90cy5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgIHRoaXNbbmFtZV0gPSBFTVBUWV9DQUNIRTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5JbnN0YW5jZU1ldGFDb25zdHJ1Y3RvciA9IGNsYXNzIGV4dGVuZHMgU2VhbGVkTWV0YSB7XG4gICAgICBwcm90ZWN0ZWQgc2xvdHM6IFNsb3RzID0gbmV3IFNsb3RzKCk7XG4gICAgICBwdWJsaWMgcmVmZXJlbmNlVHlwZXM6IERpY3Q8SW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4+ID0gcmVmZXJlbmNlVHlwZXM7XG5cbiAgICAgIGdldFJlZmVyZW5jZVR5cGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VUeXBlcztcbiAgICAgIH1cblxuICAgICAgcmVmZXJlbmNlVHlwZUZvcihwcm9wZXJ0eTogc3RyaW5nKTogSW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VUeXBlc1twcm9wZXJ0eV0gfHwgUHJvcGVydHlSZWZlcmVuY2U7XG4gICAgICB9XG5cbiAgICAgIGdldFNsb3RzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zbG90cztcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdHVyYm9jaGFyZ2UodGhpcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVyZ2VNZXJnZWRQcm9wZXJ0aWVzKGF0dHJzOiBEaWN0LCBwYXJlbnQ6IERpY3QpIHtcbiAgbGV0IG1lcmdlZCA9IGFzc2lnbih7fSwgcGFyZW50KTtcblxuICBmb3IgKGxldCBwcm9wIGluIGF0dHJzKSB7XG4gICAgaWYgKHByb3AgaW4gcGFyZW50ICYmIHR5cGVvZiBwYXJlbnRbcHJvcF0gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGF0dHJzW3Byb3BdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBsZXQgd3JhcHBlZCA9IHdyYXBNZXRob2QocGFyZW50LCBwcm9wLCBhdHRyc1twcm9wXSBhcyBhbnkpO1xuICAgICAgbWVyZ2VkW3Byb3BdID0gd3JhcHBlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVyZ2VkW3Byb3BdID0gYXR0cnNbcHJvcF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuZXhwb3J0IGNsYXNzIEluc3RhbmNlTWV0YSBleHRlbmRzIENsYXNzTWV0YSB7XG4gIHB1YmxpYyBbQ0xBU1NfTUVUQV06IENsYXNzTWV0YSA9IENsYXNzTWV0YS5mcm9tUGFyZW50KG51bGwpO1xuXG4gIHN0YXRpYyBmcm9tUGFyZW50KHBhcmVudDogT3B0aW9uPEluc3RhbmNlTWV0YT4pOiBJbnN0YW5jZU1ldGEge1xuICAgIHJldHVybiBzdXBlci5mcm9tUGFyZW50KHBhcmVudCkgYXMgSW5zdGFuY2VNZXRhO1xuICB9XG5cbiAgcmVzZXQocGFyZW50OiBJbnN0YW5jZU1ldGEpIHtcbiAgICBzdXBlci5yZXNldChwYXJlbnQpO1xuICAgIGlmIChwYXJlbnQpIHRoaXNbQ0xBU1NfTUVUQV0ucmVzZXQocGFyZW50W0NMQVNTX01FVEFdKTtcbiAgfVxuXG4gIHNlYWwoKSB7XG4gICAgc3VwZXIuc2VhbCgpO1xuICAgIHRoaXNbQ0xBU1NfTUVUQV0uc2VhbCgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdsaW1tZXJPYmplY3Qge1xuICBbaW5kZXg6IHN0cmluZ106IHVua25vd247XG5cbiAgc3RhdGljIFtDTEFTU19NRVRBXTogSW5zdGFuY2VNZXRhID0gSW5zdGFuY2VNZXRhLmZyb21QYXJlbnQobnVsbCk7XG4gIHN0YXRpYyBpc0NsYXNzID0gdHJ1ZTtcblxuICBzdGF0aWMgZXh0ZW5kKCk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4gJiB0eXBlb2YgR2xpbW1lck9iamVjdDtcbiAgc3RhdGljIGV4dGVuZDxUPihleHRlbnNpb246IFQpOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxUPiAmIHR5cGVvZiBHbGltbWVyT2JqZWN0O1xuICBzdGF0aWMgZXh0ZW5kKC4uLmV4dGVuc2lvbnM6IE9iamVjdFtdKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiAmIHR5cGVvZiBHbGltbWVyT2JqZWN0O1xuXG4gIHN0YXRpYyBleHRlbmQodGhpczogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiwgLi4uZXh0ZW5zaW9uczogYW55W10pIHtcbiAgICByZXR1cm4gZXh0ZW5kQ2xhc3ModGhpcywgLi4uZXh0ZW5zaW9ucyk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlKGF0dHJzPzogRGljdCB8IG51bGwpOiBHbGltbWVyT2JqZWN0IHtcbiAgICByZXR1cm4gbmV3IHRoaXMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHJlb3BlbjxVPihleHRlbnNpb25zOiBVKTogdm9pZCB7XG4gICAgdG9NaXhpbihleHRlbnNpb25zKS5leHRlbmRQcm90b3R5cGUodGhpcyBhcyBhbnkpO1xuICAgIHRoaXNbQ0xBU1NfTUVUQV0uc2VhbCgpO1xuXG4gICAgcmVsaW5rU3ViY2xhc3Nlcyh0aGlzIGFzIGFueSk7XG4gIH1cblxuICBzdGF0aWMgcmVvcGVuQ2xhc3M8VT4oZXh0ZW5zaW9uczogVSk6IHZvaWQge1xuICAgIHRvTWl4aW4oZXh0ZW5zaW9ucykuZXh0ZW5kU3RhdGljKHRoaXMgYXMgYW55KTtcbiAgICB0aGlzW0NMQVNTX01FVEFdLnNlYWwoKTtcbiAgfVxuXG4gIHN0YXRpYyBtZXRhRm9yUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IE9iamVjdCB7XG4gICAgbGV0IHZhbHVlID0gdGhpc1tDTEFTU19NRVRBXS5tZXRhZGF0YUZvclByb3BlcnR5KHByb3BlcnR5KTtcbiAgICBpZiAoIXZhbHVlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgbWV0YUZvclByb3BlcnR5KCkgY291bGQgbm90IGZpbmQgYSBjb21wdXRlZCBwcm9wZXJ0eSB3aXRoIGtleSAnJHtwcm9wZXJ0eX0nLmBcbiAgICAgICk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgc3RhdGljIGVhY2hDb21wdXRlZFByb3BlcnR5KGNhbGxiYWNrOiAoczogc3RyaW5nLCBvOiBPYmplY3QpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBsZXQgbWV0YWRhdGEgPSB0aGlzW0NMQVNTX01FVEFdLmdldFByb3BlcnR5TWV0YWRhdGEoKTtcbiAgICBpZiAoIW1ldGFkYXRhKSByZXR1cm47XG5cbiAgICBmb3IgKGxldCBwcm9wIGluIG1ldGFkYXRhKSB7XG4gICAgICBjYWxsYmFjayhwcm9wLCBtZXRhZGF0YVtwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgX3N1cGVyID0gUk9PVDtcbiAgX21ldGEgPSBudWxsO1xuICBfZ3VpZCE6IG51bWJlcjsgLy8gU2V0IGJ5IGluaXRpYWxpemVHdWlkKHRoaXMpIGluIGNvbnN0cnVjdG9yXG5cbiAgaW5pdCgpIHt9XG5cbiAgY29uc3RydWN0b3IoYXR0cnM/OiBEaWN0IHwgbnVsbCkge1xuICAgIGlmIChhdHRycykgYXNzaWduKHRoaXMsIGF0dHJzKTtcbiAgICAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgR2xpbW1lck9iamVjdClbQ0xBU1NfTUVUQV0uaW5pdCh0aGlzLCBhdHRycyB8fCBudWxsKTtcbiAgICB0aGlzLl9zdXBlciA9IFJPT1Q7XG4gICAgaW5pdGlhbGl6ZUd1aWQodGhpcyk7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBnZXQoa2V5OiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB0aGlzW2tleV07XG4gIH1cblxuICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzW2tleV0gPSB2YWx1ZTtcbiAgICBidW1wKCk7XG4gIH1cblxuICBzZXRQcm9wZXJ0aWVzKGF0dHJzOiBPYmplY3QpIHtcbiAgICBhc3NpZ24odGhpcywgYXR0cnMpO1xuICAgIGJ1bXAoKTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7fVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==

@@ -1,30 +0,40 @@

'use strict';
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
value: true
});
exports.ROOT = ROOT;
exports.hasSuper = hasSuper;
exports.checkHasSuper = void 0;
var HAS_SUPER_PATTERN = /\.(_super|call\(this|apply\(this)/;
var checkHasSuper = exports.checkHasSuper = function () {
var sourceAvailable = function () {
return this;
}.toString().indexOf('return this') > -1;
if (sourceAvailable) {
return function checkHasSuper(func) {
return HAS_SUPER_PATTERN.test(func.toString());
};
}
return function checkHasSuper() {
return true;
var checkHasSuper = function () {
var sourceAvailable = function () {
return this;
}.toString().indexOf('return this') > -1;
if (sourceAvailable) {
return function checkHasSuper(func) {
return HAS_SUPER_PATTERN.test(func.toString());
};
}
return function checkHasSuper() {
return true;
};
}();
exports.checkHasSuper = checkHasSuper;
function ROOT() {}
ROOT.__hasSuper = false;
function hasSuper(func) {
if (func['__hasSuper'] === undefined) {
func['__hasSuper'] = checkHasSuper(func);
}
return func['__hasSuper'];
if (func['__hasSuper'] === undefined) {
func['__hasSuper'] = checkHasSuper(func);
}
return func['__hasSuper'];
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7UUF1Qk0sSSxHQUFBLEk7UUFHQSxRLEdBQUEsUTtBQXhCTixJQUFNLG9CQUFOLG1DQUFBO0FBRU8sSUFBTSx3Q0FBaUIsWUFBQTtBQUM1QixRQUFJLGtCQUNGLFlBQUE7QUFDRSxlQUFBLElBQUE7QUFERixLQUFBLENBQUEsUUFBQSxHQUFBLE9BQUEsQ0FBQSxhQUFBLElBSTRCLENBTDlCLENBQUE7QUFPQSxRQUFBLGVBQUEsRUFBcUI7QUFDbkIsZUFBTyxTQUFBLGFBQUEsQ0FBQSxJQUFBLEVBQXFDO0FBQzFDLG1CQUFPLGtCQUFBLElBQUEsQ0FBdUIsS0FBOUIsUUFBOEIsRUFBdkIsQ0FBUDtBQURGLFNBQUE7QUFHRDtBQUVELFdBQU8sU0FBQSxhQUFBLEdBQXNCO0FBQzNCLGVBQUEsSUFBQTtBQURGLEtBQUE7QUFkSyxDQUF1QixFQUF2QjtBQW1CRCxTQUFBLElBQUEsR0FBOEIsQ0FBSTtBQUN2QyxLQUFBLFVBQUEsR0FBQSxLQUFBO0FBRUssU0FBQSxRQUFBLENBQUEsSUFBQSxFQUF3QztBQUM1QyxRQUFJLEtBQUEsWUFBQSxNQUFKLFNBQUEsRUFBc0M7QUFDcEMsYUFBQSxZQUFBLElBQXFCLGNBQXJCLElBQXFCLENBQXJCO0FBQ0Q7QUFDRCxXQUFPLEtBQVAsWUFBTyxDQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaWN0IH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5cbmNvbnN0IEhBU19TVVBFUl9QQVRURVJOID0gL1xcLihfc3VwZXJ8Y2FsbFxcKHRoaXN8YXBwbHlcXCh0aGlzKS87XG5cbmV4cG9ydCBjb25zdCBjaGVja0hhc1N1cGVyID0gKGZ1bmN0aW9uKCkge1xuICBsZXQgc291cmNlQXZhaWxhYmxlID1cbiAgICBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAgIC50b1N0cmluZygpXG4gICAgICAuaW5kZXhPZigncmV0dXJuIHRoaXMnKSA+IC0xO1xuXG4gIGlmIChzb3VyY2VBdmFpbGFibGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gY2hlY2tIYXNTdXBlcihmdW5jOiBGdW5jdGlvbikge1xuICAgICAgcmV0dXJuIEhBU19TVVBFUl9QQVRURVJOLnRlc3QoZnVuYy50b1N0cmluZygpKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGNoZWNrSGFzU3VwZXIoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG59KSgpO1xuXG5leHBvcnQgZnVuY3Rpb24gUk9PVCguLi5fYXJnczogYW55W10pIHt9XG4oUk9PVCBhcyBhbnkpLl9faGFzU3VwZXIgPSBmYWxzZTtcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1N1cGVyKGZ1bmM6IEZ1bmN0aW9uICYgRGljdCkge1xuICBpZiAoZnVuY1snX19oYXNTdXBlciddID09PSB1bmRlZmluZWQpIHtcbiAgICBmdW5jWydfX2hhc1N1cGVyJ10gPSBjaGVja0hhc1N1cGVyKGZ1bmMpO1xuICB9XG4gIHJldHVybiBmdW5jWydfX2hhc1N1cGVyJ107XG59XG4iXSwic291cmNlUm9vdCI6IiJ9
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFFQSxJQUFNLGlCQUFpQixHQUF2QixtQ0FBQTs7QUFFTyxJQUFNLGFBQWEsR0FBSSxZQUFBO0FBQzVCLE1BQUksZUFBZSxHQUNqQixZQUFBO0FBQ0UsV0FBQSxJQUFBO0FBREYsR0FBQSxDQUFBLFFBQUEsR0FBQSxPQUFBLENBQUEsYUFBQSxJQUk0QixDQUw5QixDQUFBOztBQU9BLE1BQUEsZUFBQSxFQUFxQjtBQUNuQixXQUFPLFNBQUEsYUFBQSxDQUFBLElBQUEsRUFBcUM7QUFDMUMsYUFBTyxpQkFBaUIsQ0FBakIsSUFBQSxDQUF1QixJQUFJLENBQWxDLFFBQThCLEVBQXZCLENBQVA7QUFERixLQUFBO0FBR0Q7O0FBRUQsU0FBTyxTQUFBLGFBQUEsR0FBc0I7QUFDM0IsV0FBQSxJQUFBO0FBREYsR0FBQTtBQWRLLENBQXVCLEVBQXZCOzs7O0FBbUJELFNBQUEsSUFBQSxHQUE4QixDQUFJOztBQUN2QyxJQUFZLENBQVosVUFBQSxHQUFBLEtBQUE7O0FBRUssU0FBQSxRQUFBLENBQUEsSUFBQSxFQUF3QztBQUM1QyxNQUFJLElBQUksQ0FBSixZQUFJLENBQUosS0FBSixTQUFBLEVBQXNDO0FBQ3BDLElBQUEsSUFBSSxDQUFKLFlBQUksQ0FBSixHQUFxQixhQUFhLENBQWxDLElBQWtDLENBQWxDO0FBQ0Q7O0FBQ0QsU0FBTyxJQUFJLENBQVgsWUFBVyxDQUFYO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaWN0IH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5cbmNvbnN0IEhBU19TVVBFUl9QQVRURVJOID0gL1xcLihfc3VwZXJ8Y2FsbFxcKHRoaXN8YXBwbHlcXCh0aGlzKS87XG5cbmV4cG9ydCBjb25zdCBjaGVja0hhc1N1cGVyID0gKGZ1bmN0aW9uKCkge1xuICBsZXQgc291cmNlQXZhaWxhYmxlID1cbiAgICBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAgIC50b1N0cmluZygpXG4gICAgICAuaW5kZXhPZigncmV0dXJuIHRoaXMnKSA+IC0xO1xuXG4gIGlmIChzb3VyY2VBdmFpbGFibGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gY2hlY2tIYXNTdXBlcihmdW5jOiBGdW5jdGlvbikge1xuICAgICAgcmV0dXJuIEhBU19TVVBFUl9QQVRURVJOLnRlc3QoZnVuYy50b1N0cmluZygpKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGNoZWNrSGFzU3VwZXIoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG59KSgpO1xuXG5leHBvcnQgZnVuY3Rpb24gUk9PVCguLi5fYXJnczogYW55W10pIHt9XG4oUk9PVCBhcyBhbnkpLl9faGFzU3VwZXIgPSBmYWxzZTtcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1N1cGVyKGZ1bmM6IEZ1bmN0aW9uICYgRGljdCkge1xuICBpZiAoZnVuY1snX19oYXNTdXBlciddID09PSB1bmRlZmluZWQpIHtcbiAgICBmdW5jWydfX2hhc1N1cGVyJ10gPSBjaGVja0hhc1N1cGVyKGZ1bmMpO1xuICB9XG4gIHJldHVybiBmdW5jWydfX2hhc1N1cGVyJ107XG59XG4iXSwic291cmNlUm9vdCI6IiJ9
var _a;
import { ComputedReferenceBlueprint, Meta } from '@glimmer/object-reference';

@@ -6,138 +7,169 @@ import { EMPTY_CACHE } from './object';

export class ComputedBlueprint extends Blueprint {
constructor(accessor, deps = []) {
super();
this.metadata = {};
this.accessor = accessor;
this.deps = deps;
}
descriptor(_target, key, classMeta) {
classMeta.addReferenceTypeFor(key, ComputedReferenceBlueprint(key, this.deps));
classMeta.addPropertyMetadata(key, this.metadata);
classMeta.addSlotFor(key);
return new Computed(this.accessor);
}
property(...paths) {
this.deps = paths.map(d => d.split('.'));
return this;
}
meta(object) {
this.metadata = object;
return this;
}
volatile() {
return this;
}
constructor(accessor, deps = []) {
super();
this.metadata = {};
this.accessor = accessor;
this.deps = deps;
}
descriptor(_target, key, classMeta) {
classMeta.addReferenceTypeFor(key, ComputedReferenceBlueprint(key, this.deps));
classMeta.addPropertyMetadata(key, this.metadata);
classMeta.addSlotFor(key);
return new Computed(this.accessor);
}
property(...paths) {
this.deps = paths.map(d => d.split('.'));
return this;
}
meta(object) {
this.metadata = object;
return this;
}
volatile() {
return this;
}
}
class Computed {
constructor(accessor) {
this[_a] = true;
this.accessor = accessor;
this.enumerable = false;
this.configurable = false;
}
define(prototype, key, home) {
Object.defineProperty(prototype, key, wrapAccessor(home, key, this.accessor));
}
constructor(accessor) {
this[_a] = true;
this.accessor = accessor;
this.enumerable = false;
this.configurable = false;
}
define(prototype, key, home) {
Object.defineProperty(prototype, key, wrapAccessor(home, key, this.accessor));
}
}
_a = DESCRIPTOR;
function wrapAccessor(home, accessorName, _desc) {
let superDesc = getPropertyDescriptor(home, accessorName);
let originalGet;
let originalSet;
let desc = {
enumerable: true,
configurable: true
let superDesc = getPropertyDescriptor(home, accessorName);
let originalGet;
let originalSet;
let desc = {
enumerable: true,
configurable: true
};
let get = _desc.get;
if (get && get.length > 0) {
originalGet = function () {
return get.call(this, accessorName);
};
let get = _desc.get;
if (get && get.length > 0) {
originalGet = function () {
return get.call(this, accessorName);
};
} else {
originalGet = _desc.get;
}
let set = _desc.set;
if (set && set.length > 1) {
originalSet = function (value) {
return set.call(this, accessorName, value);
};
} else {
originalSet = _desc.set;
}
let cacheGet = function () {
if (Meta.exists(this)) {
let slot = Meta.for(this).getSlots()[accessorName];
if (slot !== EMPTY_CACHE) return slot;
}
return originalGet.call(this);
} else {
originalGet = _desc.get;
}
let set = _desc.set;
if (set && set.length > 1) {
originalSet = function (value) {
return set.call(this, accessorName, value);
};
let cacheSet;
if (originalSet) {
cacheSet = function (value) {
let meta = Meta.for(this);
let slots = meta.getSlots();
let ret = originalSet.call(this, value);
if (ret !== undefined) {
slots[accessorName] = ret;
}
};
} else {
cacheSet = function (value) {
let meta = Meta.for(this);
let slots = meta.getSlots();
if (value !== undefined) slots[accessorName] = value;
};
} else {
originalSet = _desc.set;
}
let cacheGet = function () {
if (Meta.exists(this)) {
let slot = Meta.for(this).getSlots()[accessorName];
if (slot !== EMPTY_CACHE) return slot;
}
if (!superDesc || 'value' in superDesc) {
desc.get = cacheGet;
desc.set = cacheSet;
return desc;
}
desc.get = function () {
let lastSuper = this._super;
this._super = function () {
return superDesc.get.call(this);
};
try {
return cacheGet.call(this);
} finally {
this._super = lastSuper;
}
return originalGet.call(this);
};
let cacheSet;
if (originalSet) {
cacheSet = function (value) {
let meta = Meta.for(this);
let slots = meta.getSlots();
let ret = originalSet.call(this, value);
if (ret !== undefined) {
slots[accessorName] = ret;
}
};
desc.set = function (val) {
let lastSuper = this._super;
this._super = function () {
return superDesc.set.call(this, val);
};
try {
return cacheSet.call(this, val);
} finally {
this._super = lastSuper;
}
} else {
cacheSet = function (value) {
let meta = Meta.for(this);
let slots = meta.getSlots();
if (value !== undefined) slots[accessorName] = value;
};
}
if (!superDesc || 'value' in superDesc) {
desc.get = cacheGet;
desc.set = cacheSet;
return desc;
}
desc.get = function () {
let lastSuper = this._super;
this._super = function () {
return superDesc.get.call(this);
};
try {
return cacheGet.call(this);
} finally {
this._super = lastSuper;
}
};
desc.set = function (val) {
let lastSuper = this._super;
this._super = function () {
return superDesc.set.call(this, val);
};
try {
return cacheSet.call(this, val);
} finally {
this._super = lastSuper;
}
};
return desc;
}
function getPropertyDescriptor(subject, name) {
let pd = Object.getOwnPropertyDescriptor(subject, name);
let proto = Object.getPrototypeOf(subject);
while (typeof pd === 'undefined' && proto !== null) {
pd = Object.getOwnPropertyDescriptor(proto, name);
proto = Object.getPrototypeOf(proto);
}
return pd;
let pd = Object.getOwnPropertyDescriptor(subject, name);
let proto = Object.getPrototypeOf(subject);
while (typeof pd === 'undefined' && proto !== null) {
pd = Object.getOwnPropertyDescriptor(proto, name);
proto = Object.getPrototypeOf(proto);
}
return pd;
}
export function computed(...args) {
let last = args.pop();
let deps = args;
if (typeof last === 'function') {
return new ComputedBlueprint({
get: last
}).property(...deps);
} else if (typeof last === 'object') {
return new ComputedBlueprint(last).property(...deps);
} else {
throw new TypeError('computed expects a function or an object as last argument');
}
let last = args.pop();
let deps = args;
if (typeof last === 'function') {
return new ComputedBlueprint({
get: last
}).property(...deps);
} else if (typeof last === 'object') {
return new ComputedBlueprint(last).property(...deps);
} else {
throw new TypeError('computed expects a function or an object as last argument');
}
}
export function observer(..._args) {}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvY29tcHV0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFNBQVMsMEJBQVQsRUFBcUMsSUFBckMsUUFBaUQsMkJBQWpEO0FBQ0EsU0FBUyxXQUFULFFBQXVDLFVBQXZDO0FBQ0EsU0FBcUIsU0FBckIsRUFBZ0MsVUFBaEMsUUFBa0QsU0FBbEQ7QUF5QkEsT0FBTSxNQUFPLGlCQUFQLFNBQWlDLFNBQWpDLENBQTBDO0FBSzlDLGdCQUFZLFFBQVosRUFBMEMsT0FBbUIsRUFBN0QsRUFBK0Q7QUFDN0Q7QUFITSxhQUFBLFFBQUEsR0FBbUIsRUFBbkI7QUFJTixhQUFLLFFBQUwsR0FBZ0IsUUFBaEI7QUFDQSxhQUFLLElBQUwsR0FBWSxJQUFaO0FBQ0Q7QUFFRCxlQUFXLE9BQVgsRUFBNEIsR0FBNUIsRUFBeUMsU0FBekMsRUFBNkQ7QUFDM0Qsa0JBQVUsbUJBQVYsQ0FBOEIsR0FBOUIsRUFBbUMsMkJBQTJCLEdBQTNCLEVBQWdDLEtBQUssSUFBckMsQ0FBbkM7QUFDQSxrQkFBVSxtQkFBVixDQUE4QixHQUE5QixFQUFtQyxLQUFLLFFBQXhDO0FBQ0Esa0JBQVUsVUFBVixDQUFxQixHQUFyQjtBQUNBLGVBQU8sSUFBSSxRQUFKLENBQWEsS0FBSyxRQUFsQixDQUFQO0FBQ0Q7QUFFRCxhQUFTLEdBQUcsS0FBWixFQUEyQjtBQUN6QixhQUFLLElBQUwsR0FBWSxNQUFNLEdBQU4sQ0FBVSxLQUFLLEVBQUUsS0FBRixDQUFRLEdBQVIsQ0FBZixDQUFaO0FBQ0EsZUFBTyxJQUFQO0FBQ0Q7QUFFRCxTQUFLLE1BQUwsRUFBbUI7QUFDakIsYUFBSyxRQUFMLEdBQWdCLE1BQWhCO0FBQ0EsZUFBTyxJQUFQO0FBQ0Q7QUFFRCxlQUFRO0FBQ04sZUFBTyxJQUFQO0FBQ0Q7QUE5QjZDO0FBaUNoRCxNQUFNLFFBQU4sQ0FBYztBQU9aLGdCQUFZLFFBQVosRUFBd0M7QUFGeEMsYUFBQSxF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TyxJQUFQLEtBQWdCLFFBQXBCLEVBQThCO0FBQ25DLGVBQU8sSUFBSSxpQkFBSixDQUFzQixJQUF0QixFQUFrRCxRQUFsRCxDQUEyRCxHQUFHLElBQTlELENBQVA7QUFDRCxLQUZNLE1BRUE7QUFDTCxjQUFNLElBQUksU0FBSixDQUFjLDJEQUFkLENBQU47QUFDRDtBQUNGO0FBRUQsT0FBTSxTQUFVLFFBQVYsQ0FBbUIsR0FBRyxLQUF0QixFQUFrQyxDQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcHV0ZWRSZWZlcmVuY2VCbHVlcHJpbnQsIE1ldGEgfSBmcm9tICdAZ2xpbW1lci9vYmplY3QtcmVmZXJlbmNlJztcbmltcG9ydCB7IEVNUFRZX0NBQ0hFLCBDbGFzc01ldGEgfSBmcm9tICcuL29iamVjdCc7XG5pbXBvcnQgeyBEZXNjcmlwdG9yLCBCbHVlcHJpbnQsIERFU0NSSVBUT1IgfSBmcm9tICcuL21peGluJztcblxuZXhwb3J0IGludGVyZmFjZSBDb21wdXRlZEdldENhbGxiYWNrIHtcbiAgKCk6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMZWdhY3lDb21wdXRlZEdldENhbGxiYWNrIHtcbiAgKGtleTogc3RyaW5nKTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXB1dGVkU2V0Q2FsbGJhY2sge1xuICAodmFsOiBhbnkpOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGVnYWN5Q29tcHV0ZWRTZXRDYWxsYmFjayB7XG4gIChrZXk6IHN0cmluZywgdmFsOiBhbnkpOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcHV0ZWREZXNjcmlwdG9yIHtcbiAgZ2V0PzogQ29tcHV0ZWRHZXRDYWxsYmFjayB8IExlZ2FjeUNvbXB1dGVkR2V0Q2FsbGJhY2s7XG4gIHNldD86IENvbXB1dGVkU2V0Q2FsbGJhY2sgfCBMZWdhY3lDb21wdXRlZFNldENhbGxiYWNrO1xufVxuXG50eXBlIENvbXB1dGVkQXJndW1lbnQgPSBDb21wdXRlZEdldENhbGxiYWNrIHwgQ29tcHV0ZWREZXNjcmlwdG9yO1xuXG5leHBvcnQgY2xhc3MgQ29tcHV0ZWRCbHVlcHJpbnQgZXh0ZW5kcyBCbHVlcHJpbnQge1xuICBwcml2YXRlIGFjY2Vzc29yOiBDb21wdXRlZERlc2NyaXB0b3I7XG4gIHByaXZhdGUgZGVwczogc3RyaW5nW11bXTtcbiAgcHJpdmF0ZSBtZXRhZGF0YTogT2JqZWN0ID0ge307XG5cbiAgY29uc3RydWN0b3IoYWNjZXNzb3I6IENvbXB1dGVkRGVzY3JpcHRvciwgZGVwczogc3RyaW5nW11bXSA9IFtdKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFjY2Vzc29yID0gYWNjZXNzb3I7XG4gICAgdGhpcy5kZXBzID0gZGVwcztcbiAgfVxuXG4gIGRlc2NyaXB0b3IoX3RhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgY2xhc3NNZXRhOiBDbGFzc01ldGEpOiBEZXNjcmlwdG9yIHtcbiAgICBjbGFzc01ldGEuYWRkUmVmZXJlbmNlVHlwZUZvcihrZXksIENvbXB1dGVkUmVmZXJlbmNlQmx1ZXByaW50KGtleSwgdGhpcy5kZXBzKSk7XG4gICAgY2xhc3NNZXRhLmFkZFByb3BlcnR5TWV0YWRhdGEoa2V5LCB0aGlzLm1ldGFkYXRhKTtcbiAgICBjbGFzc01ldGEuYWRkU2xvdEZvcihrZXkpO1xuICAgIHJldHVybiBuZXcgQ29tcHV0ZWQodGhpcy5hY2Nlc3Nvcik7XG4gIH1cblxuICBwcm9wZXJ0eSguLi5wYXRoczogc3RyaW5nW10pIHtcbiAgICB0aGlzLmRlcHMgPSBwYXRocy5tYXAoZCA9PiBkLnNwbGl0KCcuJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbWV0YShvYmplY3Q6IE9iamVjdCkge1xuICAgIHRoaXMubWV0YWRhdGEgPSBvYmplY3Q7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB2b2xhdGlsZSgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5jbGFzcyBDb21wdXRlZCBpbXBsZW1lbnRzIERlc2NyaXB0b3Ige1xuICBlbnVtZXJhYmxlOiBib29sZWFuO1xuICBjb25maWd1cmFibGU6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBhY2Nlc3NvcjogQ29tcHV0ZWREZXNjcmlwdG9yO1xuICBbREVTQ1JJUFRPUl0gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKGFjY2Vzc29yOiBDb21wdXRlZERlc2NyaXB0b3IpIHtcbiAgICB0aGlzLmFjY2Vzc29yID0gYWNjZXNzb3I7XG4gICAgdGhpcy5lbnVtZXJhYmxlID0gZmFsc2U7XG4gICAgdGhpcy5jb25maWd1cmFibGUgPSBmYWxzZTtcbiAgfVxuXG4gIGRlZmluZShwcm90b3R5cGU6IE9iamVjdCwga2V5OiBzdHJpbmcsIGhvbWU6IE9iamVjdCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90b3R5cGUsIGtleSwgd3JhcEFjY2Vzc29yKGhvbWUsIGtleSwgdGhpcy5hY2Nlc3NvcikpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdyYXBBY2Nlc3NvcihcbiAgaG9tZTogT2JqZWN0LFxuICBhY2Nlc3Nvck5hbWU6IHN0cmluZyxcbiAgX2Rlc2M6IENvbXB1dGVkRGVzY3JpcHRvclxuKTogUHJvcGVydHlEZXNjcmlwdG9yIHtcbiAgbGV0IHN1cGVyRGVzYyA9IGdldFByb3BlcnR5RGVzY3JpcHRvcihob21lLCBhY2Nlc3Nvck5hbWUpO1xuXG4gIGxldCBvcmlnaW5hbEdldDogQ29tcHV0ZWRHZXRDYWxsYmFjaztcbiAgbGV0IG9yaWdpbmFsU2V0OiBDb21wdXRlZFNldENhbGxiYWNrO1xuXG4gIGxldCBkZXNjOiBQcm9wZXJ0eURlc2NyaXB0b3IgPSB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gIH07XG5cbiAgbGV0IGdldCA9IF9kZXNjLmdldDtcblxuICBpZiAoZ2V0ICYmIGdldC5sZW5ndGggPiAwKSB7XG4gICAgb3JpZ2luYWxHZXQgPSBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICAgIHJldHVybiAoZ2V0IGFzIGFueSkuY2FsbCh0aGlzLCBhY2Nlc3Nvck5hbWUpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgb3JpZ2luYWxHZXQgPSBfZGVzYy5nZXQgYXMgQ29tcHV0ZWRHZXRDYWxsYmFjaztcbiAgfVxuXG4gIGxldCBzZXQgPSBfZGVzYy5zZXQ7XG5cbiAgaWYgKHNldCAmJiBzZXQubGVuZ3RoID4gMSkge1xuICAgIG9yaWdpbmFsU2V0ID0gZnVuY3Rpb24odGhpczogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgICByZXR1cm4gKHNldCBhcyBhbnkpLmNhbGwodGhpcywgYWNjZXNzb3JOYW1lLCB2YWx1ZSk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBvcmlnaW5hbFNldCA9IF9kZXNjLnNldCBhcyBDb21wdXRlZEdldENhbGxiYWNrO1xuICB9XG5cbiAgbGV0IGNhY2hlR2V0ID0gZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgaWYgKE1ldGEuZXhpc3RzKHRoaXMpKSB7XG4gICAgICBsZXQgc2xvdCA9IE1ldGEuZm9yKHRoaXMpLmdldFNsb3RzKClbYWNjZXNzb3JOYW1lXTtcbiAgICAgIGlmIChzbG90ICE9PSBFTVBUWV9DQUNIRSkgcmV0dXJuIHNsb3Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9yaWdpbmFsR2V0LmNhbGwodGhpcyk7XG4gIH07XG5cbiAgbGV0IGNhY2hlU2V0OiAodmFsdWU6IGFueSkgPT4gdm9pZDtcblxuICBpZiAob3JpZ2luYWxTZXQpIHtcbiAgICBjYWNoZVNldCA9IGZ1bmN0aW9uKHRoaXM6IGFueSwgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgbGV0IG1ldGEgPSBNZXRhLmZvcih0aGlzKTtcbiAgICAgIGxldCBzbG90cyA9IG1ldGEuZ2V0U2xvdHMoKTtcblxuICAgICAgbGV0IHJldCA9IG9yaWdpbmFsU2V0LmNhbGwodGhpcywgdmFsdWUpO1xuXG4gICAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2xvdHNbYWNjZXNzb3JOYW1lXSA9IHJldDtcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGNhY2hlU2V0ID0gZnVuY3Rpb24odGhpczogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgICBsZXQgbWV0YSA9IE1ldGEuZm9yKHRoaXMpO1xuICAgICAgbGV0IHNsb3RzID0gbWV0YS5nZXRTbG90cygpO1xuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHNsb3RzW2FjY2Vzc29yTmFtZV0gPSB2YWx1ZTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFzdXBlckRlc2MgfHwgJ3ZhbHVlJyBpbiBzdXBlckRlc2MpIHtcbiAgICBkZXNjLmdldCA9IGNhY2hlR2V0O1xuICAgIGRlc2Muc2V0ID0gY2FjaGVTZXQ7XG4gICAgcmV0dXJuIGRlc2M7XG4gIH1cblxuICBkZXNjLmdldCA9IGZ1bmN0aW9uKHRoaXM6IGFueSkge1xuICAgIGxldCBsYXN0U3VwZXIgPSB0aGlzLl9zdXBlcjtcbiAgICB0aGlzLl9zdXBlciA9IGZ1bmN0aW9uKHRoaXM6IGFueSkge1xuICAgICAgcmV0dXJuIChzdXBlckRlc2MgYXMgYW55KS5nZXQuY2FsbCh0aGlzKTtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjYWNoZUdldC5jYWxsKHRoaXMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9zdXBlciA9IGxhc3RTdXBlcjtcbiAgICB9XG4gIH07XG5cbiAgZGVzYy5zZXQgPSBmdW5jdGlvbih0aGlzOiBhbnksIHZhbDogYW55KSB7XG4gICAgbGV0IGxhc3RTdXBlciA9IHRoaXMuX3N1cGVyO1xuICAgIHRoaXMuX3N1cGVyID0gZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgICByZXR1cm4gKHN1cGVyRGVzYyBhcyBhbnkpLnNldC5jYWxsKHRoaXMsIHZhbCk7XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY2FjaGVTZXQuY2FsbCh0aGlzLCB2YWwpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9zdXBlciA9IGxhc3RTdXBlcjtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGRlc2M7XG59XG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5RGVzY3JpcHRvcihzdWJqZWN0OiBhbnksIG5hbWU6IHN0cmluZykge1xuICBsZXQgcGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHN1YmplY3QsIG5hbWUpO1xuICBsZXQgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3ViamVjdCk7XG4gIHdoaWxlICh0eXBlb2YgcGQgPT09ICd1bmRlZmluZWQnICYmIHByb3RvICE9PSBudWxsKSB7XG4gICAgcGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBuYW1lKTtcbiAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG4gIH1cbiAgcmV0dXJuIHBkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZWQoZGVzYzogQ29tcHV0ZWREZXNjcmlwdG9yKTogQ29tcHV0ZWRCbHVlcHJpbnQ7XG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZWQoXG4gIGdldHRlcjogQ29tcHV0ZWRHZXRDYWxsYmFjayB8IExlZ2FjeUNvbXB1dGVkR2V0Q2FsbGJhY2tcbik6IENvbXB1dGVkQmx1ZXByaW50O1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVkKC4uLmFyZ3M6IGFueVtdKTogQ29tcHV0ZWRCbHVlcHJpbnQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlZCguLi5hcmdzOiBhbnlbXSkge1xuICBsZXQgbGFzdDogQ29tcHV0ZWRBcmd1bWVudCA9IGFyZ3MucG9wKCk7XG4gIGxldCBkZXBzID0gYXJncztcblxuICBpZiAodHlwZW9mIGxhc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbmV3IENvbXB1dGVkQmx1ZXByaW50KHtcbiAgICAgIGdldDogbGFzdCBhcyBDb21wdXRlZEdldENhbGxiYWNrIHwgTGVnYWN5Q29tcHV0ZWRHZXRDYWxsYmFjayxcbiAgICB9KS5wcm9wZXJ0eSguLi5kZXBzKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgbGFzdCA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbmV3IENvbXB1dGVkQmx1ZXByaW50KGxhc3QgYXMgQ29tcHV0ZWREZXNjcmlwdG9yKS5wcm9wZXJ0eSguLi5kZXBzKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjb21wdXRlZCBleHBlY3RzIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0IGFzIGxhc3QgYXJndW1lbnQnKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2ZXIoLi4uX2FyZ3M6IGFueVtdKSB7fVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvY29tcHV0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxTQUFTLDBCQUFULEVBQXFDLElBQXJDLFFBQWlELDJCQUFqRDtBQUNBLFNBQVMsV0FBVCxRQUF1QyxVQUF2QztBQUNBLFNBQXFCLFNBQXJCLEVBQWdDLFVBQWhDLFFBQWtELFNBQWxEO0FBeUJBLE9BQU0sTUFBTyxpQkFBUCxTQUFpQyxTQUFqQyxDQUEwQztBQUs5QyxFQUFBLFdBQUEsQ0FBWSxRQUFaLEVBQTBDLElBQUEsR0FBbUIsRUFBN0QsRUFBK0Q7QUFDN0Q7QUFITSxTQUFBLFFBQUEsR0FBbUIsRUFBbkI7QUFJTixTQUFLLFFBQUwsR0FBZ0IsUUFBaEI7QUFDQSxTQUFLLElBQUwsR0FBWSxJQUFaO0FBQ0Q7O0FBRUQsRUFBQSxVQUFVLENBQUMsT0FBRCxFQUFrQixHQUFsQixFQUErQixTQUEvQixFQUFtRDtBQUMzRCxJQUFBLFNBQVMsQ0FBQyxtQkFBVixDQUE4QixHQUE5QixFQUFtQywwQkFBMEIsQ0FBQyxHQUFELEVBQU0sS0FBSyxJQUFYLENBQTdEO0FBQ0EsSUFBQSxTQUFTLENBQUMsbUJBQVYsQ0FBOEIsR0FBOUIsRUFBbUMsS0FBSyxRQUF4QztBQUNBLElBQUEsU0FBUyxDQUFDLFVBQVYsQ0FBcUIsR0FBckI7QUFDQSxXQUFPLElBQUksUUFBSixDQUFhLEtBQUssUUFBbEIsQ0FBUDtBQUNEOztBQUVELEVBQUEsUUFBUSxDQUFDLEdBQUcsS0FBSixFQUFtQjtBQUN6QixTQUFLLElBQUwsR0FBWSxLQUFLLENBQUMsR0FBTixDQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBRixDQUFRLEdBQVIsQ0FBZixDQUFaO0FBQ0EsV0FBTyxJQUFQO0FBQ0Q7O0FBRUQsRUFBQSxJQUFJLENBQUMsTUFBRCxFQUFlO0FBQ2pCLFNBQUssUUFBTCxHQUFnQixNQUFoQjtBQUNBLFdBQU8sSUFBUDtBQUNEOztB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Q0FBZ0MsT0FBaEMsRUFBeUMsSUFBekMsQ0FBVDtBQUNBLE1BQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFQLENBQXNCLE9BQXRCLENBQVo7O0FBQ0EsU0FBTyxPQUFPLEVBQVAsS0FBYyxXQUFkLElBQTZCLEtBQUssS0FBSyxJQUE5QyxFQUFvRDtBQUNsRCxJQUFBLEVBQUUsR0FBRyxNQUFNLENBQUMsd0JBQVAsQ0FBZ0MsS0FBaEMsRUFBdUMsSUFBdkMsQ0FBTDtBQUNBLElBQUEsS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFQLENBQXNCLEtBQXRCLENBQVI7QUFDRDs7QUFDRCxTQUFPLEVBQVA7QUFDRDs7QUFRRCxPQUFNLFNBQVUsUUFBVixDQUFtQixHQUFHLElBQXRCLEVBQWlDO0FBQ3JDLE1BQUksSUFBSSxHQUFxQixJQUFJLENBQUMsR0FBTCxFQUE3QjtBQUNBLE1BQUksSUFBSSxHQUFHLElBQVg7O0FBRUEsTUFBSSxPQUFPLElBQVAsS0FBZ0IsVUFBcEIsRUFBZ0M7QUFDOUIsV0FBTyxJQUFJLGlCQUFKLENBQXNCO0FBQzNCLE1BQUEsR0FBRyxFQUFFO0FBRHNCLEtBQXRCLEVBRUosUUFGSSxDQUVLLEdBQUcsSUFGUixDQUFQO0FBR0QsR0FKRCxNQUlPLElBQUksT0FBTyxJQUFQLEtBQWdCLFFBQXBCLEVBQThCO0FBQ25DLFdBQU8sSUFBSSxpQkFBSixDQUFzQixJQUF0QixFQUFrRCxRQUFsRCxDQUEyRCxHQUFHLElBQTlELENBQVA7QUFDRCxHQUZNLE1BRUE7QUFDTCxVQUFNLElBQUksU0FBSixDQUFjLDJEQUFkLENBQU47QUFDRDtBQUNGO0FBRUQsT0FBTSxTQUFVLFFBQVYsQ0FBbUIsR0FBRyxLQUF0QixFQUFrQyxDQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcHV0ZWRSZWZlcmVuY2VCbHVlcHJpbnQsIE1ldGEgfSBmcm9tICdAZ2xpbW1lci9vYmplY3QtcmVmZXJlbmNlJztcbmltcG9ydCB7IEVNUFRZX0NBQ0hFLCBDbGFzc01ldGEgfSBmcm9tICcuL29iamVjdCc7XG5pbXBvcnQgeyBEZXNjcmlwdG9yLCBCbHVlcHJpbnQsIERFU0NSSVBUT1IgfSBmcm9tICcuL21peGluJztcblxuZXhwb3J0IGludGVyZmFjZSBDb21wdXRlZEdldENhbGxiYWNrIHtcbiAgKCk6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMZWdhY3lDb21wdXRlZEdldENhbGxiYWNrIHtcbiAgKGtleTogc3RyaW5nKTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXB1dGVkU2V0Q2FsbGJhY2sge1xuICAodmFsOiBhbnkpOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGVnYWN5Q29tcHV0ZWRTZXRDYWxsYmFjayB7XG4gIChrZXk6IHN0cmluZywgdmFsOiBhbnkpOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcHV0ZWREZXNjcmlwdG9yIHtcbiAgZ2V0PzogQ29tcHV0ZWRHZXRDYWxsYmFjayB8IExlZ2FjeUNvbXB1dGVkR2V0Q2FsbGJhY2s7XG4gIHNldD86IENvbXB1dGVkU2V0Q2FsbGJhY2sgfCBMZWdhY3lDb21wdXRlZFNldENhbGxiYWNrO1xufVxuXG50eXBlIENvbXB1dGVkQXJndW1lbnQgPSBDb21wdXRlZEdldENhbGxiYWNrIHwgQ29tcHV0ZWREZXNjcmlwdG9yO1xuXG5leHBvcnQgY2xhc3MgQ29tcHV0ZWRCbHVlcHJpbnQgZXh0ZW5kcyBCbHVlcHJpbnQge1xuICBwcml2YXRlIGFjY2Vzc29yOiBDb21wdXRlZERlc2NyaXB0b3I7XG4gIHByaXZhdGUgZGVwczogc3RyaW5nW11bXTtcbiAgcHJpdmF0ZSBtZXRhZGF0YTogT2JqZWN0ID0ge307XG5cbiAgY29uc3RydWN0b3IoYWNjZXNzb3I6IENvbXB1dGVkRGVzY3JpcHRvciwgZGVwczogc3RyaW5nW11bXSA9IFtdKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFjY2Vzc29yID0gYWNjZXNzb3I7XG4gICAgdGhpcy5kZXBzID0gZGVwcztcbiAgfVxuXG4gIGRlc2NyaXB0b3IoX3RhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgY2xhc3NNZXRhOiBDbGFzc01ldGEpOiBEZXNjcmlwdG9yIHtcbiAgICBjbGFzc01ldGEuYWRkUmVmZXJlbmNlVHlwZUZvcihrZXksIENvbXB1dGVkUmVmZXJlbmNlQmx1ZXByaW50KGtleSwgdGhpcy5kZXBzKSk7XG4gICAgY2xhc3NNZXRhLmFkZFByb3BlcnR5TWV0YWRhdGEoa2V5LCB0aGlzLm1ldGFkYXRhKTtcbiAgICBjbGFzc01ldGEuYWRkU2xvdEZvcihrZXkpO1xuICAgIHJldHVybiBuZXcgQ29tcHV0ZWQodGhpcy5hY2Nlc3Nvcik7XG4gIH1cblxuICBwcm9wZXJ0eSguLi5wYXRoczogc3RyaW5nW10pIHtcbiAgICB0aGlzLmRlcHMgPSBwYXRocy5tYXAoZCA9PiBkLnNwbGl0KCcuJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbWV0YShvYmplY3Q6IE9iamVjdCkge1xuICAgIHRoaXMubWV0YWRhdGEgPSBvYmplY3Q7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB2b2xhdGlsZSgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5jbGFzcyBDb21wdXRlZCBpbXBsZW1lbnRzIERlc2NyaXB0b3Ige1xuICBlbnVtZXJhYmxlOiBib29sZWFuO1xuICBjb25maWd1cmFibGU6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBhY2Nlc3NvcjogQ29tcHV0ZWREZXNjcmlwdG9yO1xuICBbREVTQ1JJUFRPUl0gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKGFjY2Vzc29yOiBDb21wdXRlZERlc2NyaXB0b3IpIHtcbiAgICB0aGlzLmFjY2Vzc29yID0gYWNjZXNzb3I7XG4gICAgdGhpcy5lbnVtZXJhYmxlID0gZmFsc2U7XG4gICAgdGhpcy5jb25maWd1cmFibGUgPSBmYWxzZTtcbiAgfVxuXG4gIGRlZmluZShwcm90b3R5cGU6IE9iamVjdCwga2V5OiBzdHJpbmcsIGhvbWU6IE9iamVjdCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90b3R5cGUsIGtleSwgd3JhcEFjY2Vzc29yKGhvbWUsIGtleSwgdGhpcy5hY2Nlc3NvcikpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdyYXBBY2Nlc3NvcihcbiAgaG9tZTogT2JqZWN0LFxuICBhY2Nlc3Nvck5hbWU6IHN0cmluZyxcbiAgX2Rlc2M6IENvbXB1dGVkRGVzY3JpcHRvclxuKTogUHJvcGVydHlEZXNjcmlwdG9yIHtcbiAgbGV0IHN1cGVyRGVzYyA9IGdldFByb3BlcnR5RGVzY3JpcHRvcihob21lLCBhY2Nlc3Nvck5hbWUpO1xuXG4gIGxldCBvcmlnaW5hbEdldDogQ29tcHV0ZWRHZXRDYWxsYmFjaztcbiAgbGV0IG9yaWdpbmFsU2V0OiBDb21wdXRlZFNldENhbGxiYWNrO1xuXG4gIGxldCBkZXNjOiBQcm9wZXJ0eURlc2NyaXB0b3IgPSB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gIH07XG5cbiAgbGV0IGdldCA9IF9kZXNjLmdldDtcblxuICBpZiAoZ2V0ICYmIGdldC5sZW5ndGggPiAwKSB7XG4gICAgb3JpZ2luYWxHZXQgPSBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICAgIHJldHVybiAoZ2V0IGFzIGFueSkuY2FsbCh0aGlzLCBhY2Nlc3Nvck5hbWUpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgb3JpZ2luYWxHZXQgPSBfZGVzYy5nZXQgYXMgQ29tcHV0ZWRHZXRDYWxsYmFjaztcbiAgfVxuXG4gIGxldCBzZXQgPSBfZGVzYy5zZXQ7XG5cbiAgaWYgKHNldCAmJiBzZXQubGVuZ3RoID4gMSkge1xuICAgIG9yaWdpbmFsU2V0ID0gZnVuY3Rpb24odGhpczogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgICByZXR1cm4gKHNldCBhcyBhbnkpLmNhbGwodGhpcywgYWNjZXNzb3JOYW1lLCB2YWx1ZSk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBvcmlnaW5hbFNldCA9IF9kZXNjLnNldCBhcyBDb21wdXRlZEdldENhbGxiYWNrO1xuICB9XG5cbiAgbGV0IGNhY2hlR2V0ID0gZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgaWYgKE1ldGEuZXhpc3RzKHRoaXMpKSB7XG4gICAgICBsZXQgc2xvdCA9IE1ldGEuZm9yKHRoaXMpLmdldFNsb3RzKClbYWNjZXNzb3JOYW1lXTtcbiAgICAgIGlmIChzbG90ICE9PSBFTVBUWV9DQUNIRSkgcmV0dXJuIHNsb3Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9yaWdpbmFsR2V0LmNhbGwodGhpcyk7XG4gIH07XG5cbiAgbGV0IGNhY2hlU2V0OiAodmFsdWU6IGFueSkgPT4gdm9pZDtcblxuICBpZiAob3JpZ2luYWxTZXQpIHtcbiAgICBjYWNoZVNldCA9IGZ1bmN0aW9uKHRoaXM6IGFueSwgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgbGV0IG1ldGEgPSBNZXRhLmZvcih0aGlzKTtcbiAgICAgIGxldCBzbG90cyA9IG1ldGEuZ2V0U2xvdHMoKTtcblxuICAgICAgbGV0IHJldCA9IG9yaWdpbmFsU2V0LmNhbGwodGhpcywgdmFsdWUpO1xuXG4gICAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2xvdHNbYWNjZXNzb3JOYW1lXSA9IHJldDtcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGNhY2hlU2V0ID0gZnVuY3Rpb24odGhpczogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgICBsZXQgbWV0YSA9IE1ldGEuZm9yKHRoaXMpO1xuICAgICAgbGV0IHNsb3RzID0gbWV0YS5nZXRTbG90cygpO1xuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHNsb3RzW2FjY2Vzc29yTmFtZV0gPSB2YWx1ZTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFzdXBlckRlc2MgfHwgJ3ZhbHVlJyBpbiBzdXBlckRlc2MpIHtcbiAgICBkZXNjLmdldCA9IGNhY2hlR2V0O1xuICAgIGRlc2Muc2V0ID0gY2FjaGVTZXQ7XG4gICAgcmV0dXJuIGRlc2M7XG4gIH1cblxuICBkZXNjLmdldCA9IGZ1bmN0aW9uKHRoaXM6IGFueSkge1xuICAgIGxldCBsYXN0U3VwZXIgPSB0aGlzLl9zdXBlcjtcbiAgICB0aGlzLl9zdXBlciA9IGZ1bmN0aW9uKHRoaXM6IGFueSkge1xuICAgICAgcmV0dXJuIChzdXBlckRlc2MgYXMgYW55KS5nZXQuY2FsbCh0aGlzKTtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjYWNoZUdldC5jYWxsKHRoaXMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9zdXBlciA9IGxhc3RTdXBlcjtcbiAgICB9XG4gIH07XG5cbiAgZGVzYy5zZXQgPSBmdW5jdGlvbih0aGlzOiBhbnksIHZhbDogYW55KSB7XG4gICAgbGV0IGxhc3RTdXBlciA9IHRoaXMuX3N1cGVyO1xuICAgIHRoaXMuX3N1cGVyID0gZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgICByZXR1cm4gKHN1cGVyRGVzYyBhcyBhbnkpLnNldC5jYWxsKHRoaXMsIHZhbCk7XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY2FjaGVTZXQuY2FsbCh0aGlzLCB2YWwpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9zdXBlciA9IGxhc3RTdXBlcjtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGRlc2M7XG59XG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5RGVzY3JpcHRvcihzdWJqZWN0OiBhbnksIG5hbWU6IHN0cmluZykge1xuICBsZXQgcGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHN1YmplY3QsIG5hbWUpO1xuICBsZXQgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3ViamVjdCk7XG4gIHdoaWxlICh0eXBlb2YgcGQgPT09ICd1bmRlZmluZWQnICYmIHByb3RvICE9PSBudWxsKSB7XG4gICAgcGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBuYW1lKTtcbiAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG4gIH1cbiAgcmV0dXJuIHBkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZWQoZGVzYzogQ29tcHV0ZWREZXNjcmlwdG9yKTogQ29tcHV0ZWRCbHVlcHJpbnQ7XG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZWQoXG4gIGdldHRlcjogQ29tcHV0ZWRHZXRDYWxsYmFjayB8IExlZ2FjeUNvbXB1dGVkR2V0Q2FsbGJhY2tcbik6IENvbXB1dGVkQmx1ZXByaW50O1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVkKC4uLmFyZ3M6IGFueVtdKTogQ29tcHV0ZWRCbHVlcHJpbnQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlZCguLi5hcmdzOiBhbnlbXSkge1xuICBsZXQgbGFzdDogQ29tcHV0ZWRBcmd1bWVudCA9IGFyZ3MucG9wKCk7XG4gIGxldCBkZXBzID0gYXJncztcblxuICBpZiAodHlwZW9mIGxhc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbmV3IENvbXB1dGVkQmx1ZXByaW50KHtcbiAgICAgIGdldDogbGFzdCBhcyBDb21wdXRlZEdldENhbGxiYWNrIHwgTGVnYWN5Q29tcHV0ZWRHZXRDYWxsYmFjayxcbiAgICB9KS5wcm9wZXJ0eSguLi5kZXBzKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgbGFzdCA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbmV3IENvbXB1dGVkQmx1ZXByaW50KGxhc3QgYXMgQ29tcHV0ZWREZXNjcmlwdG9yKS5wcm9wZXJ0eSguLi5kZXBzKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjb21wdXRlZCBleHBlY3RzIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0IGFzIGxhc3QgYXJndW1lbnQnKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2ZXIoLi4uX2FyZ3M6IGFueVtdKSB7fVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
import { Blueprint, Descriptor } from './mixin';
import { ComputedBlueprint } from './computed';
class AliasMethodDescriptor extends Descriptor {
constructor(name) {
super();
this.name = name;
}
define(target, key, _home) {
let name = this.name;
Object.defineProperty(target, key, {
enumerable: true,
configurable: true,
get() {
return this[name];
}
});
}
constructor(name) {
super();
this.name = name;
}
define(target, key, _home) {
let name = this.name;
Object.defineProperty(target, key, {
enumerable: true,
configurable: true,
get() {
return this[name];
}
});
}
}
class AliasMethodBlueprint extends Blueprint {
constructor(name) {
super();
this.name = name;
}
descriptor(_target, _key, _meta) {
return new AliasMethodDescriptor(this.name);
}
constructor(name) {
super();
this.name = name;
}
descriptor(_target, _key, _meta) {
return new AliasMethodDescriptor(this.name);
}
}
export function aliasMethod(name) {
return new AliasMethodBlueprint(name);
return new AliasMethodBlueprint(name);
}
class AliasBlueprint extends ComputedBlueprint {
constructor(name) {
let parent = name.slice(0, -1);
let last = name[name.length - 1];
let get = function () {
return name.reduce((obj, n) => obj[n], this);
};
let set = function (value) {
let p = parent.reduce((obj, n) => obj[n], this);
p[last] = value;
};
super({ get, set }, [name]);
this.name = name;
}
descriptor(target, key, meta) {
if (this.name[0] === key) throw new Error(`Setting alias '${key}' on self`);
return super.descriptor(target, key, meta);
}
constructor(name) {
let parent = name.slice(0, -1);
let last = name[name.length - 1];
let get = function () {
return name.reduce((obj, n) => obj[n], this);
};
let set = function (value) {
let p = parent.reduce((obj, n) => obj[n], this);
p[last] = value;
};
super({
get,
set
}, [name]);
this.name = name;
}
descriptor(target, key, meta) {
if (this.name[0] === key) throw new Error(`Setting alias '${key}' on self`);
return super.descriptor(target, key, meta);
}
}
export function alias(name) {
return new AliasBlueprint(name.split('.'));
return new AliasBlueprint(name.split('.'));
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvZGVzY3JpcHRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxTQUFULEVBQW9CLFVBQXBCLFFBQXNDLFNBQXRDO0FBRUEsU0FBUyxpQkFBVCxRQUFrQyxZQUFsQztBQUdBLE1BQU0scUJBQU4sU0FBb0MsVUFBcEMsQ0FBOEM7QUFHNUMsZ0JBQVksSUFBWixFQUF3QjtBQUN0QjtBQUNBLGFBQUssSUFBTCxHQUFZLElBQVo7QUFDRDtBQUVELFdBQU8sTUFBUCxFQUFxQixHQUFyQixFQUFrQyxLQUFsQyxFQUErQztBQUM3QyxZQUFJLE9BQU8sS0FBSyxJQUFoQjtBQUVBLGVBQU8sY0FBUCxDQUFzQixNQUF0QixFQUE4QixHQUE5QixFQUFtQztBQUNqQyx3QkFBWSxJQURxQjtBQUVqQywwQkFBYyxJQUZtQjtBQUdqQyxrQkFBRztBQUNELHVCQUFPLEtBQUssSUFBTCxDQUFQO0FBQ0Q7QUFMZ0MsU0FBbkM7QUFPRDtBQWxCMkM7QUFxQjlDLE1BQU0sb0JBQU4sU0FBbUMsU0FBbkMsQ0FBNEM7QUFHMUMsZ0JBQVksSUFBWixFQUF3QjtBQUN0QjtBQUNBLGFBQUssSUFBTCxHQUFZLElBQVo7QUFDRDtBQUVELGVBQVcsT0FBWCxFQUE0QixJQUE1QixFQUEwQyxLQUExQyxFQUEwRDtBQUN4RCxlQUFPLElBQUkscUJBQUosQ0FBMEIsS0FBSyxJQUEvQixDQUFQO0FBQ0Q7QUFWeUM7QUFhNUMsT0FBTSxTQUFVLFdBQVYsQ0FBc0IsSUFBdEIsRUFBa0M7QUFDdEMsV0FBTyxJQUFJLG9CQUFKLENBQXlCLElBQXpCLENBQVA7QUFDRDtBQUVELE1BQU0sY0FBTixTQUE2QixpQkFBN0IsQ0FBOEM7QUFHNUMsZ0JBQVksSUFBWixFQUEwQjtBQUN4QixZQUFJLFNBQVMsS0FBSyxLQUFMLENBQVcsQ0FBWCxFQUFjLENBQUMsQ0FBZixDQUFiO0FBQ0EsWUFBSSxPQUFPLEtBQUssS0FBSyxNQUFMLEdBQWMsQ0FBbkIsQ0FBWDtBQUVBLFlBQUksTUFBTSxZQUFBO0FBQ1IsbUJBQU8sS0FBSyxNQUFMLENBQVksQ0FBQyxHQUFELEVBQU0sQ0FBTixLQUFZLElBQUksQ0FBSixDQUF4QixFQUFnQyxJQUFoQyxDQUFQO0FBQ0QsU0FGRDtBQUlBLFlBQUksTUFBTSxVQUFvQixLQUFwQixFQUE4QjtBQUN0QyxnQkFBSSxJQUFJLE9BQU8sTUFBUCxDQUFjLENBQUMsR0FBRCxFQUFNLENBQU4sS0FBWSxJQUFJLENBQUosQ0FBMUIsRUFBa0MsSUFBbEMsQ0FBUjtBQUNBLGNBQUUsSUFBRixJQUFVLEtBQVY7QUFDRCxTQUhEO0FBS0EsY0FBTSxFQUFFLEdBQUYsRUFBTyxHQUFQLEVBQU4sRUFBb0IsQ0FBQyxJQUFELENBQXBCO0FBQ0EsYUFBSyxJQUFMLEdBQVksSUFBWjtBQUNEO0FBRUQsZUFBVyxNQUFYLEVBQTJCLEdBQTNCLEVBQXdDLElBQXhDLEVBQXVEO0FBQ3JELFlBQUksS0FBSyxJQUFMLENBQVUsQ0FBVixNQUFpQixHQUFyQixFQUEwQixNQUFNLElBQUksS0FBSixDQUFVLGtCQUFrQixHQUFHLFdBQS9CLENBQU47QUFDMUIsZUFBTyxNQUFNLFVBQU4sQ0FBaUIsTUFBakIsRUFBeUIsR0FBekIsRUFBOEIsSUFBOUIsQ0FBUDtBQUNEO0FBdkIyQztBQTBCOUMsT0FBTSxTQUFVLEtBQVYsQ0FBZ0IsSUFBaEIsRUFBNEI7QUFDaEMsV0FBTyxJQUFJLGNBQUosQ0FBbUIsS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFuQixDQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCbHVlcHJpbnQsIERlc2NyaXB0b3IgfSBmcm9tICcuL21peGluJztcbmltcG9ydCB7IENsYXNzTWV0YSB9IGZyb20gJy4vb2JqZWN0JztcbmltcG9ydCB7IENvbXB1dGVkQmx1ZXByaW50IH0gZnJvbSAnLi9jb21wdXRlZCc7XG5pbXBvcnQgeyBEaWN0IH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5cbmNsYXNzIEFsaWFzTWV0aG9kRGVzY3JpcHRvciBleHRlbmRzIERlc2NyaXB0b3Ige1xuICBwcml2YXRlIG5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBkZWZpbmUodGFyZ2V0OiBEaWN0LCBrZXk6IHN0cmluZywgX2hvbWU6IE9iamVjdCkge1xuICAgIGxldCBuYW1lID0gdGhpcy5uYW1lIGFzIHN0cmluZztcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldCh0aGlzOiB0eXBlb2YgdGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzW25hbWVdO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5jbGFzcyBBbGlhc01ldGhvZEJsdWVwcmludCBleHRlbmRzIEJsdWVwcmludCB7XG4gIHByaXZhdGUgbmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIGRlc2NyaXB0b3IoX3RhcmdldDogT2JqZWN0LCBfa2V5OiBzdHJpbmcsIF9tZXRhOiBDbGFzc01ldGEpOiBEZXNjcmlwdG9yIHtcbiAgICByZXR1cm4gbmV3IEFsaWFzTWV0aG9kRGVzY3JpcHRvcih0aGlzLm5hbWUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGlhc01ldGhvZChuYW1lOiBzdHJpbmcpOiBCbHVlcHJpbnQge1xuICByZXR1cm4gbmV3IEFsaWFzTWV0aG9kQmx1ZXByaW50KG5hbWUpO1xufVxuXG5jbGFzcyBBbGlhc0JsdWVwcmludCBleHRlbmRzIENvbXB1dGVkQmx1ZXByaW50IHtcbiAgcHJpdmF0ZSBuYW1lOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmdbXSkge1xuICAgIGxldCBwYXJlbnQgPSBuYW1lLnNsaWNlKDAsIC0xKTtcbiAgICBsZXQgbGFzdCA9IG5hbWVbbmFtZS5sZW5ndGggLSAxXTtcblxuICAgIGxldCBnZXQgPSBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICAgIHJldHVybiBuYW1lLnJlZHVjZSgob2JqLCBuKSA9PiBvYmpbbl0sIHRoaXMpO1xuICAgIH07XG5cbiAgICBsZXQgc2V0ID0gZnVuY3Rpb24odGhpczogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgICBsZXQgcCA9IHBhcmVudC5yZWR1Y2UoKG9iaiwgbikgPT4gb2JqW25dLCB0aGlzKTtcbiAgICAgIHBbbGFzdF0gPSB2YWx1ZTtcbiAgICB9O1xuXG4gICAgc3VwZXIoeyBnZXQsIHNldCB9LCBbbmFtZV0pO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBkZXNjcmlwdG9yKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgbWV0YTogQ2xhc3NNZXRhKTogRGVzY3JpcHRvciB7XG4gICAgaWYgKHRoaXMubmFtZVswXSA9PT0ga2V5KSB0aHJvdyBuZXcgRXJyb3IoYFNldHRpbmcgYWxpYXMgJyR7a2V5fScgb24gc2VsZmApO1xuICAgIHJldHVybiBzdXBlci5kZXNjcmlwdG9yKHRhcmdldCwga2V5LCBtZXRhKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxpYXMobmFtZTogc3RyaW5nKTogQmx1ZXByaW50IHtcbiAgcmV0dXJuIG5ldyBBbGlhc0JsdWVwcmludChuYW1lLnNwbGl0KCcuJykpO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvZGVzY3JpcHRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxTQUFULEVBQW9CLFVBQXBCLFFBQXNDLFNBQXRDO0FBRUEsU0FBUyxpQkFBVCxRQUFrQyxZQUFsQzs7QUFHQSxNQUFNLHFCQUFOLFNBQW9DLFVBQXBDLENBQThDO0FBRzVDLEVBQUEsV0FBQSxDQUFZLElBQVosRUFBd0I7QUFDdEI7QUFDQSxTQUFLLElBQUwsR0FBWSxJQUFaO0FBQ0Q7O0FBRUQsRUFBQSxNQUFNLENBQUMsTUFBRCxFQUFlLEdBQWYsRUFBNEIsS0FBNUIsRUFBeUM7QUFDN0MsUUFBSSxJQUFJLEdBQUcsS0FBSyxJQUFoQjtBQUVBLElBQUEsTUFBTSxDQUFDLGNBQVAsQ0FBc0IsTUFBdEIsRUFBOEIsR0FBOUIsRUFBbUM7QUFDakMsTUFBQSxVQUFVLEVBQUUsSUFEcUI7QUFFakMsTUFBQSxZQUFZLEVBQUUsSUFGbUI7O0FBR2pDLE1BQUEsR0FBRyxHQUFBO0FBQ0QsZUFBTyxLQUFLLElBQUwsQ0FBUDtBQUNEOztBQUxnQyxLQUFuQztBQU9EOztBQWxCMkM7O0FBcUI5QyxNQUFNLG9CQUFOLFNBQW1DLFNBQW5DLENBQTRDO0FBRzFDLEVBQUEsV0FBQSxDQUFZLElBQVosRUFBd0I7QUFDdEI7QUFDQSxTQUFLLElBQUwsR0FBWSxJQUFaO0FBQ0Q7O0FBRUQsRUFBQSxVQUFVLENBQUMsT0FBRCxFQUFrQixJQUFsQixFQUFnQyxLQUFoQyxFQUFnRDtBQUN4RCxXQUFPLElBQUkscUJBQUosQ0FBMEIsS0FBSyxJQUEvQixDQUFQO0FBQ0Q7O0FBVnlDOztBQWE1QyxPQUFNLFNBQVUsV0FBVixDQUFzQixJQUF0QixFQUFrQztBQUN0QyxTQUFPLElBQUksb0JBQUosQ0FBeUIsSUFBekIsQ0FBUDtBQUNEOztBQUVELE1BQU0sY0FBTixTQUE2QixpQkFBN0IsQ0FBOEM7QUFHNUMsRUFBQSxXQUFBLENBQVksSUFBWixFQUEwQjtBQUN4QixRQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBTCxDQUFXLENBQVgsRUFBYyxDQUFDLENBQWYsQ0FBYjtBQUNBLFFBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTCxHQUFjLENBQWYsQ0FBZjs7QUFFQSxRQUFJLEdBQUcsR0FBRyxZQUFBO0FBQ1IsYUFBTyxJQUFJLENBQUMsTUFBTCxDQUFZLENBQUMsR0FBRCxFQUFNLENBQU4sS0FBWSxHQUFHLENBQUMsQ0FBRCxDQUEzQixFQUFnQyxJQUFoQyxDQUFQO0FBQ0QsS0FGRDs7QUFJQSxRQUFJLEdBQUcsR0FBRyxVQUFvQixLQUFwQixFQUE4QjtBQUN0QyxVQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBUCxDQUFjLENBQUMsR0FBRCxFQUFNLENBQU4sS0FBWSxHQUFHLENBQUMsQ0FBRCxDQUE3QixFQUFrQyxJQUFsQyxDQUFSO0FBQ0EsTUFBQSxDQUFDLENBQUMsSUFBRCxDQUFELEdBQVUsS0FBVjtBQUNELEtBSEQ7O0FBS0EsVUFBTTtBQUFFLE1BQUEsR0FBRjtBQUFPLE1BQUE7QUFBUCxLQUFOLEVBQW9CLENBQUMsSUFBRCxDQUFwQjtBQUNBLFNBQUssSUFBTCxHQUFZLElBQVo7QUFDRDs7QUFFRCxFQUFBLFVBQVUsQ0FBQyxNQUFELEVBQWlCLEdBQWpCLEVBQThCLElBQTlCLEVBQTZDO0FBQ3JELFFBQUksS0FBSyxJQUFMLENBQVUsQ0FBVixNQUFpQixHQUFyQixFQUEwQixNQUFNLElBQUksS0FBSixDQUFVLGtCQUFrQixHQUFHLFdBQS9CLENBQU47QUFDMUIsV0FBTyxNQUFNLFVBQU4sQ0FBaUIsTUFBakIsRUFBeUIsR0FBekIsRUFBOEIsSUFBOUIsQ0FBUDtBQUNEOztBQXZCMkM7O0FBMEI5QyxPQUFNLFNBQVUsS0FBVixDQUFnQixJQUFoQixFQUE0QjtBQUNoQyxTQUFPLElBQUksY0FBSixDQUFtQixJQUFJLENBQUMsS0FBTCxDQUFXLEdBQVgsQ0FBbkIsQ0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmx1ZXByaW50LCBEZXNjcmlwdG9yIH0gZnJvbSAnLi9taXhpbic7XG5pbXBvcnQgeyBDbGFzc01ldGEgfSBmcm9tICcuL29iamVjdCc7XG5pbXBvcnQgeyBDb21wdXRlZEJsdWVwcmludCB9IGZyb20gJy4vY29tcHV0ZWQnO1xuaW1wb3J0IHsgRGljdCB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuXG5jbGFzcyBBbGlhc01ldGhvZERlc2NyaXB0b3IgZXh0ZW5kcyBEZXNjcmlwdG9yIHtcbiAgcHJpdmF0ZSBuYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgZGVmaW5lKHRhcmdldDogRGljdCwga2V5OiBzdHJpbmcsIF9ob21lOiBPYmplY3QpIHtcbiAgICBsZXQgbmFtZSA9IHRoaXMubmFtZSBhcyBzdHJpbmc7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQodGhpczogdHlwZW9mIHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGhpc1tuYW1lXTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuY2xhc3MgQWxpYXNNZXRob2RCbHVlcHJpbnQgZXh0ZW5kcyBCbHVlcHJpbnQge1xuICBwcml2YXRlIG5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBkZXNjcmlwdG9yKF90YXJnZXQ6IE9iamVjdCwgX2tleTogc3RyaW5nLCBfbWV0YTogQ2xhc3NNZXRhKTogRGVzY3JpcHRvciB7XG4gICAgcmV0dXJuIG5ldyBBbGlhc01ldGhvZERlc2NyaXB0b3IodGhpcy5uYW1lKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxpYXNNZXRob2QobmFtZTogc3RyaW5nKTogQmx1ZXByaW50IHtcbiAgcmV0dXJuIG5ldyBBbGlhc01ldGhvZEJsdWVwcmludChuYW1lKTtcbn1cblxuY2xhc3MgQWxpYXNCbHVlcHJpbnQgZXh0ZW5kcyBDb21wdXRlZEJsdWVwcmludCB7XG4gIHByaXZhdGUgbmFtZTogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nW10pIHtcbiAgICBsZXQgcGFyZW50ID0gbmFtZS5zbGljZSgwLCAtMSk7XG4gICAgbGV0IGxhc3QgPSBuYW1lW25hbWUubGVuZ3RoIC0gMV07XG5cbiAgICBsZXQgZ2V0ID0gZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgICByZXR1cm4gbmFtZS5yZWR1Y2UoKG9iaiwgbikgPT4gb2JqW25dLCB0aGlzKTtcbiAgICB9O1xuXG4gICAgbGV0IHNldCA9IGZ1bmN0aW9uKHRoaXM6IGFueSwgdmFsdWU6IGFueSkge1xuICAgICAgbGV0IHAgPSBwYXJlbnQucmVkdWNlKChvYmosIG4pID0+IG9ialtuXSwgdGhpcyk7XG4gICAgICBwW2xhc3RdID0gdmFsdWU7XG4gICAgfTtcblxuICAgIHN1cGVyKHsgZ2V0LCBzZXQgfSwgW25hbWVdKTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgZGVzY3JpcHRvcih0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIG1ldGE6IENsYXNzTWV0YSk6IERlc2NyaXB0b3Ige1xuICAgIGlmICh0aGlzLm5hbWVbMF0gPT09IGtleSkgdGhyb3cgbmV3IEVycm9yKGBTZXR0aW5nIGFsaWFzICcke2tleX0nIG9uIHNlbGZgKTtcbiAgICByZXR1cm4gc3VwZXIuZGVzY3JpcHRvcih0YXJnZXQsIGtleSwgbWV0YSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsaWFzKG5hbWU6IHN0cmluZyk6IEJsdWVwcmludCB7XG4gIHJldHVybiBuZXcgQWxpYXNCbHVlcHJpbnQobmFtZS5zcGxpdCgnLicpKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
var _a, _b;
import { CLASS_META } from '@glimmer/object-reference';

@@ -6,257 +7,342 @@ import { dict, assign, symbol } from '@glimmer/util';

import { ROOT } from './utils';
const { isArray } = Array;
const {
isArray
} = Array;
export const DESCRIPTOR = symbol('DESCRIPTOR');
export const BLUEPRINT = symbol('BLUEPRINT');
export class Descriptor {
constructor() {
this[_a] = true;
}
constructor() {
this[_a] = true;
}
}
_a = DESCRIPTOR;
export class Blueprint {
constructor() {
this[_b] = true;
}
constructor() {
this[_b] = true;
}
}
_b = BLUEPRINT;
export class Mixin {
constructor(extensions, mixins) {
this.extensions = null; // assigned before used
this.concatenatedProperties = [];
this.mergedProperties = [];
this.dependencies = [];
this.reopen(extensions);
this.dependencies.push(...mixins);
constructor(extensions, mixins) {
this.extensions = null; // assigned before used
this.concatenatedProperties = [];
this.mergedProperties = [];
this.dependencies = [];
this.reopen(extensions);
this.dependencies.push(...mixins);
}
static create(...args) {
let extensions = args[args.length - 1];
if (args.length === 0) {
return new this({}, []);
} else if (extensions instanceof Mixin) {
return new this({}, args);
} else {
let deps = args.slice(0, -1).map(toMixin);
return new this(extensions, deps);
}
static create(...args) {
let extensions = args[args.length - 1];
if (args.length === 0) {
return new this({}, []);
} else if (extensions instanceof Mixin) {
return new this({}, args);
} else {
let deps = args.slice(0, -1).map(toMixin);
return new this(extensions, deps);
}
}
static mixins(obj) {
if (typeof obj !== 'object' || obj === null) return [];
let meta = ClassMeta.for(obj);
if (!meta) return [];
return meta.getAppliedMixins();
}
detect(obj) {
if (typeof obj !== 'object' || obj === null) return false;
if (obj instanceof Mixin) {
return obj.dependencies.indexOf(this) !== -1;
}
static mixins(obj) {
if (typeof obj !== 'object' || obj === null) return [];
let meta = ClassMeta.for(obj);
if (!meta) return [];
return meta.getAppliedMixins();
let meta = ClassMeta.for(obj);
return !!meta && meta.hasAppliedMixin(this);
}
reopen(extensions) {
if (this.extensions) {
this.dependencies.push(toMixin(this.extensions));
}
detect(obj) {
if (typeof obj !== 'object' || obj === null) return false;
if (obj instanceof Mixin) {
return obj.dependencies.indexOf(this) !== -1;
}
let meta = ClassMeta.for(obj);
return !!meta && meta.hasAppliedMixin(this);
if (typeof extensions === 'object' && 'concatenatedProperties' in extensions) {
let concat;
let rawConcat = extensions.concatenatedProperties;
if (isArray(rawConcat)) {
concat = rawConcat.slice();
} else if (rawConcat === null || rawConcat === undefined) {
concat = [];
} else {
concat = [rawConcat];
}
delete extensions.concatenatedProperties;
this.concatenatedProperties = concat;
}
reopen(extensions) {
if (this.extensions) {
this.dependencies.push(toMixin(this.extensions));
}
if (typeof extensions === 'object' && 'concatenatedProperties' in extensions) {
let concat;
let rawConcat = extensions.concatenatedProperties;
if (isArray(rawConcat)) {
concat = rawConcat.slice();
} else if (rawConcat === null || rawConcat === undefined) {
concat = [];
} else {
concat = [rawConcat];
}
delete extensions.concatenatedProperties;
this.concatenatedProperties = concat;
}
if (typeof extensions === 'object' && 'mergedProperties' in extensions) {
let merged;
let rawMerged = extensions.mergedProperties;
if (isArray(rawMerged)) {
merged = rawMerged.slice();
} else if (rawMerged === null || rawMerged === undefined) {
merged = [];
} else {
merged = [rawMerged];
}
delete extensions.mergedProperties;
this.mergedProperties = merged;
}
let normalized = Object.keys(extensions).reduce((obj, key) => {
let value = extensions[key];
switch (typeof value) {
case 'function':
obj[key] = new MethodBlueprint({ value });
break;
case 'object':
if (value && BLUEPRINT in value) {
obj[key] = value;
break;
}
/* falls through */
default:
obj[key] = new DataBlueprint({ value });
}
return obj;
}, dict());
this.extensions = dict();
assign(this.extensions, turbocharge(normalized));
if (typeof extensions === 'object' && 'mergedProperties' in extensions) {
let merged;
let rawMerged = extensions.mergedProperties;
if (isArray(rawMerged)) {
merged = rawMerged.slice();
} else if (rawMerged === null || rawMerged === undefined) {
merged = [];
} else {
merged = [rawMerged];
}
delete extensions.mergedProperties;
this.mergedProperties = merged;
}
apply(target) {
let meta = target[CLASS_META] = target[CLASS_META] || new ClassMeta();
this.dependencies.forEach(m => m.apply(target));
this.mergeProperties(target, target, meta);
meta.addMixin(this);
meta.seal();
meta.reseal(target);
return target;
}
extendPrototype(Original) {
Original.prototype = Object.create(Original.prototype);
this.dependencies.forEach(m => m.extendPrototype(Original));
this.extendPrototypeOnto(Original, Original);
}
extendPrototypeOnto(Subclass, Parent) {
this.dependencies.forEach(m => m.extendPrototypeOnto(Subclass, Parent));
this.mergeProperties(Subclass.prototype, Parent.prototype, Subclass[CLASS_META]);
Subclass[CLASS_META].addMixin(this);
}
extendStatic(Target) {
this.dependencies.forEach(m => m.extendStatic(Target));
this.mergeProperties(Target, Object.getPrototypeOf(Target), Target[CLASS_META][CLASS_META]);
Target[CLASS_META].addStaticMixin(this);
}
mergeProperties(target, parent, meta) {
if (meta.hasAppliedMixin(this)) return;
meta.addAppliedMixin(this);
this.mergedProperties.forEach(k => meta.addMergedProperty(k, parent[k]));
this.concatenatedProperties.forEach(k => meta.addConcatenatedProperty(k, []));
new ValueDescriptor({ value: meta.getConcatenatedProperties() }).define(target, 'concatenatedProperties');
new ValueDescriptor({ value: meta.getMergedProperties() }).define(target, 'mergedProperties');
Object.keys(this.extensions).forEach(key => {
let extension = this.extensions[key];
let desc = extension.descriptor(target, key, meta);
desc.define(target, key, parent);
});
new ValueDescriptor({ value: ROOT }).define(target, '_super');
}
let normalized = Object.keys(extensions).reduce((obj, key) => {
let value = extensions[key];
switch (typeof value) {
case 'function':
obj[key] = new MethodBlueprint({
value
});
break;
case 'object':
if (value && BLUEPRINT in value) {
obj[key] = value;
break;
}
/* falls through */
default:
obj[key] = new DataBlueprint({
value
});
}
return obj;
}, dict());
this.extensions = dict();
assign(this.extensions, turbocharge(normalized));
}
apply(target) {
let meta = target[CLASS_META] = target[CLASS_META] || new ClassMeta();
this.dependencies.forEach(m => m.apply(target));
this.mergeProperties(target, target, meta);
meta.addMixin(this);
meta.seal();
meta.reseal(target);
return target;
}
extendPrototype(Original) {
Original.prototype = Object.create(Original.prototype);
this.dependencies.forEach(m => m.extendPrototype(Original));
this.extendPrototypeOnto(Original, Original);
}
extendPrototypeOnto(Subclass, Parent) {
this.dependencies.forEach(m => m.extendPrototypeOnto(Subclass, Parent));
this.mergeProperties(Subclass.prototype, Parent.prototype, Subclass[CLASS_META]);
Subclass[CLASS_META].addMixin(this);
}
extendStatic(Target) {
this.dependencies.forEach(m => m.extendStatic(Target));
this.mergeProperties(Target, Object.getPrototypeOf(Target), Target[CLASS_META][CLASS_META]);
Target[CLASS_META].addStaticMixin(this);
}
mergeProperties(target, parent, meta) {
if (meta.hasAppliedMixin(this)) return;
meta.addAppliedMixin(this);
this.mergedProperties.forEach(k => meta.addMergedProperty(k, parent[k]));
this.concatenatedProperties.forEach(k => meta.addConcatenatedProperty(k, []));
new ValueDescriptor({
value: meta.getConcatenatedProperties()
}).define(target, 'concatenatedProperties');
new ValueDescriptor({
value: meta.getMergedProperties()
}).define(target, 'mergedProperties');
Object.keys(this.extensions).forEach(key => {
let extension = this.extensions[key];
let desc = extension.descriptor(target, key, meta);
desc.define(target, key, parent);
});
new ValueDescriptor({
value: ROOT
}).define(target, '_super');
}
}
export function extend(Parent, ...extensions) {
let Super = Parent;
let Subclass = class extends Super {};
Subclass[CLASS_META] = InstanceMeta.fromParent(Parent[CLASS_META]);
let mixins = extensions.map(toMixin);
Parent[CLASS_META].addSubclass(Subclass);
mixins.forEach(m => Subclass[CLASS_META].addMixin(m));
ClassMeta.applyAllMixins(Subclass, Parent);
return Subclass;
let Super = Parent;
let Subclass = class extends Super {};
Subclass[CLASS_META] = InstanceMeta.fromParent(Parent[CLASS_META]);
let mixins = extensions.map(toMixin);
Parent[CLASS_META].addSubclass(Subclass);
mixins.forEach(m => Subclass[CLASS_META].addMixin(m));
ClassMeta.applyAllMixins(Subclass, Parent);
return Subclass;
}
export function relinkSubclasses(Parent) {
Parent[CLASS_META].getSubclasses().forEach(Subclass => {
Subclass[CLASS_META].reset(Parent[CLASS_META]);
Subclass.prototype = Object.create(Parent.prototype);
ClassMeta.applyAllMixins(Subclass, Parent);
// recurse into sub-subclasses
relinkSubclasses(Subclass);
});
Parent[CLASS_META].getSubclasses().forEach(Subclass => {
Subclass[CLASS_META].reset(Parent[CLASS_META]);
Subclass.prototype = Object.create(Parent.prototype);
ClassMeta.applyAllMixins(Subclass, Parent); // recurse into sub-subclasses
relinkSubclasses(Subclass);
});
}
export function toMixin(extension) {
if (extension instanceof Mixin) return extension;else return new Mixin(extension, []);
if (extension instanceof Mixin) return extension;else return new Mixin(extension, []);
}
class ValueDescriptor extends Descriptor {
constructor({ enumerable = true, configurable = true, writable = true, value }) {
super();
this.enumerable = enumerable;
this.configurable = configurable;
this.writable = writable;
this.value = value;
}
define(target, key, _home) {
Object.defineProperty(target, key, {
enumerable: this.enumerable,
configurable: this.configurable,
writable: this.writable,
value: this.value
});
}
constructor({
enumerable = true,
configurable = true,
writable = true,
value
}) {
super();
this.enumerable = enumerable;
this.configurable = configurable;
this.writable = writable;
this.value = value;
}
define(target, key, _home) {
Object.defineProperty(target, key, {
enumerable: this.enumerable,
configurable: this.configurable,
writable: this.writable,
value: this.value
});
}
}
export class DataBlueprint extends Blueprint {
constructor({ enumerable = true, configurable = true, writable = true, value }) {
super();
this.enumerable = enumerable;
this.configurable = configurable;
this.value = value;
this.writable = writable;
constructor({
enumerable = true,
configurable = true,
writable = true,
value
}) {
super();
this.enumerable = enumerable;
this.configurable = configurable;
this.value = value;
this.writable = writable;
}
descriptor(_target, key, classMeta) {
let {
enumerable,
configurable,
writable,
value
} = this;
if (classMeta.hasConcatenatedProperty(key)) {
classMeta.addConcatenatedProperty(key, value);
value = classMeta.getConcatenatedProperty(key);
} else if (classMeta.hasMergedProperty(key)) {
classMeta.addMergedProperty(key, value);
value = classMeta.getMergedProperty(key);
}
descriptor(_target, key, classMeta) {
let { enumerable, configurable, writable, value } = this;
if (classMeta.hasConcatenatedProperty(key)) {
classMeta.addConcatenatedProperty(key, value);
value = classMeta.getConcatenatedProperty(key);
} else if (classMeta.hasMergedProperty(key)) {
classMeta.addMergedProperty(key, value);
value = classMeta.getMergedProperty(key);
}
return new ValueDescriptor({ enumerable, configurable, writable, value });
}
return new ValueDescriptor({
enumerable,
configurable,
writable,
value
});
}
}
export class AccessorBlueprint extends Blueprint {
constructor({ enumerable = true, configurable = true, get, set }) {
super();
this.enumerable = enumerable;
this.configurable = configurable;
this.get = get;
this.set = set;
}
descriptor(_target, _key, _classMeta) {
return new ValueDescriptor({
enumerable: this.enumerable,
configurable: this.configurable,
get: this.get,
set: this.set
});
}
constructor({
enumerable = true,
configurable = true,
get,
set
}) {
super();
this.enumerable = enumerable;
this.configurable = configurable;
this.get = get;
this.set = set;
}
descriptor(_target, _key, _classMeta) {
return new ValueDescriptor({
enumerable: this.enumerable,
configurable: this.configurable,
get: this.get,
set: this.set
});
}
}
class MethodDescriptor extends ValueDescriptor {
define(target, key, home) {
this.value = wrapMethod(home, key, this.value);
super.define(target, key, home);
}
define(target, key, home) {
this.value = wrapMethod(home, key, this.value);
super.define(target, key, home);
}
}
class MethodBlueprint extends DataBlueprint {
descriptor(target, key, classMeta) {
let desc = super.descriptor(target, key, classMeta);
return new MethodDescriptor(desc);
}
descriptor(target, key, classMeta) {
let desc = super.descriptor(target, key, classMeta);
return new MethodDescriptor(desc);
}
}
export function wrapMethod(home, methodName, original) {
if (!(methodName in home)) return maybeWrap(original);
let superMethod = home[methodName];
let func = function (...args) {
if (!this) return original.apply(this, args);
let lastSuper = this._super;
this._super = superMethod;
try {
return original.apply(this, args);
} finally {
this._super = lastSuper;
}
};
func.__wrapped = true;
return func;
if (!(methodName in home)) return maybeWrap(original);
let superMethod = home[methodName];
let func = function (...args) {
if (!this) return original.apply(this, args);
let lastSuper = this._super;
this._super = superMethod;
try {
return original.apply(this, args);
} finally {
this._super = lastSuper;
}
};
func.__wrapped = true;
return func;
}
function maybeWrap(original) {
if ('__wrapped' in original) return original;
return function (...args) {
if (!this) return original.apply(this, args);
let lastSuper = this._super;
this._super = ROOT;
try {
return original.apply(this, args);
} finally {
this._super = lastSuper;
}
};
if ('__wrapped' in original) return original;
return function (...args) {
if (!this) return original.apply(this, args);
let lastSuper = this._super;
this._super = ROOT;
try {
return original.apply(this, args);
} finally {
this._super = lastSuper;
}
};
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvbWl4aW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFNBQVMsVUFBVCxRQUEyQiwyQkFBM0I7QUFDQSxTQUFTLElBQVQsRUFBZSxNQUFmLEVBQXVCLE1BQXZCLFFBQXFDLGVBQXJDO0FBQ0EsU0FFRSxTQUZGLEVBR0UsWUFIRixFQUlFLFdBSkYsUUFLTyxVQUxQO0FBT0EsU0FBUyxJQUFULFFBQXFCLFNBQXJCO0FBR0EsTUFBTSxFQUFFLE9BQUYsS0FBYyxLQUFwQjtBQUVBLE9BQU8sTUFBTSxhQUE0QixPQUFPLFlBQVAsQ0FBbEM7QUFDUCxPQUFPLE1BQU0sWUFBMkIsT0FBTyxXQUFQLENBQWpDO0FBRVAsT0FBTSxNQUFnQixVQUFoQixDQUEwQjtBQUFoQyxrQkFBQTtBQUNFLGFBQUEsRUFBQSxJQUFlLElBQWY7QUFFRDtBQUgrQjtLQUM3QixVO0FBSUgsT0FBTSxNQUFnQixTQUFoQixDQUF5QjtBQUEvQixrQkFBQTtBQUNFLGFBQUEsRUFBQSxJQUFjLElBQWQ7QUFFRDtBQUg4QjtLQUM1QixTO0FBV0gsT0FBTSxNQUFPLEtBQVAsQ0FBWTtBQTRCaEIsZ0JBQVksVUFBWixFQUFvQyxNQUFwQyxFQUFtRDtBQTNCM0MsYUFBQSxVQUFBLEdBQXdCLElBQXhCLENBMkIyQyxDQTNCTjtBQUNyQyxhQUFBLHNCQUFBLEdBQW1DLEVBQW5DO0FBQ0EsYUFBQSxnQkFBQSxHQUE2QixFQUE3QjtBQUNBLGFBQUEsWUFBQSxHQUF3QixFQUF4QjtBQXlCTixhQUFLLE1BQUwsQ0FBWSxVQUFaO0FBQ0EsYUFBSyxZQUFMLENBQWtCLElBQWxCLENBQXVCLEdBQUcsTUFBMUI7QUFDRDtBQXpCRCxXQUFPLE1BQVAsQ0FBYyxHQUFHLElBQWpCLEVBQTZDO0FBQzNDLFlBQUksYUFBYSxLQUFLLEtBQUssTUFBTCxHQUFjLENBQW5CLENBQWpCO0FBRUEsWUFBSSxLQUFLLE1BQUwsS0FBZ0IsQ0FB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ZDtBQUVBLFlBQUk7QUFDRixtQkFBTyxTQUFTLEtBQVQsQ0FBZSxJQUFmLEVBQXFCLElBQXJCLENBQVA7QUFDRCxTQUZELFNBRVU7QUFDUixpQkFBSyxNQUFMLEdBQWMsU0FBZDtBQUNEO0FBQ0YsS0FYRDtBQVlEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ0xBU1NfTUVUQSB9IGZyb20gJ0BnbGltbWVyL29iamVjdC1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgZGljdCwgYXNzaWduLCBzeW1ib2wgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCBHbGltbWVyT2JqZWN0LCB7XG4gIEdsaW1tZXJPYmplY3RGYWN0b3J5LFxuICBDbGFzc01ldGEsXG4gIEluc3RhbmNlTWV0YSxcbiAgdHVyYm9jaGFyZ2UsXG59IGZyb20gJy4vb2JqZWN0JztcblxuaW1wb3J0IHsgUk9PVCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRGljdCB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuXG5jb25zdCB7IGlzQXJyYXkgfSA9IEFycmF5O1xuXG5leHBvcnQgY29uc3QgREVTQ1JJUFRPUjogdW5pcXVlIHN5bWJvbCA9IHN5bWJvbCgnREVTQ1JJUFRPUicpO1xuZXhwb3J0IGNvbnN0IEJMVUVQUklOVDogdW5pcXVlIHN5bWJvbCA9IHN5bWJvbCgnQkxVRVBSSU5UJyk7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEZXNjcmlwdG9yIHtcbiAgW0RFU0NSSVBUT1JdID0gdHJ1ZTtcbiAgYWJzdHJhY3QgZGVmaW5lKHByb3RvdHlwZTogT2JqZWN0LCBrZXk6IHN0cmluZywgaG9tZTogT2JqZWN0KTogdm9pZDtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJsdWVwcmludCB7XG4gIFtCTFVFUFJJTlRdID0gdHJ1ZTtcbiAgYWJzdHJhY3QgZGVzY3JpcHRvcih0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIGNsYXNzTWV0YTogQ2xhc3NNZXRhKTogRGVzY3JpcHRvcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHRlbnNpb25zIHtcbiAgY29uY2F0ZW5hdGVkUHJvcGVydGllcz86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbDtcbiAgbWVyZ2VkUHJvcGVydGllcz86IHN0cmluZ1tdIHwgc3RyaW5nO1xuICBfc3VwZXI/OiBGdW5jdGlvbjtcbiAgW2luZGV4OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBNaXhpbiB7XG4gIHByaXZhdGUgZXh0ZW5zaW9uczogRGljdDxhbnk+ID0gbnVsbCBhcyBhbnk7IC8vIGFzc2lnbmVkIGJlZm9yZSB1c2VkXG4gIHByaXZhdGUgY29uY2F0ZW5hdGVkUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBtZXJnZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIGRlcGVuZGVuY2llczogTWl4aW5bXSA9IFtdO1xuXG4gIHN0YXRpYyBjcmVhdGUoLi4uYXJnczogKE1peGluIHwgRXh0ZW5zaW9ucylbXSkge1xuICAgIGxldCBleHRlbnNpb25zID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbmV3IHRoaXMoe30sIFtdKTtcbiAgICB9IGVsc2UgaWYgKGV4dGVuc2lvbnMgaW5zdGFuY2VvZiBNaXhpbikge1xuICAgICAgcmV0dXJuIG5ldyB0aGlzKHt9LCBhcmdzIGFzIE1peGluW10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZGVwcyA9IGFyZ3Muc2xpY2UoMCwgLTEpLm1hcCh0b01peGluKTtcbiAgICAgIHJldHVybiBuZXcgdGhpcyhleHRlbnNpb25zIGFzIEV4dGVuc2lvbnMsIGRlcHMpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBtaXhpbnMob2JqOiBhbnkpOiBNaXhpbltdIHtcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSByZXR1cm4gW107XG5cbiAgICBsZXQgbWV0YSA9IENsYXNzTWV0YS5mb3Iob2JqKTtcbiAgICBpZiAoIW1ldGEpIHJldHVybiBbXTtcblxuICAgIHJldHVybiBtZXRhLmdldEFwcGxpZWRNaXhpbnMoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGV4dGVuc2lvbnM6IEV4dGVuc2lvbnMsIG1peGluczogTWl4aW5bXSkge1xuICAgIHRoaXMucmVvcGVuKGV4dGVuc2lvbnMpO1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzLnB1c2goLi4ubWl4aW5zKTtcbiAgfVxuXG4gIGRldGVjdChvYmo6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBvYmogPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBNaXhpbikge1xuICAgICAgcmV0dXJuIG9iai5kZXBlbmRlbmNpZXMuaW5kZXhPZih0aGlzKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgbGV0IG1ldGEgPSBDbGFzc01ldGEuZm9yKG9iaik7XG4gICAgcmV0dXJuICEhbWV0YSAmJiBtZXRhLmhhc0FwcGxpZWRNaXhpbih0aGlzKTtcbiAgfVxuXG4gIHJlb3BlbihleHRlbnNpb25zOiBFeHRlbnNpb25zKSB7XG4gICAgaWYgKHRoaXMuZXh0ZW5zaW9ucykge1xuICAgICAgdGhpcy5kZXBlbmRlbmNpZXMucHVzaCh0b01peGluKHRoaXMuZXh0ZW5zaW9ucykpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXh0ZW5zaW9ucyA9PT0gJ29iamVjdCcgJiYgJ2NvbmNhdGVuYXRlZFByb3BlcnRpZXMnIGluIGV4dGVuc2lvbnMpIHtcbiAgICAgIGxldCBjb25jYXQ6IHN0cmluZ1tdO1xuICAgICAgbGV0IHJhd0NvbmNhdCA9IGV4dGVuc2lvbnMuY29uY2F0ZW5hdGVkUHJvcGVydGllcztcblxuICAgICAgaWYgKGlzQXJyYXkocmF3Q29uY2F0KSkge1xuICAgICAgICBjb25jYXQgPSAocmF3Q29uY2F0IGFzIHN0cmluZ1tdKS5zbGljZSgpO1xuICAgICAgfSBlbHNlIGlmIChyYXdDb25jYXQgPT09IG51bGwgfHwgcmF3Q29uY2F0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uY2F0ID0gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25jYXQgPSBbcmF3Q29uY2F0IGFzIHN0cmluZ107XG4gICAgICB9XG5cbiAgICAgIGRlbGV0ZSBleHRlbnNpb25zLmNvbmNhdGVuYXRlZFByb3BlcnRpZXM7XG4gICAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSBjb25jYXQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBleHRlbnNpb25zID09PSAnb2JqZWN0JyAmJiAnbWVyZ2VkUHJvcGVydGllcycgaW4gZXh0ZW5zaW9ucykge1xuICAgICAgbGV0IG1lcmdlZDogc3RyaW5nW107XG4gICAgICBsZXQgcmF3TWVyZ2VkID0gZXh0ZW5zaW9ucy5tZXJnZWRQcm9wZXJ0aWVzO1xuXG4gICAgICBpZiAoaXNBcnJheShyYXdNZXJnZWQpKSB7XG4gICAgICAgIG1lcmdlZCA9IChyYXdNZXJnZWQgYXMgc3RyaW5nW10pLnNsaWNlKCk7XG4gICAgICB9IGVsc2UgaWYgKHJhd01lcmdlZCA9PT0gbnVsbCB8fCByYXdNZXJnZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtZXJnZWQgPSBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lcmdlZCA9IFtyYXdNZXJnZWQgYXMgc3RyaW5nXTtcbiAgICAgIH1cblxuICAgICAgZGVsZXRlIGV4dGVuc2lvbnMubWVyZ2VkUHJvcGVydGllcztcbiAgICAgIHRoaXMubWVyZ2VkUHJvcGVydGllcyA9IG1lcmdlZDtcbiAgICB9XG5cbiAgICBsZXQgbm9ybWFsaXplZDogRGljdDxCbHVlcHJpbnQ+ID0gT2JqZWN0LmtleXMoZXh0ZW5zaW9ucykucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gZXh0ZW5zaW9uc1trZXldO1xuXG4gICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgICAgb2JqW2tleV0gPSBuZXcgTWV0aG9kQmx1ZXByaW50KHsgdmFsdWUgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgaWYgKHZhbHVlICYmIEJMVUVQUklOVCBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIG9ialtrZXldID0gbmV3IERhdGFCbHVlcHJpbnQoeyB2YWx1ZSB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LCBkaWN0PEJsdWVwcmludD4oKSk7XG5cbiAgICB0aGlzLmV4dGVuc2lvbnMgPSBkaWN0PGFueT4oKTtcbiAgICBhc3NpZ24odGhpcy5leHRlbnNpb25zLCB0dXJib2NoYXJnZShub3JtYWxpemVkKSk7XG4gIH1cblxuICBhcHBseSh0YXJnZXQ6IGFueSkge1xuICAgIGxldCBtZXRhOiBDbGFzc01ldGEgPSAodGFyZ2V0W0NMQVNTX01FVEFdID0gdGFyZ2V0W0NMQVNTX01FVEFdIHx8IG5ldyBDbGFzc01ldGEoKSk7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuZm9yRWFjaChtID0+IG0uYXBwbHkodGFyZ2V0KSk7XG4gICAgdGhpcy5tZXJnZVByb3BlcnRpZXModGFyZ2V0LCB0YXJnZXQsIG1ldGEpO1xuICAgIG1ldGEuYWRkTWl4aW4odGhpcyk7XG4gICAgbWV0YS5zZWFsKCk7XG4gICAgbWV0YS5yZXNlYWwodGFyZ2V0KTtcblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBleHRlbmRQcm90b3R5cGUoT3JpZ2luYWw6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICBPcmlnaW5hbC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9yaWdpbmFsLnByb3RvdHlwZSk7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuZm9yRWFjaChtID0+IG0uZXh0ZW5kUHJvdG90eXBlKE9yaWdpbmFsKSk7XG4gICAgdGhpcy5leHRlbmRQcm90b3R5cGVPbnRvKE9yaWdpbmFsLCBPcmlnaW5hbCk7XG4gIH1cblxuICBleHRlbmRQcm90b3R5cGVPbnRvKFN1YmNsYXNzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+LCBQYXJlbnQ6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKG0gPT4gbS5leHRlbmRQcm90b3R5cGVPbnRvKFN1YmNsYXNzLCBQYXJlbnQpKTtcbiAgICB0aGlzLm1lcmdlUHJvcGVydGllcyhTdWJjbGFzcy5wcm90b3R5cGUsIFBhcmVudC5wcm90b3R5cGUsIFN1YmNsYXNzW0NMQVNTX01FVEFdKTtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5hZGRNaXhpbih0aGlzKTtcbiAgfVxuXG4gIGV4dGVuZFN0YXRpYyhUYXJnZXQ6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKG0gPT4gbS5leHRlbmRTdGF0aWMoVGFyZ2V0KSk7XG4gICAgdGhpcy5tZXJnZVByb3BlcnRpZXMoVGFyZ2V0LCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoVGFyZ2V0KSwgVGFyZ2V0W0NMQVNTX01FVEFdW0NMQVNTX01FVEFdKTtcbiAgICBUYXJnZXRbQ0xBU1NfTUVUQV0uYWRkU3RhdGljTWl4aW4odGhpcyk7XG4gIH1cblxuICBtZXJnZVByb3BlcnRpZXModGFyZ2V0OiBPYmplY3QsIHBhcmVudDogRGljdDxEaWN0PiwgbWV0YTogQ2xhc3NNZXRhKSB7XG4gICAgaWYgKG1ldGEuaGFzQXBwbGllZE1peGluKHRoaXMpKSByZXR1cm47XG4gICAgbWV0YS5hZGRBcHBsaWVkTWl4aW4odGhpcyk7XG5cbiAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXMuZm9yRWFjaChrID0+IG1ldGEuYWRkTWVyZ2VkUHJvcGVydHkoaywgcGFyZW50W2tdKSk7XG4gICAgdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzLmZvckVhY2goayA9PiBtZXRhLmFkZENvbmNhdGVuYXRlZFByb3BlcnR5KGssIFtdKSk7XG5cbiAgICBuZXcgVmFsdWVEZXNjcmlwdG9yKHsgdmFsdWU6IG1ldGEuZ2V0Q29uY2F0ZW5hdGVkUHJvcGVydGllcygpIH0pLmRlZmluZShcbiAgICAgIHRhcmdldCxcbiAgICAgICdjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzJ1xuICAgICk7XG4gICAgbmV3IFZhbHVlRGVzY3JpcHRvcih7IHZhbHVlOiBtZXRhLmdldE1lcmdlZFByb3BlcnRpZXMoKSB9KS5kZWZpbmUodGFyZ2V0LCAnbWVyZ2VkUHJvcGVydGllcycpO1xuXG4gICAgT2JqZWN0LmtleXModGhpcy5leHRlbnNpb25zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBsZXQgZXh0ZW5zaW9uOiBCbHVlcHJpbnQgPSB0aGlzLmV4dGVuc2lvbnMhW2tleV07XG4gICAgICBsZXQgZGVzYyA9IGV4dGVuc2lvbi5kZXNjcmlwdG9yKHRhcmdldCwga2V5IGFzIHN0cmluZywgbWV0YSk7XG4gICAgICBkZXNjLmRlZmluZSh0YXJnZXQsIGtleSBhcyBzdHJpbmcsIHBhcmVudCk7XG4gICAgfSk7XG5cbiAgICBuZXcgVmFsdWVEZXNjcmlwdG9yKHsgdmFsdWU6IFJPT1QgfSkuZGVmaW5lKHRhcmdldCwgJ19zdXBlcicgYXMgc3RyaW5nKTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBFeHRlbnNpb24gPSBNaXhpbiB8IEV4dGVuc2lvbnM7XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQ8VCBleHRlbmRzIEdsaW1tZXJPYmplY3Q+KFxuICBQYXJlbnQ6IEdsaW1tZXJPYmplY3RGYWN0b3J5PFQ+LFxuICAuLi5leHRlbnNpb25zOiBFeHRlbnNpb25bXVxuKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiB7XG4gIGxldCBTdXBlciA9IFBhcmVudCBhcyB0eXBlb2YgR2xpbW1lck9iamVjdDtcblxuICBsZXQgU3ViY2xhc3MgPSBjbGFzcyBleHRlbmRzIFN1cGVyIHt9O1xuICBTdWJjbGFzc1tDTEFTU19NRVRBXSA9IEluc3RhbmNlTWV0YS5mcm9tUGFyZW50KFBhcmVudFtDTEFTU19NRVRBXSk7XG5cbiAgbGV0IG1peGlucyA9IGV4dGVuc2lvbnMubWFwKHRvTWl4aW4pO1xuICBQYXJlbnRbQ0xBU1NfTUVUQV0uYWRkU3ViY2xhc3MoU3ViY2xhc3MgYXMgR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pik7XG4gIG1peGlucy5mb3JFYWNoKG0gPT4gU3ViY2xhc3NbQ0xBU1NfTUVUQV0uYWRkTWl4aW4obSkpO1xuXG4gIENsYXNzTWV0YS5hcHBseUFsbE1peGlucyhTdWJjbGFzcyBhcyBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+LCBQYXJlbnQpO1xuXG4gIHJldHVybiBTdWJjbGFzcyBhcyBhbnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxpbmtTdWJjbGFzc2VzKFBhcmVudDogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICBQYXJlbnRbQ0xBU1NfTUVUQV0uZ2V0U3ViY2xhc3NlcygpLmZvckVhY2goKFN1YmNsYXNzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KSA9PiB7XG4gICAgU3ViY2xhc3NbQ0xBU1NfTUVUQV0ucmVzZXQoUGFyZW50W0NMQVNTX01FVEFdKTtcbiAgICBTdWJjbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFBhcmVudC5wcm90b3R5cGUpO1xuXG4gICAgQ2xhc3NNZXRhLmFwcGx5QWxsTWl4aW5zKFN1YmNsYXNzLCBQYXJlbnQpO1xuXG4gICAgLy8gcmVjdXJzZSBpbnRvIHN1Yi1zdWJjbGFzc2VzXG4gICAgcmVsaW5rU3ViY2xhc3NlcyhTdWJjbGFzcyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9NaXhpbihleHRlbnNpb246IEV4dGVuc2lvbik6IE1peGluIHtcbiAgaWYgKGV4dGVuc2lvbiBpbnN0YW5jZW9mIE1peGluKSByZXR1cm4gZXh0ZW5zaW9uO1xuICBlbHNlIHJldHVybiBuZXcgTWl4aW4oZXh0ZW5zaW9uIGFzIE9iamVjdCwgW10pO1xufVxuXG5jbGFzcyBWYWx1ZURlc2NyaXB0b3IgZXh0ZW5kcyBEZXNjcmlwdG9yIHtcbiAgcHVibGljIGVudW1lcmFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyBjb25maWd1cmFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyB3cml0YWJsZTogYm9vbGVhbjtcbiAgcHVibGljIHZhbHVlOiBhbnk7XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIGVudW1lcmFibGUgPSB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZSA9IHRydWUsXG4gICAgd3JpdGFibGUgPSB0cnVlLFxuICAgIHZhbHVlLFxuICB9OiBQcm9wZXJ0eURlc2NyaXB0b3IpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZW51bWVyYWJsZSA9IGVudW1lcmFibGU7XG4gICAgdGhpcy5jb25maWd1cmFibGUgPSBjb25maWd1cmFibGU7XG4gICAgdGhpcy53cml0YWJsZSA9IHdyaXRhYmxlO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGRlZmluZSh0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIF9ob21lPzogYW55KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCB7XG4gICAgICBlbnVtZXJhYmxlOiB0aGlzLmVudW1lcmFibGUsXG4gICAgICBjb25maWd1cmFibGU6IHRoaXMuY29uZmlndXJhYmxlLFxuICAgICAgd3JpdGFibGU6IHRoaXMud3JpdGFibGUsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YUJsdWVwcmludCBleHRlbmRzIEJsdWVwcmludCB7XG4gIHB1YmxpYyBlbnVtZXJhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgY29uZmlndXJhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgdmFsdWU6IGFueTtcbiAgcHVibGljIHdyaXRhYmxlOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBlbnVtZXJhYmxlID0gdHJ1ZSxcbiAgICBjb25maWd1cmFibGUgPSB0cnVlLFxuICAgIHdyaXRhYmxlID0gdHJ1ZSxcbiAgICB2YWx1ZSxcbiAgfTogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmVudW1lcmFibGUgPSBlbnVtZXJhYmxlO1xuICAgIHRoaXMuY29uZmlndXJhYmxlID0gY29uZmlndXJhYmxlO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLndyaXRhYmxlID0gd3JpdGFibGU7XG4gIH1cblxuICBkZXNjcmlwdG9yKF90YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIGNsYXNzTWV0YTogQ2xhc3NNZXRhKTogRGVzY3JpcHRvciB7XG4gICAgbGV0IHsgZW51bWVyYWJsZSwgY29uZmlndXJhYmxlLCB3cml0YWJsZSwgdmFsdWUgfSA9IHRoaXM7XG5cbiAgICBpZiAoY2xhc3NNZXRhLmhhc0NvbmNhdGVuYXRlZFByb3BlcnR5KGtleSBhcyBzdHJpbmcpKSB7XG4gICAgICBjbGFzc01ldGEuYWRkQ29uY2F0ZW5hdGVkUHJvcGVydHkoa2V5IGFzIHN0cmluZywgdmFsdWUpO1xuICAgICAgdmFsdWUgPSBjbGFzc01ldGEuZ2V0Q29uY2F0ZW5hdGVkUHJvcGVydHkoa2V5IGFzIHN0cmluZyk7XG4gICAgfSBlbHNlIGlmIChjbGFzc01ldGEuaGFzTWVyZ2VkUHJvcGVydHkoa2V5IGFzIHN0cmluZykpIHtcbiAgICAgIGNsYXNzTWV0YS5hZGRNZXJnZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nLCB2YWx1ZSk7XG4gICAgICB2YWx1ZSA9IGNsYXNzTWV0YS5nZXRNZXJnZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFZhbHVlRGVzY3JpcHRvcih7IGVudW1lcmFibGUsIGNvbmZpZ3VyYWJsZSwgd3JpdGFibGUsIHZhbHVlIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBY2Nlc3NvckJsdWVwcmludCBleHRlbmRzIEJsdWVwcmludCB7XG4gIHB1YmxpYyBlbnVtZXJhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgY29uZmlndXJhYmxlOiBib29sZWFuO1xuICBnZXQ6ICgpID0+IGFueTtcbiAgc2V0OiAodmFsdWU6IGFueSkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgZW51bWVyYWJsZSA9IHRydWUsXG4gICAgY29uZmlndXJhYmxlID0gdHJ1ZSxcbiAgICBnZXQsXG4gICAgc2V0LFxuICB9OiBQcm9wZXJ0eURlc2NyaXB0b3IgJiB7IGdldDogYW55OyBzZXQ6IGFueSB9KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmVudW1lcmFibGUgPSBlbnVtZXJhYmxlO1xuICAgIHRoaXMuY29uZmlndXJhYmxlID0gY29uZmlndXJhYmxlO1xuICAgIHRoaXMuZ2V0ID0gZ2V0O1xuICAgIHRoaXMuc2V0ID0gc2V0O1xuICB9XG5cbiAgZGVzY3JpcHRvcihfdGFyZ2V0OiBPYmplY3QsIF9rZXk6IHN0cmluZywgX2NsYXNzTWV0YTogQ2xhc3NNZXRhKTogRGVzY3JpcHRvciB7XG4gICAgcmV0dXJuIG5ldyBWYWx1ZURlc2NyaXB0b3Ioe1xuICAgICAgZW51bWVyYWJsZTogdGhpcy5lbnVtZXJhYmxlLFxuICAgICAgY29uZmlndXJhYmxlOiB0aGlzLmNvbmZpZ3VyYWJsZSxcbiAgICAgIGdldDogdGhpcy5nZXQsXG4gICAgICBzZXQ6IHRoaXMuc2V0LFxuICAgIH0pO1xuICB9XG59XG5cbmNsYXNzIE1ldGhvZERlc2NyaXB0b3IgZXh0ZW5kcyBWYWx1ZURlc2NyaXB0b3Ige1xuICBkZWZpbmUodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nLCBob21lOiBEaWN0KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHdyYXBNZXRob2QoaG9tZSwga2V5LCB0aGlzLnZhbHVlKTtcbiAgICBzdXBlci5kZWZpbmUodGFyZ2V0LCBrZXksIGhvbWUpO1xuICB9XG59XG5cbmNsYXNzIE1ldGhvZEJsdWVwcmludCBleHRlbmRzIERhdGFCbHVlcHJpbnQge1xuICBkZXNjcmlwdG9yKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgY2xhc3NNZXRhOiBDbGFzc01ldGEpOiBNZXRob2REZXNjcmlwdG9yIHtcbiAgICBsZXQgZGVzYyA9IHN1cGVyLmRlc2NyaXB0b3IodGFyZ2V0LCBrZXksIGNsYXNzTWV0YSk7XG4gICAgcmV0dXJuIG5ldyBNZXRob2REZXNjcmlwdG9yKGRlc2MgYXMgUHJvcGVydHlEZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JhcE1ldGhvZChob21lOiBEaWN0LCBtZXRob2ROYW1lOiBzdHJpbmcsIG9yaWdpbmFsOiAoLi4uYXJnczogYW55W10pID0+IGFueSkge1xuICBpZiAoISgobWV0aG9kTmFtZSBhcyBzdHJpbmcpIGluIGhvbWUpKSByZXR1cm4gbWF5YmVXcmFwKG9yaWdpbmFsKTtcblxuICBsZXQgc3VwZXJNZXRob2QgPSBob21lW21ldGhvZE5hbWVdO1xuXG4gIGxldCBmdW5jID0gZnVuY3Rpb24odGhpczogR2xpbW1lck9iamVjdCwgLi4uYXJnczogYW55W10pIHtcbiAgICBpZiAoIXRoaXMpIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcblxuICAgIGxldCBsYXN0U3VwZXIgPSB0aGlzLl9zdXBlcjtcbiAgICB0aGlzLl9zdXBlciA9IHN1cGVyTWV0aG9kIGFzIGFueTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX3N1cGVyID0gbGFzdFN1cGVyO1xuICAgIH1cbiAgfTtcblxuICAoZnVuYyBhcyBhbnkpLl9fd3JhcHBlZCA9IHRydWU7XG5cbiAgcmV0dXJuIGZ1bmM7XG59XG5cbmZ1bmN0aW9uIG1heWJlV3JhcChvcmlnaW5hbDogRnVuY3Rpb24pIHtcbiAgaWYgKCdfX3dyYXBwZWQnIGluIG9yaWdpbmFsKSByZXR1cm4gb3JpZ2luYWw7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHRoaXM6IEdsaW1tZXJPYmplY3QsIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgaWYgKCF0aGlzKSByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG5cbiAgICBsZXQgbGFzdFN1cGVyID0gdGhpcy5fc3VwZXI7XG4gICAgdGhpcy5fc3VwZXIgPSBST09UO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fc3VwZXIgPSBsYXN0U3VwZXI7XG4gICAgfVxuICB9O1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvbWl4aW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxTQUFTLFVBQVQsUUFBMkIsMkJBQTNCO0FBQ0EsU0FBUyxJQUFULEVBQWUsTUFBZixFQUF1QixNQUF2QixRQUFxQyxlQUFyQztBQUNBLFNBRUUsU0FGRixFQUdFLFlBSEYsRUFJRSxXQUpGLFFBS08sVUFMUDtBQU9BLFNBQVMsSUFBVCxRQUFxQixTQUFyQjtBQUdBLE1BQU07QUFBRSxFQUFBO0FBQUYsSUFBYyxLQUFwQjtBQUVBLE9BQU8sTUFBTSxVQUFVLEdBQWtCLE1BQU0sQ0FBQyxZQUFELENBQXhDO0FBQ1AsT0FBTyxNQUFNLFNBQVMsR0FBa0IsTUFBTSxDQUFDLFdBQUQsQ0FBdkM7QUFFUCxPQUFNLE1BQWdCLFVBQWhCLENBQTBCO0FBQWhDLEVBQUEsV0FBQSxHQUFBO0FBQ0UsU0FBQSxFQUFBLElBQWUsSUFBZjtBQUVEOztBQUgrQjtLQUM3QixVO0FBSUgsT0FBTSxNQUFnQixTQUFoQixDQUF5QjtBQUEvQixFQUFBLFdBQUEsR0FBQTtBQUNFLFNBQUEsRUFBQSxJQUFjLElBQWQ7QUFFRDs7QUFIOEI7S0FDNUIsUztBQVdILE9BQU0sTUFBTyxLQUFQLENBQVk7QUE0QmhCLEVBQUEsV0FBQSxDQUFZLFVBQVosRUFBb0MsTUFBcEMsRUFBbUQ7QUEzQjNDLFNBQUEsVUFBQSxHQUF3QixJQUF4QixDQTJCMkMsQ0EzQk47O0FBQ3JDLFNBQUEsc0JBQUEsR0FBbUMsRUFBbkM7QUFDQSxTQUFBLGdCQUFBLEdBQTZCLEVBQTdCO0FBQ0EsU0FBQSxZQUFBLEdBQXdCLEVBQXhCO0FBeUJOLFNBQUssTUFBTCxDQUFZLFVBQVo7QUFDQSxTQUFLLFlBQUwsQ0FBa0IsSUFBbEIsQ0FBdUIsR0FBRyxNQUExQjtBQUNEOztBQXpCRCxTQUFPLE1BQVAsQ0FBYyxHQUFHLElBQWpCLEVBQTZDO0FBQzNDLFFBQUksVUFBVSxHQUFH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LFNBQVMsR0FBRyxLQUFLLE1BQXJCO0FBQ0EsU0FBSyxNQUFMLEdBQWMsV0FBZDs7QUFFQSxRQUFJO0FBQ0YsYUFBTyxRQUFRLENBQUMsS0FBVCxDQUFlLElBQWYsRUFBcUIsSUFBckIsQ0FBUDtBQUNELEtBRkQsU0FFVTtBQUNSLFdBQUssTUFBTCxHQUFjLFNBQWQ7QUFDRDtBQUNGLEdBWEQ7O0FBYUMsRUFBQSxJQUFZLENBQUMsU0FBYixHQUF5QixJQUF6QjtBQUVELFNBQU8sSUFBUDtBQUNEOztBQUVELFNBQVMsU0FBVCxDQUFtQixRQUFuQixFQUFxQztBQUNuQyxNQUFJLGVBQWUsUUFBbkIsRUFBNkIsT0FBTyxRQUFQO0FBRTdCLFNBQU8sVUFBOEIsR0FBRyxJQUFqQyxFQUE0QztBQUNqRCxRQUFJLENBQUMsSUFBTCxFQUFXLE9BQU8sUUFBUSxDQUFDLEtBQVQsQ0FBZSxJQUFmLEVBQXFCLElBQXJCLENBQVA7QUFFWCxRQUFJLFNBQVMsR0FBRyxLQUFLLE1BQXJCO0FBQ0EsU0FBSyxNQUFMLEdBQWMsSUFBZDs7QUFFQSxRQUFJO0FBQ0YsYUFBTyxRQUFRLENBQUMsS0FBVCxDQUFlLElBQWYsRUFBcUIsSUFBckIsQ0FBUDtBQUNELEtBRkQsU0FFVTtBQUNSLFdBQUssTUFBTCxHQUFjLFNBQWQ7QUFDRDtBQUNGLEdBWEQ7QUFZRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENMQVNTX01FVEEgfSBmcm9tICdAZ2xpbW1lci9vYmplY3QtcmVmZXJlbmNlJztcbmltcG9ydCB7IGRpY3QsIGFzc2lnbiwgc3ltYm9sIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgR2xpbW1lck9iamVjdCwge1xuICBHbGltbWVyT2JqZWN0RmFjdG9yeSxcbiAgQ2xhc3NNZXRhLFxuICBJbnN0YW5jZU1ldGEsXG4gIHR1cmJvY2hhcmdlLFxufSBmcm9tICcuL29iamVjdCc7XG5cbmltcG9ydCB7IFJPT1QgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IERpY3QgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcblxuY29uc3QgeyBpc0FycmF5IH0gPSBBcnJheTtcblxuZXhwb3J0IGNvbnN0IERFU0NSSVBUT1I6IHVuaXF1ZSBzeW1ib2wgPSBzeW1ib2woJ0RFU0NSSVBUT1InKTtcbmV4cG9ydCBjb25zdCBCTFVFUFJJTlQ6IHVuaXF1ZSBzeW1ib2wgPSBzeW1ib2woJ0JMVUVQUklOVCcpO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGVzY3JpcHRvciB7XG4gIFtERVNDUklQVE9SXSA9IHRydWU7XG4gIGFic3RyYWN0IGRlZmluZShwcm90b3R5cGU6IE9iamVjdCwga2V5OiBzdHJpbmcsIGhvbWU6IE9iamVjdCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbHVlcHJpbnQge1xuICBbQkxVRVBSSU5UXSA9IHRydWU7XG4gIGFic3RyYWN0IGRlc2NyaXB0b3IodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nLCBjbGFzc01ldGE6IENsYXNzTWV0YSk6IERlc2NyaXB0b3I7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5zaW9ucyB7XG4gIGNvbmNhdGVuYXRlZFByb3BlcnRpZXM/OiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGw7XG4gIG1lcmdlZFByb3BlcnRpZXM/OiBzdHJpbmdbXSB8IHN0cmluZztcbiAgX3N1cGVyPzogRnVuY3Rpb247XG4gIFtpbmRleDogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgTWl4aW4ge1xuICBwcml2YXRlIGV4dGVuc2lvbnM6IERpY3Q8YW55PiA9IG51bGwgYXMgYW55OyAvLyBhc3NpZ25lZCBiZWZvcmUgdXNlZFxuICBwcml2YXRlIGNvbmNhdGVuYXRlZFByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgbWVyZ2VkUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBkZXBlbmRlbmNpZXM6IE1peGluW10gPSBbXTtcblxuICBzdGF0aWMgY3JlYXRlKC4uLmFyZ3M6IChNaXhpbiB8IEV4dGVuc2lvbnMpW10pIHtcbiAgICBsZXQgZXh0ZW5zaW9ucyA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcblxuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG5ldyB0aGlzKHt9LCBbXSk7XG4gICAgfSBlbHNlIGlmIChleHRlbnNpb25zIGluc3RhbmNlb2YgTWl4aW4pIHtcbiAgICAgIHJldHVybiBuZXcgdGhpcyh7fSwgYXJncyBhcyBNaXhpbltdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGRlcHMgPSBhcmdzLnNsaWNlKDAsIC0xKS5tYXAodG9NaXhpbik7XG4gICAgICByZXR1cm4gbmV3IHRoaXMoZXh0ZW5zaW9ucyBhcyBFeHRlbnNpb25zLCBkZXBzKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgbWl4aW5zKG9iajogYW55KTogTWl4aW5bXSB7XG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IG9iaiA9PT0gbnVsbCkgcmV0dXJuIFtdO1xuXG4gICAgbGV0IG1ldGEgPSBDbGFzc01ldGEuZm9yKG9iaik7XG4gICAgaWYgKCFtZXRhKSByZXR1cm4gW107XG5cbiAgICByZXR1cm4gbWV0YS5nZXRBcHBsaWVkTWl4aW5zKCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihleHRlbnNpb25zOiBFeHRlbnNpb25zLCBtaXhpbnM6IE1peGluW10pIHtcbiAgICB0aGlzLnJlb3BlbihleHRlbnNpb25zKTtcbiAgICB0aGlzLmRlcGVuZGVuY2llcy5wdXNoKC4uLm1peGlucyk7XG4gIH1cblxuICBkZXRlY3Qob2JqOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgTWl4aW4pIHtcbiAgICAgIHJldHVybiBvYmouZGVwZW5kZW5jaWVzLmluZGV4T2YodGhpcykgIT09IC0xO1xuICAgIH1cblxuICAgIGxldCBtZXRhID0gQ2xhc3NNZXRhLmZvcihvYmopO1xuICAgIHJldHVybiAhIW1ldGEgJiYgbWV0YS5oYXNBcHBsaWVkTWl4aW4odGhpcyk7XG4gIH1cblxuICByZW9wZW4oZXh0ZW5zaW9uczogRXh0ZW5zaW9ucykge1xuICAgIGlmICh0aGlzLmV4dGVuc2lvbnMpIHtcbiAgICAgIHRoaXMuZGVwZW5kZW5jaWVzLnB1c2godG9NaXhpbih0aGlzLmV4dGVuc2lvbnMpKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGV4dGVuc2lvbnMgPT09ICdvYmplY3QnICYmICdjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzJyBpbiBleHRlbnNpb25zKSB7XG4gICAgICBsZXQgY29uY2F0OiBzdHJpbmdbXTtcbiAgICAgIGxldCByYXdDb25jYXQgPSBleHRlbnNpb25zLmNvbmNhdGVuYXRlZFByb3BlcnRpZXM7XG5cbiAgICAgIGlmIChpc0FycmF5KHJhd0NvbmNhdCkpIHtcbiAgICAgICAgY29uY2F0ID0gKHJhd0NvbmNhdCBhcyBzdHJpbmdbXSkuc2xpY2UoKTtcbiAgICAgIH0gZWxzZSBpZiAocmF3Q29uY2F0ID09PSBudWxsIHx8IHJhd0NvbmNhdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbmNhdCA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uY2F0ID0gW3Jhd0NvbmNhdCBhcyBzdHJpbmddO1xuICAgICAgfVxuXG4gICAgICBkZWxldGUgZXh0ZW5zaW9ucy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzO1xuICAgICAgdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gY29uY2F0O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXh0ZW5zaW9ucyA9PT0gJ29iamVjdCcgJiYgJ21lcmdlZFByb3BlcnRpZXMnIGluIGV4dGVuc2lvbnMpIHtcbiAgICAgIGxldCBtZXJnZWQ6IHN0cmluZ1tdO1xuICAgICAgbGV0IHJhd01lcmdlZCA9IGV4dGVuc2lvbnMubWVyZ2VkUHJvcGVydGllcztcblxuICAgICAgaWYgKGlzQXJyYXkocmF3TWVyZ2VkKSkge1xuICAgICAgICBtZXJnZWQgPSAocmF3TWVyZ2VkIGFzIHN0cmluZ1tdKS5zbGljZSgpO1xuICAgICAgfSBlbHNlIGlmIChyYXdNZXJnZWQgPT09IG51bGwgfHwgcmF3TWVyZ2VkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWVyZ2VkID0gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXJnZWQgPSBbcmF3TWVyZ2VkIGFzIHN0cmluZ107XG4gICAgICB9XG5cbiAgICAgIGRlbGV0ZSBleHRlbnNpb25zLm1lcmdlZFByb3BlcnRpZXM7XG4gICAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXMgPSBtZXJnZWQ7XG4gICAgfVxuXG4gICAgbGV0IG5vcm1hbGl6ZWQ6IERpY3Q8Qmx1ZXByaW50PiA9IE9iamVjdC5rZXlzKGV4dGVuc2lvbnMpLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGV4dGVuc2lvbnNba2V5XTtcblxuICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgIG9ialtrZXldID0gbmV3IE1ldGhvZEJsdWVwcmludCh7IHZhbHVlIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgIGlmICh2YWx1ZSAmJiBCTFVFUFJJTlQgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBvYmpba2V5XSA9IG5ldyBEYXRhQmx1ZXByaW50KHsgdmFsdWUgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSwgZGljdDxCbHVlcHJpbnQ+KCkpO1xuXG4gICAgdGhpcy5leHRlbnNpb25zID0gZGljdDxhbnk+KCk7XG4gICAgYXNzaWduKHRoaXMuZXh0ZW5zaW9ucywgdHVyYm9jaGFyZ2Uobm9ybWFsaXplZCkpO1xuICB9XG5cbiAgYXBwbHkodGFyZ2V0OiBhbnkpIHtcbiAgICBsZXQgbWV0YTogQ2xhc3NNZXRhID0gKHRhcmdldFtDTEFTU19NRVRBXSA9IHRhcmdldFtDTEFTU19NRVRBXSB8fCBuZXcgQ2xhc3NNZXRhKCkpO1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzLmZvckVhY2gobSA9PiBtLmFwcGx5KHRhcmdldCkpO1xuICAgIHRoaXMubWVyZ2VQcm9wZXJ0aWVzKHRhcmdldCwgdGFyZ2V0LCBtZXRhKTtcbiAgICBtZXRhLmFkZE1peGluKHRoaXMpO1xuICAgIG1ldGEuc2VhbCgpO1xuICAgIG1ldGEucmVzZWFsKHRhcmdldCk7XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgZXh0ZW5kUHJvdG90eXBlKE9yaWdpbmFsOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KSB7XG4gICAgT3JpZ2luYWwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPcmlnaW5hbC5wcm90b3R5cGUpO1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzLmZvckVhY2gobSA9PiBtLmV4dGVuZFByb3RvdHlwZShPcmlnaW5hbCkpO1xuICAgIHRoaXMuZXh0ZW5kUHJvdG90eXBlT250byhPcmlnaW5hbCwgT3JpZ2luYWwpO1xuICB9XG5cbiAgZXh0ZW5kUHJvdG90eXBlT250byhTdWJjbGFzczogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiwgUGFyZW50OiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KSB7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuZm9yRWFjaChtID0+IG0uZXh0ZW5kUHJvdG90eXBlT250byhTdWJjbGFzcywgUGFyZW50KSk7XG4gICAgdGhpcy5tZXJnZVByb3BlcnRpZXMoU3ViY2xhc3MucHJvdG90eXBlLCBQYXJlbnQucHJvdG90eXBlLCBTdWJjbGFzc1tDTEFTU19NRVRBXSk7XG4gICAgU3ViY2xhc3NbQ0xBU1NfTUVUQV0uYWRkTWl4aW4odGhpcyk7XG4gIH1cblxuICBleHRlbmRTdGF0aWMoVGFyZ2V0OiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KSB7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuZm9yRWFjaChtID0+IG0uZXh0ZW5kU3RhdGljKFRhcmdldCkpO1xuICAgIHRoaXMubWVyZ2VQcm9wZXJ0aWVzKFRhcmdldCwgT2JqZWN0LmdldFByb3RvdHlwZU9mKFRhcmdldCksIFRhcmdldFtDTEFTU19NRVRBXVtDTEFTU19NRVRBXSk7XG4gICAgVGFyZ2V0W0NMQVNTX01FVEFdLmFkZFN0YXRpY01peGluKHRoaXMpO1xuICB9XG5cbiAgbWVyZ2VQcm9wZXJ0aWVzKHRhcmdldDogT2JqZWN0LCBwYXJlbnQ6IERpY3Q8RGljdD4sIG1ldGE6IENsYXNzTWV0YSkge1xuICAgIGlmIChtZXRhLmhhc0FwcGxpZWRNaXhpbih0aGlzKSkgcmV0dXJuO1xuICAgIG1ldGEuYWRkQXBwbGllZE1peGluKHRoaXMpO1xuXG4gICAgdGhpcy5tZXJnZWRQcm9wZXJ0aWVzLmZvckVhY2goayA9PiBtZXRhLmFkZE1lcmdlZFByb3BlcnR5KGssIHBhcmVudFtrXSkpO1xuICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcy5mb3JFYWNoKGsgPT4gbWV0YS5hZGRDb25jYXRlbmF0ZWRQcm9wZXJ0eShrLCBbXSkpO1xuXG4gICAgbmV3IFZhbHVlRGVzY3JpcHRvcih7IHZhbHVlOiBtZXRhLmdldENvbmNhdGVuYXRlZFByb3BlcnRpZXMoKSB9KS5kZWZpbmUoXG4gICAgICB0YXJnZXQsXG4gICAgICAnY29uY2F0ZW5hdGVkUHJvcGVydGllcydcbiAgICApO1xuICAgIG5ldyBWYWx1ZURlc2NyaXB0b3IoeyB2YWx1ZTogbWV0YS5nZXRNZXJnZWRQcm9wZXJ0aWVzKCkgfSkuZGVmaW5lKHRhcmdldCwgJ21lcmdlZFByb3BlcnRpZXMnKTtcblxuICAgIE9iamVjdC5rZXlzKHRoaXMuZXh0ZW5zaW9ucykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgbGV0IGV4dGVuc2lvbjogQmx1ZXByaW50ID0gdGhpcy5leHRlbnNpb25zIVtrZXldO1xuICAgICAgbGV0IGRlc2MgPSBleHRlbnNpb24uZGVzY3JpcHRvcih0YXJnZXQsIGtleSBhcyBzdHJpbmcsIG1ldGEpO1xuICAgICAgZGVzYy5kZWZpbmUodGFyZ2V0LCBrZXkgYXMgc3RyaW5nLCBwYXJlbnQpO1xuICAgIH0pO1xuXG4gICAgbmV3IFZhbHVlRGVzY3JpcHRvcih7IHZhbHVlOiBST09UIH0pLmRlZmluZSh0YXJnZXQsICdfc3VwZXInIGFzIHN0cmluZyk7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgRXh0ZW5zaW9uID0gTWl4aW4gfCBFeHRlbnNpb25zO1xuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kPFQgZXh0ZW5kcyBHbGltbWVyT2JqZWN0PihcbiAgUGFyZW50OiBHbGltbWVyT2JqZWN0RmFjdG9yeTxUPixcbiAgLi4uZXh0ZW5zaW9uczogRXh0ZW5zaW9uW11cbik6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4ge1xuICBsZXQgU3VwZXIgPSBQYXJlbnQgYXMgdHlwZW9mIEdsaW1tZXJPYmplY3Q7XG5cbiAgbGV0IFN1YmNsYXNzID0gY2xhc3MgZXh0ZW5kcyBTdXBlciB7fTtcbiAgU3ViY2xhc3NbQ0xBU1NfTUVUQV0gPSBJbnN0YW5jZU1ldGEuZnJvbVBhcmVudChQYXJlbnRbQ0xBU1NfTUVUQV0pO1xuXG4gIGxldCBtaXhpbnMgPSBleHRlbnNpb25zLm1hcCh0b01peGluKTtcbiAgUGFyZW50W0NMQVNTX01FVEFdLmFkZFN1YmNsYXNzKFN1YmNsYXNzIGFzIEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pO1xuICBtaXhpbnMuZm9yRWFjaChtID0+IFN1YmNsYXNzW0NMQVNTX01FVEFdLmFkZE1peGluKG0pKTtcblxuICBDbGFzc01ldGEuYXBwbHlBbGxNaXhpbnMoU3ViY2xhc3MgYXMgR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiwgUGFyZW50KTtcblxuICByZXR1cm4gU3ViY2xhc3MgYXMgYW55O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVsaW5rU3ViY2xhc3NlcyhQYXJlbnQ6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgUGFyZW50W0NMQVNTX01FVEFdLmdldFN1YmNsYXNzZXMoKS5mb3JFYWNoKChTdWJjbGFzczogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PikgPT4ge1xuICAgIFN1YmNsYXNzW0NMQVNTX01FVEFdLnJlc2V0KFBhcmVudFtDTEFTU19NRVRBXSk7XG4gICAgU3ViY2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQYXJlbnQucHJvdG90eXBlKTtcblxuICAgIENsYXNzTWV0YS5hcHBseUFsbE1peGlucyhTdWJjbGFzcywgUGFyZW50KTtcblxuICAgIC8vIHJlY3Vyc2UgaW50byBzdWItc3ViY2xhc3Nlc1xuICAgIHJlbGlua1N1YmNsYXNzZXMoU3ViY2xhc3MpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvTWl4aW4oZXh0ZW5zaW9uOiBFeHRlbnNpb24pOiBNaXhpbiB7XG4gIGlmIChleHRlbnNpb24gaW5zdGFuY2VvZiBNaXhpbikgcmV0dXJuIGV4dGVuc2lvbjtcbiAgZWxzZSByZXR1cm4gbmV3IE1peGluKGV4dGVuc2lvbiBhcyBPYmplY3QsIFtdKTtcbn1cblxuY2xhc3MgVmFsdWVEZXNjcmlwdG9yIGV4dGVuZHMgRGVzY3JpcHRvciB7XG4gIHB1YmxpYyBlbnVtZXJhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgY29uZmlndXJhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgd3JpdGFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyB2YWx1ZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBlbnVtZXJhYmxlID0gdHJ1ZSxcbiAgICBjb25maWd1cmFibGUgPSB0cnVlLFxuICAgIHdyaXRhYmxlID0gdHJ1ZSxcbiAgICB2YWx1ZSxcbiAgfTogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmVudW1lcmFibGUgPSBlbnVtZXJhYmxlO1xuICAgIHRoaXMuY29uZmlndXJhYmxlID0gY29uZmlndXJhYmxlO1xuICAgIHRoaXMud3JpdGFibGUgPSB3cml0YWJsZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBkZWZpbmUodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nLCBfaG9tZT86IGFueSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xuICAgICAgZW51bWVyYWJsZTogdGhpcy5lbnVtZXJhYmxlLFxuICAgICAgY29uZmlndXJhYmxlOiB0aGlzLmNvbmZpZ3VyYWJsZSxcbiAgICAgIHdyaXRhYmxlOiB0aGlzLndyaXRhYmxlLFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFCbHVlcHJpbnQgZXh0ZW5kcyBCbHVlcHJpbnQge1xuICBwdWJsaWMgZW51bWVyYWJsZTogYm9vbGVhbjtcbiAgcHVibGljIGNvbmZpZ3VyYWJsZTogYm9vbGVhbjtcbiAgcHVibGljIHZhbHVlOiBhbnk7XG4gIHB1YmxpYyB3cml0YWJsZTogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgZW51bWVyYWJsZSA9IHRydWUsXG4gICAgY29uZmlndXJhYmxlID0gdHJ1ZSxcbiAgICB3cml0YWJsZSA9IHRydWUsXG4gICAgdmFsdWUsXG4gIH06IFByb3BlcnR5RGVzY3JpcHRvcikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5lbnVtZXJhYmxlID0gZW51bWVyYWJsZTtcbiAgICB0aGlzLmNvbmZpZ3VyYWJsZSA9IGNvbmZpZ3VyYWJsZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy53cml0YWJsZSA9IHdyaXRhYmxlO1xuICB9XG5cbiAgZGVzY3JpcHRvcihfdGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nLCBjbGFzc01ldGE6IENsYXNzTWV0YSk6IERlc2NyaXB0b3Ige1xuICAgIGxldCB7IGVudW1lcmFibGUsIGNvbmZpZ3VyYWJsZSwgd3JpdGFibGUsIHZhbHVlIH0gPSB0aGlzO1xuXG4gICAgaWYgKGNsYXNzTWV0YS5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nKSkge1xuICAgICAgY2xhc3NNZXRhLmFkZENvbmNhdGVuYXRlZFByb3BlcnR5KGtleSBhcyBzdHJpbmcsIHZhbHVlKTtcbiAgICAgIHZhbHVlID0gY2xhc3NNZXRhLmdldENvbmNhdGVuYXRlZFByb3BlcnR5KGtleSBhcyBzdHJpbmcpO1xuICAgIH0gZWxzZSBpZiAoY2xhc3NNZXRhLmhhc01lcmdlZFByb3BlcnR5KGtleSBhcyBzdHJpbmcpKSB7XG4gICAgICBjbGFzc01ldGEuYWRkTWVyZ2VkUHJvcGVydHkoa2V5IGFzIHN0cmluZywgdmFsdWUpO1xuICAgICAgdmFsdWUgPSBjbGFzc01ldGEuZ2V0TWVyZ2VkUHJvcGVydHkoa2V5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBWYWx1ZURlc2NyaXB0b3IoeyBlbnVtZXJhYmxlLCBjb25maWd1cmFibGUsIHdyaXRhYmxlLCB2YWx1ZSB9KTtcbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWNjZXNzb3JCbHVlcHJpbnQgZXh0ZW5kcyBCbHVlcHJpbnQge1xuICBwdWJsaWMgZW51bWVyYWJsZTogYm9vbGVhbjtcbiAgcHVibGljIGNvbmZpZ3VyYWJsZTogYm9vbGVhbjtcbiAgZ2V0OiAoKSA9PiBhbnk7XG4gIHNldDogKHZhbHVlOiBhbnkpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIGVudW1lcmFibGUgPSB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZSA9IHRydWUsXG4gICAgZ2V0LFxuICAgIHNldCxcbiAgfTogUHJvcGVydHlEZXNjcmlwdG9yICYgeyBnZXQ6IGFueTsgc2V0OiBhbnkgfSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5lbnVtZXJhYmxlID0gZW51bWVyYWJsZTtcbiAgICB0aGlzLmNvbmZpZ3VyYWJsZSA9IGNvbmZpZ3VyYWJsZTtcbiAgICB0aGlzLmdldCA9IGdldDtcbiAgICB0aGlzLnNldCA9IHNldDtcbiAgfVxuXG4gIGRlc2NyaXB0b3IoX3RhcmdldDogT2JqZWN0LCBfa2V5OiBzdHJpbmcsIF9jbGFzc01ldGE6IENsYXNzTWV0YSk6IERlc2NyaXB0b3Ige1xuICAgIHJldHVybiBuZXcgVmFsdWVEZXNjcmlwdG9yKHtcbiAgICAgIGVudW1lcmFibGU6IHRoaXMuZW51bWVyYWJsZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdGhpcy5jb25maWd1cmFibGUsXG4gICAgICBnZXQ6IHRoaXMuZ2V0LFxuICAgICAgc2V0OiB0aGlzLnNldCxcbiAgICB9KTtcbiAgfVxufVxuXG5jbGFzcyBNZXRob2REZXNjcmlwdG9yIGV4dGVuZHMgVmFsdWVEZXNjcmlwdG9yIHtcbiAgZGVmaW5lKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgaG9tZTogRGljdCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB3cmFwTWV0aG9kKGhvbWUsIGtleSwgdGhpcy52YWx1ZSk7XG4gICAgc3VwZXIuZGVmaW5lKHRhcmdldCwga2V5LCBob21lKTtcbiAgfVxufVxuXG5jbGFzcyBNZXRob2RCbHVlcHJpbnQgZXh0ZW5kcyBEYXRhQmx1ZXByaW50IHtcbiAgZGVzY3JpcHRvcih0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIGNsYXNzTWV0YTogQ2xhc3NNZXRhKTogTWV0aG9kRGVzY3JpcHRvciB7XG4gICAgbGV0IGRlc2MgPSBzdXBlci5kZXNjcmlwdG9yKHRhcmdldCwga2V5LCBjbGFzc01ldGEpO1xuICAgIHJldHVybiBuZXcgTWV0aG9kRGVzY3JpcHRvcihkZXNjIGFzIFByb3BlcnR5RGVzY3JpcHRvcik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBNZXRob2QoaG9tZTogRGljdCwgbWV0aG9kTmFtZTogc3RyaW5nLCBvcmlnaW5hbDogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpIHtcbiAgaWYgKCEoKG1ldGhvZE5hbWUgYXMgc3RyaW5nKSBpbiBob21lKSkgcmV0dXJuIG1heWJlV3JhcChvcmlnaW5hbCk7XG5cbiAgbGV0IHN1cGVyTWV0aG9kID0gaG9tZVttZXRob2ROYW1lXTtcblxuICBsZXQgZnVuYyA9IGZ1bmN0aW9uKHRoaXM6IEdsaW1tZXJPYmplY3QsIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgaWYgKCF0aGlzKSByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG5cbiAgICBsZXQgbGFzdFN1cGVyID0gdGhpcy5fc3VwZXI7XG4gICAgdGhpcy5fc3VwZXIgPSBzdXBlck1ldGhvZCBhcyBhbnk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9zdXBlciA9IGxhc3RTdXBlcjtcbiAgICB9XG4gIH07XG5cbiAgKGZ1bmMgYXMgYW55KS5fX3dyYXBwZWQgPSB0cnVlO1xuXG4gIHJldHVybiBmdW5jO1xufVxuXG5mdW5jdGlvbiBtYXliZVdyYXAob3JpZ2luYWw6IEZ1bmN0aW9uKSB7XG4gIGlmICgnX193cmFwcGVkJyBpbiBvcmlnaW5hbCkgcmV0dXJuIG9yaWdpbmFsO1xuXG4gIHJldHVybiBmdW5jdGlvbih0aGlzOiBHbGltbWVyT2JqZWN0LCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGlmICghdGhpcykgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXG4gICAgbGV0IGxhc3RTdXBlciA9IHRoaXMuX3N1cGVyO1xuICAgIHRoaXMuX3N1cGVyID0gUk9PVDtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX3N1cGVyID0gbGFzdFN1cGVyO1xuICAgIH1cbiAgfTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
var _a, _b;
import { Meta, PropertyReference, CLASS_META } from '@glimmer/object-reference';
import { dict, assign, initializeGuid } from '@glimmer/util';
import { extend as extendClass, toMixin, relinkSubclasses, wrapMethod } from './mixin';
const { isArray } = Array;
const {
isArray
} = Array;
import { ROOT } from './utils';

@@ -10,289 +13,366 @@ import { bump } from '@glimmer/validator';

export function turbocharge(obj) {
// function Dummy() {}
// Dummy.prototype = obj;
return obj;
// function Dummy() {}
// Dummy.prototype = obj;
return obj;
}
class SealedMeta extends Meta {
addReferenceTypeFor(..._args) {
throw new Error('Cannot modify reference types on a sealed meta');
}
addReferenceTypeFor(..._args) {
throw new Error('Cannot modify reference types on a sealed meta');
}
}
export class ClassMeta {
constructor() {
this.referenceTypes = dict();
this.propertyMetadata = dict();
this.concatenatedProperties = dict();
this.hasConcatenatedProperties = false;
this.mergedProperties = dict();
this.hasMergedProperties = false;
this.mixins = [];
this.appliedMixins = [];
this.staticMixins = [];
this.subclasses = [];
this.slots = [];
this.InstanceMetaConstructor = null;
constructor() {
this.referenceTypes = dict();
this.propertyMetadata = dict();
this.concatenatedProperties = dict();
this.hasConcatenatedProperties = false;
this.mergedProperties = dict();
this.hasMergedProperties = false;
this.mixins = [];
this.appliedMixins = [];
this.staticMixins = [];
this.subclasses = [];
this.slots = [];
this.InstanceMetaConstructor = null;
}
static fromParent(parent) {
let meta = new this();
meta.reset(parent);
return meta;
}
static for(object) {
if (CLASS_META in object) return object[CLASS_META];else if (object.constructor) return object.constructor[CLASS_META] || null;else return null;
}
init(object, attrs) {
if (typeof attrs !== 'object' || attrs === null) return;
if (this.hasConcatenatedProperties) {
let concatProps = this.concatenatedProperties;
for (let prop in concatProps) {
if (prop in attrs) {
let concat = concatProps[prop].slice();
object[prop] = concat.concat(attrs[prop]);
}
}
}
static fromParent(parent) {
let meta = new this();
meta.reset(parent);
return meta;
}
static for(object) {
if (CLASS_META in object) return object[CLASS_META];else if (object.constructor) return object.constructor[CLASS_META] || null;else return null;
}
init(object, attrs) {
if (typeof attrs !== 'object' || attrs === null) return;
if (this.hasConcatenatedProperties) {
let concatProps = this.concatenatedProperties;
for (let prop in concatProps) {
if (prop in attrs) {
let concat = concatProps[prop].slice();
object[prop] = concat.concat(attrs[prop]);
}
}
if (this.hasMergedProperties) {
let mergedProps = this.mergedProperties;
for (let prop in mergedProps) {
if (prop in attrs) {
let merged = assign({}, mergedProps[prop]);
object[prop] = assign(merged, attrs[prop]);
}
if (this.hasMergedProperties) {
let mergedProps = this.mergedProperties;
for (let prop in mergedProps) {
if (prop in attrs) {
let merged = assign({}, mergedProps[prop]);
object[prop] = assign(merged, attrs[prop]);
}
}
}
}
}
addStaticMixin(mixin) {
this.staticMixins.push(mixin);
}
addStaticMixin(mixin) {
this.staticMixins.push(mixin);
}
addMixin(mixin) {
this.mixins.push(mixin);
}
getStaticMixins() {
return this.staticMixins;
}
getMixins() {
return this.mixins;
}
addAppliedMixin(mixin) {
this.appliedMixins.push(mixin);
}
hasAppliedMixin(mixin) {
return this.appliedMixins.indexOf(mixin) !== -1;
}
getAppliedMixins() {
return this.appliedMixins;
}
hasStaticMixin(mixin) {
return this.staticMixins.indexOf(mixin) !== -1;
}
static applyAllMixins(Subclass, Parent) {
Subclass[CLASS_META].getMixins().forEach(m => m.extendPrototypeOnto(Subclass, Parent));
Subclass[CLASS_META].getStaticMixins().forEach(m => m.extendStatic(Subclass));
Subclass[CLASS_META].seal();
}
addSubclass(constructor) {
this.subclasses.push(constructor);
}
getSubclasses() {
return this.subclasses;
}
addPropertyMetadata(property, value) {
this.propertyMetadata[property] = value;
}
metadataForProperty(property) {
return this.propertyMetadata[property];
}
addReferenceTypeFor(property, type) {
this.referenceTypes[property] = type;
}
addSlotFor(property) {
this.slots.push(property);
}
hasConcatenatedProperty(property) {
if (!this.hasConcatenatedProperties) return false;
return property in this.concatenatedProperties;
}
getConcatenatedProperty(property) {
return this.concatenatedProperties[property];
}
getConcatenatedProperties() {
return Object.keys(this.concatenatedProperties);
}
addConcatenatedProperty(property, value) {
this.hasConcatenatedProperties = true;
if (property in this.concatenatedProperties) {
let val = this.concatenatedProperties[property].concat(value);
this.concatenatedProperties[property] = val;
} else {
this.concatenatedProperties[property] = value;
}
addMixin(mixin) {
this.mixins.push(mixin);
}
hasMergedProperty(property) {
if (!this.hasMergedProperties) return false;
return property in this.mergedProperties;
}
getMergedProperty(property) {
return this.mergedProperties[property];
}
getMergedProperties() {
return Object.keys(this.mergedProperties);
}
addMergedProperty(property, value) {
this.hasMergedProperties = true;
if (isArray(value)) {
throw new Error(`You passed in \`${JSON.stringify(value)}\` as the value for \`foo\` but \`foo\` cannot be an Array`);
}
getStaticMixins() {
return this.staticMixins;
if (property in this.mergedProperties && this.mergedProperties[property] && value) {
this.mergedProperties[property] = mergeMergedProperties(value, this.mergedProperties[property]);
} else {
value = value === null ? value : value || {};
this.mergedProperties[property] = value;
}
getMixins() {
return this.mixins;
}
getReferenceTypes() {
return this.referenceTypes;
}
getPropertyMetadata() {
return this.propertyMetadata;
}
reset(parent) {
this.referenceTypes = dict();
this.propertyMetadata = dict();
this.concatenatedProperties = dict();
this.mergedProperties = dict();
if (parent) {
this.hasConcatenatedProperties = parent.hasConcatenatedProperties;
for (let prop in parent.concatenatedProperties) {
this.concatenatedProperties[prop] = parent.concatenatedProperties[prop].slice();
}
this.hasMergedProperties = parent.hasMergedProperties;
for (let prop in parent.mergedProperties) {
this.mergedProperties[prop] = assign({}, parent.mergedProperties[prop]);
}
assign(this.referenceTypes, parent.referenceTypes);
assign(this.propertyMetadata, parent.propertyMetadata);
}
addAppliedMixin(mixin) {
this.appliedMixins.push(mixin);
}
reseal(obj) {
let meta = Meta.for(obj);
let fresh = new this.InstanceMetaConstructor(obj, {});
let referenceTypes = meta.getReferenceTypes();
let slots = meta.getSlots();
turbocharge(assign(referenceTypes, this.referenceTypes));
turbocharge(assign(slots, fresh.getSlots()));
}
seal() {
let referenceTypes = turbocharge(assign({}, this.referenceTypes));
turbocharge(this.concatenatedProperties);
turbocharge(this.mergedProperties);
if (!this.hasMergedProperties && !this.hasConcatenatedProperties) {
this.init = function () {};
}
hasAppliedMixin(mixin) {
return this.appliedMixins.indexOf(mixin) !== -1;
let slots = this.slots;
class Slots {
constructor() {
slots.forEach(name => {
this[name] = EMPTY_CACHE;
});
}
}
getAppliedMixins() {
return this.appliedMixins;
}
hasStaticMixin(mixin) {
return this.staticMixins.indexOf(mixin) !== -1;
}
static applyAllMixins(Subclass, Parent) {
Subclass[CLASS_META].getMixins().forEach(m => m.extendPrototypeOnto(Subclass, Parent));
Subclass[CLASS_META].getStaticMixins().forEach(m => m.extendStatic(Subclass));
Subclass[CLASS_META].seal();
}
addSubclass(constructor) {
this.subclasses.push(constructor);
}
getSubclasses() {
return this.subclasses;
}
addPropertyMetadata(property, value) {
this.propertyMetadata[property] = value;
}
metadataForProperty(property) {
return this.propertyMetadata[property];
}
addReferenceTypeFor(property, type) {
this.referenceTypes[property] = type;
}
addSlotFor(property) {
this.slots.push(property);
}
hasConcatenatedProperty(property) {
if (!this.hasConcatenatedProperties) return false;
return property in this.concatenatedProperties;
}
getConcatenatedProperty(property) {
return this.concatenatedProperties[property];
}
getConcatenatedProperties() {
return Object.keys(this.concatenatedProperties);
}
addConcatenatedProperty(property, value) {
this.hasConcatenatedProperties = true;
if (property in this.concatenatedProperties) {
let val = this.concatenatedProperties[property].concat(value);
this.concatenatedProperties[property] = val;
} else {
this.concatenatedProperties[property] = value;
}
}
hasMergedProperty(property) {
if (!this.hasMergedProperties) return false;
return property in this.mergedProperties;
}
getMergedProperty(property) {
return this.mergedProperties[property];
}
getMergedProperties() {
return Object.keys(this.mergedProperties);
}
addMergedProperty(property, value) {
this.hasMergedProperties = true;
if (isArray(value)) {
throw new Error(`You passed in \`${JSON.stringify(value)}\` as the value for \`foo\` but \`foo\` cannot be an Array`);
}
if (property in this.mergedProperties && this.mergedProperties[property] && value) {
this.mergedProperties[property] = mergeMergedProperties(value, this.mergedProperties[property]);
} else {
value = value === null ? value : value || {};
this.mergedProperties[property] = value;
}
}
getReferenceTypes() {
this.InstanceMetaConstructor = class extends SealedMeta {
constructor() {
super(...arguments);
this.slots = new Slots();
this.referenceTypes = referenceTypes;
}
getReferenceTypes() {
return this.referenceTypes;
}
getPropertyMetadata() {
return this.propertyMetadata;
}
reset(parent) {
this.referenceTypes = dict();
this.propertyMetadata = dict();
this.concatenatedProperties = dict();
this.mergedProperties = dict();
if (parent) {
this.hasConcatenatedProperties = parent.hasConcatenatedProperties;
for (let prop in parent.concatenatedProperties) {
this.concatenatedProperties[prop] = parent.concatenatedProperties[prop].slice();
}
this.hasMergedProperties = parent.hasMergedProperties;
for (let prop in parent.mergedProperties) {
this.mergedProperties[prop] = assign({}, parent.mergedProperties[prop]);
}
assign(this.referenceTypes, parent.referenceTypes);
assign(this.propertyMetadata, parent.propertyMetadata);
}
}
reseal(obj) {
let meta = Meta.for(obj);
let fresh = new this.InstanceMetaConstructor(obj, {});
let referenceTypes = meta.getReferenceTypes();
let slots = meta.getSlots();
turbocharge(assign(referenceTypes, this.referenceTypes));
turbocharge(assign(slots, fresh.getSlots()));
}
seal() {
let referenceTypes = turbocharge(assign({}, this.referenceTypes));
turbocharge(this.concatenatedProperties);
turbocharge(this.mergedProperties);
if (!this.hasMergedProperties && !this.hasConcatenatedProperties) {
this.init = function () {};
}
let slots = this.slots;
class Slots {
constructor() {
slots.forEach(name => {
this[name] = EMPTY_CACHE;
});
}
}
this.InstanceMetaConstructor = class extends SealedMeta {
constructor() {
super(...arguments);
this.slots = new Slots();
this.referenceTypes = referenceTypes;
}
getReferenceTypes() {
return this.referenceTypes;
}
referenceTypeFor(property) {
return this.referenceTypes[property] || PropertyReference;
}
getSlots() {
return this.slots;
}
};
turbocharge(this);
}
}
referenceTypeFor(property) {
return this.referenceTypes[property] || PropertyReference;
}
getSlots() {
return this.slots;
}
};
turbocharge(this);
}
}
function mergeMergedProperties(attrs, parent) {
let merged = assign({}, parent);
for (let prop in attrs) {
if (prop in parent && typeof parent[prop] === 'function' && typeof attrs[prop] === 'function') {
let wrapped = wrapMethod(parent, prop, attrs[prop]);
merged[prop] = wrapped;
} else {
merged[prop] = attrs[prop];
}
let merged = assign({}, parent);
for (let prop in attrs) {
if (prop in parent && typeof parent[prop] === 'function' && typeof attrs[prop] === 'function') {
let wrapped = wrapMethod(parent, prop, attrs[prop]);
merged[prop] = wrapped;
} else {
merged[prop] = attrs[prop];
}
return merged;
}
return merged;
}
export class InstanceMeta extends ClassMeta {
constructor() {
super(...arguments);
this[_a] = ClassMeta.fromParent(null);
}
static fromParent(parent) {
return super.fromParent(parent);
}
reset(parent) {
super.reset(parent);
if (parent) this[CLASS_META].reset(parent[CLASS_META]);
}
seal() {
super.seal();
this[CLASS_META].seal();
}
constructor() {
super(...arguments);
this[_a] = ClassMeta.fromParent(null);
}
static fromParent(parent) {
return super.fromParent(parent);
}
reset(parent) {
super.reset(parent);
if (parent) this[CLASS_META].reset(parent[CLASS_META]);
}
seal() {
super.seal();
this[CLASS_META].seal();
}
}
_a = CLASS_META;
export default class GlimmerObject {
constructor(attrs) {
this._super = ROOT;
this._meta = null;
if (attrs) assign(this, attrs);
this.constructor[CLASS_META].init(this, attrs || null);
this._super = ROOT;
initializeGuid(this);
this.init();
constructor(attrs) {
this._super = ROOT;
this._meta = null;
if (attrs) assign(this, attrs);
this.constructor[CLASS_META].init(this, attrs || null);
this._super = ROOT;
initializeGuid(this);
this.init();
}
static extend(...extensions) {
return extendClass(this, ...extensions);
}
static create(attrs) {
return new this(attrs);
}
static reopen(extensions) {
toMixin(extensions).extendPrototype(this);
this[CLASS_META].seal();
relinkSubclasses(this);
}
static reopenClass(extensions) {
toMixin(extensions).extendStatic(this);
this[CLASS_META].seal();
}
static metaForProperty(property) {
let value = this[CLASS_META].metadataForProperty(property);
if (!value) throw new Error(`metaForProperty() could not find a computed property with key '${property}'.`);
return value;
}
static eachComputedProperty(callback) {
let metadata = this[CLASS_META].getPropertyMetadata();
if (!metadata) return;
for (let prop in metadata) {
callback(prop, metadata[prop]);
}
static extend(...extensions) {
return extendClass(this, ...extensions);
}
static create(attrs) {
return new this(attrs);
}
static reopen(extensions) {
toMixin(extensions).extendPrototype(this);
this[CLASS_META].seal();
relinkSubclasses(this);
}
static reopenClass(extensions) {
toMixin(extensions).extendStatic(this);
this[CLASS_META].seal();
}
static metaForProperty(property) {
let value = this[CLASS_META].metadataForProperty(property);
if (!value) throw new Error(`metaForProperty() could not find a computed property with key '${property}'.`);
return value;
}
static eachComputedProperty(callback) {
let metadata = this[CLASS_META].getPropertyMetadata();
if (!metadata) return;
for (let prop in metadata) {
callback(prop, metadata[prop]);
}
}
init() {}
get(key) {
return this[key];
}
set(key, value) {
this[key] = value;
bump();
}
setProperties(attrs) {
assign(this, attrs);
bump();
}
destroy() {}
}
init() {}
get(key) {
return this[key];
}
set(key, value) {
this[key] = value;
bump();
}
setProperties(attrs) {
assign(this, attrs);
bump();
}
destroy() {}
}

@@ -302,2 +382,2 @@ _b = CLASS_META;

GlimmerObject.isClass = true;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxTQUNFLElBREYsRUFHRSxpQkFIRixFQUlFLFVBSkYsUUFLTywyQkFMUDtBQU1BLFNBQVMsSUFBVCxFQUFlLE1BQWYsRUFBdUIsY0FBdkIsUUFBNkMsZUFBN0M7QUFDQSxTQUFnQixVQUFVLFdBQTFCLEVBQXVDLE9BQXZDLEVBQWdELGdCQUFoRCxFQUFrRSxVQUFsRSxRQUFvRixTQUFwRjtBQUVBLE1BQU0sRUFBRSxPQUFGLEtBQWMsS0FBcEI7QUFFQSxTQUFTLElBQVQsUUFBcUIsU0FBckI7QUFFQSxTQUFTLElBQVQsUUFBcUIsb0JBQXJCO0FBRUEsT0FBTyxNQUFNLGNBQWMsU0FBUyxXQUFULEdBQW9CLENBQUssQ0FBN0M7QUF3QlAsT0FBTSxTQUFVLFdBQVYsQ0FBeUIsR0FBekIsRUFBK0I7QUFDbkM7QUFDQTtBQUNBLFdBQU8sR0FBUDtBQUNEO0FBRUQsTUFBZSxVQUFmLFNBQWtDLElBQWxDLENBQXNDO0FBQ3BDLHdCQUFvQixHQUFHLEtBQXZCLEVBQW1DO0FBQ2pDLGNBQU0sSUFBSSxLQUFKLENBQVUsZ0RBQVYsQ0FBTjtBQUNEO0FBSG1DO0FBTXRDLE9BQU0sTUFBTyxTQUFQLENBQWdCO0FBQXRCLGtCQUFBO0FBQ1UsYUFBQSxjQUFBLEdBQWlCLE1BQWpCO0FBQ0EsYUFBQSxnQkFBQSxHQUFtQixNQUFuQjtBQUNBLGFBQUEsc0JBQUEsR0FBeUIsTUFBekI7QUFDQSxhQUFBLHlCQUFBLEdBQTRCLEtBQTVCO0FBQ0EsYUFBQSxnQkFBQSxHQUFtQixNQUFuQjtBQUNBLGFBQUEsbUJBQUEsR0FBc0IsS0FBdEI7QUFDQSxhQUFBLE1BQUEsR0FBa0IsRUFBbEI7QUFDQSxhQUFBLGFBQUEsR0FBeUIsRUFBekI7QUFDQSxhQUFBLFlBQUEsR0FBd0IsRUFBeEI7QUFDQSxhQUFBLFVBQUEsR0FBMEMsRUFBMUM7QUFDQSxhQUFBLEtBQUEsR0FBa0IsRUFBbEI7QUFDRCxhQUFBLHVCQUFBLEdBQStDLElBQS9DO0FBa1BSO0FBaFBDLFdBQU8sVUFBUCxDQUFrQixNQUFsQixFQUEyQztBQUN6QyxZQUFJLE9BQU8sSUFBSSxJQUFKLEVBQVg7QUFDQSxhQUFLLEtBQUwsQ0FBVyxNQUFYO0FBQ0EsZUFBTyxJQUFQO0FBQ0Q7QUFFRCxXQUFPLEdBQVAsQ0FBVyxNQUFYLEVBQXdEO0FBQ3RELFlBQUksY0FBYyxNQUFsQixFQUEwQixPQUFRLE9BQTRCLFVBQTVCLENBQVIsQ0FBMUIsS0FDSyxJQUFJLE9BQU8sV0FBWCxFQUNILE9BQVEsT0FBOEIsV0FBOUIsQ0FBMEMsVUFBMUMsS0FBeUQsSUFBakUsQ0FERyxLQUVBLE9BQU8sSUFBUDtBQUNOO0FBRUQsU0FBSyxNQUFMLEVBQTRCLEtBQTVCLEVBQStDO0FBQzdDLFlBQUksT0FBTyxLQUFQLEtBQWlCLFFBQWpCLElBQTZCLFVBQVUsSUFBM0MsRUFBaUQ7QUFFakQsWUFBSSxLQUFLLHlCQUFULEVBQW9DO0FBQ2xDLGdCQUFJLGNBQWMsS0FBSyxzQkFBdkI7QUFDQSxpQkFBSyxJQUFJLElBQVQsSUFBaUIsV0FBakIsRUFBOEI7QUFDNUIsb0JBQUksUUFBUSxLQUFaLEVBQW1CO0FBQ2pCLHdCQUFJLFNBQVMsWUFBWSxJQUFaLEVBQWtCLEtBQWxCLEVBQWI7QUFDQSwyQkFBTyxJQUFQLElBQWUsT0FBTyxNQUFQLENBQWMsTUFBTSxJQUFOLENBQWQsQ0FBZjtBQUNEO0FBQ0Y7QUFDRjtBQUVELFlBQUksS0FBSyxtQkFBVCxFQUE4QjtBQUM1QixnQkFBSSxjQUFjLEtBQUssZ0JBQXZCO0FBQ0EsaUJBQUssSUFBSSxJQUFULElBQWlCLFdBQWpCLEVBQThCO0FBQzVCLG9CQUFJLFFBQVEsS0FBWixFQUFtQjtBQUNqQix3QkFBSSxTQUFTLE9BQU8sRUFBUCxFQUFXLFlBQVksSUFBWixDQUFYLENBQWI7QUFDQSwyQkFBTyxJQUFQLElBQWUsT0FBTyxNQUFQLEVBQWUsTUFBTSxJQUFOLENBQWYsQ0FBZjtBQUNEO0FBQ0Y7QUFDRjtBQUNGO0FBRUQsbUJBQWUsS0FBZixFQUEyQjtBQUN6QixhQUFLLFlBQUwsQ0FBa0IsSUFBbEIsQ0FBdUIsS0FBdkI7QUFDRDtBQUVELGFBQVMsS0FBVCxFQUFxQjtBQUNuQixhQUFLLE1BQUwsQ0FBWSxJQUFaLENBQWlCLEtBQWpCO0FBQ0Q7QUFFRCxzQkFBZTtBQUNiLGVBQU8sS0FBSyxZQUFaO0FBQ0Q7QUFFRCxnQkFBUztBQUNQLGVBQU8sS0FBSyxNQUFaO0FBQ0Q7QUFFRCxvQkFBZ0IsS0FBaEIsRUFBNEI7QUFDMUIsYUFBSyxhQUFMLENBQW1CLElBQW5CLENBQXdCLEtBQXhCO0FBQ0Q7QUFFRCxvQkFBZ0IsS0FBaEIsRUFBNEI7QUFDMUIsZUFBTyxLQUFLLGFBQUwsQ0FBbUIsT0FBbkIsQ0FBMkIsS0FBM0IsTUFBc0MsQ0FBQyxDQUE5QztBQUNEO0FBRUQsdUJBQWdCO0FBQ2QsZUFBTyxLQUFLLGFBQVo7QUFDRDtBQUVELG1CQUFlLEtBQWYsRUFBMkI7QUFDekIsZUFBTyxLQUFLLFlBQUwsQ0FBa0IsT0FBbEIsQ0FBMEIsS0FBMUIsTUFBcUMsQ0FBQyxDQUE3QztBQUNEO0FBRUQsV0FBTyxjQUFQLENBQXNCLFFBQXRCLEVBQTJELE1BQTNELEVBQTRGO0FBQzFGLGlCQUFTLFVBQVQsRUFBcUIsU0FBckIsR0FBaUMsT0FBakMsQ0FBMEMsQ0FBRCxJQUFjLEVBQUUsbUJBQUYsQ0FBc0IsUUFBdEIsRUFBZ0MsTUFBaEMsQ0FBdkQ7QUFDQSxpQkFBUyxVQUFULEVBQXFCLGVBQXJCLEdBQXVDLE9BQXZDLENBQWdELENBQUQsSUFBYyxFQUFFLFlBQUYsQ0FBZSxRQUFmLENBQTdEO0FBQ0EsaUJBQVMsVUFBVCxFQUFxQixJQUFyQjtBQUNEO0FBRUQsZ0JBQVksV0FBWixFQUFrRDtBQUNoRCxhQUFLLFVBQUwsQ0FBZ0IsSUFBaEIsQ0FBcUIsV0FBckI7QUFDRDtBQUVELG9CQUFhO0FBQ1gsZUFBTyxLQUFLLFVBQVo7QUFDRDtBQUVELHdCQUFvQixRQUFwQixFQUFzQyxLQUF0QyxFQUFnRDtBQUM5QyxhQUFLLGdCQUFMLENBQXNCLFFBQXRCLElBQWtDLEtBQWxDO0FBQ0Q7QUFFRCx3QkFBb0IsUUFBcEIsRUFBb0M7QUFDbEMsZUFBTyxLQUFLLGdCQUFMLENBQXNCLFFBQXRCLENBQVA7QUFDRDtBQUVELHdCQUFvQixRQUFwQixFQUFzQyxJQUF0QyxFQUFzRTtBQUNwRSxhQUFLLGNBQUwsQ0FBb0IsUUFBcEIsSUFBZ0MsSUFBaEM7QUFDRDtBQUVELGVBQVcsUUFBWCxFQUEyQjtBQUN6QixhQUFLLEtBQUwsQ0FBVyxJQUFYLENBQWdCLFFBQWhCO0FBQ0Q7QUFFRCw0QkFBd0IsUUFBeEIsRUFBd0M7QUFDdEMsWUFBSSxDQUFDLEtBQUsseUJBQVYsRUFBcUMsT0FBTyxLQUFQO0FBQ3JDLGVBQVEsWUFBdUIsS0FBSyxzQkFBcEM7QUFDRDtBQUVELDRCQUF3QixRQUF4QixFQUF3QztBQUN0QyxlQUFPLEtBQUssc0JBQUwsQ0FBNEIsUUFBNUIsQ0FBUDtBQUNEO0FBRUQsZ0NBQXlCO0FBQ3ZCLGVBQU8sT0FBTyxJQUFQLENBQVksS0FBSyxzQkFBakIsQ0FBUDtBQUNEO0FBRUQsNEJBQXdCLFFBQXhCLEVBQTBDLEtBQTFDLEVBQW9EO0FBQ2xELGFBQUsseUJBQUwsR0FBaUMsSUFBakM7QUFFQSxZQUFLLFlBQXVCLEtBQUssc0JBQWpDLEVBQXlEO0FBQ3ZELGdCQUFJLE1BQU0sS0FBSyxzQkFBTCxDQUE0QixRQUE1QixFQUFzQyxNQUF0QyxDQUE2QyxLQUE3QyxDQUFWO0FBQ0EsaUJBQUssc0JBQUwsQ0FBNEIsUUFBNUIsSUFBd0MsR0FBeEM7QUFDRCxTQUhELE1BR087QUFDTCxpQkFBSyxzQkFBTCxDQUE0QixRQUE1QixJQUF3QyxLQUF4QztBQUNEO0FBQ0Y7QUFFRCxzQkFBa0IsUUFBbEIsRUFBa0M7QUFDaEMsWUFBSSxDQUFDLEtBQUssbUJBQVYsRUFBK0IsT0FBTyxLQUFQO0FBQy9CLGVBQVEsWUFBdUIsS0FBSyxnQkFBcEM7QUFDRDtBQUVELHNCQUFrQixRQUFsQixFQUFrQztBQUNoQyxlQUFPLEtBQUssZ0JBQUwsQ0FBc0IsUUFBdEIsQ0FBUDtBQUNEO0FBRUQsMEJBQW1CO0FBQ2pCLGVBQU8sT0FBTyxJQUFQLENBQVksS0FBSyxnQkFBakIsQ0FBUDtBQUNEO0FBRUQsc0JBQWtCLFFBQWxCLEVBQW9DLEtBQXBDLEVBQStDO0FBQzdDLGFBQUssbUJBQUwsR0FBMkIsSUFBM0I7QUFFQSxZQUFJLFFBQVEsS0FBUixDQUFKLEVBQW9CO0FBQ2xCLGtCQUFNLElBQUksS0FBSixDQUNKLG1CQUFtQixLQUFLLFNBQUwsQ0FDakIsS0FEaUIsQ0FFbEIsNERBSEcsQ0FBTjtBQUtEO0FBRUQsWUFBSyxZQUF1QixLQUFLLGdCQUE1QixJQUFnRCxLQUFLLGdCQUFMLENBQXNCLFFBQXRCLENBQWhELElBQW1GLEtBQXhGLEVBQStGO0FBQzdGLGlCQUFLLGdCQUFMLENBQXNCLFFBQXRCLElBQWtDLHNCQUNoQyxLQURnQyxFQUUvQixLQUFhLGdCQUFiLENBQThCLFFBQTlCLENBRitCLENBQWxDO0FBSUQsU0FMRCxNQUtPO0FBQ0wsb0JBQVEsVUFBVSxJQUFWLEdBQWlCLEtBQWpCLEdBQXlCLFNBQVMsRUFBMUM7QUFDQSxpQkFBSyxnQkFBTCxDQUFzQixRQUF0QixJQUFrQyxLQUFsQztBQUNEO0FBQ0Y7QUFFRCx3QkFBaUI7QUFDZixlQUFPLEtBQUssY0FBWjtBQUNEO0FBRUQsMEJBQW1CO0FBQ2pCLGVBQU8sS0FBSyxnQkFBWjtBQUNEO0FBRUQsVUFBTSxNQUFOLEVBQStCO0FBQzdCLGFBQUssY0FBTCxHQUFzQixNQUF0QjtBQUNBLGFBQUssZ0JBQUwsR0FBd0IsTUFBeEI7QUFDQSxhQUFLLHNCQUFMLEdBQThCLE1BQTlCO0FBQ0EsYUFBSyxnQkFBTCxHQUF3QixNQUF4QjtBQUVBLFlBQUksTUFBSixFQUFZO0FBQ1YsaUJBQUsseUJBQUwsR0FBaUMsT0FBTyx5QkFBeEM7QUFDQSxpQkFBSyxJQUFJLElBQVQsSUFBaUIsT0FBTyxzQkFBeEIsRUFBZ0Q7QUFDOUMscUJBQUssc0JBQUwsQ0FBNEIsSUFBNUIsSUFBb0MsT0FBTyxzQkFBUCxDQUE4QixJQUE5QixFQUFvQyxLQUFwQyxFQUFwQztBQUNEO0FBRUQsaUJBQUssbUJBQUwsR0FBMkIsT0FBTyxtQkFBbEM7QUFDQSxpQkFBSyxJQUFJLElBQVQsSUFBaUIsT0FBTyxnQkFBeEIsRUFBMEM7QUFDeEMscUJBQUssZ0JBQUwsQ0FBc0IsSUFBdEIsSUFBOEIsT0FBTyxFQUFQLEVBQVcsT0FBTyxnQkFBUCxDQUF3QixJQUF4QixDQUFYLENBQTlCO0FBQ0Q7QUFFRCxtQkFBTyxLQUFLLGNBQVosRUFBNEIsT0FBTyxjQUFuQztBQUNBLG1CQUFPLEtBQUssZ0JBQVosRUFBOEIsT0FBTyxnQkFBckM7QUFDRDtBQUNGO0FBRUQsV0FBTyxHQUFQLEVBQWtCO0FBQ2hCLFlBQUksT0FBTyxLQUFLLEdBQUwsQ0FBUyxHQUFULENBQVg7QUFDQSxZQUFJLFFBQVEsSUFBSSxLQUFLLHVCQUFULENBQWtDLEdBQWxDLEVBQXVDLEVBQXZDLENBQVo7QUFDQSxZQUFJLGlCQUFpQixLQUFLLGlCQUFMLEVBQXJCO0FBQ0EsWUFBSSxRQUFRLEtBQUssUUFBTCxFQUFaO0FBRUEsb0JBQVksT0FBTyxjQUFQLEVBQXVCLEtBQUssY0FBNUIsQ0FBWjtBQUNBLG9CQUFZLE9BQU8sS0FBUCxFQUFjLE1BQU0sUUFBTixFQUFkLENBQVo7QUFDRDtBQUVELFdBQUk7QUFDRixZQUFJLGlCQUFtRCxZQUNyRCxPQUFPLEVBQVAsRUFBVyxLQUFLLGNBQWhCLENBRHFELENBQXZEO0FBR0Esb0JBQVksS0FBSyxzQkFBakI7QUFDQSxvQkFBWSxLQUFLLGdCQUFqQjtBQUVBLFlBQUksQ0FBQyxLQUFLLG1CQUFOLElBQTZCLENBQUMsS0FBSyx5QkFBdkMsRUFBa0U7QUFDaEUsaUJBQUssSUFBTCxHQUFZLFlBQUEsQ0FBYSxDQUF6QjtBQUNEO0FBRUQsWUFBSSxRQUFRLEtBQUssS0FBakI7QUFFQSxjQUFNLEtBQU4sQ0FBVztBQUdULDBCQUFBO0FBQ0Usc0JBQU0sT0FBTixDQUFjLFFBQU87QUFDbkIseUJBQUssSUFBTCxJQUFhLFdBQWI7QUFDRCxpQkFGRDtBQUdEO0FBUFE7QUFVWCxhQUFLLHVCQUFMLEdBQStCLGNBQWMsVUFBZCxDQUF3QjtBQUF4QiwwQkFBQTs7QUFDbkIscUJBQUEsS0FBQSxHQUFlLElBQUksS0FBSixFQUFmO0FBQ0gscUJBQUEsY0FBQSxHQUFtRCxjQUFuRDtBQWFSO0FBWEMsZ0NBQWlCO0FBQ2YsdUJBQU8sS0FBSyxjQUFaO0FBQ0Q7QUFFRCw2QkFBaUIsUUFBakIsRUFBaUM7QUFDL0IsdUJBQU8sS0FBSyxjQUFMLENBQW9CLFFBQXBCLEtBQWlDLGlCQUF4QztBQUNEO0FBRUQsdUJBQVE7QUFDTix1QkFBTyxLQUFLLEtBQVo7QUFDRDtBQWRvRCxTQUF2RDtBQWlCQSxvQkFBWSxJQUFaO0FBQ0Q7QUE3UG1CO0FBZ1F0QixTQUFTLHFCQUFULENBQStCLEtBQS9CLEVBQTRDLE1BQTVDLEVBQXdEO0FBQ3RELFFBQUksU0FBUyxPQUFPLEVBQVAsRUFBVyxNQUFYLENBQWI7QUFFQSxTQUFLLElBQUksSUFBVCxJQUFpQixLQUFqQixFQUF3QjtBQUN0QixZQUFJLFFBQVEsTUFBUixJQUFrQixPQUFPLE9BQU8sSUFBUCxDQUFQLEtBQXdCLFVBQTFDLElBQXdELE9BQU8sTUFBTSxJQUFOLENBQVAsS0FBdUIsVUFBbkYsRUFBK0Y7QUFDN0YsZ0JBQUksVUFBVSxXQUFXLE1BQVgsRUFBbUIsSUFBbkIsRUFBeUIsTUFBTSxJQUFOLENBQXpCLENBQWQ7QUFDQSxtQkFBTyxJQUFQLElBQWUsT0FBZjtBQUNELFNBSEQsTUFHTztBQUNMLG1CQUFPLElBQVAsSUFBZSxNQUFNLElBQU4sQ0FBZjtBQUNEO0FBQ0Y7QUFFRCxXQUFPLE1BQVA7QUFDRDtBQUVELE9BQU0sTUFBTyxZQUFQLFNBQTRCLFNBQTVCLENBQXFDO0FBQTNDLGtCQUFBOztBQUNTLGFBQUEsRUFBQSxJQUEwQixVQUFVLFVBQVYsQ0FBcUIsSUFBckIsQ0FBMUI7QUFlUjtBQWJDLFdBQU8sVUFBUCxDQUFrQixNQUFsQixFQUE4QztBQUM1QyxlQUFPLE1BQU0sVUFBTixDQUFpQixNQUFqQixDQUFQO0FBQ0Q7QUFFRCxVQUFNLE1BQU4sRUFBMEI7QUFDeEIsY0FBTSxLQUFOLENBQVksTUFBWjtBQUNBLFlBQUksTUFBSixFQUFZLEtBQUssVUFBTCxFQUFpQixLQUFqQixDQUF1QixPQUFPLFVBQVAsQ0FBdkI7QUFDYjtBQUVELFdBQUk7QUFDRixjQUFNLElBQU47QUFDQSxhQUFLLFVBQUwsRUFBaUIsSUFBakI7QUFDRDtBQWZ3QztLQUNqQyxVO0FBaUJWLGVBQWMsTUFBTyxhQUFQLENBQW9CO0FBc0RoQyxnQkFBWSxLQUFaLEVBQStCO0FBTi9CLGFBQUEsTUFBQSxHQUFTLElBQVQ7QUFDQSxhQUFBLEtBQUEsR0FBUSxJQUFSO0FBTUUsWUFBSSxLQUFKLEVBQVcsT0FBTyxJQUFQLEVBQWEsS0FBYjtBQUNWLGFBQUssV0FBTCxDQUEwQyxVQUExQyxFQUFzRCxJQUF0RCxDQUEyRCxJQUEzRCxFQUFpRSxTQUFTLElBQTFFO0FBQ0QsYUFBSyxNQUFMLEdBQWMsSUFBZDtBQUNBLHVCQUFlLElBQWY7QUFDQSxhQUFLLElBQUw7QUFDRDtBQWxERCxXQUFPLE1BQVAsQ0FBK0MsR0FBRyxVQUFsRCxFQUFtRTtBQUNqRSxlQUFPLFlBQVksSUFBWixFQUFrQixHQUFHLFVBQXJCLENBQVA7QUFDRDtBQUVELFdBQU8sTUFBUCxDQUFjLEtBQWQsRUFBaUM7QUFDL0IsZUFBTyxJQUFJLElBQUosQ0FBUyxLQUFULENBQVA7QUFDRDtBQUVELFdBQU8sTUFBUCxDQUFpQixVQUFqQixFQUE4QjtBQUM1QixnQkFBUSxVQUFSLEVBQW9CLGVBQXBCLENBQW9DLElBQXBDO0FBQ0EsYUFBSyxVQUFMLEVBQWlCLElBQWpCO0FBRUEseUJBQWlCLElBQWpCO0FBQ0Q7QUFFRCxXQUFPLFdBQVAsQ0FBc0IsVUFBdEIsRUFBbUM7QUFDakMsZ0JBQVEsVUFBUixFQUFvQixZQUFwQixDQUFpQyxJQUFqQztBQUNBLGFBQUssVUFBTCxFQUFpQixJQUFqQjtBQUNEO0FBRUQsV0FBTyxlQUFQLENBQXVCLFFBQXZCLEVBQXVDO0FBQ3JDLFlBQUksUUFBUSxLQUFLLFVBQUwsRUFBaUIsbUJBQWpCLENBQXFDLFFBQXJDLENBQVo7QUFDQSxZQUFJLENBQUMsS0FBTCxFQUNFLE1BQU0sSUFBSSxLQUFKLENBQ0osa0VBQWtFLFFBQVEsSUFEdEUsQ0FBTjtBQUdGLGVBQU8sS0FBUDtBQUNEO0FBRUQsV0FBTyxvQkFBUCxDQUE0QixRQUE1QixFQUFvRTtBQUNsRSxZQUFJLFdBQVcsS0FBSyxVQUFMLEVBQWlCLG1CQUFqQixFQUFmO0FBQ0EsWUFBSSxDQUFDLFFBQUwsRUFBZTtBQUVmLGFBQUssSUFBSSxJQUFULElBQWlCLFFBQWpCLEVBQTJCO0FBQ3pCLHFCQUFTLElBQVQsRUFBZSxTQUFTLElBQVQsQ0FBZjtBQUNEO0FBQ0Y7QUFNRCxXQUFJLENBQUs7QUFVVCxRQUFJLEdBQUosRUFBZTtBQUNiLGVBQU8sS0FBSyxHQUFMLENBQVA7QUFDRDtBQUVELFFBQUksR0FBSixFQUFpQixLQUFqQixFQUEyQjtBQUN6QixhQUFLLEdBQUwsSUFBWSxLQUFaO0FBQ0E7QUFDRDtBQUVELGtCQUFjLEtBQWQsRUFBMkI7QUFDekIsZUFBTyxJQUFQLEVBQWEsS0FBYjtBQUNBO0FBQ0Q7QUFFRCxjQUFPLENBQUs7QUE1RW9CO0tBR3hCLFU7QUFBRCxjQUFBLEVBQUEsSUFBNkIsYUFBYSxVQUFiLENBQXdCLElBQXhCLENBQTdCO0FBQ0EsY0FBQSxPQUFBLEdBQVUsSUFBViIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIE1ldGEsXG4gIElubmVyUmVmZXJlbmNlRmFjdG9yeSxcbiAgUHJvcGVydHlSZWZlcmVuY2UsXG4gIENMQVNTX01FVEEsXG59IGZyb20gJ0BnbGltbWVyL29iamVjdC1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgZGljdCwgYXNzaWduLCBpbml0aWFsaXplR3VpZCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgTWl4aW4sIGV4dGVuZCBhcyBleHRlbmRDbGFzcywgdG9NaXhpbiwgcmVsaW5rU3ViY2xhc3Nlcywgd3JhcE1ldGhvZCB9IGZyb20gJy4vbWl4aW4nO1xuXG5jb25zdCB7IGlzQXJyYXkgfSA9IEFycmF5O1xuXG5pbXBvcnQgeyBST09UIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBPcHRpb24sIERpY3QgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGJ1bXAgfSBmcm9tICdAZ2xpbW1lci92YWxpZGF0b3InO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfQ0FDSEUgPSBmdW5jdGlvbiBFTVBUWV9DQUNIRSgpIHt9O1xuXG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdFdpdGhNaXhpbnMge1xuICBbQ0xBU1NfTUVUQV06IENsYXNzTWV0YTtcbiAgX21ldGE6IE1ldGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFuY2VXaXRoTWl4aW5zIHtcbiAgY29uc3RydWN0b3I6IE9iamVjdFdpdGhNaXhpbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2xpbW1lck9iamVjdEZhY3Rvcnk8VD4ge1xuICBuZXcgPFU+KGF0dHJzPzogVSk6IEdsaW1tZXJPYmplY3QgJiBUICYgVTtcbiAgZXh0ZW5kKCk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PE9iamVjdD47XG4gIGV4dGVuZDxUPihleHRlbnNpb246IFQpOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxUPjtcbiAgZXh0ZW5kKC4uLmV4dGVuc2lvbnM6IE9iamVjdFtdKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8T2JqZWN0PjtcbiAgY3JlYXRlPFU+KGF0dHJzPzogVSk6IEdsaW1tZXJPYmplY3QgJiBUICYgVTtcbiAgcmVvcGVuPFU+KGV4dGVuc2lvbnM6IFUpOiB2b2lkO1xuICByZW9wZW5DbGFzczxVPihleHRlbnNpb25zOiBVKTogdm9pZDtcbiAgbWV0YUZvclByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBPYmplY3Q7XG4gIGVhY2hDb21wdXRlZFByb3BlcnR5KGNhbGxiYWNrOiAoczogc3RyaW5nLCBvOiBPYmplY3QpID0+IHZvaWQpOiB2b2lkO1xuICBbQ0xBU1NfTUVUQV06IEluc3RhbmNlTWV0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR1cmJvY2hhcmdlPFQ+KG9iajogVCk6IFQge1xuICAvLyBmdW5jdGlvbiBEdW1teSgpIHt9XG4gIC8vIER1bW15LnByb3RvdHlwZSA9IG9iajtcbiAgcmV0dXJuIG9iajtcbn1cblxuYWJzdHJhY3QgY2xhc3MgU2VhbGVkTWV0YSBleHRlbmRzIE1ldGEge1xuICBhZGRSZWZlcmVuY2VUeXBlRm9yKC4uLl9hcmdzOiBhbnlbXSk6IElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBtb2RpZnkgcmVmZXJlbmNlIHR5cGVzIG9uIGEgc2VhbGVkIG1ldGEnKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xhc3NNZXRhIHtcbiAgcHJpdmF0ZSByZWZlcmVuY2VUeXBlcyA9IGRpY3Q8SW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4+KCk7XG4gIHByaXZhdGUgcHJvcGVydHlNZXRhZGF0YSA9IGRpY3Q8YW55PigpO1xuICBwcml2YXRlIGNvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSBkaWN0PGFueVtdPigpO1xuICBwcml2YXRlIGhhc0NvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSBmYWxzZTtcbiAgcHJpdmF0ZSBtZXJnZWRQcm9wZXJ0aWVzID0gZGljdDxPYmplY3Q+KCk7XG4gIHByaXZhdGUgaGFzTWVyZ2VkUHJvcGVydGllcyA9IGZhbHNlO1xuICBwcml2YXRlIG1peGluczogTWl4aW5bXSA9IFtdO1xuICBwcml2YXRlIGFwcGxpZWRNaXhpbnM6IE1peGluW10gPSBbXTtcbiAgcHJpdmF0ZSBzdGF0aWNNaXhpbnM6IE1peGluW10gPSBbXTtcbiAgcHJpdmF0ZSBzdWJjbGFzc2VzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+W10gPSBbXTtcbiAgcHJpdmF0ZSBzbG90czogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIEluc3RhbmNlTWV0YUNvbnN0cnVjdG9yOiBPcHRpb248dHlwZW9mIE1ldGE+ID0gbnVsbDtcblxuICBzdGF0aWMgZnJvbVBhcmVudChwYXJlbnQ6IE9wdGlvbjxDbGFzc01ldGE+KSB7XG4gICAgbGV0IG1ldGEgPSBuZXcgdGhpcygpO1xuICAgIG1ldGEucmVzZXQocGFyZW50KTtcbiAgICByZXR1cm4gbWV0YTtcbiAgfVxuXG4gIHN0YXRpYyBmb3Iob2JqZWN0OiBPYmplY3RXaXRoTWl4aW5zIHwgSW5zdGFuY2VXaXRoTWl4aW5zKTogT3B0aW9uPENsYXNzTWV0YT4ge1xuICAgIGlmIChDTEFTU19NRVRBIGluIG9iamVjdCkgcmV0dXJuIChvYmplY3QgYXMgT2JqZWN0V2l0aE1peGlucylbQ0xBU1NfTUVUQV07XG4gICAgZWxzZSBpZiAob2JqZWN0LmNvbnN0cnVjdG9yKVxuICAgICAgcmV0dXJuIChvYmplY3QgYXMgSW5zdGFuY2VXaXRoTWl4aW5zKS5jb25zdHJ1Y3RvcltDTEFTU19NRVRBXSB8fCBudWxsO1xuICAgIGVsc2UgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpbml0KG9iamVjdDogR2xpbW1lck9iamVjdCwgYXR0cnM6IE9wdGlvbjxEaWN0Pikge1xuICAgIGlmICh0eXBlb2YgYXR0cnMgIT09ICdvYmplY3QnIHx8IGF0dHJzID09PSBudWxsKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSB7XG4gICAgICBsZXQgY29uY2F0UHJvcHMgPSB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXM7XG4gICAgICBmb3IgKGxldCBwcm9wIGluIGNvbmNhdFByb3BzKSB7XG4gICAgICAgIGlmIChwcm9wIGluIGF0dHJzKSB7XG4gICAgICAgICAgbGV0IGNvbmNhdCA9IGNvbmNhdFByb3BzW3Byb3BdLnNsaWNlKCk7XG4gICAgICAgICAgb2JqZWN0W3Byb3BdID0gY29uY2F0LmNvbmNhdChhdHRyc1twcm9wXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNNZXJnZWRQcm9wZXJ0aWVzKSB7XG4gICAgICBsZXQgbWVyZ2VkUHJvcHMgPSB0aGlzLm1lcmdlZFByb3BlcnRpZXM7XG4gICAgICBmb3IgKGxldCBwcm9wIGluIG1lcmdlZFByb3BzKSB7XG4gICAgICAgIGlmIChwcm9wIGluIGF0dHJzKSB7XG4gICAgICAgICAgbGV0IG1lcmdlZCA9IGFzc2lnbih7fSwgbWVyZ2VkUHJvcHNbcHJvcF0pO1xuICAgICAgICAgIG9iamVjdFtwcm9wXSA9IGFzc2lnbihtZXJnZWQsIGF0dHJzW3Byb3BdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFkZFN0YXRpY01peGluKG1peGluOiBNaXhpbikge1xuICAgIHRoaXMuc3RhdGljTWl4aW5zLnB1c2gobWl4aW4pO1xuICB9XG5cbiAgYWRkTWl4aW4obWl4aW46IE1peGluKSB7XG4gICAgdGhpcy5taXhpbnMucHVzaChtaXhpbik7XG4gIH1cblxuICBnZXRTdGF0aWNNaXhpbnMoKTogTWl4aW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGljTWl4aW5zO1xuICB9XG5cbiAgZ2V0TWl4aW5zKCk6IE1peGluW10ge1xuICAgIHJldHVybiB0aGlzLm1peGlucztcbiAgfVxuXG4gIGFkZEFwcGxpZWRNaXhpbihtaXhpbjogTWl4aW4pIHtcbiAgICB0aGlzLmFwcGxpZWRNaXhpbnMucHVzaChtaXhpbik7XG4gIH1cblxuICBoYXNBcHBsaWVkTWl4aW4obWl4aW46IE1peGluKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbGllZE1peGlucy5pbmRleE9mKG1peGluKSAhPT0gLTE7XG4gIH1cblxuICBnZXRBcHBsaWVkTWl4aW5zKCk6IE1peGluW10ge1xuICAgIHJldHVybiB0aGlzLmFwcGxpZWRNaXhpbnM7XG4gIH1cblxuICBoYXNTdGF0aWNNaXhpbihtaXhpbjogTWl4aW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0aWNNaXhpbnMuaW5kZXhPZihtaXhpbikgIT09IC0xO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QWxsTWl4aW5zKFN1YmNsYXNzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+LCBQYXJlbnQ6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5nZXRNaXhpbnMoKS5mb3JFYWNoKChtOiBNaXhpbikgPT4gbS5leHRlbmRQcm90b3R5cGVPbnRvKFN1YmNsYXNzLCBQYXJlbnQpKTtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5nZXRTdGF0aWNNaXhpbnMoKS5mb3JFYWNoKChtOiBNaXhpbikgPT4gbS5leHRlbmRTdGF0aWMoU3ViY2xhc3MpKTtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5zZWFsKCk7XG4gIH1cblxuICBhZGRTdWJjbGFzcyhjb25zdHJ1Y3RvcjogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICAgIHRoaXMuc3ViY2xhc3Nlcy5wdXNoKGNvbnN0cnVjdG9yKTtcbiAgfVxuXG4gIGdldFN1YmNsYXNzZXMoKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PltdIHtcbiAgICByZXR1cm4gdGhpcy5zdWJjbGFzc2VzO1xuICB9XG5cbiAgYWRkUHJvcGVydHlNZXRhZGF0YShwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5wcm9wZXJ0eU1ldGFkYXRhW3Byb3BlcnR5XSA9IHZhbHVlO1xuICB9XG5cbiAgbWV0YWRhdGFGb3JQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogT2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eU1ldGFkYXRhW3Byb3BlcnR5XTtcbiAgfVxuXG4gIGFkZFJlZmVyZW5jZVR5cGVGb3IocHJvcGVydHk6IHN0cmluZywgdHlwZTogSW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4pIHtcbiAgICB0aGlzLnJlZmVyZW5jZVR5cGVzW3Byb3BlcnR5XSA9IHR5cGU7XG4gIH1cblxuICBhZGRTbG90Rm9yKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICB0aGlzLnNsb3RzLnB1c2gocHJvcGVydHkpO1xuICB9XG5cbiAgaGFzQ29uY2F0ZW5hdGVkUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIChwcm9wZXJ0eSBhcyBzdHJpbmcpIGluIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcztcbiAgfVxuXG4gIGdldENvbmNhdGVuYXRlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wZXJ0eV07XG4gIH1cblxuICBnZXRDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGFkZENvbmNhdGVuYXRlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmhhc0NvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSB0cnVlO1xuXG4gICAgaWYgKChwcm9wZXJ0eSBhcyBzdHJpbmcpIGluIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcykge1xuICAgICAgbGV0IHZhbCA9IHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wZXJ0eV0uY29uY2F0KHZhbHVlKTtcbiAgICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wZXJ0eV0gPSB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBoYXNNZXJnZWRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmhhc01lcmdlZFByb3BlcnRpZXMpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKHByb3BlcnR5IGFzIHN0cmluZykgaW4gdGhpcy5tZXJnZWRQcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0TWVyZ2VkUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IE9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV07XG4gIH1cblxuICBnZXRNZXJnZWRQcm9wZXJ0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5tZXJnZWRQcm9wZXJ0aWVzKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGFkZE1lcmdlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiBEaWN0KSB7XG4gICAgdGhpcy5oYXNNZXJnZWRQcm9wZXJ0aWVzID0gdHJ1ZTtcblxuICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgWW91IHBhc3NlZCBpbiBcXGAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHZhbHVlXG4gICAgICAgICl9XFxgIGFzIHRoZSB2YWx1ZSBmb3IgXFxgZm9vXFxgIGJ1dCBcXGBmb29cXGAgY2Fubm90IGJlIGFuIEFycmF5YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoKHByb3BlcnR5IGFzIHN0cmluZykgaW4gdGhpcy5tZXJnZWRQcm9wZXJ0aWVzICYmIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV0gJiYgdmFsdWUpIHtcbiAgICAgIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV0gPSBtZXJnZU1lcmdlZFByb3BlcnRpZXMoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICAodGhpcyBhcyBhbnkpLm1lcmdlZFByb3BlcnRpZXNbcHJvcGVydHldXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlID09PSBudWxsID8gdmFsdWUgOiB2YWx1ZSB8fCB7fTtcbiAgICAgIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXRSZWZlcmVuY2VUeXBlcygpOiBEaWN0PElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+PiB7XG4gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlVHlwZXM7XG4gIH1cblxuICBnZXRQcm9wZXJ0eU1ldGFkYXRhKCk6IERpY3Q8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHlNZXRhZGF0YTtcbiAgfVxuXG4gIHJlc2V0KHBhcmVudDogT3B0aW9uPENsYXNzTWV0YT4pIHtcbiAgICB0aGlzLnJlZmVyZW5jZVR5cGVzID0gZGljdDxJbm5lclJlZmVyZW5jZUZhY3Rvcnk8YW55Pj4oKTtcbiAgICB0aGlzLnByb3BlcnR5TWV0YWRhdGEgPSBkaWN0KCk7XG4gICAgdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gZGljdDxhbnlbXT4oKTtcbiAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXMgPSBkaWN0PE9iamVjdD4oKTtcblxuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHRoaXMuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcyA9IHBhcmVudC5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzO1xuICAgICAgZm9yIChsZXQgcHJvcCBpbiBwYXJlbnQuY29uY2F0ZW5hdGVkUHJvcGVydGllcykge1xuICAgICAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcF0gPSBwYXJlbnQuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wXS5zbGljZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmhhc01lcmdlZFByb3BlcnRpZXMgPSBwYXJlbnQuaGFzTWVyZ2VkUHJvcGVydGllcztcbiAgICAgIGZvciAobGV0IHByb3AgaW4gcGFyZW50Lm1lcmdlZFByb3BlcnRpZXMpIHtcbiAgICAgICAgdGhpcy5tZXJnZWRQcm9wZXJ0aWVzW3Byb3BdID0gYXNzaWduKHt9LCBwYXJlbnQubWVyZ2VkUHJvcGVydGllc1twcm9wXSk7XG4gICAgICB9XG5cbiAgICAgIGFzc2lnbih0aGlzLnJlZmVyZW5jZVR5cGVzLCBwYXJlbnQucmVmZXJlbmNlVHlwZXMpO1xuICAgICAgYXNzaWduKHRoaXMucHJvcGVydHlNZXRhZGF0YSwgcGFyZW50LnByb3BlcnR5TWV0YWRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2VhbChvYmo6IE9iamVjdCkge1xuICAgIGxldCBtZXRhID0gTWV0YS5mb3Iob2JqKTtcbiAgICBsZXQgZnJlc2ggPSBuZXcgdGhpcy5JbnN0YW5jZU1ldGFDb25zdHJ1Y3RvciEob2JqLCB7fSk7XG4gICAgbGV0IHJlZmVyZW5jZVR5cGVzID0gbWV0YS5nZXRSZWZlcmVuY2VUeXBlcygpO1xuICAgIGxldCBzbG90cyA9IG1ldGEuZ2V0U2xvdHMoKTtcblxuICAgIHR1cmJvY2hhcmdlKGFzc2lnbihyZWZlcmVuY2VUeXBlcywgdGhpcy5yZWZlcmVuY2VUeXBlcykpO1xuICAgIHR1cmJvY2hhcmdlKGFzc2lnbihzbG90cywgZnJlc2guZ2V0U2xvdHMoKSkpO1xuICB9XG5cbiAgc2VhbCgpIHtcbiAgICBsZXQgcmVmZXJlbmNlVHlwZXM6IERpY3Q8SW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4+ID0gdHVyYm9jaGFyZ2UoXG4gICAgICBhc3NpZ24oe30sIHRoaXMucmVmZXJlbmNlVHlwZXMpXG4gICAgKTtcbiAgICB0dXJib2NoYXJnZSh0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXMpO1xuICAgIHR1cmJvY2hhcmdlKHRoaXMubWVyZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoIXRoaXMuaGFzTWVyZ2VkUHJvcGVydGllcyAmJiAhdGhpcy5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSB7XG4gICAgICB0aGlzLmluaXQgPSBmdW5jdGlvbigpIHt9O1xuICAgIH1cblxuICAgIGxldCBzbG90cyA9IHRoaXMuc2xvdHM7XG5cbiAgICBjbGFzcyBTbG90cyB7XG4gICAgICBbaW5kZXg6IHN0cmluZ106IHVua25vd247XG5cbiAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzbG90cy5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgIHRoaXNbbmFtZV0gPSBFTVBUWV9DQUNIRTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5JbnN0YW5jZU1ldGFDb25zdHJ1Y3RvciA9IGNsYXNzIGV4dGVuZHMgU2VhbGVkTWV0YSB7XG4gICAgICBwcm90ZWN0ZWQgc2xvdHM6IFNsb3RzID0gbmV3IFNsb3RzKCk7XG4gICAgICBwdWJsaWMgcmVmZXJlbmNlVHlwZXM6IERpY3Q8SW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4+ID0gcmVmZXJlbmNlVHlwZXM7XG5cbiAgICAgIGdldFJlZmVyZW5jZVR5cGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VUeXBlcztcbiAgICAgIH1cblxuICAgICAgcmVmZXJlbmNlVHlwZUZvcihwcm9wZXJ0eTogc3RyaW5nKTogSW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VUeXBlc1twcm9wZXJ0eV0gfHwgUHJvcGVydHlSZWZlcmVuY2U7XG4gICAgICB9XG5cbiAgICAgIGdldFNsb3RzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zbG90cztcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdHVyYm9jaGFyZ2UodGhpcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVyZ2VNZXJnZWRQcm9wZXJ0aWVzKGF0dHJzOiBEaWN0LCBwYXJlbnQ6IERpY3QpIHtcbiAgbGV0IG1lcmdlZCA9IGFzc2lnbih7fSwgcGFyZW50KTtcblxuICBmb3IgKGxldCBwcm9wIGluIGF0dHJzKSB7XG4gICAgaWYgKHByb3AgaW4gcGFyZW50ICYmIHR5cGVvZiBwYXJlbnRbcHJvcF0gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGF0dHJzW3Byb3BdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBsZXQgd3JhcHBlZCA9IHdyYXBNZXRob2QocGFyZW50LCBwcm9wLCBhdHRyc1twcm9wXSBhcyBhbnkpO1xuICAgICAgbWVyZ2VkW3Byb3BdID0gd3JhcHBlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVyZ2VkW3Byb3BdID0gYXR0cnNbcHJvcF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuZXhwb3J0IGNsYXNzIEluc3RhbmNlTWV0YSBleHRlbmRzIENsYXNzTWV0YSB7XG4gIHB1YmxpYyBbQ0xBU1NfTUVUQV06IENsYXNzTWV0YSA9IENsYXNzTWV0YS5mcm9tUGFyZW50KG51bGwpO1xuXG4gIHN0YXRpYyBmcm9tUGFyZW50KHBhcmVudDogT3B0aW9uPEluc3RhbmNlTWV0YT4pOiBJbnN0YW5jZU1ldGEge1xuICAgIHJldHVybiBzdXBlci5mcm9tUGFyZW50KHBhcmVudCkgYXMgSW5zdGFuY2VNZXRhO1xuICB9XG5cbiAgcmVzZXQocGFyZW50OiBJbnN0YW5jZU1ldGEpIHtcbiAgICBzdXBlci5yZXNldChwYXJlbnQpO1xuICAgIGlmIChwYXJlbnQpIHRoaXNbQ0xBU1NfTUVUQV0ucmVzZXQocGFyZW50W0NMQVNTX01FVEFdKTtcbiAgfVxuXG4gIHNlYWwoKSB7XG4gICAgc3VwZXIuc2VhbCgpO1xuICAgIHRoaXNbQ0xBU1NfTUVUQV0uc2VhbCgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdsaW1tZXJPYmplY3Qge1xuICBbaW5kZXg6IHN0cmluZ106IHVua25vd247XG5cbiAgc3RhdGljIFtDTEFTU19NRVRBXTogSW5zdGFuY2VNZXRhID0gSW5zdGFuY2VNZXRhLmZyb21QYXJlbnQobnVsbCk7XG4gIHN0YXRpYyBpc0NsYXNzID0gdHJ1ZTtcblxuICBzdGF0aWMgZXh0ZW5kKCk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4gJiB0eXBlb2YgR2xpbW1lck9iamVjdDtcbiAgc3RhdGljIGV4dGVuZDxUPihleHRlbnNpb246IFQpOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxUPiAmIHR5cGVvZiBHbGltbWVyT2JqZWN0O1xuICBzdGF0aWMgZXh0ZW5kKC4uLmV4dGVuc2lvbnM6IE9iamVjdFtdKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiAmIHR5cGVvZiBHbGltbWVyT2JqZWN0O1xuXG4gIHN0YXRpYyBleHRlbmQodGhpczogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiwgLi4uZXh0ZW5zaW9uczogYW55W10pIHtcbiAgICByZXR1cm4gZXh0ZW5kQ2xhc3ModGhpcywgLi4uZXh0ZW5zaW9ucyk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlKGF0dHJzPzogRGljdCB8IG51bGwpOiBHbGltbWVyT2JqZWN0IHtcbiAgICByZXR1cm4gbmV3IHRoaXMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHJlb3BlbjxVPihleHRlbnNpb25zOiBVKTogdm9pZCB7XG4gICAgdG9NaXhpbihleHRlbnNpb25zKS5leHRlbmRQcm90b3R5cGUodGhpcyBhcyBhbnkpO1xuICAgIHRoaXNbQ0xBU1NfTUVUQV0uc2VhbCgpO1xuXG4gICAgcmVsaW5rU3ViY2xhc3Nlcyh0aGlzIGFzIGFueSk7XG4gIH1cblxuICBzdGF0aWMgcmVvcGVuQ2xhc3M8VT4oZXh0ZW5zaW9uczogVSk6IHZvaWQge1xuICAgIHRvTWl4aW4oZXh0ZW5zaW9ucykuZXh0ZW5kU3RhdGljKHRoaXMgYXMgYW55KTtcbiAgICB0aGlzW0NMQVNTX01FVEFdLnNlYWwoKTtcbiAgfVxuXG4gIHN0YXRpYyBtZXRhRm9yUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IE9iamVjdCB7XG4gICAgbGV0IHZhbHVlID0gdGhpc1tDTEFTU19NRVRBXS5tZXRhZGF0YUZvclByb3BlcnR5KHByb3BlcnR5KTtcbiAgICBpZiAoIXZhbHVlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgbWV0YUZvclByb3BlcnR5KCkgY291bGQgbm90IGZpbmQgYSBjb21wdXRlZCBwcm9wZXJ0eSB3aXRoIGtleSAnJHtwcm9wZXJ0eX0nLmBcbiAgICAgICk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgc3RhdGljIGVhY2hDb21wdXRlZFByb3BlcnR5KGNhbGxiYWNrOiAoczogc3RyaW5nLCBvOiBPYmplY3QpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBsZXQgbWV0YWRhdGEgPSB0aGlzW0NMQVNTX01FVEFdLmdldFByb3BlcnR5TWV0YWRhdGEoKTtcbiAgICBpZiAoIW1ldGFkYXRhKSByZXR1cm47XG5cbiAgICBmb3IgKGxldCBwcm9wIGluIG1ldGFkYXRhKSB7XG4gICAgICBjYWxsYmFjayhwcm9wLCBtZXRhZGF0YVtwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgX3N1cGVyID0gUk9PVDtcbiAgX21ldGEgPSBudWxsO1xuICBfZ3VpZCE6IG51bWJlcjsgLy8gU2V0IGJ5IGluaXRpYWxpemVHdWlkKHRoaXMpIGluIGNvbnN0cnVjdG9yXG5cbiAgaW5pdCgpIHt9XG5cbiAgY29uc3RydWN0b3IoYXR0cnM/OiBEaWN0IHwgbnVsbCkge1xuICAgIGlmIChhdHRycykgYXNzaWduKHRoaXMsIGF0dHJzKTtcbiAgICAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgR2xpbW1lck9iamVjdClbQ0xBU1NfTUVUQV0uaW5pdCh0aGlzLCBhdHRycyB8fCBudWxsKTtcbiAgICB0aGlzLl9zdXBlciA9IFJPT1Q7XG4gICAgaW5pdGlhbGl6ZUd1aWQodGhpcyk7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBnZXQoa2V5OiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB0aGlzW2tleV07XG4gIH1cblxuICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzW2tleV0gPSB2YWx1ZTtcbiAgICBidW1wKCk7XG4gIH1cblxuICBzZXRQcm9wZXJ0aWVzKGF0dHJzOiBPYmplY3QpIHtcbiAgICBhc3NpZ24odGhpcywgYXR0cnMpO1xuICAgIGJ1bXAoKTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7fVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsU0FDRSxJQURGLEVBR0UsaUJBSEYsRUFJRSxVQUpGLFFBS08sMkJBTFA7QUFNQSxTQUFTLElBQVQsRUFBZSxNQUFmLEVBQXVCLGNBQXZCLFFBQTZDLGVBQTdDO0FBQ0EsU0FBZ0IsTUFBTSxJQUFJLFdBQTFCLEVBQXVDLE9BQXZDLEVBQWdELGdCQUFoRCxFQUFrRSxVQUFsRSxRQUFvRixTQUFwRjtBQUVBLE1BQU07QUFBRSxFQUFBO0FBQUYsSUFBYyxLQUFwQjtBQUVBLFNBQVMsSUFBVCxRQUFxQixTQUFyQjtBQUVBLFNBQVMsSUFBVCxRQUFxQixvQkFBckI7QUFFQSxPQUFPLE1BQU0sV0FBVyxHQUFHLFNBQVMsV0FBVCxHQUFvQixDQUFLLENBQTdDO0FBd0JQLE9BQU0sU0FBVSxXQUFWLENBQXlCLEdBQXpCLEVBQStCO0FBQ25DO0FBQ0E7QUFDQSxTQUFPLEdBQVA7QUFDRDs7QUFFRCxNQUFlLFVBQWYsU0FBa0MsSUFBbEMsQ0FBc0M7QUFDcEMsRUFBQSxtQkFBbUIsQ0FBQyxHQUFHLEtBQUosRUFBZ0I7QUFDakMsVUFBTSxJQUFJLEtBQUosQ0FBVSxnREFBVixDQUFOO0FBQ0Q7O0FBSG1DOztBQU10QyxPQUFNLE1BQU8sU0FBUCxDQUFnQjtBQUF0QixFQUFBLFdBQUEsR0FBQTtBQUNVLFNBQUEsY0FBQSxHQUFpQixJQUFJLEVBQXJCO0FBQ0EsU0FBQSxnQkFBQSxHQUFtQixJQUFJLEVBQXZCO0FBQ0EsU0FBQSxzQkFBQSxHQUF5QixJQUFJLEVBQTdCO0FBQ0EsU0FBQSx5QkFBQSxHQUE0QixLQUE1QjtBQUNBLFNBQUEsZ0JBQUEsR0FBbUIsSUFBSSxFQUF2QjtBQUNBLFNBQUEsbUJBQUEsR0FBc0IsS0FBdEI7QUFDQSxTQUFBLE1BQUEsR0FBa0IsRUFBbEI7QUFDQSxTQUFBLGFBQUEsR0FBeUIsRUFBekI7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QUEsQ0FBQSxHQUE2QixZQUFZLENBQUMsVUFBYixDQUF3QixJQUF4QixDQUE3QjtBQUNBLGFBQUEsQ0FBQSxPQUFBLEdBQVUsSUFBViIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIE1ldGEsXG4gIElubmVyUmVmZXJlbmNlRmFjdG9yeSxcbiAgUHJvcGVydHlSZWZlcmVuY2UsXG4gIENMQVNTX01FVEEsXG59IGZyb20gJ0BnbGltbWVyL29iamVjdC1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgZGljdCwgYXNzaWduLCBpbml0aWFsaXplR3VpZCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgTWl4aW4sIGV4dGVuZCBhcyBleHRlbmRDbGFzcywgdG9NaXhpbiwgcmVsaW5rU3ViY2xhc3Nlcywgd3JhcE1ldGhvZCB9IGZyb20gJy4vbWl4aW4nO1xuXG5jb25zdCB7IGlzQXJyYXkgfSA9IEFycmF5O1xuXG5pbXBvcnQgeyBST09UIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBPcHRpb24sIERpY3QgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGJ1bXAgfSBmcm9tICdAZ2xpbW1lci92YWxpZGF0b3InO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfQ0FDSEUgPSBmdW5jdGlvbiBFTVBUWV9DQUNIRSgpIHt9O1xuXG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdFdpdGhNaXhpbnMge1xuICBbQ0xBU1NfTUVUQV06IENsYXNzTWV0YTtcbiAgX21ldGE6IE1ldGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFuY2VXaXRoTWl4aW5zIHtcbiAgY29uc3RydWN0b3I6IE9iamVjdFdpdGhNaXhpbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2xpbW1lck9iamVjdEZhY3Rvcnk8VD4ge1xuICBuZXcgPFU+KGF0dHJzPzogVSk6IEdsaW1tZXJPYmplY3QgJiBUICYgVTtcbiAgZXh0ZW5kKCk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PE9iamVjdD47XG4gIGV4dGVuZDxUPihleHRlbnNpb246IFQpOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxUPjtcbiAgZXh0ZW5kKC4uLmV4dGVuc2lvbnM6IE9iamVjdFtdKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8T2JqZWN0PjtcbiAgY3JlYXRlPFU+KGF0dHJzPzogVSk6IEdsaW1tZXJPYmplY3QgJiBUICYgVTtcbiAgcmVvcGVuPFU+KGV4dGVuc2lvbnM6IFUpOiB2b2lkO1xuICByZW9wZW5DbGFzczxVPihleHRlbnNpb25zOiBVKTogdm9pZDtcbiAgbWV0YUZvclByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBPYmplY3Q7XG4gIGVhY2hDb21wdXRlZFByb3BlcnR5KGNhbGxiYWNrOiAoczogc3RyaW5nLCBvOiBPYmplY3QpID0+IHZvaWQpOiB2b2lkO1xuICBbQ0xBU1NfTUVUQV06IEluc3RhbmNlTWV0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR1cmJvY2hhcmdlPFQ+KG9iajogVCk6IFQge1xuICAvLyBmdW5jdGlvbiBEdW1teSgpIHt9XG4gIC8vIER1bW15LnByb3RvdHlwZSA9IG9iajtcbiAgcmV0dXJuIG9iajtcbn1cblxuYWJzdHJhY3QgY2xhc3MgU2VhbGVkTWV0YSBleHRlbmRzIE1ldGEge1xuICBhZGRSZWZlcmVuY2VUeXBlRm9yKC4uLl9hcmdzOiBhbnlbXSk6IElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBtb2RpZnkgcmVmZXJlbmNlIHR5cGVzIG9uIGEgc2VhbGVkIG1ldGEnKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xhc3NNZXRhIHtcbiAgcHJpdmF0ZSByZWZlcmVuY2VUeXBlcyA9IGRpY3Q8SW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4+KCk7XG4gIHByaXZhdGUgcHJvcGVydHlNZXRhZGF0YSA9IGRpY3Q8YW55PigpO1xuICBwcml2YXRlIGNvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSBkaWN0PGFueVtdPigpO1xuICBwcml2YXRlIGhhc0NvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSBmYWxzZTtcbiAgcHJpdmF0ZSBtZXJnZWRQcm9wZXJ0aWVzID0gZGljdDxPYmplY3Q+KCk7XG4gIHByaXZhdGUgaGFzTWVyZ2VkUHJvcGVydGllcyA9IGZhbHNlO1xuICBwcml2YXRlIG1peGluczogTWl4aW5bXSA9IFtdO1xuICBwcml2YXRlIGFwcGxpZWRNaXhpbnM6IE1peGluW10gPSBbXTtcbiAgcHJpdmF0ZSBzdGF0aWNNaXhpbnM6IE1peGluW10gPSBbXTtcbiAgcHJpdmF0ZSBzdWJjbGFzc2VzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+W10gPSBbXTtcbiAgcHJpdmF0ZSBzbG90czogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIEluc3RhbmNlTWV0YUNvbnN0cnVjdG9yOiBPcHRpb248dHlwZW9mIE1ldGE+ID0gbnVsbDtcblxuICBzdGF0aWMgZnJvbVBhcmVudChwYXJlbnQ6IE9wdGlvbjxDbGFzc01ldGE+KSB7XG4gICAgbGV0IG1ldGEgPSBuZXcgdGhpcygpO1xuICAgIG1ldGEucmVzZXQocGFyZW50KTtcbiAgICByZXR1cm4gbWV0YTtcbiAgfVxuXG4gIHN0YXRpYyBmb3Iob2JqZWN0OiBPYmplY3RXaXRoTWl4aW5zIHwgSW5zdGFuY2VXaXRoTWl4aW5zKTogT3B0aW9uPENsYXNzTWV0YT4ge1xuICAgIGlmIChDTEFTU19NRVRBIGluIG9iamVjdCkgcmV0dXJuIChvYmplY3QgYXMgT2JqZWN0V2l0aE1peGlucylbQ0xBU1NfTUVUQV07XG4gICAgZWxzZSBpZiAob2JqZWN0LmNvbnN0cnVjdG9yKVxuICAgICAgcmV0dXJuIChvYmplY3QgYXMgSW5zdGFuY2VXaXRoTWl4aW5zKS5jb25zdHJ1Y3RvcltDTEFTU19NRVRBXSB8fCBudWxsO1xuICAgIGVsc2UgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpbml0KG9iamVjdDogR2xpbW1lck9iamVjdCwgYXR0cnM6IE9wdGlvbjxEaWN0Pikge1xuICAgIGlmICh0eXBlb2YgYXR0cnMgIT09ICdvYmplY3QnIHx8IGF0dHJzID09PSBudWxsKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSB7XG4gICAgICBsZXQgY29uY2F0UHJvcHMgPSB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXM7XG4gICAgICBmb3IgKGxldCBwcm9wIGluIGNvbmNhdFByb3BzKSB7XG4gICAgICAgIGlmIChwcm9wIGluIGF0dHJzKSB7XG4gICAgICAgICAgbGV0IGNvbmNhdCA9IGNvbmNhdFByb3BzW3Byb3BdLnNsaWNlKCk7XG4gICAgICAgICAgb2JqZWN0W3Byb3BdID0gY29uY2F0LmNvbmNhdChhdHRyc1twcm9wXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNNZXJnZWRQcm9wZXJ0aWVzKSB7XG4gICAgICBsZXQgbWVyZ2VkUHJvcHMgPSB0aGlzLm1lcmdlZFByb3BlcnRpZXM7XG4gICAgICBmb3IgKGxldCBwcm9wIGluIG1lcmdlZFByb3BzKSB7XG4gICAgICAgIGlmIChwcm9wIGluIGF0dHJzKSB7XG4gICAgICAgICAgbGV0IG1lcmdlZCA9IGFzc2lnbih7fSwgbWVyZ2VkUHJvcHNbcHJvcF0pO1xuICAgICAgICAgIG9iamVjdFtwcm9wXSA9IGFzc2lnbihtZXJnZWQsIGF0dHJzW3Byb3BdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFkZFN0YXRpY01peGluKG1peGluOiBNaXhpbikge1xuICAgIHRoaXMuc3RhdGljTWl4aW5zLnB1c2gobWl4aW4pO1xuICB9XG5cbiAgYWRkTWl4aW4obWl4aW46IE1peGluKSB7XG4gICAgdGhpcy5taXhpbnMucHVzaChtaXhpbik7XG4gIH1cblxuICBnZXRTdGF0aWNNaXhpbnMoKTogTWl4aW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGljTWl4aW5zO1xuICB9XG5cbiAgZ2V0TWl4aW5zKCk6IE1peGluW10ge1xuICAgIHJldHVybiB0aGlzLm1peGlucztcbiAgfVxuXG4gIGFkZEFwcGxpZWRNaXhpbihtaXhpbjogTWl4aW4pIHtcbiAgICB0aGlzLmFwcGxpZWRNaXhpbnMucHVzaChtaXhpbik7XG4gIH1cblxuICBoYXNBcHBsaWVkTWl4aW4obWl4aW46IE1peGluKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbGllZE1peGlucy5pbmRleE9mKG1peGluKSAhPT0gLTE7XG4gIH1cblxuICBnZXRBcHBsaWVkTWl4aW5zKCk6IE1peGluW10ge1xuICAgIHJldHVybiB0aGlzLmFwcGxpZWRNaXhpbnM7XG4gIH1cblxuICBoYXNTdGF0aWNNaXhpbihtaXhpbjogTWl4aW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0aWNNaXhpbnMuaW5kZXhPZihtaXhpbikgIT09IC0xO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QWxsTWl4aW5zKFN1YmNsYXNzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+LCBQYXJlbnQ6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5nZXRNaXhpbnMoKS5mb3JFYWNoKChtOiBNaXhpbikgPT4gbS5leHRlbmRQcm90b3R5cGVPbnRvKFN1YmNsYXNzLCBQYXJlbnQpKTtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5nZXRTdGF0aWNNaXhpbnMoKS5mb3JFYWNoKChtOiBNaXhpbikgPT4gbS5leHRlbmRTdGF0aWMoU3ViY2xhc3MpKTtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5zZWFsKCk7XG4gIH1cblxuICBhZGRTdWJjbGFzcyhjb25zdHJ1Y3RvcjogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICAgIHRoaXMuc3ViY2xhc3Nlcy5wdXNoKGNvbnN0cnVjdG9yKTtcbiAgfVxuXG4gIGdldFN1YmNsYXNzZXMoKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PltdIHtcbiAgICByZXR1cm4gdGhpcy5zdWJjbGFzc2VzO1xuICB9XG5cbiAgYWRkUHJvcGVydHlNZXRhZGF0YShwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5wcm9wZXJ0eU1ldGFkYXRhW3Byb3BlcnR5XSA9IHZhbHVlO1xuICB9XG5cbiAgbWV0YWRhdGFGb3JQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogT2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eU1ldGFkYXRhW3Byb3BlcnR5XTtcbiAgfVxuXG4gIGFkZFJlZmVyZW5jZVR5cGVGb3IocHJvcGVydHk6IHN0cmluZywgdHlwZTogSW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4pIHtcbiAgICB0aGlzLnJlZmVyZW5jZVR5cGVzW3Byb3BlcnR5XSA9IHR5cGU7XG4gIH1cblxuICBhZGRTbG90Rm9yKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICB0aGlzLnNsb3RzLnB1c2gocHJvcGVydHkpO1xuICB9XG5cbiAgaGFzQ29uY2F0ZW5hdGVkUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIChwcm9wZXJ0eSBhcyBzdHJpbmcpIGluIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcztcbiAgfVxuXG4gIGdldENvbmNhdGVuYXRlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wZXJ0eV07XG4gIH1cblxuICBnZXRDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGFkZENvbmNhdGVuYXRlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmhhc0NvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSB0cnVlO1xuXG4gICAgaWYgKChwcm9wZXJ0eSBhcyBzdHJpbmcpIGluIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcykge1xuICAgICAgbGV0IHZhbCA9IHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wZXJ0eV0uY29uY2F0KHZhbHVlKTtcbiAgICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wZXJ0eV0gPSB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBoYXNNZXJnZWRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmhhc01lcmdlZFByb3BlcnRpZXMpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKHByb3BlcnR5IGFzIHN0cmluZykgaW4gdGhpcy5tZXJnZWRQcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0TWVyZ2VkUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IE9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV07XG4gIH1cblxuICBnZXRNZXJnZWRQcm9wZXJ0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5tZXJnZWRQcm9wZXJ0aWVzKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGFkZE1lcmdlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiBEaWN0KSB7XG4gICAgdGhpcy5oYXNNZXJnZWRQcm9wZXJ0aWVzID0gdHJ1ZTtcblxuICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgWW91IHBhc3NlZCBpbiBcXGAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHZhbHVlXG4gICAgICAgICl9XFxgIGFzIHRoZSB2YWx1ZSBmb3IgXFxgZm9vXFxgIGJ1dCBcXGBmb29cXGAgY2Fubm90IGJlIGFuIEFycmF5YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoKHByb3BlcnR5IGFzIHN0cmluZykgaW4gdGhpcy5tZXJnZWRQcm9wZXJ0aWVzICYmIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV0gJiYgdmFsdWUpIHtcbiAgICAgIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV0gPSBtZXJnZU1lcmdlZFByb3BlcnRpZXMoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICAodGhpcyBhcyBhbnkpLm1lcmdlZFByb3BlcnRpZXNbcHJvcGVydHldXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlID09PSBudWxsID8gdmFsdWUgOiB2YWx1ZSB8fCB7fTtcbiAgICAgIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXRSZWZlcmVuY2VUeXBlcygpOiBEaWN0PElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+PiB7XG4gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlVHlwZXM7XG4gIH1cblxuICBnZXRQcm9wZXJ0eU1ldGFkYXRhKCk6IERpY3Q8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHlNZXRhZGF0YTtcbiAgfVxuXG4gIHJlc2V0KHBhcmVudDogT3B0aW9uPENsYXNzTWV0YT4pIHtcbiAgICB0aGlzLnJlZmVyZW5jZVR5cGVzID0gZGljdDxJbm5lclJlZmVyZW5jZUZhY3Rvcnk8YW55Pj4oKTtcbiAgICB0aGlzLnByb3BlcnR5TWV0YWRhdGEgPSBkaWN0KCk7XG4gICAgdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gZGljdDxhbnlbXT4oKTtcbiAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXMgPSBkaWN0PE9iamVjdD4oKTtcblxuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHRoaXMuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcyA9IHBhcmVudC5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzO1xuICAgICAgZm9yIChsZXQgcHJvcCBpbiBwYXJlbnQuY29uY2F0ZW5hdGVkUHJvcGVydGllcykge1xuICAgICAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcF0gPSBwYXJlbnQuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wXS5zbGljZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmhhc01lcmdlZFByb3BlcnRpZXMgPSBwYXJlbnQuaGFzTWVyZ2VkUHJvcGVydGllcztcbiAgICAgIGZvciAobGV0IHByb3AgaW4gcGFyZW50Lm1lcmdlZFByb3BlcnRpZXMpIHtcbiAgICAgICAgdGhpcy5tZXJnZWRQcm9wZXJ0aWVzW3Byb3BdID0gYXNzaWduKHt9LCBwYXJlbnQubWVyZ2VkUHJvcGVydGllc1twcm9wXSk7XG4gICAgICB9XG5cbiAgICAgIGFzc2lnbih0aGlzLnJlZmVyZW5jZVR5cGVzLCBwYXJlbnQucmVmZXJlbmNlVHlwZXMpO1xuICAgICAgYXNzaWduKHRoaXMucHJvcGVydHlNZXRhZGF0YSwgcGFyZW50LnByb3BlcnR5TWV0YWRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2VhbChvYmo6IE9iamVjdCkge1xuICAgIGxldCBtZXRhID0gTWV0YS5mb3Iob2JqKTtcbiAgICBsZXQgZnJlc2ggPSBuZXcgdGhpcy5JbnN0YW5jZU1ldGFDb25zdHJ1Y3RvciEob2JqLCB7fSk7XG4gICAgbGV0IHJlZmVyZW5jZVR5cGVzID0gbWV0YS5nZXRSZWZlcmVuY2VUeXBlcygpO1xuICAgIGxldCBzbG90cyA9IG1ldGEuZ2V0U2xvdHMoKTtcblxuICAgIHR1cmJvY2hhcmdlKGFzc2lnbihyZWZlcmVuY2VUeXBlcywgdGhpcy5yZWZlcmVuY2VUeXBlcykpO1xuICAgIHR1cmJvY2hhcmdlKGFzc2lnbihzbG90cywgZnJlc2guZ2V0U2xvdHMoKSkpO1xuICB9XG5cbiAgc2VhbCgpIHtcbiAgICBsZXQgcmVmZXJlbmNlVHlwZXM6IERpY3Q8SW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4+ID0gdHVyYm9jaGFyZ2UoXG4gICAgICBhc3NpZ24oe30sIHRoaXMucmVmZXJlbmNlVHlwZXMpXG4gICAgKTtcbiAgICB0dXJib2NoYXJnZSh0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXMpO1xuICAgIHR1cmJvY2hhcmdlKHRoaXMubWVyZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoIXRoaXMuaGFzTWVyZ2VkUHJvcGVydGllcyAmJiAhdGhpcy5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSB7XG4gICAgICB0aGlzLmluaXQgPSBmdW5jdGlvbigpIHt9O1xuICAgIH1cblxuICAgIGxldCBzbG90cyA9IHRoaXMuc2xvdHM7XG5cbiAgICBjbGFzcyBTbG90cyB7XG4gICAgICBbaW5kZXg6IHN0cmluZ106IHVua25vd247XG5cbiAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzbG90cy5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgIHRoaXNbbmFtZV0gPSBFTVBUWV9DQUNIRTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5JbnN0YW5jZU1ldGFDb25zdHJ1Y3RvciA9IGNsYXNzIGV4dGVuZHMgU2VhbGVkTWV0YSB7XG4gICAgICBwcm90ZWN0ZWQgc2xvdHM6IFNsb3RzID0gbmV3IFNsb3RzKCk7XG4gICAgICBwdWJsaWMgcmVmZXJlbmNlVHlwZXM6IERpY3Q8SW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4+ID0gcmVmZXJlbmNlVHlwZXM7XG5cbiAgICAgIGdldFJlZmVyZW5jZVR5cGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VUeXBlcztcbiAgICAgIH1cblxuICAgICAgcmVmZXJlbmNlVHlwZUZvcihwcm9wZXJ0eTogc3RyaW5nKTogSW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VUeXBlc1twcm9wZXJ0eV0gfHwgUHJvcGVydHlSZWZlcmVuY2U7XG4gICAgICB9XG5cbiAgICAgIGdldFNsb3RzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zbG90cztcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdHVyYm9jaGFyZ2UodGhpcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVyZ2VNZXJnZWRQcm9wZXJ0aWVzKGF0dHJzOiBEaWN0LCBwYXJlbnQ6IERpY3QpIHtcbiAgbGV0IG1lcmdlZCA9IGFzc2lnbih7fSwgcGFyZW50KTtcblxuICBmb3IgKGxldCBwcm9wIGluIGF0dHJzKSB7XG4gICAgaWYgKHByb3AgaW4gcGFyZW50ICYmIHR5cGVvZiBwYXJlbnRbcHJvcF0gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGF0dHJzW3Byb3BdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBsZXQgd3JhcHBlZCA9IHdyYXBNZXRob2QocGFyZW50LCBwcm9wLCBhdHRyc1twcm9wXSBhcyBhbnkpO1xuICAgICAgbWVyZ2VkW3Byb3BdID0gd3JhcHBlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVyZ2VkW3Byb3BdID0gYXR0cnNbcHJvcF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuZXhwb3J0IGNsYXNzIEluc3RhbmNlTWV0YSBleHRlbmRzIENsYXNzTWV0YSB7XG4gIHB1YmxpYyBbQ0xBU1NfTUVUQV06IENsYXNzTWV0YSA9IENsYXNzTWV0YS5mcm9tUGFyZW50KG51bGwpO1xuXG4gIHN0YXRpYyBmcm9tUGFyZW50KHBhcmVudDogT3B0aW9uPEluc3RhbmNlTWV0YT4pOiBJbnN0YW5jZU1ldGEge1xuICAgIHJldHVybiBzdXBlci5mcm9tUGFyZW50KHBhcmVudCkgYXMgSW5zdGFuY2VNZXRhO1xuICB9XG5cbiAgcmVzZXQocGFyZW50OiBJbnN0YW5jZU1ldGEpIHtcbiAgICBzdXBlci5yZXNldChwYXJlbnQpO1xuICAgIGlmIChwYXJlbnQpIHRoaXNbQ0xBU1NfTUVUQV0ucmVzZXQocGFyZW50W0NMQVNTX01FVEFdKTtcbiAgfVxuXG4gIHNlYWwoKSB7XG4gICAgc3VwZXIuc2VhbCgpO1xuICAgIHRoaXNbQ0xBU1NfTUVUQV0uc2VhbCgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdsaW1tZXJPYmplY3Qge1xuICBbaW5kZXg6IHN0cmluZ106IHVua25vd247XG5cbiAgc3RhdGljIFtDTEFTU19NRVRBXTogSW5zdGFuY2VNZXRhID0gSW5zdGFuY2VNZXRhLmZyb21QYXJlbnQobnVsbCk7XG4gIHN0YXRpYyBpc0NsYXNzID0gdHJ1ZTtcblxuICBzdGF0aWMgZXh0ZW5kKCk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4gJiB0eXBlb2YgR2xpbW1lck9iamVjdDtcbiAgc3RhdGljIGV4dGVuZDxUPihleHRlbnNpb246IFQpOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxUPiAmIHR5cGVvZiBHbGltbWVyT2JqZWN0O1xuICBzdGF0aWMgZXh0ZW5kKC4uLmV4dGVuc2lvbnM6IE9iamVjdFtdKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiAmIHR5cGVvZiBHbGltbWVyT2JqZWN0O1xuXG4gIHN0YXRpYyBleHRlbmQodGhpczogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiwgLi4uZXh0ZW5zaW9uczogYW55W10pIHtcbiAgICByZXR1cm4gZXh0ZW5kQ2xhc3ModGhpcywgLi4uZXh0ZW5zaW9ucyk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlKGF0dHJzPzogRGljdCB8IG51bGwpOiBHbGltbWVyT2JqZWN0IHtcbiAgICByZXR1cm4gbmV3IHRoaXMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHJlb3BlbjxVPihleHRlbnNpb25zOiBVKTogdm9pZCB7XG4gICAgdG9NaXhpbihleHRlbnNpb25zKS5leHRlbmRQcm90b3R5cGUodGhpcyBhcyBhbnkpO1xuICAgIHRoaXNbQ0xBU1NfTUVUQV0uc2VhbCgpO1xuXG4gICAgcmVsaW5rU3ViY2xhc3Nlcyh0aGlzIGFzIGFueSk7XG4gIH1cblxuICBzdGF0aWMgcmVvcGVuQ2xhc3M8VT4oZXh0ZW5zaW9uczogVSk6IHZvaWQge1xuICAgIHRvTWl4aW4oZXh0ZW5zaW9ucykuZXh0ZW5kU3RhdGljKHRoaXMgYXMgYW55KTtcbiAgICB0aGlzW0NMQVNTX01FVEFdLnNlYWwoKTtcbiAgfVxuXG4gIHN0YXRpYyBtZXRhRm9yUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IE9iamVjdCB7XG4gICAgbGV0IHZhbHVlID0gdGhpc1tDTEFTU19NRVRBXS5tZXRhZGF0YUZvclByb3BlcnR5KHByb3BlcnR5KTtcbiAgICBpZiAoIXZhbHVlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgbWV0YUZvclByb3BlcnR5KCkgY291bGQgbm90IGZpbmQgYSBjb21wdXRlZCBwcm9wZXJ0eSB3aXRoIGtleSAnJHtwcm9wZXJ0eX0nLmBcbiAgICAgICk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgc3RhdGljIGVhY2hDb21wdXRlZFByb3BlcnR5KGNhbGxiYWNrOiAoczogc3RyaW5nLCBvOiBPYmplY3QpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBsZXQgbWV0YWRhdGEgPSB0aGlzW0NMQVNTX01FVEFdLmdldFByb3BlcnR5TWV0YWRhdGEoKTtcbiAgICBpZiAoIW1ldGFkYXRhKSByZXR1cm47XG5cbiAgICBmb3IgKGxldCBwcm9wIGluIG1ldGFkYXRhKSB7XG4gICAgICBjYWxsYmFjayhwcm9wLCBtZXRhZGF0YVtwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgX3N1cGVyID0gUk9PVDtcbiAgX21ldGEgPSBudWxsO1xuICBfZ3VpZCE6IG51bWJlcjsgLy8gU2V0IGJ5IGluaXRpYWxpemVHdWlkKHRoaXMpIGluIGNvbnN0cnVjdG9yXG5cbiAgaW5pdCgpIHt9XG5cbiAgY29uc3RydWN0b3IoYXR0cnM/OiBEaWN0IHwgbnVsbCkge1xuICAgIGlmIChhdHRycykgYXNzaWduKHRoaXMsIGF0dHJzKTtcbiAgICAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgR2xpbW1lck9iamVjdClbQ0xBU1NfTUVUQV0uaW5pdCh0aGlzLCBhdHRycyB8fCBudWxsKTtcbiAgICB0aGlzLl9zdXBlciA9IFJPT1Q7XG4gICAgaW5pdGlhbGl6ZUd1aWQodGhpcyk7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBnZXQoa2V5OiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB0aGlzW2tleV07XG4gIH1cblxuICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzW2tleV0gPSB2YWx1ZTtcbiAgICBidW1wKCk7XG4gIH1cblxuICBzZXRQcm9wZXJ0aWVzKGF0dHJzOiBPYmplY3QpIHtcbiAgICBhc3NpZ24odGhpcywgYXR0cnMpO1xuICAgIGJ1bXAoKTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7fVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
const HAS_SUPER_PATTERN = /\.(_super|call\(this|apply\(this)/;
export const checkHasSuper = function () {
let sourceAvailable = function () {
return this;
}.toString().indexOf('return this') > -1;
if (sourceAvailable) {
return function checkHasSuper(func) {
return HAS_SUPER_PATTERN.test(func.toString());
};
}
return function checkHasSuper() {
return true;
let sourceAvailable = function () {
return this;
}.toString().indexOf('return this') > -1;
if (sourceAvailable) {
return function checkHasSuper(func) {
return HAS_SUPER_PATTERN.test(func.toString());
};
}
return function checkHasSuper() {
return true;
};
}();

@@ -18,7 +20,8 @@ export function ROOT(..._args) {}

export function hasSuper(func) {
if (func['__hasSuper'] === undefined) {
func['__hasSuper'] = checkHasSuper(func);
}
return func['__hasSuper'];
if (func['__hasSuper'] === undefined) {
func['__hasSuper'] = checkHasSuper(func);
}
return func['__hasSuper'];
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxvQkFBb0IsbUNBQTFCO0FBRUEsT0FBTyxNQUFNLGdCQUFpQixZQUFBO0FBQzVCLFFBQUksa0JBQ0YsWUFBQTtBQUNFLGVBQU8sSUFBUDtBQUNELEtBRkQsQ0FHRyxRQUhILEdBSUcsT0FKSCxDQUlXLGFBSlgsSUFJNEIsQ0FBQyxDQUwvQjtBQU9BLFFBQUksZUFBSixFQUFxQjtBQUNuQixlQUFPLFNBQVMsYUFBVCxDQUF1QixJQUF2QixFQUFxQztBQUMxQyxtQkFBTyxrQkFBa0IsSUFBbEIsQ0FBdUIsS0FBSyxRQUFMLEVBQXZCLENBQVA7QUFDRCxTQUZEO0FBR0Q7QUFFRCxXQUFPLFNBQVMsYUFBVCxHQUFzQjtBQUMzQixlQUFPLElBQVA7QUFDRCxLQUZEO0FBR0QsQ0FqQjRCLEVBQXRCO0FBbUJQLE9BQU0sU0FBVSxJQUFWLENBQWUsR0FBRyxLQUFsQixFQUE4QixDQUFJO0FBQ3ZDLEtBQWEsVUFBYixHQUEwQixLQUExQjtBQUVELE9BQU0sU0FBVSxRQUFWLENBQW1CLElBQW5CLEVBQXdDO0FBQzVDLFFBQUksS0FBSyxZQUFMLE1BQXVCLFNBQTNCLEVBQXNDO0FBQ3BDLGFBQUssWUFBTCxJQUFxQixjQUFjLElBQWQsQ0FBckI7QUFDRDtBQUNELFdBQU8sS0FBSyxZQUFMLENBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpY3QgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcblxuY29uc3QgSEFTX1NVUEVSX1BBVFRFUk4gPSAvXFwuKF9zdXBlcnxjYWxsXFwodGhpc3xhcHBseVxcKHRoaXMpLztcblxuZXhwb3J0IGNvbnN0IGNoZWNrSGFzU3VwZXIgPSAoZnVuY3Rpb24oKSB7XG4gIGxldCBzb3VyY2VBdmFpbGFibGUgPVxuICAgIGZ1bmN0aW9uKHRoaXM6IGFueSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC5pbmRleE9mKCdyZXR1cm4gdGhpcycpID4gLTE7XG5cbiAgaWYgKHNvdXJjZUF2YWlsYWJsZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBjaGVja0hhc1N1cGVyKGZ1bmM6IEZ1bmN0aW9uKSB7XG4gICAgICByZXR1cm4gSEFTX1NVUEVSX1BBVFRFUk4udGVzdChmdW5jLnRvU3RyaW5nKCkpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gY2hlY2tIYXNTdXBlcigpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn0pKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBST09UKC4uLl9hcmdzOiBhbnlbXSkge31cbihST09UIGFzIGFueSkuX19oYXNTdXBlciA9IGZhbHNlO1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzU3VwZXIoZnVuYzogRnVuY3Rpb24gJiBEaWN0KSB7XG4gIGlmIChmdW5jWydfX2hhc1N1cGVyJ10gPT09IHVuZGVmaW5lZCkge1xuICAgIGZ1bmNbJ19faGFzU3VwZXInXSA9IGNoZWNrSGFzU3VwZXIoZnVuYyk7XG4gIH1cbiAgcmV0dXJuIGZ1bmNbJ19faGFzU3VwZXInXTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxpQkFBaUIsR0FBRyxtQ0FBMUI7QUFFQSxPQUFPLE1BQU0sYUFBYSxHQUFJLFlBQUE7QUFDNUIsTUFBSSxlQUFlLEdBQ2pCLFlBQUE7QUFDRSxXQUFPLElBQVA7QUFDRCxHQUZELENBR0csUUFISCxHQUlHLE9BSkgsQ0FJVyxhQUpYLElBSTRCLENBQUMsQ0FML0I7O0FBT0EsTUFBSSxlQUFKLEVBQXFCO0FBQ25CLFdBQU8sU0FBUyxhQUFULENBQXVCLElBQXZCLEVBQXFDO0FBQzFDLGFBQU8saUJBQWlCLENBQUMsSUFBbEIsQ0FBdUIsSUFBSSxDQUFDLFFBQUwsRUFBdkIsQ0FBUDtBQUNELEtBRkQ7QUFHRDs7QUFFRCxTQUFPLFNBQVMsYUFBVCxHQUFzQjtBQUMzQixXQUFPLElBQVA7QUFDRCxHQUZEO0FBR0QsQ0FqQjRCLEVBQXRCO0FBbUJQLE9BQU0sU0FBVSxJQUFWLENBQWUsR0FBRyxLQUFsQixFQUE4QixDQUFJO0FBQ3ZDLElBQVksQ0FBQyxVQUFiLEdBQTBCLEtBQTFCO0FBRUQsT0FBTSxTQUFVLFFBQVYsQ0FBbUIsSUFBbkIsRUFBd0M7QUFDNUMsTUFBSSxJQUFJLENBQUMsWUFBRCxDQUFKLEtBQXVCLFNBQTNCLEVBQXNDO0FBQ3BDLElBQUEsSUFBSSxDQUFDLFlBQUQsQ0FBSixHQUFxQixhQUFhLENBQUMsSUFBRCxDQUFsQztBQUNEOztBQUNELFNBQU8sSUFBSSxDQUFDLFlBQUQsQ0FBWDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGljdCB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuXG5jb25zdCBIQVNfU1VQRVJfUEFUVEVSTiA9IC9cXC4oX3N1cGVyfGNhbGxcXCh0aGlzfGFwcGx5XFwodGhpcykvO1xuXG5leHBvcnQgY29uc3QgY2hlY2tIYXNTdXBlciA9IChmdW5jdGlvbigpIHtcbiAgbGV0IHNvdXJjZUF2YWlsYWJsZSA9XG4gICAgZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLmluZGV4T2YoJ3JldHVybiB0aGlzJykgPiAtMTtcblxuICBpZiAoc291cmNlQXZhaWxhYmxlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNoZWNrSGFzU3VwZXIoZnVuYzogRnVuY3Rpb24pIHtcbiAgICAgIHJldHVybiBIQVNfU1VQRVJfUEFUVEVSTi50ZXN0KGZ1bmMudG9TdHJpbmcoKSk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiBjaGVja0hhc1N1cGVyKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xufSkoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIFJPT1QoLi4uX2FyZ3M6IGFueVtdKSB7fVxuKFJPT1QgYXMgYW55KS5fX2hhc1N1cGVyID0gZmFsc2U7XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNTdXBlcihmdW5jOiBGdW5jdGlvbiAmIERpY3QpIHtcbiAgaWYgKGZ1bmNbJ19faGFzU3VwZXInXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZnVuY1snX19oYXNTdXBlciddID0gY2hlY2tIYXNTdXBlcihmdW5jKTtcbiAgfVxuICByZXR1cm4gZnVuY1snX19oYXNTdXBlciddO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==

@@ -1,185 +0,209 @@

function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var _a;
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }
var _a;
import { ComputedReferenceBlueprint, Meta } from '@glimmer/object-reference';
import { EMPTY_CACHE } from './object';
import { Blueprint, DESCRIPTOR } from './mixin';
export var ComputedBlueprint = function (_Blueprint) {
_inherits(ComputedBlueprint, _Blueprint);
export var ComputedBlueprint =
/*#__PURE__*/
function (_Blueprint) {
_inheritsLoose(ComputedBlueprint, _Blueprint);
function ComputedBlueprint(accessor) {
var deps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
function ComputedBlueprint(accessor, deps) {
var _this;
_classCallCheck(this, ComputedBlueprint);
if (deps === void 0) {
deps = [];
}
var _this = _possibleConstructorReturn(this, _Blueprint.call(this));
_this = _Blueprint.call(this) || this;
_this.metadata = {};
_this.accessor = accessor;
_this.deps = deps;
return _this;
}
_this.metadata = {};
_this.accessor = accessor;
_this.deps = deps;
return _this;
}
var _proto = ComputedBlueprint.prototype;
ComputedBlueprint.prototype.descriptor = function descriptor(_target, key, classMeta) {
classMeta.addReferenceTypeFor(key, ComputedReferenceBlueprint(key, this.deps));
classMeta.addPropertyMetadata(key, this.metadata);
classMeta.addSlotFor(key);
return new Computed(this.accessor);
};
_proto.descriptor = function descriptor(_target, key, classMeta) {
classMeta.addReferenceTypeFor(key, ComputedReferenceBlueprint(key, this.deps));
classMeta.addPropertyMetadata(key, this.metadata);
classMeta.addSlotFor(key);
return new Computed(this.accessor);
};
ComputedBlueprint.prototype.property = function property() {
for (var _len = arguments.length, paths = Array(_len), _key = 0; _key < _len; _key++) {
paths[_key] = arguments[_key];
}
_proto.property = function property() {
for (var _len = arguments.length, paths = new Array(_len), _key = 0; _key < _len; _key++) {
paths[_key] = arguments[_key];
}
this.deps = paths.map(function (d) {
return d.split('.');
});
return this;
};
this.deps = paths.map(function (d) {
return d.split('.');
});
return this;
};
ComputedBlueprint.prototype.meta = function meta(object) {
this.metadata = object;
return this;
};
_proto.meta = function meta(object) {
this.metadata = object;
return this;
};
ComputedBlueprint.prototype.volatile = function volatile() {
return this;
};
_proto["volatile"] = function volatile() {
return this;
};
return ComputedBlueprint;
return ComputedBlueprint;
}(Blueprint);
var Computed = function () {
function Computed(accessor) {
_classCallCheck(this, Computed);
var Computed =
/*#__PURE__*/
function () {
function Computed(accessor) {
this[_a] = true;
this.accessor = accessor;
this.enumerable = false;
this.configurable = false;
}
this[_a] = true;
this.accessor = accessor;
this.enumerable = false;
this.configurable = false;
}
var _proto2 = Computed.prototype;
Computed.prototype.define = function define(prototype, key, home) {
Object.defineProperty(prototype, key, wrapAccessor(home, key, this.accessor));
};
_proto2.define = function define(prototype, key, home) {
Object.defineProperty(prototype, key, wrapAccessor(home, key, this.accessor));
};
return Computed;
return Computed;
}();
_a = DESCRIPTOR;
function wrapAccessor(home, accessorName, _desc) {
var superDesc = getPropertyDescriptor(home, accessorName);
var originalGet = void 0;
var originalSet = void 0;
var desc = {
enumerable: true,
configurable: true
var superDesc = getPropertyDescriptor(home, accessorName);
var originalGet;
var originalSet;
var desc = {
enumerable: true,
configurable: true
};
var get = _desc.get;
if (get && get.length > 0) {
originalGet = function originalGet() {
return get.call(this, accessorName);
};
var get = _desc.get;
if (get && get.length > 0) {
originalGet = function originalGet() {
return get.call(this, accessorName);
};
} else {
originalGet = _desc.get;
}
var set = _desc.set;
if (set && set.length > 1) {
originalSet = function originalSet(value) {
return set.call(this, accessorName, value);
};
} else {
originalSet = _desc.set;
}
var cacheGet = function cacheGet() {
if (Meta.exists(this)) {
var slot = Meta.for(this).getSlots()[accessorName];
if (slot !== EMPTY_CACHE) return slot;
}
return originalGet.call(this);
} else {
originalGet = _desc.get;
}
var set = _desc.set;
if (set && set.length > 1) {
originalSet = function originalSet(value) {
return set.call(this, accessorName, value);
};
var cacheSet = void 0;
if (originalSet) {
cacheSet = function cacheSet(value) {
var meta = Meta.for(this);
var slots = meta.getSlots();
var ret = originalSet.call(this, value);
if (ret !== undefined) {
slots[accessorName] = ret;
}
};
} else {
cacheSet = function cacheSet(value) {
var meta = Meta.for(this);
var slots = meta.getSlots();
if (value !== undefined) slots[accessorName] = value;
};
} else {
originalSet = _desc.set;
}
var cacheGet = function cacheGet() {
if (Meta.exists(this)) {
var slot = Meta["for"](this).getSlots()[accessorName];
if (slot !== EMPTY_CACHE) return slot;
}
if (!superDesc || 'value' in superDesc) {
desc.get = cacheGet;
desc.set = cacheSet;
return desc;
}
desc.get = function () {
var lastSuper = this._super;
this._super = function () {
return superDesc.get.call(this);
};
try {
return cacheGet.call(this);
} finally {
this._super = lastSuper;
}
return originalGet.call(this);
};
var cacheSet;
if (originalSet) {
cacheSet = function cacheSet(value) {
var meta = Meta["for"](this);
var slots = meta.getSlots();
var ret = originalSet.call(this, value);
if (ret !== undefined) {
slots[accessorName] = ret;
}
};
desc.set = function (val) {
var lastSuper = this._super;
this._super = function () {
return superDesc.set.call(this, val);
};
try {
return cacheSet.call(this, val);
} finally {
this._super = lastSuper;
}
} else {
cacheSet = function cacheSet(value) {
var meta = Meta["for"](this);
var slots = meta.getSlots();
if (value !== undefined) slots[accessorName] = value;
};
}
if (!superDesc || 'value' in superDesc) {
desc.get = cacheGet;
desc.set = cacheSet;
return desc;
}
desc.get = function () {
var lastSuper = this._super;
this._super = function () {
return superDesc.get.call(this);
};
try {
return cacheGet.call(this);
} finally {
this._super = lastSuper;
}
};
desc.set = function (val) {
var lastSuper = this._super;
this._super = function () {
return superDesc.set.call(this, val);
};
try {
return cacheSet.call(this, val);
} finally {
this._super = lastSuper;
}
};
return desc;
}
function getPropertyDescriptor(subject, name) {
var pd = Object.getOwnPropertyDescriptor(subject, name);
var proto = Object.getPrototypeOf(subject);
while (typeof pd === 'undefined' && proto !== null) {
pd = Object.getOwnPropertyDescriptor(proto, name);
proto = Object.getPrototypeOf(proto);
}
return pd;
var pd = Object.getOwnPropertyDescriptor(subject, name);
var proto = Object.getPrototypeOf(subject);
while (typeof pd === 'undefined' && proto !== null) {
pd = Object.getOwnPropertyDescriptor(proto, name);
proto = Object.getPrototypeOf(proto);
}
return pd;
}
export function computed() {
for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
var last = args.pop();
var deps = args;
if (typeof last === 'function') {
var _ref;
var last = args.pop();
var deps = args;
return (_ref = new ComputedBlueprint({
get: last
})).property.apply(_ref, deps);
} else if (typeof last === 'object') {
var _ref2;
if (typeof last === 'function') {
var _ref;
return (_ref2 = new ComputedBlueprint(last)).property.apply(_ref2, deps);
} else {
throw new TypeError('computed expects a function or an object as last argument');
}
return (_ref = new ComputedBlueprint({
get: last
})).property.apply(_ref, deps);
} else if (typeof last === 'object') {
var _ref2;
return (_ref2 = new ComputedBlueprint(last)).property.apply(_ref2, deps);
} else {
throw new TypeError('computed expects a function or an object as last argument');
}
}
export function observer() {}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvY29tcHV0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsU0FBQSwwQkFBQSxFQUFBLElBQUEsUUFBQSwyQkFBQTtBQUNBLFNBQUEsV0FBQSxRQUFBLFVBQUE7QUFDQSxTQUFBLFNBQUEsRUFBQSxVQUFBLFFBQUEsU0FBQTtBQXlCQSxXQUFNLGlCQUFOO0FBQUE7O0FBS0UsK0JBQUEsUUFBQSxFQUErRDtBQUFBLFlBQXJCLElBQXFCLHVFQUEvRCxFQUErRDs7QUFBQTs7QUFBQSxxREFDN0QscUJBRDZEOztBQUZ2RCxjQUFBLFFBQUEsR0FBQSxFQUFBO0FBSU4sY0FBQSxRQUFBLEdBQUEsUUFBQTtBQUNBLGNBQUEsSUFBQSxHQUFBLElBQUE7QUFINkQ7QUFJOUQ7O0FBVEgsZ0NBV0UsVUFYRix1QkFXRSxPQVhGLEVBV0UsR0FYRixFQVdFLFNBWEYsRUFXK0Q7QUFDM0Qsa0JBQUEsbUJBQUEsQ0FBQSxHQUFBLEVBQW1DLDJCQUFBLEdBQUEsRUFBZ0MsS0FBbkUsSUFBbUMsQ0FBbkM7QUFDQSxrQkFBQSxtQkFBQSxDQUFBLEdBQUEsRUFBbUMsS0FBbkMsUUFBQTtBQUNBLGtCQUFBLFVBQUEsQ0FBQSxHQUFBO0FBQ0EsZUFBTyxJQUFBLFFBQUEsQ0FBYSxLQUFwQixRQUFPLENBQVA7QUFDRCxLQWhCSDs7QUFBQSxnQ0FrQkUsUUFsQkYsdUJBa0I2QjtBQUFBLDBDQUEzQixLQUEyQjtBQUEzQixpQkFBMkI7QUFBQTs7QUFDekIsYUFBQSxJQUFBLEdBQVksTUFBQSxHQUFBLENBQVU7QUFBQSxtQkFBSyxFQUFBLEtBQUEsQ0FBM0IsR0FBMkIsQ0FBTDtBQUFBLFNBQVYsQ0FBWjtBQUNBLGVBQUEsSUFBQTtBQUNELEtBckJIOztBQUFBLGdDQXVCRSxJQXZCRixpQkF1QkUsTUF2QkYsRUF1QnFCO0FBQ2pCLGFBQUEsUUFBQSxHQUFBLE1BQUE7QUFDQSxlQUFBLElB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LGlCQUFBLENBQXNCO0FBQzNCLGlCQUFLO0FBRHNCLFNBQXRCLEdBQUEsUUFBQSxhQUFQLElBQU8sQ0FBUDtBQURGLEtBQUEsTUFJTyxJQUFJLE9BQUEsSUFBQSxLQUFKLFFBQUEsRUFBOEI7QUFBQTs7QUFDbkMsZUFBTyxhQUFBLGlCQUFBLENBQUEsSUFBQSxHQUFBLFFBQUEsY0FBUCxJQUFPLENBQVA7QUFESyxLQUFBLE1BRUE7QUFDTCxjQUFNLElBQUEsU0FBQSxDQUFOLDJEQUFNLENBQU47QUFDRDtBQUNGO0FBRUQsT0FBTSxTQUFBLFFBQUEsR0FBa0MsQ0FBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXB1dGVkUmVmZXJlbmNlQmx1ZXByaW50LCBNZXRhIH0gZnJvbSAnQGdsaW1tZXIvb2JqZWN0LXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBFTVBUWV9DQUNIRSwgQ2xhc3NNZXRhIH0gZnJvbSAnLi9vYmplY3QnO1xuaW1wb3J0IHsgRGVzY3JpcHRvciwgQmx1ZXByaW50LCBERVNDUklQVE9SIH0gZnJvbSAnLi9taXhpbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcHV0ZWRHZXRDYWxsYmFjayB7XG4gICgpOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGVnYWN5Q29tcHV0ZWRHZXRDYWxsYmFjayB7XG4gIChrZXk6IHN0cmluZyk6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wdXRlZFNldENhbGxiYWNrIHtcbiAgKHZhbDogYW55KTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExlZ2FjeUNvbXB1dGVkU2V0Q2FsbGJhY2sge1xuICAoa2V5OiBzdHJpbmcsIHZhbDogYW55KTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXB1dGVkRGVzY3JpcHRvciB7XG4gIGdldD86IENvbXB1dGVkR2V0Q2FsbGJhY2sgfCBMZWdhY3lDb21wdXRlZEdldENhbGxiYWNrO1xuICBzZXQ/OiBDb21wdXRlZFNldENhbGxiYWNrIHwgTGVnYWN5Q29tcHV0ZWRTZXRDYWxsYmFjaztcbn1cblxudHlwZSBDb21wdXRlZEFyZ3VtZW50ID0gQ29tcHV0ZWRHZXRDYWxsYmFjayB8IENvbXB1dGVkRGVzY3JpcHRvcjtcblxuZXhwb3J0IGNsYXNzIENvbXB1dGVkQmx1ZXByaW50IGV4dGVuZHMgQmx1ZXByaW50IHtcbiAgcHJpdmF0ZSBhY2Nlc3NvcjogQ29tcHV0ZWREZXNjcmlwdG9yO1xuICBwcml2YXRlIGRlcHM6IHN0cmluZ1tdW107XG4gIHByaXZhdGUgbWV0YWRhdGE6IE9iamVjdCA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKGFjY2Vzc29yOiBDb21wdXRlZERlc2NyaXB0b3IsIGRlcHM6IHN0cmluZ1tdW10gPSBbXSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hY2Nlc3NvciA9IGFjY2Vzc29yO1xuICAgIHRoaXMuZGVwcyA9IGRlcHM7XG4gIH1cblxuICBkZXNjcmlwdG9yKF90YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIGNsYXNzTWV0YTogQ2xhc3NNZXRhKTogRGVzY3JpcHRvciB7XG4gICAgY2xhc3NNZXRhLmFkZFJlZmVyZW5jZVR5cGVGb3Ioa2V5LCBDb21wdXRlZFJlZmVyZW5jZUJsdWVwcmludChrZXksIHRoaXMuZGVwcykpO1xuICAgIGNsYXNzTWV0YS5hZGRQcm9wZXJ0eU1ldGFkYXRhKGtleSwgdGhpcy5tZXRhZGF0YSk7XG4gICAgY2xhc3NNZXRhLmFkZFNsb3RGb3Ioa2V5KTtcbiAgICByZXR1cm4gbmV3IENvbXB1dGVkKHRoaXMuYWNjZXNzb3IpO1xuICB9XG5cbiAgcHJvcGVydHkoLi4ucGF0aHM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5kZXBzID0gcGF0aHMubWFwKGQgPT4gZC5zcGxpdCgnLicpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG1ldGEob2JqZWN0OiBPYmplY3QpIHtcbiAgICB0aGlzLm1ldGFkYXRhID0gb2JqZWN0O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdm9sYXRpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuY2xhc3MgQ29tcHV0ZWQgaW1wbGVtZW50cyBEZXNjcmlwdG9yIHtcbiAgZW51bWVyYWJsZTogYm9vbGVhbjtcbiAgY29uZmlndXJhYmxlOiBib29sZWFuO1xuXG4gIHByaXZhdGUgYWNjZXNzb3I6IENvbXB1dGVkRGVzY3JpcHRvcjtcbiAgW0RFU0NSSVBUT1JdID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihhY2Nlc3NvcjogQ29tcHV0ZWREZXNjcmlwdG9yKSB7XG4gICAgdGhpcy5hY2Nlc3NvciA9IGFjY2Vzc29yO1xuICAgIHRoaXMuZW51bWVyYWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuY29uZmlndXJhYmxlID0gZmFsc2U7XG4gIH1cblxuICBkZWZpbmUocHJvdG90eXBlOiBPYmplY3QsIGtleTogc3RyaW5nLCBob21lOiBPYmplY3QpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCBrZXksIHdyYXBBY2Nlc3Nvcihob21lLCBrZXksIHRoaXMuYWNjZXNzb3IpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3cmFwQWNjZXNzb3IoXG4gIGhvbWU6IE9iamVjdCxcbiAgYWNjZXNzb3JOYW1lOiBzdHJpbmcsXG4gIF9kZXNjOiBDb21wdXRlZERlc2NyaXB0b3Jcbik6IFByb3BlcnR5RGVzY3JpcHRvciB7XG4gIGxldCBzdXBlckRlc2MgPSBnZXRQcm9wZXJ0eURlc2NyaXB0b3IoaG9tZSwgYWNjZXNzb3JOYW1lKTtcblxuICBsZXQgb3JpZ2luYWxHZXQ6IENvbXB1dGVkR2V0Q2FsbGJhY2s7XG4gIGxldCBvcmlnaW5hbFNldDogQ29tcHV0ZWRTZXRDYWxsYmFjaztcblxuICBsZXQgZGVzYzogUHJvcGVydHlEZXNjcmlwdG9yID0ge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICB9O1xuXG4gIGxldCBnZXQgPSBfZGVzYy5nZXQ7XG5cbiAgaWYgKGdldCAmJiBnZXQubGVuZ3RoID4gMCkge1xuICAgIG9yaWdpbmFsR2V0ID0gZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgICByZXR1cm4gKGdldCBhcyBhbnkpLmNhbGwodGhpcywgYWNjZXNzb3JOYW1lKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIG9yaWdpbmFsR2V0ID0gX2Rlc2MuZ2V0IGFzIENvbXB1dGVkR2V0Q2FsbGJhY2s7XG4gIH1cblxuICBsZXQgc2V0ID0gX2Rlc2Muc2V0O1xuXG4gIGlmIChzZXQgJiYgc2V0Lmxlbmd0aCA+IDEpIHtcbiAgICBvcmlnaW5hbFNldCA9IGZ1bmN0aW9uKHRoaXM6IGFueSwgdmFsdWU6IGFueSkge1xuICAgICAgcmV0dXJuIChzZXQgYXMgYW55KS5jYWxsKHRoaXMsIGFjY2Vzc29yTmFtZSwgdmFsdWUpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgb3JpZ2luYWxTZXQgPSBfZGVzYy5zZXQgYXMgQ29tcHV0ZWRHZXRDYWxsYmFjaztcbiAgfVxuXG4gIGxldCBjYWNoZUdldCA9IGZ1bmN0aW9uKHRoaXM6IGFueSkge1xuICAgIGlmIChNZXRhLmV4aXN0cyh0aGlzKSkge1xuICAgICAgbGV0IHNsb3QgPSBNZXRhLmZvcih0aGlzKS5nZXRTbG90cygpW2FjY2Vzc29yTmFtZV07XG4gICAgICBpZiAoc2xvdCAhPT0gRU1QVFlfQ0FDSEUpIHJldHVybiBzbG90O1xuICAgIH1cblxuICAgIHJldHVybiBvcmlnaW5hbEdldC5jYWxsKHRoaXMpO1xuICB9O1xuXG4gIGxldCBjYWNoZVNldDogKHZhbHVlOiBhbnkpID0+IHZvaWQ7XG5cbiAgaWYgKG9yaWdpbmFsU2V0KSB7XG4gICAgY2FjaGVTZXQgPSBmdW5jdGlvbih0aGlzOiBhbnksIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgIGxldCBtZXRhID0gTWV0YS5mb3IodGhpcyk7XG4gICAgICBsZXQgc2xvdHMgPSBtZXRhLmdldFNsb3RzKCk7XG5cbiAgICAgIGxldCByZXQgPSBvcmlnaW5hbFNldC5jYWxsKHRoaXMsIHZhbHVlKTtcblxuICAgICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNsb3RzW2FjY2Vzc29yTmFtZV0gPSByZXQ7XG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjYWNoZVNldCA9IGZ1bmN0aW9uKHRoaXM6IGFueSwgdmFsdWU6IGFueSkge1xuICAgICAgbGV0IG1ldGEgPSBNZXRhLmZvcih0aGlzKTtcbiAgICAgIGxldCBzbG90cyA9IG1ldGEuZ2V0U2xvdHMoKTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSBzbG90c1thY2Nlc3Nvck5hbWVdID0gdmFsdWU7XG4gICAgfTtcbiAgfVxuXG4gIGlmICghc3VwZXJEZXNjIHx8ICd2YWx1ZScgaW4gc3VwZXJEZXNjKSB7XG4gICAgZGVzYy5nZXQgPSBjYWNoZUdldDtcbiAgICBkZXNjLnNldCA9IGNhY2hlU2V0O1xuICAgIHJldHVybiBkZXNjO1xuICB9XG5cbiAgZGVzYy5nZXQgPSBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICBsZXQgbGFzdFN1cGVyID0gdGhpcy5fc3VwZXI7XG4gICAgdGhpcy5fc3VwZXIgPSBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICAgIHJldHVybiAoc3VwZXJEZXNjIGFzIGFueSkuZ2V0LmNhbGwodGhpcyk7XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY2FjaGVHZXQuY2FsbCh0aGlzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fc3VwZXIgPSBsYXN0U3VwZXI7XG4gICAgfVxuICB9O1xuXG4gIGRlc2Muc2V0ID0gZnVuY3Rpb24odGhpczogYW55LCB2YWw6IGFueSkge1xuICAgIGxldCBsYXN0U3VwZXIgPSB0aGlzLl9zdXBlcjtcbiAgICB0aGlzLl9zdXBlciA9IGZ1bmN0aW9uKHRoaXM6IGFueSkge1xuICAgICAgcmV0dXJuIChzdXBlckRlc2MgYXMgYW55KS5zZXQuY2FsbCh0aGlzLCB2YWwpO1xuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGNhY2hlU2V0LmNhbGwodGhpcywgdmFsKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fc3VwZXIgPSBsYXN0U3VwZXI7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBkZXNjO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eURlc2NyaXB0b3Ioc3ViamVjdDogYW55LCBuYW1lOiBzdHJpbmcpIHtcbiAgbGV0IHBkID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzdWJqZWN0LCBuYW1lKTtcbiAgbGV0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHN1YmplY3QpO1xuICB3aGlsZSAodHlwZW9mIHBkID09PSAndW5kZWZpbmVkJyAmJiBwcm90byAhPT0gbnVsbCkge1xuICAgIHBkID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgbmFtZSk7XG4gICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICB9XG4gIHJldHVybiBwZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVkKGRlc2M6IENvbXB1dGVkRGVzY3JpcHRvcik6IENvbXB1dGVkQmx1ZXByaW50O1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVkKFxuICBnZXR0ZXI6IENvbXB1dGVkR2V0Q2FsbGJhY2sgfCBMZWdhY3lDb21wdXRlZEdldENhbGxiYWNrXG4pOiBDb21wdXRlZEJsdWVwcmludDtcbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlZCguLi5hcmdzOiBhbnlbXSk6IENvbXB1dGVkQmx1ZXByaW50O1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZWQoLi4uYXJnczogYW55W10pIHtcbiAgbGV0IGxhc3Q6IENvbXB1dGVkQXJndW1lbnQgPSBhcmdzLnBvcCgpO1xuICBsZXQgZGVwcyA9IGFyZ3M7XG5cbiAgaWYgKHR5cGVvZiBsYXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG5ldyBDb21wdXRlZEJsdWVwcmludCh7XG4gICAgICBnZXQ6IGxhc3QgYXMgQ29tcHV0ZWRHZXRDYWxsYmFjayB8IExlZ2FjeUNvbXB1dGVkR2V0Q2FsbGJhY2ssXG4gICAgfSkucHJvcGVydHkoLi4uZGVwcyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGxhc3QgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG5ldyBDb21wdXRlZEJsdWVwcmludChsYXN0IGFzIENvbXB1dGVkRGVzY3JpcHRvcikucHJvcGVydHkoLi4uZGVwcyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY29tcHV0ZWQgZXhwZWN0cyBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCBhcyBsYXN0IGFyZ3VtZW50Jyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9ic2VydmVyKC4uLl9hcmdzOiBhbnlbXSkge31cbiJdLCJzb3VyY2VSb290IjoiIn0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvY29tcHV0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLFNBQUEsMEJBQUEsRUFBQSxJQUFBLFFBQUEsMkJBQUE7QUFDQSxTQUFBLFdBQUEsUUFBQSxVQUFBO0FBQ0EsU0FBQSxTQUFBLEVBQUEsVUFBQSxRQUFBLFNBQUE7QUF5QkEsV0FBTSxpQkFBTjtBQUFBO0FBQUE7QUFBQTs7QUFLRSw2QkFBQSxRQUFBLEVBQTBDLElBQTFDLEVBQStEO0FBQUE7O0FBQUEsUUFBckIsSUFBcUI7QUFBckIsTUFBQSxJQUFxQixHQUEvRCxFQUErRDtBQUFBOztBQUM3RDtBQUhNLFVBQUEsUUFBQSxHQUFBLEVBQUE7QUFJTixVQUFBLFFBQUEsR0FBQSxRQUFBO0FBQ0EsVUFBQSxJQUFBLEdBQUEsSUFBQTtBQUg2RDtBQUk5RDs7QUFUSDs7QUFBQSxTQVdFLFVBWEYsR0FXRSxvQkFBVSxPQUFWLEVBQVUsR0FBVixFQUFVLFNBQVYsRUFBNkQ7QUFDM0QsSUFBQSxTQUFTLENBQVQsbUJBQUEsQ0FBQSxHQUFBLEVBQW1DLDBCQUEwQixDQUFBLEdBQUEsRUFBTSxLQUFuRSxJQUE2RCxDQUE3RDtBQUNBLElBQUEsU0FBUyxDQUFULG1CQUFBLENBQUEsR0FBQSxFQUFtQyxLQUFuQyxRQUFBO0FBQ0EsSUFBQSxTQUFTLENBQVQsVUFBQSxDQUFBLEdBQUE7QUFDQSxXQUFPLElBQUEsUUFBQSxDQUFhLEtBQXBCLFFBQU8sQ0FBUDtBQUNELEdBaEJIOztBQUFBLFNBa0JFLFFBbEJGLEdBa0JFLG9CQUEyQjtBQUFBLHNDQUFuQixLQUFtQjtBQUFuQixNQUFBLEtBQW1CO0FBQUE7O0FBQ3pCLFNBQUEsSUFBQSxHQUFZLEtBQUssQ0FBTCxHQUFBLENBQVUsVUFBQSxDQUFDO0FBQUEsYUFBSSxDQUFDLENBQUQsS0FBQSxDQUEzQixHQUEyQixDQUFKO0FBQUEsS0FBWCxDQUFaO0FBQ0EsV0FBQSxJ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LEVBQXlEO0FBQ3ZELE1BQUksRUFBRSxHQUFHLE1BQU0sQ0FBTix3QkFBQSxDQUFBLE9BQUEsRUFBVCxJQUFTLENBQVQ7QUFDQSxNQUFJLEtBQUssR0FBRyxNQUFNLENBQU4sY0FBQSxDQUFaLE9BQVksQ0FBWjs7QUFDQSxTQUFPLE9BQUEsRUFBQSxLQUFBLFdBQUEsSUFBNkIsS0FBSyxLQUF6QyxJQUFBLEVBQW9EO0FBQ2xELElBQUEsRUFBRSxHQUFHLE1BQU0sQ0FBTix3QkFBQSxDQUFBLEtBQUEsRUFBTCxJQUFLLENBQUw7QUFDQSxJQUFBLEtBQUssR0FBRyxNQUFNLENBQU4sY0FBQSxDQUFSLEtBQVEsQ0FBUjtBQUNEOztBQUNELFNBQUEsRUFBQTtBQUNEOztBQVFELE9BQU0sU0FBQSxRQUFBLEdBQWlDO0FBQUEscUNBQWpDLElBQWlDO0FBQWpDLElBQUEsSUFBaUM7QUFBQTs7QUFDckMsTUFBSSxJQUFJLEdBQXFCLElBQUksQ0FBakMsR0FBNkIsRUFBN0I7QUFDQSxNQUFJLElBQUksR0FBUixJQUFBOztBQUVBLE1BQUksT0FBQSxJQUFBLEtBQUosVUFBQSxFQUFnQztBQUFBOztBQUM5QixXQUFPLFlBQUEsaUJBQUEsQ0FBc0I7QUFDM0IsTUFBQSxHQUFHLEVBQUU7QUFEc0IsS0FBdEIsR0FBQSxRQUFBLGFBQVAsSUFBTyxDQUFQO0FBREYsR0FBQSxNQUlPLElBQUksT0FBQSxJQUFBLEtBQUosUUFBQSxFQUE4QjtBQUFBOztBQUNuQyxXQUFPLGFBQUEsaUJBQUEsQ0FBQSxJQUFBLEdBQUEsUUFBQSxjQUFQLElBQU8sQ0FBUDtBQURLLEdBQUEsTUFFQTtBQUNMLFVBQU0sSUFBQSxTQUFBLENBQU4sMkRBQU0sQ0FBTjtBQUNEO0FBQ0Y7QUFFRCxPQUFNLFNBQUEsUUFBQSxHQUFrQyxDQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcHV0ZWRSZWZlcmVuY2VCbHVlcHJpbnQsIE1ldGEgfSBmcm9tICdAZ2xpbW1lci9vYmplY3QtcmVmZXJlbmNlJztcbmltcG9ydCB7IEVNUFRZX0NBQ0hFLCBDbGFzc01ldGEgfSBmcm9tICcuL29iamVjdCc7XG5pbXBvcnQgeyBEZXNjcmlwdG9yLCBCbHVlcHJpbnQsIERFU0NSSVBUT1IgfSBmcm9tICcuL21peGluJztcblxuZXhwb3J0IGludGVyZmFjZSBDb21wdXRlZEdldENhbGxiYWNrIHtcbiAgKCk6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMZWdhY3lDb21wdXRlZEdldENhbGxiYWNrIHtcbiAgKGtleTogc3RyaW5nKTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXB1dGVkU2V0Q2FsbGJhY2sge1xuICAodmFsOiBhbnkpOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGVnYWN5Q29tcHV0ZWRTZXRDYWxsYmFjayB7XG4gIChrZXk6IHN0cmluZywgdmFsOiBhbnkpOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcHV0ZWREZXNjcmlwdG9yIHtcbiAgZ2V0PzogQ29tcHV0ZWRHZXRDYWxsYmFjayB8IExlZ2FjeUNvbXB1dGVkR2V0Q2FsbGJhY2s7XG4gIHNldD86IENvbXB1dGVkU2V0Q2FsbGJhY2sgfCBMZWdhY3lDb21wdXRlZFNldENhbGxiYWNrO1xufVxuXG50eXBlIENvbXB1dGVkQXJndW1lbnQgPSBDb21wdXRlZEdldENhbGxiYWNrIHwgQ29tcHV0ZWREZXNjcmlwdG9yO1xuXG5leHBvcnQgY2xhc3MgQ29tcHV0ZWRCbHVlcHJpbnQgZXh0ZW5kcyBCbHVlcHJpbnQge1xuICBwcml2YXRlIGFjY2Vzc29yOiBDb21wdXRlZERlc2NyaXB0b3I7XG4gIHByaXZhdGUgZGVwczogc3RyaW5nW11bXTtcbiAgcHJpdmF0ZSBtZXRhZGF0YTogT2JqZWN0ID0ge307XG5cbiAgY29uc3RydWN0b3IoYWNjZXNzb3I6IENvbXB1dGVkRGVzY3JpcHRvciwgZGVwczogc3RyaW5nW11bXSA9IFtdKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFjY2Vzc29yID0gYWNjZXNzb3I7XG4gICAgdGhpcy5kZXBzID0gZGVwcztcbiAgfVxuXG4gIGRlc2NyaXB0b3IoX3RhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgY2xhc3NNZXRhOiBDbGFzc01ldGEpOiBEZXNjcmlwdG9yIHtcbiAgICBjbGFzc01ldGEuYWRkUmVmZXJlbmNlVHlwZUZvcihrZXksIENvbXB1dGVkUmVmZXJlbmNlQmx1ZXByaW50KGtleSwgdGhpcy5kZXBzKSk7XG4gICAgY2xhc3NNZXRhLmFkZFByb3BlcnR5TWV0YWRhdGEoa2V5LCB0aGlzLm1ldGFkYXRhKTtcbiAgICBjbGFzc01ldGEuYWRkU2xvdEZvcihrZXkpO1xuICAgIHJldHVybiBuZXcgQ29tcHV0ZWQodGhpcy5hY2Nlc3Nvcik7XG4gIH1cblxuICBwcm9wZXJ0eSguLi5wYXRoczogc3RyaW5nW10pIHtcbiAgICB0aGlzLmRlcHMgPSBwYXRocy5tYXAoZCA9PiBkLnNwbGl0KCcuJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbWV0YShvYmplY3Q6IE9iamVjdCkge1xuICAgIHRoaXMubWV0YWRhdGEgPSBvYmplY3Q7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB2b2xhdGlsZSgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5jbGFzcyBDb21wdXRlZCBpbXBsZW1lbnRzIERlc2NyaXB0b3Ige1xuICBlbnVtZXJhYmxlOiBib29sZWFuO1xuICBjb25maWd1cmFibGU6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBhY2Nlc3NvcjogQ29tcHV0ZWREZXNjcmlwdG9yO1xuICBbREVTQ1JJUFRPUl0gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKGFjY2Vzc29yOiBDb21wdXRlZERlc2NyaXB0b3IpIHtcbiAgICB0aGlzLmFjY2Vzc29yID0gYWNjZXNzb3I7XG4gICAgdGhpcy5lbnVtZXJhYmxlID0gZmFsc2U7XG4gICAgdGhpcy5jb25maWd1cmFibGUgPSBmYWxzZTtcbiAgfVxuXG4gIGRlZmluZShwcm90b3R5cGU6IE9iamVjdCwga2V5OiBzdHJpbmcsIGhvbWU6IE9iamVjdCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90b3R5cGUsIGtleSwgd3JhcEFjY2Vzc29yKGhvbWUsIGtleSwgdGhpcy5hY2Nlc3NvcikpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdyYXBBY2Nlc3NvcihcbiAgaG9tZTogT2JqZWN0LFxuICBhY2Nlc3Nvck5hbWU6IHN0cmluZyxcbiAgX2Rlc2M6IENvbXB1dGVkRGVzY3JpcHRvclxuKTogUHJvcGVydHlEZXNjcmlwdG9yIHtcbiAgbGV0IHN1cGVyRGVzYyA9IGdldFByb3BlcnR5RGVzY3JpcHRvcihob21lLCBhY2Nlc3Nvck5hbWUpO1xuXG4gIGxldCBvcmlnaW5hbEdldDogQ29tcHV0ZWRHZXRDYWxsYmFjaztcbiAgbGV0IG9yaWdpbmFsU2V0OiBDb21wdXRlZFNldENhbGxiYWNrO1xuXG4gIGxldCBkZXNjOiBQcm9wZXJ0eURlc2NyaXB0b3IgPSB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gIH07XG5cbiAgbGV0IGdldCA9IF9kZXNjLmdldDtcblxuICBpZiAoZ2V0ICYmIGdldC5sZW5ndGggPiAwKSB7XG4gICAgb3JpZ2luYWxHZXQgPSBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICAgIHJldHVybiAoZ2V0IGFzIGFueSkuY2FsbCh0aGlzLCBhY2Nlc3Nvck5hbWUpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgb3JpZ2luYWxHZXQgPSBfZGVzYy5nZXQgYXMgQ29tcHV0ZWRHZXRDYWxsYmFjaztcbiAgfVxuXG4gIGxldCBzZXQgPSBfZGVzYy5zZXQ7XG5cbiAgaWYgKHNldCAmJiBzZXQubGVuZ3RoID4gMSkge1xuICAgIG9yaWdpbmFsU2V0ID0gZnVuY3Rpb24odGhpczogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgICByZXR1cm4gKHNldCBhcyBhbnkpLmNhbGwodGhpcywgYWNjZXNzb3JOYW1lLCB2YWx1ZSk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBvcmlnaW5hbFNldCA9IF9kZXNjLnNldCBhcyBDb21wdXRlZEdldENhbGxiYWNrO1xuICB9XG5cbiAgbGV0IGNhY2hlR2V0ID0gZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgaWYgKE1ldGEuZXhpc3RzKHRoaXMpKSB7XG4gICAgICBsZXQgc2xvdCA9IE1ldGEuZm9yKHRoaXMpLmdldFNsb3RzKClbYWNjZXNzb3JOYW1lXTtcbiAgICAgIGlmIChzbG90ICE9PSBFTVBUWV9DQUNIRSkgcmV0dXJuIHNsb3Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9yaWdpbmFsR2V0LmNhbGwodGhpcyk7XG4gIH07XG5cbiAgbGV0IGNhY2hlU2V0OiAodmFsdWU6IGFueSkgPT4gdm9pZDtcblxuICBpZiAob3JpZ2luYWxTZXQpIHtcbiAgICBjYWNoZVNldCA9IGZ1bmN0aW9uKHRoaXM6IGFueSwgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgbGV0IG1ldGEgPSBNZXRhLmZvcih0aGlzKTtcbiAgICAgIGxldCBzbG90cyA9IG1ldGEuZ2V0U2xvdHMoKTtcblxuICAgICAgbGV0IHJldCA9IG9yaWdpbmFsU2V0LmNhbGwodGhpcywgdmFsdWUpO1xuXG4gICAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2xvdHNbYWNjZXNzb3JOYW1lXSA9IHJldDtcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGNhY2hlU2V0ID0gZnVuY3Rpb24odGhpczogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgICBsZXQgbWV0YSA9IE1ldGEuZm9yKHRoaXMpO1xuICAgICAgbGV0IHNsb3RzID0gbWV0YS5nZXRTbG90cygpO1xuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHNsb3RzW2FjY2Vzc29yTmFtZV0gPSB2YWx1ZTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFzdXBlckRlc2MgfHwgJ3ZhbHVlJyBpbiBzdXBlckRlc2MpIHtcbiAgICBkZXNjLmdldCA9IGNhY2hlR2V0O1xuICAgIGRlc2Muc2V0ID0gY2FjaGVTZXQ7XG4gICAgcmV0dXJuIGRlc2M7XG4gIH1cblxuICBkZXNjLmdldCA9IGZ1bmN0aW9uKHRoaXM6IGFueSkge1xuICAgIGxldCBsYXN0U3VwZXIgPSB0aGlzLl9zdXBlcjtcbiAgICB0aGlzLl9zdXBlciA9IGZ1bmN0aW9uKHRoaXM6IGFueSkge1xuICAgICAgcmV0dXJuIChzdXBlckRlc2MgYXMgYW55KS5nZXQuY2FsbCh0aGlzKTtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjYWNoZUdldC5jYWxsKHRoaXMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9zdXBlciA9IGxhc3RTdXBlcjtcbiAgICB9XG4gIH07XG5cbiAgZGVzYy5zZXQgPSBmdW5jdGlvbih0aGlzOiBhbnksIHZhbDogYW55KSB7XG4gICAgbGV0IGxhc3RTdXBlciA9IHRoaXMuX3N1cGVyO1xuICAgIHRoaXMuX3N1cGVyID0gZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgICByZXR1cm4gKHN1cGVyRGVzYyBhcyBhbnkpLnNldC5jYWxsKHRoaXMsIHZhbCk7XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY2FjaGVTZXQuY2FsbCh0aGlzLCB2YWwpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9zdXBlciA9IGxhc3RTdXBlcjtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGRlc2M7XG59XG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5RGVzY3JpcHRvcihzdWJqZWN0OiBhbnksIG5hbWU6IHN0cmluZykge1xuICBsZXQgcGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHN1YmplY3QsIG5hbWUpO1xuICBsZXQgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3ViamVjdCk7XG4gIHdoaWxlICh0eXBlb2YgcGQgPT09ICd1bmRlZmluZWQnICYmIHByb3RvICE9PSBudWxsKSB7XG4gICAgcGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBuYW1lKTtcbiAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG4gIH1cbiAgcmV0dXJuIHBkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZWQoZGVzYzogQ29tcHV0ZWREZXNjcmlwdG9yKTogQ29tcHV0ZWRCbHVlcHJpbnQ7XG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZWQoXG4gIGdldHRlcjogQ29tcHV0ZWRHZXRDYWxsYmFjayB8IExlZ2FjeUNvbXB1dGVkR2V0Q2FsbGJhY2tcbik6IENvbXB1dGVkQmx1ZXByaW50O1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVkKC4uLmFyZ3M6IGFueVtdKTogQ29tcHV0ZWRCbHVlcHJpbnQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlZCguLi5hcmdzOiBhbnlbXSkge1xuICBsZXQgbGFzdDogQ29tcHV0ZWRBcmd1bWVudCA9IGFyZ3MucG9wKCk7XG4gIGxldCBkZXBzID0gYXJncztcblxuICBpZiAodHlwZW9mIGxhc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbmV3IENvbXB1dGVkQmx1ZXByaW50KHtcbiAgICAgIGdldDogbGFzdCBhcyBDb21wdXRlZEdldENhbGxiYWNrIHwgTGVnYWN5Q29tcHV0ZWRHZXRDYWxsYmFjayxcbiAgICB9KS5wcm9wZXJ0eSguLi5kZXBzKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgbGFzdCA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbmV3IENvbXB1dGVkQmx1ZXByaW50KGxhc3QgYXMgQ29tcHV0ZWREZXNjcmlwdG9yKS5wcm9wZXJ0eSguLi5kZXBzKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjb21wdXRlZCBleHBlY3RzIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0IGFzIGxhc3QgYXJndW1lbnQnKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2ZXIoLi4uX2FyZ3M6IGFueVtdKSB7fVxuIl0sInNvdXJjZVJvb3QiOiIifQ==

@@ -1,98 +0,106 @@

function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }
import { Blueprint, Descriptor } from './mixin';
import { ComputedBlueprint } from './computed';
var AliasMethodDescriptor = function (_Descriptor) {
_inherits(AliasMethodDescriptor, _Descriptor);
var AliasMethodDescriptor =
/*#__PURE__*/
function (_Descriptor) {
_inheritsLoose(AliasMethodDescriptor, _Descriptor);
function AliasMethodDescriptor(name) {
_classCallCheck(this, AliasMethodDescriptor);
function AliasMethodDescriptor(name) {
var _this;
var _this = _possibleConstructorReturn(this, _Descriptor.call(this));
_this = _Descriptor.call(this) || this;
_this.name = name;
return _this;
}
_this.name = name;
return _this;
}
var _proto = AliasMethodDescriptor.prototype;
AliasMethodDescriptor.prototype.define = function define(target, key, _home) {
var name = this.name;
Object.defineProperty(target, key, {
enumerable: true,
configurable: true,
get: function get() {
return this[name];
}
});
};
_proto.define = function define(target, key, _home) {
var name = this.name;
Object.defineProperty(target, key, {
enumerable: true,
configurable: true,
get: function get() {
return this[name];
}
});
};
return AliasMethodDescriptor;
return AliasMethodDescriptor;
}(Descriptor);
var AliasMethodBlueprint = function (_Blueprint) {
_inherits(AliasMethodBlueprint, _Blueprint);
var AliasMethodBlueprint =
/*#__PURE__*/
function (_Blueprint) {
_inheritsLoose(AliasMethodBlueprint, _Blueprint);
function AliasMethodBlueprint(name) {
_classCallCheck(this, AliasMethodBlueprint);
function AliasMethodBlueprint(name) {
var _this2;
var _this2 = _possibleConstructorReturn(this, _Blueprint.call(this));
_this2 = _Blueprint.call(this) || this;
_this2.name = name;
return _this2;
}
_this2.name = name;
return _this2;
}
var _proto2 = AliasMethodBlueprint.prototype;
AliasMethodBlueprint.prototype.descriptor = function descriptor(_target, _key, _meta) {
return new AliasMethodDescriptor(this.name);
};
_proto2.descriptor = function descriptor(_target, _key, _meta) {
return new AliasMethodDescriptor(this.name);
};
return AliasMethodBlueprint;
return AliasMethodBlueprint;
}(Blueprint);
export function aliasMethod(name) {
return new AliasMethodBlueprint(name);
return new AliasMethodBlueprint(name);
}
var AliasBlueprint = function (_ComputedBlueprint) {
_inherits(AliasBlueprint, _ComputedBlueprint);
var AliasBlueprint =
/*#__PURE__*/
function (_ComputedBlueprint) {
_inheritsLoose(AliasBlueprint, _ComputedBlueprint);
function AliasBlueprint(name) {
_classCallCheck(this, AliasBlueprint);
function AliasBlueprint(name) {
var _this3;
var parent = name.slice(0, -1);
var last = name[name.length - 1];
var get = function get() {
return name.reduce(function (obj, n) {
return obj[n];
}, this);
};
var set = function set(value) {
var p = parent.reduce(function (obj, n) {
return obj[n];
}, this);
p[last] = value;
};
var parent = name.slice(0, -1);
var last = name[name.length - 1];
var _this3 = _possibleConstructorReturn(this, _ComputedBlueprint.call(this, { get: get, set: set }, [name]));
var get = function get() {
return name.reduce(function (obj, n) {
return obj[n];
}, this);
};
_this3.name = name;
return _this3;
}
AliasBlueprint.prototype.descriptor = function descriptor(target, key, meta) {
if (this.name[0] === key) throw new Error('Setting alias \'' + key + '\' on self');
return _ComputedBlueprint.prototype.descriptor.call(this, target, key, meta);
var set = function set(value) {
var p = parent.reduce(function (obj, n) {
return obj[n];
}, this);
p[last] = value;
};
return AliasBlueprint;
_this3 = _ComputedBlueprint.call(this, {
get: get,
set: set
}, [name]) || this;
_this3.name = name;
return _this3;
}
var _proto3 = AliasBlueprint.prototype;
_proto3.descriptor = function descriptor(target, key, meta) {
if (this.name[0] === key) throw new Error("Setting alias '" + key + "' on self");
return _ComputedBlueprint.prototype.descriptor.call(this, target, key, meta);
};
return AliasBlueprint;
}(ComputedBlueprint);
export function alias(name) {
return new AliasBlueprint(name.split('.'));
return new AliasBlueprint(name.split('.'));
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvZGVzY3JpcHRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxTQUFBLFNBQUEsRUFBQSxVQUFBLFFBQUEsU0FBQTtBQUVBLFNBQUEsaUJBQUEsUUFBQSxZQUFBOztJQUdBLHFCOzs7QUFHRSxtQ0FBQSxJQUFBLEVBQXdCO0FBQUE7O0FBQUEscURBQ3RCLHNCQURzQjs7QUFFdEIsY0FBQSxJQUFBLEdBQUEsSUFBQTtBQUZzQjtBQUd2Qjs7b0NBRUQsTSxtQkFBQSxNLEVBQUEsRyxFQUFBLEssRUFBK0M7QUFDN0MsWUFBSSxPQUFPLEtBQVgsSUFBQTtBQUVBLGVBQUEsY0FBQSxDQUFBLE1BQUEsRUFBQSxHQUFBLEVBQW1DO0FBQ2pDLHdCQURpQyxJQUFBO0FBRWpDLDBCQUZpQyxJQUFBO0FBR2pDLGVBSGlDLGlCQUc5QjtBQUNELHVCQUFPLEtBQVAsSUFBTyxDQUFQO0FBQ0Q7QUFMZ0MsU0FBbkM7QUFPRCxLOzs7RUFsQkgsVTs7SUFxQkEsb0I7OztBQUdFLGtDQUFBLElBQUEsRUFBd0I7QUFBQTs7QUFBQSxzREFDdEIscUJBRHNCOztBQUV0QixlQUFBLElBQUEsR0FBQSxJQUFBO0FBRnNCO0FBR3ZCOzttQ0FFRCxVLHVCQUFBLE8sRUFBQSxJLEVBQUEsSyxFQUEwRDtBQUN4RCxlQUFPLElBQUEscUJBQUEsQ0FBMEIsS0FBakMsSUFBTyxDQUFQO0FBQ0QsSzs7O0VBVkgsUzs7QUFhQSxPQUFNLFNBQUEsV0FBQSxDQUFBLElBQUEsRUFBa0M7QUFDdEMsV0FBTyxJQUFBLG9CQUFBLENBQVAsSUFBTyxDQUFQO0FBQ0Q7O0lBRUQsYzs7O0FBR0UsNEJBQUEsSUFBQSxFQUEwQjtBQUFBOztBQUN4QixZQUFJLFNBQVMsS0FBQSxLQUFBLENBQUEsQ0FBQSxFQUFjLENBQTNCLENBQWEsQ0FBYjtBQUNBLFlBQUksT0FBTyxLQUFLLEtBQUEsTUFBQSxHQUFoQixDQUFXLENBQVg7QUFFQSxZQUFJLE1BQU0sU0FBTixHQUFNLEdBQUE7QUFDUixtQkFBTyxLQUFBLE1BQUEsQ0FBWSxVQUFBLEdBQUEsRUFBQSxDQUFBO0FBQUEsdUJBQVksSUFBeEIsQ0FBd0IsQ0FBWjtBQUFBLGFBQVosRUFBUCxJQUFPLENBQVA7QUFERixTQUFBO0FBSUEsWUFBSSxNQUFNLFNBQU4sR0FBTSxDQUFBLEtBQUEsRUFBOEI7QUFDdEMsZ0JBQUksSUFBSSxPQUFBLE1BQUEsQ0FBYyxVQUFBLEdBQUEsRUFBQSxDQUFBO0FBQUEsdUJBQVksSUFBMUIsQ0FBMEIsQ0FBWjtBQUFBLGFBQWQsRUFBUixJQUFRLENBQVI7QUFDQSxjQUFBLElBQUEsSUFBQSxLQUFBO0FBRkYsU0FBQTs7QUFSd0Isc0RBYXhCLDhCQUFNLEVBQUEsUUFBQSxFQUFOLFFBQU0sRUFBTixFQUFvQixDQUFwQixJQUFvQixDQUFwQixDQWJ3Qjs7QUFjeEIsZUFBQSxJQUFBLEdBQUEsSUFBQTtBQWR3QjtBQWV6Qjs7NkJBRUQsVSx1QkFBQSxNLEVBQUEsRyxFQUFBLEksRUFBdUQ7QUFDckQsWUFBSSxLQUFBLElBQUEsQ0FBQSxDQUFBLE1BQUosR0FBQSxFQUEwQixNQUFNLElBQUEsS0FBQSxzQkFBTixHQUFNLGdCQUFOO0FBQzFCLGVBQU8sNkJBQUEsVUFBQSxZQUFBLE1BQUEsRUFBQSxHQUFBLEVBQVAsSUFBTyxDQUFQO0FBQ0QsSzs7O0VBdkJILGlCOztBQTBCQSxPQUFNLFNBQUEsS0FBQSxDQUFBLElBQUEsRUFBNEI7QUFDaEMsV0FBTyxJQUFBLGNBQUEsQ0FBbUIsS0FBQSxLQUFBLENBQTFCLEdBQTBCLENBQW5CLENBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJsdWVwcmludCwgRGVzY3JpcHRvciB9IGZyb20gJy4vbWl4aW4nO1xuaW1wb3J0IHsgQ2xhc3NNZXRhIH0gZnJvbSAnLi9vYmplY3QnO1xuaW1wb3J0IHsgQ29tcHV0ZWRCbHVlcHJpbnQgfSBmcm9tICcuL2NvbXB1dGVkJztcbmltcG9ydCB7IERpY3QgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcblxuY2xhc3MgQWxpYXNNZXRob2REZXNjcmlwdG9yIGV4dGVuZHMgRGVzY3JpcHRvciB7XG4gIHByaXZhdGUgbmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIGRlZmluZSh0YXJnZXQ6IERpY3QsIGtleTogc3RyaW5nLCBfaG9tZTogT2JqZWN0KSB7XG4gICAgbGV0IG5hbWUgPSB0aGlzLm5hbWUgYXMgc3RyaW5nO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0KHRoaXM6IHR5cGVvZiB0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbbmFtZV07XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbmNsYXNzIEFsaWFzTWV0aG9kQmx1ZXByaW50IGV4dGVuZHMgQmx1ZXByaW50IHtcbiAgcHJpdmF0ZSBuYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgZGVzY3JpcHRvcihfdGFyZ2V0OiBPYmplY3QsIF9rZXk6IHN0cmluZywgX21ldGE6IENsYXNzTWV0YSk6IERlc2NyaXB0b3Ige1xuICAgIHJldHVybiBuZXcgQWxpYXNNZXRob2REZXNjcmlwdG9yKHRoaXMubmFtZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsaWFzTWV0aG9kKG5hbWU6IHN0cmluZyk6IEJsdWVwcmludCB7XG4gIHJldHVybiBuZXcgQWxpYXNNZXRob2RCbHVlcHJpbnQobmFtZSk7XG59XG5cbmNsYXNzIEFsaWFzQmx1ZXByaW50IGV4dGVuZHMgQ29tcHV0ZWRCbHVlcHJpbnQge1xuICBwcml2YXRlIG5hbWU6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZ1tdKSB7XG4gICAgbGV0IHBhcmVudCA9IG5hbWUuc2xpY2UoMCwgLTEpO1xuICAgIGxldCBsYXN0ID0gbmFtZVtuYW1lLmxlbmd0aCAtIDFdO1xuXG4gICAgbGV0IGdldCA9IGZ1bmN0aW9uKHRoaXM6IGFueSkge1xuICAgICAgcmV0dXJuIG5hbWUucmVkdWNlKChvYmosIG4pID0+IG9ialtuXSwgdGhpcyk7XG4gICAgfTtcblxuICAgIGxldCBzZXQgPSBmdW5jdGlvbih0aGlzOiBhbnksIHZhbHVlOiBhbnkpIHtcbiAgICAgIGxldCBwID0gcGFyZW50LnJlZHVjZSgob2JqLCBuKSA9PiBvYmpbbl0sIHRoaXMpO1xuICAgICAgcFtsYXN0XSA9IHZhbHVlO1xuICAgIH07XG5cbiAgICBzdXBlcih7IGdldCwgc2V0IH0sIFtuYW1lXSk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIGRlc2NyaXB0b3IodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nLCBtZXRhOiBDbGFzc01ldGEpOiBEZXNjcmlwdG9yIHtcbiAgICBpZiAodGhpcy5uYW1lWzBdID09PSBrZXkpIHRocm93IG5ldyBFcnJvcihgU2V0dGluZyBhbGlhcyAnJHtrZXl9JyBvbiBzZWxmYCk7XG4gICAgcmV0dXJuIHN1cGVyLmRlc2NyaXB0b3IodGFyZ2V0LCBrZXksIG1ldGEpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGlhcyhuYW1lOiBzdHJpbmcpOiBCbHVlcHJpbnQge1xuICByZXR1cm4gbmV3IEFsaWFzQmx1ZXByaW50KG5hbWUuc3BsaXQoJy4nKSk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvZGVzY3JpcHRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxTQUFBLFNBQUEsRUFBQSxVQUFBLFFBQUEsU0FBQTtBQUVBLFNBQUEsaUJBQUEsUUFBQSxZQUFBOztJQUdBLHFCOzs7OztBQUdFLGlDQUFBLElBQUEsRUFBd0I7QUFBQTs7QUFDdEI7QUFDQSxVQUFBLElBQUEsR0FBQSxJQUFBO0FBRnNCO0FBR3ZCOzs7O1NBRUQsTSxHQUFBLGdCQUFNLE1BQU4sRUFBTSxHQUFOLEVBQU0sS0FBTixFQUErQztBQUM3QyxRQUFJLElBQUksR0FBRyxLQUFYLElBQUE7QUFFQSxJQUFBLE1BQU0sQ0FBTixjQUFBLENBQUEsTUFBQSxFQUFBLEdBQUEsRUFBbUM7QUFDakMsTUFBQSxVQUFVLEVBRHVCLElBQUE7QUFFakMsTUFBQSxZQUFZLEVBRnFCLElBQUE7QUFHakMsTUFBQSxHQUhpQyxpQkFHOUI7QUFDRCxlQUFPLEtBQVAsSUFBTyxDQUFQO0FBQ0Q7QUFMZ0MsS0FBbkM7QUFPRCxHOzs7RUFsQkgsVTs7SUFxQkEsb0I7Ozs7O0FBR0UsZ0NBQUEsSUFBQSxFQUF3QjtBQUFBOztBQUN0QjtBQUNBLFdBQUEsSUFBQSxHQUFBLElBQUE7QUFGc0I7QUFHdkI7Ozs7VUFFRCxVLEdBQUEsb0JBQVUsT0FBVixFQUFVLElBQVYsRUFBVSxLQUFWLEVBQTBEO0FBQ3hELFdBQU8sSUFBQSxxQkFBQSxDQUEwQixLQUFqQyxJQUFPLENBQVA7QUFDRCxHOzs7RUFWSCxTOztBQWFBLE9BQU0sU0FBQSxXQUFBLENBQUEsSUFBQSxFQUFrQztBQUN0QyxTQUFPLElBQUEsb0JBQUEsQ0FBUCxJQUFPLENBQVA7QUFDRDs7SUFFRCxjOzs7OztBQUdFLDBCQUFBLElBQUEsRUFBMEI7QUFBQTs7QUFDeEIsUUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFKLEtBQUEsQ0FBQSxDQUFBLEVBQWMsQ0FBM0IsQ0FBYSxDQUFiO0FBQ0EsUUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBSixNQUFBLEdBQWhCLENBQWUsQ0FBZjs7QUFFQSxRQUFJLEdBQUcsR0FBRyxTQUFOLEdBQU0sR0FBQTtBQUNSLGFBQU8sSUFBSSxDQUFKLE1BQUEsQ0FBWSxVQUFBLEdBQUEsRUFBQSxDQUFBO0FBQUEsZUFBWSxHQUFHLENBQTNCLENBQTJCLENBQWY7QUFBQSxPQUFaLEVBQVAsSUFBTyxDQUFQO0FBREYsS0FBQTs7QUFJQSxRQUFJLEdBQUcsR0FBRyxTQUFOLEdBQU0sQ0FBQSxLQUFBLEVBQThCO0FBQ3RDLFVBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBTixNQUFBLENBQWMsVUFBQSxHQUFBLEVBQUEsQ0FBQTtBQUFBLGVBQVksR0FBRyxDQUE3QixDQUE2QixDQUFmO0FBQUEsT0FBZCxFQUFSLElBQVEsQ0FBUjtBQUNBLE1BQUEsQ0FBQyxDQUFELElBQUMsQ0FBRCxHQUFBLEtBQUE7QUFGRixLQUFBOztBQUtBLDJDQUFNO0FBQUUsTUFBQSxHQUFGLEVBQUUsR0FBRjtBQUFPLE1BQUEsR0FBQSxFQUFBO0FBQVAsS0FBTixFQUFvQixDQUFwQixJQUFvQixDQUFwQjtBQUNBLFdBQUEsSUFBQSxHQUFBLElBQUE7QUFkd0I7QUFlekI7Ozs7VUFFRCxVLEdBQUEsb0JBQVUsTUFBVixFQUFVLEdBQVYsRUFBVSxJQUFWLEVBQXVEO0FBQ3JELFFBQUksS0FBQSxJQUFBLENBQUEsQ0FBQSxNQUFKLEdBQUEsRUFBMEIsTUFBTSxJQUFBLEtBQUEscUJBQU4sR0FBTSxlQUFOO0FBQzFCLHdDQUFPLFVBQVAsWUFBTyxNQUFQLEVBQU8sR0FBUCxFQUFBLElBQUE7QUFDRCxHOzs7RUF2QkgsaUI7O0FBMEJBLE9BQU0sU0FBQSxLQUFBLENBQUEsSUFBQSxFQUE0QjtBQUNoQyxTQUFPLElBQUEsY0FBQSxDQUFtQixJQUFJLENBQUosS0FBQSxDQUExQixHQUEwQixDQUFuQixDQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCbHVlcHJpbnQsIERlc2NyaXB0b3IgfSBmcm9tICcuL21peGluJztcbmltcG9ydCB7IENsYXNzTWV0YSB9IGZyb20gJy4vb2JqZWN0JztcbmltcG9ydCB7IENvbXB1dGVkQmx1ZXByaW50IH0gZnJvbSAnLi9jb21wdXRlZCc7XG5pbXBvcnQgeyBEaWN0IH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5cbmNsYXNzIEFsaWFzTWV0aG9kRGVzY3JpcHRvciBleHRlbmRzIERlc2NyaXB0b3Ige1xuICBwcml2YXRlIG5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBkZWZpbmUodGFyZ2V0OiBEaWN0LCBrZXk6IHN0cmluZywgX2hvbWU6IE9iamVjdCkge1xuICAgIGxldCBuYW1lID0gdGhpcy5uYW1lIGFzIHN0cmluZztcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldCh0aGlzOiB0eXBlb2YgdGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzW25hbWVdO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5jbGFzcyBBbGlhc01ldGhvZEJsdWVwcmludCBleHRlbmRzIEJsdWVwcmludCB7XG4gIHByaXZhdGUgbmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIGRlc2NyaXB0b3IoX3RhcmdldDogT2JqZWN0LCBfa2V5OiBzdHJpbmcsIF9tZXRhOiBDbGFzc01ldGEpOiBEZXNjcmlwdG9yIHtcbiAgICByZXR1cm4gbmV3IEFsaWFzTWV0aG9kRGVzY3JpcHRvcih0aGlzLm5hbWUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGlhc01ldGhvZChuYW1lOiBzdHJpbmcpOiBCbHVlcHJpbnQge1xuICByZXR1cm4gbmV3IEFsaWFzTWV0aG9kQmx1ZXByaW50KG5hbWUpO1xufVxuXG5jbGFzcyBBbGlhc0JsdWVwcmludCBleHRlbmRzIENvbXB1dGVkQmx1ZXByaW50IHtcbiAgcHJpdmF0ZSBuYW1lOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmdbXSkge1xuICAgIGxldCBwYXJlbnQgPSBuYW1lLnNsaWNlKDAsIC0xKTtcbiAgICBsZXQgbGFzdCA9IG5hbWVbbmFtZS5sZW5ndGggLSAxXTtcblxuICAgIGxldCBnZXQgPSBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICAgIHJldHVybiBuYW1lLnJlZHVjZSgob2JqLCBuKSA9PiBvYmpbbl0sIHRoaXMpO1xuICAgIH07XG5cbiAgICBsZXQgc2V0ID0gZnVuY3Rpb24odGhpczogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgICBsZXQgcCA9IHBhcmVudC5yZWR1Y2UoKG9iaiwgbikgPT4gb2JqW25dLCB0aGlzKTtcbiAgICAgIHBbbGFzdF0gPSB2YWx1ZTtcbiAgICB9O1xuXG4gICAgc3VwZXIoeyBnZXQsIHNldCB9LCBbbmFtZV0pO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBkZXNjcmlwdG9yKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgbWV0YTogQ2xhc3NNZXRhKTogRGVzY3JpcHRvciB7XG4gICAgaWYgKHRoaXMubmFtZVswXSA9PT0ga2V5KSB0aHJvdyBuZXcgRXJyb3IoYFNldHRpbmcgYWxpYXMgJyR7a2V5fScgb24gc2VsZmApO1xuICAgIHJldHVybiBzdXBlci5kZXNjcmlwdG9yKHRhcmdldCwga2V5LCBtZXRhKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxpYXMobmFtZTogc3RyaW5nKTogQmx1ZXByaW50IHtcbiAgcmV0dXJuIG5ldyBBbGlhc0JsdWVwcmludChuYW1lLnNwbGl0KCcuJykpO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==

@@ -1,10 +0,5 @@

function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
var _a, _b;
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var _a, _b;
import { CLASS_META } from '@glimmer/object-reference';

@@ -15,394 +10,443 @@ import { dict, assign, symbol } from '@glimmer/util';

var isArray = Array.isArray;
export var DESCRIPTOR = symbol('DESCRIPTOR');
export var BLUEPRINT = symbol('BLUEPRINT');
export var Descriptor = function Descriptor() {
_classCallCheck(this, Descriptor);
this[_a] = true;
this[_a] = true;
};
_a = DESCRIPTOR;
export var Blueprint = function Blueprint() {
_classCallCheck(this, Blueprint);
this[_b] = true;
this[_b] = true;
};
_b = BLUEPRINT;
export var Mixin = function () {
function Mixin(extensions, mixins) {
var _dependencies;
export var Mixin =
/*#__PURE__*/
function () {
function Mixin(extensions, mixins) {
var _this$dependencies;
_classCallCheck(this, Mixin);
this.extensions = null; // assigned before used
this.extensions = null; // assigned before used
this.concatenatedProperties = [];
this.mergedProperties = [];
this.dependencies = [];
this.reopen(extensions);
(_dependencies = this.dependencies).push.apply(_dependencies, mixins);
this.concatenatedProperties = [];
this.mergedProperties = [];
this.dependencies = [];
this.reopen(extensions);
(_this$dependencies = this.dependencies).push.apply(_this$dependencies, mixins);
}
Mixin.create = function create() {
for (var _len = arguments.length, args = new Array(_len), _key2 = 0; _key2 < _len; _key2++) {
args[_key2] = arguments[_key2];
}
Mixin.create = function create() {
for (var _len = arguments.length, args = Array(_len), _key2 = 0; _key2 < _len; _key2++) {
args[_key2] = arguments[_key2];
}
var extensions = args[args.length - 1];
var extensions = args[args.length - 1];
if (args.length === 0) {
return new this({}, []);
} else if (extensions instanceof Mixin) {
return new this({}, args);
} else {
var deps = args.slice(0, -1).map(toMixin);
return new this(extensions, deps);
}
};
if (args.length === 0) {
return new this({}, []);
} else if (extensions instanceof Mixin) {
return new this({}, args);
} else {
var deps = args.slice(0, -1).map(toMixin);
return new this(extensions, deps);
}
};
Mixin.mixins = function mixins(obj) {
if (typeof obj !== 'object' || obj === null) return [];
var meta = ClassMeta.for(obj);
if (!meta) return [];
return meta.getAppliedMixins();
};
Mixin.mixins = function mixins(obj) {
if (typeof obj !== 'object' || obj === null) return [];
var meta = ClassMeta["for"](obj);
if (!meta) return [];
return meta.getAppliedMixins();
};
Mixin.prototype.detect = function detect(obj) {
if (typeof obj !== 'object' || obj === null) return false;
if (obj instanceof Mixin) {
return obj.dependencies.indexOf(this) !== -1;
}
var meta = ClassMeta.for(obj);
return !!meta && meta.hasAppliedMixin(this);
};
var _proto = Mixin.prototype;
Mixin.prototype.reopen = function reopen(extensions) {
if (this.extensions) {
this.dependencies.push(toMixin(this.extensions));
}
if (typeof extensions === 'object' && 'concatenatedProperties' in extensions) {
var concat = void 0;
var rawConcat = extensions.concatenatedProperties;
if (isArray(rawConcat)) {
concat = rawConcat.slice();
} else if (rawConcat === null || rawConcat === undefined) {
concat = [];
} else {
concat = [rawConcat];
}
delete extensions.concatenatedProperties;
this.concatenatedProperties = concat;
}
if (typeof extensions === 'object' && 'mergedProperties' in extensions) {
var merged = void 0;
var rawMerged = extensions.mergedProperties;
if (isArray(rawMerged)) {
merged = rawMerged.slice();
} else if (rawMerged === null || rawMerged === undefined) {
merged = [];
} else {
merged = [rawMerged];
}
delete extensions.mergedProperties;
this.mergedProperties = merged;
}
var normalized = Object.keys(extensions).reduce(function (obj, key) {
var value = extensions[key];
switch (typeof value) {
case 'function':
obj[key] = new MethodBlueprint({ value: value });
break;
case 'object':
if (value && BLUEPRINT in value) {
obj[key] = value;
break;
}
/* falls through */
default:
obj[key] = new DataBlueprint({ value: value });
}
return obj;
}, dict());
this.extensions = dict();
assign(this.extensions, turbocharge(normalized));
};
_proto.detect = function detect(obj) {
if (typeof obj !== 'object' || obj === null) return false;
Mixin.prototype.apply = function apply(target) {
var meta = target[CLASS_META] = target[CLASS_META] || new ClassMeta();
this.dependencies.forEach(function (m) {
return m.apply(target);
});
this.mergeProperties(target, target, meta);
meta.addMixin(this);
meta.seal();
meta.reseal(target);
return target;
};
if (obj instanceof Mixin) {
return obj.dependencies.indexOf(this) !== -1;
}
Mixin.prototype.extendPrototype = function extendPrototype(Original) {
Original.prototype = Object.create(Original.prototype);
this.dependencies.forEach(function (m) {
return m.extendPrototype(Original);
});
this.extendPrototypeOnto(Original, Original);
};
var meta = ClassMeta["for"](obj);
return !!meta && meta.hasAppliedMixin(this);
};
Mixin.prototype.extendPrototypeOnto = function extendPrototypeOnto(Subclass, Parent) {
this.dependencies.forEach(function (m) {
return m.extendPrototypeOnto(Subclass, Parent);
});
this.mergeProperties(Subclass.prototype, Parent.prototype, Subclass[CLASS_META]);
Subclass[CLASS_META].addMixin(this);
};
_proto.reopen = function reopen(extensions) {
if (this.extensions) {
this.dependencies.push(toMixin(this.extensions));
}
Mixin.prototype.extendStatic = function extendStatic(Target) {
this.dependencies.forEach(function (m) {
return m.extendStatic(Target);
});
this.mergeProperties(Target, Object.getPrototypeOf(Target), Target[CLASS_META][CLASS_META]);
Target[CLASS_META].addStaticMixin(this);
};
if (typeof extensions === 'object' && 'concatenatedProperties' in extensions) {
var concat;
var rawConcat = extensions.concatenatedProperties;
Mixin.prototype.mergeProperties = function mergeProperties(target, parent, meta) {
var _this = this;
if (isArray(rawConcat)) {
concat = rawConcat.slice();
} else if (rawConcat === null || rawConcat === undefined) {
concat = [];
} else {
concat = [rawConcat];
}
if (meta.hasAppliedMixin(this)) return;
meta.addAppliedMixin(this);
this.mergedProperties.forEach(function (k) {
return meta.addMergedProperty(k, parent[k]);
});
this.concatenatedProperties.forEach(function (k) {
return meta.addConcatenatedProperty(k, []);
});
new ValueDescriptor({ value: meta.getConcatenatedProperties() }).define(target, 'concatenatedProperties');
new ValueDescriptor({ value: meta.getMergedProperties() }).define(target, 'mergedProperties');
Object.keys(this.extensions).forEach(function (key) {
var extension = _this.extensions[key];
var desc = extension.descriptor(target, key, meta);
desc.define(target, key, parent);
});
new ValueDescriptor({ value: ROOT }).define(target, '_super');
};
delete extensions.concatenatedProperties;
this.concatenatedProperties = concat;
}
return Mixin;
if (typeof extensions === 'object' && 'mergedProperties' in extensions) {
var merged;
var rawMerged = extensions.mergedProperties;
if (isArray(rawMerged)) {
merged = rawMerged.slice();
} else if (rawMerged === null || rawMerged === undefined) {
merged = [];
} else {
merged = [rawMerged];
}
delete extensions.mergedProperties;
this.mergedProperties = merged;
}
var normalized = Object.keys(extensions).reduce(function (obj, key) {
var value = extensions[key];
switch (typeof value) {
case 'function':
obj[key] = new MethodBlueprint({
value: value
});
break;
case 'object':
if (value && BLUEPRINT in value) {
obj[key] = value;
break;
}
/* falls through */
default:
obj[key] = new DataBlueprint({
value: value
});
}
return obj;
}, dict());
this.extensions = dict();
assign(this.extensions, turbocharge(normalized));
};
_proto.apply = function apply(target) {
var meta = target[CLASS_META] = target[CLASS_META] || new ClassMeta();
this.dependencies.forEach(function (m) {
return m.apply(target);
});
this.mergeProperties(target, target, meta);
meta.addMixin(this);
meta.seal();
meta.reseal(target);
return target;
};
_proto.extendPrototype = function extendPrototype(Original) {
Original.prototype = Object.create(Original.prototype);
this.dependencies.forEach(function (m) {
return m.extendPrototype(Original);
});
this.extendPrototypeOnto(Original, Original);
};
_proto.extendPrototypeOnto = function extendPrototypeOnto(Subclass, Parent) {
this.dependencies.forEach(function (m) {
return m.extendPrototypeOnto(Subclass, Parent);
});
this.mergeProperties(Subclass.prototype, Parent.prototype, Subclass[CLASS_META]);
Subclass[CLASS_META].addMixin(this);
};
_proto.extendStatic = function extendStatic(Target) {
this.dependencies.forEach(function (m) {
return m.extendStatic(Target);
});
this.mergeProperties(Target, Object.getPrototypeOf(Target), Target[CLASS_META][CLASS_META]);
Target[CLASS_META].addStaticMixin(this);
};
_proto.mergeProperties = function mergeProperties(target, parent, meta) {
var _this = this;
if (meta.hasAppliedMixin(this)) return;
meta.addAppliedMixin(this);
this.mergedProperties.forEach(function (k) {
return meta.addMergedProperty(k, parent[k]);
});
this.concatenatedProperties.forEach(function (k) {
return meta.addConcatenatedProperty(k, []);
});
new ValueDescriptor({
value: meta.getConcatenatedProperties()
}).define(target, 'concatenatedProperties');
new ValueDescriptor({
value: meta.getMergedProperties()
}).define(target, 'mergedProperties');
Object.keys(this.extensions).forEach(function (key) {
var extension = _this.extensions[key];
var desc = extension.descriptor(target, key, meta);
desc.define(target, key, parent);
});
new ValueDescriptor({
value: ROOT
}).define(target, '_super');
};
return Mixin;
}();
export function extend(Parent) {
var Super = Parent;
var Subclass = function (_Super) {
_inherits(Subclass, _Super);
var Super = Parent;
function Subclass() {
_classCallCheck(this, Subclass);
var Subclass =
/*#__PURE__*/
function (_Super) {
_inheritsLoose(Subclass, _Super);
return _possibleConstructorReturn(this, _Super.apply(this, arguments));
}
function Subclass() {
return _Super.apply(this, arguments) || this;
}
return Subclass;
}(Super);
Subclass[CLASS_META] = InstanceMeta.fromParent(Parent[CLASS_META]);
return Subclass;
}(Super);
for (var _len2 = arguments.length, extensions = Array(_len2 > 1 ? _len2 - 1 : 0), _key3 = 1; _key3 < _len2; _key3++) {
extensions[_key3 - 1] = arguments[_key3];
}
Subclass[CLASS_META] = InstanceMeta.fromParent(Parent[CLASS_META]);
var mixins = extensions.map(toMixin);
Parent[CLASS_META].addSubclass(Subclass);
mixins.forEach(function (m) {
return Subclass[CLASS_META].addMixin(m);
});
ClassMeta.applyAllMixins(Subclass, Parent);
return Subclass;
for (var _len2 = arguments.length, extensions = new Array(_len2 > 1 ? _len2 - 1 : 0), _key3 = 1; _key3 < _len2; _key3++) {
extensions[_key3 - 1] = arguments[_key3];
}
var mixins = extensions.map(toMixin);
Parent[CLASS_META].addSubclass(Subclass);
mixins.forEach(function (m) {
return Subclass[CLASS_META].addMixin(m);
});
ClassMeta.applyAllMixins(Subclass, Parent);
return Subclass;
}
export function relinkSubclasses(Parent) {
Parent[CLASS_META].getSubclasses().forEach(function (Subclass) {
Subclass[CLASS_META].reset(Parent[CLASS_META]);
Subclass.prototype = Object.create(Parent.prototype);
ClassMeta.applyAllMixins(Subclass, Parent);
// recurse into sub-subclasses
relinkSubclasses(Subclass);
});
Parent[CLASS_META].getSubclasses().forEach(function (Subclass) {
Subclass[CLASS_META].reset(Parent[CLASS_META]);
Subclass.prototype = Object.create(Parent.prototype);
ClassMeta.applyAllMixins(Subclass, Parent); // recurse into sub-subclasses
relinkSubclasses(Subclass);
});
}
export function toMixin(extension) {
if (extension instanceof Mixin) return extension;else return new Mixin(extension, []);
if (extension instanceof Mixin) return extension;else return new Mixin(extension, []);
}
var ValueDescriptor = function (_Descriptor) {
_inherits(ValueDescriptor, _Descriptor);
var ValueDescriptor =
/*#__PURE__*/
function (_Descriptor) {
_inheritsLoose(ValueDescriptor, _Descriptor);
function ValueDescriptor(_ref) {
var _ref$enumerable = _ref.enumerable,
enumerable = _ref$enumerable === undefined ? true : _ref$enumerable,
_ref$configurable = _ref.configurable,
configurable = _ref$configurable === undefined ? true : _ref$configurable,
_ref$writable = _ref.writable,
writable = _ref$writable === undefined ? true : _ref$writable,
value = _ref.value;
function ValueDescriptor(_ref) {
var _this2;
_classCallCheck(this, ValueDescriptor);
var _ref$enumerable = _ref.enumerable,
enumerable = _ref$enumerable === void 0 ? true : _ref$enumerable,
_ref$configurable = _ref.configurable,
configurable = _ref$configurable === void 0 ? true : _ref$configurable,
_ref$writable = _ref.writable,
writable = _ref$writable === void 0 ? true : _ref$writable,
value = _ref.value;
_this2 = _Descriptor.call(this) || this;
_this2.enumerable = enumerable;
_this2.configurable = configurable;
_this2.writable = writable;
_this2.value = value;
return _this2;
}
var _this3 = _possibleConstructorReturn(this, _Descriptor.call(this));
var _proto2 = ValueDescriptor.prototype;
_this3.enumerable = enumerable;
_this3.configurable = configurable;
_this3.writable = writable;
_this3.value = value;
return _this3;
}
_proto2.define = function define(target, key, _home) {
Object.defineProperty(target, key, {
enumerable: this.enumerable,
configurable: this.configurable,
writable: this.writable,
value: this.value
});
};
ValueDescriptor.prototype.define = function define(target, key, _home) {
Object.defineProperty(target, key, {
enumerable: this.enumerable,
configurable: this.configurable,
writable: this.writable,
value: this.value
});
};
return ValueDescriptor;
return ValueDescriptor;
}(Descriptor);
export var DataBlueprint = function (_Blueprint) {
_inherits(DataBlueprint, _Blueprint);
export var DataBlueprint =
/*#__PURE__*/
function (_Blueprint) {
_inheritsLoose(DataBlueprint, _Blueprint);
function DataBlueprint(_ref2) {
var _ref2$enumerable = _ref2.enumerable,
enumerable = _ref2$enumerable === undefined ? true : _ref2$enumerable,
_ref2$configurable = _ref2.configurable,
configurable = _ref2$configurable === undefined ? true : _ref2$configurable,
_ref2$writable = _ref2.writable,
writable = _ref2$writable === undefined ? true : _ref2$writable,
value = _ref2.value;
function DataBlueprint(_ref2) {
var _this3;
_classCallCheck(this, DataBlueprint);
var _ref2$enumerable = _ref2.enumerable,
enumerable = _ref2$enumerable === void 0 ? true : _ref2$enumerable,
_ref2$configurable = _ref2.configurable,
configurable = _ref2$configurable === void 0 ? true : _ref2$configurable,
_ref2$writable = _ref2.writable,
writable = _ref2$writable === void 0 ? true : _ref2$writable,
value = _ref2.value;
_this3 = _Blueprint.call(this) || this;
_this3.enumerable = enumerable;
_this3.configurable = configurable;
_this3.value = value;
_this3.writable = writable;
return _this3;
}
var _this4 = _possibleConstructorReturn(this, _Blueprint.call(this));
var _proto3 = DataBlueprint.prototype;
_this4.enumerable = enumerable;
_this4.configurable = configurable;
_this4.value = value;
_this4.writable = writable;
return _this4;
_proto3.descriptor = function descriptor(_target, key, classMeta) {
var enumerable = this.enumerable,
configurable = this.configurable,
writable = this.writable,
value = this.value;
if (classMeta.hasConcatenatedProperty(key)) {
classMeta.addConcatenatedProperty(key, value);
value = classMeta.getConcatenatedProperty(key);
} else if (classMeta.hasMergedProperty(key)) {
classMeta.addMergedProperty(key, value);
value = classMeta.getMergedProperty(key);
}
DataBlueprint.prototype.descriptor = function descriptor(_target, key, classMeta) {
var enumerable = this.enumerable,
configurable = this.configurable,
writable = this.writable,
value = this.value;
return new ValueDescriptor({
enumerable: enumerable,
configurable: configurable,
writable: writable,
value: value
});
};
if (classMeta.hasConcatenatedProperty(key)) {
classMeta.addConcatenatedProperty(key, value);
value = classMeta.getConcatenatedProperty(key);
} else if (classMeta.hasMergedProperty(key)) {
classMeta.addMergedProperty(key, value);
value = classMeta.getMergedProperty(key);
}
return new ValueDescriptor({ enumerable: enumerable, configurable: configurable, writable: writable, value: value });
};
return DataBlueprint;
return DataBlueprint;
}(Blueprint);
export var AccessorBlueprint = function (_Blueprint2) {
_inherits(AccessorBlueprint, _Blueprint2);
export var AccessorBlueprint =
/*#__PURE__*/
function (_Blueprint2) {
_inheritsLoose(AccessorBlueprint, _Blueprint2);
function AccessorBlueprint(_ref3) {
var _ref3$enumerable = _ref3.enumerable,
enumerable = _ref3$enumerable === undefined ? true : _ref3$enumerable,
_ref3$configurable = _ref3.configurable,
configurable = _ref3$configurable === undefined ? true : _ref3$configurable,
get = _ref3.get,
set = _ref3.set;
function AccessorBlueprint(_ref3) {
var _this4;
_classCallCheck(this, AccessorBlueprint);
var _ref3$enumerable = _ref3.enumerable,
enumerable = _ref3$enumerable === void 0 ? true : _ref3$enumerable,
_ref3$configurable = _ref3.configurable,
configurable = _ref3$configurable === void 0 ? true : _ref3$configurable,
get = _ref3.get,
set = _ref3.set;
_this4 = _Blueprint2.call(this) || this;
_this4.enumerable = enumerable;
_this4.configurable = configurable;
_this4.get = get;
_this4.set = set;
return _this4;
}
var _this5 = _possibleConstructorReturn(this, _Blueprint2.call(this));
var _proto4 = AccessorBlueprint.prototype;
_this5.enumerable = enumerable;
_this5.configurable = configurable;
_this5.get = get;
_this5.set = set;
return _this5;
}
_proto4.descriptor = function descriptor(_target, _key, _classMeta) {
return new ValueDescriptor({
enumerable: this.enumerable,
configurable: this.configurable,
get: this.get,
set: this.set
});
};
AccessorBlueprint.prototype.descriptor = function descriptor(_target, _key, _classMeta) {
return new ValueDescriptor({
enumerable: this.enumerable,
configurable: this.configurable,
get: this.get,
set: this.set
});
};
return AccessorBlueprint;
return AccessorBlueprint;
}(Blueprint);
var MethodDescriptor = function (_ValueDescriptor) {
_inherits(MethodDescriptor, _ValueDescriptor);
var MethodDescriptor =
/*#__PURE__*/
function (_ValueDescriptor) {
_inheritsLoose(MethodDescriptor, _ValueDescriptor);
function MethodDescriptor() {
_classCallCheck(this, MethodDescriptor);
function MethodDescriptor() {
return _ValueDescriptor.apply(this, arguments) || this;
}
return _possibleConstructorReturn(this, _ValueDescriptor.apply(this, arguments));
}
var _proto5 = MethodDescriptor.prototype;
MethodDescriptor.prototype.define = function define(target, key, home) {
this.value = wrapMethod(home, key, this.value);
_ValueDescriptor.prototype.define.call(this, target, key, home);
};
_proto5.define = function define(target, key, home) {
this.value = wrapMethod(home, key, this.value);
return MethodDescriptor;
_ValueDescriptor.prototype.define.call(this, target, key, home);
};
return MethodDescriptor;
}(ValueDescriptor);
var MethodBlueprint = function (_DataBlueprint) {
_inherits(MethodBlueprint, _DataBlueprint);
var MethodBlueprint =
/*#__PURE__*/
function (_DataBlueprint) {
_inheritsLoose(MethodBlueprint, _DataBlueprint);
function MethodBlueprint() {
_classCallCheck(this, MethodBlueprint);
function MethodBlueprint() {
return _DataBlueprint.apply(this, arguments) || this;
}
return _possibleConstructorReturn(this, _DataBlueprint.apply(this, arguments));
}
var _proto6 = MethodBlueprint.prototype;
MethodBlueprint.prototype.descriptor = function descriptor(target, key, classMeta) {
var desc = _DataBlueprint.prototype.descriptor.call(this, target, key, classMeta);
return new MethodDescriptor(desc);
};
_proto6.descriptor = function descriptor(target, key, classMeta) {
var desc = _DataBlueprint.prototype.descriptor.call(this, target, key, classMeta);
return MethodBlueprint;
return new MethodDescriptor(desc);
};
return MethodBlueprint;
}(DataBlueprint);
export function wrapMethod(home, methodName, original) {
if (!(methodName in home)) return maybeWrap(original);
var superMethod = home[methodName];
var func = function func() {
for (var _len3 = arguments.length, args = Array(_len3), _key4 = 0; _key4 < _len3; _key4++) {
args[_key4] = arguments[_key4];
}
if (!(methodName in home)) return maybeWrap(original);
var superMethod = home[methodName];
if (!this) return original.apply(this, args);
var lastSuper = this._super;
this._super = superMethod;
try {
return original.apply(this, args);
} finally {
this._super = lastSuper;
}
};
func.__wrapped = true;
return func;
var func = function func() {
for (var _len3 = arguments.length, args = new Array(_len3), _key4 = 0; _key4 < _len3; _key4++) {
args[_key4] = arguments[_key4];
}
if (!this) return original.apply(this, args);
var lastSuper = this._super;
this._super = superMethod;
try {
return original.apply(this, args);
} finally {
this._super = lastSuper;
}
};
func.__wrapped = true;
return func;
}
function maybeWrap(original) {
if ('__wrapped' in original) return original;
return function () {
for (var _len4 = arguments.length, args = Array(_len4), _key5 = 0; _key5 < _len4; _key5++) {
args[_key5] = arguments[_key5];
}
if ('__wrapped' in original) return original;
return function () {
for (var _len4 = arguments.length, args = new Array(_len4), _key5 = 0; _key5 < _len4; _key5++) {
args[_key5] = arguments[_key5];
}
if (!this) return original.apply(this, args);
var lastSuper = this._super;
this._super = ROOT;
try {
return original.apply(this, args);
} finally {
this._super = lastSuper;
}
};
if (!this) return original.apply(this, args);
var lastSuper = this._super;
this._super = ROOT;
try {
return original.apply(this, args);
} finally {
this._super = lastSuper;
}
};
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvbWl4aW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsU0FBQSxVQUFBLFFBQUEsMkJBQUE7QUFDQSxTQUFBLElBQUEsRUFBQSxNQUFBLEVBQUEsTUFBQSxRQUFBLGVBQUE7QUFDQSxTQUFBLFNBQUEsRUFBQSxZQUFBLEVBQUEsV0FBQSxRQUFBLFVBQUE7QUFPQSxTQUFBLElBQUEsUUFBQSxTQUFBO0lBR00sTyxHQUFOLEssQ0FBTSxPOztBQUVOLE9BQU8sSUFBTSxhQUE0QixPQUFsQyxZQUFrQyxDQUFsQztBQUNQLE9BQU8sSUFBTSxZQUEyQixPQUFqQyxXQUFpQyxDQUFqQztBQUVQLFdBQU0sVUFBTixHQUFBLHNCQUFBO0FBQUE7O0FBQ0UsU0FBQSxFQUFBLElBQUEsSUFBQTtBQUVELENBSEQ7S0FDRyxVO0FBSUgsV0FBTSxTQUFOLEdBQUEscUJBQUE7QUFBQTs7QUFDRSxTQUFBLEVBQUEsSUFBQSxJQUFBO0FBRUQsQ0FIRDtLQUNHLFM7QUFXSCxXQUFNLEtBQU47QUE0QkUsbUJBQUEsVUFBQSxFQUFBLE1BQUEsRUFBbUQ7QUFBQTs7QUFBQTs7QUEzQjNDLGFBQUEsVUFBQSxHQUFBLElBQUEsQ0EyQjJDLENBM0JOO0FBQ3JDLGFBQUEsc0JBQUEsR0FBQSxFQUFBO0FBQ0EsYUFBQSxnQkFBQSxHQUFBLEVBQUE7QUFDQSxhQUFBLFlBQUEsR0FBQSxFQUFBO0FBeUJOLGFBQUEsTUFBQSxDQUFBLFVBQUE7QUFDQSw4QkFBQSxZQUFBLEVBQUEsSUFBQSxzQkFBQSxNQUFBO0FBQ0Q7O0FBL0JILFVBTUUsTUFORixxQkFNK0M7QUFBQSwwQ0FBN0MsSUFBNkM7QUFBN0MsZ0JBQTZDO0FBQUE7O0FBQzNDLFlBQUksYUFBYSxLQUFLLEtBQUEsTUFBQSxHQUF0QixDQUFpQixDQUFqQjtBQUVBLFlBQUksS0FBQSxNQUFBLEtBQUosQ0FBQSxFQUF1QjtBQUNyQixtQkFB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LEVBQUcsY0FBUCxJQUFJLENBQUosRUFBdUMsT0FBTyxVQUFQLFFBQU8sQ0FBUDtBQUV2QyxRQUFJLGNBQWMsS0FBbEIsVUFBa0IsQ0FBbEI7QUFFQSxRQUFJLE9BQU8sU0FBUCxJQUFPLEdBQTRDO0FBQUEsMkNBQTVDLElBQTRDO0FBQTVDLGdCQUE0QztBQUFBOztBQUNyRCxZQUFJLENBQUosSUFBQSxFQUFXLE9BQU8sU0FBQSxLQUFBLENBQUEsSUFBQSxFQUFQLElBQU8sQ0FBUDtBQUVYLFlBQUksWUFBWSxLQUFoQixNQUFBO0FBQ0EsYUFBQSxNQUFBLEdBQUEsV0FBQTtBQUVBLFlBQUk7QUFDRixtQkFBTyxTQUFBLEtBQUEsQ0FBQSxJQUFBLEVBQVAsSUFBTyxDQUFQO0FBREYsU0FBQSxTQUVVO0FBQ1IsaUJBQUEsTUFBQSxHQUFBLFNBQUE7QUFDRDtBQVZILEtBQUE7QUFhQyxTQUFBLFNBQUEsR0FBQSxJQUFBO0FBRUQsV0FBQSxJQUFBO0FBQ0Q7QUFFRCxTQUFBLFNBQUEsQ0FBQSxRQUFBLEVBQXFDO0FBQ25DLFFBQUksZUFBSixRQUFBLEVBQTZCLE9BQUEsUUFBQTtBQUU3QixXQUFPLFlBQTRDO0FBQUEsMkNBQTVDLElBQTRDO0FBQTVDLGdCQUE0QztBQUFBOztBQUNqRCxZQUFJLENBQUosSUFBQSxFQUFXLE9BQU8sU0FBQSxLQUFBLENBQUEsSUFBQSxFQUFQLElBQU8sQ0FBUDtBQUVYLFlBQUksWUFBWSxLQUFoQixNQUFBO0FBQ0EsYUFBQSxNQUFBLEdBQUEsSUFBQTtBQUVBLFlBQUk7QUFDRixtQkFBTyxTQUFBLEtBQUEsQ0FBQSxJQUFBLEVBQVAsSUFBTyxDQUFQO0FBREYsU0FBQSxTQUVVO0FBQ1IsaUJBQUEsTUFBQSxHQUFBLFNBQUE7QUFDRDtBQVZILEtBQUE7QUFZRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENMQVNTX01FVEEgfSBmcm9tICdAZ2xpbW1lci9vYmplY3QtcmVmZXJlbmNlJztcbmltcG9ydCB7IGRpY3QsIGFzc2lnbiwgc3ltYm9sIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgR2xpbW1lck9iamVjdCwge1xuICBHbGltbWVyT2JqZWN0RmFjdG9yeSxcbiAgQ2xhc3NNZXRhLFxuICBJbnN0YW5jZU1ldGEsXG4gIHR1cmJvY2hhcmdlLFxufSBmcm9tICcuL29iamVjdCc7XG5cbmltcG9ydCB7IFJPT1QgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IERpY3QgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcblxuY29uc3QgeyBpc0FycmF5IH0gPSBBcnJheTtcblxuZXhwb3J0IGNvbnN0IERFU0NSSVBUT1I6IHVuaXF1ZSBzeW1ib2wgPSBzeW1ib2woJ0RFU0NSSVBUT1InKTtcbmV4cG9ydCBjb25zdCBCTFVFUFJJTlQ6IHVuaXF1ZSBzeW1ib2wgPSBzeW1ib2woJ0JMVUVQUklOVCcpO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGVzY3JpcHRvciB7XG4gIFtERVNDUklQVE9SXSA9IHRydWU7XG4gIGFic3RyYWN0IGRlZmluZShwcm90b3R5cGU6IE9iamVjdCwga2V5OiBzdHJpbmcsIGhvbWU6IE9iamVjdCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbHVlcHJpbnQge1xuICBbQkxVRVBSSU5UXSA9IHRydWU7XG4gIGFic3RyYWN0IGRlc2NyaXB0b3IodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nLCBjbGFzc01ldGE6IENsYXNzTWV0YSk6IERlc2NyaXB0b3I7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5zaW9ucyB7XG4gIGNvbmNhdGVuYXRlZFByb3BlcnRpZXM/OiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGw7XG4gIG1lcmdlZFByb3BlcnRpZXM/OiBzdHJpbmdbXSB8IHN0cmluZztcbiAgX3N1cGVyPzogRnVuY3Rpb247XG4gIFtpbmRleDogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgTWl4aW4ge1xuICBwcml2YXRlIGV4dGVuc2lvbnM6IERpY3Q8YW55PiA9IG51bGwgYXMgYW55OyAvLyBhc3NpZ25lZCBiZWZvcmUgdXNlZFxuICBwcml2YXRlIGNvbmNhdGVuYXRlZFByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgbWVyZ2VkUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBkZXBlbmRlbmNpZXM6IE1peGluW10gPSBbXTtcblxuICBzdGF0aWMgY3JlYXRlKC4uLmFyZ3M6IChNaXhpbiB8IEV4dGVuc2lvbnMpW10pIHtcbiAgICBsZXQgZXh0ZW5zaW9ucyA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcblxuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG5ldyB0aGlzKHt9LCBbXSk7XG4gICAgfSBlbHNlIGlmIChleHRlbnNpb25zIGluc3RhbmNlb2YgTWl4aW4pIHtcbiAgICAgIHJldHVybiBuZXcgdGhpcyh7fSwgYXJncyBhcyBNaXhpbltdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGRlcHMgPSBhcmdzLnNsaWNlKDAsIC0xKS5tYXAodG9NaXhpbik7XG4gICAgICByZXR1cm4gbmV3IHRoaXMoZXh0ZW5zaW9ucyBhcyBFeHRlbnNpb25zLCBkZXBzKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgbWl4aW5zKG9iajogYW55KTogTWl4aW5bXSB7XG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IG9iaiA9PT0gbnVsbCkgcmV0dXJuIFtdO1xuXG4gICAgbGV0IG1ldGEgPSBDbGFzc01ldGEuZm9yKG9iaik7XG4gICAgaWYgKCFtZXRhKSByZXR1cm4gW107XG5cbiAgICByZXR1cm4gbWV0YS5nZXRBcHBsaWVkTWl4aW5zKCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihleHRlbnNpb25zOiBFeHRlbnNpb25zLCBtaXhpbnM6IE1peGluW10pIHtcbiAgICB0aGlzLnJlb3BlbihleHRlbnNpb25zKTtcbiAgICB0aGlzLmRlcGVuZGVuY2llcy5wdXNoKC4uLm1peGlucyk7XG4gIH1cblxuICBkZXRlY3Qob2JqOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgTWl4aW4pIHtcbiAgICAgIHJldHVybiBvYmouZGVwZW5kZW5jaWVzLmluZGV4T2YodGhpcykgIT09IC0xO1xuICAgIH1cblxuICAgIGxldCBtZXRhID0gQ2xhc3NNZXRhLmZvcihvYmopO1xuICAgIHJldHVybiAhIW1ldGEgJiYgbWV0YS5oYXNBcHBsaWVkTWl4aW4odGhpcyk7XG4gIH1cblxuICByZW9wZW4oZXh0ZW5zaW9uczogRXh0ZW5zaW9ucykge1xuICAgIGlmICh0aGlzLmV4dGVuc2lvbnMpIHtcbiAgICAgIHRoaXMuZGVwZW5kZW5jaWVzLnB1c2godG9NaXhpbih0aGlzLmV4dGVuc2lvbnMpKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGV4dGVuc2lvbnMgPT09ICdvYmplY3QnICYmICdjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzJyBpbiBleHRlbnNpb25zKSB7XG4gICAgICBsZXQgY29uY2F0OiBzdHJpbmdbXTtcbiAgICAgIGxldCByYXdDb25jYXQgPSBleHRlbnNpb25zLmNvbmNhdGVuYXRlZFByb3BlcnRpZXM7XG5cbiAgICAgIGlmIChpc0FycmF5KHJhd0NvbmNhdCkpIHtcbiAgICAgICAgY29uY2F0ID0gKHJhd0NvbmNhdCBhcyBzdHJpbmdbXSkuc2xpY2UoKTtcbiAgICAgIH0gZWxzZSBpZiAocmF3Q29uY2F0ID09PSBudWxsIHx8IHJhd0NvbmNhdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbmNhdCA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uY2F0ID0gW3Jhd0NvbmNhdCBhcyBzdHJpbmddO1xuICAgICAgfVxuXG4gICAgICBkZWxldGUgZXh0ZW5zaW9ucy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzO1xuICAgICAgdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gY29uY2F0O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXh0ZW5zaW9ucyA9PT0gJ29iamVjdCcgJiYgJ21lcmdlZFByb3BlcnRpZXMnIGluIGV4dGVuc2lvbnMpIHtcbiAgICAgIGxldCBtZXJnZWQ6IHN0cmluZ1tdO1xuICAgICAgbGV0IHJhd01lcmdlZCA9IGV4dGVuc2lvbnMubWVyZ2VkUHJvcGVydGllcztcblxuICAgICAgaWYgKGlzQXJyYXkocmF3TWVyZ2VkKSkge1xuICAgICAgICBtZXJnZWQgPSAocmF3TWVyZ2VkIGFzIHN0cmluZ1tdKS5zbGljZSgpO1xuICAgICAgfSBlbHNlIGlmIChyYXdNZXJnZWQgPT09IG51bGwgfHwgcmF3TWVyZ2VkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWVyZ2VkID0gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXJnZWQgPSBbcmF3TWVyZ2VkIGFzIHN0cmluZ107XG4gICAgICB9XG5cbiAgICAgIGRlbGV0ZSBleHRlbnNpb25zLm1lcmdlZFByb3BlcnRpZXM7XG4gICAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXMgPSBtZXJnZWQ7XG4gICAgfVxuXG4gICAgbGV0IG5vcm1hbGl6ZWQ6IERpY3Q8Qmx1ZXByaW50PiA9IE9iamVjdC5rZXlzKGV4dGVuc2lvbnMpLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGV4dGVuc2lvbnNba2V5XTtcblxuICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgIG9ialtrZXldID0gbmV3IE1ldGhvZEJsdWVwcmludCh7IHZhbHVlIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgIGlmICh2YWx1ZSAmJiBCTFVFUFJJTlQgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBvYmpba2V5XSA9IG5ldyBEYXRhQmx1ZXByaW50KHsgdmFsdWUgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSwgZGljdDxCbHVlcHJpbnQ+KCkpO1xuXG4gICAgdGhpcy5leHRlbnNpb25zID0gZGljdDxhbnk+KCk7XG4gICAgYXNzaWduKHRoaXMuZXh0ZW5zaW9ucywgdHVyYm9jaGFyZ2Uobm9ybWFsaXplZCkpO1xuICB9XG5cbiAgYXBwbHkodGFyZ2V0OiBhbnkpIHtcbiAgICBsZXQgbWV0YTogQ2xhc3NNZXRhID0gKHRhcmdldFtDTEFTU19NRVRBXSA9IHRhcmdldFtDTEFTU19NRVRBXSB8fCBuZXcgQ2xhc3NNZXRhKCkpO1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzLmZvckVhY2gobSA9PiBtLmFwcGx5KHRhcmdldCkpO1xuICAgIHRoaXMubWVyZ2VQcm9wZXJ0aWVzKHRhcmdldCwgdGFyZ2V0LCBtZXRhKTtcbiAgICBtZXRhLmFkZE1peGluKHRoaXMpO1xuICAgIG1ldGEuc2VhbCgpO1xuICAgIG1ldGEucmVzZWFsKHRhcmdldCk7XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgZXh0ZW5kUHJvdG90eXBlKE9yaWdpbmFsOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KSB7XG4gICAgT3JpZ2luYWwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPcmlnaW5hbC5wcm90b3R5cGUpO1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzLmZvckVhY2gobSA9PiBtLmV4dGVuZFByb3RvdHlwZShPcmlnaW5hbCkpO1xuICAgIHRoaXMuZXh0ZW5kUHJvdG90eXBlT250byhPcmlnaW5hbCwgT3JpZ2luYWwpO1xuICB9XG5cbiAgZXh0ZW5kUHJvdG90eXBlT250byhTdWJjbGFzczogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiwgUGFyZW50OiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KSB7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuZm9yRWFjaChtID0+IG0uZXh0ZW5kUHJvdG90eXBlT250byhTdWJjbGFzcywgUGFyZW50KSk7XG4gICAgdGhpcy5tZXJnZVByb3BlcnRpZXMoU3ViY2xhc3MucHJvdG90eXBlLCBQYXJlbnQucHJvdG90eXBlLCBTdWJjbGFzc1tDTEFTU19NRVRBXSk7XG4gICAgU3ViY2xhc3NbQ0xBU1NfTUVUQV0uYWRkTWl4aW4odGhpcyk7XG4gIH1cblxuICBleHRlbmRTdGF0aWMoVGFyZ2V0OiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KSB7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuZm9yRWFjaChtID0+IG0uZXh0ZW5kU3RhdGljKFRhcmdldCkpO1xuICAgIHRoaXMubWVyZ2VQcm9wZXJ0aWVzKFRhcmdldCwgT2JqZWN0LmdldFByb3RvdHlwZU9mKFRhcmdldCksIFRhcmdldFtDTEFTU19NRVRBXVtDTEFTU19NRVRBXSk7XG4gICAgVGFyZ2V0W0NMQVNTX01FVEFdLmFkZFN0YXRpY01peGluKHRoaXMpO1xuICB9XG5cbiAgbWVyZ2VQcm9wZXJ0aWVzKHRhcmdldDogT2JqZWN0LCBwYXJlbnQ6IERpY3Q8RGljdD4sIG1ldGE6IENsYXNzTWV0YSkge1xuICAgIGlmIChtZXRhLmhhc0FwcGxpZWRNaXhpbih0aGlzKSkgcmV0dXJuO1xuICAgIG1ldGEuYWRkQXBwbGllZE1peGluKHRoaXMpO1xuXG4gICAgdGhpcy5tZXJnZWRQcm9wZXJ0aWVzLmZvckVhY2goayA9PiBtZXRhLmFkZE1lcmdlZFByb3BlcnR5KGssIHBhcmVudFtrXSkpO1xuICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcy5mb3JFYWNoKGsgPT4gbWV0YS5hZGRDb25jYXRlbmF0ZWRQcm9wZXJ0eShrLCBbXSkpO1xuXG4gICAgbmV3IFZhbHVlRGVzY3JpcHRvcih7IHZhbHVlOiBtZXRhLmdldENvbmNhdGVuYXRlZFByb3BlcnRpZXMoKSB9KS5kZWZpbmUoXG4gICAgICB0YXJnZXQsXG4gICAgICAnY29uY2F0ZW5hdGVkUHJvcGVydGllcydcbiAgICApO1xuICAgIG5ldyBWYWx1ZURlc2NyaXB0b3IoeyB2YWx1ZTogbWV0YS5nZXRNZXJnZWRQcm9wZXJ0aWVzKCkgfSkuZGVmaW5lKHRhcmdldCwgJ21lcmdlZFByb3BlcnRpZXMnKTtcblxuICAgIE9iamVjdC5rZXlzKHRoaXMuZXh0ZW5zaW9ucykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgbGV0IGV4dGVuc2lvbjogQmx1ZXByaW50ID0gdGhpcy5leHRlbnNpb25zIVtrZXldO1xuICAgICAgbGV0IGRlc2MgPSBleHRlbnNpb24uZGVzY3JpcHRvcih0YXJnZXQsIGtleSBhcyBzdHJpbmcsIG1ldGEpO1xuICAgICAgZGVzYy5kZWZpbmUodGFyZ2V0LCBrZXkgYXMgc3RyaW5nLCBwYXJlbnQpO1xuICAgIH0pO1xuXG4gICAgbmV3IFZhbHVlRGVzY3JpcHRvcih7IHZhbHVlOiBST09UIH0pLmRlZmluZSh0YXJnZXQsICdfc3VwZXInIGFzIHN0cmluZyk7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgRXh0ZW5zaW9uID0gTWl4aW4gfCBFeHRlbnNpb25zO1xuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kPFQgZXh0ZW5kcyBHbGltbWVyT2JqZWN0PihcbiAgUGFyZW50OiBHbGltbWVyT2JqZWN0RmFjdG9yeTxUPixcbiAgLi4uZXh0ZW5zaW9uczogRXh0ZW5zaW9uW11cbik6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4ge1xuICBsZXQgU3VwZXIgPSBQYXJlbnQgYXMgdHlwZW9mIEdsaW1tZXJPYmplY3Q7XG5cbiAgbGV0IFN1YmNsYXNzID0gY2xhc3MgZXh0ZW5kcyBTdXBlciB7fTtcbiAgU3ViY2xhc3NbQ0xBU1NfTUVUQV0gPSBJbnN0YW5jZU1ldGEuZnJvbVBhcmVudChQYXJlbnRbQ0xBU1NfTUVUQV0pO1xuXG4gIGxldCBtaXhpbnMgPSBleHRlbnNpb25zLm1hcCh0b01peGluKTtcbiAgUGFyZW50W0NMQVNTX01FVEFdLmFkZFN1YmNsYXNzKFN1YmNsYXNzIGFzIEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pO1xuICBtaXhpbnMuZm9yRWFjaChtID0+IFN1YmNsYXNzW0NMQVNTX01FVEFdLmFkZE1peGluKG0pKTtcblxuICBDbGFzc01ldGEuYXBwbHlBbGxNaXhpbnMoU3ViY2xhc3MgYXMgR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiwgUGFyZW50KTtcblxuICByZXR1cm4gU3ViY2xhc3MgYXMgYW55O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVsaW5rU3ViY2xhc3NlcyhQYXJlbnQ6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgUGFyZW50W0NMQVNTX01FVEFdLmdldFN1YmNsYXNzZXMoKS5mb3JFYWNoKChTdWJjbGFzczogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PikgPT4ge1xuICAgIFN1YmNsYXNzW0NMQVNTX01FVEFdLnJlc2V0KFBhcmVudFtDTEFTU19NRVRBXSk7XG4gICAgU3ViY2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQYXJlbnQucHJvdG90eXBlKTtcblxuICAgIENsYXNzTWV0YS5hcHBseUFsbE1peGlucyhTdWJjbGFzcywgUGFyZW50KTtcblxuICAgIC8vIHJlY3Vyc2UgaW50byBzdWItc3ViY2xhc3Nlc1xuICAgIHJlbGlua1N1YmNsYXNzZXMoU3ViY2xhc3MpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvTWl4aW4oZXh0ZW5zaW9uOiBFeHRlbnNpb24pOiBNaXhpbiB7XG4gIGlmIChleHRlbnNpb24gaW5zdGFuY2VvZiBNaXhpbikgcmV0dXJuIGV4dGVuc2lvbjtcbiAgZWxzZSByZXR1cm4gbmV3IE1peGluKGV4dGVuc2lvbiBhcyBPYmplY3QsIFtdKTtcbn1cblxuY2xhc3MgVmFsdWVEZXNjcmlwdG9yIGV4dGVuZHMgRGVzY3JpcHRvciB7XG4gIHB1YmxpYyBlbnVtZXJhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgY29uZmlndXJhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgd3JpdGFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyB2YWx1ZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBlbnVtZXJhYmxlID0gdHJ1ZSxcbiAgICBjb25maWd1cmFibGUgPSB0cnVlLFxuICAgIHdyaXRhYmxlID0gdHJ1ZSxcbiAgICB2YWx1ZSxcbiAgfTogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmVudW1lcmFibGUgPSBlbnVtZXJhYmxlO1xuICAgIHRoaXMuY29uZmlndXJhYmxlID0gY29uZmlndXJhYmxlO1xuICAgIHRoaXMud3JpdGFibGUgPSB3cml0YWJsZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBkZWZpbmUodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nLCBfaG9tZT86IGFueSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xuICAgICAgZW51bWVyYWJsZTogdGhpcy5lbnVtZXJhYmxlLFxuICAgICAgY29uZmlndXJhYmxlOiB0aGlzLmNvbmZpZ3VyYWJsZSxcbiAgICAgIHdyaXRhYmxlOiB0aGlzLndyaXRhYmxlLFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFCbHVlcHJpbnQgZXh0ZW5kcyBCbHVlcHJpbnQge1xuICBwdWJsaWMgZW51bWVyYWJsZTogYm9vbGVhbjtcbiAgcHVibGljIGNvbmZpZ3VyYWJsZTogYm9vbGVhbjtcbiAgcHVibGljIHZhbHVlOiBhbnk7XG4gIHB1YmxpYyB3cml0YWJsZTogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgZW51bWVyYWJsZSA9IHRydWUsXG4gICAgY29uZmlndXJhYmxlID0gdHJ1ZSxcbiAgICB3cml0YWJsZSA9IHRydWUsXG4gICAgdmFsdWUsXG4gIH06IFByb3BlcnR5RGVzY3JpcHRvcikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5lbnVtZXJhYmxlID0gZW51bWVyYWJsZTtcbiAgICB0aGlzLmNvbmZpZ3VyYWJsZSA9IGNvbmZpZ3VyYWJsZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy53cml0YWJsZSA9IHdyaXRhYmxlO1xuICB9XG5cbiAgZGVzY3JpcHRvcihfdGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nLCBjbGFzc01ldGE6IENsYXNzTWV0YSk6IERlc2NyaXB0b3Ige1xuICAgIGxldCB7IGVudW1lcmFibGUsIGNvbmZpZ3VyYWJsZSwgd3JpdGFibGUsIHZhbHVlIH0gPSB0aGlzO1xuXG4gICAgaWYgKGNsYXNzTWV0YS5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nKSkge1xuICAgICAgY2xhc3NNZXRhLmFkZENvbmNhdGVuYXRlZFByb3BlcnR5KGtleSBhcyBzdHJpbmcsIHZhbHVlKTtcbiAgICAgIHZhbHVlID0gY2xhc3NNZXRhLmdldENvbmNhdGVuYXRlZFByb3BlcnR5KGtleSBhcyBzdHJpbmcpO1xuICAgIH0gZWxzZSBpZiAoY2xhc3NNZXRhLmhhc01lcmdlZFByb3BlcnR5KGtleSBhcyBzdHJpbmcpKSB7XG4gICAgICBjbGFzc01ldGEuYWRkTWVyZ2VkUHJvcGVydHkoa2V5IGFzIHN0cmluZywgdmFsdWUpO1xuICAgICAgdmFsdWUgPSBjbGFzc01ldGEuZ2V0TWVyZ2VkUHJvcGVydHkoa2V5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBWYWx1ZURlc2NyaXB0b3IoeyBlbnVtZXJhYmxlLCBjb25maWd1cmFibGUsIHdyaXRhYmxlLCB2YWx1ZSB9KTtcbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWNjZXNzb3JCbHVlcHJpbnQgZXh0ZW5kcyBCbHVlcHJpbnQge1xuICBwdWJsaWMgZW51bWVyYWJsZTogYm9vbGVhbjtcbiAgcHVibGljIGNvbmZpZ3VyYWJsZTogYm9vbGVhbjtcbiAgZ2V0OiAoKSA9PiBhbnk7XG4gIHNldDogKHZhbHVlOiBhbnkpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIGVudW1lcmFibGUgPSB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZSA9IHRydWUsXG4gICAgZ2V0LFxuICAgIHNldCxcbiAgfTogUHJvcGVydHlEZXNjcmlwdG9yICYgeyBnZXQ6IGFueTsgc2V0OiBhbnkgfSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5lbnVtZXJhYmxlID0gZW51bWVyYWJsZTtcbiAgICB0aGlzLmNvbmZpZ3VyYWJsZSA9IGNvbmZpZ3VyYWJsZTtcbiAgICB0aGlzLmdldCA9IGdldDtcbiAgICB0aGlzLnNldCA9IHNldDtcbiAgfVxuXG4gIGRlc2NyaXB0b3IoX3RhcmdldDogT2JqZWN0LCBfa2V5OiBzdHJpbmcsIF9jbGFzc01ldGE6IENsYXNzTWV0YSk6IERlc2NyaXB0b3Ige1xuICAgIHJldHVybiBuZXcgVmFsdWVEZXNjcmlwdG9yKHtcbiAgICAgIGVudW1lcmFibGU6IHRoaXMuZW51bWVyYWJsZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdGhpcy5jb25maWd1cmFibGUsXG4gICAgICBnZXQ6IHRoaXMuZ2V0LFxuICAgICAgc2V0OiB0aGlzLnNldCxcbiAgICB9KTtcbiAgfVxufVxuXG5jbGFzcyBNZXRob2REZXNjcmlwdG9yIGV4dGVuZHMgVmFsdWVEZXNjcmlwdG9yIHtcbiAgZGVmaW5lKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgaG9tZTogRGljdCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB3cmFwTWV0aG9kKGhvbWUsIGtleSwgdGhpcy52YWx1ZSk7XG4gICAgc3VwZXIuZGVmaW5lKHRhcmdldCwga2V5LCBob21lKTtcbiAgfVxufVxuXG5jbGFzcyBNZXRob2RCbHVlcHJpbnQgZXh0ZW5kcyBEYXRhQmx1ZXByaW50IHtcbiAgZGVzY3JpcHRvcih0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIGNsYXNzTWV0YTogQ2xhc3NNZXRhKTogTWV0aG9kRGVzY3JpcHRvciB7XG4gICAgbGV0IGRlc2MgPSBzdXBlci5kZXNjcmlwdG9yKHRhcmdldCwga2V5LCBjbGFzc01ldGEpO1xuICAgIHJldHVybiBuZXcgTWV0aG9kRGVzY3JpcHRvcihkZXNjIGFzIFByb3BlcnR5RGVzY3JpcHRvcik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBNZXRob2QoaG9tZTogRGljdCwgbWV0aG9kTmFtZTogc3RyaW5nLCBvcmlnaW5hbDogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpIHtcbiAgaWYgKCEoKG1ldGhvZE5hbWUgYXMgc3RyaW5nKSBpbiBob21lKSkgcmV0dXJuIG1heWJlV3JhcChvcmlnaW5hbCk7XG5cbiAgbGV0IHN1cGVyTWV0aG9kID0gaG9tZVttZXRob2ROYW1lXTtcblxuICBsZXQgZnVuYyA9IGZ1bmN0aW9uKHRoaXM6IEdsaW1tZXJPYmplY3QsIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgaWYgKCF0aGlzKSByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG5cbiAgICBsZXQgbGFzdFN1cGVyID0gdGhpcy5fc3VwZXI7XG4gICAgdGhpcy5fc3VwZXIgPSBzdXBlck1ldGhvZCBhcyBhbnk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9zdXBlciA9IGxhc3RTdXBlcjtcbiAgICB9XG4gIH07XG5cbiAgKGZ1bmMgYXMgYW55KS5fX3dyYXBwZWQgPSB0cnVlO1xuXG4gIHJldHVybiBmdW5jO1xufVxuXG5mdW5jdGlvbiBtYXliZVdyYXAob3JpZ2luYWw6IEZ1bmN0aW9uKSB7XG4gIGlmICgnX193cmFwcGVkJyBpbiBvcmlnaW5hbCkgcmV0dXJuIG9yaWdpbmFsO1xuXG4gIHJldHVybiBmdW5jdGlvbih0aGlzOiBHbGltbWVyT2JqZWN0LCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGlmICghdGhpcykgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXG4gICAgbGV0IGxhc3RTdXBlciA9IHRoaXMuX3N1cGVyO1xuICAgIHRoaXMuX3N1cGVyID0gUk9PVDtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX3N1cGVyID0gbGFzdFN1cGVyO1xuICAgIH1cbiAgfTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvbWl4aW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLFNBQUEsVUFBQSxRQUFBLDJCQUFBO0FBQ0EsU0FBQSxJQUFBLEVBQUEsTUFBQSxFQUFBLE1BQUEsUUFBQSxlQUFBO0FBQ0EsU0FBQSxTQUFBLEVBQUEsWUFBQSxFQUFBLFdBQUEsUUFBQSxVQUFBO0FBT0EsU0FBQSxJQUFBLFFBQUEsU0FBQTtJQUdRLE8sR0FBUixLLENBQVEsTztBQUVSLE9BQU8sSUFBTSxVQUFVLEdBQWtCLE1BQU0sQ0FBeEMsWUFBd0MsQ0FBeEM7QUFDUCxPQUFPLElBQU0sU0FBUyxHQUFrQixNQUFNLENBQXZDLFdBQXVDLENBQXZDO0FBRVAsV0FBTSxVQUFOLEdBQUEsc0JBQUE7QUFDRSxPQUFBLEVBQUEsSUFBQSxJQUFBO0FBRUQsQ0FIRDtLQUNHLFU7QUFJSCxXQUFNLFNBQU4sR0FBQSxxQkFBQTtBQUNFLE9BQUEsRUFBQSxJQUFBLElBQUE7QUFFRCxDQUhEO0tBQ0csUztBQVdILFdBQU0sS0FBTjtBQUFBO0FBQUE7QUE0QkUsaUJBQUEsVUFBQSxFQUFBLE1BQUEsRUFBbUQ7QUFBQTs7QUEzQjNDLFNBQUEsVUFBQSxHQUFBLElBQUEsQ0EyQjJDLENBM0JOOztBQUNyQyxTQUFBLHNCQUFBLEdBQUEsRUFBQTtBQUNBLFNBQUEsZ0JBQUEsR0FBQSxFQUFBO0FBQ0EsU0FBQSxZQUFBLEdBQUEsRUFBQTtBQXlCTixTQUFBLE1BQUEsQ0FBQSxVQUFBOztBQUNBLCtCQUFBLFlBQUEsRUFBQSxJQUFBLDJCQUFBLE1BQUE7QUFDRDs7QUEvQkgsUUFNRSxNQU5GLEdBTUUsa0JBQTZDO0FBQUEsc0NBQTdDLElBQTZDO0FBQTdDLE1BQUEsSUFBNkM7QUFBQTs7QUFDM0MsUUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBSixNQUFBLEdBQXRCLENBQXFCLENBQXJCOztBQUVBLFFBQUksSUFB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LElBQUEsRUFBUCxJQUFPLENBQVA7QUFFWCxRQUFJLFNBQVMsR0FBRyxLQUFoQixNQUFBO0FBQ0EsU0FBQSxNQUFBLEdBQUEsSUFBQTs7QUFFQSxRQUFJO0FBQ0YsYUFBTyxRQUFRLENBQVIsS0FBQSxDQUFBLElBQUEsRUFBUCxJQUFPLENBQVA7QUFERixLQUFBLFNBRVU7QUFDUixXQUFBLE1BQUEsR0FBQSxTQUFBO0FBQ0Q7QUFWSCxHQUFBO0FBWUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDTEFTU19NRVRBIH0gZnJvbSAnQGdsaW1tZXIvb2JqZWN0LXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBkaWN0LCBhc3NpZ24sIHN5bWJvbCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IEdsaW1tZXJPYmplY3QsIHtcbiAgR2xpbW1lck9iamVjdEZhY3RvcnksXG4gIENsYXNzTWV0YSxcbiAgSW5zdGFuY2VNZXRhLFxuICB0dXJib2NoYXJnZSxcbn0gZnJvbSAnLi9vYmplY3QnO1xuXG5pbXBvcnQgeyBST09UIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBEaWN0IH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5cbmNvbnN0IHsgaXNBcnJheSB9ID0gQXJyYXk7XG5cbmV4cG9ydCBjb25zdCBERVNDUklQVE9SOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdERVNDUklQVE9SJyk7XG5leHBvcnQgY29uc3QgQkxVRVBSSU5UOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdCTFVFUFJJTlQnKTtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERlc2NyaXB0b3Ige1xuICBbREVTQ1JJUFRPUl0gPSB0cnVlO1xuICBhYnN0cmFjdCBkZWZpbmUocHJvdG90eXBlOiBPYmplY3QsIGtleTogc3RyaW5nLCBob21lOiBPYmplY3QpOiB2b2lkO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmx1ZXByaW50IHtcbiAgW0JMVUVQUklOVF0gPSB0cnVlO1xuICBhYnN0cmFjdCBkZXNjcmlwdG9yKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgY2xhc3NNZXRhOiBDbGFzc01ldGEpOiBEZXNjcmlwdG9yO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuc2lvbnMge1xuICBjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzPzogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsO1xuICBtZXJnZWRQcm9wZXJ0aWVzPzogc3RyaW5nW10gfCBzdHJpbmc7XG4gIF9zdXBlcj86IEZ1bmN0aW9uO1xuICBbaW5kZXg6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIE1peGluIHtcbiAgcHJpdmF0ZSBleHRlbnNpb25zOiBEaWN0PGFueT4gPSBudWxsIGFzIGFueTsgLy8gYXNzaWduZWQgYmVmb3JlIHVzZWRcbiAgcHJpdmF0ZSBjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIG1lcmdlZFByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgZGVwZW5kZW5jaWVzOiBNaXhpbltdID0gW107XG5cbiAgc3RhdGljIGNyZWF0ZSguLi5hcmdzOiAoTWl4aW4gfCBFeHRlbnNpb25zKVtdKSB7XG4gICAgbGV0IGV4dGVuc2lvbnMgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBuZXcgdGhpcyh7fSwgW10pO1xuICAgIH0gZWxzZSBpZiAoZXh0ZW5zaW9ucyBpbnN0YW5jZW9mIE1peGluKSB7XG4gICAgICByZXR1cm4gbmV3IHRoaXMoe30sIGFyZ3MgYXMgTWl4aW5bXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBkZXBzID0gYXJncy5zbGljZSgwLCAtMSkubWFwKHRvTWl4aW4pO1xuICAgICAgcmV0dXJuIG5ldyB0aGlzKGV4dGVuc2lvbnMgYXMgRXh0ZW5zaW9ucywgZGVwcyk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIG1peGlucyhvYmo6IGFueSk6IE1peGluW10ge1xuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBvYmogPT09IG51bGwpIHJldHVybiBbXTtcblxuICAgIGxldCBtZXRhID0gQ2xhc3NNZXRhLmZvcihvYmopO1xuICAgIGlmICghbWV0YSkgcmV0dXJuIFtdO1xuXG4gICAgcmV0dXJuIG1ldGEuZ2V0QXBwbGllZE1peGlucygpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoZXh0ZW5zaW9uczogRXh0ZW5zaW9ucywgbWl4aW5zOiBNaXhpbltdKSB7XG4gICAgdGhpcy5yZW9wZW4oZXh0ZW5zaW9ucyk7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMucHVzaCguLi5taXhpbnMpO1xuICB9XG5cbiAgZGV0ZWN0KG9iajogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IG9iaiA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIE1peGluKSB7XG4gICAgICByZXR1cm4gb2JqLmRlcGVuZGVuY2llcy5pbmRleE9mKHRoaXMpICE9PSAtMTtcbiAgICB9XG5cbiAgICBsZXQgbWV0YSA9IENsYXNzTWV0YS5mb3Iob2JqKTtcbiAgICByZXR1cm4gISFtZXRhICYmIG1ldGEuaGFzQXBwbGllZE1peGluKHRoaXMpO1xuICB9XG5cbiAgcmVvcGVuKGV4dGVuc2lvbnM6IEV4dGVuc2lvbnMpIHtcbiAgICBpZiAodGhpcy5leHRlbnNpb25zKSB7XG4gICAgICB0aGlzLmRlcGVuZGVuY2llcy5wdXNoKHRvTWl4aW4odGhpcy5leHRlbnNpb25zKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBleHRlbnNpb25zID09PSAnb2JqZWN0JyAmJiAnY29uY2F0ZW5hdGVkUHJvcGVydGllcycgaW4gZXh0ZW5zaW9ucykge1xuICAgICAgbGV0IGNvbmNhdDogc3RyaW5nW107XG4gICAgICBsZXQgcmF3Q29uY2F0ID0gZXh0ZW5zaW9ucy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzO1xuXG4gICAgICBpZiAoaXNBcnJheShyYXdDb25jYXQpKSB7XG4gICAgICAgIGNvbmNhdCA9IChyYXdDb25jYXQgYXMgc3RyaW5nW10pLnNsaWNlKCk7XG4gICAgICB9IGVsc2UgaWYgKHJhd0NvbmNhdCA9PT0gbnVsbCB8fCByYXdDb25jYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25jYXQgPSBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbmNhdCA9IFtyYXdDb25jYXQgYXMgc3RyaW5nXTtcbiAgICAgIH1cblxuICAgICAgZGVsZXRlIGV4dGVuc2lvbnMuY29uY2F0ZW5hdGVkUHJvcGVydGllcztcbiAgICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcyA9IGNvbmNhdDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGV4dGVuc2lvbnMgPT09ICdvYmplY3QnICYmICdtZXJnZWRQcm9wZXJ0aWVzJyBpbiBleHRlbnNpb25zKSB7XG4gICAgICBsZXQgbWVyZ2VkOiBzdHJpbmdbXTtcbiAgICAgIGxldCByYXdNZXJnZWQgPSBleHRlbnNpb25zLm1lcmdlZFByb3BlcnRpZXM7XG5cbiAgICAgIGlmIChpc0FycmF5KHJhd01lcmdlZCkpIHtcbiAgICAgICAgbWVyZ2VkID0gKHJhd01lcmdlZCBhcyBzdHJpbmdbXSkuc2xpY2UoKTtcbiAgICAgIH0gZWxzZSBpZiAocmF3TWVyZ2VkID09PSBudWxsIHx8IHJhd01lcmdlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1lcmdlZCA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVyZ2VkID0gW3Jhd01lcmdlZCBhcyBzdHJpbmddO1xuICAgICAgfVxuXG4gICAgICBkZWxldGUgZXh0ZW5zaW9ucy5tZXJnZWRQcm9wZXJ0aWVzO1xuICAgICAgdGhpcy5tZXJnZWRQcm9wZXJ0aWVzID0gbWVyZ2VkO1xuICAgIH1cblxuICAgIGxldCBub3JtYWxpemVkOiBEaWN0PEJsdWVwcmludD4gPSBPYmplY3Qua2V5cyhleHRlbnNpb25zKS5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBleHRlbnNpb25zW2tleV07XG5cbiAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICBvYmpba2V5XSA9IG5ldyBNZXRob2RCbHVlcHJpbnQoeyB2YWx1ZSB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICBpZiAodmFsdWUgJiYgQkxVRVBSSU5UIGluIHZhbHVlKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgb2JqW2tleV0gPSBuZXcgRGF0YUJsdWVwcmludCh7IHZhbHVlIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sIGRpY3Q8Qmx1ZXByaW50PigpKTtcblxuICAgIHRoaXMuZXh0ZW5zaW9ucyA9IGRpY3Q8YW55PigpO1xuICAgIGFzc2lnbih0aGlzLmV4dGVuc2lvbnMsIHR1cmJvY2hhcmdlKG5vcm1hbGl6ZWQpKTtcbiAgfVxuXG4gIGFwcGx5KHRhcmdldDogYW55KSB7XG4gICAgbGV0IG1ldGE6IENsYXNzTWV0YSA9ICh0YXJnZXRbQ0xBU1NfTUVUQV0gPSB0YXJnZXRbQ0xBU1NfTUVUQV0gfHwgbmV3IENsYXNzTWV0YSgpKTtcbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKG0gPT4gbS5hcHBseSh0YXJnZXQpKTtcbiAgICB0aGlzLm1lcmdlUHJvcGVydGllcyh0YXJnZXQsIHRhcmdldCwgbWV0YSk7XG4gICAgbWV0YS5hZGRNaXhpbih0aGlzKTtcbiAgICBtZXRhLnNlYWwoKTtcbiAgICBtZXRhLnJlc2VhbCh0YXJnZXQpO1xuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIGV4dGVuZFByb3RvdHlwZShPcmlnaW5hbDogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICAgIE9yaWdpbmFsLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT3JpZ2luYWwucHJvdG90eXBlKTtcbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKG0gPT4gbS5leHRlbmRQcm90b3R5cGUoT3JpZ2luYWwpKTtcbiAgICB0aGlzLmV4dGVuZFByb3RvdHlwZU9udG8oT3JpZ2luYWwsIE9yaWdpbmFsKTtcbiAgfVxuXG4gIGV4dGVuZFByb3RvdHlwZU9udG8oU3ViY2xhc3M6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4sIFBhcmVudDogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzLmZvckVhY2gobSA9PiBtLmV4dGVuZFByb3RvdHlwZU9udG8oU3ViY2xhc3MsIFBhcmVudCkpO1xuICAgIHRoaXMubWVyZ2VQcm9wZXJ0aWVzKFN1YmNsYXNzLnByb3RvdHlwZSwgUGFyZW50LnByb3RvdHlwZSwgU3ViY2xhc3NbQ0xBU1NfTUVUQV0pO1xuICAgIFN1YmNsYXNzW0NMQVNTX01FVEFdLmFkZE1peGluKHRoaXMpO1xuICB9XG5cbiAgZXh0ZW5kU3RhdGljKFRhcmdldDogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzLmZvckVhY2gobSA9PiBtLmV4dGVuZFN0YXRpYyhUYXJnZXQpKTtcbiAgICB0aGlzLm1lcmdlUHJvcGVydGllcyhUYXJnZXQsIE9iamVjdC5nZXRQcm90b3R5cGVPZihUYXJnZXQpLCBUYXJnZXRbQ0xBU1NfTUVUQV1bQ0xBU1NfTUVUQV0pO1xuICAgIFRhcmdldFtDTEFTU19NRVRBXS5hZGRTdGF0aWNNaXhpbih0aGlzKTtcbiAgfVxuXG4gIG1lcmdlUHJvcGVydGllcyh0YXJnZXQ6IE9iamVjdCwgcGFyZW50OiBEaWN0PERpY3Q+LCBtZXRhOiBDbGFzc01ldGEpIHtcbiAgICBpZiAobWV0YS5oYXNBcHBsaWVkTWl4aW4odGhpcykpIHJldHVybjtcbiAgICBtZXRhLmFkZEFwcGxpZWRNaXhpbih0aGlzKTtcblxuICAgIHRoaXMubWVyZ2VkUHJvcGVydGllcy5mb3JFYWNoKGsgPT4gbWV0YS5hZGRNZXJnZWRQcm9wZXJ0eShrLCBwYXJlbnRba10pKTtcbiAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXMuZm9yRWFjaChrID0+IG1ldGEuYWRkQ29uY2F0ZW5hdGVkUHJvcGVydHkoaywgW10pKTtcblxuICAgIG5ldyBWYWx1ZURlc2NyaXB0b3IoeyB2YWx1ZTogbWV0YS5nZXRDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKCkgfSkuZGVmaW5lKFxuICAgICAgdGFyZ2V0LFxuICAgICAgJ2NvbmNhdGVuYXRlZFByb3BlcnRpZXMnXG4gICAgKTtcbiAgICBuZXcgVmFsdWVEZXNjcmlwdG9yKHsgdmFsdWU6IG1ldGEuZ2V0TWVyZ2VkUHJvcGVydGllcygpIH0pLmRlZmluZSh0YXJnZXQsICdtZXJnZWRQcm9wZXJ0aWVzJyk7XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLmV4dGVuc2lvbnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGxldCBleHRlbnNpb246IEJsdWVwcmludCA9IHRoaXMuZXh0ZW5zaW9ucyFba2V5XTtcbiAgICAgIGxldCBkZXNjID0gZXh0ZW5zaW9uLmRlc2NyaXB0b3IodGFyZ2V0LCBrZXkgYXMgc3RyaW5nLCBtZXRhKTtcbiAgICAgIGRlc2MuZGVmaW5lKHRhcmdldCwga2V5IGFzIHN0cmluZywgcGFyZW50KTtcbiAgICB9KTtcblxuICAgIG5ldyBWYWx1ZURlc2NyaXB0b3IoeyB2YWx1ZTogUk9PVCB9KS5kZWZpbmUodGFyZ2V0LCAnX3N1cGVyJyBhcyBzdHJpbmcpO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIEV4dGVuc2lvbiA9IE1peGluIHwgRXh0ZW5zaW9ucztcblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZDxUIGV4dGVuZHMgR2xpbW1lck9iamVjdD4oXG4gIFBhcmVudDogR2xpbW1lck9iamVjdEZhY3Rvcnk8VD4sXG4gIC4uLmV4dGVuc2lvbnM6IEV4dGVuc2lvbltdXG4pOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+IHtcbiAgbGV0IFN1cGVyID0gUGFyZW50IGFzIHR5cGVvZiBHbGltbWVyT2JqZWN0O1xuXG4gIGxldCBTdWJjbGFzcyA9IGNsYXNzIGV4dGVuZHMgU3VwZXIge307XG4gIFN1YmNsYXNzW0NMQVNTX01FVEFdID0gSW5zdGFuY2VNZXRhLmZyb21QYXJlbnQoUGFyZW50W0NMQVNTX01FVEFdKTtcblxuICBsZXQgbWl4aW5zID0gZXh0ZW5zaW9ucy5tYXAodG9NaXhpbik7XG4gIFBhcmVudFtDTEFTU19NRVRBXS5hZGRTdWJjbGFzcyhTdWJjbGFzcyBhcyBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KTtcbiAgbWl4aW5zLmZvckVhY2gobSA9PiBTdWJjbGFzc1tDTEFTU19NRVRBXS5hZGRNaXhpbihtKSk7XG5cbiAgQ2xhc3NNZXRhLmFwcGx5QWxsTWl4aW5zKFN1YmNsYXNzIGFzIEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4sIFBhcmVudCk7XG5cbiAgcmV0dXJuIFN1YmNsYXNzIGFzIGFueTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbGlua1N1YmNsYXNzZXMoUGFyZW50OiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KSB7XG4gIFBhcmVudFtDTEFTU19NRVRBXS5nZXRTdWJjbGFzc2VzKCkuZm9yRWFjaCgoU3ViY2xhc3M6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pID0+IHtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5yZXNldChQYXJlbnRbQ0xBU1NfTUVUQV0pO1xuICAgIFN1YmNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUGFyZW50LnByb3RvdHlwZSk7XG5cbiAgICBDbGFzc01ldGEuYXBwbHlBbGxNaXhpbnMoU3ViY2xhc3MsIFBhcmVudCk7XG5cbiAgICAvLyByZWN1cnNlIGludG8gc3ViLXN1YmNsYXNzZXNcbiAgICByZWxpbmtTdWJjbGFzc2VzKFN1YmNsYXNzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b01peGluKGV4dGVuc2lvbjogRXh0ZW5zaW9uKTogTWl4aW4ge1xuICBpZiAoZXh0ZW5zaW9uIGluc3RhbmNlb2YgTWl4aW4pIHJldHVybiBleHRlbnNpb247XG4gIGVsc2UgcmV0dXJuIG5ldyBNaXhpbihleHRlbnNpb24gYXMgT2JqZWN0LCBbXSk7XG59XG5cbmNsYXNzIFZhbHVlRGVzY3JpcHRvciBleHRlbmRzIERlc2NyaXB0b3Ige1xuICBwdWJsaWMgZW51bWVyYWJsZTogYm9vbGVhbjtcbiAgcHVibGljIGNvbmZpZ3VyYWJsZTogYm9vbGVhbjtcbiAgcHVibGljIHdyaXRhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgdmFsdWU6IGFueTtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgZW51bWVyYWJsZSA9IHRydWUsXG4gICAgY29uZmlndXJhYmxlID0gdHJ1ZSxcbiAgICB3cml0YWJsZSA9IHRydWUsXG4gICAgdmFsdWUsXG4gIH06IFByb3BlcnR5RGVzY3JpcHRvcikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5lbnVtZXJhYmxlID0gZW51bWVyYWJsZTtcbiAgICB0aGlzLmNvbmZpZ3VyYWJsZSA9IGNvbmZpZ3VyYWJsZTtcbiAgICB0aGlzLndyaXRhYmxlID0gd3JpdGFibGU7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZGVmaW5lKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgX2hvbWU/OiBhbnkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgIGVudW1lcmFibGU6IHRoaXMuZW51bWVyYWJsZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdGhpcy5jb25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogdGhpcy53cml0YWJsZSxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhQmx1ZXByaW50IGV4dGVuZHMgQmx1ZXByaW50IHtcbiAgcHVibGljIGVudW1lcmFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyBjb25maWd1cmFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyB2YWx1ZTogYW55O1xuICBwdWJsaWMgd3JpdGFibGU6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIGVudW1lcmFibGUgPSB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZSA9IHRydWUsXG4gICAgd3JpdGFibGUgPSB0cnVlLFxuICAgIHZhbHVlLFxuICB9OiBQcm9wZXJ0eURlc2NyaXB0b3IpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZW51bWVyYWJsZSA9IGVudW1lcmFibGU7XG4gICAgdGhpcy5jb25maWd1cmFibGUgPSBjb25maWd1cmFibGU7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMud3JpdGFibGUgPSB3cml0YWJsZTtcbiAgfVxuXG4gIGRlc2NyaXB0b3IoX3RhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZywgY2xhc3NNZXRhOiBDbGFzc01ldGEpOiBEZXNjcmlwdG9yIHtcbiAgICBsZXQgeyBlbnVtZXJhYmxlLCBjb25maWd1cmFibGUsIHdyaXRhYmxlLCB2YWx1ZSB9ID0gdGhpcztcblxuICAgIGlmIChjbGFzc01ldGEuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydHkoa2V5IGFzIHN0cmluZykpIHtcbiAgICAgIGNsYXNzTWV0YS5hZGRDb25jYXRlbmF0ZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nLCB2YWx1ZSk7XG4gICAgICB2YWx1ZSA9IGNsYXNzTWV0YS5nZXRDb25jYXRlbmF0ZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nKTtcbiAgICB9IGVsc2UgaWYgKGNsYXNzTWV0YS5oYXNNZXJnZWRQcm9wZXJ0eShrZXkgYXMgc3RyaW5nKSkge1xuICAgICAgY2xhc3NNZXRhLmFkZE1lcmdlZFByb3BlcnR5KGtleSBhcyBzdHJpbmcsIHZhbHVlKTtcbiAgICAgIHZhbHVlID0gY2xhc3NNZXRhLmdldE1lcmdlZFByb3BlcnR5KGtleSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVmFsdWVEZXNjcmlwdG9yKHsgZW51bWVyYWJsZSwgY29uZmlndXJhYmxlLCB3cml0YWJsZSwgdmFsdWUgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFjY2Vzc29yQmx1ZXByaW50IGV4dGVuZHMgQmx1ZXByaW50IHtcbiAgcHVibGljIGVudW1lcmFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyBjb25maWd1cmFibGU6IGJvb2xlYW47XG4gIGdldDogKCkgPT4gYW55O1xuICBzZXQ6ICh2YWx1ZTogYW55KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBlbnVtZXJhYmxlID0gdHJ1ZSxcbiAgICBjb25maWd1cmFibGUgPSB0cnVlLFxuICAgIGdldCxcbiAgICBzZXQsXG4gIH06IFByb3BlcnR5RGVzY3JpcHRvciAmIHsgZ2V0OiBhbnk7IHNldDogYW55IH0pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZW51bWVyYWJsZSA9IGVudW1lcmFibGU7XG4gICAgdGhpcy5jb25maWd1cmFibGUgPSBjb25maWd1cmFibGU7XG4gICAgdGhpcy5nZXQgPSBnZXQ7XG4gICAgdGhpcy5zZXQgPSBzZXQ7XG4gIH1cblxuICBkZXNjcmlwdG9yKF90YXJnZXQ6IE9iamVjdCwgX2tleTogc3RyaW5nLCBfY2xhc3NNZXRhOiBDbGFzc01ldGEpOiBEZXNjcmlwdG9yIHtcbiAgICByZXR1cm4gbmV3IFZhbHVlRGVzY3JpcHRvcih7XG4gICAgICBlbnVtZXJhYmxlOiB0aGlzLmVudW1lcmFibGUsXG4gICAgICBjb25maWd1cmFibGU6IHRoaXMuY29uZmlndXJhYmxlLFxuICAgICAgZ2V0OiB0aGlzLmdldCxcbiAgICAgIHNldDogdGhpcy5zZXQsXG4gICAgfSk7XG4gIH1cbn1cblxuY2xhc3MgTWV0aG9kRGVzY3JpcHRvciBleHRlbmRzIFZhbHVlRGVzY3JpcHRvciB7XG4gIGRlZmluZSh0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcsIGhvbWU6IERpY3QpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gd3JhcE1ldGhvZChob21lLCBrZXksIHRoaXMudmFsdWUpO1xuICAgIHN1cGVyLmRlZmluZSh0YXJnZXQsIGtleSwgaG9tZSk7XG4gIH1cbn1cblxuY2xhc3MgTWV0aG9kQmx1ZXByaW50IGV4dGVuZHMgRGF0YUJsdWVwcmludCB7XG4gIGRlc2NyaXB0b3IodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nLCBjbGFzc01ldGE6IENsYXNzTWV0YSk6IE1ldGhvZERlc2NyaXB0b3Ige1xuICAgIGxldCBkZXNjID0gc3VwZXIuZGVzY3JpcHRvcih0YXJnZXQsIGtleSwgY2xhc3NNZXRhKTtcbiAgICByZXR1cm4gbmV3IE1ldGhvZERlc2NyaXB0b3IoZGVzYyBhcyBQcm9wZXJ0eURlc2NyaXB0b3IpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwTWV0aG9kKGhvbWU6IERpY3QsIG1ldGhvZE5hbWU6IHN0cmluZywgb3JpZ2luYWw6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55KSB7XG4gIGlmICghKChtZXRob2ROYW1lIGFzIHN0cmluZykgaW4gaG9tZSkpIHJldHVybiBtYXliZVdyYXAob3JpZ2luYWwpO1xuXG4gIGxldCBzdXBlck1ldGhvZCA9IGhvbWVbbWV0aG9kTmFtZV07XG5cbiAgbGV0IGZ1bmMgPSBmdW5jdGlvbih0aGlzOiBHbGltbWVyT2JqZWN0LCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGlmICghdGhpcykgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXG4gICAgbGV0IGxhc3RTdXBlciA9IHRoaXMuX3N1cGVyO1xuICAgIHRoaXMuX3N1cGVyID0gc3VwZXJNZXRob2QgYXMgYW55O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fc3VwZXIgPSBsYXN0U3VwZXI7XG4gICAgfVxuICB9O1xuXG4gIChmdW5jIGFzIGFueSkuX193cmFwcGVkID0gdHJ1ZTtcblxuICByZXR1cm4gZnVuYztcbn1cblxuZnVuY3Rpb24gbWF5YmVXcmFwKG9yaWdpbmFsOiBGdW5jdGlvbikge1xuICBpZiAoJ19fd3JhcHBlZCcgaW4gb3JpZ2luYWwpIHJldHVybiBvcmlnaW5hbDtcblxuICByZXR1cm4gZnVuY3Rpb24odGhpczogR2xpbW1lck9iamVjdCwgLi4uYXJnczogYW55W10pIHtcbiAgICBpZiAoIXRoaXMpIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcblxuICAgIGxldCBsYXN0U3VwZXIgPSB0aGlzLl9zdXBlcjtcbiAgICB0aGlzLl9zdXBlciA9IFJPT1Q7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9zdXBlciA9IGxhc3RTdXBlcjtcbiAgICB9XG4gIH07XG59XG4iXSwic291cmNlUm9vdCI6IiJ9

@@ -1,10 +0,5 @@

function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var _a, _b;
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }
var _a, _b;
import { Meta, PropertyReference, CLASS_META } from '@glimmer/object-reference';

@@ -14,3 +9,2 @@ import { dict, assign, initializeGuid } from '@glimmer/util';

var isArray = Array.isArray;
import { ROOT } from './utils';

@@ -20,393 +14,424 @@ import { bump } from '@glimmer/validator';

export function turbocharge(obj) {
// function Dummy() {}
// Dummy.prototype = obj;
return obj;
// function Dummy() {}
// Dummy.prototype = obj;
return obj;
}
var SealedMeta = function (_Meta) {
_inherits(SealedMeta, _Meta);
var SealedMeta =
/*#__PURE__*/
function (_Meta) {
_inheritsLoose(SealedMeta, _Meta);
function SealedMeta() {
_classCallCheck(this, SealedMeta);
function SealedMeta() {
return _Meta.apply(this, arguments) || this;
}
return _possibleConstructorReturn(this, _Meta.apply(this, arguments));
}
var _proto = SealedMeta.prototype;
SealedMeta.prototype.addReferenceTypeFor = function addReferenceTypeFor() {
throw new Error('Cannot modify reference types on a sealed meta');
};
_proto.addReferenceTypeFor = function addReferenceTypeFor() {
throw new Error('Cannot modify reference types on a sealed meta');
};
return SealedMeta;
return SealedMeta;
}(Meta);
export var ClassMeta = function () {
function ClassMeta() {
_classCallCheck(this, ClassMeta);
export var ClassMeta =
/*#__PURE__*/
function () {
function ClassMeta() {
this.referenceTypes = dict();
this.propertyMetadata = dict();
this.concatenatedProperties = dict();
this.hasConcatenatedProperties = false;
this.mergedProperties = dict();
this.hasMergedProperties = false;
this.mixins = [];
this.appliedMixins = [];
this.staticMixins = [];
this.subclasses = [];
this.slots = [];
this.InstanceMetaConstructor = null;
}
this.referenceTypes = dict();
this.propertyMetadata = dict();
this.concatenatedProperties = dict();
this.hasConcatenatedProperties = false;
this.mergedProperties = dict();
this.hasMergedProperties = false;
this.mixins = [];
this.appliedMixins = [];
this.staticMixins = [];
this.subclasses = [];
this.slots = [];
this.InstanceMetaConstructor = null;
}
ClassMeta.fromParent = function fromParent(parent) {
var meta = new this();
meta.reset(parent);
return meta;
};
ClassMeta.fromParent = function fromParent(parent) {
var meta = new this();
meta.reset(parent);
return meta;
};
ClassMeta["for"] = function _for(object) {
if (CLASS_META in object) return object[CLASS_META];else if (object.constructor) return object.constructor[CLASS_META] || null;else return null;
};
ClassMeta.for = function _for(object) {
if (CLASS_META in object) return object[CLASS_META];else if (object.constructor) return object.constructor[CLASS_META] || null;else return null;
};
var _proto2 = ClassMeta.prototype;
ClassMeta.prototype.init = function init(object, attrs) {
if (typeof attrs !== 'object' || attrs === null) return;
if (this.hasConcatenatedProperties) {
var concatProps = this.concatenatedProperties;
for (var prop in concatProps) {
if (prop in attrs) {
var concat = concatProps[prop].slice();
object[prop] = concat.concat(attrs[prop]);
}
}
_proto2.init = function init(object, attrs) {
if (typeof attrs !== 'object' || attrs === null) return;
if (this.hasConcatenatedProperties) {
var concatProps = this.concatenatedProperties;
for (var prop in concatProps) {
if (prop in attrs) {
var concat = concatProps[prop].slice();
object[prop] = concat.concat(attrs[prop]);
}
if (this.hasMergedProperties) {
var mergedProps = this.mergedProperties;
for (var _prop in mergedProps) {
if (_prop in attrs) {
var merged = assign({}, mergedProps[_prop]);
object[_prop] = assign(merged, attrs[_prop]);
}
}
}
}
if (this.hasMergedProperties) {
var mergedProps = this.mergedProperties;
for (var _prop in mergedProps) {
if (_prop in attrs) {
var merged = assign({}, mergedProps[_prop]);
object[_prop] = assign(merged, attrs[_prop]);
}
};
}
}
};
ClassMeta.prototype.addStaticMixin = function addStaticMixin(mixin) {
this.staticMixins.push(mixin);
};
_proto2.addStaticMixin = function addStaticMixin(mixin) {
this.staticMixins.push(mixin);
};
ClassMeta.prototype.addMixin = function addMixin(mixin) {
this.mixins.push(mixin);
};
_proto2.addMixin = function addMixin(mixin) {
this.mixins.push(mixin);
};
ClassMeta.prototype.getStaticMixins = function getStaticMixins() {
return this.staticMixins;
};
_proto2.getStaticMixins = function getStaticMixins() {
return this.staticMixins;
};
ClassMeta.prototype.getMixins = function getMixins() {
return this.mixins;
};
_proto2.getMixins = function getMixins() {
return this.mixins;
};
ClassMeta.prototype.addAppliedMixin = function addAppliedMixin(mixin) {
this.appliedMixins.push(mixin);
};
_proto2.addAppliedMixin = function addAppliedMixin(mixin) {
this.appliedMixins.push(mixin);
};
ClassMeta.prototype.hasAppliedMixin = function hasAppliedMixin(mixin) {
return this.appliedMixins.indexOf(mixin) !== -1;
};
_proto2.hasAppliedMixin = function hasAppliedMixin(mixin) {
return this.appliedMixins.indexOf(mixin) !== -1;
};
ClassMeta.prototype.getAppliedMixins = function getAppliedMixins() {
return this.appliedMixins;
};
_proto2.getAppliedMixins = function getAppliedMixins() {
return this.appliedMixins;
};
ClassMeta.prototype.hasStaticMixin = function hasStaticMixin(mixin) {
return this.staticMixins.indexOf(mixin) !== -1;
};
_proto2.hasStaticMixin = function hasStaticMixin(mixin) {
return this.staticMixins.indexOf(mixin) !== -1;
};
ClassMeta.applyAllMixins = function applyAllMixins(Subclass, Parent) {
Subclass[CLASS_META].getMixins().forEach(function (m) {
return m.extendPrototypeOnto(Subclass, Parent);
});
Subclass[CLASS_META].getStaticMixins().forEach(function (m) {
return m.extendStatic(Subclass);
});
Subclass[CLASS_META].seal();
};
ClassMeta.applyAllMixins = function applyAllMixins(Subclass, Parent) {
Subclass[CLASS_META].getMixins().forEach(function (m) {
return m.extendPrototypeOnto(Subclass, Parent);
});
Subclass[CLASS_META].getStaticMixins().forEach(function (m) {
return m.extendStatic(Subclass);
});
Subclass[CLASS_META].seal();
};
ClassMeta.prototype.addSubclass = function addSubclass(constructor) {
this.subclasses.push(constructor);
};
_proto2.addSubclass = function addSubclass(constructor) {
this.subclasses.push(constructor);
};
ClassMeta.prototype.getSubclasses = function getSubclasses() {
return this.subclasses;
};
_proto2.getSubclasses = function getSubclasses() {
return this.subclasses;
};
ClassMeta.prototype.addPropertyMetadata = function addPropertyMetadata(property, value) {
this.propertyMetadata[property] = value;
};
_proto2.addPropertyMetadata = function addPropertyMetadata(property, value) {
this.propertyMetadata[property] = value;
};
ClassMeta.prototype.metadataForProperty = function metadataForProperty(property) {
return this.propertyMetadata[property];
};
_proto2.metadataForProperty = function metadataForProperty(property) {
return this.propertyMetadata[property];
};
ClassMeta.prototype.addReferenceTypeFor = function addReferenceTypeFor(property, type) {
this.referenceTypes[property] = type;
};
_proto2.addReferenceTypeFor = function addReferenceTypeFor(property, type) {
this.referenceTypes[property] = type;
};
ClassMeta.prototype.addSlotFor = function addSlotFor(property) {
this.slots.push(property);
};
_proto2.addSlotFor = function addSlotFor(property) {
this.slots.push(property);
};
ClassMeta.prototype.hasConcatenatedProperty = function hasConcatenatedProperty(property) {
if (!this.hasConcatenatedProperties) return false;
return property in this.concatenatedProperties;
};
_proto2.hasConcatenatedProperty = function hasConcatenatedProperty(property) {
if (!this.hasConcatenatedProperties) return false;
return property in this.concatenatedProperties;
};
ClassMeta.prototype.getConcatenatedProperty = function getConcatenatedProperty(property) {
return this.concatenatedProperties[property];
};
_proto2.getConcatenatedProperty = function getConcatenatedProperty(property) {
return this.concatenatedProperties[property];
};
ClassMeta.prototype.getConcatenatedProperties = function getConcatenatedProperties() {
return Object.keys(this.concatenatedProperties);
};
_proto2.getConcatenatedProperties = function getConcatenatedProperties() {
return Object.keys(this.concatenatedProperties);
};
ClassMeta.prototype.addConcatenatedProperty = function addConcatenatedProperty(property, value) {
this.hasConcatenatedProperties = true;
if (property in this.concatenatedProperties) {
var val = this.concatenatedProperties[property].concat(value);
this.concatenatedProperties[property] = val;
} else {
this.concatenatedProperties[property] = value;
}
};
_proto2.addConcatenatedProperty = function addConcatenatedProperty(property, value) {
this.hasConcatenatedProperties = true;
ClassMeta.prototype.hasMergedProperty = function hasMergedProperty(property) {
if (!this.hasMergedProperties) return false;
return property in this.mergedProperties;
};
if (property in this.concatenatedProperties) {
var val = this.concatenatedProperties[property].concat(value);
this.concatenatedProperties[property] = val;
} else {
this.concatenatedProperties[property] = value;
}
};
ClassMeta.prototype.getMergedProperty = function getMergedProperty(property) {
return this.mergedProperties[property];
};
_proto2.hasMergedProperty = function hasMergedProperty(property) {
if (!this.hasMergedProperties) return false;
return property in this.mergedProperties;
};
ClassMeta.prototype.getMergedProperties = function getMergedProperties() {
return Object.keys(this.mergedProperties);
};
_proto2.getMergedProperty = function getMergedProperty(property) {
return this.mergedProperties[property];
};
ClassMeta.prototype.addMergedProperty = function addMergedProperty(property, value) {
this.hasMergedProperties = true;
if (isArray(value)) {
throw new Error('You passed in `' + JSON.stringify(value) + '` as the value for `foo` but `foo` cannot be an Array');
}
if (property in this.mergedProperties && this.mergedProperties[property] && value) {
this.mergedProperties[property] = mergeMergedProperties(value, this.mergedProperties[property]);
} else {
value = value === null ? value : value || {};
this.mergedProperties[property] = value;
}
};
_proto2.getMergedProperties = function getMergedProperties() {
return Object.keys(this.mergedProperties);
};
ClassMeta.prototype.getReferenceTypes = function getReferenceTypes() {
return this.referenceTypes;
};
_proto2.addMergedProperty = function addMergedProperty(property, value) {
this.hasMergedProperties = true;
ClassMeta.prototype.getPropertyMetadata = function getPropertyMetadata() {
return this.propertyMetadata;
};
if (isArray(value)) {
throw new Error("You passed in `" + JSON.stringify(value) + "` as the value for `foo` but `foo` cannot be an Array");
}
ClassMeta.prototype.reset = function reset(parent) {
this.referenceTypes = dict();
this.propertyMetadata = dict();
this.concatenatedProperties = dict();
this.mergedProperties = dict();
if (parent) {
this.hasConcatenatedProperties = parent.hasConcatenatedProperties;
for (var prop in parent.concatenatedProperties) {
this.concatenatedProperties[prop] = parent.concatenatedProperties[prop].slice();
}
this.hasMergedProperties = parent.hasMergedProperties;
for (var _prop2 in parent.mergedProperties) {
this.mergedProperties[_prop2] = assign({}, parent.mergedProperties[_prop2]);
}
assign(this.referenceTypes, parent.referenceTypes);
assign(this.propertyMetadata, parent.propertyMetadata);
}
};
if (property in this.mergedProperties && this.mergedProperties[property] && value) {
this.mergedProperties[property] = mergeMergedProperties(value, this.mergedProperties[property]);
} else {
value = value === null ? value : value || {};
this.mergedProperties[property] = value;
}
};
ClassMeta.prototype.reseal = function reseal(obj) {
var meta = Meta.for(obj);
var fresh = new this.InstanceMetaConstructor(obj, {});
var referenceTypes = meta.getReferenceTypes();
var slots = meta.getSlots();
turbocharge(assign(referenceTypes, this.referenceTypes));
turbocharge(assign(slots, fresh.getSlots()));
};
_proto2.getReferenceTypes = function getReferenceTypes() {
return this.referenceTypes;
};
ClassMeta.prototype.seal = function seal() {
var referenceTypes = turbocharge(assign({}, this.referenceTypes));
turbocharge(this.concatenatedProperties);
turbocharge(this.mergedProperties);
if (!this.hasMergedProperties && !this.hasConcatenatedProperties) {
this.init = function () {};
}
var slots = this.slots;
_proto2.getPropertyMetadata = function getPropertyMetadata() {
return this.propertyMetadata;
};
var Slots = function Slots() {
var _this2 = this;
_proto2.reset = function reset(parent) {
this.referenceTypes = dict();
this.propertyMetadata = dict();
this.concatenatedProperties = dict();
this.mergedProperties = dict();
_classCallCheck(this, Slots);
if (parent) {
this.hasConcatenatedProperties = parent.hasConcatenatedProperties;
slots.forEach(function (name) {
_this2[name] = EMPTY_CACHE;
});
};
for (var prop in parent.concatenatedProperties) {
this.concatenatedProperties[prop] = parent.concatenatedProperties[prop].slice();
}
this.InstanceMetaConstructor = function (_SealedMeta) {
_inherits(_class, _SealedMeta);
this.hasMergedProperties = parent.hasMergedProperties;
function _class() {
_classCallCheck(this, _class);
for (var _prop2 in parent.mergedProperties) {
this.mergedProperties[_prop2] = assign({}, parent.mergedProperties[_prop2]);
}
var _this3 = _possibleConstructorReturn(this, _SealedMeta.apply(this, arguments));
assign(this.referenceTypes, parent.referenceTypes);
assign(this.propertyMetadata, parent.propertyMetadata);
}
};
_this3.slots = new Slots();
_this3.referenceTypes = referenceTypes;
return _this3;
}
_proto2.reseal = function reseal(obj) {
var meta = Meta["for"](obj);
var fresh = new this.InstanceMetaConstructor(obj, {});
var referenceTypes = meta.getReferenceTypes();
var slots = meta.getSlots();
turbocharge(assign(referenceTypes, this.referenceTypes));
turbocharge(assign(slots, fresh.getSlots()));
};
_class.prototype.getReferenceTypes = function getReferenceTypes() {
return this.referenceTypes;
};
_proto2.seal = function seal() {
var referenceTypes = turbocharge(assign({}, this.referenceTypes));
turbocharge(this.concatenatedProperties);
turbocharge(this.mergedProperties);
_class.prototype.referenceTypeFor = function referenceTypeFor(property) {
return this.referenceTypes[property] || PropertyReference;
};
if (!this.hasMergedProperties && !this.hasConcatenatedProperties) {
this.init = function () {};
}
_class.prototype.getSlots = function getSlots() {
return this.slots;
};
var slots = this.slots;
return _class;
}(SealedMeta);
turbocharge(this);
var Slots = function Slots() {
var _this = this;
slots.forEach(function (name) {
_this[name] = EMPTY_CACHE;
});
};
return ClassMeta;
this.InstanceMetaConstructor =
/*#__PURE__*/
function (_SealedMeta) {
_inheritsLoose(_class, _SealedMeta);
function _class() {
var _this2;
_this2 = _SealedMeta.apply(this, arguments) || this;
_this2.slots = new Slots();
_this2.referenceTypes = referenceTypes;
return _this2;
}
var _proto3 = _class.prototype;
_proto3.getReferenceTypes = function getReferenceTypes() {
return this.referenceTypes;
};
_proto3.referenceTypeFor = function referenceTypeFor(property) {
return this.referenceTypes[property] || PropertyReference;
};
_proto3.getSlots = function getSlots() {
return this.slots;
};
return _class;
}(SealedMeta);
turbocharge(this);
};
return ClassMeta;
}();
function mergeMergedProperties(attrs, parent) {
var merged = assign({}, parent);
for (var prop in attrs) {
if (prop in parent && typeof parent[prop] === 'function' && typeof attrs[prop] === 'function') {
var wrapped = wrapMethod(parent, prop, attrs[prop]);
merged[prop] = wrapped;
} else {
merged[prop] = attrs[prop];
}
var merged = assign({}, parent);
for (var prop in attrs) {
if (prop in parent && typeof parent[prop] === 'function' && typeof attrs[prop] === 'function') {
var wrapped = wrapMethod(parent, prop, attrs[prop]);
merged[prop] = wrapped;
} else {
merged[prop] = attrs[prop];
}
return merged;
}
return merged;
}
export var InstanceMeta = function (_ClassMeta) {
_inherits(InstanceMeta, _ClassMeta);
function InstanceMeta() {
_classCallCheck(this, InstanceMeta);
export var InstanceMeta =
/*#__PURE__*/
function (_ClassMeta) {
_inheritsLoose(InstanceMeta, _ClassMeta);
var _this4 = _possibleConstructorReturn(this, _ClassMeta.apply(this, arguments));
function InstanceMeta() {
var _this3;
_this4[_a] = ClassMeta.fromParent(null);
return _this4;
}
_this3 = _ClassMeta.apply(this, arguments) || this;
_this3[_a] = ClassMeta.fromParent(null);
return _this3;
}
InstanceMeta.fromParent = function fromParent(parent) {
return _ClassMeta.fromParent.call(this, parent);
};
InstanceMeta.fromParent = function fromParent(parent) {
return _ClassMeta.fromParent.call(this, parent);
};
InstanceMeta.prototype.reset = function reset(parent) {
_ClassMeta.prototype.reset.call(this, parent);
if (parent) this[CLASS_META].reset(parent[CLASS_META]);
};
var _proto4 = InstanceMeta.prototype;
InstanceMeta.prototype.seal = function seal() {
_ClassMeta.prototype.seal.call(this);
this[CLASS_META].seal();
};
_proto4.reset = function reset(parent) {
_ClassMeta.prototype.reset.call(this, parent);
return InstanceMeta;
if (parent) this[CLASS_META].reset(parent[CLASS_META]);
};
_proto4.seal = function seal() {
_ClassMeta.prototype.seal.call(this);
this[CLASS_META].seal();
};
return InstanceMeta;
}(ClassMeta);
_a = CLASS_META;
var GlimmerObject = function () {
function GlimmerObject(attrs) {
_classCallCheck(this, GlimmerObject);
var GlimmerObject =
/*#__PURE__*/
function () {
function GlimmerObject(attrs) {
this._super = ROOT;
this._meta = null;
if (attrs) assign(this, attrs);
this.constructor[CLASS_META].init(this, attrs || null);
this._super = ROOT;
initializeGuid(this);
this.init();
}
this._super = ROOT;
this._meta = null;
if (attrs) assign(this, attrs);
this.constructor[CLASS_META].init(this, attrs || null);
this._super = ROOT;
initializeGuid(this);
this.init();
GlimmerObject.extend = function extend() {
for (var _len = arguments.length, extensions = new Array(_len), _key = 0; _key < _len; _key++) {
extensions[_key] = arguments[_key];
}
GlimmerObject.extend = function extend() {
for (var _len = arguments.length, extensions = Array(_len), _key = 0; _key < _len; _key++) {
extensions[_key] = arguments[_key];
}
return extendClass.apply(void 0, [this].concat(extensions));
};
return extendClass.apply(undefined, [this].concat(extensions));
};
GlimmerObject.create = function create(attrs) {
return new this(attrs);
};
GlimmerObject.create = function create(attrs) {
return new this(attrs);
};
GlimmerObject.reopen = function reopen(extensions) {
toMixin(extensions).extendPrototype(this);
this[CLASS_META].seal();
relinkSubclasses(this);
};
GlimmerObject.reopen = function reopen(extensions) {
toMixin(extensions).extendPrototype(this);
this[CLASS_META].seal();
relinkSubclasses(this);
};
GlimmerObject.reopenClass = function reopenClass(extensions) {
toMixin(extensions).extendStatic(this);
this[CLASS_META].seal();
};
GlimmerObject.reopenClass = function reopenClass(extensions) {
toMixin(extensions).extendStatic(this);
this[CLASS_META].seal();
};
GlimmerObject.metaForProperty = function metaForProperty(property) {
var value = this[CLASS_META].metadataForProperty(property);
if (!value) throw new Error("metaForProperty() could not find a computed property with key '" + property + "'.");
return value;
};
GlimmerObject.metaForProperty = function metaForProperty(property) {
var value = this[CLASS_META].metadataForProperty(property);
if (!value) throw new Error('metaForProperty() could not find a computed property with key \'' + property + '\'.');
return value;
};
GlimmerObject.eachComputedProperty = function eachComputedProperty(callback) {
var metadata = this[CLASS_META].getPropertyMetadata();
if (!metadata) return;
GlimmerObject.eachComputedProperty = function eachComputedProperty(callback) {
var metadata = this[CLASS_META].getPropertyMetadata();
if (!metadata) return;
for (var prop in metadata) {
callback(prop, metadata[prop]);
}
};
for (var prop in metadata) {
callback(prop, metadata[prop]);
}
};
GlimmerObject.prototype.init = function init() {};
var _proto5 = GlimmerObject.prototype;
GlimmerObject.prototype.get = function get(key) {
return this[key];
};
_proto5.init = function init() {};
GlimmerObject.prototype.set = function set(key, value) {
this[key] = value;
bump();
};
_proto5.get = function get(key) {
return this[key];
};
GlimmerObject.prototype.setProperties = function setProperties(attrs) {
assign(this, attrs);
bump();
};
_proto5.set = function set(key, value) {
this[key] = value;
bump();
};
GlimmerObject.prototype.destroy = function destroy() {};
_proto5.setProperties = function setProperties(attrs) {
assign(this, attrs);
bump();
};
return GlimmerObject;
_proto5.destroy = function destroy() {};
return GlimmerObject;
}();
export default GlimmerObject;
export { GlimmerObject as default };
_b = CLASS_META;
GlimmerObject[_b] = InstanceMeta.fromParent(null);
GlimmerObject.isClass = true;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLFNBQUEsSUFBQSxFQUFBLGlCQUFBLEVBQUEsVUFBQSxRQUFBLDJCQUFBO0FBTUEsU0FBQSxJQUFBLEVBQUEsTUFBQSxFQUFBLGNBQUEsUUFBQSxlQUFBO0FBQ0EsU0FBZ0IsVUFBaEIsV0FBQSxFQUFBLE9BQUEsRUFBQSxnQkFBQSxFQUFBLFVBQUEsUUFBQSxTQUFBO0lBRU0sTyxHQUFOLEssQ0FBTSxPOztBQUVOLFNBQUEsSUFBQSxRQUFBLFNBQUE7QUFFQSxTQUFBLElBQUEsUUFBQSxvQkFBQTtBQUVBLE9BQU8sSUFBTSxjQUFjLFNBQUEsV0FBQSxHQUFvQixDQUF4QyxDQUFBO0FBd0JQLE9BQU0sU0FBQSxXQUFBLENBQUEsR0FBQSxFQUErQjtBQUNuQztBQUNBO0FBQ0EsV0FBQSxHQUFBO0FBQ0Q7O0lBRUQsVTs7Ozs7Ozs7O3lCQUNFLG1CLGtDQUFtQztBQUNqQyxjQUFNLElBQUEsS0FBQSxDQUFOLGdEQUFNLENBQU47QUFDRCxLOzs7RUFISCxJOztBQU1BLFdBQU0sU0FBTjtBQUFBLHlCQUFBO0FBQUE7O0FBQ1UsYUFBQSxjQUFBLEdBQUEsTUFBQTtBQUNBLGFBQUEsZ0JBQUEsR0FBQSxNQUFBO0FBQ0EsYUFBQSxzQkFBQSxHQUFBLE1BQUE7QUFDQSxhQUFBLHlCQUFBLEdBQUEsS0FBQTtBQUNBLGFBQUEsZ0JBQUEsR0FBQSxNQUFBO0FBQ0EsYUFBQSxtQkFBQSxHQUFBLEtBQUE7QUFDQSxhQUFBLE1BQUEsR0FBQSxFQUFBO0FBQ0EsYUFBQSxhQUFBLEdBQUEsRUFBQTtBQUNBLGFBQUEsWUFBQSxHQUFBLEVBQUE7QUFDQSxhQUFBLFVBQUEsR0FBQSxFQUFBO0FBQ0EsYUFBQSxLQUFBLEdBQUEsRUFBQTtBQUNELGFBQUEsdUJBQUEsR0FBQSxJQUFBO0FBa1BSOztBQTlQRCxjQWNFLFVBZEYs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SSxDQUFLLEM7OzRCQVVULEcsZ0JBQUEsRyxFQUFlO0FBQ2IsZUFBTyxLQUFQLEdBQU8sQ0FBUDtBQUNELEs7OzRCQUVELEcsZ0JBQUEsRyxFQUFBLEssRUFBMkI7QUFDekIsYUFBQSxHQUFBLElBQUEsS0FBQTtBQUNBO0FBQ0QsSzs7NEJBRUQsYSwwQkFBQSxLLEVBQTJCO0FBQ3pCLGVBQUEsSUFBQSxFQUFBLEtBQUE7QUFDQTtBQUNELEs7OzRCQUVELE8sc0JBQU8sQ0FBSyxDOzs7OztlQTVFQSxhOztLQUdKLFU7QUFBRCxjQUFBLEVBQUEsSUFBNkIsYUFBQSxVQUFBLENBQTdCLElBQTZCLENBQTdCO0FBQ0EsY0FBQSxPQUFBLEdBQUEsSUFBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIE1ldGEsXG4gIElubmVyUmVmZXJlbmNlRmFjdG9yeSxcbiAgUHJvcGVydHlSZWZlcmVuY2UsXG4gIENMQVNTX01FVEEsXG59IGZyb20gJ0BnbGltbWVyL29iamVjdC1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgZGljdCwgYXNzaWduLCBpbml0aWFsaXplR3VpZCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgTWl4aW4sIGV4dGVuZCBhcyBleHRlbmRDbGFzcywgdG9NaXhpbiwgcmVsaW5rU3ViY2xhc3Nlcywgd3JhcE1ldGhvZCB9IGZyb20gJy4vbWl4aW4nO1xuXG5jb25zdCB7IGlzQXJyYXkgfSA9IEFycmF5O1xuXG5pbXBvcnQgeyBST09UIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBPcHRpb24sIERpY3QgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGJ1bXAgfSBmcm9tICdAZ2xpbW1lci92YWxpZGF0b3InO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfQ0FDSEUgPSBmdW5jdGlvbiBFTVBUWV9DQUNIRSgpIHt9O1xuXG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdFdpdGhNaXhpbnMge1xuICBbQ0xBU1NfTUVUQV06IENsYXNzTWV0YTtcbiAgX21ldGE6IE1ldGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFuY2VXaXRoTWl4aW5zIHtcbiAgY29uc3RydWN0b3I6IE9iamVjdFdpdGhNaXhpbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2xpbW1lck9iamVjdEZhY3Rvcnk8VD4ge1xuICBuZXcgPFU+KGF0dHJzPzogVSk6IEdsaW1tZXJPYmplY3QgJiBUICYgVTtcbiAgZXh0ZW5kKCk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PE9iamVjdD47XG4gIGV4dGVuZDxUPihleHRlbnNpb246IFQpOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxUPjtcbiAgZXh0ZW5kKC4uLmV4dGVuc2lvbnM6IE9iamVjdFtdKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8T2JqZWN0PjtcbiAgY3JlYXRlPFU+KGF0dHJzPzogVSk6IEdsaW1tZXJPYmplY3QgJiBUICYgVTtcbiAgcmVvcGVuPFU+KGV4dGVuc2lvbnM6IFUpOiB2b2lkO1xuICByZW9wZW5DbGFzczxVPihleHRlbnNpb25zOiBVKTogdm9pZDtcbiAgbWV0YUZvclByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBPYmplY3Q7XG4gIGVhY2hDb21wdXRlZFByb3BlcnR5KGNhbGxiYWNrOiAoczogc3RyaW5nLCBvOiBPYmplY3QpID0+IHZvaWQpOiB2b2lkO1xuICBbQ0xBU1NfTUVUQV06IEluc3RhbmNlTWV0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR1cmJvY2hhcmdlPFQ+KG9iajogVCk6IFQge1xuICAvLyBmdW5jdGlvbiBEdW1teSgpIHt9XG4gIC8vIER1bW15LnByb3RvdHlwZSA9IG9iajtcbiAgcmV0dXJuIG9iajtcbn1cblxuYWJzdHJhY3QgY2xhc3MgU2VhbGVkTWV0YSBleHRlbmRzIE1ldGEge1xuICBhZGRSZWZlcmVuY2VUeXBlRm9yKC4uLl9hcmdzOiBhbnlbXSk6IElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBtb2RpZnkgcmVmZXJlbmNlIHR5cGVzIG9uIGEgc2VhbGVkIG1ldGEnKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xhc3NNZXRhIHtcbiAgcHJpdmF0ZSByZWZlcmVuY2VUeXBlcyA9IGRpY3Q8SW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4+KCk7XG4gIHByaXZhdGUgcHJvcGVydHlNZXRhZGF0YSA9IGRpY3Q8YW55PigpO1xuICBwcml2YXRlIGNvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSBkaWN0PGFueVtdPigpO1xuICBwcml2YXRlIGhhc0NvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSBmYWxzZTtcbiAgcHJpdmF0ZSBtZXJnZWRQcm9wZXJ0aWVzID0gZGljdDxPYmplY3Q+KCk7XG4gIHByaXZhdGUgaGFzTWVyZ2VkUHJvcGVydGllcyA9IGZhbHNlO1xuICBwcml2YXRlIG1peGluczogTWl4aW5bXSA9IFtdO1xuICBwcml2YXRlIGFwcGxpZWRNaXhpbnM6IE1peGluW10gPSBbXTtcbiAgcHJpdmF0ZSBzdGF0aWNNaXhpbnM6IE1peGluW10gPSBbXTtcbiAgcHJpdmF0ZSBzdWJjbGFzc2VzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+W10gPSBbXTtcbiAgcHJpdmF0ZSBzbG90czogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIEluc3RhbmNlTWV0YUNvbnN0cnVjdG9yOiBPcHRpb248dHlwZW9mIE1ldGE+ID0gbnVsbDtcblxuICBzdGF0aWMgZnJvbVBhcmVudChwYXJlbnQ6IE9wdGlvbjxDbGFzc01ldGE+KSB7XG4gICAgbGV0IG1ldGEgPSBuZXcgdGhpcygpO1xuICAgIG1ldGEucmVzZXQocGFyZW50KTtcbiAgICByZXR1cm4gbWV0YTtcbiAgfVxuXG4gIHN0YXRpYyBmb3Iob2JqZWN0OiBPYmplY3RXaXRoTWl4aW5zIHwgSW5zdGFuY2VXaXRoTWl4aW5zKTogT3B0aW9uPENsYXNzTWV0YT4ge1xuICAgIGlmIChDTEFTU19NRVRBIGluIG9iamVjdCkgcmV0dXJuIChvYmplY3QgYXMgT2JqZWN0V2l0aE1peGlucylbQ0xBU1NfTUVUQV07XG4gICAgZWxzZSBpZiAob2JqZWN0LmNvbnN0cnVjdG9yKVxuICAgICAgcmV0dXJuIChvYmplY3QgYXMgSW5zdGFuY2VXaXRoTWl4aW5zKS5jb25zdHJ1Y3RvcltDTEFTU19NRVRBXSB8fCBudWxsO1xuICAgIGVsc2UgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpbml0KG9iamVjdDogR2xpbW1lck9iamVjdCwgYXR0cnM6IE9wdGlvbjxEaWN0Pikge1xuICAgIGlmICh0eXBlb2YgYXR0cnMgIT09ICdvYmplY3QnIHx8IGF0dHJzID09PSBudWxsKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSB7XG4gICAgICBsZXQgY29uY2F0UHJvcHMgPSB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXM7XG4gICAgICBmb3IgKGxldCBwcm9wIGluIGNvbmNhdFByb3BzKSB7XG4gICAgICAgIGlmIChwcm9wIGluIGF0dHJzKSB7XG4gICAgICAgICAgbGV0IGNvbmNhdCA9IGNvbmNhdFByb3BzW3Byb3BdLnNsaWNlKCk7XG4gICAgICAgICAgb2JqZWN0W3Byb3BdID0gY29uY2F0LmNvbmNhdChhdHRyc1twcm9wXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNNZXJnZWRQcm9wZXJ0aWVzKSB7XG4gICAgICBsZXQgbWVyZ2VkUHJvcHMgPSB0aGlzLm1lcmdlZFByb3BlcnRpZXM7XG4gICAgICBmb3IgKGxldCBwcm9wIGluIG1lcmdlZFByb3BzKSB7XG4gICAgICAgIGlmIChwcm9wIGluIGF0dHJzKSB7XG4gICAgICAgICAgbGV0IG1lcmdlZCA9IGFzc2lnbih7fSwgbWVyZ2VkUHJvcHNbcHJvcF0pO1xuICAgICAgICAgIG9iamVjdFtwcm9wXSA9IGFzc2lnbihtZXJnZWQsIGF0dHJzW3Byb3BdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFkZFN0YXRpY01peGluKG1peGluOiBNaXhpbikge1xuICAgIHRoaXMuc3RhdGljTWl4aW5zLnB1c2gobWl4aW4pO1xuICB9XG5cbiAgYWRkTWl4aW4obWl4aW46IE1peGluKSB7XG4gICAgdGhpcy5taXhpbnMucHVzaChtaXhpbik7XG4gIH1cblxuICBnZXRTdGF0aWNNaXhpbnMoKTogTWl4aW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGljTWl4aW5zO1xuICB9XG5cbiAgZ2V0TWl4aW5zKCk6IE1peGluW10ge1xuICAgIHJldHVybiB0aGlzLm1peGlucztcbiAgfVxuXG4gIGFkZEFwcGxpZWRNaXhpbihtaXhpbjogTWl4aW4pIHtcbiAgICB0aGlzLmFwcGxpZWRNaXhpbnMucHVzaChtaXhpbik7XG4gIH1cblxuICBoYXNBcHBsaWVkTWl4aW4obWl4aW46IE1peGluKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbGllZE1peGlucy5pbmRleE9mKG1peGluKSAhPT0gLTE7XG4gIH1cblxuICBnZXRBcHBsaWVkTWl4aW5zKCk6IE1peGluW10ge1xuICAgIHJldHVybiB0aGlzLmFwcGxpZWRNaXhpbnM7XG4gIH1cblxuICBoYXNTdGF0aWNNaXhpbihtaXhpbjogTWl4aW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0aWNNaXhpbnMuaW5kZXhPZihtaXhpbikgIT09IC0xO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QWxsTWl4aW5zKFN1YmNsYXNzOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+LCBQYXJlbnQ6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5nZXRNaXhpbnMoKS5mb3JFYWNoKChtOiBNaXhpbikgPT4gbS5leHRlbmRQcm90b3R5cGVPbnRvKFN1YmNsYXNzLCBQYXJlbnQpKTtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5nZXRTdGF0aWNNaXhpbnMoKS5mb3JFYWNoKChtOiBNaXhpbikgPT4gbS5leHRlbmRTdGF0aWMoU3ViY2xhc3MpKTtcbiAgICBTdWJjbGFzc1tDTEFTU19NRVRBXS5zZWFsKCk7XG4gIH1cblxuICBhZGRTdWJjbGFzcyhjb25zdHJ1Y3RvcjogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55Pikge1xuICAgIHRoaXMuc3ViY2xhc3Nlcy5wdXNoKGNvbnN0cnVjdG9yKTtcbiAgfVxuXG4gIGdldFN1YmNsYXNzZXMoKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PltdIHtcbiAgICByZXR1cm4gdGhpcy5zdWJjbGFzc2VzO1xuICB9XG5cbiAgYWRkUHJvcGVydHlNZXRhZGF0YShwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5wcm9wZXJ0eU1ldGFkYXRhW3Byb3BlcnR5XSA9IHZhbHVlO1xuICB9XG5cbiAgbWV0YWRhdGFGb3JQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogT2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eU1ldGFkYXRhW3Byb3BlcnR5XTtcbiAgfVxuXG4gIGFkZFJlZmVyZW5jZVR5cGVGb3IocHJvcGVydHk6IHN0cmluZywgdHlwZTogSW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4pIHtcbiAgICB0aGlzLnJlZmVyZW5jZVR5cGVzW3Byb3BlcnR5XSA9IHR5cGU7XG4gIH1cblxuICBhZGRTbG90Rm9yKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICB0aGlzLnNsb3RzLnB1c2gocHJvcGVydHkpO1xuICB9XG5cbiAgaGFzQ29uY2F0ZW5hdGVkUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIChwcm9wZXJ0eSBhcyBzdHJpbmcpIGluIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcztcbiAgfVxuXG4gIGdldENvbmNhdGVuYXRlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wZXJ0eV07XG4gIH1cblxuICBnZXRDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGFkZENvbmNhdGVuYXRlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmhhc0NvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSB0cnVlO1xuXG4gICAgaWYgKChwcm9wZXJ0eSBhcyBzdHJpbmcpIGluIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcykge1xuICAgICAgbGV0IHZhbCA9IHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wZXJ0eV0uY29uY2F0KHZhbHVlKTtcbiAgICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wZXJ0eV0gPSB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBoYXNNZXJnZWRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmhhc01lcmdlZFByb3BlcnRpZXMpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKHByb3BlcnR5IGFzIHN0cmluZykgaW4gdGhpcy5tZXJnZWRQcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0TWVyZ2VkUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IE9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV07XG4gIH1cblxuICBnZXRNZXJnZWRQcm9wZXJ0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5tZXJnZWRQcm9wZXJ0aWVzKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGFkZE1lcmdlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiBEaWN0KSB7XG4gICAgdGhpcy5oYXNNZXJnZWRQcm9wZXJ0aWVzID0gdHJ1ZTtcblxuICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgWW91IHBhc3NlZCBpbiBcXGAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHZhbHVlXG4gICAgICAgICl9XFxgIGFzIHRoZSB2YWx1ZSBmb3IgXFxgZm9vXFxgIGJ1dCBcXGBmb29cXGAgY2Fubm90IGJlIGFuIEFycmF5YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoKHByb3BlcnR5IGFzIHN0cmluZykgaW4gdGhpcy5tZXJnZWRQcm9wZXJ0aWVzICYmIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV0gJiYgdmFsdWUpIHtcbiAgICAgIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV0gPSBtZXJnZU1lcmdlZFByb3BlcnRpZXMoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICAodGhpcyBhcyBhbnkpLm1lcmdlZFByb3BlcnRpZXNbcHJvcGVydHldXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlID09PSBudWxsID8gdmFsdWUgOiB2YWx1ZSB8fCB7fTtcbiAgICAgIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXRSZWZlcmVuY2VUeXBlcygpOiBEaWN0PElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+PiB7XG4gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlVHlwZXM7XG4gIH1cblxuICBnZXRQcm9wZXJ0eU1ldGFkYXRhKCk6IERpY3Q8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHlNZXRhZGF0YTtcbiAgfVxuXG4gIHJlc2V0KHBhcmVudDogT3B0aW9uPENsYXNzTWV0YT4pIHtcbiAgICB0aGlzLnJlZmVyZW5jZVR5cGVzID0gZGljdDxJbm5lclJlZmVyZW5jZUZhY3Rvcnk8YW55Pj4oKTtcbiAgICB0aGlzLnByb3BlcnR5TWV0YWRhdGEgPSBkaWN0KCk7XG4gICAgdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gZGljdDxhbnlbXT4oKTtcbiAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXMgPSBkaWN0PE9iamVjdD4oKTtcblxuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHRoaXMuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcyA9IHBhcmVudC5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzO1xuICAgICAgZm9yIChsZXQgcHJvcCBpbiBwYXJlbnQuY29uY2F0ZW5hdGVkUHJvcGVydGllcykge1xuICAgICAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcF0gPSBwYXJlbnQuY29uY2F0ZW5hdGVkUHJvcGVydGllc1twcm9wXS5zbGljZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmhhc01lcmdlZFByb3BlcnRpZXMgPSBwYXJlbnQuaGFzTWVyZ2VkUHJvcGVydGllcztcbiAgICAgIGZvciAobGV0IHByb3AgaW4gcGFyZW50Lm1lcmdlZFByb3BlcnRpZXMpIHtcbiAgICAgICAgdGhpcy5tZXJnZWRQcm9wZXJ0aWVzW3Byb3BdID0gYXNzaWduKHt9LCBwYXJlbnQubWVyZ2VkUHJvcGVydGllc1twcm9wXSk7XG4gICAgICB9XG5cbiAgICAgIGFzc2lnbih0aGlzLnJlZmVyZW5jZVR5cGVzLCBwYXJlbnQucmVmZXJlbmNlVHlwZXMpO1xuICAgICAgYXNzaWduKHRoaXMucHJvcGVydHlNZXRhZGF0YSwgcGFyZW50LnByb3BlcnR5TWV0YWRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2VhbChvYmo6IE9iamVjdCkge1xuICAgIGxldCBtZXRhID0gTWV0YS5mb3Iob2JqKTtcbiAgICBsZXQgZnJlc2ggPSBuZXcgdGhpcy5JbnN0YW5jZU1ldGFDb25zdHJ1Y3RvciEob2JqLCB7fSk7XG4gICAgbGV0IHJlZmVyZW5jZVR5cGVzID0gbWV0YS5nZXRSZWZlcmVuY2VUeXBlcygpO1xuICAgIGxldCBzbG90cyA9IG1ldGEuZ2V0U2xvdHMoKTtcblxuICAgIHR1cmJvY2hhcmdlKGFzc2lnbihyZWZlcmVuY2VUeXBlcywgdGhpcy5yZWZlcmVuY2VUeXBlcykpO1xuICAgIHR1cmJvY2hhcmdlKGFzc2lnbihzbG90cywgZnJlc2guZ2V0U2xvdHMoKSkpO1xuICB9XG5cbiAgc2VhbCgpIHtcbiAgICBsZXQgcmVmZXJlbmNlVHlwZXM6IERpY3Q8SW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4+ID0gdHVyYm9jaGFyZ2UoXG4gICAgICBhc3NpZ24oe30sIHRoaXMucmVmZXJlbmNlVHlwZXMpXG4gICAgKTtcbiAgICB0dXJib2NoYXJnZSh0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXMpO1xuICAgIHR1cmJvY2hhcmdlKHRoaXMubWVyZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoIXRoaXMuaGFzTWVyZ2VkUHJvcGVydGllcyAmJiAhdGhpcy5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKSB7XG4gICAgICB0aGlzLmluaXQgPSBmdW5jdGlvbigpIHt9O1xuICAgIH1cblxuICAgIGxldCBzbG90cyA9IHRoaXMuc2xvdHM7XG5cbiAgICBjbGFzcyBTbG90cyB7XG4gICAgICBbaW5kZXg6IHN0cmluZ106IHVua25vd247XG5cbiAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzbG90cy5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgIHRoaXNbbmFtZV0gPSBFTVBUWV9DQUNIRTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5JbnN0YW5jZU1ldGFDb25zdHJ1Y3RvciA9IGNsYXNzIGV4dGVuZHMgU2VhbGVkTWV0YSB7XG4gICAgICBwcm90ZWN0ZWQgc2xvdHM6IFNsb3RzID0gbmV3IFNsb3RzKCk7XG4gICAgICBwdWJsaWMgcmVmZXJlbmNlVHlwZXM6IERpY3Q8SW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4+ID0gcmVmZXJlbmNlVHlwZXM7XG5cbiAgICAgIGdldFJlZmVyZW5jZVR5cGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VUeXBlcztcbiAgICAgIH1cblxuICAgICAgcmVmZXJlbmNlVHlwZUZvcihwcm9wZXJ0eTogc3RyaW5nKTogSW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VUeXBlc1twcm9wZXJ0eV0gfHwgUHJvcGVydHlSZWZlcmVuY2U7XG4gICAgICB9XG5cbiAgICAgIGdldFNsb3RzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zbG90cztcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdHVyYm9jaGFyZ2UodGhpcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVyZ2VNZXJnZWRQcm9wZXJ0aWVzKGF0dHJzOiBEaWN0LCBwYXJlbnQ6IERpY3QpIHtcbiAgbGV0IG1lcmdlZCA9IGFzc2lnbih7fSwgcGFyZW50KTtcblxuICBmb3IgKGxldCBwcm9wIGluIGF0dHJzKSB7XG4gICAgaWYgKHByb3AgaW4gcGFyZW50ICYmIHR5cGVvZiBwYXJlbnRbcHJvcF0gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGF0dHJzW3Byb3BdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBsZXQgd3JhcHBlZCA9IHdyYXBNZXRob2QocGFyZW50LCBwcm9wLCBhdHRyc1twcm9wXSBhcyBhbnkpO1xuICAgICAgbWVyZ2VkW3Byb3BdID0gd3JhcHBlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVyZ2VkW3Byb3BdID0gYXR0cnNbcHJvcF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuZXhwb3J0IGNsYXNzIEluc3RhbmNlTWV0YSBleHRlbmRzIENsYXNzTWV0YSB7XG4gIHB1YmxpYyBbQ0xBU1NfTUVUQV06IENsYXNzTWV0YSA9IENsYXNzTWV0YS5mcm9tUGFyZW50KG51bGwpO1xuXG4gIHN0YXRpYyBmcm9tUGFyZW50KHBhcmVudDogT3B0aW9uPEluc3RhbmNlTWV0YT4pOiBJbnN0YW5jZU1ldGEge1xuICAgIHJldHVybiBzdXBlci5mcm9tUGFyZW50KHBhcmVudCkgYXMgSW5zdGFuY2VNZXRhO1xuICB9XG5cbiAgcmVzZXQocGFyZW50OiBJbnN0YW5jZU1ldGEpIHtcbiAgICBzdXBlci5yZXNldChwYXJlbnQpO1xuICAgIGlmIChwYXJlbnQpIHRoaXNbQ0xBU1NfTUVUQV0ucmVzZXQocGFyZW50W0NMQVNTX01FVEFdKTtcbiAgfVxuXG4gIHNlYWwoKSB7XG4gICAgc3VwZXIuc2VhbCgpO1xuICAgIHRoaXNbQ0xBU1NfTUVUQV0uc2VhbCgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdsaW1tZXJPYmplY3Qge1xuICBbaW5kZXg6IHN0cmluZ106IHVua25vd247XG5cbiAgc3RhdGljIFtDTEFTU19NRVRBXTogSW5zdGFuY2VNZXRhID0gSW5zdGFuY2VNZXRhLmZyb21QYXJlbnQobnVsbCk7XG4gIHN0YXRpYyBpc0NsYXNzID0gdHJ1ZTtcblxuICBzdGF0aWMgZXh0ZW5kKCk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4gJiB0eXBlb2YgR2xpbW1lck9iamVjdDtcbiAgc3RhdGljIGV4dGVuZDxUPihleHRlbnNpb246IFQpOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxUPiAmIHR5cGVvZiBHbGltbWVyT2JqZWN0O1xuICBzdGF0aWMgZXh0ZW5kKC4uLmV4dGVuc2lvbnM6IE9iamVjdFtdKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiAmIHR5cGVvZiBHbGltbWVyT2JqZWN0O1xuXG4gIHN0YXRpYyBleHRlbmQodGhpczogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiwgLi4uZXh0ZW5zaW9uczogYW55W10pIHtcbiAgICByZXR1cm4gZXh0ZW5kQ2xhc3ModGhpcywgLi4uZXh0ZW5zaW9ucyk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlKGF0dHJzPzogRGljdCB8IG51bGwpOiBHbGltbWVyT2JqZWN0IHtcbiAgICByZXR1cm4gbmV3IHRoaXMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHJlb3BlbjxVPihleHRlbnNpb25zOiBVKTogdm9pZCB7XG4gICAgdG9NaXhpbihleHRlbnNpb25zKS5leHRlbmRQcm90b3R5cGUodGhpcyBhcyBhbnkpO1xuICAgIHRoaXNbQ0xBU1NfTUVUQV0uc2VhbCgpO1xuXG4gICAgcmVsaW5rU3ViY2xhc3Nlcyh0aGlzIGFzIGFueSk7XG4gIH1cblxuICBzdGF0aWMgcmVvcGVuQ2xhc3M8VT4oZXh0ZW5zaW9uczogVSk6IHZvaWQge1xuICAgIHRvTWl4aW4oZXh0ZW5zaW9ucykuZXh0ZW5kU3RhdGljKHRoaXMgYXMgYW55KTtcbiAgICB0aGlzW0NMQVNTX01FVEFdLnNlYWwoKTtcbiAgfVxuXG4gIHN0YXRpYyBtZXRhRm9yUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IE9iamVjdCB7XG4gICAgbGV0IHZhbHVlID0gdGhpc1tDTEFTU19NRVRBXS5tZXRhZGF0YUZvclByb3BlcnR5KHByb3BlcnR5KTtcbiAgICBpZiAoIXZhbHVlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgbWV0YUZvclByb3BlcnR5KCkgY291bGQgbm90IGZpbmQgYSBjb21wdXRlZCBwcm9wZXJ0eSB3aXRoIGtleSAnJHtwcm9wZXJ0eX0nLmBcbiAgICAgICk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgc3RhdGljIGVhY2hDb21wdXRlZFByb3BlcnR5KGNhbGxiYWNrOiAoczogc3RyaW5nLCBvOiBPYmplY3QpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBsZXQgbWV0YWRhdGEgPSB0aGlzW0NMQVNTX01FVEFdLmdldFByb3BlcnR5TWV0YWRhdGEoKTtcbiAgICBpZiAoIW1ldGFkYXRhKSByZXR1cm47XG5cbiAgICBmb3IgKGxldCBwcm9wIGluIG1ldGFkYXRhKSB7XG4gICAgICBjYWxsYmFjayhwcm9wLCBtZXRhZGF0YVtwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgX3N1cGVyID0gUk9PVDtcbiAgX21ldGEgPSBudWxsO1xuICBfZ3VpZCE6IG51bWJlcjsgLy8gU2V0IGJ5IGluaXRpYWxpemVHdWlkKHRoaXMpIGluIGNvbnN0cnVjdG9yXG5cbiAgaW5pdCgpIHt9XG5cbiAgY29uc3RydWN0b3IoYXR0cnM/OiBEaWN0IHwgbnVsbCkge1xuICAgIGlmIChhdHRycykgYXNzaWduKHRoaXMsIGF0dHJzKTtcbiAgICAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgR2xpbW1lck9iamVjdClbQ0xBU1NfTUVUQV0uaW5pdCh0aGlzLCBhdHRycyB8fCBudWxsKTtcbiAgICB0aGlzLl9zdXBlciA9IFJPT1Q7XG4gICAgaW5pdGlhbGl6ZUd1aWQodGhpcyk7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBnZXQoa2V5OiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB0aGlzW2tleV07XG4gIH1cblxuICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzW2tleV0gPSB2YWx1ZTtcbiAgICBidW1wKCk7XG4gIH1cblxuICBzZXRQcm9wZXJ0aWVzKGF0dHJzOiBPYmplY3QpIHtcbiAgICBhc3NpZ24odGhpcywgYXR0cnMpO1xuICAgIGJ1bXAoKTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7fVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxTQUFBLElBQUEsRUFBQSxpQkFBQSxFQUFBLFVBQUEsUUFBQSwyQkFBQTtBQU1BLFNBQUEsSUFBQSxFQUFBLE1BQUEsRUFBQSxjQUFBLFFBQUEsZUFBQTtBQUNBLFNBQWdCLE1BQU0sSUFBdEIsV0FBQSxFQUFBLE9BQUEsRUFBQSxnQkFBQSxFQUFBLFVBQUEsUUFBQSxTQUFBO0lBRVEsTyxHQUFSLEssQ0FBUSxPO0FBRVIsU0FBQSxJQUFBLFFBQUEsU0FBQTtBQUVBLFNBQUEsSUFBQSxRQUFBLG9CQUFBO0FBRUEsT0FBTyxJQUFNLFdBQVcsR0FBRyxTQUFBLFdBQUEsR0FBb0IsQ0FBeEMsQ0FBQTtBQXdCUCxPQUFNLFNBQUEsV0FBQSxDQUFBLEdBQUEsRUFBK0I7QUFDbkM7QUFDQTtBQUNBLFNBQUEsR0FBQTtBQUNEOztJQUVELFU7Ozs7Ozs7Ozs7O1NBQ0UsbUIsR0FBQSwrQkFBbUM7QUFDakMsVUFBTSxJQUFBLEtBQUEsQ0FBTixnREFBTSxDQUFOO0FBQ0QsRzs7O0VBSEgsSTs7QUFNQSxXQUFNLFNBQU47QUFBQTtBQUFBO0FBQUEsdUJBQUE7QUFDVSxTQUFBLGNBQUEsR0FBaUIsSUFBakIsRUFBQTtBQUNBLFNBQUEsZ0JBQUEsR0FBbUIsSUFBbkIsRUFBQTtBQUNBLFNBQUEsc0JBQUEsR0FBeUIsSUFBekIsRUFBQTtBQUNBLFNBQUEseUJBQUEsR0FBQSxLQUFBO0FBQ0EsU0FBQSxnQkFBQSxHQUFtQixJQUFuQixFQUFBO0FBQ0EsU0FBQSxtQkFBQSxHQUFBLEtBQUE7QUFDQSxTQUFBLE1BQUEsR0FBQSxFQUFBO0FBQ0EsU0FBQSxhQUFBLEdBQUEsRUFBQTtBQUNBLFNBQUEsWUFBQSxHQUFBLEVBQUE7QUFDQSxTQUFBLFVBQUEsR0FBQSxFQUFBO0FBQ0EsU0FBQSxLQUFBLEdBQUEsRUFBQTtBQUNELFNB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dkIsSUFBdUIsQ0FBZixDQUFSO0FBQ0Q7QUFDRixHOzs7O1VBTUQsSSxHQUFBLGdCQUFJLENBQUssQzs7VUFVVCxHLEdBQUEsYUFBRyxHQUFILEVBQWU7QUFDYixXQUFPLEtBQVAsR0FBTyxDQUFQO0FBQ0QsRzs7VUFFRCxHLEdBQUEsYUFBRyxHQUFILEVBQUcsS0FBSCxFQUEyQjtBQUN6QixTQUFBLEdBQUEsSUFBQSxLQUFBO0FBQ0EsSUFBQSxJQUFJO0FBQ0wsRzs7VUFFRCxhLEdBQUEsdUJBQWEsS0FBYixFQUEyQjtBQUN6QixJQUFBLE1BQU0sQ0FBQSxJQUFBLEVBQU4sS0FBTSxDQUFOO0FBQ0EsSUFBQSxJQUFJO0FBQ0wsRzs7VUFFRCxPLEdBQUEsbUJBQU8sQ0FBSyxDOzs7OztTQTVFQSxhO0tBR0osVTtBQUFELGFBQUEsQ0FBQSxFQUFBLENBQUEsR0FBNkIsWUFBWSxDQUFaLFVBQUEsQ0FBN0IsSUFBNkIsQ0FBN0I7QUFDQSxhQUFBLENBQUEsT0FBQSxHQUFBLElBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBNZXRhLFxuICBJbm5lclJlZmVyZW5jZUZhY3RvcnksXG4gIFByb3BlcnR5UmVmZXJlbmNlLFxuICBDTEFTU19NRVRBLFxufSBmcm9tICdAZ2xpbW1lci9vYmplY3QtcmVmZXJlbmNlJztcbmltcG9ydCB7IGRpY3QsIGFzc2lnbiwgaW5pdGlhbGl6ZUd1aWQgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IE1peGluLCBleHRlbmQgYXMgZXh0ZW5kQ2xhc3MsIHRvTWl4aW4sIHJlbGlua1N1YmNsYXNzZXMsIHdyYXBNZXRob2QgfSBmcm9tICcuL21peGluJztcblxuY29uc3QgeyBpc0FycmF5IH0gPSBBcnJheTtcblxuaW1wb3J0IHsgUk9PVCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgT3B0aW9uLCBEaWN0IH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBidW1wIH0gZnJvbSAnQGdsaW1tZXIvdmFsaWRhdG9yJztcblxuZXhwb3J0IGNvbnN0IEVNUFRZX0NBQ0hFID0gZnVuY3Rpb24gRU1QVFlfQ0FDSEUoKSB7fTtcblxuZXhwb3J0IGludGVyZmFjZSBPYmplY3RXaXRoTWl4aW5zIHtcbiAgW0NMQVNTX01FVEFdOiBDbGFzc01ldGE7XG4gIF9tZXRhOiBNZXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbmNlV2l0aE1peGlucyB7XG4gIGNvbnN0cnVjdG9yOiBPYmplY3RXaXRoTWl4aW5zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdsaW1tZXJPYmplY3RGYWN0b3J5PFQ+IHtcbiAgbmV3IDxVPihhdHRycz86IFUpOiBHbGltbWVyT2JqZWN0ICYgVCAmIFU7XG4gIGV4dGVuZCgpOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxPYmplY3Q+O1xuICBleHRlbmQ8VD4oZXh0ZW5zaW9uOiBUKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8VD47XG4gIGV4dGVuZCguLi5leHRlbnNpb25zOiBPYmplY3RbXSk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PE9iamVjdD47XG4gIGNyZWF0ZTxVPihhdHRycz86IFUpOiBHbGltbWVyT2JqZWN0ICYgVCAmIFU7XG4gIHJlb3BlbjxVPihleHRlbnNpb25zOiBVKTogdm9pZDtcbiAgcmVvcGVuQ2xhc3M8VT4oZXh0ZW5zaW9uczogVSk6IHZvaWQ7XG4gIG1ldGFGb3JQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogT2JqZWN0O1xuICBlYWNoQ29tcHV0ZWRQcm9wZXJ0eShjYWxsYmFjazogKHM6IHN0cmluZywgbzogT2JqZWN0KSA9PiB2b2lkKTogdm9pZDtcbiAgW0NMQVNTX01FVEFdOiBJbnN0YW5jZU1ldGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0dXJib2NoYXJnZTxUPihvYmo6IFQpOiBUIHtcbiAgLy8gZnVuY3Rpb24gRHVtbXkoKSB7fVxuICAvLyBEdW1teS5wcm90b3R5cGUgPSBvYmo7XG4gIHJldHVybiBvYmo7XG59XG5cbmFic3RyYWN0IGNsYXNzIFNlYWxlZE1ldGEgZXh0ZW5kcyBNZXRhIHtcbiAgYWRkUmVmZXJlbmNlVHlwZUZvciguLi5fYXJnczogYW55W10pOiBJbm5lclJlZmVyZW5jZUZhY3Rvcnk8YW55PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbW9kaWZ5IHJlZmVyZW5jZSB0eXBlcyBvbiBhIHNlYWxlZCBtZXRhJyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENsYXNzTWV0YSB7XG4gIHByaXZhdGUgcmVmZXJlbmNlVHlwZXMgPSBkaWN0PElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+PigpO1xuICBwcml2YXRlIHByb3BlcnR5TWV0YWRhdGEgPSBkaWN0PGFueT4oKTtcbiAgcHJpdmF0ZSBjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gZGljdDxhbnlbXT4oKTtcbiAgcHJpdmF0ZSBoYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gZmFsc2U7XG4gIHByaXZhdGUgbWVyZ2VkUHJvcGVydGllcyA9IGRpY3Q8T2JqZWN0PigpO1xuICBwcml2YXRlIGhhc01lcmdlZFByb3BlcnRpZXMgPSBmYWxzZTtcbiAgcHJpdmF0ZSBtaXhpbnM6IE1peGluW10gPSBbXTtcbiAgcHJpdmF0ZSBhcHBsaWVkTWl4aW5zOiBNaXhpbltdID0gW107XG4gIHByaXZhdGUgc3RhdGljTWl4aW5zOiBNaXhpbltdID0gW107XG4gIHByaXZhdGUgc3ViY2xhc3NlczogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PltdID0gW107XG4gIHByaXZhdGUgc2xvdHM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBJbnN0YW5jZU1ldGFDb25zdHJ1Y3RvcjogT3B0aW9uPHR5cGVvZiBNZXRhPiA9IG51bGw7XG5cbiAgc3RhdGljIGZyb21QYXJlbnQocGFyZW50OiBPcHRpb248Q2xhc3NNZXRhPikge1xuICAgIGxldCBtZXRhID0gbmV3IHRoaXMoKTtcbiAgICBtZXRhLnJlc2V0KHBhcmVudCk7XG4gICAgcmV0dXJuIG1ldGE7XG4gIH1cblxuICBzdGF0aWMgZm9yKG9iamVjdDogT2JqZWN0V2l0aE1peGlucyB8IEluc3RhbmNlV2l0aE1peGlucyk6IE9wdGlvbjxDbGFzc01ldGE+IHtcbiAgICBpZiAoQ0xBU1NfTUVUQSBpbiBvYmplY3QpIHJldHVybiAob2JqZWN0IGFzIE9iamVjdFdpdGhNaXhpbnMpW0NMQVNTX01FVEFdO1xuICAgIGVsc2UgaWYgKG9iamVjdC5jb25zdHJ1Y3RvcilcbiAgICAgIHJldHVybiAob2JqZWN0IGFzIEluc3RhbmNlV2l0aE1peGlucykuY29uc3RydWN0b3JbQ0xBU1NfTUVUQV0gfHwgbnVsbDtcbiAgICBlbHNlIHJldHVybiBudWxsO1xuICB9XG5cbiAgaW5pdChvYmplY3Q6IEdsaW1tZXJPYmplY3QsIGF0dHJzOiBPcHRpb248RGljdD4pIHtcbiAgICBpZiAodHlwZW9mIGF0dHJzICE9PSAnb2JqZWN0JyB8fCBhdHRycyA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcykge1xuICAgICAgbGV0IGNvbmNhdFByb3BzID0gdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzO1xuICAgICAgZm9yIChsZXQgcHJvcCBpbiBjb25jYXRQcm9wcykge1xuICAgICAgICBpZiAocHJvcCBpbiBhdHRycykge1xuICAgICAgICAgIGxldCBjb25jYXQgPSBjb25jYXRQcm9wc1twcm9wXS5zbGljZSgpO1xuICAgICAgICAgIG9iamVjdFtwcm9wXSA9IGNvbmNhdC5jb25jYXQoYXR0cnNbcHJvcF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzTWVyZ2VkUHJvcGVydGllcykge1xuICAgICAgbGV0IG1lcmdlZFByb3BzID0gdGhpcy5tZXJnZWRQcm9wZXJ0aWVzO1xuICAgICAgZm9yIChsZXQgcHJvcCBpbiBtZXJnZWRQcm9wcykge1xuICAgICAgICBpZiAocHJvcCBpbiBhdHRycykge1xuICAgICAgICAgIGxldCBtZXJnZWQgPSBhc3NpZ24oe30sIG1lcmdlZFByb3BzW3Byb3BdKTtcbiAgICAgICAgICBvYmplY3RbcHJvcF0gPSBhc3NpZ24obWVyZ2VkLCBhdHRyc1twcm9wXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGRTdGF0aWNNaXhpbihtaXhpbjogTWl4aW4pIHtcbiAgICB0aGlzLnN0YXRpY01peGlucy5wdXNoKG1peGluKTtcbiAgfVxuXG4gIGFkZE1peGluKG1peGluOiBNaXhpbikge1xuICAgIHRoaXMubWl4aW5zLnB1c2gobWl4aW4pO1xuICB9XG5cbiAgZ2V0U3RhdGljTWl4aW5zKCk6IE1peGluW10ge1xuICAgIHJldHVybiB0aGlzLnN0YXRpY01peGlucztcbiAgfVxuXG4gIGdldE1peGlucygpOiBNaXhpbltdIHtcbiAgICByZXR1cm4gdGhpcy5taXhpbnM7XG4gIH1cblxuICBhZGRBcHBsaWVkTWl4aW4obWl4aW46IE1peGluKSB7XG4gICAgdGhpcy5hcHBsaWVkTWl4aW5zLnB1c2gobWl4aW4pO1xuICB9XG5cbiAgaGFzQXBwbGllZE1peGluKG1peGluOiBNaXhpbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFwcGxpZWRNaXhpbnMuaW5kZXhPZihtaXhpbikgIT09IC0xO1xuICB9XG5cbiAgZ2V0QXBwbGllZE1peGlucygpOiBNaXhpbltdIHtcbiAgICByZXR1cm4gdGhpcy5hcHBsaWVkTWl4aW5zO1xuICB9XG5cbiAgaGFzU3RhdGljTWl4aW4obWl4aW46IE1peGluKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGljTWl4aW5zLmluZGV4T2YobWl4aW4pICE9PSAtMTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUFsbE1peGlucyhTdWJjbGFzczogR2xpbW1lck9iamVjdEZhY3Rvcnk8YW55PiwgUGFyZW50OiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+KSB7XG4gICAgU3ViY2xhc3NbQ0xBU1NfTUVUQV0uZ2V0TWl4aW5zKCkuZm9yRWFjaCgobTogTWl4aW4pID0+IG0uZXh0ZW5kUHJvdG90eXBlT250byhTdWJjbGFzcywgUGFyZW50KSk7XG4gICAgU3ViY2xhc3NbQ0xBU1NfTUVUQV0uZ2V0U3RhdGljTWl4aW5zKCkuZm9yRWFjaCgobTogTWl4aW4pID0+IG0uZXh0ZW5kU3RhdGljKFN1YmNsYXNzKSk7XG4gICAgU3ViY2xhc3NbQ0xBU1NfTUVUQV0uc2VhbCgpO1xuICB9XG5cbiAgYWRkU3ViY2xhc3MoY29uc3RydWN0b3I6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4pIHtcbiAgICB0aGlzLnN1YmNsYXNzZXMucHVzaChjb25zdHJ1Y3Rvcik7XG4gIH1cblxuICBnZXRTdWJjbGFzc2VzKCk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT5bXSB7XG4gICAgcmV0dXJuIHRoaXMuc3ViY2xhc3NlcztcbiAgfVxuXG4gIGFkZFByb3BlcnR5TWV0YWRhdGEocHJvcGVydHk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMucHJvcGVydHlNZXRhZGF0YVtwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgfVxuXG4gIG1ldGFkYXRhRm9yUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IE9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHlNZXRhZGF0YVtwcm9wZXJ0eV07XG4gIH1cblxuICBhZGRSZWZlcmVuY2VUeXBlRm9yKHByb3BlcnR5OiBzdHJpbmcsIHR5cGU6IElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+KSB7XG4gICAgdGhpcy5yZWZlcmVuY2VUeXBlc1twcm9wZXJ0eV0gPSB0eXBlO1xuICB9XG5cbiAgYWRkU2xvdEZvcihwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgdGhpcy5zbG90cy5wdXNoKHByb3BlcnR5KTtcbiAgfVxuXG4gIGhhc0NvbmNhdGVuYXRlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAocHJvcGVydHkgYXMgc3RyaW5nKSBpbiB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRDb25jYXRlbmF0ZWRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcGVydHldO1xuICB9XG5cbiAgZ2V0Q29uY2F0ZW5hdGVkUHJvcGVydGllcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcykgYXMgc3RyaW5nW107XG4gIH1cblxuICBhZGRDb25jYXRlbmF0ZWRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5oYXNDb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gdHJ1ZTtcblxuICAgIGlmICgocHJvcGVydHkgYXMgc3RyaW5nKSBpbiB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXMpIHtcbiAgICAgIGxldCB2YWwgPSB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcGVydHldLmNvbmNhdCh2YWx1ZSk7XG4gICAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcGVydHldID0gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcGVydHldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgaGFzTWVyZ2VkUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5oYXNNZXJnZWRQcm9wZXJ0aWVzKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIChwcm9wZXJ0eSBhcyBzdHJpbmcpIGluIHRoaXMubWVyZ2VkUHJvcGVydGllcztcbiAgfVxuXG4gIGdldE1lcmdlZFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBPYmplY3Qge1xuICAgIHJldHVybiB0aGlzLm1lcmdlZFByb3BlcnRpZXNbcHJvcGVydHldO1xuICB9XG5cbiAgZ2V0TWVyZ2VkUHJvcGVydGllcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMubWVyZ2VkUHJvcGVydGllcykgYXMgc3RyaW5nW107XG4gIH1cblxuICBhZGRNZXJnZWRQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogRGljdCkge1xuICAgIHRoaXMuaGFzTWVyZ2VkUHJvcGVydGllcyA9IHRydWU7XG5cbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFlvdSBwYXNzZWQgaW4gXFxgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICApfVxcYCBhcyB0aGUgdmFsdWUgZm9yIFxcYGZvb1xcYCBidXQgXFxgZm9vXFxgIGNhbm5vdCBiZSBhbiBBcnJheWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKChwcm9wZXJ0eSBhcyBzdHJpbmcpIGluIHRoaXMubWVyZ2VkUHJvcGVydGllcyAmJiB0aGlzLm1lcmdlZFByb3BlcnRpZXNbcHJvcGVydHldICYmIHZhbHVlKSB7XG4gICAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXNbcHJvcGVydHldID0gbWVyZ2VNZXJnZWRQcm9wZXJ0aWVzKFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgKHRoaXMgYXMgYW55KS5tZXJnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5XVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB2YWx1ZSA9PT0gbnVsbCA/IHZhbHVlIDogdmFsdWUgfHwge307XG4gICAgICB0aGlzLm1lcmdlZFByb3BlcnRpZXNbcHJvcGVydHldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmVmZXJlbmNlVHlwZXMoKTogRGljdDxJbm5lclJlZmVyZW5jZUZhY3Rvcnk8YW55Pj4ge1xuICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZVR5cGVzO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlNZXRhZGF0YSgpOiBEaWN0PGFueT4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5TWV0YWRhdGE7XG4gIH1cblxuICByZXNldChwYXJlbnQ6IE9wdGlvbjxDbGFzc01ldGE+KSB7XG4gICAgdGhpcy5yZWZlcmVuY2VUeXBlcyA9IGRpY3Q8SW5uZXJSZWZlcmVuY2VGYWN0b3J5PGFueT4+KCk7XG4gICAgdGhpcy5wcm9wZXJ0eU1ldGFkYXRhID0gZGljdCgpO1xuICAgIHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcyA9IGRpY3Q8YW55W10+KCk7XG4gICAgdGhpcy5tZXJnZWRQcm9wZXJ0aWVzID0gZGljdDxPYmplY3Q+KCk7XG5cbiAgICBpZiAocGFyZW50KSB7XG4gICAgICB0aGlzLmhhc0NvbmNhdGVuYXRlZFByb3BlcnRpZXMgPSBwYXJlbnQuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcztcbiAgICAgIGZvciAobGV0IHByb3AgaW4gcGFyZW50LmNvbmNhdGVuYXRlZFByb3BlcnRpZXMpIHtcbiAgICAgICAgdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzW3Byb3BdID0gcGFyZW50LmNvbmNhdGVuYXRlZFByb3BlcnRpZXNbcHJvcF0uc2xpY2UoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5oYXNNZXJnZWRQcm9wZXJ0aWVzID0gcGFyZW50Lmhhc01lcmdlZFByb3BlcnRpZXM7XG4gICAgICBmb3IgKGxldCBwcm9wIGluIHBhcmVudC5tZXJnZWRQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHRoaXMubWVyZ2VkUHJvcGVydGllc1twcm9wXSA9IGFzc2lnbih7fSwgcGFyZW50Lm1lcmdlZFByb3BlcnRpZXNbcHJvcF0pO1xuICAgICAgfVxuXG4gICAgICBhc3NpZ24odGhpcy5yZWZlcmVuY2VUeXBlcywgcGFyZW50LnJlZmVyZW5jZVR5cGVzKTtcbiAgICAgIGFzc2lnbih0aGlzLnByb3BlcnR5TWV0YWRhdGEsIHBhcmVudC5wcm9wZXJ0eU1ldGFkYXRhKTtcbiAgICB9XG4gIH1cblxuICByZXNlYWwob2JqOiBPYmplY3QpIHtcbiAgICBsZXQgbWV0YSA9IE1ldGEuZm9yKG9iaik7XG4gICAgbGV0IGZyZXNoID0gbmV3IHRoaXMuSW5zdGFuY2VNZXRhQ29uc3RydWN0b3IhKG9iaiwge30pO1xuICAgIGxldCByZWZlcmVuY2VUeXBlcyA9IG1ldGEuZ2V0UmVmZXJlbmNlVHlwZXMoKTtcbiAgICBsZXQgc2xvdHMgPSBtZXRhLmdldFNsb3RzKCk7XG5cbiAgICB0dXJib2NoYXJnZShhc3NpZ24ocmVmZXJlbmNlVHlwZXMsIHRoaXMucmVmZXJlbmNlVHlwZXMpKTtcbiAgICB0dXJib2NoYXJnZShhc3NpZ24oc2xvdHMsIGZyZXNoLmdldFNsb3RzKCkpKTtcbiAgfVxuXG4gIHNlYWwoKSB7XG4gICAgbGV0IHJlZmVyZW5jZVR5cGVzOiBEaWN0PElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+PiA9IHR1cmJvY2hhcmdlKFxuICAgICAgYXNzaWduKHt9LCB0aGlzLnJlZmVyZW5jZVR5cGVzKVxuICAgICk7XG4gICAgdHVyYm9jaGFyZ2UodGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzKTtcbiAgICB0dXJib2NoYXJnZSh0aGlzLm1lcmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKCF0aGlzLmhhc01lcmdlZFByb3BlcnRpZXMgJiYgIXRoaXMuaGFzQ29uY2F0ZW5hdGVkUHJvcGVydGllcykge1xuICAgICAgdGhpcy5pbml0ID0gZnVuY3Rpb24oKSB7fTtcbiAgICB9XG5cbiAgICBsZXQgc2xvdHMgPSB0aGlzLnNsb3RzO1xuXG4gICAgY2xhc3MgU2xvdHMge1xuICAgICAgW2luZGV4OiBzdHJpbmddOiB1bmtub3duO1xuXG4gICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc2xvdHMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICB0aGlzW25hbWVdID0gRU1QVFlfQ0FDSEU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuSW5zdGFuY2VNZXRhQ29uc3RydWN0b3IgPSBjbGFzcyBleHRlbmRzIFNlYWxlZE1ldGEge1xuICAgICAgcHJvdGVjdGVkIHNsb3RzOiBTbG90cyA9IG5ldyBTbG90cygpO1xuICAgICAgcHVibGljIHJlZmVyZW5jZVR5cGVzOiBEaWN0PElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+PiA9IHJlZmVyZW5jZVR5cGVzO1xuXG4gICAgICBnZXRSZWZlcmVuY2VUeXBlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlVHlwZXM7XG4gICAgICB9XG5cbiAgICAgIHJlZmVyZW5jZVR5cGVGb3IocHJvcGVydHk6IHN0cmluZyk6IElubmVyUmVmZXJlbmNlRmFjdG9yeTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlVHlwZXNbcHJvcGVydHldIHx8IFByb3BlcnR5UmVmZXJlbmNlO1xuICAgICAgfVxuXG4gICAgICBnZXRTbG90cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2xvdHM7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHR1cmJvY2hhcmdlKHRoaXMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlTWVyZ2VkUHJvcGVydGllcyhhdHRyczogRGljdCwgcGFyZW50OiBEaWN0KSB7XG4gIGxldCBtZXJnZWQgPSBhc3NpZ24oe30sIHBhcmVudCk7XG5cbiAgZm9yIChsZXQgcHJvcCBpbiBhdHRycykge1xuICAgIGlmIChwcm9wIGluIHBhcmVudCAmJiB0eXBlb2YgcGFyZW50W3Byb3BdID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBhdHRyc1twcm9wXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbGV0IHdyYXBwZWQgPSB3cmFwTWV0aG9kKHBhcmVudCwgcHJvcCwgYXR0cnNbcHJvcF0gYXMgYW55KTtcbiAgICAgIG1lcmdlZFtwcm9wXSA9IHdyYXBwZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lcmdlZFtwcm9wXSA9IGF0dHJzW3Byb3BdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBJbnN0YW5jZU1ldGEgZXh0ZW5kcyBDbGFzc01ldGEge1xuICBwdWJsaWMgW0NMQVNTX01FVEFdOiBDbGFzc01ldGEgPSBDbGFzc01ldGEuZnJvbVBhcmVudChudWxsKTtcblxuICBzdGF0aWMgZnJvbVBhcmVudChwYXJlbnQ6IE9wdGlvbjxJbnN0YW5jZU1ldGE+KTogSW5zdGFuY2VNZXRhIHtcbiAgICByZXR1cm4gc3VwZXIuZnJvbVBhcmVudChwYXJlbnQpIGFzIEluc3RhbmNlTWV0YTtcbiAgfVxuXG4gIHJlc2V0KHBhcmVudDogSW5zdGFuY2VNZXRhKSB7XG4gICAgc3VwZXIucmVzZXQocGFyZW50KTtcbiAgICBpZiAocGFyZW50KSB0aGlzW0NMQVNTX01FVEFdLnJlc2V0KHBhcmVudFtDTEFTU19NRVRBXSk7XG4gIH1cblxuICBzZWFsKCkge1xuICAgIHN1cGVyLnNlYWwoKTtcbiAgICB0aGlzW0NMQVNTX01FVEFdLnNlYWwoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHbGltbWVyT2JqZWN0IHtcbiAgW2luZGV4OiBzdHJpbmddOiB1bmtub3duO1xuXG4gIHN0YXRpYyBbQ0xBU1NfTUVUQV06IEluc3RhbmNlTWV0YSA9IEluc3RhbmNlTWV0YS5mcm9tUGFyZW50KG51bGwpO1xuICBzdGF0aWMgaXNDbGFzcyA9IHRydWU7XG5cbiAgc3RhdGljIGV4dGVuZCgpOiBHbGltbWVyT2JqZWN0RmFjdG9yeTxhbnk+ICYgdHlwZW9mIEdsaW1tZXJPYmplY3Q7XG4gIHN0YXRpYyBleHRlbmQ8VD4oZXh0ZW5zaW9uOiBUKTogR2xpbW1lck9iamVjdEZhY3Rvcnk8VD4gJiB0eXBlb2YgR2xpbW1lck9iamVjdDtcbiAgc3RhdGljIGV4dGVuZCguLi5leHRlbnNpb25zOiBPYmplY3RbXSk6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4gJiB0eXBlb2YgR2xpbW1lck9iamVjdDtcblxuICBzdGF0aWMgZXh0ZW5kKHRoaXM6IEdsaW1tZXJPYmplY3RGYWN0b3J5PGFueT4sIC4uLmV4dGVuc2lvbnM6IGFueVtdKSB7XG4gICAgcmV0dXJuIGV4dGVuZENsYXNzKHRoaXMsIC4uLmV4dGVuc2lvbnMpO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZShhdHRycz86IERpY3QgfCBudWxsKTogR2xpbW1lck9iamVjdCB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyByZW9wZW48VT4oZXh0ZW5zaW9uczogVSk6IHZvaWQge1xuICAgIHRvTWl4aW4oZXh0ZW5zaW9ucykuZXh0ZW5kUHJvdG90eXBlKHRoaXMgYXMgYW55KTtcbiAgICB0aGlzW0NMQVNTX01FVEFdLnNlYWwoKTtcblxuICAgIHJlbGlua1N1YmNsYXNzZXModGhpcyBhcyBhbnkpO1xuICB9XG5cbiAgc3RhdGljIHJlb3BlbkNsYXNzPFU+KGV4dGVuc2lvbnM6IFUpOiB2b2lkIHtcbiAgICB0b01peGluKGV4dGVuc2lvbnMpLmV4dGVuZFN0YXRpYyh0aGlzIGFzIGFueSk7XG4gICAgdGhpc1tDTEFTU19NRVRBXS5zZWFsKCk7XG4gIH1cblxuICBzdGF0aWMgbWV0YUZvclByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiBPYmplY3Qge1xuICAgIGxldCB2YWx1ZSA9IHRoaXNbQ0xBU1NfTUVUQV0ubWV0YWRhdGFGb3JQcm9wZXJ0eShwcm9wZXJ0eSk7XG4gICAgaWYgKCF2YWx1ZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYG1ldGFGb3JQcm9wZXJ0eSgpIGNvdWxkIG5vdCBmaW5kIGEgY29tcHV0ZWQgcHJvcGVydHkgd2l0aCBrZXkgJyR7cHJvcGVydHl9Jy5gXG4gICAgICApO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHN0YXRpYyBlYWNoQ29tcHV0ZWRQcm9wZXJ0eShjYWxsYmFjazogKHM6IHN0cmluZywgbzogT2JqZWN0KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgbGV0IG1ldGFkYXRhID0gdGhpc1tDTEFTU19NRVRBXS5nZXRQcm9wZXJ0eU1ldGFkYXRhKCk7XG4gICAgaWYgKCFtZXRhZGF0YSkgcmV0dXJuO1xuXG4gICAgZm9yIChsZXQgcHJvcCBpbiBtZXRhZGF0YSkge1xuICAgICAgY2FsbGJhY2socHJvcCwgbWV0YWRhdGFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIF9zdXBlciA9IFJPT1Q7XG4gIF9tZXRhID0gbnVsbDtcbiAgX2d1aWQhOiBudW1iZXI7IC8vIFNldCBieSBpbml0aWFsaXplR3VpZCh0aGlzKSBpbiBjb25zdHJ1Y3RvclxuXG4gIGluaXQoKSB7fVxuXG4gIGNvbnN0cnVjdG9yKGF0dHJzPzogRGljdCB8IG51bGwpIHtcbiAgICBpZiAoYXR0cnMpIGFzc2lnbih0aGlzLCBhdHRycyk7XG4gICAgKHRoaXMuY29uc3RydWN0b3IgYXMgdHlwZW9mIEdsaW1tZXJPYmplY3QpW0NMQVNTX01FVEFdLmluaXQodGhpcywgYXR0cnMgfHwgbnVsbCk7XG4gICAgdGhpcy5fc3VwZXIgPSBST09UO1xuICAgIGluaXRpYWxpemVHdWlkKHRoaXMpO1xuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgZ2V0KGtleTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpc1trZXldO1xuICB9XG5cbiAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpc1trZXldID0gdmFsdWU7XG4gICAgYnVtcCgpO1xuICB9XG5cbiAgc2V0UHJvcGVydGllcyhhdHRyczogT2JqZWN0KSB7XG4gICAgYXNzaWduKHRoaXMsIGF0dHJzKTtcbiAgICBidW1wKCk7XG4gIH1cblxuICBkZXN0cm95KCkge31cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
var HAS_SUPER_PATTERN = /\.(_super|call\(this|apply\(this)/;
export var checkHasSuper = function () {
var sourceAvailable = function () {
return this;
}.toString().indexOf('return this') > -1;
if (sourceAvailable) {
return function checkHasSuper(func) {
return HAS_SUPER_PATTERN.test(func.toString());
};
}
return function checkHasSuper() {
return true;
var sourceAvailable = function () {
return this;
}.toString().indexOf('return this') > -1;
if (sourceAvailable) {
return function checkHasSuper(func) {
return HAS_SUPER_PATTERN.test(func.toString());
};
}
return function checkHasSuper() {
return true;
};
}();

@@ -18,7 +20,8 @@ export function ROOT() {}

export function hasSuper(func) {
if (func['__hasSuper'] === undefined) {
func['__hasSuper'] = checkHasSuper(func);
}
return func['__hasSuper'];
if (func['__hasSuper'] === undefined) {
func['__hasSuper'] = checkHasSuper(func);
}
return func['__hasSuper'];
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsSUFBTSxvQkFBTixtQ0FBQTtBQUVBLE9BQU8sSUFBTSxnQkFBaUIsWUFBQTtBQUM1QixRQUFJLGtCQUNGLFlBQUE7QUFDRSxlQUFBLElBQUE7QUFERixLQUFBLENBQUEsUUFBQSxHQUFBLE9BQUEsQ0FBQSxhQUFBLElBSTRCLENBTDlCLENBQUE7QUFPQSxRQUFBLGVBQUEsRUFBcUI7QUFDbkIsZUFBTyxTQUFBLGFBQUEsQ0FBQSxJQUFBLEVBQXFDO0FBQzFDLG1CQUFPLGtCQUFBLElBQUEsQ0FBdUIsS0FBOUIsUUFBOEIsRUFBdkIsQ0FBUDtBQURGLFNBQUE7QUFHRDtBQUVELFdBQU8sU0FBQSxhQUFBLEdBQXNCO0FBQzNCLGVBQUEsSUFBQTtBQURGLEtBQUE7QUFkSyxDQUF1QixFQUF2QjtBQW1CUCxPQUFNLFNBQUEsSUFBQSxHQUE4QixDQUFJO0FBQ3ZDLEtBQUEsVUFBQSxHQUFBLEtBQUE7QUFFRCxPQUFNLFNBQUEsUUFBQSxDQUFBLElBQUEsRUFBd0M7QUFDNUMsUUFBSSxLQUFBLFlBQUEsTUFBSixTQUFBLEVBQXNDO0FBQ3BDLGFBQUEsWUFBQSxJQUFxQixjQUFyQixJQUFxQixDQUFyQjtBQUNEO0FBQ0QsV0FBTyxLQUFQLFlBQU8sQ0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGljdCB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuXG5jb25zdCBIQVNfU1VQRVJfUEFUVEVSTiA9IC9cXC4oX3N1cGVyfGNhbGxcXCh0aGlzfGFwcGx5XFwodGhpcykvO1xuXG5leHBvcnQgY29uc3QgY2hlY2tIYXNTdXBlciA9IChmdW5jdGlvbigpIHtcbiAgbGV0IHNvdXJjZUF2YWlsYWJsZSA9XG4gICAgZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLmluZGV4T2YoJ3JldHVybiB0aGlzJykgPiAtMTtcblxuICBpZiAoc291cmNlQXZhaWxhYmxlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNoZWNrSGFzU3VwZXIoZnVuYzogRnVuY3Rpb24pIHtcbiAgICAgIHJldHVybiBIQVNfU1VQRVJfUEFUVEVSTi50ZXN0KGZ1bmMudG9TdHJpbmcoKSk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiBjaGVja0hhc1N1cGVyKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xufSkoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIFJPT1QoLi4uX2FyZ3M6IGFueVtdKSB7fVxuKFJPT1QgYXMgYW55KS5fX2hhc1N1cGVyID0gZmFsc2U7XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNTdXBlcihmdW5jOiBGdW5jdGlvbiAmIERpY3QpIHtcbiAgaWYgKGZ1bmNbJ19faGFzU3VwZXInXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZnVuY1snX19oYXNTdXBlciddID0gY2hlY2tIYXNTdXBlcihmdW5jKTtcbiAgfVxuICByZXR1cm4gZnVuY1snX19oYXNTdXBlciddO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL29iamVjdC9saWIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsSUFBTSxpQkFBaUIsR0FBdkIsbUNBQUE7QUFFQSxPQUFPLElBQU0sYUFBYSxHQUFJLFlBQUE7QUFDNUIsTUFBSSxlQUFlLEdBQ2pCLFlBQUE7QUFDRSxXQUFBLElBQUE7QUFERixHQUFBLENBQUEsUUFBQSxHQUFBLE9BQUEsQ0FBQSxhQUFBLElBSTRCLENBTDlCLENBQUE7O0FBT0EsTUFBQSxlQUFBLEVBQXFCO0FBQ25CLFdBQU8sU0FBQSxhQUFBLENBQUEsSUFBQSxFQUFxQztBQUMxQyxhQUFPLGlCQUFpQixDQUFqQixJQUFBLENBQXVCLElBQUksQ0FBbEMsUUFBOEIsRUFBdkIsQ0FBUDtBQURGLEtBQUE7QUFHRDs7QUFFRCxTQUFPLFNBQUEsYUFBQSxHQUFzQjtBQUMzQixXQUFBLElBQUE7QUFERixHQUFBO0FBZEssQ0FBdUIsRUFBdkI7QUFtQlAsT0FBTSxTQUFBLElBQUEsR0FBOEIsQ0FBSTtBQUN2QyxJQUFZLENBQVosVUFBQSxHQUFBLEtBQUE7QUFFRCxPQUFNLFNBQUEsUUFBQSxDQUFBLElBQUEsRUFBd0M7QUFDNUMsTUFBSSxJQUFJLENBQUosWUFBSSxDQUFKLEtBQUosU0FBQSxFQUFzQztBQUNwQyxJQUFBLElBQUksQ0FBSixZQUFJLENBQUosR0FBcUIsYUFBYSxDQUFsQyxJQUFrQyxDQUFsQztBQUNEOztBQUNELFNBQU8sSUFBSSxDQUFYLFlBQVcsQ0FBWDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGljdCB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuXG5jb25zdCBIQVNfU1VQRVJfUEFUVEVSTiA9IC9cXC4oX3N1cGVyfGNhbGxcXCh0aGlzfGFwcGx5XFwodGhpcykvO1xuXG5leHBvcnQgY29uc3QgY2hlY2tIYXNTdXBlciA9IChmdW5jdGlvbigpIHtcbiAgbGV0IHNvdXJjZUF2YWlsYWJsZSA9XG4gICAgZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLmluZGV4T2YoJ3JldHVybiB0aGlzJykgPiAtMTtcblxuICBpZiAoc291cmNlQXZhaWxhYmxlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNoZWNrSGFzU3VwZXIoZnVuYzogRnVuY3Rpb24pIHtcbiAgICAgIHJldHVybiBIQVNfU1VQRVJfUEFUVEVSTi50ZXN0KGZ1bmMudG9TdHJpbmcoKSk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiBjaGVja0hhc1N1cGVyKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xufSkoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIFJPT1QoLi4uX2FyZ3M6IGFueVtdKSB7fVxuKFJPT1QgYXMgYW55KS5fX2hhc1N1cGVyID0gZmFsc2U7XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNTdXBlcihmdW5jOiBGdW5jdGlvbiAmIERpY3QpIHtcbiAgaWYgKGZ1bmNbJ19faGFzU3VwZXInXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZnVuY1snX19oYXNTdXBlciddID0gY2hlY2tIYXNTdXBlcihmdW5jKTtcbiAgfVxuICByZXR1cm4gZnVuY1snX19oYXNTdXBlciddO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
{
"name": "@glimmer/object",
"version": "0.47.9",
"version": "0.48.0",
"repository": "https://github.com/glimmerjs/glimmer-vm/tree/master/packages/@glimmer/object",
"dependencies": {
"@glimmer/interfaces": "^0.47.9",
"@glimmer/object-reference": "^0.47.9",
"@glimmer/reference": "^0.47.9",
"@glimmer/validator": "^0.47.9",
"@glimmer/util": "^0.47.9"
"@glimmer/interfaces": "^0.48.0",
"@glimmer/object-reference": "^0.48.0",
"@glimmer/reference": "^0.48.0",
"@glimmer/validator": "^0.48.0",
"@glimmer/util": "^0.48.0"
},
"devDependencies": {
"@types/qunit": "^2.0.31"
"@types/qunit": "^2.9.0"
},

@@ -15,0 +15,0 @@ "main": "dist/commonjs/es5/index.js",

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc