Socket
Socket
Sign inDemoInstall

config-kit

Package Overview
Dependencies
29
Maintainers
1
Versions
20
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.0.0 to 1.0.1

16

CHANGELOG.md

@@ -1,3 +0,15 @@

# v1.0.0
# v1.0.1 (Jun 1, 2020)
* Initial release.
* fix: Added object check when checking if object changed during watch handler execution.
* chore: Updated dependencies.
# v1.0.0 (Mar 27, 2020)
* Initial release with support for:
- Layered data architecture
- Schema validation using [joi]
- Default values
- Environment variable precedence
- Define custom layers
- Extensible data store interface
- Support for array type values

8

dist/config.js

@@ -342,3 +342,3 @@ "use strict";

}))) {
this.layers.add(_objectSpread({}, opts, {
this.layers.add(_objectSpread(_objectSpread({}, opts), {}, {
id,

@@ -674,4 +674,6 @@ store: new StoreClass()

const wrapped = (obj, ...args) => {
var _obj$Node$Meta;
// get the last value so we can dedupe
const val = obj !== undefined && obj[_node.default.Meta].hash;
const val = (obj === null || obj === void 0 ? void 0 : (_obj$Node$Meta = obj[_node.default.Meta]) === null || _obj$Node$Meta === void 0 ? void 0 : _obj$Node$Meta.hash) || obj;

@@ -696,2 +698,2 @@ if (desc.last !== val) {

_defineProperty(Config, "Base", Symbol('base'));
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbmZpZy5qcyJdLCJuYW1lcyI6WyJhcnJheUFjdGlvblJFIiwiQ29uZmlnIiwiY29uc3RydWN0b3IiLCJvcHRzIiwiSm9pIiwiU3RvcmVSZWdpc3RyeSIsIk1hcCIsImxlbmd0aCIsIm9wdCIsIlR5cGVFcnJvciIsIk9iamVjdCIsImFzc2lnbiIsImRhdGEiLCJzdG9yZXMiLCJhZGQiLCJKU1N0b3JlIiwiSlNPTlN0b3JlIiwic3RvcmUiLCJTdG9yZSIsImdldFByb3RvdHlwZU9mIiwiZmlsZSIsIlN0b3JlQ2xhc3MiLCJnZXQiLCJwYXRoIiwiZXh0bmFtZSIsImxheWVycyIsIkxheWVyTGlzdCIsImFsbG93TnVsbHMiLCJhbGxvd1Vua25vd24iLCJpZCIsIkJhc2UiLCJvcmRlciIsIkluZmluaXR5IiwicmVhZG9ubHkiLCJzY2hlbWEiLCJzdGF0aWMiLCJsYXllciIsImRlbGV0ZSIsImtleSIsImRlbGV0ZWQiLCJxdWVyeSIsImRlZmF1bHRWYWx1ZSIsIm9yaWdLZXkiLCJyZXBsYWNlIiwiaXQiLCJtIiwiayIsInZhbHVlIiwidW5kZWZpbmVkIiwiRXJyb3IiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJpIiwib2JqIiwiZW50cmllcyIsIm1lcmdlIiwic3JjIiwiZGVzdCIsInNyY1ZhbHVlIiwicmVzdWx0Iiwib2JqZWN0cyIsInVuc2hpZnQiLCJoYXMiLCJsb2FkIiwiZmlsZW5hbWUiLCJiYXNlbmFtZSIsInRhZ3MiLCJzcGxpdCIsInNsaWNlIiwiZXh0IiwicG9wIiwicmVzb2x2ZSIsImFjdGlvbiIsIl9tdXRhdGUiLCJ0ZXN0IiwiZXhpc3RpbmciLCJfaWQiLCJzZXQiLCJwdXNoIiwic2F2ZSIsIm9wdHNPckZpbGUiLCJTdHJpbmciLCJzaGlmdCIsInRvU3RyaW5nIiwiaW5kZW50YXRpb24iLCJ1bmxvYWQiLCJyZW1vdmUiLCJ1bndhdGNoIiwiaGFuZGxlciIsImhhbmRsZXJzIiwid2F0Y2hlck1hcCIsImRlc2MiLCJ3cmFwcGVkIiwid2F0Y2giLCJmaWx0ZXIiLCJmaW5kIiwiYXJncyIsInZhbCIsIk5vZGUiLCJNZXRhIiwiaGFzaCIsImxhc3QiLCJBbGwiLCJTeW1ib2wiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxhQUFhLEdBQUcsMEJBQXRCO0FBRUE7Ozs7QUFHZSxNQUFNQyxNQUFOLENBQWE7QUFDM0I7Ozs7OztBQU9BOzs7Ozs7QUFPQTs7Ozs7O0FBT0E7Ozs7OztBQU9BOzs7Ozs7QUFPQTs7Ozs7O0FBT0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJBQyxFQUFBQSxXQUFXLENBQUMsR0FBR0MsSUFBSixFQUFVO0FBQUEsaUNBeENmQyxZQXdDZTs7QUFBQSxvQ0FqQ1osSUFpQ1k7O0FBQUEsb0NBMUJaLElBQUlDLHNCQUFKLEVBMEJZOztBQUFBLHdDQW5CUixJQUFJQyxHQUFKLEVBbUJROztBQUNwQixRQUFJSCxJQUFJLENBQUNJLE1BQVQsRUFBaUI7QUFDaEIsV0FBSyxNQUFNQyxHQUFYLElBQWtCTCxJQUFsQixFQUF3QjtBQUN2QixZQUFJSyxHQUFHLElBQUksT0FBT0EsR0FBUCxLQUFlLFFBQTFCLEVBQW9DO0FBQ25DLGdCQUFNLElBQUlDLFNBQUosQ0FBYyx5Q0FBZCxDQUFOO0FBQ0E7QUFDRDs7QUFDRE4sTUFBQUEsSUFBSSxHQUFHTyxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLEVBQWtCLEdBQUdSLElBQXJCLENBQVA7QUFDQSxLQVBELE1BT087QUFDTkEsTUFBQUEsSUFBSSxHQUFHLEVBQVA7QUFDQTs7QUFFRCxRQUFJQSxJQUFJLENBQUNTLElBQUwsSUFBYSxPQUFPVCxJQUFJLENBQUNTLElBQVosS0FBcUIsUUFBdEMsRUFBZ0Q7QUFDL0MsWUFBTSxJQUFJSCxTQUFKLENBQWMsc0NBQWQsQ0FBTjtBQUNBOztBQUVELFNBQUtJLE1BQUwsQ0FBWUMsR0FBWixDQUFnQkMsZ0JBQWhCO0FBQ0EsU0FBS0Ys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SVQsSUFBSSxDQUFDVSxJQUFMLEtBQWNKLEdBQWxCLEVBQXVCO0FBQ3RCTixRQUFBQSxJQUFJLENBQUNVLElBQUwsR0FBWUosR0FBWjtBQUNBVCxRQUFBQSxPQUFPLENBQUNuQyxHQUFELEVBQU0sR0FBRzJDLElBQVQsQ0FBUDtBQUNBO0FBQ0QsS0FQRDs7QUFTQUwsSUFBQUEsSUFBSSxDQUFDQyxPQUFMLEdBQWVBLE9BQWY7QUFFQSxTQUFLcEUsTUFBTCxDQUFZcUUsS0FBWixDQUFrQkMsTUFBbEIsRUFBMEJGLE9BQTFCO0FBQ0EsV0FBTyxJQUFQO0FBQ0E7O0FBM2lCMEI7Ozs7Z0JBQVA1RixNLFNBTVBzRyxjOztnQkFOT3RHLE0sVUFhTnVHLE1BQU0sQ0FBQyxNQUFELEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSm9pIGZyb20gJ0BoYXBpL2pvaSc7XG5pbXBvcnQgSlNTdG9yZSBmcm9tICcuL3N0b3Jlcy9qcy1zdG9yZSc7XG5pbXBvcnQgSlNPTlN0b3JlIGZyb20gJy4vc3RvcmVzL2pzb24tc3RvcmUnO1xuaW1wb3J0IExheWVyTGlzdCwgeyBBbGwgfSBmcm9tICcuL2xheWVyLWxpc3QnO1xuaW1wb3J0IE5vZGUgZnJvbSAnLi9ub2RlJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IFN0b3JlIGZyb20gJy4vc3RvcmUnO1xuaW1wb3J0IFN0b3JlUmVnaXN0cnkgZnJvbSAnLi9zdG9yZS1yZWdpc3RyeSc7XG5cbmltcG9ydCB7IGFycmF5aWZ5LCBzcGxpdEtleSwgdW5pcXVlIH0gZnJvbSAnLi91dGlsJztcblxuY29uc3QgYXJyYXlBY3Rpb25SRSA9IC9ecG9wfHB1c2h8c2hpZnR8dW5zaGlmdCQvO1xuXG4vKipcbiAqIFRoZSBtYWluIGNvbmZpZyBvYmplY3QgdGhhdCBvcmNoZXN0cmF0ZXMgZGF0YSBhY2Nlc3MgYW5kIGZpbGUgaW50ZXJhY3Rpb24uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbmZpZyB7XG5cdC8qKlxuXHQgKiBBIHNwZWNpYWwgaWQgdGhhdCBzaWduaWZpZXMgYWxsIGxheWVycyB3aGVuIHF1ZXJ5aW5nIGEgbGlzdCBvZiBsYXllcnMuXG5cdCAqIEB0eXBlIHtTeW1ib2x9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRzdGF0aWMgQWxsID0gQWxsO1xuXG5cdC8qKlxuXHQgKiBUaGUgaWQgZm9yIHRoZSBiYXNlIGxheWVyLlxuXHQgKiBAdHlwZSB7U3ltYm9sfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0c3RhdGljIEJhc2UgPSBTeW1ib2woJ2Jhc2UnKTtcblxuXHQvKipcblx0ICogQSByZWZlcmVuY2UgdG8gdGhlIEpvaSBzY2hlbWEgbGlicmFyeS5cblx0ICogQHR5cGUge09iamVjdH1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdEpvaSA9IEpvaTtcblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgbGlzdCBvZiBsYXllcnMuXG5cdCAqIEB0eXBlIHtMYXllckxpc3R9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRsYXllcnMgPSBudWxsO1xuXG5cdC8qKlxuXHQgKiBUcmFja3MgdGhlIHN0b3JlIHR5cGVzIGJ5IGZpbGUgZXh0ZW5zaW9uLlxuXHQgKiBAdHlwZSB7U3RvcmVSZWdpc3RyeX1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHN0b3JlcyA9IG5ldyBTdG9yZVJlZ2lzdHJ5KCk7XG5cblx0LyoqXG5cdCAqIEEgbG9va3VwIHRhYmxlIG9mIG9yaWdpbmFsIHdhdGNoIGhhbmRsZXJzIHRvIHRoZWlyIHdyYXBwZWQgY291bnRlcnBhcnRzIHNvIHRoYXQgaXQgY2FuXG5cdCAqIGRlZHVwZSBldmVudHMuXG5cdCAqIEB0eXBlIHtNYXB9XG5cdCAqL1xuXHR3YXRjaGVyTWFwID0gbmV3IE1hcCgpO1xuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgY29uZmlnIG9iamVjdC5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIFZhcmlvdXMgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5hbGxvd051bGxzXSAtIEZvcmNlcyBhbGwgbm9kZXMgb2YgYSBzY2hlbWEgdG8gYWxsb3cgbnVsbHMuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuYWxsb3dVbmtub3duPXRydWVdIC0gQWxsb3dzIG9iamVjdCB2YWx1ZXMgdG8gY29udGFpbiB1bmtub3duIGtleXMuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy5kYXRhXSAtIERhdGEgdG8gaW5pdGlhbGl6ZSB0aGUgYmFzZSBjb25maWcgbGF5ZXIgd2l0aC5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmZpbGVdIC0gVGhlIGZpbGUgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGJhc2UgbGF5ZXIuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fExheWVyfEFycmF5LjxPYmplY3R8TGF5ZXI+fSBbb3B0cy5sYXllcnNdIC0gT25lIG9yIG1vcmUgbGF5ZXJzIHRvIGFkZCBpblxuXHQgKiBhZGRpdGlvbiB0byB0aGUgYmFzZSBsYXllci5cblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRzLnNjaGVtYV0gLSBBIEpvaSBzY2hlbWEgb3Igb2JqZWN0IHRvIGNvbXBpbGUgaW50byBhIEpvaSBzY2hlbWEuXG5cdCAqIEBwYXJhbSB7U3RvcmV8RnVuY3Rpb259IFtvcHRzLnN0b3JlXSAtIEEgc3RvcmUgaW5zdGFuY2Ugb3Igc3RvcmUgY2xhc3MgdG8gdXNlIGZvciB0aGUgYmFzZVxuXHQgKiBsYXllci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbnxBcnJheS48RnVuY3Rpb24+fSBbb3B0cy5zdG9yZXNdIC0gQSBzdG9yZSBjbGFzcyBvciBhcnJheSBvZiBzdG9yZSBjbGFzc2VzXG5cdCAqIHRvIHJlZ2lzdGVyIGluIGFkZGl0aW9uIHRvIHRoZSBidWlsdC1pbiBgSlNTdG9yZWAgYW5kIGBKU09OU3RvcmVgLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Y29uc3RydWN0b3IoLi4ub3B0cykge1xuXHRcdGlmIChvcHRzLmxlbmd0aCkge1xuXHRcdFx0Zm9yIChjb25zdCBvcHQgb2Ygb3B0cykge1xuXHRcdFx0XHRpZiAob3B0ICYmIHR5cGVvZiBvcHQgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgY29uZmlnIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0Jyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCAuLi5vcHRzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b3B0cyA9IHt9O1xuXHRcdH1cblxuXHRcdGlmIChvcHRzLmRhdGEgJiYgdHlwZW9mIG9wdHMuZGF0YSAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGNvbmZpZyBkYXRhIHRvIGJlIGFuIG9iamVjdCcpO1xuXHRcdH1cblxuXHRcdHRoaXMuc3RvcmVzLmFkZChKU1N0b3JlKTtcblx0XHR0aGlzLnN0b3Jlcy5hZGQoSlNPTlN0b3JlKTtcblx0XHRmb3IgKGNvbnN0IHN0b3JlIG9mIGFycmF5aWZ5KG9wdHMuc3RvcmVzKSkge1xuXHRcdFx0dGhpcy5zdG9yZXMuYWRkKHN0b3JlKTtcblx0XHR9XG5cblx0XHRsZXQgeyBzdG9yZSB9ID0gb3B0cztcblx0XHRpZiAoc3RvcmUpIHtcblx0XHRcdC8vIGlmIHdlIGhhdmUgYW4gZXhwbGljaXQgYHN0b3JlYCwgdGhlbiByZWdpc3RlciBpdCdzIGNsYXNzXG5cdFx0XHR0aGlzLnN0b3Jlcy5hZGQoc3RvcmUgaW5zdGFuY2VvZiBTdG9yZSA/IE9iamVjdC5nZXRQcm90b3R5cGVPZihzdG9yZSkuY29uc3RydWN0b3IgOiBzdG9yZSk7XG5cdFx0fSBlbHNlIGlmIChvcHRzLmZpbGUpIHtcblx0XHRcdGNvbnN0IFN0b3JlQ2xhc3MgPSB0aGlzLnN0b3Jlcy5nZXQocGF0aC5leHRuYW1lKG9wdHMuZmlsZSkpO1xuXHRcdFx0c3RvcmUgPSBuZXcgU3RvcmVDbGFzcygpO1xuXHRcdH1cblxuXHRcdHRoaXMubGF5ZXJzID0gbmV3IExheWVyTGlzdCh7XG5cdFx0XHRhbGxvd051bGxzOiAgIG9wdHMuYWxsb3dOdWxscyxcblx0XHRcdGFsbG93VW5rbm93bjogb3B0cy5hbGxvd1Vua25vd25cblx0XHR9KTtcblxuXHRcdHRoaXMubGF5ZXJzLmFkZCh7XG5cdFx0XHRkYXRhOiAgICAgb3B0cy5kYXRhLFxuXHRcdFx0ZmlsZTogICAgIG9wdHMuZmlsZSxcblx0XHRcdGlkOiAgICAgICBDb25maWcuQmFzZSxcblx0XHRcdG9yZGVyOiAgICAtSW5maW5pdHksXG5cdFx0XHRyZWFkb25seTogZmFsc2UsXG5cdFx0XHRzY2hlbWE6ICAgb3B0cy5zY2hlbWEsXG5cdFx0XHRzdGF0aWM6ICAgdHJ1ZSxcblx0XHRcdHN0b3JlXG5cdFx0fSk7XG5cblx0XHRmb3IgKGNvbnN0IGxheWVyIG9mIGFycmF5aWZ5KG9wdHMubGF5ZXJzKSkge1xuXHRcdFx0dGhpcy5sYXllcnMuYWRkKGxheWVyKTtcblx0XHR9XG5cdH1cblxuXHRkYXRhKGlkKSB7XG5cdFx0cmV0dXJuIHRoaXMubGF5ZXJzLmdldChpZCk/LnN0b3JlPy5kYXRhO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgYSBjb25maWcgdmFsdWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEFycmF5LjxTdHJpbmc+fSBrZXkgLSBUaGUga2V5IHRvIGRlbGV0ZS5cblx0ICogQHBhcmFtIHtTdHJpbmd8U3ltYm9sfSBpZCAtIEEgc3BlY2lmaWMgbGF5ZXIgaWQgdG8gZGVsZXRlIHRoZSB2YWx1ZSBmcm9tLlxuXHQgKiBAcmV0dXJucyB7Qm9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlIHdhcyBkZWxldGVkLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0ZGVsZXRlKGtleSwgaWQpIHtcblx0XHRrZXkgPSBzcGxpdEtleShrZXkpO1xuXHRcdGxldCBkZWxldGVkID0gZmFsc2U7XG5cblx0XHRmb3IgKGNvbnN0IGxheWVyIG9mIHRoaXMubGF5ZXJzLnF1ZXJ5KGlkKSkge1xuXHRcdFx0aWYgKGxheWVyKSB7XG5cdFx0XHRcdGRlbGV0ZWQgPSBsYXllci5kZWxldGUoa2V5KSB8fCBkZWxldGVkO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBkZWxldGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyBhIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIGtleS5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd8QXJyYXkuPFN0cmluZz59IFtrZXldIC0gVGhlIGtleSB0byBnZXQuIFdoZW4gYHVuZGVmaW5lZGAsIHRoZSBlbnRpcmUgY29uZmlnXG5cdCAqIGlzIHJldHVybmVkLlxuXHQgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIC0gQSB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIGtleSBpcyBub3QgZm91bmQuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfFN5bWJvbHxBcnJheS48U3RyaW5nfFN5bWJvbD59IFtpZF0gLSBBIHNwZWNpZmljIGlkIG9yIGlkcyB0byBzY2FuIGZvciB0aGVcblx0ICoga2V5LiBJZiBub3Qgc3BlY2lmaWVkLCB0aGVuIGl0IHNjYW5zIGFsbCBsYXllcnMuXG5cdCAqIEByZXR1cm5zIHsqfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Z2V0KGtleSwgZGVmYXVsdFZhbHVlLCBpZCkge1xuXHRcdGNvbnN0IG9yaWdLZXkgPSBrZXk7XG5cdFx0Y29uc3QgcmVwbGFjZSA9IGl0ID0+IHtcblx0XHRcdGlmICh0eXBlb2YgaXQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdHJldHVybiBpdC5yZXBsYWNlKC9cXHtcXHsoW159XSspXFx9XFx9L2csIChtLCBrKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmdldChrKTtcblx0XHRcdFx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBDb25maWcga2V5IFwiJHtvcmlnS2V5fVwiIHJlZmVyZW5jZXMgdW5kZWZpbmVkIHZhcmlhYmxlIFwiJHtrfVwiYCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaXQpKSB7XG5cdFx0XHRcdHJldHVybiBpdC5tYXAoaSA9PiByZXBsYWNlKGkpKTtcblx0XHRcdH0gZWxzZSBpZiAoaXQgJiYgdHlwZW9mIGl0ID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRjb25zdCBvYmogPSB7fTtcblx0XHRcdFx0Zm9yIChjb25zdCBbIGtleSwgdmFsdWUgXSBvZiBPYmplY3QuZW50cmllcyhpdCkpIHtcblx0XHRcdFx0XHRvYmpba2V5XSA9IHJlcGxhY2UodmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBvYmo7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gaXQ7XG5cdFx0fTtcblx0XHRjb25zdCBtZXJnZSA9IChzcmMsIGRlc3QpID0+IHtcblx0XHRcdGZvciAoY29uc3QgWyBrZXksIHNyY1ZhbHVlIF0gb2YgT2JqZWN0LmVudHJpZXMoc3JjKSkge1xuXHRcdFx0XHRpZiAoc3JjVmFsdWUgJiYgdHlwZW9mIHNyY1ZhbHVlID09PSAnb2JqZWN0JyAmJiBkZXN0W2tleV0gJiYgdHlwZW9mIGRlc3Rba2V5XSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoc3JjVmFsdWUpKSB7XG5cdFx0XHRcdFx0bWVyZ2Uoc3JjVmFsdWUsIGRlc3Rba2V5XSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGVzdFtrZXldID0gc3JjVmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0a2V5ID0gc3BsaXRLZXkoa2V5KTtcblxuXHRcdGxldCByZXN1bHQ7XG5cdFx0Y29uc3Qgb2JqZWN0cyA9IFtdO1xuXG5cdFx0Ly8gbG9vcCB0aHJvdWdoIHRoZSBsYXllcnMgaW4gcmV2ZXJzZSB1bnRpbCB3ZSBoaXQgYSBub24tb2JqZWN0IHZhbHVlIGFuZCBhY2N1bXVsYXRlXG5cdFx0Ly8gb2JqZWN0IHZhbHVlcyBmb3IgbWVyZ2luZyBpZiBubyBub24tb2JqZWN0IGZvdW5kXG5cdFx0Zm9yIChjb25zdCBsYXllciBvZiB0aGlzLmxheWVycy5xdWVyeShpZCwgdHJ1ZSkpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gcmVwbGFjZShsYXllci5nZXQoa2V5KSk7XG5cdFx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvYmplY3RzLnVuc2hpZnQodmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIG1lcmdlIGFsbCBvYmplY3RzXG5cdFx0aWYgKG9iamVjdHMubGVuZ3RoKSB7XG5cdFx0XHRyZXN1bHQgPSB7fTtcblx0XHRcdGZvciAoY29uc3Qgb2JqIG9mIG9iamVjdHMpIHtcblx0XHRcdFx0bWVyZ2Uob2JqLCByZXN1bHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgfHwga2V5Lmxlbmd0aCA/IHJlcGxhY2UoZGVmYXVsdFZhbHVlKSA6IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgaWYgYSBrZXkgaXMgc2V0LlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ3xBcnJheS48U3RyaW5nPn0gW2tleV0gLSBUaGUga2V5IHRvIGNoZWNrLlxuXHQgKiBAcGFyYW0ge1N0cmluZ3xTeW1ib2x8QXJyYXkuPFN0cmluZ3xTeW1ib2w+fSBbaWRdIC0gQSBzcGVjaWZpYyBsYXllciBpZCBvciBpZHMgdG8gc2NhbiBmb3Jcblx0ICogdGhlIGtleS4gSWYgbm90IHNwZWNpZmllZCwgdGhlbiBpdCBzY2FucyBhbGwgbGF5ZXJzLlxuXHQgKiBAcmV0dXJucyB7Qm9vbGVhbn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGhhcyhrZXksIGlkKSB7XG5cdFx0a2V5ID0gc3BsaXRLZXkoa2V5KTtcblx0XHRmb3IgKGNvbnN0IGxheWVyIG9mIHRoaXMubGF5ZXJzLnF1ZXJ5KGlkLCB0cnVlKSkge1xuXHRcdFx0aWYgKGxheWVyLmhhcyhrZXkpKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogTG9hZHMgYSBjb25maWcgZmlsZS4gQnkgZGVmYXVsdCwgaXQgbG9hZHMgaXQgaW50byB0aGUgY29uZmlnJ3MgZGVmYXVsdCBsYXllci5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IGZpbGUgLSBUaGUgcGF0aCB0byB0aGUgY29uZmlnIGZpbGUgdG8gbG9hZC5cblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIFZhcmlvdXMgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRzLmlkXSAtIFRoZSBsYXllciBpZCB0byBsb2FkIHRoZSBmaWxlIGludG8uIElmIHRoZSBsYXllciBpZCBkb2VzIG5vdFxuXHQgKiBleGlzdCwgaXQgd2lsbCBjcmVhdGUgaXQuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5uYW1lc3BhY2VdIC0gVGhlIG5hbWUgb2YgdGhlIHNjb3BlIGVuY29tcGFzc2luZyB0aGlzIGxheWVyJ3MgZGF0YSBhbmRcblx0ICogc2NoZW1hIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQuXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5vcmRlcj0wXSAtIFRoZSBsYXllciBwcmVjZWRlbmNlLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRzLnJlYWRvbmx5XSAtIEluZGljYXRlcyBpZiB0aGlzIGxheWVyJ3MgZGF0YSBjYW4gYmUgY2hhbmdlZC5cblx0ICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBbb3B0cy5zY2hlbWFdIC0gQSBKb2kgc2NoZW1hLCBvYmplY3QgdG8gY29tcGlsZSBpbnRvIGEgSm9pIHNjaGVtYSwgb3Jcblx0ICogYSBwYXRoIHRvIGEgYC5qc2Agb3IgYC5qc29uYCBmaWxlIGNvbnRhaW5pbmcgYSBKb2kgc2NoZW1hLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRzLnN0YXRpY10gLSBJbmRpY2F0ZXMgaWYgdGhpcyBsYXllciBjYW4gYmUgdW5sb2FkZWQuXG5cdCAqIEByZXR1cm5zIHtDb25maWd9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRsb2FkKGZpbGUsIG9wdHMgPSB7fSkge1xuXHRcdGlmICghZmlsZSB8fCB0eXBlb2YgZmlsZSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGNvbmZpZyBmaWxlIHRvIGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHRcdH1cblxuXHRcdGlmIChvcHRzICYmIHR5cGVvZiBvcHRzID09PSAnc3RyaW5nJykge1xuXHRcdFx0b3B0cyA9IHsgaWQ6IG9wdHMgfTtcblx0XHR9XG5cblx0XHRpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZmlsZW5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGUpO1xuXHRcdGNvbnN0IHRhZ3MgPSBmaWxlbmFtZS5zcGxpdCgnLicpLnNsaWNlKDEpO1xuXHRcdGNvbnN0IGV4dCA9IHRhZ3MucG9wKCk7XG5cdFx0Y29uc3QgU3RvcmVDbGFzcyA9IHRoaXMuc3RvcmVzLmdldChgLiR7ZXh0fWApO1xuXG5cdFx0aWYgKCFTdG9yZUNsYXNzKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGZpbGUgdHlwZSBcIiR7ZXh0ID8gYC4ke2V4dH1gIDogZmlsZW5hbWV9XCJgKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGlkIG9mIHVuaXF1ZShvcHRzLmlkIHx8IHRoaXMucmVzb2x2ZSh7IGFjdGlvbjogJ2xvYWQnLCB0YWdzIH0pKSkge1xuXHRcdFx0dGhpcy5sYXllcnMuYWRkKHtcblx0XHRcdFx0Li4ub3B0cyxcblx0XHRcdFx0aWQsXG5cdFx0XHRcdHN0b3JlOiBuZXcgU3RvcmVDbGFzcygpXG5cdFx0XHR9KS5sb2FkKGZpbGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZXBseSBtZXJnZXMgYW4gb2JqZWN0IGludG8gYSBsYXllcidzIHN0b3JlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIHRvIG1lcmdlLlxuXHQgKiBAcGFyYW0ge1N0cmluZ3xTeW1ib2x9IFtpZF0gLSBBIHNwZWNpZmljIGxheWVyIGlkIG9yIGlkcyB0byBtZXJnZSB0aGUgZGF0YSBpbnRvLiBJZiBub3Rcblx0ICogc3BlY2lmaWVkLCB0aGVuIGl0IG1lcmdlcyB0aGUgZGF0YSBpbnRvIHRoZSBjb25maWcncyBkZWZhdWx0IGxheWVyLlxuXHQgKiBAcmV0dXJucyB7Q29uZmlnfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0bWVyZ2UoZGF0YSwgaWQpIHtcblx0XHRpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcblx0XHRcdGZvciAoY29uc3QgbGF5ZXIgb2YgdGhpcy5sYXllcnMucXVlcnkoaWQpKSB7XG5cdFx0XHRcdGlmIChsYXllcikge1xuXHRcdFx0XHRcdGxheWVyLm1lcmdlKGRhdGEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEludGVybmFsIGhlbHBlciBmb3IgaW52b2tpbmcgbXV0YXRvciBtZXRob2RzIG9uIHRoZSBsYXllci5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEByZXR1cm5zIHsqfVxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICovXG5cdF9tdXRhdGUoeyBhY3Rpb24sIGtleSwgdmFsdWUsIGlkIH0pIHtcblx0XHRrZXkgPSBzcGxpdEtleShrZXkpO1xuXG5cdFx0aWYgKCFrZXkgfHwgIWtleS5sZW5ndGgpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignTWlzc2luZyByZXF1aXJlZCBjb25maWcga2V5Jyk7XG5cdFx0fVxuXG5cdFx0bGV0IHJlc3VsdDtcblxuXHRcdGlmIChhcnJheUFjdGlvblJFLnRlc3QoYWN0aW9uKSkge1xuXHRcdFx0Y29uc3QgZXhpc3RpbmcgPSB1bmlxdWUodGhpcy5nZXQoa2V5KSk7XG5cblx0XHRcdGlmIChhY3Rpb24gPT09ICdwb3AnIHx8IGFjdGlvbiA9PT0gJ3NoaWZ0Jykge1xuXHRcdFx0XHRyZXN1bHQgPSBleGlzdGluZ1thY3Rpb25dKCk7XG5cdFx0XHRcdHZhbHVlID0gZXhpc3Rpbmc7XG5cdFx0XHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ3B1c2gnKSB7XG5cdFx0XHRcdHZhbHVlID0gdW5pcXVlKEFycmF5LmlzQXJyYXkodmFsdWUpID8gWyAuLi5leGlzdGluZywgLi4udmFsdWUgXSA6IFsgLi4uZXhpc3RpbmcsIHZhbHVlIF0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsdWUgPSB1bmlxdWUoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbIC4uLnZhbHVlLCAuLi5leGlzdGluZyBdIDogWyB2YWx1ZSwgLi4uZXhpc3RpbmcgXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBfaWQgb2YgdW5pcXVlKGlkIHx8IHRoaXMucmVzb2x2ZSh7IGFjdGlvbiB9KSkpIHtcblx0XHRcdGNvbnN0IGxheWVyID0gdGhpcy5sYXllcnMuZ2V0KF9pZCkgfHwgdGhpcy5sYXllcnMuYWRkKF9pZCk7XG5cdFx0XHRsYXllci5zZXQoa2V5LCB2YWx1ZSwgYWN0aW9uKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgdGhlIGxhc3QgZWxlbWVudCBmcm9tIGEgYXJyYXkgdHlwZSBjb25maWcgdmFsdWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEFycmF5LjxTdHJpbmc+fSBba2V5XSAtIFRoZSBjb25maWcga2V5LlxuXHQgKiBAcGFyYW0ge1N0cmluZ3xTeW1ib2x9IFtpZF0gLSBUaGUgaWQgZm9yIGEgc3BlY2lmaWMgbGF5ZXIgdG8gc2F2ZS4gSWYgbm90IHNwZWNpZmllZCwgdGhlbiBpdFxuXHQgKiB1c2VzIHRoZSBjb25maWcncyBkZWZhdWx0IGxheWVyLlxuXHQgKiBAcmV0dXJucyB7Kn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHBvcChrZXksIGlkKSB7XG5cdFx0cmV0dXJuIHRoaXMuX211dGF0ZSh7IGlkLCBrZXksIGFjdGlvbjogJ3BvcCcgfSk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhbiBpdGVtIHRvIHRoZSBlbmQgb2YgYW4gYXJyYXkgdHlwZSBjb25maWcgdmFsdWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEFycmF5LjxTdHJpbmc+fSBrZXkgLSBUaGUgY29uZmlnIGtleS5cblx0ICogQHBhcmFtIHsqfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBhZGQuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfFN5bWJvbH0gW2lkXSAtIFRoZSBpZCBmb3IgYSBzcGVjaWZpYyBsYXllciB0byBzYXZlLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGVuIGl0XG5cdCAqIHVzZXMgdGhlIGNvbmZpZydzIGRlZmF1bHQgbGF5ZXIuXG5cdCAqIEByZXR1cm5zIHsqfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0cHVzaChrZXksIHZhbHVlLCBpZCkge1xuXHRcdHRoaXMuX211dGF0ZSh7IGlkLCBrZXksIGFjdGlvbjogJ3B1c2gnLCB2YWx1ZSB9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNvbHZlcyBhIGRlc3RpbmF0aW9uIGxheWVyIGlkIGJhc2VkIG9uIHRhZ3MgZXh0cmFjdGVkIGZyb20gdGhlIGNvbmZpZyBmaWxlbmFtZS4gSWYgYVxuXHQgKiBjb25maWcgZG9lc24ndCBjYXJlIGFib3V0IHRhZ3MsIGl0IGNhbiBzaW1wbHkgcmV0dXJuIHRoZSBkZWZhdWx0IGNvbmZpZyBsYXllciBpZC4gQ3VzdG9tXG5cdCAqIGNvbmZpZyBpbXBsZW1lbnRhdGlvbnMgYXJlIGVuY291cmFnZWQgdG8gb3ZlcnJpZGUgdGhpcyBtZXRob2QuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5hY3Rpb25dIC0gVGhlIGFjdGlvbiBiZWluZyBwZXJmb3JtZWQuXG5cdCAqIEBwYXJhbSB7QXJyYXkuPFN0cmluZz59IFtvcHRzLnRhZ3NdIC0gQSBsaXN0IG9mIHRhZ3MgcGFyc2VkIGZyb20gdGhlIGZpbGVuYW1lLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfFN5bWJvbHxBcnJheS48U3RyaW5nfFN5bWJvbD59XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRyZXNvbHZlKCkge1xuXHRcdHJldHVybiBDb25maWcuQmFzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlcyBhIHNwZWNpZmljIGxheWVyJ3Mgc3RvcmUgdG8gZGlzay5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBvcHRzT3JGaWxlIC0gVmFyaW91cyBvcHRpb25zIG9yIGEgZmlsZSBwYXRoLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHNPckZpbGUuZmlsZV0gLSBUaGUgZmlsZSB0byB3cml0ZSB0aGUgbGF5ZXJzIHN0b3JlIHRvLiBEZWZhdWx0cyB0byB0aGUgZmlsZVxuXHQgKiBsb2FkZWQgaW50byB0aGUgbGF5ZXIuIElmIHRoZXJlIGlzIG5vIGZpbGVuYW1lLCBhbiBlcnJvciBpcyB0aHJvd24uXG5cdCAqIEBwYXJhbSB7U3RyaW5nfFN5bWJvbH0gW29wdHNPckZpbGUuaWRdIC0gVGhlIGlkIGZvciBhIHNwZWNpZmljIGxheWVyIHRvIHNhdmUuIElmIG5vdCBzcGVjaWZpZWQsXG5cdCAqIHRoZW4gaXQgdXNlcyB0aGUgY29uZmlnJ3MgZGVmYXVsdCBsYXllci5cblx0ICogQHJldHVybnMge0NvbmZpZ31cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHNhdmUob3B0c09yRmlsZSkge1xuXHRcdGxldCBmaWxlO1xuXHRcdGxldCBpZDtcblxuXHRcdGlmIChvcHRzT3JGaWxlKSB7XG5cdFx0XHRpZiAodHlwZW9mIG9wdHNPckZpbGUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdCh7IGZpbGUsIGlkIH0gPSBvcHRzT3JGaWxlKTtcblx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIG9wdHNPckZpbGUgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdGZpbGUgPSBvcHRzT3JGaWxlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgX2lkIG9mIHVuaXF1ZShpZCB8fCB0aGlzLnJlc29sdmUoeyBhY3Rpb246ICdzYXZlJyB9KSkpIHtcblx0XHRcdGNvbnN0IGxheWVyID0gdGhpcy5sYXllcnMuZ2V0KF9pZCk7XG5cdFx0XHRpZiAoIWxheWVyKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgTGF5ZXIgXCIke1N0cmluZyhpZCl9XCIgbm90IGZvdW5kYCk7XG5cdFx0XHR9XG5cdFx0XHRsYXllci5zYXZlKGZpbGUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBnaXZlbiBjb25maWcga2V5LlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ3xBcnJheS48U3RyaW5nPn0ga2V5IC0gVGhlIGtleSB0byBzZXQuXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0LlxuXHQgKiBAcGFyYW0ge1N0cmluZ3xTeW1ib2x9IFtpZF0gLSBUaGUgaWQgZm9yIGEgc3BlY2lmaWMgbGF5ZXIgdG8gc2F2ZS4gSWYgbm90IHNwZWNpZmllZCwgdGhlbiBpdFxuXHQgKiB1c2VzIHRoZSBjb25maWcncyBkZWZhdWx0IGxheWVyLlxuXHQgKiBAcmV0dXJuIHtDb25maWd9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRzZXQoa2V5LCB2YWx1ZSwgaWQpIHtcblx0XHRyZXR1cm4gdGhpcy5fbXV0YXRlKHsgaWQsIGtleSwgYWN0aW9uOiAnc2V0JywgdmFsdWUgfSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgZmlyc3QgZWxlbWVudCBmcm9tIGEgYXJyYXkgdHlwZSBjb25maWcgdmFsdWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEFycmF5LjxTdHJpbmc+fSBba2V5XSAtIFRoZSBjb25maWcga2V5LlxuXHQgKiBAcGFyYW0ge1N0cmluZ3xTeW1ib2x9IFtpZF0gLSBUaGUgaWQgZm9yIGEgc3BlY2lmaWMgbGF5ZXIuIElmIG5vdCBzcGVjaWZpZWQsIHRoZW4gaXQgdXNlc1xuXHQgKiB0aGUgY29uZmlnJ3MgZGVmYXVsdCBsYXllci5cblx0ICogQHJldHVybnMgeyp9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRzaGlmdChrZXksIGlkKSB7XG5cdFx0cmV0dXJuIHRoaXMuX211dGF0ZSh7IGlkLCBrZXksIGFjdGlvbjogJ3NoaWZ0JyB9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgc3RyaW5nIHByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtpbmRlbnRhdGlvbj0yXSBUaGUgbnVtYmVyIG9mIHNwYWNlcyB0byBpbmRlbnQgdGhlIEpTT04gZm9ybWF0dGVkIG91dHB1dC5cblx0ICogQHJldHVybnMge1N0cmluZ31cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHRvU3RyaW5nKGluZGVudGF0aW9uKSB7XG5cdFx0cmV0dXJuIHRoaXMubGF5ZXJzLnRvU3RyaW5nKGluZGVudGF0aW9uKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVbmxvYWRzIGEgbGF5ZXIgYW5kIGl0cyBzdG9yZSBieSBpZC4gSWYgdGhlIGlkIGRvZXMgbm90IGV4aXN0LCBub3RoaW5nIGhhcHBlbnMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpZCAtIFRoZSBpZCBuYW1lIHRvIHVubG9hZC5cblx0ICogQHJldHVybnMge0Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBpZCBleGlzdHMgYW5kIHdhcyB1bmxvYWRlZC5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHVubG9hZChpZCkge1xuXHRcdGlmICghaWQpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgbGF5ZXIgaWQgdG8gdW5sb2FkJyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGF5ZXIgPSB0aGlzLmxheWVycy5nZXQoaWQpO1xuXHRcdGlmICghbGF5ZXIpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgTGF5ZXIgXCIke1N0cmluZyhpZCl9XCIgbm90IGZvdW5kYCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMubGF5ZXJzLnJlbW92ZShpZCk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhbiBpdGVtIHRvIHRoZSBiZWdpbm5pbmcgb2YgYW4gYXJyYXkgdHlwZSBjb25maWcgdmFsdWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEFycmF5LjxTdHJpbmc+fSBrZXkgLSBUaGUgY29uZmlnIGtleS5cblx0ICogQHBhcmFtIHsqfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBhZGQuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfFN5bWJvbH0gW2lkXSAtIFRoZSBpZCBmb3IgYSBzcGVjaWZpYyBsYXllci4gSWYgbm90IHNwZWNpZmllZCwgdGhlbiBpdCB1c2VzXG5cdCAqIHRoZSBjb25maWcncyBkZWZhdWx0IGxheWVyLlxuXHQgKiBAcmV0dXJucyB7Q29uZmlnfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0dW5zaGlmdChrZXksIHZhbHVlLCBpZCkge1xuXHRcdHRoaXMuX211dGF0ZSh7IGlkLCBrZXksIGFjdGlvbjogJ3Vuc2hpZnQnLCB2YWx1ZSB9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGEgd2F0Y2ggaGFuZGxlci5cblx0ICpcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciAtIEEgY2FsbGJhY2sgdG8gZmlyZSB3aGVuIGEgY2hhbmdlIG9jY3Vycy5cblx0ICogQHJldHVybnMge0NvbmZpZ31cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHVud2F0Y2goaGFuZGxlcikge1xuXHRcdGlmICh0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgaGFuZGxlciB0byBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaGFuZGxlcnMgPSB0aGlzLndhdGNoZXJNYXAuZ2V0KGhhbmRsZXIpO1xuXHRcdGlmIChoYW5kbGVycykge1xuXHRcdFx0Zm9yIChjb25zdCBkZXNjIG9mIGhhbmRsZXJzKSB7XG5cdFx0XHRcdHRoaXMubGF5ZXJzLnVud2F0Y2goZGVzYy53cmFwcGVkKTtcblx0XHRcdH1cblx0XHRcdHRoaXMud2F0Y2hlck1hcC5kZWxldGUoaGFuZGxlcik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBhIHdhdGNoIGhhbmRsZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEFycmF5LjxTdHJpbmc+fSBbZmlsdGVyXSAtIEEgcHJvcGVydHkgbmFtZSBvciBhcnJheSBvZiBuZXN0ZWQgcHJvcGVydGllcyB0b1xuXHQgKiB3YXRjaC5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciAtIEEgY2FsbGJhY2sgdG8gZmlyZSB3aGVuIGEgY2hhbmdlIG9jY3Vycy5cblx0ICogQHJldHVybnMge0NvbmZpZ31cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHdhdGNoKGZpbHRlciwgaGFuZGxlcikge1xuXHRcdGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRoYW5kbGVyID0gZmlsdGVyO1xuXHRcdFx0ZmlsdGVyID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgaGFuZGxlciB0byBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXG5cdFx0ZmlsdGVyID0gc3BsaXRLZXkoZmlsdGVyKTtcblx0XHRsZXQgaGFuZGxlcnMgPSB0aGlzLndhdGNoZXJNYXAuZ2V0KGhhbmRsZXIpO1xuXHRcdGxldCBkZXNjID0gaGFuZGxlcnMgJiYgaGFuZGxlcnMuZmluZChkZXNjID0+ICEoZGVzYy5maWx0ZXIgPCBmaWx0ZXIgfHwgZGVzYy5maWx0ZXIgPiBmaWx0ZXIpKTtcblxuXHRcdC8vIGNoZWNrIGlmIHRoaXMgaGFuZGxlciBpcyBhbHJlYWR5IHJlZ2lzdGVyZWRcblx0XHRpZiAoZGVzYykge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKCFoYW5kbGVycykge1xuXHRcdFx0dGhpcy53YXRjaGVyTWFwLnNldChoYW5kbGVyLCBoYW5kbGVycyA9IFtdKTtcblx0XHR9XG5cdFx0aGFuZGxlcnMucHVzaChkZXNjID0geyBmaWx0ZXIgfSk7XG5cblx0XHRjb25zdCB3cmFwcGVkID0gKG9iaiwgLi4uYXJncykgPT4ge1xuXHRcdFx0Ly8gZ2V0IHRoZSBsYXN0IHZhbHVlIHNvIHdlIGNhbiBkZWR1cGVcblx0XHRcdGNvbnN0IHZhbCA9IG9iaiAhPT0gdW5kZWZpbmVkICYmIG9ialtOb2RlLk1ldGFdLmhhc2g7XG5cdFx0XHRpZiAoZGVzYy5sYXN0ICE9PSB2YWwpIHtcblx0XHRcdFx0ZGVzYy5sYXN0ID0gdmFsO1xuXHRcdFx0XHRoYW5kbGVyKG9iaiwgLi4uYXJncyk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGRlc2Mud3JhcHBlZCA9IHdyYXBwZWQ7XG5cblx0XHR0aGlzLmxheWVycy53YXRjaChmaWx0ZXIsIHdyYXBwZWQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG4iXSwiZmlsZSI6ImNvbmZpZy5qcyJ9
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbmZpZy5qcyJdLCJuYW1lcyI6WyJhcnJheUFjdGlvblJFIiwiQ29uZmlnIiwiY29uc3RydWN0b3IiLCJvcHRzIiwiSm9pIiwiU3RvcmVSZWdpc3RyeSIsIk1hcCIsImxlbmd0aCIsIm9wdCIsIlR5cGVFcnJvciIsIk9iamVjdCIsImFzc2lnbiIsImRhdGEiLCJzdG9yZXMiLCJhZGQiLCJKU1N0b3JlIiwiSlNPTlN0b3JlIiwic3RvcmUiLCJTdG9yZSIsImdldFByb3RvdHlwZU9mIiwiZmlsZSIsIlN0b3JlQ2xhc3MiLCJnZXQiLCJwYXRoIiwiZXh0bmFtZSIsImxheWVycyIsIkxheWVyTGlzdCIsImFsbG93TnVsbHMiLCJhbGxvd1Vua25vd24iLCJpZCIsIkJhc2UiLCJvcmRlciIsIkluZmluaXR5IiwicmVhZG9ubHkiLCJzY2hlbWEiLCJzdGF0aWMiLCJsYXllciIsImRlbGV0ZSIsImtleSIsImRlbGV0ZWQiLCJxdWVyeSIsImRlZmF1bHRWYWx1ZSIsIm9yaWdLZXkiLCJyZXBsYWNlIiwiaXQiLCJtIiwiayIsInZhbHVlIiwidW5kZWZpbmVkIiwiRXJyb3IiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJpIiwib2JqIiwiZW50cmllcyIsIm1lcmdlIiwic3JjIiwiZGVzdCIsInNyY1ZhbHVlIiwicmVzdWx0Iiwib2JqZWN0cyIsInVuc2hpZnQiLCJoYXMiLCJsb2FkIiwiZmlsZW5hbWUiLCJiYXNlbmFtZSIsInRhZ3MiLCJzcGxpdCIsInNsaWNlIiwiZXh0IiwicG9wIiwicmVzb2x2ZSIsImFjdGlvbiIsIl9tdXRhdGUiLCJ0ZXN0IiwiZXhpc3RpbmciLCJfaWQiLCJzZXQiLCJwdXNoIiwic2F2ZSIsIm9wdHNPckZpbGUiLCJTdHJpbmciLCJzaGlmdCIsInRvU3RyaW5nIiwiaW5kZW50YXRpb24iLCJ1bmxvYWQiLCJyZW1vdmUiLCJ1bndhdGNoIiwiaGFuZGxlciIsImhhbmRsZXJzIiwid2F0Y2hlck1hcCIsImRlc2MiLCJ3cmFwcGVkIiwid2F0Y2giLCJmaWx0ZXIiLCJmaW5kIiwiYXJncyIsInZhbCIsIk5vZGUiLCJNZXRhIiwiaGFzaCIsImxhc3QiLCJBbGwiLCJTeW1ib2wiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxhQUFhLEdBQUcsMEJBQXRCO0FBRUE7Ozs7QUFHZSxNQUFNQyxNQUFOLENBQWE7QUFDM0I7Ozs7OztBQU9BOzs7Ozs7QUFPQTs7Ozs7O0FBT0E7Ozs7OztBQU9BOzs7Ozs7QUFPQTs7Ozs7O0FBT0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJBQyxFQUFBQSxXQUFXLENBQUMsR0FBR0MsSUFBSixFQUFVO0FBQUEsaUNBeENmQyxZQXdDZTs7QUFBQSxvQ0FqQ1osSUFpQ1k7O0FBQUEsb0NBMUJaLElBQUlDLHNCQUFKLEVBMEJZOztBQUFBLHdDQW5CUixJQUFJQyxHQUFKLEVBbUJROztBQUNwQixRQUFJSCxJQUFJLENBQUNJLE1BQVQsRUFBaUI7QUFDaEIsV0FBSyxNQUFNQyxHQUFYLElBQWtCTCxJQUFsQixFQUF3QjtBQUN2QixZQUFJSyxHQUFHLElBQUksT0FBT0EsR0FBUCxLQUFlLFFBQTFCLEVBQW9DO0FBQ25DLGdCQUFNLElBQUlDLFNBQUosQ0FBYyx5Q0FBZCxDQUFOO0FBQ0E7QUFDRDs7QUFDRE4sTUFBQUEsSUFBSSxHQUFHTyxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLEVBQWtCLEdBQUdSLElBQXJCLENBQVA7QUFDQSxLQVBELE1BT087QUFDTkEsTUFBQUEsSUFBSSxHQUFHLEVBQVA7QUFDQTs7QUFFRCxRQUFJQSxJQUFJLENBQUNTLElBQUwsSUFBYSxPQUFPVCxJQUFJLENBQUNTLElBQVosS0FBcUIsUUFBdEMsRUFBZ0Q7QUFDL0MsWUFBTSxJQUFJSCxTQUFKLENBQWMsc0NBQWQsQ0FBTjtBQUNBOztBQUVELFNBQUtJLE1BQUwsQ0FBWUMsR0FBWixDQUFnQkMsZ0JBQWhCO0FBQ0EsU0FBS0Ys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a0VBQWtCQyxJQUFsQixLQUEwQi9DLEdBQXRDOztBQUNBLFVBQUlzQyxJQUFJLENBQUNVLElBQUwsS0FBY0osR0FBbEIsRUFBdUI7QUFDdEJOLFFBQUFBLElBQUksQ0FBQ1UsSUFBTCxHQUFZSixHQUFaO0FBQ0FULFFBQUFBLE9BQU8sQ0FBQ25DLEdBQUQsRUFBTSxHQUFHMkMsSUFBVCxDQUFQO0FBQ0E7QUFDRCxLQVBEOztBQVNBTCxJQUFBQSxJQUFJLENBQUNDLE9BQUwsR0FBZUEsT0FBZjtBQUVBLFNBQUtwRSxNQUFMLENBQVlxRSxLQUFaLENBQWtCQyxNQUFsQixFQUEwQkYsT0FBMUI7QUFDQSxXQUFPLElBQVA7QUFDQTs7QUE1aUIwQjs7OztnQkFBUDVGLE0sU0FNUHNHLGM7O2dCQU5PdEcsTSxVQWFOdUcsTUFBTSxDQUFDLE1BQUQsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBKb2kgZnJvbSAnQGhhcGkvam9pJztcbmltcG9ydCBKU1N0b3JlIGZyb20gJy4vc3RvcmVzL2pzLXN0b3JlJztcbmltcG9ydCBKU09OU3RvcmUgZnJvbSAnLi9zdG9yZXMvanNvbi1zdG9yZSc7XG5pbXBvcnQgTGF5ZXJMaXN0LCB7IEFsbCB9IGZyb20gJy4vbGF5ZXItbGlzdCc7XG5pbXBvcnQgTm9kZSBmcm9tICcuL25vZGUnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgU3RvcmUgZnJvbSAnLi9zdG9yZSc7XG5pbXBvcnQgU3RvcmVSZWdpc3RyeSBmcm9tICcuL3N0b3JlLXJlZ2lzdHJ5JztcblxuaW1wb3J0IHsgYXJyYXlpZnksIHNwbGl0S2V5LCB1bmlxdWUgfSBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCBhcnJheUFjdGlvblJFID0gL15wb3B8cHVzaHxzaGlmdHx1bnNoaWZ0JC87XG5cbi8qKlxuICogVGhlIG1haW4gY29uZmlnIG9iamVjdCB0aGF0IG9yY2hlc3RyYXRlcyBkYXRhIGFjY2VzcyBhbmQgZmlsZSBpbnRlcmFjdGlvbi5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uZmlnIHtcblx0LyoqXG5cdCAqIEEgc3BlY2lhbCBpZCB0aGF0IHNpZ25pZmllcyBhbGwgbGF5ZXJzIHdoZW4gcXVlcnlpbmcgYSBsaXN0IG9mIGxheWVycy5cblx0ICogQHR5cGUge1N5bWJvbH1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHN0YXRpYyBBbGwgPSBBbGw7XG5cblx0LyoqXG5cdCAqIFRoZSBpZCBmb3IgdGhlIGJhc2UgbGF5ZXIuXG5cdCAqIEB0eXBlIHtTeW1ib2x9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRzdGF0aWMgQmFzZSA9IFN5bWJvbCgnYmFzZScpO1xuXG5cdC8qKlxuXHQgKiBBIHJlZmVyZW5jZSB0byB0aGUgSm9pIHNjaGVtYSBsaWJyYXJ5LlxuXHQgKiBAdHlwZSB7T2JqZWN0fVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Sm9pID0gSm9pO1xuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSBsaXN0IG9mIGxheWVycy5cblx0ICogQHR5cGUge0xheWVyTGlzdH1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGxheWVycyA9IG51bGw7XG5cblx0LyoqXG5cdCAqIFRyYWNrcyB0aGUgc3RvcmUgdHlwZXMgYnkgZmlsZSBleHRlbnNpb24uXG5cdCAqIEB0eXBlIHtTdG9yZVJlZ2lzdHJ5fVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0c3RvcmVzID0gbmV3IFN0b3JlUmVnaXN0cnkoKTtcblxuXHQvKipcblx0ICogQSBsb29rdXAgdGFibGUgb2Ygb3JpZ2luYWwgd2F0Y2ggaGFuZGxlcnMgdG8gdGhlaXIgd3JhcHBlZCBjb3VudGVycGFydHMgc28gdGhhdCBpdCBjYW5cblx0ICogZGVkdXBlIGV2ZW50cy5cblx0ICogQHR5cGUge01hcH1cblx0ICovXG5cdHdhdGNoZXJNYXAgPSBuZXcgTWFwKCk7XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBjb25maWcgb2JqZWN0LlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIC0gVmFyaW91cyBvcHRpb25zLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRzLmFsbG93TnVsbHNdIC0gRm9yY2VzIGFsbCBub2RlcyBvZiBhIHNjaGVtYSB0byBhbGxvdyBudWxscy5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5hbGxvd1Vua25vd249dHJ1ZV0gLSBBbGxvd3Mgb2JqZWN0IHZhbHVlcyB0byBjb250YWluIHVua25vd24ga2V5cy5cblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRzLmRhdGFdIC0gRGF0YSB0byBpbml0aWFsaXplIHRoZSBiYXNlIGNvbmZpZyBsYXllciB3aXRoLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuZmlsZV0gLSBUaGUgZmlsZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgYmFzZSBsYXllci5cblx0ICogQHBhcmFtIHtPYmplY3R8TGF5ZXJ8QXJyYXkuPE9iamVjdHxMYXllcj59IFtvcHRzLmxheWVyc10gLSBPbmUgb3IgbW9yZSBsYXllcnMgdG8gYWRkIGluXG5cdCAqIGFkZGl0aW9uIHRvIHRoZSBiYXNlIGxheWVyLlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdHMuc2NoZW1hXSAtIEEgSm9pIHNjaGVtYSBvciBvYmplY3QgdG8gY29tcGlsZSBpbnRvIGEgSm9pIHNjaGVtYS5cblx0ICogQHBhcmFtIHtTdG9yZXxGdW5jdGlvbn0gW29wdHMuc3RvcmVdIC0gQSBzdG9yZSBpbnN0YW5jZSBvciBzdG9yZSBjbGFzcyB0byB1c2UgZm9yIHRoZSBiYXNlXG5cdCAqIGxheWVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufEFycmF5LjxGdW5jdGlvbj59IFtvcHRzLnN0b3Jlc10gLSBBIHN0b3JlIGNsYXNzIG9yIGFycmF5IG9mIHN0b3JlIGNsYXNzZXNcblx0ICogdG8gcmVnaXN0ZXIgaW4gYWRkaXRpb24gdG8gdGhlIGJ1aWx0LWluIGBKU1N0b3JlYCBhbmQgYEpTT05TdG9yZWAuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRjb25zdHJ1Y3RvciguLi5vcHRzKSB7XG5cdFx0aWYgKG9wdHMubGVuZ3RoKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG9wdCBvZiBvcHRzKSB7XG5cdFx0XHRcdGlmIChvcHQgJiYgdHlwZW9mIG9wdCAhPT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBjb25maWcgb3B0aW9ucyB0byBiZSBhbiBvYmplY3QnKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0b3B0cyA9IE9iamVjdC5hc3NpZ24oe30sIC4uLm9wdHMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvcHRzID0ge307XG5cdFx0fVxuXG5cdFx0aWYgKG9wdHMuZGF0YSAmJiB0eXBlb2Ygb3B0cy5kYXRhICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgY29uZmlnIGRhdGEgdG8gYmUgYW4gb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdG9yZXMuYWRkKEpTU3RvcmUpO1xuXHRcdHRoaXMuc3RvcmVzLmFkZChKU09OU3RvcmUpO1xuXHRcdGZvciAoY29uc3Qgc3RvcmUgb2YgYXJyYXlpZnkob3B0cy5zdG9yZXMpKSB7XG5cdFx0XHR0aGlzLnN0b3Jlcy5hZGQoc3RvcmUpO1xuXHRcdH1cblxuXHRcdGxldCB7IHN0b3JlIH0gPSBvcHRzO1xuXHRcdGlmIChzdG9yZSkge1xuXHRcdFx0Ly8gaWYgd2UgaGF2ZSBhbiBleHBsaWNpdCBgc3RvcmVgLCB0aGVuIHJlZ2lzdGVyIGl0J3MgY2xhc3Ncblx0XHRcdHRoaXMuc3RvcmVzLmFkZChzdG9yZSBpbnN0YW5jZW9mIFN0b3JlID8gT2JqZWN0LmdldFByb3RvdHlwZU9mKHN0b3JlKS5jb25zdHJ1Y3RvciA6IHN0b3JlKTtcblx0XHR9IGVsc2UgaWYgKG9wdHMuZmlsZSkge1xuXHRcdFx0Y29uc3QgU3RvcmVDbGFzcyA9IHRoaXMuc3RvcmVzLmdldChwYXRoLmV4dG5hbWUob3B0cy5maWxlKSk7XG5cdFx0XHRzdG9yZSA9IG5ldyBTdG9yZUNsYXNzKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5sYXllcnMgPSBuZXcgTGF5ZXJMaXN0KHtcblx0XHRcdGFsbG93TnVsbHM6ICAgb3B0cy5hbGxvd051bGxzLFxuXHRcdFx0YWxsb3dVbmtub3duOiBvcHRzLmFsbG93VW5rbm93blxuXHRcdH0pO1xuXG5cdFx0dGhpcy5sYXllcnMuYWRkKHtcblx0XHRcdGRhdGE6ICAgICBvcHRzLmRhdGEsXG5cdFx0XHRmaWxlOiAgICAgb3B0cy5maWxlLFxuXHRcdFx0aWQ6ICAgICAgIENvbmZpZy5CYXNlLFxuXHRcdFx0b3JkZXI6ICAgIC1JbmZpbml0eSxcblx0XHRcdHJlYWRvbmx5OiBmYWxzZSxcblx0XHRcdHNjaGVtYTogICBvcHRzLnNjaGVtYSxcblx0XHRcdHN0YXRpYzogICB0cnVlLFxuXHRcdFx0c3RvcmVcblx0XHR9KTtcblxuXHRcdGZvciAoY29uc3QgbGF5ZXIgb2YgYXJyYXlpZnkob3B0cy5sYXllcnMpKSB7XG5cdFx0XHR0aGlzLmxheWVycy5hZGQobGF5ZXIpO1xuXHRcdH1cblx0fVxuXG5cdGRhdGEoaWQpIHtcblx0XHRyZXR1cm4gdGhpcy5sYXllcnMuZ2V0KGlkKT8uc3RvcmU/LmRhdGE7XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBhIGNvbmZpZyB2YWx1ZS5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd8QXJyYXkuPFN0cmluZz59IGtleSAtIFRoZSBrZXkgdG8gZGVsZXRlLlxuXHQgKiBAcGFyYW0ge1N0cmluZ3xTeW1ib2x9IGlkIC0gQSBzcGVjaWZpYyBsYXllciBpZCB0byBkZWxldGUgdGhlIHZhbHVlIGZyb20uXG5cdCAqIEByZXR1cm5zIHtCb29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWUgd2FzIGRlbGV0ZWQuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRkZWxldGUoa2V5LCBpZCkge1xuXHRcdGtleSA9IHNwbGl0S2V5KGtleSk7XG5cdFx0bGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuXHRcdGZvciAoY29uc3QgbGF5ZXIgb2YgdGhpcy5sYXllcnMucXVlcnkoaWQpKSB7XG5cdFx0XHRpZiAobGF5ZXIpIHtcblx0XHRcdFx0ZGVsZXRlZCA9IGxheWVyLmRlbGV0ZShrZXkpIHx8IGRlbGV0ZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlbGV0ZWQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGEgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQga2V5LlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ3xBcnJheS48U3RyaW5nPn0gW2tleV0gLSBUaGUga2V5IHRvIGdldC4gV2hlbiBgdW5kZWZpbmVkYCwgdGhlIGVudGlyZSBjb25maWdcblx0ICogaXMgcmV0dXJuZWQuXG5cdCAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gLSBBIHZhbHVlIHRvIHJldHVybiBpZiB0aGUga2V5IGlzIG5vdCBmb3VuZC5cblx0ICogQHBhcmFtIHtTdHJpbmd8U3ltYm9sfEFycmF5LjxTdHJpbmd8U3ltYm9sPn0gW2lkXSAtIEEgc3BlY2lmaWMgaWQgb3IgaWRzIHRvIHNjYW4gZm9yIHRoZVxuXHQgKiBrZXkuIElmIG5vdCBzcGVjaWZpZWQsIHRoZW4gaXQgc2NhbnMgYWxsIGxheWVycy5cblx0ICogQHJldHVybnMgeyp9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRnZXQoa2V5LCBkZWZhdWx0VmFsdWUsIGlkKSB7XG5cdFx0Y29uc3Qgb3JpZ0tleSA9IGtleTtcblx0XHRjb25zdCByZXBsYWNlID0gaXQgPT4ge1xuXHRcdFx0aWYgKHR5cGVvZiBpdCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0cmV0dXJuIGl0LnJlcGxhY2UoL1xce1xceyhbXn1dKylcXH1cXH0vZywgKG0sIGspID0+IHtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0KGspO1xuXHRcdFx0XHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYENvbmZpZyBrZXkgXCIke29yaWdLZXl9XCIgcmVmZXJlbmNlcyB1bmRlZmluZWQgdmFyaWFibGUgXCIke2t9XCJgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShpdCkpIHtcblx0XHRcdFx0cmV0dXJuIGl0Lm1hcChpID0+IHJlcGxhY2UoaSkpO1xuXHRcdFx0fSBlbHNlIGlmIChpdCAmJiB0eXBlb2YgaXQgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdGNvbnN0IG9iaiA9IHt9O1xuXHRcdFx0XHRmb3IgKGNvbnN0IFsga2V5LCB2YWx1ZSBdIG9mIE9iamVjdC5lbnRyaWVzKGl0KSkge1xuXHRcdFx0XHRcdG9ialtrZXldID0gcmVwbGFjZSh2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG9iajtcblx0XHRcdH1cblx0XHRcdHJldHVybiBpdDtcblx0XHR9O1xuXHRcdGNvbnN0IG1lcmdlID0gKHNyYywgZGVzdCkgPT4ge1xuXHRcdFx0Zm9yIChjb25zdCBbIGtleSwgc3JjVmFsdWUgXSBvZiBPYmplY3QuZW50cmllcyhzcmMpKSB7XG5cdFx0XHRcdGlmIChzcmNWYWx1ZSAmJiB0eXBlb2Ygc3JjVmFsdWUgPT09ICdvYmplY3QnICYmIGRlc3Rba2V5XSAmJiB0eXBlb2YgZGVzdFtrZXldID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShzcmNWYWx1ZSkpIHtcblx0XHRcdFx0XHRtZXJnZShzcmNWYWx1ZSwgZGVzdFtrZXldKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkZXN0W2tleV0gPSBzcmNWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRrZXkgPSBzcGxpdEtleShrZXkpO1xuXG5cdFx0bGV0IHJlc3VsdDtcblx0XHRjb25zdCBvYmplY3RzID0gW107XG5cblx0XHQvLyBsb29wIHRocm91Z2ggdGhlIGxheWVycyBpbiByZXZlcnNlIHVudGlsIHdlIGhpdCBhIG5vbi1vYmplY3QgdmFsdWUgYW5kIGFjY3VtdWxhdGVcblx0XHQvLyBvYmplY3QgdmFsdWVzIGZvciBtZXJnaW5nIGlmIG5vIG5vbi1vYmplY3QgZm91bmRcblx0XHRmb3IgKGNvbnN0IGxheWVyIG9mIHRoaXMubGF5ZXJzLnF1ZXJ5KGlkLCB0cnVlKSkge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSByZXBsYWNlKGxheWVyLmdldChrZXkpKTtcblx0XHRcdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9iamVjdHMudW5zaGlmdCh2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gbWVyZ2UgYWxsIG9iamVjdHNcblx0XHRpZiAob2JqZWN0cy5sZW5ndGgpIHtcblx0XHRcdHJlc3VsdCA9IHt9O1xuXHRcdFx0Zm9yIChjb25zdCBvYmogb2Ygb2JqZWN0cykge1xuXHRcdFx0XHRtZXJnZShvYmosIHJlc3VsdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblxuXHRcdHJldHVybiBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCB8fCBrZXkubGVuZ3RoID8gcmVwbGFjZShkZWZhdWx0VmFsdWUpIDoge307XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyBpZiBhIGtleSBpcyBzZXQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEFycmF5LjxTdHJpbmc+fSBba2V5XSAtIFRoZSBrZXkgdG8gY2hlY2suXG5cdCAqIEBwYXJhbSB7U3RyaW5nfFN5bWJvbHxBcnJheS48U3RyaW5nfFN5bWJvbD59IFtpZF0gLSBBIHNwZWNpZmljIGxheWVyIGlkIG9yIGlkcyB0byBzY2FuIGZvclxuXHQgKiB0aGUga2V5LiBJZiBub3Qgc3BlY2lmaWVkLCB0aGVuIGl0IHNjYW5zIGFsbCBsYXllcnMuXG5cdCAqIEByZXR1cm5zIHtCb29sZWFufVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0aGFzKGtleSwgaWQpIHtcblx0XHRrZXkgPSBzcGxpdEtleShrZXkpO1xuXHRcdGZvciAoY29uc3QgbGF5ZXIgb2YgdGhpcy5sYXllcnMucXVlcnkoaWQsIHRydWUpKSB7XG5cdFx0XHRpZiAobGF5ZXIuaGFzKGtleSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBMb2FkcyBhIGNvbmZpZyBmaWxlLiBCeSBkZWZhdWx0LCBpdCBsb2FkcyBpdCBpbnRvIHRoZSBjb25maWcncyBkZWZhdWx0IGxheWVyLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZmlsZSAtIFRoZSBwYXRoIHRvIHRoZSBjb25maWcgZmlsZSB0byBsb2FkLlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIC0gVmFyaW91cyBvcHRpb25zLlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdHMuaWRdIC0gVGhlIGxheWVyIGlkIHRvIGxvYWQgdGhlIGZpbGUgaW50by4gSWYgdGhlIGxheWVyIGlkIGRvZXMgbm90XG5cdCAqIGV4aXN0LCBpdCB3aWxsIGNyZWF0ZSBpdC5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm5hbWVzcGFjZV0gLSBUaGUgbmFtZSBvZiB0aGUgc2NvcGUgZW5jb21wYXNzaW5nIHRoaXMgbGF5ZXIncyBkYXRhIGFuZFxuXHQgKiBzY2hlbWEgaWYgbm90IGFscmVhZHkgZGVmaW5lZC5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm9yZGVyPTBdIC0gVGhlIGxheWVyIHByZWNlZGVuY2UuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMucmVhZG9ubHldIC0gSW5kaWNhdGVzIGlmIHRoaXMgbGF5ZXIncyBkYXRhIGNhbiBiZSBjaGFuZ2VkLlxuXHQgKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IFtvcHRzLnNjaGVtYV0gLSBBIEpvaSBzY2hlbWEsIG9iamVjdCB0byBjb21waWxlIGludG8gYSBKb2kgc2NoZW1hLCBvclxuXHQgKiBhIHBhdGggdG8gYSBgLmpzYCBvciBgLmpzb25gIGZpbGUgY29udGFpbmluZyBhIEpvaSBzY2hlbWEuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuc3RhdGljXSAtIEluZGljYXRlcyBpZiB0aGlzIGxheWVyIGNhbiBiZSB1bmxvYWRlZC5cblx0ICogQHJldHVybnMge0NvbmZpZ31cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGxvYWQoZmlsZSwgb3B0cyA9IHt9KSB7XG5cdFx0aWYgKCFmaWxlIHx8IHR5cGVvZiBmaWxlICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgY29uZmlnIGZpbGUgdG8gYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG5cdFx0fVxuXG5cdFx0aWYgKG9wdHMgJiYgdHlwZW9mIG9wdHMgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRvcHRzID0geyBpZDogb3B0cyB9O1xuXHRcdH1cblxuXHRcdGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgb3B0aW9ucyB0byBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cblx0XHRjb25zdCBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZSk7XG5cdFx0Y29uc3QgdGFncyA9IGZpbGVuYW1lLnNwbGl0KCcuJykuc2xpY2UoMSk7XG5cdFx0Y29uc3QgZXh0ID0gdGFncy5wb3AoKTtcblx0XHRjb25zdCBTdG9yZUNsYXNzID0gdGhpcy5zdG9yZXMuZ2V0KGAuJHtleHR9YCk7XG5cblx0XHRpZiAoIVN0b3JlQ2xhc3MpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZmlsZSB0eXBlIFwiJHtleHQgPyBgLiR7ZXh0fWAgOiBmaWxlbmFtZX1cImApO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgaWQgb2YgdW5pcXVlKG9wdHMuaWQgfHwgdGhpcy5yZXNvbHZlKHsgYWN0aW9uOiAnbG9hZCcsIHRhZ3MgfSkpKSB7XG5cdFx0XHR0aGlzLmxheWVycy5hZGQoe1xuXHRcdFx0XHQuLi5vcHRzLFxuXHRcdFx0XHRpZCxcblx0XHRcdFx0c3RvcmU6IG5ldyBTdG9yZUNsYXNzKClcblx0XHRcdH0pLmxvYWQoZmlsZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogRGVlcGx5IG1lcmdlcyBhbiBvYmplY3QgaW50byBhIGxheWVyJ3Mgc3RvcmUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgdG8gbWVyZ2UuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfFN5bWJvbH0gW2lkXSAtIEEgc3BlY2lmaWMgbGF5ZXIgaWQgb3IgaWRzIHRvIG1lcmdlIHRoZSBkYXRhIGludG8uIElmIG5vdFxuXHQgKiBzcGVjaWZpZWQsIHRoZW4gaXQgbWVyZ2VzIHRoZSBkYXRhIGludG8gdGhlIGNvbmZpZydzIGRlZmF1bHQgbGF5ZXIuXG5cdCAqIEByZXR1cm5zIHtDb25maWd9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRtZXJnZShkYXRhLCBpZCkge1xuXHRcdGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShkYXRhKSkge1xuXHRcdFx0Zm9yIChjb25zdCBsYXllciBvZiB0aGlzLmxheWVycy5xdWVyeShpZCkpIHtcblx0XHRcdFx0aWYgKGxheWVyKSB7XG5cdFx0XHRcdFx0bGF5ZXIubWVyZ2UoZGF0YSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogSW50ZXJuYWwgaGVscGVyIGZvciBpbnZva2luZyBtdXRhdG9yIG1ldGhvZHMgb24gdGhlIGxheWVyLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIFZhcmlvdXMgb3B0aW9ucy5cblx0ICogQHJldHVybnMgeyp9XG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKi9cblx0X211dGF0ZSh7IGFjdGlvbiwga2V5LCB2YWx1ZSwgaWQgfSkge1xuXHRcdGtleSA9IHNwbGl0S2V5KGtleSk7XG5cblx0XHRpZiAoIWtleSB8fCAha2V5Lmxlbmd0aCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIGNvbmZpZyBrZXknKTtcblx0XHR9XG5cblx0XHRsZXQgcmVzdWx0O1xuXG5cdFx0aWYgKGFycmF5QWN0aW9uUkUudGVzdChhY3Rpb24pKSB7XG5cdFx0XHRjb25zdCBleGlzdGluZyA9IHVuaXF1ZSh0aGlzLmdldChrZXkpKTtcblxuXHRcdFx0aWYgKGFjdGlvbiA9PT0gJ3BvcCcgfHwgYWN0aW9uID09PSAnc2hpZnQnKSB7XG5cdFx0XHRcdHJlc3VsdCA9IGV4aXN0aW5nW2FjdGlvbl0oKTtcblx0XHRcdFx0dmFsdWUgPSBleGlzdGluZztcblx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uID09PSAncHVzaCcpIHtcblx0XHRcdFx0dmFsdWUgPSB1bmlxdWUoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbIC4uLmV4aXN0aW5nLCAuLi52YWx1ZSBdIDogWyAuLi5leGlzdGluZywgdmFsdWUgXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YWx1ZSA9IHVuaXF1ZShBcnJheS5pc0FycmF5KHZhbHVlKSA/IFsgLi4udmFsdWUsIC4uLmV4aXN0aW5nIF0gOiBbIHZhbHVlLCAuLi5leGlzdGluZyBdKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IF9pZCBvZiB1bmlxdWUoaWQgfHwgdGhpcy5yZXNvbHZlKHsgYWN0aW9uIH0pKSkge1xuXHRcdFx0Y29uc3QgbGF5ZXIgPSB0aGlzLmxheWVycy5nZXQoX2lkKSB8fCB0aGlzLmxheWVycy5hZGQoX2lkKTtcblx0XHRcdGxheWVyLnNldChrZXksIHZhbHVlLCBhY3Rpb24pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgbGFzdCBlbGVtZW50IGZyb20gYSBhcnJheSB0eXBlIGNvbmZpZyB2YWx1ZS5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd8QXJyYXkuPFN0cmluZz59IFtrZXldIC0gVGhlIGNvbmZpZyBrZXkuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfFN5bWJvbH0gW2lkXSAtIFRoZSBpZCBmb3IgYSBzcGVjaWZpYyBsYXllciB0byBzYXZlLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGVuIGl0XG5cdCAqIHVzZXMgdGhlIGNvbmZpZydzIGRlZmF1bHQgbGF5ZXIuXG5cdCAqIEByZXR1cm5zIHsqfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0cG9wKGtleSwgaWQpIHtcblx0XHRyZXR1cm4gdGhpcy5fbXV0YXRlKHsgaWQsIGtleSwgYWN0aW9uOiAncG9wJyB9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGFuIGl0ZW0gdG8gdGhlIGVuZCBvZiBhbiBhcnJheSB0eXBlIGNvbmZpZyB2YWx1ZS5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd8QXJyYXkuPFN0cmluZz59IGtleSAtIFRoZSBjb25maWcga2V5LlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIGFkZC5cblx0ICogQHBhcmFtIHtTdHJpbmd8U3ltYm9sfSBbaWRdIC0gVGhlIGlkIGZvciBhIHNwZWNpZmljIGxheWVyIHRvIHNhdmUuIElmIG5vdCBzcGVjaWZpZWQsIHRoZW4gaXRcblx0ICogdXNlcyB0aGUgY29uZmlnJ3MgZGVmYXVsdCBsYXllci5cblx0ICogQHJldHVybnMgeyp9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRwdXNoKGtleSwgdmFsdWUsIGlkKSB7XG5cdFx0dGhpcy5fbXV0YXRlKHsgaWQsIGtleSwgYWN0aW9uOiAncHVzaCcsIHZhbHVlIH0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlc29sdmVzIGEgZGVzdGluYXRpb24gbGF5ZXIgaWQgYmFzZWQgb24gdGFncyBleHRyYWN0ZWQgZnJvbSB0aGUgY29uZmlnIGZpbGVuYW1lLiBJZiBhXG5cdCAqIGNvbmZpZyBkb2Vzbid0IGNhcmUgYWJvdXQgdGFncywgaXQgY2FuIHNpbXBseSByZXR1cm4gdGhlIGRlZmF1bHQgY29uZmlnIGxheWVyIGlkLiBDdXN0b21cblx0ICogY29uZmlnIGltcGxlbWVudGF0aW9ucyBhcmUgZW5jb3VyYWdlZCB0byBvdmVycmlkZSB0aGlzIG1ldGhvZC5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIFZhcmlvdXMgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmFjdGlvbl0gLSBUaGUgYWN0aW9uIGJlaW5nIHBlcmZvcm1lZC5cblx0ICogQHBhcmFtIHtBcnJheS48U3RyaW5nPn0gW29wdHMudGFnc10gLSBBIGxpc3Qgb2YgdGFncyBwYXJzZWQgZnJvbSB0aGUgZmlsZW5hbWUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd8U3ltYm9sfEFycmF5LjxTdHJpbmd8U3ltYm9sPn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHJlc29sdmUoKSB7XG5cdFx0cmV0dXJuIENvbmZpZy5CYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNhdmVzIGEgc3BlY2lmaWMgbGF5ZXIncyBzdG9yZSB0byBkaXNrLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IG9wdHNPckZpbGUgLSBWYXJpb3VzIG9wdGlvbnMgb3IgYSBmaWxlIHBhdGguXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0c09yRmlsZS5maWxlXSAtIFRoZSBmaWxlIHRvIHdyaXRlIHRoZSBsYXllcnMgc3RvcmUgdG8uIERlZmF1bHRzIHRvIHRoZSBmaWxlXG5cdCAqIGxvYWRlZCBpbnRvIHRoZSBsYXllci4gSWYgdGhlcmUgaXMgbm8gZmlsZW5hbWUsIGFuIGVycm9yIGlzIHRocm93bi5cblx0ICogQHBhcmFtIHtTdHJpbmd8U3ltYm9sfSBbb3B0c09yRmlsZS5pZF0gLSBUaGUgaWQgZm9yIGEgc3BlY2lmaWMgbGF5ZXIgdG8gc2F2ZS4gSWYgbm90IHNwZWNpZmllZCxcblx0ICogdGhlbiBpdCB1c2VzIHRoZSBjb25maWcncyBkZWZhdWx0IGxheWVyLlxuXHQgKiBAcmV0dXJucyB7Q29uZmlnfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0c2F2ZShvcHRzT3JGaWxlKSB7XG5cdFx0bGV0IGZpbGU7XG5cdFx0bGV0IGlkO1xuXG5cdFx0aWYgKG9wdHNPckZpbGUpIHtcblx0XHRcdGlmICh0eXBlb2Ygb3B0c09yRmlsZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0KHsgZmlsZSwgaWQgfSA9IG9wdHNPckZpbGUpO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2Ygb3B0c09yRmlsZSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0ZmlsZSA9IG9wdHNPckZpbGU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBfaWQgb2YgdW5pcXVlKGlkIHx8IHRoaXMucmVzb2x2ZSh7IGFjdGlvbjogJ3NhdmUnIH0pKSkge1xuXHRcdFx0Y29uc3QgbGF5ZXIgPSB0aGlzLmxheWVycy5nZXQoX2lkKTtcblx0XHRcdGlmICghbGF5ZXIpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBMYXllciBcIiR7U3RyaW5nKGlkKX1cIiBub3QgZm91bmRgKTtcblx0XHRcdH1cblx0XHRcdGxheWVyLnNhdmUoZmlsZSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHZhbHVlIGZvciBhIGdpdmVuIGNvbmZpZyBrZXkuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEFycmF5LjxTdHJpbmc+fSBrZXkgLSBUaGUga2V5IHRvIHNldC5cblx0ICogQHBhcmFtIHsqfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzZXQuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfFN5bWJvbH0gW2lkXSAtIFRoZSBpZCBmb3IgYSBzcGVjaWZpYyBsYXllciB0byBzYXZlLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGVuIGl0XG5cdCAqIHVzZXMgdGhlIGNvbmZpZydzIGRlZmF1bHQgbGF5ZXIuXG5cdCAqIEByZXR1cm4ge0NvbmZpZ31cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHNldChrZXksIHZhbHVlLCBpZCkge1xuXHRcdHJldHVybiB0aGlzLl9tdXRhdGUoeyBpZCwga2V5LCBhY3Rpb246ICdzZXQnLCB2YWx1ZSB9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSBmaXJzdCBlbGVtZW50IGZyb20gYSBhcnJheSB0eXBlIGNvbmZpZyB2YWx1ZS5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd8QXJyYXkuPFN0cmluZz59IFtrZXldIC0gVGhlIGNvbmZpZyBrZXkuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfFN5bWJvbH0gW2lkXSAtIFRoZSBpZCBmb3IgYSBzcGVjaWZpYyBsYXllci4gSWYgbm90IHNwZWNpZmllZCwgdGhlbiBpdCB1c2VzXG5cdCAqIHRoZSBjb25maWcncyBkZWZhdWx0IGxheWVyLlxuXHQgKiBAcmV0dXJucyB7Kn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHNoaWZ0KGtleSwgaWQpIHtcblx0XHRyZXR1cm4gdGhpcy5fbXV0YXRlKHsgaWQsIGtleSwgYWN0aW9uOiAnc2hpZnQnIH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBzdHJpbmcgcHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2luZGVudGF0aW9uPTJdIFRoZSBudW1iZXIgb2Ygc3BhY2VzIHRvIGluZGVudCB0aGUgSlNPTiBmb3JtYXR0ZWQgb3V0cHV0LlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0dG9TdHJpbmcoaW5kZW50YXRpb24pIHtcblx0XHRyZXR1cm4gdGhpcy5sYXllcnMudG9TdHJpbmcoaW5kZW50YXRpb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVubG9hZHMgYSBsYXllciBhbmQgaXRzIHN0b3JlIGJ5IGlkLiBJZiB0aGUgaWQgZG9lcyBub3QgZXhpc3QsIG5vdGhpbmcgaGFwcGVucy5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlkIC0gVGhlIGlkIG5hbWUgdG8gdW5sb2FkLlxuXHQgKiBAcmV0dXJucyB7Qm9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGlkIGV4aXN0cyBhbmQgd2FzIHVubG9hZGVkLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0dW5sb2FkKGlkKSB7XG5cdFx0aWYgKCFpZCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignTWlzc2luZyByZXF1aXJlZCBsYXllciBpZCB0byB1bmxvYWQnKTtcblx0XHR9XG5cblx0XHRjb25zdCBsYXllciA9IHRoaXMubGF5ZXJzLmdldChpZCk7XG5cdFx0aWYgKCFsYXllcikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBMYXllciBcIiR7U3RyaW5nKGlkKX1cIiBub3QgZm91bmRgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5sYXllcnMucmVtb3ZlKGlkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGFuIGl0ZW0gdG8gdGhlIGJlZ2lubmluZyBvZiBhbiBhcnJheSB0eXBlIGNvbmZpZyB2YWx1ZS5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd8QXJyYXkuPFN0cmluZz59IGtleSAtIFRoZSBjb25maWcga2V5LlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIGFkZC5cblx0ICogQHBhcmFtIHtTdHJpbmd8U3ltYm9sfSBbaWRdIC0gVGhlIGlkIGZvciBhIHNwZWNpZmljIGxheWVyLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGVuIGl0IHVzZXNcblx0ICogdGhlIGNvbmZpZydzIGRlZmF1bHQgbGF5ZXIuXG5cdCAqIEByZXR1cm5zIHtDb25maWd9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHR1bnNoaWZ0KGtleSwgdmFsdWUsIGlkKSB7XG5cdFx0dGhpcy5fbXV0YXRlKHsgaWQsIGtleSwgYWN0aW9uOiAndW5zaGlmdCcsIHZhbHVlIH0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYSB3YXRjaCBoYW5kbGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIC0gQSBjYWxsYmFjayB0byBmaXJlIHdoZW4gYSBjaGFuZ2Ugb2NjdXJzLlxuXHQgKiBAcmV0dXJucyB7Q29uZmlnfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0dW53YXRjaChoYW5kbGVyKSB7XG5cdFx0aWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBoYW5kbGVyIHRvIGJlIGEgZnVuY3Rpb24nKTtcblx0XHR9XG5cblx0XHRjb25zdCBoYW5kbGVycyA9IHRoaXMud2F0Y2hlck1hcC5nZXQoaGFuZGxlcik7XG5cdFx0aWYgKGhhbmRsZXJzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGRlc2Mgb2YgaGFuZGxlcnMpIHtcblx0XHRcdFx0dGhpcy5sYXllcnMudW53YXRjaChkZXNjLndyYXBwZWQpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy53YXRjaGVyTWFwLmRlbGV0ZShoYW5kbGVyKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXJzIGEgd2F0Y2ggaGFuZGxlci5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd8QXJyYXkuPFN0cmluZz59IFtmaWx0ZXJdIC0gQSBwcm9wZXJ0eSBuYW1lIG9yIGFycmF5IG9mIG5lc3RlZCBwcm9wZXJ0aWVzIHRvXG5cdCAqIHdhdGNoLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIC0gQSBjYWxsYmFjayB0byBmaXJlIHdoZW4gYSBjaGFuZ2Ugb2NjdXJzLlxuXHQgKiBAcmV0dXJucyB7Q29uZmlnfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0d2F0Y2goZmlsdGVyLCBoYW5kbGVyKSB7XG5cdFx0aWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGhhbmRsZXIgPSBmaWx0ZXI7XG5cdFx0XHRmaWx0ZXIgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBoYW5kbGVyIHRvIGJlIGEgZnVuY3Rpb24nKTtcblx0XHR9XG5cblx0XHRmaWx0ZXIgPSBzcGxpdEtleShmaWx0ZXIpO1xuXHRcdGxldCBoYW5kbGVycyA9IHRoaXMud2F0Y2hlck1hcC5nZXQoaGFuZGxlcik7XG5cdFx0bGV0IGRlc2MgPSBoYW5kbGVycyAmJiBoYW5kbGVycy5maW5kKGRlc2MgPT4gIShkZXNjLmZpbHRlciA8IGZpbHRlciB8fCBkZXNjLmZpbHRlciA+IGZpbHRlcikpO1xuXG5cdFx0Ly8gY2hlY2sgaWYgdGhpcyBoYW5kbGVyIGlzIGFscmVhZHkgcmVnaXN0ZXJlZFxuXHRcdGlmIChkZXNjKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRpZiAoIWhhbmRsZXJzKSB7XG5cdFx0XHR0aGlzLndhdGNoZXJNYXAuc2V0KGhhbmRsZXIsIGhhbmRsZXJzID0gW10pO1xuXHRcdH1cblxuXHRcdGhhbmRsZXJzLnB1c2goZGVzYyA9IHsgZmlsdGVyIH0pO1xuXG5cdFx0Y29uc3Qgd3JhcHBlZCA9IChvYmosIC4uLmFyZ3MpID0+IHtcblx0XHRcdC8vIGdldCB0aGUgbGFzdCB2YWx1ZSBzbyB3ZSBjYW4gZGVkdXBlXG5cdFx0XHRjb25zdCB2YWwgPSBvYmo/LltOb2RlLk1ldGFdPy5oYXNoIHx8IG9iajtcblx0XHRcdGlmIChkZXNjLmxhc3QgIT09IHZhbCkge1xuXHRcdFx0XHRkZXNjLmxhc3QgPSB2YWw7XG5cdFx0XHRcdGhhbmRsZXIob2JqLCAuLi5hcmdzKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0ZGVzYy53cmFwcGVkID0gd3JhcHBlZDtcblxuXHRcdHRoaXMubGF5ZXJzLndhdGNoKGZpbHRlciwgd3JhcHBlZCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cbiJdLCJmaWxlIjoiY29uZmlnLmpzIn0=

@@ -147,3 +147,3 @@ "use strict";

if (isLayer || !layer.validate) {
layer.validate = args => (0, _util.validate)(_objectSpread({}, args, {
layer.validate = args => (0, _util.validate)(_objectSpread(_objectSpread({}, args), {}, {
schemas: this.layers.map(layer => layer.schema),

@@ -383,2 +383,2 @@ validateOptions: {

exports.default = LayerList;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxheWVyLWxpc3QuanMiXSwibmFtZXMiOlsibG9nIiwiaGlnaGxpZ2h0Iiwic25vb3Bsb2dnIiwic3R5bGVzIiwiQWxsIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJMYXllckxpc3QiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJpIiwibGF5ZXJzIiwibGVuZ3RoIiwibmV4dCIsImRvbmUiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsImFsbG93TnVsbHMiLCJhbGxvd1Vua25vd24iLCJhZGQiLCJsYXllciIsIlR5cGVFcnJvciIsImlkIiwiQXJyYXkiLCJpc0FycmF5IiwiRXJyb3IiLCJleGlzdGluZyIsIm1hcCIsInByb3AiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpc0xheWVyIiwiTGF5ZXIiLCJ2YWxpZGF0ZSIsImFyZ3MiLCJzY2hlbWFzIiwic2NoZW1hIiwidmFsaWRhdGVPcHRpb25zIiwicCIsImZpbmRJbmRleCIsInNwbGljZSIsImluc2VydGVkIiwib3JkZXIiLCJwdXNoIiwiZmlsdGVyIiwiaGFuZGxlciIsIndhdGNoZXJzIiwid2F0Y2giLCJnZXQiLCJxdWVyeSIsInJldmVyc2UiLCJpZHMiLCJTdHJpbmciLCJyZW1vdmUiLCJpZE9yTGF5ZXIiLCJ1bmxvYWQiLCJzZXQiLCJ0b1N0cmluZyIsImluZGVudGF0aW9uIiwib2JqIiwiY2ZnIiwic3RvcmUiLCJKU09OIiwic3RyaW5naWZ5IiwiTWF0aCIsIm1heCIsInVud2F0Y2giLCJuYW1lIiwiam9pbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUVBOzs7Ozs7Ozs7Ozs7QUFFQSxNQUFNO0FBQUVBLEVBQUFBO0FBQUYsSUFBVSx3QkFBVSxZQUFWLEVBQXdCLFlBQXhCLENBQWhCO0FBQ0EsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQWdCQyxtQkFBVUMsTUFBaEM7QUFFQTs7Ozs7QUFJTyxNQUFNQyxHQUFHLEdBQUdDLE1BQU0sQ0FBQyxLQUFELENB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TCxDQUFjTixNQUFkLENBQXFCaEMsQ0FBQyxFQUF0QixFQUEwQixDQUExQjtBQUNBO0FBQ0Q7O0FBRUQsU0FBSyxNQUFNVSxLQUFYLElBQW9CLEtBQUtULE1BQXpCLEVBQWlDO0FBQ2hDUyxNQUFBQSxLQUFLLENBQUNnRCxPQUFOLENBQWNyQixPQUFkO0FBQ0E7QUFDRDtBQUVEOzs7Ozs7Ozs7QUFPQUUsRUFBQUEsS0FBSyxDQUFDSCxNQUFELEVBQVNDLE9BQVQsRUFBa0I7QUFDdEIsUUFBSSxDQUFDQSxPQUFELElBQVksT0FBT0EsT0FBUCxLQUFtQixVQUFuQyxFQUErQztBQUM5QyxZQUFNLElBQUkxQixTQUFKLENBQWMsbUNBQWQsQ0FBTjtBQUNBOztBQUVEckIsSUFBQUEsR0FBRyxDQUFFLHdCQUF1QkMsU0FBUyxDQUFFLEdBQUU4QyxPQUFPLENBQUNzQixJQUFLLElBQWpCLENBQXNCLElBQUd2QixNQUFNLENBQUNsQyxNQUFQLEdBQWdCa0MsTUFBTSxDQUFDd0IsSUFBUCxDQUFZLEdBQVosQ0FBaEIsR0FBbUMsRUFBRyxFQUFqRyxDQUFIO0FBRUEsU0FBS3RCLFFBQUwsQ0FBY0gsSUFBZCxDQUFtQjtBQUFFQyxNQUFBQSxNQUFGO0FBQVVDLE1BQUFBO0FBQVYsS0FBbkI7O0FBRUEsU0FBSyxNQUFNM0IsS0FBWCxJQUFvQixLQUFLVCxNQUF6QixFQUFpQztBQUNoQ1MsTUFBQUEsS0FBSyxDQUFDNkIsS0FBTixDQUFZSCxNQUFaLEVBQW9CQyxPQUFwQjtBQUNBO0FBQ0Q7O0FBcFM2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMYXllciBmcm9tICcuL2xheWVyJztcbmltcG9ydCBzbm9vcGxvZ2cgZnJvbSAnc25vb3Bsb2dnJztcblxuaW1wb3J0IHsgYXJyYXlpZnksIHZhbGlkYXRlIH0gZnJvbSAnLi91dGlsJztcblxuY29uc3QgeyBsb2cgfSA9IHNub29wbG9nZygnY29uZmlnLWtpdCcpKCdsYXllci1saXN0Jyk7XG5jb25zdCB7IGhpZ2hsaWdodCB9ID0gc25vb3Bsb2dnLnN0eWxlcztcblxuLyoqXG4gKiBBIHVuaXF1ZSBzeW1ib2wgdXNlZCB0byBxdWVyeSBhbGwgbGF5ZXJzLlxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuZXhwb3J0IGNvbnN0IEFsbCA9IFN5bWJvbCgnYWxsJyk7XG5cbi8qKlxuICogQW4gaW5kZXhlZCBsaXN0IG9mIGVsZW1lbnRzLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMYXllckxpc3Qge1xuXHQvKipcblx0ICogRm9yY2VzIGFsbCBub2RlcyBvZiBhIHNjaGVtYSB0byBhbGxvdyBudWxscy5cblx0ICogQHR5cGUge0Jvb2xlYW59XG5cdCAqL1xuXHRhbGxvd051bGxzID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIEFsbG93cyBvYmplY3QgdmFsdWVzIHRvIGNvbnRhaW4gdW5rbm93biBrZXlzLlxuXHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0ICovXG5cdGFsbG93VW5rbm93biA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFRoZSBvcmRlcmVkIGxpc3Qgb2YgbGF5ZXJzLlxuXHQgKiBAdHlwZSB7QXJyYXkuPExheWVyPn1cblx0ICovXG5cdGxheWVycyA9IFtdO1xuXG5cdC8qKlxuXHQgKiBBIHF1aWNrIGxvb2t1cCBiYXNlZCBvbiBpZC5cblx0ICogQHR5cGUge29iamVjdH1cblx0ICovXG5cdG1hcCA9IHt9O1xuXG5cdC8qKlxuXHQgKiBBIGxpc3Qgb2YgYWxsIGFjdGl2ZSB3YXRjaGVycy5cblx0ICogQHR5cGUge0FycmF5LjxPYmplY3Q+fVxuXHQgKi9cblx0d2F0Y2hlcnMgPSBbXTtcblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdGhlIG9wdGlvbnMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuYWxsb3dOdWxsc10gLSBGb3JjZXMgYWxsIG5vZGVzIG9mIGEgc2NoZW1hIHRvIGFsbG93IG51bGxzLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRzLmFsbG93VW5rbm93bj10cnVlXSAtIEFsbG93cyBvYmplY3QgdmFsdWVzIHRvIGNvbnRhaW4gdW5rbm93biBrZXlzLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG5cdFx0dGhpcy5hbGxvd051bGxzID0gb3B0cy5hbGxvd051bGxzO1xuXHRcdHRoaXMuYWxsb3dVbmtub3duID0gb3B0cy5hbGxvd1Vua25vd24gIT09IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSBsYXllci4gSWYgdGhlIGxheWVyIGlkIGFscmVhZHkgZXhpc3RzLCBpdCB3aWxsIHJlcGxhY2UgaXQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7TGF5ZXJ8T2JqZWN0fFN0cmluZ30gbGF5ZXIgLSBUaGUgbGF5ZXIsIGxheWVyIGNvbnRydWN0b3IgYXJndW1lbnRzLCBvciBsYXllciBpZC5cblx0ICogQHJldHVybnMge0xheWVyfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0YWRkKGxheWVyKSB7XG5cdFx0aWYgKCFsYXllcikge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbGF5ZXIgdG8gYmUgYW4gb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBsYXllciA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGxheWVyID09PSAnc3ltYm9sJykge1xuXHRcdFx0bGF5ZXIgPSB7IGlkOiBsYXllciB9O1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgbGF5ZXIgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkobGF5ZXIpKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBsYXllciB0byBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cblx0XHRpZiAoIWxheWVyLmlkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGxheWVyIHRvIGhhdmUgYW4gaWQnKTtcblx0XHR9XG5cblx0XHRjb25zdCBleGlzdGluZyA9IHRoaXMubWFwW2xheWVyLmlkXTtcblx0XHRpZiAoZXhpc3RpbmcpIHtcblx0XHRcdGZvciAoY29uc3QgcHJvcCBvZiBbICdmaWxlJywgJ25hbWVzcGFjZScsICdvcmRlcicsICdyZWFkb25seScsICdzY2hlbWEnLCAnc3RhdGljJyBdKSB7XG5cdFx0XHRcdGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxheWVyLCBwcm9wKSkge1xuXHRcdFx0XHRcdGxheWVyW3Byb3BdID0gZXhpc3RpbmdbcHJvcF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBpc0xheWVyID0gbGF5ZXIgaW5zdGFuY2VvZiBMYXllcjtcblx0XHRpZiAoaXNMYXllciB8fCAhbGF5ZXIudmFsaWRhdGUpIHtcblx0XHRcdGxheWVyLnZhbGlkYXRlID0gYXJncyA9PiB2YWxpZGF0ZSh7XG5cdFx0XHRcdC4uLmFyZ3MsXG5cdFx0XHRcdHNjaGVtYXM6IHRoaXMubGF5ZXJzLm1hcChsYXllciA9PiBsYXllci5zY2hlbWEpLFxuXHRcdFx0XHR2YWxpZGF0ZU9wdGlvbnM6IHtcblx0XHRcdFx0XHRhbGxvd1Vua25vd246IHRoaXMuYWxsb3dVbmtub3duXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGxheWVyLmFsbG93TnVsbHMgPSB0aGlzLmFsbG93TnVsbHM7XG5cblx0XHRpZiAoIWlzTGF5ZXIpIHtcblx0XHRcdGxheWVyID0gbmV3IExheWVyKGxheWVyKTtcblx0XHR9XG5cblx0XHR0aGlzLm1hcFtsYXllci5pZF0gPSBsYXllcjtcblx0XHRpZiAoZXhpc3RpbmcpIHtcblx0XHRcdGNvbnN0IHAgPSB0aGlzLmxheWVycy5maW5kSW5kZXgoZXhpc3RpbmcgPT4gZXhpc3RpbmcuaWQgPT09IGxheWVyLmlkKTtcblx0XHRcdGlmIChwICE9PSAtMSkge1xuXHRcdFx0XHR0aGlzLmxheWVycy5zcGxpY2UocCwgMSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IGluc2VydGVkO1xuXHRcdGZvciAobGV0IGkgPSB0aGlzLmxheWVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0aWYgKGxheWVyLm9yZGVyID4gdGhpcy5sYXllcnNbaV0ub3JkZXIpIHtcblx0XHRcdFx0aW5zZXJ0ZWQgPSAhIXRoaXMubGF5ZXJzLnNwbGljZShpICsgMSwgMCwgbGF5ZXIpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCFpbnNlcnRlZCkge1xuXHRcdFx0dGhpcy5sYXllcnMucHVzaChsYXllcik7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCB7IGZpbHRlciwgaGFuZGxlciB9IG9mIHRoaXMud2F0Y2hlcnMpIHtcblx0XHRcdGxheWVyLndhdGNoKGZpbHRlciwgaGFuZGxlcik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGxheWVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBsYXllciBieSBpZC5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd8U3ltYm9sfSBpZCAtIFRoZSBsYXllciBpZC5cblx0ICogQHJldHVybnMge0xheWVyfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Z2V0KGlkKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwW2lkXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kcyBhbGwgbGF5ZXJzIHRoYXQgbWF0Y2ggYSBzcGVjaWZpZWQgaWRzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ3xTeW1ib2x8QXJyYXkuPFN0cmluZ3xTeW1ib2w+fSBpZCAtIFRoZSBsYXllciBpZCBvciBpZHMuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW3JldmVyc2VdIC0gV2hlbiBgdHJ1ZWAsIHRoZSByZXN1bHRzIGFyZSBpdGVyYXRlZCBpbiByZXZlcnNlIG9yZGVyLlxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0cXVlcnkoaWQsIHJldmVyc2UpIHtcblx0XHRsZXQgaWRzID0gW107XG5cdFx0aWYgKGlkID09PSB1bmRlZmluZWQgfHwgaWQgPT09IEFsbCkge1xuXHRcdFx0aWRzID0gdGhpcy5sYXllcnMubWFwKGxheWVyID0+IGxheWVyLmlkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWRzID0gYXJyYXlpZnkoaWQsIHRydWUpLmZpbHRlcihpZCA9PiB0aGlzLm1hcFtpZF0pO1xuXHRcdFx0aWYgKCFpZHMubGVuZ3RoKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgTGF5ZXIgXCIke1N0cmluZyhpZCl9XCIgbm90IGZvdW5kYCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJldmVyc2UpIHtcblx0XHRcdGlkcy5yZXZlcnNlKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdFtTeW1ib2wuaXRlcmF0b3JdOiAoKSA9PiB7XG5cdFx0XHRcdGxldCBpID0gMDtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRuZXh0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBkb25lID0gaSA+PSBpZHMubGVuZ3RoO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHsgZG9uZSwgdmFsdWU6IGRvbmUgPyB1bmRlZmluZWQgOiB0aGlzLm1hcFtpZHNbaSsrXV0gfTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXN0cm95cyBhIGxheWVyIGJ5IGlkIG9yIGxheWVyIHJlZmVyZW5jZS5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd8U3ltYm9sfEFycmF5LjxTdHJpbmd8U3ltYm9sPn0gaWRPckxheWVyIC0gVGhlIGxheWVyIGlkIG9yIGlkcy5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbcmV2ZXJzZV0gLSBXaGVuIGB0cnVlYCwgdGhlIHJlc3VsdHMgYXJlIGl0ZXJhdGVkIGluIHJldmVyc2Ugb3JkZXIuXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRyZW1vdmUoaWRPckxheWVyKSB7XG5cdFx0Y29uc3QgbGF5ZXIgPSB0aGlzLm1hcFtpZE9yTGF5ZXJdO1xuXHRcdGNvbnN0IHAgPSB0aGlzLmxheWVycy5maW5kSW5kZXgobGF5ZXIgPT4gbGF5ZXIgPT09IGlkT3JMYXllciB8fCBsYXllci5pZCA9PT0gaWRPckxheWVyKTtcblx0XHRpZiAobGF5ZXIpIHtcblx0XHRcdGxvZyhgVW5sb2FkaW5nIGxheWVyOiAke2hpZ2hsaWdodChTdHJpbmcoaWRPckxheWVyKSl9YCk7XG5cdFx0XHR0aGlzLm1hcFtpZE9yTGF5ZXJdLnVubG9hZCgpO1xuXHRcdFx0ZGVsZXRlIHRoaXMubWFwW2lkT3JMYXllcl07XG5cdFx0fVxuXHRcdGlmIChwICE9PSAtMSkge1xuXHRcdFx0dGhpcy5sYXllcnMuc3BsaWNlKHAsIDEpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHJldmVyc2UgaXRlcmF0b3IuXG5cdCAqXG5cdCAqIEB0eXBlIHtPYmplY3R9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRyZXZlcnNlID0ge1xuXHRcdFtTeW1ib2wuaXRlcmF0b3JdOiAoKSA9PiB7XG5cdFx0XHRsZXQgaSA9IHRoaXMubGF5ZXJzLmxlbmd0aCAtIDE7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRuZXh0OiAoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZG9uZSA9IGkgPCAwO1xuXHRcdFx0XHRcdHJldHVybiB7IGRvbmUsIHZhbHVlOiBkb25lID8gdW5kZWZpbmVkIDogdGhpcy5sYXllcnNbaS0tXSB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQW4gYWxpYXMgZm9yIGBhZGQoKWAuXG5cdCAqXG5cdCAqIEBwYXJhbSB7TGF5ZXJ8T2JqZWN0fFN0cmluZ30gbGF5ZXIgLSBUaGUgbGF5ZXIsIGxheWVyIGNvbnRydWN0b3IgYXJndW1lbnRzLCBvciBsYXllciBpZC5cblx0ICogQHJldHVybnMge0xheWVyfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0c2V0KGxheWVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkKGxheWVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHJldmVyc2UgaXRlcmF0b3IuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRbU3ltYm9sLml0ZXJhdG9yXSgpIHtcblx0XHRsZXQgaSA9IDA7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG5leHQ6ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgZG9uZSA9IGkgPj0gdGhpcy5sYXllcnMubGVuZ3RoO1xuXHRcdFx0XHRyZXR1cm4geyBkb25lLCB2YWx1ZTogZG9uZSA/IHVuZGVmaW5lZCA6IHRoaXMubGF5ZXJzW2krK10gfTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBzdHJpbmcgcHJlcHJlc2VudGF0aW9uIG9mIGVhY2ggbGF5ZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbaW5kZW50YXRpb249Ml0gVGhlIG51bWJlciBvZiBzcGFjZXMgdG8gaW5kZW50IHRoZSBKU09OIGZvcm1hdHRlZCBvdXRwdXQuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHR0b1N0cmluZyhpbmRlbnRhdGlvbiA9IDIpIHtcblx0XHRjb25zdCBvYmogPSB7fTtcblx0XHRmb3IgKGNvbnN0IGxheWVyIG9mIHRoaXMubGF5ZXJzKSB7XG5cdFx0XHRjb25zdCBjZmcgPSBsYXllci5zdG9yZS5nZXQoKTtcblx0XHRcdG9ialtTdHJpbmcobGF5ZXIuaWQpXSA9IGNmZyA9PT0gdW5kZWZpbmVkID8ge30gOiBjZmc7XG5cdFx0fVxuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIG51bGwsIE1hdGgubWF4KGluZGVudGF0aW9uLCAwKSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhIHdhdGNoIGhhbmRsZXIgZnJvbSBhbGwgbGF5ZXJzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIC0gQSBjYWxsYmFjayB0byBmaXJlIHdoZW4gYSBjaGFuZ2Ugb2NjdXJzLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0dW53YXRjaChoYW5kbGVyKSB7XG5cdFx0aWYgKCFoYW5kbGVyIHx8IHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBoYW5kbGVyIHRvIGJlIGEgZnVuY3Rpb24nKTtcblx0XHR9XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMud2F0Y2hlcnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmICh0aGlzLndhdGNoZXJzW2ldLmhhbmRsZXIgPT09IGhhbmRsZXIpIHtcblx0XHRcdFx0dGhpcy53YXRjaGVycy5zcGxpY2UoaS0tLCAxKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGxheWVyIG9mIHRoaXMubGF5ZXJzKSB7XG5cdFx0XHRsYXllci51bndhdGNoKGhhbmRsZXIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgYSB3YXRjaCBoYW5kbGVyIG9uIGFsbCBsYXllcnMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7QXJyYXkuPFN0cmluZz59IFtmaWx0ZXJdIC0gQSBwcm9wZXJ0eSBuYW1lIG9yIGFycmF5IG9mIG5lc3RlZCBwcm9wZXJ0aWVzIHRvIHdhdGNoLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIC0gQSBjYWxsYmFjayB0byBmaXJlIHdoZW4gYSBjaGFuZ2Ugb2NjdXJzLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0d2F0Y2goZmlsdGVyLCBoYW5kbGVyKSB7XG5cdFx0aWYgKCFoYW5kbGVyIHx8IHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBoYW5kbGVyIHRvIGJlIGEgZnVuY3Rpb24nKTtcblx0XHR9XG5cblx0XHRsb2coYFJlZ2lzdGVyaW5nIHdhdGNoZXI6ICR7aGlnaGxpZ2h0KGAke2hhbmRsZXIubmFtZX0oKWApfSAke2ZpbHRlci5sZW5ndGggPyBmaWx0ZXIuam9pbignLicpIDogJyd9YCk7XG5cblx0XHR0aGlzLndhdGNoZXJzLnB1c2goeyBmaWx0ZXIsIGhhbmRsZXIgfSk7XG5cblx0XHRmb3IgKGNvbnN0IGxheWVyIG9mIHRoaXMubGF5ZXJzKSB7XG5cdFx0XHRsYXllci53YXRjaChmaWx0ZXIsIGhhbmRsZXIpO1xuXHRcdH1cblx0fVxufVxuIl0sImZpbGUiOiJsYXllci1saXN0LmpzIn0=
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxheWVyLWxpc3QuanMiXSwibmFtZXMiOlsibG9nIiwiaGlnaGxpZ2h0Iiwic25vb3Bsb2dnIiwic3R5bGVzIiwiQWxsIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJMYXllckxpc3QiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJpIiwibGF5ZXJzIiwibGVuZ3RoIiwibmV4dCIsImRvbmUiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsImFsbG93TnVsbHMiLCJhbGxvd1Vua25vd24iLCJhZGQiLCJsYXllciIsIlR5cGVFcnJvciIsImlkIiwiQXJyYXkiLCJpc0FycmF5IiwiRXJyb3IiLCJleGlzdGluZyIsIm1hcCIsInByb3AiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpc0xheWVyIiwiTGF5ZXIiLCJ2YWxpZGF0ZSIsImFyZ3MiLCJzY2hlbWFzIiwic2NoZW1hIiwidmFsaWRhdGVPcHRpb25zIiwicCIsImZpbmRJbmRleCIsInNwbGljZSIsImluc2VydGVkIiwib3JkZXIiLCJwdXNoIiwiZmlsdGVyIiwiaGFuZGxlciIsIndhdGNoZXJzIiwid2F0Y2giLCJnZXQiLCJxdWVyeSIsInJldmVyc2UiLCJpZHMiLCJTdHJpbmciLCJyZW1vdmUiLCJpZE9yTGF5ZXIiLCJ1bmxvYWQiLCJzZXQiLCJ0b1N0cmluZyIsImluZGVudGF0aW9uIiwib2JqIiwiY2ZnIiwic3RvcmUiLCJKU09OIiwic3RyaW5naWZ5IiwiTWF0aCIsIm1heCIsInVud2F0Y2giLCJuYW1lIiwiam9pbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUVBOzs7Ozs7Ozs7Ozs7QUFFQSxNQUFNO0FBQUVBLEVBQUFBO0FBQUYsSUFBVSx3QkFBVSxZQUFWLEVBQXdCLFlBQXhCLENBQWhCO0FBQ0EsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQWdCQyxtQkFBVUMsTUFBaEM7QUFFQTs7Ozs7QUFJTyxNQUFNQyxHQUFHLEdBQUdDLE1BQU0sQ0FBQyxLQUFELENB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TCxDQUFjTixNQUFkLENBQXFCaEMsQ0FBQyxFQUF0QixFQUEwQixDQUExQjtBQUNBO0FBQ0Q7O0FBRUQsU0FBSyxNQUFNVSxLQUFYLElBQW9CLEtBQUtULE1BQXpCLEVBQWlDO0FBQ2hDUyxNQUFBQSxLQUFLLENBQUNnRCxPQUFOLENBQWNyQixPQUFkO0FBQ0E7QUFDRDtBQUVEOzs7Ozs7Ozs7QUFPQUUsRUFBQUEsS0FBSyxDQUFDSCxNQUFELEVBQVNDLE9BQVQsRUFBa0I7QUFDdEIsUUFBSSxDQUFDQSxPQUFELElBQVksT0FBT0EsT0FBUCxLQUFtQixVQUFuQyxFQUErQztBQUM5QyxZQUFNLElBQUkxQixTQUFKLENBQWMsbUNBQWQsQ0FBTjtBQUNBOztBQUVEckIsSUFBQUEsR0FBRyxDQUFFLHdCQUF1QkMsU0FBUyxDQUFFLEdBQUU4QyxPQUFPLENBQUNzQixJQUFLLElBQWpCLENBQXNCLElBQUd2QixNQUFNLENBQUNsQyxNQUFQLEdBQWdCa0MsTUFBTSxDQUFDd0IsSUFBUCxDQUFZLEdBQVosQ0FBaEIsR0FBbUMsRUFBRyxFQUFqRyxDQUFIO0FBRUEsU0FBS3RCLFFBQUwsQ0FBY0gsSUFBZCxDQUFtQjtBQUFFQyxNQUFBQSxNQUFGO0FBQVVDLE1BQUFBO0FBQVYsS0FBbkI7O0FBRUEsU0FBSyxNQUFNM0IsS0FBWCxJQUFvQixLQUFLVCxNQUF6QixFQUFpQztBQUNoQ1MsTUFBQUEsS0FBSyxDQUFDNkIsS0FBTixDQUFZSCxNQUFaLEVBQW9CQyxPQUFwQjtBQUNBO0FBQ0Q7O0FBcFM2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMYXllciBmcm9tICcuL2xheWVyJztcbmltcG9ydCBzbm9vcGxvZ2cgZnJvbSAnc25vb3Bsb2dnJztcblxuaW1wb3J0IHsgYXJyYXlpZnksIHZhbGlkYXRlIH0gZnJvbSAnLi91dGlsJztcblxuY29uc3QgeyBsb2cgfSA9IHNub29wbG9nZygnY29uZmlnLWtpdCcpKCdsYXllci1saXN0Jyk7XG5jb25zdCB7IGhpZ2hsaWdodCB9ID0gc25vb3Bsb2dnLnN0eWxlcztcblxuLyoqXG4gKiBBIHVuaXF1ZSBzeW1ib2wgdXNlZCB0byBxdWVyeSBhbGwgbGF5ZXJzLlxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuZXhwb3J0IGNvbnN0IEFsbCA9IFN5bWJvbCgnYWxsJyk7XG5cbi8qKlxuICogQW4gaW5kZXhlZCBsaXN0IG9mIGVsZW1lbnRzLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMYXllckxpc3Qge1xuXHQvKipcblx0ICogRm9yY2VzIGFsbCBub2RlcyBvZiBhIHNjaGVtYSB0byBhbGxvdyBudWxscy5cblx0ICogQHR5cGUge0Jvb2xlYW59XG5cdCAqL1xuXHRhbGxvd051bGxzID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIEFsbG93cyBvYmplY3QgdmFsdWVzIHRvIGNvbnRhaW4gdW5rbm93biBrZXlzLlxuXHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0ICovXG5cdGFsbG93VW5rbm93biA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFRoZSBvcmRlcmVkIGxpc3Qgb2YgbGF5ZXJzLlxuXHQgKiBAdHlwZSB7QXJyYXkuPExheWVyPn1cblx0ICovXG5cdGxheWVycyA9IFtdO1xuXG5cdC8qKlxuXHQgKiBBIHF1aWNrIGxvb2t1cCBiYXNlZCBvbiBpZC5cblx0ICogQHR5cGUge29iamVjdH1cblx0ICovXG5cdG1hcCA9IHt9O1xuXG5cdC8qKlxuXHQgKiBBIGxpc3Qgb2YgYWxsIGFjdGl2ZSB3YXRjaGVycy5cblx0ICogQHR5cGUge0FycmF5LjxPYmplY3Q+fVxuXHQgKi9cblx0d2F0Y2hlcnMgPSBbXTtcblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdGhlIG9wdGlvbnMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuYWxsb3dOdWxsc10gLSBGb3JjZXMgYWxsIG5vZGVzIG9mIGEgc2NoZW1hIHRvIGFsbG93IG51bGxzLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRzLmFsbG93VW5rbm93bj10cnVlXSAtIEFsbG93cyBvYmplY3QgdmFsdWVzIHRvIGNvbnRhaW4gdW5rbm93biBrZXlzLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG5cdFx0dGhpcy5hbGxvd051bGxzID0gb3B0cy5hbGxvd051bGxzO1xuXHRcdHRoaXMuYWxsb3dVbmtub3duID0gb3B0cy5hbGxvd1Vua25vd24gIT09IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSBsYXllci4gSWYgdGhlIGxheWVyIGlkIGFscmVhZHkgZXhpc3RzLCBpdCB3aWxsIHJlcGxhY2UgaXQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7TGF5ZXJ8T2JqZWN0fFN0cmluZ30gbGF5ZXIgLSBUaGUgbGF5ZXIsIGxheWVyIGNvbnRydWN0b3IgYXJndW1lbnRzLCBvciBsYXllciBpZC5cblx0ICogQHJldHVybnMge0xheWVyfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0YWRkKGxheWVyKSB7XG5cdFx0aWYgKCFsYXllcikge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbGF5ZXIgdG8gYmUgYW4gb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBsYXllciA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGxheWVyID09PSAnc3ltYm9sJykge1xuXHRcdFx0bGF5ZXIgPSB7IGlkOiBsYXllciB9O1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgbGF5ZXIgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkobGF5ZXIpKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBsYXllciB0byBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cblx0XHRpZiAoIWxheWVyLmlkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGxheWVyIHRvIGhhdmUgYW4gaWQnKTtcblx0XHR9XG5cblx0XHRjb25zdCBleGlzdGluZyA9IHRoaXMubWFwW2xheWVyLmlkXTtcblx0XHRpZiAoZXhpc3RpbmcpIHtcblx0XHRcdGZvciAoY29uc3QgcHJvcCBvZiBbICdmaWxlJywgJ25hbWVzcGFjZScsICdvcmRlcicsICdyZWFkb25seScsICdzY2hlbWEnLCAnc3RhdGljJyBdKSB7XG5cdFx0XHRcdGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxheWVyLCBwcm9wKSkge1xuXHRcdFx0XHRcdGxheWVyW3Byb3BdID0gZXhpc3RpbmdbcHJvcF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBpc0xheWVyID0gbGF5ZXIgaW5zdGFuY2VvZiBMYXllcjtcblx0XHRpZiAoaXNMYXllciB8fCAhbGF5ZXIudmFsaWRhdGUpIHtcblx0XHRcdGxheWVyLnZhbGlkYXRlID0gYXJncyA9PiB2YWxpZGF0ZSh7XG5cdFx0XHRcdC4uLmFyZ3MsXG5cdFx0XHRcdHNjaGVtYXM6IHRoaXMubGF5ZXJzLm1hcChsYXllciA9PiBsYXllci5zY2hlbWEpLFxuXHRcdFx0XHR2YWxpZGF0ZU9wdGlvbnM6IHtcblx0XHRcdFx0XHRhbGxvd1Vua25vd246IHRoaXMuYWxsb3dVbmtub3duXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGxheWVyLmFsbG93TnVsbHMgPSB0aGlzLmFsbG93TnVsbHM7XG5cblx0XHRpZiAoIWlzTGF5ZXIpIHtcblx0XHRcdGxheWVyID0gbmV3IExheWVyKGxheWVyKTtcblx0XHR9XG5cblx0XHR0aGlzLm1hcFtsYXllci5pZF0gPSBsYXllcjtcblx0XHRpZiAoZXhpc3RpbmcpIHtcblx0XHRcdGNvbnN0IHAgPSB0aGlzLmxheWVycy5maW5kSW5kZXgoZXhpc3RpbmcgPT4gZXhpc3RpbmcuaWQgPT09IGxheWVyLmlkKTtcblx0XHRcdGlmIChwICE9PSAtMSkge1xuXHRcdFx0XHR0aGlzLmxheWVycy5zcGxpY2UocCwgMSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IGluc2VydGVkO1xuXHRcdGZvciAobGV0IGkgPSB0aGlzLmxheWVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0aWYgKGxheWVyLm9yZGVyID4gdGhpcy5sYXllcnNbaV0ub3JkZXIpIHtcblx0XHRcdFx0aW5zZXJ0ZWQgPSAhIXRoaXMubGF5ZXJzLnNwbGljZShpICsgMSwgMCwgbGF5ZXIpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCFpbnNlcnRlZCkge1xuXHRcdFx0dGhpcy5sYXllcnMucHVzaChsYXllcik7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCB7IGZpbHRlciwgaGFuZGxlciB9IG9mIHRoaXMud2F0Y2hlcnMpIHtcblx0XHRcdGxheWVyLndhdGNoKGZpbHRlciwgaGFuZGxlcik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGxheWVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBsYXllciBieSBpZC5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd8U3ltYm9sfSBpZCAtIFRoZSBsYXllciBpZC5cblx0ICogQHJldHVybnMge0xheWVyfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Z2V0KGlkKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwW2lkXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kcyBhbGwgbGF5ZXJzIHRoYXQgbWF0Y2ggYSBzcGVjaWZpZWQgaWRzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ3xTeW1ib2x8QXJyYXkuPFN0cmluZ3xTeW1ib2w+fSBpZCAtIFRoZSBsYXllciBpZCBvciBpZHMuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW3JldmVyc2VdIC0gV2hlbiBgdHJ1ZWAsIHRoZSByZXN1bHRzIGFyZSBpdGVyYXRlZCBpbiByZXZlcnNlIG9yZGVyLlxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0cXVlcnkoaWQsIHJldmVyc2UpIHtcblx0XHRsZXQgaWRzID0gW107XG5cdFx0aWYgKGlkID09PSB1bmRlZmluZWQgfHwgaWQgPT09IEFsbCkge1xuXHRcdFx0aWRzID0gdGhpcy5sYXllcnMubWFwKGxheWVyID0+IGxheWVyLmlkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWRzID0gYXJyYXlpZnkoaWQsIHRydWUpLmZpbHRlcihpZCA9PiB0aGlzLm1hcFtpZF0pO1xuXHRcdFx0aWYgKCFpZHMubGVuZ3RoKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgTGF5ZXIgXCIke1N0cmluZyhpZCl9XCIgbm90IGZvdW5kYCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJldmVyc2UpIHtcblx0XHRcdGlkcy5yZXZlcnNlKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdFtTeW1ib2wuaXRlcmF0b3JdOiAoKSA9PiB7XG5cdFx0XHRcdGxldCBpID0gMDtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRuZXh0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBkb25lID0gaSA+PSBpZHMubGVuZ3RoO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHsgZG9uZSwgdmFsdWU6IGRvbmUgPyB1bmRlZmluZWQgOiB0aGlzLm1hcFtpZHNbaSsrXV0gfTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXN0cm95cyBhIGxheWVyIGJ5IGlkIG9yIGxheWVyIHJlZmVyZW5jZS5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd8U3ltYm9sfEFycmF5LjxTdHJpbmd8U3ltYm9sPn0gaWRPckxheWVyIC0gVGhlIGxheWVyIGlkIG9yIGlkcy5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbcmV2ZXJzZV0gLSBXaGVuIGB0cnVlYCwgdGhlIHJlc3VsdHMgYXJlIGl0ZXJhdGVkIGluIHJldmVyc2Ugb3JkZXIuXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRyZW1vdmUoaWRPckxheWVyKSB7XG5cdFx0Y29uc3QgbGF5ZXIgPSB0aGlzLm1hcFtpZE9yTGF5ZXJdO1xuXHRcdGNvbnN0IHAgPSB0aGlzLmxheWVycy5maW5kSW5kZXgobGF5ZXIgPT4gbGF5ZXIgPT09IGlkT3JMYXllciB8fCBsYXllci5pZCA9PT0gaWRPckxheWVyKTtcblx0XHRpZiAobGF5ZXIpIHtcblx0XHRcdGxvZyhgVW5sb2FkaW5nIGxheWVyOiAke2hpZ2hsaWdodChTdHJpbmcoaWRPckxheWVyKSl9YCk7XG5cdFx0XHR0aGlzLm1hcFtpZE9yTGF5ZXJdLnVubG9hZCgpO1xuXHRcdFx0ZGVsZXRlIHRoaXMubWFwW2lkT3JMYXllcl07XG5cdFx0fVxuXHRcdGlmIChwICE9PSAtMSkge1xuXHRcdFx0dGhpcy5sYXllcnMuc3BsaWNlKHAsIDEpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHJldmVyc2UgaXRlcmF0b3IuXG5cdCAqXG5cdCAqIEB0eXBlIHtPYmplY3R9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRyZXZlcnNlID0ge1xuXHRcdFtTeW1ib2wuaXRlcmF0b3JdOiAoKSA9PiB7XG5cdFx0XHRsZXQgaSA9IHRoaXMubGF5ZXJzLmxlbmd0aCAtIDE7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRuZXh0OiAoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZG9uZSA9IGkgPCAwO1xuXHRcdFx0XHRcdHJldHVybiB7IGRvbmUsIHZhbHVlOiBkb25lID8gdW5kZWZpbmVkIDogdGhpcy5sYXllcnNbaS0tXSB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQW4gYWxpYXMgZm9yIGBhZGQoKWAuXG5cdCAqXG5cdCAqIEBwYXJhbSB7TGF5ZXJ8T2JqZWN0fFN0cmluZ30gbGF5ZXIgLSBUaGUgbGF5ZXIsIGxheWVyIGNvbnRydWN0b3IgYXJndW1lbnRzLCBvciBsYXllciBpZC5cblx0ICogQHJldHVybnMge0xheWVyfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0c2V0KGxheWVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkKGxheWVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHJldmVyc2UgaXRlcmF0b3IuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRbU3ltYm9sLml0ZXJhdG9yXSgpIHtcblx0XHRsZXQgaSA9IDA7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG5leHQ6ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgZG9uZSA9IGkgPj0gdGhpcy5sYXllcnMubGVuZ3RoO1xuXHRcdFx0XHRyZXR1cm4geyBkb25lLCB2YWx1ZTogZG9uZSA/IHVuZGVmaW5lZCA6IHRoaXMubGF5ZXJzW2krK10gfTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBzdHJpbmcgcHJlcHJlc2VudGF0aW9uIG9mIGVhY2ggbGF5ZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbaW5kZW50YXRpb249Ml0gVGhlIG51bWJlciBvZiBzcGFjZXMgdG8gaW5kZW50IHRoZSBKU09OIGZvcm1hdHRlZCBvdXRwdXQuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHR0b1N0cmluZyhpbmRlbnRhdGlvbiA9IDIpIHtcblx0XHRjb25zdCBvYmogPSB7fTtcblx0XHRmb3IgKGNvbnN0IGxheWVyIG9mIHRoaXMubGF5ZXJzKSB7XG5cdFx0XHRjb25zdCBjZmcgPSBsYXllci5zdG9yZS5nZXQoKTtcblx0XHRcdG9ialtTdHJpbmcobGF5ZXIuaWQpXSA9IGNmZyA9PT0gdW5kZWZpbmVkID8ge30gOiBjZmc7XG5cdFx0fVxuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIG51bGwsIE1hdGgubWF4KGluZGVudGF0aW9uLCAwKSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhIHdhdGNoIGhhbmRsZXIgZnJvbSBhbGwgbGF5ZXJzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIC0gQSBjYWxsYmFjayB0byBmaXJlIHdoZW4gYSBjaGFuZ2Ugb2NjdXJzLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0dW53YXRjaChoYW5kbGVyKSB7XG5cdFx0aWYgKCFoYW5kbGVyIHx8IHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBoYW5kbGVyIHRvIGJlIGEgZnVuY3Rpb24nKTtcblx0XHR9XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMud2F0Y2hlcnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmICh0aGlzLndhdGNoZXJzW2ldLmhhbmRsZXIgPT09IGhhbmRsZXIpIHtcblx0XHRcdFx0dGhpcy53YXRjaGVycy5zcGxpY2UoaS0tLCAxKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGxheWVyIG9mIHRoaXMubGF5ZXJzKSB7XG5cdFx0XHRsYXllci51bndhdGNoKGhhbmRsZXIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgYSB3YXRjaCBoYW5kbGVyIG9uIGFsbCBsYXllcnMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7QXJyYXkuPFN0cmluZz59IFtmaWx0ZXJdIC0gQSBwcm9wZXJ0eSBuYW1lIG9yIGFycmF5IG9mIG5lc3RlZCBwcm9wZXJ0aWVzIHRvIHdhdGNoLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIC0gQSBjYWxsYmFjayB0byBmaXJlIHdoZW4gYSBjaGFuZ2Ugb2NjdXJzLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0d2F0Y2goZmlsdGVyLCBoYW5kbGVyKSB7XG5cdFx0aWYgKCFoYW5kbGVyIHx8IHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBoYW5kbGVyIHRvIGJlIGEgZnVuY3Rpb24nKTtcblx0XHR9XG5cblx0XHRsb2coYFJlZ2lzdGVyaW5nIHdhdGNoZXI6ICR7aGlnaGxpZ2h0KGAke2hhbmRsZXIubmFtZX0oKWApfSAke2ZpbHRlci5sZW5ndGggPyBmaWx0ZXIuam9pbignLicpIDogJyd9YCk7XG5cblx0XHR0aGlzLndhdGNoZXJzLnB1c2goeyBmaWx0ZXIsIGhhbmRsZXIgfSk7XG5cblx0XHRmb3IgKGNvbnN0IGxheWVyIG9mIHRoaXMubGF5ZXJzKSB7XG5cdFx0XHRsYXllci53YXRjaChmaWx0ZXIsIGhhbmRsZXIpO1xuXHRcdH1cblx0fVxufVxuIl0sImZpbGUiOiJsYXllci1saXN0LmpzIn0=
{
"name": "config-kit",
"version": "1.0.0",
"version": "1.0.1",
"description": "A universal, layered configuration system.",

@@ -28,8 +28,8 @@ "main": "./dist/index.js",

"import-fresh": "^3.2.1",
"snooplogg": "^2.3.3",
"source-map-support": "^0.5.16"
"snooplogg": "^3.0.0",
"source-map-support": "^0.5.19"
},
"devDependencies": {
"appcd-gulp": "^2.4.0",
"tmp": "^0.1.0"
"appcd-gulp": "^3.0.0",
"tmp": "^0.2.1"
},

@@ -36,0 +36,0 @@ "homepage": "https://github.com/appcelerator/config-kit",

@@ -44,3 +44,3 @@ # config-kit

[1]: https://github.com/appcelerator/titaniumlib/blob/master/LICENSE
[1]: https://github.com/appcelerator/config-kit/blob/master/LICENSE
[npm-image]: https://img.shields.io/npm/v/config-kit.svg

@@ -47,0 +47,0 @@ [npm-url]: https://npmjs.org/package/config-kit

SocketSocket SOC 2 Logo

Product

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

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc