@aws-cdk/toolkit-lib 1.31.0 → 1.32.0
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.
- package/build-info.json +2 -2
- package/lib/actions/bootstrap/index.d.ts +5 -0
- package/lib/actions/bootstrap/index.js +1 -1
- package/lib/actions/deploy/index.d.ts +6 -0
- package/lib/actions/deploy/index.js +1 -1
- package/lib/actions/destroy/index.d.ts +6 -0
- package/lib/actions/destroy/index.js +1 -1
- package/lib/api/aws-auth/sdk.js +1 -1
- package/lib/api/bootstrap/bootstrap-props.d.ts +6 -0
- package/lib/api/bootstrap/bootstrap-props.js +1 -1
- package/lib/api/bootstrap/deploy-bootstrap.js +3 -1
- package/lib/api/cloudformation/template-body-parameter.js +1 -1
- package/lib/api/deployments/deploy-stack.d.ts +13 -0
- package/lib/api/deployments/deploy-stack.js +22 -5
- package/lib/api/deployments/deployment-result.d.ts +7 -1
- package/lib/api/deployments/deployment-result.js +1 -1
- package/lib/api/deployments/deployments.d.ts +5 -0
- package/lib/api/deployments/deployments.js +3 -1
- package/lib/api/hotswap/hotswap-deployments.js +2 -1
- package/lib/api/io/private/messages.d.ts +3 -0
- package/lib/api/io/private/messages.js +13 -1
- package/lib/api/resource-import/importer.js +3 -3
- package/lib/api/stack-events/stack-activity-monitor.d.ts +5 -0
- package/lib/api/stack-events/stack-activity-monitor.js +8 -1
- package/lib/api/stack-events/stack-event-poller.d.ts +8 -1
- package/lib/api/stack-events/stack-event-poller.js +19 -1
- package/lib/private/activity-printer/current.d.ts +19 -0
- package/lib/private/activity-printer/current.js +59 -3
- package/lib/toolkit/toolkit.js +28 -8
- package/lib/toolkit/types.d.ts +22 -0
- package/lib/toolkit/types.js +1 -1
- package/lib/util/cfn-express.d.ts +24 -0
- package/lib/util/cfn-express.js +55 -0
- package/lib/util/index.d.ts +1 -0
- package/lib/util/index.js +2 -1
- package/package.json +2 -2
|
@@ -104,6 +104,13 @@ class StackActivityMonitor {
|
|
|
104
104
|
get deleteFailures() {
|
|
105
105
|
return this.poller.deleteFailures;
|
|
106
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* Resources that completed deployment but are still stabilizing.
|
|
109
|
+
* Populated for Express Mode deployments.
|
|
110
|
+
*/
|
|
111
|
+
get stabilizingResources() {
|
|
112
|
+
return this.poller.stabilizingResources;
|
|
113
|
+
}
|
|
107
114
|
async start() {
|
|
108
115
|
this.monitorId = (0, node_crypto_1.randomUUID)();
|
|
109
116
|
await this.ioHelper.notify(private_1.IO.CDK_TOOLKIT_I5501.msg(`Deploying ${this.stackDisplayName}`, {
|
|
@@ -277,4 +284,4 @@ class StackActivityMonitor {
|
|
|
277
284
|
}
|
|
278
285
|
}
|
|
279
286
|
exports.StackActivityMonitor = StackActivityMonitor;
|
|
280
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stYWN0aXZpdHktbW9uaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0YWNrLWFjdGl2aXR5LW1vbml0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQXlDO0FBQ3pDLGdEQUFrQztBQUVsQyw2REFBbUU7QUFDbkUscUVBQWdFO0FBRWhFLDhEQUE2RDtBQUc3RCwyQ0FBa0Q7QUFDbEQsOEVBQTBFO0FBc0UxRTs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLG9CQUFvQjtJQUMvQjs7T0FFRztJQUNjLE1BQU0sQ0FBbUI7SUFFMUM7OztPQUdHO0lBQ2MsZUFBZSxDQUFTO0lBRWpDLFNBQVMsQ0FBVTtJQUVWLGVBQWUsQ0FBdUI7SUFFdkQ7O09BRUc7SUFDSyxTQUFTLENBQWlDO0lBRWxEOztPQUVHO0lBQ0ssV0FBVyxDQUFnQjtJQUVsQixRQUFRLENBQVc7SUFDbkIsZ0JBQWdCLENBQVM7SUFDekIsS0FBSyxDQUE4QjtJQUNuQyxHQUFHLENBQXdCO0lBQzNCLFlBQVksQ0FBd0I7SUFDcEMsYUFBYSxDQUFVO0lBRXhDLFlBQVksRUFDVixHQUFHLEVBQ0gsUUFBUSxFQUNSLEtBQUssRUFDTCxRQUFRLEVBQ1IsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixlQUFlLEdBQUcsS0FBSyxFQUN2QixZQUFZLEVBQ1osYUFBYSxHQUFHLEtBQUssR0FDSztRQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBQSxpQ0FBZ0IsRUFBQyxRQUFRLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxD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QUFDLENBQUMsRUFBRSxDQUM1RSxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBaFNELG9EQWdTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJ25vZGU6dXRpbCc7XG5pbXBvcnQgdHlwZSB7IENsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LWFwaSc7XG5pbXBvcnQgeyBTdGFja0V2ZW50UG9sbGVyLCBQb2xsUmFuZ2UgfSBmcm9tICcuL3N0YWNrLWV2ZW50LXBvbGxlcic7XG5pbXBvcnQgeyBTdGFja1Byb2dyZXNzTW9uaXRvciB9IGZyb20gJy4vc3RhY2stcHJvZ3Jlc3MtbW9uaXRvcic7XG5pbXBvcnQgdHlwZSB7IFN0YWNrQWN0aXZpdHkgfSBmcm9tICcuLi8uLi9wYXlsb2Fkcy9zdGFjay1hY3Rpdml0eSc7XG5pbXBvcnQgeyBzdGFja05hbWVGcm9tQXJuIH0gZnJvbSAnLi4vLi4vdXRpbC9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgdHlwZSB7IElDbG91ZEZvcm1hdGlvbkNsaWVudCB9IGZyb20gJy4uL2F3cy1hdXRoL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudFJlc291cmNlcyB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IElPLCB0eXBlIElvSGVscGVyIH0gZnJvbSAnLi4vaW8vcHJpdmF0ZSc7XG5pbXBvcnQgeyByZXNvdXJjZU1ldGFkYXRhIH0gZnJvbSAnLi4vcmVzb3VyY2UtbWV0YWRhdGEvcmVzb3VyY2UtbWV0YWRhdGEnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrQWN0aXZpdHlNb25pdG9yUHJvcHMge1xuICAvKipcbiAgICogVGhlIENsb3VkRm9ybWF0aW9uIGNsaWVudFxuICAgKi9cbiAgcmVhZG9ubHkgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBJb0hlbHBlciB1c2VkIGZvciBtZXNzYWdpbmdcbiAgICovXG4gIHJlYWRvbmx5IGlvSGVscGVyOiBJb0hlbHBlcjtcblxuICAvKipcbiAgICogVGhlIHN0YWNrIGFydGlmYWN0IHRoYXQgaXMgZ2V0dGluZyBkZXBsb3llZFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2s6IENsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgU3RhY2sgdGhhdCBpcyBnZXR0aW5nIGRlcGxveWVkXG4gICAqL1xuICByZWFkb25seSBzdGFja0Fybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUb3RhbCBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIHVwZGF0ZVxuICAgKlxuICAgKiBVc2VkIHRvIGNhbGN1bGF0ZSBhIHByb2dyZXNzIGJhci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBwcm9ncmVzcyByZXBvcnRpbmdcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlc1RvdGFsPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDcmVhdGlvbiB0aW1lIG9mIHRoZSBjaGFuZ2Ugc2V0XG4gICAqXG4gICAqIFRoaXMgd2lsbCBiZSB1c2VkIHRvIGZpbHRlciBldmVudHMsIG9ubHkgc2hvd2luZyB0aG9zZSBmcm9tIGFmdGVyIHRoZSBjaGFuZ2VcbiAgICogc2V0IGNyZWF0aW9uIHRpbWUuXG4gICAqXG4gICAqIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGlzLCBvdGhlcndpc2UgdGhlIGZpbHRlcmluZyB3aWxsIGJlIHN1YmplY3RcbiAgICogdG8gY2xvY2sgZHJpZnQgYmV0d2VlbiBsb2NhbCBhbmQgY2xvdWQgbWFjaGluZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTG9jYWwgbWFjaGluZSdzIGN1cnJlbnQgdGltZVxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbmdlU2V0Q3JlYXRpb25UaW1lPzogRGF0ZTtcblxuICAvKipcbiAgICogVGltZSB0byB3YWl0IGJldHdlZW4gZmV0Y2hpbmcgbmV3IGFjdGl2aXRpZXMuXG4gICAqXG4gICAqIE11c3Qgd2FpdCBhIHJlYXNvbmFibGUgYW1vdW50IG9mIHRpbWUgYmV0d2VlbiBwb2xscywgc2luY2Ugd2UgbmVlZCB0byBjb25zaWRlciBDbG91ZEZvcm1hdGlvbiBBUEkgbGltaXRzXG4gICAqXG4gICAqIEBkZWZhdWx0IDJfMDAwXG4gICAqL1xuICByZWFkb25seSBwb2xsaW5nSW50ZXJ2YWw/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IHJlc291cmNlcywgdXNlZCB0byBsb29rIHVwIHRoZSBib290c3RyYXAgdG9vbGtpdCB2ZXJzaW9uIHdoZW5cbiAgICogZGlhZ25vc2luZyBHdWFyZCBIb29rIGFubm90YXRpb24gZmV0Y2ggZmFpbHVyZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQm9vdHN0cmFwIHZlcnNpb24gaXMgbm90IHJlcG9ydGVkIGluIGVycm9yIG1lc3NhZ2VzXG4gICAqL1xuICByZWFkb25seSBlbnZSZXNvdXJjZXM/OiBFbnZpcm9ubWVudFJlc291cmNlcztcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIGRlcGxveW1lbnQgaXMgYW4gdXBkYXRlIHRvIGFuIGV4aXN0aW5nIHN0YWNrIChhcyBvcHBvc2VkIHRvIGEgY3JlYXRpb24pLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaXNTdGFja1VwZGF0ZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRHJpdmVzIHRoZSBtb25pdG9yaW5nIG9mIGEgU3RhY2sgZGVwbG95bWVudFxuICpcbiAqIGBgYFxuICog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQICAgICAgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICAgICAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICog4pSCICAgICAgICAgU3RhY2sgICAgICAgICDilIIgcG9sbCgpIOKUgiAgICAgICAgIFN0YWNrICAgICAgICAg4pSCICBwcm9jZXNzKGV2KSDilIIgICAgICAgICBTdGFjayAgICAgICAgIOKUglxuICog4pSCICAgICAgRXZlbnRQb2xsZXIgICAgICDilILil4DilIDilIDilIDilIDilIDilIDilIDilIIgICAgQWN0aXZpdHlNb25pdG9yICAgIOKUguKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKWtuKUgiAgICBQcm9ncmVzc01vbml0b3IgICAg4pSCXG4gKiDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFN0YWNrQWN0aXZpdHlNb25pdG9yIHtcbiAgLyoqXG4gICAqIFRoZSBwb2xsZXIgdXNlZCB0byByZWFkIHN0YWNrIGV2ZW50c1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBwb2xsZXI6IFN0YWNrRXZlbnRQb2xsZXI7XG5cbiAgLyoqXG4gICAqIEZldGNoIG5ldyBhY3Rpdml0eSBldmVyeSAxIHNlY29uZFxuICAgKiBQcmludGVycyBjYW4gZGVjaWRlIHRvIHVwZGF0ZSBhIHZpZXcgbGVzcyBmcmVxdWVudGx5IGlmIGRlc2lyZWRcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcG9sbGluZ0ludGVydmFsOiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBtb25pdG9ySWQ/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwcm9ncmVzc01vbml0b3I6IFN0YWNrUHJvZ3Jlc3NNb25pdG9yO1xuXG4gIC8qKlxuICAgKiBDdXJyZW50IHRpY2sgdGltZXJcbiAgICovXG4gIHByaXZhdGUgdGlja1RpbWVyPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cbiAgLyoqXG4gICAqIFNldCB0byB0aGUgYWN0aXZpdHkgb2YgcmVhZGluZyB0aGUgY3VycmVudCBldmVudHNcbiAgICovXG4gIHByaXZhdGUgcmVhZFByb21pc2U/OiBQcm9taXNlPGFueT47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhY2tEaXNwbGF5TmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrOiBDbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW52UmVzb3VyY2VzPzogRW52aXJvbm1lbnRSZXNvdXJjZXM7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXNTdGFja1VwZGF0ZTogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgY2ZuLFxuICAgIGlvSGVscGVyLFxuICAgIHN0YWNrLFxuICAgIHN0YWNrQXJuLFxuICAgIHJlc291cmNlc1RvdGFsLFxuICAgIGNoYW5nZVNldENyZWF0aW9uVGltZSxcbiAgICBwb2xsaW5nSW50ZXJ2YWwgPSAyXzAwMCxcbiAgICBlbnZSZXNvdXJjZXMsXG4gICAgaXNTdGFja1VwZGF0ZSA9IGZhbHNlLFxuICB9OiBTdGFja0FjdGl2aXR5TW9uaXRvclByb3BzKSB7XG4gICAgdGhpcy5pb0hlbHBlciA9IGlvSGVscGVyO1xuICAgIHRoaXMuc3RhY2sgPSBzdGFjaztcbiAgICB0aGlzLnN0YWNrRGlzcGxheU5hbWUgPSBzdGFja05hbWVGcm9tQXJuKHN0YWNrQXJuKTtcbiAgICB0aGlzLmNmbiA9IGNmbjtcbiAgICB0aGlzLmVudlJlc291cmNlcyA9IGVudlJlc291cmNlcztcbiAgICB0aGlzLmlzU3RhY2tVcGRhdGUgPSBpc1N0YWNrVXBkYXRlO1xuXG4gICAgdGhpcy5wcm9ncmVzc01vbml0b3IgPSBuZXcgU3RhY2tQcm9ncmVzc01vbml0b3IocmVzb3VyY2VzVG90YWwpO1xuICAgIHRoaXMucG9sbGluZ0ludGVydmFsID0gcG9sbGluZ0ludGVydmFsO1xuICAgIHRoaXMucG9sbGVyID0gbmV3IFN0YWNrRXZlbnRQb2xsZXIoY2ZuLCB7XG4gICAgICBzdGFja0FybixcbiAgICAgIGluaXRpYWxQb2xsUmFuZ2U6IFBvbGxSYW5nZS5zaW5jZVRpbWVzdGFtcChjaGFuZ2VTZXRDcmVhdGlvblRpbWU/LmdldFRpbWUoKSA/PyBEYXRlLm5vdygpKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgZXJyb3JzIHRoYXQgd2VyZSBkaXNjb3ZlcmVkIGR1cmluZyBtb25pdG9yaW5nIG9mIHRoaXMgc3RhY2tcbiAgICovXG4gIHB1YmxpYyBnZXQgZXJyb3JzKCkge1xuICAgIHJldHVybiB0aGlzLnBvbGxlci5lcnJvcnM7XG4gIH1cblxuICAvKipcbiAgICogUmVzb3VyY2VzIHRoYXQgcmVjZWl2ZWQgREVMRVRFX0ZBSUxFRCBkdXJpbmcgdGhlIHN0YWNrIHVwZGF0ZS5cbiAgICogQ2xvdWRGb3JtYXRpb24gc2tpcHMgdGhlc2UgYW5kIGNvbXBsZXRlcyB0aGUgdXBkYXRlIGFueXdheS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZGVsZXRlRmFpbHVyZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucG9sbGVyLmRlbGV0ZUZhaWx1cmVzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHN0YXJ0KCkge1xuICAgIHRoaXMubW9uaXRvcklkID0gcmFuZG9tVVVJRCgpO1xuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkNES19UT09MS0lUX0k1NTAxLm1zZyhgRGVwbG95aW5nICR7dGhpcy5zdGFja0Rpc3BsYXlOYW1lfWAsIHtcbiAgICAgIGRlcGxveW1lbnQ6IHRoaXMubW9uaXRvcklkLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICBzdGFja05hbWU6IHRoaXMuc3RhY2tEaXNwbGF5TmFtZSxcbiAgICAgIHJlc291cmNlc1RvdGFsOiB0aGlzLnByb2dyZXNzTW9uaXRvci50b3RhbCxcbiAgICAgIGlzU3RhY2tVcGRhdGU6IHRoaXMuaXNTdGFja1VwZGF0ZSxcbiAgICB9KSk7XG4gICAgdGhpcy5zY2hlZHVsZU5leHRUaWNrKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc3RvcCgpIHtcbiAgICBjb25zdCBvbGRNb25pdG9ySWQgPSB0aGlzLm1vbml0b3JJZCE7XG4gICAgdGhpcy5tb25pdG9ySWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMudGlja1RpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aWNrVGltZXIpO1xuICAgIH1cblxuICAgIC8vIERvIGEgZmluYWwgcG9sbCBmb3IgYWxsIGV2ZW50cy4gVGhpcyBpcyB0byBoYW5kbGUgdGhlIHNpdHVhdGlvbiB3aGVyZSBEZXNjcmliZVN0YWNrU3RhdHVzXG4gICAgLy8gYWxyZWFkeSByZXR1cm5lZCBhbiBlcnJvciwgYnV0IHRoZSBtb25pdG9yIGhhc24ndCBzZWVuIGFsbCB0aGUgZXZlbnRzIHlldCBhbmQgd2UnZCBlbmRcbiAgICAvLyB1cCBub3QgcHJpbnRpbmcgdGhlIGZhaWx1cmUgcmVhc29uIHRvIHVzZXJzLlxuICAgIGF3YWl0IHRoaXMuZmluYWxQb2xsVG9FbmQob2xkTW9uaXRvcklkKTtcblxuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkNES19UT09MS0lUX0k1NTAzLm1zZyhgQ29tcGxldGVkICR7dGhpcy5zdGFja0Rpc3BsYXlOYW1lfWAsIHtcbiAgICAgIGRlcGxveW1lbnQ6IG9sZE1vbml0b3JJZCxcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrRGlzcGxheU5hbWUsXG4gICAgICByZXNvdXJjZXNUb3RhbDogdGhpcy5wcm9ncmVzc01vbml0b3IudG90YWwsXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzY2hlZHVsZU5leHRUaWNrKCkge1xuICAgIGlmICghdGhpcy5tb25pdG9ySWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRpY2tUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnRpY2soKSwgdGhpcy5wb2xsaW5nSW50ZXJ2YWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB0aWNrKCkge1xuICAgIGlmICghdGhpcy5tb25pdG9ySWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5yZWFkUHJvbWlzZSA9IHRoaXMucmVhZE5ld0V2ZW50cyh0aGlzLm1vbml0b3JJZCk7XG4gICAgICBhd2FpdCB0aGlzLnJlYWRQcm9taXNlO1xuICAgICAgdGhpcy5yZWFkUHJvbWlzZSA9IHVuZGVmaW5lZDtcblxuICAgICAgLy8gV2UgbWlnaHQgaGF2ZSBiZWVuIHN0b3AoKXBlZCB3aGlsZSB0aGUgbmV0d29yayBjYWxsIHdhcyBpbiBwcm9ncmVzcy5cbiAgICAgIGlmICghdGhpcy5tb25pdG9ySWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkNES19UT09MS0lUX0U1NTAwLm1zZyhcbiAgICAgICAgdXRpbC5mb3JtYXQoJ0Vycm9yIG9jY3VycmVkIHdoaWxlIG1vbml0b3Jpbmcgc3RhY2s6ICVzJywgZSksXG4gICAgICAgIHsgZXJyb3I6IGUgYXMgYW55IH0sXG4gICAgICApKTtcbiAgICB9XG4gICAgdGhpcy5zY2hlZHVsZU5leHRUaWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRNZXRhZGF0YUZvcihsb2dpY2FsSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5zdGFjay5tZXRhZGF0YTtcbiAgICBpZiAoIWxvZ2ljYWxJZCB8fCAhbWV0YWRhdGEpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiByZXNvdXJjZU1ldGFkYXRhKHRoaXMuc3RhY2ssIGxvZ2ljYWxJZCk7XG4gIH1cblxuICAvKipcbiAgICogVHJpbXMgbGVhZGluZy90cmFpbGluZyB3aGl0ZXNwYWNlLCBjb2xsYXBzZXMgYWxsIGludGVybmFsIHdoaXRlc3BhY2VcbiAgICogKGluY2x1ZGluZyBuZXdsaW5lcykgdG8gYSBzaW5nbGUgc3BhY2UsIGFuZCB0cnVuY2F0ZXMgdG8gYG1heENoYXJzYFxuICAgKiBjaGFyYWN0ZXJzLCBhcHBlbmRpbmcgYFsuLi50cnVuY2F0ZWRdYCB3aGVuIHRoZSBvcmlnaW5hbCB3YXMgbG9uZ2VyLlxuICAgKi9cbiAgcHJpdmF0ZSBub3JtYWxpemVNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZywgbWF4Q2hhcnM6IG51bWJlciA9IDQwMCk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IG1lc3NhZ2UudHJpbSgpLnJlcGxhY2UoL1xccysvZywgJyAnKTtcbiAgICByZXR1cm4gbm9ybWFsaXplZC5sZW5ndGggPiBtYXhDaGFyc1xuICAgICAgPyBub3JtYWxpemVkLnN1YnN0cmluZygwLCBtYXhDaGFycykgKyAnWy4uLnRydW5jYXRlZF0nXG4gICAgICA6IG5vcm1hbGl6ZWQ7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBHdWFyZCBIb29rIGFubm90YXRpb24gZGV0YWlscyB2aWEgR2V0SG9va1Jlc3VsdCBBUEkgYW5kIGZvcm1hdHMgdGhlbVxuICAgKiBpbnRvIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nLiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgZmV0Y2ggZmFpbHMgb3IgdGhlcmVcbiAgICogYXJlIG5vIGZhaWxlZCBhbm5vdGF0aW9ucy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hHdWFyZEhvb2tBbm5vdGF0aW9ucyhob29rSW52b2NhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNmbi5nZXRIb29rUmVzdWx0KHsgSG9va1Jlc3VsdElkOiBob29rSW52b2NhdGlvbklkIH0pO1xuICAgICAgY29uc3QgYW5ub3RhdGlvbnMgPSByZXN1bHQuQW5ub3RhdGlvbnMgPz8gW107XG4gICAgICBjb25zdCBmYWlsZWRBbm5vdGF0aW9ucyA9IGFubm90YXRpb25zLmZpbHRlcigoYSkgPT4gYS5TdGF0dXMgPT09ICdGQUlMRUQnKTtcbiAgICAgIGlmIChmYWlsZWRBbm5vdGF0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gWydOb25Db21wbGlhbnQgUnVsZXM6JywgJyddO1xuICAgICAgZm9yIChjb25zdCBhbm5vdGF0aW9uIG9mIGZhaWxlZEFubm90YXRpb25zKSB7XG4gICAgICAgIGlmIChhbm5vdGF0aW9uLkFubm90YXRpb25OYW1lKSB7XG4gICAgICAgICAgbGluZXMucHVzaChgWyR7YW5ub3RhdGlvbi5Bbm5vdGF0aW9uTmFtZX1dYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFubm90YXRpb24uU3RhdHVzTWVzc2FnZSkge1xuICAgICAgICAgIGxpbmVzLnB1c2goYOKAoiAke3RoaXMubm9ybWFsaXplTWVzc2FnZShhbm5vdGF0aW9uLlN0YXR1c01lc3NhZ2UpfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbm5vdGF0aW9uLlJlbWVkaWF0aW9uTWVzc2FnZSkge1xuICAgICAgICAgIGxpbmVzLnB1c2goYFJlbWVkaWF0aW9uOiAke3RoaXMubm9ybWFsaXplTWVzc2FnZShhbm5vdGF0aW9uLlJlbWVkaWF0aW9uTWVzc2FnZSl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbGluZXMucHVzaCgnJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGluZXMuam9pbignXFxuJykudHJpbUVuZCgpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuXG4gICAgICBjb25zdCBpc1Blcm1pc3Npb25zRXJyb3IgPVxuICAgICAgICBlLm5hbWUgPT09ICdBY2Nlc3NEZW5pZWRFeGNlcHRpb24nIHx8XG4gICAgICAgICh0eXBlb2YgZXJyb3JNZXNzYWdlID09PSAnc3RyaW5nJyAmJiBlcnJvck1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnbm90IGF1dGhvcml6ZWQgdG8gcGVyZm9ybTogY2xvdWRmb3JtYXRpb246Z2V0aG9va3Jlc3VsdCcpKTtcblxuICAgICAgaWYgKGlzUGVybWlzc2lvbnNFcnJvciAmJiB0aGlzLmVudlJlc291cmNlcykge1xuICAgICAgICBsZXQgY3VycmVudFZlcnNpb246IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IChhd2FpdCB0aGlzLmVudlJlc291cmNlcy5sb29rdXBUb29sa2l0KCkpLnZlcnNpb247XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnMgbG9va2luZyB1cCB0aGUgYm9vdHN0cmFwIHZlcnNpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMud2FybihcbiAgICAgICAgICB1dGlsLmZvcm1hdChcbiAgICAgICAgICAgIGBGYWlsZWQgdG8gZmV0Y2ggcmVzdWx0IGRldGFpbHMgZm9yIEhvb2sgaW52b2NhdGlvbiAke2hvb2tJbnZvY2F0aW9uSWR9OiAke2Vycm9yTWVzc2FnZX0uIE1ha2Ugc3VyZSB5b3UgaGF2ZSBwZXJtaXNzaW9ucyB0byBjYWxsIHRoZSBHZXRIb29rUmVzdWx0IEFQSSwgb3IgcmUtYm9vdHN0cmFwIHlvdXIgZW52aXJvbm1lbnQgYnkgcnVubmluZyAnY2RrIGJvb3RzdHJhcCcgdG8gdXBkYXRlIHRoZSBCb290c3RyYXAgQ0RLIFRvb2xraXQgc3RhY2suXG4gICAgICAgICAgICAnQm9vdHN0cmFwIHRvb2xraXQgc3RhY2sgdmVyc2lvbiAzMSBvciBsYXRlciBpcyBuZWVkZWQ7IGN1cnJlbnQgdmVyc2lvbjogJHtjdXJyZW50VmVyc2lvbiA/PyAndW5rbm93bid9LmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMud2FybihcbiAgICAgICAgICB1dGlsLmZvcm1hdCgnRmFpbGVkIHRvIGZldGNoIEd1YXJkIEhvb2sgZGV0YWlscyBmb3IgaW52b2NhdGlvbiAlczogJXMnLCBob29rSW52b2NhdGlvbklkLCBlcnJvck1lc3NhZ2UpLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyBhbGwgbmV3IGV2ZW50cyBmcm9tIHRoZSBzdGFjayBoaXN0b3J5XG4gICAqXG4gICAqIFRoZSBldmVudHMgYXJlIHJldHVybmVkIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIgYnkgdGhlIHVuZGVybHlpbmcgcG9sbGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZWFkTmV3RXZlbnRzKG1vbml0b3JJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcG9sbEV2ZW50cyA9IGF3YWl0IHRoaXMucG9sbGVyLnBvbGwoKTtcblxuICAgIGZvciAoY29uc3QgcmVzb3VyY2VFdmVudCBvZiBwb2xsRXZlbnRzKSB7XG4gICAgICB0aGlzLnByb2dyZXNzTW9uaXRvci5wcm9jZXNzKHJlc291cmNlRXZlbnQpO1xuXG4gICAgICAvLyBJZiB0aGlzIGlzIGEgZmFpbGVkIEd1YXJkIEhvb2sgZXZlbnQgd2l0aCBhbiBpbnZvY2F0aW9uIElELCBmZXRjaCBhbm5vdGF0aW9uc1xuICAgICAgaWYgKHJlc291cmNlRXZlbnQuZXZlbnQuSG9va0ludm9jYXRpb25JZCkge1xuICAgICAgICBjb25zdCBhbm5vdGF0aW9ucyA9IGF3YWl0IHRoaXMuZmV0Y2hHdWFyZEhvb2tBbm5vdGF0aW9ucyhyZXNvdXJjZUV2ZW50LmV2ZW50Lkhvb2tJbnZvY2F0aW9uSWQpO1xuICAgICAgICBpZiAoYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgICByZXNvdXJjZUV2ZW50LmV2ZW50Lkhvb2tTdGF0dXNSZWFzb24gPSBhbm5vdGF0aW9ucztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBhY3Rpdml0eTogU3RhY2tBY3Rpdml0eSA9IHtcbiAgICAgICAgZGVwbG95bWVudDogbW9uaXRvcklkLFxuICAgICAgICBldmVudDogcmVzb3VyY2VFdmVudC5ldmVudCxcbiAgICAgICAgbWV0YWRhdGE6IHRoaXMuZmluZE1ldGFkYXRhRm9yKHJlc291cmNlRXZlbnQuZXZlbnQuTG9naWNhbFJlc291cmNlSWQpLFxuICAgICAgICBwcm9ncmVzczogdGhpcy5wcm9ncmVzc01vbml0b3IucHJvZ3Jlc3MsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5DREtfVE9PTEtJVF9JNTUwMi5tc2codGhpcy5mb3JtYXRBY3Rpdml0eShhY3Rpdml0eSwgdHJ1ZSksIGFjdGl2aXR5KSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gYSBmaW5hbCBwb2xsIHRvIHRoZSBlbmQgYW5kIGZsdXNoIG91dCBhbGwgZXZlbnRzIHRvIHRoZSBwcmludGVyXG4gICAqXG4gICAqIEZpbmlzaCBhbnkgcG9sbCBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MsIHRoZW4gZG8gYSBmaW5hbCBvbmUgdW50aWwgd2UndmVcbiAgICogcmVhY2hlZCB0aGUgbGFzdCBwYWdlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBmaW5hbFBvbGxUb0VuZChtb25pdG9ySWQ6IHN0cmluZykge1xuICAgIC8vIElmIHdlIHdlcmUgZG9pbmcgYSBwb2xsLCBmaW5pc2ggdGhhdCBmaXJzdC4gSXQgd2FzIHN0YXJ0ZWQgYmVmb3JlXG4gICAgLy8gdGhlIG1vbWVudCB3ZSB3ZXJlIHN1cmUgd2Ugd2VyZW4ndCBnb2luZyB0byBnZXQgYW55IG5ldyBldmVudHMgYW55bW9yZVxuICAgIC8vIHNvIHdlIG5lZWQgdG8gZG8gYSBuZXcgb25lIGFueXdheS4gTmVlZCB0byB3YWl0IGZvciB0aGlzIG9uZSB0aG91Z2hcbiAgICAvLyBiZWNhdXNlIG91ciBzdGF0ZSBpcyBzaW5nbGUtdGhyZWFkZWQuXG4gICAgaWYgKHRoaXMucmVhZFByb21pc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMucmVhZFByb21pc2U7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5yZWFkTmV3RXZlbnRzKG1vbml0b3JJZCk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0cyBhIHN0YWNrIGFjdGl2aXR5IGludG8gYSBiYXNpYyBzdHJpbmdcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0QWN0aXZpdHkoYWN0aXZpdHk6IFN0YWNrQWN0aXZpdHksIHByb2dyZXNzOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBjb25zdCBldmVudCA9IGFjdGl2aXR5LmV2ZW50O1xuICAgIGNvbnN0IG1ldGFkYXRhID0gYWN0aXZpdHkubWV0YWRhdGE7XG5cbiAgICBjb25zdCByZXNvdXJjZU5hbWUgPSBtZXRhZGF0YSA/IG1ldGFkYXRhLmNvbnN0cnVjdFBhdGggOiBldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCB8fCAnJztcbiAgICBjb25zdCBsb2dpY2FsSWQgPSByZXNvdXJjZU5hbWUgIT09IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkID8gYCgke2V2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkfSkgYCA6ICcnO1xuXG4gICAgcmV0dXJuIHV0aWwuZm9ybWF0KFxuICAgICAgJyVzIHwgJXMlcyB8ICVzIHwgJXMgfCAlcyAlcyVzJXMnLFxuICAgICAgZXZlbnQuU3RhY2tOYW1lLFxuICAgICAgcHJvZ3Jlc3MgIT09IGZhbHNlID8gYCR7YWN0aXZpdHkucHJvZ3Jlc3MuZm9ybWF0dGVkfSB8IGAgOiAnJyxcbiAgICAgIG5ldyBEYXRlKGV2ZW50LlRpbWVzdGFtcCEpLnRvTG9jYWxlVGltZVN0cmluZygpLFxuICAgICAgZXZlbnQuUmVzb3VyY2VTdGF0dXMgfHwgJycsXG4gICAgICBldmVudC5SZXNvdXJjZVR5cGUsXG4gICAgICByZXNvdXJjZU5hbWUsXG4gICAgICBsb2dpY2FsSWQsXG4gICAgICBldmVudC5SZXNvdXJjZVN0YXR1c1JlYXNvbiA/IGV2ZW50LlJlc291cmNlU3RhdHVzUmVhc29uIDogJycsXG4gICAgICBtZXRhZGF0YT8uZW50cnkudHJhY2UgPyBgXFxuXFx0JHttZXRhZGF0YS5lbnRyeS50cmFjZS5qb2luKCdcXG5cXHRcXFxcXyAnKX1gIDogJycsXG4gICAgKTtcbiAgfVxufVxuXG4iXX0=
|
|
287
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stYWN0aXZpdHktbW9uaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0YWNrLWFjdGl2aXR5LW1vbml0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQXlDO0FBQ3pDLGdEQUFrQztBQUVsQyw2REFBbUU7QUFDbkUscUVBQWdFO0FBRWhFLDhEQUE2RDtBQUc3RCwyQ0FBa0Q7QUFDbEQsOEVBQTBFO0FBc0UxRTs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLG9CQUFvQjtJQUMvQjs7T0FFRztJQUNjLE1BQU0sQ0FBbUI7SUFFMUM7OztPQUdHO0lBQ2MsZUFBZSxDQUFTO0lBRWpDLFNBQVMsQ0FBVTtJQUVWLGVBQWUsQ0FBdUI7SUFFdkQ7O09BRUc7SUFDSyxTQUFTLENBQWlDO0lBRWxEOztPQUVHO0lBQ0ssV0FBVyxDQUFnQjtJQUVsQixRQUFRLENBQVc7SUFDbkIsZ0JBQWdCLENBQVM7SUFDekIsS0FBSyxDQUE4QjtJQUNuQyxHQUFHLENBQXdCO0lBQzNCLFlBQVksQ0FBd0I7SUFDcEMsYUFBYSxDQUFVO0lBRXhDLFlBQVksRUFDVixHQUFHLEVBQ0gsUUFBUSxFQUNSLEtBQUssRUFDTCxRQUFRLEVBQ1IsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixlQUFlLEdBQUcsS0FBSyxFQUN2QixZQUFZLEVBQ1osYUFBYSxHQUFHLEtBQUssR0FDSztRQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBQSxpQ0FBZ0IsRUFBQyxRQUFRLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxD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SyxDQUFDLENBQUMsQ0FBQyxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQzVFLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF4U0Qsb0RBd1NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gJ25vZGU6Y3J5cHRvJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCB0eXBlIHsgQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0IH0gZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktYXBpJztcbmltcG9ydCB7IFN0YWNrRXZlbnRQb2xsZXIsIFBvbGxSYW5nZSB9IGZyb20gJy4vc3RhY2stZXZlbnQtcG9sbGVyJztcbmltcG9ydCB7IFN0YWNrUHJvZ3Jlc3NNb25pdG9yIH0gZnJvbSAnLi9zdGFjay1wcm9ncmVzcy1tb25pdG9yJztcbmltcG9ydCB0eXBlIHsgU3RhY2tBY3Rpdml0eSB9IGZyb20gJy4uLy4uL3BheWxvYWRzL3N0YWNrLWFjdGl2aXR5JztcbmltcG9ydCB7IHN0YWNrTmFtZUZyb21Bcm4gfSBmcm9tICcuLi8uLi91dGlsL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB0eXBlIHsgSUNsb3VkRm9ybWF0aW9uQ2xpZW50IH0gZnJvbSAnLi4vYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IEVudmlyb25tZW50UmVzb3VyY2VzIH0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgSU8sIHR5cGUgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcbmltcG9ydCB7IHJlc291cmNlTWV0YWRhdGEgfSBmcm9tICcuLi9yZXNvdXJjZS1tZXRhZGF0YS9yZXNvdXJjZS1tZXRhZGF0YSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhY2tBY3Rpdml0eU1vbml0b3JQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgQ2xvdWRGb3JtYXRpb24gY2xpZW50XG4gICAqL1xuICByZWFkb25seSBjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudDtcblxuICAvKipcbiAgICogVGhlIElvSGVscGVyIHVzZWQgZm9yIG1lc3NhZ2luZ1xuICAgKi9cbiAgcmVhZG9ubHkgaW9IZWxwZXI6IElvSGVscGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgYXJ0aWZhY3QgdGhhdCBpcyBnZXR0aW5nIGRlcGxveWVkXG4gICAqL1xuICByZWFkb25seSBzdGFjazogQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBTdGFjayB0aGF0IGlzIGdldHRpbmcgZGVwbG95ZWRcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRvdGFsIG51bWJlciBvZiByZXNvdXJjZXMgdG8gdXBkYXRlXG4gICAqXG4gICAqIFVzZWQgdG8gY2FsY3VsYXRlIGEgcHJvZ3Jlc3MgYmFyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHByb2dyZXNzIHJlcG9ydGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VzVG90YWw/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENyZWF0aW9uIHRpbWUgb2YgdGhlIGNoYW5nZSBzZXRcbiAgICpcbiAgICogVGhpcyB3aWxsIGJlIHVzZWQgdG8gZmlsdGVyIGV2ZW50cywgb25seSBzaG93aW5nIHRob3NlIGZyb20gYWZ0ZXIgdGhlIGNoYW5nZVxuICAgKiBzZXQgY3JlYXRpb24gdGltZS5cbiAgICpcbiAgICogSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoaXMsIG90aGVyd2lzZSB0aGUgZmlsdGVyaW5nIHdpbGwgYmUgc3ViamVjdFxuICAgKiB0byBjbG9jayBkcmlmdCBiZXR3ZWVuIGxvY2FsIGFuZCBjbG91ZCBtYWNoaW5lcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBMb2NhbCBtYWNoaW5lJ3MgY3VycmVudCB0aW1lXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2VTZXRDcmVhdGlvblRpbWU/OiBEYXRlO1xuXG4gIC8qKlxuICAgKiBUaW1lIHRvIHdhaXQgYmV0d2VlbiBmZXRjaGluZyBuZXcgYWN0aXZpdGllcy5cbiAgICpcbiAgICogTXVzdCB3YWl0IGEgcmVhc29uYWJsZSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHBvbGxzLCBzaW5jZSB3ZSBuZWVkIHRvIGNvbnNpZGVyIENsb3VkRm9ybWF0aW9uIEFQSSBsaW1pdHNcbiAgICpcbiAgICogQGRlZmF1bHQgMl8wMDBcbiAgICovXG4gIHJlYWRvbmx5IHBvbGxpbmdJbnRlcnZhbD86IG51bWJlcjtcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgcmVzb3VyY2VzLCB1c2VkIHRvIGxvb2sgdXAgdGhlIGJvb3RzdHJhcCB0b29sa2l0IHZlcnNpb24gd2hlblxuICAgKiBkaWFnbm9zaW5nIEd1YXJkIEhvb2sgYW5ub3RhdGlvbiBmZXRjaCBmYWlsdXJlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBCb290c3RyYXAgdmVyc2lvbiBpcyBub3QgcmVwb3J0ZWQgaW4gZXJyb3IgbWVzc2FnZXNcbiAgICovXG4gIHJlYWRvbmx5IGVudlJlc291cmNlcz86IEVudmlyb25tZW50UmVzb3VyY2VzO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgZGVwbG95bWVudCBpcyBhbiB1cGRhdGUgdG8gYW4gZXhpc3Rpbmcgc3RhY2sgKGFzIG9wcG9zZWQgdG8gYSBjcmVhdGlvbikuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpc1N0YWNrVXBkYXRlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBEcml2ZXMgdGhlIG1vbml0b3Jpbmcgb2YgYSBTdGFjayBkZXBsb3ltZW50XG4gKlxuICogYGBgXG4gKiDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gKiDilIIgICAgICAgICBTdGFjayAgICAgICAgIOKUgiBwb2xsKCkg4pSCICAgICAgICAgU3RhY2sgICAgICAgICDilIIgIHByb2Nlc3MoZXYpIOKUgiAgICAgICAgIFN0YWNrICAgICAgICAg4pSCXG4gKiDilIIgICAgICBFdmVudFBvbGxlciAgICAgIOKUguKXgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgiAgICBBY3Rpdml0eU1vbml0b3IgICAg4pSC4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pa24pSCICAgIFByb2dyZXNzTW9uaXRvciAgICDilIJcbiAqIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgU3RhY2tBY3Rpdml0eU1vbml0b3Ige1xuICAvKipcbiAgICogVGhlIHBvbGxlciB1c2VkIHRvIHJlYWQgc3RhY2sgZXZlbnRzXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHBvbGxlcjogU3RhY2tFdmVudFBvbGxlcjtcblxuICAvKipcbiAgICogRmV0Y2ggbmV3IGFjdGl2aXR5IGV2ZXJ5IDEgc2Vjb25kXG4gICAqIFByaW50ZXJzIGNhbiBkZWNpZGUgdG8gdXBkYXRlIGEgdmlldyBsZXNzIGZyZXF1ZW50bHkgaWYgZGVzaXJlZFxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBwb2xsaW5nSW50ZXJ2YWw6IG51bWJlcjtcblxuICBwcml2YXRlIG1vbml0b3JJZD86IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IHByb2dyZXNzTW9uaXRvcjogU3RhY2tQcm9ncmVzc01vbml0b3I7XG5cbiAgLyoqXG4gICAqIEN1cnJlbnQgdGljayB0aW1lclxuICAgKi9cbiAgcHJpdmF0ZSB0aWNrVGltZXI/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcblxuICAvKipcbiAgICogU2V0IHRvIHRoZSBhY3Rpdml0eSBvZiByZWFkaW5nIHRoZSBjdXJyZW50IGV2ZW50c1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkUHJvbWlzZT86IFByb21pc2U8YW55PjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGlvSGVscGVyOiBJb0hlbHBlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFja0Rpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhY2s6IENsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcbiAgcHJpdmF0ZSByZWFkb25seSBjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBlbnZSZXNvdXJjZXM/OiBFbnZpcm9ubWVudFJlc291cmNlcztcbiAgcHJpdmF0ZSByZWFkb25seSBpc1N0YWNrVXBkYXRlOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBjZm4sXG4gICAgaW9IZWxwZXIsXG4gICAgc3RhY2ssXG4gICAgc3RhY2tBcm4sXG4gICAgcmVzb3VyY2VzVG90YWwsXG4gICAgY2hhbmdlU2V0Q3JlYXRpb25UaW1lLFxuICAgIHBvbGxpbmdJbnRlcnZhbCA9IDJfMDAwLFxuICAgIGVudlJlc291cmNlcyxcbiAgICBpc1N0YWNrVXBkYXRlID0gZmFsc2UsXG4gIH06IFN0YWNrQWN0aXZpdHlNb25pdG9yUHJvcHMpIHtcbiAgICB0aGlzLmlvSGVscGVyID0gaW9IZWxwZXI7XG4gICAgdGhpcy5zdGFjayA9IHN0YWNrO1xuICAgIHRoaXMuc3RhY2tEaXNwbGF5TmFtZSA9IHN0YWNrTmFtZUZyb21Bcm4oc3RhY2tBcm4pO1xuICAgIHRoaXMuY2ZuID0gY2ZuO1xuICAgIHRoaXMuZW52UmVzb3VyY2VzID0gZW52UmVzb3VyY2VzO1xuICAgIHRoaXMuaXNTdGFja1VwZGF0ZSA9IGlzU3RhY2tVcGRhdGU7XG5cbiAgICB0aGlzLnByb2dyZXNzTW9uaXRvciA9IG5ldyBTdGFja1Byb2dyZXNzTW9uaXRvcihyZXNvdXJjZXNUb3RhbCk7XG4gICAgdGhpcy5wb2xsaW5nSW50ZXJ2YWwgPSBwb2xsaW5nSW50ZXJ2YWw7XG4gICAgdGhpcy5wb2xsZXIgPSBuZXcgU3RhY2tFdmVudFBvbGxlcihjZm4sIHtcbiAgICAgIHN0YWNrQXJuLFxuICAgICAgaW5pdGlhbFBvbGxSYW5nZTogUG9sbFJhbmdlLnNpbmNlVGltZXN0YW1wKGNoYW5nZVNldENyZWF0aW9uVGltZT8uZ2V0VGltZSgpID8/IERhdGUubm93KCkpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBlcnJvcnMgdGhhdCB3ZXJlIGRpc2NvdmVyZWQgZHVyaW5nIG1vbml0b3Jpbmcgb2YgdGhpcyBzdGFja1xuICAgKi9cbiAgcHVibGljIGdldCBlcnJvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMucG9sbGVyLmVycm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvdXJjZXMgdGhhdCByZWNlaXZlZCBERUxFVEVfRkFJTEVEIGR1cmluZyB0aGUgc3RhY2sgdXBkYXRlLlxuICAgKiBDbG91ZEZvcm1hdGlvbiBza2lwcyB0aGVzZSBhbmQgY29tcGxldGVzIHRoZSB1cGRhdGUgYW55d2F5LlxuICAgKi9cbiAgcHVibGljIGdldCBkZWxldGVGYWlsdXJlcygpIHtcbiAgICByZXR1cm4gdGhpcy5wb2xsZXIuZGVsZXRlRmFpbHVyZXM7XG4gIH1cblxuICAvKipcbiAgICogUmVzb3VyY2VzIHRoYXQgY29tcGxldGVkIGRlcGxveW1lbnQgYnV0IGFyZSBzdGlsbCBzdGFiaWxpemluZy5cbiAgICogUG9wdWxhdGVkIGZvciBFeHByZXNzIE1vZGUgZGVwbG95bWVudHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN0YWJpbGl6aW5nUmVzb3VyY2VzKCkge1xuICAgIHJldHVybiB0aGlzLnBvbGxlci5zdGFiaWxpemluZ1Jlc291cmNlcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdGFydCgpIHtcbiAgICB0aGlzLm1vbml0b3JJZCA9IHJhbmRvbVVVSUQoKTtcbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5DREtfVE9PTEtJVF9JNTUwMS5tc2coYERlcGxveWluZyAke3RoaXMuc3RhY2tEaXNwbGF5TmFtZX1gLCB7XG4gICAgICBkZXBsb3ltZW50OiB0aGlzLm1vbml0b3JJZCxcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrRGlzcGxheU5hbWUsXG4gICAgICByZXNvdXJjZXNUb3RhbDogdGhpcy5wcm9ncmVzc01vbml0b3IudG90YWwsXG4gICAgICBpc1N0YWNrVXBkYXRlOiB0aGlzLmlzU3RhY2tVcGRhdGUsXG4gICAgfSkpO1xuICAgIHRoaXMuc2NoZWR1bGVOZXh0VGljaygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHN0b3AoKSB7XG4gICAgY29uc3Qgb2xkTW9uaXRvcklkID0gdGhpcy5tb25pdG9ySWQhO1xuICAgIHRoaXMubW9uaXRvcklkID0gdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLnRpY2tUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGlja1RpbWVyKTtcbiAgICB9XG5cbiAgICAvLyBEbyBhIGZpbmFsIHBvbGwgZm9yIGFsbCBldmVudHMuIFRoaXMgaXMgdG8gaGFuZGxlIHRoZSBzaXR1YXRpb24gd2hlcmUgRGVzY3JpYmVTdGFja1N0YXR1c1xuICAgIC8vIGFscmVhZHkgcmV0dXJuZWQgYW4gZXJyb3IsIGJ1dCB0aGUgbW9uaXRvciBoYXNuJ3Qgc2VlbiBhbGwgdGhlIGV2ZW50cyB5ZXQgYW5kIHdlJ2QgZW5kXG4gICAgLy8gdXAgbm90IHByaW50aW5nIHRoZSBmYWlsdXJlIHJlYXNvbiB0byB1c2Vycy5cbiAgICBhd2FpdCB0aGlzLmZpbmFsUG9sbFRvRW5kKG9sZE1vbml0b3JJZCk7XG5cbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5DREtfVE9PTEtJVF9JNTUwMy5tc2coYENvbXBsZXRlZCAke3RoaXMuc3RhY2tEaXNwbGF5TmFtZX1gLCB7XG4gICAgICBkZXBsb3ltZW50OiBvbGRNb25pdG9ySWQsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIHN0YWNrTmFtZTogdGhpcy5zdGFja0Rpc3BsYXlOYW1lLFxuICAgICAgcmVzb3VyY2VzVG90YWw6IHRoaXMucHJvZ3Jlc3NNb25pdG9yLnRvdGFsLFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgc2NoZWR1bGVOZXh0VGljaygpIHtcbiAgICBpZiAoIXRoaXMubW9uaXRvcklkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50aWNrVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy50aWNrKCksIHRoaXMucG9sbGluZ0ludGVydmFsKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdGljaygpIHtcbiAgICBpZiAoIXRoaXMubW9uaXRvcklkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucmVhZFByb21pc2UgPSB0aGlzLnJlYWROZXdFdmVudHModGhpcy5tb25pdG9ySWQpO1xuICAgICAgYXdhaXQgdGhpcy5yZWFkUHJvbWlzZTtcbiAgICAgIHRoaXMucmVhZFByb21pc2UgPSB1bmRlZmluZWQ7XG5cbiAgICAgIC8vIFdlIG1pZ2h0IGhhdmUgYmVlbiBzdG9wKClwZWQgd2hpbGUgdGhlIG5ldHdvcmsgY2FsbCB3YXMgaW4gcHJvZ3Jlc3MuXG4gICAgICBpZiAoIXRoaXMubW9uaXRvcklkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5DREtfVE9PTEtJVF9FNTUwMC5tc2coXG4gICAgICAgIHV0aWwuZm9ybWF0KCdFcnJvciBvY2N1cnJlZCB3aGlsZSBtb25pdG9yaW5nIHN0YWNrOiAlcycsIGUpLFxuICAgICAgICB7IGVycm9yOiBlIGFzIGFueSB9LFxuICAgICAgKSk7XG4gICAgfVxuICAgIHRoaXMuc2NoZWR1bGVOZXh0VGljaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kTWV0YWRhdGFGb3IobG9naWNhbElkOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuc3RhY2subWV0YWRhdGE7XG4gICAgaWYgKCFsb2dpY2FsSWQgfHwgIW1ldGFkYXRhKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb3VyY2VNZXRhZGF0YSh0aGlzLnN0YWNrLCBsb2dpY2FsSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaW1zIGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZSwgY29sbGFwc2VzIGFsbCBpbnRlcm5hbCB3aGl0ZXNwYWNlXG4gICAqIChpbmNsdWRpbmcgbmV3bGluZXMpIHRvIGEgc2luZ2xlIHNwYWNlLCBhbmQgdHJ1bmNhdGVzIHRvIGBtYXhDaGFyc2BcbiAgICogY2hhcmFjdGVycywgYXBwZW5kaW5nIGBbLi4udHJ1bmNhdGVkXWAgd2hlbiB0aGUgb3JpZ2luYWwgd2FzIGxvbmdlci5cbiAgICovXG4gIHByaXZhdGUgbm9ybWFsaXplTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcsIG1heENoYXJzOiBudW1iZXIgPSA0MDApOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBtZXNzYWdlLnRyaW0oKS5yZXBsYWNlKC9cXHMrL2csICcgJyk7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQubGVuZ3RoID4gbWF4Q2hhcnNcbiAgICAgID8gbm9ybWFsaXplZC5zdWJzdHJpbmcoMCwgbWF4Q2hhcnMpICsgJ1suLi50cnVuY2F0ZWRdJ1xuICAgICAgOiBub3JtYWxpemVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgR3VhcmQgSG9vayBhbm5vdGF0aW9uIGRldGFpbHMgdmlhIEdldEhvb2tSZXN1bHQgQVBJIGFuZCBmb3JtYXRzIHRoZW1cbiAgICogaW50byBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZy4gUmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIGZldGNoIGZhaWxzIG9yIHRoZXJlXG4gICAqIGFyZSBubyBmYWlsZWQgYW5ub3RhdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZldGNoR3VhcmRIb29rQW5ub3RhdGlvbnMoaG9va0ludm9jYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jZm4uZ2V0SG9va1Jlc3VsdCh7IEhvb2tSZXN1bHRJZDogaG9va0ludm9jYXRpb25JZCB9KTtcbiAgICAgIGNvbnN0IGFubm90YXRpb25zID0gcmVzdWx0LkFubm90YXRpb25zID8/IFtdO1xuICAgICAgY29uc3QgZmFpbGVkQW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9ucy5maWx0ZXIoKGEpID0+IGEuU3RhdHVzID09PSAnRkFJTEVEJyk7XG4gICAgICBpZiAoZmFpbGVkQW5ub3RhdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFsnTm9uQ29tcGxpYW50IFJ1bGVzOicsICcnXTtcbiAgICAgIGZvciAoY29uc3QgYW5ub3RhdGlvbiBvZiBmYWlsZWRBbm5vdGF0aW9ucykge1xuICAgICAgICBpZiAoYW5ub3RhdGlvbi5Bbm5vdGF0aW9uTmFtZSkge1xuICAgICAgICAgIGxpbmVzLnB1c2goYFske2Fubm90YXRpb24uQW5ub3RhdGlvbk5hbWV9XWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbm5vdGF0aW9uLlN0YXR1c01lc3NhZ2UpIHtcbiAgICAgICAgICBsaW5lcy5wdXNoKGDigKIgJHt0aGlzLm5vcm1hbGl6ZU1lc3NhZ2UoYW5ub3RhdGlvbi5TdGF0dXNNZXNzYWdlKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYW5ub3RhdGlvbi5SZW1lZGlhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgICBsaW5lcy5wdXNoKGBSZW1lZGlhdGlvbjogJHt0aGlzLm5vcm1hbGl6ZU1lc3NhZ2UoYW5ub3RhdGlvbi5SZW1lZGlhdGlvbk1lc3NhZ2UpfWApO1xuICAgICAgICB9XG4gICAgICAgIGxpbmVzLnB1c2goJycpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpLnRyaW1FbmQoKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcblxuICAgICAgY29uc3QgaXNQZXJtaXNzaW9uc0Vycm9yID1cbiAgICAgICAgZS5uYW1lID09PSAnQWNjZXNzRGVuaWVkRXhjZXB0aW9uJyB8fFxuICAgICAgICAodHlwZW9mIGVycm9yTWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgZXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ25vdCBhdXRob3JpemVkIHRvIHBlcmZvcm06IGNsb3VkZm9ybWF0aW9uOmdldGhvb2tyZXN1bHQnKSk7XG5cbiAgICAgIGlmIChpc1Blcm1pc3Npb25zRXJyb3IgJiYgdGhpcy5lbnZSZXNvdXJjZXMpIHtcbiAgICAgICAgbGV0IGN1cnJlbnRWZXJzaW9uOiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY3VycmVudFZlcnNpb24gPSAoYXdhaXQgdGhpcy5lbnZSZXNvdXJjZXMubG9va3VwVG9vbGtpdCgpKS52ZXJzaW9uO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzIGxvb2tpbmcgdXAgdGhlIGJvb3RzdHJhcCB2ZXJzaW9uXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLndhcm4oXG4gICAgICAgICAgdXRpbC5mb3JtYXQoXG4gICAgICAgICAgICBgRmFpbGVkIHRvIGZldGNoIHJlc3VsdCBkZXRhaWxzIGZvciBIb29rIGludm9jYXRpb24gJHtob29rSW52b2NhdGlvbklkfTogJHtlcnJvck1lc3NhZ2V9LiBNYWtlIHN1cmUgeW91IGhhdmUgcGVybWlzc2lvbnMgdG8gY2FsbCB0aGUgR2V0SG9va1Jlc3VsdCBBUEksIG9yIHJlLWJvb3RzdHJhcCB5b3VyIGVudmlyb25tZW50IGJ5IHJ1bm5pbmcgJ2NkayBib290c3RyYXAnIHRvIHVwZGF0ZSB0aGUgQm9vdHN0cmFwIENESyBUb29sa2l0IHN0YWNrLlxuICAgICAgICAgICAgJ0Jvb3RzdHJhcCB0b29sa2l0IHN0YWNrIHZlcnNpb24gMzEgb3IgbGF0ZXIgaXMgbmVlZGVkOyBjdXJyZW50IHZlcnNpb246ICR7Y3VycmVudFZlcnNpb24gPz8gJ3Vua25vd24nfS5gLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLndhcm4oXG4gICAgICAgICAgdXRpbC5mb3JtYXQoJ0ZhaWxlZCB0byBmZXRjaCBHdWFyZCBIb29rIGRldGFpbHMgZm9yIGludm9jYXRpb24gJXM6ICVzJywgaG9va0ludm9jYXRpb25JZCwgZXJyb3JNZXNzYWdlKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVhZHMgYWxsIG5ldyBldmVudHMgZnJvbSB0aGUgc3RhY2sgaGlzdG9yeVxuICAgKlxuICAgKiBUaGUgZXZlbnRzIGFyZSByZXR1cm5lZCBpbiBjaHJvbm9sb2dpY2FsIG9yZGVyIGJ5IHRoZSB1bmRlcmx5aW5nIHBvbGxlci5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVhZE5ld0V2ZW50cyhtb25pdG9ySWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBvbGxFdmVudHMgPSBhd2FpdCB0aGlzLnBvbGxlci5wb2xsKCk7XG5cbiAgICBmb3IgKGNvbnN0IHJlc291cmNlRXZlbnQgb2YgcG9sbEV2ZW50cykge1xuICAgICAgdGhpcy5wcm9ncmVzc01vbml0b3IucHJvY2VzcyhyZXNvdXJjZUV2ZW50KTtcblxuICAgICAgLy8gSWYgdGhpcyBpcyBhIGZhaWxlZCBHdWFyZCBIb29rIGV2ZW50IHdpdGggYW4gaW52b2NhdGlvbiBJRCwgZmV0Y2ggYW5ub3RhdGlvbnNcbiAgICAgIGlmIChyZXNvdXJjZUV2ZW50LmV2ZW50Lkhvb2tJbnZvY2F0aW9uSWQpIHtcbiAgICAgICAgY29uc3QgYW5ub3RhdGlvbnMgPSBhd2FpdCB0aGlzLmZldGNoR3VhcmRIb29rQW5ub3RhdGlvbnMocmVzb3VyY2VFdmVudC5ldmVudC5Ib29rSW52b2NhdGlvbklkKTtcbiAgICAgICAgaWYgKGFubm90YXRpb25zKSB7XG4gICAgICAgICAgcmVzb3VyY2VFdmVudC5ldmVudC5Ib29rU3RhdHVzUmVhc29uID0gYW5ub3RhdGlvbnM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgYWN0aXZpdHk6IFN0YWNrQWN0aXZpdHkgPSB7XG4gICAgICAgIGRlcGxveW1lbnQ6IG1vbml0b3JJZCxcbiAgICAgICAgZXZlbnQ6IHJlc291cmNlRXZlbnQuZXZlbnQsXG4gICAgICAgIG1ldGFkYXRhOiB0aGlzLmZpbmRNZXRhZGF0YUZvcihyZXNvdXJjZUV2ZW50LmV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkKSxcbiAgICAgICAgcHJvZ3Jlc3M6IHRoaXMucHJvZ3Jlc3NNb25pdG9yLnByb2dyZXNzLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uQ0RLX1RPT0xLSVRfSTU1MDIubXNnKHRoaXMuZm9ybWF0QWN0aXZpdHkoYWN0aXZpdHksIHRydWUpLCBhY3Rpdml0eSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIGEgZmluYWwgcG9sbCB0byB0aGUgZW5kIGFuZCBmbHVzaCBvdXQgYWxsIGV2ZW50cyB0byB0aGUgcHJpbnRlclxuICAgKlxuICAgKiBGaW5pc2ggYW55IHBvbGwgY3VycmVudGx5IGluIHByb2dyZXNzLCB0aGVuIGRvIGEgZmluYWwgb25lIHVudGlsIHdlJ3ZlXG4gICAqIHJlYWNoZWQgdGhlIGxhc3QgcGFnZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZmluYWxQb2xsVG9FbmQobW9uaXRvcklkOiBzdHJpbmcpIHtcbiAgICAvLyBJZiB3ZSB3ZXJlIGRvaW5nIGEgcG9sbCwgZmluaXNoIHRoYXQgZmlyc3QuIEl0IHdhcyBzdGFydGVkIGJlZm9yZVxuICAgIC8vIHRoZSBtb21lbnQgd2Ugd2VyZSBzdXJlIHdlIHdlcmVuJ3QgZ29pbmcgdG8gZ2V0IGFueSBuZXcgZXZlbnRzIGFueW1vcmVcbiAgICAvLyBzbyB3ZSBuZWVkIHRvIGRvIGEgbmV3IG9uZSBhbnl3YXkuIE5lZWQgdG8gd2FpdCBmb3IgdGhpcyBvbmUgdGhvdWdoXG4gICAgLy8gYmVjYXVzZSBvdXIgc3RhdGUgaXMgc2luZ2xlLXRocmVhZGVkLlxuICAgIGlmICh0aGlzLnJlYWRQcm9taXNlKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlYWRQcm9taXNlO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucmVhZE5ld0V2ZW50cyhtb25pdG9ySWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgYSBzdGFjayBhY3Rpdml0eSBpbnRvIGEgYmFzaWMgc3RyaW5nXG4gICAqL1xuICBwcml2YXRlIGZvcm1hdEFjdGl2aXR5KGFjdGl2aXR5OiBTdGFja0FjdGl2aXR5LCBwcm9ncmVzczogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgY29uc3QgZXZlbnQgPSBhY3Rpdml0eS5ldmVudDtcbiAgICBjb25zdCBtZXRhZGF0YSA9IGFjdGl2aXR5Lm1ldGFkYXRhO1xuXG4gICAgY29uc3QgcmVzb3VyY2VOYW1lID0gbWV0YWRhdGEgPyBtZXRhZGF0YS5jb25zdHJ1Y3RQYXRoIDogZXZlbnQuTG9naWNhbFJlc291cmNlSWQgfHwgJyc7XG4gICAgY29uc3QgbG9naWNhbElkID0gcmVzb3VyY2VOYW1lICE9PSBldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCA/IGAoJHtldmVudC5Mb2dpY2FsUmVzb3VyY2VJZH0pIGAgOiAnJztcblxuICAgIHJldHVybiB1dGlsLmZvcm1hdChcbiAgICAgICclcyB8ICVzJXMgfCAlcyB8ICVzIHwgJXMgJXMlcyVzJyxcbiAgICAgIGV2ZW50LlN0YWNrTmFtZSxcbiAgICAgIHByb2dyZXNzICE9PSBmYWxzZSA/IGAke2FjdGl2aXR5LnByb2dyZXNzLmZvcm1hdHRlZH0gfCBgIDogJycsXG4gICAgICBuZXcgRGF0ZShldmVudC5UaW1lc3RhbXAhKS50b0xvY2FsZVRpbWVTdHJpbmcoKSxcbiAgICAgIGV2ZW50LlJlc291cmNlU3RhdHVzIHx8ICcnLFxuICAgICAgZXZlbnQuUmVzb3VyY2VUeXBlLFxuICAgICAgcmVzb3VyY2VOYW1lLFxuICAgICAgbG9naWNhbElkLFxuICAgICAgZXZlbnQuUmVzb3VyY2VTdGF0dXNSZWFzb24gPyBldmVudC5SZXNvdXJjZVN0YXR1c1JlYXNvbiA6ICcnLFxuICAgICAgbWV0YWRhdGE/LmVudHJ5LnRyYWNlID8gYFxcblxcdCR7bWV0YWRhdGEuZW50cnkudHJhY2Uuam9pbignXFxuXFx0XFxcXF8gJyl9YCA6ICcnLFxuICAgICk7XG4gIH1cbn1cblxuIl19
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { StackEvent } from '@aws-sdk/client-cloudformation';
|
|
2
2
|
import type { ResourceError } from './resource-errors';
|
|
3
3
|
import { ResourceErrors } from './resource-errors';
|
|
4
|
-
import type { ResourceDeleteFailure } from '../../toolkit/types';
|
|
4
|
+
import type { ResourceDeleteFailure, StabilizingResource } from '../../toolkit/types';
|
|
5
5
|
import type { ICloudFormationClient } from '../aws-auth/private';
|
|
6
6
|
export interface StackEventPollerProps {
|
|
7
7
|
/**
|
|
@@ -115,6 +115,12 @@ export declare class StackEventPoller {
|
|
|
115
115
|
* CloudFormation skips these and completes the update anyway.
|
|
116
116
|
*/
|
|
117
117
|
readonly deleteFailures: ResourceDeleteFailure[];
|
|
118
|
+
/**
|
|
119
|
+
* Resources that reached a `*_COMPLETE` status with a stabilization reason.
|
|
120
|
+
* Populated for Express Mode deployments, where CloudFormation reports a
|
|
121
|
+
* resource as complete while it is still stabilizing asynchronously.
|
|
122
|
+
*/
|
|
123
|
+
readonly stabilizingResources: StabilizingResource[];
|
|
118
124
|
private readonly eventIds;
|
|
119
125
|
private readonly nestedStackPollers;
|
|
120
126
|
constructor(cfn: ICloudFormationClient, props: StackEventPollerProps);
|
|
@@ -134,6 +140,7 @@ export declare class StackEventPoller {
|
|
|
134
140
|
*/
|
|
135
141
|
poll(): Promise<ResourceEvent[]>;
|
|
136
142
|
private updateDeleteFailures;
|
|
143
|
+
private updateStabilizingResources;
|
|
137
144
|
private doPoll;
|
|
138
145
|
/**
|
|
139
146
|
* On the CREATE_IN_PROGRESS, UPDATE_IN_PROGRESS, DELETE_IN_PROGRESS event of a nested stack, poll the nested stack updates
|
|
@@ -102,6 +102,12 @@ class StackEventPoller {
|
|
|
102
102
|
* CloudFormation skips these and completes the update anyway.
|
|
103
103
|
*/
|
|
104
104
|
deleteFailures = [];
|
|
105
|
+
/**
|
|
106
|
+
* Resources that reached a `*_COMPLETE` status with a stabilization reason.
|
|
107
|
+
* Populated for Express Mode deployments, where CloudFormation reports a
|
|
108
|
+
* resource as complete while it is still stabilizing asynchronously.
|
|
109
|
+
*/
|
|
110
|
+
stabilizingResources = [];
|
|
105
111
|
eventIds = new Set();
|
|
106
112
|
nestedStackPollers = {};
|
|
107
113
|
constructor(cfn, props) {
|
|
@@ -138,6 +144,7 @@ class StackEventPoller {
|
|
|
138
144
|
this.events.push(...events);
|
|
139
145
|
this.errors.update(...events);
|
|
140
146
|
this.updateDeleteFailures(events);
|
|
147
|
+
this.updateStabilizingResources(events);
|
|
141
148
|
return events;
|
|
142
149
|
}
|
|
143
150
|
updateDeleteFailures(events) {
|
|
@@ -152,6 +159,17 @@ class StackEventPoller {
|
|
|
152
159
|
}
|
|
153
160
|
}
|
|
154
161
|
}
|
|
162
|
+
updateStabilizingResources(events) {
|
|
163
|
+
for (const { event } of events) {
|
|
164
|
+
if ((0, util_1.isStabilizingResourceEvent)(event)) {
|
|
165
|
+
this.stabilizingResources.push({
|
|
166
|
+
logicalResourceId: event.LogicalResourceId,
|
|
167
|
+
resourceType: event.ResourceType ?? '',
|
|
168
|
+
reason: event.ResourceStatusReason,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
155
173
|
async doPoll() {
|
|
156
174
|
// If we already have events and we poll again, we can only get newer events up to
|
|
157
175
|
// events we've already seen. No need to invoke the "oldestEvent" decider again.
|
|
@@ -243,4 +261,4 @@ function isStackBeginOperationState(state) {
|
|
|
243
261
|
function isStackTerminalState(state) {
|
|
244
262
|
return !(state ?? '').endsWith('_IN_PROGRESS');
|
|
245
263
|
}
|
|
246
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stZXZlbnQtcG9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RhY2stZXZlbnQtcG9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDBFQUFnRTtBQUVoRSx1REFBbUQ7QUFFbkQscUNBQWtFO0FBbUNsRSxNQUFzQixTQUFTO0lBQzdCOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFpQjtRQUM1QyxPQUFPO1lBQ0wsVUFBVSxDQUFDLEtBQUs7Z0JBQ2QsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQ3BGLENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQWtCO1FBQy9DLE9BQU87WUFDTCxVQUFVLENBQUMsS0FBSztnQkFDZCxPQUFPLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztZQUNySCxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLG1CQUFtQjtRQUMvQixJQUFJLFdBQStCLENBQUM7UUFDcEMsT0FBTztZQUNMLFVBQVUsQ0FBQyxLQUFLO2dCQUNkLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUM5QixXQUFXLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7b0JBQ3RDLE9BQU8sVUFBVSxDQUFDO2dCQUNwQixDQUFDO2dCQUVELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FB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QUFLLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFN0YWNrRXZlbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgUmVzb3VyY2VTdGF0dXMgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZUVycm9yIH0gZnJvbSAnLi9yZXNvdXJjZS1lcnJvcnMnO1xuaW1wb3J0IHsgUmVzb3VyY2VFcnJvcnMgfSBmcm9tICcuL3Jlc291cmNlLWVycm9ycyc7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlRGVsZXRlRmFpbHVyZSB9IGZyb20gJy4uLy4uL3Rvb2xraXQvdHlwZXMnO1xuaW1wb3J0IHsgZm9ybWF0RXJyb3JNZXNzYWdlLCBpc1Jvb3RTdGFja0V2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgdHlwZSB7IElDbG91ZEZvcm1hdGlvbkNsaWVudCB9IGZyb20gJy4uL2F3cy1hdXRoL3ByaXZhdGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrRXZlbnRQb2xsZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdG8gcG9sbFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tBcm46IHN0cmluZztcblxuICAvKipcbiAgICogSURzIG9mIHBhcmVudCBzdGFja3Mgb2YgdGhpcyByZXNvdXJjZSwgaW4gY2FzZSBvZiByZXNvdXJjZXMgaW4gbmVzdGVkIHN0YWNrc1xuICAgKi9cbiAgcmVhZG9ubHkgcGFyZW50U3RhY2tMb2dpY2FsSWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEEgY29uZmlndXJhYmxlIGFsZ29yaXRobSB0byBpbmRpY2F0ZSB3aGVuIHdlIHNob3VsZCBzdG9wIGNvbnN1bWluZyB0aGUgZXZlbnQgc3RyZWFtLlxuICAgKlxuICAgKiBUaGUgaW5pdGlhbFBvbGxSYW5nZSBvYmplY3Qgd2lsbCBiZSBjYWxsZWQgb24gdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2ZcbiAgICogcG9sbGluZy4gIEl0IHdpbGwgYmUgc2hvd24gYWxsIGV2ZW50cyBpbiBhIGNodW5rIGluIHR1cm4sIG5ld2VzdC10by1vbGRlc3QsXG4gICAqIGFuZCBzaG91bGQgZGVjaWRlIHRoZSBvbGRlc3QgZXZlbnQgd2UncmUgc3RpbGwgaW50ZXJlc3RlZCBpbi4gV2Ugd2lsbCBub3RcbiAgICogZ28gYmFjayBmdXJ0aGVyIGNvbnN1bWluZyB0aGUgZXZlbnQgc3RyZWFtLlxuICAgKlxuICAgKiBPbiBzdWJzZXF1ZW50IHBvbGxzLCB3ZSB3aWxsIHVzZSB0aGUgZXZlbnRzIHdlJ3ZlIGFscmVhZHkgc2VlbiB0byBkZWNpZGUgd2hlbiB0byBzdG9wXG4gICAqIHBvbGxpbmcuXG4gICAqL1xuICByZWFkb25seSBpbml0aWFsUG9sbFJhbmdlOiBJUG9sbFJhbmdlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQb2xsUmFuZ2Uge1xuICAvKipcbiAgICogV2hldGhlciBwb2xsaW5nIHNob3VsZCBzdG9wIG9uIHNlZWluZyB0aGlzIGV2ZW50XG4gICAqL1xuICBzaG91bGRTdG9wKGV2ZW50OiBSZXNvdXJjZUV2ZW50KTogJ3N0b3AtaW5jbHVkZScgfCAnc3RvcC1leGNsdWRlJyB8ICdjb250aW51ZSc7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQb2xsUmFuZ2Uge1xuICAvKipcbiAgICogT25seSBpbmNsdWRlIGV2ZW50cyBzaW5jZSB0aGFuIGEgZ2l2ZW4gdGltZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzaW5jZVRpbWVzdGFtcChzdGFydFRpbWU6IG51bWJlcik6IElQb2xsUmFuZ2Uge1xuICAgIHJldHVybiB7XG4gICAgICBzaG91bGRTdG9wKGV2ZW50KSB7XG4gICAgICAgIHJldHVybiBldmVudC5ldmVudC5UaW1lc3RhbXAhLnZhbHVlT2YoKSA8IHN0YXJ0VGltZSA/ICdzdG9wLWV4Y2x1ZGUnIDogJ2NvbnRpbnVlJztcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHdoZW4gd2Ugc2VlIHRoZSByb290IHN0YWNrIGVudGVyaW5nIHRoaXMgc3RhdHVzXG4gICAqXG4gICAqIFNob3VsZCBiZSBzb21ldGhpbmcgbGlrZSBgQ1JFQVRFX0lOX1BST0dSRVNTYCwgYFVQREFURV9JTl9QUk9HUkVTU2AsXG4gICAqIGBERUxFVEVfSU5fUFJPR1JFU1MsIGBST0xMQkFDS19JTl9QUk9HUkVTU2AuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNpbmNlU3RhY2tTdGF0dXMoc3RhdHVzZXM6IHN0cmluZ1tdKTogSVBvbGxSYW5nZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3VsZFN0b3AoZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LmlzUm9vdFN0YWNrRXZlbnQgJiYgc3RhdHVzZXMuaW5jbHVkZXMoZXZlbnQuZXZlbnQuUmVzb3VyY2VTdGF0dXMgPz8gJycpID8gJ3N0b3AtaW5jbHVkZScgOiAnY29udGludWUnO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3Agd2hlbiB3ZSBzZWUgZXZlbnRzIHRoYXQgYmVsb25nIHRvIGEgZGlmZmVyZW50IG9wZXJhdGlvblxuICAgKlxuICAgKiBSZWNvcmRzIHRoZSBmaXJzdCBPcGVyYXRpb25JZCwgYW5kIHN0b3BzIGFzIHNvb24gYXMgd2Ugc2VlIGV2ZW50cyB0aGF0IGRvbid0IGhhdmUgaXQgYW55bW9yZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbW9zdFJlY2VudE9wZXJhdGlvbigpOiBJUG9sbFJhbmdlIHtcbiAgICBsZXQgb3BlcmF0aW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvdWxkU3RvcChldmVudCkge1xuICAgICAgICBpZiAob3BlcmF0aW9uSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG9wZXJhdGlvbklkID0gZXZlbnQuZXZlbnQuT3BlcmF0aW9uSWQ7XG4gICAgICAgICAgcmV0dXJuICdjb250aW51ZSc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXZlbnQuZXZlbnQuT3BlcmF0aW9uSWQgPT09IG9wZXJhdGlvbklkID8gJ2NvbnRpbnVlJyA6ICdzdG9wLWV4Y2x1ZGUnO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgcG9sbCByYW5nZSBkZWNpZGVyIHRoYXQgYWx3YXlzIHJldHVybnMgJ2NvbnRpbnVlJywgY29uc3VtaW5nIHRoZSBlbnRpcmUgQ0ZOIGV2ZW50IHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29uc3VtZUFsbCgpOiBJUG9sbFJhbmdlIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvdWxkU3RvcCgpIHtcbiAgICAgICAgcmV0dXJuICdjb250aW51ZSc7XG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZUV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBTdGFjayBFdmVudCBhcyByZWNlaXZlZCBmcm9tIENsb3VkRm9ybWF0aW9uXG4gICAqL1xuICByZWFkb25seSBldmVudDogU3RhY2tFdmVudDtcblxuICAvKipcbiAgICogSURzIG9mIHBhcmVudCBzdGFja3Mgb2YgdGhlIHJlc291cmNlLCBpbiBjYXNlIG9mIHJlc291cmNlcyBpbiBuZXN0ZWQgc3RhY2tzXG4gICAqL1xuICByZWFkb25seSBwYXJlbnRTdGFja0xvZ2ljYWxJZHM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgZXZlbnQgcmVnYXJkcyB0aGUgcm9vdCBzdGFja1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaXNSb290U3RhY2tFdmVudD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUG9sbCBmb3Igc3RhY2sgZXZlbnRzLCBwb3RlbnRpYWxseSBtdWx0aXBsZSB0aW1lcyBhcyBuZXcgZXZlbnRzIGNvbWUgaW4gb3ZlciB0aW1lXG4gKlxuICogSW5jbHVkZXMgZXZlbnRzIGZyb20gbmVzdGVkIHN0YWNrcy5cbiAqXG4gKiBQb2xsaW5nIG1heSBoYXBwZW4gaW4gbXVsdGlwbGUgYnVyc3RzLCBhbmQgZXZlcnkgYnVyc3QgY29uc3VtZXMgZXZlbnRzIGZyb20gbmV3ZXN0LXRvLW9sZGVzdFxuICogZnJvbSB0aGUgc3RhY2sgZXZlbnRzIEFQSSwgc28gZXZlbnRzIGFyZSBjb25zdW1lZCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOlxuICpcbiAqIGBgYFxuICogQ09OU1VNSU5HXG4gKlxuICogc3RhY2sgZXZlbnRzICAgKG5ldykgeiB5IHggdyB2IHUgdCBzIHIgcSBwIG8gbiBtIGwgayBqIGkgaCBnIGYgZSBkIGMgYiBhIChvbGQpXG4gKiBidXJzdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbICAgcG9sbCgpICMxICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbICBwb2xsKCkgIzIgICBdICAgICAgICAgICAgICAgXlxuICogICAgICAgICAgICAgICAgICAgICBbICBwb2xsKCkgIzMgICBdICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxQb2xsUmFuZ2VcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2lkZXMgdG8gc3RvcCBoZXJlXG4gKiBgYGBcbiAqXG4gKiBFdmVudHMgYXJlIHNvcnRlZCBvbGQtdG8tbmV3IGJlZm9yZSBiZWluZyByZXR1cm5lZCwgc28gdGhlIGV2ZW50cyByZXR1cm5lZCBieSBlYWNoXG4gKiBwb2xsIGFyZTpcbiAqXG4gKiBgYGBcbiAqIHBvbGwoKSAjMSA9PiBbZSBmIGcgaCBpIGogayBsXVxuICogcG9sbCgpICMyID0+IFttIG4gbyBwIHEgciBzXVxuICogcG9sbCgpICMzID0+IFt0IHUgdiB3IHggeSB6XVxuICogYGBgXG4gKlxuICovXG5leHBvcnQgY2xhc3MgU3RhY2tFdmVudFBvbGxlciB7XG4gIC8qKlxuICAgKiBBbGwgZXZlbnRzIHdlJ3ZlIHNlZW4gc28gZmFyXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXZlbnRzOiBSZXNvdXJjZUV2ZW50W10gPSBbXTtcbiAgcHVibGljIGNvbXBsZXRlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEEgcmVjb3JkIG9mIHRoZSBlcnJvcnMgd2UndmUgc2VlblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVycm9ycyA9IG5ldyBSZXNvdXJjZUVycm9ycygpO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZXMgdGhhdCByZWNlaXZlZCBERUxFVEVfRkFJTEVEIGR1cmluZyBhIHN0YWNrIHVwZGF0ZS5cbiAgICogQ2xvdWRGb3JtYXRpb24gc2tpcHMgdGhlc2UgYW5kIGNvbXBsZXRlcyB0aGUgdXBkYXRlIGFueXdheS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZWxldGVGYWlsdXJlczogUmVzb3VyY2VEZWxldGVGYWlsdXJlW10gPSBbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50SWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmVzdGVkU3RhY2tQb2xsZXJzOiBSZWNvcmQ8c3RyaW5nLCBTdGFja0V2ZW50UG9sbGVyPiA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogU3RhY2tFdmVudFBvbGxlclByb3BzLFxuICApIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBGcm9tIGFsbCBhY2N1bXVsYXRlZCBldmVudHMsIHJldHVybiBvbmx5IHRoZSBlcnJvcnNcbiAgICovXG4gIHB1YmxpYyBnZXQgcmVzb3VyY2VFcnJvcnMoKTogUmVhZG9ubHlBcnJheTxSZXNvdXJjZUVycm9yPiB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JzLmFsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb2xsIGZvciBuZXcgc3RhY2sgZXZlbnRzXG4gICAqXG4gICAqIFdpbGwgcmVhZCBhbGwgZXZlbnRzIHRoYXQgYXJlIGF2YWlsYWJsZSB1cCB1bnRpbCB0aGUgb2xkZXN0IGV2ZW50c1xuICAgKiBpbmRpY2F0ZWQgYnkgdGhlIGNvbnN0cnVjdG9yIGZpbHRlcnMsIG9yIHVudGlsIGl0IGVuY291bnRlcnMgZXZlbnRzIHRoYXQgaXRcbiAgICogaGFzIGFscmVhZHkgcmVhZCBiZWZvcmUuXG4gICAqXG4gICAqIFJlY3Vyc2VzIGludG8gbmVzdGVkIHN0YWNrcywgYW5kIHJldHVybnMgZXZlbnRzIG9sZC10by1uZXcuIE11bHRpcGxlXG4gICAqIGludm9jYXRpb25zIHRvIGBwb2xsYCB3aWxsIHJldHVybiAqbmV3ZXIqIGV2ZW50cyAoYWxzbyBpbiBvbGQtdG8tbmV3IG9yZGVyKS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBwb2xsKCk6IFByb21pc2U8UmVzb3VyY2VFdmVudFtdPiB7XG4gICAgY29uc3QgZXZlbnRzOiBSZXNvdXJjZUV2ZW50W10gPSBhd2FpdCB0aGlzLmRvUG9sbCgpO1xuXG4gICAgLy8gQWxzbyBwb2xsIGFsbCBuZXN0ZWQgc3RhY2tzIHdlJ3JlIGN1cnJlbnRseSB0cmFja2luZ1xuICAgIGZvciAoY29uc3QgW2xvZ2ljYWxJZCwgcG9sbGVyXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLm5lc3RlZFN0YWNrUG9sbGVycykpIHtcbiAgICAgIGV2ZW50cy5wdXNoKC4uLihhd2FpdCBwb2xsZXIucG9sbCgpKSk7XG4gICAgICBpZiAocG9sbGVyLmNvbXBsZXRlKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLm5lc3RlZFN0YWNrUG9sbGVyc1tsb2dpY2FsSWRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiB3aGF0IHdlIGhhdmUgc28gZmFyXG4gICAgZXZlbnRzLnNvcnQoKGEsIGIpID0+IGEuZXZlbnQuVGltZXN0YW1wIS52YWx1ZU9mKCkgLSBiLmV2ZW50LlRpbWVzdGFtcCEudmFsdWVPZigpKTtcbiAgICB0aGlzLmV2ZW50cy5wdXNoKC4uLmV2ZW50cyk7XG5cbiAgICB0aGlzLmVycm9ycy51cGRhdGUoLi4uZXZlbnRzKTtcbiAgICB0aGlzLnVwZGF0ZURlbGV0ZUZhaWx1cmVzKGV2ZW50cyk7XG5cbiAgICByZXR1cm4gZXZlbnRzO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEZWxldGVGYWlsdXJlcyhldmVudHM6IFJlc291cmNlRXZlbnRbXSkge1xuICAgIGZvciAoY29uc3QgeyBldmVudCB9IG9mIGV2ZW50cykge1xuICAgICAgaWYgKGV2ZW50LlJlc291cmNlU3RhdHVzID09PSBSZXNvdXJjZVN0YXR1cy5ERUxFVEVfRkFJTEVEICYmIGV2ZW50LlJlc291cmNlVHlwZSAhPT0gJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJykge1xuICAgICAgICB0aGlzLmRlbGV0ZUZhaWx1cmVzLnB1c2goe1xuICAgICAgICAgIGxvZ2ljYWxSZXNvdXJjZUlkOiBldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCA/PyAnJyxcbiAgICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGV2ZW50LlBoeXNpY2FsUmVzb3VyY2VJZCxcbiAgICAgICAgICByZXNvdXJjZVR5cGU6IGV2ZW50LlJlc291cmNlVHlwZSA/PyAnJyxcbiAgICAgICAgICByZWFzb246IGV2ZW50LlJlc291cmNlU3RhdHVzUmVhc29uID8/ICcnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRvUG9sbCgpOiBQcm9taXNlPFJlc291cmNlRXZlbnRbXT4ge1xuICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBldmVudHMgYW5kIHdlIHBvbGwgYWdhaW4sIHdlIGNhbiBvbmx5IGdldCBuZXdlciBldmVudHMgdXAgdG9cbiAgICAvLyBldmVudHMgd2UndmUgYWxyZWFkeSBzZWVuLiBObyBuZWVkIHRvIGludm9rZSB0aGUgXCJvbGRlc3RFdmVudFwiIGRlY2lkZXIgYWdhaW4uXG4gICAgY29uc3Qgc3RvcERlY2lkZXIgPSB0aGlzLmV2ZW50SWRzLnNpemUgPiAwID8gUG9sbFJhbmdlLmNvbnN1bWVBbGwoKSA6IHRoaXMucHJvcHMuaW5pdGlhbFBvbGxSYW5nZTtcblxuICAgIGNvbnN0IGV2ZW50czogUmVzb3VyY2VFdmVudFtdID0gW107XG4gICAgdHJ5IHtcbiAgICAgIGxldCBuZXh0VG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBmaW5pc2hlZCA9IGZhbHNlO1xuXG4gICAgICB3aGlsZSAoIWZpbmlzaGVkKSB7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCB0aGlzLmNmbi5kZXNjcmliZVN0YWNrRXZlbnRzKHsgU3RhY2tOYW1lOiB0aGlzLnByb3BzLnN0YWNrQXJuLCBOZXh0VG9rZW46IG5leHRUb2tlbiB9KTtcbiAgICAgICAgZm9yIChjb25zdCBldmVudCBvZiBwYWdlPy5TdGFja0V2ZW50cyA/PyBbXSkge1xuICAgICAgICAgIC8vIEFscmVhZHkgc2VlbiB0aGlzIG9uZVxuICAgICAgICAgIGlmICh0aGlzLmV2ZW50SWRzLmhhcyhldmVudC5FdmVudElkISkpIHtcbiAgICAgICAgICAgIHJldHVybiBldmVudHM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaXNQYXJlbnRTdGFja0V2ZW50ID0gaXNSb290U3RhY2tFdmVudChldmVudCk7XG4gICAgICAgICAgLy8gRnJlc2ggZXZlbnRcbiAgICAgICAgICBjb25zdCByZXNFdmVudDogUmVzb3VyY2VFdmVudCA9IHtcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIHBhcmVudFN0YWNrTG9naWNhbElkczogdGhpcy5wcm9wcy5wYXJlbnRTdGFja0xvZ2ljYWxJZHMgPz8gW10sXG4gICAgICAgICAgICBpc1Jvb3RTdGFja0V2ZW50OiBpc1BhcmVudFN0YWNrRXZlbnQsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIC8vIE1ha2UgYSBzdG9wIGRlY2lzaW9uXG4gICAgICAgICAgY29uc3Qgc3RvcERlY2lzaW9uID0gc3RvcERlY2lkZXIuc2hvdWxkU3RvcChyZXNFdmVudCk7XG4gICAgICAgICAgaWYgKHN0b3BEZWNpc2lvbiA9PT0gJ3N0b3AtZXhjbHVkZScpIHtcbiAgICAgICAgICAgIHJldHVybiBldmVudHM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5ldmVudElkcy5hZGQoZXZlbnQuRXZlbnRJZCEpO1xuXG4gICAgICAgICAgZXZlbnRzLnB1c2gocmVzRXZlbnQpO1xuXG4gICAgICAgICAgaWYgKHN0b3BEZWNpc2lvbiA9PT0gJ3N0b3AtaW5jbHVkZScpIHtcbiAgICAgICAgICAgIHJldHVybiBldmVudHM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWlzUGFyZW50U3RhY2tFdmVudCAmJlxuICAgICAgICAgICAgICBldmVudC5SZXNvdXJjZVR5cGUgPT09ICdBV1M6OkNsb3VkRm9ybWF0aW9uOjpTdGFjaycgJiZcbiAgICAgICAgICAgICAgaXNTdGFja0JlZ2luT3BlcmF0aW9uU3RhdGUoZXZlbnQuUmVzb3VyY2VTdGF0dXMpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgZXZlbnQgaXMgbm90IGZvciBgdGhpc2Agc3RhY2sgYW5kIGhhcyBhIHBoeXNpY2FsIHJlc291cmNlIElkLCByZWN1cnNpdmVseSBjYWxsIGZvciBldmVudHMgaW4gdGhlIG5lc3RlZCBzdGFja1xuICAgICAgICAgICAgdGhpcy50cmFja05lc3RlZFN0YWNrKGV2ZW50LCBbLi4uKHRoaXMucHJvcHMucGFyZW50U3RhY2tMb2dpY2FsSWRzID8/IFtdKSwgZXZlbnQuTG9naWNhbFJlc291cmNlSWQgPz8gJyddKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNQYXJlbnRTdGFja0V2ZW50ICYmIGlzU3RhY2tUZXJtaW5hbFN0YXRlKGV2ZW50LlJlc291cmNlU3RhdHVzKSkge1xuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbmV4dFRva2VuID0gcGFnZT8uTmV4dFRva2VuO1xuICAgICAgICBpZiAobmV4dFRva2VuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIC8vIENGTiByZXR1cm5zIHRoZSBpbnB1dCBleGFjdGx5IGFzIHByb3ZpZGVkIGJ5IHVzIHRvIHRoZSBgRGVzY3JpYmVTdGFja0V2ZW50c2AgYXBpIGNhbGxcbiAgICAgIGlmICghKGUubmFtZSA9PT0gJ1ZhbGlkYXRpb25FcnJvcicgJiYgZm9ybWF0RXJyb3JNZXNzYWdlKGUpID09PSBgU3RhY2sgWyR7dGhpcy5wcm9wcy5zdGFja0Fybn1dIGRvZXMgbm90IGV4aXN0YCkpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXZlbnRzO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIHRoZSBDUkVBVEVfSU5fUFJPR1JFU1MsIFVQREFURV9JTl9QUk9HUkVTUywgREVMRVRFX0lOX1BST0dSRVNTIGV2ZW50IG9mIGEgbmVzdGVkIHN0YWNrLCBwb2xsIHRoZSBuZXN0ZWQgc3RhY2sgdXBkYXRlc1xuICAgKi9cbiAgcHJpdmF0ZSB0cmFja05lc3RlZFN0YWNrKGV2ZW50OiBTdGFja0V2ZW50LCBwYXJlbnRTdGFja0xvZ2ljYWxJZHM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgbG9naWNhbElkID0gZXZlbnQuTG9naWNhbFJlc291cmNlSWQ7XG4gICAgY29uc3QgcGh5c2ljYWxSZXNvdXJjZUlkID0gZXZlbnQuUGh5c2ljYWxSZXNvdXJjZUlkO1xuXG4gICAgLy8gVGhlIENSRUFURV9JTl9QUk9HUkVTUyBldmVudCBmb3IgYSBOZXN0ZWQgU3RhY2sgaXMgZW1pdHRlZCB0d2ljZTsgZmlyc3Qgd2l0aG91dCBhIFBoeXNpY2FsUmVzb3VyY2VJZFxuICAgIC8vIGFuZCB0aGVuIHdpdGguIElnbm9yZSB0aGlzIGV2ZW50IGlmIHdlIGRvbid0IGhhdmUgdGhhdCBwcm9wZXJ0eSB5ZXQuXG4gICAgLy9cbiAgICAvLyAoQXQgdGhpcyBwb2ludCwgSSBhbHNvIGRvbid0IHRydXN0IHRoYXQgbG9naWNhbElkIGlzIGFsd2F5cyBnb2luZyB0byBiZSB0aGVyZSBzbyB2YWxpZGF0ZSB0aGF0IGFzIHdlbGwpXG4gICAgaWYgKCFsb2dpY2FsSWQgfHwgIXBoeXNpY2FsUmVzb3VyY2VJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5uZXN0ZWRTdGFja1BvbGxlcnNbbG9naWNhbElkXSkge1xuICAgICAgdGhpcy5uZXN0ZWRTdGFja1BvbGxlcnNbbG9naWNhbElkXSA9IG5ldyBTdGFja0V2ZW50UG9sbGVyKHRoaXMuY2ZuLCB7XG4gICAgICAgIHN0YWNrQXJuOiBwaHlzaWNhbFJlc291cmNlSWQsXG4gICAgICAgIHBhcmVudFN0YWNrTG9naWNhbElkczogcGFyZW50U3RhY2tMb2dpY2FsSWRzLFxuICAgICAgICBpbml0aWFsUG9sbFJhbmdlOiBQb2xsUmFuZ2Uuc2luY2VUaW1lc3RhbXAoZXZlbnQuVGltZXN0YW1wIS52YWx1ZU9mKCkpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzU3RhY2tCZWdpbk9wZXJhdGlvblN0YXRlKHN0YXRlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgcmV0dXJuIFtcbiAgICAnQ1JFQVRFX0lOX1BST0dSRVNTJyxcbiAgICAnVVBEQVRFX0lOX1BST0dSRVNTJyxcbiAgICAnREVMRVRFX0lOX1BST0dSRVNTJyxcbiAgICAnVVBEQVRFX1JPTExCQUNLX0lOX1BST0dSRVNTJyxcbiAgICAnUk9MTEJBQ0tfSU5fUFJPR1JFU1MnLFxuICBdLmluY2x1ZGVzKHN0YXRlID8/ICcnKTtcbn1cblxuZnVuY3Rpb24gaXNTdGFja1Rlcm1pbmFsU3RhdGUoc3RhdGU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICByZXR1cm4gIShzdGF0ZSA/PyAnJykuZW5kc1dpdGgoJ19JTl9QUk9HUkVTUycpO1xufVxuIl19
|
|
264
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stZXZlbnQtcG9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RhY2stZXZlbnQtcG9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDBFQUFnRTtBQUVoRSx1REFBbUQ7QUFFbkQscUNBQThGO0FBbUM5RixNQUFzQixTQUFTO0lBQzdCOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFpQjtRQUM1QyxPQUFPO1lBQ0wsVUFBVSxDQUFDLEtBQUs7Z0JBQ2QsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQ3BGLENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQWtCO1FBQy9DLE9BQU87WUFDTCxVQUFVLENBQUMsS0FBSztnQkFDZCxPQUFPLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztZQUNySCxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLG1CQUFtQjtRQUMvQixJQUFJLFdBQStCLENBQUM7UUFDcEMsT0FBTztZQUNMLFVBQVUsQ0FBQyxLQUFLO2dCQUNkLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUM5QixXQUFXLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7b0JBQ3RDLE9BQU8sVUFBVSxDQUFDO2dCQUNwQixDQUFDO2dCQUVELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FB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SSxDQUFDLEdBQUcsRUFBRTtnQkFDbEUsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIscUJBQXFCLEVBQUUscUJBQXFCO2dCQUM1QyxnQkFBZ0IsRUFBRSxTQUFTLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxTQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDdkUsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7Q0FDRjtBQTlMRCw0Q0E4TEM7QUFFRCxTQUFTLDBCQUEwQixDQUFDLEtBQXlCO0lBQzNELE9BQU87UUFDTCxvQkFBb0I7UUFDcEIsb0JBQW9CO1FBQ3BCLG9CQUFvQjtRQUNwQiw2QkFBNkI7UUFDN0Isc0JBQXNCO0tBQ3ZCLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxLQUF5QjtJQUNyRCxPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFN0YWNrRXZlbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgUmVzb3VyY2VTdGF0dXMgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZUVycm9yIH0gZnJvbSAnLi9yZXNvdXJjZS1lcnJvcnMnO1xuaW1wb3J0IHsgUmVzb3VyY2VFcnJvcnMgfSBmcm9tICcuL3Jlc291cmNlLWVycm9ycyc7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlRGVsZXRlRmFpbHVyZSwgU3RhYmlsaXppbmdSZXNvdXJjZSB9IGZyb20gJy4uLy4uL3Rvb2xraXQvdHlwZXMnO1xuaW1wb3J0IHsgZm9ybWF0RXJyb3JNZXNzYWdlLCBpc1Jvb3RTdGFja0V2ZW50LCBpc1N0YWJpbGl6aW5nUmVzb3VyY2VFdmVudCB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRGb3JtYXRpb25DbGllbnQgfSBmcm9tICcuLi9hd3MtYXV0aC9wcml2YXRlJztcblxuZXhwb3J0IGludGVyZmFjZSBTdGFja0V2ZW50UG9sbGVyUHJvcHMge1xuICAvKipcbiAgICogVGhlIHN0YWNrIHRvIHBvbGxcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElEcyBvZiBwYXJlbnQgc3RhY2tzIG9mIHRoaXMgcmVzb3VyY2UsIGluIGNhc2Ugb2YgcmVzb3VyY2VzIGluIG5lc3RlZCBzdGFja3NcbiAgICovXG4gIHJlYWRvbmx5IHBhcmVudFN0YWNrTG9naWNhbElkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBIGNvbmZpZ3VyYWJsZSBhbGdvcml0aG0gdG8gaW5kaWNhdGUgd2hlbiB3ZSBzaG91bGQgc3RvcCBjb25zdW1pbmcgdGhlIGV2ZW50IHN0cmVhbS5cbiAgICpcbiAgICogVGhlIGluaXRpYWxQb2xsUmFuZ2Ugb2JqZWN0IHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mXG4gICAqIHBvbGxpbmcuICBJdCB3aWxsIGJlIHNob3duIGFsbCBldmVudHMgaW4gYSBjaHVuayBpbiB0dXJuLCBuZXdlc3QtdG8tb2xkZXN0LFxuICAgKiBhbmQgc2hvdWxkIGRlY2lkZSB0aGUgb2xkZXN0IGV2ZW50IHdlJ3JlIHN0aWxsIGludGVyZXN0ZWQgaW4uIFdlIHdpbGwgbm90XG4gICAqIGdvIGJhY2sgZnVydGhlciBjb25zdW1pbmcgdGhlIGV2ZW50IHN0cmVhbS5cbiAgICpcbiAgICogT24gc3Vic2VxdWVudCBwb2xscywgd2Ugd2lsbCB1c2UgdGhlIGV2ZW50cyB3ZSd2ZSBhbHJlYWR5IHNlZW4gdG8gZGVjaWRlIHdoZW4gdG8gc3RvcFxuICAgKiBwb2xsaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5pdGlhbFBvbGxSYW5nZTogSVBvbGxSYW5nZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUG9sbFJhbmdlIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgcG9sbGluZyBzaG91bGQgc3RvcCBvbiBzZWVpbmcgdGhpcyBldmVudFxuICAgKi9cbiAgc2hvdWxkU3RvcChldmVudDogUmVzb3VyY2VFdmVudCk6ICdzdG9wLWluY2x1ZGUnIHwgJ3N0b3AtZXhjbHVkZScgfCAnY29udGludWUnO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUG9sbFJhbmdlIHtcbiAgLyoqXG4gICAqIE9ubHkgaW5jbHVkZSBldmVudHMgc2luY2UgdGhhbiBhIGdpdmVuIHRpbWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc2luY2VUaW1lc3RhbXAoc3RhcnRUaW1lOiBudW1iZXIpOiBJUG9sbFJhbmdlIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvdWxkU3RvcChldmVudCkge1xuICAgICAgICByZXR1cm4gZXZlbnQuZXZlbnQuVGltZXN0YW1wIS52YWx1ZU9mKCkgPCBzdGFydFRpbWUgPyAnc3RvcC1leGNsdWRlJyA6ICdjb250aW51ZSc7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3RvcCB3aGVuIHdlIHNlZSB0aGUgcm9vdCBzdGFjayBlbnRlcmluZyB0aGlzIHN0YXR1c1xuICAgKlxuICAgKiBTaG91bGQgYmUgc29tZXRoaW5nIGxpa2UgYENSRUFURV9JTl9QUk9HUkVTU2AsIGBVUERBVEVfSU5fUFJPR1JFU1NgLFxuICAgKiBgREVMRVRFX0lOX1BST0dSRVNTLCBgUk9MTEJBQ0tfSU5fUFJPR1JFU1NgLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzaW5jZVN0YWNrU3RhdHVzKHN0YXR1c2VzOiBzdHJpbmdbXSk6IElQb2xsUmFuZ2Uge1xuICAgIHJldHVybiB7XG4gICAgICBzaG91bGRTdG9wKGV2ZW50KSB7XG4gICAgICAgIHJldHVybiBldmVudC5pc1Jvb3RTdGFja0V2ZW50ICYmIHN0YXR1c2VzLmluY2x1ZGVzKGV2ZW50LmV2ZW50LlJlc291cmNlU3RhdHVzID8/ICcnKSA/ICdzdG9wLWluY2x1ZGUnIDogJ2NvbnRpbnVlJztcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHdoZW4gd2Ugc2VlIGV2ZW50cyB0aGF0IGJlbG9uZyB0byBhIGRpZmZlcmVudCBvcGVyYXRpb25cbiAgICpcbiAgICogUmVjb3JkcyB0aGUgZmlyc3QgT3BlcmF0aW9uSWQsIGFuZCBzdG9wcyBhcyBzb29uIGFzIHdlIHNlZSBldmVudHMgdGhhdCBkb24ndCBoYXZlIGl0IGFueW1vcmUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1vc3RSZWNlbnRPcGVyYXRpb24oKTogSVBvbGxSYW5nZSB7XG4gICAgbGV0IG9wZXJhdGlvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3VsZFN0b3AoZXZlbnQpIHtcbiAgICAgICAgaWYgKG9wZXJhdGlvbklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvcGVyYXRpb25JZCA9IGV2ZW50LmV2ZW50Lk9wZXJhdGlvbklkO1xuICAgICAgICAgIHJldHVybiAnY29udGludWUnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV2ZW50LmV2ZW50Lk9wZXJhdGlvbklkID09PSBvcGVyYXRpb25JZCA/ICdjb250aW51ZScgOiAnc3RvcC1leGNsdWRlJztcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHBvbGwgcmFuZ2UgZGVjaWRlciB0aGF0IGFsd2F5cyByZXR1cm5zICdjb250aW51ZScsIGNvbnN1bWluZyB0aGUgZW50aXJlIENGTiBldmVudCBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnN1bWVBbGwoKTogSVBvbGxSYW5nZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3VsZFN0b3AoKSB7XG4gICAgICAgIHJldHVybiAnY29udGludWUnO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VFdmVudCB7XG4gIC8qKlxuICAgKiBUaGUgU3RhY2sgRXZlbnQgYXMgcmVjZWl2ZWQgZnJvbSBDbG91ZEZvcm1hdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZXZlbnQ6IFN0YWNrRXZlbnQ7XG5cbiAgLyoqXG4gICAqIElEcyBvZiBwYXJlbnQgc3RhY2tzIG9mIHRoZSByZXNvdXJjZSwgaW4gY2FzZSBvZiByZXNvdXJjZXMgaW4gbmVzdGVkIHN0YWNrc1xuICAgKi9cbiAgcmVhZG9ubHkgcGFyZW50U3RhY2tMb2dpY2FsSWRzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIGV2ZW50IHJlZ2FyZHMgdGhlIHJvb3Qgc3RhY2tcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGlzUm9vdFN0YWNrRXZlbnQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBvbGwgZm9yIHN0YWNrIGV2ZW50cywgcG90ZW50aWFsbHkgbXVsdGlwbGUgdGltZXMgYXMgbmV3IGV2ZW50cyBjb21lIGluIG92ZXIgdGltZVxuICpcbiAqIEluY2x1ZGVzIGV2ZW50cyBmcm9tIG5lc3RlZCBzdGFja3MuXG4gKlxuICogUG9sbGluZyBtYXkgaGFwcGVuIGluIG11bHRpcGxlIGJ1cnN0cywgYW5kIGV2ZXJ5IGJ1cnN0IGNvbnN1bWVzIGV2ZW50cyBmcm9tIG5ld2VzdC10by1vbGRlc3RcbiAqIGZyb20gdGhlIHN0YWNrIGV2ZW50cyBBUEksIHNvIGV2ZW50cyBhcmUgY29uc3VtZWQgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjpcbiAqXG4gKiBgYGBcbiAqIENPTlNVTUlOR1xuICpcbiAqIHN0YWNrIGV2ZW50cyAgIChuZXcpIHogeSB4IHcgdiB1IHQgcyByIHEgcCBvIG4gbSBsIGsgaiBpIGggZyBmIGUgZCBjIGIgYSAob2xkKVxuICogYnVyc3RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyAgIHBvbGwoKSAjMSAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyAgcG9sbCgpICMyICAgXSAgICAgICAgICAgICAgIF5cbiAqICAgICAgICAgICAgICAgICAgICAgWyAgcG9sbCgpICMzICAgXSAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsUG9sbFJhbmdlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNpZGVzIHRvIHN0b3AgaGVyZVxuICogYGBgXG4gKlxuICogRXZlbnRzIGFyZSBzb3J0ZWQgb2xkLXRvLW5ldyBiZWZvcmUgYmVpbmcgcmV0dXJuZWQsIHNvIHRoZSBldmVudHMgcmV0dXJuZWQgYnkgZWFjaFxuICogcG9sbCBhcmU6XG4gKlxuICogYGBgXG4gKiBwb2xsKCkgIzEgPT4gW2UgZiBnIGggaSBqIGsgbF1cbiAqIHBvbGwoKSAjMiA9PiBbbSBuIG8gcCBxIHIgc11cbiAqIHBvbGwoKSAjMyA9PiBbdCB1IHYgdyB4IHkgel1cbiAqIGBgYFxuICpcbiAqL1xuZXhwb3J0IGNsYXNzIFN0YWNrRXZlbnRQb2xsZXIge1xuICAvKipcbiAgICogQWxsIGV2ZW50cyB3ZSd2ZSBzZWVuIHNvIGZhclxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGV2ZW50czogUmVzb3VyY2VFdmVudFtdID0gW107XG4gIHB1YmxpYyBjb21wbGV0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBIHJlY29yZCBvZiB0aGUgZXJyb3JzIHdlJ3ZlIHNlZW5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlcnJvcnMgPSBuZXcgUmVzb3VyY2VFcnJvcnMoKTtcblxuICAvKipcbiAgICogUmVzb3VyY2VzIHRoYXQgcmVjZWl2ZWQgREVMRVRFX0ZBSUxFRCBkdXJpbmcgYSBzdGFjayB1cGRhdGUuXG4gICAqIENsb3VkRm9ybWF0aW9uIHNraXBzIHRoZXNlIGFuZCBjb21wbGV0ZXMgdGhlIHVwZGF0ZSBhbnl3YXkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVsZXRlRmFpbHVyZXM6IFJlc291cmNlRGVsZXRlRmFpbHVyZVtdID0gW107XG5cbiAgLyoqXG4gICAqIFJlc291cmNlcyB0aGF0IHJlYWNoZWQgYSBgKl9DT01QTEVURWAgc3RhdHVzIHdpdGggYSBzdGFiaWxpemF0aW9uIHJlYXNvbi5cbiAgICogUG9wdWxhdGVkIGZvciBFeHByZXNzIE1vZGUgZGVwbG95bWVudHMsIHdoZXJlIENsb3VkRm9ybWF0aW9uIHJlcG9ydHMgYVxuICAgKiByZXNvdXJjZSBhcyBjb21wbGV0ZSB3aGlsZSBpdCBpcyBzdGlsbCBzdGFiaWxpemluZyBhc3luY2hyb25vdXNseS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdGFiaWxpemluZ1Jlc291cmNlczogU3RhYmlsaXppbmdSZXNvdXJjZVtdID0gW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSBldmVudElkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IG5lc3RlZFN0YWNrUG9sbGVyczogUmVjb3JkPHN0cmluZywgU3RhY2tFdmVudFBvbGxlcj4gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNmbjogSUNsb3VkRm9ybWF0aW9uQ2xpZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IFN0YWNrRXZlbnRQb2xsZXJQcm9wcyxcbiAgKSB7XG4gIH1cblxuICAvKipcbiAgICogRnJvbSBhbGwgYWNjdW11bGF0ZWQgZXZlbnRzLCByZXR1cm4gb25seSB0aGUgZXJyb3JzXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlc291cmNlRXJyb3JzKCk6IFJlYWRvbmx5QXJyYXk8UmVzb3VyY2VFcnJvcj4ge1xuICAgIHJldHVybiB0aGlzLmVycm9ycy5hbGw7XG4gIH1cblxuICAvKipcbiAgICogUG9sbCBmb3IgbmV3IHN0YWNrIGV2ZW50c1xuICAgKlxuICAgKiBXaWxsIHJlYWQgYWxsIGV2ZW50cyB0aGF0IGFyZSBhdmFpbGFibGUgdXAgdW50aWwgdGhlIG9sZGVzdCBldmVudHNcbiAgICogaW5kaWNhdGVkIGJ5IHRoZSBjb25zdHJ1Y3RvciBmaWx0ZXJzLCBvciB1bnRpbCBpdCBlbmNvdW50ZXJzIGV2ZW50cyB0aGF0IGl0XG4gICAqIGhhcyBhbHJlYWR5IHJlYWQgYmVmb3JlLlxuICAgKlxuICAgKiBSZWN1cnNlcyBpbnRvIG5lc3RlZCBzdGFja3MsIGFuZCByZXR1cm5zIGV2ZW50cyBvbGQtdG8tbmV3LiBNdWx0aXBsZVxuICAgKiBpbnZvY2F0aW9ucyB0byBgcG9sbGAgd2lsbCByZXR1cm4gKm5ld2VyKiBldmVudHMgKGFsc28gaW4gb2xkLXRvLW5ldyBvcmRlcikuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcG9sbCgpOiBQcm9taXNlPFJlc291cmNlRXZlbnRbXT4ge1xuICAgIGNvbnN0IGV2ZW50czogUmVzb3VyY2VFdmVudFtdID0gYXdhaXQgdGhpcy5kb1BvbGwoKTtcblxuICAgIC8vIEFsc28gcG9sbCBhbGwgbmVzdGVkIHN0YWNrcyB3ZSdyZSBjdXJyZW50bHkgdHJhY2tpbmdcbiAgICBmb3IgKGNvbnN0IFtsb2dpY2FsSWQsIHBvbGxlcl0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5uZXN0ZWRTdGFja1BvbGxlcnMpKSB7XG4gICAgICBldmVudHMucHVzaCguLi4oYXdhaXQgcG9sbGVyLnBvbGwoKSkpO1xuICAgICAgaWYgKHBvbGxlci5jb21wbGV0ZSkge1xuICAgICAgICBkZWxldGUgdGhpcy5uZXN0ZWRTdGFja1BvbGxlcnNbbG9naWNhbElkXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gd2hhdCB3ZSBoYXZlIHNvIGZhclxuICAgIGV2ZW50cy5zb3J0KChhLCBiKSA9PiBhLmV2ZW50LlRpbWVzdGFtcCEudmFsdWVPZigpIC0gYi5ldmVudC5UaW1lc3RhbXAhLnZhbHVlT2YoKSk7XG4gICAgdGhpcy5ldmVudHMucHVzaCguLi5ldmVudHMpO1xuXG4gICAgdGhpcy5lcnJvcnMudXBkYXRlKC4uLmV2ZW50cyk7XG4gICAgdGhpcy51cGRhdGVEZWxldGVGYWlsdXJlcyhldmVudHMpO1xuICAgIHRoaXMudXBkYXRlU3RhYmlsaXppbmdSZXNvdXJjZXMoZXZlbnRzKTtcblxuICAgIHJldHVybiBldmVudHM7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURlbGV0ZUZhaWx1cmVzKGV2ZW50czogUmVzb3VyY2VFdmVudFtdKSB7XG4gICAgZm9yIChjb25zdCB7IGV2ZW50IH0gb2YgZXZlbnRzKSB7XG4gICAgICBpZiAoZXZlbnQuUmVzb3VyY2VTdGF0dXMgPT09IFJlc291cmNlU3RhdHVzLkRFTEVURV9GQUlMRUQgJiYgZXZlbnQuUmVzb3VyY2VUeXBlICE9PSAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snKSB7XG4gICAgICAgIHRoaXMuZGVsZXRlRmFpbHVyZXMucHVzaCh7XG4gICAgICAgICAgbG9naWNhbFJlc291cmNlSWQ6IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkID8/ICcnLFxuICAgICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogZXZlbnQuUGh5c2ljYWxSZXNvdXJjZUlkLFxuICAgICAgICAgIHJlc291cmNlVHlwZTogZXZlbnQuUmVzb3VyY2VUeXBlID8/ICcnLFxuICAgICAgICAgIHJlYXNvbjogZXZlbnQuUmVzb3VyY2VTdGF0dXNSZWFzb24gPz8gJycsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhYmlsaXppbmdSZXNvdXJjZXMoZXZlbnRzOiBSZXNvdXJjZUV2ZW50W10pIHtcbiAgICBmb3IgKGNvbnN0IHsgZXZlbnQgfSBvZiBldmVudHMpIHtcbiAgICAgIGlmIChpc1N0YWJpbGl6aW5nUmVzb3VyY2VFdmVudChldmVudCkpIHtcbiAgICAgICAgdGhpcy5zdGFiaWxpemluZ1Jlc291cmNlcy5wdXNoKHtcbiAgICAgICAgICBsb2dpY2FsUmVzb3VyY2VJZDogZXZlbnQuTG9naWNhbFJlc291cmNlSWQhLFxuICAgICAgICAgIHJlc291cmNlVHlwZTogZXZlbnQuUmVzb3VyY2VUeXBlID8/ICcnLFxuICAgICAgICAgIHJlYXNvbjogZXZlbnQuUmVzb3VyY2VTdGF0dXNSZWFzb24hLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRvUG9sbCgpOiBQcm9taXNlPFJlc291cmNlRXZlbnRbXT4ge1xuICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBldmVudHMgYW5kIHdlIHBvbGwgYWdhaW4sIHdlIGNhbiBvbmx5IGdldCBuZXdlciBldmVudHMgdXAgdG9cbiAgICAvLyBldmVudHMgd2UndmUgYWxyZWFkeSBzZWVuLiBObyBuZWVkIHRvIGludm9rZSB0aGUgXCJvbGRlc3RFdmVudFwiIGRlY2lkZXIgYWdhaW4uXG4gICAgY29uc3Qgc3RvcERlY2lkZXIgPSB0aGlzLmV2ZW50SWRzLnNpemUgPiAwID8gUG9sbFJhbmdlLmNvbnN1bWVBbGwoKSA6IHRoaXMucHJvcHMuaW5pdGlhbFBvbGxSYW5nZTtcblxuICAgIGNvbnN0IGV2ZW50czogUmVzb3VyY2VFdmVudFtdID0gW107XG4gICAgdHJ5IHtcbiAgICAgIGxldCBuZXh0VG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBmaW5pc2hlZCA9IGZhbHNlO1xuXG4gICAgICB3aGlsZSAoIWZpbmlzaGVkKSB7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCB0aGlzLmNmbi5kZXNjcmliZVN0YWNrRXZlbnRzKHsgU3RhY2tOYW1lOiB0aGlzLnByb3BzLnN0YWNrQXJuLCBOZXh0VG9rZW46IG5leHRUb2tlbiB9KTtcbiAgICAgICAgZm9yIChjb25zdCBldmVudCBvZiBwYWdlPy5TdGFja0V2ZW50cyA/PyBbXSkge1xuICAgICAgICAgIC8vIEFscmVhZHkgc2VlbiB0aGlzIG9uZVxuICAgICAgICAgIGlmICh0aGlzLmV2ZW50SWRzLmhhcyhldmVudC5FdmVudElkISkpIHtcbiAgICAgICAgICAgIHJldHVybiBldmVudHM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaXNQYXJlbnRTdGFja0V2ZW50ID0gaXNSb290U3RhY2tFdmVudChldmVudCk7XG4gICAgICAgICAgLy8gRnJlc2ggZXZlbnRcbiAgICAgICAgICBjb25zdCByZXNFdmVudDogUmVzb3VyY2VFdmVudCA9IHtcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIHBhcmVudFN0YWNrTG9naWNhbElkczogdGhpcy5wcm9wcy5wYXJlbnRTdGFja0xvZ2ljYWxJZHMgPz8gW10sXG4gICAgICAgICAgICBpc1Jvb3RTdGFja0V2ZW50OiBpc1BhcmVudFN0YWNrRXZlbnQsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIC8vIE1ha2UgYSBzdG9wIGRlY2lzaW9uXG4gICAgICAgICAgY29uc3Qgc3RvcERlY2lzaW9uID0gc3RvcERlY2lkZXIuc2hvdWxkU3RvcChyZXNFdmVudCk7XG4gICAgICAgICAgaWYgKHN0b3BEZWNpc2lvbiA9PT0gJ3N0b3AtZXhjbHVkZScpIHtcbiAgICAgICAgICAgIHJldHVybiBldmVudHM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5ldmVudElkcy5hZGQoZXZlbnQuRXZlbnRJZCEpO1xuXG4gICAgICAgICAgZXZlbnRzLnB1c2gocmVzRXZlbnQpO1xuXG4gICAgICAgICAgaWYgKHN0b3BEZWNpc2lvbiA9PT0gJ3N0b3AtaW5jbHVkZScpIHtcbiAgICAgICAgICAgIHJldHVybiBldmVudHM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWlzUGFyZW50U3RhY2tFdmVudCAmJlxuICAgICAgICAgICAgICBldmVudC5SZXNvdXJjZVR5cGUgPT09ICdBV1M6OkNsb3VkRm9ybWF0aW9uOjpTdGFjaycgJiZcbiAgICAgICAgICAgICAgaXNTdGFja0JlZ2luT3BlcmF0aW9uU3RhdGUoZXZlbnQuUmVzb3VyY2VTdGF0dXMpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgZXZlbnQgaXMgbm90IGZvciBgdGhpc2Agc3RhY2sgYW5kIGhhcyBhIHBoeXNpY2FsIHJlc291cmNlIElkLCByZWN1cnNpdmVseSBjYWxsIGZvciBldmVudHMgaW4gdGhlIG5lc3RlZCBzdGFja1xuICAgICAgICAgICAgdGhpcy50cmFja05lc3RlZFN0YWNrKGV2ZW50LCBbLi4uKHRoaXMucHJvcHMucGFyZW50U3RhY2tMb2dpY2FsSWRzID8/IFtdKSwgZXZlbnQuTG9naWNhbFJlc291cmNlSWQgPz8gJyddKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNQYXJlbnRTdGFja0V2ZW50ICYmIGlzU3RhY2tUZXJtaW5hbFN0YXRlKGV2ZW50LlJlc291cmNlU3RhdHVzKSkge1xuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbmV4dFRva2VuID0gcGFnZT8uTmV4dFRva2VuO1xuICAgICAgICBpZiAobmV4dFRva2VuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIC8vIENGTiByZXR1cm5zIHRoZSBpbnB1dCBleGFjdGx5IGFzIHByb3ZpZGVkIGJ5IHVzIHRvIHRoZSBgRGVzY3JpYmVTdGFja0V2ZW50c2AgYXBpIGNhbGxcbiAgICAgIGlmICghKGUubmFtZSA9PT0gJ1ZhbGlkYXRpb25FcnJvcicgJiYgZm9ybWF0RXJyb3JNZXNzYWdlKGUpID09PSBgU3RhY2sgWyR7dGhpcy5wcm9wcy5zdGFja0Fybn1dIGRvZXMgbm90IGV4aXN0YCkpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXZlbnRzO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIHRoZSBDUkVBVEVfSU5fUFJPR1JFU1MsIFVQREFURV9JTl9QUk9HUkVTUywgREVMRVRFX0lOX1BST0dSRVNTIGV2ZW50IG9mIGEgbmVzdGVkIHN0YWNrLCBwb2xsIHRoZSBuZXN0ZWQgc3RhY2sgdXBkYXRlc1xuICAgKi9cbiAgcHJpdmF0ZSB0cmFja05lc3RlZFN0YWNrKGV2ZW50OiBTdGFja0V2ZW50LCBwYXJlbnRTdGFja0xvZ2ljYWxJZHM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgbG9naWNhbElkID0gZXZlbnQuTG9naWNhbFJlc291cmNlSWQ7XG4gICAgY29uc3QgcGh5c2ljYWxSZXNvdXJjZUlkID0gZXZlbnQuUGh5c2ljYWxSZXNvdXJjZUlkO1xuXG4gICAgLy8gVGhlIENSRUFURV9JTl9QUk9HUkVTUyBldmVudCBmb3IgYSBOZXN0ZWQgU3RhY2sgaXMgZW1pdHRlZCB0d2ljZTsgZmlyc3Qgd2l0aG91dCBhIFBoeXNpY2FsUmVzb3VyY2VJZFxuICAgIC8vIGFuZCB0aGVuIHdpdGguIElnbm9yZSB0aGlzIGV2ZW50IGlmIHdlIGRvbid0IGhhdmUgdGhhdCBwcm9wZXJ0eSB5ZXQuXG4gICAgLy9cbiAgICAvLyAoQXQgdGhpcyBwb2ludCwgSSBhbHNvIGRvbid0IHRydXN0IHRoYXQgbG9naWNhbElkIGlzIGFsd2F5cyBnb2luZyB0byBiZSB0aGVyZSBzbyB2YWxpZGF0ZSB0aGF0IGFzIHdlbGwpXG4gICAgaWYgKCFsb2dpY2FsSWQgfHwgIXBoeXNpY2FsUmVzb3VyY2VJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5uZXN0ZWRTdGFja1BvbGxlcnNbbG9naWNhbElkXSkge1xuICAgICAgdGhpcy5uZXN0ZWRTdGFja1BvbGxlcnNbbG9naWNhbElkXSA9IG5ldyBTdGFja0V2ZW50UG9sbGVyKHRoaXMuY2ZuLCB7XG4gICAgICAgIHN0YWNrQXJuOiBwaHlzaWNhbFJlc291cmNlSWQsXG4gICAgICAgIHBhcmVudFN0YWNrTG9naWNhbElkczogcGFyZW50U3RhY2tMb2dpY2FsSWRzLFxuICAgICAgICBpbml0aWFsUG9sbFJhbmdlOiBQb2xsUmFuZ2Uuc2luY2VUaW1lc3RhbXAoZXZlbnQuVGltZXN0YW1wIS52YWx1ZU9mKCkpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzU3RhY2tCZWdpbk9wZXJhdGlvblN0YXRlKHN0YXRlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgcmV0dXJuIFtcbiAgICAnQ1JFQVRFX0lOX1BST0dSRVNTJyxcbiAgICAnVVBEQVRFX0lOX1BST0dSRVNTJyxcbiAgICAnREVMRVRFX0lOX1BST0dSRVNTJyxcbiAgICAnVVBEQVRFX1JPTExCQUNLX0lOX1BST0dSRVNTJyxcbiAgICAnUk9MTEJBQ0tfSU5fUFJPR1JFU1MnLFxuICBdLmluY2x1ZGVzKHN0YXRlID8/ICcnKTtcbn1cblxuZnVuY3Rpb24gaXNTdGFja1Rlcm1pbmFsU3RhdGUoc3RhdGU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICByZXR1cm4gIShzdGF0ZSA/PyAnJykuZW5kc1dpdGgoJ19JTl9QUk9HUkVTUycpO1xufVxuIl19
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ActivityPrinterProps } from './base';
|
|
2
2
|
import { ActivityPrinterBase } from './base';
|
|
3
|
+
import type { StackActivity } from '../../payloads';
|
|
3
4
|
/**
|
|
4
5
|
* Activity Printer which shows the resources currently being updated
|
|
5
6
|
*
|
|
@@ -18,8 +19,26 @@ export declare class CurrentActivityPrinter extends ActivityPrinterBase {
|
|
|
18
19
|
* Continuously write to the same output block.
|
|
19
20
|
*/
|
|
20
21
|
private block;
|
|
22
|
+
/**
|
|
23
|
+
* Resources that completed but are still stabilizing (Express Mode), keyed by
|
|
24
|
+
* logical ID. These are shown transiently and removed once `disappearsAt` has
|
|
25
|
+
* passed
|
|
26
|
+
*/
|
|
27
|
+
private readonly stabilizing;
|
|
21
28
|
constructor(props: ActivityPrinterProps);
|
|
29
|
+
protected addActivity(activity: StackActivity): void;
|
|
30
|
+
/**
|
|
31
|
+
* Whether this event should surface its Express Mode stabilization reason in
|
|
32
|
+
* the live view. Only CREATE/UPDATE completions are shown.
|
|
33
|
+
*/
|
|
34
|
+
private showsStabilization;
|
|
22
35
|
protected print(): void;
|
|
36
|
+
/**
|
|
37
|
+
* Reason to append to the resource line: the failure reason (on its own line)
|
|
38
|
+
* for error events, or the stabilization reason (inline) for resources that
|
|
39
|
+
* completed but are still stabilizing (Express Mode).
|
|
40
|
+
*/
|
|
41
|
+
private reason;
|
|
23
42
|
stop(): void;
|
|
24
43
|
private progressBar;
|
|
25
44
|
private failureReasonOnNextLine;
|
|
@@ -60,10 +60,35 @@ class CurrentActivityPrinter extends base_1.ActivityPrinterBase {
|
|
|
60
60
|
* Continuously write to the same output block.
|
|
61
61
|
*/
|
|
62
62
|
block;
|
|
63
|
+
/**
|
|
64
|
+
* Resources that completed but are still stabilizing (Express Mode), keyed by
|
|
65
|
+
* logical ID. These are shown transiently and removed once `disappearsAt` has
|
|
66
|
+
* passed
|
|
67
|
+
*/
|
|
68
|
+
stabilizing = {};
|
|
63
69
|
constructor(props) {
|
|
64
70
|
super(props);
|
|
65
71
|
this.block = new display_1.RewritableBlock(this.stream);
|
|
66
72
|
}
|
|
73
|
+
addActivity(activity) {
|
|
74
|
+
super.addActivity(activity);
|
|
75
|
+
// In Express Mode, CloudFormation reports a resource as `*_COMPLETE` while it
|
|
76
|
+
// is still stabilizing, surfacing this via a status reason. Show it
|
|
77
|
+
// transiently so the user is aware, then let it disappear to avoid clutter.
|
|
78
|
+
if (this.showsStabilization(activity)) {
|
|
79
|
+
this.stabilizing[activity.event.LogicalResourceId] = {
|
|
80
|
+
activity,
|
|
81
|
+
disappearsAt: Date.now() + STABILIZING_DISPLAY_MS,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Whether this event should surface its Express Mode stabilization reason in
|
|
87
|
+
* the live view. Only CREATE/UPDATE completions are shown.
|
|
88
|
+
*/
|
|
89
|
+
showsStabilization(activity) {
|
|
90
|
+
return (0, util_1.isStabilizingResourceEvent)(activity.event) && activity.event.ResourceStatus !== 'DELETE_COMPLETE';
|
|
91
|
+
}
|
|
67
92
|
print() {
|
|
68
93
|
const lines = [];
|
|
69
94
|
// Add a progress bar at the top
|
|
@@ -72,10 +97,22 @@ class CurrentActivityPrinter extends base_1.ActivityPrinterBase {
|
|
|
72
97
|
if (prog) {
|
|
73
98
|
lines.push(' ' + prog, '');
|
|
74
99
|
}
|
|
100
|
+
// Drop stabilizing resources whose transient display window has elapsed.
|
|
101
|
+
const now = Date.now();
|
|
102
|
+
for (const [logicalId, entry] of Object.entries(this.stabilizing)) {
|
|
103
|
+
if (now > entry.disappearsAt) {
|
|
104
|
+
delete this.stabilizing[logicalId];
|
|
105
|
+
}
|
|
106
|
+
}
|
|
75
107
|
// Normally we'd only print "resources in progress", but it's also useful
|
|
76
108
|
// to keep an eye on the failures and know about the specific errors asquickly
|
|
77
109
|
// as possible (while the stack is still rolling back), so add those in.
|
|
78
|
-
|
|
110
|
+
// We also surface still-stabilizing resources (Express Mode) for a short while.
|
|
111
|
+
const toPrint = [
|
|
112
|
+
...this.failures,
|
|
113
|
+
...Object.values(this.resourcesInProgress),
|
|
114
|
+
...Object.values(this.stabilizing).map((e) => e.activity),
|
|
115
|
+
];
|
|
79
116
|
toPrint.sort((a, b) => a.event.Timestamp.getTime() - b.event.Timestamp.getTime());
|
|
80
117
|
lines.push(...toPrint.map((res) => {
|
|
81
118
|
const provisional = this.isProvisionalFailure(res);
|
|
@@ -84,10 +121,24 @@ class CurrentActivityPrinter extends base_1.ActivityPrinterBase {
|
|
|
84
121
|
const statusText = provisional
|
|
85
122
|
? `${(res.event.ResourceStatus || '').slice(0, CurrentActivityPrinter.STATUS_WIDTH)} (skipped)`
|
|
86
123
|
: (res.event.ResourceStatus || '').slice(0, CurrentActivityPrinter.STATUS_WIDTH);
|
|
87
|
-
return util.format('%s | %s | %s | %s%s', (0, util_1.padLeft)(CurrentActivityPrinter.TIMESTAMP_WIDTH, new Date(res.event.Timestamp).toLocaleTimeString()), color((0, util_1.padRight)(CurrentActivityPrinter.STATUS_WIDTH, statusText)), (0, util_1.padRight)(this.resourceTypeColumnWidth, res.event.ResourceType || ''), color(chalk_1.default.bold(shorten(40, resourceName))), provisional ? ' (this will take a few minutes to recover)' : this.
|
|
124
|
+
return util.format('%s | %s | %s | %s%s', (0, util_1.padLeft)(CurrentActivityPrinter.TIMESTAMP_WIDTH, new Date(res.event.Timestamp).toLocaleTimeString()), color((0, util_1.padRight)(CurrentActivityPrinter.STATUS_WIDTH, statusText)), (0, util_1.padRight)(this.resourceTypeColumnWidth, res.event.ResourceType || ''), color(chalk_1.default.bold(shorten(40, resourceName))), provisional ? ' (this will take a few minutes to recover)' : this.reason(res));
|
|
88
125
|
}));
|
|
89
126
|
this.block.displayLines(lines);
|
|
90
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* Reason to append to the resource line: the failure reason (on its own line)
|
|
130
|
+
* for error events, or the stabilization reason (inline) for resources that
|
|
131
|
+
* completed but are still stabilizing (Express Mode).
|
|
132
|
+
*/
|
|
133
|
+
reason(activity) {
|
|
134
|
+
if ((0, util_1.isErrorEvent)(activity.event)) {
|
|
135
|
+
return this.failureReasonOnNextLine(activity);
|
|
136
|
+
}
|
|
137
|
+
// Surface the Express Mode stabilization message inline.
|
|
138
|
+
return this.showsStabilization(activity)
|
|
139
|
+
? ` | ${chalk_1.default.white(activity.event.ResourceStatusReason)}`
|
|
140
|
+
: '';
|
|
141
|
+
}
|
|
91
142
|
stop() {
|
|
92
143
|
super.stop();
|
|
93
144
|
// Print failures at the end (excluding provisional DELETE_FAILED during updates)
|
|
@@ -130,6 +181,11 @@ class CurrentActivityPrinter extends base_1.ActivityPrinterBase {
|
|
|
130
181
|
}
|
|
131
182
|
}
|
|
132
183
|
exports.CurrentActivityPrinter = CurrentActivityPrinter;
|
|
184
|
+
/**
|
|
185
|
+
* How long a still-stabilizing (Express Mode) resource stays visible in the
|
|
186
|
+
* live view before it disappears, to avoid cluttering the output.
|
|
187
|
+
*/
|
|
188
|
+
const STABILIZING_DISPLAY_MS = 2_000;
|
|
133
189
|
const FULL_BLOCK = '█';
|
|
134
190
|
const PARTIAL_BLOCK = ['', '▏', '▎', '▍', '▌', '▋', '▊', '▉'];
|
|
135
191
|
const MAX_PROGRESSBAR_WIDTH = 60;
|
|
@@ -161,4 +217,4 @@ function shorten(maxWidth, p) {
|
|
|
161
217
|
const half = Math.floor((maxWidth - 3) / 2);
|
|
162
218
|
return p.slice(0, half) + '...' + p.slice(-half);
|
|
163
219
|
}
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImN1cnJlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQTZCO0FBQzdCLGtEQUEwQjtBQUUxQixpQ0FBNkM7QUFDN0MsdUNBQTRDO0FBRTVDLHFDQUE2RDtBQUU3RDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFhLHNCQUF1QixTQUFRLDBCQUFtQjtJQUM3RDs7T0FFRztJQUNLLEtBQUssQ0FBa0I7SUFFL0IsWUFBWSxLQUEyQjtRQUNyQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDYixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUkseUJBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVTLEtBQUs7UUFDYixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7UUFFakIsZ0NBQWdDO1FBQ2hDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsR0FBRyx1QkFBdUIsR0FBRyxDQUFDLEVBQUUscUJBQXFCLENBQUMsRUFDdkYscUJBQXFCLENBQ3RCLENBQUM7UUFDRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDOUIsQ0FBQztRQUVELHlFQUF5RTtRQUN6RSw4RUFBOEU7UUFDOUUsd0VBQXdFO1FBQ3hFLE1BQU0sT0FBTyxHQUFvQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxD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QyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ2pHLE9BQU8sZUFBSyxDQUFDLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBQ0QsNERBQTREO0lBQzVELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sZUFBSyxDQUFDLE1BQU0sQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDakMsT0FBTyxlQUFLLENBQUMsTUFBTSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxPQUFPLGVBQUssQ0FBQyxLQUFLLENBQUM7QUFDckIsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLFFBQWdCLEVBQUUsQ0FBUztJQUMxQyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksUUFBUSxFQUFFLENBQUM7UUFDekIsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0aWwgZnJvbSAndXRpbCc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHR5cGUgeyBBY3Rpdml0eVByaW50ZXJQcm9wcyB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBBY3Rpdml0eVByaW50ZXJCYXNlIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IFJld3JpdGFibGVCbG9jayB9IGZyb20gJy4vZGlzcGxheSc7XG5pbXBvcnQgdHlwZSB7IFN0YWNrQWN0aXZpdHkgfSBmcm9tICcuLi8uLi9wYXlsb2Fkcyc7XG5pbXBvcnQgeyBpc0Vycm9yRXZlbnQsIHBhZExlZnQsIHBhZFJpZ2h0IH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5cbi8qKlxuICogQWN0aXZpdHkgUHJpbnRlciB3aGljaCBzaG93cyB0aGUgcmVzb3VyY2VzIGN1cnJlbnRseSBiZWluZyB1cGRhdGVkXG4gKlxuICogSXQgd2lsbCBjb250aW51b3VzbHkgcmUtdXBkYXRlIHRoZSB0ZXJtaW5hbCBhbmQgc2hvdyBvbmx5IHRoZSByZXNvdXJjZXNcbiAqIHRoYXQgYXJlIGN1cnJlbnRseSBiZWluZyB1cGRhdGVkLCBpbiBhZGRpdGlvbiB0byBhIHByb2dyZXNzIGJhciB3aGljaFxuICogc2hvd3MgaG93IGZhciBhbG9uZyB0aGUgZGVwbG95bWVudCBpcy5cbiAqXG4gKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGZhaWxlZCB3aWxsIGFsd2F5cyBiZSBzaG93biwgYW5kIHdpbGwgYmUgcmVjYXBpdHVsYXRlZFxuICogYWxvbmcgd2l0aCB0aGVpciBzdGFjayB0cmFjZSB3aGVuIHRoZSBtb25pdG9yaW5nIGVuZHMuXG4gKlxuICogUmVzb3VyY2VzIHRoYXQgZmFpbGVkIGRlcGxveW1lbnQgYmVjYXVzZSB0aGV5IGhhdmUgYmVlbiBjYW5jZWxsZWQgYXJlXG4gKiBub3QgaW5jbHVkZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBDdXJyZW50QWN0aXZpdHlQcmludGVyIGV4dGVuZHMgQWN0aXZpdHlQcmludGVyQmFzZSB7XG4gIC8qKlxuICAgKiBDb250aW51b3VzbHkgd3JpdGUgdG8gdGhlIHNhbWUgb3V0cHV0IGJsb2NrLlxuICAgKi9cbiAgcHJpdmF0ZSBibG9jazogUmV3cml0YWJsZUJsb2NrO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBBY3Rpdml0eVByaW50ZXJQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmJsb2NrID0gbmV3IFJld3JpdGFibGVCbG9jayh0aGlzLnN0cmVhbSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJpbnQoKTogdm9pZCB7XG4gICAgY29uc3QgbGluZXMgPSBbXTtcblxuICAgIC8vIEFkZCBhIHByb2dyZXNzIGJhciBhdCB0aGUgdG9wXG4gICAgY29uc3QgcHJvZ3Jlc3NXaWR0aCA9IE1hdGgubWF4KFxuICAgICAgTWF0aC5taW4oKHRoaXMuYmxvY2sud2lkdGggPz8gODApIC0gUFJPR1JFU1NCQVJfRVhUUkFfU1BBQ0UgLSAxLCBNQVhfUFJPR1JFU1NCQVJfV0lEVEgpLFxuICAgICAgTUlOX1BST0dSRVNTQkFSX1dJRFRILFxuICAgICk7XG4gICAgY29uc3QgcHJvZyA9IHRoaXMucHJvZ3Jlc3NCYXIocHJvZ3Jlc3NXaWR0aCk7XG4gICAgaWYgKHByb2cpIHtcbiAgICAgIGxpbmVzLnB1c2goJyAgJyArIHByb2csICcnKTtcbiAgICB9XG5cbiAgICAvLyBOb3JtYWxseSB3ZSdkIG9ubHkgcHJpbnQgXCJyZXNvdXJjZXMgaW4gcHJvZ3Jlc3NcIiwgYnV0IGl0J3MgYWxzbyB1c2VmdWxcbiAgICAvLyB0byBrZWVwIGFuIGV5ZSBvbiB0aGUgZmFpbHVyZXMgYW5kIGtub3cgYWJvdXQgdGhlIHNwZWNpZmljIGVycm9ycyBhc3F1aWNrbHlcbiAgICAvLyBhcyBwb3NzaWJsZSAod2hpbGUgdGhlIHN0YWNrIGlzIHN0aWxsIHJvbGxpbmcgYmFjayksIHNvIGFkZCB0aG9zZSBpbi5cbiAgICBjb25zdCB0b1ByaW50OiBTdGFja0FjdGl2aXR5W10gPSBbLi4udGhpcy5mYWlsdXJlcywgLi4uT2JqZWN0LnZhbHVlcyh0aGlzLnJlc291cmNlc0luUHJvZ3Jlc3MpXTtcbiAgICB0b1ByaW50LnNvcnQoKGEsIGIpID0+IGEuZXZlbnQuVGltZXN0YW1wIS5nZXRUaW1lKCkgLSBiLmV2ZW50LlRpbWVzdGFtcCEuZ2V0VGltZSgpKTtcblxuICAgIGxpbmVzLnB1c2goXG4gICAgICAuLi50b1ByaW50Lm1hcCgocmVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3Zpc2lvbmFsID0gdGhpcy5pc1Byb3Zpc2lvbmFsRmFpbHVyZShyZXMpO1xuICAgICAgICBjb25zdCBjb2xvciA9IHByb3Zpc2lvbmFsID8gY2hhbGsueWVsbG93IDogY29sb3JGcm9tU3RhdHVzQWN0aXZpdHkocmVzLmV2ZW50LlJlc291cmNlU3RhdHVzKTtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VOYW1lID0gcmVzLm1ldGFkYXRhPy5jb25zdHJ1Y3RQYXRoID8/IHJlcy5ldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCA/PyAnJztcbiAgICAgICAgY29uc3Qgc3RhdHVzVGV4dCA9IHByb3Zpc2lvbmFsXG4gICAgICAgICAgPyBgJHsocmVzLmV2ZW50LlJlc291cmNlU3RhdHVzIHx8ICcnKS5zbGljZSgwLCBDdXJyZW50QWN0aXZpdHlQcmludGVyLlNUQVRVU19XSURUSCl9IChza2lwcGVkKWBcbiAgICAgICAgICA6IChyZXMuZXZlbnQuUmVzb3VyY2VTdGF0dXMgfHwgJycpLnNsaWNlKDAsIEN1cnJlbnRBY3Rpdml0eVByaW50ZXIuU1RBVFVTX1dJRFRIKTtcblxuICAgICAgICByZXR1cm4gdXRpbC5mb3JtYXQoXG4gICAgICAgICAgJyVzIHwgJXMgfCAlcyB8ICVzJXMnLFxuICAgICAgICAgIHBhZExlZnQoQ3VycmVudEFjdGl2aXR5UHJpbnRlci5USU1FU1RBTVBfV0lEVEgsIG5ldyBEYXRlKHJlcy5ldmVudC5UaW1lc3RhbXAhKS50b0xvY2FsZVRpbWVTdHJpbmcoKSksXG4gICAgICAgICAgY29sb3IocGFkUmlnaHQoQ3VycmVudEFjdGl2aXR5UHJpbnRlci5TVEFUVVNfV0lEVEgsIHN0YXR1c1RleHQpKSxcbiAgICAgICAgICBwYWRSaWdodCh0aGlzLnJlc291cmNlVHlwZUNvbHVtbldpZHRoLCByZXMuZXZlbnQuUmVzb3VyY2VUeXBlIHx8ICcnKSxcbiAgICAgICAgICBjb2xvcihjaGFsay5ib2xkKHNob3J0ZW4oNDAsIHJlc291cmNlTmFtZSkpKSxcbiAgICAgICAgICBwcm92aXNpb25hbCA/ICcgKHRoaXMgd2lsbCB0YWtlIGEgZmV3IG1pbnV0ZXMgdG8gcmVjb3ZlciknIDogdGhpcy5mYWlsdXJlUmVhc29uT25OZXh0TGluZShyZXMpLFxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIHRoaXMuYmxvY2suZGlzcGxheUxpbmVzKGxpbmVzKTtcbiAgfVxuXG4gIHB1YmxpYyBzdG9wKCkge1xuICAgIHN1cGVyLnN0b3AoKTtcblxuICAgIC8vIFByaW50IGZhaWx1cmVzIGF0IHRoZSBlbmQgKGV4Y2x1ZGluZyBwcm92aXNpb25hbCBERUxFVEVfRkFJTEVEIGR1cmluZyB1cGRhdGVzKVxuICAgIGNvbnN0IGxpbmVzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IGZhaWx1cmUgb2YgdGhpcy5mYWlsdXJlcykge1xuICAgICAgaWYgKHRoaXMuaXNBY3Rpdml0eUZvclRoZVN0YWNrKGZhaWx1cmUpIHx8IHRoaXMuaXNQcm92aXNpb25hbEZhaWx1cmUoZmFpbHVyZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGxpbmVzLnB1c2goXG4gICAgICAgIHV0aWwuZm9ybWF0KFxuICAgICAgICAgIGNoYWxrLnJlZCgnJXMgfCAlcyB8ICVzIHwgJXMlcycpICsgJ1xcbicsXG4gICAgICAgICAgcGFkTGVmdChDdXJyZW50QWN0aXZpdHlQcmludGVyLlRJTUVTVEFNUF9XSURUSCwgbmV3IERhdGUoZmFpbHVyZS5ldmVudC5UaW1lc3RhbXAhKS50b0xvY2FsZVRpbWVTdHJpbmcoKSksXG4gICAgICAgICAgcGFkUmlnaHQoQ3VycmVudEFjdGl2aXR5UHJpbnRlci5TVEFUVVNfV0lEVEgsIChmYWlsdXJlLmV2ZW50LlJlc291cmNlU3RhdHVzIHx8ICcnKS5zbGljZSgwLCBDdXJyZW50QWN0aXZpdHlQcmludGVyLlNUQVRVU19XSURUSCkpLFxuICAgICAgICAgIHBhZFJpZ2h0KHRoaXMucmVzb3VyY2VUeXBlQ29sdW1uV2lkdGgsIGZhaWx1cmUuZXZlbnQuUmVzb3VyY2VUeXBlIHx8ICcnKSxcbiAgICAgICAgICBzaG9ydGVuKDQwLCBmYWlsdXJlLmV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkID8/ICcnKSxcbiAgICAgICAgICB0aGlzLmZhaWx1cmVSZWFzb25Pbk5leHRMaW5lKGZhaWx1cmUpLFxuICAgICAgICApLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgdHJhY2UgPSBmYWlsdXJlLm1ldGFkYXRhPy5lbnRyeT8udHJhY2U7XG4gICAgICBpZiAodHJhY2UpIHtcbiAgICAgICAgbGluZXMucHVzaChjaGFsay5yZWQoYFxcdCR7dHJhY2Uuam9pbignXFxuXFx0XFxcXF8gJyl9XFxuYCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmZhaWx1cmVzLnNvbWUoKGYpID0+IHRoaXMuaXNQcm92aXNpb25hbEZhaWx1cmUoZikpKSB7XG4gICAgICBsaW5lcy5wdXNoKGNoYWxrLnllbGxvdygnXFxuIOKaoO+4jyAgU29tZSByZXNvdXJjZXMgZmFpbGVkIHRvIGRlbGV0ZSBidXQgd2VyZSBza2lwcGVkLiBUaGVzZSByZXNvdXJjZXMgbWF5IHN0aWxsIGV4aXN0IGFuZCBjb3VsZCBpbmN1ciBjaGFyZ2VzLiBDbGVhbiB0aGVtIHVwIG1hbnVhbGx5LlxcbicpKTtcbiAgICB9XG5cbiAgICAvLyBEaXNwbGF5IGluIHRoZSBzYW1lIGJsb2NrIHNwYWNlLCBvdGhlcndpc2Ugd2UncmUgZ29pbmcgdG8gaGF2ZSBzaWxseSBlbXB0eSBsaW5lcy5cbiAgICB0aGlzLmJsb2NrLmRpc3BsYXlMaW5lcyhsaW5lcyk7XG4gICAgdGhpcy5ibG9jay5yZW1vdmVFbXB0eUxpbmVzKCk7XG4gIH1cblxuICBwcml2YXRlIHByb2dyZXNzQmFyKHdpZHRoOiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuc3RhY2tQcm9ncmVzcyB8fCAhdGhpcy5zdGFja1Byb2dyZXNzLnRvdGFsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IGZyYWN0aW9uID0gTWF0aC5taW4odGhpcy5zdGFja1Byb2dyZXNzLmNvbXBsZXRlZCAvIHRoaXMuc3RhY2tQcm9ncmVzcy50b3RhbCwgMSk7XG4gICAgY29uc3QgaW5uZXJXaWR0aCA9IE1hdGgubWF4KDEsIHdpZHRoIC0gMik7XG4gICAgY29uc3QgY2hhcnMgPSBpbm5lcldpZHRoICogZnJhY3Rpb247XG4gICAgY29uc3QgcmVtYWluZGVyID0gY2hhcnMgLSBNYXRoLmZsb29yKGNoYXJzKTtcblxuICAgIGNvbnN0IGZ1bGxDaGFycyA9IEZVTExfQkxPQ0sucmVwZWF0KE1hdGguZmxvb3IoY2hhcnMpKTtcbiAgICBjb25zdCBwYXJ0aWFsQ2hhciA9IFBBUlRJQUxfQkxPQ0tbTWF0aC5mbG9vcihyZW1haW5kZXIgKiBQQVJUSUFMX0JMT0NLLmxlbmd0aCldO1xuICAgIGNvbnN0IGZpbGxlciA9ICfCtycucmVwZWF0KGlubmVyV2lkdGggLSBNYXRoLmZsb29yKGNoYXJzKSAtIChwYXJ0aWFsQ2hhciA/IDEgOiAwKSk7XG5cbiAgICBjb25zdCBjb2xvciA9IHRoaXMucm9sbGluZ0JhY2sgPyBjaGFsay55ZWxsb3cgOiBjaGFsay5ncmVlbjtcblxuICAgIHJldHVybiAnWycgKyBjb2xvcihmdWxsQ2hhcnMgKyBwYXJ0aWFsQ2hhcikgKyBmaWxsZXIgKyBgXSAoJHt0aGlzLnN0YWNrUHJvZ3Jlc3MuY29tcGxldGVkfS8ke3RoaXMuc3RhY2tQcm9ncmVzcy50b3RhbH0pYDtcbiAgfVxuXG4gIHByaXZhdGUgZmFpbHVyZVJlYXNvbk9uTmV4dExpbmUoYWN0aXZpdHk6IFN0YWNrQWN0aXZpdHkpIHtcbiAgICByZXR1cm4gaXNFcnJvckV2ZW50KGFjdGl2aXR5LmV2ZW50KVxuICAgICAgPyBgXFxuJHsnICcucmVwZWF0KEN1cnJlbnRBY3Rpdml0eVByaW50ZXIuVElNRVNUQU1QX1dJRFRIICsgQ3VycmVudEFjdGl2aXR5UHJpbnRlci5TVEFUVVNfV0lEVEggKyA2KX0ke2NoYWxrLnJlZCh0aGlzLmZhaWx1cmVSZWFzb24oYWN0aXZpdHkpID8/ICcnKX1gXG4gICAgICA6ICcnO1xuICB9XG59XG5cbmNvbnN0IEZVTExfQkxPQ0sgPSAn4paIJztcbmNvbnN0IFBBUlRJQUxfQkxPQ0sgPSBbJycsICfilo8nLCAn4paOJywgJ+KWjScsICfilownLCAn4paLJywgJ+KWiicsICfiloknXTtcbmNvbnN0IE1BWF9QUk9HUkVTU0JBUl9XSURUSCA9IDYwO1xuY29uc3QgTUlOX1BST0dSRVNTQkFSX1dJRFRIID0gMTA7XG5jb25zdCBQUk9HUkVTU0JBUl9FWFRSQV9TUEFDRSA9XG4gICAgMiAvKiBsZWFkaW5nIHNwYWNlcyAqLyArIDIgLyogYnJhY2tldHMgKi8gKyA0IC8qIHByb2dyZXNzIG51bWJlciBkZWNvcmF0aW9uICovICsgNjsgLyogMiBwcm9ncmVzcyBudW1iZXJzIHVwIHRvIDk5OSAqL1xuXG5mdW5jdGlvbiBjb2xvckZyb21TdGF0dXNBY3Rpdml0eShzdGF0dXM/OiBzdHJpbmcpIHtcbiAgaWYgKCFzdGF0dXMpIHtcbiAgICByZXR1cm4gY2hhbGsucmVzZXQ7XG4gIH1cblxuICBpZiAoc3RhdHVzLmVuZHNXaXRoKCdfRkFJTEVEJykpIHtcbiAgICByZXR1cm4gY2hhbGsucmVkO1xuICB9XG5cbiAgaWYgKHN0YXR1cy5zdGFydHNXaXRoKCdDUkVBVEVfJykgfHwgc3RhdHVzLnN0YXJ0c1dpdGgoJ1VQREFURV8nKSB8fCBzdGF0dXMuc3RhcnRzV2l0aCgnSU1QT1JUXycpKSB7XG4gICAgcmV0dXJuIGNoYWxrLmdyZWVuO1xuICB9XG4gIC8vIEZvciBzdGFja3MsIGl0IG1heSBhbHNvIGJlICdVUEREQVRFX1JPTExCQUNLX0lOX1BST0dSRVNTJ1xuICBpZiAoc3RhdHVzLmluZGV4T2YoJ1JPTExCQUNLXycpICE9PSAtMSkge1xuICAgIHJldHVybiBjaGFsay55ZWxsb3c7XG4gIH1cbiAgaWYgKHN0YXR1cy5zdGFydHNXaXRoKCdERUxFVEVfJykpIHtcbiAgICByZXR1cm4gY2hhbGsueWVsbG93O1xuICB9XG5cbiAgcmV0dXJuIGNoYWxrLnJlc2V0O1xufVxuXG5mdW5jdGlvbiBzaG9ydGVuKG1heFdpZHRoOiBudW1iZXIsIHA6IHN0cmluZykge1xuICBpZiAocC5sZW5ndGggPD0gbWF4V2lkdGgpIHtcbiAgICByZXR1cm4gcDtcbiAgfVxuICBjb25zdCBoYWxmID0gTWF0aC5mbG9vcigobWF4V2lkdGggLSAzKSAvIDIpO1xuICByZXR1cm4gcC5zbGljZSgwLCBoYWxmKSArICcuLi4nICsgcC5zbGljZSgtaGFsZik7XG59XG5cbiJdfQ==
|
|
220
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImN1cnJlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQTZCO0FBQzdCLGtEQUEwQjtBQUUxQixpQ0FBNkM7QUFDN0MsdUNBQTRDO0FBRTVDLHFDQUF5RjtBQUV6Rjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFhLHNCQUF1QixTQUFRLDBCQUFtQjtJQUM3RDs7T0FFRztJQUNLLEtBQUssQ0FBa0I7SUFFL0I7Ozs7T0FJRztJQUNjLFdBQVcsR0FBc0UsRUFBRSxDQUFDO0lBRXJHLFlBQVksS0FBMkI7UUFDckMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLHlCQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFUyxXQUFXLENBQUMsUUFBdUI7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU1Qiw4RUFBOEU7UUFDOUUsb0VBQW9FO1FBQ3BFLDRFQUE0RTtRQUM1RSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxpQkFBa0IsQ0FBQyxHQUFHO2dCQUNwRCxRQUFRO2dCQUNSLFlBQVksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsc0JBQXNCO2FBQ2xELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGtCQUFrQixDQUFDLFFBQXVCO1FBQ2hELE9BQU8sSUFBQSxpQ0FBMEIsRUFBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxjQUFjLEtBQUssaUJBQWlCLENBQUM7SUFDM0csQ0FBQztJQUVTLEtB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Q0FBQztJQUM1QyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0aWwgZnJvbSAndXRpbCc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHR5cGUgeyBBY3Rpdml0eVByaW50ZXJQcm9wcyB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBBY3Rpdml0eVByaW50ZXJCYXNlIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IFJld3JpdGFibGVCbG9jayB9IGZyb20gJy4vZGlzcGxheSc7XG5pbXBvcnQgdHlwZSB7IFN0YWNrQWN0aXZpdHkgfSBmcm9tICcuLi8uLi9wYXlsb2Fkcyc7XG5pbXBvcnQgeyBpc0Vycm9yRXZlbnQsIGlzU3RhYmlsaXppbmdSZXNvdXJjZUV2ZW50LCBwYWRMZWZ0LCBwYWRSaWdodCB9IGZyb20gJy4uLy4uL3V0aWwnO1xuXG4vKipcbiAqIEFjdGl2aXR5IFByaW50ZXIgd2hpY2ggc2hvd3MgdGhlIHJlc291cmNlcyBjdXJyZW50bHkgYmVpbmcgdXBkYXRlZFxuICpcbiAqIEl0IHdpbGwgY29udGludW91c2x5IHJlLXVwZGF0ZSB0aGUgdGVybWluYWwgYW5kIHNob3cgb25seSB0aGUgcmVzb3VyY2VzXG4gKiB0aGF0IGFyZSBjdXJyZW50bHkgYmVpbmcgdXBkYXRlZCwgaW4gYWRkaXRpb24gdG8gYSBwcm9ncmVzcyBiYXIgd2hpY2hcbiAqIHNob3dzIGhvdyBmYXIgYWxvbmcgdGhlIGRlcGxveW1lbnQgaXMuXG4gKlxuICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBmYWlsZWQgd2lsbCBhbHdheXMgYmUgc2hvd24sIGFuZCB3aWxsIGJlIHJlY2FwaXR1bGF0ZWRcbiAqIGFsb25nIHdpdGggdGhlaXIgc3RhY2sgdHJhY2Ugd2hlbiB0aGUgbW9uaXRvcmluZyBlbmRzLlxuICpcbiAqIFJlc291cmNlcyB0aGF0IGZhaWxlZCBkZXBsb3ltZW50IGJlY2F1c2UgdGhleSBoYXZlIGJlZW4gY2FuY2VsbGVkIGFyZVxuICogbm90IGluY2x1ZGVkLlxuICovXG5leHBvcnQgY2xhc3MgQ3VycmVudEFjdGl2aXR5UHJpbnRlciBleHRlbmRzIEFjdGl2aXR5UHJpbnRlckJhc2Uge1xuICAvKipcbiAgICogQ29udGludW91c2x5IHdyaXRlIHRvIHRoZSBzYW1lIG91dHB1dCBibG9jay5cbiAgICovXG4gIHByaXZhdGUgYmxvY2s6IFJld3JpdGFibGVCbG9jaztcblxuICAvKipcbiAgICogUmVzb3VyY2VzIHRoYXQgY29tcGxldGVkIGJ1dCBhcmUgc3RpbGwgc3RhYmlsaXppbmcgKEV4cHJlc3MgTW9kZSksIGtleWVkIGJ5XG4gICAqIGxvZ2ljYWwgSUQuIFRoZXNlIGFyZSBzaG93biB0cmFuc2llbnRseSBhbmQgcmVtb3ZlZCBvbmNlIGBkaXNhcHBlYXJzQXRgIGhhc1xuICAgKiBwYXNzZWRcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhYmlsaXppbmc6IFJlY29yZDxzdHJpbmcsIHsgYWN0aXZpdHk6IFN0YWNrQWN0aXZpdHk7IGRpc2FwcGVhcnNBdDogbnVtYmVyIH0+ID0ge307XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IEFjdGl2aXR5UHJpbnRlclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuYmxvY2sgPSBuZXcgUmV3cml0YWJsZUJsb2NrKHRoaXMuc3RyZWFtKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhZGRBY3Rpdml0eShhY3Rpdml0eTogU3RhY2tBY3Rpdml0eSkge1xuICAgIHN1cGVyLmFkZEFjdGl2aXR5KGFjdGl2aXR5KTtcblxuICAgIC8vIEluIEV4cHJlc3MgTW9kZSwgQ2xvdWRGb3JtYXRpb24gcmVwb3J0cyBhIHJlc291cmNlIGFzIGAqX0NPTVBMRVRFYCB3aGlsZSBpdFxuICAgIC8vIGlzIHN0aWxsIHN0YWJpbGl6aW5nLCBzdXJmYWNpbmcgdGhpcyB2aWEgYSBzdGF0dXMgcmVhc29uLiBTaG93IGl0XG4gICAgLy8gdHJhbnNpZW50bHkgc28gdGhlIHVzZXIgaXMgYXdhcmUsIHRoZW4gbGV0IGl0IGRpc2FwcGVhciB0byBhdm9pZCBjbHV0dGVyLlxuICAgIGlmICh0aGlzLnNob3dzU3RhYmlsaXphdGlvbihhY3Rpdml0eSkpIHtcbiAgICAgIHRoaXMuc3RhYmlsaXppbmdbYWN0aXZpdHkuZXZlbnQuTG9naWNhbFJlc291cmNlSWQhXSA9IHtcbiAgICAgICAgYWN0aXZpdHksXG4gICAgICAgIGRpc2FwcGVhcnNBdDogRGF0ZS5ub3coKSArIFNUQUJJTElaSU5HX0RJU1BMQVlfTVMsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgZXZlbnQgc2hvdWxkIHN1cmZhY2UgaXRzIEV4cHJlc3MgTW9kZSBzdGFiaWxpemF0aW9uIHJlYXNvbiBpblxuICAgKiB0aGUgbGl2ZSB2aWV3LiBPbmx5IENSRUFURS9VUERBVEUgY29tcGxldGlvbnMgYXJlIHNob3duLlxuICAgKi9cbiAgcHJpdmF0ZSBzaG93c1N0YWJpbGl6YXRpb24oYWN0aXZpdHk6IFN0YWNrQWN0aXZpdHkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNTdGFiaWxpemluZ1Jlc291cmNlRXZlbnQoYWN0aXZpdHkuZXZlbnQpICYmIGFjdGl2aXR5LmV2ZW50LlJlc291cmNlU3RhdHVzICE9PSAnREVMRVRFX0NPTVBMRVRFJztcbiAgfVxuXG4gIHByb3RlY3RlZCBwcmludCgpOiB2b2lkIHtcbiAgICBjb25zdCBsaW5lcyA9IFtdO1xuXG4gICAgLy8gQWRkIGEgcHJvZ3Jlc3MgYmFyIGF0IHRoZSB0b3BcbiAgICBjb25zdCBwcm9ncmVzc1dpZHRoID0gTWF0aC5tYXgoXG4gICAgICBNYXRoLm1pbigodGhpcy5ibG9jay53aWR0aCA/PyA4MCkgLSBQUk9HUkVTU0JBUl9FWFRSQV9TUEFDRSAtIDEsIE1BWF9QUk9HUkVTU0JBUl9XSURUSCksXG4gICAgICBNSU5fUFJPR1JFU1NCQVJfV0lEVEgsXG4gICAgKTtcbiAgICBjb25zdCBwcm9nID0gdGhpcy5wcm9ncmVzc0Jhcihwcm9ncmVzc1dpZHRoKTtcbiAgICBpZiAocHJvZykge1xuICAgICAgbGluZXMucHVzaCgnICAnICsgcHJvZywgJycpO1xuICAgIH1cblxuICAgIC8vIERyb3Agc3RhYmlsaXppbmcgcmVzb3VyY2VzIHdob3NlIHRyYW5zaWVudCBkaXNwbGF5IHdpbmRvdyBoYXMgZWxhcHNlZC5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGZvciAoY29uc3QgW2xvZ2ljYWxJZCwgZW50cnldIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc3RhYmlsaXppbmcpKSB7XG4gICAgICBpZiAobm93ID4gZW50cnkuZGlzYXBwZWFyc0F0KSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnN0YWJpbGl6aW5nW2xvZ2ljYWxJZF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTm9ybWFsbHkgd2UnZCBvbmx5IHByaW50IFwicmVzb3VyY2VzIGluIHByb2dyZXNzXCIsIGJ1dCBpdCdzIGFsc28gdXNlZnVsXG4gICAgLy8gdG8ga2VlcCBhbiBleWUgb24gdGhlIGZhaWx1cmVzIGFuZCBrbm93IGFib3V0IHRoZSBzcGVjaWZpYyBlcnJvcnMgYXNxdWlja2x5XG4gICAgLy8gYXMgcG9zc2libGUgKHdoaWxlIHRoZSBzdGFjayBpcyBzdGlsbCByb2xsaW5nIGJhY2spLCBzbyBhZGQgdGhvc2UgaW4uXG4gICAgLy8gV2UgYWxzbyBzdXJmYWNlIHN0aWxsLXN0YWJpbGl6aW5nIHJlc291cmNlcyAoRXhwcmVzcyBNb2RlKSBmb3IgYSBzaG9ydCB3aGlsZS5cbiAgICBjb25zdCB0b1ByaW50OiBTdGFja0FjdGl2aXR5W10gPSBbXG4gICAgICAuLi50aGlzLmZhaWx1cmVzLFxuICAgICAgLi4uT2JqZWN0LnZhbHVlcyh0aGlzLnJlc291cmNlc0luUHJvZ3Jlc3MpLFxuICAgICAgLi4uT2JqZWN0LnZhbHVlcyh0aGlzLnN0YWJpbGl6aW5nKS5tYXAoKGUpID0+IGUuYWN0aXZpdHkpLFxuICAgIF07XG4gICAgdG9QcmludC5zb3J0KChhLCBiKSA9PiBhLmV2ZW50LlRpbWVzdGFtcCEuZ2V0VGltZSgpIC0gYi5ldmVudC5UaW1lc3RhbXAhLmdldFRpbWUoKSk7XG5cbiAgICBsaW5lcy5wdXNoKFxuICAgICAgLi4udG9QcmludC5tYXAoKHJlcykgPT4ge1xuICAgICAgICBjb25zdCBwcm92aXNpb25hbCA9IHRoaXMuaXNQcm92aXNpb25hbEZhaWx1cmUocmVzKTtcbiAgICAgICAgY29uc3QgY29sb3IgPSBwcm92aXNpb25hbCA/IGNoYWxrLnllbGxvdyA6IGNvbG9yRnJvbVN0YXR1c0FjdGl2aXR5KHJlcy5ldmVudC5SZXNvdXJjZVN0YXR1cyk7XG4gICAgICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IHJlcy5tZXRhZGF0YT8uY29uc3RydWN0UGF0aCA/PyByZXMuZXZlbnQuTG9naWNhbFJlc291cmNlSWQgPz8gJyc7XG4gICAgICAgIGNvbnN0IHN0YXR1c1RleHQgPSBwcm92aXNpb25hbFxuICAgICAgICAgID8gYCR7KHJlcy5ldmVudC5SZXNvdXJjZVN0YXR1cyB8fCAnJykuc2xpY2UoMCwgQ3VycmVudEFjdGl2aXR5UHJpbnRlci5TVEFUVVNfV0lEVEgpfSAoc2tpcHBlZClgXG4gICAgICAgICAgOiAocmVzLmV2ZW50LlJlc291cmNlU3RhdHVzIHx8ICcnKS5zbGljZSgwLCBDdXJyZW50QWN0aXZpdHlQcmludGVyLlNUQVRVU19XSURUSCk7XG5cbiAgICAgICAgcmV0dXJuIHV0aWwuZm9ybWF0KFxuICAgICAgICAgICclcyB8ICVzIHwgJXMgfCAlcyVzJyxcbiAgICAgICAgICBwYWRMZWZ0KEN1cnJlbnRBY3Rpdml0eVByaW50ZXIuVElNRVNUQU1QX1dJRFRILCBuZXcgRGF0ZShyZXMuZXZlbnQuVGltZXN0YW1wISkudG9Mb2NhbGVUaW1lU3RyaW5nKCkpLFxuICAgICAgICAgIGNvbG9yKHBhZFJpZ2h0KEN1cnJlbnRBY3Rpdml0eVByaW50ZXIuU1RBVFVTX1dJRFRILCBzdGF0dXNUZXh0KSksXG4gICAgICAgICAgcGFkUmlnaHQodGhpcy5yZXNvdXJjZVR5cGVDb2x1bW5XaWR0aCwgcmVzLmV2ZW50LlJlc291cmNlVHlwZSB8fCAnJyksXG4gICAgICAgICAgY29sb3IoY2hhbGsuYm9sZChzaG9ydGVuKDQwLCByZXNvdXJjZU5hbWUpKSksXG4gICAgICAgICAgcHJvdmlzaW9uYWwgPyAnICh0aGlzIHdpbGwgdGFrZSBhIGZldyBtaW51dGVzIHRvIHJlY292ZXIpJyA6IHRoaXMucmVhc29uKHJlcyksXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgdGhpcy5ibG9jay5kaXNwbGF5TGluZXMobGluZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYXNvbiB0byBhcHBlbmQgdG8gdGhlIHJlc291cmNlIGxpbmU6IHRoZSBmYWlsdXJlIHJlYXNvbiAob24gaXRzIG93biBsaW5lKVxuICAgKiBmb3IgZXJyb3IgZXZlbnRzLCBvciB0aGUgc3RhYmlsaXphdGlvbiByZWFzb24gKGlubGluZSkgZm9yIHJlc291cmNlcyB0aGF0XG4gICAqIGNvbXBsZXRlZCBidXQgYXJlIHN0aWxsIHN0YWJpbGl6aW5nIChFeHByZXNzIE1vZGUpLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFzb24oYWN0aXZpdHk6IFN0YWNrQWN0aXZpdHkpIHtcbiAgICBpZiAoaXNFcnJvckV2ZW50KGFjdGl2aXR5LmV2ZW50KSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmFpbHVyZVJlYXNvbk9uTmV4dExpbmUoYWN0aXZpdHkpO1xuICAgIH1cbiAgICAvLyBTdXJmYWNlIHRoZSBFeHByZXNzIE1vZGUgc3RhYmlsaXphdGlvbiBtZXNzYWdlIGlubGluZS5cbiAgICByZXR1cm4gdGhpcy5zaG93c1N0YWJpbGl6YXRpb24oYWN0aXZpdHkpXG4gICAgICA/IGAgfCAke2NoYWxrLndoaXRlKGFjdGl2aXR5LmV2ZW50LlJlc291cmNlU3RhdHVzUmVhc29uKX1gXG4gICAgICA6ICcnO1xuICB9XG5cbiAgcHVibGljIHN0b3AoKSB7XG4gICAgc3VwZXIuc3RvcCgpO1xuXG4gICAgLy8gUHJpbnQgZmFpbHVyZXMgYXQgdGhlIGVuZCAoZXhjbHVkaW5nIHByb3Zpc2lvbmFsIERFTEVURV9GQUlMRUQgZHVyaW5nIHVwZGF0ZXMpXG4gICAgY29uc3QgbGluZXMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgZmFpbHVyZSBvZiB0aGlzLmZhaWx1cmVzKSB7XG4gICAgICBpZiAodGhpcy5pc0FjdGl2aXR5Rm9yVGhlU3RhY2soZmFpbHVyZSkgfHwgdGhpcy5pc1Byb3Zpc2lvbmFsRmFpbHVyZShmYWlsdXJlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGluZXMucHVzaChcbiAgICAgICAgdXRpbC5mb3JtYXQoXG4gICAgICAgICAgY2hhbGsucmVkKCclcyB8ICVzIHwgJXMgfCAlcyVzJykgKyAnXFxuJyxcbiAgICAgICAgICBwYWRMZWZ0KEN1cnJlbnRBY3Rpdml0eVByaW50ZXIuVElNRVNUQU1QX1dJRFRILCBuZXcgRGF0ZShmYWlsdXJlLmV2ZW50LlRpbWVzdGFtcCEpLnRvTG9jYWxlVGltZVN0cmluZygpKSxcbiAgICAgICAgICBwYWRSaWdodChDdXJyZW50QWN0aXZpdHlQcmludGVyLlNUQVRVU19XSURUSCwgKGZhaWx1cmUuZXZlbnQuUmVzb3VyY2VTdGF0dXMgfHwgJycpLnNsaWNlKDAsIEN1cnJlbnRBY3Rpdml0eVByaW50ZXIuU1RBVFVTX1dJRFRIKSksXG4gICAgICAgICAgcGFkUmlnaHQodGhpcy5yZXNvdXJjZVR5cGVDb2x1bW5XaWR0aCwgZmFpbHVyZS5ldmVudC5SZXNvdXJjZVR5cGUgfHwgJycpLFxuICAgICAgICAgIHNob3J0ZW4oNDAsIGZhaWx1cmUuZXZlbnQuTG9naWNhbFJlc291cmNlSWQgPz8gJycpLFxuICAgICAgICAgIHRoaXMuZmFpbHVyZVJlYXNvbk9uTmV4dExpbmUoZmFpbHVyZSksXG4gICAgICAgICksXG4gICAgICApO1xuXG4gICAgICBjb25zdCB0cmFjZSA9IGZhaWx1cmUubWV0YWRhdGE/LmVudHJ5Py50cmFjZTtcbiAgICAgIGlmICh0cmFjZSkge1xuICAgICAgICBsaW5lcy5wdXNoKGNoYWxrLnJlZChgXFx0JHt0cmFjZS5qb2luKCdcXG5cXHRcXFxcXyAnKX1cXG5gKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmFpbHVyZXMuc29tZSgoZikgPT4gdGhpcy5pc1Byb3Zpc2lvbmFsRmFpbHVyZShmKSkpIHtcbiAgICAgIGxpbmVzLnB1c2goY2hhbGsueWVsbG93KCdcXG4g4pqg77iPICBTb21lIHJlc291cmNlcyBmYWlsZWQgdG8gZGVsZXRlIGJ1dCB3ZXJlIHNraXBwZWQuIFRoZXNlIHJlc291cmNlcyBtYXkgc3RpbGwgZXhpc3QgYW5kIGNvdWxkIGluY3VyIGNoYXJnZXMuIENsZWFuIHRoZW0gdXAgbWFudWFsbHkuXFxuJykpO1xuICAgIH1cblxuICAgIC8vIERpc3BsYXkgaW4gdGhlIHNhbWUgYmxvY2sgc3BhY2UsIG90aGVyd2lzZSB3ZSdyZSBnb2luZyB0byBoYXZlIHNpbGx5IGVtcHR5IGxpbmVzLlxuICAgIHRoaXMuYmxvY2suZGlzcGxheUxpbmVzKGxpbmVzKTtcbiAgICB0aGlzLmJsb2NrLnJlbW92ZUVtcHR5TGluZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvZ3Jlc3NCYXIod2lkdGg6IG51bWJlcikge1xuICAgIGlmICghdGhpcy5zdGFja1Byb2dyZXNzIHx8ICF0aGlzLnN0YWNrUHJvZ3Jlc3MudG90YWwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgZnJhY3Rpb24gPSBNYXRoLm1pbih0aGlzLnN0YWNrUHJvZ3Jlc3MuY29tcGxldGVkIC8gdGhpcy5zdGFja1Byb2dyZXNzLnRvdGFsLCAxKTtcbiAgICBjb25zdCBpbm5lcldpZHRoID0gTWF0aC5tYXgoMSwgd2lkdGggLSAyKTtcbiAgICBjb25zdCBjaGFycyA9IGlubmVyV2lkdGggKiBmcmFjdGlvbjtcbiAgICBjb25zdCByZW1haW5kZXIgPSBjaGFycyAtIE1hdGguZmxvb3IoY2hhcnMpO1xuXG4gICAgY29uc3QgZnVsbENoYXJzID0gRlVMTF9CTE9DSy5yZXBlYXQoTWF0aC5mbG9vcihjaGFycykpO1xuICAgIGNvbnN0IHBhcnRpYWxDaGFyID0gUEFSVElBTF9CTE9DS1tNYXRoLmZsb29yKHJlbWFpbmRlciAqIFBBUlRJQUxfQkxPQ0subGVuZ3RoKV07XG4gICAgY29uc3QgZmlsbGVyID0gJ8K3Jy5yZXBlYXQoaW5uZXJXaWR0aCAtIE1hdGguZmxvb3IoY2hhcnMpIC0gKHBhcnRpYWxDaGFyID8gMSA6IDApKTtcblxuICAgIGNvbnN0IGNvbG9yID0gdGhpcy5yb2xsaW5nQmFjayA/IGNoYWxrLnllbGxvdyA6IGNoYWxrLmdyZWVuO1xuXG4gICAgcmV0dXJuICdbJyArIGNvbG9yKGZ1bGxDaGFycyArIHBhcnRpYWxDaGFyKSArIGZpbGxlciArIGBdICgke3RoaXMuc3RhY2tQcm9ncmVzcy5jb21wbGV0ZWR9LyR7dGhpcy5zdGFja1Byb2dyZXNzLnRvdGFsfSlgO1xuICB9XG5cbiAgcHJpdmF0ZSBmYWlsdXJlUmVhc29uT25OZXh0TGluZShhY3Rpdml0eTogU3RhY2tBY3Rpdml0eSkge1xuICAgIHJldHVybiBpc0Vycm9yRXZlbnQoYWN0aXZpdHkuZXZlbnQpXG4gICAgICA/IGBcXG4keycgJy5yZXBlYXQoQ3VycmVudEFjdGl2aXR5UHJpbnRlci5USU1FU1RBTVBfV0lEVEggKyBDdXJyZW50QWN0aXZpdHlQcmludGVyLlNUQVRVU19XSURUSCArIDYpfSR7Y2hhbGsucmVkKHRoaXMuZmFpbHVyZVJlYXNvbihhY3Rpdml0eSkgPz8gJycpfWBcbiAgICAgIDogJyc7XG4gIH1cbn1cblxuLyoqXG4gKiBIb3cgbG9uZyBhIHN0aWxsLXN0YWJpbGl6aW5nIChFeHByZXNzIE1vZGUpIHJlc291cmNlIHN0YXlzIHZpc2libGUgaW4gdGhlXG4gKiBsaXZlIHZpZXcgYmVmb3JlIGl0IGRpc2FwcGVhcnMsIHRvIGF2b2lkIGNsdXR0ZXJpbmcgdGhlIG91dHB1dC5cbiAqL1xuY29uc3QgU1RBQklMSVpJTkdfRElTUExBWV9NUyA9IDJfMDAwO1xuXG5jb25zdCBGVUxMX0JMT0NLID0gJ+KWiCc7XG5jb25zdCBQQVJUSUFMX0JMT0NLID0gWycnLCAn4paPJywgJ+KWjicsICfilo0nLCAn4paMJywgJ+KWiycsICfiloonLCAn4paJJ107XG5jb25zdCBNQVhfUFJPR1JFU1NCQVJfV0lEVEggPSA2MDtcbmNvbnN0IE1JTl9QUk9HUkVTU0JBUl9XSURUSCA9IDEwO1xuY29uc3QgUFJPR1JFU1NCQVJfRVhUUkFfU1BBQ0UgPVxuICAgIDIgLyogbGVhZGluZyBzcGFjZXMgKi8gKyAyIC8qIGJyYWNrZXRzICovICsgNCAvKiBwcm9ncmVzcyBudW1iZXIgZGVjb3JhdGlvbiAqLyArIDY7IC8qIDIgcHJvZ3Jlc3MgbnVtYmVycyB1cCB0byA5OTkgKi9cblxuZnVuY3Rpb24gY29sb3JGcm9tU3RhdHVzQWN0aXZpdHkoc3RhdHVzPzogc3RyaW5nKSB7XG4gIGlmICghc3RhdHVzKSB7XG4gICAgcmV0dXJuIGNoYWxrLnJlc2V0O1xuICB9XG5cbiAgaWYgKHN0YXR1cy5lbmRzV2l0aCgnX0ZBSUxFRCcpKSB7XG4gICAgcmV0dXJuIGNoYWxrLnJlZDtcbiAgfVxuXG4gIGlmIChzdGF0dXMuc3RhcnRzV2l0aCgnQ1JFQVRFXycpIHx8IHN0YXR1cy5zdGFydHNXaXRoKCdVUERBVEVfJykgfHwgc3RhdHVzLnN0YXJ0c1dpdGgoJ0lNUE9SVF8nKSkge1xuICAgIHJldHVybiBjaGFsay5ncmVlbjtcbiAgfVxuICAvLyBGb3Igc3RhY2tzLCBpdCBtYXkgYWxzbyBiZSAnVVBEREFURV9ST0xMQkFDS19JTl9QUk9HUkVTUydcbiAgaWYgKHN0YXR1cy5pbmRleE9mKCdST0xMQkFDS18nKSAhPT0gLTEpIHtcbiAgICByZXR1cm4gY2hhbGsueWVsbG93O1xuICB9XG4gIGlmIChzdGF0dXMuc3RhcnRzV2l0aCgnREVMRVRFXycpKSB7XG4gICAgcmV0dXJuIGNoYWxrLnllbGxvdztcbiAgfVxuXG4gIHJldHVybiBjaGFsay5yZXNldDtcbn1cblxuZnVuY3Rpb24gc2hvcnRlbihtYXhXaWR0aDogbnVtYmVyLCBwOiBzdHJpbmcpIHtcbiAgaWYgKHAubGVuZ3RoIDw9IG1heFdpZHRoKSB7XG4gICAgcmV0dXJuIHA7XG4gIH1cbiAgY29uc3QgaGFsZiA9IE1hdGguZmxvb3IoKG1heFdpZHRoIC0gMykgLyAyKTtcbiAgcmV0dXJuIHAuc2xpY2UoMCwgaGFsZikgKyAnLi4uJyArIHAuc2xpY2UoLWhhbGYpO1xufVxuXG4iXX0=
|