@trudb/tru-common-lib 0.1.441 → 0.1.443

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.
@@ -89,12 +89,9 @@ export class TruDesktopManager {
89
89
  };
90
90
  };
91
91
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruDesktopManager, deps: [{ token: i1.TruContextFilters }, { token: i2.TruWindowEventHandler }], target: i0.ɵɵFactoryTarget.Injectable });
92
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruDesktopManager, providedIn: 'root' });
92
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruDesktopManager });
93
93
  }
94
94
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruDesktopManager, decorators: [{
95
- type: Injectable,
96
- args: [{
97
- providedIn: 'root',
98
- }]
95
+ type: Injectable
99
96
  }], ctorParameters: () => [{ type: i1.TruContextFilters }, { type: i2.TruWindowEventHandler }] });
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWRlc2t0b3AtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9kZXNrdG9wL3NlcnZpY2VzL3RydS1kZXNrdG9wLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUk3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7OztBQUsxRSxNQUFNLE9BQU8saUJBQWlCO0lBR2xCO0lBQ0E7SUFGVixZQUNVLGNBQWlDLEVBQ2pDLGtCQUF5QztRQUR6QyxtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFDakMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUF1QjtJQUFJLENBQUM7SUFFeEQsY0FBYyxHQUFHLENBQ2YsU0FBaUIsRUFDakIsZUFBdUIsRUFDdkIsZ0JBQXdCLEVBQ3hCLGFBQXFCLEVBQ3JCLFdBQWlDLEVBQUUsRUFDbkMsa0JBQTJCLEtBQUssRUFBc0IsRUFBRTtRQUV4RCxJQUFJLFdBQVcsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDM0MsV0FBVyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDbEMsV0FBVyxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7UUFDOUMsV0FBVyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQ2hELFdBQVcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7UUFDekQsV0FBVyxDQUFDLEtBQUssR0FBRztZQUNsQjtnQkFDRSxNQUFNLEVBQUUsSUFBSTtnQkFDWixRQUFRLEVBQUUsUUFBUTtnQkFDbEIsV0FBVyxFQUFFLENBQUM7Z0JBQ2QsT0FBTyxFQUFF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QU0sQ0FBQyxXQUFXLENBQUM7Z0JBQ3ZCLENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUMsQ0FBQTt1R0FoSFUsaUJBQWlCOzJHQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7MkZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBUcnVXaW5kb3dFdmVudEhhbmRsZXIgfSBmcm9tICcuL3RydS13aW5kb3ctZXZlbnQtaGFuZGxlcic7XHJcbmltcG9ydCB7IFRydVdpbmRvd0V2ZW50QXJncyB9IGZyb20gJy4vdHJ1LXdpbmRvdy1ldmVudC1hcmdzJztcclxuaW1wb3J0IHsgVHJ1Q29udGV4dEZpbHRlcnMgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvdHJ1LWNvbnRleHQtZmlsdGVyc1wiO1xyXG5pbXBvcnQgeyBUcnVFbnRpdHlCYXNlIH0gZnJvbSBcIi4uLy4uLy4uL2Jhc2UtY2xhc3Nlcy90cnUtZW50aXR5LWJhc2VcIjtcclxuaW1wb3J0IHsgVHJ1RGVza3RvcFRpdGxlIH0gZnJvbSBcIi4uL2NsYXNzZXMvdHJ1LWRlc2t0b3AtdGl0bGVcIjtcclxuaW1wb3J0IHsgVHJ1RGVza3RvcFZpZXdDb25maWcgfSBmcm9tIFwiLi4vY2xhc3Nlcy90cnUtZGVza3RvcC12aWV3LWNvbmZpZ1wiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRydURlc2t0b3BNYW5hZ2VyIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNvbnRleHRGaWx0ZXJzOiBUcnVDb250ZXh0RmlsdGVycyxcclxuICAgIHByaXZhdGUgd2luZG93RXZlbnRIYW5kbGVyOiBUcnVXaW5kb3dFdmVudEhhbmRsZXIpIHsgfVxyXG5cclxuICBnZXRXaW5kb3dFdmVudCA9IChcclxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxyXG4gICAgdGFibGVQbHVyYWxOYW1lOiBzdHJpbmcsXHJcbiAgICB0YWJsZVBsdXJhbExhYmVsOiBzdHJpbmcsXHJcbiAgICBjb21wb25lbnROYW1lOiBzdHJpbmcsXHJcbiAgICBlbnRpdGllczogQXJyYXk8VHJ1RW50aXR5QmFzZT4gPSBbXSxcclxuICAgIG9wZW5Bc0RldGFpVmlldzogYm9vbGVhbiA9IGZhbHNlKTogVHJ1V2luZG93RXZlbnRBcmdzID0+IHtcclxuXHJcbiAgICB2YXIgd2luZG93RXZlbnQgPSBuZXcgVHJ1V2luZG93RXZlbnRBcmdzKCk7XHJcbiAgICB3aW5kb3dFdmVudC50YWJsZU5hbWUgPSB0YWJsZU5hbWU7XHJcbiAgICB3aW5kb3dFdmVudC50YWJsZVBsdXJhbE5hbWUgPSB0YWJsZVBsdXJhbE5hbWU7XHJcbiAgICB3aW5kb3dFdmVudC50YWJsZVBsdXJhbExhYmVsID0gdGFibGVQbHVyYWxMYWJlbDtcclxuICAgIHdpbmRvd0V2ZW50LmNvbnRleHRGaWx0ZXJzID0gdGhpcy5jb250ZXh0RmlsdGVycy5maWx0ZXJzO1xyXG4gICAgd2luZG93RXZlbnQudmlld3MgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBhY3RpdmU6IHRydWUsXHJcbiAgICAgICAgZW50aXRpZXM6IGVudGl0aWVzLFxyXG4gICAgICAgIGVudGl0eUluZGV4OiAwLFxyXG4gICAgICAgIGlzRGlydHk6IGZhbHNlLFxyXG4gICAgICAgIGlzRWRpdGluZzogZmFsc2UsXHJcbiAgICAgICAgaXNJbnZhbGlkOiBmYWxzZSxcclxuICAgICAgICBvcGVuQXNEZXRhaVZpZXc6IG9wZW5Bc0RldGFpVmlldyxcclxuICAgICAgICBjb21wb25lbnROYW1lOiBjb21wb25lbnROYW1lXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgICByZXR1cm4gd2luZG93RXZlbnQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPcGVucyBhIHdpbmRvdyBmb3IgYSBkaXJlY3RpdmUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpcmVjdGl2ZU5hbWUgLSBuYW1lIG9mIHRoZSB2aWV3IGRpcmVjdGl2ZS5cclxuICAgKiBAcGFyYW0ge29iamVjdH0gZGF0YSAtIHZhbHVlcyB0byBwYXNzIHRvIHRoZSB2aWV3LlxyXG4gICAqIEBwYXJhbSB7b3B0aW9uYWwgYm9vbH0gc2hvd0lmRXhpc3RzIC0gaWYgdHJ1ZSBhbmQgYSB2aWV3IGFscmVhZHkgZXhpc3RzIGZvciB0aGUgXHJcbiAgICogZGlyZWN0aXZlLCB0aGVuIHNob3dzIGl0cyB3aW5kb3cgaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBvbmUuXHJcbiAgICovXHJcbiAgYWRkV2luZG93ID0gKFxyXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXHJcbiAgICB0YWJsZVBsdXJhbE5hbWU6IHN0cmluZyxcclxuICAgIHRhYmxlUGx1cmFsTGFiZWw6IHN0cmluZyxcclxuICAgIGNvbXBvbmVudE5hbWU6IHN0cmluZyxcclxuICAgIGVudGl0aWVzOiBBcnJheTxUcnVFbnRpdHlCYXNlPiA9IFtdLFxyXG4gICAgb3BlbkFzRGV0YWlWaWV3OiBib29sZWFuID0gZmFsc2UsXHJcbiAgICBzaG93TmF2aWdhdGlvbjogYm9vbGVhbiA9IHRydWUsXHJcbiAgICBzaG93SWZFeGlzdHM/OiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLndpbmRvd0V2ZW50SGFuZGxlci5vcGVuKHRoaXMuZ2V0V2luZG93RXZlbnQodGFibGVOYW1lLCB0YWJsZVBsdXJhbE5hbWUsIHRhYmxlUGx1cmFsTGFiZWwsIGNvbXBvbmVudE5hbWUsIGVudGl0aWVzLCBvcGVuQXNEZXRhaVZpZXcpKTtcclxuICB9XHJcblxyXG4gIGFkZFdpbmRvd0ZvclF1ZXJ5UmVzdWx0ID0gKFxyXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXHJcbiAgICB0YWJsZVBsdXJhbE5hbWU6IHN0cmluZyxcclxuICAgIHRhYmxlUGx1cmFsTGFiZWw6IHN0cmluZyxcclxuICAgIGNvbXBvbmVudE5hbWU6IHN0cmluZyxcclxuICAgIGVudGl0aWVzOiBBcnJheTxUcnVFbnRpdHlCYXNlPiA9IFtdLFxyXG4gICAgb3BlbkFzRGV0YWlWaWV3OiBib29sZWFuID0gZmFsc2UsXHJcbiAgICBzaG93TmF2aWdhdGlvbjogYm9vbGVhbiA9IHRydWUsXHJcbiAgICBzaG93SWZFeGlzdHM/OiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLndpbmRvd0V2ZW50SGFuZGxlci5vcGVuKHRoaXMuZ2V0V2luZG93RXZlbnQodGFibGVOYW1lLCB0YWJsZVBsdXJhbE5hbWUsIHRhYmxlUGx1cmFsTGFiZWwsIGNvbXBvbmVudE5hbWUsIGVudGl0aWVzLCBvcGVuQXNEZXRhaVZpZXcpKTtcclxuICB9XHJcblxyXG4gIGFkZEN1c3RvbVdpbmRvdyA9IChcclxuICAgIGNvbXBvbmVudE5hbWU6IHN0cmluZyxcclxuICAgIGRhdGE6IG9iamVjdCB8IG51bGwgPSBudWxsKSA9PiB7XHJcbiAgICB0aGlzLndpbmRvd0V2ZW50SGFuZGxlci5vcGVuKHRoaXMuZ2V0V2luZG93RXZlbnQoJycsICcnLCAnJywgY29tcG9uZW50TmFtZSwgdW5kZWZpbmVkLCBmYWxzZSkpO1xyXG4gIH1cclxuXHJcbiAgYWRkQ3VzdG9tVmlldyA9IChjb21wb25lbnROYW1lOiBzdHJpbmcsIGVudGl0aWVzOiBBcnJheTxUcnVFbnRpdHlCYXNlPikgPT4ge1xyXG4gICAgbGV0IHdpbmRvd0FkZFZpZXdFdmVudEFyZ3MgPSBuZXcgVHJ1RGVza3RvcFZpZXdDb25maWcoKTtcclxuICAgIHdpbmRvd0FkZFZpZXdFdmVudEFyZ3MuZW50aXRpZXMgPSBlbnRpdGllcztcclxuICAgIHdpbmRvd0FkZFZpZXdFdmVudEFyZ3MuZW50aXR5SW5kZXggPSAwO1xyXG4gICAgd2luZG93QWRkVmlld0V2ZW50QXJncy5jb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZTtcclxuICAgIHRoaXMud2luZG93RXZlbnRIYW5kbGVyLmFkZFZpZXcod2luZG93QWRkVmlld0V2ZW50QXJncyk7XHJcbiAgfVxyXG5cclxuICB3aW5kb3dUaXRsZXNCeUJhc2VUZXh0OiBhbnkgPSB7fTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBhIHVuaXF1ZSBzdHJpbmcgZm9yIHRoZSBiYXNlIG5hbWUgb2YgYSB3aW5kb3cuICBBdCBmaXJzdCwgcmV0dXJucyB0aGUgaW5wdXQuXHJcbiAgICogRm9yIHNlY29uZCBjYWxsIHdpdGggc2FtZSBiYXNlIG5hbWUsIHJldHVybnMgdGhlIG5hbWUgcGx1cyAnIC0gMicgYW5kIHNvIG9uLiAgV2hlblxyXG4gICAqIGFsbCBvZiB0aGUgdGl0bGVzIGZvciB0aGUgYmFzZSBuYW1lIGFyZSByZWxlYXNlZCwgdGhlbiB0aGUgbmV4dCB0aXRsZSB3aWxsIGhhdmUgbm9cclxuICAgKiBzdWZmaXguXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBiYXNlIG5hbWUgb2YgYSB3aW5kb3cuXHJcbiAgICogQHJldHVybnMge29iamVjdH0gLSB0ZXh0OiB0aGUgdW5pcXVlIHRleHQgYW5kIHJlbGVhc2UoKTogcmVsZWFzZXMgdGhlIG5hbWUgZm9yXHJcbiAgICogIGZ1dHVyZSB3aW5kb3dzLlxyXG4gICAqL1xyXG4gIGdldFVuaXF1ZVRpdGxlID0gKHRleHQ6IHN0cmluZyk6IFRydURlc2t0b3BUaXRsZSA9PiB7XHJcbiAgICB2YXIgYmFzZVRleHQgPSB0ZXh0O1xyXG4gICAgdmFyIHRpdGxlcyA9IHRoaXMud2luZG93VGl0bGVzQnlCYXNlVGV4dFtiYXNlVGV4dF07XHJcbiAgICBpZiAoIXRpdGxlcykge1xyXG4gICAgICB0aGlzLndpbmRvd1RpdGxlc0J5QmFzZVRleHRbYmFzZVRleHRdID0gdGl0bGVzID0ge1xyXG4gICAgICAgIGRpc3BlbnNlZENvdW50OiAxLFxyXG4gICAgICAgIGFjdGl2ZUNvdW50OiAxXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICArK3RpdGxlcy5hY3RpdmVDb3VudDtcclxuICAgICAgdGV4dCArPSAnIC0gJyArICgrK3RpdGxlcy5kaXNwZW5zZWRDb3VudCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0ZXh0OiB0ZXh0LFxyXG4gICAgICByZWxlYXNlOiAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRpdGxlcy5hY3RpdmVDb3VudCA9PT0gMSlcclxuICAgICAgICAgIGRlbGV0ZSB0aGlzLndpbmRvd1RpdGxlc0J5QmFzZVRleHRbYmFzZVRleHRdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgLS10aXRsZXMuYWN0aXZlQ291bnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iXX0=
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWRlc2t0b3AtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9kZXNrdG9wL3NlcnZpY2VzL3RydS1kZXNrdG9wLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUk3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7OztBQUcxRSxNQUFNLE9BQU8saUJBQWlCO0lBR2xCO0lBQ0E7SUFGVixZQUNVLGNBQWlDLEVBQ2pDLGtCQUF5QztRQUR6QyxtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFDakMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUF1QjtJQUFJLENBQUM7SUFFeEQsY0FBYyxHQUFHLENBQ2YsU0FBaUIsRUFDakIsZUFBdUIsRUFDdkIsZ0JBQXdCLEVBQ3hCLGFBQXFCLEVBQ3JCLFdBQWlDLEVBQUUsRUFDbkMsa0JBQTJCLEtBQUssRUFBc0IsRUFBRTtRQUV4RCxJQUFJLFdBQVcsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDM0MsV0FBVyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDbEMsV0FBVyxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7UUFDOUMsV0FBVyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQ2hELFdBQVcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7UUFDekQsV0FBVyxDQUFDLEtBQUssR0FBRztZQUNsQjtnQkFDRSxNQUFNLEVBQUUsSUFBSTtnQkFDWixRQUFRLEVBQUUsUUFBUTtnQkFDbEIsV0FBVyxFQUFFLENBQUM7Z0JBQ2QsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsU0FBUyxFQUFFLEtBQUs7Z0JBQ2hCLFNBQVMsRUFBRSxLQUFLO2dCQUNoQixlQUFlLEVBQUUsZUFBZTtnQkFDaEMsYUFBYSxFQUFFLGFBQWE7YUFDN0I7U0FDRixDQUFDO1FBQ0YsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQyxDQUFBO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsU0FBUyxHQUFHLENBQ1YsU0FBaUIsRUFDakIsZUFBdUIsRUFDdkIsZ0JBQXdCLEVBQ3hCLGFBQXFCLEVBQ3JCLFdBQWlDLEVBQUUsRUFDbkMsa0JBQTJCLEtBQUssRUFDaEMsaUJBQTBCLElBQUksRUFDOUIsWUFBc0IsRUFBRSxFQUFFO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUM1SSxDQUFDLENBQUE7SUFFRCx1QkFBdUIsR0FBRyxDQUN4QixTQUFpQixFQUNqQixlQUF1QixFQUN2QixnQkFBd0IsRUFDeEIsYUFBcUIsRUFDckIsV0FBaUMsRUFBRSxFQUNuQyxrQkFBMkIsS0FBSyxFQUNoQyxpQkFBMEIsSUFBSSxFQUM5QixZQUFzQixFQUFFLEVBQUU7UUFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQzVJLENBQUMsQ0FBQTtJQUVELGVBQWUsR0FBRyxDQUNoQixhQUFxQixFQUNyQixPQUFzQixJQUFJLEVBQUUsRUFBRTtRQUM5QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLENBQUMsQ0FBQTtJQUVELGFBQWEsR0FBRyxDQUFDLGFBQXFCLEVBQUUsUUFBOEIsRUFBRSxFQUFFO1FBQ3hFLElBQUksc0JBQXNCLEdBQUcsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1FBQ3hELHNCQUFzQixDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDM0Msc0JBQXNCLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUN2QyxzQkFBc0IsQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ3JELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUMxRCxDQUFDLENBQUE7SUFFRCxzQkFBc0IsR0FBUSxFQUFFLENBQUM7SUFFakM7Ozs7Ozs7O09BUUc7SUFDSCxjQUFjLEdBQUcsQ0FBQyxJQUFZLEVBQW1CLEVBQUU7UUFDakQsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxHQUFHO2dCQUMvQyxjQUFjLEVBQUUsQ0FBQztnQkFDakIsV0FBVyxFQUFFLENBQUM7YUFDZixDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFDckIsSUFBSSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFDRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUk7WUFDVixPQUFPLEVBQUUsR0FBRyxFQUFFO2dCQUNaLElBQUksTUFBTSxDQUFDLFdBQVcsS0FBSyxDQUFDO29CQUMxQixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztxQkFDMUMsQ0FBQztvQkFDSixFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUM7Z0JBQ3ZCLENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUMsQ0FBQTt1R0FoSFUsaUJBQWlCOzJHQUFqQixpQkFBaUI7OzJGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgVHJ1V2luZG93RXZlbnRIYW5kbGVyIH0gZnJvbSAnLi90cnUtd2luZG93LWV2ZW50LWhhbmRsZXInO1xyXG5pbXBvcnQgeyBUcnVXaW5kb3dFdmVudEFyZ3MgfSBmcm9tICcuL3RydS13aW5kb3ctZXZlbnQtYXJncyc7XHJcbmltcG9ydCB7IFRydUNvbnRleHRGaWx0ZXJzIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3RydS1jb250ZXh0LWZpbHRlcnNcIjtcclxuaW1wb3J0IHsgVHJ1RW50aXR5QmFzZSB9IGZyb20gXCIuLi8uLi8uLi9iYXNlLWNsYXNzZXMvdHJ1LWVudGl0eS1iYXNlXCI7XHJcbmltcG9ydCB7IFRydURlc2t0b3BUaXRsZSB9IGZyb20gXCIuLi9jbGFzc2VzL3RydS1kZXNrdG9wLXRpdGxlXCI7XHJcbmltcG9ydCB7IFRydURlc2t0b3BWaWV3Q29uZmlnIH0gZnJvbSBcIi4uL2NsYXNzZXMvdHJ1LWRlc2t0b3Atdmlldy1jb25maWdcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFRydURlc2t0b3BNYW5hZ2VyIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNvbnRleHRGaWx0ZXJzOiBUcnVDb250ZXh0RmlsdGVycyxcclxuICAgIHByaXZhdGUgd2luZG93RXZlbnRIYW5kbGVyOiBUcnVXaW5kb3dFdmVudEhhbmRsZXIpIHsgfVxyXG5cclxuICBnZXRXaW5kb3dFdmVudCA9IChcclxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxyXG4gICAgdGFibGVQbHVyYWxOYW1lOiBzdHJpbmcsXHJcbiAgICB0YWJsZVBsdXJhbExhYmVsOiBzdHJpbmcsXHJcbiAgICBjb21wb25lbnROYW1lOiBzdHJpbmcsXHJcbiAgICBlbnRpdGllczogQXJyYXk8VHJ1RW50aXR5QmFzZT4gPSBbXSxcclxuICAgIG9wZW5Bc0RldGFpVmlldzogYm9vbGVhbiA9IGZhbHNlKTogVHJ1V2luZG93RXZlbnRBcmdzID0+IHtcclxuXHJcbiAgICB2YXIgd2luZG93RXZlbnQgPSBuZXcgVHJ1V2luZG93RXZlbnRBcmdzKCk7XHJcbiAgICB3aW5kb3dFdmVudC50YWJsZU5hbWUgPSB0YWJsZU5hbWU7XHJcbiAgICB3aW5kb3dFdmVudC50YWJsZVBsdXJhbE5hbWUgPSB0YWJsZVBsdXJhbE5hbWU7XHJcbiAgICB3aW5kb3dFdmVudC50YWJsZVBsdXJhbExhYmVsID0gdGFibGVQbHVyYWxMYWJlbDtcclxuICAgIHdpbmRvd0V2ZW50LmNvbnRleHRGaWx0ZXJzID0gdGhpcy5jb250ZXh0RmlsdGVycy5maWx0ZXJzO1xyXG4gICAgd2luZG93RXZlbnQudmlld3MgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBhY3RpdmU6IHRydWUsXHJcbiAgICAgICAgZW50aXRpZXM6IGVudGl0aWVzLFxyXG4gICAgICAgIGVudGl0eUluZGV4OiAwLFxyXG4gICAgICAgIGlzRGlydHk6IGZhbHNlLFxyXG4gICAgICAgIGlzRWRpdGluZzogZmFsc2UsXHJcbiAgICAgICAgaXNJbnZhbGlkOiBmYWxzZSxcclxuICAgICAgICBvcGVuQXNEZXRhaVZpZXc6IG9wZW5Bc0RldGFpVmlldyxcclxuICAgICAgICBjb21wb25lbnROYW1lOiBjb21wb25lbnROYW1lXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgICByZXR1cm4gd2luZG93RXZlbnQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPcGVucyBhIHdpbmRvdyBmb3IgYSBkaXJlY3RpdmUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpcmVjdGl2ZU5hbWUgLSBuYW1lIG9mIHRoZSB2aWV3IGRpcmVjdGl2ZS5cclxuICAgKiBAcGFyYW0ge29iamVjdH0gZGF0YSAtIHZhbHVlcyB0byBwYXNzIHRvIHRoZSB2aWV3LlxyXG4gICAqIEBwYXJhbSB7b3B0aW9uYWwgYm9vbH0gc2hvd0lmRXhpc3RzIC0gaWYgdHJ1ZSBhbmQgYSB2aWV3IGFscmVhZHkgZXhpc3RzIGZvciB0aGUgXHJcbiAgICogZGlyZWN0aXZlLCB0aGVuIHNob3dzIGl0cyB3aW5kb3cgaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBvbmUuXHJcbiAgICovXHJcbiAgYWRkV2luZG93ID0gKFxyXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXHJcbiAgICB0YWJsZVBsdXJhbE5hbWU6IHN0cmluZyxcclxuICAgIHRhYmxlUGx1cmFsTGFiZWw6IHN0cmluZyxcclxuICAgIGNvbXBvbmVudE5hbWU6IHN0cmluZyxcclxuICAgIGVudGl0aWVzOiBBcnJheTxUcnVFbnRpdHlCYXNlPiA9IFtdLFxyXG4gICAgb3BlbkFzRGV0YWlWaWV3OiBib29sZWFuID0gZmFsc2UsXHJcbiAgICBzaG93TmF2aWdhdGlvbjogYm9vbGVhbiA9IHRydWUsXHJcbiAgICBzaG93SWZFeGlzdHM/OiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLndpbmRvd0V2ZW50SGFuZGxlci5vcGVuKHRoaXMuZ2V0V2luZG93RXZlbnQodGFibGVOYW1lLCB0YWJsZVBsdXJhbE5hbWUsIHRhYmxlUGx1cmFsTGFiZWwsIGNvbXBvbmVudE5hbWUsIGVudGl0aWVzLCBvcGVuQXNEZXRhaVZpZXcpKTtcclxuICB9XHJcblxyXG4gIGFkZFdpbmRvd0ZvclF1ZXJ5UmVzdWx0ID0gKFxyXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXHJcbiAgICB0YWJsZVBsdXJhbE5hbWU6IHN0cmluZyxcclxuICAgIHRhYmxlUGx1cmFsTGFiZWw6IHN0cmluZyxcclxuICAgIGNvbXBvbmVudE5hbWU6IHN0cmluZyxcclxuICAgIGVudGl0aWVzOiBBcnJheTxUcnVFbnRpdHlCYXNlPiA9IFtdLFxyXG4gICAgb3BlbkFzRGV0YWlWaWV3OiBib29sZWFuID0gZmFsc2UsXHJcbiAgICBzaG93TmF2aWdhdGlvbjogYm9vbGVhbiA9IHRydWUsXHJcbiAgICBzaG93SWZFeGlzdHM/OiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLndpbmRvd0V2ZW50SGFuZGxlci5vcGVuKHRoaXMuZ2V0V2luZG93RXZlbnQodGFibGVOYW1lLCB0YWJsZVBsdXJhbE5hbWUsIHRhYmxlUGx1cmFsTGFiZWwsIGNvbXBvbmVudE5hbWUsIGVudGl0aWVzLCBvcGVuQXNEZXRhaVZpZXcpKTtcclxuICB9XHJcblxyXG4gIGFkZEN1c3RvbVdpbmRvdyA9IChcclxuICAgIGNvbXBvbmVudE5hbWU6IHN0cmluZyxcclxuICAgIGRhdGE6IG9iamVjdCB8IG51bGwgPSBudWxsKSA9PiB7XHJcbiAgICB0aGlzLndpbmRvd0V2ZW50SGFuZGxlci5vcGVuKHRoaXMuZ2V0V2luZG93RXZlbnQoJycsICcnLCAnJywgY29tcG9uZW50TmFtZSwgdW5kZWZpbmVkLCBmYWxzZSkpO1xyXG4gIH1cclxuXHJcbiAgYWRkQ3VzdG9tVmlldyA9IChjb21wb25lbnROYW1lOiBzdHJpbmcsIGVudGl0aWVzOiBBcnJheTxUcnVFbnRpdHlCYXNlPikgPT4ge1xyXG4gICAgbGV0IHdpbmRvd0FkZFZpZXdFdmVudEFyZ3MgPSBuZXcgVHJ1RGVza3RvcFZpZXdDb25maWcoKTtcclxuICAgIHdpbmRvd0FkZFZpZXdFdmVudEFyZ3MuZW50aXRpZXMgPSBlbnRpdGllcztcclxuICAgIHdpbmRvd0FkZFZpZXdFdmVudEFyZ3MuZW50aXR5SW5kZXggPSAwO1xyXG4gICAgd2luZG93QWRkVmlld0V2ZW50QXJncy5jb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZTtcclxuICAgIHRoaXMud2luZG93RXZlbnRIYW5kbGVyLmFkZFZpZXcod2luZG93QWRkVmlld0V2ZW50QXJncyk7XHJcbiAgfVxyXG5cclxuICB3aW5kb3dUaXRsZXNCeUJhc2VUZXh0OiBhbnkgPSB7fTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBhIHVuaXF1ZSBzdHJpbmcgZm9yIHRoZSBiYXNlIG5hbWUgb2YgYSB3aW5kb3cuICBBdCBmaXJzdCwgcmV0dXJucyB0aGUgaW5wdXQuXHJcbiAgICogRm9yIHNlY29uZCBjYWxsIHdpdGggc2FtZSBiYXNlIG5hbWUsIHJldHVybnMgdGhlIG5hbWUgcGx1cyAnIC0gMicgYW5kIHNvIG9uLiAgV2hlblxyXG4gICAqIGFsbCBvZiB0aGUgdGl0bGVzIGZvciB0aGUgYmFzZSBuYW1lIGFyZSByZWxlYXNlZCwgdGhlbiB0aGUgbmV4dCB0aXRsZSB3aWxsIGhhdmUgbm9cclxuICAgKiBzdWZmaXguXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBiYXNlIG5hbWUgb2YgYSB3aW5kb3cuXHJcbiAgICogQHJldHVybnMge29iamVjdH0gLSB0ZXh0OiB0aGUgdW5pcXVlIHRleHQgYW5kIHJlbGVhc2UoKTogcmVsZWFzZXMgdGhlIG5hbWUgZm9yXHJcbiAgICogIGZ1dHVyZSB3aW5kb3dzLlxyXG4gICAqL1xyXG4gIGdldFVuaXF1ZVRpdGxlID0gKHRleHQ6IHN0cmluZyk6IFRydURlc2t0b3BUaXRsZSA9PiB7XHJcbiAgICB2YXIgYmFzZVRleHQgPSB0ZXh0O1xyXG4gICAgdmFyIHRpdGxlcyA9IHRoaXMud2luZG93VGl0bGVzQnlCYXNlVGV4dFtiYXNlVGV4dF07XHJcbiAgICBpZiAoIXRpdGxlcykge1xyXG4gICAgICB0aGlzLndpbmRvd1RpdGxlc0J5QmFzZVRleHRbYmFzZVRleHRdID0gdGl0bGVzID0ge1xyXG4gICAgICAgIGRpc3BlbnNlZENvdW50OiAxLFxyXG4gICAgICAgIGFjdGl2ZUNvdW50OiAxXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICArK3RpdGxlcy5hY3RpdmVDb3VudDtcclxuICAgICAgdGV4dCArPSAnIC0gJyArICgrK3RpdGxlcy5kaXNwZW5zZWRDb3VudCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0ZXh0OiB0ZXh0LFxyXG4gICAgICByZWxlYXNlOiAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRpdGxlcy5hY3RpdmVDb3VudCA9PT0gMSlcclxuICAgICAgICAgIGRlbGV0ZSB0aGlzLndpbmRvd1RpdGxlc0J5QmFzZVRleHRbYmFzZVRleHRdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgLS10aXRsZXMuYWN0aXZlQ291bnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -4,6 +4,7 @@ import { TruEntityAccessor } from '../../../services/tru-entity-accessor';
4
4
  import { TruWindowEventHandler } from '../services/tru-window-event-handler';
