Socket
Socket
Sign inDemoInstall

@glimmer/validator

Package Overview
Dependencies
Maintainers
11
Versions
143
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@glimmer/validator - npm Package Compare versions

Comparing version 0.46.0 to 0.47.0

77

dist/commonjs/es2017/lib/validators.js

@@ -47,8 +47,3 @@ 'use strict';

*/
function value(tag) {
if (_env.DEBUG) {
// compute to cache the latest value, which will prevent us from doing
// invalid updates later on.
tag[COMPUTE]();
}
function value(_tag) {
return $REVISION;

@@ -67,17 +62,4 @@ }

function validate(tag, snapshot) {
if (_env.DEBUG) {
IS_VALIDATING = true;
}
let isValid = snapshot >= tag[COMPUTE]();
if (_env.DEBUG) {
IS_VALIDATING = false;
if (isValid) {
// compute to cache the latest value, which will prevent us from doing
// invalid updates later on.
tag[COMPUTE]();
}
}
return isValid;
return snapshot >= tag[COMPUTE]();
}
let IS_VALIDATING;
const TYPE = (0, _utils.symbol)('TAG_TYPE');

@@ -94,4 +76,5 @@ let ALLOW_CYCLES = exports.ALLOW_CYCLES = undefined;

this.isUpdating = false;
this.subtags = null;
this.subtag = null;
this.subtags = null;
this.subtagBufferCache = null;
this[TYPE] = type;

@@ -108,19 +91,14 @@ }

