velocious 1.0.271 → 1.0.272

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -12,6 +12,12 @@
12
12
  * @property {string} file - Migration filename.
13
13
  */
14
14
  export default class VelociousEnvironmentHandlerBase {
15
+ /**
16
+ * Auto-discovers resource classes. No-op in base handler; overridden in Node handler.
17
+ * @param {import("../configuration.js").default} _configuration - Configuration instance.
18
+ * @returns {Promise<void>}
19
+ */
20
+ async autoDiscoverResources(_configuration) { } // eslint-disable-line no-unused-vars
15
21
  /**
16
22
  * @param {number} _offsetMinutes - Offset in minutes (Date#getTimezoneOffset).
17
23
  * @param {() => Promise<any>} callback - Callback to run.
@@ -358,4 +364,4 @@ export default class VelociousEnvironmentHandlerBase {
358
364
  return;
359
365
  }
360
366
  }
361
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbnZpcm9ubWVudC1oYW5kbGVycy9iYXNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7OztHQUlHO0FBRUg7Ozs7OztHQU1HO0FBRUgsTUFBTSxDQUFDLE9BQU8sT0FBTywrQkFBK0I7SUFDbEQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLEVBQUUsUUFBUTtRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUE7UUFFekUsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFBO1FBRXZFLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLEdBQUcsY0FBYyxDQUFBO1FBRTFELElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxRQUFRLEVBQUUsQ0FBQTtRQUN6QixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixHQUFHLHFCQUFxQixDQUFBO1FBQ25FLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCLENBQUMsY0FBYztRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUE7UUFFekUscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLEdBQUcsY0FBYyxDQUFBO0lBQzVELENBQUM7SUFFRDs7O09BR0c7SUFDSCx3QkFBd0IsQ0FBQyxhQUFhO1FBQ3BDLE1BQU0sbUJBQW1CLEdBQUcsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUE7UUFFL0QsSUFBSSxDQUFDLG1CQUFtQjtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQTtRQUUx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QUMsSUFBSSxHQUFHLE9BQU8sQ0FBQSxDQUFDLENBQUM7SUFFeEM7OztPQUdHO0lBQ0gsZ0JBQWdCLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQSxDQUFDLENBQUM7SUFFNUU7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLHVCQUF1QixDQUFDLFNBQVM7UUFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFBO0lBQ2hGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxLQUFLO1FBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsNERBQTRELENBQUMsQ0FBQTtJQUMvRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUE7UUFFekUsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFBO0lBQzNCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsY0FBYyxDQUFBLENBQUMsQ0FBQztJQUVwRTs7OztPQUlHO0lBQ0gsc0JBQXNCLENBQUMsS0FBSztRQUMxQixPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsY0FBYyxDQUFDLEtBQUs7UUFDbEIsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLO1FBQ3hCLE9BQU07SUFDUixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDb21tYW5kRmlsZU9iamVjdFR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gQ29tbWFuZCBuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGZpbGUgLSBDb21tYW5kIGZpbGUgcGF0aC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IE1pZ3JhdGlvbk9iamVjdFR5cGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkYXRlIC0gTWlncmF0aW9uIHRpbWVzdGFtcCBwYXJzZWQgZnJvbSBmaWxlbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZnVsbFBhdGhdIC0gQWJzb2x1dGUgcGF0aCB0byB0aGUgbWlncmF0aW9uIGZpbGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWlncmF0aW9uQ2xhc3NOYW1lIC0gRXhwb3J0ZWQgbWlncmF0aW9uIGNsYXNzIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZmlsZSAtIE1pZ3JhdGlvbiBmaWxlbmFtZS5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNFbnZpcm9ubWVudEhhbmRsZXJCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBfb2Zmc2V0TWludXRlcyAtIE9mZnNldCBpbiBtaW51dGVzIChEYXRlI2dldFRpbWV6b25lT2Zmc2V0KS5cbiAgICogQHBhcmFtIHsoKSA9PiBQcm9taXNlPGFueT59IGNhbGxiYWNrIC0gQ2FsbGJhY2sgdG8gcnVuLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fSAtIFJlc3VsdCBvZiB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBhc3luYyBydW5XaXRoVGltZXpvbmVPZmZzZXQoX29mZnNldE1pbnV0ZXMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb24pIHRocm93IG5ldyBFcnJvcihcIkNvbmZpZ3VyYXRpb24gaGFzbid0IGJlZW4gc2V0XCIpXG5cbiAgICBjb25zdCBwcmV2aW91c09mZnNldE1pbnV0ZXMgPSB0aGlzLmNvbmZpZ3VyYXRpb24uX3RpbWV6b25lT2Zmc2V0TWludXRlc1xuXG4gICAgdGhpcy5jb25maWd1cmF0aW9uLl90aW1lem9uZU9mZnNldE1pbnV0ZXMgPSBfb2Zmc2V0TWludXRlc1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBjYWxsYmFjaygpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5fdGltZXpvbmVPZmZzZXRNaW51dGVzID0gcHJldmlvdXNPZmZzZXRNaW51dGVzXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBfb2Zmc2V0TWludXRlcyAtIE9mZnNldCBpbiBtaW51dGVzIChEYXRlI2dldFRpbWV6b25lT2Zmc2V0KS5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0VGltZXpvbmVPZmZzZXQoX29mZnNldE1pbnV0ZXMpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiQ29uZmlndXJhdGlvbiBoYXNuJ3QgYmVlbiBzZXRcIilcblxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIHRoaXMuY29uZmlndXJhdGlvbi5fdGltZXpvbmVPZmZzZXRNaW51dGVzID0gX29mZnNldE1pbnV0ZXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZH0gY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gT2Zmc2V0IGluIG1pbnV0ZXMuXG4gICAqL1xuICBnZXRUaW1lem9uZU9mZnNldE1pbnV0ZXMoY29uZmlndXJhdGlvbikge1xuICAgIGNvbnN0IGFjdGl2ZUNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uIHx8IHRoaXMuY29uZmlndXJhdGlvblxuXG4gICAgaWYgKCFhY3RpdmVDb25maWd1cmF0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJDb25maWd1cmF0aW9uIGhhc24ndCBiZWVuIHNldFwiKVxuXG4gICAgaWYgKHR5cGVvZiBhY3RpdmVDb25maWd1cmF0aW9uLl90aW1lem9uZU9mZnNldE1pbnV0ZXMgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBhY3RpdmVDb25maWd1cmF0aW9uLl90aW1lem9uZU9mZnNldE1pbnV0ZXNcbiAgICB9XG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChhY3RpdmVDb25maWd1cmF0aW9uLmdldFRpbWV6b25lT2Zmc2V0TWludXRlcygpKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vYXV0aG9yaXphdGlvbi9hYmlsaXR5LmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWR9IGFiaWxpdHkgLSBBYmlsaXR5IHRvIHNldCBmb3IgY2FsbGJhY2sgc2NvcGUuXG4gICAqIEBwYXJhbSB7KCkgPT4gUHJvbWlzZTxhbnk+fSBjYWxsYmFjayAtIENhbGxiYWNrLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fSAtIENhbGxiYWNrIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIHJ1bldpdGhBYmlsaXR5KGFiaWxpdHksIGNhbGxiYWNrKSB7XG4gICAgdGhpcy5fY3VycmVudEFiaWxpdHkgPSBhYmlsaXR5XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGNhbGxiYWNrKClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fY3VycmVudEFiaWxpdHkgPSB1bmRlZmluZWRcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9hdXRob3JpemF0aW9uL2FiaWxpdHkuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZH0gYWJpbGl0eSAtIEFiaWxpdHkgdG8gc2V0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXRDdXJyZW50QWJpbGl0eShhYmlsaXR5KSB7XG4gICAgdGhpcy5fY3VycmVudEFiaWxpdHkgPSBhYmlsaXR5XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uL2F1dGhvcml6YXRpb24vYWJpbGl0eS5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkfSAtIEN1cnJlbnQgYWJpbGl0eS5cbiAgICovXG4gIGdldEN1cnJlbnRBYmlsaXR5KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50QWJpbGl0eVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdGVuYW50IC0gVGVuYW50IHRvIHNldCBmb3IgY2FsbGJhY2sgc2NvcGUuXG4gICAqIEBwYXJhbSB7KCkgPT4gUHJvbWlzZTxhbnk+fSBjYWxsYmFjayAtIENhbGxiYWNrLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fSAtIENhbGxiYWNrIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIHJ1bldpdGhUZW5hbnQodGVuYW50LCBjYWxsYmFjaykge1xuICAgIHRoaXMuX2N1cnJlbnRUZW5hbnQgPSB0ZW5hbnRcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgY2FsbGJhY2soKVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9jdXJyZW50VGVuYW50ID0gdW5kZWZpbmVkXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdGVuYW50IC0gVGVuYW50IHRvIHNldC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0Q3VycmVudFRlbmFudCh0ZW5hbnQpIHtcbiAgICB0aGlzLl9jdXJyZW50VGVuYW50ID0gdGVuYW50XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3Vua25vd259IC0gQ3VycmVudCB0ZW5hbnQuXG4gICAqL1xuICBnZXRDdXJyZW50VGVuYW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50VGVuYW50XG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY2xpL2Jhc2UtY29tbWFuZC5qc1wiKS5kZWZhdWx0fSBfY29tbWFuZCAtIENvbW1hbmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fSAtIFJlc29sdmVzIHdpdGggdGhlIGNvbW1hbmQgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgY2xpQ29tbWFuZHNHZW5lcmF0ZUJhc2VNb2RlbHMoX2NvbW1hbmQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcImNsaUNvbW1hbmRzR2VuZXJhdGVCYXNlTW9kZWxzIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY2xpL2Jhc2UtY29tbWFuZC5qc1wiKS5kZWZhdWx0fSBfY29tbWFuZCAtIENvbW1hbmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fSAtIFJlc29sdmVzIHdpdGggdGhlIGNvbW1hbmQgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgY2xpQ29tbWFuZHNHZW5lcmF0ZUZyb250ZW5kTW9kZWxzKF9jb21tYW5kKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGlDb21tYW5kc0dlbmVyYXRlRnJvbnRlbmRNb2RlbHMgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jbGkvYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHR9IGNvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzSW5pdChjb21tYW5kKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGlDb21tYW5kc0luaXQgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jbGkvYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHR9IF9jb21tYW5kIC0gQ29tbWFuZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZCByZXN1bHQuXG4gICAqL1xuICBhc3luYyBjbGlDb21tYW5kc01pZ3JhdGlvbkdlbmVyYXRlKF9jb21tYW5kKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGlDb21tYW5kc01pZ3JhdGlvbkdlbmVyYXRlIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY2xpL2Jhc2UtY29tbWFuZC5qc1wiKS5kZWZhdWx0fSBfY29tbWFuZCAtIENvbW1hbmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fSAtIFJlc29sdmVzIHdpdGggdGhlIGNvbW1hbmQgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgY2xpQ29tbWFuZHNNaWdyYXRpb25EZXN0cm95KF9jb21tYW5kKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGlDb21tYW5kc01pZ3JhdGlvbkRlc3Ryb3kgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jbGkvYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHR9IF9jb21tYW5kIC0gQ29tbWFuZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZCByZXN1bHQuXG4gICAqL1xuICBhc3luYyBjbGlDb21tYW5kc0dlbmVyYXRlTW9kZWwoX2NvbW1hbmQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcImNsaUNvbW1hbmRzR2VuZXJhdGVNb2RlbCBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jbGkvYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHR9IF9jb21tYW5kIC0gQ29tbWFuZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZCByZXN1bHQuXG4gICAqL1xuICBhc3luYyBjbGlDb21tYW5kc1JvdXRlcyhfY29tbWFuZCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpQ29tbWFuZHNSb3V0ZXMgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jbGkvYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHR9IF9jb21tYW5kIC0gQ29tbWFuZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZCByZXN1bHQuXG4gICAqL1xuICBhc3luYyBjbGlDb21tYW5kc0NvbnNvbGUoX2NvbW1hbmQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcImNsaUNvbW1hbmRzQ29uc29sZSBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzU2VydmVyKF9jb21tYW5kKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGlDb21tYW5kc1NlcnZlciBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzVGVzdChfY29tbWFuZCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpQ29tbWFuZHNUZXN0IG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY2xpL2Jhc2UtY29tbWFuZC5qc1wiKS5kZWZhdWx0fSBfY29tbWFuZCAtIENvbW1hbmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fSAtIFJlc29sdmVzIHdpdGggdGhlIGNvbW1hbmQgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgY2xpQ29tbWFuZHNCYWNrZ3JvdW5kSm9ic01haW4oX2NvbW1hbmQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcImNsaUNvbW1hbmRzQmFja2dyb3VuZEpvYnNNYWluIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY2xpL2Jhc2UtY29tbWFuZC5qc1wiKS5kZWZhdWx0fSBfY29tbWFuZCAtIENvbW1hbmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fSAtIFJlc29sdmVzIHdpdGggdGhlIGNvbW1hbmQgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgY2xpQ29tbWFuZHNCYWNrZ3JvdW5kSm9ic1dvcmtlcihfY29tbWFuZCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpQ29tbWFuZHNCYWNrZ3JvdW5kSm9ic1dvcmtlciBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzQmFja2dyb3VuZEpvYnNSdW5uZXIoX2NvbW1hbmQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcImNsaUNvbW1hbmRzQmFja2dyb3VuZEpvYnNSdW5uZXIgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jbGkvYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHR9IF9jb21tYW5kIC0gQ29tbWFuZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZCByZXN1bHQuXG4gICAqL1xuICBhc3luYyBjbGlDb21tYW5kc0RiU2NoZW1hRHVtcChfY29tbWFuZCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpQ29tbWFuZHNEYlNjaGVtYUR1bXAgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jbGkvYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHR9IF9jb21tYW5kIC0gQ29tbWFuZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZCByZXN1bHQuXG4gICAqL1xuICBhc3luYyBjbGlDb21tYW5kc0RiU2NoZW1hTG9hZChfY29tbWFuZCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpQ29tbWFuZHNEYlNjaGVtYUxvYWQgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jbGkvYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHR9IF9jb21tYW5kIC0gQ29tbWFuZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZCByZXN1bHQuXG4gICAqL1xuICBhc3luYyBjbGlDb21tYW5kc0RiU2VlZChfY29tbWFuZCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpQ29tbWFuZHNEYlNlZWQgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jbGkvYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHR9IF9jb21tYW5kIC0gQ29tbWFuZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZCByZXN1bHQuXG4gICAqL1xuICBhc3luYyBjbGlDb21tYW5kc1J1bm5lcihfY29tbWFuZCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpQ29tbWFuZHNSdW5uZXIgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jbGkvYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHR9IF9jb21tYW5kIC0gQ29tbWFuZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZCByZXN1bHQuXG4gICAqL1xuICBhc3luYyBjbGlDb21tYW5kc1J1blNjcmlwdChfY29tbWFuZCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpQ29tbWFuZHNSdW5TY3JpcHQgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENvbW1hbmRGaWxlT2JqZWN0VHlwZVtdPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kcy5cbiAgICovXG4gIGFzeW5jIGZpbmRDb21tYW5kcygpIHsgdGhyb3cgbmV3IEVycm9yKFwiZmluZENvbW1hbmRzIG5vdCBpbXBsZW1lbnRlZFwiKSB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTxNaWdyYXRpb25PYmplY3RUeXBlPj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgbWlncmF0aW9ucy5cbiAgICovXG4gIGFzeW5jIGZpbmRNaWdyYXRpb25zKCkgeyB0aHJvdyBuZXcgRXJyb3IoXCJmaW5kTWlncmF0aW9ucyBub3QgaW1wbGVtbmV0ZWRcIikgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gY29tbWFuZCAtIENvbW1hbmQuXG4gICAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gQ29tbWFuZENsYXNzIC0gQ29tbWFuZCBjbGFzcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZCByZXN1bHQuXG4gICAqL1xuICBhc3luYyBmb3J3YXJkQ29tbWFuZChjb21tYW5kLCBDb21tYW5kQ2xhc3MpIHtcbiAgICBjb25zdCBuZXdDb21tYW5kID0gbmV3IENvbW1hbmRDbGFzcyh7XG4gICAgICBhcmdzOiBjb21tYW5kLmFyZ3MsXG4gICAgICBjbGk6IGNvbW1hbmQuY2xpXG4gICAgfSlcblxuICAgIHJldHVybiBhd2FpdCBuZXdDb21tYW5kLmV4ZWN1dGUoKVxuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSAtIFJlc29sdmVzIHdpdGggdGhlIHZlbG9jaW91cyBwYXRoLlxuICAgKi9cbiAgZ2V0VmVsb2Npb3VzUGF0aCgpIHsgdGhyb3cgbmV3IEVycm9yKFwiZ2V0VmVsb2Npb3VzUGF0aCBub3QgaW1wbGVtZW50ZWRcIikgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi4vcm91dGVzL2luZGV4LmpzXCIpLmRlZmF1bHQ+fSAtIFJlc29sdmVzIHdpdGggdGhlIGltcG9ydCBhcHBsaWNhdGlvbiByb3V0ZXMuXG4gICAqL1xuICBhc3luYyBpbXBvcnRBcHBsaWNhdGlvblJvdXRlcygpIHsgdGhyb3cgbmV3IEVycm9yKFwiaW1wb3J0QXBwbGljYXRpb25Sb3V0ZXMgbm90IGltcGxlbWVudGVkXCIpIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7c3RyaW5nW119IF90ZXN0RmlsZXMgLSBUZXN0IGZpbGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgaW1wb3J0VGVzdEZpbGVzKF90ZXN0RmlsZXMpIHsgdGhyb3cgbmV3IEVycm9yKFwiJ2ltcG9ydFRlc3RGaWxlcycgbm90IGltcGxlbWVudGVkXCIpIH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGltcG9ydFRlc3RpbmdDb25maWdQYXRoKCkgeyB0aHJvdyBuZXcgRXJyb3IoYCdpbXBvcnRUZXN0aW5nQ29uZmlnUGF0aCcgbm90IGltcGxlbWVudGVkYCkgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0Pn0gYXJncy5kYnMgLSBEYnMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBhZnRlck1pZ3JhdGlvbnMoYXJncykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgcmV0dXJuXG4gIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGFyZ3MuY29tbWFuZFBhcnRzIC0gQ29tbWFuZCBwYXJ0cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dHlwZW9mIGltcG9ydCAoXCIuLi9jbGkvYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHQ+fSAtIFJlc29sdmVzIHdpdGggdGhlIHJlcXVpcmUgY29tbWFuZC5cbiAgICovXG4gIGFzeW5jIHJlcXVpcmVDb21tYW5kKHtjb21tYW5kUGFydHN9KSB7IHRocm93IG5ldyBFcnJvcihcIidyZXF1aXJlQ29tbWFuZCcgbm90IGltcGxlbWVudGVkXCIpIH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3QXJncyAtIE5ldyBhcmdzLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXRBcmdzKG5ld0FyZ3MpIHsgdGhpcy5hcmdzID0gbmV3QXJncyB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBuZXdDb25maWd1cmF0aW9uIC0gTmV3IGNvbmZpZ3VyYXRpb24uXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldENvbmZpZ3VyYXRpb24obmV3Q29uZmlndXJhdGlvbikgeyB0aGlzLmNvbmZpZ3VyYXRpb24gPSBuZXdDb25maWd1cmF0aW9uIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IF9maWxlUGF0aCAtIEZpbGUgcGF0aC5cbiAgICogQHJldHVybnMge1Byb21pc2U8QnVmZmVyPn0gLSBGaWxlIGJ5dGVzLlxuICAgKi9cbiAgYXN5bmMgcmVhZEF0dGFjaG1lbnRJbnB1dEZpbGUoX2ZpbGVQYXRoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdHRhY2htZW50IGZpbGUgcmVhZHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBfYXJncyAtIEFyZ3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IF9hcmdzLmFsbG93ZWRQYXRoUHJlZml4ZXMgLSBBbGxvd2VkIHBhdGggcHJlZml4ZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBfYXJncy5pbnB1dFBhdGggLSBJbnB1dCBwYXRoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7YnVmZmVyOiBCdWZmZXIsIGZpbGVQYXRoOiBzdHJpbmd9Pn0gLSBSZXNvbHZlZCBwYXRoIGFuZCBmaWxlIGJ5dGVzLlxuICAgKi9cbiAgYXN5bmMgcmVzb2x2ZUF0dGFjaG1lbnRJbnB1dFBhdGgoX2FyZ3MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcIkF0dGFjaG1lbnQgcGF0aCBpbnB1dCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSAtIFRoZSBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgZ2V0Q29uZmlndXJhdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiQ29uZmlndXJhdGlvbiBoYXNuJ3QgYmVlbiBzZXRcIilcblxuICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb25cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBuZXdQcm9jZXNzQXJncyAtIE5ldyBwcm9jZXNzIGFyZ3MuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldFByb2Nlc3NBcmdzKG5ld1Byb2Nlc3NBcmdzKSB7IHRoaXMucHJvY2Vzc0FyZ3MgPSBuZXdQcm9jZXNzQXJncyB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBfYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gX2FyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gVGhlIGRlZmF1bHQgbG9nIGRpcmVjdG9yeS5cbiAgICovXG4gIGdldERlZmF1bHRMb2dEaXJlY3RvcnkoX2FyZ3MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gX2FyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IF9hcmdzLmNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gX2FyZ3MuZGlyZWN0b3J5IC0gRGlyZWN0b3J5IHBhdGguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBfYXJncy5lbnZpcm9ubWVudCAtIEVudmlyb25tZW50LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIFRoZSBsb2cgZmlsZSBwYXRoLlxuICAgKi9cbiAgZ2V0TG9nRmlsZVBhdGgoX2FyZ3MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gX2FyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IF9hcmdzLmZpbGVQYXRoIC0gRmlsZSBwYXRoLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gX2FyZ3MubWVzc2FnZSAtIE1lc3NhZ2UgdGV4dC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIHdyaXRlTG9nVG9GaWxlKF9hcmdzKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICByZXR1cm5cbiAgfVxufVxuIl19
367
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbnZpcm9ubWVudC1oYW5kbGVycy9iYXNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7OztHQUlHO0FBRUg7Ozs7OztHQU1HO0FBRUgsTUFBTSxDQUFDLE9BQU8sT0FBTywrQkFBK0I7SUFDbEQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLElBQUcsQ0FBQyxDQUFDLHFDQUFxQztJQUVwRjs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxRQUFRO1FBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQTtRQUV6RSxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUE7UUFFdkUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsR0FBRyxjQUFjLENBQUE7UUFFMUQsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLFFBQVEsRUFBRSxDQUFBO1FBQ3pCLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLEdBQUcscUJBQXFCLENBQUE7UUFDbkUsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxpQkFBaUIsQ0FBQyxjQUFjO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQTtRQUV6RSxxQkFBcUI7UUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsR0FBRyxjQUFjLENBQUE7SUFDNUQsQ0FBQztJQUVEOzs7T0FHRztJQUNILHdCQUF3QixDQUFDLGFBQWE7UUFDcEMsTUFBTSxtQkFBbUIsR0FBRyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQTtR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LENBQUMsQ0FBQyxDQUFDLHFDQUFxQztJQUVsSTs7O09BR0c7SUFDSCxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFBLENBQUMsQ0FBQztJQUV4Qzs7O09BR0c7SUFDSCxnQkFBZ0IsQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFBLENBQUMsQ0FBQztJQUU1RTs7O09BR0c7SUFDSCxLQUFLLENBQUMsdUJBQXVCLENBQUMsU0FBUztRQUNyQyxNQUFNLElBQUksS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUE7SUFDaEYsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLDBCQUEwQixDQUFDLEtBQUs7UUFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw0REFBNEQsQ0FBQyxDQUFBO0lBQy9FLENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQjtRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQTtRQUV6RSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUE7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWMsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUEsQ0FBQyxDQUFDO0lBRXBFOzs7O09BSUc7SUFDSCxzQkFBc0IsQ0FBQyxLQUFLO1FBQzFCLE9BQU8sU0FBUyxDQUFBO0lBQ2xCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxjQUFjLENBQUMsS0FBSztRQUNsQixPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUs7UUFDeEIsT0FBTTtJQUNSLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IENvbW1hbmRGaWxlT2JqZWN0VHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBDb21tYW5kIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZmlsZSAtIENvbW1hbmQgZmlsZSBwYXRoLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gTWlncmF0aW9uT2JqZWN0VHlwZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGRhdGUgLSBNaWdyYXRpb24gdGltZXN0YW1wIHBhcnNlZCBmcm9tIGZpbGVuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtmdWxsUGF0aF0gLSBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBtaWdyYXRpb24gZmlsZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtaWdyYXRpb25DbGFzc05hbWUgLSBFeHBvcnRlZCBtaWdyYXRpb24gY2xhc3MgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmaWxlIC0gTWlncmF0aW9uIGZpbGVuYW1lLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0Vudmlyb25tZW50SGFuZGxlckJhc2Uge1xuICAvKipcbiAgICogQXV0by1kaXNjb3ZlcnMgcmVzb3VyY2UgY2xhc3Nlcy4gTm8tb3AgaW4gYmFzZSBoYW5kbGVyOyBvdmVycmlkZGVuIGluIE5vZGUgaGFuZGxlci5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IF9jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBhdXRvRGlzY292ZXJSZXNvdXJjZXMoX2NvbmZpZ3VyYXRpb24pIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IF9vZmZzZXRNaW51dGVzIC0gT2Zmc2V0IGluIG1pbnV0ZXMgKERhdGUjZ2V0VGltZXpvbmVPZmZzZXQpLlxuICAgKiBAcGFyYW0geygpID0+IFByb21pc2U8YW55Pn0gY2FsbGJhY2sgLSBDYWxsYmFjayB0byBydW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59IC0gUmVzdWx0IG9mIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIGFzeW5jIHJ1bldpdGhUaW1lem9uZU9mZnNldChfb2Zmc2V0TWludXRlcywgY2FsbGJhY2spIHtcbiAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiQ29uZmlndXJhdGlvbiBoYXNuJ3QgYmVlbiBzZXRcIilcblxuICAgIGNvbnN0IHByZXZpb3VzT2Zmc2V0TWludXRlcyA9IHRoaXMuY29uZmlndXJhdGlvbi5fdGltZXpvbmVPZmZzZXRNaW51dGVzXG5cbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24uX3RpbWV6b25lT2Zmc2V0TWludXRlcyA9IF9vZmZzZXRNaW51dGVzXG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGNhbGxiYWNrKClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5jb25maWd1cmF0aW9uLl90aW1lem9uZU9mZnNldE1pbnV0ZXMgPSBwcmV2aW91c09mZnNldE1pbnV0ZXNcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IF9vZmZzZXRNaW51dGVzIC0gT2Zmc2V0IGluIG1pbnV0ZXMgKERhdGUjZ2V0VGltZXpvbmVPZmZzZXQpLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXRUaW1lem9uZU9mZnNldChfb2Zmc2V0TWludXRlcykge1xuICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJDb25maWd1cmF0aW9uIGhhc24ndCBiZWVuIHNldFwiKVxuXG4gICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gICAgdGhpcy5jb25maWd1cmF0aW9uLl90aW1lem9uZU9mZnNldE1pbnV0ZXMgPSBfb2Zmc2V0TWludXRlc1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkfSBjb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAgICogQHJldHVybnMge251bWJlcn0gLSBPZmZzZXQgaW4gbWludXRlcy5cbiAgICovXG4gIGdldFRpbWV6b25lT2Zmc2V0TWludXRlcyhjb25maWd1cmF0aW9uKSB7XG4gICAgY29uc3QgYWN0aXZlQ29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb24gfHwgdGhpcy5jb25maWd1cmF0aW9uXG5cbiAgICBpZiAoIWFjdGl2ZUNvbmZpZ3VyYXRpb24pIHRocm93IG5ldyBFcnJvcihcIkNvbmZpZ3VyYXRpb24gaGFzbid0IGJlZW4gc2V0XCIpXG5cbiAgICBpZiAodHlwZW9mIGFjdGl2ZUNvbmZpZ3VyYXRpb24uX3RpbWV6b25lT2Zmc2V0TWludXRlcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgcmV0dXJuIGFjdGl2ZUNvbmZpZ3VyYXRpb24uX3RpbWV6b25lT2Zmc2V0TWludXRlc1xuICAgIH1cblxuICAgIHJldHVybiAvKiogQHR5cGUge251bWJlcn0gKi8gKGFjdGl2ZUNvbmZpZ3VyYXRpb24uZ2V0VGltZXpvbmVPZmZzZXRNaW51dGVzKCkpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9hdXRob3JpemF0aW9uL2FiaWxpdHkuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZH0gYWJpbGl0eSAtIEFiaWxpdHkgdG8gc2V0IGZvciBjYWxsYmFjayBzY29wZS5cbiAgICogQHBhcmFtIHsoKSA9PiBQcm9taXNlPGFueT59IGNhbGxiYWNrIC0gQ2FsbGJhY2suXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59IC0gQ2FsbGJhY2sgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgcnVuV2l0aEFiaWxpdHkoYWJpbGl0eSwgY2FsbGJhY2spIHtcbiAgICB0aGlzLl9jdXJyZW50QWJpbGl0eSA9IGFiaWxpdHlcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgY2FsbGJhY2soKVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9jdXJyZW50QWJpbGl0eSA9IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2F1dGhvcml6YXRpb24vYWJpbGl0eS5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkfSBhYmlsaXR5IC0gQWJpbGl0eSB0byBzZXQuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldEN1cnJlbnRBYmlsaXR5KGFiaWxpdHkpIHtcbiAgICB0aGlzLl9jdXJyZW50QWJpbGl0eSA9IGFiaWxpdHlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vYXV0aG9yaXphdGlvbi9hYmlsaXR5LmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWR9IC0gQ3VycmVudCBhYmlsaXR5LlxuICAgKi9cbiAgZ2V0Q3VycmVudEFiaWxpdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRBYmlsaXR5XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt1bmtub3dufSB0ZW5hbnQgLSBUZW5hbnQgdG8gc2V0IGZvciBjYWxsYmFjayBzY29wZS5cbiAgICogQHBhcmFtIHsoKSA9PiBQcm9taXNlPGFueT59IGNhbGxiYWNrIC0gQ2FsbGJhY2suXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59IC0gQ2FsbGJhY2sgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgcnVuV2l0aFRlbmFudCh0ZW5hbnQsIGNhbGxiYWNrKSB7XG4gICAgdGhpcy5fY3VycmVudFRlbmFudCA9IHRlbmFudFxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBjYWxsYmFjaygpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX2N1cnJlbnRUZW5hbnQgPSB1bmRlZmluZWRcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt1bmtub3dufSB0ZW5hbnQgLSBUZW5hbnQgdG8gc2V0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXRDdXJyZW50VGVuYW50KHRlbmFudCkge1xuICAgIHRoaXMuX2N1cnJlbnRUZW5hbnQgPSB0ZW5hbnRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7dW5rbm93bn0gLSBDdXJyZW50IHRlbmFudC5cbiAgICovXG4gIGdldEN1cnJlbnRUZW5hbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRUZW5hbnRcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jbGkvYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHR9IF9jb21tYW5kIC0gQ29tbWFuZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZCByZXN1bHQuXG4gICAqL1xuICBhc3luYyBjbGlDb21tYW5kc0dlbmVyYXRlQmFzZU1vZGVscyhfY29tbWFuZCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpQ29tbWFuZHNHZW5lcmF0ZUJhc2VNb2RlbHMgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jbGkvYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHR9IF9jb21tYW5kIC0gQ29tbWFuZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZCByZXN1bHQuXG4gICAqL1xuICBhc3luYyBjbGlDb21tYW5kc0dlbmVyYXRlRnJvbnRlbmRNb2RlbHMoX2NvbW1hbmQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcImNsaUNvbW1hbmRzR2VuZXJhdGVGcm9udGVuZE1vZGVscyBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gY29tbWFuZCAtIENvbW1hbmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fSAtIFJlc29sdmVzIHdpdGggdGhlIGNvbW1hbmQgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgY2xpQ29tbWFuZHNJbml0KGNvbW1hbmQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcImNsaUNvbW1hbmRzSW5pdCBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzTWlncmF0aW9uR2VuZXJhdGUoX2NvbW1hbmQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcImNsaUNvbW1hbmRzTWlncmF0aW9uR2VuZXJhdGUgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jbGkvYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHR9IF9jb21tYW5kIC0gQ29tbWFuZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZCByZXN1bHQuXG4gICAqL1xuICBhc3luYyBjbGlDb21tYW5kc01pZ3JhdGlvbkRlc3Ryb3koX2NvbW1hbmQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcImNsaUNvbW1hbmRzTWlncmF0aW9uRGVzdHJveSBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzR2VuZXJhdGVNb2RlbChfY29tbWFuZCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpQ29tbWFuZHNHZW5lcmF0ZU1vZGVsIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzUm91dGVzKF9jb21tYW5kKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGlDb21tYW5kc1JvdXRlcyBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzQ29uc29sZShfY29tbWFuZCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpQ29tbWFuZHNDb25zb2xlIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY2xpL2Jhc2UtY29tbWFuZC5qc1wiKS5kZWZhdWx0fSBfY29tbWFuZCAtIENvbW1hbmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fSAtIFJlc29sdmVzIHdpdGggdGhlIGNvbW1hbmQgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgY2xpQ29tbWFuZHNTZXJ2ZXIoX2NvbW1hbmQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcImNsaUNvbW1hbmRzU2VydmVyIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY2xpL2Jhc2UtY29tbWFuZC5qc1wiKS5kZWZhdWx0fSBfY29tbWFuZCAtIENvbW1hbmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fSAtIFJlc29sdmVzIHdpdGggdGhlIGNvbW1hbmQgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgY2xpQ29tbWFuZHNUZXN0KF9jb21tYW5kKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGlDb21tYW5kc1Rlc3Qgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jbGkvYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHR9IF9jb21tYW5kIC0gQ29tbWFuZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZCByZXN1bHQuXG4gICAqL1xuICBhc3luYyBjbGlDb21tYW5kc0JhY2tncm91bmRKb2JzTWFpbihfY29tbWFuZCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpQ29tbWFuZHNCYWNrZ3JvdW5kSm9ic01haW4gbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jbGkvYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHR9IF9jb21tYW5kIC0gQ29tbWFuZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZCByZXN1bHQuXG4gICAqL1xuICBhc3luYyBjbGlDb21tYW5kc0JhY2tncm91bmRKb2JzV29ya2VyKF9jb21tYW5kKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGlDb21tYW5kc0JhY2tncm91bmRKb2JzV29ya2VyIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY2xpL2Jhc2UtY29tbWFuZC5qc1wiKS5kZWZhdWx0fSBfY29tbWFuZCAtIENvbW1hbmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fSAtIFJlc29sdmVzIHdpdGggdGhlIGNvbW1hbmQgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgY2xpQ29tbWFuZHNCYWNrZ3JvdW5kSm9ic1J1bm5lcihfY29tbWFuZCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpQ29tbWFuZHNCYWNrZ3JvdW5kSm9ic1J1bm5lciBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzRGJTY2hlbWFEdW1wKF9jb21tYW5kKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGlDb21tYW5kc0RiU2NoZW1hRHVtcCBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzRGJTY2hlbWFMb2FkKF9jb21tYW5kKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGlDb21tYW5kc0RiU2NoZW1hTG9hZCBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzRGJTZWVkKF9jb21tYW5kKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGlDb21tYW5kc0RiU2VlZCBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzUnVubmVyKF9jb21tYW5kKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGlDb21tYW5kc1J1bm5lciBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzUnVuU2NyaXB0KF9jb21tYW5kKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGlDb21tYW5kc1J1blNjcmlwdCBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHJldHVybnMge1Byb21pc2U8Q29tbWFuZEZpbGVPYmplY3RUeXBlW10+fSAtIFJlc29sdmVzIHdpdGggdGhlIGNvbW1hbmRzLlxuICAgKi9cbiAgYXN5bmMgZmluZENvbW1hbmRzKCkgeyB0aHJvdyBuZXcgRXJyb3IoXCJmaW5kQ29tbWFuZHMgbm90IGltcGxlbWVudGVkXCIpIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PE1pZ3JhdGlvbk9iamVjdFR5cGU+Pn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBtaWdyYXRpb25zLlxuICAgKi9cbiAgYXN5bmMgZmluZE1pZ3JhdGlvbnMoKSB7IHRocm93IG5ldyBFcnJvcihcImZpbmRNaWdyYXRpb25zIG5vdCBpbXBsZW1uZXRlZFwiKSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY2xpL2Jhc2UtY29tbWFuZC5qc1wiKS5kZWZhdWx0fSBjb21tYW5kIC0gQ29tbWFuZC5cbiAgICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vY2xpL2Jhc2UtY29tbWFuZC5qc1wiKS5kZWZhdWx0fSBDb21tYW5kQ2xhc3MgLSBDb21tYW5kIGNsYXNzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGZvcndhcmRDb21tYW5kKGNvbW1hbmQsIENvbW1hbmRDbGFzcykge1xuICAgIGNvbnN0IG5ld0NvbW1hbmQgPSBuZXcgQ29tbWFuZENsYXNzKHtcbiAgICAgIGFyZ3M6IGNvbW1hbmQuYXJncyxcbiAgICAgIGNsaTogY29tbWFuZC5jbGlcbiAgICB9KVxuXG4gICAgcmV0dXJuIGF3YWl0IG5ld0NvbW1hbmQuZXhlY3V0ZSgpXG4gIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgdmVsb2Npb3VzIHBhdGguXG4gICAqL1xuICBnZXRWZWxvY2lvdXNQYXRoKCkgeyB0aHJvdyBuZXcgRXJyb3IoXCJnZXRWZWxvY2lvdXNQYXRoIG5vdCBpbXBsZW1lbnRlZFwiKSB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuLi9yb3V0ZXMvaW5kZXguanNcIikuZGVmYXVsdD59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgaW1wb3J0IGFwcGxpY2F0aW9uIHJvdXRlcy5cbiAgICovXG4gIGFzeW5jIGltcG9ydEFwcGxpY2F0aW9uUm91dGVzKCkgeyB0aHJvdyBuZXcgRXJyb3IoXCJpbXBvcnRBcHBsaWNhdGlvblJvdXRlcyBub3QgaW1wbGVtZW50ZWRcIikgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gX3Rlc3RGaWxlcyAtIFRlc3QgZmlsZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBpbXBvcnRUZXN0RmlsZXMoX3Rlc3RGaWxlcykgeyB0aHJvdyBuZXcgRXJyb3IoXCInaW1wb3J0VGVzdEZpbGVzJyBub3QgaW1wbGVtZW50ZWRcIikgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgaW1wb3J0VGVzdGluZ0NvbmZpZ1BhdGgoKSB7IHRocm93IG5ldyBFcnJvcihgJ2ltcG9ydFRlc3RpbmdDb25maWdQYXRoJyBub3QgaW1wbGVtZW50ZWRgKSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vZGF0YWJhc2UvZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQ+fSBhcmdzLmRicyAtIERicy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIGFmdGVyTWlncmF0aW9ucyhhcmdzKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJncy5jb21tYW5kUGFydHMgLSBDb21tYW5kIHBhcnRzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx0eXBlb2YgaW1wb3J0IChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdD59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgcmVxdWlyZSBjb21tYW5kLlxuICAgKi9cbiAgYXN5bmMgcmVxdWlyZUNvbW1hbmQoe2NvbW1hbmRQYXJ0c30pIHsgdGhyb3cgbmV3IEVycm9yKFwiJ3JlcXVpcmVDb21tYW5kJyBub3QgaW1wbGVtZW50ZWRcIikgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXdBcmdzIC0gTmV3IGFyZ3MuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldEFyZ3MobmV3QXJncykgeyB0aGlzLmFyZ3MgPSBuZXdBcmdzIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IG5ld0NvbmZpZ3VyYXRpb24gLSBOZXcgY29uZmlndXJhdGlvbi5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0Q29uZmlndXJhdGlvbihuZXdDb25maWd1cmF0aW9uKSB7IHRoaXMuY29uZmlndXJhdGlvbiA9IG5ld0NvbmZpZ3VyYXRpb24gfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gX2ZpbGVQYXRoIC0gRmlsZSBwYXRoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxCdWZmZXI+fSAtIEZpbGUgYnl0ZXMuXG4gICAqL1xuICBhc3luYyByZWFkQXR0YWNobWVudElucHV0RmlsZShfZmlsZVBhdGgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcIkF0dGFjaG1lbnQgZmlsZSByZWFkcyBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGVudmlyb25tZW50XCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IF9hcmdzIC0gQXJncy5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gX2FyZ3MuYWxsb3dlZFBhdGhQcmVmaXhlcyAtIEFsbG93ZWQgcGF0aCBwcmVmaXhlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IF9hcmdzLmlucHV0UGF0aCAtIElucHV0IHBhdGguXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHtidWZmZXI6IEJ1ZmZlciwgZmlsZVBhdGg6IHN0cmluZ30+fSAtIFJlc29sdmVkIHBhdGggYW5kIGZpbGUgYnl0ZXMuXG4gICAqL1xuICBhc3luYyByZXNvbHZlQXR0YWNobWVudElucHV0UGF0aChfYXJncykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQXR0YWNobWVudCBwYXRoIGlucHV0IGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IC0gVGhlIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBnZXRDb25maWd1cmF0aW9uKCkge1xuICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJDb25maWd1cmF0aW9uIGhhc24ndCBiZWVuIHNldFwiKVxuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvblxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IG5ld1Byb2Nlc3NBcmdzIC0gTmV3IHByb2Nlc3MgYXJncy5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0UHJvY2Vzc0FyZ3MobmV3UHJvY2Vzc0FyZ3MpIHsgdGhpcy5wcm9jZXNzQXJncyA9IG5ld1Byb2Nlc3NBcmdzIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IF9hcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBfYXJncy5jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gLSBUaGUgZGVmYXVsdCBsb2cgZGlyZWN0b3J5LlxuICAgKi9cbiAgZ2V0RGVmYXVsdExvZ0RpcmVjdG9yeShfYXJncykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBfYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gX2FyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBfYXJncy5kaXJlY3RvcnkgLSBEaXJlY3RvcnkgcGF0aC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IF9hcmdzLmVudmlyb25tZW50IC0gRW52aXJvbm1lbnQuXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gVGhlIGxvZyBmaWxlIHBhdGguXG4gICAqL1xuICBnZXRMb2dGaWxlUGF0aChfYXJncykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBfYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gX2FyZ3MuZmlsZVBhdGggLSBGaWxlIHBhdGguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBfYXJncy5tZXNzYWdlIC0gTWVzc2FnZSB0ZXh0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgd3JpdGVMb2dUb0ZpbGUoX2FyZ3MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHJldHVyblxuICB9XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"frontend-models.d.ts","sourceRoot":"","sources":["../../../../../../../src/environment-handlers/node/cli/commands/generate/frontend-models.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frontend-models.d.ts","sourceRoot":"","sources":["../../../../../../../src/environment-handlers/node/cli/commands/generate/frontend-models.js"],"names":[],"mappings":"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"}
@@ -9,8 +9,9 @@ export default class DbGenerateFrontendModels extends BaseCommand {
9
9
  const configuration = this.getConfiguration();
10
10
  const backendProjects = configuration.getBackendProjects();
11
11
  await configuration.initializeModels();
12
- if (typeof configuration._autoDiscoverResources === "function") {
13
- await configuration._autoDiscoverResources();
12
+ const environmentHandler = configuration.getEnvironmentHandler();
13
+ if (typeof environmentHandler.autoDiscoverResources === "function") {
14
+ await environmentHandler.autoDiscoverResources(configuration);
14
15
  }
15
16
  if (!Array.isArray(backendProjects) || backendProjects.length === 0) {
16
17
  throw new Error("No backend projects configured. Configure 'backendProjects' in your configuration first");
@@ -621,4 +622,4 @@ export default class DbGenerateFrontendModels extends BaseCommand {
621
622
  };
622
623
  }
623
624
  }
624
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlbmQtbW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Vudmlyb25tZW50LWhhbmRsZXJzL25vZGUvY2xpL2NvbW1hbmRzL2dlbmVyYXRlL2Zyb250ZW5kLW1vZGVscy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFdBQVcsTUFBTSxvQ0FBb0MsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDNUIsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxFQUFDLGdEQUFnRCxFQUFFLHVDQUF1QyxFQUFDLE1BQU0sdURBQXVELENBQUE7QUFFL0osbUdBQW1HO0FBQ25HLE1BQU0sQ0FBQyxPQUFPLE9BQU8sd0JBQXlCLFNBQVEsV0FBVztJQUMvRCxvRUFBb0U7SUFDcEUsS0FBSyxDQUFDLE9BQU87UUFDWCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtRQUM3QyxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsa0JBQWtCLEVBQUUsQ0FBQTtRQUUxRCxNQUFNLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1FBRXRDLElBQUksT0FBTyxhQUFhLENBQUMsc0JBQXNCLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDL0QsTUFBTSxhQUFhLENBQUMsc0JBQXNCLEVBQUUsQ0FBQTtRQUM5QyxDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksZUFBZSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwRSxNQUFNLElBQUksS0FBSyxDQUFDLHlGQUF5RixDQUFDLENBQUE7UUFDNUcsQ0FBQztRQUVELDBCQUEwQjtRQUMxQixNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7UUFDckMsMEJBQTBCO1FBQzFCLE1BQU0sa0JBQWtCLEdBQUcsSUFB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QVEsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4RyxNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsU0FBUyxtQkFBbUIsZ0JBQWdCLDJCQUEyQixnQkFBZ0IsR0FBRyxDQUFDLENBQUE7UUFDdkgsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxTQUFTLG1CQUFtQixnQkFBZ0IsNkJBQTZCLENBQUMsQ0FBQTtRQUN0RyxDQUFDO1FBRUQsTUFBTSxlQUFlLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFBO1FBRTdDLE9BQU87WUFDTCxnQkFBZ0I7WUFDaEIsZUFBZTtZQUNmLGNBQWMsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDNUUsSUFBSSxFQUFFLGdCQUFnQjtTQUN2QixDQUFBO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2VDb21tYW5kIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9jbGkvYmFzZS1jb21tYW5kLmpzXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMvcHJvbWlzZXNcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQge2Zyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb25Gcm9tRGVmaW5pdGlvbiwgZnJvbnRlbmRNb2RlbFJlc291cmNlc0ZvckJhY2tlbmRQcm9qZWN0fSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vZnJvbnRlbmQtbW9kZWxzL3Jlc291cmNlLWRlZmluaXRpb24uanNcIlxuXG4vKiogTm9kZSBDTEkgY29tbWFuZCB0aGF0IGdlbmVyYXRlcyBmcm9udGVuZCBtb2RlbCBjbGFzc2VzIGZyb20gYmFja2VuZCBwcm9qZWN0IHJlc291cmNlIGNvbmZpZy4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERiR2VuZXJhdGVGcm9udGVuZE1vZGVscyBleHRlbmRzIEJhc2VDb21tYW5kIHtcbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gZmlsZXMgYXJlIGdlbmVyYXRlZC4gKi9cbiAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gdGhpcy5nZXRDb25maWd1cmF0aW9uKClcbiAgICBjb25zdCBiYWNrZW5kUHJvamVjdHMgPSBjb25maWd1cmF0aW9uLmdldEJhY2tlbmRQcm9qZWN0cygpXG5cbiAgICBhd2FpdCBjb25maWd1cmF0aW9uLmluaXRpYWxpemVNb2RlbHMoKVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWd1cmF0aW9uLl9hdXRvRGlzY292ZXJSZXNvdXJjZXMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgYXdhaXQgY29uZmlndXJhdGlvbi5fYXV0b0Rpc2NvdmVyUmVzb3VyY2VzKClcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYmFja2VuZFByb2plY3RzKSB8fCBiYWNrZW5kUHJvamVjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBiYWNrZW5kIHByb2plY3RzIGNvbmZpZ3VyZWQuIENvbmZpZ3VyZSAnYmFja2VuZFByb2plY3RzJyBpbiB5b3VyIGNvbmZpZ3VyYXRpb24gZmlyc3RcIilcbiAgICB9XG5cbiAgICAvKiogQHR5cGUge1NldDxzdHJpbmc+fSAqL1xuICAgIGNvbnN0IGdlbmVyYXRlZE1vZGVsTmFtZXMgPSBuZXcgU2V0KClcbiAgICAvKiogQHR5cGUge1NldDxzdHJpbmc+fSAqL1xuICAgIGNvbnN0IGVuc3VyZWREaXJlY3RvcmllcyA9IG5ldyBTZXQoKVxuICAgIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgQXJyYXk8e2NsYXNzTmFtZTogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nfT4+fSAqL1xuICAgIGNvbnN0IGdlbmVyYXRlZEZpbGVzQnlEaXJlY3RvcnkgPSBuZXcgTWFwKClcblxuICAgIGZvciAoY29uc3QgYmFja2VuZFByb2plY3Qgb2YgYmFja2VuZFByb2plY3RzKSB7XG4gICAgICBjb25zdCBmcm9udGVuZE1vZGVsc0RpciA9IHRoaXMuZnJvbnRlbmRNb2RlbHNEaXJlY3RvcnlGb3JCYWNrZW5kUHJvamVjdChiYWNrZW5kUHJvamVjdClcbiAgICAgIGNvbnN0IGltcG9ydFBhdGggPSB0aGlzLmltcG9ydFBhdGhGb3JGcm9udGVuZE1vZGVsc0RpcmVjdG9yeShmcm9udGVuZE1vZGVsc0RpcilcblxuICAgICAgaWYgKCFlbnN1cmVkRGlyZWN0b3JpZXMuaGFzKGZyb250ZW5kTW9kZWxzRGlyKSkge1xuICAgICAgICBhd2FpdCBmcy5ta2Rpcihmcm9udGVuZE1vZGVsc0Rpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pXG4gICAgICAgIGVuc3VyZWREaXJlY3Rvcmllcy5hZGQoZnJvbnRlbmRNb2RlbHNEaXIpXG4gICAgICB9XG5cbiAgICAgIGlmICghZ2VuZXJhdGVkRmlsZXNCeURpcmVjdG9yeS5oYXMoZnJvbnRlbmRNb2RlbHNEaXIpKSB7XG4gICAgICAgIGdlbmVyYXRlZEZpbGVzQnlEaXJlY3Rvcnkuc2V0KGZyb250ZW5kTW9kZWxzRGlyLCBbXSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2VuZXJhdGVkRmlsZXMgPSBnZW5lcmF0ZWRGaWxlc0J5RGlyZWN0b3J5LmdldChmcm9udGVuZE1vZGVsc0RpcilcblxuICAgICAgaWYgKCFnZW5lcmF0ZWRGaWxlcykgdGhyb3cgbmV3IEVycm9yKGBHZW5lcmF0ZWQgZmlsZXMgbGlzdCBtaXNzaW5nIGZvciAke2Zyb250ZW5kTW9kZWxzRGlyfWApXG4gICAgICBjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlc0ZvckJhY2tlbmRQcm9qZWN0KGJhY2tlbmRQcm9qZWN0KVxuICAgICAgY29uc3QgYXZhaWxhYmxlRnJvbnRlbmRNb2RlbENsYXNzTmFtZXMgPSB0aGlzLmF2YWlsYWJsZUZyb250ZW5kTW9kZWxDbGFzc05hbWVzKHJlc291cmNlcylcblxuICAgICAgZm9yIChjb25zdCBtb2RlbENsYXNzTmFtZSBpbiByZXNvdXJjZXMpIHtcbiAgICAgICAgY29uc3QgbW9kZWxDb25maWcgPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uRnJvbURlZmluaXRpb24ocmVzb3VyY2VzW21vZGVsQ2xhc3NOYW1lXSlcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShtb2RlbENsYXNzTmFtZS5yZXBsYWNlQWxsKFwiLVwiLCBcIl9cIikpXG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7aW5mbGVjdGlvbi5kYXNoZXJpemUoaW5mbGVjdGlvbi51bmRlcnNjb3JlKGNsYXNzTmFtZSkpfS5qc2BcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBgJHtmcm9udGVuZE1vZGVsc0Rpcn0vJHtmaWxlTmFtZX1gXG5cbiAgICAgICAgaWYgKCFtb2RlbENvbmZpZykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmcm9udGVuZCBtb2RlbCByZXNvdXJjZSBkZWZpbml0aW9uIGZvciAnJHtjbGFzc05hbWV9J2ApXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZhbGlkYXRlTW9kZWxDb25maWcoe2F2YWlsYWJsZUZyb250ZW5kTW9kZWxDbGFzc05hbWVzLCBjbGFzc05hbWUsIG1vZGVsQ29uZmlnfSlcblxuICAgICAgICBpZiAoZ2VuZXJhdGVkTW9kZWxOYW1lcy5oYXMoY2xhc3NOYW1lKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIGZyb250ZW5kIG1vZGVsIGRlZmluaXRpb24gZm9yICcke2NsYXNzTmFtZX0nYClcbiAgICAgICAgfVxuXG4gICAgICAgIGdlbmVyYXRlZE1vZGVsTmFtZXMuYWRkKGNsYXNzTmFtZSlcblxuICAgICAgICBjb25zdCBmaWxlQ29udGVudCA9IHRoaXMuYnVpbGRNb2RlbEZpbGVDb250ZW50KHtcbiAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgaW1wb3J0UGF0aCxcbiAgICAgICAgICBtb2RlbENsYXNzOiBjb25maWd1cmF0aW9uLmdldE1vZGVsQ2xhc3NlcygpW2NsYXNzTmFtZV0sXG4gICAgICAgICAgbW9kZWxDb25maWdcbiAgICAgICAgfSlcblxuICAgICAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZVBhdGgsIGZpbGVDb250ZW50KVxuICAgICAgICBnZW5lcmF0ZWRGaWxlcy5wdXNoKHtjbGFzc05hbWUsIGZpbGVOYW1lfSlcblxuICAgICAgICBjb25zb2xlLmxvZyhgY3JlYXRlIHNyYy9mcm9udGVuZC1tb2RlbHMvJHtmaWxlTmFtZX1gKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2Zyb250ZW5kTW9kZWxzRGlyLCBnZW5lcmF0ZWRGaWxlc10gb2YgZ2VuZXJhdGVkRmlsZXNCeURpcmVjdG9yeSkge1xuICAgICAgY29uc3QgaW5kZXhDb250ZW50ID0gdGhpcy5idWlsZEluZGV4RmlsZUNvbnRlbnQoZ2VuZXJhdGVkRmlsZXMpXG5cbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShgJHtmcm9udGVuZE1vZGVsc0Rpcn0vaW5kZXguanNgLCBpbmRleENvbnRlbnQpXG5cbiAgICAgIGNvbnNvbGUubG9nKFwiY3JlYXRlIHNyYy9mcm9udGVuZC1tb2RlbHMvaW5kZXguanNcIilcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gICAqIEBwYXJhbSB7U2V0PHN0cmluZz59IGFyZ3MuYXZhaWxhYmxlRnJvbnRlbmRNb2RlbENsYXNzTmFtZXMgLSBBdmFpbGFibGUgZnJvbnRlbmQgbW9kZWwgY2xhc3MgbmFtZXMgaW4gYmFja2VuZCBwcm9qZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jbGFzc05hbWUgLSBNb2RlbCBjbGFzcyBuYW1lLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGFyZ3MubW9kZWxDb25maWcgLSBNb2RlbCBjb25maWd1cmF0aW9uLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB2YWxpZGF0ZU1vZGVsQ29uZmlnKHthdmFpbGFibGVGcm9udGVuZE1vZGVsQ2xhc3NOYW1lcywgY2xhc3NOYW1lLCBtb2RlbENvbmZpZ30pIHtcbiAgICBjb25zdCBhYmlsaXRpZXMgPSBtb2RlbENvbmZpZy5hYmlsaXRpZXNcblxuICAgIGlmICghYWJpbGl0aWVzIHx8IHR5cGVvZiBhYmlsaXRpZXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTW9kZWwgJyR7Y2xhc3NOYW1lfScgaXMgbWlzc2luZyByZXF1aXJlZCAnYWJpbGl0aWVzJyBjb25maWdgKVxuICAgIH1cblxuICAgIGNvbnN0IHJlYWRBY3Rpb25zID0gW1wiaW5kZXhcIiwgXCJmaW5kXCJdXG5cbiAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiByZWFkQWN0aW9ucykge1xuICAgICAgY29uc3QgYWJpbGl0eUFjdGlvbiA9IGFiaWxpdGllc1thY3Rpb25dXG5cbiAgICAgIGlmICh0eXBlb2YgYWJpbGl0eUFjdGlvbiAhPT0gXCJzdHJpbmdcIiB8fCBhYmlsaXR5QWN0aW9uLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb2RlbCAnJHtjbGFzc05hbWV9JyBpcyBtaXNzaW5nIHJlcXVpcmVkIGFiaWxpdGllcy4ke2FjdGlvbn0gY29uZmlnYClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZWxhdGlvbnNoaXBzID0gbW9kZWxDb25maWcucmVsYXRpb25zaGlwc1xuXG4gICAgaWYgKHJlbGF0aW9uc2hpcHMgPT09IHVuZGVmaW5lZCkgcmV0dXJuXG5cbiAgICBjb25zdCBub3JtYWxpemVkUmVsYXRpb25zaGlwcyA9IHRoaXMucmVsYXRpb25zaGlwc0Zvck1vZGVsKHtjbGFzc05hbWUsIG1vZGVsQ29uZmlnfSlcblxuICAgIGZvciAoY29uc3QgcmVsYXRpb25zaGlwIG9mIG5vcm1hbGl6ZWRSZWxhdGlvbnNoaXBzKSB7XG4gICAgICBpZiAoIWF2YWlsYWJsZUZyb250ZW5kTW9kZWxDbGFzc05hbWVzLmhhcyhyZWxhdGlvbnNoaXAudGFyZ2V0Q2xhc3NOYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZGVsICcke2NsYXNzTmFtZX0nIHJlbGF0aW9uc2hpcCAnJHtyZWxhdGlvbnNoaXAucmVsYXRpb25zaGlwTmFtZX0nIHJlZmVyZW5jZXMgJyR7cmVsYXRpb25zaGlwLnRhcmdldENsYXNzTmFtZX0nLCBidXQgbm8gZnJvbnRlbmQgbW9kZWwgcmVzb3VyY2UgZXhpc3RzIGZvciB0aGF0IHRhcmdldCBpbiB0aGlzIGJhY2tlbmQgcHJvamVjdGApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vLi4vLi4vLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5CYWNrZW5kUHJvamVjdENvbmZpZ3VyYXRpb259IGJhY2tlbmRQcm9qZWN0IC0gQmFja2VuZCBwcm9qZWN0IGNvbmZpZy5cbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uLy4uLy4uLy4uLy4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlRGVmaW5pdGlvbj59IC0gUmVzb3VyY2UgZGVmaW5pdGlvbnMga2V5ZWQgYnkgbW9kZWwgY2xhc3MgbmFtZS5cbiAgICovXG4gIHJlc291cmNlc0ZvckJhY2tlbmRQcm9qZWN0KGJhY2tlbmRQcm9qZWN0KSB7XG4gICAgcmV0dXJuIGZyb250ZW5kTW9kZWxSZXNvdXJjZXNGb3JCYWNrZW5kUHJvamVjdChiYWNrZW5kUHJvamVjdClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IHJlc291cmNlcyAtIFJlc291cmNlIGNvbmZpZ3VyYXRpb24ga2V5ZWQgYnkgbW9kZWwgbmFtZS5cbiAgICogQHJldHVybnMge1NldDxzdHJpbmc+fSAtIEF2YWlsYWJsZSBmcm9udGVuZCBtb2RlbCBjbGFzcyBuYW1lcy5cbiAgICovXG4gIGF2YWlsYWJsZUZyb250ZW5kTW9kZWxDbGFzc05hbWVzKHJlc291cmNlcykge1xuICAgIC8qKiBAdHlwZSB7U2V0PHN0cmluZz59ICovXG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IG5ldyBTZXQoKVxuXG4gICAgZm9yIChjb25zdCByZXNvdXJjZU1vZGVsTmFtZSBpbiByZXNvdXJjZXMpIHtcbiAgICAgIGNsYXNzTmFtZXMuYWRkKGluZmxlY3Rpb24uY2FtZWxpemUocmVzb3VyY2VNb2RlbE5hbWUucmVwbGFjZUFsbChcIi1cIiwgXCJfXCIpKSlcbiAgICB9XG5cbiAgICByZXR1cm4gY2xhc3NOYW1lc1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e2Zyb250ZW5kTW9kZWxzT3V0cHV0UGF0aD86IHN0cmluZ319IGJhY2tlbmRQcm9qZWN0IC0gQmFja2VuZCBwcm9qZWN0IGNvbmZpZy5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBBYnNvbHV0ZSBmcm9udGVuZCBtb2RlbHMgb3V0cHV0IGRpcmVjdG9yeS5cbiAgICovXG4gIGZyb250ZW5kTW9kZWxzRGlyZWN0b3J5Rm9yQmFja2VuZFByb2plY3QoYmFja2VuZFByb2plY3QpIHtcbiAgICBjb25zdCBvdXRwdXRQYXRoID0gYmFja2VuZFByb2plY3QuZnJvbnRlbmRNb2RlbHNPdXRwdXRQYXRoIHx8IHRoaXMuZGlyZWN0b3J5KClcblxuICAgIHJldHVybiBgJHtvdXRwdXRQYXRofS9zcmMvZnJvbnRlbmQtbW9kZWxzYFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmcm9udGVuZE1vZGVsc0RpciAtIEZyb250ZW5kIG1vZGVscyBvdXRwdXQgZGlyZWN0b3J5LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIEJhc2UgY2xhc3MgaW1wb3J0IHBhdGguXG4gICAqL1xuICBpbXBvcnRQYXRoRm9yRnJvbnRlbmRNb2RlbHNEaXJlY3RvcnkoZnJvbnRlbmRNb2RlbHNEaXIpIHtcbiAgICBjb25zdCBkZXZNb2RlID0gZnJvbnRlbmRNb2RlbHNEaXIuaW5jbHVkZXMoXCIvc3BlYy9kdW1teS9zcmMvZnJvbnRlbmQtbW9kZWxzXCIpXG5cbiAgICBpZiAoZGV2TW9kZSkge1xuICAgICAgcmV0dXJuIFwiLi4vLi4vLi4vLi4vc3JjL2Zyb250ZW5kLW1vZGVscy9iYXNlLmpzXCJcbiAgICB9XG5cbiAgICByZXR1cm4gXCJ2ZWxvY2lvdXMvYnVpbGQvc3JjL2Zyb250ZW5kLW1vZGVscy9iYXNlLmpzXCJcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE1ldGhvZCBhcmdzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jbGFzc05hbWUgLSBNb2RlbCBjbGFzcyBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5pbXBvcnRQYXRoIC0gQmFzZSBjbGFzcyBpbXBvcnQgcGF0aC5cbiAgICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vLi4vLi4vLi4vLi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWR9IGFyZ3MubW9kZWxDbGFzcyAtIEJhY2tlbmQgbW9kZWwgY2xhc3MuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gYXJncy5tb2RlbENvbmZpZyAtIE1vZGVsIGNvbmZpZ3VyYXRpb24uXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gR2VuZXJhdGVkIGZpbGUgY29udGVudC5cbiAgICovXG4gIGJ1aWxkTW9kZWxGaWxlQ29udGVudCh7Y2xhc3NOYW1lLCBpbXBvcnRQYXRoLCBtb2RlbENsYXNzLCBtb2RlbENvbmZpZ30pIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVEZWZpbml0aW9uc0Zvck1vZGVsKHttb2RlbENsYXNzLCBtb2RlbENvbmZpZ30pXG4gICAgY29uc3QgcmVsYXRpb25zaGlwcyA9IHRoaXMucmVsYXRpb25zaGlwc0Zvck1vZGVsKHtjbGFzc05hbWUsIG1vZGVsQ29uZmlnfSlcbiAgICBjb25zdCBhdHRhY2htZW50cyA9IG1vZGVsQ29uZmlnLmF0dGFjaG1lbnRzICYmIHR5cGVvZiBtb2RlbENvbmZpZy5hdHRhY2htZW50cyA9PT0gXCJvYmplY3RcIlxuICAgICAgPyBtb2RlbENvbmZpZy5hdHRhY2htZW50c1xuICAgICAgOiB7fVxuICAgIGNvbnN0IGF0dHJpYnV0ZXNUeXBlTmFtZSA9IGAke2NsYXNzTmFtZX1BdHRyaWJ1dGVzYFxuICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWVzID0gYXR0cmlidXRlcy5tYXAoKGF0dHJpYnV0ZSkgPT4gYXR0cmlidXRlLm5hbWUpXG4gICAgY29uc3QgYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcyA9IHtcbiAgICAgIGNyZWF0ZTogbW9kZWxDb25maWcuYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcy5jcmVhdGUgfHwgXCJjcmVhdGVcIixcbiAgICAgIGluZGV4OiBtb2RlbENvbmZpZy5idWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzLmluZGV4IHx8IFwiaW5kZXhcIlxuICAgIH1cbiAgICBjb25zdCBidWlsdEluTWVtYmVyQ29tbWFuZHMgPSB7XG4gICAgICBhdHRhY2g6IG1vZGVsQ29uZmlnLmJ1aWx0SW5NZW1iZXJDb21tYW5kcy5hdHRhY2ggfHwgXCJhdHRhY2hcIixcbiAgICAgIGRlc3Ryb3k6IG1vZGVsQ29uZmlnLmJ1aWx0SW5NZW1iZXJDb21tYW5kcy5kZXN0cm95IHx8IFwiZGVzdHJveVwiLFxuICAgICAgZG93bmxvYWQ6IG1vZGVsQ29uZmlnLmJ1aWx0SW5NZW1iZXJDb21tYW5kcy5kb3dubG9hZCB8fCBcImRvd25sb2FkXCIsXG4gICAgICBmaW5kOiBtb2RlbENvbmZpZy5idWlsdEluTWVtYmVyQ29tbWFuZHMuZmluZCB8fCBcImZpbmRcIixcbiAgICAgIHVwZGF0ZTogbW9kZWxDb25maWcuYnVpbHRJbk1lbWJlckNvbW1hbmRzLnVwZGF0ZSB8fCBcInVwZGF0ZVwiLFxuICAgICAgdXJsOiBtb2RlbENvbmZpZy5idWlsdEluTWVtYmVyQ29tbWFuZHMudXJsIHx8IFwidXJsXCJcbiAgICB9XG4gICAgY29uc3QgY29sbGVjdGlvbkNvbW1hbmRzID0gbW9kZWxDb25maWcuY29sbGVjdGlvbkNvbW1hbmRzXG4gICAgY29uc3QgbWVtYmVyQ29tbWFuZHMgPSBtb2RlbENvbmZpZy5tZW1iZXJDb21tYW5kc1xuICAgIGNvbnN0IGJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHNBcmVEZWZhdWx0ID0gYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcy5jcmVhdGUgPT09IFwiY3JlYXRlXCIgJiYgYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcy5pbmRleCA9PT0gXCJpbmRleFwiXG4gICAgY29uc3QgYnVpbHRJbk1lbWJlckNvbW1hbmRzQXJlRGVmYXVsdCA9IGJ1aWx0SW5NZW1iZXJDb21tYW5kcy5hdHRhY2ggPT09IFwiYXR0YWNoXCJcbiAgICAgICYmIGJ1aWx0SW5NZW1iZXJDb21tYW5kcy5kZXN0cm95ID09PSBcImRlc3Ryb3lcIlxuICAgICAgJiYgYnVpbHRJbk1lbWJlckNvbW1hbmRzLmRvd25sb2FkID09PSBcImRvd25sb2FkXCJcbiAgICAgICYmIGJ1aWx0SW5NZW1iZXJDb21tYW5kcy5maW5kID09PSBcImZpbmRcIlxuICAgICAgJiYgYnVpbHRJbk1lbWJlckNvbW1hbmRzLnVwZGF0ZSA9PT0gXCJ1cGRhdGVcIlxuICAgICAgJiYgYnVpbHRJbk1lbWJlckNvbW1hbmRzLnVybCA9PT0gXCJ1cmxcIlxuXG4gICAgbGV0IGZpbGVDb250ZW50ID0gXCJcIlxuXG4gICAgZmlsZUNvbnRlbnQgKz0gYGltcG9ydCBGcm9udGVuZE1vZGVsQmFzZSBmcm9tIFwiJHtpbXBvcnRQYXRofVwiXFxuYFxuXG4gICAgZmlsZUNvbnRlbnQgKz0gXCJcXG5cIlxuICAgIGZpbGVDb250ZW50ICs9IFwiLyoqXFxuXCJcbiAgICBmaWxlQ29udGVudCArPSBgICogQHR5cGVkZWYge29iamVjdH0gJHthdHRyaWJ1dGVzVHlwZU5hbWV9XFxuYFxuICAgIGZvciAoY29uc3QgYXR0cmlidXRlIG9mIGF0dHJpYnV0ZXMpIHtcbiAgICAgIGZpbGVDb250ZW50ICs9IGAgKiBAcHJvcGVydHkgeyR7YXR0cmlidXRlLmpzRG9jVHlwZX19ICR7YXR0cmlidXRlLm5hbWV9IC0gQXR0cmlidXRlIHZhbHVlLlxcbmBcbiAgICB9XG4gICAgZmlsZUNvbnRlbnQgKz0gXCIgKi9cXG5cIlxuICAgIGZpbGVDb250ZW50ICs9IGAvKiogRnJvbnRlbmQgbW9kZWwgZm9yICR7Y2xhc3NOYW1lfS4gKi9cXG5gXG4gICAgZmlsZUNvbnRlbnQgKz0gYGV4cG9ydCBkZWZhdWx0IGNsYXNzICR7Y2xhc3NOYW1lfSBleHRlbmRzIEZyb250ZW5kTW9kZWxCYXNlIHtcXG5gXG4gICAgZmlsZUNvbnRlbnQgKz0gXCIgIC8qKiBAcmV0dXJucyB7e2F0dGFjaG1lbnRzPzogUmVjb3JkPHN0cmluZywge3R5cGU6IFxcXCJoYXNPbmVcXFwiIHwgXFxcImhhc01hbnlcXFwifT4sIGF0dHJpYnV0ZXM6IHN0cmluZ1tdLCBidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgYnVpbHRJbk1lbWJlckNvbW1hbmRzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgY29sbGVjdGlvbkNvbW1hbmRzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgbWVtYmVyQ29tbWFuZHM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBwcmltYXJ5S2V5Pzogc3RyaW5nfX0gLSBSZXNvdXJjZSBjb25maWcuICovXFxuXCJcbiAgICBmaWxlQ29udGVudCArPSBcIiAgc3RhdGljIHJlc291cmNlQ29uZmlnKCkge1xcblwiXG4gICAgZmlsZUNvbnRlbnQgKz0gXCIgICAgcmV0dXJuIHtcXG5cIlxuICAgIGlmIChtb2RlbENvbmZpZy5wYXRoKSB7XG4gICAgICBmaWxlQ29udGVudCArPSBgICAgICAgcGF0aDogJHtKU09OLnN0cmluZ2lmeShtb2RlbENvbmZpZy5wYXRoKX0sXFxuYFxuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXMoYXR0YWNobWVudHMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgICAgYXR0YWNobWVudHM6IHtcXG5cIlxuICAgICAgZm9yIChjb25zdCBbYXR0YWNobWVudE5hbWUsIGF0dGFjaG1lbnRDb25maWddIG9mIE9iamVjdC5lbnRyaWVzKGF0dGFjaG1lbnRzKSkge1xuICAgICAgICBjb25zdCBhdHRhY2htZW50VHlwZSA9IGF0dGFjaG1lbnRDb25maWcgJiYgdHlwZW9mIGF0dGFjaG1lbnRDb25maWcgPT09IFwib2JqZWN0XCIgJiYgYXR0YWNobWVudENvbmZpZy50eXBlID09PSBcImhhc01hbnlcIlxuICAgICAgICAgID8gXCJoYXNNYW55XCJcbiAgICAgICAgICA6IFwiaGFzT25lXCJcblxuICAgICAgICBmaWxlQ29udGVudCArPSBgICAgICAgICAke2F0dGFjaG1lbnROYW1lfToge3R5cGU6ICR7SlNPTi5zdHJpbmdpZnkoYXR0YWNobWVudFR5cGUpfX0sXFxuYFxuICAgICAgfVxuICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAgICB9LFxcblwiXG4gICAgfVxuICAgIGZpbGVDb250ZW50ICs9IHRoaXMuZm9ybWF0dGVkQXJyYXlQcm9wZXJ0eSh7XG4gICAgICBpbmRlbnQ6IFwiICAgICAgXCIsXG4gICAgICBwcm9wZXJ0eU5hbWU6IFwiYXR0cmlidXRlc1wiLFxuICAgICAgdmFsdWVzOiBhdHRyaWJ1dGVOYW1lc1xuICAgIH0pXG4gICAgaWYgKCFidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzQXJlRGVmYXVsdCkge1xuICAgICAgZmlsZUNvbnRlbnQgKz0gdGhpcy5mb3JtYXR0ZWRPYmplY3RQcm9wZXJ0eSh7XG4gICAgICAgIGZpbHRlckRlZmF1bHRWYWx1ZXM6IHtjcmVhdGU6IFwiY3JlYXRlXCIsIGluZGV4OiBcImluZGV4XCJ9LFxuICAgICAgICBpbmRlbnQ6IFwiICAgICAgXCIsXG4gICAgICAgIHByb3BlcnR5TmFtZTogXCJidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzXCIsXG4gICAgICAgIHZhbHVlczogYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kc1xuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKCFidWlsdEluTWVtYmVyQ29tbWFuZHNBcmVEZWZhdWx0KSB7XG4gICAgICBmaWxlQ29udGVudCArPSB0aGlzLmZvcm1hdHRlZE9iamVjdFByb3BlcnR5KHtcbiAgICAgICAgZmlsdGVyRGVmYXVsdFZhbHVlczoge1xuICAgICAgICAgIGF0dGFjaDogXCJhdHRhY2hcIixcbiAgICAgICAgICBkZXN0cm95OiBcImRlc3Ryb3lcIixcbiAgICAgICAgICBkb3dubG9hZDogXCJkb3dubG9hZFwiLFxuICAgICAgICAgIGZpbmQ6IFwiZmluZFwiLFxuICAgICAgICAgIHVwZGF0ZTogXCJ1cGRhdGVcIixcbiAgICAgICAgICB1cmw6IFwidXJsXCJcbiAgICAgICAgfSxcbiAgICAgICAgaW5kZW50OiBcIiAgICAgIFwiLFxuICAgICAgICBwcm9wZXJ0eU5hbWU6IFwiYnVpbHRJbk1lbWJlckNvbW1hbmRzXCIsXG4gICAgICAgIHZhbHVlczogYnVpbHRJbk1lbWJlckNvbW1hbmRzXG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXMoY29sbGVjdGlvbkNvbW1hbmRzKS5sZW5ndGggPiAwKSB7XG4gICAgICBmaWxlQ29udGVudCArPSB0aGlzLmZvcm1hdHRlZENvbW1hbmRzUHJvcGVydHkoe1xuICAgICAgICBpbmRlbnQ6IFwiICAgICAgXCIsXG4gICAgICAgIHByb3BlcnR5TmFtZTogXCJjb2xsZWN0aW9uQ29tbWFuZHNcIixcbiAgICAgICAgdmFsdWVzOiBjb2xsZWN0aW9uQ29tbWFuZHNcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChPYmplY3Qua2V5cyhtZW1iZXJDb21tYW5kcykubGVuZ3RoID4gMCkge1xuICAgICAgZmlsZUNvbnRlbnQgKz0gdGhpcy5mb3JtYXR0ZWRDb21tYW5kc1Byb3BlcnR5KHtcbiAgICAgICAgaW5kZW50OiBcIiAgICAgIFwiLFxuICAgICAgICBwcm9wZXJ0eU5hbWU6IFwibWVtYmVyQ29tbWFuZHNcIixcbiAgICAgICAgdmFsdWVzOiBtZW1iZXJDb21tYW5kc1xuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKG1vZGVsQ2xhc3MgJiYgbW9kZWxDbGFzcy5wcmltYXJ5S2V5KCkgIT09IFwiaWRcIikge1xuICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgICAgIHByaW1hcnlLZXk6ICR7SlNPTi5zdHJpbmdpZnkobW9kZWxDbGFzcy5wcmltYXJ5S2V5KCkpfSxcXG5gXG4gICAgfVxuICAgIGZpbGVDb250ZW50ICs9IFwiICAgIH1cXG5cIlxuICAgIGZpbGVDb250ZW50ICs9IFwiICB9XFxuXCJcblxuICAgIGlmIChyZWxhdGlvbnNoaXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZpbGVDb250ZW50ICs9IFwiXFxuXCJcbiAgICAgIGZpbGVDb250ZW50ICs9IFwiICAvKiogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHt0eXBlOiBcXFwiYmVsb25nc1RvXFxcIiB8IFxcXCJoYXNPbmVcXFwiIHwgXFxcImhhc01hbnlcXFwifT59IC0gUmVsYXRpb25zaGlwIGRlZmluaXRpb25zLiAqL1xcblwiXG4gICAgICBmaWxlQ29udGVudCArPSBcIiAgc3RhdGljIHJlbGF0aW9uc2hpcERlZmluaXRpb25zKCkge1xcblwiXG4gICAgICBmaWxlQ29udGVudCArPSBcIiAgICByZXR1cm4ge1xcblwiXG4gICAgICBmb3IgKGNvbnN0IHJlbGF0aW9uc2hpcCBvZiByZWxhdGlvbnNoaXBzKSB7XG4gICAgICAgIGZpbGVDb250ZW50ICs9IGAgICAgICAke3JlbGF0aW9uc2hpcC5yZWxhdGlvbnNoaXBOYW1lfToge3R5cGU6ICR7SlNPTi5zdHJpbmdpZnkocmVsYXRpb25zaGlwLnR5cGUpfX0sXFxuYFxuICAgICAgfVxuICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAgfVxcblwiXG4gICAgICBmaWxlQ29udGVudCArPSBcIiAgfVxcblwiXG5cbiAgICAgIGZpbGVDb250ZW50ICs9IFwiXFxuXCJcbiAgICAgIGZpbGVDb250ZW50ICs9IFwiICAvKiogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IC0gUmVsYXRpb25zaGlwIG1vZGVsIGNsYXNzIG5hbWVzLiAqL1xcblwiXG4gICAgICBmaWxlQ29udGVudCArPSBcIiAgc3RhdGljIHJlbGF0aW9uc2hpcE1vZGVsQ2xhc3NlcygpIHtcXG5cIlxuICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAgcmV0dXJuIHtcXG5cIlxuICAgICAgZm9yIChjb25zdCByZWxhdGlvbnNoaXAgb2YgcmVsYXRpb25zaGlwcykge1xuICAgICAgICBmaWxlQ29udGVudCArPSBgICAgICAgJHtyZWxhdGlvbnNoaXAucmVsYXRpb25zaGlwTmFtZX06ICR7SlNPTi5zdHJpbmdpZnkocmVsYXRpb25zaGlwLnRhcmdldENsYXNzTmFtZSl9LFxcbmBcbiAgICAgIH1cbiAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgIH1cXG5cIlxuICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgIH1cXG5cIlxuICAgIH1cblxuICAgIGZvciAoY29uc3QgYXR0cmlidXRlIG9mIGF0dHJpYnV0ZXMpIHtcbiAgICAgIGNvbnN0IGNhbWVsaXplZEF0dHJpYnV0ZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoYXR0cmlidXRlLm5hbWUsIHRydWUpXG4gICAgICBjb25zdCBjYW1lbGl6ZWRBdHRyaWJ1dGVVcHBlciA9IGluZmxlY3Rpb24uY2FtZWxpemUoYXR0cmlidXRlLm5hbWUpXG5cbiAgICAgIGZpbGVDb250ZW50ICs9IFwiXFxuXCJcbiAgICAgIGZpbGVDb250ZW50ICs9IGAgIC8qKiBAcmV0dXJucyB7JHthdHRyaWJ1dGVzVHlwZU5hbWV9WyR7SlNPTi5zdHJpbmdpZnkoYXR0cmlidXRlLm5hbWUpfV19IC0gQXR0cmlidXRlIHZhbHVlLiAqL1xcbmBcbiAgICAgIGZpbGVDb250ZW50ICs9IGAgICR7Y2FtZWxpemVkQXR0cmlidXRlfSgpIHsgcmV0dXJuIHRoaXMucmVhZEF0dHJpYnV0ZSgke0pTT04uc3RyaW5naWZ5KGF0dHJpYnV0ZS5uYW1lKX0pIH1cXG5gXG5cbiAgICAgIGZpbGVDb250ZW50ICs9IFwiXFxuXCJcbiAgICAgIGZpbGVDb250ZW50ICs9IFwiICAvKipcXG5cIlxuICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgICogQHBhcmFtIHske2F0dHJpYnV0ZXNUeXBlTmFtZX1bJHtKU09OLnN0cmluZ2lmeShhdHRyaWJ1dGUubmFtZSl9XX0gbmV3VmFsdWUgLSBOZXcgYXR0cmlidXRlIHZhbHVlLlxcbmBcbiAgICAgIGZpbGVDb250ZW50ICs9IGAgICAqIEByZXR1cm5zIHske2F0dHJpYnV0ZXNUeXBlTmFtZX1bJHtKU09OLnN0cmluZ2lmeShhdHRyaWJ1dGUubmFtZSl9XX0gLSBBc3NpZ25lZCB2YWx1ZS5cXG5gXG4gICAgICBmaWxlQ29udGVudCArPSBcIiAgICovXFxuXCJcbiAgICAgIGZpbGVDb250ZW50ICs9IGAgIHNldCR7Y2FtZWxpemVkQXR0cmlidXRlVXBwZXJ9KG5ld1ZhbHVlKSB7IHJldHVybiB0aGlzLnNldEF0dHJpYnV0ZSgke0pTT04uc3RyaW5naWZ5KGF0dHJpYnV0ZS5uYW1lKX0sIG5ld1ZhbHVlKSB9XFxuYFxuICAgIH1cblxuICAgIGZvciAoY29uc3QgbWV0aG9kTmFtZSBvZiBPYmplY3Qua2V5cyhjb2xsZWN0aW9uQ29tbWFuZHMpKSB7XG4gICAgICBmaWxlQ29udGVudCArPSBcIlxcblwiXG4gICAgICBmaWxlQ29udGVudCArPSBcIiAgLyoqXFxuXCJcbiAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IFtwYXlsb2FkPXt9XSAtIENvbW1hbmQgcGF5bG9hZC5cXG5cIlxuICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqIEByZXR1cm5zIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSAtIENvbW1hbmQgcmVzcG9uc2UuXFxuXCJcbiAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKi9cXG5cIlxuICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgc3RhdGljIGFzeW5jICR7bWV0aG9kTmFtZX0ocGF5bG9hZCA9IHt9KSB7XFxuYFxuICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZUN1c3RvbUNvbW1hbmQoe1xcblwiXG4gICAgICBmaWxlQ29udGVudCArPSBgICAgICAgY29tbWFuZE5hbWU6ICR7SlNPTi5zdHJpbmdpZnkoY29sbGVjdGlvbkNvbW1hbmRzW21ldGhvZE5hbWVdKX0sXFxuYFxuICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgICAgIGNvbW1hbmRUeXBlOiAke0pTT04uc3RyaW5naWZ5KGNvbGxlY3Rpb25Db21tYW5kc1ttZXRob2ROYW1lXSl9LFxcbmBcbiAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgICAgcGF5bG9hZCxcXG5cIlxuICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAgICByZXNvdXJjZVBhdGg6IHRoaXMucmVzb3VyY2VQYXRoKClcXG5cIlxuICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAgfSlcXG5cIlxuICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgIH1cXG5cIlxuICAgIH1cblxuICAgIGZvciAoY29uc3QgbWV0aG9kTmFtZSBvZiBPYmplY3Qua2V5cyhtZW1iZXJDb21tYW5kcykpIHtcbiAgICAgIGZpbGVDb250ZW50ICs9IFwiXFxuXCJcbiAgICAgIGZpbGVDb250ZW50ICs9IFwiICAvKipcXG5cIlxuICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gW3BheWxvYWQ9e31dIC0gQ29tbWFuZCBwYXlsb2FkLlxcblwiXG4gICAgICBmaWxlQ29udGVudCArPSBcIiAgICogQHJldHVybnMge1Byb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj59IC0gQ29tbWFuZCByZXNwb25zZS5cXG5cIlxuICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqL1xcblwiXG4gICAgICBmaWxlQ29udGVudCArPSBgICBhc3luYyAke21ldGhvZE5hbWV9KHBheWxvYWQgPSB7fSkge1xcbmBcbiAgICAgIGZpbGVDb250ZW50ICs9IGAgICAgcmV0dXJuIGF3YWl0ICR7Y2xhc3NOYW1lfS5leGVjdXRlQ3VzdG9tQ29tbWFuZCh7XFxuYFxuICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgICAgIGNvbW1hbmROYW1lOiAke0pTT04uc3RyaW5naWZ5KG1lbWJlckNvbW1hbmRzW21ldGhvZE5hbWVdKX0sXFxuYFxuICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgICAgIGNvbW1hbmRUeXBlOiAke0pTT04uc3RyaW5naWZ5KG1lbWJlckNvbW1hbmRzW21ldGhvZE5hbWVdKX0sXFxuYFxuICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAgICBtZW1iZXJJZDogdGhpcy5wcmltYXJ5S2V5VmFsdWUoKSxcXG5cIlxuICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAgICBwYXlsb2FkLFxcblwiXG4gICAgICBmaWxlQ29udGVudCArPSBgICAgICAgcmVzb3VyY2VQYXRoOiAke2NsYXNzTmFtZX0ucmVzb3VyY2VQYXRoKClcXG5gXG4gICAgICBmaWxlQ29udGVudCArPSBcIiAgICB9KVxcblwiXG4gICAgICBmaWxlQ29udGVudCArPSBcIiAgfVxcblwiXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByZWxhdGlvbnNoaXAgb2YgcmVsYXRpb25zaGlwcykge1xuICAgICAgY29uc3QgcmVsYXRpb25zaGlwTmFtZUNhbWVsaXplZCA9IGluZmxlY3Rpb24uY2FtZWxpemUocmVsYXRpb25zaGlwLnJlbGF0aW9uc2hpcE5hbWUpXG4gICAgICBjb25zdCB0YXJnZXRJbXBvcnRQYXRoID0gYC4vJHtyZWxhdGlvbnNoaXAudGFyZ2V0RmlsZU5hbWV9LmpzYFxuXG4gICAgICBpZiAocmVsYXRpb25zaGlwLnR5cGUgPT0gXCJoYXNNYW55XCIpIHtcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCJcXG5cIlxuICAgICAgICBmaWxlQ29udGVudCArPSBgICAvKiogQHJldHVybnMge2ltcG9ydCgke0pTT04uc3RyaW5naWZ5KGltcG9ydFBhdGgpfSkuRnJvbnRlbmRNb2RlbEhhc01hbnlSZWxhdGlvbnNoaXA8dHlwZW9mIGltcG9ydCgke0pTT04uc3RyaW5naWZ5KGAuLyR7aW5mbGVjdGlvbi5kYXNoZXJpemUoaW5mbGVjdGlvbi51bmRlcnNjb3JlKGNsYXNzTmFtZSkpfS5qc2ApfSkuZGVmYXVsdCwgdHlwZW9mIGltcG9ydCgke0pTT04uc3RyaW5naWZ5KHRhcmdldEltcG9ydFBhdGgpfSkuZGVmYXVsdD59IC0gUmVsYXRpb25zaGlwIGhlbHBlci4gKi9cXG5gXG4gICAgICAgIGZpbGVDb250ZW50ICs9IGAgICR7cmVsYXRpb25zaGlwLnJlbGF0aW9uc2hpcE5hbWV9KCkgeyByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoJHtKU09OLnN0cmluZ2lmeShpbXBvcnRQYXRoKX0pLkZyb250ZW5kTW9kZWxIYXNNYW55UmVsYXRpb25zaGlwPHR5cGVvZiBpbXBvcnQoJHtKU09OLnN0cmluZ2lmeShgLi8ke2luZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24udW5kZXJzY29yZShjbGFzc05hbWUpKX0uanNgKX0pLmRlZmF1bHQsIHR5cGVvZiBpbXBvcnQoJHtKU09OLnN0cmluZ2lmeSh0YXJnZXRJbXBvcnRQYXRoKX0pLmRlZmF1bHQ+fSAqLyAodGhpcy5nZXRSZWxhdGlvbnNoaXBCeU5hbWUoJHtKU09OLnN0cmluZ2lmeShyZWxhdGlvbnNoaXAucmVsYXRpb25zaGlwTmFtZSl9KSkgfVxcbmBcblxuICAgICAgICBmaWxlQ29udGVudCArPSBcIlxcblwiXG4gICAgICAgIGZpbGVDb250ZW50ICs9IGAgIC8qKiBAcmV0dXJucyB7QXJyYXk8aW1wb3J0KCR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0SW1wb3J0UGF0aCl9KS5kZWZhdWx0Pn0gLSBMb2FkZWQgcmVsYXRlZCBtb2RlbHMuICovXFxuYFxuICAgICAgICBmaWxlQ29udGVudCArPSBgICAke3JlbGF0aW9uc2hpcC5yZWxhdGlvbnNoaXBOYW1lfUxvYWRlZCgpIHsgcmV0dXJuIC8qKiBAdHlwZSB7QXJyYXk8aW1wb3J0KCR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0SW1wb3J0UGF0aCl9KS5kZWZhdWx0Pn0gKi8gKHRoaXMuZ2V0UmVsYXRpb25zaGlwQnlOYW1lKCR7SlNPTi5zdHJpbmdpZnkocmVsYXRpb25zaGlwLnJlbGF0aW9uc2hpcE5hbWUpfSkubG9hZGVkKCkpIH1cXG5gXG5cbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCJcXG5cIlxuICAgICAgICBmaWxlQ29udGVudCArPSBgICAvKiogQHJldHVybnMge1Byb21pc2U8QXJyYXk8aW1wb3J0KCR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0SW1wb3J0UGF0aCl9KS5kZWZhdWx0Pj59IC0gTG9hZGVkIHJlbGF0ZWQgbW9kZWxzLiAqL1xcbmBcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgYXN5bmMgbG9hZCR7cmVsYXRpb25zaGlwTmFtZUNhbWVsaXplZH0oKSB7IHJldHVybiAvKiogQHR5cGUge1Byb21pc2U8QXJyYXk8aW1wb3J0KCR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0SW1wb3J0UGF0aCl9KS5kZWZhdWx0Pj59ICovICh0aGlzLmxvYWRSZWxhdGlvbnNoaXAoJHtKU09OLnN0cmluZ2lmeShyZWxhdGlvbnNoaXAucmVsYXRpb25zaGlwTmFtZSl9KSkgfVxcbmBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbGVDb250ZW50ICs9IFwiXFxuXCJcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgLyoqIEByZXR1cm5zIHtpbXBvcnQoJHtKU09OLnN0cmluZ2lmeSh0YXJnZXRJbXBvcnRQYXRoKX0pLmRlZmF1bHQgfCBudWxsfSAtIExvYWRlZCByZWxhdGVkIG1vZGVsLiAqL1xcbmBcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgJHtyZWxhdGlvbnNoaXAucmVsYXRpb25zaGlwTmFtZX0oKSB7IHJldHVybiAvKiogQHR5cGUge2ltcG9ydCgke0pTT04uc3RyaW5naWZ5KHRhcmdldEltcG9ydFBhdGgpfSkuZGVmYXVsdCB8IG51bGx9ICovICh0aGlzLmdldFJlbGF0aW9uc2hpcEJ5TmFtZSgke0pTT04uc3RyaW5naWZ5KHJlbGF0aW9uc2hpcC5yZWxhdGlvbnNoaXBOYW1lKX0pLmxvYWRlZCgpKSB9XFxuYFxuXG4gICAgICAgIGZpbGVDb250ZW50ICs9IFwiXFxuXCJcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgIC8qKlxcblwiXG4gICAgICAgIGZpbGVDb250ZW50ICs9IGAgICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gW2F0dHJpYnV0ZXNdIC0gQXR0cmlidXRlcyBmb3IgdGhlIG5ldyByZWxhdGVkIG1vZGVsLlxcbmBcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgICogQHJldHVybnMge2ltcG9ydCgke0pTT04uc3RyaW5naWZ5KHRhcmdldEltcG9ydFBhdGgpfSkuZGVmYXVsdH0gLSBCdWlsdCByZWxhdGVkIG1vZGVsLlxcbmBcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqL1xcblwiXG4gICAgICAgIGZpbGVDb250ZW50ICs9IGAgIGJ1aWxkJHtyZWxhdGlvbnNoaXBOYW1lQ2FtZWxpemVkfShhdHRyaWJ1dGVzID0ge30pIHsgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KCR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0SW1wb3J0UGF0aCl9KS5kZWZhdWx0fSAqLyAodGhpcy5nZXRSZWxhdGlvbnNoaXBCeU5hbWUoJHtKU09OLnN0cmluZ2lmeShyZWxhdGlvbnNoaXAucmVsYXRpb25zaGlwTmFtZSl9KS5idWlsZChhdHRyaWJ1dGVzKSkgfVxcbmBcblxuICAgICAgICBmaWxlQ29udGVudCArPSBcIlxcblwiXG4gICAgICAgIGZpbGVDb250ZW50ICs9IGAgIC8qKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoJHtKU09OLnN0cmluZ2lmeSh0YXJnZXRJbXBvcnRQYXRoKX0pLmRlZmF1bHQgfCBudWxsPn0gLSBMb2FkZWQgcmVsYXRlZCBtb2RlbC4gKi9cXG5gXG4gICAgICAgIGZpbGVDb250ZW50ICs9IGAgIGFzeW5jIGxvYWQke3JlbGF0aW9uc2hpcE5hbWVDYW1lbGl6ZWR9KCkgeyByZXR1cm4gLyoqIEB0eXBlIHtQcm9taXNlPGltcG9ydCgke0pTT04uc3RyaW5naWZ5KHRhcmdldEltcG9ydFBhdGgpfSkuZGVmYXVsdCB8IG51bGw+fSAqLyAodGhpcy5sb2FkUmVsYXRpb25zaGlwKCR7SlNPTi5zdHJpbmdpZnkocmVsYXRpb25zaGlwLnJlbGF0aW9uc2hpcE5hbWUpfSkpIH1cXG5gXG5cbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCJcXG5cIlxuICAgICAgICBmaWxlQ29udGVudCArPSBgICAvKiogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KCR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0SW1wb3J0UGF0aCl9KS5kZWZhdWx0IHwgbnVsbD59IC0gTG9hZGVkIHJlbGF0ZWQgbW9kZWwuICovXFxuYFxuICAgICAgICBmaWxlQ29udGVudCArPSBgICBhc3luYyAke3JlbGF0aW9uc2hpcC5yZWxhdGlvbnNoaXBOYW1lfU9yTG9hZCgpIHsgcmV0dXJuIC8qKiBAdHlwZSB7UHJvbWlzZTxpbXBvcnQoJHtKU09OLnN0cmluZ2lmeSh0YXJnZXRJbXBvcnRQYXRoKX0pLmRlZmF1bHQgfCBudWxsPn0gKi8gKHRoaXMucmVsYXRpb25zaGlwT3JMb2FkKCR7SlNPTi5zdHJpbmdpZnkocmVsYXRpb25zaGlwLnJlbGF0aW9uc2hpcE5hbWUpfSkpIH1cXG5gXG5cbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCJcXG5cIlxuICAgICAgICBmaWxlQ29udGVudCArPSBgICAvKiogQHBhcmFtIHtpbXBvcnQoJHtKU09OLnN0cmluZ2lmeSh0YXJnZXRJbXBvcnRQYXRoKX0pLmRlZmF1bHQgfCBudWxsfSBtb2RlbCAtIFJlbGF0ZWQgbW9kZWwuIEByZXR1cm5zIHtpbXBvcnQoJHtKU09OLnN0cmluZ2lmeSh0YXJnZXRJbXBvcnRQYXRoKX0pLmRlZmF1bHQgfCBudWxsfSAtIEFzc2lnbmVkIHJlbGF0ZWQgbW9kZWwuICovXFxuYFxuICAgICAgICBmaWxlQ29udGVudCArPSBgICBzZXQke3JlbGF0aW9uc2hpcE5hbWVDYW1lbGl6ZWR9KG1vZGVsKSB7IHJldHVybiAvKiogQHR5cGUge2ltcG9ydCgke0pTT04uc3RyaW5naWZ5KHRhcmdldEltcG9ydFBhdGgpfSkuZGVmYXVsdCB8IG51bGx9ICovICh0aGlzLnNldFJlbGF0aW9uc2hpcCgke0pTT04uc3RyaW5naWZ5KHJlbGF0aW9uc2hpcC5yZWxhdGlvbnNoaXBOYW1lKX0sIG1vZGVsKSkgfVxcbmBcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmaWxlQ29udGVudCArPSBcIn1cXG5cIlxuICAgIGZpbGVDb250ZW50ICs9IFwiXFxuXCJcbiAgICBmaWxlQ29udGVudCArPSBgRnJvbnRlbmRNb2RlbEJhc2UucmVnaXN0ZXJNb2RlbCgke2NsYXNzTmFtZX0pXFxuYFxuXG4gICAgcmV0dXJuIGZpbGVDb250ZW50XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtBcnJheTx7Y2xhc3NOYW1lOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmd9Pn0gZ2VuZXJhdGVkRmlsZXMgLSBHZW5lcmF0ZWQgbW9kZWwgZmlsZXMuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gSW5kZXggZmlsZSBjb250ZW50IHRoYXQgaW1wb3J0cyBhbmQgcmUtZXhwb3J0cyBhbGwgbW9kZWxzLlxuICAgKi9cbiAgYnVpbGRJbmRleEZpbGVDb250ZW50KGdlbmVyYXRlZEZpbGVzKSB7XG4gICAgbGV0IGNvbnRlbnQgPSBcIlwiXG5cbiAgICBmb3IgKGNvbnN0IHtjbGFzc05hbWUsIGZpbGVOYW1lfSBvZiBnZW5lcmF0ZWRGaWxlcykge1xuICAgICAgY29udGVudCArPSBgZXhwb3J0IHtkZWZhdWx0IGFzICR7Y2xhc3NOYW1lfX0gZnJvbSBcIi4vJHtmaWxlTmFtZX1cIlxcbmBcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGVudFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gRm9ybWF0dGluZyBhcmdzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5pbmRlbnQgLSBCYXNlIGluZGVudGF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5wcm9wZXJ0eU5hbWUgLSBPYmplY3QgcHJvcGVydHkgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJncy52YWx1ZXMgLSBTdHJpbmcgdmFsdWVzLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIEZvcm1hdHRlZCBtdWx0aWxpbmUgYXJyYXkgcHJvcGVydHkuXG4gICAqL1xuICBmb3JtYXR0ZWRBcnJheVByb3BlcnR5KHtpbmRlbnQsIHByb3BlcnR5TmFtZSwgdmFsdWVzfSkge1xuICAgIGxldCBvdXRwdXQgPSBgJHtpbmRlbnR9JHtwcm9wZXJ0eU5hbWV9OiBbXFxuYFxuXG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIG91dHB1dCArPSBgJHtpbmRlbnR9ICAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX0sXFxuYFxuICAgIH1cblxuICAgIG91dHB1dCArPSBgJHtpbmRlbnR9XSxcXG5gXG5cbiAgICByZXR1cm4gb3V0cHV0XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBGb3JtYXR0aW5nIGFyZ3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmluZGVudCAtIEJhc2UgaW5kZW50YXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnByb3BlcnR5TmFtZSAtIE9iamVjdCBwcm9wZXJ0eSBuYW1lLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IGFyZ3MudmFsdWVzIC0gT2JqZWN0IGtleS12YWx1ZXMuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gW2FyZ3MuZmlsdGVyRGVmYXVsdFZhbHVlc10gLSBEZWZhdWx0IHZhbHVlcyB0byBvbWl0IGZyb20gb3V0cHV0LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIEZvcm1hdHRlZCBtdWx0aWxpbmUgb2JqZWN0IHByb3BlcnR5LlxuICAgKi9cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gRm9ybWF0dGluZyBhcmdzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5pbmRlbnQgLSBCYXNlIGluZGVudGF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5wcm9wZXJ0eU5hbWUgLSBPYmplY3QgcHJvcGVydHkgbmFtZS5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBhcmdzLnZhbHVlcyAtIENvbW1hbmQga2V5LXZhbHVlcy5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBGb3JtYXR0ZWQgcHJvcGVydHkgKGFycmF5IHdoZW4ga2V5cyBtYXRjaCB2YWx1ZXMsIG9iamVjdCBvdGhlcndpc2UpLlxuICAgKi9cbiAgZm9ybWF0dGVkQ29tbWFuZHNQcm9wZXJ0eSh7aW5kZW50LCBwcm9wZXJ0eU5hbWUsIHZhbHVlc30pIHtcbiAgICBjb25zdCBhbGxLZXlzTWF0Y2hWYWx1ZXMgPSBPYmplY3QuZW50cmllcyh2YWx1ZXMpLmV2ZXJ5KChba2V5LCB2YWx1ZV0pID0+IGtleSA9PT0gdmFsdWUpXG5cbiAgICBpZiAoYWxsS2V5c01hdGNoVmFsdWVzKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXR0ZWRBcnJheVByb3BlcnR5KHtpbmRlbnQsIHByb3BlcnR5TmFtZSwgdmFsdWVzOiBPYmplY3Qua2V5cyh2YWx1ZXMpfSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mb3JtYXR0ZWRPYmplY3RQcm9wZXJ0eSh7aW5kZW50LCBwcm9wZXJ0eU5hbWUsIHZhbHVlc30pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBGb3JtYXR0aW5nIGFyZ3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmluZGVudCAtIEJhc2UgaW5kZW50YXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnByb3BlcnR5TmFtZSAtIE9iamVjdCBwcm9wZXJ0eSBuYW1lLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IGFyZ3MudmFsdWVzIC0gT2JqZWN0IGtleS12YWx1ZXMuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gW2FyZ3MuZmlsdGVyRGVmYXVsdFZhbHVlc10gLSBEZWZhdWx0IHZhbHVlcyB0byBvbWl0IGZyb20gb3V0cHV0LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIEZvcm1hdHRlZCBtdWx0aWxpbmUgb2JqZWN0IHByb3BlcnR5LlxuICAgKi9cbiAgZm9ybWF0dGVkT2JqZWN0UHJvcGVydHkoe2ZpbHRlckRlZmF1bHRWYWx1ZXMsIGluZGVudCwgcHJvcGVydHlOYW1lLCB2YWx1ZXN9KSB7XG4gICAgbGV0IG91dHB1dCA9IGAke2luZGVudH0ke3Byb3BlcnR5TmFtZX06IHtcXG5gXG5cbiAgICBmb3IgKGNvbnN0IG9iamVjdEtleSBvZiBPYmplY3Qua2V5cyh2YWx1ZXMpKSB7XG4gICAgICBpZiAoZmlsdGVyRGVmYXVsdFZhbHVlcyAmJiBmaWx0ZXJEZWZhdWx0VmFsdWVzW29iamVjdEtleV0gPT09IHZhbHVlc1tvYmplY3RLZXldKSBjb250aW51ZVxuXG4gICAgICBvdXRwdXQgKz0gYCR7aW5kZW50fSAgJHtvYmplY3RLZXl9OiAke0pTT04uc3RyaW5naWZ5KHZhbHVlc1tvYmplY3RLZXldKX0sXFxuYFxuICAgIH1cblxuICAgIG91dHB1dCArPSBgJHtpbmRlbnR9fSxcXG5gXG5cbiAgICByZXR1cm4gb3V0cHV0XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gICAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uLy4uLy4uLy4uLy4uL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkfSBhcmdzLm1vZGVsQ2xhc3MgLSBCYWNrZW5kIG1vZGVsIGNsYXNzLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGFyZ3MubW9kZWxDb25maWcgLSBNb2RlbCBjb25maWd1cmF0aW9uLlxuICAgKiBAcmV0dXJucyB7QXJyYXk8e2pzRG9jVHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmd9Pn0gLSBBdHRyaWJ1dGUgZGVmaW5pdGlvbnMuXG4gICAqL1xuICBhdHRyaWJ1dGVEZWZpbml0aW9uc0Zvck1vZGVsKHttb2RlbENsYXNzLCBtb2RlbENvbmZpZ30pIHtcbiAgICBsZXQgYXR0cmlidXRlcyA9IG1vZGVsQ29uZmlnLmF0dHJpYnV0ZXNcblxuICAgIC8vIEF1dG8tZGVyaXZlIGF0dHJpYnV0ZXMgZnJvbSBtb2RlbCBjb2x1bW5zIHdoZW4gbm90IGV4cGxpY2l0bHkgZGVmaW5lZFxuICAgIGlmICgoIWF0dHJpYnV0ZXMgfHwgKEFycmF5LmlzQXJyYXkoYXR0cmlidXRlcykgJiYgYXR0cmlidXRlcy5sZW5ndGggPT09IDApKSAmJiBtb2RlbENsYXNzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gbW9kZWxDbGFzcy5nZXRDb2x1bW5zKClcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb2x1bW5zKSkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMgPSBjb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBpbmZsZWN0aW9uLmNhbWVsaXplKGNvbHVtbi5nZXROYW1lKCksIHRydWUpKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gTW9kZWwgbWF5IG5vdCBiZSBpbml0aWFsaXplZCB5ZXRcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShhdHRyaWJ1dGVzKSkge1xuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMubWFwKChhdHRyaWJ1dGVOYW1lKSA9PiAoe1xuICAgICAgICBqc0RvY1R5cGU6IHRoaXMuanNEb2NUeXBlRm9yRnJvbnRlbmRBdHRyaWJ1dGUoe1xuICAgICAgICAgIGF0dHJpYnV0ZUNvbmZpZzogdGhpcy5mcm9udGVuZEF0dHJpYnV0ZUNvbmZpZ0Zvck1vZGVsQXR0cmlidXRlKHthdHRyaWJ1dGVOYW1lLCBtb2RlbENsYXNzfSlcbiAgICAgICAgfSksXG4gICAgICAgIG5hbWU6IGF0dHJpYnV0ZU5hbWVcbiAgICAgIH0pKVxuICAgIH1cblxuICAgIGlmICghYXR0cmlidXRlcyB8fCB0eXBlb2YgYXR0cmlidXRlcyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAnYXR0cmlidXRlcycgYXMgYXJyYXkgb3Igb2JqZWN0IGJ1dCBnb3Q6ICR7YXR0cmlidXRlc31gKVxuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5tYXAoKGF0dHJpYnV0ZU5hbWUpID0+IHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZUNvbmZpZyA9IGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAganNEb2NUeXBlOiB0aGlzLmpzRG9jVHlwZUZvckZyb250ZW5kQXR0cmlidXRlKHthdHRyaWJ1dGVDb25maWd9KSxcbiAgICAgICAgbmFtZTogYXR0cmlidXRlTmFtZVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gICAqIEBwYXJhbSB7YW55fSBhcmdzLmF0dHJpYnV0ZUNvbmZpZyAtIEF0dHJpYnV0ZSBjb25maWd1cmF0aW9uIHZhbHVlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIEpTRG9jIHR5cGUuXG4gICAqL1xuICBqc0RvY1R5cGVGb3JGcm9udGVuZEF0dHJpYnV0ZSh7YXR0cmlidXRlQ29uZmlnfSkge1xuICAgIGNvbnN0IGpzRG9jVHlwZSA9IHRoaXMuanNEb2NUeXBlRm9yRnJvbnRlbmRBdHRyaWJ1dGVCYXNlVHlwZShhdHRyaWJ1dGVDb25maWcpXG5cbiAgICBpZiAoIXRoaXMuZnJvbnRlbmRBdHRyaWJ1dGVDYW5CZU51bGwoYXR0cmlidXRlQ29uZmlnKSkge1xuICAgICAgcmV0dXJuIGpzRG9jVHlwZVxuICAgIH1cblxuICAgIHJldHVybiBgJHtqc0RvY1R5cGV9IHwgbnVsbGBcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gYXR0cmlidXRlQ29uZmlnIC0gQXR0cmlidXRlIGNvbmZpZ3VyYXRpb24gdmFsdWUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gTm9uLW51bGxhYmxlIEpTRG9jIHR5cGUuXG4gICAqL1xuICBqc0RvY1R5cGVGb3JGcm9udGVuZEF0dHJpYnV0ZUJhc2VUeXBlKGF0dHJpYnV0ZUNvbmZpZykge1xuICAgIGlmICghYXR0cmlidXRlQ29uZmlnIHx8IHR5cGVvZiBhdHRyaWJ1dGVDb25maWcgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHJldHVybiBcImFueVwiXG4gICAgfVxuXG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZnJvbnRlbmRBdHRyaWJ1dGVUeXBlVmFsdWUoYXR0cmlidXRlQ29uZmlnKVxuXG4gICAgaWYgKHR5cGUgPT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBcImJvb2xlYW5cIlxuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImpzb25cIiB8fCB0eXBlID09IFwianNvbmJcIikge1xuICAgICAgcmV0dXJuIFwiUmVjb3JkPHN0cmluZywgYW55PlwiXG4gICAgfSBlbHNlIGlmICh0eXBlICYmIFtcImJsb2JcIiwgXCJjaGFyXCIsIFwibnZhcmNoYXJcIiwgXCJ2YXJjaGFyXCIsIFwidGV4dFwiLCBcImxvbmd0ZXh0XCIsIFwidXVpZFwiLCBcImNoYXJhY3RlciB2YXJ5aW5nXCJdLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIlxuICAgIH0gZWxzZSBpZiAodHlwZSAmJiBbXCJiaXRcIiwgXCJiaWdpbnRcIiwgXCJkZWNpbWFsXCIsIFwiZG91YmxlXCIsIFwiZG91YmxlIHByZWNpc2lvblwiLCBcImZsb2F0XCIsIFwiaW50XCIsIFwiaW50ZWdlclwiLCBcIm51bWVyaWNcIiwgXCJyZWFsXCIsIFwic21hbGxpbnRcIiwgXCJ0aW55aW50XCJdLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgICByZXR1cm4gXCJudW1iZXJcIlxuICAgIH0gZWxzZSBpZiAodHlwZSAmJiBbXCJkYXRlXCIsIFwiZGF0ZXRpbWVcIiwgXCJ0aW1lc3RhbXBcIiwgXCJ0aW1lc3RhbXAgd2l0aG91dCB0aW1lIHpvbmVcIiwgXCJ0aW1lc3RhbXB0elwiXS5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgcmV0dXJuIFwiRGF0ZVwiXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcImFueVwiXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YW55fSBhdHRyaWJ1dGVDb25maWcgLSBBdHRyaWJ1dGUgY29uZmlndXJhdGlvbiB2YWx1ZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciB0aGUgYXR0cmlidXRlIGFsbG93cyBudWxsIHZhbHVlcy5cbiAgICovXG4gIGZyb250ZW5kQXR0cmlidXRlQ2FuQmVOdWxsKGF0dHJpYnV0ZUNvbmZpZykge1xuICAgIGlmICghYXR0cmlidXRlQ29uZmlnIHx8IHR5cGVvZiBhdHRyaWJ1dGVDb25maWcgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYXR0cmlidXRlQ29uZmlnLmdldE51bGwgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gYXR0cmlidXRlQ29uZmlnLmdldE51bGwoKSA9PT0gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBhdHRyaWJ1dGVDb25maWcubnVsbCA9PT0gdHJ1ZVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YW55fSBhdHRyaWJ1dGVDb25maWcgLSBBdHRyaWJ1dGUgY29uZmlndXJhdGlvbiB2YWx1ZS5cbiAgICogQHJldHVybnMge3N0cmluZyB8IG51bGx9IC0gTm9ybWFsaXplZCBjb2x1bW4gdHlwZS5cbiAgICovXG4gIGZyb250ZW5kQXR0cmlidXRlVHlwZVZhbHVlKGF0dHJpYnV0ZUNvbmZpZykge1xuICAgIGlmICghYXR0cmlidXRlQ29uZmlnIHx8IHR5cGVvZiBhdHRyaWJ1dGVDb25maWcgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVDb25maWcuZ2V0VHlwZSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiBTdHJpbmcoYXR0cmlidXRlQ29uZmlnLmdldFR5cGUoKSlcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlVmFsdWUgPSBhdHRyaWJ1dGVDb25maWcudHlwZSB8fCBhdHRyaWJ1dGVDb25maWcuY29sdW1uVHlwZSB8fCBhdHRyaWJ1dGVDb25maWcuc3FsVHlwZSB8fCBhdHRyaWJ1dGVDb25maWcuZGF0YVR5cGVcblxuICAgIGlmICh0eXBlb2YgdHlwZVZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHJldHVybiB0eXBlVmFsdWVcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuYXR0cmlidXRlTmFtZSAtIEZyb250ZW5kIG1vZGVsIGF0dHJpYnV0ZSBuYW1lLlxuICAgKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi8uLi8uLi8uLi8uLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZH0gYXJncy5tb2RlbENsYXNzIC0gQmFja2VuZCBtb2RlbCBjbGFzcy5cbiAgICogQHJldHVybnMge2FueX0gLSBBdHRyaWJ1dGUgY29uZmlnIGluZmVycmVkIGZyb20gdGhlIGJhY2tlbmQgbW9kZWwgd2hlbiBhdmFpbGFibGUuXG4gICAqL1xuICBmcm9udGVuZEF0dHJpYnV0ZUNvbmZpZ0Zvck1vZGVsQXR0cmlidXRlKHthdHRyaWJ1dGVOYW1lLCBtb2RlbENsYXNzfSkge1xuICAgIGlmICghbW9kZWxDbGFzcykge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW5OYW1lID0gbW9kZWxDbGFzcy5nZXRBdHRyaWJ1dGVOYW1lVG9Db2x1bW5OYW1lTWFwKClbYXR0cmlidXRlTmFtZV1cblxuICAgIGlmICghY29sdW1uTmFtZSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gbW9kZWxDbGFzcy5nZXRDb2x1bW5zSGFzaCgpW2NvbHVtbk5hbWVdIHx8IG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY2xhc3NOYW1lIC0gTW9kZWwgY2xhc3MgbmFtZS5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBhcmdzLm1vZGVsQ29uZmlnIC0gTW9kZWwgY29uZmlndXJhdGlvbi5cbiAgICogQHJldHVybnMge0FycmF5PHtyZWxhdGlvbnNoaXBOYW1lOiBzdHJpbmcsIHRhcmdldENsYXNzTmFtZTogc3RyaW5nLCB0YXJnZXRGaWxlTmFtZTogc3RyaW5nLCB0eXBlOiBcImJlbG9uZ3NUb1wiIHwgXCJoYXNPbmVcIiB8IFwiaGFzTWFueVwifT59IC0gUmVsYXRpb25zaGlwcy5cbiAgICovXG4gIHJlbGF0aW9uc2hpcHNGb3JNb2RlbCh7Y2xhc3NOYW1lLCBtb2RlbENvbmZpZ30pIHtcbiAgICBjb25zdCByZWxhdGlvbnNoaXBzID0gbW9kZWxDb25maWcucmVsYXRpb25zaGlwc1xuXG4gICAgaWYgKHJlbGF0aW9uc2hpcHMgPT09IHVuZGVmaW5lZCB8fCByZWxhdGlvbnNoaXBzID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZWxhdGlvbnNoaXBzKSkge1xuICAgICAgcmV0dXJuIHJlbGF0aW9uc2hpcHMubWFwKChyZWxhdGlvbnNoaXBOYW1lKSA9PiB0aGlzLmluZmVycmVkUmVsYXRpb25zaGlwRGVmaW5pdGlvbih7Y2xhc3NOYW1lLCByZWxhdGlvbnNoaXBOYW1lfSkpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZWxhdGlvbnNoaXBzICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZGVsICcke2NsYXNzTmFtZX0nIGhhcyBpbnZhbGlkIHJlbGF0aW9uc2hpcHMgY29uZmlnYClcbiAgICB9XG5cbiAgICAvKiogQHR5cGUge0FycmF5PHtyZWxhdGlvbnNoaXBOYW1lOiBzdHJpbmcsIHRhcmdldENsYXNzTmFtZTogc3RyaW5nLCB0YXJnZXRGaWxlTmFtZTogc3RyaW5nLCB0eXBlOiBcImJlbG9uZ3NUb1wiIHwgXCJoYXNPbmVcIiB8IFwiaGFzTWFueVwifT59ICovXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IHJlbGF0aW9uc2hpcE5hbWUgaW4gcmVsYXRpb25zaGlwcykge1xuICAgICAgY29uc3QgcmVsYXRpb25zaGlwID0gcmVsYXRpb25zaGlwc1tyZWxhdGlvbnNoaXBOYW1lXVxuXG4gICAgICBpZiAocmVsYXRpb25zaGlwID09PSB0cnVlKSB7XG4gICAgICAgIG5vcm1hbGl6ZWQucHVzaCh0aGlzLmluZmVycmVkUmVsYXRpb25zaGlwRGVmaW5pdGlvbih7Y2xhc3NOYW1lLCByZWxhdGlvbnNoaXBOYW1lfSkpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmICghcmVsYXRpb25zaGlwIHx8IHR5cGVvZiByZWxhdGlvbnNoaXAgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShyZWxhdGlvbnNoaXApKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTW9kZWwgJyR7Y2xhc3NOYW1lfScgcmVsYXRpb25zaGlwICcke3JlbGF0aW9uc2hpcE5hbWV9JyBtdXN0IGJlIGFuIG9iamVjdCBvciB0cnVlYClcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVsYXRpb25zaGlwTW9kZWxOYW1lID0gcmVsYXRpb25zaGlwLm1vZGVsQ2xhc3NOYW1lIHx8IHJlbGF0aW9uc2hpcC5jbGFzc05hbWUgfHwgcmVsYXRpb25zaGlwLm1vZGVsXG4gICAgICBjb25zdCBoYXNFeHBsaWNpdFR5cGUgPSB0eXBlb2YgcmVsYXRpb25zaGlwLnR5cGUgPT09IFwic3RyaW5nXCIgJiYgcmVsYXRpb25zaGlwLnR5cGUubGVuZ3RoID4gMFxuICAgICAgY29uc3QgaGFzRXhwbGljaXRNb2RlbCA9IHR5cGVvZiByZWxhdGlvbnNoaXBNb2RlbE5hbWUgPT09IFwic3RyaW5nXCIgJiYgcmVsYXRpb25zaGlwTW9kZWxOYW1lLmxlbmd0aCA+IDBcbiAgICAgIGNvbnN0IGluZmVycmVkUmVsYXRpb25zaGlwID0gaGFzRXhwbGljaXRUeXBlICYmIGhhc0V4cGxpY2l0TW9kZWxcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy5pbmZlcnJlZFJlbGF0aW9uc2hpcERlZmluaXRpb24oe2NsYXNzTmFtZSwgcmVsYXRpb25zaGlwTmFtZX0pXG4gICAgICBjb25zdCByZWxhdGlvbnNoaXBUeXBlID0gcmVsYXRpb25zaGlwLnR5cGUgfHwgaW5mZXJyZWRSZWxhdGlvbnNoaXA/LnR5cGVcblxuICAgICAgaWYgKHJlbGF0aW9uc2hpcFR5cGUgIT09IFwiYmVsb25nc1RvXCIgJiYgcmVsYXRpb25zaGlwVHlwZSAhPT0gXCJoYXNPbmVcIiAmJiByZWxhdGlvbnNoaXBUeXBlICE9PSBcImhhc01hbnlcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZGVsICcke2NsYXNzTmFtZX0nIHJlbGF0aW9uc2hpcCAnJHtyZWxhdGlvbnNoaXBOYW1lfScgaGFzIGludmFsaWQgdHlwZSAnJHtyZWxhdGlvbnNoaXBUeXBlfSdgKVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXJnZXRDbGFzc05hbWUgPSBoYXNFeHBsaWNpdE1vZGVsXG4gICAgICAgID8gaW5mbGVjdGlvbi5jYW1lbGl6ZShTdHJpbmcocmVsYXRpb25zaGlwTW9kZWxOYW1lKS5yZXBsYWNlQWxsKFwiLVwiLCBcIl9cIikpXG4gICAgICAgIDogaW5mZXJyZWRSZWxhdGlvbnNoaXA/LnRhcmdldENsYXNzTmFtZVxuXG4gICAgICBpZiAoIXRhcmdldENsYXNzTmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZGVsICcke2NsYXNzTmFtZX0nIHJlbGF0aW9uc2hpcCAnJHtyZWxhdGlvbnNoaXBOYW1lfScgaGFzIG5vIHRhcmdldCBtb2RlbCBjbGFzc2ApXG4gICAgICB9XG5cbiAgICAgIG5vcm1hbGl6ZWQucHVzaCh7XG4gICAgICAgIHJlbGF0aW9uc2hpcE5hbWUsXG4gICAgICAgIHRhcmdldENsYXNzTmFtZSxcbiAgICAgICAgdGFyZ2V0RmlsZU5hbWU6IGluZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24udW5kZXJzY29yZSh0YXJnZXRDbGFzc05hbWUpKSxcbiAgICAgICAgdHlwZTogcmVsYXRpb25zaGlwVHlwZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jbGFzc05hbWUgLSBNb2RlbCBjbGFzcyBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5yZWxhdGlvbnNoaXBOYW1lIC0gUmVsYXRpb25zaGlwIG5hbWUuXG4gICAqIEByZXR1cm5zIHt7cmVsYXRpb25zaGlwTmFtZTogc3RyaW5nLCB0YXJnZXRDbGFzc05hbWU6IHN0cmluZywgdGFyZ2V0RmlsZU5hbWU6IHN0cmluZywgdHlwZTogXCJiZWxvbmdzVG9cIiB8IFwiaGFzT25lXCIgfCBcImhhc01hbnlcIn19IEluZmVycmVkIHJlbGF0aW9uc2hpcCBkZWZpbml0aW9uLlxuICAgKi9cbiAgaW5mZXJyZWRSZWxhdGlvbnNoaXBEZWZpbml0aW9uKHtjbGFzc05hbWUsIHJlbGF0aW9uc2hpcE5hbWV9KSB7XG4gICAgY29uc3QgbW9kZWxDbGFzcyA9IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLmdldE1vZGVsQ2xhc3MoY2xhc3NOYW1lKVxuXG4gICAgaWYgKCFtb2RlbENsYXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGJhY2tlbmQgbW9kZWwgY2xhc3MgJyR7Y2xhc3NOYW1lfScgZm9yIHJlbGF0aW9uc2hpcCAnJHtyZWxhdGlvbnNoaXBOYW1lfSdgKVxuICAgIH1cblxuICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IG1vZGVsQ2xhc3MuZ2V0UmVsYXRpb25zaGlwQnlOYW1lKHJlbGF0aW9uc2hpcE5hbWUpXG4gICAgY29uc3QgdGFyZ2V0TW9kZWxDbGFzcyA9IHJlbGF0aW9uc2hpcC5nZXRUYXJnZXRNb2RlbENsYXNzKClcbiAgICBjb25zdCByZWxhdGlvbnNoaXBUeXBlID0gcmVsYXRpb25zaGlwLmdldFR5cGUoKVxuXG4gICAgaWYgKHJlbGF0aW9uc2hpcFR5cGUgIT09IFwiYmVsb25nc1RvXCIgJiYgcmVsYXRpb25zaGlwVHlwZSAhPT0gXCJoYXNPbmVcIiAmJiByZWxhdGlvbnNoaXBUeXBlICE9PSBcImhhc01hbnlcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb2RlbCAnJHtjbGFzc05hbWV9JyByZWxhdGlvbnNoaXAgJyR7cmVsYXRpb25zaGlwTmFtZX0nIGhhcyB1bnN1cHBvcnRlZCB0eXBlICcke3JlbGF0aW9uc2hpcFR5cGV9J2ApXG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXRNb2RlbENsYXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZGVsICcke2NsYXNzTmFtZX0nIHJlbGF0aW9uc2hpcCAnJHtyZWxhdGlvbnNoaXBOYW1lfScgaGFzIG5vIHRhcmdldCBtb2RlbCBjbGFzc2ApXG4gICAgfVxuXG4gICAgY29uc3QgdGFyZ2V0Q2xhc3NOYW1lID0gdGFyZ2V0TW9kZWxDbGFzcy5uYW1lXG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVsYXRpb25zaGlwTmFtZSxcbiAgICAgIHRhcmdldENsYXNzTmFtZSxcbiAgICAgIHRhcmdldEZpbGVOYW1lOiBpbmZsZWN0aW9uLmRhc2hlcml6ZShpbmZsZWN0aW9uLnVuZGVyc2NvcmUodGFyZ2V0Q2xhc3NOYW1lKSksXG4gICAgICB0eXBlOiByZWxhdGlvbnNoaXBUeXBlXG4gICAgfVxuICB9XG59XG4iXX0=
625
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlbmQtbW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Vudmlyb25tZW50LWhhbmRsZXJzL25vZGUvY2xpL2NvbW1hbmRzL2dlbmVyYXRlL2Zyb250ZW5kLW1vZGVscy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFdBQVcsTUFBTSxvQ0FBb0MsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDNUIsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxFQUFDLGdEQUFnRCxFQUFFLHVDQUF1QyxFQUFDLE1BQU0sdURBQXVELENBQUE7QUFFL0osbUdBQW1HO0FBQ25HLE1BQU0sQ0FBQyxPQUFPLE9BQU8sd0JBQXlCLFNBQVEsV0FBVztJQUMvRCxvRUFBb0U7SUFDcEUsS0FBSyxDQUFDLE9BQU87UUFDWCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtRQUM3QyxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsa0JBQWtCLEVBQUUsQ0FBQTtRQUUxRCxNQUFNLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1FBRXRDLE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUE7UUFFaEUsSUFBSSxPQUFPLGtCQUFrQixDQUFDLHFCQUFxQixLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ25FLE1BQU0sa0JBQWtCLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDL0QsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEUsTUFBTSxJQUFJLEtBQUssQ0FBQyx5RkFBeUYsQ0FBQyxDQUFBO1FBQzVHLENBQUM7UUFFRCwwQkFBMEI7UUFDMUIsTUFBTSxtQkFBbUIs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QyxPQUFPLEVBQUUsQ0FBQTtRQUUvQyxJQUFJLGdCQUFnQixLQUFLLFdBQVcsSUFBSSxnQkFBZ0IsS0FBSyxRQUFRLElBQUksZ0JBQWdCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEcsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLFNBQVMsbUJBQW1CLGdCQUFnQiwyQkFBMkIsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFBO1FBQ3ZILENBQUM7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsU0FBUyxtQkFBbUIsZ0JBQWdCLDZCQUE2QixDQUFDLENBQUE7UUFDdEcsQ0FBQztRQUVELE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQTtRQUU3QyxPQUFPO1lBQ0wsZ0JBQWdCO1lBQ2hCLGVBQWU7WUFDZixjQUFjLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzVFLElBQUksRUFBRSxnQkFBZ0I7U0FDdkIsQ0FBQTtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCYXNlQ29tbWFuZCBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vY2xpL2Jhc2UtY29tbWFuZC5qc1wiXG5pbXBvcnQgZnMgZnJvbSBcImZzL3Byb21pc2VzXCJcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IHtmcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uRnJvbURlZmluaXRpb24sIGZyb250ZW5kTW9kZWxSZXNvdXJjZXNGb3JCYWNrZW5kUHJvamVjdH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2Zyb250ZW5kLW1vZGVscy9yZXNvdXJjZS1kZWZpbml0aW9uLmpzXCJcblxuLyoqIE5vZGUgQ0xJIGNvbW1hbmQgdGhhdCBnZW5lcmF0ZXMgZnJvbnRlbmQgbW9kZWwgY2xhc3NlcyBmcm9tIGJhY2tlbmQgcHJvamVjdCByZXNvdXJjZSBjb25maWcuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYkdlbmVyYXRlRnJvbnRlbmRNb2RlbHMgZXh0ZW5kcyBCYXNlQ29tbWFuZCB7XG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGZpbGVzIGFyZSBnZW5lcmF0ZWQuICovXG4gIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpXG4gICAgY29uc3QgYmFja2VuZFByb2plY3RzID0gY29uZmlndXJhdGlvbi5nZXRCYWNrZW5kUHJvamVjdHMoKVxuXG4gICAgYXdhaXQgY29uZmlndXJhdGlvbi5pbml0aWFsaXplTW9kZWxzKClcblxuICAgIGNvbnN0IGVudmlyb25tZW50SGFuZGxlciA9IGNvbmZpZ3VyYXRpb24uZ2V0RW52aXJvbm1lbnRIYW5kbGVyKClcblxuICAgIGlmICh0eXBlb2YgZW52aXJvbm1lbnRIYW5kbGVyLmF1dG9EaXNjb3ZlclJlc291cmNlcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBhd2FpdCBlbnZpcm9ubWVudEhhbmRsZXIuYXV0b0Rpc2NvdmVyUmVzb3VyY2VzKGNvbmZpZ3VyYXRpb24pXG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGJhY2tlbmRQcm9qZWN0cykgfHwgYmFja2VuZFByb2plY3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYmFja2VuZCBwcm9qZWN0cyBjb25maWd1cmVkLiBDb25maWd1cmUgJ2JhY2tlbmRQcm9qZWN0cycgaW4geW91ciBjb25maWd1cmF0aW9uIGZpcnN0XCIpXG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtTZXQ8c3RyaW5nPn0gKi9cbiAgICBjb25zdCBnZW5lcmF0ZWRNb2RlbE5hbWVzID0gbmV3IFNldCgpXG4gICAgLyoqIEB0eXBlIHtTZXQ8c3RyaW5nPn0gKi9cbiAgICBjb25zdCBlbnN1cmVkRGlyZWN0b3JpZXMgPSBuZXcgU2V0KClcbiAgICAvKiogQHR5cGUge01hcDxzdHJpbmcsIEFycmF5PHtjbGFzc05hbWU6IHN0cmluZywgZmlsZU5hbWU6IHN0cmluZ30+Pn0gKi9cbiAgICBjb25zdCBnZW5lcmF0ZWRGaWxlc0J5RGlyZWN0b3J5ID0gbmV3IE1hcCgpXG5cbiAgICBmb3IgKGNvbnN0IGJhY2tlbmRQcm9qZWN0IG9mIGJhY2tlbmRQcm9qZWN0cykge1xuICAgICAgY29uc3QgZnJvbnRlbmRNb2RlbHNEaXIgPSB0aGlzLmZyb250ZW5kTW9kZWxzRGlyZWN0b3J5Rm9yQmFja2VuZFByb2plY3QoYmFja2VuZFByb2plY3QpXG4gICAgICBjb25zdCBpbXBvcnRQYXRoID0gdGhpcy5pbXBvcnRQYXRoRm9yRnJvbnRlbmRNb2RlbHNEaXJlY3RvcnkoZnJvbnRlbmRNb2RlbHNEaXIpXG5cbiAgICAgIGlmICghZW5zdXJlZERpcmVjdG9yaWVzLmhhcyhmcm9udGVuZE1vZGVsc0RpcikpIHtcbiAgICAgICAgYXdhaXQgZnMubWtkaXIoZnJvbnRlbmRNb2RlbHNEaXIsIHtyZWN1cnNpdmU6IHRydWV9KVxuICAgICAgICBlbnN1cmVkRGlyZWN0b3JpZXMuYWRkKGZyb250ZW5kTW9kZWxzRGlyKVxuICAgICAgfVxuXG4gICAgICBpZiAoIWdlbmVyYXRlZEZpbGVzQnlEaXJlY3RvcnkuaGFzKGZyb250ZW5kTW9kZWxzRGlyKSkge1xuICAgICAgICBnZW5lcmF0ZWRGaWxlc0J5RGlyZWN0b3J5LnNldChmcm9udGVuZE1vZGVsc0RpciwgW10pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdlbmVyYXRlZEZpbGVzID0gZ2VuZXJhdGVkRmlsZXNCeURpcmVjdG9yeS5nZXQoZnJvbnRlbmRNb2RlbHNEaXIpXG5cbiAgICAgIGlmICghZ2VuZXJhdGVkRmlsZXMpIHRocm93IG5ldyBFcnJvcihgR2VuZXJhdGVkIGZpbGVzIGxpc3QgbWlzc2luZyBmb3IgJHtmcm9udGVuZE1vZGVsc0Rpcn1gKVxuICAgICAgY29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXNGb3JCYWNrZW5kUHJvamVjdChiYWNrZW5kUHJvamVjdClcbiAgICAgIGNvbnN0IGF2YWlsYWJsZUZyb250ZW5kTW9kZWxDbGFzc05hbWVzID0gdGhpcy5hdmFpbGFibGVGcm9udGVuZE1vZGVsQ2xhc3NOYW1lcyhyZXNvdXJjZXMpXG5cbiAgICAgIGZvciAoY29uc3QgbW9kZWxDbGFzc05hbWUgaW4gcmVzb3VyY2VzKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsQ29uZmlnID0gZnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbkZyb21EZWZpbml0aW9uKHJlc291cmNlc1ttb2RlbENsYXNzTmFtZV0pXG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUobW9kZWxDbGFzc05hbWUucmVwbGFjZUFsbChcIi1cIiwgXCJfXCIpKVxuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGAke2luZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24udW5kZXJzY29yZShjbGFzc05hbWUpKX0uanNgXG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7ZnJvbnRlbmRNb2RlbHNEaXJ9LyR7ZmlsZU5hbWV9YFxuXG4gICAgICAgIGlmICghbW9kZWxDb25maWcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZnJvbnRlbmQgbW9kZWwgcmVzb3VyY2UgZGVmaW5pdGlvbiBmb3IgJyR7Y2xhc3NOYW1lfSdgKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YWxpZGF0ZU1vZGVsQ29uZmlnKHthdmFpbGFibGVGcm9udGVuZE1vZGVsQ2xhc3NOYW1lcywgY2xhc3NOYW1lLCBtb2RlbENvbmZpZ30pXG5cbiAgICAgICAgaWYgKGdlbmVyYXRlZE1vZGVsTmFtZXMuaGFzKGNsYXNzTmFtZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSBmcm9udGVuZCBtb2RlbCBkZWZpbml0aW9uIGZvciAnJHtjbGFzc05hbWV9J2ApXG4gICAgICAgIH1cblxuICAgICAgICBnZW5lcmF0ZWRNb2RlbE5hbWVzLmFkZChjbGFzc05hbWUpXG5cbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnQgPSB0aGlzLmJ1aWxkTW9kZWxGaWxlQ29udGVudCh7XG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIGltcG9ydFBhdGgsXG4gICAgICAgICAgbW9kZWxDbGFzczogY29uZmlndXJhdGlvbi5nZXRNb2RlbENsYXNzZXMoKVtjbGFzc05hbWVdLFxuICAgICAgICAgIG1vZGVsQ29uZmlnXG4gICAgICAgIH0pXG5cbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKGZpbGVQYXRoLCBmaWxlQ29udGVudClcbiAgICAgICAgZ2VuZXJhdGVkRmlsZXMucHVzaCh7Y2xhc3NOYW1lLCBmaWxlTmFtZX0pXG5cbiAgICAgICAgY29uc29sZS5sb2coYGNyZWF0ZSBzcmMvZnJvbnRlbmQtbW9kZWxzLyR7ZmlsZU5hbWV9YClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtmcm9udGVuZE1vZGVsc0RpciwgZ2VuZXJhdGVkRmlsZXNdIG9mIGdlbmVyYXRlZEZpbGVzQnlEaXJlY3RvcnkpIHtcbiAgICAgIGNvbnN0IGluZGV4Q29udGVudCA9IHRoaXMuYnVpbGRJbmRleEZpbGVDb250ZW50KGdlbmVyYXRlZEZpbGVzKVxuXG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUoYCR7ZnJvbnRlbmRNb2RlbHNEaXJ9L2luZGV4LmpzYCwgaW5kZXhDb250ZW50KVxuXG4gICAgICBjb25zb2xlLmxvZyhcImNyZWF0ZSBzcmMvZnJvbnRlbmQtbW9kZWxzL2luZGV4LmpzXCIpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge1NldDxzdHJpbmc+fSBhcmdzLmF2YWlsYWJsZUZyb250ZW5kTW9kZWxDbGFzc05hbWVzIC0gQXZhaWxhYmxlIGZyb250ZW5kIG1vZGVsIGNsYXNzIG5hbWVzIGluIGJhY2tlbmQgcHJvamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY2xhc3NOYW1lIC0gTW9kZWwgY2xhc3MgbmFtZS5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBhcmdzLm1vZGVsQ29uZmlnIC0gTW9kZWwgY29uZmlndXJhdGlvbi5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgdmFsaWRhdGVNb2RlbENvbmZpZyh7YXZhaWxhYmxlRnJvbnRlbmRNb2RlbENsYXNzTmFtZXMsIGNsYXNzTmFtZSwgbW9kZWxDb25maWd9KSB7XG4gICAgY29uc3QgYWJpbGl0aWVzID0gbW9kZWxDb25maWcuYWJpbGl0aWVzXG5cbiAgICBpZiAoIWFiaWxpdGllcyB8fCB0eXBlb2YgYWJpbGl0aWVzICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZGVsICcke2NsYXNzTmFtZX0nIGlzIG1pc3NpbmcgcmVxdWlyZWQgJ2FiaWxpdGllcycgY29uZmlnYClcbiAgICB9XG5cbiAgICBjb25zdCByZWFkQWN0aW9ucyA9IFtcImluZGV4XCIsIFwiZmluZFwiXVxuXG4gICAgZm9yIChjb25zdCBhY3Rpb24gb2YgcmVhZEFjdGlvbnMpIHtcbiAgICAgIGNvbnN0IGFiaWxpdHlBY3Rpb24gPSBhYmlsaXRpZXNbYWN0aW9uXVxuXG4gICAgICBpZiAodHlwZW9mIGFiaWxpdHlBY3Rpb24gIT09IFwic3RyaW5nXCIgfHwgYWJpbGl0eUFjdGlvbi5sZW5ndGggPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTW9kZWwgJyR7Y2xhc3NOYW1lfScgaXMgbWlzc2luZyByZXF1aXJlZCBhYmlsaXRpZXMuJHthY3Rpb259IGNvbmZpZ2ApXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmVsYXRpb25zaGlwcyA9IG1vZGVsQ29uZmlnLnJlbGF0aW9uc2hpcHNcblxuICAgIGlmIChyZWxhdGlvbnNoaXBzID09PSB1bmRlZmluZWQpIHJldHVyblxuXG4gICAgY29uc3Qgbm9ybWFsaXplZFJlbGF0aW9uc2hpcHMgPSB0aGlzLnJlbGF0aW9uc2hpcHNGb3JNb2RlbCh7Y2xhc3NOYW1lLCBtb2RlbENvbmZpZ30pXG5cbiAgICBmb3IgKGNvbnN0IHJlbGF0aW9uc2hpcCBvZiBub3JtYWxpemVkUmVsYXRpb25zaGlwcykge1xuICAgICAgaWYgKCFhdmFpbGFibGVGcm9udGVuZE1vZGVsQ2xhc3NOYW1lcy5oYXMocmVsYXRpb25zaGlwLnRhcmdldENsYXNzTmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb2RlbCAnJHtjbGFzc05hbWV9JyByZWxhdGlvbnNoaXAgJyR7cmVsYXRpb25zaGlwLnJlbGF0aW9uc2hpcE5hbWV9JyByZWZlcmVuY2VzICcke3JlbGF0aW9uc2hpcC50YXJnZXRDbGFzc05hbWV9JywgYnV0IG5vIGZyb250ZW5kIG1vZGVsIHJlc291cmNlIGV4aXN0cyBmb3IgdGhhdCB0YXJnZXQgaW4gdGhpcyBiYWNrZW5kIHByb2plY3RgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uLy4uLy4uLy4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuQmFja2VuZFByb2plY3RDb25maWd1cmF0aW9ufSBiYWNrZW5kUHJvamVjdCAtIEJhY2tlbmQgcHJvamVjdCBjb25maWcuXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi8uLi8uLi8uLi8uLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZURlZmluaXRpb24+fSAtIFJlc291cmNlIGRlZmluaXRpb25zIGtleWVkIGJ5IG1vZGVsIGNsYXNzIG5hbWUuXG4gICAqL1xuICByZXNvdXJjZXNGb3JCYWNrZW5kUHJvamVjdChiYWNrZW5kUHJvamVjdCkge1xuICAgIHJldHVybiBmcm9udGVuZE1vZGVsUmVzb3VyY2VzRm9yQmFja2VuZFByb2plY3QoYmFja2VuZFByb2plY3QpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSByZXNvdXJjZXMgLSBSZXNvdXJjZSBjb25maWd1cmF0aW9uIGtleWVkIGJ5IG1vZGVsIG5hbWUuXG4gICAqIEByZXR1cm5zIHtTZXQ8c3RyaW5nPn0gLSBBdmFpbGFibGUgZnJvbnRlbmQgbW9kZWwgY2xhc3MgbmFtZXMuXG4gICAqL1xuICBhdmFpbGFibGVGcm9udGVuZE1vZGVsQ2xhc3NOYW1lcyhyZXNvdXJjZXMpIHtcbiAgICAvKiogQHR5cGUge1NldDxzdHJpbmc+fSAqL1xuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBuZXcgU2V0KClcblxuICAgIGZvciAoY29uc3QgcmVzb3VyY2VNb2RlbE5hbWUgaW4gcmVzb3VyY2VzKSB7XG4gICAgICBjbGFzc05hbWVzLmFkZChpbmZsZWN0aW9uLmNhbWVsaXplKHJlc291cmNlTW9kZWxOYW1lLnJlcGxhY2VBbGwoXCItXCIsIFwiX1wiKSkpXG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzTmFtZXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tmcm9udGVuZE1vZGVsc091dHB1dFBhdGg/OiBzdHJpbmd9fSBiYWNrZW5kUHJvamVjdCAtIEJhY2tlbmQgcHJvamVjdCBjb25maWcuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gQWJzb2x1dGUgZnJvbnRlbmQgbW9kZWxzIG91dHB1dCBkaXJlY3RvcnkuXG4gICAqL1xuICBmcm9udGVuZE1vZGVsc0RpcmVjdG9yeUZvckJhY2tlbmRQcm9qZWN0KGJhY2tlbmRQcm9qZWN0KSB7XG4gICAgY29uc3Qgb3V0cHV0UGF0aCA9IGJhY2tlbmRQcm9qZWN0LmZyb250ZW5kTW9kZWxzT3V0cHV0UGF0aCB8fCB0aGlzLmRpcmVjdG9yeSgpXG5cbiAgICByZXR1cm4gYCR7b3V0cHV0UGF0aH0vc3JjL2Zyb250ZW5kLW1vZGVsc2BcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZnJvbnRlbmRNb2RlbHNEaXIgLSBGcm9udGVuZCBtb2RlbHMgb3V0cHV0IGRpcmVjdG9yeS5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBCYXNlIGNsYXNzIGltcG9ydCBwYXRoLlxuICAgKi9cbiAgaW1wb3J0UGF0aEZvckZyb250ZW5kTW9kZWxzRGlyZWN0b3J5KGZyb250ZW5kTW9kZWxzRGlyKSB7XG4gICAgY29uc3QgZGV2TW9kZSA9IGZyb250ZW5kTW9kZWxzRGlyLmluY2x1ZGVzKFwiL3NwZWMvZHVtbXkvc3JjL2Zyb250ZW5kLW1vZGVsc1wiKVxuXG4gICAgaWYgKGRldk1vZGUpIHtcbiAgICAgIHJldHVybiBcIi4uLy4uLy4uLy4uL3NyYy9mcm9udGVuZC1tb2RlbHMvYmFzZS5qc1wiXG4gICAgfVxuXG4gICAgcmV0dXJuIFwidmVsb2Npb3VzL2J1aWxkL3NyYy9mcm9udGVuZC1tb2RlbHMvYmFzZS5qc1wiXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBNZXRob2QgYXJncy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY2xhc3NOYW1lIC0gTW9kZWwgY2xhc3MgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuaW1wb3J0UGF0aCAtIEJhc2UgY2xhc3MgaW1wb3J0IHBhdGguXG4gICAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uLy4uLy4uLy4uLy4uL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkfSBhcmdzLm1vZGVsQ2xhc3MgLSBCYWNrZW5kIG1vZGVsIGNsYXNzLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGFyZ3MubW9kZWxDb25maWcgLSBNb2RlbCBjb25maWd1cmF0aW9uLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIEdlbmVyYXRlZCBmaWxlIGNvbnRlbnQuXG4gICAqL1xuICBidWlsZE1vZGVsRmlsZUNvbnRlbnQoe2NsYXNzTmFtZSwgaW1wb3J0UGF0aCwgbW9kZWxDbGFzcywgbW9kZWxDb25maWd9KSB7XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlRGVmaW5pdGlvbnNGb3JNb2RlbCh7bW9kZWxDbGFzcywgbW9kZWxDb25maWd9KVxuICAgIGNvbnN0IHJlbGF0aW9uc2hpcHMgPSB0aGlzLnJlbGF0aW9uc2hpcHNGb3JNb2RlbCh7Y2xhc3NOYW1lLCBtb2RlbENvbmZpZ30pXG4gICAgY29uc3QgYXR0YWNobWVudHMgPSBtb2RlbENvbmZpZy5hdHRhY2htZW50cyAmJiB0eXBlb2YgbW9kZWxDb25maWcuYXR0YWNobWVudHMgPT09IFwib2JqZWN0XCJcbiAgICAgID8gbW9kZWxDb25maWcuYXR0YWNobWVudHNcbiAgICAgIDoge31cbiAgICBjb25zdCBhdHRyaWJ1dGVzVHlwZU5hbWUgPSBgJHtjbGFzc05hbWV9QXR0cmlidXRlc2BcbiAgICBjb25zdCBhdHRyaWJ1dGVOYW1lcyA9IGF0dHJpYnV0ZXMubWFwKChhdHRyaWJ1dGUpID0+IGF0dHJpYnV0ZS5uYW1lKVxuICAgIGNvbnN0IGJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHMgPSB7XG4gICAgICBjcmVhdGU6IG1vZGVsQ29uZmlnLmJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHMuY3JlYXRlIHx8IFwiY3JlYXRlXCIsXG4gICAgICBpbmRleDogbW9kZWxDb25maWcuYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcy5pbmRleCB8fCBcImluZGV4XCJcbiAgICB9XG4gICAgY29uc3QgYnVpbHRJbk1lbWJlckNvbW1hbmRzID0ge1xuICAgICAgYXR0YWNoOiBtb2RlbENvbmZpZy5idWlsdEluTWVtYmVyQ29tbWFuZHMuYXR0YWNoIHx8IFwiYXR0YWNoXCIsXG4gICAgICBkZXN0cm95OiBtb2RlbENvbmZpZy5idWlsdEluTWVtYmVyQ29tbWFuZHMuZGVzdHJveSB8fCBcImRlc3Ryb3lcIixcbiAgICAgIGRvd25sb2FkOiBtb2RlbENvbmZpZy5idWlsdEluTWVtYmVyQ29tbWFuZHMuZG93bmxvYWQgfHwgXCJkb3dubG9hZFwiLFxuICAgICAgZmluZDogbW9kZWxDb25maWcuYnVpbHRJbk1lbWJlckNvbW1hbmRzLmZpbmQgfHwgXCJmaW5kXCIsXG4gICAgICB1cGRhdGU6IG1vZGVsQ29uZmlnLmJ1aWx0SW5NZW1iZXJDb21tYW5kcy51cGRhdGUgfHwgXCJ1cGRhdGVcIixcbiAgICAgIHVybDogbW9kZWxDb25maWcuYnVpbHRJbk1lbWJlckNvbW1hbmRzLnVybCB8fCBcInVybFwiXG4gICAgfVxuICAgIGNvbnN0IGNvbGxlY3Rpb25Db21tYW5kcyA9IG1vZGVsQ29uZmlnLmNvbGxlY3Rpb25Db21tYW5kc1xuICAgIGNvbnN0IG1lbWJlckNvbW1hbmRzID0gbW9kZWxDb25maWcubWVtYmVyQ29tbWFuZHNcbiAgICBjb25zdCBidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzQXJlRGVmYXVsdCA9IGJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHMuY3JlYXRlID09PSBcImNyZWF0ZVwiICYmIGJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHMuaW5kZXggPT09IFwiaW5kZXhcIlxuICAgIGNvbnN0IGJ1aWx0SW5NZW1iZXJDb21tYW5kc0FyZURlZmF1bHQgPSBidWlsdEluTWVtYmVyQ29tbWFuZHMuYXR0YWNoID09PSBcImF0dGFjaFwiXG4gICAgICAmJiBidWlsdEluTWVtYmVyQ29tbWFuZHMuZGVzdHJveSA9PT0gXCJkZXN0cm95XCJcbiAgICAgICYmIGJ1aWx0SW5NZW1iZXJDb21tYW5kcy5kb3dubG9hZCA9PT0gXCJkb3dubG9hZFwiXG4gICAgICAmJiBidWlsdEluTWVtYmVyQ29tbWFuZHMuZmluZCA9PT0gXCJmaW5kXCJcbiAgICAgICYmIGJ1aWx0SW5NZW1iZXJDb21tYW5kcy51cGRhdGUgPT09IFwidXBkYXRlXCJcbiAgICAgICYmIGJ1aWx0SW5NZW1iZXJDb21tYW5kcy51cmwgPT09IFwidXJsXCJcblxuICAgIGxldCBmaWxlQ29udGVudCA9IFwiXCJcblxuICAgIGZpbGVDb250ZW50ICs9IGBpbXBvcnQgRnJvbnRlbmRNb2RlbEJhc2UgZnJvbSBcIiR7aW1wb3J0UGF0aH1cIlxcbmBcblxuICAgIGZpbGVDb250ZW50ICs9IFwiXFxuXCJcbiAgICBmaWxlQ29udGVudCArPSBcIi8qKlxcblwiXG4gICAgZmlsZUNvbnRlbnQgKz0gYCAqIEB0eXBlZGVmIHtvYmplY3R9ICR7YXR0cmlidXRlc1R5cGVOYW1lfVxcbmBcbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzKSB7XG4gICAgICBmaWxlQ29udGVudCArPSBgICogQHByb3BlcnR5IHske2F0dHJpYnV0ZS5qc0RvY1R5cGV9fSAke2F0dHJpYnV0ZS5uYW1lfSAtIEF0dHJpYnV0ZSB2YWx1ZS5cXG5gXG4gICAgfVxuICAgIGZpbGVDb250ZW50ICs9IFwiICovXFxuXCJcbiAgICBmaWxlQ29udGVudCArPSBgLyoqIEZyb250ZW5kIG1vZGVsIGZvciAke2NsYXNzTmFtZX0uICovXFxuYFxuICAgIGZpbGVDb250ZW50ICs9IGBleHBvcnQgZGVmYXVsdCBjbGFzcyAke2NsYXNzTmFtZX0gZXh0ZW5kcyBGcm9udGVuZE1vZGVsQmFzZSB7XFxuYFxuICAgIGZpbGVDb250ZW50ICs9IFwiICAvKiogQHJldHVybnMge3thdHRhY2htZW50cz86IFJlY29yZDxzdHJpbmcsIHt0eXBlOiBcXFwiaGFzT25lXFxcIiB8IFxcXCJoYXNNYW55XFxcIn0+LCBhdHRyaWJ1dGVzOiBzdHJpbmdbXSwgYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGJ1aWx0SW5NZW1iZXJDb21tYW5kcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGNvbGxlY3Rpb25Db21tYW5kcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIG1lbWJlckNvbW1hbmRzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgcHJpbWFyeUtleT86IHN0cmluZ319IC0gUmVzb3VyY2UgY29uZmlnLiAqL1xcblwiXG4gICAgZmlsZUNvbnRlbnQgKz0gXCIgIHN0YXRpYyByZXNvdXJjZUNvbmZpZygpIHtcXG5cIlxuICAgIGZpbGVDb250ZW50ICs9IFwiICAgIHJldHVybiB7XFxuXCJcbiAgICBpZiAobW9kZWxDb25maWcucGF0aCkge1xuICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgICAgIHBhdGg6ICR7SlNPTi5zdHJpbmdpZnkobW9kZWxDb25maWcucGF0aCl9LFxcbmBcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKGF0dGFjaG1lbnRzKS5sZW5ndGggPiAwKSB7XG4gICAgICBmaWxlQ29udGVudCArPSBcIiAgICAgIGF0dGFjaG1lbnRzOiB7XFxuXCJcbiAgICAgIGZvciAoY29uc3QgW2F0dGFjaG1lbnROYW1lLCBhdHRhY2htZW50Q29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhhdHRhY2htZW50cykpIHtcbiAgICAgICAgY29uc3QgYXR0YWNobWVudFR5cGUgPSBhdHRhY2htZW50Q29uZmlnICYmIHR5cGVvZiBhdHRhY2htZW50Q29uZmlnID09PSBcIm9iamVjdFwiICYmIGF0dGFjaG1lbnRDb25maWcudHlwZSA9PT0gXCJoYXNNYW55XCJcbiAgICAgICAgICA/IFwiaGFzTWFueVwiXG4gICAgICAgICAgOiBcImhhc09uZVwiXG5cbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgICAgICAgJHthdHRhY2htZW50TmFtZX06IHt0eXBlOiAke0pTT04uc3RyaW5naWZ5KGF0dGFjaG1lbnRUeXBlKX19LFxcbmBcbiAgICAgIH1cbiAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgICAgfSxcXG5cIlxuICAgIH1cbiAgICBmaWxlQ29udGVudCArPSB0aGlzLmZvcm1hdHRlZEFycmF5UHJvcGVydHkoe1xuICAgICAgaW5kZW50OiBcIiAgICAgIFwiLFxuICAgICAgcHJvcGVydHlOYW1lOiBcImF0dHJpYnV0ZXNcIixcbiAgICAgIHZhbHVlczogYXR0cmlidXRlTmFtZXNcbiAgICB9KVxuICAgIGlmICghYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kc0FyZURlZmF1bHQpIHtcbiAgICAgIGZpbGVDb250ZW50ICs9IHRoaXMuZm9ybWF0dGVkT2JqZWN0UHJvcGVydHkoe1xuICAgICAgICBmaWx0ZXJEZWZhdWx0VmFsdWVzOiB7Y3JlYXRlOiBcImNyZWF0ZVwiLCBpbmRleDogXCJpbmRleFwifSxcbiAgICAgICAgaW5kZW50OiBcIiAgICAgIFwiLFxuICAgICAgICBwcm9wZXJ0eU5hbWU6IFwiYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kc1wiLFxuICAgICAgICB2YWx1ZXM6IGJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHNcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmICghYnVpbHRJbk1lbWJlckNvbW1hbmRzQXJlRGVmYXVsdCkge1xuICAgICAgZmlsZUNvbnRlbnQgKz0gdGhpcy5mb3JtYXR0ZWRPYmplY3RQcm9wZXJ0eSh7XG4gICAgICAgIGZpbHRlckRlZmF1bHRWYWx1ZXM6IHtcbiAgICAgICAgICBhdHRhY2g6IFwiYXR0YWNoXCIsXG4gICAgICAgICAgZGVzdHJveTogXCJkZXN0cm95XCIsXG4gICAgICAgICAgZG93bmxvYWQ6IFwiZG93bmxvYWRcIixcbiAgICAgICAgICBmaW5kOiBcImZpbmRcIixcbiAgICAgICAgICB1cGRhdGU6IFwidXBkYXRlXCIsXG4gICAgICAgICAgdXJsOiBcInVybFwiXG4gICAgICAgIH0sXG4gICAgICAgIGluZGVudDogXCIgICAgICBcIixcbiAgICAgICAgcHJvcGVydHlOYW1lOiBcImJ1aWx0SW5NZW1iZXJDb21tYW5kc1wiLFxuICAgICAgICB2YWx1ZXM6IGJ1aWx0SW5NZW1iZXJDb21tYW5kc1xuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKGNvbGxlY3Rpb25Db21tYW5kcykubGVuZ3RoID4gMCkge1xuICAgICAgZmlsZUNvbnRlbnQgKz0gdGhpcy5mb3JtYXR0ZWRDb21tYW5kc1Byb3BlcnR5KHtcbiAgICAgICAgaW5kZW50OiBcIiAgICAgIFwiLFxuICAgICAgICBwcm9wZXJ0eU5hbWU6IFwiY29sbGVjdGlvbkNvbW1hbmRzXCIsXG4gICAgICAgIHZhbHVlczogY29sbGVjdGlvbkNvbW1hbmRzXG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXMobWVtYmVyQ29tbWFuZHMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGZpbGVDb250ZW50ICs9IHRoaXMuZm9ybWF0dGVkQ29tbWFuZHNQcm9wZXJ0eSh7XG4gICAgICAgIGluZGVudDogXCIgICAgICBcIixcbiAgICAgICAgcHJvcGVydHlOYW1lOiBcIm1lbWJlckNvbW1hbmRzXCIsXG4gICAgICAgIHZhbHVlczogbWVtYmVyQ29tbWFuZHNcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChtb2RlbENsYXNzICYmIG1vZGVsQ2xhc3MucHJpbWFyeUtleSgpICE9PSBcImlkXCIpIHtcbiAgICAgIGZpbGVDb250ZW50ICs9IGAgICAgICBwcmltYXJ5S2V5OiAke0pTT04uc3RyaW5naWZ5KG1vZGVsQ2xhc3MucHJpbWFyeUtleSgpKX0sXFxuYFxuICAgIH1cbiAgICBmaWxlQ29udGVudCArPSBcIiAgICB9XFxuXCJcbiAgICBmaWxlQ29udGVudCArPSBcIiAgfVxcblwiXG5cbiAgICBpZiAocmVsYXRpb25zaGlwcy5sZW5ndGggPiAwKSB7XG4gICAgICBmaWxlQ29udGVudCArPSBcIlxcblwiXG4gICAgICBmaWxlQ29udGVudCArPSBcIiAgLyoqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCB7dHlwZTogXFxcImJlbG9uZ3NUb1xcXCIgfCBcXFwiaGFzT25lXFxcIiB8IFxcXCJoYXNNYW55XFxcIn0+fSAtIFJlbGF0aW9uc2hpcCBkZWZpbml0aW9ucy4gKi9cXG5cIlxuICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgIHN0YXRpYyByZWxhdGlvbnNoaXBEZWZpbml0aW9ucygpIHtcXG5cIlxuICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAgcmV0dXJuIHtcXG5cIlxuICAgICAgZm9yIChjb25zdCByZWxhdGlvbnNoaXAgb2YgcmVsYXRpb25zaGlwcykge1xuICAgICAgICBmaWxlQ29udGVudCArPSBgICAgICAgJHtyZWxhdGlvbnNoaXAucmVsYXRpb25zaGlwTmFtZX06IHt0eXBlOiAke0pTT04uc3RyaW5naWZ5KHJlbGF0aW9uc2hpcC50eXBlKX19LFxcbmBcbiAgICAgIH1cbiAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgIH1cXG5cIlxuICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgIH1cXG5cIlxuXG4gICAgICBmaWxlQ29udGVudCArPSBcIlxcblwiXG4gICAgICBmaWxlQ29udGVudCArPSBcIiAgLyoqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAtIFJlbGF0aW9uc2hpcCBtb2RlbCBjbGFzcyBuYW1lcy4gKi9cXG5cIlxuICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgIHN0YXRpYyByZWxhdGlvbnNoaXBNb2RlbENsYXNzZXMoKSB7XFxuXCJcbiAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgIHJldHVybiB7XFxuXCJcbiAgICAgIGZvciAoY29uc3QgcmVsYXRpb25zaGlwIG9mIHJlbGF0aW9uc2hpcHMpIHtcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgICAgICR7cmVsYXRpb25zaGlwLnJlbGF0aW9uc2hpcE5hbWV9OiAke0pTT04uc3RyaW5naWZ5KHJlbGF0aW9uc2hpcC50YXJnZXRDbGFzc05hbWUpfSxcXG5gXG4gICAgICB9XG4gICAgICBmaWxlQ29udGVudCArPSBcIiAgICB9XFxuXCJcbiAgICAgIGZpbGVDb250ZW50ICs9IFwiICB9XFxuXCJcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzKSB7XG4gICAgICBjb25zdCBjYW1lbGl6ZWRBdHRyaWJ1dGUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGF0dHJpYnV0ZS5uYW1lLCB0cnVlKVxuICAgICAgY29uc3QgY2FtZWxpemVkQXR0cmlidXRlVXBwZXIgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGF0dHJpYnV0ZS5uYW1lKVxuXG4gICAgICBmaWxlQ29udGVudCArPSBcIlxcblwiXG4gICAgICBmaWxlQ29udGVudCArPSBgICAvKiogQHJldHVybnMgeyR7YXR0cmlidXRlc1R5cGVOYW1lfVske0pTT04uc3RyaW5naWZ5KGF0dHJpYnV0ZS5uYW1lKX1dfSAtIEF0dHJpYnV0ZSB2YWx1ZS4gKi9cXG5gXG4gICAgICBmaWxlQ29udGVudCArPSBgICAke2NhbWVsaXplZEF0dHJpYnV0ZX0oKSB7IHJldHVybiB0aGlzLnJlYWRBdHRyaWJ1dGUoJHtKU09OLnN0cmluZ2lmeShhdHRyaWJ1dGUubmFtZSl9KSB9XFxuYFxuXG4gICAgICBmaWxlQ29udGVudCArPSBcIlxcblwiXG4gICAgICBmaWxlQ29udGVudCArPSBcIiAgLyoqXFxuXCJcbiAgICAgIGZpbGVDb250ZW50ICs9IGAgICAqIEBwYXJhbSB7JHthdHRyaWJ1dGVzVHlwZU5hbWV9WyR7SlNPTi5zdHJpbmdpZnkoYXR0cmlidXRlLm5hbWUpfV19IG5ld1ZhbHVlIC0gTmV3IGF0dHJpYnV0ZSB2YWx1ZS5cXG5gXG4gICAgICBmaWxlQ29udGVudCArPSBgICAgKiBAcmV0dXJucyB7JHthdHRyaWJ1dGVzVHlwZU5hbWV9WyR7SlNPTi5zdHJpbmdpZnkoYXR0cmlidXRlLm5hbWUpfV19IC0gQXNzaWduZWQgdmFsdWUuXFxuYFxuICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqL1xcblwiXG4gICAgICBmaWxlQ29udGVudCArPSBgICBzZXQke2NhbWVsaXplZEF0dHJpYnV0ZVVwcGVyfShuZXdWYWx1ZSkgeyByZXR1cm4gdGhpcy5zZXRBdHRyaWJ1dGUoJHtKU09OLnN0cmluZ2lmeShhdHRyaWJ1dGUubmFtZSl9LCBuZXdWYWx1ZSkgfVxcbmBcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG1ldGhvZE5hbWUgb2YgT2JqZWN0LmtleXMoY29sbGVjdGlvbkNvbW1hbmRzKSkge1xuICAgICAgZmlsZUNvbnRlbnQgKz0gXCJcXG5cIlxuICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgIC8qKlxcblwiXG4gICAgICBmaWxlQ29udGVudCArPSBcIiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbcGF5bG9hZD17fV0gLSBDb21tYW5kIHBheWxvYWQuXFxuXCJcbiAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pn0gLSBDb21tYW5kIHJlc3BvbnNlLlxcblwiXG4gICAgICBmaWxlQ29udGVudCArPSBcIiAgICovXFxuXCJcbiAgICAgIGZpbGVDb250ZW50ICs9IGAgIHN0YXRpYyBhc3luYyAke21ldGhvZE5hbWV9KHBheWxvYWQgPSB7fSkge1xcbmBcbiAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVDdXN0b21Db21tYW5kKHtcXG5cIlxuICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgICAgIGNvbW1hbmROYW1lOiAke0pTT04uc3RyaW5naWZ5KGNvbGxlY3Rpb25Db21tYW5kc1ttZXRob2ROYW1lXSl9LFxcbmBcbiAgICAgIGZpbGVDb250ZW50ICs9IGAgICAgICBjb21tYW5kVHlwZTogJHtKU09OLnN0cmluZ2lmeShjb2xsZWN0aW9uQ29tbWFuZHNbbWV0aG9kTmFtZV0pfSxcXG5gXG4gICAgICBmaWxlQ29udGVudCArPSBcIiAgICAgIHBheWxvYWQsXFxuXCJcbiAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgICAgcmVzb3VyY2VQYXRoOiB0aGlzLnJlc291cmNlUGF0aCgpXFxuXCJcbiAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgIH0pXFxuXCJcbiAgICAgIGZpbGVDb250ZW50ICs9IFwiICB9XFxuXCJcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG1ldGhvZE5hbWUgb2YgT2JqZWN0LmtleXMobWVtYmVyQ29tbWFuZHMpKSB7XG4gICAgICBmaWxlQ29udGVudCArPSBcIlxcblwiXG4gICAgICBmaWxlQ29udGVudCArPSBcIiAgLyoqXFxuXCJcbiAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IFtwYXlsb2FkPXt9XSAtIENvbW1hbmQgcGF5bG9hZC5cXG5cIlxuICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAqIEByZXR1cm5zIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSAtIENvbW1hbmQgcmVzcG9uc2UuXFxuXCJcbiAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKi9cXG5cIlxuICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgYXN5bmMgJHttZXRob2ROYW1lfShwYXlsb2FkID0ge30pIHtcXG5gXG4gICAgICBmaWxlQ29udGVudCArPSBgICAgIHJldHVybiBhd2FpdCAke2NsYXNzTmFtZX0uZXhlY3V0ZUN1c3RvbUNvbW1hbmQoe1xcbmBcbiAgICAgIGZpbGVDb250ZW50ICs9IGAgICAgICBjb21tYW5kTmFtZTogJHtKU09OLnN0cmluZ2lmeShtZW1iZXJDb21tYW5kc1ttZXRob2ROYW1lXSl9LFxcbmBcbiAgICAgIGZpbGVDb250ZW50ICs9IGAgICAgICBjb21tYW5kVHlwZTogJHtKU09OLnN0cmluZ2lmeShtZW1iZXJDb21tYW5kc1ttZXRob2ROYW1lXSl9LFxcbmBcbiAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgICAgbWVtYmVySWQ6IHRoaXMucHJpbWFyeUtleVZhbHVlKCksXFxuXCJcbiAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgICAgcGF5bG9hZCxcXG5cIlxuICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgICAgIHJlc291cmNlUGF0aDogJHtjbGFzc05hbWV9LnJlc291cmNlUGF0aCgpXFxuYFxuICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgICAgfSlcXG5cIlxuICAgICAgZmlsZUNvbnRlbnQgKz0gXCIgIH1cXG5cIlxuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVsYXRpb25zaGlwIG9mIHJlbGF0aW9uc2hpcHMpIHtcbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcE5hbWVDYW1lbGl6ZWQgPSBpbmZsZWN0aW9uLmNhbWVsaXplKHJlbGF0aW9uc2hpcC5yZWxhdGlvbnNoaXBOYW1lKVxuICAgICAgY29uc3QgdGFyZ2V0SW1wb3J0UGF0aCA9IGAuLyR7cmVsYXRpb25zaGlwLnRhcmdldEZpbGVOYW1lfS5qc2BcblxuICAgICAgaWYgKHJlbGF0aW9uc2hpcC50eXBlID09IFwiaGFzTWFueVwiKSB7XG4gICAgICAgIGZpbGVDb250ZW50ICs9IFwiXFxuXCJcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgLyoqIEByZXR1cm5zIHtpbXBvcnQoJHtKU09OLnN0cmluZ2lmeShpbXBvcnRQYXRoKX0pLkZyb250ZW5kTW9kZWxIYXNNYW55UmVsYXRpb25zaGlwPHR5cGVvZiBpbXBvcnQoJHtKU09OLnN0cmluZ2lmeShgLi8ke2luZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24udW5kZXJzY29yZShjbGFzc05hbWUpKX0uanNgKX0pLmRlZmF1bHQsIHR5cGVvZiBpbXBvcnQoJHtKU09OLnN0cmluZ2lmeSh0YXJnZXRJbXBvcnRQYXRoKX0pLmRlZmF1bHQ+fSAtIFJlbGF0aW9uc2hpcCBoZWxwZXIuICovXFxuYFxuICAgICAgICBmaWxlQ29udGVudCArPSBgICAke3JlbGF0aW9uc2hpcC5yZWxhdGlvbnNoaXBOYW1lfSgpIHsgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KCR7SlNPTi5zdHJpbmdpZnkoaW1wb3J0UGF0aCl9KS5Gcm9udGVuZE1vZGVsSGFzTWFueVJlbGF0aW9uc2hpcDx0eXBlb2YgaW1wb3J0KCR7SlNPTi5zdHJpbmdpZnkoYC4vJHtpbmZsZWN0aW9uLmRhc2hlcml6ZShpbmZsZWN0aW9uLnVuZGVyc2NvcmUoY2xhc3NOYW1lKSl9LmpzYCl9KS5kZWZhdWx0LCB0eXBlb2YgaW1wb3J0KCR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0SW1wb3J0UGF0aCl9KS5kZWZhdWx0Pn0gKi8gKHRoaXMuZ2V0UmVsYXRpb25zaGlwQnlOYW1lKCR7SlNPTi5zdHJpbmdpZnkocmVsYXRpb25zaGlwLnJlbGF0aW9uc2hpcE5hbWUpfSkpIH1cXG5gXG5cbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCJcXG5cIlxuICAgICAgICBmaWxlQ29udGVudCArPSBgICAvKiogQHJldHVybnMge0FycmF5PGltcG9ydCgke0pTT04uc3RyaW5naWZ5KHRhcmdldEltcG9ydFBhdGgpfSkuZGVmYXVsdD59IC0gTG9hZGVkIHJlbGF0ZWQgbW9kZWxzLiAqL1xcbmBcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgJHtyZWxhdGlvbnNoaXAucmVsYXRpb25zaGlwTmFtZX1Mb2FkZWQoKSB7IHJldHVybiAvKiogQHR5cGUge0FycmF5PGltcG9ydCgke0pTT04uc3RyaW5naWZ5KHRhcmdldEltcG9ydFBhdGgpfSkuZGVmYXVsdD59ICovICh0aGlzLmdldFJlbGF0aW9uc2hpcEJ5TmFtZSgke0pTT04uc3RyaW5naWZ5KHJlbGF0aW9uc2hpcC5yZWxhdGlvbnNoaXBOYW1lKX0pLmxvYWRlZCgpKSB9XFxuYFxuXG4gICAgICAgIGZpbGVDb250ZW50ICs9IFwiXFxuXCJcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgLyoqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PGltcG9ydCgke0pTT04uc3RyaW5naWZ5KHRhcmdldEltcG9ydFBhdGgpfSkuZGVmYXVsdD4+fSAtIExvYWRlZCByZWxhdGVkIG1vZGVscy4gKi9cXG5gXG4gICAgICAgIGZpbGVDb250ZW50ICs9IGAgIGFzeW5jIGxvYWQke3JlbGF0aW9uc2hpcE5hbWVDYW1lbGl6ZWR9KCkgeyByZXR1cm4gLyoqIEB0eXBlIHtQcm9taXNlPEFycmF5PGltcG9ydCgke0pTT04uc3RyaW5naWZ5KHRhcmdldEltcG9ydFBhdGgpfSkuZGVmYXVsdD4+fSAqLyAodGhpcy5sb2FkUmVsYXRpb25zaGlwKCR7SlNPTi5zdHJpbmdpZnkocmVsYXRpb25zaGlwLnJlbGF0aW9uc2hpcE5hbWUpfSkpIH1cXG5gXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWxlQ29udGVudCArPSBcIlxcblwiXG4gICAgICAgIGZpbGVDb250ZW50ICs9IGAgIC8qKiBAcmV0dXJucyB7aW1wb3J0KCR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0SW1wb3J0UGF0aCl9KS5kZWZhdWx0IHwgbnVsbH0gLSBMb2FkZWQgcmVsYXRlZCBtb2RlbC4gKi9cXG5gXG4gICAgICAgIGZpbGVDb250ZW50ICs9IGAgICR7cmVsYXRpb25zaGlwLnJlbGF0aW9uc2hpcE5hbWV9KCkgeyByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoJHtKU09OLnN0cmluZ2lmeSh0YXJnZXRJbXBvcnRQYXRoKX0pLmRlZmF1bHQgfCBudWxsfSAqLyAodGhpcy5nZXRSZWxhdGlvbnNoaXBCeU5hbWUoJHtKU09OLnN0cmluZ2lmeShyZWxhdGlvbnNoaXAucmVsYXRpb25zaGlwTmFtZSl9KS5sb2FkZWQoKSkgfVxcbmBcblxuICAgICAgICBmaWxlQ29udGVudCArPSBcIlxcblwiXG4gICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAvKipcXG5cIlxuICAgICAgICBmaWxlQ29udGVudCArPSBgICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IFthdHRyaWJ1dGVzXSAtIEF0dHJpYnV0ZXMgZm9yIHRoZSBuZXcgcmVsYXRlZCBtb2RlbC5cXG5gXG4gICAgICAgIGZpbGVDb250ZW50ICs9IGAgICAqIEByZXR1cm5zIHtpbXBvcnQoJHtKU09OLnN0cmluZ2lmeSh0YXJnZXRJbXBvcnRQYXRoKX0pLmRlZmF1bHR9IC0gQnVpbHQgcmVsYXRlZCBtb2RlbC5cXG5gXG4gICAgICAgIGZpbGVDb250ZW50ICs9IFwiICAgKi9cXG5cIlxuICAgICAgICBmaWxlQ29udGVudCArPSBgICBidWlsZCR7cmVsYXRpb25zaGlwTmFtZUNhbWVsaXplZH0oYXR0cmlidXRlcyA9IHt9KSB7IHJldHVybiAvKiogQHR5cGUge2ltcG9ydCgke0pTT04uc3RyaW5naWZ5KHRhcmdldEltcG9ydFBhdGgpfSkuZGVmYXVsdH0gKi8gKHRoaXMuZ2V0UmVsYXRpb25zaGlwQnlOYW1lKCR7SlNPTi5zdHJpbmdpZnkocmVsYXRpb25zaGlwLnJlbGF0aW9uc2hpcE5hbWUpfSkuYnVpbGQoYXR0cmlidXRlcykpIH1cXG5gXG5cbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gXCJcXG5cIlxuICAgICAgICBmaWxlQ29udGVudCArPSBgICAvKiogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KCR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0SW1wb3J0UGF0aCl9KS5kZWZhdWx0IHwgbnVsbD59IC0gTG9hZGVkIHJlbGF0ZWQgbW9kZWwuICovXFxuYFxuICAgICAgICBmaWxlQ29udGVudCArPSBgICBhc3luYyBsb2FkJHtyZWxhdGlvbnNoaXBOYW1lQ2FtZWxpemVkfSgpIHsgcmV0dXJuIC8qKiBAdHlwZSB7UHJvbWlzZTxpbXBvcnQoJHtKU09OLnN0cmluZ2lmeSh0YXJnZXRJbXBvcnRQYXRoKX0pLmRlZmF1bHQgfCBudWxsPn0gKi8gKHRoaXMubG9hZFJlbGF0aW9uc2hpcCgke0pTT04uc3RyaW5naWZ5KHJlbGF0aW9uc2hpcC5yZWxhdGlvbnNoaXBOYW1lKX0pKSB9XFxuYFxuXG4gICAgICAgIGZpbGVDb250ZW50ICs9IFwiXFxuXCJcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgLyoqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydCgke0pTT04uc3RyaW5naWZ5KHRhcmdldEltcG9ydFBhdGgpfSkuZGVmYXVsdCB8IG51bGw+fSAtIExvYWRlZCByZWxhdGVkIG1vZGVsLiAqL1xcbmBcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgYXN5bmMgJHtyZWxhdGlvbnNoaXAucmVsYXRpb25zaGlwTmFtZX1PckxvYWQoKSB7IHJldHVybiAvKiogQHR5cGUge1Byb21pc2U8aW1wb3J0KCR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0SW1wb3J0UGF0aCl9KS5kZWZhdWx0IHwgbnVsbD59ICovICh0aGlzLnJlbGF0aW9uc2hpcE9yTG9hZCgke0pTT04uc3RyaW5naWZ5KHJlbGF0aW9uc2hpcC5yZWxhdGlvbnNoaXBOYW1lKX0pKSB9XFxuYFxuXG4gICAgICAgIGZpbGVDb250ZW50ICs9IFwiXFxuXCJcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgLyoqIEBwYXJhbSB7aW1wb3J0KCR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0SW1wb3J0UGF0aCl9KS5kZWZhdWx0IHwgbnVsbH0gbW9kZWwgLSBSZWxhdGVkIG1vZGVsLiBAcmV0dXJucyB7aW1wb3J0KCR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0SW1wb3J0UGF0aCl9KS5kZWZhdWx0IHwgbnVsbH0gLSBBc3NpZ25lZCByZWxhdGVkIG1vZGVsLiAqL1xcbmBcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gYCAgc2V0JHtyZWxhdGlvbnNoaXBOYW1lQ2FtZWxpemVkfShtb2RlbCkgeyByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoJHtKU09OLnN0cmluZ2lmeSh0YXJnZXRJbXBvcnRQYXRoKX0pLmRlZmF1bHQgfCBudWxsfSAqLyAodGhpcy5zZXRSZWxhdGlvbnNoaXAoJHtKU09OLnN0cmluZ2lmeShyZWxhdGlvbnNoaXAucmVsYXRpb25zaGlwTmFtZSl9LCBtb2RlbCkpIH1cXG5gXG4gICAgICB9XG4gICAgfVxuXG4gICAgZmlsZUNvbnRlbnQgKz0gXCJ9XFxuXCJcbiAgICBmaWxlQ29udGVudCArPSBcIlxcblwiXG4gICAgZmlsZUNvbnRlbnQgKz0gYEZyb250ZW5kTW9kZWxCYXNlLnJlZ2lzdGVyTW9kZWwoJHtjbGFzc05hbWV9KVxcbmBcblxuICAgIHJldHVybiBmaWxlQ29udGVudFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJyYXk8e2NsYXNzTmFtZTogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nfT59IGdlbmVyYXRlZEZpbGVzIC0gR2VuZXJhdGVkIG1vZGVsIGZpbGVzLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIEluZGV4IGZpbGUgY29udGVudCB0aGF0IGltcG9ydHMgYW5kIHJlLWV4cG9ydHMgYWxsIG1vZGVscy5cbiAgICovXG4gIGJ1aWxkSW5kZXhGaWxlQ29udGVudChnZW5lcmF0ZWRGaWxlcykge1xuICAgIGxldCBjb250ZW50ID0gXCJcIlxuXG4gICAgZm9yIChjb25zdCB7Y2xhc3NOYW1lLCBmaWxlTmFtZX0gb2YgZ2VuZXJhdGVkRmlsZXMpIHtcbiAgICAgIGNvbnRlbnQgKz0gYGV4cG9ydCB7ZGVmYXVsdCBhcyAke2NsYXNzTmFtZX19IGZyb20gXCIuLyR7ZmlsZU5hbWV9XCJcXG5gXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRlbnRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEZvcm1hdHRpbmcgYXJncy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuaW5kZW50IC0gQmFzZSBpbmRlbnRhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MucHJvcGVydHlOYW1lIC0gT2JqZWN0IHByb3BlcnR5IG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGFyZ3MudmFsdWVzIC0gU3RyaW5nIHZhbHVlcy5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBGb3JtYXR0ZWQgbXVsdGlsaW5lIGFycmF5IHByb3BlcnR5LlxuICAgKi9cbiAgZm9ybWF0dGVkQXJyYXlQcm9wZXJ0eSh7aW5kZW50LCBwcm9wZXJ0eU5hbWUsIHZhbHVlc30pIHtcbiAgICBsZXQgb3V0cHV0ID0gYCR7aW5kZW50fSR7cHJvcGVydHlOYW1lfTogW1xcbmBcblxuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBvdXRwdXQgKz0gYCR7aW5kZW50fSAgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9LFxcbmBcbiAgICB9XG5cbiAgICBvdXRwdXQgKz0gYCR7aW5kZW50fV0sXFxuYFxuXG4gICAgcmV0dXJuIG91dHB1dFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gRm9ybWF0dGluZyBhcmdzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5pbmRlbnQgLSBCYXNlIGluZGVudGF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5wcm9wZXJ0eU5hbWUgLSBPYmplY3QgcHJvcGVydHkgbmFtZS5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBhcmdzLnZhbHVlcyAtIE9iamVjdCBrZXktdmFsdWVzLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IFthcmdzLmZpbHRlckRlZmF1bHRWYWx1ZXNdIC0gRGVmYXVsdCB2YWx1ZXMgdG8gb21pdCBmcm9tIG91dHB1dC5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBGb3JtYXR0ZWQgbXVsdGlsaW5lIG9iamVjdCBwcm9wZXJ0eS5cbiAgICovXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEZvcm1hdHRpbmcgYXJncy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuaW5kZW50IC0gQmFzZSBpbmRlbnRhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MucHJvcGVydHlOYW1lIC0gT2JqZWN0IHByb3BlcnR5IG5hbWUuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gYXJncy52YWx1ZXMgLSBDb21tYW5kIGtleS12YWx1ZXMuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gRm9ybWF0dGVkIHByb3BlcnR5IChhcnJheSB3aGVuIGtleXMgbWF0Y2ggdmFsdWVzLCBvYmplY3Qgb3RoZXJ3aXNlKS5cbiAgICovXG4gIGZvcm1hdHRlZENvbW1hbmRzUHJvcGVydHkoe2luZGVudCwgcHJvcGVydHlOYW1lLCB2YWx1ZXN9KSB7XG4gICAgY29uc3QgYWxsS2V5c01hdGNoVmFsdWVzID0gT2JqZWN0LmVudHJpZXModmFsdWVzKS5ldmVyeSgoW2tleSwgdmFsdWVdKSA9PiBrZXkgPT09IHZhbHVlKVxuXG4gICAgaWYgKGFsbEtleXNNYXRjaFZhbHVlcykge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0dGVkQXJyYXlQcm9wZXJ0eSh7aW5kZW50LCBwcm9wZXJ0eU5hbWUsIHZhbHVlczogT2JqZWN0LmtleXModmFsdWVzKX0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0dGVkT2JqZWN0UHJvcGVydHkoe2luZGVudCwgcHJvcGVydHlOYW1lLCB2YWx1ZXN9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gRm9ybWF0dGluZyBhcmdzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5pbmRlbnQgLSBCYXNlIGluZGVudGF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5wcm9wZXJ0eU5hbWUgLSBPYmplY3QgcHJvcGVydHkgbmFtZS5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBhcmdzLnZhbHVlcyAtIE9iamVjdCBrZXktdmFsdWVzLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IFthcmdzLmZpbHRlckRlZmF1bHRWYWx1ZXNdIC0gRGVmYXVsdCB2YWx1ZXMgdG8gb21pdCBmcm9tIG91dHB1dC5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBGb3JtYXR0ZWQgbXVsdGlsaW5lIG9iamVjdCBwcm9wZXJ0eS5cbiAgICovXG4gIGZvcm1hdHRlZE9iamVjdFByb3BlcnR5KHtmaWx0ZXJEZWZhdWx0VmFsdWVzLCBpbmRlbnQsIHByb3BlcnR5TmFtZSwgdmFsdWVzfSkge1xuICAgIGxldCBvdXRwdXQgPSBgJHtpbmRlbnR9JHtwcm9wZXJ0eU5hbWV9OiB7XFxuYFxuXG4gICAgZm9yIChjb25zdCBvYmplY3RLZXkgb2YgT2JqZWN0LmtleXModmFsdWVzKSkge1xuICAgICAgaWYgKGZpbHRlckRlZmF1bHRWYWx1ZXMgJiYgZmlsdGVyRGVmYXVsdFZhbHVlc1tvYmplY3RLZXldID09PSB2YWx1ZXNbb2JqZWN0S2V5XSkgY29udGludWVcblxuICAgICAgb3V0cHV0ICs9IGAke2luZGVudH0gICR7b2JqZWN0S2V5fTogJHtKU09OLnN0cmluZ2lmeSh2YWx1ZXNbb2JqZWN0S2V5XSl9LFxcbmBcbiAgICB9XG5cbiAgICBvdXRwdXQgKz0gYCR7aW5kZW50fX0sXFxuYFxuXG4gICAgcmV0dXJuIG91dHB1dFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi8uLi8uLi8uLi8uLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZH0gYXJncy5tb2RlbENsYXNzIC0gQmFja2VuZCBtb2RlbCBjbGFzcy5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBhcmdzLm1vZGVsQ29uZmlnIC0gTW9kZWwgY29uZmlndXJhdGlvbi5cbiAgICogQHJldHVybnMge0FycmF5PHtqc0RvY1R5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nfT59IC0gQXR0cmlidXRlIGRlZmluaXRpb25zLlxuICAgKi9cbiAgYXR0cmlidXRlRGVmaW5pdGlvbnNGb3JNb2RlbCh7bW9kZWxDbGFzcywgbW9kZWxDb25maWd9KSB7XG4gICAgbGV0IGF0dHJpYnV0ZXMgPSBtb2RlbENvbmZpZy5hdHRyaWJ1dGVzXG5cbiAgICAvLyBBdXRvLWRlcml2ZSBhdHRyaWJ1dGVzIGZyb20gbW9kZWwgY29sdW1ucyB3aGVuIG5vdCBleHBsaWNpdGx5IGRlZmluZWRcbiAgICBpZiAoKCFhdHRyaWJ1dGVzIHx8IChBcnJheS5pc0FycmF5KGF0dHJpYnV0ZXMpICYmIGF0dHJpYnV0ZXMubGVuZ3RoID09PSAwKSkgJiYgbW9kZWxDbGFzcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IG1vZGVsQ2xhc3MuZ2V0Q29sdW1ucygpXG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sdW1ucykpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzID0gY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gaW5mbGVjdGlvbi5jYW1lbGl6ZShjb2x1bW4uZ2V0TmFtZSgpLCB0cnVlKSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIE1vZGVsIG1heSBub3QgYmUgaW5pdGlhbGl6ZWQgeWV0XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXR0cmlidXRlcykpIHtcbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzLm1hcCgoYXR0cmlidXRlTmFtZSkgPT4gKHtcbiAgICAgICAganNEb2NUeXBlOiB0aGlzLmpzRG9jVHlwZUZvckZyb250ZW5kQXR0cmlidXRlKHtcbiAgICAgICAgICBhdHRyaWJ1dGVDb25maWc6IHRoaXMuZnJvbnRlbmRBdHRyaWJ1dGVDb25maWdGb3JNb2RlbEF0dHJpYnV0ZSh7YXR0cmlidXRlTmFtZSwgbW9kZWxDbGFzc30pXG4gICAgICAgIH0pLFxuICAgICAgICBuYW1lOiBhdHRyaWJ1dGVOYW1lXG4gICAgICB9KSlcbiAgICB9XG5cbiAgICBpZiAoIWF0dHJpYnV0ZXMgfHwgdHlwZW9mIGF0dHJpYnV0ZXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ2F0dHJpYnV0ZXMnIGFzIGFycmF5IG9yIG9iamVjdCBidXQgZ290OiAke2F0dHJpYnV0ZXN9YClcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoYXR0cmlidXRlcykubWFwKChhdHRyaWJ1dGVOYW1lKSA9PiB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGVDb25maWcgPSBhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpzRG9jVHlwZTogdGhpcy5qc0RvY1R5cGVGb3JGcm9udGVuZEF0dHJpYnV0ZSh7YXR0cmlidXRlQ29uZmlnfSksXG4gICAgICAgIG5hbWU6IGF0dHJpYnV0ZU5hbWVcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge2FueX0gYXJncy5hdHRyaWJ1dGVDb25maWcgLSBBdHRyaWJ1dGUgY29uZmlndXJhdGlvbiB2YWx1ZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBKU0RvYyB0eXBlLlxuICAgKi9cbiAganNEb2NUeXBlRm9yRnJvbnRlbmRBdHRyaWJ1dGUoe2F0dHJpYnV0ZUNvbmZpZ30pIHtcbiAgICBjb25zdCBqc0RvY1R5cGUgPSB0aGlzLmpzRG9jVHlwZUZvckZyb250ZW5kQXR0cmlidXRlQmFzZVR5cGUoYXR0cmlidXRlQ29uZmlnKVxuXG4gICAgaWYgKCF0aGlzLmZyb250ZW5kQXR0cmlidXRlQ2FuQmVOdWxsKGF0dHJpYnV0ZUNvbmZpZykpIHtcbiAgICAgIHJldHVybiBqc0RvY1R5cGVcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7anNEb2NUeXBlfSB8IG51bGxgXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHthbnl9IGF0dHJpYnV0ZUNvbmZpZyAtIEF0dHJpYnV0ZSBjb25maWd1cmF0aW9uIHZhbHVlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIE5vbi1udWxsYWJsZSBKU0RvYyB0eXBlLlxuICAgKi9cbiAganNEb2NUeXBlRm9yRnJvbnRlbmRBdHRyaWJ1dGVCYXNlVHlwZShhdHRyaWJ1dGVDb25maWcpIHtcbiAgICBpZiAoIWF0dHJpYnV0ZUNvbmZpZyB8fCB0eXBlb2YgYXR0cmlidXRlQ29uZmlnICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm4gXCJhbnlcIlxuICAgIH1cblxuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZyb250ZW5kQXR0cmlidXRlVHlwZVZhbHVlKGF0dHJpYnV0ZUNvbmZpZylcblxuICAgIGlmICh0eXBlID09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gXCJib29sZWFuXCJcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJqc29uXCIgfHwgdHlwZSA9PSBcImpzb25iXCIpIHtcbiAgICAgIHJldHVybiBcIlJlY29yZDxzdHJpbmcsIGFueT5cIlxuICAgIH0gZWxzZSBpZiAodHlwZSAmJiBbXCJibG9iXCIsIFwiY2hhclwiLCBcIm52YXJjaGFyXCIsIFwidmFyY2hhclwiLCBcInRleHRcIiwgXCJsb25ndGV4dFwiLCBcInV1aWRcIiwgXCJjaGFyYWN0ZXIgdmFyeWluZ1wiXS5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgcmV0dXJuIFwic3RyaW5nXCJcbiAgICB9IGVsc2UgaWYgKHR5cGUgJiYgW1wiYml0XCIsIFwiYmlnaW50XCIsIFwiZGVjaW1hbFwiLCBcImRvdWJsZVwiLCBcImRvdWJsZSBwcmVjaXNpb25cIiwgXCJmbG9hdFwiLCBcImludFwiLCBcImludGVnZXJcIiwgXCJudW1lcmljXCIsIFwicmVhbFwiLCBcInNtYWxsaW50XCIsIFwidGlueWludFwiXS5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgcmV0dXJuIFwibnVtYmVyXCJcbiAgICB9IGVsc2UgaWYgKHR5cGUgJiYgW1wiZGF0ZVwiLCBcImRhdGV0aW1lXCIsIFwidGltZXN0YW1wXCIsIFwidGltZXN0YW1wIHdpdGhvdXQgdGltZSB6b25lXCIsIFwidGltZXN0YW1wdHpcIl0uaW5jbHVkZXModHlwZSkpIHtcbiAgICAgIHJldHVybiBcIkRhdGVcIlxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJhbnlcIlxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gYXR0cmlidXRlQ29uZmlnIC0gQXR0cmlidXRlIGNvbmZpZ3VyYXRpb24gdmFsdWUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdGhlIGF0dHJpYnV0ZSBhbGxvd3MgbnVsbCB2YWx1ZXMuXG4gICAqL1xuICBmcm9udGVuZEF0dHJpYnV0ZUNhbkJlTnVsbChhdHRyaWJ1dGVDb25maWcpIHtcbiAgICBpZiAoIWF0dHJpYnV0ZUNvbmZpZyB8fCB0eXBlb2YgYXR0cmlidXRlQ29uZmlnICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGF0dHJpYnV0ZUNvbmZpZy5nZXROdWxsID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIGF0dHJpYnV0ZUNvbmZpZy5nZXROdWxsKCkgPT09IHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cmlidXRlQ29uZmlnLm51bGwgPT09IHRydWVcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gYXR0cmlidXRlQ29uZmlnIC0gQXR0cmlidXRlIGNvbmZpZ3VyYXRpb24gdmFsdWUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCBudWxsfSAtIE5vcm1hbGl6ZWQgY29sdW1uIHR5cGUuXG4gICAqL1xuICBmcm9udGVuZEF0dHJpYnV0ZVR5cGVWYWx1ZShhdHRyaWJ1dGVDb25maWcpIHtcbiAgICBpZiAoIWF0dHJpYnV0ZUNvbmZpZyB8fCB0eXBlb2YgYXR0cmlidXRlQ29uZmlnICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYXR0cmlidXRlQ29uZmlnLmdldFR5cGUgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKGF0dHJpYnV0ZUNvbmZpZy5nZXRUeXBlKCkpXG4gICAgfVxuXG4gICAgY29uc3QgdHlwZVZhbHVlID0gYXR0cmlidXRlQ29uZmlnLnR5cGUgfHwgYXR0cmlidXRlQ29uZmlnLmNvbHVtblR5cGUgfHwgYXR0cmlidXRlQ29uZmlnLnNxbFR5cGUgfHwgYXR0cmlidXRlQ29uZmlnLmRhdGFUeXBlXG5cbiAgICBpZiAodHlwZW9mIHR5cGVWYWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZVZhbHVlXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmF0dHJpYnV0ZU5hbWUgLSBGcm9udGVuZCBtb2RlbCBhdHRyaWJ1dGUgbmFtZS5cbiAgICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vLi4vLi4vLi4vLi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWR9IGFyZ3MubW9kZWxDbGFzcyAtIEJhY2tlbmQgbW9kZWwgY2xhc3MuXG4gICAqIEByZXR1cm5zIHthbnl9IC0gQXR0cmlidXRlIGNvbmZpZyBpbmZlcnJlZCBmcm9tIHRoZSBiYWNrZW5kIG1vZGVsIHdoZW4gYXZhaWxhYmxlLlxuICAgKi9cbiAgZnJvbnRlbmRBdHRyaWJ1dGVDb25maWdGb3JNb2RlbEF0dHJpYnV0ZSh7YXR0cmlidXRlTmFtZSwgbW9kZWxDbGFzc30pIHtcbiAgICBpZiAoIW1vZGVsQ2xhc3MpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3QgY29sdW1uTmFtZSA9IG1vZGVsQ2xhc3MuZ2V0QXR0cmlidXRlTmFtZVRvQ29sdW1uTmFtZU1hcCgpW2F0dHJpYnV0ZU5hbWVdXG5cbiAgICBpZiAoIWNvbHVtbk5hbWUpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZGVsQ2xhc3MuZ2V0Q29sdW1uc0hhc2goKVtjb2x1bW5OYW1lXSB8fCBudWxsXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmNsYXNzTmFtZSAtIE1vZGVsIGNsYXNzIG5hbWUuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gYXJncy5tb2RlbENvbmZpZyAtIE1vZGVsIGNvbmZpZ3VyYXRpb24uXG4gICAqIEByZXR1cm5zIHtBcnJheTx7cmVsYXRpb25zaGlwTmFtZTogc3RyaW5nLCB0YXJnZXRDbGFzc05hbWU6IHN0cmluZywgdGFyZ2V0RmlsZU5hbWU6IHN0cmluZywgdHlwZTogXCJiZWxvbmdzVG9cIiB8IFwiaGFzT25lXCIgfCBcImhhc01hbnlcIn0+fSAtIFJlbGF0aW9uc2hpcHMuXG4gICAqL1xuICByZWxhdGlvbnNoaXBzRm9yTW9kZWwoe2NsYXNzTmFtZSwgbW9kZWxDb25maWd9KSB7XG4gICAgY29uc3QgcmVsYXRpb25zaGlwcyA9IG1vZGVsQ29uZmlnLnJlbGF0aW9uc2hpcHNcblxuICAgIGlmIChyZWxhdGlvbnNoaXBzID09PSB1bmRlZmluZWQgfHwgcmVsYXRpb25zaGlwcyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVsYXRpb25zaGlwcykpIHtcbiAgICAgIHJldHVybiByZWxhdGlvbnNoaXBzLm1hcCgocmVsYXRpb25zaGlwTmFtZSkgPT4gdGhpcy5pbmZlcnJlZFJlbGF0aW9uc2hpcERlZmluaXRpb24oe2NsYXNzTmFtZSwgcmVsYXRpb25zaGlwTmFtZX0pKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcmVsYXRpb25zaGlwcyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb2RlbCAnJHtjbGFzc05hbWV9JyBoYXMgaW52YWxpZCByZWxhdGlvbnNoaXBzIGNvbmZpZ2ApXG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtBcnJheTx7cmVsYXRpb25zaGlwTmFtZTogc3RyaW5nLCB0YXJnZXRDbGFzc05hbWU6IHN0cmluZywgdGFyZ2V0RmlsZU5hbWU6IHN0cmluZywgdHlwZTogXCJiZWxvbmdzVG9cIiB8IFwiaGFzT25lXCIgfCBcImhhc01hbnlcIn0+fSAqL1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBbXVxuXG4gICAgZm9yIChjb25zdCByZWxhdGlvbnNoaXBOYW1lIGluIHJlbGF0aW9uc2hpcHMpIHtcbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IHJlbGF0aW9uc2hpcHNbcmVsYXRpb25zaGlwTmFtZV1cblxuICAgICAgaWYgKHJlbGF0aW9uc2hpcCA9PT0gdHJ1ZSkge1xuICAgICAgICBub3JtYWxpemVkLnB1c2godGhpcy5pbmZlcnJlZFJlbGF0aW9uc2hpcERlZmluaXRpb24oe2NsYXNzTmFtZSwgcmVsYXRpb25zaGlwTmFtZX0pKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoIXJlbGF0aW9uc2hpcCB8fCB0eXBlb2YgcmVsYXRpb25zaGlwICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkocmVsYXRpb25zaGlwKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZGVsICcke2NsYXNzTmFtZX0nIHJlbGF0aW9uc2hpcCAnJHtyZWxhdGlvbnNoaXBOYW1lfScgbXVzdCBiZSBhbiBvYmplY3Qgb3IgdHJ1ZWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcE1vZGVsTmFtZSA9IHJlbGF0aW9uc2hpcC5tb2RlbENsYXNzTmFtZSB8fCByZWxhdGlvbnNoaXAuY2xhc3NOYW1lIHx8IHJlbGF0aW9uc2hpcC5tb2RlbFxuICAgICAgY29uc3QgaGFzRXhwbGljaXRUeXBlID0gdHlwZW9mIHJlbGF0aW9uc2hpcC50eXBlID09PSBcInN0cmluZ1wiICYmIHJlbGF0aW9uc2hpcC50eXBlLmxlbmd0aCA+IDBcbiAgICAgIGNvbnN0IGhhc0V4cGxpY2l0TW9kZWwgPSB0eXBlb2YgcmVsYXRpb25zaGlwTW9kZWxOYW1lID09PSBcInN0cmluZ1wiICYmIHJlbGF0aW9uc2hpcE1vZGVsTmFtZS5sZW5ndGggPiAwXG4gICAgICBjb25zdCBpbmZlcnJlZFJlbGF0aW9uc2hpcCA9IGhhc0V4cGxpY2l0VHlwZSAmJiBoYXNFeHBsaWNpdE1vZGVsXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHRoaXMuaW5mZXJyZWRSZWxhdGlvbnNoaXBEZWZpbml0aW9uKHtjbGFzc05hbWUsIHJlbGF0aW9uc2hpcE5hbWV9KVxuICAgICAgY29uc3QgcmVsYXRpb25zaGlwVHlwZSA9IHJlbGF0aW9uc2hpcC50eXBlIHx8IGluZmVycmVkUmVsYXRpb25zaGlwPy50eXBlXG5cbiAgICAgIGlmIChyZWxhdGlvbnNoaXBUeXBlICE9PSBcImJlbG9uZ3NUb1wiICYmIHJlbGF0aW9uc2hpcFR5cGUgIT09IFwiaGFzT25lXCIgJiYgcmVsYXRpb25zaGlwVHlwZSAhPT0gXCJoYXNNYW55XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb2RlbCAnJHtjbGFzc05hbWV9JyByZWxhdGlvbnNoaXAgJyR7cmVsYXRpb25zaGlwTmFtZX0nIGhhcyBpbnZhbGlkIHR5cGUgJyR7cmVsYXRpb25zaGlwVHlwZX0nYClcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFyZ2V0Q2xhc3NOYW1lID0gaGFzRXhwbGljaXRNb2RlbFxuICAgICAgICA/IGluZmxlY3Rpb24uY2FtZWxpemUoU3RyaW5nKHJlbGF0aW9uc2hpcE1vZGVsTmFtZSkucmVwbGFjZUFsbChcIi1cIiwgXCJfXCIpKVxuICAgICAgICA6IGluZmVycmVkUmVsYXRpb25zaGlwPy50YXJnZXRDbGFzc05hbWVcblxuICAgICAgaWYgKCF0YXJnZXRDbGFzc05hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb2RlbCAnJHtjbGFzc05hbWV9JyByZWxhdGlvbnNoaXAgJyR7cmVsYXRpb25zaGlwTmFtZX0nIGhhcyBubyB0YXJnZXQgbW9kZWwgY2xhc3NgKVxuICAgICAgfVxuXG4gICAgICBub3JtYWxpemVkLnB1c2goe1xuICAgICAgICByZWxhdGlvbnNoaXBOYW1lLFxuICAgICAgICB0YXJnZXRDbGFzc05hbWUsXG4gICAgICAgIHRhcmdldEZpbGVOYW1lOiBpbmZsZWN0aW9uLmRhc2hlcml6ZShpbmZsZWN0aW9uLnVuZGVyc2NvcmUodGFyZ2V0Q2xhc3NOYW1lKSksXG4gICAgICAgIHR5cGU6IHJlbGF0aW9uc2hpcFR5cGVcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY2xhc3NOYW1lIC0gTW9kZWwgY2xhc3MgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MucmVsYXRpb25zaGlwTmFtZSAtIFJlbGF0aW9uc2hpcCBuYW1lLlxuICAgKiBAcmV0dXJucyB7e3JlbGF0aW9uc2hpcE5hbWU6IHN0cmluZywgdGFyZ2V0Q2xhc3NOYW1lOiBzdHJpbmcsIHRhcmdldEZpbGVOYW1lOiBzdHJpbmcsIHR5cGU6IFwiYmVsb25nc1RvXCIgfCBcImhhc09uZVwiIHwgXCJoYXNNYW55XCJ9fSBJbmZlcnJlZCByZWxhdGlvbnNoaXAgZGVmaW5pdGlvbi5cbiAgICovXG4gIGluZmVycmVkUmVsYXRpb25zaGlwRGVmaW5pdGlvbih7Y2xhc3NOYW1lLCByZWxhdGlvbnNoaXBOYW1lfSkge1xuICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSB0aGlzLmdldENvbmZpZ3VyYXRpb24oKS5nZXRNb2RlbENsYXNzKGNsYXNzTmFtZSlcblxuICAgIGlmICghbW9kZWxDbGFzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBiYWNrZW5kIG1vZGVsIGNsYXNzICcke2NsYXNzTmFtZX0nIGZvciByZWxhdGlvbnNoaXAgJyR7cmVsYXRpb25zaGlwTmFtZX0nYClcbiAgICB9XG5cbiAgICBjb25zdCByZWxhdGlvbnNoaXAgPSBtb2RlbENsYXNzLmdldFJlbGF0aW9uc2hpcEJ5TmFtZShyZWxhdGlvbnNoaXBOYW1lKVxuICAgIGNvbnN0IHRhcmdldE1vZGVsQ2xhc3MgPSByZWxhdGlvbnNoaXAuZ2V0VGFyZ2V0TW9kZWxDbGFzcygpXG4gICAgY29uc3QgcmVsYXRpb25zaGlwVHlwZSA9IHJlbGF0aW9uc2hpcC5nZXRUeXBlKClcblxuICAgIGlmIChyZWxhdGlvbnNoaXBUeXBlICE9PSBcImJlbG9uZ3NUb1wiICYmIHJlbGF0aW9uc2hpcFR5cGUgIT09IFwiaGFzT25lXCIgJiYgcmVsYXRpb25zaGlwVHlwZSAhPT0gXCJoYXNNYW55XCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTW9kZWwgJyR7Y2xhc3NOYW1lfScgcmVsYXRpb25zaGlwICcke3JlbGF0aW9uc2hpcE5hbWV9JyBoYXMgdW5zdXBwb3J0ZWQgdHlwZSAnJHtyZWxhdGlvbnNoaXBUeXBlfSdgKVxuICAgIH1cblxuICAgIGlmICghdGFyZ2V0TW9kZWxDbGFzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb2RlbCAnJHtjbGFzc05hbWV9JyByZWxhdGlvbnNoaXAgJyR7cmVsYXRpb25zaGlwTmFtZX0nIGhhcyBubyB0YXJnZXQgbW9kZWwgY2xhc3NgKVxuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldENsYXNzTmFtZSA9IHRhcmdldE1vZGVsQ2xhc3MubmFtZVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbGF0aW9uc2hpcE5hbWUsXG4gICAgICB0YXJnZXRDbGFzc05hbWUsXG4gICAgICB0YXJnZXRGaWxlTmFtZTogaW5mbGVjdGlvbi5kYXNoZXJpemUoaW5mbGVjdGlvbi51bmRlcnNjb3JlKHRhcmdldENsYXNzTmFtZSkpLFxuICAgICAgdHlwZTogcmVsYXRpb25zaGlwVHlwZVxuICAgIH1cbiAgfVxufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/environment-handlers/node.js"],"names":[],"mappings":"AAqDA;IACE,sFAAsF;IACtF,4BADW,OAAO,kBAAkB,EAAE,iBAAiB,CAAC,aAAa,CAAC,GAAG,SAAS,CACU;IAE5F,sEAAsE;IACtE,qBADW,OAAO,WAAW,EAAE,qBAAqB,EAAE,GAAG,SAAS,CACnC;IAyO/B;;OAEG;IACH,uBAFa,OAAO,CAAC,KAAK,CAAC,OAAO,WAAW,EAAE,qBAAqB,CAAC,CAAC,CAcrE;IAED;;;OAGG;IACH,kCAHW,MAAM,GACJ,MAAM,CAuBlB;IAyNG,mCAA6D;IAgBjE;;;;OAIG;IACH,0CAHG;QAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO;KAC7C,GAAU,MAAM,CAIlB;IA8CD;;;OAGG;IACH,2BAHW,MAAM,GACJ,OAAO,CAAC,OAAO,gCAAgC,EAAE,OAAO,CAAC,CAUrE;IAED,+BAKC;IA4BD;;;;OAIG;IACH,mCAHG;QAA4E,GAAG,EAAvE,MAAM,CAAC,MAAM,EAAE,OAAO,6BAA6B,EAAE,OAAO,CAAC;KACrE,GAAU,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAkB3C;CACF;4BAjpBa;IAAC,OAAO,CAAC,EAAE,OAAO,6BAA6B,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAC;iBA7B/F,WAAW"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/environment-handlers/node.js"],"names":[],"mappings":"AAqDA;IACE,sFAAsF;IACtF,4BADW,OAAO,kBAAkB,EAAE,iBAAiB,CAAC,aAAa,CAAC,GAAG,SAAS,CACU;IAE5F,sEAAsE;IACtE,qBADW,OAAO,WAAW,EAAE,qBAAqB,EAAE,GAAG,SAAS,CACnC;IA0R/B;;OAEG;IACH,uBAFa,OAAO,CAAC,KAAK,CAAC,OAAO,WAAW,EAAE,qBAAqB,CAAC,CAAC,CAcrE;IAED;;;OAGG;IACH,kCAHW,MAAM,GACJ,MAAM,CAuBlB;IAyNG,mCAA6D;IAgBjE;;;;OAIG;IACH,0CAHG;QAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO;KAC7C,GAAU,MAAM,CAIlB;IA8CD;;;OAGG;IACH,2BAHW,MAAM,GACJ,OAAO,CAAC,OAAO,gCAAgC,EAAE,OAAO,CAAC,CAUrE;IAED,+BAKC;IA4BD;;;;OAIG;IACH,mCAHG;QAA4E,GAAG,EAAvE,MAAM,CAAC,MAAM,EAAE,OAAO,6BAA6B,EAAE,OAAO,CAAC;KACrE,GAAU,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAkB3C;CACF;4BAlsBa;IAAC,OAAO,CAAC,EAAE,OAAO,6BAA6B,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAC;iBA7B/F,WAAW"}