5
5
  import { TruActionInvoke } from '../../../services/tru-action-invoke';
6
6
  import { TruReportManager } from '../../../services/tru-report-manager';
7
+ import { TruDesktopManager } from '../services/tru-desktop-manager';
7
8
  import * as i0 from "@angular/core";
8
9
  import * as i1 from "../../../services/tru-data-context";
9
10
  import * as i2 from "../../../services/tru-ui-notification";
@@ -447,11 +448,11 @@ export class TruDesktopWindow {
447
448
  this.subs.forEach(s => s.unsubscribe());
448
449
  }
449
450
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruDesktopWindow, deps: [{ token: i1.TruDataContext }, { token: i2.TruUiNotification }, { token: i3.TruTextManager }, { token: i4.TruWindowEventHandler }, { token: i0.ElementRef }, { token: i5.TruUtil }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
450
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: TruDesktopWindow, selector: "tru-desktop-window", inputs: { window: "window", viewportCtrl: "viewportCtrl", desktopCtrl: "desktopCtrl" }, providers: [TruDataContext, TruEntityAccessor, TruWindowEventHandler, TruReportManager, TruActionInvoke], ngImport: i0, template: "<div class=\"desktop-window-container\"\r\n [ngClass]=\"{'desktop-window-active': window.active, 'desktop-window-maximized': window.maximized}\"\r\n [ngStyle]=\"{'z-index': window.zIndex, 'top': window.top, 'left': window.left, 'right': window.right, 'bottom': window.bottom, 'height': window.height, 'width': window.width, 'min-height': window.minHeight, 'minWidth': window.minWidth}\"\r\n [style.offsetLeft.px]=\"x\"\r\n [style.offsetTop.px]=\"y\"\r\n (mousedown)=\"activate()\"\r\n [hidden]=\"window.minimized\">\r\n <div class=\"desktop-window-header\" [ngClass]=\"{'desktop-window-maximized': window.maximized, 'desktop-window-opacity': !window.active}\">\r\n <div class=\"toolbar-window-navigation\">\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-previous-icon'\" [tooltip]=\"'Go Back One View - [Alt + Left]'\" (click)=\"previousView()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-next-icon'\" [tooltip]=\"'Go Forward One View - [Alt + Right]'\" (click)=\"nextView()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-save-icon'\" class=\"desktop-window-save-icon\" [ngClass]=\"{'desktop-window-save-icon-has-changes': hasChanges()}\" [tooltip]=\"'Save - [Ctrl + S]'\" (click)=\"save()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-revert-icon'\" class=\"desktop-window-revert-icon\" [ngClass]=\"{'desktop-window-revert-icon-has-changes': hasChanges()}\" [tooltip]=\"'Revert - [Ctrl + Shift + R]'\" (click)=\"revert()\"></tru-toolbar-button>\r\n <tru-toolbar-separator></tru-toolbar-separator>\r\n </tru-toolbar>\r\n </div>\r\n <div class=\"desktop-window-title\" (dblclick)=\"maximize()\" (mousedown)=\"windowTitleMouseDown($event)\">\r\n <div class=\"desktop-click-through\">\r\n <div class=\"desktop-text\">{{window.title}}</div>\r\n </div>\r\n </div>\r\n <div class=\"desktop-window-action\">\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-minimize-icon'\" [tooltip]=\"'Minimize - [Alt + N]'\" (click)=\"minimize()\"></tru-toolbar-button>\r\n <tru-toolbar-button *ngIf=\"!window.maximized\" [icon]=\"'tru-toolbar-maximize-icon'\" [tooltip]=\"'Maximize Window - [Alt + M]'\" (click)=\"maximize()\" class=\"maximize\"></tru-toolbar-button>\r\n <tru-toolbar-button *ngIf=\"window.maximized\" [icon]=\"'tru-toolbar-restore-icon'\" [tooltip]=\"'Restore Window - [Alt + M]'\" (click)=\"maximize()\" class=\"maximize\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-close-icon'\" [tooltip]=\"'Close Window - [Alt + SHIFT + X]'\" (click)=\"close()\"></tru-toolbar-button>\r\n </tru-toolbar>\r\n </div>\r\n </div>\r\n <fieldset ng-disabled=\"!window.active\" class=\"desktop-window-fieldset\" [ngClass]=\"{'desktop-window-opacity': !window.active}\">\r\n <div class=\"desktop-window-content\">\r\n <div *ngFor=\"let view of window.views\">\r\n <tru-desktop-view [view]=\"view\" [active]=\"view.active\" [hidden]=\"!view.active\"><ng-template></ng-template></tru-desktop-view>\r\n </div>\r\n </div>\r\n </fieldset>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-nw\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'nw'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-ne\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'ne'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-sw\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'sw'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-se\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'se'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-n\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'n'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-s\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'s'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-w\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'w'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-e\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'e'\"></span>\r\n</div>\r\n", styles: ["body{-webkit-user-select:none;-moz-user-select:-moz-none;-ms-user-select:none;user-select:none}input,textarea{-moz-user-select:text}.desktop-text{-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);font-size:14px;line-height:1;color:#333}.desktop-wrapper{position:absolute!important;inset:0;background:#fff;overflow:hidden}.desktop-relative{position:relative}.desktop-display-none{display:none}.desktop-click-through{pointer-events:none}.desktop-menubar-container{position:absolute!important;top:0;left:0;right:0;height:26px;background:#f8f8f8;border-bottom:1px solid #e7e7e7;padding-left:5px}\n", ".desktop-window-container{position:absolute!important;background-color:#fff;background-clip:padding-box;border-radius:0;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px #0003;border:1px solid #e7e7e7}.desktop-window-header{position:absolute!important;top:0;left:0;right:0;height:27px;background:#fff;border-top-left-radius:0;border-top-right-radius:0;border-bottom:1px solid #e7e7e7}.desktop-window-content{position:absolute!important;inset:27px 0 0;background:#fff;overflow:hidden}.desktop-window-busy-overlay{position:absolute!important;inset:27px 0 0;background:#fff;overflow:hidden;z-index:1000;background-repeat:no-repeat;background-position:center center}.desktop-window-fieldset{padding:0;margin:0;border:0}.desktop-window-statusbar{position:absolute!important;left:0;right:0;bottom:0;height:23px;background:#fff;border-bottom-left-radius:0;border-bottom-right-radius:0;border-top:1px solid #e7e7e7}.desktop-window-statusbar-container{position:absolute;top:1px;left:2px;right:0}.desktop-window-navigation{position:absolute!important;top:0;left:0;bottom:0;width:105px;background:transparent}.desktop-window-navigation-button-group{position:absolute!important;left:0;padding:0;margin:0}.desktop-window-navigation-button-group button{margin-left:0!important}.desktop-window-navigation-button-group-split{position:absolute!important;top:2px;right:6px}.desktop-window-title{position:absolute!important;inset:0 80px 0 110px;height:27px;background:transparent;cursor:inherit;outline:0;margin-top:2px}.desktop-window-title-hidden-nav{left:5px!important}.desktop-window-title-hidden-nav-with-buttons{left:55px!important}.desktop-window-title>div{position:absolute!important;top:5px;left:3px;cursor:default}.desktop-window-title>div>div{font-size:14px;font-weight:700}.desktop-window-action{position:absolute!important;top:0;right:0;bottom:0;width:80px;background:transparent}.desktop-window-action-button-group{position:absolute!important;top:2px;right:6px}.desktop-window-action .desktop-window-navigation-button-group{left:unset!important;right:0!important}.desktop-window-opacity{opacity:.5}.desktop-window-close-button:hover{background-color:maroon;color:#fff}.desktop-window-active{border:1px solid #6b6b6b!important;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.4);box-shadow:0 5px 10px #0006}.desktop-window-maximized{border-radius:0;-webkit-box-shadow:0 0 0 rgba(0,0,0,0);box-shadow:0 0 #0000;border-top-color:#f8f8f8!important;border-bottom-color:#f8f8f8!important}.desktop-window-is-dirty{display:block;float:left;height:15px;width:15px;font-size:15px;color:orange;margin-left:3px}.desktop-window-is-invalid{display:block;float:left;height:15px;width:15px;font-size:15px;color:red;margin-left:3px}.desktop-window-resizable-nw{position:absolute!important;overflow:hidden;width:10px;height:10px;left:-5px;top:-5px;z-index:103;cursor:nw-resize;opacity:0}.desktop-window-resizable-ne{position:absolute!important;overflow:hidden;width:10px;height:10px;right:-5px;top:-5px;z-index:103;cursor:ne-resize;opacity:0}.desktop-window-resizable-sw{position:absolute!important;overflow:hidden;width:10px;height:10px;left:-5px;bottom:-5px;z-index:103;cursor:sw-resize;opacity:0}.desktop-window-resizable-se{position:absolute!important;overflow:hidden;width:10px;height:10px;right:-5px;bottom:-5px;z-index:103;cursor:se-resize;opacity:0}.desktop-window-resizable-n{position:absolute!important;top:0;left:10px;right:10px;overflow:hidden;height:5px;z-index:102;cursor:s-resize;opacity:0;margin-top:-5px}.desktop-window-resizable-s{position:absolute!important;left:10px;right:10px;bottom:0;overflow:hidden;height:5px;z-index:102;cursor:s-resize;opacity:0;margin-bottom:-5px}.desktop-window-resizable-w{position:absolute!important;top:10px;left:0;bottom:10px;overflow:hidden;width:5px;z-index:102;cursor:w-resize;opacity:0;margin-left:-5px}.desktop-window-resizable-e{position:absolute!important;top:10px;right:0;bottom:10px;overflow:hidden;width:5px;z-index:102;cursor:e-resize;opacity:0;margin-right:-5px}div.desktop-window-resizable-handle{display:none!important;visibility:hidden!important}.desktop-window-save-icon,.desktop-window-revert-icon{opacity:.5}.desktop-window-save-icon-has-changes,.desktop-window-revert-icon-has-changes{opacity:1}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.TruDesktopResizable, selector: "[tru-desktop-resizable]", inputs: ["window", "maximized", "direction"] }, { kind: "component", type: i8.TruDesktopView, selector: "tru-desktop-view", inputs: ["view", "active"] }, { kind: "component", type: i9.TruToolbar, selector: "tru-toolbar", inputs: ["config"] }, { kind: "component", type: i10.TruToolbarButton, selector: "tru-toolbar-button", inputs: ["config", "icon", "text", "disabled", "tooltip", "type"], outputs: ["onClick", "onKeydown"] }, { kind: "component", type: i11.TruToolbarSeparator, selector: "tru-toolbar-separator" }] });
451
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: TruDesktopWindow, selector: "tru-desktop-window", inputs: { window: "window", viewportCtrl: "viewportCtrl", desktopCtrl: "desktopCtrl" }, providers: [TruDataContext, TruEntityAccessor, TruWindowEventHandler, TruReportManager, TruActionInvoke, TruDesktopManager], ngImport: i0, template: "<div class=\"desktop-window-container\"\r\n [ngClass]=\"{'desktop-window-active': window.active, 'desktop-window-maximized': window.maximized}\"\r\n [ngStyle]=\"{'z-index': window.zIndex, 'top': window.top, 'left': window.left, 'right': window.right, 'bottom': window.bottom, 'height': window.height, 'width': window.width, 'min-height': window.minHeight, 'minWidth': window.minWidth}\"\r\n [style.offsetLeft.px]=\"x\"\r\n [style.offsetTop.px]=\"y\"\r\n (mousedown)=\"activate()\"\r\n [hidden]=\"window.minimized\">\r\n <div class=\"desktop-window-header\" [ngClass]=\"{'desktop-window-maximized': window.maximized, 'desktop-window-opacity': !window.active}\">\r\n <div class=\"toolbar-window-navigation\">\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-previous-icon'\" [tooltip]=\"'Go Back One View - [Alt + Left]'\" (click)=\"previousView()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-next-icon'\" [tooltip]=\"'Go Forward One View - [Alt + Right]'\" (click)=\"nextView()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-save-icon'\" class=\"desktop-window-save-icon\" [ngClass]=\"{'desktop-window-save-icon-has-changes': hasChanges()}\" [tooltip]=\"'Save - [Ctrl + S]'\" (click)=\"save()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-revert-icon'\" class=\"desktop-window-revert-icon\" [ngClass]=\"{'desktop-window-revert-icon-has-changes': hasChanges()}\" [tooltip]=\"'Revert - [Ctrl + Shift + R]'\" (click)=\"revert()\"></tru-toolbar-button>\r\n <tru-toolbar-separator></tru-toolbar-separator>\r\n </tru-toolbar>\r\n </div>\r\n <div class=\"desktop-window-title\" (dblclick)=\"maximize()\" (mousedown)=\"windowTitleMouseDown($event)\">\r\n <div class=\"desktop-click-through\">\r\n <div class=\"desktop-text\">{{window.title}}</div>\r\n </div>\r\n </div>\r\n <div class=\"desktop-window-action\">\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-minimize-icon'\" [tooltip]=\"'Minimize - [Alt + N]'\" (click)=\"minimize()\"></tru-toolbar-button>\r\n <tru-toolbar-button *ngIf=\"!window.maximized\" [icon]=\"'tru-toolbar-maximize-icon'\" [tooltip]=\"'Maximize Window - [Alt + M]'\" (click)=\"maximize()\" class=\"maximize\"></tru-toolbar-button>\r\n <tru-toolbar-button *ngIf=\"window.maximized\" [icon]=\"'tru-toolbar-restore-icon'\" [tooltip]=\"'Restore Window - [Alt + M]'\" (click)=\"maximize()\" class=\"maximize\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-close-icon'\" [tooltip]=\"'Close Window - [Alt + SHIFT + X]'\" (click)=\"close()\"></tru-toolbar-button>\r\n </tru-toolbar>\r\n </div>\r\n </div>\r\n <fieldset ng-disabled=\"!window.active\" class=\"desktop-window-fieldset\" [ngClass]=\"{'desktop-window-opacity': !window.active}\">\r\n <div class=\"desktop-window-content\">\r\n <div *ngFor=\"let view of window.views\">\r\n <tru-desktop-view [view]=\"view\" [active]=\"view.active\" [hidden]=\"!view.active\"><ng-template></ng-template></tru-desktop-view>\r\n </div>\r\n </div>\r\n </fieldset>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-nw\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'nw'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-ne\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'ne'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-sw\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'sw'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-se\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'se'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-n\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'n'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-s\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'s'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-w\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'w'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-e\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'e'\"></span>\r\n</div>\r\n", styles: ["body{-webkit-user-select:none;-moz-user-select:-moz-none;-ms-user-select:none;user-select:none}input,textarea{-moz-user-select:text}.desktop-text{-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);font-size:14px;line-height:1;color:#333}.desktop-wrapper{position:absolute!important;inset:0;background:#fff;overflow:hidden}.desktop-relative{position:relative}.desktop-display-none{display:none}.desktop-click-through{pointer-events:none}.desktop-menubar-container{position:absolute!important;top:0;left:0;right:0;height:26px;background:#f8f8f8;border-bottom:1px solid #e7e7e7;padding-left:5px}\n", ".desktop-window-container{position:absolute!important;background-color:#fff;background-clip:padding-box;border-radius:0;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px #0003;border:1px solid #e7e7e7}.desktop-window-header{position:absolute!important;top:0;left:0;right:0;height:27px;background:#fff;border-top-left-radius:0;border-top-right-radius:0;border-bottom:1px solid #e7e7e7}.desktop-window-content{position:absolute!important;inset:27px 0 0;background:#fff;overflow:hidden}.desktop-window-busy-overlay{position:absolute!important;inset:27px 0 0;background:#fff;overflow:hidden;z-index:1000;background-repeat:no-repeat;background-position:center center}.desktop-window-fieldset{padding:0;margin:0;border:0}.desktop-window-statusbar{position:absolute!important;left:0;right:0;bottom:0;height:23px;background:#fff;border-bottom-left-radius:0;border-bottom-right-radius:0;border-top:1px solid #e7e7e7}.desktop-window-statusbar-container{position:absolute;top:1px;left:2px;right:0}.desktop-window-navigation{position:absolute!important;top:0;left:0;bottom:0;width:105px;background:transparent}.desktop-window-navigation-button-group{position:absolute!important;left:0;padding:0;margin:0}.desktop-window-navigation-button-group button{margin-left:0!important}.desktop-window-navigation-button-group-split{position:absolute!important;top:2px;right:6px}.desktop-window-title{position:absolute!important;inset:0 80px 0 110px;height:27px;background:transparent;cursor:inherit;outline:0;margin-top:2px}.desktop-window-title-hidden-nav{left:5px!important}.desktop-window-title-hidden-nav-with-buttons{left:55px!important}.desktop-window-title>div{position:absolute!important;top:5px;left:3px;cursor:default}.desktop-window-title>div>div{font-size:14px;font-weight:700}.desktop-window-action{position:absolute!important;top:0;right:0;bottom:0;width:80px;background:transparent}.desktop-window-action-button-group{position:absolute!important;top:2px;right:6px}.desktop-window-action .desktop-window-navigation-button-group{left:unset!important;right:0!important}.desktop-window-opacity{opacity:.5}.desktop-window-close-button:hover{background-color:maroon;color:#fff}.desktop-window-active{border:1px solid #6b6b6b!important;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.4);box-shadow:0 5px 10px #0006}.desktop-window-maximized{border-radius:0;-webkit-box-shadow:0 0 0 rgba(0,0,0,0);box-shadow:0 0 #0000;border-top-color:#f8f8f8!important;border-bottom-color:#f8f8f8!important}.desktop-window-is-dirty{display:block;float:left;height:15px;width:15px;font-size:15px;color:orange;margin-left:3px}.desktop-window-is-invalid{display:block;float:left;height:15px;width:15px;font-size:15px;color:red;margin-left:3px}.desktop-window-resizable-nw{position:absolute!important;overflow:hidden;width:10px;height:10px;left:-5px;top:-5px;z-index:103;cursor:nw-resize;opacity:0}.desktop-window-resizable-ne{position:absolute!important;overflow:hidden;width:10px;height:10px;right:-5px;top:-5px;z-index:103;cursor:ne-resize;opacity:0}.desktop-window-resizable-sw{position:absolute!important;overflow:hidden;width:10px;height:10px;left:-5px;bottom:-5px;z-index:103;cursor:sw-resize;opacity:0}.desktop-window-resizable-se{position:absolute!important;overflow:hidden;width:10px;height:10px;right:-5px;bottom:-5px;z-index:103;cursor:se-resize;opacity:0}.desktop-window-resizable-n{position:absolute!important;top:0;left:10px;right:10px;overflow:hidden;height:5px;z-index:102;cursor:s-resize;opacity:0;margin-top:-5px}.desktop-window-resizable-s{position:absolute!important;left:10px;right:10px;bottom:0;overflow:hidden;height:5px;z-index:102;cursor:s-resize;opacity:0;margin-bottom:-5px}.desktop-window-resizable-w{position:absolute!important;top:10px;left:0;bottom:10px;overflow:hidden;width:5px;z-index:102;cursor:w-resize;opacity:0;margin-left:-5px}.desktop-window-resizable-e{position:absolute!important;top:10px;right:0;bottom:10px;overflow:hidden;width:5px;z-index:102;cursor:e-resize;opacity:0;margin-right:-5px}div.desktop-window-resizable-handle{display:none!important;visibility:hidden!important}.desktop-window-save-icon,.desktop-window-revert-icon{opacity:.5}.desktop-window-save-icon-has-changes,.desktop-window-revert-icon-has-changes{opacity:1}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.TruDesktopResizable, selector: "[tru-desktop-resizable]", inputs: ["window", "maximized", "direction"] }, { kind: "component", type: i8.TruDesktopView, selector: "tru-desktop-view", inputs: ["view", "active"] }, { kind: "component", type: i9.TruToolbar, selector: "tru-toolbar", inputs: ["config"] }, { kind: "component", type: i10.TruToolbarButton, selector: "tru-toolbar-button", inputs: ["config", "icon", "text", "disabled", "tooltip", "type"], outputs: ["onClick", "onKeydown"] }, { kind: "component", type: i11.TruToolbarSeparator, selector: "tru-toolbar-separator" }] });
451
452
  }
452
453
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruDesktopWindow, decorators: [{
453
454
  type: Component,
454
- args: [{ selector: 'tru-desktop-window', providers: [TruDataContext, TruEntityAccessor, TruWindowEventHandler, TruReportManager, TruActionInvoke], template: "<div class=\"desktop-window-container\"\r\n [ngClass]=\"{'desktop-window-active': window.active, 'desktop-window-maximized': window.maximized}\"\r\n [ngStyle]=\"{'z-index': window.zIndex, 'top': window.top, 'left': window.left, 'right': window.right, 'bottom': window.bottom, 'height': window.height, 'width': window.width, 'min-height': window.minHeight, 'minWidth': window.minWidth}\"\r\n [style.offsetLeft.px]=\"x\"\r\n [style.offsetTop.px]=\"y\"\r\n (mousedown)=\"activate()\"\r\n [hidden]=\"window.minimized\">\r\n <div class=\"desktop-window-header\" [ngClass]=\"{'desktop-window-maximized': window.maximized, 'desktop-window-opacity': !window.active}\">\r\n <div class=\"toolbar-window-navigation\">\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-previous-icon'\" [tooltip]=\"'Go Back One View - [Alt + Left]'\" (click)=\"previousView()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-next-icon'\" [tooltip]=\"'Go Forward One View - [Alt + Right]'\" (click)=\"nextView()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-save-icon'\" class=\"desktop-window-save-icon\" [ngClass]=\"{'desktop-window-save-icon-has-changes': hasChanges()}\" [tooltip]=\"'Save - [Ctrl + S]'\" (click)=\"save()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-revert-icon'\" class=\"desktop-window-revert-icon\" [ngClass]=\"{'desktop-window-revert-icon-has-changes': hasChanges()}\" [tooltip]=\"'Revert - [Ctrl + Shift + R]'\" (click)=\"revert()\"></tru-toolbar-button>\r\n <tru-toolbar-separator></tru-toolbar-separator>\r\n </tru-toolbar>\r\n </div>\r\n <div class=\"desktop-window-title\" (dblclick)=\"maximize()\" (mousedown)=\"windowTitleMouseDown($event)\">\r\n <div class=\"desktop-click-through\">\r\n <div class=\"desktop-text\">{{window.title}}</div>\r\n </div>\r\n </div>\r\n <div class=\"desktop-window-action\">\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-minimize-icon'\" [tooltip]=\"'Minimize - [Alt + N]'\" (click)=\"minimize()\"></tru-toolbar-button>\r\n <tru-toolbar-button *ngIf=\"!window.maximized\" [icon]=\"'tru-toolbar-maximize-icon'\" [tooltip]=\"'Maximize Window - [Alt + M]'\" (click)=\"maximize()\" class=\"maximize\"></tru-toolbar-button>\r\n <tru-toolbar-button *ngIf=\"window.maximized\" [icon]=\"'tru-toolbar-restore-icon'\" [tooltip]=\"'Restore Window - [Alt + M]'\" (click)=\"maximize()\" class=\"maximize\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-close-icon'\" [tooltip]=\"'Close Window - [Alt + SHIFT + X]'\" (click)=\"close()\"></tru-toolbar-button>\r\n </tru-toolbar>\r\n </div>\r\n </div>\r\n <fieldset ng-disabled=\"!window.active\" class=\"desktop-window-fieldset\" [ngClass]=\"{'desktop-window-opacity': !window.active}\">\r\n <div class=\"desktop-window-content\">\r\n <div *ngFor=\"let view of window.views\">\r\n <tru-desktop-view [view]=\"view\" [active]=\"view.active\" [hidden]=\"!view.active\"><ng-template></ng-template></tru-desktop-view>\r\n </div>\r\n </div>\r\n </fieldset>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-nw\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'nw'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-ne\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'ne'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-sw\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'sw'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-se\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'se'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-n\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'n'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-s\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'s'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-w\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'w'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-e\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'e'\"></span>\r\n</div>\r\n", styles: ["body{-webkit-user-select:none;-moz-user-select:-moz-none;-ms-user-select:none;user-select:none}input,textarea{-moz-user-select:text}.desktop-text{-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);font-size:14px;line-height:1;color:#333}.desktop-wrapper{position:absolute!important;inset:0;background:#fff;overflow:hidden}.desktop-relative{position:relative}.desktop-display-none{display:none}.desktop-click-through{pointer-events:none}.desktop-menubar-container{position:absolute!important;top:0;left:0;right:0;height:26px;background:#f8f8f8;border-bottom:1px solid #e7e7e7;padding-left:5px}\n", ".desktop-window-container{position:absolute!important;background-color:#fff;background-clip:padding-box;border-radius:0;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px #0003;border:1px solid #e7e7e7}.desktop-window-header{position:absolute!important;top:0;left:0;right:0;height:27px;background:#fff;border-top-left-radius:0;border-top-right-radius:0;border-bottom:1px solid #e7e7e7}.desktop-window-content{position:absolute!important;inset:27px 0 0;background:#fff;overflow:hidden}.desktop-window-busy-overlay{position:absolute!important;inset:27px 0 0;background:#fff;overflow:hidden;z-index:1000;background-repeat:no-repeat;background-position:center center}.desktop-window-fieldset{padding:0;margin:0;border:0}.desktop-window-statusbar{position:absolute!important;left:0;right:0;bottom:0;height:23px;background:#fff;border-bottom-left-radius:0;border-bottom-right-radius:0;border-top:1px solid #e7e7e7}.desktop-window-statusbar-container{position:absolute;top:1px;left:2px;right:0}.desktop-window-navigation{position:absolute!important;top:0;left:0;bottom:0;width:105px;background:transparent}.desktop-window-navigation-button-group{position:absolute!important;left:0;padding:0;margin:0}.desktop-window-navigation-button-group button{margin-left:0!important}.desktop-window-navigation-button-group-split{position:absolute!important;top:2px;right:6px}.desktop-window-title{position:absolute!important;inset:0 80px 0 110px;height:27px;background:transparent;cursor:inherit;outline:0;margin-top:2px}.desktop-window-title-hidden-nav{left:5px!important}.desktop-window-title-hidden-nav-with-buttons{left:55px!important}.desktop-window-title>div{position:absolute!important;top:5px;left:3px;cursor:default}.desktop-window-title>div>div{font-size:14px;font-weight:700}.desktop-window-action{position:absolute!important;top:0;right:0;bottom:0;width:80px;background:transparent}.desktop-window-action-button-group{position:absolute!important;top:2px;right:6px}.desktop-window-action .desktop-window-navigation-button-group{left:unset!important;right:0!important}.desktop-window-opacity{opacity:.5}.desktop-window-close-button:hover{background-color:maroon;color:#fff}.desktop-window-active{border:1px solid #6b6b6b!important;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.4);box-shadow:0 5px 10px #0006}.desktop-window-maximized{border-radius:0;-webkit-box-shadow:0 0 0 rgba(0,0,0,0);box-shadow:0 0 #0000;border-top-color:#f8f8f8!important;border-bottom-color:#f8f8f8!important}.desktop-window-is-dirty{display:block;float:left;height:15px;width:15px;font-size:15px;color:orange;margin-left:3px}.desktop-window-is-invalid{display:block;float:left;height:15px;width:15px;font-size:15px;color:red;margin-left:3px}.desktop-window-resizable-nw{position:absolute!important;overflow:hidden;width:10px;height:10px;left:-5px;top:-5px;z-index:103;cursor:nw-resize;opacity:0}.desktop-window-resizable-ne{position:absolute!important;overflow:hidden;width:10px;height:10px;right:-5px;top:-5px;z-index:103;cursor:ne-resize;opacity:0}.desktop-window-resizable-sw{position:absolute!important;overflow:hidden;width:10px;height:10px;left:-5px;bottom:-5px;z-index:103;cursor:sw-resize;opacity:0}.desktop-window-resizable-se{position:absolute!important;overflow:hidden;width:10px;height:10px;right:-5px;bottom:-5px;z-index:103;cursor:se-resize;opacity:0}.desktop-window-resizable-n{position:absolute!important;top:0;left:10px;right:10px;overflow:hidden;height:5px;z-index:102;cursor:s-resize;opacity:0;margin-top:-5px}.desktop-window-resizable-s{position:absolute!important;left:10px;right:10px;bottom:0;overflow:hidden;height:5px;z-index:102;cursor:s-resize;opacity:0;margin-bottom:-5px}.desktop-window-resizable-w{position:absolute!important;top:10px;left:0;bottom:10px;overflow:hidden;width:5px;z-index:102;cursor:w-resize;opacity:0;margin-left:-5px}.desktop-window-resizable-e{position:absolute!important;top:10px;right:0;bottom:10px;overflow:hidden;width:5px;z-index:102;cursor:e-resize;opacity:0;margin-right:-5px}div.desktop-window-resizable-handle{display:none!important;visibility:hidden!important}.desktop-window-save-icon,.desktop-window-revert-icon{opacity:.5}.desktop-window-save-icon-has-changes,.desktop-window-revert-icon-has-changes{opacity:1}\n"] }]
455
+ args: [{ selector: 'tru-desktop-window', providers: [TruDataContext, TruEntityAccessor, TruWindowEventHandler, TruReportManager, TruActionInvoke, TruDesktopManager], template: "<div class=\"desktop-window-container\"\r\n [ngClass]=\"{'desktop-window-active': window.active, 'desktop-window-maximized': window.maximized}\"\r\n [ngStyle]=\"{'z-index': window.zIndex, 'top': window.top, 'left': window.left, 'right': window.right, 'bottom': window.bottom, 'height': window.height, 'width': window.width, 'min-height': window.minHeight, 'minWidth': window.minWidth}\"\r\n [style.offsetLeft.px]=\"x\"\r\n [style.offsetTop.px]=\"y\"\r\n (mousedown)=\"activate()\"\r\n [hidden]=\"window.minimized\">\r\n <div class=\"desktop-window-header\" [ngClass]=\"{'desktop-window-maximized': window.maximized, 'desktop-window-opacity': !window.active}\">\r\n <div class=\"toolbar-window-navigation\">\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-previous-icon'\" [tooltip]=\"'Go Back One View - [Alt + Left]'\" (click)=\"previousView()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-next-icon'\" [tooltip]=\"'Go Forward One View - [Alt + Right]'\" (click)=\"nextView()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-save-icon'\" class=\"desktop-window-save-icon\" [ngClass]=\"{'desktop-window-save-icon-has-changes': hasChanges()}\" [tooltip]=\"'Save - [Ctrl + S]'\" (click)=\"save()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-revert-icon'\" class=\"desktop-window-revert-icon\" [ngClass]=\"{'desktop-window-revert-icon-has-changes': hasChanges()}\" [tooltip]=\"'Revert - [Ctrl + Shift + R]'\" (click)=\"revert()\"></tru-toolbar-button>\r\n <tru-toolbar-separator></tru-toolbar-separator>\r\n </tru-toolbar>\r\n </div>\r\n <div class=\"desktop-window-title\" (dblclick)=\"maximize()\" (mousedown)=\"windowTitleMouseDown($event)\">\r\n <div class=\"desktop-click-through\">\r\n <div class=\"desktop-text\">{{window.title}}</div>\r\n </div>\r\n </div>\r\n <div class=\"desktop-window-action\">\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-minimize-icon'\" [tooltip]=\"'Minimize - [Alt + N]'\" (click)=\"minimize()\"></tru-toolbar-button>\r\n <tru-toolbar-button *ngIf=\"!window.maximized\" [icon]=\"'tru-toolbar-maximize-icon'\" [tooltip]=\"'Maximize Window - [Alt + M]'\" (click)=\"maximize()\" class=\"maximize\"></tru-toolbar-button>\r\n <tru-toolbar-button *ngIf=\"window.maximized\" [icon]=\"'tru-toolbar-restore-icon'\" [tooltip]=\"'Restore Window - [Alt + M]'\" (click)=\"maximize()\" class=\"maximize\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-close-icon'\" [tooltip]=\"'Close Window - [Alt + SHIFT + X]'\" (click)=\"close()\"></tru-toolbar-button>\r\n </tru-toolbar>\r\n </div>\r\n </div>\r\n <fieldset ng-disabled=\"!window.active\" class=\"desktop-window-fieldset\" [ngClass]=\"{'desktop-window-opacity': !window.active}\">\r\n <div class=\"desktop-window-content\">\r\n <div *ngFor=\"let view of window.views\">\r\n <tru-desktop-view [view]=\"view\" [active]=\"view.active\" [hidden]=\"!view.active\"><ng-template></ng-template></tru-desktop-view>\r\n </div>\r\n </div>\r\n </fieldset>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-nw\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'nw'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-ne\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'ne'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-sw\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'sw'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-se\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'se'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-n\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'n'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-s\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'s'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-w\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'w'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-e\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'e'\"></span>\r\n</div>\r\n", styles: ["body{-webkit-user-select:none;-moz-user-select:-moz-none;-ms-user-select:none;user-select:none}input,textarea{-moz-user-select:text}.desktop-text{-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);font-size:14px;line-height:1;color:#333}.desktop-wrapper{position:absolute!important;inset:0;background:#fff;overflow:hidden}.desktop-relative{position:relative}.desktop-display-none{display:none}.desktop-click-through{pointer-events:none}.desktop-menubar-container{position:absolute!important;top:0;left:0;right:0;height:26px;background:#f8f8f8;border-bottom:1px solid #e7e7e7;padding-left:5px}\n", ".desktop-window-container{position:absolute!important;background-color:#fff;background-clip:padding-box;border-radius:0;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px #0003;border:1px solid #e7e7e7}.desktop-window-header{position:absolute!important;top:0;left:0;right:0;height:27px;background:#fff;border-top-left-radius:0;border-top-right-radius:0;border-bottom:1px solid #e7e7e7}.desktop-window-content{position:absolute!important;inset:27px 0 0;background:#fff;overflow:hidden}.desktop-window-busy-overlay{position:absolute!important;inset:27px 0 0;background:#fff;overflow:hidden;z-index:1000;background-repeat:no-repeat;background-position:center center}.desktop-window-fieldset{padding:0;margin:0;border:0}.desktop-window-statusbar{position:absolute!important;left:0;right:0;bottom:0;height:23px;background:#fff;border-bottom-left-radius:0;border-bottom-right-radius:0;border-top:1px solid #e7e7e7}.desktop-window-statusbar-container{position:absolute;top:1px;left:2px;right:0}.desktop-window-navigation{position:absolute!important;top:0;left:0;bottom:0;width:105px;background:transparent}.desktop-window-navigation-button-group{position:absolute!important;left:0;padding:0;margin:0}.desktop-window-navigation-button-group button{margin-left:0!important}.desktop-window-navigation-button-group-split{position:absolute!important;top:2px;right:6px}.desktop-window-title{position:absolute!important;inset:0 80px 0 110px;height:27px;background:transparent;cursor:inherit;outline:0;margin-top:2px}.desktop-window-title-hidden-nav{left:5px!important}.desktop-window-title-hidden-nav-with-buttons{left:55px!important}.desktop-window-title>div{position:absolute!important;top:5px;left:3px;cursor:default}.desktop-window-title>div>div{font-size:14px;font-weight:700}.desktop-window-action{position:absolute!important;top:0;right:0;bottom:0;width:80px;background:transparent}.desktop-window-action-button-group{position:absolute!important;top:2px;right:6px}.desktop-window-action .desktop-window-navigation-button-group{left:unset!important;right:0!important}.desktop-window-opacity{opacity:.5}.desktop-window-close-button:hover{background-color:maroon;color:#fff}.desktop-window-active{border:1px solid #6b6b6b!important;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.4);box-shadow:0 5px 10px #0006}.desktop-window-maximized{border-radius:0;-webkit-box-shadow:0 0 0 rgba(0,0,0,0);box-shadow:0 0 #0000;border-top-color:#f8f8f8!important;border-bottom-color:#f8f8f8!important}.desktop-window-is-dirty{display:block;float:left;height:15px;width:15px;font-size:15px;color:orange;margin-left:3px}.desktop-window-is-invalid{display:block;float:left;height:15px;width:15px;font-size:15px;color:red;margin-left:3px}.desktop-window-resizable-nw{position:absolute!important;overflow:hidden;width:10px;height:10px;left:-5px;top:-5px;z-index:103;cursor:nw-resize;opacity:0}.desktop-window-resizable-ne{position:absolute!important;overflow:hidden;width:10px;height:10px;right:-5px;top:-5px;z-index:103;cursor:ne-resize;opacity:0}.desktop-window-resizable-sw{position:absolute!important;overflow:hidden;width:10px;height:10px;left:-5px;bottom:-5px;z-index:103;cursor:sw-resize;opacity:0}.desktop-window-resizable-se{position:absolute!important;overflow:hidden;width:10px;height:10px;right:-5px;bottom:-5px;z-index:103;cursor:se-resize;opacity:0}.desktop-window-resizable-n{position:absolute!important;top:0;left:10px;right:10px;overflow:hidden;height:5px;z-index:102;cursor:s-resize;opacity:0;margin-top:-5px}.desktop-window-resizable-s{position:absolute!important;left:10px;right:10px;bottom:0;overflow:hidden;height:5px;z-index:102;cursor:s-resize;opacity:0;margin-bottom:-5px}.desktop-window-resizable-w{position:absolute!important;top:10px;left:0;bottom:10px;overflow:hidden;width:5px;z-index:102;cursor:w-resize;opacity:0;margin-left:-5px}.desktop-window-resizable-e{position:absolute!important;top:10px;right:0;bottom:10px;overflow:hidden;width:5px;z-index:102;cursor:e-resize;opacity:0;margin-right:-5px}div.desktop-window-resizable-handle{display:none!important;visibility:hidden!important}.desktop-window-save-icon,.desktop-window-revert-icon{opacity:.5}.desktop-window-save-icon-has-changes,.desktop-window-revert-icon-has-changes{opacity:1}\n"] }]
455
456
  }], ctorParameters: () => [{ type: i1.TruDataContext }, { type: i2.TruUiNotification }, { type: i3.TruTextManager }, { type: i4.TruWindowEventHandler }, { type: i0.ElementRef }, { type: i5.TruUtil }, { type: i0.ChangeDetectorRef }], propDecorators: { window: [{
456
457
  type: Input
457
458
  }], viewportCtrl: [{
@@ -459,4 +460,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
459
460
  }], desktopCtrl: [{
460
461
  type: Input
461
462
  }] } });