this.isUpdating = true;
if (_env.DEBUG) {
// In DEBUG, we don't cache while validating only, because it is valid
// update a tag between calling `validate()` and `value()`. Once you
// call `value()` on a tag, its revision is effectively locked in, and
// if you attempt to update it to a tag that is more recent it could
// break assumptions in our system. This is why the assertion exists in
// the static `update()` method below.
if (!IS_VALIDATING) {
this.lastChecked = $REVISION;
}
} else {
this.lastChecked = $REVISION;
}
this.lastChecked = $REVISION;
try {
let { subtags, subtag, revision } = this;
let { subtags, subtag, subtagBufferCache, lastValue, revision } = this;
if (subtag !== null) {
revision = Math.max(revision, subtag[COMPUTE]());
let subtagValue = subtag[COMPUTE]();
if (subtagValue === subtagBufferCache) {
revision = Math.max(revision, lastValue);
} else {
// Clear the temporary buffer cache
this.subtagBufferCache = null;
revision = Math.max(revision, subtagValue);
}
}

@@ -140,3 +118,3 @@ if (subtags !== null) {

}
static update(_tag, subtag) {
static update(_tag, _subtag) {
if (_env.DEBUG && _tag[TYPE] !== 1 /* Updatable */) {

@@ -147,8 +125,25 @@ throw new Error('Attempted to update a tag that was not updatable');

let tag = _tag;
let subtag = _subtag;
if (subtag === CONSTANT_TAG) {
tag.subtag = null;
} else {
if (_env.DEBUG && tag.lastChecked === $REVISION && subtag[COMPUTE]() > tag.lastValue) {
throw new Error('BUG: attempted to update a tag with a tag that has a more recent revision as its value');
}
// There are two different possibilities when updating a subtag:
//
// 1. subtag[COMPUTE]() <= tag[COMPUTE]();
// 2. subtag[COMPUTE]() > tag[COMPUTE]();
//
// The first possibility is completely fine within our caching model, but
// the second possibility presents a problem. If the parent tag has
// already been read, then it's value is cached and will not update to
// reflect the subtag's greater value. Next time the cache is busted, the
// subtag's value _will_ be read, and it's value will be _greater_ than
// the saved snapshot of the parent, causing the resulting calculation to
// be rerun erroneously.
//
// In order to prevent this, when we first update to a new subtag we store
// its computed value, and then check against that computed value on
// subsequent updates. If its value hasn't changed, then we return the
// parent's previous value. Once the subtag changes for the first time,
// we clear the cache and everything is finally in sync with the parent.
tag.subtagBufferCache = subtag[COMPUTE]();
tag.subtag = subtag;

@@ -222,2 +217,2 @@ }

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7UUFjTSxJLEdBQUEsSTtRQXNDQSxLLEdBQUEsSztRQW9CQSxRLEdBQUEsUTtRQWdMQSxTLEdBQUEsUztRQUlBLGtCLEdBQUEsa0I7UUFRQSxPLEdBQUEsTztRQUlBLFUsR0FBQSxVO1FBMEJBLE8sR0FBQSxPO1FBWUEsbUIsR0FBQSxtQjs7OztBQTdTTjs7QUFDQTs7QUFNTyxNQUFNLDhCQUFOLENBQUE7QUFDQSxNQUFNLDRCQUFOLENBQUE7QUFDQSxNQUFNLDhCQUFOLGdCQUFBLEMsQ0FBNkM7QUFFcEQsSUFBSSxZQUFKLE9BQUE7QUFFTSxTQUFBLElBQUEsR0FBYztBQUNsQjtBQUNEO0FBRUQ7QUFFTyxNQUFNLDRCQUF5QixtQkFBL0IsYUFBK0IsQ0FBL0I7QUFnQlA7QUFFQTs7Ozs7Ozs7Ozs7Ozs7QUFjTSxTQUFBLEtBQUEsQ0FBQSxHQUFBLEVBQXdCO0FBQzVCLFFBQUEsVUFBQSxFQUFXO0FBQ1Q7QUFDQTtBQUNBLFlBQUEsT0FBQTtBQUNEO0FBRUQsV0FBQSxTQUFBO0FBQ0Q7QUFFRDs7Ozs7Ozs7OztBQVVNLFNBQUEsUUFBQSxDQUFBLEdBQUEsRUFBQSxRQUFBLEVBQStDO0FBQ25ELFFBQUEsVUFBQSxFQUFXO0FBQ1Qsd0JBQUEsSUFBQTtBQUNEO0FBRUQsUUFBSSxVQUFVLFlBQVksSUFBMUIsT0FBMEIsR0FBMUI7QUFFQSxRQUFBLFVBQUEsRUFBVztBQUNULHdCQUFBLEtBQUE7QUFFQSxZQUFBLE9BQUEsRUFBYTtBQUNYO0FBQ0E7QUFDQSxnQkFBQSxPQUFBO0FBQ0Q7QUFDRjtBQUVELFdBQUEsT0FBQTtBQUNEO0FBRUQsSUFBQSxhQUFBO0FBaUJBLE1BQU0sT0FBc0IsbUJBQTVCLFVBQTRCLENBQTVCO0FBRU8sSUFBQSwrQ0FBQTtBQUVQLElBQUEsVUFBQSxFQUFXO0FBQ1QsWUFISyxZ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QUFDRSxhQUFBLENBQUE7QUFDRSxtQkFBQSxZQUFBO0FBQ0YsYUFBQSxDQUFBO0FBQ0UsbUJBQU8sS0FBUCxDQUFPLENBQVA7QUFDRjtBQUNFLGdCQUFJLE1BQU0sSUFBQSxrQkFBQSxDQUFBLENBQUEsQ0FBVixnQkFBVSxDQUFWO0FBQ0MsZ0JBQUEsT0FBQSxHQUFBLElBQUE7QUFDRCxtQkFBQSxHQUFBO0FBUko7QUFVRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERFQlVHIH0gZnJvbSAnQGdsaW1tZXIvZW52JztcbmltcG9ydCB7IFVuaW9uVG9JbnRlcnNlY3Rpb24sIHN5bWJvbCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgYXNzZXJ0VGFnTm90Q29uc3VtZWQgfSBmcm9tICcuL2RlYnVnJztcblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgdHlwZSBSZXZpc2lvbiA9IG51bWJlcjtcblxuZXhwb3J0IGNvbnN0IENPTlNUQU5UOiBSZXZpc2lvbiA9IDA7XG5leHBvcnQgY29uc3QgSU5JVElBTDogUmV2aXNpb24gPSAxO1xuZXhwb3J0IGNvbnN0IFZPTEFUSUxFOiBSZXZpc2lvbiA9IDkwMDcxOTkyNTQ3NDA5OTE7IC8vIE1BWF9JTlRcblxubGV0ICRSRVZJU0lPTiA9IElOSVRJQUw7XG5cbmV4cG9ydCBmdW5jdGlvbiBidW1wKCkge1xuICAkUkVWSVNJT04rKztcbn1cblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgY29uc3QgQ09NUFVURTogdW5pcXVlIHN5bWJvbCA9IHN5bWJvbCgnVEFHX0NPTVBVVEUnKTtcblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUYWc8VD4ge1xuICBbQ09NUFVURV0oKTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWcgZXh0ZW5kcyBFbnRpdHlUYWc8UmV2aXNpb24+IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VGFnZ2VkPFQ+IHtcbiAgdGFnOiBFbnRpdHlUYWc8VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFnZ2VkIHtcbiAgdGFnOiBUYWc7XG59XG5cbi8vLy8vLy8vLy9cblxuLyoqXG4gKiBgdmFsdWVgIHJlY2VpdmVzIGEgdGFnIGFuZCByZXR1cm5zIGFuIG9wYXF1ZSBSZXZpc2lvbiBiYXNlZCBvbiB0aGF0IHRhZy4gVGhpc1xuICogc25hcHNob3QgY2FuIHRoZW4gbGF0ZXIgYmUgcGFzc2VkIHRvIGB2YWxpZGF0ZWAgd2l0aCB0aGUgc2FtZSB0YWcgdG9cbiAqIGRldGVybWluZSBpZiB0aGUgdGFnIGhhcyBjaGFuZ2VkIGF0IGFsbCBzaW5jZSB0aGUgdGltZSB0aGF0IGB2YWx1ZWAgd2FzXG4gKiBjYWxsZWQuXG4gKlxuICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gcmV0dXJucyB0aGUgZ2xvYmFsIHJldmlzaW9uIGNvdW50IGRpcmVjdGx5IGZvclxuICogcGVyZm9ybWFuY2UgcmVhc29ucy4gVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGFuZCBzaG91bGQgbm90IGJlXG4gKiByZWxpZWQgb24gZGlyZWN0bHkgYnkgdXNlcnMgb2YgdGhlc2UgQVBJcy4gSW5zdGVhZCwgUmV2aXNpb25zIHNob3VsZCBiZVxuICogdHJlYXRlZCBhcyBpZiB0aGV5IGFyZSBvcGFxdWUvdW5rbm93biwgYW5kIHNob3VsZCBvbmx5IGJlIGludGVyYWN0ZWQgd2l0aCB2aWFcbiAqIHRoZSBgdmFsdWVgL2B2YWxpZGF0ZWAgQVBJLlxuICpcbiAqIEBwYXJhbSB0YWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlKHRhZzogVGFnKTogUmV2aXNpb24ge1xuICBpZiAoREVCVUcpIHtcbiAgICAvLyBjb21wdXRlIHRvIGNhY2hlIHRoZSBsYXRlc3QgdmFsdWUsIHdoaWNoIHdpbGwgcHJldmVudCB1cyBmcm9tIGRvaW5nXG4gICAgLy8gaW52YWxpZCB1cGRhdGVzIGxhdGVyIG9uLlxuICAgIHRhZ1tDT01QVVRFXSgpO1xuICB9XG5cbiAgcmV0dXJuICRSRVZJU0lPTjtcbn1cblxuLyoqXG4gKiBgdmFsaWRhdGVgIHJlY2VpdmVzIGEgdGFnIGFuZCBhIHNuYXBzaG90IGZyb20gYSBwcmV2aW91cyBjYWxsIHRvIGB2YWx1ZWAgd2l0aFxuICogdGhlIHNhbWUgdGFnLCBhbmQgZGV0ZXJtaW5lcyBpZiB0aGUgdGFnIGlzIHN0aWxsIHZhbGlkIGNvbXBhcmVkIHRvIHRoZVxuICogc25hcHNob3QuIElmIHRoZSB0YWcncyBzdGF0ZSBoYXMgY2hhbmdlZCBhdCBhbGwgc2luY2UgdGhlbiwgYHZhbGlkYXRlYCB3aWxsXG4gKiByZXR1cm4gZmFsc2UsIG90aGVyd2lzZSBpdCB3aWxsIHJldHVybiB0cnVlLiBUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFcbiAqIGNhbGN1bGF0aW9uIHJlbGF0ZWQgdG8gdGhlIHRhZ3Mgc2hvdWxkIGJlIHJlcnVuLlxuICpcbiAqIEBwYXJhbSB0YWdcbiAqIEBwYXJhbSBzbmFwc2hvdFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGUodGFnOiBUYWcsIHNuYXBzaG90OiBSZXZpc2lvbikge1xuICBpZiAoREVCVUcpIHtcbiAgICBJU19WQUxJREFUSU5HID0gdHJ1ZTtcbiAgfVxuXG4gIGxldCBpc1ZhbGlkID0gc25hcHNob3QgPj0gdGFnW0NPTVBVVEVdKCk7XG5cbiAgaWYgKERFQlVHKSB7XG4gICAgSVNfVkFMSURBVElORyA9IGZhbHNlO1xuXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIC8vIGNvbXB1dGUgdG8gY2FjaGUgdGhlIGxhdGVzdCB2YWx1ZSwgd2hpY2ggd2lsbCBwcmV2ZW50IHVzIGZyb20gZG9pbmdcbiAgICAgIC8vIGludmFsaWQgdXBkYXRlcyBsYXRlciBvbi5cbiAgICAgIHRhZ1tDT01QVVRFXSgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpc1ZhbGlkO1xufVxuXG5sZXQgSVNfVkFMSURBVElORzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuLy8vLy8vLy8vL1xuXG4vKipcbiAqIFRoaXMgZW51bSByZXByZXNlbnRzIGFsbCBvZiB0aGUgcG9zc2libGUgdGFnIHR5cGVzIGZvciB0aGUgbW9ub21vcnBoaWMgdGFnIGNsYXNzLlxuICogT3RoZXIgY3VzdG9tIHRhZyBjbGFzc2VzIGNhbiBleGlzdCwgc3VjaCBhcyBDdXJyZW50VGFnIGFuZCBWb2xhdGlsZVRhZywgYnV0IGZvclxuICogcGVyZm9ybWFuY2UgcmVhc29ucywgYW55IHR5cGUgb2YgdGFnIHRoYXQgaXMgbWVhbnQgdG8gYmUgdXNlZCBmcmVxdWVudGx5IHNob3VsZFxuICogYmUgYWRkZWQgdG8gdGhlIG1vbm9tb3JwaGljIHRhZy5cbiAqL1xuY29uc3QgZW51bSBNb25vbW9ycGhpY1RhZ1R5cGVzIHtcbiAgRGlydHlhYmxlLFxuICBVcGRhdGFibGUsXG4gIENvbWJpbmF0b3IsXG4gIENvbnN0YW50LFxufVxuXG5jb25zdCBUWVBFOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdUQUdfVFlQRScpO1xuXG5leHBvcnQgbGV0IEFMTE9XX0NZQ0xFUzogV2Vha01hcDxUYWcsIGJvb2xlYW4+IHwgdW5kZWZpbmVkO1xuXG5pZiAoREVCVUcpIHtcbiAgQUxMT1dfQ1lDTEVTID0gbmV3IFdlYWtNYXAoKTtcbn1cblxuaW50ZXJmYWNlIE1vbm9tb3JwaGljVGFnQmFzZTxUIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdUeXBlcz4gZXh0ZW5kcyBUYWcge1xuICBbVFlQRV06IFQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlydHlhYmxlVGFnIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdCYXNlPE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlPiB7fVxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGFibGVUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGU+IHt9XG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmF0b3JUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5Db21iaW5hdG9yPiB7fVxuZXhwb3J0IGludGVyZmFjZSBDb25zdGFudFRhZyBleHRlbmRzIE1vbm9tb3JwaGljVGFnQmFzZTxNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbnN0YW50PiB7fVxuXG5pbnRlcmZhY2UgTW9ub21vcnBoaWNUYWdNYXBwaW5nIHtcbiAgW01vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlXTogRGlydHlhYmxlVGFnO1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGVdOiBVcGRhdGFibGVUYWc7XG4gIFtNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbWJpbmF0b3JdOiBDb21iaW5hdG9yVGFnO1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5Db25zdGFudF06IENvbnN0YW50VGFnO1xufVxuXG50eXBlIE1vbm9tb3JwaGljVGFnID0gVW5pb25Ub0ludGVyc2VjdGlvbjxNb25vbW9ycGhpY1RhZ01hcHBpbmdbTW9ub21vcnBoaWNUYWdUeXBlc10+O1xudHlwZSBNb25vbW9ycGhpY1RhZ1R5cGUgPSBVbmlvblRvSW50ZXJzZWN0aW9uPE1vbm9tb3JwaGljVGFnVHlwZXM+O1xuXG5jbGFzcyBNb25vbW9ycGhpY1RhZ0ltcGwgaW1wbGVtZW50cyBNb25vbW9ycGhpY1RhZyB7XG4gIHByaXZhdGUgcmV2aXNpb24gPSBJTklUSUFMO1xuICBwcml2YXRlIGxhc3RDaGVja2VkID0gSU5JVElBTDtcbiAgcHJpdmF0ZSBsYXN0VmFsdWUgPSBJTklUSUFMO1xuXG4gIHByaXZhdGUgaXNVcGRhdGluZyA9IGZhbHNlO1xuICBwcml2YXRlIHN1YnRhZzogVGFnIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3VidGFnczogVGFnW10gfCBudWxsID0gbnVsbDtcblxuICBbVFlQRV06IE1vbm9tb3JwaGljVGFnVHlwZTtcblxuICBjb25zdHJ1Y3Rvcih0eXBlOiBNb25vbW9ycGhpY1RhZ1R5cGVzKSB7XG4gICAgdGhpc1tUWVBFXSA9IHR5cGUgYXMgTW9ub21vcnBoaWNUYWdUeXBlO1xuICB9XG5cbiAgW0NPTVBVVEVdKCk6IFJldmlzaW9uIHtcbiAgICBsZXQgeyBsYXN0Q2hlY2tlZCB9ID0gdGhpcztcblxuICAgIGlmICh0aGlzLmlzVXBkYXRpbmcgPT09IHRydWUpIHtcbiAgICAgIGlmIChERUJVRyAmJiAhQUxMT1dfQ1lDTEVTIS5oYXModGhpcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDeWNsZXMgaW4gdGFncyBhcmUgbm90IGFsbG93ZWQnKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sYXN0Q2hlY2tlZCA9ICsrJFJFVklTSU9OO1xuICAgIH0gZWxzZSBpZiAobGFzdENoZWNrZWQgIT09ICRSRVZJU0lPTikge1xuICAgICAgdGhpcy5pc1VwZGF0aW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKERFQlVHKSB7XG4gICAgICAgIC8vIEluIERFQlVHLCB3ZSBkb24ndCBjYWNoZSB3aGlsZSB2YWxpZGF0aW5nIG9ubHksIGJlY2F1c2UgaXQgaXMgdmFsaWRcbiAgICAgICAgLy8gdXBkYXRlIGEgdGFnIGJldHdlZW4gY2FsbGluZyBgdmFsaWRhdGUoKWAgYW5kIGB2YWx1ZSgpYC4gT25jZSB5b3VcbiAgICAgICAgLy8gY2FsbCBgdmFsdWUoKWAgb24gYSB0YWcsIGl0cyByZXZpc2lvbiBpcyBlZmZlY3RpdmVseSBsb2NrZWQgaW4sIGFuZFxuICAgICAgICAvLyBpZiB5b3UgYXR0ZW1wdCB0byB1cGRhdGUgaXQgdG8gYSB0YWcgdGhhdCBpcyBtb3JlIHJlY2VudCBpdCBjb3VsZFxuICAgICAgICAvLyBicmVhayBhc3N1bXB0aW9ucyBpbiBvdXIgc3lzdGVtLiBUaGlzIGlzIHdoeSB0aGUgYXNzZXJ0aW9uIGV4aXN0cyBpblxuICAgICAgICAvLyB0aGUgc3RhdGljIGB1cGRhdGUoKWAgbWV0aG9kIGJlbG93LlxuICAgICAgICBpZiAoIUlTX1ZBTElEQVRJTkcpIHtcbiAgICAgICAgICB0aGlzLmxhc3RDaGVja2VkID0gJFJFVklTSU9OO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxhc3RDaGVja2VkID0gJFJFVklTSU9OO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBsZXQgeyBzdWJ0YWdzLCBzdWJ0YWcsIHJldmlzaW9uIH0gPSB0aGlzO1xuXG4gICAgICAgIGlmIChzdWJ0YWcgIT09IG51bGwpIHtcbiAgICAgICAgICByZXZpc2lvbiA9IE1hdGgubWF4KHJldmlzaW9uLCBzdWJ0YWdbQ09NUFVURV0oKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3VidGFncyAhPT0gbnVsbCkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3VidGFncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gc3VidGFnc1tpXVtDT01QVVRFXSgpO1xuICAgICAgICAgICAgcmV2aXNpb24gPSBNYXRoLm1heCh2YWx1ZSwgcmV2aXNpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGFzdFZhbHVlID0gcmV2aXNpb247XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmlzVXBkYXRpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sYXN0VmFsdWU7XG4gIH1cblxuICBzdGF0aWMgdXBkYXRlKF90YWc6IFVwZGF0YWJsZVRhZywgc3VidGFnOiBUYWcpIHtcbiAgICBpZiAoREVCVUcgJiYgX3RhZ1tUWVBFXSAhPT0gTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXR0ZW1wdGVkIHRvIHVwZGF0ZSBhIHRhZyB0aGF0IHdhcyBub3QgdXBkYXRhYmxlJyk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVFMgMy43IHNob3VsZCBhbGxvdyB1cyB0byBkbyB0aGlzIHZpYSBhc3NlcnRpb25cbiAgICBsZXQgdGFnID0gX3RhZyBhcyBNb25vbW9ycGhpY1RhZ0ltcGw7XG5cbiAgICBpZiAoc3VidGFnID09PSBDT05TVEFOVF9UQUcpIHtcbiAgICAgIHRhZy5zdWJ0YWcgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIERFQlVHICYmXG4gICAgICAgIHRhZy5sYXN0Q2hlY2tlZCA9PT0gJFJFVklTSU9OICYmXG4gICAgICAgIChzdWJ0YWcgYXMgTW9ub21vcnBoaWNUYWdJbXBsKVtDT01QVVRFXSgpID4gdGFnLmxhc3RWYWx1ZVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQlVHOiBhdHRlbXB0ZWQgdG8gdXBkYXRlIGEgdGFnIHdpdGggYSB0YWcgdGhhdCBoYXMgYSBtb3JlIHJlY2VudCByZXZpc2lvbiBhcyBpdHMgdmFsdWUnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRhZy5zdWJ0YWcgPSBzdWJ0YWc7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGRpcnR5KHRhZzogRGlydHlhYmxlVGFnIHwgVXBkYXRhYmxlVGFnKSB7XG4gICAgaWYgKFxuICAgICAgREVCVUcgJiZcbiAgICAgICEodGFnW1RZUEVdID09PSBNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZSB8fCB0YWdbVFlQRV0gPT09IE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0ZWQgdG8gZGlydHkgYSB0YWcgdGhhdCB3YXMgbm90IGRpcnR5YWJsZScpO1xuICAgIH1cblxuICAgIGlmIChERUJVRykge1xuICAgICAgLy8gVXN1YWxseSBieSB0aGlzIHBvaW50LCB3ZSd2ZSBhbHJlYWR5IGFzc2VydGVkIHdpdGggYmV0dGVyIGVycm9yIGluZm9ybWF0aW9uLFxuICAgICAgLy8gYnV0IHRoaXMgaXMgb3VyIGxhc3QgbGluZSBvZiBkZWZlbnNlLlxuICAgICAgYXNzZXJ0VGFnTm90Q29uc3VtZWQhKHRhZyk7XG4gICAgfVxuXG4gICAgKHRhZyBhcyBNb25vbW9ycGhpY1RhZ0ltcGwpLnJldmlzaW9uID0gKyskUkVWSVNJT047XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGRpcnR5ID0gTW9ub21vcnBoaWNUYWdJbXBsLmRpcnR5O1xuZXhwb3J0IGNvbnN0IHVwZGF0ZSA9IE1vbm9tb3JwaGljVGFnSW1wbC51cGRhdGU7XG5cbi8vLy8vLy8vLy9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRhZygpOiBEaXJ0eWFibGVUYWcge1xuICByZXR1cm4gbmV3IE1vbm9tb3JwaGljVGFnSW1wbChNb25vbW9ycGhpY1RhZ1R5cGVzLkRpcnR5YWJsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVcGRhdGFibGVUYWcoKTogVXBkYXRhYmxlVGFnIHtcbiAgcmV0dXJuIG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGUpO1xufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCBDT05TVEFOVF9UQUcgPSBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuQ29uc3RhbnQpIGFzIENvbnN0YW50VGFnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNDb25zdCh7IHRhZyB9OiBUYWdnZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHRhZyA9PT0gQ09OU1RBTlRfVEFHO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb25zdFRhZyh0YWc6IFRhZyk6IHRhZyBpcyBDb25zdGFudFRhZyB7XG4gIHJldHVybiB0YWcgPT09IENPTlNUQU5UX1RBRztcbn1cblxuLy8vLy8vLy8vL1xuXG5jbGFzcyBWb2xhdGlsZVRhZyBpbXBsZW1lbnRzIFRhZyB7XG4gIFtDT01QVVRFXSgpIHtcbiAgICByZXR1cm4gVk9MQVRJTEU7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFZPTEFUSUxFX1RBRyA9IG5ldyBWb2xhdGlsZVRhZygpO1xuXG4vLy8vLy8vLy8vXG5cbmNsYXNzIEN1cnJlbnRUYWcgaW1wbGVtZW50cyBDdXJyZW50VGFnIHtcbiAgW0NPTVBVVEVdKCkge1xuICAgIHJldHVybiAkUkVWSVNJT047XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IENVUlJFTlRfVEFHID0gbmV3IEN1cnJlbnRUYWcoKTtcblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSh0YWdzOiBUYWdbXSk6IFRhZyB7XG4gIGxldCBvcHRpbWl6ZWQ6IFRhZ1tdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSB0YWdzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGxldCB0YWcgPSB0YWdzW2ldO1xuICAgIGlmICh0YWcgPT09IENPTlNUQU5UX1RBRykgY29udGludWU7XG4gICAgb3B0aW1pemVkLnB1c2godGFnKTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVDb21iaW5hdG9yVGFnKG9wdGltaXplZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb21iaW5hdG9yVGFnKHRhZ3M6IFRhZ1tdKTogVGFnIHtcbiAgc3dpdGNoICh0YWdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBDT05TVEFOVF9UQUc7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIHRhZ3NbMF07XG4gICAgZGVmYXVsdDpcbiAgICAgIGxldCB0YWcgPSBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuQ29tYmluYXRvcikgYXMgQ29tYmluYXRvclRhZztcbiAgICAgICh0YWcgYXMgYW55KS5zdWJ0YWdzID0gdGFncztcbiAgICAgIHJldHVybiB0YWc7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7UUFjTSxJLEdBQUEsSTtRQXNDQSxLLEdBQUEsSztRQWNBLFEsR0FBQSxRO1FBcUtBLFMsR0FBQSxTO1FBSUEsa0IsR0FBQSxrQjtRQVFBLE8sR0FBQSxPO1FBSUEsVSxHQUFBLFU7UUEwQkEsTyxHQUFBLE87UUFZQSxtQixHQUFBLG1COzs7O0FBNVJOOztBQUNBOztBQU1PLE1BQU0sOEJBQU4sQ0FBQTtBQUNBLE1BQU0sNEJBQU4sQ0FBQTtBQUNBLE1BQU0sOEJBQU4sZ0JBQUEsQyxDQUE2QztBQUVwRCxJQUFJLFlBQUosT0FBQTtBQUVNLFNBQUEsSUFBQSxHQUFjO0FBQ2xCO0FBQ0Q7QUFFRDtBQUVPLE1BQU0sNEJBQXlCLG1CQUEvQixhQUErQixDQUEvQjtBQWdCUDtBQUVBOzs7Ozs7Ozs7Ozs7OztBQWNNLFNBQUEsS0FBQSxDQUFBLElBQUEsRUFBeUI7QUFDN0IsV0FBQSxTQUFBO0FBQ0Q7QUFFRDs7Ozs7Ozs7OztBQVVNLFNBQUEsUUFBQSxDQUFBLEdBQUEsRUFBQSxRQUFBLEVBQStDO0FBQ25ELFdBQU8sWUFBWSxJQUFuQixPQUFtQixHQUFuQjtBQUNEO0FBaUJELE1BQU0sT0FBc0IsbUJBQTVCLFVBQTRCLENBQTVCO0FBRU8sSUFBQSwrQ0FBQTtBQUVQLElBQUEsVUFBQSxFQUFXO0FBQ1QsWUFISyxZQUdMLGtCQUFlLElBQWYsT0FBZSxFQUFmO0FBQ0Q7QUFxQkQsTUFBQSxrQkFBQSxDQUF3QjtBQWF0QixnQkFBQSxJQUFBLEVBQXFDO0FBWjdCLGFBQUEsUUFBQSxHQUFBLE9BQUE7QUFDQSxhQUFBLFdBQUEsR0FBQSxPQUFBO0FBQ0EsYUFBQSxTQUFBLEdBQUEsT0FBQTtBQUVBLGFBQUEsVUFBQSxHQUFBLEtBQUE7QUFDQSxhQUFBLE9BQUEsR0FBQSxJQUFBO0FBRUEsYUFBQSxNQUFBLEdB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QUFWLGdCQUFVLENBQVY7QUFDQyxnQkFBQSxPQUFBLEdBQUEsSUFBQTtBQUNELG1CQUFBLEdBQUE7QUFSSjtBQVVEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUcgfSBmcm9tICdAZ2xpbW1lci9lbnYnO1xuaW1wb3J0IHsgVW5pb25Ub0ludGVyc2VjdGlvbiwgc3ltYm9sIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBhc3NlcnRUYWdOb3RDb25zdW1lZCB9IGZyb20gJy4vZGVidWcnO1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCB0eXBlIFJldmlzaW9uID0gbnVtYmVyO1xuXG5leHBvcnQgY29uc3QgQ09OU1RBTlQ6IFJldmlzaW9uID0gMDtcbmV4cG9ydCBjb25zdCBJTklUSUFMOiBSZXZpc2lvbiA9IDE7XG5leHBvcnQgY29uc3QgVk9MQVRJTEU6IFJldmlzaW9uID0gOTAwNzE5OTI1NDc0MDk5MTsgLy8gTUFYX0lOVFxuXG5sZXQgJFJFVklTSU9OID0gSU5JVElBTDtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1bXAoKSB7XG4gICRSRVZJU0lPTisrO1xufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCBDT01QVVRFOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdUQUdfQ09NUFVURScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVRhZzxUPiB7XG4gIFtDT01QVVRFXSgpOiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhZyBleHRlbmRzIEVudGl0eVRhZzxSZXZpc2lvbj4ge31cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUYWdnZWQ8VD4ge1xuICB0YWc6IEVudGl0eVRhZzxUPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWdnZWQge1xuICB0YWc6IFRhZztcbn1cblxuLy8vLy8vLy8vL1xuXG4vKipcbiAqIGB2YWx1ZWAgcmVjZWl2ZXMgYSB0YWcgYW5kIHJldHVybnMgYW4gb3BhcXVlIFJldmlzaW9uIGJhc2VkIG9uIHRoYXQgdGFnLiBUaGlzXG4gKiBzbmFwc2hvdCBjYW4gdGhlbiBsYXRlciBiZSBwYXNzZWQgdG8gYHZhbGlkYXRlYCB3aXRoIHRoZSBzYW1lIHRhZyB0b1xuICogZGV0ZXJtaW5lIGlmIHRoZSB0YWcgaGFzIGNoYW5nZWQgYXQgYWxsIHNpbmNlIHRoZSB0aW1lIHRoYXQgYHZhbHVlYCB3YXNcbiAqIGNhbGxlZC5cbiAqXG4gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHRoZSBnbG9iYWwgcmV2aXNpb24gY291bnQgZGlyZWN0bHkgZm9yXG4gKiBwZXJmb3JtYW5jZSByZWFzb25zLiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgYW5kIHNob3VsZCBub3QgYmVcbiAqIHJlbGllZCBvbiBkaXJlY3RseSBieSB1c2VycyBvZiB0aGVzZSBBUElzLiBJbnN0ZWFkLCBSZXZpc2lvbnMgc2hvdWxkIGJlXG4gKiB0cmVhdGVkIGFzIGlmIHRoZXkgYXJlIG9wYXF1ZS91bmtub3duLCBhbmQgc2hvdWxkIG9ubHkgYmUgaW50ZXJhY3RlZCB3aXRoIHZpYVxuICogdGhlIGB2YWx1ZWAvYHZhbGlkYXRlYCBBUEkuXG4gKlxuICogQHBhcmFtIHRhZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsdWUoX3RhZzogVGFnKTogUmV2aXNpb24ge1xuICByZXR1cm4gJFJFVklTSU9OO1xufVxuXG4vKipcbiAqIGB2YWxpZGF0ZWAgcmVjZWl2ZXMgYSB0YWcgYW5kIGEgc25hcHNob3QgZnJvbSBhIHByZXZpb3VzIGNhbGwgdG8gYHZhbHVlYCB3aXRoXG4gKiB0aGUgc2FtZSB0YWcsIGFuZCBkZXRlcm1pbmVzIGlmIHRoZSB0YWcgaXMgc3RpbGwgdmFsaWQgY29tcGFyZWQgdG8gdGhlXG4gKiBzbmFwc2hvdC4gSWYgdGhlIHRhZydzIHN0YXRlIGhhcyBjaGFuZ2VkIGF0IGFsbCBzaW5jZSB0aGVuLCBgdmFsaWRhdGVgIHdpbGxcbiAqIHJldHVybiBmYWxzZSwgb3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIHRydWUuIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYVxuICogY2FsY3VsYXRpb24gcmVsYXRlZCB0byB0aGUgdGFncyBzaG91bGQgYmUgcmVydW4uXG4gKlxuICogQHBhcmFtIHRhZ1xuICogQHBhcmFtIHNuYXBzaG90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZSh0YWc6IFRhZywgc25hcHNob3Q6IFJldmlzaW9uKSB7XG4gIHJldHVybiBzbmFwc2hvdCA+PSB0YWdbQ09NUFVURV0oKTtcbn1cblxuLy8vLy8vLy8vL1xuXG4vKipcbiAqIFRoaXMgZW51bSByZXByZXNlbnRzIGFsbCBvZiB0aGUgcG9zc2libGUgdGFnIHR5cGVzIGZvciB0aGUgbW9ub21vcnBoaWMgdGFnIGNsYXNzLlxuICogT3RoZXIgY3VzdG9tIHRhZyBjbGFzc2VzIGNhbiBleGlzdCwgc3VjaCBhcyBDdXJyZW50VGFnIGFuZCBWb2xhdGlsZVRhZywgYnV0IGZvclxuICogcGVyZm9ybWFuY2UgcmVhc29ucywgYW55IHR5cGUgb2YgdGFnIHRoYXQgaXMgbWVhbnQgdG8gYmUgdXNlZCBmcmVxdWVudGx5IHNob3VsZFxuICogYmUgYWRkZWQgdG8gdGhlIG1vbm9tb3JwaGljIHRhZy5cbiAqL1xuY29uc3QgZW51bSBNb25vbW9ycGhpY1RhZ1R5cGVzIHtcbiAgRGlydHlhYmxlLFxuICBVcGRhdGFibGUsXG4gIENvbWJpbmF0b3IsXG4gIENvbnN0YW50LFxufVxuXG5jb25zdCBUWVBFOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdUQUdfVFlQRScpO1xuXG5leHBvcnQgbGV0IEFMTE9XX0NZQ0xFUzogV2Vha01hcDxUYWcsIGJvb2xlYW4+IHwgdW5kZWZpbmVkO1xuXG5pZiAoREVCVUcpIHtcbiAgQUxMT1dfQ1lDTEVTID0gbmV3IFdlYWtNYXAoKTtcbn1cblxuaW50ZXJmYWNlIE1vbm9tb3JwaGljVGFnQmFzZTxUIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdUeXBlcz4gZXh0ZW5kcyBUYWcge1xuICBbVFlQRV06IFQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlydHlhYmxlVGFnIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdCYXNlPE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlPiB7fVxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGFibGVUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGU+IHt9XG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmF0b3JUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5Db21iaW5hdG9yPiB7fVxuZXhwb3J0IGludGVyZmFjZSBDb25zdGFudFRhZyBleHRlbmRzIE1vbm9tb3JwaGljVGFnQmFzZTxNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbnN0YW50PiB7fVxuXG5pbnRlcmZhY2UgTW9ub21vcnBoaWNUYWdNYXBwaW5nIHtcbiAgW01vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlXTogRGlydHlhYmxlVGFnO1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGVdOiBVcGRhdGFibGVUYWc7XG4gIFtNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbWJpbmF0b3JdOiBDb21iaW5hdG9yVGFnO1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5Db25zdGFudF06IENvbnN0YW50VGFnO1xufVxuXG50eXBlIE1vbm9tb3JwaGljVGFnID0gVW5pb25Ub0ludGVyc2VjdGlvbjxNb25vbW9ycGhpY1RhZ01hcHBpbmdbTW9ub21vcnBoaWNUYWdUeXBlc10+O1xudHlwZSBNb25vbW9ycGhpY1RhZ1R5cGUgPSBVbmlvblRvSW50ZXJzZWN0aW9uPE1vbm9tb3JwaGljVGFnVHlwZXM+O1xuXG5jbGFzcyBNb25vbW9ycGhpY1RhZ0ltcGwgaW1wbGVtZW50cyBNb25vbW9ycGhpY1RhZyB7XG4gIHByaXZhdGUgcmV2aXNpb24gPSBJTklUSUFMO1xuICBwcml2YXRlIGxhc3RDaGVja2VkID0gSU5JVElBTDtcbiAgcHJpdmF0ZSBsYXN0VmFsdWUgPSBJTklUSUFMO1xuXG4gIHByaXZhdGUgaXNVcGRhdGluZyA9IGZhbHNlO1xuICBwcml2YXRlIHN1YnRhZ3M6IFRhZ1tdIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBzdWJ0YWc6IFRhZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHN1YnRhZ0J1ZmZlckNhY2hlOiBSZXZpc2lvbiB8IG51bGwgPSBudWxsO1xuXG4gIFtUWVBFXTogTW9ub21vcnBoaWNUYWdUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1vbm9tb3JwaGljVGFnVHlwZXMpIHtcbiAgICB0aGlzW1RZUEVdID0gdHlwZSBhcyBNb25vbW9ycGhpY1RhZ1R5cGU7XG4gIH1cblxuICBbQ09NUFVURV0oKTogUmV2aXNpb24ge1xuICAgIGxldCB7IGxhc3RDaGVja2VkIH0gPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMuaXNVcGRhdGluZyA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKERFQlVHICYmICFBTExPV19DWUNMRVMhLmhhcyh0aGlzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0N5Y2xlcyBpbiB0YWdzIGFyZSBub3QgYWxsb3dlZCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxhc3RDaGVja2VkID0gKyskUkVWSVNJT047XG4gICAgfSBlbHNlIGlmIChsYXN0Q2hlY2tlZCAhPT0gJFJFVklTSU9OKSB7XG4gICAgICB0aGlzLmlzVXBkYXRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5sYXN0Q2hlY2tlZCA9ICRSRVZJU0lPTjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IHsgc3VidGFncywgc3VidGFnLCBzdWJ0YWdCdWZmZXJDYWNoZSwgbGFzdFZhbHVlLCByZXZpc2lvbiB9ID0gdGhpcztcblxuICAgICAgICBpZiAoc3VidGFnICE9PSBudWxsKSB7XG4gICAgICAgICAgbGV0IHN1YnRhZ1ZhbHVlID0gc3VidGFnW0NPTVBVVEVdKCk7XG5cbiAgICAgICAgICBpZiAoc3VidGFnVmFsdWUgPT09IHN1YnRhZ0J1ZmZlckNhY2hlKSB7XG4gICAgICAgICAgICByZXZpc2lvbiA9IE1hdGgubWF4KHJldmlzaW9uLCBsYXN0VmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDbGVhciB0aGUgdGVtcG9yYXJ5IGJ1ZmZlciBjYWNoZVxuICAgICAgICAgICAgdGhpcy5zdWJ0YWdCdWZmZXJDYWNoZSA9IG51bGw7XG4gICAgICAgICAgICByZXZpc2lvbiA9IE1hdGgubWF4KHJldmlzaW9uLCBzdWJ0YWdWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YnRhZ3MgIT09IG51bGwpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1YnRhZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHN1YnRhZ3NbaV1bQ09NUFVURV0oKTtcbiAgICAgICAgICAgIHJldmlzaW9uID0gTWF0aC5tYXgodmFsdWUsIHJldmlzaW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxhc3RWYWx1ZSA9IHJldmlzaW9uO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5pc1VwZGF0aW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubGFzdFZhbHVlO1xuICB9XG5cbiAgc3RhdGljIHVwZGF0ZShfdGFnOiBVcGRhdGFibGVUYWcsIF9zdWJ0YWc6IFRhZykge1xuICAgIGlmIChERUJVRyAmJiBfdGFnW1RZUEVdICE9PSBNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0ZWQgdG8gdXBkYXRlIGEgdGFnIHRoYXQgd2FzIG5vdCB1cGRhdGFibGUnKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBUUyAzLjcgc2hvdWxkIGFsbG93IHVzIHRvIGRvIHRoaXMgdmlhIGFzc2VydGlvblxuICAgIGxldCB0YWcgPSBfdGFnIGFzIE1vbm9tb3JwaGljVGFnSW1wbDtcbiAgICBsZXQgc3VidGFnID0gX3N1YnRhZyBhcyBNb25vbW9ycGhpY1RhZ0ltcGw7XG5cbiAgICBpZiAoc3VidGFnID09PSBDT05TVEFOVF9UQUcpIHtcbiAgICAgIHRhZy5zdWJ0YWcgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGVyZSBhcmUgdHdvIGRpZmZlcmVudCBwb3NzaWJpbGl0aWVzIHdoZW4gdXBkYXRpbmcgYSBzdWJ0YWc6XG4gICAgICAvL1xuICAgICAgLy8gMS4gc3VidGFnW0NPTVBVVEVdKCkgPD0gdGFnW0NPTVBVVEVdKCk7XG4gICAgICAvLyAyLiBzdWJ0YWdbQ09NUFVURV0oKSA+IHRhZ1tDT01QVVRFXSgpO1xuICAgICAgLy9cbiAgICAgIC8vIFRoZSBmaXJzdCBwb3NzaWJpbGl0eSBpcyBjb21wbGV0ZWx5IGZpbmUgd2l0aGluIG91ciBjYWNoaW5nIG1vZGVsLCBidXRcbiAgICAgIC8vIHRoZSBzZWNvbmQgcG9zc2liaWxpdHkgcHJlc2VudHMgYSBwcm9ibGVtLiBJZiB0aGUgcGFyZW50IHRhZyBoYXNcbiAgICAgIC8vIGFscmVhZHkgYmVlbiByZWFkLCB0aGVuIGl0J3MgdmFsdWUgaXMgY2FjaGVkIGFuZCB3aWxsIG5vdCB1cGRhdGUgdG9cbiAgICAgIC8vIHJlZmxlY3QgdGhlIHN1YnRhZydzIGdyZWF0ZXIgdmFsdWUuIE5leHQgdGltZSB0aGUgY2FjaGUgaXMgYnVzdGVkLCB0aGVcbiAgICAgIC8vIHN1YnRhZydzIHZhbHVlIF93aWxsXyBiZSByZWFkLCBhbmQgaXQncyB2YWx1ZSB3aWxsIGJlIF9ncmVhdGVyXyB0aGFuXG4gICAgICAvLyB0aGUgc2F2ZWQgc25hcHNob3Qgb2YgdGhlIHBhcmVudCwgY2F1c2luZyB0aGUgcmVzdWx0aW5nIGNhbGN1bGF0aW9uIHRvXG4gICAgICAvLyBiZSByZXJ1biBlcnJvbmVvdXNseS5cbiAgICAgIC8vXG4gICAgICAvLyBJbiBvcmRlciB0byBwcmV2ZW50IHRoaXMsIHdoZW4gd2UgZmlyc3QgdXBkYXRlIHRvIGEgbmV3IHN1YnRhZyB3ZSBzdG9yZVxuICAgICAgLy8gaXRzIGNvbXB1dGVkIHZhbHVlLCBhbmQgdGhlbiBjaGVjayBhZ2FpbnN0IHRoYXQgY29tcHV0ZWQgdmFsdWUgb25cbiAgICAgIC8vIHN1YnNlcXVlbnQgdXBkYXRlcy4gSWYgaXRzIHZhbHVlIGhhc24ndCBjaGFuZ2VkLCB0aGVuIHdlIHJldHVybiB0aGVcbiAgICAgIC8vIHBhcmVudCdzIHByZXZpb3VzIHZhbHVlLiBPbmNlIHRoZSBzdWJ0YWcgY2hhbmdlcyBmb3IgdGhlIGZpcnN0IHRpbWUsXG4gICAgICAvLyB3ZSBjbGVhciB0aGUgY2FjaGUgYW5kIGV2ZXJ5dGhpbmcgaXMgZmluYWxseSBpbiBzeW5jIHdpdGggdGhlIHBhcmVudC5cbiAgICAgIHRhZy5zdWJ0YWdCdWZmZXJDYWNoZSA9IHN1YnRhZ1tDT01QVVRFXSgpO1xuICAgICAgdGFnLnN1YnRhZyA9IHN1YnRhZztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZGlydHkodGFnOiBEaXJ0eWFibGVUYWcgfCBVcGRhdGFibGVUYWcpIHtcbiAgICBpZiAoXG4gICAgICBERUJVRyAmJlxuICAgICAgISh0YWdbVFlQRV0gPT09IE1vbm9tb3JwaGljVGFnVHlwZXMuVXBkYXRhYmxlIHx8IHRhZ1tUWVBFXSA9PT0gTW9ub21vcnBoaWNUYWdUeXBlcy5EaXJ0eWFibGUpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRlZCB0byBkaXJ0eSBhIHRhZyB0aGF0IHdhcyBub3QgZGlydHlhYmxlJyk7XG4gICAgfVxuXG4gICAgaWYgKERFQlVHKSB7XG4gICAgICAvLyBVc3VhbGx5IGJ5IHRoaXMgcG9pbnQsIHdlJ3ZlIGFscmVhZHkgYXNzZXJ0ZWQgd2l0aCBiZXR0ZXIgZXJyb3IgaW5mb3JtYXRpb24sXG4gICAgICAvLyBidXQgdGhpcyBpcyBvdXIgbGFzdCBsaW5lIG9mIGRlZmVuc2UuXG4gICAgICBhc3NlcnRUYWdOb3RDb25zdW1lZCEodGFnKTtcbiAgICB9XG5cbiAgICAodGFnIGFzIE1vbm9tb3JwaGljVGFnSW1wbCkucmV2aXNpb24gPSArKyRSRVZJU0lPTjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZGlydHkgPSBNb25vbW9ycGhpY1RhZ0ltcGwuZGlydHk7XG5leHBvcnQgY29uc3QgdXBkYXRlID0gTW9ub21vcnBoaWNUYWdJbXBsLnVwZGF0ZTtcblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFnKCk6IERpcnR5YWJsZVRhZyB7XG4gIHJldHVybiBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVwZGF0YWJsZVRhZygpOiBVcGRhdGFibGVUYWcge1xuICByZXR1cm4gbmV3IE1vbm9tb3JwaGljVGFnSW1wbChNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZSk7XG59XG5cbi8vLy8vLy8vLy9cblxuZXhwb3J0IGNvbnN0IENPTlNUQU5UX1RBRyA9IG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5Db25zdGFudCkgYXMgQ29uc3RhbnRUYWc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0KHsgdGFnIH06IFRhZ2dlZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gdGFnID09PSBDT05TVEFOVF9UQUc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0VGFnKHRhZzogVGFnKTogdGFnIGlzIENvbnN0YW50VGFnIHtcbiAgcmV0dXJuIHRhZyA9PT0gQ09OU1RBTlRfVEFHO1xufVxuXG4vLy8vLy8vLy8vXG5cbmNsYXNzIFZvbGF0aWxlVGFnIGltcGxlbWVudHMgVGFnIHtcbiAgW0NPTVBVVEVdKCkge1xuICAgIHJldHVybiBWT0xBVElMRTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgVk9MQVRJTEVfVEFHID0gbmV3IFZvbGF0aWxlVGFnKCk7XG5cbi8vLy8vLy8vLy9cblxuY2xhc3MgQ3VycmVudFRhZyBpbXBsZW1lbnRzIEN1cnJlbnRUYWcge1xuICBbQ09NUFVURV0oKSB7XG4gICAgcmV0dXJuICRSRVZJU0lPTjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgQ1VSUkVOVF9UQUcgPSBuZXcgQ3VycmVudFRhZygpO1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lKHRhZ3M6IFRhZ1tdKTogVGFnIHtcbiAgbGV0IG9wdGltaXplZDogVGFnW10gPSBbXTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IHRhZ3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgbGV0IHRhZyA9IHRhZ3NbaV07XG4gICAgaWYgKHRhZyA9PT0gQ09OU1RBTlRfVEFHKSBjb250aW51ZTtcbiAgICBvcHRpbWl6ZWQucHVzaCh0YWcpO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUNvbWJpbmF0b3JUYWcob3B0aW1pemVkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbWJpbmF0b3JUYWcodGFnczogVGFnW10pOiBUYWcge1xuICBzd2l0Y2ggKHRhZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIENPTlNUQU5UX1RBRztcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gdGFnc1swXTtcbiAgICBkZWZhdWx0OlxuICAgICAgbGV0IHRhZyA9IG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5Db21iaW5hdG9yKSBhcyBDb21iaW5hdG9yVGFnO1xuICAgICAgKHRhZyBhcyBhbnkpLnN1YnRhZ3MgPSB0YWdzO1xuICAgICAgcmV0dXJuIHRhZztcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==

@@ -53,8 +53,3 @@ 'use strict';

*/
function value(tag) {
if (_env.DEBUG) {
// compute to cache the latest value, which will prevent us from doing
// invalid updates later on.
tag[COMPUTE]();
}
function value(_tag) {
return $REVISION;

@@ -73,17 +68,4 @@ }

function validate(tag, snapshot) {
if (_env.DEBUG) {
IS_VALIDATING = true;
}
var isValid = snapshot >= tag[COMPUTE]();
if (_env.DEBUG) {
IS_VALIDATING = false;
if (isValid) {
// compute to cache the latest value, which will prevent us from doing
// invalid updates later on.
tag[COMPUTE]();
}
}
return isValid;
return snapshot >= tag[COMPUTE]();
}
var IS_VALIDATING = void 0;
var TYPE = (0, _utils.symbol)('TAG_TYPE');

@@ -103,4 +85,5 @@ var ALLOW_CYCLES = exports.ALLOW_CYCLES = void 0;

this.isUpdating = false;
this.subtags = null;
this.subtag = null;
this.subtags = null;
this.subtagBufferCache = null;
this[TYPE] = type;

@@ -119,22 +102,19 @@ }

this.isUpdating = true;
if (_env.DEBUG) {
// In DEBUG, we don't cache while validating only, because it is valid
// update a tag between calling `validate()` and `value()`. Once you
// call `value()` on a tag, its revision is effectively locked in, and
// if you attempt to update it to a tag that is more recent it could
// break assumptions in our system. This is why the assertion exists in
// the static `update()` method below.
if (!IS_VALIDATING) {
this.lastChecked = $REVISION;
}
} else {
this.lastChecked = $REVISION;
}
this.lastChecked = $REVISION;
try {
var subtags = this.subtags,
subtag = this.subtag,
subtagBufferCache = this.subtagBufferCache,
lastValue = this.lastValue,
revision = this.revision;
if (subtag !== null) {
revision = Math.max(revision, subtag[COMPUTE]());
var subtagValue = subtag[COMPUTE]();
if (subtagValue === subtagBufferCache) {
revision = Math.max(revision, lastValue);
} else {
// Clear the temporary buffer cache
this.subtagBufferCache = null;
revision = Math.max(revision, subtagValue);
}
}

@@ -155,3 +135,3 @@ if (subtags !== null) {

MonomorphicTagImpl.update = function update(_tag, subtag) {
MonomorphicTagImpl.update = function update(_tag, _subtag) {
if (_env.DEBUG && _tag[TYPE] !== 1 /* Updatable */) {

@@ -162,8 +142,25 @@ throw new Error('Attempted to update a tag that was not updatable');

var tag = _tag;
var subtag = _subtag;
if (subtag === CONSTANT_TAG) {
tag.subtag = null;
} else {
if (_env.DEBUG && tag.lastChecked === $REVISION && subtag[COMPUTE]() > tag.lastValue) {
throw new Error('BUG: attempted to update a tag with a tag that has a more recent revision as its value');
}
// There are two different possibilities when updating a subtag:
//
// 1. subtag[COMPUTE]() <= tag[COMPUTE]();
// 2. subtag[COMPUTE]() > tag[COMPUTE]();
//
// The first possibility is completely fine within our caching model, but
// the second possibility presents a problem. If the parent tag has
// already been read, then it's value is cached and will not update to
// reflect the subtag's greater value. Next time the cache is busted, the
// subtag's value _will_ be read, and it's value will be _greater_ than
// the saved snapshot of the parent, causing the resulting calculation to
// be rerun erroneously.
//
// In order to prevent this, when we first update to a new subtag we store
// its computed value, and then check against that computed value on
// subsequent updates. If its value hasn't changed, then we return the
// parent's previous value. Once the subtag changes for the first time,
// we clear the cache and everything is finally in sync with the parent.
tag.subtagBufferCache = subtag[COMPUTE]();
tag.subtag = subtag;

@@ -259,2 +256,2 @@ }

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7UUFjTSxJLEdBQUEsSTtRQXNDQSxLLEdBQUEsSztRQW9CQSxRLEdBQUEsUTtRQWdMQSxTLEdBQUEsUztRQUlBLGtCLEdBQUEsa0I7UUFRQSxPLEdBQUEsTztRQUlBLFUsR0FBQSxVO1FBMEJBLE8sR0FBQSxPO1FBWUEsbUIsR0FBQSxtQjs7QUE5U047O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBTU8sSUFBTSw4QkFBTixDQUFBO0FBQ0EsSUFBTSw0QkFBTixDQUFBO0FBQ0EsSUFBTSw4QkFBTixnQkFBQSxDLENBQTZDO0FBRXBELElBQUksWUFBSixPQUFBO0FBRU0sU0FBQSxJQUFBLEdBQWM7QUFDbEI7QUFDRDtBQUVEO0FBRU8sSUFBTSw0QkFBeUIsbUJBQS9CLGFBQStCLENBQS9CO0FBZ0JQO0FBRUE7Ozs7Ozs7Ozs7Ozs7O0FBY00sU0FBQSxLQUFBLENBQUEsR0FBQSxFQUF3QjtBQUM1QixRQUFBLFVBQUEsRUFBVztBQUNUO0FBQ0E7QUFDQSxZQUFBLE9BQUE7QUFDRDtBQUVELFdBQUEsU0FBQTtBQUNEO0FBRUQ7Ozs7Ozs7Ozs7QUFVTSxTQUFBLFFBQUEsQ0FBQSxHQUFBLEVBQUEsUUFBQSxFQUErQztBQUNuRCxRQUFBLFVBQUEsRUFBVztBQUNULHdCQUFBLElBQUE7QUFDRDtBQUVELFFBQUksVUFBVSxZQUFZLElBQTFCLE9BQTBCLEdBQTFCO0FBRUEsUUFBQSxVQUFBLEVBQVc7QUFDVCx3QkFBQSxLQUFBO0FBRUEsWUFBQSxPQUFBLEVBQWE7QUFDWDtBQUNBO0FBQ0EsZ0JBQUEsT0FBQTtBQUNEO0FBQ0Y7QUFFRCxXQUFBLE9BQUE7QUFDRDtBQUVELElBQUEsZ0JBQUEsS0FBQSxDQUFBO0FBaUJBLElBQU0sT0FBc0IsbUJBQTVCLFVBQTRCLENBQTVCO0FBRU8sSUFBQSxzQ0FBQSxLQUFBLENBQUE7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QUFRLEtBQVIsTUFBQTtBQUNFLGFBQUEsQ0FBQTtBQUNFLG1CQUFBLFlBQUE7QUFDRixhQUFBLENBQUE7QUFDRSxtQkFBTyxLQUFQLENBQU8sQ0FBUDtBQUNGO0FBQ0UsZ0JBQUksTUFBTSxJQUFBLGtCQUFBLENBQUEsQ0FBQSxDQUFWLGdCQUFVLENBQVY7QUFDQyxnQkFBQSxPQUFBLEdBQUEsSUFBQTtBQUNELG1CQUFBLEdBQUE7QUFSSjtBQVVEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUcgfSBmcm9tICdAZ2xpbW1lci9lbnYnO1xuaW1wb3J0IHsgVW5pb25Ub0ludGVyc2VjdGlvbiwgc3ltYm9sIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBhc3NlcnRUYWdOb3RDb25zdW1lZCB9IGZyb20gJy4vZGVidWcnO1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCB0eXBlIFJldmlzaW9uID0gbnVtYmVyO1xuXG5leHBvcnQgY29uc3QgQ09OU1RBTlQ6IFJldmlzaW9uID0gMDtcbmV4cG9ydCBjb25zdCBJTklUSUFMOiBSZXZpc2lvbiA9IDE7XG5leHBvcnQgY29uc3QgVk9MQVRJTEU6IFJldmlzaW9uID0gOTAwNzE5OTI1NDc0MDk5MTsgLy8gTUFYX0lOVFxuXG5sZXQgJFJFVklTSU9OID0gSU5JVElBTDtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1bXAoKSB7XG4gICRSRVZJU0lPTisrO1xufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCBDT01QVVRFOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdUQUdfQ09NUFVURScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVRhZzxUPiB7XG4gIFtDT01QVVRFXSgpOiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhZyBleHRlbmRzIEVudGl0eVRhZzxSZXZpc2lvbj4ge31cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUYWdnZWQ8VD4ge1xuICB0YWc6IEVudGl0eVRhZzxUPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWdnZWQge1xuICB0YWc6IFRhZztcbn1cblxuLy8vLy8vLy8vL1xuXG4vKipcbiAqIGB2YWx1ZWAgcmVjZWl2ZXMgYSB0YWcgYW5kIHJldHVybnMgYW4gb3BhcXVlIFJldmlzaW9uIGJhc2VkIG9uIHRoYXQgdGFnLiBUaGlzXG4gKiBzbmFwc2hvdCBjYW4gdGhlbiBsYXRlciBiZSBwYXNzZWQgdG8gYHZhbGlkYXRlYCB3aXRoIHRoZSBzYW1lIHRhZyB0b1xuICogZGV0ZXJtaW5lIGlmIHRoZSB0YWcgaGFzIGNoYW5nZWQgYXQgYWxsIHNpbmNlIHRoZSB0aW1lIHRoYXQgYHZhbHVlYCB3YXNcbiAqIGNhbGxlZC5cbiAqXG4gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHRoZSBnbG9iYWwgcmV2aXNpb24gY291bnQgZGlyZWN0bHkgZm9yXG4gKiBwZXJmb3JtYW5jZSByZWFzb25zLiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgYW5kIHNob3VsZCBub3QgYmVcbiAqIHJlbGllZCBvbiBkaXJlY3RseSBieSB1c2VycyBvZiB0aGVzZSBBUElzLiBJbnN0ZWFkLCBSZXZpc2lvbnMgc2hvdWxkIGJlXG4gKiB0cmVhdGVkIGFzIGlmIHRoZXkgYXJlIG9wYXF1ZS91bmtub3duLCBhbmQgc2hvdWxkIG9ubHkgYmUgaW50ZXJhY3RlZCB3aXRoIHZpYVxuICogdGhlIGB2YWx1ZWAvYHZhbGlkYXRlYCBBUEkuXG4gKlxuICogQHBhcmFtIHRhZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsdWUodGFnOiBUYWcpOiBSZXZpc2lvbiB7XG4gIGlmIChERUJVRykge1xuICAgIC8vIGNvbXB1dGUgdG8gY2FjaGUgdGhlIGxhdGVzdCB2YWx1ZSwgd2hpY2ggd2lsbCBwcmV2ZW50IHVzIGZyb20gZG9pbmdcbiAgICAvLyBpbnZhbGlkIHVwZGF0ZXMgbGF0ZXIgb24uXG4gICAgdGFnW0NPTVBVVEVdKCk7XG4gIH1cblxuICByZXR1cm4gJFJFVklTSU9OO1xufVxuXG4vKipcbiAqIGB2YWxpZGF0ZWAgcmVjZWl2ZXMgYSB0YWcgYW5kIGEgc25hcHNob3QgZnJvbSBhIHByZXZpb3VzIGNhbGwgdG8gYHZhbHVlYCB3aXRoXG4gKiB0aGUgc2FtZSB0YWcsIGFuZCBkZXRlcm1pbmVzIGlmIHRoZSB0YWcgaXMgc3RpbGwgdmFsaWQgY29tcGFyZWQgdG8gdGhlXG4gKiBzbmFwc2hvdC4gSWYgdGhlIHRhZydzIHN0YXRlIGhhcyBjaGFuZ2VkIGF0IGFsbCBzaW5jZSB0aGVuLCBgdmFsaWRhdGVgIHdpbGxcbiAqIHJldHVybiBmYWxzZSwgb3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIHRydWUuIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYVxuICogY2FsY3VsYXRpb24gcmVsYXRlZCB0byB0aGUgdGFncyBzaG91bGQgYmUgcmVydW4uXG4gKlxuICogQHBhcmFtIHRhZ1xuICogQHBhcmFtIHNuYXBzaG90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZSh0YWc6IFRhZywgc25hcHNob3Q6IFJldmlzaW9uKSB7XG4gIGlmIChERUJVRykge1xuICAgIElTX1ZBTElEQVRJTkcgPSB0cnVlO1xuICB9XG5cbiAgbGV0IGlzVmFsaWQgPSBzbmFwc2hvdCA+PSB0YWdbQ09NUFVURV0oKTtcblxuICBpZiAoREVCVUcpIHtcbiAgICBJU19WQUxJREFUSU5HID0gZmFsc2U7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gY29tcHV0ZSB0byBjYWNoZSB0aGUgbGF0ZXN0IHZhbHVlLCB3aGljaCB3aWxsIHByZXZlbnQgdXMgZnJvbSBkb2luZ1xuICAgICAgLy8gaW52YWxpZCB1cGRhdGVzIGxhdGVyIG9uLlxuICAgICAgdGFnW0NPTVBVVEVdKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlzVmFsaWQ7XG59XG5cbmxldCBJU19WQUxJREFUSU5HOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4vLy8vLy8vLy8vXG5cbi8qKlxuICogVGhpcyBlbnVtIHJlcHJlc2VudHMgYWxsIG9mIHRoZSBwb3NzaWJsZSB0YWcgdHlwZXMgZm9yIHRoZSBtb25vbW9ycGhpYyB0YWcgY2xhc3MuXG4gKiBPdGhlciBjdXN0b20gdGFnIGNsYXNzZXMgY2FuIGV4aXN0LCBzdWNoIGFzIEN1cnJlbnRUYWcgYW5kIFZvbGF0aWxlVGFnLCBidXQgZm9yXG4gKiBwZXJmb3JtYW5jZSByZWFzb25zLCBhbnkgdHlwZSBvZiB0YWcgdGhhdCBpcyBtZWFudCB0byBiZSB1c2VkIGZyZXF1ZW50bHkgc2hvdWxkXG4gKiBiZSBhZGRlZCB0byB0aGUgbW9ub21vcnBoaWMgdGFnLlxuICovXG5jb25zdCBlbnVtIE1vbm9tb3JwaGljVGFnVHlwZXMge1xuICBEaXJ0eWFibGUsXG4gIFVwZGF0YWJsZSxcbiAgQ29tYmluYXRvcixcbiAgQ29uc3RhbnQsXG59XG5cbmNvbnN0IFRZUEU6IHVuaXF1ZSBzeW1ib2wgPSBzeW1ib2woJ1RBR19UWVBFJyk7XG5cbmV4cG9ydCBsZXQgQUxMT1dfQ1lDTEVTOiBXZWFrTWFwPFRhZywgYm9vbGVhbj4gfCB1bmRlZmluZWQ7XG5cbmlmIChERUJVRykge1xuICBBTExPV19DWUNMRVMgPSBuZXcgV2Vha01hcCgpO1xufVxuXG5pbnRlcmZhY2UgTW9ub21vcnBoaWNUYWdCYXNlPFQgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ1R5cGVzPiBleHRlbmRzIFRhZyB7XG4gIFtUWVBFXTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXJ0eWFibGVUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5EaXJ0eWFibGU+IHt9XG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0YWJsZVRhZyBleHRlbmRzIE1vbm9tb3JwaGljVGFnQmFzZTxNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZT4ge31cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYmluYXRvclRhZyBleHRlbmRzIE1vbm9tb3JwaGljVGFnQmFzZTxNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbWJpbmF0b3I+IHt9XG5leHBvcnQgaW50ZXJmYWNlIENvbnN0YW50VGFnIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdCYXNlPE1vbm9tb3JwaGljVGFnVHlwZXMuQ29uc3RhbnQ+IHt9XG5cbmludGVyZmFjZSBNb25vbW9ycGhpY1RhZ01hcHBpbmcge1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5EaXJ0eWFibGVdOiBEaXJ0eWFibGVUYWc7XG4gIFtNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZV06IFVwZGF0YWJsZVRhZztcbiAgW01vbm9tb3JwaGljVGFnVHlwZXMuQ29tYmluYXRvcl06IENvbWJpbmF0b3JUYWc7XG4gIFtNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbnN0YW50XTogQ29uc3RhbnRUYWc7XG59XG5cbnR5cGUgTW9ub21vcnBoaWNUYWcgPSBVbmlvblRvSW50ZXJzZWN0aW9uPE1vbm9tb3JwaGljVGFnTWFwcGluZ1tNb25vbW9ycGhpY1RhZ1R5cGVzXT47XG50eXBlIE1vbm9tb3JwaGljVGFnVHlwZSA9IFVuaW9uVG9JbnRlcnNlY3Rpb248TW9ub21vcnBoaWNUYWdUeXBlcz47XG5cbmNsYXNzIE1vbm9tb3JwaGljVGFnSW1wbCBpbXBsZW1lbnRzIE1vbm9tb3JwaGljVGFnIHtcbiAgcHJpdmF0ZSByZXZpc2lvbiA9IElOSVRJQUw7XG4gIHByaXZhdGUgbGFzdENoZWNrZWQgPSBJTklUSUFMO1xuICBwcml2YXRlIGxhc3RWYWx1ZSA9IElOSVRJQUw7XG5cbiAgcHJpdmF0ZSBpc1VwZGF0aW5nID0gZmFsc2U7XG4gIHByaXZhdGUgc3VidGFnOiBUYWcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdWJ0YWdzOiBUYWdbXSB8IG51bGwgPSBudWxsO1xuXG4gIFtUWVBFXTogTW9ub21vcnBoaWNUYWdUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1vbm9tb3JwaGljVGFnVHlwZXMpIHtcbiAgICB0aGlzW1RZUEVdID0gdHlwZSBhcyBNb25vbW9ycGhpY1RhZ1R5cGU7XG4gIH1cblxuICBbQ09NUFVURV0oKTogUmV2aXNpb24ge1xuICAgIGxldCB7IGxhc3RDaGVja2VkIH0gPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMuaXNVcGRhdGluZyA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKERFQlVHICYmICFBTExPV19DWUNMRVMhLmhhcyh0aGlzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0N5Y2xlcyBpbiB0YWdzIGFyZSBub3QgYWxsb3dlZCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxhc3RDaGVja2VkID0gKyskUkVWSVNJT047XG4gICAgfSBlbHNlIGlmIChsYXN0Q2hlY2tlZCAhPT0gJFJFVklTSU9OKSB7XG4gICAgICB0aGlzLmlzVXBkYXRpbmcgPSB0cnVlO1xuXG4gICAgICBpZiAoREVCVUcpIHtcbiAgICAgICAgLy8gSW4gREVCVUcsIHdlIGRvbid0IGNhY2hlIHdoaWxlIHZhbGlkYXRpbmcgb25seSwgYmVjYXVzZSBpdCBpcyB2YWxpZFxuICAgICAgICAvLyB1cGRhdGUgYSB0YWcgYmV0d2VlbiBjYWxsaW5nIGB2YWxpZGF0ZSgpYCBhbmQgYHZhbHVlKClgLiBPbmNlIHlvdVxuICAgICAgICAvLyBjYWxsIGB2YWx1ZSgpYCBvbiBhIHRhZywgaXRzIHJldmlzaW9uIGlzIGVmZmVjdGl2ZWx5IGxvY2tlZCBpbiwgYW5kXG4gICAgICAgIC8vIGlmIHlvdSBhdHRlbXB0IHRvIHVwZGF0ZSBpdCB0byBhIHRhZyB0aGF0IGlzIG1vcmUgcmVjZW50IGl0IGNvdWxkXG4gICAgICAgIC8vIGJyZWFrIGFzc3VtcHRpb25zIGluIG91ciBzeXN0ZW0uIFRoaXMgaXMgd2h5IHRoZSBhc3NlcnRpb24gZXhpc3RzIGluXG4gICAgICAgIC8vIHRoZSBzdGF0aWMgYHVwZGF0ZSgpYCBtZXRob2QgYmVsb3cuXG4gICAgICAgIGlmICghSVNfVkFMSURBVElORykge1xuICAgICAgICAgIHRoaXMubGFzdENoZWNrZWQgPSAkUkVWSVNJT047XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGFzdENoZWNrZWQgPSAkUkVWSVNJT047XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCB7IHN1YnRhZ3MsIHN1YnRhZywgcmV2aXNpb24gfSA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHN1YnRhZyAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldmlzaW9uID0gTWF0aC5tYXgocmV2aXNpb24sIHN1YnRhZ1tDT01QVVRFXSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJ0YWdzICE9PSBudWxsKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdWJ0YWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBzdWJ0YWdzW2ldW0NPTVBVVEVdKCk7XG4gICAgICAgICAgICByZXZpc2lvbiA9IE1hdGgubWF4KHZhbHVlLCByZXZpc2lvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sYXN0VmFsdWUgPSByZXZpc2lvbjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuaXNVcGRhdGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmxhc3RWYWx1ZTtcbiAgfVxuXG4gIHN0YXRpYyB1cGRhdGUoX3RhZzogVXBkYXRhYmxlVGFnLCBzdWJ0YWc6IFRhZykge1xuICAgIGlmIChERUJVRyAmJiBfdGFnW1RZUEVdICE9PSBNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0ZWQgdG8gdXBkYXRlIGEgdGFnIHRoYXQgd2FzIG5vdCB1cGRhdGFibGUnKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBUUyAzLjcgc2hvdWxkIGFsbG93IHVzIHRvIGRvIHRoaXMgdmlhIGFzc2VydGlvblxuICAgIGxldCB0YWcgPSBfdGFnIGFzIE1vbm9tb3JwaGljVGFnSW1wbDtcblxuICAgIGlmIChzdWJ0YWcgPT09IENPTlNUQU5UX1RBRykge1xuICAgICAgdGFnLnN1YnRhZyA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgREVCVUcgJiZcbiAgICAgICAgdGFnLmxhc3RDaGVja2VkID09PSAkUkVWSVNJT04gJiZcbiAgICAgICAgKHN1YnRhZyBhcyBNb25vbW9ycGhpY1RhZ0ltcGwpW0NPTVBVVEVdKCkgPiB0YWcubGFzdFZhbHVlXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdCVUc6IGF0dGVtcHRlZCB0byB1cGRhdGUgYSB0YWcgd2l0aCBhIHRhZyB0aGF0IGhhcyBhIG1vcmUgcmVjZW50IHJldmlzaW9uIGFzIGl0cyB2YWx1ZSdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGFnLnN1YnRhZyA9IHN1YnRhZztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZGlydHkodGFnOiBEaXJ0eWFibGVUYWcgfCBVcGRhdGFibGVUYWcpIHtcbiAgICBpZiAoXG4gICAgICBERUJVRyAmJlxuICAgICAgISh0YWdbVFlQRV0gPT09IE1vbm9tb3JwaGljVGFnVHlwZXMuVXBkYXRhYmxlIHx8IHRhZ1tUWVBFXSA9PT0gTW9ub21vcnBoaWNUYWdUeXBlcy5EaXJ0eWFibGUpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRlZCB0byBkaXJ0eSBhIHRhZyB0aGF0IHdhcyBub3QgZGlydHlhYmxlJyk7XG4gICAgfVxuXG4gICAgaWYgKERFQlVHKSB7XG4gICAgICAvLyBVc3VhbGx5IGJ5IHRoaXMgcG9pbnQsIHdlJ3ZlIGFscmVhZHkgYXNzZXJ0ZWQgd2l0aCBiZXR0ZXIgZXJyb3IgaW5mb3JtYXRpb24sXG4gICAgICAvLyBidXQgdGhpcyBpcyBvdXIgbGFzdCBsaW5lIG9mIGRlZmVuc2UuXG4gICAgICBhc3NlcnRUYWdOb3RDb25zdW1lZCEodGFnKTtcbiAgICB9XG5cbiAgICAodGFnIGFzIE1vbm9tb3JwaGljVGFnSW1wbCkucmV2aXNpb24gPSArKyRSRVZJU0lPTjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZGlydHkgPSBNb25vbW9ycGhpY1RhZ0ltcGwuZGlydHk7XG5leHBvcnQgY29uc3QgdXBkYXRlID0gTW9ub21vcnBoaWNUYWdJbXBsLnVwZGF0ZTtcblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFnKCk6IERpcnR5YWJsZVRhZyB7XG4gIHJldHVybiBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVwZGF0YWJsZVRhZygpOiBVcGRhdGFibGVUYWcge1xuICByZXR1cm4gbmV3IE1vbm9tb3JwaGljVGFnSW1wbChNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZSk7XG59XG5cbi8vLy8vLy8vLy9cblxuZXhwb3J0IGNvbnN0IENPTlNUQU5UX1RBRyA9IG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5Db25zdGFudCkgYXMgQ29uc3RhbnRUYWc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0KHsgdGFnIH06IFRhZ2dlZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gdGFnID09PSBDT05TVEFOVF9UQUc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0VGFnKHRhZzogVGFnKTogdGFnIGlzIENvbnN0YW50VGFnIHtcbiAgcmV0dXJuIHRhZyA9PT0gQ09OU1RBTlRfVEFHO1xufVxuXG4vLy8vLy8vLy8vXG5cbmNsYXNzIFZvbGF0aWxlVGFnIGltcGxlbWVudHMgVGFnIHtcbiAgW0NPTVBVVEVdKCkge1xuICAgIHJldHVybiBWT0xBVElMRTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgVk9MQVRJTEVfVEFHID0gbmV3IFZvbGF0aWxlVGFnKCk7XG5cbi8vLy8vLy8vLy9cblxuY2xhc3MgQ3VycmVudFRhZyBpbXBsZW1lbnRzIEN1cnJlbnRUYWcge1xuICBbQ09NUFVURV0oKSB7XG4gICAgcmV0dXJuICRSRVZJU0lPTjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgQ1VSUkVOVF9UQUcgPSBuZXcgQ3VycmVudFRhZygpO1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lKHRhZ3M6IFRhZ1tdKTogVGFnIHtcbiAgbGV0IG9wdGltaXplZDogVGFnW10gPSBbXTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IHRhZ3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgbGV0IHRhZyA9IHRhZ3NbaV07XG4gICAgaWYgKHRhZyA9PT0gQ09OU1RBTlRfVEFHKSBjb250aW51ZTtcbiAgICBvcHRpbWl6ZWQucHVzaCh0YWcpO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUNvbWJpbmF0b3JUYWcob3B0aW1pemVkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbWJpbmF0b3JUYWcodGFnczogVGFnW10pOiBUYWcge1xuICBzd2l0Y2ggKHRhZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIENPTlNUQU5UX1RBRztcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gdGFnc1swXTtcbiAgICBkZWZhdWx0OlxuICAgICAgbGV0IHRhZyA9IG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5Db21iaW5hdG9yKSBhcyBDb21iaW5hdG9yVGFnO1xuICAgICAgKHRhZyBhcyBhbnkpLnN1YnRhZ3MgPSB0YWdzO1xuICAgICAgcmV0dXJuIHRhZztcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7UUFjTSxJLEdBQUEsSTtRQXNDQSxLLEdBQUEsSztRQWNBLFEsR0FBQSxRO1FBcUtBLFMsR0FBQSxTO1FBSUEsa0IsR0FBQSxrQjtRQVFBLE8sR0FBQSxPO1FBSUEsVSxHQUFBLFU7UUEwQkEsTyxHQUFBLE87UUFZQSxtQixHQUFBLG1COztBQTdSTjs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFNTyxJQUFNLDhCQUFOLENBQUE7QUFDQSxJQUFNLDRCQUFOLENBQUE7QUFDQSxJQUFNLDhCQUFOLGdCQUFBLEMsQ0FBNkM7QUFFcEQsSUFBSSxZQUFKLE9BQUE7QUFFTSxTQUFBLElBQUEsR0FBYztBQUNsQjtBQUNEO0FBRUQ7QUFFTyxJQUFNLDRCQUF5QixtQkFBL0IsYUFBK0IsQ0FBL0I7QUFnQlA7QUFFQTs7Ozs7Ozs7Ozs7Ozs7QUFjTSxTQUFBLEtBQUEsQ0FBQSxJQUFBLEVBQXlCO0FBQzdCLFdBQUEsU0FBQTtBQUNEO0FBRUQ7Ozs7Ozs7Ozs7QUFVTSxTQUFBLFFBQUEsQ0FBQSxHQUFBLEVBQUEsUUFBQSxFQUErQztBQUNuRCxXQUFPLFlBQVksSUFBbkIsT0FBbUIsR0FBbkI7QUFDRDtBQWlCRCxJQUFNLE9BQXNCLG1CQUE1QixVQUE0QixDQUE1QjtBQUVPLElBQUEsc0NBQUEsS0FBQSxDQUFBO0FBRVAsSUFBQSxVQUFBLEVBQVc7QUFDVCxZQUhLLFlBR0wsa0JBQWUsSUFBZixPQUFlLEVBQWY7QUFDRDs7SUFxQkQscUI7QUFhRSxhQUFBLGtCQUFBLENBQUEsSUFBQSxFQUFxQztBQUFBLHdCQUFBLElBQUEsRUFBQSxrQkFBQTs7QUFaN0IsYUFBQSxRQUFBLEdBQUEsT0FBQTtBQUNBLGFBQUEsV0FBQSxHQUFBLE9BQUE7QUFDQSxhQUFBLFNBQUEsR0FBQSxPQUFBO0FBRUEsYUFBQSxVQUFBLEdBQUEsS0FB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Q0UsZ0JBQUksTUFBTSxJQUFBLGtCQUFBLENBQUEsQ0FBQSxDQUFWLGdCQUFVLENBQVY7QUFDQyxnQkFBQSxPQUFBLEdBQUEsSUFBQTtBQUNELG1CQUFBLEdBQUE7QUFSSjtBQVVEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUcgfSBmcm9tICdAZ2xpbW1lci9lbnYnO1xuaW1wb3J0IHsgVW5pb25Ub0ludGVyc2VjdGlvbiwgc3ltYm9sIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBhc3NlcnRUYWdOb3RDb25zdW1lZCB9IGZyb20gJy4vZGVidWcnO1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCB0eXBlIFJldmlzaW9uID0gbnVtYmVyO1xuXG5leHBvcnQgY29uc3QgQ09OU1RBTlQ6IFJldmlzaW9uID0gMDtcbmV4cG9ydCBjb25zdCBJTklUSUFMOiBSZXZpc2lvbiA9IDE7XG5leHBvcnQgY29uc3QgVk9MQVRJTEU6IFJldmlzaW9uID0gOTAwNzE5OTI1NDc0MDk5MTsgLy8gTUFYX0lOVFxuXG5sZXQgJFJFVklTSU9OID0gSU5JVElBTDtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1bXAoKSB7XG4gICRSRVZJU0lPTisrO1xufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCBDT01QVVRFOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdUQUdfQ09NUFVURScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVRhZzxUPiB7XG4gIFtDT01QVVRFXSgpOiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhZyBleHRlbmRzIEVudGl0eVRhZzxSZXZpc2lvbj4ge31cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUYWdnZWQ8VD4ge1xuICB0YWc6IEVudGl0eVRhZzxUPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWdnZWQge1xuICB0YWc6IFRhZztcbn1cblxuLy8vLy8vLy8vL1xuXG4vKipcbiAqIGB2YWx1ZWAgcmVjZWl2ZXMgYSB0YWcgYW5kIHJldHVybnMgYW4gb3BhcXVlIFJldmlzaW9uIGJhc2VkIG9uIHRoYXQgdGFnLiBUaGlzXG4gKiBzbmFwc2hvdCBjYW4gdGhlbiBsYXRlciBiZSBwYXNzZWQgdG8gYHZhbGlkYXRlYCB3aXRoIHRoZSBzYW1lIHRhZyB0b1xuICogZGV0ZXJtaW5lIGlmIHRoZSB0YWcgaGFzIGNoYW5nZWQgYXQgYWxsIHNpbmNlIHRoZSB0aW1lIHRoYXQgYHZhbHVlYCB3YXNcbiAqIGNhbGxlZC5cbiAqXG4gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHRoZSBnbG9iYWwgcmV2aXNpb24gY291bnQgZGlyZWN0bHkgZm9yXG4gKiBwZXJmb3JtYW5jZSByZWFzb25zLiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgYW5kIHNob3VsZCBub3QgYmVcbiAqIHJlbGllZCBvbiBkaXJlY3RseSBieSB1c2VycyBvZiB0aGVzZSBBUElzLiBJbnN0ZWFkLCBSZXZpc2lvbnMgc2hvdWxkIGJlXG4gKiB0cmVhdGVkIGFzIGlmIHRoZXkgYXJlIG9wYXF1ZS91bmtub3duLCBhbmQgc2hvdWxkIG9ubHkgYmUgaW50ZXJhY3RlZCB3aXRoIHZpYVxuICogdGhlIGB2YWx1ZWAvYHZhbGlkYXRlYCBBUEkuXG4gKlxuICogQHBhcmFtIHRhZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsdWUoX3RhZzogVGFnKTogUmV2aXNpb24ge1xuICByZXR1cm4gJFJFVklTSU9OO1xufVxuXG4vKipcbiAqIGB2YWxpZGF0ZWAgcmVjZWl2ZXMgYSB0YWcgYW5kIGEgc25hcHNob3QgZnJvbSBhIHByZXZpb3VzIGNhbGwgdG8gYHZhbHVlYCB3aXRoXG4gKiB0aGUgc2FtZSB0YWcsIGFuZCBkZXRlcm1pbmVzIGlmIHRoZSB0YWcgaXMgc3RpbGwgdmFsaWQgY29tcGFyZWQgdG8gdGhlXG4gKiBzbmFwc2hvdC4gSWYgdGhlIHRhZydzIHN0YXRlIGhhcyBjaGFuZ2VkIGF0IGFsbCBzaW5jZSB0aGVuLCBgdmFsaWRhdGVgIHdpbGxcbiAqIHJldHVybiBmYWxzZSwgb3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIHRydWUuIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYVxuICogY2FsY3VsYXRpb24gcmVsYXRlZCB0byB0aGUgdGFncyBzaG91bGQgYmUgcmVydW4uXG4gKlxuICogQHBhcmFtIHRhZ1xuICogQHBhcmFtIHNuYXBzaG90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZSh0YWc6IFRhZywgc25hcHNob3Q6IFJldmlzaW9uKSB7XG4gIHJldHVybiBzbmFwc2hvdCA+PSB0YWdbQ09NUFVURV0oKTtcbn1cblxuLy8vLy8vLy8vL1xuXG4vKipcbiAqIFRoaXMgZW51bSByZXByZXNlbnRzIGFsbCBvZiB0aGUgcG9zc2libGUgdGFnIHR5cGVzIGZvciB0aGUgbW9ub21vcnBoaWMgdGFnIGNsYXNzLlxuICogT3RoZXIgY3VzdG9tIHRhZyBjbGFzc2VzIGNhbiBleGlzdCwgc3VjaCBhcyBDdXJyZW50VGFnIGFuZCBWb2xhdGlsZVRhZywgYnV0IGZvclxuICogcGVyZm9ybWFuY2UgcmVhc29ucywgYW55IHR5cGUgb2YgdGFnIHRoYXQgaXMgbWVhbnQgdG8gYmUgdXNlZCBmcmVxdWVudGx5IHNob3VsZFxuICogYmUgYWRkZWQgdG8gdGhlIG1vbm9tb3JwaGljIHRhZy5cbiAqL1xuY29uc3QgZW51bSBNb25vbW9ycGhpY1RhZ1R5cGVzIHtcbiAgRGlydHlhYmxlLFxuICBVcGRhdGFibGUsXG4gIENvbWJpbmF0b3IsXG4gIENvbnN0YW50LFxufVxuXG5jb25zdCBUWVBFOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdUQUdfVFlQRScpO1xuXG5leHBvcnQgbGV0IEFMTE9XX0NZQ0xFUzogV2Vha01hcDxUYWcsIGJvb2xlYW4+IHwgdW5kZWZpbmVkO1xuXG5pZiAoREVCVUcpIHtcbiAgQUxMT1dfQ1lDTEVTID0gbmV3IFdlYWtNYXAoKTtcbn1cblxuaW50ZXJmYWNlIE1vbm9tb3JwaGljVGFnQmFzZTxUIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdUeXBlcz4gZXh0ZW5kcyBUYWcge1xuICBbVFlQRV06IFQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlydHlhYmxlVGFnIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdCYXNlPE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlPiB7fVxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGFibGVUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGU+IHt9XG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmF0b3JUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5Db21iaW5hdG9yPiB7fVxuZXhwb3J0IGludGVyZmFjZSBDb25zdGFudFRhZyBleHRlbmRzIE1vbm9tb3JwaGljVGFnQmFzZTxNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbnN0YW50PiB7fVxuXG5pbnRlcmZhY2UgTW9ub21vcnBoaWNUYWdNYXBwaW5nIHtcbiAgW01vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlXTogRGlydHlhYmxlVGFnO1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGVdOiBVcGRhdGFibGVUYWc7XG4gIFtNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbWJpbmF0b3JdOiBDb21iaW5hdG9yVGFnO1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5Db25zdGFudF06IENvbnN0YW50VGFnO1xufVxuXG50eXBlIE1vbm9tb3JwaGljVGFnID0gVW5pb25Ub0ludGVyc2VjdGlvbjxNb25vbW9ycGhpY1RhZ01hcHBpbmdbTW9ub21vcnBoaWNUYWdUeXBlc10+O1xudHlwZSBNb25vbW9ycGhpY1RhZ1R5cGUgPSBVbmlvblRvSW50ZXJzZWN0aW9uPE1vbm9tb3JwaGljVGFnVHlwZXM+O1xuXG5jbGFzcyBNb25vbW9ycGhpY1RhZ0ltcGwgaW1wbGVtZW50cyBNb25vbW9ycGhpY1RhZyB7XG4gIHByaXZhdGUgcmV2aXNpb24gPSBJTklUSUFMO1xuICBwcml2YXRlIGxhc3RDaGVja2VkID0gSU5JVElBTDtcbiAgcHJpdmF0ZSBsYXN0VmFsdWUgPSBJTklUSUFMO1xuXG4gIHByaXZhdGUgaXNVcGRhdGluZyA9IGZhbHNlO1xuICBwcml2YXRlIHN1YnRhZ3M6IFRhZ1tdIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBzdWJ0YWc6IFRhZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHN1YnRhZ0J1ZmZlckNhY2hlOiBSZXZpc2lvbiB8IG51bGwgPSBudWxsO1xuXG4gIFtUWVBFXTogTW9ub21vcnBoaWNUYWdUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1vbm9tb3JwaGljVGFnVHlwZXMpIHtcbiAgICB0aGlzW1RZUEVdID0gdHlwZSBhcyBNb25vbW9ycGhpY1RhZ1R5cGU7XG4gIH1cblxuICBbQ09NUFVURV0oKTogUmV2aXNpb24ge1xuICAgIGxldCB7IGxhc3RDaGVja2VkIH0gPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMuaXNVcGRhdGluZyA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKERFQlVHICYmICFBTExPV19DWUNMRVMhLmhhcyh0aGlzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0N5Y2xlcyBpbiB0YWdzIGFyZSBub3QgYWxsb3dlZCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxhc3RDaGVja2VkID0gKyskUkVWSVNJT047XG4gICAgfSBlbHNlIGlmIChsYXN0Q2hlY2tlZCAhPT0gJFJFVklTSU9OKSB7XG4gICAgICB0aGlzLmlzVXBkYXRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5sYXN0Q2hlY2tlZCA9ICRSRVZJU0lPTjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IHsgc3VidGFncywgc3VidGFnLCBzdWJ0YWdCdWZmZXJDYWNoZSwgbGFzdFZhbHVlLCByZXZpc2lvbiB9ID0gdGhpcztcblxuICAgICAgICBpZiAoc3VidGFnICE9PSBudWxsKSB7XG4gICAgICAgICAgbGV0IHN1YnRhZ1ZhbHVlID0gc3VidGFnW0NPTVBVVEVdKCk7XG5cbiAgICAgICAgICBpZiAoc3VidGFnVmFsdWUgPT09IHN1YnRhZ0J1ZmZlckNhY2hlKSB7XG4gICAgICAgICAgICByZXZpc2lvbiA9IE1hdGgubWF4KHJldmlzaW9uLCBsYXN0VmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDbGVhciB0aGUgdGVtcG9yYXJ5IGJ1ZmZlciBjYWNoZVxuICAgICAgICAgICAgdGhpcy5zdWJ0YWdCdWZmZXJDYWNoZSA9IG51bGw7XG4gICAgICAgICAgICByZXZpc2lvbiA9IE1hdGgubWF4KHJldmlzaW9uLCBzdWJ0YWdWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YnRhZ3MgIT09IG51bGwpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1YnRhZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHN1YnRhZ3NbaV1bQ09NUFVURV0oKTtcbiAgICAgICAgICAgIHJldmlzaW9uID0gTWF0aC5tYXgodmFsdWUsIHJldmlzaW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxhc3RWYWx1ZSA9IHJldmlzaW9uO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5pc1VwZGF0aW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubGFzdFZhbHVlO1xuICB9XG5cbiAgc3RhdGljIHVwZGF0ZShfdGFnOiBVcGRhdGFibGVUYWcsIF9zdWJ0YWc6IFRhZykge1xuICAgIGlmIChERUJVRyAmJiBfdGFnW1RZUEVdICE9PSBNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0ZWQgdG8gdXBkYXRlIGEgdGFnIHRoYXQgd2FzIG5vdCB1cGRhdGFibGUnKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBUUyAzLjcgc2hvdWxkIGFsbG93IHVzIHRvIGRvIHRoaXMgdmlhIGFzc2VydGlvblxuICAgIGxldCB0YWcgPSBfdGFnIGFzIE1vbm9tb3JwaGljVGFnSW1wbDtcbiAgICBsZXQgc3VidGFnID0gX3N1YnRhZyBhcyBNb25vbW9ycGhpY1RhZ0ltcGw7XG5cbiAgICBpZiAoc3VidGFnID09PSBDT05TVEFOVF9UQUcpIHtcbiAgICAgIHRhZy5zdWJ0YWcgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGVyZSBhcmUgdHdvIGRpZmZlcmVudCBwb3NzaWJpbGl0aWVzIHdoZW4gdXBkYXRpbmcgYSBzdWJ0YWc6XG4gICAgICAvL1xuICAgICAgLy8gMS4gc3VidGFnW0NPTVBVVEVdKCkgPD0gdGFnW0NPTVBVVEVdKCk7XG4gICAgICAvLyAyLiBzdWJ0YWdbQ09NUFVURV0oKSA+IHRhZ1tDT01QVVRFXSgpO1xuICAgICAgLy9cbiAgICAgIC8vIFRoZSBmaXJzdCBwb3NzaWJpbGl0eSBpcyBjb21wbGV0ZWx5IGZpbmUgd2l0aGluIG91ciBjYWNoaW5nIG1vZGVsLCBidXRcbiAgICAgIC8vIHRoZSBzZWNvbmQgcG9zc2liaWxpdHkgcHJlc2VudHMgYSBwcm9ibGVtLiBJZiB0aGUgcGFyZW50IHRhZyBoYXNcbiAgICAgIC8vIGFscmVhZHkgYmVlbiByZWFkLCB0aGVuIGl0J3MgdmFsdWUgaXMgY2FjaGVkIGFuZCB3aWxsIG5vdCB1cGRhdGUgdG9cbiAgICAgIC8vIHJlZmxlY3QgdGhlIHN1YnRhZydzIGdyZWF0ZXIgdmFsdWUuIE5leHQgdGltZSB0aGUgY2FjaGUgaXMgYnVzdGVkLCB0aGVcbiAgICAgIC8vIHN1YnRhZydzIHZhbHVlIF93aWxsXyBiZSByZWFkLCBhbmQgaXQncyB2YWx1ZSB3aWxsIGJlIF9ncmVhdGVyXyB0aGFuXG4gICAgICAvLyB0aGUgc2F2ZWQgc25hcHNob3Qgb2YgdGhlIHBhcmVudCwgY2F1c2luZyB0aGUgcmVzdWx0aW5nIGNhbGN1bGF0aW9uIHRvXG4gICAgICAvLyBiZSByZXJ1biBlcnJvbmVvdXNseS5cbiAgICAgIC8vXG4gICAgICAvLyBJbiBvcmRlciB0byBwcmV2ZW50IHRoaXMsIHdoZW4gd2UgZmlyc3QgdXBkYXRlIHRvIGEgbmV3IHN1YnRhZyB3ZSBzdG9yZVxuICAgICAgLy8gaXRzIGNvbXB1dGVkIHZhbHVlLCBhbmQgdGhlbiBjaGVjayBhZ2FpbnN0IHRoYXQgY29tcHV0ZWQgdmFsdWUgb25cbiAgICAgIC8vIHN1YnNlcXVlbnQgdXBkYXRlcy4gSWYgaXRzIHZhbHVlIGhhc24ndCBjaGFuZ2VkLCB0aGVuIHdlIHJldHVybiB0aGVcbiAgICAgIC8vIHBhcmVudCdzIHByZXZpb3VzIHZhbHVlLiBPbmNlIHRoZSBzdWJ0YWcgY2hhbmdlcyBmb3IgdGhlIGZpcnN0IHRpbWUsXG4gICAgICAvLyB3ZSBjbGVhciB0aGUgY2FjaGUgYW5kIGV2ZXJ5dGhpbmcgaXMgZmluYWxseSBpbiBzeW5jIHdpdGggdGhlIHBhcmVudC5cbiAgICAgIHRhZy5zdWJ0YWdCdWZmZXJDYWNoZSA9IHN1YnRhZ1tDT01QVVRFXSgpO1xuICAgICAgdGFnLnN1YnRhZyA9IHN1YnRhZztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZGlydHkodGFnOiBEaXJ0eWFibGVUYWcgfCBVcGRhdGFibGVUYWcpIHtcbiAgICBpZiAoXG4gICAgICBERUJVRyAmJlxuICAgICAgISh0YWdbVFlQRV0gPT09IE1vbm9tb3JwaGljVGFnVHlwZXMuVXBkYXRhYmxlIHx8IHRhZ1tUWVBFXSA9PT0gTW9ub21vcnBoaWNUYWdUeXBlcy5EaXJ0eWFibGUpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRlZCB0byBkaXJ0eSBhIHRhZyB0aGF0IHdhcyBub3QgZGlydHlhYmxlJyk7XG4gICAgfVxuXG4gICAgaWYgKERFQlVHKSB7XG4gICAgICAvLyBVc3VhbGx5IGJ5IHRoaXMgcG9pbnQsIHdlJ3ZlIGFscmVhZHkgYXNzZXJ0ZWQgd2l0aCBiZXR0ZXIgZXJyb3IgaW5mb3JtYXRpb24sXG4gICAgICAvLyBidXQgdGhpcyBpcyBvdXIgbGFzdCBsaW5lIG9mIGRlZmVuc2UuXG4gICAgICBhc3NlcnRUYWdOb3RDb25zdW1lZCEodGFnKTtcbiAgICB9XG5cbiAgICAodGFnIGFzIE1vbm9tb3JwaGljVGFnSW1wbCkucmV2aXNpb24gPSArKyRSRVZJU0lPTjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZGlydHkgPSBNb25vbW9ycGhpY1RhZ0ltcGwuZGlydHk7XG5leHBvcnQgY29uc3QgdXBkYXRlID0gTW9ub21vcnBoaWNUYWdJbXBsLnVwZGF0ZTtcblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFnKCk6IERpcnR5YWJsZVRhZyB7XG4gIHJldHVybiBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVwZGF0YWJsZVRhZygpOiBVcGRhdGFibGVUYWcge1xuICByZXR1cm4gbmV3IE1vbm9tb3JwaGljVGFnSW1wbChNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZSk7XG59XG5cbi8vLy8vLy8vLy9cblxuZXhwb3J0IGNvbnN0IENPTlNUQU5UX1RBRyA9IG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5Db25zdGFudCkgYXMgQ29uc3RhbnRUYWc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0KHsgdGFnIH06IFRhZ2dlZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gdGFnID09PSBDT05TVEFOVF9UQUc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0VGFnKHRhZzogVGFnKTogdGFnIGlzIENvbnN0YW50VGFnIHtcbiAgcmV0dXJuIHRhZyA9PT0gQ09OU1RBTlRfVEFHO1xufVxuXG4vLy8vLy8vLy8vXG5cbmNsYXNzIFZvbGF0aWxlVGFnIGltcGxlbWVudHMgVGFnIHtcbiAgW0NPTVBVVEVdKCkge1xuICAgIHJldHVybiBWT0xBVElMRTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgVk9MQVRJTEVfVEFHID0gbmV3IFZvbGF0aWxlVGFnKCk7XG5cbi8vLy8vLy8vLy9cblxuY2xhc3MgQ3VycmVudFRhZyBpbXBsZW1lbnRzIEN1cnJlbnRUYWcge1xuICBbQ09NUFVURV0oKSB7XG4gICAgcmV0dXJuICRSRVZJU0lPTjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgQ1VSUkVOVF9UQUcgPSBuZXcgQ3VycmVudFRhZygpO1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lKHRhZ3M6IFRhZ1tdKTogVGFnIHtcbiAgbGV0IG9wdGltaXplZDogVGFnW10gPSBbXTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IHRhZ3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgbGV0IHRhZyA9IHRhZ3NbaV07XG4gICAgaWYgKHRhZyA9PT0gQ09OU1RBTlRfVEFHKSBjb250aW51ZTtcbiAgICBvcHRpbWl6ZWQucHVzaCh0YWcpO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUNvbWJpbmF0b3JUYWcob3B0aW1pemVkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbWJpbmF0b3JUYWcodGFnczogVGFnW10pOiBUYWcge1xuICBzd2l0Y2ggKHRhZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIENPTlNUQU5UX1RBRztcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gdGFnc1swXTtcbiAgICBkZWZhdWx0OlxuICAgICAgbGV0IHRhZyA9IG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5Db21iaW5hdG9yKSBhcyBDb21iaW5hdG9yVGFnO1xuICAgICAgKHRhZyBhcyBhbnkpLnN1YnRhZ3MgPSB0YWdzO1xuICAgICAgcmV0dXJuIHRhZztcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==

@@ -28,8 +28,3 @@ import { DEBUG } from '@glimmer/env';

*/
export function value(tag) {
if (DEBUG) {
// compute to cache the latest value, which will prevent us from doing
// invalid updates later on.
tag[COMPUTE]();
}
export function value(_tag) {
return $REVISION;

@@ -48,17 +43,4 @@ }

export function validate(tag, snapshot) {
if (DEBUG) {
IS_VALIDATING = true;
}
let isValid = snapshot >= tag[COMPUTE]();
if (DEBUG) {
IS_VALIDATING = false;
if (isValid) {
// compute to cache the latest value, which will prevent us from doing
// invalid updates later on.
tag[COMPUTE]();
}
}
return isValid;
return snapshot >= tag[COMPUTE]();
}
let IS_VALIDATING;
const TYPE = symbol('TAG_TYPE');

@@ -75,4 +57,5 @@ export let ALLOW_CYCLES;

this.isUpdating = false;
this.subtags = null;
this.subtag = null;
this.subtags = null;
this.subtagBufferCache = null;
this[TYPE] = type;

@@ -89,19 +72,14 @@ }

this.isUpdating = true;
if (DEBUG) {
// In DEBUG, we don't cache while validating only, because it is valid
// update a tag between calling `validate()` and `value()`. Once you
// call `value()` on a tag, its revision is effectively locked in, and
// if you attempt to update it to a tag that is more recent it could
// break assumptions in our system. This is why the assertion exists in
// the static `update()` method below.
if (!IS_VALIDATING) {
this.lastChecked = $REVISION;
}
} else {
this.lastChecked = $REVISION;
}
this.lastChecked = $REVISION;
try {
let { subtags, subtag, revision } = this;
let { subtags, subtag, subtagBufferCache, lastValue, revision } = this;
if (subtag !== null) {
revision = Math.max(revision, subtag[COMPUTE]());
let subtagValue = subtag[COMPUTE]();
if (subtagValue === subtagBufferCache) {
revision = Math.max(revision, lastValue);
} else {
// Clear the temporary buffer cache
this.subtagBufferCache = null;
revision = Math.max(revision, subtagValue);
}
}

@@ -121,3 +99,3 @@ if (subtags !== null) {

}
static update(_tag, subtag) {
static update(_tag, _subtag) {
if (DEBUG && _tag[TYPE] !== 1 /* Updatable */) {

@@ -128,8 +106,25 @@ throw new Error('Attempted to update a tag that was not updatable');

let tag = _tag;
let subtag = _subtag;
if (subtag === CONSTANT_TAG) {
tag.subtag = null;
} else {
if (DEBUG && tag.lastChecked === $REVISION && subtag[COMPUTE]() > tag.lastValue) {
throw new Error('BUG: attempted to update a tag with a tag that has a more recent revision as its value');
}
// There are two different possibilities when updating a subtag:
//
// 1. subtag[COMPUTE]() <= tag[COMPUTE]();
// 2. subtag[COMPUTE]() > tag[COMPUTE]();
//
// The first possibility is completely fine within our caching model, but
// the second possibility presents a problem. If the parent tag has
// already been read, then it's value is cached and will not update to
// reflect the subtag's greater value. Next time the cache is busted, the
// subtag's value _will_ be read, and it's value will be _greater_ than
// the saved snapshot of the parent, causing the resulting calculation to
// be rerun erroneously.
//
// In order to prevent this, when we first update to a new subtag we store
// its computed value, and then check against that computed value on
// subsequent updates. If its value hasn't changed, then we return the
// parent's previous value. Once the subtag changes for the first time,
// we clear the cache and everything is finally in sync with the parent.
tag.subtagBufferCache = subtag[COMPUTE]();
tag.subtag = subtag;

@@ -203,2 +198,2 @@ }

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLEtBQVQsUUFBc0IsY0FBdEI7QUFDQSxTQUE4QixNQUE5QixRQUE0QyxTQUE1QztBQUNBLFNBQVMsb0JBQVQsUUFBcUMsU0FBckM7QUFNQSxPQUFPLE1BQU0sV0FBcUIsQ0FBM0I7QUFDUCxPQUFPLE1BQU0sVUFBb0IsQ0FBMUI7QUFDUCxPQUFPLE1BQU0sV0FBcUIsZ0JBQTNCLEMsQ0FBNkM7QUFFcEQsSUFBSSxZQUFZLE9BQWhCO0FBRUEsT0FBTSxTQUFVLElBQVYsR0FBYztBQUNsQjtBQUNEO0FBRUQ7QUFFQSxPQUFPLE1BQU0sVUFBeUIsT0FBTyxhQUFQLENBQS9CO0FBZ0JQO0FBRUE7Ozs7Ozs7Ozs7Ozs7O0FBY0EsT0FBTSxTQUFVLEtBQVYsQ0FBZ0IsR0FBaEIsRUFBd0I7QUFDNUIsUUFBSSxLQUFKLEVBQVc7QUFDVDtBQUNBO0FBQ0EsWUFBSSxPQUFKO0FBQ0Q7QUFFRCxXQUFPLFNBQVA7QUFDRDtBQUVEOzs7Ozs7Ozs7O0FBVUEsT0FBTSxTQUFVLFFBQVYsQ0FBbUIsR0FBbkIsRUFBNkIsUUFBN0IsRUFBK0M7QUFDbkQsUUFBSSxLQUFKLEVBQVc7QUFDVCx3QkFBZ0IsSUFBaEI7QUFDRDtBQUVELFFBQUksVUFBVSxZQUFZLElBQUksT0FBSixHQUExQjtBQUVBLFFBQUksS0FBSixFQUFXO0FBQ1Qsd0JBQWdCLEtBQWhCO0FBRUEsWUFBSSxPQUFKLEVBQWE7QUFDWDtBQUNBO0FBQ0EsZ0JBQUksT0FBSjtBQUNEO0FBQ0Y7QUFFRCxXQUFPLE9BQVA7QUFDRDtBQUVELElBQUksYUFBSjtBQWlCQSxNQUFNLE9BQXNCLE9BQU8sVUFBUCxDQUE1QjtBQUVBLE9BQU8sSUFBSSxZQUFKO0FBRVAsSUFBSSxLQUFKLEVBQVc7QUFDVCxtQkFBZSxJQUFJLE9BQUosRUFBZjtBQUNEO0FBcUJELE1BQU0sa0JBQU4sQ0FBd0I7QUFXdEIsZ0JBQVksSUFBWixFQUFxQztBQVY3QixhQUFBLFFBQUEsR0FBVyxPQUFYO0FBQ0EsYUFBQSxXQUFBLEdBQWMsT0FBZDtBQUNBLGFBQUEsU0FBQSxHQUFZLE9BQVo7QUFFQSxhQUFBLFVBQUEsR0FBYSxLQUFiO0FBQ0EsYUFBQSxNQUFBLEdBQXFCLElBQXJCO0FBQ0EsYUFBQSxPQUFBLEdBQXdCLElBQXhCO0FBS04sYUFBSyxJQUFMLElBQWEsSUFBYjtBQUNEO0FBRUQsS0FBQyxPQUFELElBQVM7QUFDUCxZQUFJLEVBQUUsV0FBRixLQUFrQixJQUF0QjtBQUVBLFlBQUksS0FBSyxVQUFMLEtBQW9CLElBQXhCLEVBQThCO0FBQzVCLGdCQUFJLFNBQVMsQ0FBQyxhQUFjLEdBQWQsQ0FBa0IsSUFBbEIsQ0FBZCxFQUF1QztBQUNyQyxzQkFBTSxJQUFJLEtBQUosQ0FBVSxnQ0FBVixDQUFOO0FBQ0Q7QUFFRCxpQkFBSyxXQUFMLEdBQW1CLEVBQUUsU0FBckI7QUFDRCxTQU5ELE1BTU8sSUFBSSxnQkFBZ0IsU0FBcEIsRUFBK0I7QUFDcEMsaUJBQUssVUFBTCxHQUFrQixJQUFsQjtBQUVBLGdCQUFJLEtBQUosRUFBVztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFJLENBQUMsYUFBTCxFQUFvQjtBQUNsQix5QkFBSyxXQUFMLEdBQW1CLFNBQW5CO0FBQ0Q7QUFDRixhQVZELE1BVU87QUFDTCxxQkFBSyxXQUFMLEdBQW1CLFNBQW5CO0FBQ0Q7QUFFRCxnQkFBSTtBQUNGLG9CQUFJLEVBQUUsT0FBRixFQUFXLE1BQVgsRUFBbUIsUUFBbkIsS0FBZ0MsSUFBcEM7QUFFQSxvQkFBSSxXQUFXLElBQWYsRUFBcUI7QUFDbkIsK0JBQVcsS0FBSyxHQUFMLENBQVMsUUFBVCxFQUFtQixPQUFPLE9BQVAsR0FBbkIsQ0FBWDtBQUNEO0FBRUQsb0JBQUksWUFBWSxJQUFoQixFQUFzQjtBQUNwQix5QkFBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLFFBQVEsTUFBNUIsRUFBb0MsR0FBcEMsRUFBeUM7QUFDdkMsNEJBQUksUUFBUSxRQUFRLENBQVIsRUFBVyxPQUFYLEdBQVo7QUFDQSxtQ0FBVyxLQUFLLEdBQUwsQ0FBUyxLQUFULEVBQWdCLFFBQWhCLENBQVg7QUFDRDtBQUNGO0FBRUQscUJBQUssU0FBTCxHQUFpQixRQUFqQjtBQUNELGFBZkQsU0FlVTtBQUNSLHFCQUFLLFVBQUwsR0FBa0IsS0FBbEI7QUFDRDtBQUNGO0FBRUQsZUFBTyxLQUFLLFNBQVo7QUFDRDtBQUVELFdBQU8sTUFBUCxDQUFjLElBQWQsRUFBa0MsTUFBbEMsRUFBNkM7QUFDM0MsWUFBSSxTQUFTLEtBQUssSUFBTCxNQUFVLENBQXZCLENBQXVCLGVBQXZCLEVBQTJEO0FBQ3pELHNCQUFNLElBQUksS0FBSixDQUFVLGtEQUFWLENBQU47QUFDRDtBQUVEO0FBQ0EsWUFBSSxNQUFNLElBQVY7QUFFQSxZQUFJLFdBQVcsWUFBZixFQUE2QjtBQUMzQixnQkFBSSxNQUFKLEdBQWEsSUFBYjtBQUNELFNBRkQsTUFFTztBQUNMLGdCQUNFLFNBQ0EsSUFBSSxXQUFKLEtBQW9CLFNBRHBCLElBRUMsT0FBOEIsT0FBOUIsTUFBMkMsSUFBSSxTQUhsRCxFQUlFO0FBQ0Esc0JBQU0sSUFBSSxLQUFKLENBQ0osd0ZBREksQ0FBTjtBQUdEO0FBRUQsZ0JBQUksTUFBSixHQUFhLE1BQWI7QUFDRDtBQUNGO0FBRUQsV0FBTyxLQUFQLENBQWEsR0FBYixFQUE2QztBQUMzQyxZQUNFLFNBQ0EsRUFBRSxJQUFJLElBQUosTUFBUyxDQUFULENBQVMsZUFBVCxJQUErQyxJQUFJLElBQUosTUFBUyxDQUExRCxDQUEwRCxlQUExRCxDQUZGLEVBR0U7QUFDQSxrQkFBTSxJQUFJLEtBQUosQ0FBVSxpREFBVixDQUFOO0FBQ0Q7QUFFRCxZQUFJLEtBQUosRUFBVztBQUNUO0FBQ0E7QUFDQSxpQ0FBc0IsR0FBdEI7QUFDRDtBQUVBLFlBQTJCLFFBQTNCLEdBQXNDLEVBQUUsU0FBeEM7QUFDRjtBQXhHcUI7QUEyR3hCLE9BQU8sTUFBTSxRQUFRLG1CQUFtQixLQUFqQztBQUNQLE9BQU8sTUFBTSxTQUFTLG1CQUFtQixNQUFsQztBQUVQO0FBRUEsT0FBTSxTQUFVLFNBQVYsR0FBbUI7QUFDdkIsV0FBTyxJQUFJLGtCQUFKLENBQXNCLENBQXRCLENBQXNCLGVBQXRCLENBQVA7QUFDRDtBQUVELE9BQU0sU0FBVSxrQkFBVixHQUE0QjtBQUNoQyxXQUFPLElBQUksa0JBQUosQ0FBc0IsQ0FBdEIsQ0FBc0IsZUFBdEIsQ0FBUDtBQUNEO0FBRUQ7QUFFQSxPQUFPLE1BQU0sZUFBZSxJQUFJLGtCQUFKLENBQXNCLENBQXRCLENBQXNCLGNBQXRCLENBQXJCO0FBRVAsT0FBTSxTQUFVLE9BQVYsQ0FBa0IsRUFBRSxHQUFGLEVBQWxCLEVBQWlDO0FBQ3JDLFdBQU8sUUFBUSxZQUFmO0FBQ0Q7QUFFRCxPQUFNLFNBQVUsVUFBVixDQUFxQixHQUFyQixFQUE2QjtBQUNqQyxXQUFPLFFBQVEsWUFBZjtBQUNEO0FBRUQ7QUFFQSxNQUFNLFdBQU4sQ0FBaUI7QUFDZixLQUFDLE9BQUQsSUFBUztBQUNQLGVBQU8sUUFBUDtBQUNEO0FBSGM7QUFNakIsT0FBTyxNQUFNLGVBQWUsSUFBSSxXQUFKLEVBQXJCO0FBRVA7QUFFQSxNQUFNLFVBQU4sQ0FBZ0I7QUFDZCxLQUFDLE9BQUQsSUFBUztBQUNQLGVBQU8sU0FBUDtBQUNEO0FBSGE7QUFNaEIsT0FBTyxNQUFNLGNBQWMsSUFBSSxVQUFKLEVBQXBCO0FBRVA7QUFFQSxPQUFNLFNBQVUsT0FBVixDQUFrQixJQUFsQixFQUE2QjtBQUNqQyxRQUFJLFlBQW1CLEVBQXZCO0FBRUEsU0FBSyxJQUFJLElBQUksQ0FBUixFQUFXLElBQUksS0FBSyxNQUF6QixFQUFpQyxJQUFJLENBQXJDLEVBQXdDLEdBQXhDLEVBQTZDO0FBQzNDLFlBQUksTUFBTSxLQUFLLENBQUwsQ0FBVjtBQUNBLFlBQUksUUFBUSxZQUFaLEVBQTBCO0FBQzFCLGtCQUFVLElBQVYsQ0FBZSxHQUFmO0FBQ0Q7QUFFRCxXQUFPLG9CQUFvQixTQUFwQixDQUFQO0FBQ0Q7QUFFRCxPQUFNLFNBQVUsbUJBQVYsQ0FBOEIsSUFBOUIsRUFBeUM7QUFDN0MsWUFBUSxLQUFLLE1BQWI7QUFDRSxhQUFLLENBQUw7QUFDRSxtQkFBTyxZQUFQO0FBQ0YsYUFBSyxDQUFMO0FBQ0UsbUJBQU8sS0FBSyxDQUFMLENBQVA7QUFDRjtBQUNFLGdCQUFJLE1BQU0sSUFBSSxrQkFBSixDQUFzQixDQUF0QixDQUFzQixnQkFBdEIsQ0FBVjtBQUNDLGdCQUFZLE9BQVosR0FBc0IsSUFBdEI7QUFDRCxtQkFBTyxHQUFQO0FBUko7QUFVRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERFQlVHIH0gZnJvbSAnQGdsaW1tZXIvZW52JztcbmltcG9ydCB7IFVuaW9uVG9JbnRlcnNlY3Rpb24sIHN5bWJvbCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgYXNzZXJ0VGFnTm90Q29uc3VtZWQgfSBmcm9tICcuL2RlYnVnJztcblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgdHlwZSBSZXZpc2lvbiA9IG51bWJlcjtcblxuZXhwb3J0IGNvbnN0IENPTlNUQU5UOiBSZXZpc2lvbiA9IDA7XG5leHBvcnQgY29uc3QgSU5JVElBTDogUmV2aXNpb24gPSAxO1xuZXhwb3J0IGNvbnN0IFZPTEFUSUxFOiBSZXZpc2lvbiA9IDkwMDcxOTkyNTQ3NDA5OTE7IC8vIE1BWF9JTlRcblxubGV0ICRSRVZJU0lPTiA9IElOSVRJQUw7XG5cbmV4cG9ydCBmdW5jdGlvbiBidW1wKCkge1xuICAkUkVWSVNJT04rKztcbn1cblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgY29uc3QgQ09NUFVURTogdW5pcXVlIHN5bWJvbCA9IHN5bWJvbCgnVEFHX0NPTVBVVEUnKTtcblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUYWc8VD4ge1xuICBbQ09NUFVURV0oKTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWcgZXh0ZW5kcyBFbnRpdHlUYWc8UmV2aXNpb24+IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VGFnZ2VkPFQ+IHtcbiAgdGFnOiBFbnRpdHlUYWc8VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFnZ2VkIHtcbiAgdGFnOiBUYWc7XG59XG5cbi8vLy8vLy8vLy9cblxuLyoqXG4gKiBgdmFsdWVgIHJlY2VpdmVzIGEgdGFnIGFuZCByZXR1cm5zIGFuIG9wYXF1ZSBSZXZpc2lvbiBiYXNlZCBvbiB0aGF0IHRhZy4gVGhpc1xuICogc25hcHNob3QgY2FuIHRoZW4gbGF0ZXIgYmUgcGFzc2VkIHRvIGB2YWxpZGF0ZWAgd2l0aCB0aGUgc2FtZSB0YWcgdG9cbiAqIGRldGVybWluZSBpZiB0aGUgdGFnIGhhcyBjaGFuZ2VkIGF0IGFsbCBzaW5jZSB0aGUgdGltZSB0aGF0IGB2YWx1ZWAgd2FzXG4gKiBjYWxsZWQuXG4gKlxuICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gcmV0dXJucyB0aGUgZ2xvYmFsIHJldmlzaW9uIGNvdW50IGRpcmVjdGx5IGZvclxuICogcGVyZm9ybWFuY2UgcmVhc29ucy4gVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGFuZCBzaG91bGQgbm90IGJlXG4gKiByZWxpZWQgb24gZGlyZWN0bHkgYnkgdXNlcnMgb2YgdGhlc2UgQVBJcy4gSW5zdGVhZCwgUmV2aXNpb25zIHNob3VsZCBiZVxuICogdHJlYXRlZCBhcyBpZiB0aGV5IGFyZSBvcGFxdWUvdW5rbm93biwgYW5kIHNob3VsZCBvbmx5IGJlIGludGVyYWN0ZWQgd2l0aCB2aWFcbiAqIHRoZSBgdmFsdWVgL2B2YWxpZGF0ZWAgQVBJLlxuICpcbiAqIEBwYXJhbSB0YWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlKHRhZzogVGFnKTogUmV2aXNpb24ge1xuICBpZiAoREVCVUcpIHtcbiAgICAvLyBjb21wdXRlIHRvIGNhY2hlIHRoZSBsYXRlc3QgdmFsdWUsIHdoaWNoIHdpbGwgcHJldmVudCB1cyBmcm9tIGRvaW5nXG4gICAgLy8gaW52YWxpZCB1cGRhdGVzIGxhdGVyIG9uLlxuICAgIHRhZ1tDT01QVVRFXSgpO1xuICB9XG5cbiAgcmV0dXJuICRSRVZJU0lPTjtcbn1cblxuLyoqXG4gKiBgdmFsaWRhdGVgIHJlY2VpdmVzIGEgdGFnIGFuZCBhIHNuYXBzaG90IGZyb20gYSBwcmV2aW91cyBjYWxsIHRvIGB2YWx1ZWAgd2l0aFxuICogdGhlIHNhbWUgdGFnLCBhbmQgZGV0ZXJtaW5lcyBpZiB0aGUgdGFnIGlzIHN0aWxsIHZhbGlkIGNvbXBhcmVkIHRvIHRoZVxuICogc25hcHNob3QuIElmIHRoZSB0YWcncyBzdGF0ZSBoYXMgY2hhbmdlZCBhdCBhbGwgc2luY2UgdGhlbiwgYHZhbGlkYXRlYCB3aWxsXG4gKiByZXR1cm4gZmFsc2UsIG90aGVyd2lzZSBpdCB3aWxsIHJldHVybiB0cnVlLiBUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFcbiAqIGNhbGN1bGF0aW9uIHJlbGF0ZWQgdG8gdGhlIHRhZ3Mgc2hvdWxkIGJlIHJlcnVuLlxuICpcbiAqIEBwYXJhbSB0YWdcbiAqIEBwYXJhbSBzbmFwc2hvdFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGUodGFnOiBUYWcsIHNuYXBzaG90OiBSZXZpc2lvbikge1xuICBpZiAoREVCVUcpIHtcbiAgICBJU19WQUxJREFUSU5HID0gdHJ1ZTtcbiAgfVxuXG4gIGxldCBpc1ZhbGlkID0gc25hcHNob3QgPj0gdGFnW0NPTVBVVEVdKCk7XG5cbiAgaWYgKERFQlVHKSB7XG4gICAgSVNfVkFMSURBVElORyA9IGZhbHNlO1xuXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIC8vIGNvbXB1dGUgdG8gY2FjaGUgdGhlIGxhdGVzdCB2YWx1ZSwgd2hpY2ggd2lsbCBwcmV2ZW50IHVzIGZyb20gZG9pbmdcbiAgICAgIC8vIGludmFsaWQgdXBkYXRlcyBsYXRlciBvbi5cbiAgICAgIHRhZ1tDT01QVVRFXSgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpc1ZhbGlkO1xufVxuXG5sZXQgSVNfVkFMSURBVElORzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuLy8vLy8vLy8vL1xuXG4vKipcbiAqIFRoaXMgZW51bSByZXByZXNlbnRzIGFsbCBvZiB0aGUgcG9zc2libGUgdGFnIHR5cGVzIGZvciB0aGUgbW9ub21vcnBoaWMgdGFnIGNsYXNzLlxuICogT3RoZXIgY3VzdG9tIHRhZyBjbGFzc2VzIGNhbiBleGlzdCwgc3VjaCBhcyBDdXJyZW50VGFnIGFuZCBWb2xhdGlsZVRhZywgYnV0IGZvclxuICogcGVyZm9ybWFuY2UgcmVhc29ucywgYW55IHR5cGUgb2YgdGFnIHRoYXQgaXMgbWVhbnQgdG8gYmUgdXNlZCBmcmVxdWVudGx5IHNob3VsZFxuICogYmUgYWRkZWQgdG8gdGhlIG1vbm9tb3JwaGljIHRhZy5cbiAqL1xuY29uc3QgZW51bSBNb25vbW9ycGhpY1RhZ1R5cGVzIHtcbiAgRGlydHlhYmxlLFxuICBVcGRhdGFibGUsXG4gIENvbWJpbmF0b3IsXG4gIENvbnN0YW50LFxufVxuXG5jb25zdCBUWVBFOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdUQUdfVFlQRScpO1xuXG5leHBvcnQgbGV0IEFMTE9XX0NZQ0xFUzogV2Vha01hcDxUYWcsIGJvb2xlYW4+IHwgdW5kZWZpbmVkO1xuXG5pZiAoREVCVUcpIHtcbiAgQUxMT1dfQ1lDTEVTID0gbmV3IFdlYWtNYXAoKTtcbn1cblxuaW50ZXJmYWNlIE1vbm9tb3JwaGljVGFnQmFzZTxUIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdUeXBlcz4gZXh0ZW5kcyBUYWcge1xuICBbVFlQRV06IFQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlydHlhYmxlVGFnIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdCYXNlPE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlPiB7fVxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGFibGVUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGU+IHt9XG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmF0b3JUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5Db21iaW5hdG9yPiB7fVxuZXhwb3J0IGludGVyZmFjZSBDb25zdGFudFRhZyBleHRlbmRzIE1vbm9tb3JwaGljVGFnQmFzZTxNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbnN0YW50PiB7fVxuXG5pbnRlcmZhY2UgTW9ub21vcnBoaWNUYWdNYXBwaW5nIHtcbiAgW01vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlXTogRGlydHlhYmxlVGFnO1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGVdOiBVcGRhdGFibGVUYWc7XG4gIFtNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbWJpbmF0b3JdOiBDb21iaW5hdG9yVGFnO1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5Db25zdGFudF06IENvbnN0YW50VGFnO1xufVxuXG50eXBlIE1vbm9tb3JwaGljVGFnID0gVW5pb25Ub0ludGVyc2VjdGlvbjxNb25vbW9ycGhpY1RhZ01hcHBpbmdbTW9ub21vcnBoaWNUYWdUeXBlc10+O1xudHlwZSBNb25vbW9ycGhpY1RhZ1R5cGUgPSBVbmlvblRvSW50ZXJzZWN0aW9uPE1vbm9tb3JwaGljVGFnVHlwZXM+O1xuXG5jbGFzcyBNb25vbW9ycGhpY1RhZ0ltcGwgaW1wbGVtZW50cyBNb25vbW9ycGhpY1RhZyB7XG4gIHByaXZhdGUgcmV2aXNpb24gPSBJTklUSUFMO1xuICBwcml2YXRlIGxhc3RDaGVja2VkID0gSU5JVElBTDtcbiAgcHJpdmF0ZSBsYXN0VmFsdWUgPSBJTklUSUFMO1xuXG4gIHByaXZhdGUgaXNVcGRhdGluZyA9IGZhbHNlO1xuICBwcml2YXRlIHN1YnRhZzogVGFnIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3VidGFnczogVGFnW10gfCBudWxsID0gbnVsbDtcblxuICBbVFlQRV06IE1vbm9tb3JwaGljVGFnVHlwZTtcblxuICBjb25zdHJ1Y3Rvcih0eXBlOiBNb25vbW9ycGhpY1RhZ1R5cGVzKSB7XG4gICAgdGhpc1tUWVBFXSA9IHR5cGUgYXMgTW9ub21vcnBoaWNUYWdUeXBlO1xuICB9XG5cbiAgW0NPTVBVVEVdKCk6IFJldmlzaW9uIHtcbiAgICBsZXQgeyBsYXN0Q2hlY2tlZCB9ID0gdGhpcztcblxuICAgIGlmICh0aGlzLmlzVXBkYXRpbmcgPT09IHRydWUpIHtcbiAgICAgIGlmIChERUJVRyAmJiAhQUxMT1dfQ1lDTEVTIS5oYXModGhpcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDeWNsZXMgaW4gdGFncyBhcmUgbm90IGFsbG93ZWQnKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sYXN0Q2hlY2tlZCA9ICsrJFJFVklTSU9OO1xuICAgIH0gZWxzZSBpZiAobGFzdENoZWNrZWQgIT09ICRSRVZJU0lPTikge1xuICAgICAgdGhpcy5pc1VwZGF0aW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKERFQlVHKSB7XG4gICAgICAgIC8vIEluIERFQlVHLCB3ZSBkb24ndCBjYWNoZSB3aGlsZSB2YWxpZGF0aW5nIG9ubHksIGJlY2F1c2UgaXQgaXMgdmFsaWRcbiAgICAgICAgLy8gdXBkYXRlIGEgdGFnIGJldHdlZW4gY2FsbGluZyBgdmFsaWRhdGUoKWAgYW5kIGB2YWx1ZSgpYC4gT25jZSB5b3VcbiAgICAgICAgLy8gY2FsbCBgdmFsdWUoKWAgb24gYSB0YWcsIGl0cyByZXZpc2lvbiBpcyBlZmZlY3RpdmVseSBsb2NrZWQgaW4sIGFuZFxuICAgICAgICAvLyBpZiB5b3UgYXR0ZW1wdCB0byB1cGRhdGUgaXQgdG8gYSB0YWcgdGhhdCBpcyBtb3JlIHJlY2VudCBpdCBjb3VsZFxuICAgICAgICAvLyBicmVhayBhc3N1bXB0aW9ucyBpbiBvdXIgc3lzdGVtLiBUaGlzIGlzIHdoeSB0aGUgYXNzZXJ0aW9uIGV4aXN0cyBpblxuICAgICAgICAvLyB0aGUgc3RhdGljIGB1cGRhdGUoKWAgbWV0aG9kIGJlbG93LlxuICAgICAgICBpZiAoIUlTX1ZBTElEQVRJTkcpIHtcbiAgICAgICAgICB0aGlzLmxhc3RDaGVja2VkID0gJFJFVklTSU9OO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxhc3RDaGVja2VkID0gJFJFVklTSU9OO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBsZXQgeyBzdWJ0YWdzLCBzdWJ0YWcsIHJldmlzaW9uIH0gPSB0aGlzO1xuXG4gICAgICAgIGlmIChzdWJ0YWcgIT09IG51bGwpIHtcbiAgICAgICAgICByZXZpc2lvbiA9IE1hdGgubWF4KHJldmlzaW9uLCBzdWJ0YWdbQ09NUFVURV0oKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3VidGFncyAhPT0gbnVsbCkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3VidGFncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gc3VidGFnc1tpXVtDT01QVVRFXSgpO1xuICAgICAgICAgICAgcmV2aXNpb24gPSBNYXRoLm1heCh2YWx1ZSwgcmV2aXNpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGFzdFZhbHVlID0gcmV2aXNpb247XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmlzVXBkYXRpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sYXN0VmFsdWU7XG4gIH1cblxuICBzdGF0aWMgdXBkYXRlKF90YWc6IFVwZGF0YWJsZVRhZywgc3VidGFnOiBUYWcpIHtcbiAgICBpZiAoREVCVUcgJiYgX3RhZ1tUWVBFXSAhPT0gTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXR0ZW1wdGVkIHRvIHVwZGF0ZSBhIHRhZyB0aGF0IHdhcyBub3QgdXBkYXRhYmxlJyk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVFMgMy43IHNob3VsZCBhbGxvdyB1cyB0byBkbyB0aGlzIHZpYSBhc3NlcnRpb25cbiAgICBsZXQgdGFnID0gX3RhZyBhcyBNb25vbW9ycGhpY1RhZ0ltcGw7XG5cbiAgICBpZiAoc3VidGFnID09PSBDT05TVEFOVF9UQUcpIHtcbiAgICAgIHRhZy5zdWJ0YWcgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIERFQlVHICYmXG4gICAgICAgIHRhZy5sYXN0Q2hlY2tlZCA9PT0gJFJFVklTSU9OICYmXG4gICAgICAgIChzdWJ0YWcgYXMgTW9ub21vcnBoaWNUYWdJbXBsKVtDT01QVVRFXSgpID4gdGFnLmxhc3RWYWx1ZVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQlVHOiBhdHRlbXB0ZWQgdG8gdXBkYXRlIGEgdGFnIHdpdGggYSB0YWcgdGhhdCBoYXMgYSBtb3JlIHJlY2VudCByZXZpc2lvbiBhcyBpdHMgdmFsdWUnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRhZy5zdWJ0YWcgPSBzdWJ0YWc7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGRpcnR5KHRhZzogRGlydHlhYmxlVGFnIHwgVXBkYXRhYmxlVGFnKSB7XG4gICAgaWYgKFxuICAgICAgREVCVUcgJiZcbiAgICAgICEodGFnW1RZUEVdID09PSBNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZSB8fCB0YWdbVFlQRV0gPT09IE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0ZWQgdG8gZGlydHkgYSB0YWcgdGhhdCB3YXMgbm90IGRpcnR5YWJsZScpO1xuICAgIH1cblxuICAgIGlmIChERUJVRykge1xuICAgICAgLy8gVXN1YWxseSBieSB0aGlzIHBvaW50LCB3ZSd2ZSBhbHJlYWR5IGFzc2VydGVkIHdpdGggYmV0dGVyIGVycm9yIGluZm9ybWF0aW9uLFxuICAgICAgLy8gYnV0IHRoaXMgaXMgb3VyIGxhc3QgbGluZSBvZiBkZWZlbnNlLlxuICAgICAgYXNzZXJ0VGFnTm90Q29uc3VtZWQhKHRhZyk7XG4gICAgfVxuXG4gICAgKHRhZyBhcyBNb25vbW9ycGhpY1RhZ0ltcGwpLnJldmlzaW9uID0gKyskUkVWSVNJT047XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGRpcnR5ID0gTW9ub21vcnBoaWNUYWdJbXBsLmRpcnR5O1xuZXhwb3J0IGNvbnN0IHVwZGF0ZSA9IE1vbm9tb3JwaGljVGFnSW1wbC51cGRhdGU7XG5cbi8vLy8vLy8vLy9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRhZygpOiBEaXJ0eWFibGVUYWcge1xuICByZXR1cm4gbmV3IE1vbm9tb3JwaGljVGFnSW1wbChNb25vbW9ycGhpY1RhZ1R5cGVzLkRpcnR5YWJsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVcGRhdGFibGVUYWcoKTogVXBkYXRhYmxlVGFnIHtcbiAgcmV0dXJuIG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGUpO1xufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCBDT05TVEFOVF9UQUcgPSBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuQ29uc3RhbnQpIGFzIENvbnN0YW50VGFnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNDb25zdCh7IHRhZyB9OiBUYWdnZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHRhZyA9PT0gQ09OU1RBTlRfVEFHO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb25zdFRhZyh0YWc6IFRhZyk6IHRhZyBpcyBDb25zdGFudFRhZyB7XG4gIHJldHVybiB0YWcgPT09IENPTlNUQU5UX1RBRztcbn1cblxuLy8vLy8vLy8vL1xuXG5jbGFzcyBWb2xhdGlsZVRhZyBpbXBsZW1lbnRzIFRhZyB7XG4gIFtDT01QVVRFXSgpIHtcbiAgICByZXR1cm4gVk9MQVRJTEU7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFZPTEFUSUxFX1RBRyA9IG5ldyBWb2xhdGlsZVRhZygpO1xuXG4vLy8vLy8vLy8vXG5cbmNsYXNzIEN1cnJlbnRUYWcgaW1wbGVtZW50cyBDdXJyZW50VGFnIHtcbiAgW0NPTVBVVEVdKCkge1xuICAgIHJldHVybiAkUkVWSVNJT047XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IENVUlJFTlRfVEFHID0gbmV3IEN1cnJlbnRUYWcoKTtcblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSh0YWdzOiBUYWdbXSk6IFRhZyB7XG4gIGxldCBvcHRpbWl6ZWQ6IFRhZ1tdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSB0YWdzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGxldCB0YWcgPSB0YWdzW2ldO1xuICAgIGlmICh0YWcgPT09IENPTlNUQU5UX1RBRykgY29udGludWU7XG4gICAgb3B0aW1pemVkLnB1c2godGFnKTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVDb21iaW5hdG9yVGFnKG9wdGltaXplZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb21iaW5hdG9yVGFnKHRhZ3M6IFRhZ1tdKTogVGFnIHtcbiAgc3dpdGNoICh0YWdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBDT05TVEFOVF9UQUc7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIHRhZ3NbMF07XG4gICAgZGVmYXVsdDpcbiAgICAgIGxldCB0YWcgPSBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuQ29tYmluYXRvcikgYXMgQ29tYmluYXRvclRhZztcbiAgICAgICh0YWcgYXMgYW55KS5zdWJ0YWdzID0gdGFncztcbiAgICAgIHJldHVybiB0YWc7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLEtBQVQsUUFBc0IsY0FBdEI7QUFDQSxTQUE4QixNQUE5QixRQUE0QyxTQUE1QztBQUNBLFNBQVMsb0JBQVQsUUFBcUMsU0FBckM7QUFNQSxPQUFPLE1BQU0sV0FBcUIsQ0FBM0I7QUFDUCxPQUFPLE1BQU0sVUFBb0IsQ0FBMUI7QUFDUCxPQUFPLE1BQU0sV0FBcUIsZ0JBQTNCLEMsQ0FBNkM7QUFFcEQsSUFBSSxZQUFZLE9BQWhCO0FBRUEsT0FBTSxTQUFVLElBQVYsR0FBYztBQUNsQjtBQUNEO0FBRUQ7QUFFQSxPQUFPLE1BQU0sVUFBeUIsT0FBTyxhQUFQLENBQS9CO0FBZ0JQO0FBRUE7Ozs7Ozs7Ozs7Ozs7O0FBY0EsT0FBTSxTQUFVLEtBQVYsQ0FBZ0IsSUFBaEIsRUFBeUI7QUFDN0IsV0FBTyxTQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs7OztBQVVBLE9BQU0sU0FBVSxRQUFWLENBQW1CLEdBQW5CLEVBQTZCLFFBQTdCLEVBQStDO0FBQ25ELFdBQU8sWUFBWSxJQUFJLE9BQUosR0FBbkI7QUFDRDtBQWlCRCxNQUFNLE9BQXNCLE9BQU8sVUFBUCxDQUE1QjtBQUVBLE9BQU8sSUFBSSxZQUFKO0FBRVAsSUFBSSxLQUFKLEVBQVc7QUFDVCxtQkFBZSxJQUFJLE9BQUosRUFBZjtBQUNEO0FBcUJELE1BQU0sa0JBQU4sQ0FBd0I7QUFhdEIsZ0JBQVksSUFBWixFQUFxQztBQVo3QixhQUFBLFFBQUEsR0FBVyxPQUFYO0FBQ0EsYUFBQSxXQUFBLEdBQWMsT0FBZDtBQUNBLGFBQUEsU0FBQSxHQUFZLE9BQVo7QUFFQSxhQUFBLFVBQUEsR0FBYSxLQUFiO0FBQ0EsYUFBQSxPQUFBLEdBQXdCLElBQXhCO0FBRUEsYUFBQSxNQUFBLEdBQXFCLElBQXJCO0FBQ0EsYUFBQSxpQkFBQSxHQUFxQyxJQUFyQztB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RixhQUFLLENBQUw7QUFDRSxtQkFBTyxLQUFLLENBQUwsQ0FBUDtBQUNGO0FBQ0UsZ0JBQUksTUFBTSxJQUFJLGtCQUFKLENBQXNCLENBQXRCLENBQXNCLGdCQUF0QixDQUFWO0FBQ0MsZ0JBQVksT0FBWixHQUFzQixJQUF0QjtBQUNELG1CQUFPLEdBQVA7QUFSSjtBQVVEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUcgfSBmcm9tICdAZ2xpbW1lci9lbnYnO1xuaW1wb3J0IHsgVW5pb25Ub0ludGVyc2VjdGlvbiwgc3ltYm9sIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBhc3NlcnRUYWdOb3RDb25zdW1lZCB9IGZyb20gJy4vZGVidWcnO1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCB0eXBlIFJldmlzaW9uID0gbnVtYmVyO1xuXG5leHBvcnQgY29uc3QgQ09OU1RBTlQ6IFJldmlzaW9uID0gMDtcbmV4cG9ydCBjb25zdCBJTklUSUFMOiBSZXZpc2lvbiA9IDE7XG5leHBvcnQgY29uc3QgVk9MQVRJTEU6IFJldmlzaW9uID0gOTAwNzE5OTI1NDc0MDk5MTsgLy8gTUFYX0lOVFxuXG5sZXQgJFJFVklTSU9OID0gSU5JVElBTDtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1bXAoKSB7XG4gICRSRVZJU0lPTisrO1xufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCBDT01QVVRFOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdUQUdfQ09NUFVURScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVRhZzxUPiB7XG4gIFtDT01QVVRFXSgpOiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhZyBleHRlbmRzIEVudGl0eVRhZzxSZXZpc2lvbj4ge31cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUYWdnZWQ8VD4ge1xuICB0YWc6IEVudGl0eVRhZzxUPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWdnZWQge1xuICB0YWc6IFRhZztcbn1cblxuLy8vLy8vLy8vL1xuXG4vKipcbiAqIGB2YWx1ZWAgcmVjZWl2ZXMgYSB0YWcgYW5kIHJldHVybnMgYW4gb3BhcXVlIFJldmlzaW9uIGJhc2VkIG9uIHRoYXQgdGFnLiBUaGlzXG4gKiBzbmFwc2hvdCBjYW4gdGhlbiBsYXRlciBiZSBwYXNzZWQgdG8gYHZhbGlkYXRlYCB3aXRoIHRoZSBzYW1lIHRhZyB0b1xuICogZGV0ZXJtaW5lIGlmIHRoZSB0YWcgaGFzIGNoYW5nZWQgYXQgYWxsIHNpbmNlIHRoZSB0aW1lIHRoYXQgYHZhbHVlYCB3YXNcbiAqIGNhbGxlZC5cbiAqXG4gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHRoZSBnbG9iYWwgcmV2aXNpb24gY291bnQgZGlyZWN0bHkgZm9yXG4gKiBwZXJmb3JtYW5jZSByZWFzb25zLiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgYW5kIHNob3VsZCBub3QgYmVcbiAqIHJlbGllZCBvbiBkaXJlY3RseSBieSB1c2VycyBvZiB0aGVzZSBBUElzLiBJbnN0ZWFkLCBSZXZpc2lvbnMgc2hvdWxkIGJlXG4gKiB0cmVhdGVkIGFzIGlmIHRoZXkgYXJlIG9wYXF1ZS91bmtub3duLCBhbmQgc2hvdWxkIG9ubHkgYmUgaW50ZXJhY3RlZCB3aXRoIHZpYVxuICogdGhlIGB2YWx1ZWAvYHZhbGlkYXRlYCBBUEkuXG4gKlxuICogQHBhcmFtIHRhZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsdWUoX3RhZzogVGFnKTogUmV2aXNpb24ge1xuICByZXR1cm4gJFJFVklTSU9OO1xufVxuXG4vKipcbiAqIGB2YWxpZGF0ZWAgcmVjZWl2ZXMgYSB0YWcgYW5kIGEgc25hcHNob3QgZnJvbSBhIHByZXZpb3VzIGNhbGwgdG8gYHZhbHVlYCB3aXRoXG4gKiB0aGUgc2FtZSB0YWcsIGFuZCBkZXRlcm1pbmVzIGlmIHRoZSB0YWcgaXMgc3RpbGwgdmFsaWQgY29tcGFyZWQgdG8gdGhlXG4gKiBzbmFwc2hvdC4gSWYgdGhlIHRhZydzIHN0YXRlIGhhcyBjaGFuZ2VkIGF0IGFsbCBzaW5jZSB0aGVuLCBgdmFsaWRhdGVgIHdpbGxcbiAqIHJldHVybiBmYWxzZSwgb3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIHRydWUuIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYVxuICogY2FsY3VsYXRpb24gcmVsYXRlZCB0byB0aGUgdGFncyBzaG91bGQgYmUgcmVydW4uXG4gKlxuICogQHBhcmFtIHRhZ1xuICogQHBhcmFtIHNuYXBzaG90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZSh0YWc6IFRhZywgc25hcHNob3Q6IFJldmlzaW9uKSB7XG4gIHJldHVybiBzbmFwc2hvdCA+PSB0YWdbQ09NUFVURV0oKTtcbn1cblxuLy8vLy8vLy8vL1xuXG4vKipcbiAqIFRoaXMgZW51bSByZXByZXNlbnRzIGFsbCBvZiB0aGUgcG9zc2libGUgdGFnIHR5cGVzIGZvciB0aGUgbW9ub21vcnBoaWMgdGFnIGNsYXNzLlxuICogT3RoZXIgY3VzdG9tIHRhZyBjbGFzc2VzIGNhbiBleGlzdCwgc3VjaCBhcyBDdXJyZW50VGFnIGFuZCBWb2xhdGlsZVRhZywgYnV0IGZvclxuICogcGVyZm9ybWFuY2UgcmVhc29ucywgYW55IHR5cGUgb2YgdGFnIHRoYXQgaXMgbWVhbnQgdG8gYmUgdXNlZCBmcmVxdWVudGx5IHNob3VsZFxuICogYmUgYWRkZWQgdG8gdGhlIG1vbm9tb3JwaGljIHRhZy5cbiAqL1xuY29uc3QgZW51bSBNb25vbW9ycGhpY1RhZ1R5cGVzIHtcbiAgRGlydHlhYmxlLFxuICBVcGRhdGFibGUsXG4gIENvbWJpbmF0b3IsXG4gIENvbnN0YW50LFxufVxuXG5jb25zdCBUWVBFOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdUQUdfVFlQRScpO1xuXG5leHBvcnQgbGV0IEFMTE9XX0NZQ0xFUzogV2Vha01hcDxUYWcsIGJvb2xlYW4+IHwgdW5kZWZpbmVkO1xuXG5pZiAoREVCVUcpIHtcbiAgQUxMT1dfQ1lDTEVTID0gbmV3IFdlYWtNYXAoKTtcbn1cblxuaW50ZXJmYWNlIE1vbm9tb3JwaGljVGFnQmFzZTxUIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdUeXBlcz4gZXh0ZW5kcyBUYWcge1xuICBbVFlQRV06IFQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlydHlhYmxlVGFnIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdCYXNlPE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlPiB7fVxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGFibGVUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGU+IHt9XG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmF0b3JUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5Db21iaW5hdG9yPiB7fVxuZXhwb3J0IGludGVyZmFjZSBDb25zdGFudFRhZyBleHRlbmRzIE1vbm9tb3JwaGljVGFnQmFzZTxNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbnN0YW50PiB7fVxuXG5pbnRlcmZhY2UgTW9ub21vcnBoaWNUYWdNYXBwaW5nIHtcbiAgW01vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlXTogRGlydHlhYmxlVGFnO1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGVdOiBVcGRhdGFibGVUYWc7XG4gIFtNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbWJpbmF0b3JdOiBDb21iaW5hdG9yVGFnO1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5Db25zdGFudF06IENvbnN0YW50VGFnO1xufVxuXG50eXBlIE1vbm9tb3JwaGljVGFnID0gVW5pb25Ub0ludGVyc2VjdGlvbjxNb25vbW9ycGhpY1RhZ01hcHBpbmdbTW9ub21vcnBoaWNUYWdUeXBlc10+O1xudHlwZSBNb25vbW9ycGhpY1RhZ1R5cGUgPSBVbmlvblRvSW50ZXJzZWN0aW9uPE1vbm9tb3JwaGljVGFnVHlwZXM+O1xuXG5jbGFzcyBNb25vbW9ycGhpY1RhZ0ltcGwgaW1wbGVtZW50cyBNb25vbW9ycGhpY1RhZyB7XG4gIHByaXZhdGUgcmV2aXNpb24gPSBJTklUSUFMO1xuICBwcml2YXRlIGxhc3RDaGVja2VkID0gSU5JVElBTDtcbiAgcHJpdmF0ZSBsYXN0VmFsdWUgPSBJTklUSUFMO1xuXG4gIHByaXZhdGUgaXNVcGRhdGluZyA9IGZhbHNlO1xuICBwcml2YXRlIHN1YnRhZ3M6IFRhZ1tdIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBzdWJ0YWc6IFRhZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHN1YnRhZ0J1ZmZlckNhY2hlOiBSZXZpc2lvbiB8IG51bGwgPSBudWxsO1xuXG4gIFtUWVBFXTogTW9ub21vcnBoaWNUYWdUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1vbm9tb3JwaGljVGFnVHlwZXMpIHtcbiAgICB0aGlzW1RZUEVdID0gdHlwZSBhcyBNb25vbW9ycGhpY1RhZ1R5cGU7XG4gIH1cblxuICBbQ09NUFVURV0oKTogUmV2aXNpb24ge1xuICAgIGxldCB7IGxhc3RDaGVja2VkIH0gPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMuaXNVcGRhdGluZyA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKERFQlVHICYmICFBTExPV19DWUNMRVMhLmhhcyh0aGlzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0N5Y2xlcyBpbiB0YWdzIGFyZSBub3QgYWxsb3dlZCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxhc3RDaGVja2VkID0gKyskUkVWSVNJT047XG4gICAgfSBlbHNlIGlmIChsYXN0Q2hlY2tlZCAhPT0gJFJFVklTSU9OKSB7XG4gICAgICB0aGlzLmlzVXBkYXRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5sYXN0Q2hlY2tlZCA9ICRSRVZJU0lPTjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IHsgc3VidGFncywgc3VidGFnLCBzdWJ0YWdCdWZmZXJDYWNoZSwgbGFzdFZhbHVlLCByZXZpc2lvbiB9ID0gdGhpcztcblxuICAgICAgICBpZiAoc3VidGFnICE9PSBudWxsKSB7XG4gICAgICAgICAgbGV0IHN1YnRhZ1ZhbHVlID0gc3VidGFnW0NPTVBVVEVdKCk7XG5cbiAgICAgICAgICBpZiAoc3VidGFnVmFsdWUgPT09IHN1YnRhZ0J1ZmZlckNhY2hlKSB7XG4gICAgICAgICAgICByZXZpc2lvbiA9IE1hdGgubWF4KHJldmlzaW9uLCBsYXN0VmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDbGVhciB0aGUgdGVtcG9yYXJ5IGJ1ZmZlciBjYWNoZVxuICAgICAgICAgICAgdGhpcy5zdWJ0YWdCdWZmZXJDYWNoZSA9IG51bGw7XG4gICAgICAgICAgICByZXZpc2lvbiA9IE1hdGgubWF4KHJldmlzaW9uLCBzdWJ0YWdWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YnRhZ3MgIT09IG51bGwpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1YnRhZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHN1YnRhZ3NbaV1bQ09NUFVURV0oKTtcbiAgICAgICAgICAgIHJldmlzaW9uID0gTWF0aC5tYXgodmFsdWUsIHJldmlzaW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxhc3RWYWx1ZSA9IHJldmlzaW9uO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5pc1VwZGF0aW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubGFzdFZhbHVlO1xuICB9XG5cbiAgc3RhdGljIHVwZGF0ZShfdGFnOiBVcGRhdGFibGVUYWcsIF9zdWJ0YWc6IFRhZykge1xuICAgIGlmIChERUJVRyAmJiBfdGFnW1RZUEVdICE9PSBNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0ZWQgdG8gdXBkYXRlIGEgdGFnIHRoYXQgd2FzIG5vdCB1cGRhdGFibGUnKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBUUyAzLjcgc2hvdWxkIGFsbG93IHVzIHRvIGRvIHRoaXMgdmlhIGFzc2VydGlvblxuICAgIGxldCB0YWcgPSBfdGFnIGFzIE1vbm9tb3JwaGljVGFnSW1wbDtcbiAgICBsZXQgc3VidGFnID0gX3N1YnRhZyBhcyBNb25vbW9ycGhpY1RhZ0ltcGw7XG5cbiAgICBpZiAoc3VidGFnID09PSBDT05TVEFOVF9UQUcpIHtcbiAgICAgIHRhZy5zdWJ0YWcgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGVyZSBhcmUgdHdvIGRpZmZlcmVudCBwb3NzaWJpbGl0aWVzIHdoZW4gdXBkYXRpbmcgYSBzdWJ0YWc6XG4gICAgICAvL1xuICAgICAgLy8gMS4gc3VidGFnW0NPTVBVVEVdKCkgPD0gdGFnW0NPTVBVVEVdKCk7XG4gICAgICAvLyAyLiBzdWJ0YWdbQ09NUFVURV0oKSA+IHRhZ1tDT01QVVRFXSgpO1xuICAgICAgLy9cbiAgICAgIC8vIFRoZSBmaXJzdCBwb3NzaWJpbGl0eSBpcyBjb21wbGV0ZWx5IGZpbmUgd2l0aGluIG91ciBjYWNoaW5nIG1vZGVsLCBidXRcbiAgICAgIC8vIHRoZSBzZWNvbmQgcG9zc2liaWxpdHkgcHJlc2VudHMgYSBwcm9ibGVtLiBJZiB0aGUgcGFyZW50IHRhZyBoYXNcbiAgICAgIC8vIGFscmVhZHkgYmVlbiByZWFkLCB0aGVuIGl0J3MgdmFsdWUgaXMgY2FjaGVkIGFuZCB3aWxsIG5vdCB1cGRhdGUgdG9cbiAgICAgIC8vIHJlZmxlY3QgdGhlIHN1YnRhZydzIGdyZWF0ZXIgdmFsdWUuIE5leHQgdGltZSB0aGUgY2FjaGUgaXMgYnVzdGVkLCB0aGVcbiAgICAgIC8vIHN1YnRhZydzIHZhbHVlIF93aWxsXyBiZSByZWFkLCBhbmQgaXQncyB2YWx1ZSB3aWxsIGJlIF9ncmVhdGVyXyB0aGFuXG4gICAgICAvLyB0aGUgc2F2ZWQgc25hcHNob3Qgb2YgdGhlIHBhcmVudCwgY2F1c2luZyB0aGUgcmVzdWx0aW5nIGNhbGN1bGF0aW9uIHRvXG4gICAgICAvLyBiZSByZXJ1biBlcnJvbmVvdXNseS5cbiAgICAgIC8vXG4gICAgICAvLyBJbiBvcmRlciB0byBwcmV2ZW50IHRoaXMsIHdoZW4gd2UgZmlyc3QgdXBkYXRlIHRvIGEgbmV3IHN1YnRhZyB3ZSBzdG9yZVxuICAgICAgLy8gaXRzIGNvbXB1dGVkIHZhbHVlLCBhbmQgdGhlbiBjaGVjayBhZ2FpbnN0IHRoYXQgY29tcHV0ZWQgdmFsdWUgb25cbiAgICAgIC8vIHN1YnNlcXVlbnQgdXBkYXRlcy4gSWYgaXRzIHZhbHVlIGhhc24ndCBjaGFuZ2VkLCB0aGVuIHdlIHJldHVybiB0aGVcbiAgICAgIC8vIHBhcmVudCdzIHByZXZpb3VzIHZhbHVlLiBPbmNlIHRoZSBzdWJ0YWcgY2hhbmdlcyBmb3IgdGhlIGZpcnN0IHRpbWUsXG4gICAgICAvLyB3ZSBjbGVhciB0aGUgY2FjaGUgYW5kIGV2ZXJ5dGhpbmcgaXMgZmluYWxseSBpbiBzeW5jIHdpdGggdGhlIHBhcmVudC5cbiAgICAgIHRhZy5zdWJ0YWdCdWZmZXJDYWNoZSA9IHN1YnRhZ1tDT01QVVRFXSgpO1xuICAgICAgdGFnLnN1YnRhZyA9IHN1YnRhZztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZGlydHkodGFnOiBEaXJ0eWFibGVUYWcgfCBVcGRhdGFibGVUYWcpIHtcbiAgICBpZiAoXG4gICAgICBERUJVRyAmJlxuICAgICAgISh0YWdbVFlQRV0gPT09IE1vbm9tb3JwaGljVGFnVHlwZXMuVXBkYXRhYmxlIHx8IHRhZ1tUWVBFXSA9PT0gTW9ub21vcnBoaWNUYWdUeXBlcy5EaXJ0eWFibGUpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRlZCB0byBkaXJ0eSBhIHRhZyB0aGF0IHdhcyBub3QgZGlydHlhYmxlJyk7XG4gICAgfVxuXG4gICAgaWYgKERFQlVHKSB7XG4gICAgICAvLyBVc3VhbGx5IGJ5IHRoaXMgcG9pbnQsIHdlJ3ZlIGFscmVhZHkgYXNzZXJ0ZWQgd2l0aCBiZXR0ZXIgZXJyb3IgaW5mb3JtYXRpb24sXG4gICAgICAvLyBidXQgdGhpcyBpcyBvdXIgbGFzdCBsaW5lIG9mIGRlZmVuc2UuXG4gICAgICBhc3NlcnRUYWdOb3RDb25zdW1lZCEodGFnKTtcbiAgICB9XG5cbiAgICAodGFnIGFzIE1vbm9tb3JwaGljVGFnSW1wbCkucmV2aXNpb24gPSArKyRSRVZJU0lPTjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZGlydHkgPSBNb25vbW9ycGhpY1RhZ0ltcGwuZGlydHk7XG5leHBvcnQgY29uc3QgdXBkYXRlID0gTW9ub21vcnBoaWNUYWdJbXBsLnVwZGF0ZTtcblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFnKCk6IERpcnR5YWJsZVRhZyB7XG4gIHJldHVybiBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVwZGF0YWJsZVRhZygpOiBVcGRhdGFibGVUYWcge1xuICByZXR1cm4gbmV3IE1vbm9tb3JwaGljVGFnSW1wbChNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZSk7XG59XG5cbi8vLy8vLy8vLy9cblxuZXhwb3J0IGNvbnN0IENPTlNUQU5UX1RBRyA9IG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5Db25zdGFudCkgYXMgQ29uc3RhbnRUYWc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0KHsgdGFnIH06IFRhZ2dlZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gdGFnID09PSBDT05TVEFOVF9UQUc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0VGFnKHRhZzogVGFnKTogdGFnIGlzIENvbnN0YW50VGFnIHtcbiAgcmV0dXJuIHRhZyA9PT0gQ09OU1RBTlRfVEFHO1xufVxuXG4vLy8vLy8vLy8vXG5cbmNsYXNzIFZvbGF0aWxlVGFnIGltcGxlbWVudHMgVGFnIHtcbiAgW0NPTVBVVEVdKCkge1xuICAgIHJldHVybiBWT0xBVElMRTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgVk9MQVRJTEVfVEFHID0gbmV3IFZvbGF0aWxlVGFnKCk7XG5cbi8vLy8vLy8vLy9cblxuY2xhc3MgQ3VycmVudFRhZyBpbXBsZW1lbnRzIEN1cnJlbnRUYWcge1xuICBbQ09NUFVURV0oKSB7XG4gICAgcmV0dXJuICRSRVZJU0lPTjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgQ1VSUkVOVF9UQUcgPSBuZXcgQ3VycmVudFRhZygpO1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lKHRhZ3M6IFRhZ1tdKTogVGFnIHtcbiAgbGV0IG9wdGltaXplZDogVGFnW10gPSBbXTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IHRhZ3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgbGV0IHRhZyA9IHRhZ3NbaV07XG4gICAgaWYgKHRhZyA9PT0gQ09OU1RBTlRfVEFHKSBjb250aW51ZTtcbiAgICBvcHRpbWl6ZWQucHVzaCh0YWcpO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUNvbWJpbmF0b3JUYWcob3B0aW1pemVkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbWJpbmF0b3JUYWcodGFnczogVGFnW10pOiBUYWcge1xuICBzd2l0Y2ggKHRhZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIENPTlNUQU5UX1RBRztcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gdGFnc1swXTtcbiAgICBkZWZhdWx0OlxuICAgICAgbGV0IHRhZyA9IG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5Db21iaW5hdG9yKSBhcyBDb21iaW5hdG9yVGFnO1xuICAgICAgKHRhZyBhcyBhbnkpLnN1YnRhZ3MgPSB0YWdzO1xuICAgICAgcmV0dXJuIHRhZztcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==

@@ -30,8 +30,3 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

*/
export function value(tag) {
if (DEBUG) {
// compute to cache the latest value, which will prevent us from doing
// invalid updates later on.
tag[COMPUTE]();
}
export function value(_tag) {
return $REVISION;

@@ -50,17 +45,4 @@ }

export function validate(tag, snapshot) {
if (DEBUG) {
IS_VALIDATING = true;
}
var isValid = snapshot >= tag[COMPUTE]();
if (DEBUG) {
IS_VALIDATING = false;
if (isValid) {
// compute to cache the latest value, which will prevent us from doing
// invalid updates later on.
tag[COMPUTE]();
}
}
return isValid;
return snapshot >= tag[COMPUTE]();
}
var IS_VALIDATING = void 0;
var TYPE = symbol('TAG_TYPE');

@@ -80,4 +62,5 @@ export var ALLOW_CYCLES = void 0;

this.isUpdating = false;
this.subtags = null;
this.subtag = null;
this.subtags = null;
this.subtagBufferCache = null;
this[TYPE] = type;

@@ -96,22 +79,19 @@ }

this.isUpdating = true;
if (DEBUG) {
// In DEBUG, we don't cache while validating only, because it is valid
// update a tag between calling `validate()` and `value()`. Once you
// call `value()` on a tag, its revision is effectively locked in, and
// if you attempt to update it to a tag that is more recent it could
// break assumptions in our system. This is why the assertion exists in
// the static `update()` method below.
if (!IS_VALIDATING) {
this.lastChecked = $REVISION;
}
} else {
this.lastChecked = $REVISION;
}
this.lastChecked = $REVISION;
try {
var subtags = this.subtags,
subtag = this.subtag,
subtagBufferCache = this.subtagBufferCache,
lastValue = this.lastValue,
revision = this.revision;
if (subtag !== null) {
revision = Math.max(revision, subtag[COMPUTE]());
var subtagValue = subtag[COMPUTE]();
if (subtagValue === subtagBufferCache) {
revision = Math.max(revision, lastValue);
} else {
// Clear the temporary buffer cache
this.subtagBufferCache = null;
revision = Math.max(revision, subtagValue);
}
}

@@ -132,3 +112,3 @@ if (subtags !== null) {

MonomorphicTagImpl.update = function update(_tag, subtag) {
MonomorphicTagImpl.update = function update(_tag, _subtag) {
if (DEBUG && _tag[TYPE] !== 1 /* Updatable */) {

@@ -139,8 +119,25 @@ throw new Error('Attempted to update a tag that was not updatable');

var tag = _tag;
var subtag = _subtag;
if (subtag === CONSTANT_TAG) {
tag.subtag = null;
} else {
if (DEBUG && tag.lastChecked === $REVISION && subtag[COMPUTE]() > tag.lastValue) {
throw new Error('BUG: attempted to update a tag with a tag that has a more recent revision as its value');
}
// There are two different possibilities when updating a subtag:
//
// 1. subtag[COMPUTE]() <= tag[COMPUTE]();
// 2. subtag[COMPUTE]() > tag[COMPUTE]();
//
// The first possibility is completely fine within our caching model, but
// the second possibility presents a problem. If the parent tag has
// already been read, then it's value is cached and will not update to
// reflect the subtag's greater value. Next time the cache is busted, the
// subtag's value _will_ be read, and it's value will be _greater_ than
// the saved snapshot of the parent, causing the resulting calculation to
// be rerun erroneously.
//
// In order to prevent this, when we first update to a new subtag we store
// its computed value, and then check against that computed value on
// subsequent updates. If its value hasn't changed, then we return the
// parent's previous value. Once the subtag changes for the first time,
// we clear the cache and everything is finally in sync with the parent.
tag.subtagBufferCache = subtag[COMPUTE]();
tag.subtag = subtag;

@@ -236,2 +233,2 @@ }

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLFNBQUEsS0FBQSxRQUFBLGNBQUE7QUFDQSxTQUFBLE1BQUEsUUFBQSxTQUFBO0FBQ0EsU0FBQSxvQkFBQSxRQUFBLFNBQUE7QUFNQSxPQUFPLElBQU0sV0FBTixDQUFBO0FBQ1AsT0FBTyxJQUFNLFVBQU4sQ0FBQTtBQUNQLE9BQU8sSUFBTSxXQUFOLGdCQUFBLEMsQ0FBNkM7QUFFcEQsSUFBSSxZQUFKLE9BQUE7QUFFQSxPQUFNLFNBQUEsSUFBQSxHQUFjO0FBQ2xCO0FBQ0Q7QUFFRDtBQUVBLE9BQU8sSUFBTSxVQUF5QixPQUEvQixhQUErQixDQUEvQjtBQWdCUDtBQUVBOzs7Ozs7Ozs7Ozs7OztBQWNBLE9BQU0sU0FBQSxLQUFBLENBQUEsR0FBQSxFQUF3QjtBQUM1QixRQUFBLEtBQUEsRUFBVztBQUNUO0FBQ0E7QUFDQSxZQUFBLE9BQUE7QUFDRDtBQUVELFdBQUEsU0FBQTtBQUNEO0FBRUQ7Ozs7Ozs7Ozs7QUFVQSxPQUFNLFNBQUEsUUFBQSxDQUFBLEdBQUEsRUFBQSxRQUFBLEVBQStDO0FBQ25ELFFBQUEsS0FBQSxFQUFXO0FBQ1Qsd0JBQUEsSUFBQTtBQUNEO0FBRUQsUUFBSSxVQUFVLFlBQVksSUFBMUIsT0FBMEIsR0FBMUI7QUFFQSxRQUFBLEtBQUEsRUFBVztBQUNULHdCQUFBLEtBQUE7QUFFQSxZQUFBLE9BQUEsRUFBYTtBQUNYO0FBQ0E7QUFDQSxnQkFBQSxPQUFBO0FBQ0Q7QUFDRjtBQUVELFdBQUEsT0FBQTtBQUNEO0FBRUQsSUFBQSxzQkFBQTtBQWlCQSxJQUFNLE9BQXNCLE9BQTVCLFVBQTRCLENBQTVCO0FBRUEsT0FBTyxJQUFBLHFCQUFBO0FBRVAsSUFBQSxLQUFBLEVBQVc7QUFDVCxtQkFBZSxJQUFmLE9BQWUsRUFBZjtBQUNEOztJQXFCRCxrQjtBQVdFLGdDQUFBLElBQUEsRUFBcUM7QUFBQTs7QUFWN0IsYUFBQSxRQUFBLEdBQUEsT0FBQTtBQUNBLGFBQUEsV0FBQSxHQUFBLE9BQUE7QUFDQSxhQUFBLFNBQUEsR0FBQSxPQUFBO0FBRUEsYUFBQSxVQUFBLEdBQUEsS0FBQTtBQUNBLGFBQUEsTUFBQSxHQUFBLElBQUE7QUFDQSxhQUFBLE9BQUEsR0FBQSxJQUFBO0FBS04sYUFBQSxJQUFBLElBQUEsSUFBQTtBQUNEOztpQ0FFRCxPLGdCQUFTO0FBQUEsWUFDSCxXQURHLEdBQ1AsSUFETyxDQUNILFdBREc7O0FBR1AsWUFBSSxLQUFBLFVBQUEsS0FBSixJQUFBLEVBQThCO0FBQzVCLGdCQUFJLFNBQVMsQ0FBQyxhQUFBLEdBQUEsQ0FBZCxJQUFjLENBQWQsRUFBdUM7QUFDckMsc0JBQU0sSUFBQSxLQUFBLENBQU4sZ0NBQU0sQ0FBTjtBQUNEO0FBRUQsaUJBQUEsV0FBQSxHQUFtQixFQUFuQixTQUFBO0FBTEYsU0FBQSxNQU1PLElBQUksZ0JBQUosU0FBQSxFQUErQjtBQUNwQyxpQkFBQSxVQUFBLEdBQUEsSUFBQTtBQUVBLGdCQUFBLEtBQUEsRUFBVztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFJLENBQUosYUFBQSxFQUFvQjtBQUNsQix5QkFBQSxXQUFBLEdBQUEsU0FBQTtBQUNEO0FBVEgsYUFBQSxNQVVPO0FBQ0wscUJBQUEsV0FBQSxHQUFBLFNBQUE7QUFDRDtBQUVELGdCQUFJO0FBQUEsb0JBQ0UsT0FERixHQUNGLElBREUsQ0FDRSxPQURGO0FBQUEsb0JBQ0UsTUFERixHQUNGLElBREUsQ0FDRSxNQURGO0FBQUEsb0JBQ0UsUUFERixHQUNGLElBREUsQ0FDRSxRQURGOztBQUdGLG9CQUFJLFdBQUosSUFBQSxFQUFxQjtBQUNuQiwrQkFBVyxLQUFBLEdBQUEsQ0FBQSxRQUFBLEVBQW1CLE9BQTlCLE9BQThCLEdBQW5CLENBQVg7QUFDRDtBQUVELG9CQUFJLFlBQUosSUFBQSxFQUFzQjtBQUNwQix5QkFBSyxJQUFJLElBQVQsQ0FBQSxFQUFnQixJQUFJLFFBQXBCLE1BQUEsRUFBQSxHQUFBLEVBQXlDO0FBQ3ZDLDRCQUFJLFNBQVEsUUFBQSxDQUFBLEVBQVosT0FBWSxHQUFaO0FBQ0EsbUNBQVcsS0FBQSxHQUFBLENBQUEsTUFBQSxFQUFYLFFBQVcsQ0FBWDtBQUNEO0FBQ0Y7QUFFRCxxQkFBQSxTQUFBLEdBQUEsUUFBQTtBQWRGLGFBQUEsU0FlVTtBQUNSLHFCQUFBLFVBQUEsR0FBQSxLQUFBO0FBQ0Q7QUFDRjtBQUVELGVBQU8sS0FBUCxTQUFBO0FBQ0QsSzs7dUJBRUQsTSxtQkFBQSxJLEVBQUEsTSxFQUE2QztBQUMzQyxZQUFJLFNBQVMsS0FBQSxJQUFBLE1BQWIsQ0FBQSxDQUFBLGVBQUEsRUFBMkQ7QUFDekQsc0JBQU0sSUFBQSxLQUFBLENBQU4sa0RBQU0sQ0FBTjtBQUNEO0FBRUQ7QUFDQSxZQUFJLE1BQUosSUFBQTtBQUVBLFlBQUksV0FBSixZQUFBLEVBQTZCO0FBQzNCLGdCQUFBLE1BQUEsR0FBQSxJQUFBO0FBREYsU0FBQSxNQUVPO0FBQ0wsZ0JBQ0UsU0FDQSxJQUFBLFdBQUEsS0FEQSxTQUFBLElBRUMsT0FBQSxPQUFBLE1BQTJDLElBSDlDLFNBQUEsRUFJRTtBQUNBLHNCQUFNLElBQUEsS0FBQSxDQUFOLHdGQUFNLENBQU47QUFHRDtBQUVELGdCQUFBLE1BQUEsR0FBQSxNQUFBO0FBQ0Q7QUFDRixLOzt1QkFFRCxLLGtCQUFBLEcsRUFBNkM7QUFDM0MsWUFDRSxTQUNBLEVBQUUsSUFBQSxJQUFBLE1BQUEsQ0FBQSxDQUFBLGVBQUEsSUFBK0MsSUFBQSxJQUFBLE1BQWpELENBQUEsQ0FGRixlQUVFLENBRkYsRUFHRTtBQUNBLGtCQUFNLElBQUEsS0FBQSxDQUFOLGlEQUFNLENBQU47QUFDRDtBQUVELFlBQUEsS0FBQSxFQUFXO0FBQ1Q7QUFDQTtBQUNBLGlDQUFBLEdBQUE7QUFDRDtBQUVBLFlBQUEsUUFBQSxHQUFzQyxFQUF0QyxTQUFBO0FBQ0YsSzs7Ozs7QUFHSCxPQUFPLElBQU0sUUFBUSxtQkFBZCxLQUFBO0FBQ1AsT0FBTyxJQUFNLFNBQVMsbUJBQWYsTUFBQTtBQUVQO0FBRUEsT0FBTSxTQUFBLFNBQUEsR0FBbUI7QUFDdkIsV0FBTyxJQUFBLGtCQUFBLENBQUEsQ0FBQSxDQUFQLGVBQU8sQ0FBUDtBQUNEO0FBRUQsT0FBTSxTQUFBLGtCQUFBLEdBQTRCO0FBQ2hDLFdBQU8sSUFBQSxrQkFBQSxDQUFBLENBQUEsQ0FBUCxlQUFPLENBQVA7QUFDRDtBQUVEO0FBRUEsT0FBTyxJQUFNLGVBQWUsSUFBQSxrQkFBQSxDQUFBLENBQUEsQ0FBckIsY0FBcUIsQ0FBckI7QUFFUCxPQUFNLFNBQUEsT0FBQSxPQUFpQztBQUFBLFFBQWpDLEdBQWlDLFFBQWpDLEdBQWlDOztBQUNyQyxXQUFPLFFBQVAsWUFBQTtBQUNEO0FBRUQsT0FBTSxTQUFBLFVBQUEsQ0FBQSxHQUFBLEVBQTZCO0FBQ2pDLFdBQU8sUUFBUCxZQUFBO0FBQ0Q7QUFFRDs7SUFFQSxXOzs7OzswQkFDRSxPLGdCQUFTO0FBQ1AsZUFBQSxRQUFBO0FBQ0QsSzs7Ozs7QUFHSCxPQUFPLElBQU0sZUFBZSxJQUFyQixXQUFxQixFQUFyQjtBQUVQOztJQUVBLFU7Ozs7O3lCQUNFLE8sZ0JBQVM7QUFDUCxlQUFBLFNBQUE7QUFDRCxLOzs7OztBQUdILE9BQU8sSUFBTSxjQUFjLElBQXBCLFVBQW9CLEVBQXBCO0FBRVA7QUFFQSxPQUFNLFNBQUEsT0FBQSxDQUFBLElBQUEsRUFBNkI7QUFDakMsUUFBSSxZQUFKLEVBQUE7QUFFQSxTQUFLLElBQUksSUFBSixDQUFBLEVBQVcsSUFBSSxLQUFwQixNQUFBLEVBQWlDLElBQWpDLENBQUEsRUFBQSxHQUFBLEVBQTZDO0FBQzNDLFlBQUksTUFBTSxLQUFWLENBQVUsQ0FBVjtBQUNBLFlBQUksUUFBSixZQUFBLEVBQTBCO0FBQzFCLGtCQUFBLElBQUEsQ0FBQSxHQUFBO0FBQ0Q7QUFFRCxXQUFPLG9CQUFQLFNBQU8sQ0FBUDtBQUNEO0FBRUQsT0FBTSxTQUFBLG1CQUFBLENBQUEsSUFBQSxFQUF5QztBQUM3QyxZQUFRLEtBQVIsTUFBQTtBQUNFLGFBQUEsQ0FBQTtBQUNFLG1CQUFBLFlBQUE7QUFDRixhQUFBLENBQUE7QUFDRSxtQkFBTyxLQUFQLENBQU8sQ0FBUDtBQUNGO0FBQ0UsZ0JBQUksTUFBTSxJQUFBLGtCQUFBLENBQUEsQ0FBQSxDQUFWLGdCQUFVLENBQVY7QUFDQyxnQkFBQSxPQUFBLEdBQUEsSUFBQTtBQUNELG1CQUFBLEdBQUE7QUFSSjtBQVVEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUcgfSBmcm9tICdAZ2xpbW1lci9lbnYnO1xuaW1wb3J0IHsgVW5pb25Ub0ludGVyc2VjdGlvbiwgc3ltYm9sIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBhc3NlcnRUYWdOb3RDb25zdW1lZCB9IGZyb20gJy4vZGVidWcnO1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCB0eXBlIFJldmlzaW9uID0gbnVtYmVyO1xuXG5leHBvcnQgY29uc3QgQ09OU1RBTlQ6IFJldmlzaW9uID0gMDtcbmV4cG9ydCBjb25zdCBJTklUSUFMOiBSZXZpc2lvbiA9IDE7XG5leHBvcnQgY29uc3QgVk9MQVRJTEU6IFJldmlzaW9uID0gOTAwNzE5OTI1NDc0MDk5MTsgLy8gTUFYX0lOVFxuXG5sZXQgJFJFVklTSU9OID0gSU5JVElBTDtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1bXAoKSB7XG4gICRSRVZJU0lPTisrO1xufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCBDT01QVVRFOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdUQUdfQ09NUFVURScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVRhZzxUPiB7XG4gIFtDT01QVVRFXSgpOiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhZyBleHRlbmRzIEVudGl0eVRhZzxSZXZpc2lvbj4ge31cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUYWdnZWQ8VD4ge1xuICB0YWc6IEVudGl0eVRhZzxUPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWdnZWQge1xuICB0YWc6IFRhZztcbn1cblxuLy8vLy8vLy8vL1xuXG4vKipcbiAqIGB2YWx1ZWAgcmVjZWl2ZXMgYSB0YWcgYW5kIHJldHVybnMgYW4gb3BhcXVlIFJldmlzaW9uIGJhc2VkIG9uIHRoYXQgdGFnLiBUaGlzXG4gKiBzbmFwc2hvdCBjYW4gdGhlbiBsYXRlciBiZSBwYXNzZWQgdG8gYHZhbGlkYXRlYCB3aXRoIHRoZSBzYW1lIHRhZyB0b1xuICogZGV0ZXJtaW5lIGlmIHRoZSB0YWcgaGFzIGNoYW5nZWQgYXQgYWxsIHNpbmNlIHRoZSB0aW1lIHRoYXQgYHZhbHVlYCB3YXNcbiAqIGNhbGxlZC5cbiAqXG4gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHRoZSBnbG9iYWwgcmV2aXNpb24gY291bnQgZGlyZWN0bHkgZm9yXG4gKiBwZXJmb3JtYW5jZSByZWFzb25zLiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgYW5kIHNob3VsZCBub3QgYmVcbiAqIHJlbGllZCBvbiBkaXJlY3RseSBieSB1c2VycyBvZiB0aGVzZSBBUElzLiBJbnN0ZWFkLCBSZXZpc2lvbnMgc2hvdWxkIGJlXG4gKiB0cmVhdGVkIGFzIGlmIHRoZXkgYXJlIG9wYXF1ZS91bmtub3duLCBhbmQgc2hvdWxkIG9ubHkgYmUgaW50ZXJhY3RlZCB3aXRoIHZpYVxuICogdGhlIGB2YWx1ZWAvYHZhbGlkYXRlYCBBUEkuXG4gKlxuICogQHBhcmFtIHRhZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsdWUodGFnOiBUYWcpOiBSZXZpc2lvbiB7XG4gIGlmIChERUJVRykge1xuICAgIC8vIGNvbXB1dGUgdG8gY2FjaGUgdGhlIGxhdGVzdCB2YWx1ZSwgd2hpY2ggd2lsbCBwcmV2ZW50IHVzIGZyb20gZG9pbmdcbiAgICAvLyBpbnZhbGlkIHVwZGF0ZXMgbGF0ZXIgb24uXG4gICAgdGFnW0NPTVBVVEVdKCk7XG4gIH1cblxuICByZXR1cm4gJFJFVklTSU9OO1xufVxuXG4vKipcbiAqIGB2YWxpZGF0ZWAgcmVjZWl2ZXMgYSB0YWcgYW5kIGEgc25hcHNob3QgZnJvbSBhIHByZXZpb3VzIGNhbGwgdG8gYHZhbHVlYCB3aXRoXG4gKiB0aGUgc2FtZSB0YWcsIGFuZCBkZXRlcm1pbmVzIGlmIHRoZSB0YWcgaXMgc3RpbGwgdmFsaWQgY29tcGFyZWQgdG8gdGhlXG4gKiBzbmFwc2hvdC4gSWYgdGhlIHRhZydzIHN0YXRlIGhhcyBjaGFuZ2VkIGF0IGFsbCBzaW5jZSB0aGVuLCBgdmFsaWRhdGVgIHdpbGxcbiAqIHJldHVybiBmYWxzZSwgb3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIHRydWUuIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYVxuICogY2FsY3VsYXRpb24gcmVsYXRlZCB0byB0aGUgdGFncyBzaG91bGQgYmUgcmVydW4uXG4gKlxuICogQHBhcmFtIHRhZ1xuICogQHBhcmFtIHNuYXBzaG90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZSh0YWc6IFRhZywgc25hcHNob3Q6IFJldmlzaW9uKSB7XG4gIGlmIChERUJVRykge1xuICAgIElTX1ZBTElEQVRJTkcgPSB0cnVlO1xuICB9XG5cbiAgbGV0IGlzVmFsaWQgPSBzbmFwc2hvdCA+PSB0YWdbQ09NUFVURV0oKTtcblxuICBpZiAoREVCVUcpIHtcbiAgICBJU19WQUxJREFUSU5HID0gZmFsc2U7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gY29tcHV0ZSB0byBjYWNoZSB0aGUgbGF0ZXN0IHZhbHVlLCB3aGljaCB3aWxsIHByZXZlbnQgdXMgZnJvbSBkb2luZ1xuICAgICAgLy8gaW52YWxpZCB1cGRhdGVzIGxhdGVyIG9uLlxuICAgICAgdGFnW0NPTVBVVEVdKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlzVmFsaWQ7XG59XG5cbmxldCBJU19WQUxJREFUSU5HOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4vLy8vLy8vLy8vXG5cbi8qKlxuICogVGhpcyBlbnVtIHJlcHJlc2VudHMgYWxsIG9mIHRoZSBwb3NzaWJsZSB0YWcgdHlwZXMgZm9yIHRoZSBtb25vbW9ycGhpYyB0YWcgY2xhc3MuXG4gKiBPdGhlciBjdXN0b20gdGFnIGNsYXNzZXMgY2FuIGV4aXN0LCBzdWNoIGFzIEN1cnJlbnRUYWcgYW5kIFZvbGF0aWxlVGFnLCBidXQgZm9yXG4gKiBwZXJmb3JtYW5jZSByZWFzb25zLCBhbnkgdHlwZSBvZiB0YWcgdGhhdCBpcyBtZWFudCB0byBiZSB1c2VkIGZyZXF1ZW50bHkgc2hvdWxkXG4gKiBiZSBhZGRlZCB0byB0aGUgbW9ub21vcnBoaWMgdGFnLlxuICovXG5jb25zdCBlbnVtIE1vbm9tb3JwaGljVGFnVHlwZXMge1xuICBEaXJ0eWFibGUsXG4gIFVwZGF0YWJsZSxcbiAgQ29tYmluYXRvcixcbiAgQ29uc3RhbnQsXG59XG5cbmNvbnN0IFRZUEU6IHVuaXF1ZSBzeW1ib2wgPSBzeW1ib2woJ1RBR19UWVBFJyk7XG5cbmV4cG9ydCBsZXQgQUxMT1dfQ1lDTEVTOiBXZWFrTWFwPFRhZywgYm9vbGVhbj4gfCB1bmRlZmluZWQ7XG5cbmlmIChERUJVRykge1xuICBBTExPV19DWUNMRVMgPSBuZXcgV2Vha01hcCgpO1xufVxuXG5pbnRlcmZhY2UgTW9ub21vcnBoaWNUYWdCYXNlPFQgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ1R5cGVzPiBleHRlbmRzIFRhZyB7XG4gIFtUWVBFXTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXJ0eWFibGVUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5EaXJ0eWFibGU+IHt9XG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0YWJsZVRhZyBleHRlbmRzIE1vbm9tb3JwaGljVGFnQmFzZTxNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZT4ge31cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYmluYXRvclRhZyBleHRlbmRzIE1vbm9tb3JwaGljVGFnQmFzZTxNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbWJpbmF0b3I+IHt9XG5leHBvcnQgaW50ZXJmYWNlIENvbnN0YW50VGFnIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdCYXNlPE1vbm9tb3JwaGljVGFnVHlwZXMuQ29uc3RhbnQ+IHt9XG5cbmludGVyZmFjZSBNb25vbW9ycGhpY1RhZ01hcHBpbmcge1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5EaXJ0eWFibGVdOiBEaXJ0eWFibGVUYWc7XG4gIFtNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZV06IFVwZGF0YWJsZVRhZztcbiAgW01vbm9tb3JwaGljVGFnVHlwZXMuQ29tYmluYXRvcl06IENvbWJpbmF0b3JUYWc7XG4gIFtNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbnN0YW50XTogQ29uc3RhbnRUYWc7XG59XG5cbnR5cGUgTW9ub21vcnBoaWNUYWcgPSBVbmlvblRvSW50ZXJzZWN0aW9uPE1vbm9tb3JwaGljVGFnTWFwcGluZ1tNb25vbW9ycGhpY1RhZ1R5cGVzXT47XG50eXBlIE1vbm9tb3JwaGljVGFnVHlwZSA9IFVuaW9uVG9JbnRlcnNlY3Rpb248TW9ub21vcnBoaWNUYWdUeXBlcz47XG5cbmNsYXNzIE1vbm9tb3JwaGljVGFnSW1wbCBpbXBsZW1lbnRzIE1vbm9tb3JwaGljVGFnIHtcbiAgcHJpdmF0ZSByZXZpc2lvbiA9IElOSVRJQUw7XG4gIHByaXZhdGUgbGFzdENoZWNrZWQgPSBJTklUSUFMO1xuICBwcml2YXRlIGxhc3RWYWx1ZSA9IElOSVRJQUw7XG5cbiAgcHJpdmF0ZSBpc1VwZGF0aW5nID0gZmFsc2U7XG4gIHByaXZhdGUgc3VidGFnOiBUYWcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdWJ0YWdzOiBUYWdbXSB8IG51bGwgPSBudWxsO1xuXG4gIFtUWVBFXTogTW9ub21vcnBoaWNUYWdUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1vbm9tb3JwaGljVGFnVHlwZXMpIHtcbiAgICB0aGlzW1RZUEVdID0gdHlwZSBhcyBNb25vbW9ycGhpY1RhZ1R5cGU7XG4gIH1cblxuICBbQ09NUFVURV0oKTogUmV2aXNpb24ge1xuICAgIGxldCB7IGxhc3RDaGVja2VkIH0gPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMuaXNVcGRhdGluZyA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKERFQlVHICYmICFBTExPV19DWUNMRVMhLmhhcyh0aGlzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0N5Y2xlcyBpbiB0YWdzIGFyZSBub3QgYWxsb3dlZCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxhc3RDaGVja2VkID0gKyskUkVWSVNJT047XG4gICAgfSBlbHNlIGlmIChsYXN0Q2hlY2tlZCAhPT0gJFJFVklTSU9OKSB7XG4gICAgICB0aGlzLmlzVXBkYXRpbmcgPSB0cnVlO1xuXG4gICAgICBpZiAoREVCVUcpIHtcbiAgICAgICAgLy8gSW4gREVCVUcsIHdlIGRvbid0IGNhY2hlIHdoaWxlIHZhbGlkYXRpbmcgb25seSwgYmVjYXVzZSBpdCBpcyB2YWxpZFxuICAgICAgICAvLyB1cGRhdGUgYSB0YWcgYmV0d2VlbiBjYWxsaW5nIGB2YWxpZGF0ZSgpYCBhbmQgYHZhbHVlKClgLiBPbmNlIHlvdVxuICAgICAgICAvLyBjYWxsIGB2YWx1ZSgpYCBvbiBhIHRhZywgaXRzIHJldmlzaW9uIGlzIGVmZmVjdGl2ZWx5IGxvY2tlZCBpbiwgYW5kXG4gICAgICAgIC8vIGlmIHlvdSBhdHRlbXB0IHRvIHVwZGF0ZSBpdCB0byBhIHRhZyB0aGF0IGlzIG1vcmUgcmVjZW50IGl0IGNvdWxkXG4gICAgICAgIC8vIGJyZWFrIGFzc3VtcHRpb25zIGluIG91ciBzeXN0ZW0uIFRoaXMgaXMgd2h5IHRoZSBhc3NlcnRpb24gZXhpc3RzIGluXG4gICAgICAgIC8vIHRoZSBzdGF0aWMgYHVwZGF0ZSgpYCBtZXRob2QgYmVsb3cuXG4gICAgICAgIGlmICghSVNfVkFMSURBVElORykge1xuICAgICAgICAgIHRoaXMubGFzdENoZWNrZWQgPSAkUkVWSVNJT047XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGFzdENoZWNrZWQgPSAkUkVWSVNJT047XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCB7IHN1YnRhZ3MsIHN1YnRhZywgcmV2aXNpb24gfSA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHN1YnRhZyAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldmlzaW9uID0gTWF0aC5tYXgocmV2aXNpb24sIHN1YnRhZ1tDT01QVVRFXSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJ0YWdzICE9PSBudWxsKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdWJ0YWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBzdWJ0YWdzW2ldW0NPTVBVVEVdKCk7XG4gICAgICAgICAgICByZXZpc2lvbiA9IE1hdGgubWF4KHZhbHVlLCByZXZpc2lvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sYXN0VmFsdWUgPSByZXZpc2lvbjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuaXNVcGRhdGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmxhc3RWYWx1ZTtcbiAgfVxuXG4gIHN0YXRpYyB1cGRhdGUoX3RhZzogVXBkYXRhYmxlVGFnLCBzdWJ0YWc6IFRhZykge1xuICAgIGlmIChERUJVRyAmJiBfdGFnW1RZUEVdICE9PSBNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0ZWQgdG8gdXBkYXRlIGEgdGFnIHRoYXQgd2FzIG5vdCB1cGRhdGFibGUnKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBUUyAzLjcgc2hvdWxkIGFsbG93IHVzIHRvIGRvIHRoaXMgdmlhIGFzc2VydGlvblxuICAgIGxldCB0YWcgPSBfdGFnIGFzIE1vbm9tb3JwaGljVGFnSW1wbDtcblxuICAgIGlmIChzdWJ0YWcgPT09IENPTlNUQU5UX1RBRykge1xuICAgICAgdGFnLnN1YnRhZyA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgREVCVUcgJiZcbiAgICAgICAgdGFnLmxhc3RDaGVja2VkID09PSAkUkVWSVNJT04gJiZcbiAgICAgICAgKHN1YnRhZyBhcyBNb25vbW9ycGhpY1RhZ0ltcGwpW0NPTVBVVEVdKCkgPiB0YWcubGFzdFZhbHVlXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdCVUc6IGF0dGVtcHRlZCB0byB1cGRhdGUgYSB0YWcgd2l0aCBhIHRhZyB0aGF0IGhhcyBhIG1vcmUgcmVjZW50IHJldmlzaW9uIGFzIGl0cyB2YWx1ZSdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGFnLnN1YnRhZyA9IHN1YnRhZztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZGlydHkodGFnOiBEaXJ0eWFibGVUYWcgfCBVcGRhdGFibGVUYWcpIHtcbiAgICBpZiAoXG4gICAgICBERUJVRyAmJlxuICAgICAgISh0YWdbVFlQRV0gPT09IE1vbm9tb3JwaGljVGFnVHlwZXMuVXBkYXRhYmxlIHx8IHRhZ1tUWVBFXSA9PT0gTW9ub21vcnBoaWNUYWdUeXBlcy5EaXJ0eWFibGUpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRlZCB0byBkaXJ0eSBhIHRhZyB0aGF0IHdhcyBub3QgZGlydHlhYmxlJyk7XG4gICAgfVxuXG4gICAgaWYgKERFQlVHKSB7XG4gICAgICAvLyBVc3VhbGx5IGJ5IHRoaXMgcG9pbnQsIHdlJ3ZlIGFscmVhZHkgYXNzZXJ0ZWQgd2l0aCBiZXR0ZXIgZXJyb3IgaW5mb3JtYXRpb24sXG4gICAgICAvLyBidXQgdGhpcyBpcyBvdXIgbGFzdCBsaW5lIG9mIGRlZmVuc2UuXG4gICAgICBhc3NlcnRUYWdOb3RDb25zdW1lZCEodGFnKTtcbiAgICB9XG5cbiAgICAodGFnIGFzIE1vbm9tb3JwaGljVGFnSW1wbCkucmV2aXNpb24gPSArKyRSRVZJU0lPTjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZGlydHkgPSBNb25vbW9ycGhpY1RhZ0ltcGwuZGlydHk7XG5leHBvcnQgY29uc3QgdXBkYXRlID0gTW9ub21vcnBoaWNUYWdJbXBsLnVwZGF0ZTtcblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFnKCk6IERpcnR5YWJsZVRhZyB7XG4gIHJldHVybiBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVwZGF0YWJsZVRhZygpOiBVcGRhdGFibGVUYWcge1xuICByZXR1cm4gbmV3IE1vbm9tb3JwaGljVGFnSW1wbChNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZSk7XG59XG5cbi8vLy8vLy8vLy9cblxuZXhwb3J0IGNvbnN0IENPTlNUQU5UX1RBRyA9IG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5Db25zdGFudCkgYXMgQ29uc3RhbnRUYWc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0KHsgdGFnIH06IFRhZ2dlZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gdGFnID09PSBDT05TVEFOVF9UQUc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0VGFnKHRhZzogVGFnKTogdGFnIGlzIENvbnN0YW50VGFnIHtcbiAgcmV0dXJuIHRhZyA9PT0gQ09OU1RBTlRfVEFHO1xufVxuXG4vLy8vLy8vLy8vXG5cbmNsYXNzIFZvbGF0aWxlVGFnIGltcGxlbWVudHMgVGFnIHtcbiAgW0NPTVBVVEVdKCkge1xuICAgIHJldHVybiBWT0xBVElMRTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgVk9MQVRJTEVfVEFHID0gbmV3IFZvbGF0aWxlVGFnKCk7XG5cbi8vLy8vLy8vLy9cblxuY2xhc3MgQ3VycmVudFRhZyBpbXBsZW1lbnRzIEN1cnJlbnRUYWcge1xuICBbQ09NUFVURV0oKSB7XG4gICAgcmV0dXJuICRSRVZJU0lPTjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgQ1VSUkVOVF9UQUcgPSBuZXcgQ3VycmVudFRhZygpO1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lKHRhZ3M6IFRhZ1tdKTogVGFnIHtcbiAgbGV0IG9wdGltaXplZDogVGFnW10gPSBbXTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IHRhZ3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgbGV0IHRhZyA9IHRhZ3NbaV07XG4gICAgaWYgKHRhZyA9PT0gQ09OU1RBTlRfVEFHKSBjb250aW51ZTtcbiAgICBvcHRpbWl6ZWQucHVzaCh0YWcpO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUNvbWJpbmF0b3JUYWcob3B0aW1pemVkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbWJpbmF0b3JUYWcodGFnczogVGFnW10pOiBUYWcge1xuICBzd2l0Y2ggKHRhZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIENPTlNUQU5UX1RBRztcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gdGFnc1swXTtcbiAgICBkZWZhdWx0OlxuICAgICAgbGV0IHRhZyA9IG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5Db21iaW5hdG9yKSBhcyBDb21iaW5hdG9yVGFnO1xuICAgICAgKHRhZyBhcyBhbnkpLnN1YnRhZ3MgPSB0YWdzO1xuICAgICAgcmV0dXJuIHRhZztcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLFNBQUEsS0FBQSxRQUFBLGNBQUE7QUFDQSxTQUFBLE1BQUEsUUFBQSxTQUFBO0FBQ0EsU0FBQSxvQkFBQSxRQUFBLFNBQUE7QUFNQSxPQUFPLElBQU0sV0FBTixDQUFBO0FBQ1AsT0FBTyxJQUFNLFVBQU4sQ0FBQTtBQUNQLE9BQU8sSUFBTSxXQUFOLGdCQUFBLEMsQ0FBNkM7QUFFcEQsSUFBSSxZQUFKLE9BQUE7QUFFQSxPQUFNLFNBQUEsSUFBQSxHQUFjO0FBQ2xCO0FBQ0Q7QUFFRDtBQUVBLE9BQU8sSUFBTSxVQUF5QixPQUEvQixhQUErQixDQUEvQjtBQWdCUDtBQUVBOzs7Ozs7Ozs7Ozs7OztBQWNBLE9BQU0sU0FBQSxLQUFBLENBQUEsSUFBQSxFQUF5QjtBQUM3QixXQUFBLFNBQUE7QUFDRDtBQUVEOzs7Ozs7Ozs7O0FBVUEsT0FBTSxTQUFBLFFBQUEsQ0FBQSxHQUFBLEVBQUEsUUFBQSxFQUErQztBQUNuRCxXQUFPLFlBQVksSUFBbkIsT0FBbUIsR0FBbkI7QUFDRDtBQWlCRCxJQUFNLE9BQXNCLE9BQTVCLFVBQTRCLENBQTVCO0FBRUEsT0FBTyxJQUFBLHFCQUFBO0FBRVAsSUFBQSxLQUFBLEVBQVc7QUFDVCxtQkFBZSxJQUFmLE9BQWUsRUFBZjtBQUNEOztJQXFCRCxrQjtBQWFFLGdDQUFBLElBQUEsRUFBcUM7QUFBQTs7QUFaN0IsYUFBQSxRQUFBLEdBQUEsT0FBQTtBQUNBLGFBQUEsV0FBQSxHQUFBLE9BQUE7QUFDQSxhQUFBLFNBQUEsR0FBQSxPQUFBO0FBRUEsYUFBQSxVQUFBLEdBQUEsS0FBQTtBQUNBLGFBQUEsT0FBQSxHQUFBLElBQUE7QUFFQSxhQUFBLE1BQUEsR0FBQSxJQUFBO0FBQ0EsYUFBQSxpQkFBQSxHQUFBLElBQUE7QUFLTixhQUFBLElBQUEsSUFBQSxJQUFBO0FB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QU8sS0FBUCxDQUFPLENBQVA7QUFDRjtBQUNFLGdCQUFJLE1BQU0sSUFBQSxrQkFBQSxDQUFBLENBQUEsQ0FBVixnQkFBVSxDQUFWO0FBQ0MsZ0JBQUEsT0FBQSxHQUFBLElBQUE7QUFDRCxtQkFBQSxHQUFBO0FBUko7QUFVRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERFQlVHIH0gZnJvbSAnQGdsaW1tZXIvZW52JztcbmltcG9ydCB7IFVuaW9uVG9JbnRlcnNlY3Rpb24sIHN5bWJvbCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgYXNzZXJ0VGFnTm90Q29uc3VtZWQgfSBmcm9tICcuL2RlYnVnJztcblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgdHlwZSBSZXZpc2lvbiA9IG51bWJlcjtcblxuZXhwb3J0IGNvbnN0IENPTlNUQU5UOiBSZXZpc2lvbiA9IDA7XG5leHBvcnQgY29uc3QgSU5JVElBTDogUmV2aXNpb24gPSAxO1xuZXhwb3J0IGNvbnN0IFZPTEFUSUxFOiBSZXZpc2lvbiA9IDkwMDcxOTkyNTQ3NDA5OTE7IC8vIE1BWF9JTlRcblxubGV0ICRSRVZJU0lPTiA9IElOSVRJQUw7XG5cbmV4cG9ydCBmdW5jdGlvbiBidW1wKCkge1xuICAkUkVWSVNJT04rKztcbn1cblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgY29uc3QgQ09NUFVURTogdW5pcXVlIHN5bWJvbCA9IHN5bWJvbCgnVEFHX0NPTVBVVEUnKTtcblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUYWc8VD4ge1xuICBbQ09NUFVURV0oKTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWcgZXh0ZW5kcyBFbnRpdHlUYWc8UmV2aXNpb24+IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VGFnZ2VkPFQ+IHtcbiAgdGFnOiBFbnRpdHlUYWc8VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFnZ2VkIHtcbiAgdGFnOiBUYWc7XG59XG5cbi8vLy8vLy8vLy9cblxuLyoqXG4gKiBgdmFsdWVgIHJlY2VpdmVzIGEgdGFnIGFuZCByZXR1cm5zIGFuIG9wYXF1ZSBSZXZpc2lvbiBiYXNlZCBvbiB0aGF0IHRhZy4gVGhpc1xuICogc25hcHNob3QgY2FuIHRoZW4gbGF0ZXIgYmUgcGFzc2VkIHRvIGB2YWxpZGF0ZWAgd2l0aCB0aGUgc2FtZSB0YWcgdG9cbiAqIGRldGVybWluZSBpZiB0aGUgdGFnIGhhcyBjaGFuZ2VkIGF0IGFsbCBzaW5jZSB0aGUgdGltZSB0aGF0IGB2YWx1ZWAgd2FzXG4gKiBjYWxsZWQuXG4gKlxuICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gcmV0dXJucyB0aGUgZ2xvYmFsIHJldmlzaW9uIGNvdW50IGRpcmVjdGx5IGZvclxuICogcGVyZm9ybWFuY2UgcmVhc29ucy4gVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGFuZCBzaG91bGQgbm90IGJlXG4gKiByZWxpZWQgb24gZGlyZWN0bHkgYnkgdXNlcnMgb2YgdGhlc2UgQVBJcy4gSW5zdGVhZCwgUmV2aXNpb25zIHNob3VsZCBiZVxuICogdHJlYXRlZCBhcyBpZiB0aGV5IGFyZSBvcGFxdWUvdW5rbm93biwgYW5kIHNob3VsZCBvbmx5IGJlIGludGVyYWN0ZWQgd2l0aCB2aWFcbiAqIHRoZSBgdmFsdWVgL2B2YWxpZGF0ZWAgQVBJLlxuICpcbiAqIEBwYXJhbSB0YWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlKF90YWc6IFRhZyk6IFJldmlzaW9uIHtcbiAgcmV0dXJuICRSRVZJU0lPTjtcbn1cblxuLyoqXG4gKiBgdmFsaWRhdGVgIHJlY2VpdmVzIGEgdGFnIGFuZCBhIHNuYXBzaG90IGZyb20gYSBwcmV2aW91cyBjYWxsIHRvIGB2YWx1ZWAgd2l0aFxuICogdGhlIHNhbWUgdGFnLCBhbmQgZGV0ZXJtaW5lcyBpZiB0aGUgdGFnIGlzIHN0aWxsIHZhbGlkIGNvbXBhcmVkIHRvIHRoZVxuICogc25hcHNob3QuIElmIHRoZSB0YWcncyBzdGF0ZSBoYXMgY2hhbmdlZCBhdCBhbGwgc2luY2UgdGhlbiwgYHZhbGlkYXRlYCB3aWxsXG4gKiByZXR1cm4gZmFsc2UsIG90aGVyd2lzZSBpdCB3aWxsIHJldHVybiB0cnVlLiBUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFcbiAqIGNhbGN1bGF0aW9uIHJlbGF0ZWQgdG8gdGhlIHRhZ3Mgc2hvdWxkIGJlIHJlcnVuLlxuICpcbiAqIEBwYXJhbSB0YWdcbiAqIEBwYXJhbSBzbmFwc2hvdFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGUodGFnOiBUYWcsIHNuYXBzaG90OiBSZXZpc2lvbikge1xuICByZXR1cm4gc25hcHNob3QgPj0gdGFnW0NPTVBVVEVdKCk7XG59XG5cbi8vLy8vLy8vLy9cblxuLyoqXG4gKiBUaGlzIGVudW0gcmVwcmVzZW50cyBhbGwgb2YgdGhlIHBvc3NpYmxlIHRhZyB0eXBlcyBmb3IgdGhlIG1vbm9tb3JwaGljIHRhZyBjbGFzcy5cbiAqIE90aGVyIGN1c3RvbSB0YWcgY2xhc3NlcyBjYW4gZXhpc3QsIHN1Y2ggYXMgQ3VycmVudFRhZyBhbmQgVm9sYXRpbGVUYWcsIGJ1dCBmb3JcbiAqIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGFueSB0eXBlIG9mIHRhZyB0aGF0IGlzIG1lYW50IHRvIGJlIHVzZWQgZnJlcXVlbnRseSBzaG91bGRcbiAqIGJlIGFkZGVkIHRvIHRoZSBtb25vbW9ycGhpYyB0YWcuXG4gKi9cbmNvbnN0IGVudW0gTW9ub21vcnBoaWNUYWdUeXBlcyB7XG4gIERpcnR5YWJsZSxcbiAgVXBkYXRhYmxlLFxuICBDb21iaW5hdG9yLFxuICBDb25zdGFudCxcbn1cblxuY29uc3QgVFlQRTogdW5pcXVlIHN5bWJvbCA9IHN5bWJvbCgnVEFHX1RZUEUnKTtcblxuZXhwb3J0IGxldCBBTExPV19DWUNMRVM6IFdlYWtNYXA8VGFnLCBib29sZWFuPiB8IHVuZGVmaW5lZDtcblxuaWYgKERFQlVHKSB7XG4gIEFMTE9XX0NZQ0xFUyA9IG5ldyBXZWFrTWFwKCk7XG59XG5cbmludGVyZmFjZSBNb25vbW9ycGhpY1RhZ0Jhc2U8VCBleHRlbmRzIE1vbm9tb3JwaGljVGFnVHlwZXM+IGV4dGVuZHMgVGFnIHtcbiAgW1RZUEVdOiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpcnR5YWJsZVRhZyBleHRlbmRzIE1vbm9tb3JwaGljVGFnQmFzZTxNb25vbW9ycGhpY1RhZ1R5cGVzLkRpcnR5YWJsZT4ge31cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRhYmxlVGFnIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdCYXNlPE1vbm9tb3JwaGljVGFnVHlwZXMuVXBkYXRhYmxlPiB7fVxuZXhwb3J0IGludGVyZmFjZSBDb21iaW5hdG9yVGFnIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdCYXNlPE1vbm9tb3JwaGljVGFnVHlwZXMuQ29tYmluYXRvcj4ge31cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc3RhbnRUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5Db25zdGFudD4ge31cblxuaW50ZXJmYWNlIE1vbm9tb3JwaGljVGFnTWFwcGluZyB7XG4gIFtNb25vbW9ycGhpY1RhZ1R5cGVzLkRpcnR5YWJsZV06IERpcnR5YWJsZVRhZztcbiAgW01vbm9tb3JwaGljVGFnVHlwZXMuVXBkYXRhYmxlXTogVXBkYXRhYmxlVGFnO1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5Db21iaW5hdG9yXTogQ29tYmluYXRvclRhZztcbiAgW01vbm9tb3JwaGljVGFnVHlwZXMuQ29uc3RhbnRdOiBDb25zdGFudFRhZztcbn1cblxudHlwZSBNb25vbW9ycGhpY1RhZyA9IFVuaW9uVG9JbnRlcnNlY3Rpb248TW9ub21vcnBoaWNUYWdNYXBwaW5nW01vbm9tb3JwaGljVGFnVHlwZXNdPjtcbnR5cGUgTW9ub21vcnBoaWNUYWdUeXBlID0gVW5pb25Ub0ludGVyc2VjdGlvbjxNb25vbW9ycGhpY1RhZ1R5cGVzPjtcblxuY2xhc3MgTW9ub21vcnBoaWNUYWdJbXBsIGltcGxlbWVudHMgTW9ub21vcnBoaWNUYWcge1xuICBwcml2YXRlIHJldmlzaW9uID0gSU5JVElBTDtcbiAgcHJpdmF0ZSBsYXN0Q2hlY2tlZCA9IElOSVRJQUw7XG4gIHByaXZhdGUgbGFzdFZhbHVlID0gSU5JVElBTDtcblxuICBwcml2YXRlIGlzVXBkYXRpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdWJ0YWdzOiBUYWdbXSB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgc3VidGFnOiBUYWcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdWJ0YWdCdWZmZXJDYWNoZTogUmV2aXNpb24gfCBudWxsID0gbnVsbDtcblxuICBbVFlQRV06IE1vbm9tb3JwaGljVGFnVHlwZTtcblxuICBjb25zdHJ1Y3Rvcih0eXBlOiBNb25vbW9ycGhpY1RhZ1R5cGVzKSB7XG4gICAgdGhpc1tUWVBFXSA9IHR5cGUgYXMgTW9ub21vcnBoaWNUYWdUeXBlO1xuICB9XG5cbiAgW0NPTVBVVEVdKCk6IFJldmlzaW9uIHtcbiAgICBsZXQgeyBsYXN0Q2hlY2tlZCB9ID0gdGhpcztcblxuICAgIGlmICh0aGlzLmlzVXBkYXRpbmcgPT09IHRydWUpIHtcbiAgICAgIGlmIChERUJVRyAmJiAhQUxMT1dfQ1lDTEVTIS5oYXModGhpcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDeWNsZXMgaW4gdGFncyBhcmUgbm90IGFsbG93ZWQnKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sYXN0Q2hlY2tlZCA9ICsrJFJFVklTSU9OO1xuICAgIH0gZWxzZSBpZiAobGFzdENoZWNrZWQgIT09ICRSRVZJU0lPTikge1xuICAgICAgdGhpcy5pc1VwZGF0aW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMubGFzdENoZWNrZWQgPSAkUkVWSVNJT047XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCB7IHN1YnRhZ3MsIHN1YnRhZywgc3VidGFnQnVmZmVyQ2FjaGUsIGxhc3RWYWx1ZSwgcmV2aXNpb24gfSA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHN1YnRhZyAhPT0gbnVsbCkge1xuICAgICAgICAgIGxldCBzdWJ0YWdWYWx1ZSA9IHN1YnRhZ1tDT01QVVRFXSgpO1xuXG4gICAgICAgICAgaWYgKHN1YnRhZ1ZhbHVlID09PSBzdWJ0YWdCdWZmZXJDYWNoZSkge1xuICAgICAgICAgICAgcmV2aXNpb24gPSBNYXRoLm1heChyZXZpc2lvbiwgbGFzdFZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIHRlbXBvcmFyeSBidWZmZXIgY2FjaGVcbiAgICAgICAgICAgIHRoaXMuc3VidGFnQnVmZmVyQ2FjaGUgPSBudWxsO1xuICAgICAgICAgICAgcmV2aXNpb24gPSBNYXRoLm1heChyZXZpc2lvbiwgc3VidGFnVmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJ0YWdzICE9PSBudWxsKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdWJ0YWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBzdWJ0YWdzW2ldW0NPTVBVVEVdKCk7XG4gICAgICAgICAgICByZXZpc2lvbiA9IE1hdGgubWF4KHZhbHVlLCByZXZpc2lvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sYXN0VmFsdWUgPSByZXZpc2lvbjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuaXNVcGRhdGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmxhc3RWYWx1ZTtcbiAgfVxuXG4gIHN0YXRpYyB1cGRhdGUoX3RhZzogVXBkYXRhYmxlVGFnLCBfc3VidGFnOiBUYWcpIHtcbiAgICBpZiAoREVCVUcgJiYgX3RhZ1tUWVBFXSAhPT0gTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXR0ZW1wdGVkIHRvIHVwZGF0ZSBhIHRhZyB0aGF0IHdhcyBub3QgdXBkYXRhYmxlJyk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVFMgMy43IHNob3VsZCBhbGxvdyB1cyB0byBkbyB0aGlzIHZpYSBhc3NlcnRpb25cbiAgICBsZXQgdGFnID0gX3RhZyBhcyBNb25vbW9ycGhpY1RhZ0ltcGw7XG4gICAgbGV0IHN1YnRhZyA9IF9zdWJ0YWcgYXMgTW9ub21vcnBoaWNUYWdJbXBsO1xuXG4gICAgaWYgKHN1YnRhZyA9PT0gQ09OU1RBTlRfVEFHKSB7XG4gICAgICB0YWcuc3VidGFnID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgcG9zc2liaWxpdGllcyB3aGVuIHVwZGF0aW5nIGEgc3VidGFnOlxuICAgICAgLy9cbiAgICAgIC8vIDEuIHN1YnRhZ1tDT01QVVRFXSgpIDw9IHRhZ1tDT01QVVRFXSgpO1xuICAgICAgLy8gMi4gc3VidGFnW0NPTVBVVEVdKCkgPiB0YWdbQ09NUFVURV0oKTtcbiAgICAgIC8vXG4gICAgICAvLyBUaGUgZmlyc3QgcG9zc2liaWxpdHkgaXMgY29tcGxldGVseSBmaW5lIHdpdGhpbiBvdXIgY2FjaGluZyBtb2RlbCwgYnV0XG4gICAgICAvLyB0aGUgc2Vjb25kIHBvc3NpYmlsaXR5IHByZXNlbnRzIGEgcHJvYmxlbS4gSWYgdGhlIHBhcmVudCB0YWcgaGFzXG4gICAgICAvLyBhbHJlYWR5IGJlZW4gcmVhZCwgdGhlbiBpdCdzIHZhbHVlIGlzIGNhY2hlZCBhbmQgd2lsbCBub3QgdXBkYXRlIHRvXG4gICAgICAvLyByZWZsZWN0IHRoZSBzdWJ0YWcncyBncmVhdGVyIHZhbHVlLiBOZXh0IHRpbWUgdGhlIGNhY2hlIGlzIGJ1c3RlZCwgdGhlXG4gICAgICAvLyBzdWJ0YWcncyB2YWx1ZSBfd2lsbF8gYmUgcmVhZCwgYW5kIGl0J3MgdmFsdWUgd2lsbCBiZSBfZ3JlYXRlcl8gdGhhblxuICAgICAgLy8gdGhlIHNhdmVkIHNuYXBzaG90IG9mIHRoZSBwYXJlbnQsIGNhdXNpbmcgdGhlIHJlc3VsdGluZyBjYWxjdWxhdGlvbiB0b1xuICAgICAgLy8gYmUgcmVydW4gZXJyb25lb3VzbHkuXG4gICAgICAvL1xuICAgICAgLy8gSW4gb3JkZXIgdG8gcHJldmVudCB0aGlzLCB3aGVuIHdlIGZpcnN0IHVwZGF0ZSB0byBhIG5ldyBzdWJ0YWcgd2Ugc3RvcmVcbiAgICAgIC8vIGl0cyBjb21wdXRlZCB2YWx1ZSwgYW5kIHRoZW4gY2hlY2sgYWdhaW5zdCB0aGF0IGNvbXB1dGVkIHZhbHVlIG9uXG4gICAgICAvLyBzdWJzZXF1ZW50IHVwZGF0ZXMuIElmIGl0cyB2YWx1ZSBoYXNuJ3QgY2hhbmdlZCwgdGhlbiB3ZSByZXR1cm4gdGhlXG4gICAgICAvLyBwYXJlbnQncyBwcmV2aW91cyB2YWx1ZS4gT25jZSB0aGUgc3VidGFnIGNoYW5nZXMgZm9yIHRoZSBmaXJzdCB0aW1lLFxuICAgICAgLy8gd2UgY2xlYXIgdGhlIGNhY2hlIGFuZCBldmVyeXRoaW5nIGlzIGZpbmFsbHkgaW4gc3luYyB3aXRoIHRoZSBwYXJlbnQuXG4gICAgICB0YWcuc3VidGFnQnVmZmVyQ2FjaGUgPSBzdWJ0YWdbQ09NUFVURV0oKTtcbiAgICAgIHRhZy5zdWJ0YWcgPSBzdWJ0YWc7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGRpcnR5KHRhZzogRGlydHlhYmxlVGFnIHwgVXBkYXRhYmxlVGFnKSB7XG4gICAgaWYgKFxuICAgICAgREVCVUcgJiZcbiAgICAgICEodGFnW1RZUEVdID09PSBNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZSB8fCB0YWdbVFlQRV0gPT09IE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0ZWQgdG8gZGlydHkgYSB0YWcgdGhhdCB3YXMgbm90IGRpcnR5YWJsZScpO1xuICAgIH1cblxuICAgIGlmIChERUJVRykge1xuICAgICAgLy8gVXN1YWxseSBieSB0aGlzIHBvaW50LCB3ZSd2ZSBhbHJlYWR5IGFzc2VydGVkIHdpdGggYmV0dGVyIGVycm9yIGluZm9ybWF0aW9uLFxuICAgICAgLy8gYnV0IHRoaXMgaXMgb3VyIGxhc3QgbGluZSBvZiBkZWZlbnNlLlxuICAgICAgYXNzZXJ0VGFnTm90Q29uc3VtZWQhKHRhZyk7XG4gICAgfVxuXG4gICAgKHRhZyBhcyBNb25vbW9ycGhpY1RhZ0ltcGwpLnJldmlzaW9uID0gKyskUkVWSVNJT047XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGRpcnR5ID0gTW9ub21vcnBoaWNUYWdJbXBsLmRpcnR5O1xuZXhwb3J0IGNvbnN0IHVwZGF0ZSA9IE1vbm9tb3JwaGljVGFnSW1wbC51cGRhdGU7XG5cbi8vLy8vLy8vLy9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRhZygpOiBEaXJ0eWFibGVUYWcge1xuICByZXR1cm4gbmV3IE1vbm9tb3JwaGljVGFnSW1wbChNb25vbW9ycGhpY1RhZ1R5cGVzLkRpcnR5YWJsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVcGRhdGFibGVUYWcoKTogVXBkYXRhYmxlVGFnIHtcbiAgcmV0dXJuIG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGUpO1xufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCBDT05TVEFOVF9UQUcgPSBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuQ29uc3RhbnQpIGFzIENvbnN0YW50VGFnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNDb25zdCh7IHRhZyB9OiBUYWdnZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHRhZyA9PT0gQ09OU1RBTlRfVEFHO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb25zdFRhZyh0YWc6IFRhZyk6IHRhZyBpcyBDb25zdGFudFRhZyB7XG4gIHJldHVybiB0YWcgPT09IENPTlNUQU5UX1RBRztcbn1cblxuLy8vLy8vLy8vL1xuXG5jbGFzcyBWb2xhdGlsZVRhZyBpbXBsZW1lbnRzIFRhZyB7XG4gIFtDT01QVVRFXSgpIHtcbiAgICByZXR1cm4gVk9MQVRJTEU7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFZPTEFUSUxFX1RBRyA9IG5ldyBWb2xhdGlsZVRhZygpO1xuXG4vLy8vLy8vLy8vXG5cbmNsYXNzIEN1cnJlbnRUYWcgaW1wbGVtZW50cyBDdXJyZW50VGFnIHtcbiAgW0NPTVBVVEVdKCkge1xuICAgIHJldHVybiAkUkVWSVNJT047XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IENVUlJFTlRfVEFHID0gbmV3IEN1cnJlbnRUYWcoKTtcblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSh0YWdzOiBUYWdbXSk6IFRhZyB7XG4gIGxldCBvcHRpbWl6ZWQ6IFRhZ1tdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSB0YWdzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGxldCB0YWcgPSB0YWdzW2ldO1xuICAgIGlmICh0YWcgPT09IENPTlNUQU5UX1RBRykgY29udGludWU7XG4gICAgb3B0aW1pemVkLnB1c2godGFnKTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVDb21iaW5hdG9yVGFnKG9wdGltaXplZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb21iaW5hdG9yVGFnKHRhZ3M6IFRhZ1tdKTogVGFnIHtcbiAgc3dpdGNoICh0YWdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBDT05TVEFOVF9UQUc7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIHRhZ3NbMF07XG4gICAgZGVmYXVsdDpcbiAgICAgIGxldCB0YWcgPSBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuQ29tYmluYXRvcikgYXMgQ29tYmluYXRvclRhZztcbiAgICAgICh0YWcgYXMgYW55KS5zdWJ0YWdzID0gdGFncztcbiAgICAgIHJldHVybiB0YWc7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=

@@ -33,3 +33,3 @@ import { UnionToIntersection } from './utils';

*/
export declare function value(tag: Tag): Revision;
export declare function value(_tag: Tag): Revision;
/**

@@ -84,8 +84,9 @@ * `validate` receives a tag and a snapshot from a previous call to `value` with

private isUpdating;
private subtags;
private subtag;
private subtags;
private subtagBufferCache;
[TYPE]: MonomorphicTagType;
constructor(type: MonomorphicTagTypes);
[COMPUTE](): Revision;
static update(_tag: UpdatableTag, subtag: Tag): void;
static update(_tag: UpdatableTag, _subtag: Tag): void;
static dirty(tag: DirtyableTag | UpdatableTag): void;

@@ -92,0 +93,0 @@ }

{
"name": "@glimmer/validator",
"version": "0.46.0",
"version": "0.47.0",
"description": "Objects used to track values and their dirtiness in Glimmer",

@@ -5,0 +5,0 @@ "license": "MIT",

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

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

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