462
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWRlc2t0b3Atd2luZG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1LWNvbW1vbi1saWIvc3JjL2xpYi9jb21wb25lbnRzL2Rlc2t0b3Avd2luZG93L3RydS1kZXNrdG9wLXdpbmRvdy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9kZXNrdG9wL3dpbmRvdy90cnUtZGVza3RvcC13aW5kb3cuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUF5QixLQUFLLEVBQWlDLE1BQU0sZUFBZSxDQUFDO0FBRXZHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUkxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFTeEUsTUFBTSxPQUFPLGdCQUFnQjtJQU1qQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQVhELE1BQU0sQ0FBTTtJQUNaLFlBQVksQ0FBTTtJQUNsQixXQUFXLENBQU07SUFFMUIsWUFDVSxXQUEyQixFQUMzQixjQUFpQyxFQUNqQyxXQUEyQixFQUMzQixxQkFBNEMsRUFDNUMsVUFBc0IsRUFDdEIsSUFBYSxFQUNiLEVBQXFCO1FBTnJCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQixtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFDakMsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQzNCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFD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Q0FBQztRQUM1RCxNQUFNLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRTlELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQzt1R0F0Y1UsZ0JBQWdCOzJGQUFoQixnQkFBZ0IscUlBRmhCLENBQUMsY0FBYyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsQ0FBQywwQkNoQjFHLGdqSkErQ0E7OzJGRDdCYSxnQkFBZ0I7a0JBTjVCLFNBQVM7K0JBQ0Usb0JBQW9CLGFBR25CLENBQUMsY0FBYyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsQ0FBQzttUUFHL0YsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBJbnB1dCwgRWxlbWVudFJlZiwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFRydURhdGFDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdHJ1LWRhdGEtY29udGV4dCc7XG5pbXBvcnQgeyBUcnVFbnRpdHlBY2Nlc3NvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RydS1lbnRpdHktYWNjZXNzb3InO1xyXG5pbXBvcnQgeyBUcnVUZXh0TWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RydS10ZXh0LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBUcnVVaU5vdGlmaWNhdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RydS11aS1ub3RpZmljYXRpb24nO1xyXG5pbXBvcnQgeyBUcnVEZXNrdG9wVmlld0NvbmZpZyB9IGZyb20gJy4uL2NsYXNzZXMvdHJ1LWRlc2t0b3Atdmlldy1jb25maWcnO1xyXG5pbXBvcnQgeyBUcnVXaW5kb3dFdmVudEhhbmRsZXIgfSBmcm9tICcuLi9zZXJ2aWNlcy90cnUtd2luZG93LWV2ZW50LWhhbmRsZXInO1xuaW1wb3J0IHsgVHJ1QWN0aW9uSW52b2tlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdHJ1LWFjdGlvbi1pbnZva2UnO1xyXG5pbXBvcnQgeyBUcnVSZXBvcnRNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdHJ1LXJlcG9ydC1tYW5hZ2VyJztcclxuaW1wb3J0IHsgVHJ1VXRpbCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RydS11dGlsJztcclxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0cnUtZGVza3RvcC13aW5kb3cnLFxuICB0ZW1wbGF0ZVVybDogJy4vdHJ1LWRlc2t0b3Atd2luZG93Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi4vdHJ1LWRlc2t0b3AuY3NzJywgJy4vdHJ1LWRlc2t0b3Atd2luZG93LmNzcyddLFxuICBwcm92aWRlcnM6IFtUcnVEYXRhQ29udGV4dCwgVHJ1RW50aXR5QWNjZXNzb3IsIFRydVdpbmRvd0V2ZW50SGFuZGxlciwgVHJ1UmVwb3J0TWFuYWdlciwgVHJ1QWN0aW9uSW52b2tlXVxufSlcbmV4cG9ydCBjbGFzcyBUcnVEZXNrdG9wV2luZG93IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgd2luZG93OiBhbnk7XG4gIEBJbnB1dCgpIHZpZXdwb3J0Q3RybDogYW55O1xuICBASW5wdXQoKSBkZXNrdG9wQ3RybDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGF0YUNvbnRleHQ6IFRydURhdGFDb250ZXh0LFxuICAgIHByaXZhdGUgdWlOb3RpZmljYXRpb246IFRydVVpTm90aWZpY2F0aW9uLFxuICAgIHByaXZhdGUgdGV4dE1hbmFnZXI6IFRydVRleHRNYW5hZ2VyLFxuICAgIHByaXZhdGUgdHJ1V2luZG93RXZlbnRIYW5kbGVyOiBUcnVXaW5kb3dFdmVudEhhbmRsZXIsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgdXRpbDogVHJ1VXRpbCxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICB9XG5cbiAgeCA9IDA7XG4gIHkgPSAwO1xuICBsYXN0WCA9IDA7XG4gIGxhc3RZID0gMDtcbiAgc3RhcnRYID0gMDtcbiAgc3RhcnRZID0gMDtcbiAgdGl0bGVCYXI6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIGNhbkNsb3NlRm4gPSB1bmRlZmluZWQ7XG4gIGNhbk5hdmlnYXRlRm4hOiAoKSA9PiBib29sZWFuO1xuICBjYW5jZWxFZGl0aW5nT25OYXZpZ2F0aW9uID0gZmFsc2U7XG4gIHZpZXdwb3J0RGltZW5zaW9uczogYW55ID0gdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgc3ViczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xuXG4gIGhhc0NoYW5nZXMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YUNvbnRleHQuaGFzQ2hhbmdlcygpLmxlbmd0aDtcclxuICB9XG5cbiAgbW91c2VNb3ZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG5cbiAgICB0aGlzLnZpZXdwb3J0RGltZW5zaW9ucyA9IHRoaXMudmlld3BvcnRDdHJsLmdldFZpZXdwb3J0RGltZW5zaW9ucygpO1xuICAgIGlmIChldmVudC5wYWdlWCA8PSAwIHx8XG4gICAgICBldmVudC5wYWdlWCA+PSB0aGlzLnZpZXdwb3J0RGltZW5zaW9ucy53aWR0aCB8fFxuICAgICAgdGhpcy53aW5kb3cubWF4aW1pemVkKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy50aXRsZUJhciA9PSBudWxsKSByZXR1cm47XG5cbiAgICAvL3RoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnb3BhY2l0eTogMC41OycpO1xuICAgIHRoaXMueCA9IGV2ZW50LnNjcmVlblggLSB0aGlzLnN0YXJ0WDtcbiAgICB0aGlzLnkgPSBldmVudC5zY3JlZW5ZIC0gdGhpcy5zdGFydFk7XG5cbiAgICAvL1RvcCBDb250YWlubWVudFxuICAgIHRoaXMueSA9IHRoaXMueSA+PSAwID8gdGhpcy55IDogMDtcbiAgICAvL0JvdHRvbSBDb250YWlubWVudFxuICAgIHRoaXMueSA9IHRoaXMueSA8PSB0aGlzLnZpZXdwb3J0RGltZW5zaW9ucy5oZWlnaHQgLSB0aGlzLnRpdGxlQmFyLm9mZnNldEhlaWdodCA/IHRoaXMueSA6IHRoaXMudmlld3BvcnREaW1lbnNpb25zLmhlaWdodCAtIHRoaXMudGl0bGVCYXIub2Zmc2V0SGVpZ2h0O1xuXG4gICAgLy9MZWZ0IENvbnRhaW5tZW50XG4gICAgdGhpcy54ID0gdGhpcy54ID49IC0odGhpcy50aXRsZUJhci5vZmZzZXRXaWR0aCArIHRoaXMudGl0bGVCYXIub2Zmc2V0TGVmdCkgPyB0aGlzLnggOiAtKHRoaXMudGl0bGVCYXIub2Zmc2V0V2lkdGggKyB0aGlzLnRpdGxlQmFyLm9mZnNldExlZnQpO1xuICAgIC8vUmlnaHQgQ29udGFpbm1lbnRcbiAgICB0aGlzLnggPSB0aGlzLnggPD0gdGhpcy52aWV3cG9ydERpbWVuc2lvbnMud2lkdGggLSB0aGlzLnRpdGxlQmFyLm9mZnNldExlZnQgPyB0aGlzLnggOiB0aGlzLnZpZXdwb3J0RGltZW5zaW9ucy53aWR0aCAtIHRoaXMudGl0bGVCYXIub2Zmc2V0TGVmdDtcblxuICAgIHRoaXMud2luZG93LnRvcCA9IHRoaXMueSArICdweCc7XG4gICAgdGhpcy53aW5kb3cubGVmdCA9IHRoaXMueCArICdweCc7XG4gIH07XG5cbiAgbW91c2VVcCA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgIGlmIChldmVudC5wYWdlWSA8PSB0aGlzLmRlc2t0b3BDdHJsLm9wdGlvbnMudmlld3BvcnRUb3ApIHtcbiAgICAgIHRoaXMuZGVza3RvcEN0cmwubWF4aW1pemUodGhpcy53aW5kb3cpO1xuICAgIH1cbiAgICBpZiAoZXZlbnQucGFnZVggPD0gMCkge1xuICAgICAgdGhpcy5kZXNrdG9wQ3RybC5tYXhpbWl6ZUxlZnQodGhpcy53aW5kb3cpO1xuICAgIH1cbiAgICB0aGlzLnZpZXdwb3J0RGltZW5zaW9ucyA9IHRoaXMudmlld3BvcnRDdHJsLmdldFZpZXdwb3J0RGltZW5zaW9ucygpO1xuICAgIGlmIChldmVudC5wYWdlWCA+PSB0aGlzLnZpZXdwb3J0RGltZW5zaW9ucy53aWR0aCAtIDEpIHtcbiAgICAgIHRoaXMuZGVza3RvcEN0cmwubWF4aW1pemVSaWdodCh0aGlzLndpbmRvdyk7XG4gICAgfVxuXG4gICAgLy90aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ29wYWNpdHk6IDEuMDsnKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm1vdXNlTW92ZSk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMubW91c2VVcCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BXaW5kb3dDb21wb25lbnQudXBkYXRlTmF2aWdhdGlvblN0YXRlXG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3Aud2luZG93XG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBVcGRhdGVzIHdpbmRvdyBuYXZpZ2F0aW9uIGJ1dHRvbnMgYmFzZWQgbG9jYXRpb24gb2YgdGhlIGFjdGl2ZSB2aWV3IGluIHRoZSB2aWV3cyBhcnJheS5cbiAgICpcbiAgICovXG4gIHVwZGF0ZU5hdmlnYXRpb25TdGF0ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy53aW5kb3cudmlld3MgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIHZhciBsZW5ndGggPSB0aGlzLndpbmRvdy52aWV3cy5sZW5ndGg7XG4gICAgdGhpcy5kaXNhYmxlUHJldmlvdXMgPSAhISh0aGlzLndpbmRvdy52aWV3c1swXS5hY3RpdmUgfHwgbGVuZ3RoID09PSAxKTtcbiAgICB0aGlzLmRpc2FibGVOZXh0ID0gISEodGhpcy53aW5kb3cudmlld3NbbGVuZ3RoIC0gMV0uYWN0aXZlIHx8IGxlbmd0aCA9PT0gMSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BXaW5kb3dDb21wb25lbnQuaXNXaW5kb3dJblZpZXdwb3J0XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3Aud2luZG93XG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEZXRlcm1pbmVzIGlmIHRoZSB3aW5kb3cgaXMgd2l0aGluIHRoZSB2aWV3cG9ydCBib3VuZGFyaWVzLlxuICAgKlxuICAgKi9cbiAgaXNXaW5kb3dJblZpZXdwb3J0ID0gKCkgPT4ge1xuICAgIHZhciB3aW5kb3dUb3AgPSAwO1xuICAgIHZhciB3aW5kb3dMZWZ0ID0gMDtcbiAgICBpZiAoIXRoaXMud2luZG93Lm1pbmltaXplZCkge1xuICAgICAgd2luZG93VG9wID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wO1xuICAgICAgd2luZG93TGVmdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvd1RvcCA9IHBhcnNlSW50KHRoaXMud2luZG93LnNhdmVkUG9zaXRpb24udG9wLCAxMCk7XG4gICAgICB3aW5kb3dMZWZ0ID0gcGFyc2VJbnQodGhpcy53aW5kb3cuc2F2ZWRQb3NpdGlvbi5sZWZ0LCAxMCk7XG4gICAgfVxuICAgIGlmICgod2luZG93VG9wICsgMTApID49IHRoaXMudmlld3BvcnRDdHJsLmdldFZpZXdwb3J0RGltZW5zaW9ucygpLmhlaWdodCB8fFxuICAgICAgKHdpbmRvd0xlZnQgKyA2MCkgPj0gdGhpcy52aWV3cG9ydEN0cmwuZ2V0Vmlld3BvcnREaW1lbnNpb25zKCkud2lkdGgpIHtcbiAgICAgIHRoaXMud2luZG93Lm91dE9mQm91bmRzID0gdHJ1ZTtcbiAgICAgIHRoaXMud2luZG93LmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZXNrdG9wQ3RybC5hY3RpdmF0ZUZvcmVtb3N0V2luZG93KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud2luZG93Lm91dE9mQm91bmRzID0gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wV2luZG93Q29tcG9uZW50LmdldFdpbmRvd1xuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wLndpbmRvd1xuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogR2V0cyB0aGUgd2luZG93IG9iamVjdC5cbiAgICpcbiAgICogQHJldHVybnMge29iamVjdH0gd2luZG93IG9iamVjdC5cbiAgICovXG4gIGdldFdpbmRvdyA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy53aW5kb3c7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BXaW5kb3dDb21wb25lbnQuc2V0V2luZG93VGl0bGVcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcC53aW5kb3dcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgdGhlIHdpbmRvdyB0aXRsZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIHRvIGRpc3BsYXkgaW4gdGhlIHdpbmRvdyB0aXRsZSBiYXIuXG4gICAqL1xuICBzZXRXaW5kb3dUaXRsZSA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy53aW5kb3cudGl0bGUgPSB2YWx1ZTtcbiAgfTtcblxuICBnZXRXaW5kb3dUaXRsZSA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy53aW5kb3cudGl0bGU7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BXaW5kb3dDb21wb25lbnQuZ29Ub1ByZXZpb3VzVmlld1xuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wLndpbmRvd1xuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogUHVibGljIG1ldGhvZCBmb3IgbmF2aWdhdGluZyB0byB0aGUgcHJldmlvdXMgdmlldy5cbiAgICpcbiAgICovXG4gIGdvVG9QcmV2aW91c1ZpZXcgPSAoKSA9PiB7XG4gICAgdGhpcy5wcmV2aW91c1ZpZXcoKTtcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcFdpbmRvd0NvbXBvbmVudC52aWV3SXNFZGl0aW5nXG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3Aud2luZG93XG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBDaGVja3Mgd2hldGhlciB2aWV3IGlzIGVkaXRpbmcuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufS5cbiAgICovXG4gIHZpZXdJc0VkaXRpbmcgPSAoKSA9PiB7XG4gICAgdmFyIGlzRWRpdGluZyA9IGZhbHNlO1xuICAgIHRoaXMud2luZG93LnZpZXdzLmZvckVhY2goKHZpZXc6IGFueSkgPT4ge1xuICAgICAgaWYgKHZpZXcuaXNFZGl0aW5nID09PSB0cnVlKSB7XG4gICAgICAgIGlzRWRpdGluZyA9IHRydWU7XG4gICAgICB9XG4gICAgfSwgbnVsbCk7XG4gICAgcmV0dXJuIGlzRWRpdGluZztcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcFdpbmRvd0NvbXBvbmVudC5jYW5OYXZpZ2F0ZVxuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wLndpbmRvd1xuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQ2hlY2tzIHdoZXRoZXIgbmF2aWdhdGlvbiBjYW4gb2NjdXIuLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0uXG4gICAqL1xuICBjYW5OYXZpZ2F0ZSA9ICgpID0+IHtcbiAgICB2YXIgY2FuTmF2aWdhdGUgPSB0cnVlO1xuICAgIGlmICh0aGlzLmNhbk5hdmlnYXRlRm4gIT09IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLnZpZXdJc0VkaXRpbmcoKSkge1xuICAgICAgICBjYW5OYXZpZ2F0ZSA9IHRoaXMhLmNhbk5hdmlnYXRlRm4oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNhbk5hdmlnYXRlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wV2luZG93Q29tcG9uZW50LnJlbW92ZUZvcndhcmRWaWV3c1xuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wLndpbmRvd1xuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogUmVtb3ZlcyBhbGwgdmlldyhzKSBmb3J3YXJkIG9mIHRoZSBhY3RpdmUgdmlldy5cbiAgICpcbiAgICovXG4gIHJlbW92ZUZvcndhcmRWaWV3cyA9ICgpID0+IHtcbiAgICB2YXIgYWN0aXZlVmlldyA9IHRoaXMuZGVza3RvcEN0cmwuZ2V0QWN0aXZlVmlldyh0aGlzLndpbmRvdyk7XG4gICAgdmFyIGFjdGl2ZVZpZXdJbmRleCA9IHRoaXMud2luZG93LnZpZXdzLmluZGV4T2YoYWN0aXZlVmlldyk7XG4gICAgZm9yICh2YXIgaSA9IHRoaXMud2luZG93LnZpZXdzLmxlbmd0aDsgaSA+IGFjdGl2ZVZpZXdJbmRleDsgaS0tKSB7XG4gICAgICB0aGlzLndpbmRvdy52aWV3cy5zcGxpY2UoaSwgMSk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlTmF2aWdhdGlvblN0YXRlKCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BXaW5kb3dDb21wb25lbnQuYWRkVmlld1xuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wLndpbmRvd1xuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogUmVtb3ZlcyBhbGwgaW5hY3RpdmUgdmlldyhzKSBmb2xsb3dpbmcgdGhlIGFjdGl2ZSB2aWV3IGFuZCBpbnNlcnRzIGEgbmV3IHZpZXcuXG4gICAqXG4gICAqL1xuICBhZGRWaWV3ID0gKHZpZXdDb25maWc6IGFueSkgPT4ge1xuICAgIHRoaXMucmVtb3ZlRm9yd2FyZFZpZXdzKCk7XG4gICAgdmFyIGFjdGl2ZVZpZXcgPSB0aGlzLmRlc2t0b3BDdHJsLmdldEFjdGl2ZVZpZXcodGhpcy53aW5kb3cpO1xuICAgIGFjdGl2ZVZpZXcuYWN0aXZlID0gZmFsc2U7XG4gICAgdmlld0NvbmZpZy53aW5kb3cgPSB0aGlzO1xuICAgIHRoaXMud2luZG93LnZpZXdzLnB1c2godmlld0NvbmZpZyk7XG4gICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uU3RhdGUoKTtcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcFdpbmRvd0NvbXBvbmVudC5nZXRHbG9iYWxzXG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3Aud2luZG93XG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiByZXR1cm5zIHRoZSBnbG9iYWwgdmFsdWVzLlxuICAgKlxuICAgKi9cbiAgZ2V0R2xvYmFscyA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy53aW5kb3cuZ2xvYmFscztcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcFdpbmRvd0NvbXBvbmVudC5maXJzdFZpZXdcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcC53aW5kb3dcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqL1xuICBmaXJzdFZpZXcgPSAoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmNhbk5hdmlnYXRlKCkgfHwgdGhpcy5kaXNhYmxlUHJldmlvdXMpIHJldHVybjtcbiAgICBpZiAodGhpcy5jYW5jZWxFZGl0aW5nT25OYXZpZ2F0aW9uKSB0aGlzLmRlc2t0b3BDdHJsLmdldEFjdGl2ZVZpZXcodGhpcy53aW5kb3cpLmlzRWRpdGluZyA9IGZhbHNlO1xuICAgIGxldCBhY3RpdmVWaWV3ID0gdGhpcy5kZXNrdG9wQ3RybC5nZXRBY3RpdmVWaWV3KHRoaXMud2luZG93KTtcbiAgICBhY3RpdmVWaWV3LmFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMud2luZG93LnZpZXdzWzBdLmFjdGl2ZSA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uU3RhdGUoKTtcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcFdpbmRvd0NvbXBvbmVudC5maXJzdFZpZXdcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcC53aW5kb3dcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqL1xuICBsYXN0VmlldyA9ICgpID0+IHtcbiAgICBpZiAoIXRoaXMuY2FuTmF2aWdhdGUoKSB8fCB0aGlzLmRpc2FibGVOZXh0KSByZXR1cm47XG4gICAgaWYgKHRoaXMuY2FuY2VsRWRpdGluZ09uTmF2aWdhdGlvbikgdGhpcy5kZXNrdG9wQ3RybC5nZXRBY3RpdmVWaWV3KHRoaXMud2luZG93KS5pc0VkaXRpbmcgPSBmYWxzZTtcbiAgICBsZXQgYWN0aXZlVmlldyA9IHRoaXMuZGVza3RvcEN0cmwuZ2V0QWN0aXZlVmlldyh0aGlzLndpbmRvdyk7XG4gICAgYWN0aXZlVmlldy5hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLndpbmRvdy52aWV3c1t0aGlzLndpbmRvdy52aWV3cy5sZW5ndGggLSAxXS5hY3RpdmUgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlTmF2aWdhdGlvblN0YXRlKCk7XG4gIH07O1xuXG4gIHJlc2l6ZUV2ZW50SGFuZGxlciA9ICgpID0+IHtcbiAgICB0aGlzLmlzV2luZG93SW5WaWV3cG9ydCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGV2ZW50XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3Aud2luZG93XG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKi9cbiAgb25XaW5kb3dLZXlkb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgaWYgKCF0aGlzLndpbmRvdy5hY3RpdmUpIHJldHVybjtcbiAgICB2YXIga2V5U2VxdWVuY2UgPSB0aGlzLnV0aWwuZ2V0S2V5U2VxdWVuY2UoZXZlbnQpO1xuICAgIGlmIChrZXlTZXF1ZW5jZSA9PT0gJ2N0cmwrcycgfHwga2V5U2VxdWVuY2UgPT09ICdtZXRhK3MnKSB7IC8vU2F2ZVxuICAgICAgdGhpcy5zYXZlKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAoa2V5U2VxdWVuY2UgPT09ICdjdHJsK3NoaWZ0K3InIHx8IGtleVNlcXVlbmNlID09PSAnbWV0YStzaGlmdCtyJykgeyAvL1Jlc3RvcmVcbiAgICAgIHRoaXMucmV2ZXJ0KCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAoa2V5U2VxdWVuY2UgPT09ICdhbHQrbGVmdCcpIHsgLy9QcmV2aW91cyBWaWV3XG4gICAgICB0aGlzLnByZXZpb3VzVmlldygpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKGtleVNlcXVlbmNlID09PSAnYWx0K3JpZ2h0JykgeyAvL05leHQgVmlld1xuICAgICAgdGhpcy5uZXh0VmlldygpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKGtleVNlcXVlbmNlID09PSAnYWx0K3VwJykgeyAvL0ZpcnN0IFZpZXdcbiAgICAgIHRoaXMuZmlyc3RWaWV3KCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAoa2V5U2VxdWVuY2UgPT09ICdhbHQrZG93bicpIHsgLy9MYXN0IFZpZXdcbiAgICAgIHRoaXMubGFzdFZpZXcoKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIHZhciB0YXJnZXRJc0NvbnRyb2wgPSB0aGlzLnV0aWwudGFyZ2V0SXNDb250cm9sKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgaWYgKCF0YXJnZXRJc0NvbnRyb2wgJiYgZXZlbnQuY3RybEtleSB8fCBldmVudC5hbHRLZXkpXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyB3YXRjaFxuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wLndpbmRvd1xuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTW9uaXRvcnMgdGhlIHdpbmRvdydzIG1pbmltaXplZCBzdGF0ZVxuICAgKlxuICAgKi9cbiAgLy8kc2NvcGUuJHdhdGNoKCd3aW5kb3cubWluaW1pemVkJyxcbiAgLy8gICAgICAgICAgICAgIGZ1bmN0aW9uKHZhbHVlKSB7XG4gIC8vICBpZiAodmFsdWUgJiYgISRzY29wZS53aW5kb3cubWF4aW1pemVkKSB7XG4gIC8vICAgICRzY29wZS5kZXNrdG9wQ3RybC5zYXZlUG9zaXRpb24oJHNjb3BlLndpbmRvdyk7XG4gIC8vICB9XG4gIC8vfVxuICAvLyAgICAgICAgICApO1xuXG4gIGRpc2FibGVQcmV2aW91cyA9IHRydWU7XG4gIGRpc2FibGVOZXh0ID0gdHJ1ZTtcblxuICBhY3RpdmF0ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy53aW5kb3cub3V0T2ZCb3VuZHMpIHJldHVybjtcbiAgICB0aGlzLmRlc2t0b3BDdHJsLmNsZWFyQWN0aXZlKCk7XG4gICAgdGhpcy53aW5kb3cuYWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLndpbmRvdy56SW5kZXggPSB0aGlzLmRlc2t0b3BDdHJsLmdldE5leHRNYXhaSW5kZXgoKTtcbiAgfTtcblxuICBtaW5pbWl6ZSA9ICgpID0+IHtcbiAgICB0aGlzLmRlc2t0b3BDdHJsLm1pbmltaXplKHRoaXMud2luZG93KTtcbiAgfTtcblxuICBtYXhpbWl6ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy53aW5kb3cubWF4aW1pemVkKSB7XG4gICAgICB0aGlzLmRlc2t0b3BDdHJsLnJlc3RvcmVTYXZlZFBvc2l0aW9uKHRoaXMud2luZG93KTtcbiAgICAgIHRoaXMud2luZG93Lm1heGltaXplZCA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZXNrdG9wQ3RybC5zYXZlUG9zaXRpb24odGhpcy53aW5kb3cpO1xuICAgICAgdGhpcy5kZXNrdG9wQ3RybC5tYXhpbWl6ZSh0aGlzLndpbmRvdyk7XG4gICAgfVxuICB9O1xuXG4gIGNsb3NlID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLmhhc0NoYW5nZXMoKSlcbiAgICAgIHRoaXMudWlOb3RpZmljYXRpb24uY29uZmlybSgnQ29uZmlybSBBY3Rpb24nLCB0aGlzLnRleHRNYW5hZ2VyLm1zZ0RpcnR5UHJldmVudHNDbG9zZSwgZmFsc2UsIHRydWUsICcnLCAnT2snKS50aGVuKChjb25maXJtOiBib29sZWFuKSA9PiB7fSk7XG4gICAgZWxzZVxuICAgICAgdGhpcy5kZXNrdG9wQ3RybC5jbG9zZVdpbmRvdyh0aGlzLndpbmRvdyk7XG4gIH07XG5cbiAgd2luZG93VGl0bGVNb3VzZURvd24gPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICBpZiAodGhpcy53aW5kb3cubWF4aW1pemVkKSByZXR1cm47XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnRpdGxlQmFyID0gZXZlbnQuc3JjRWxlbWVudCBhcyBIVE1MRWxlbWVudCB8fCBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy54ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0ub2Zmc2V0TGVmdDtcbiAgICB0aGlzLnkgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jaGlsZHJlblswXS5vZmZzZXRUb3A7XG4gICAgdGhpcy5zdGFydFggPSBldmVudC5zY3JlZW5YIC0gdGhpcy54O1xuICAgIHRoaXMuc3RhcnRZID0gZXZlbnQuc2NyZWVuWSAtIHRoaXMueTtcblxuICAgIHRoaXMuZGVza3RvcEN0cmwuc2F2ZVBvc2l0aW9uKHRoaXMud2luZG93KTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMubW91c2VNb3ZlKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5tb3VzZVVwKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlc2l6ZUV2ZW50SGFuZGxlcik7XG4gIH07XG5cbiAgcHJldmlvdXNWaWV3ID0gKCkgPT4ge1xuICAgIGlmICghdGhpcy5jYW5OYXZpZ2F0ZSgpIHx8IHRoaXMuZGlzYWJsZVByZXZpb3VzKSByZXR1cm47XG4gICAgdmFyIGFjdGl2ZVZpZXcgPSB0aGlzLmRlc2t0b3BDdHJsLmdldEFjdGl2ZVZpZXcodGhpcy53aW5kb3cpO1xuICAgIHZhciBhY3RpdmVWaWV3SW5kZXggPSB0aGlzLndpbmRvdy52aWV3cy5pbmRleE9mKGFjdGl2ZVZpZXcpO1xuICAgIGlmICh0aGlzLmNhbmNlbEVkaXRpbmdPbk5hdmlnYXRpb24pIGFjdGl2ZVZpZXcuaXNFZGl0aW5nID0gZmFsc2U7XG4gICAgYWN0aXZlVmlldy5hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLndpbmRvdy52aWV3c1thY3RpdmVWaWV3SW5kZXggLSAxXS5hY3RpdmUgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlTmF2aWdhdGlvblN0YXRlKCk7XG4gIH07XG5cbiAgbmV4dFZpZXcgPSAoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmNhbk5hdmlnYXRlKCkgfHwgdGhpcy5kaXNhYmxlTmV4dCkgcmV0dXJuO1xuICAgIHZhciBhY3RpdmVWaWV3ID0gdGhpcy5kZXNrdG9wQ3RybC5nZXRBY3RpdmVWaWV3KHRoaXMud2luZG93KTtcbiAgICB2YXIgYWN0aXZlVmlld0luZGV4ID0gdGhpcy53aW5kb3cudmlld3MuaW5kZXhPZihhY3RpdmVWaWV3KTtcbiAgICBpZiAodGhpcy5jYW5jZWxFZGl0aW5nT25OYXZpZ2F0aW9uKSBhY3RpdmVWaWV3LmlzRWRpdGluZyA9IGZhbHNlO1xuICAgIGFjdGl2ZVZpZXcuYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy53aW5kb3cudmlld3NbYWN0aXZlVmlld0luZGV4ICsgMV0uYWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLnVwZGF0ZU5hdmlnYXRpb25TdGF0ZSgpO1xuICB9O1xuXG4gIHNhdmUgPSAoKSA9PiB7XG4gICAgdGhpcy5kYXRhQ29udGV4dC5zYXZlKCk7XG4gIH07XG5cbiAgcmV2ZXJ0ID0gKCkgPT4ge1xuICAgIHRoaXMuZGF0YUNvbnRleHQucmV2ZXJ0KCk7XG4gIH07XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5DbG9zZUZuID0gdGhpcy5kZXNrdG9wQ3RybC5nZXRPcHRpb25zKCkuY2FuQ2xvc2VGbjtcbiAgICB0aGlzLmNhbk5hdmlnYXRlRm4gPSB0aGlzLmRlc2t0b3BDdHJsLmdldE9wdGlvbnMoKS5jYW5OYXZpZ2F0ZUZuO1xuICAgIHRoaXMuY2FuY2VsRWRpdGluZ09uTmF2aWdhdGlvbiA9IHRoaXMuZGVza3RvcEN0cmwuZ2V0T3B0aW9ucygpLmNhbmNlbEVkaXRpbmdPbk5hdmlnYXRpb247XG4gICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uU3RhdGUoKTtcblxuICAgIHRoaXMuc3Vicy5wdXNoKHRoaXMudHJ1V2luZG93RXZlbnRIYW5kbGVyLm9uQWRkVmlldygpLnN1YnNjcmliZSgod2luZGlvd0FkZFZpZXdFdmVudDogVHJ1RGVza3RvcFZpZXdDb25maWcpID0+IHtcclxuICAgICAgdGhpcy5hZGRWaWV3KHdpbmRpb3dBZGRWaWV3RXZlbnQpO1xyXG4gICAgfSkpO1xuXG4gICAgdGhpcy5zdWJzLnB1c2godGhpcy50cnVXaW5kb3dFdmVudEhhbmRsZXIub25TZXRXaW5kb3dUaXRsZSgpLnN1YnNjcmliZSgod2luZG93VGl0bGU6IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLnNldFdpbmRvd1RpdGxlKHdpbmRvd1RpdGxlKTtcclxuICAgIH0pKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbldpbmRvd0tleWRvd24pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMubW91c2VNb3ZlKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5tb3VzZVVwKTtcblxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbldpbmRvd0tleWRvd24pO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlc2l6ZUV2ZW50SGFuZGxlcik7XG5cbiAgICB0aGlzLnN1YnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkZXNrdG9wLXdpbmRvdy1jb250YWluZXJcIlxyXG4gICAgIFtuZ0NsYXNzXT1cInsnZGVza3RvcC13aW5kb3ctYWN0aXZlJzogd2luZG93LmFjdGl2ZSwgJ2Rlc2t0b3Atd2luZG93LW1heGltaXplZCc6IHdpbmRvdy5tYXhpbWl6ZWR9XCJcclxuICAgICBbbmdTdHlsZV09XCJ7J3otaW5kZXgnOiB3aW5kb3cuekluZGV4LCAndG9wJzogd2luZG93LnRvcCwgJ2xlZnQnOiB3aW5kb3cubGVmdCwgJ3JpZ2h0Jzogd2luZG93LnJpZ2h0LCAnYm90dG9tJzogd2luZG93LmJvdHRvbSwgJ2hlaWdodCc6IHdpbmRvdy5oZWlnaHQsICd3aWR0aCc6IHdpbmRvdy53aWR0aCwgJ21pbi1oZWlnaHQnOiB3aW5kb3cubWluSGVpZ2h0LCAnbWluV2lkdGgnOiB3aW5kb3cubWluV2lkdGh9XCJcclxuICAgICBbc3R5bGUub2Zmc2V0TGVmdC5weF09XCJ4XCJcclxuICAgICBbc3R5bGUub2Zmc2V0VG9wLnB4XT1cInlcIlxyXG4gICAgIChtb3VzZWRvd24pPVwiYWN0aXZhdGUoKVwiXHJcbiAgICAgW2hpZGRlbl09XCJ3aW5kb3cubWluaW1pemVkXCI+XHJcbiAgPGRpdiBjbGFzcz1cImRlc2t0b3Atd2luZG93LWhlYWRlclwiIFtuZ0NsYXNzXT1cInsnZGVza3RvcC13aW5kb3ctbWF4aW1pemVkJzogd2luZG93Lm1heGltaXplZCwgJ2Rlc2t0b3Atd2luZG93LW9wYWNpdHknOiAhd2luZG93LmFjdGl2ZX1cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyLXdpbmRvdy1uYXZpZ2F0aW9uXCI+XHJcbiAgICAgIDx0cnUtdG9vbGJhcj5cclxuICAgICAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIid0cnUtdG9vbGJhci1wcmV2aW91cy1pY29uJ1wiIFt0b29sdGlwXT1cIidHbyBCYWNrIE9uZSBWaWV3IC0gW0FsdCArIExlZnRdJ1wiIChjbGljayk9XCJwcmV2aW91c1ZpZXcoKVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDx0cnUtdG9vbGJhci1idXR0b24gW2ljb25dPVwiJ3RydS10b29sYmFyLW5leHQtaWNvbidcIiBbdG9vbHRpcF09XCInR28gRm9yd2FyZCBPbmUgVmlldyAtIFtBbHQgKyBSaWdodF0nXCIgKGNsaWNrKT1cIm5leHRWaWV3KClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIid0cnUtdG9vbGJhci1zYXZlLWljb24nXCIgY2xhc3M9XCJkZXNrdG9wLXdpbmRvdy1zYXZlLWljb25cIiBbbmdDbGFzc109XCJ7J2Rlc2t0b3Atd2luZG93LXNhdmUtaWNvbi1oYXMtY2hhbmdlcyc6IGhhc0NoYW5nZXMoKX1cIiBbdG9vbHRpcF09XCInU2F2ZSAtIFtDdHJsICsgU10nXCIgKGNsaWNrKT1cInNhdmUoKVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDx0cnUtdG9vbGJhci1idXR0b24gW2ljb25dPVwiJ3RydS10b29sYmFyLXJldmVydC1pY29uJ1wiIGNsYXNzPVwiZGVza3RvcC13aW5kb3ctcmV2ZXJ0LWljb25cIiBbbmdDbGFzc109XCJ7J2Rlc2t0b3Atd2luZG93LXJldmVydC1pY29uLWhhcy1jaGFuZ2VzJzogaGFzQ2hhbmdlcygpfVwiIFt0b29sdGlwXT1cIidSZXZlcnQgLSBbQ3RybCArIFNoaWZ0ICsgUl0nXCIgKGNsaWNrKT1cInJldmVydCgpXCI+PC90cnUtdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPHRydS10b29sYmFyLXNlcGFyYXRvcj48L3RydS10b29sYmFyLXNlcGFyYXRvcj5cclxuICAgICAgPC90cnUtdG9vbGJhcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImRlc2t0b3Atd2luZG93LXRpdGxlXCIgKGRibGNsaWNrKT1cIm1heGltaXplKClcIiAobW91c2Vkb3duKT1cIndpbmRvd1RpdGxlTW91c2VEb3duKCRldmVudClcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImRlc2t0b3AtY2xpY2stdGhyb3VnaFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkZXNrdG9wLXRleHRcIj57e3dpbmRvdy50aXRsZX19PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGVza3RvcC13aW5kb3ctYWN0aW9uXCI+XHJcbiAgICAgIDx0cnUtdG9vbGJhcj5cclxuICAgICAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIid0cnUtdG9vbGJhci1taW5pbWl6ZS1pY29uJ1wiIFt0b29sdGlwXT1cIidNaW5pbWl6ZSAtIFtBbHQgKyBOXSdcIiAoY2xpY2spPVwibWluaW1pemUoKVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDx0cnUtdG9vbGJhci1idXR0b24gKm5nSWY9XCIhd2luZG93Lm1heGltaXplZFwiIFtpY29uXT1cIid0cnUtdG9vbGJhci1tYXhpbWl6ZS1pY29uJ1wiIFt0b29sdGlwXT1cIidNYXhpbWl6ZSBXaW5kb3cgLSBbQWx0ICsgTV0nXCIgKGNsaWNrKT1cIm1heGltaXplKClcIiBjbGFzcz1cIm1heGltaXplXCI+PC90cnUtdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPHRydS10b29sYmFyLWJ1dHRvbiAqbmdJZj1cIndpbmRvdy5tYXhpbWl6ZWRcIiBbaWNvbl09XCIndHJ1LXRvb2xiYXItcmVzdG9yZS1pY29uJ1wiIFt0b29sdGlwXT1cIidSZXN0b3JlIFdpbmRvdyAtIFtBbHQgKyBNXSdcIiAoY2xpY2spPVwibWF4aW1pemUoKVwiIGNsYXNzPVwibWF4aW1pemVcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIid0cnUtdG9vbGJhci1jbG9zZS1pY29uJ1wiIFt0b29sdGlwXT1cIidDbG9zZSBXaW5kb3cgLSBbQWx0ICsgU0hJRlQgKyBYXSdcIiAoY2xpY2spPVwiY2xvc2UoKVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8L3RydS10b29sYmFyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGZpZWxkc2V0IG5nLWRpc2FibGVkPVwiIXdpbmRvdy5hY3RpdmVcIiBjbGFzcz1cImRlc2t0b3Atd2luZG93LWZpZWxkc2V0XCIgW25nQ2xhc3NdPVwieydkZXNrdG9wLXdpbmRvdy1vcGFjaXR5JzogIXdpbmRvdy5hY3RpdmV9XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGVza3RvcC13aW5kb3ctY29udGVudFwiPlxyXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB2aWV3IG9mIHdpbmRvdy52aWV3c1wiPlxyXG4gICAgICAgIDx0cnUtZGVza3RvcC12aWV3IFt2aWV3XT1cInZpZXdcIiBbYWN0aXZlXT1cInZpZXcuYWN0aXZlXCIgW2hpZGRlbl09XCIhdmlldy5hY3RpdmVcIj48bmctdGVtcGxhdGU+PC9uZy10ZW1wbGF0ZT48L3RydS1kZXNrdG9wLXZpZXc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9maWVsZHNldD5cclxuICA8c3BhbiBjbGFzcz1cImRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1oYW5kbGUgZGVza3RvcC13aW5kb3ctcmVzaXphYmxlLW53XCIgdHJ1LWRlc2t0b3AtcmVzaXphYmxlIFt3aW5kb3ddPVwid2luZG93XCIgKm5nSWY9XCIhd2luZG93Lm1heGltaXplZFwiIFtkaXJlY3Rpb25dPVwiJ253J1wiPjwvc3Bhbj5cclxuICA8c3BhbiBjbGFzcz1cImRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1oYW5kbGUgZGVza3RvcC13aW5kb3ctcmVzaXphYmxlLW5lXCIgdHJ1LWRlc2t0b3AtcmVzaXphYmxlIFt3aW5kb3ddPVwid2luZG93XCIgKm5nSWY9XCIhd2luZG93Lm1heGltaXplZFwiIFtkaXJlY3Rpb25dPVwiJ25lJ1wiPjwvc3Bhbj5cclxuICA8c3BhbiBjbGFzcz1cImRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1oYW5kbGUgZGVza3RvcC13aW5kb3ctcmVzaXphYmxlLXN3XCIgdHJ1LWRlc2t0b3AtcmVzaXphYmxlIFt3aW5kb3ddPVwid2luZG93XCIgKm5nSWY9XCIhd2luZG93Lm1heGltaXplZFwiIFtkaXJlY3Rpb25dPVwiJ3N3J1wiPjwvc3Bhbj5cclxuICA8c3BhbiBjbGFzcz1cImRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1oYW5kbGUgZGVza3RvcC13aW5kb3ctcmVzaXphYmxlLXNlXCIgdHJ1LWRlc2t0b3AtcmVzaXphYmxlIFt3aW5kb3ddPVwid2luZG93XCIgKm5nSWY9XCIhd2luZG93Lm1heGltaXplZFwiIFtkaXJlY3Rpb25dPVwiJ3NlJ1wiPjwvc3Bhbj5cclxuICA8c3BhbiBjbGFzcz1cImRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1oYW5kbGUgZGVza3RvcC13aW5kb3ctcmVzaXphYmxlLW5cIiB0cnUtZGVza3RvcC1yZXNpemFibGUgW3dpbmRvd109XCJ3aW5kb3dcIiAqbmdJZj1cIiF3aW5kb3cubWF4aW1pemVkXCIgW2RpcmVjdGlvbl09XCInbidcIj48L3NwYW4+XHJcbiAgPHNwYW4gY2xhc3M9XCJkZXNrdG9wLXdpbmRvdy1yZXNpemFibGUtaGFuZGxlIGRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1zXCIgdHJ1LWRlc2t0b3AtcmVzaXphYmxlIFt3aW5kb3ddPVwid2luZG93XCIgKm5nSWY9XCIhd2luZG93Lm1heGltaXplZFwiIFtkaXJlY3Rpb25dPVwiJ3MnXCI+PC9zcGFuPlxyXG4gIDxzcGFuIGNsYXNzPVwiZGVza3RvcC13aW5kb3ctcmVzaXphYmxlLWhhbmRsZSBkZXNrdG9wLXdpbmRvdy1yZXNpemFibGUtd1wiIHRydS1kZXNrdG9wLXJlc2l6YWJsZSBbd2luZG93XT1cIndpbmRvd1wiICpuZ0lmPVwiIXdpbmRvdy5tYXhpbWl6ZWRcIiBbZGlyZWN0aW9uXT1cIid3J1wiPjwvc3Bhbj5cclxuICA8c3BhbiBjbGFzcz1cImRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1oYW5kbGUgZGVza3RvcC13aW5kb3ctcmVzaXphYmxlLWVcIiB0cnUtZGVza3RvcC1yZXNpemFibGUgW3dpbmRvd109XCJ3aW5kb3dcIiAqbmdJZj1cIiF3aW5kb3cubWF4aW1pemVkXCIgW2RpcmVjdGlvbl09XCInZSdcIj48L3NwYW4+XHJcbjwvZGl2PlxyXG4iXX0=
463
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWRlc2t0b3Atd2luZG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1LWNvbW1vbi1saWIvc3JjL2xpYi9jb21wb25lbnRzL2Rlc2t0b3Avd2luZG93L3RydS1kZXNrdG9wLXdpbmRvdy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9kZXNrdG9wL3dpbmRvdy90cnUtZGVza3RvcC13aW5kb3cuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUF5QixLQUFLLEVBQWlDLE1BQU0sZUFBZSxDQUFDO0FBRXZHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUkxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFRcEUsTUFBTSxPQUFPLGdCQUFnQjtJQU1qQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQVhELE1BQU0sQ0FBTTtJQUNaLFlBQVksQ0FBTTtJQUNsQixXQUFXLENBQU07SUFFMUIsWUFDVSxXQUEyQixFQUMzQixjQUFpQyxFQUNqQyxXQUEyQixFQUMzQixxQkFBNEMsRUFDNUMsVUFBc0IsRUFDdEIsSUFBYSxFQUNiLEVBQXFCO1FBTnJCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQixtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFDakMsZ0JBQVcsR0FBWCxX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QUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRTlELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQzt1R0F0Y1UsZ0JBQWdCOzJGQUFoQixnQkFBZ0IscUlBRmhCLENBQUMsY0FBYyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQywwQkNqQjdILGdqSkErQ0E7OzJGRDVCYSxnQkFBZ0I7a0JBTjVCLFNBQVM7K0JBQ0Usb0JBQW9CLGFBR25CLENBQUMsY0FBYyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQzttUUFHbEgsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBJbnB1dCwgRWxlbWVudFJlZiwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFRydURhdGFDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdHJ1LWRhdGEtY29udGV4dCc7XG5pbXBvcnQgeyBUcnVFbnRpdHlBY2Nlc3NvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RydS1lbnRpdHktYWNjZXNzb3InO1xyXG5pbXBvcnQgeyBUcnVUZXh0TWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RydS10ZXh0LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBUcnVVaU5vdGlmaWNhdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RydS11aS1ub3RpZmljYXRpb24nO1xyXG5pbXBvcnQgeyBUcnVEZXNrdG9wVmlld0NvbmZpZyB9IGZyb20gJy4uL2NsYXNzZXMvdHJ1LWRlc2t0b3Atdmlldy1jb25maWcnO1xyXG5pbXBvcnQgeyBUcnVXaW5kb3dFdmVudEhhbmRsZXIgfSBmcm9tICcuLi9zZXJ2aWNlcy90cnUtd2luZG93LWV2ZW50LWhhbmRsZXInO1xuaW1wb3J0IHsgVHJ1QWN0aW9uSW52b2tlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdHJ1LWFjdGlvbi1pbnZva2UnO1xyXG5pbXBvcnQgeyBUcnVSZXBvcnRNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdHJ1LXJlcG9ydC1tYW5hZ2VyJztcclxuaW1wb3J0IHsgVHJ1VXRpbCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RydS11dGlsJztcclxuaW1wb3J0IHsgVHJ1RGVza3RvcE1hbmFnZXIgfSBmcm9tICcuLi9zZXJ2aWNlcy90cnUtZGVza3RvcC1tYW5hZ2VyJztcclxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0cnUtZGVza3RvcC13aW5kb3cnLFxuICB0ZW1wbGF0ZVVybDogJy4vdHJ1LWRlc2t0b3Atd2luZG93Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi4vdHJ1LWRlc2t0b3AuY3NzJywgJy4vdHJ1LWRlc2t0b3Atd2luZG93LmNzcyddLFxuICBwcm92aWRlcnM6IFtUcnVEYXRhQ29udGV4dCwgVHJ1RW50aXR5QWNjZXNzb3IsIFRydVdpbmRvd0V2ZW50SGFuZGxlciwgVHJ1UmVwb3J0TWFuYWdlciwgVHJ1QWN0aW9uSW52b2tlLCBUcnVEZXNrdG9wTWFuYWdlcl1cbn0pXG5leHBvcnQgY2xhc3MgVHJ1RGVza3RvcFdpbmRvdyBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIHdpbmRvdzogYW55O1xuICBASW5wdXQoKSB2aWV3cG9ydEN0cmw6IGFueTtcbiAgQElucHV0KCkgZGVza3RvcEN0cmw6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRhdGFDb250ZXh0OiBUcnVEYXRhQ29udGV4dCxcbiAgICBwcml2YXRlIHVpTm90aWZpY2F0aW9uOiBUcnVVaU5vdGlmaWNhdGlvbixcbiAgICBwcml2YXRlIHRleHRNYW5hZ2VyOiBUcnVUZXh0TWFuYWdlcixcbiAgICBwcml2YXRlIHRydVdpbmRvd0V2ZW50SGFuZGxlcjogVHJ1V2luZG93RXZlbnRIYW5kbGVyLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHV0aWw6IFRydVV0aWwsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgfVxuXG4gIHggPSAwO1xuICB5ID0gMDtcbiAgbGFzdFggPSAwO1xuICBsYXN0WSA9IDA7XG4gIHN0YXJ0WCA9IDA7XG4gIHN0YXJ0WSA9IDA7XG4gIHRpdGxlQmFyOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBjYW5DbG9zZUZuID0gdW5kZWZpbmVkO1xuICBjYW5OYXZpZ2F0ZUZuITogKCkgPT4gYm9vbGVhbjtcbiAgY2FuY2VsRWRpdGluZ09uTmF2aWdhdGlvbiA9IGZhbHNlO1xuICB2aWV3cG9ydERpbWVuc2lvbnM6IGFueSA9IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHN1YnM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcblxuICBoYXNDaGFuZ2VzID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmRhdGFDb250ZXh0Lmhhc0NoYW5nZXMoKS5sZW5ndGg7XHJcbiAgfVxuXG4gIG1vdXNlTW92ZSA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuXG4gICAgdGhpcy52aWV3cG9ydERpbWVuc2lvbnMgPSB0aGlzLnZpZXdwb3J0Q3RybC5nZXRWaWV3cG9ydERpbWVuc2lvbnMoKTtcbiAgICBpZiAoZXZlbnQucGFnZVggPD0gMCB8fFxuICAgICAgZXZlbnQucGFnZVggPj0gdGhpcy52aWV3cG9ydERpbWVuc2lvbnMud2lkdGggfHxcbiAgICAgIHRoaXMud2luZG93Lm1heGltaXplZCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMudGl0bGVCYXIgPT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgLy90aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ29wYWNpdHk6IDAuNTsnKTtcbiAgICB0aGlzLnggPSBldmVudC5zY3JlZW5YIC0gdGhpcy5zdGFydFg7XG4gICAgdGhpcy55ID0gZXZlbnQuc2NyZWVuWSAtIHRoaXMuc3RhcnRZO1xuXG4gICAgLy9Ub3AgQ29udGFpbm1lbnRcbiAgICB0aGlzLnkgPSB0aGlzLnkgPj0gMCA/IHRoaXMueSA6IDA7XG4gICAgLy9Cb3R0b20gQ29udGFpbm1lbnRcbiAgICB0aGlzLnkgPSB0aGlzLnkgPD0gdGhpcy52aWV3cG9ydERpbWVuc2lvbnMuaGVpZ2h0IC0gdGhpcy50aXRsZUJhci5vZmZzZXRIZWlnaHQgPyB0aGlzLnkgOiB0aGlzLnZpZXdwb3J0RGltZW5zaW9ucy5oZWlnaHQgLSB0aGlzLnRpdGxlQmFyLm9mZnNldEhlaWdodDtcblxuICAgIC8vTGVmdCBDb250YWlubWVudFxuICAgIHRoaXMueCA9IHRoaXMueCA+PSAtKHRoaXMudGl0bGVCYXIub2Zmc2V0V2lkdGggKyB0aGlzLnRpdGxlQmFyLm9mZnNldExlZnQpID8gdGhpcy54IDogLSh0aGlzLnRpdGxlQmFyLm9mZnNldFdpZHRoICsgdGhpcy50aXRsZUJhci5vZmZzZXRMZWZ0KTtcbiAgICAvL1JpZ2h0IENvbnRhaW5tZW50XG4gICAgdGhpcy54ID0gdGhpcy54IDw9IHRoaXMudmlld3BvcnREaW1lbnNpb25zLndpZHRoIC0gdGhpcy50aXRsZUJhci5vZmZzZXRMZWZ0ID8gdGhpcy54IDogdGhpcy52aWV3cG9ydERpbWVuc2lvbnMud2lkdGggLSB0aGlzLnRpdGxlQmFyLm9mZnNldExlZnQ7XG5cbiAgICB0aGlzLndpbmRvdy50b3AgPSB0aGlzLnkgKyAncHgnO1xuICAgIHRoaXMud2luZG93LmxlZnQgPSB0aGlzLnggKyAncHgnO1xuICB9O1xuXG4gIG1vdXNlVXAgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQucGFnZVkgPD0gdGhpcy5kZXNrdG9wQ3RybC5vcHRpb25zLnZpZXdwb3J0VG9wKSB7XG4gICAgICB0aGlzLmRlc2t0b3BDdHJsLm1heGltaXplKHRoaXMud2luZG93KTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LnBhZ2VYIDw9IDApIHtcbiAgICAgIHRoaXMuZGVza3RvcEN0cmwubWF4aW1pemVMZWZ0KHRoaXMud2luZG93KTtcbiAgICB9XG4gICAgdGhpcy52aWV3cG9ydERpbWVuc2lvbnMgPSB0aGlzLnZpZXdwb3J0Q3RybC5nZXRWaWV3cG9ydERpbWVuc2lvbnMoKTtcbiAgICBpZiAoZXZlbnQucGFnZVggPj0gdGhpcy52aWV3cG9ydERpbWVuc2lvbnMud2lkdGggLSAxKSB7XG4gICAgICB0aGlzLmRlc2t0b3BDdHJsLm1heGltaXplUmlnaHQodGhpcy53aW5kb3cpO1xuICAgIH1cblxuICAgIC8vdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdzdHlsZScsICdvcGFjaXR5OiAxLjA7Jyk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5tb3VzZU1vdmUpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm1vdXNlVXApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wV2luZG93Q29tcG9uZW50LnVwZGF0ZU5hdmlnYXRpb25TdGF0ZVxuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wLndpbmRvd1xuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVXBkYXRlcyB3aW5kb3cgbmF2aWdhdGlvbiBidXR0b25zIGJhc2VkIGxvY2F0aW9uIG9mIHRoZSBhY3RpdmUgdmlldyBpbiB0aGUgdmlld3MgYXJyYXkuXG4gICAqXG4gICAqL1xuICB1cGRhdGVOYXZpZ2F0aW9uU3RhdGUgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMud2luZG93LnZpZXdzID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy53aW5kb3cudmlld3MubGVuZ3RoO1xuICAgIHRoaXMuZGlzYWJsZVByZXZpb3VzID0gISEodGhpcy53aW5kb3cudmlld3NbMF0uYWN0aXZlIHx8IGxlbmd0aCA9PT0gMSk7XG4gICAgdGhpcy5kaXNhYmxlTmV4dCA9ICEhKHRoaXMud2luZG93LnZpZXdzW2xlbmd0aCAtIDFdLmFjdGl2ZSB8fCBsZW5ndGggPT09IDEpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wV2luZG93Q29tcG9uZW50LmlzV2luZG93SW5WaWV3cG9ydFxuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wLndpbmRvd1xuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgd2luZG93IGlzIHdpdGhpbiB0aGUgdmlld3BvcnQgYm91bmRhcmllcy5cbiAgICpcbiAgICovXG4gIGlzV2luZG93SW5WaWV3cG9ydCA9ICgpID0+IHtcbiAgICB2YXIgd2luZG93VG9wID0gMDtcbiAgICB2YXIgd2luZG93TGVmdCA9IDA7XG4gICAgaWYgKCF0aGlzLndpbmRvdy5taW5pbWl6ZWQpIHtcbiAgICAgIHdpbmRvd1RvcCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgIHdpbmRvd0xlZnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0O1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3dUb3AgPSBwYXJzZUludCh0aGlzLndpbmRvdy5zYXZlZFBvc2l0aW9uLnRvcCwgMTApO1xuICAgICAgd2luZG93TGVmdCA9IHBhcnNlSW50KHRoaXMud2luZG93LnNhdmVkUG9zaXRpb24ubGVmdCwgMTApO1xuICAgIH1cbiAgICBpZiAoKHdpbmRvd1RvcCArIDEwKSA+PSB0aGlzLnZpZXdwb3J0Q3RybC5nZXRWaWV3cG9ydERpbWVuc2lvbnMoKS5oZWlnaHQgfHxcbiAgICAgICh3aW5kb3dMZWZ0ICsgNjApID49IHRoaXMudmlld3BvcnRDdHJsLmdldFZpZXdwb3J0RGltZW5zaW9ucygpLndpZHRoKSB7XG4gICAgICB0aGlzLndpbmRvdy5vdXRPZkJvdW5kcyA9IHRydWU7XG4gICAgICB0aGlzLndpbmRvdy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGVza3RvcEN0cmwuYWN0aXZhdGVGb3JlbW9zdFdpbmRvdygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndpbmRvdy5vdXRPZkJvdW5kcyA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcFdpbmRvd0NvbXBvbmVudC5nZXRXaW5kb3dcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcC53aW5kb3dcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEdldHMgdGhlIHdpbmRvdyBvYmplY3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IHdpbmRvdyBvYmplY3QuXG4gICAqL1xuICBnZXRXaW5kb3cgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMud2luZG93O1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wV2luZG93Q29tcG9uZW50LnNldFdpbmRvd1RpdGxlXG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3Aud2luZG93XG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIHRoZSB3aW5kb3cgdGl0bGUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSB0byBkaXNwbGF5IGluIHRoZSB3aW5kb3cgdGl0bGUgYmFyLlxuICAgKi9cbiAgc2V0V2luZG93VGl0bGUgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgIHRoaXMud2luZG93LnRpdGxlID0gdmFsdWU7XG4gIH07XG5cbiAgZ2V0V2luZG93VGl0bGUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMud2luZG93LnRpdGxlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wV2luZG93Q29tcG9uZW50LmdvVG9QcmV2aW91c1ZpZXdcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcC53aW5kb3dcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFB1YmxpYyBtZXRob2QgZm9yIG5hdmlnYXRpbmcgdG8gdGhlIHByZXZpb3VzIHZpZXcuXG4gICAqXG4gICAqL1xuICBnb1RvUHJldmlvdXNWaWV3ID0gKCkgPT4ge1xuICAgIHRoaXMucHJldmlvdXNWaWV3KCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BXaW5kb3dDb21wb25lbnQudmlld0lzRWRpdGluZ1xuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wLndpbmRvd1xuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQ2hlY2tzIHdoZXRoZXIgdmlldyBpcyBlZGl0aW5nLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0uXG4gICAqL1xuICB2aWV3SXNFZGl0aW5nID0gKCkgPT4ge1xuICAgIHZhciBpc0VkaXRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLndpbmRvdy52aWV3cy5mb3JFYWNoKCh2aWV3OiBhbnkpID0+IHtcbiAgICAgIGlmICh2aWV3LmlzRWRpdGluZyA9PT0gdHJ1ZSkge1xuICAgICAgICBpc0VkaXRpbmcgPSB0cnVlO1xuICAgICAgfVxuICAgIH0sIG51bGwpO1xuICAgIHJldHVybiBpc0VkaXRpbmc7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BXaW5kb3dDb21wb25lbnQuY2FuTmF2aWdhdGVcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcC53aW5kb3dcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIENoZWNrcyB3aGV0aGVyIG5hdmlnYXRpb24gY2FuIG9jY3VyLi5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59LlxuICAgKi9cbiAgY2FuTmF2aWdhdGUgPSAoKSA9PiB7XG4gICAgdmFyIGNhbk5hdmlnYXRlID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5jYW5OYXZpZ2F0ZUZuICE9PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy52aWV3SXNFZGl0aW5nKCkpIHtcbiAgICAgICAgY2FuTmF2aWdhdGUgPSB0aGlzIS5jYW5OYXZpZ2F0ZUZuKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjYW5OYXZpZ2F0ZTtcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcFdpbmRvd0NvbXBvbmVudC5yZW1vdmVGb3J3YXJkVmlld3NcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcC53aW5kb3dcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFJlbW92ZXMgYWxsIHZpZXcocykgZm9yd2FyZCBvZiB0aGUgYWN0aXZlIHZpZXcuXG4gICAqXG4gICAqL1xuICByZW1vdmVGb3J3YXJkVmlld3MgPSAoKSA9PiB7XG4gICAgdmFyIGFjdGl2ZVZpZXcgPSB0aGlzLmRlc2t0b3BDdHJsLmdldEFjdGl2ZVZpZXcodGhpcy53aW5kb3cpO1xuICAgIHZhciBhY3RpdmVWaWV3SW5kZXggPSB0aGlzLndpbmRvdy52aWV3cy5pbmRleE9mKGFjdGl2ZVZpZXcpO1xuICAgIGZvciAodmFyIGkgPSB0aGlzLndpbmRvdy52aWV3cy5sZW5ndGg7IGkgPiBhY3RpdmVWaWV3SW5kZXg7IGktLSkge1xuICAgICAgdGhpcy53aW5kb3cudmlld3Muc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZU5hdmlnYXRpb25TdGF0ZSgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wV2luZG93Q29tcG9uZW50LmFkZFZpZXdcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcC53aW5kb3dcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFJlbW92ZXMgYWxsIGluYWN0aXZlIHZpZXcocykgZm9sbG93aW5nIHRoZSBhY3RpdmUgdmlldyBhbmQgaW5zZXJ0cyBhIG5ldyB2aWV3LlxuICAgKlxuICAgKi9cbiAgYWRkVmlldyA9ICh2aWV3Q29uZmlnOiBhbnkpID0+IHtcbiAgICB0aGlzLnJlbW92ZUZvcndhcmRWaWV3cygpO1xuICAgIHZhciBhY3RpdmVWaWV3ID0gdGhpcy5kZXNrdG9wQ3RybC5nZXRBY3RpdmVWaWV3KHRoaXMud2luZG93KTtcbiAgICBhY3RpdmVWaWV3LmFjdGl2ZSA9IGZhbHNlO1xuICAgIHZpZXdDb25maWcud2luZG93ID0gdGhpcztcbiAgICB0aGlzLndpbmRvdy52aWV3cy5wdXNoKHZpZXdDb25maWcpO1xuICAgIHRoaXMudXBkYXRlTmF2aWdhdGlvblN0YXRlKCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BXaW5kb3dDb21wb25lbnQuZ2V0R2xvYmFsc1xuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wLndpbmRvd1xuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogcmV0dXJucyB0aGUgZ2xvYmFsIHZhbHVlcy5cbiAgICpcbiAgICovXG4gIGdldEdsb2JhbHMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMud2luZG93Lmdsb2JhbHM7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BXaW5kb3dDb21wb25lbnQuZmlyc3RWaWV3XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3Aud2luZG93XG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKi9cbiAgZmlyc3RWaWV3ID0gKCkgPT4ge1xuICAgIGlmICghdGhpcy5jYW5OYXZpZ2F0ZSgpIHx8IHRoaXMuZGlzYWJsZVByZXZpb3VzKSByZXR1cm47XG4gICAgaWYgKHRoaXMuY2FuY2VsRWRpdGluZ09uTmF2aWdhdGlvbikgdGhpcy5kZXNrdG9wQ3RybC5nZXRBY3RpdmVWaWV3KHRoaXMud2luZG93KS5pc0VkaXRpbmcgPSBmYWxzZTtcbiAgICBsZXQgYWN0aXZlVmlldyA9IHRoaXMuZGVza3RvcEN0cmwuZ2V0QWN0aXZlVmlldyh0aGlzLndpbmRvdyk7XG4gICAgYWN0aXZlVmlldy5hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLndpbmRvdy52aWV3c1swXS5hY3RpdmUgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlTmF2aWdhdGlvblN0YXRlKCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BXaW5kb3dDb21wb25lbnQuZmlyc3RWaWV3XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3Aud2luZG93XG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKi9cbiAgbGFzdFZpZXcgPSAoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmNhbk5hdmlnYXRlKCkgfHwgdGhpcy5kaXNhYmxlTmV4dCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmNhbmNlbEVkaXRpbmdPbk5hdmlnYXRpb24pIHRoaXMuZGVza3RvcEN0cmwuZ2V0QWN0aXZlVmlldyh0aGlzLndpbmRvdykuaXNFZGl0aW5nID0gZmFsc2U7XG4gICAgbGV0IGFjdGl2ZVZpZXcgPSB0aGlzLmRlc2t0b3BDdHJsLmdldEFjdGl2ZVZpZXcodGhpcy53aW5kb3cpO1xuICAgIGFjdGl2ZVZpZXcuYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy53aW5kb3cudmlld3NbdGhpcy53aW5kb3cudmlld3MubGVuZ3RoIC0gMV0uYWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLnVwZGF0ZU5hdmlnYXRpb25TdGF0ZSgpO1xuICB9OztcblxuICByZXNpemVFdmVudEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgdGhpcy5pc1dpbmRvd0luVmlld3BvcnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBldmVudFxuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wLndpbmRvd1xuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICovXG4gIG9uV2luZG93S2V5ZG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIGlmICghdGhpcy53aW5kb3cuYWN0aXZlKSByZXR1cm47XG4gICAgdmFyIGtleVNlcXVlbmNlID0gdGhpcy51dGlsLmdldEtleVNlcXVlbmNlKGV2ZW50KTtcbiAgICBpZiAoa2V5U2VxdWVuY2UgPT09ICdjdHJsK3MnIHx8IGtleVNlcXVlbmNlID09PSAnbWV0YStzJykgeyAvL1NhdmVcbiAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKGtleVNlcXVlbmNlID09PSAnY3RybCtzaGlmdCtyJyB8fCBrZXlTZXF1ZW5jZSA9PT0gJ21ldGErc2hpZnQrcicpIHsgLy9SZXN0b3JlXG4gICAgICB0aGlzLnJldmVydCgpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKGtleVNlcXVlbmNlID09PSAnYWx0K2xlZnQnKSB7IC8vUHJldmlvdXMgVmlld1xuICAgICAgdGhpcy5wcmV2aW91c1ZpZXcoKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChrZXlTZXF1ZW5jZSA9PT0gJ2FsdCtyaWdodCcpIHsgLy9OZXh0IFZpZXdcbiAgICAgIHRoaXMubmV4dFZpZXcoKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChrZXlTZXF1ZW5jZSA9PT0gJ2FsdCt1cCcpIHsgLy9GaXJzdCBWaWV3XG4gICAgICB0aGlzLmZpcnN0VmlldygpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKGtleVNlcXVlbmNlID09PSAnYWx0K2Rvd24nKSB7IC8vTGFzdCBWaWV3XG4gICAgICB0aGlzLmxhc3RWaWV3KCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICB2YXIgdGFyZ2V0SXNDb250cm9sID0gdGhpcy51dGlsLnRhcmdldElzQ29udHJvbChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuICAgIGlmICghdGFyZ2V0SXNDb250cm9sICYmIGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5KVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2Mgd2F0Y2hcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcC53aW5kb3dcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIE1vbml0b3JzIHRoZSB3aW5kb3cncyBtaW5pbWl6ZWQgc3RhdGVcbiAgICpcbiAgICovXG4gIC8vJHNjb3BlLiR3YXRjaCgnd2luZG93Lm1pbmltaXplZCcsXG4gIC8vICAgICAgICAgICAgICBmdW5jdGlvbih2YWx1ZSkge1xuICAvLyAgaWYgKHZhbHVlICYmICEkc2NvcGUud2luZG93Lm1heGltaXplZCkge1xuICAvLyAgICAkc2NvcGUuZGVza3RvcEN0cmwuc2F2ZVBvc2l0aW9uKCRzY29wZS53aW5kb3cpO1xuICAvLyAgfVxuICAvL31cbiAgLy8gICAgICAgICAgKTtcblxuICBkaXNhYmxlUHJldmlvdXMgPSB0cnVlO1xuICBkaXNhYmxlTmV4dCA9IHRydWU7XG5cbiAgYWN0aXZhdGUgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMud2luZG93Lm91dE9mQm91bmRzKSByZXR1cm47XG4gICAgdGhpcy5kZXNrdG9wQ3RybC5jbGVhckFjdGl2ZSgpO1xuICAgIHRoaXMud2luZG93LmFjdGl2ZSA9IHRydWU7XG4gICAgdGhpcy53aW5kb3cuekluZGV4ID0gdGhpcy5kZXNrdG9wQ3RybC5nZXROZXh0TWF4WkluZGV4KCk7XG4gIH07XG5cbiAgbWluaW1pemUgPSAoKSA9PiB7XG4gICAgdGhpcy5kZXNrdG9wQ3RybC5taW5pbWl6ZSh0aGlzLndpbmRvdyk7XG4gIH07XG5cbiAgbWF4aW1pemUgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMud2luZG93Lm1heGltaXplZCkge1xuICAgICAgdGhpcy5kZXNrdG9wQ3RybC5yZXN0b3JlU2F2ZWRQb3NpdGlvbih0aGlzLndpbmRvdyk7XG4gICAgICB0aGlzLndpbmRvdy5tYXhpbWl6ZWQgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVza3RvcEN0cmwuc2F2ZVBvc2l0aW9uKHRoaXMud2luZG93KTtcbiAgICAgIHRoaXMuZGVza3RvcEN0cmwubWF4aW1pemUodGhpcy53aW5kb3cpO1xuICAgIH1cbiAgfTtcblxuICBjbG9zZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5oYXNDaGFuZ2VzKCkpXG4gICAgICB0aGlzLnVpTm90aWZpY2F0aW9uLmNvbmZpcm0oJ0NvbmZpcm0gQWN0aW9uJywgdGhpcy50ZXh0TWFuYWdlci5tc2dEaXJ0eVByZXZlbnRzQ2xvc2UsIGZhbHNlLCB0cnVlLCAnJywgJ09rJykudGhlbigoY29uZmlybTogYm9vbGVhbikgPT4ge30pO1xuICAgIGVsc2VcbiAgICAgIHRoaXMuZGVza3RvcEN0cmwuY2xvc2VXaW5kb3codGhpcy53aW5kb3cpO1xuICB9O1xuXG4gIHdpbmRvd1RpdGxlTW91c2VEb3duID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgaWYgKHRoaXMud2luZG93Lm1heGltaXplZCkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy50aXRsZUJhciA9IGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTEVsZW1lbnQgfHwgZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIHRoaXMueCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdLm9mZnNldExlZnQ7XG4gICAgdGhpcy55ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0ub2Zmc2V0VG9wO1xuICAgIHRoaXMuc3RhcnRYID0gZXZlbnQuc2NyZWVuWCAtIHRoaXMueDtcbiAgICB0aGlzLnN0YXJ0WSA9IGV2ZW50LnNjcmVlblkgLSB0aGlzLnk7XG5cbiAgICB0aGlzLmRlc2t0b3BDdHJsLnNhdmVQb3NpdGlvbih0aGlzLndpbmRvdyk7XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm1vdXNlTW92ZSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMubW91c2VVcCk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZXNpemVFdmVudEhhbmRsZXIpO1xuICB9O1xuXG4gIHByZXZpb3VzVmlldyA9ICgpID0+IHtcbiAgICBpZiAoIXRoaXMuY2FuTmF2aWdhdGUoKSB8fCB0aGlzLmRpc2FibGVQcmV2aW91cykgcmV0dXJuO1xuICAgIHZhciBhY3RpdmVWaWV3ID0gdGhpcy5kZXNrdG9wQ3RybC5nZXRBY3RpdmVWaWV3KHRoaXMud2luZG93KTtcbiAgICB2YXIgYWN0aXZlVmlld0luZGV4ID0gdGhpcy53aW5kb3cudmlld3MuaW5kZXhPZihhY3RpdmVWaWV3KTtcbiAgICBpZiAodGhpcy5jYW5jZWxFZGl0aW5nT25OYXZpZ2F0aW9uKSBhY3RpdmVWaWV3LmlzRWRpdGluZyA9IGZhbHNlO1xuICAgIGFjdGl2ZVZpZXcuYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy53aW5kb3cudmlld3NbYWN0aXZlVmlld0luZGV4IC0gMV0uYWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLnVwZGF0ZU5hdmlnYXRpb25TdGF0ZSgpO1xuICB9O1xuXG4gIG5leHRWaWV3ID0gKCkgPT4ge1xuICAgIGlmICghdGhpcy5jYW5OYXZpZ2F0ZSgpIHx8IHRoaXMuZGlzYWJsZU5leHQpIHJldHVybjtcbiAgICB2YXIgYWN0aXZlVmlldyA9IHRoaXMuZGVza3RvcEN0cmwuZ2V0QWN0aXZlVmlldyh0aGlzLndpbmRvdyk7XG4gICAgdmFyIGFjdGl2ZVZpZXdJbmRleCA9IHRoaXMud2luZG93LnZpZXdzLmluZGV4T2YoYWN0aXZlVmlldyk7XG4gICAgaWYgKHRoaXMuY2FuY2VsRWRpdGluZ09uTmF2aWdhdGlvbikgYWN0aXZlVmlldy5pc0VkaXRpbmcgPSBmYWxzZTtcbiAgICBhY3RpdmVWaWV3LmFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMud2luZG93LnZpZXdzW2FjdGl2ZVZpZXdJbmRleCArIDFdLmFjdGl2ZSA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uU3RhdGUoKTtcbiAgfTtcblxuICBzYXZlID0gKCkgPT4ge1xuICAgIHRoaXMuZGF0YUNvbnRleHQuc2F2ZSgpO1xuICB9O1xuXG4gIHJldmVydCA9ICgpID0+IHtcbiAgICB0aGlzLmRhdGFDb250ZXh0LnJldmVydCgpO1xuICB9O1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2FuQ2xvc2VGbiA9IHRoaXMuZGVza3RvcEN0cmwuZ2V0T3B0aW9ucygpLmNhbkNsb3NlRm47XG4gICAgdGhpcy5jYW5OYXZpZ2F0ZUZuID0gdGhpcy5kZXNrdG9wQ3RybC5nZXRPcHRpb25zKCkuY2FuTmF2aWdhdGVGbjtcbiAgICB0aGlzLmNhbmNlbEVkaXRpbmdPbk5hdmlnYXRpb24gPSB0aGlzLmRlc2t0b3BDdHJsLmdldE9wdGlvbnMoKS5jYW5jZWxFZGl0aW5nT25OYXZpZ2F0aW9uO1xuICAgIHRoaXMudXBkYXRlTmF2aWdhdGlvblN0YXRlKCk7XG5cbiAgICB0aGlzLnN1YnMucHVzaCh0aGlzLnRydVdpbmRvd0V2ZW50SGFuZGxlci5vbkFkZFZpZXcoKS5zdWJzY3JpYmUoKHdpbmRpb3dBZGRWaWV3RXZlbnQ6IFRydURlc2t0b3BWaWV3Q29uZmlnKSA9PiB7XHJcbiAgICAgIHRoaXMuYWRkVmlldyh3aW5kaW93QWRkVmlld0V2ZW50KTtcclxuICAgIH0pKTtcblxuICAgIHRoaXMuc3Vicy5wdXNoKHRoaXMudHJ1V2luZG93RXZlbnRIYW5kbGVyLm9uU2V0V2luZG93VGl0bGUoKS5zdWJzY3JpYmUoKHdpbmRvd1RpdGxlOiBzdHJpbmcpID0+IHtcclxuICAgICAgdGhpcy5zZXRXaW5kb3dUaXRsZSh3aW5kb3dUaXRsZSk7XHJcbiAgICB9KSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25XaW5kb3dLZXlkb3duKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm1vdXNlTW92ZSk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMubW91c2VVcCk7XG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25XaW5kb3dLZXlkb3duKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZXNpemVFdmVudEhhbmRsZXIpO1xuXG4gICAgdGhpcy5zdWJzLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGVza3RvcC13aW5kb3ctY29udGFpbmVyXCJcclxuICAgICBbbmdDbGFzc109XCJ7J2Rlc2t0b3Atd2luZG93LWFjdGl2ZSc6IHdpbmRvdy5hY3RpdmUsICdkZXNrdG9wLXdpbmRvdy1tYXhpbWl6ZWQnOiB3aW5kb3cubWF4aW1pemVkfVwiXHJcbiAgICAgW25nU3R5bGVdPVwieyd6LWluZGV4Jzogd2luZG93LnpJbmRleCwgJ3RvcCc6IHdpbmRvdy50b3AsICdsZWZ0Jzogd2luZG93LmxlZnQsICdyaWdodCc6IHdpbmRvdy5yaWdodCwgJ2JvdHRvbSc6IHdpbmRvdy5ib3R0b20sICdoZWlnaHQnOiB3aW5kb3cuaGVpZ2h0LCAnd2lkdGgnOiB3aW5kb3cud2lkdGgsICdtaW4taGVpZ2h0Jzogd2luZG93Lm1pbkhlaWdodCwgJ21pbldpZHRoJzogd2luZG93Lm1pbldpZHRofVwiXHJcbiAgICAgW3N0eWxlLm9mZnNldExlZnQucHhdPVwieFwiXHJcbiAgICAgW3N0eWxlLm9mZnNldFRvcC5weF09XCJ5XCJcclxuICAgICAobW91c2Vkb3duKT1cImFjdGl2YXRlKClcIlxyXG4gICAgIFtoaWRkZW5dPVwid2luZG93Lm1pbmltaXplZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJkZXNrdG9wLXdpbmRvdy1oZWFkZXJcIiBbbmdDbGFzc109XCJ7J2Rlc2t0b3Atd2luZG93LW1heGltaXplZCc6IHdpbmRvdy5tYXhpbWl6ZWQsICdkZXNrdG9wLXdpbmRvdy1vcGFjaXR5JzogIXdpbmRvdy5hY3RpdmV9XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci13aW5kb3ctbmF2aWdhdGlvblwiPlxyXG4gICAgICA8dHJ1LXRvb2xiYXI+XHJcbiAgICAgICAgPHRydS10b29sYmFyLWJ1dHRvbiBbaWNvbl09XCIndHJ1LXRvb2xiYXItcHJldmlvdXMtaWNvbidcIiBbdG9vbHRpcF09XCInR28gQmFjayBPbmUgVmlldyAtIFtBbHQgKyBMZWZ0XSdcIiAoY2xpY2spPVwicHJldmlvdXNWaWV3KClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIid0cnUtdG9vbGJhci1uZXh0LWljb24nXCIgW3Rvb2x0aXBdPVwiJ0dvIEZvcndhcmQgT25lIFZpZXcgLSBbQWx0ICsgUmlnaHRdJ1wiIChjbGljayk9XCJuZXh0VmlldygpXCI+PC90cnUtdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPHRydS10b29sYmFyLWJ1dHRvbiBbaWNvbl09XCIndHJ1LXRvb2xiYXItc2F2ZS1pY29uJ1wiIGNsYXNzPVwiZGVza3RvcC13aW5kb3ctc2F2ZS1pY29uXCIgW25nQ2xhc3NdPVwieydkZXNrdG9wLXdpbmRvdy1zYXZlLWljb24taGFzLWNoYW5nZXMnOiBoYXNDaGFuZ2VzKCl9XCIgW3Rvb2x0aXBdPVwiJ1NhdmUgLSBbQ3RybCArIFNdJ1wiIChjbGljayk9XCJzYXZlKClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIid0cnUtdG9vbGJhci1yZXZlcnQtaWNvbidcIiBjbGFzcz1cImRlc2t0b3Atd2luZG93LXJldmVydC1pY29uXCIgW25nQ2xhc3NdPVwieydkZXNrdG9wLXdpbmRvdy1yZXZlcnQtaWNvbi1oYXMtY2hhbmdlcyc6IGhhc0NoYW5nZXMoKX1cIiBbdG9vbHRpcF09XCInUmV2ZXJ0IC0gW0N0cmwgKyBTaGlmdCArIFJdJ1wiIChjbGljayk9XCJyZXZlcnQoKVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDx0cnUtdG9vbGJhci1zZXBhcmF0b3I+PC90cnUtdG9vbGJhci1zZXBhcmF0b3I+XHJcbiAgICAgIDwvdHJ1LXRvb2xiYXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkZXNrdG9wLXdpbmRvdy10aXRsZVwiIChkYmxjbGljayk9XCJtYXhpbWl6ZSgpXCIgKG1vdXNlZG93bik9XCJ3aW5kb3dUaXRsZU1vdXNlRG93bigkZXZlbnQpXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkZXNrdG9wLWNsaWNrLXRocm91Z2hcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGVza3RvcC10ZXh0XCI+e3t3aW5kb3cudGl0bGV9fTwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImRlc2t0b3Atd2luZG93LWFjdGlvblwiPlxyXG4gICAgICA8dHJ1LXRvb2xiYXI+XHJcbiAgICAgICAgPHRydS10b29sYmFyLWJ1dHRvbiBbaWNvbl09XCIndHJ1LXRvb2xiYXItbWluaW1pemUtaWNvbidcIiBbdG9vbHRpcF09XCInTWluaW1pemUgLSBbQWx0ICsgTl0nXCIgKGNsaWNrKT1cIm1pbmltaXplKClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8dHJ1LXRvb2xiYXItYnV0dG9uICpuZ0lmPVwiIXdpbmRvdy5tYXhpbWl6ZWRcIiBbaWNvbl09XCIndHJ1LXRvb2xiYXItbWF4aW1pemUtaWNvbidcIiBbdG9vbHRpcF09XCInTWF4aW1pemUgV2luZG93IC0gW0FsdCArIE1dJ1wiIChjbGljayk9XCJtYXhpbWl6ZSgpXCIgY2xhc3M9XCJtYXhpbWl6ZVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDx0cnUtdG9vbGJhci1idXR0b24gKm5nSWY9XCJ3aW5kb3cubWF4aW1pemVkXCIgW2ljb25dPVwiJ3RydS10b29sYmFyLXJlc3RvcmUtaWNvbidcIiBbdG9vbHRpcF09XCInUmVzdG9yZSBXaW5kb3cgLSBbQWx0ICsgTV0nXCIgKGNsaWNrKT1cIm1heGltaXplKClcIiBjbGFzcz1cIm1heGltaXplXCI+PC90cnUtdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPHRydS10b29sYmFyLWJ1dHRvbiBbaWNvbl09XCIndHJ1LXRvb2xiYXItY2xvc2UtaWNvbidcIiBbdG9vbHRpcF09XCInQ2xvc2UgV2luZG93IC0gW0FsdCArIFNISUZUICsgWF0nXCIgKGNsaWNrKT1cImNsb3NlKClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPC90cnUtdG9vbGJhcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxmaWVsZHNldCBuZy1kaXNhYmxlZD1cIiF3aW5kb3cuYWN0aXZlXCIgY2xhc3M9XCJkZXNrdG9wLXdpbmRvdy1maWVsZHNldFwiIFtuZ0NsYXNzXT1cInsnZGVza3RvcC13aW5kb3ctb3BhY2l0eSc6ICF3aW5kb3cuYWN0aXZlfVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImRlc2t0b3Atd2luZG93LWNvbnRlbnRcIj5cclxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdmlldyBvZiB3aW5kb3cudmlld3NcIj5cclxuICAgICAgICA8dHJ1LWRlc2t0b3AtdmlldyBbdmlld109XCJ2aWV3XCIgW2FjdGl2ZV09XCJ2aWV3LmFjdGl2ZVwiIFtoaWRkZW5dPVwiIXZpZXcuYWN0aXZlXCI+PG5nLXRlbXBsYXRlPjwvbmctdGVtcGxhdGU+PC90cnUtZGVza3RvcC12aWV3PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZmllbGRzZXQ+XHJcbiAgPHNwYW4gY2xhc3M9XCJkZXNrdG9wLXdpbmRvdy1yZXNpemFibGUtaGFuZGxlIGRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1ud1wiIHRydS1kZXNrdG9wLXJlc2l6YWJsZSBbd2luZG93XT1cIndpbmRvd1wiICpuZ0lmPVwiIXdpbmRvdy5tYXhpbWl6ZWRcIiBbZGlyZWN0aW9uXT1cIidudydcIj48L3NwYW4+XHJcbiAgPHNwYW4gY2xhc3M9XCJkZXNrdG9wLXdpbmRvdy1yZXNpemFibGUtaGFuZGxlIGRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1uZVwiIHRydS1kZXNrdG9wLXJlc2l6YWJsZSBbd2luZG93XT1cIndpbmRvd1wiICpuZ0lmPVwiIXdpbmRvdy5tYXhpbWl6ZWRcIiBbZGlyZWN0aW9uXT1cIiduZSdcIj48L3NwYW4+XHJcbiAgPHNwYW4gY2xhc3M9XCJkZXNrdG9wLXdpbmRvdy1yZXNpemFibGUtaGFuZGxlIGRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1zd1wiIHRydS1kZXNrdG9wLXJlc2l6YWJsZSBbd2luZG93XT1cIndpbmRvd1wiICpuZ0lmPVwiIXdpbmRvdy5tYXhpbWl6ZWRcIiBbZGlyZWN0aW9uXT1cIidzdydcIj48L3NwYW4+XHJcbiAgPHNwYW4gY2xhc3M9XCJkZXNrdG9wLXdpbmRvdy1yZXNpemFibGUtaGFuZGxlIGRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1zZVwiIHRydS1kZXNrdG9wLXJlc2l6YWJsZSBbd2luZG93XT1cIndpbmRvd1wiICpuZ0lmPVwiIXdpbmRvdy5tYXhpbWl6ZWRcIiBbZGlyZWN0aW9uXT1cIidzZSdcIj48L3NwYW4+XHJcbiAgPHNwYW4gY2xhc3M9XCJkZXNrdG9wLXdpbmRvdy1yZXNpemFibGUtaGFuZGxlIGRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1uXCIgdHJ1LWRlc2t0b3AtcmVzaXphYmxlIFt3aW5kb3ddPVwid2luZG93XCIgKm5nSWY9XCIhd2luZG93Lm1heGltaXplZFwiIFtkaXJlY3Rpb25dPVwiJ24nXCI+PC9zcGFuPlxyXG4gIDxzcGFuIGNsYXNzPVwiZGVza3RvcC13aW5kb3ctcmVzaXphYmxlLWhhbmRsZSBkZXNrdG9wLXdpbmRvdy1yZXNpemFibGUtc1wiIHRydS1kZXNrdG9wLXJlc2l6YWJsZSBbd2luZG93XT1cIndpbmRvd1wiICpuZ0lmPVwiIXdpbmRvdy5tYXhpbWl6ZWRcIiBbZGlyZWN0aW9uXT1cIidzJ1wiPjwvc3Bhbj5cclxuICA8c3BhbiBjbGFzcz1cImRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1oYW5kbGUgZGVza3RvcC13aW5kb3ctcmVzaXphYmxlLXdcIiB0cnUtZGVza3RvcC1yZXNpemFibGUgW3dpbmRvd109XCJ3aW5kb3dcIiAqbmdJZj1cIiF3aW5kb3cubWF4aW1pemVkXCIgW2RpcmVjdGlvbl09XCIndydcIj48L3NwYW4+XHJcbiAgPHNwYW4gY2xhc3M9XCJkZXNrdG9wLXdpbmRvdy1yZXNpemFibGUtaGFuZGxlIGRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1lXCIgdHJ1LWRlc2t0b3AtcmVzaXphYmxlIFt3aW5kb3ddPVwid2luZG93XCIgKm5nSWY9XCIhd2luZG93Lm1heGltaXplZFwiIFtkaXJlY3Rpb25dPVwiJ2UnXCI+PC9zcGFuPlxyXG48L2Rpdj5cclxuIl19