@c8y/ngx-components 1007.0.43 → 1007.0.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/c8y-ngx-components.umd.js +5 -2
- package/bundles/c8y-ngx-components.umd.js.map +1 -1
- package/bundles/c8y-ngx-components.umd.min.js +1 -1
- package/bundles/c8y-ngx-components.umd.min.js.map +1 -1
- package/c8y-ngx-components.metadata.json +1 -1
- package/core/dashboard/dashboard-child.component.d.ts +1 -0
- package/esm2015/core/dashboard/dashboard-child.component.js +5 -1
- package/esm2015/core/data-grid/data-grid.component.js +2 -2
- package/esm5/core/dashboard/dashboard-child.component.js +5 -2
- package/esm5/core/data-grid/data-grid.component.js +2 -2
- package/fesm2015/c8y-ngx-components.js +5 -1
- package/fesm2015/c8y-ngx-components.js.map +1 -1
- package/fesm5/c8y-ngx-components.js +5 -2
- package/fesm5/c8y-ngx-components.js.map +1 -1
- package/locales/ja_JP.po +5 -5
- package/package.json +2 -2
|
@@ -136,5 +136,6 @@ export declare class DashboardChildComponent implements DashboardChildDimension
|
|
|
136
136
|
resizeStarted($event: CdkDragStart): void;
|
|
137
137
|
dragStarted($event: CdkDragStart): void;
|
|
138
138
|
reset($event?: CdkDragEnd): void;
|
|
139
|
+
private getOrder;
|
|
139
140
|
private childInView;
|
|
140
141
|
}
|
|
@@ -126,6 +126,7 @@ let DashboardChildComponent = class DashboardChildComponent {
|
|
|
126
126
|
-ms-grid-row-span: ${this.height};
|
|
127
127
|
display: block;
|
|
128
128
|
margin: ${this.margin || 12}px;
|
|
129
|
+
order: ${this.getOrder()};
|
|
129
130
|
`);
|
|
130
131
|
}
|
|
131
132
|
ngOnChanges() {
|
|
@@ -181,6 +182,9 @@ let DashboardChildComponent = class DashboardChildComponent {
|
|
|
181
182
|
this.changeEnd.emit(this);
|
|
182
183
|
}
|
|
183
184
|
}
|
|
185
|
+
getOrder() {
|
|
186
|
+
return `${Math.round((this.y + (this.x + 1) / 100) * 100)}`;
|
|
187
|
+
}
|
|
184
188
|
childInView(event, observer) {
|
|
185
189
|
if (event.isIntersecting) {
|
|
186
190
|
observer.unobserve(event.target);
|
|
@@ -244,4 +248,4 @@ DashboardChildComponent = tslib_1.__decorate([
|
|
|
244
248
|
tslib_1.__param(0, Inject(forwardRef(() => DashboardComponent)))
|
|
245
249
|
], DashboardChildComponent);
|
|
246
250
|
export { DashboardChildComponent };
|
|
247
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLWNoaWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BjOHkvbmd4LWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb3JlL2Rhc2hib2FyZC9kYXNoYm9hcmQtY2hpbGQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxlQUFlLEVBQ2YsTUFBTSxFQUNOLFlBQVksRUFDWixVQUFVLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXpELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRW5GOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRDRztBQVFILElBQWEsdUJBQXVCLEdBQXBDLE1BQWEsdUJBQXVCO0lBZ0hsQyxZQUN1RCxTQUE2QixFQUMxRSxTQUF1QixFQUN2QixPQUFtQjtRQUYwQixjQUFTLEdBQVQsU0FBUyxDQUFvQjtRQUMxRSxjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFsSG1CLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFFN0QsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFFYixhQUFRLEdBQUcsTUFBTSxDQUFDO1FBQ2xCLGNBQVMsR0FBRyxNQUFNLENBQUM7UUFZbkI7O1dBRUc7UUFDTSxVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRW5COztXQUVHO1FBQ00sV0FBTSxH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LENBQUM7SUFrSEcsbUJBQUEsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUE7R0FqSHBDLHVCQUF1QixDQStMbkM7U0EvTFksdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZywgQ2RrRHJhZ0VuZCwgQ2RrRHJhZ1N0YXJ0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBFbGVtZW50UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERhc2hib2FyZENvbXBvbmVudCB9IGZyb20gJy4vZGFzaGJvYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDaGlsZERpbWVuc2lvbiwgV2lkZ2V0IH0gZnJvbSAnLi9kYXNoYm9hcmQubW9kZWwnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQ2hpbGRDaGFuZ2UgfSBmcm9tICcuL2Rhc2hib2FyZC1jaGlsZC1jaGFuZ2UnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQ2hpbGRBY3Rpb25Db21wb25lbnQgfSBmcm9tICcuL2Rhc2hib2FyZC1jaGlsZC1hY3Rpb24uY29tcG9uZW50JztcblxuLyoqXG4gKiBBIGRhc2hib2FyZCBjaGlsZCBhbGxvd3MgdG8gcG9zaXRpb24gZWxlbWVudHNcbiAqIGNvcnJlY3RseSBvbiBhIGdyaWQuIFRoZSB1c2VyIGNhbiB0aGVuIHJlc2l6ZSBhbmRcbiAqIHJlYXJyYW5nZSB0aGUgZWxlbWVudHMsIGFzIGxvbmcgYXMgdGhleSBhcmUgbm90IGBmcm96ZW5gLlxuICpcbiAqIEJ5IHNldHRpbmcgYGM4eS1kYXNoYm9hcmQtY2hpbGQtYWN0aW9uc2AgYW5kXG4gKiBgYzh5LWRhc2hib2FyZC1jaGlsZC10aXRsZWAgb24gdGhlIGVsZW1lbnQgeW91IGNhbiBhZGRcbiAqIGN1c3RvbSBhY3Rpb25zIG9yIGEgY3VzdG9tIHRpdGxlIHRvIHRoZSBjdXJyZW50IGNoaWxkLlxuICpcbiAqIEJ5IGFkZGluZyB0aGUgY29ycmVjdCBicmFuZGVkIGNsYXNzZXMsIHlvdSBjYW4gZGVmaW5lXG4gKiB0aGUgbG9vayBhbmQgZmVlbCBvZiB0aGUgY2hpbGQuIEJ5IGRlZmF1bHQgaXQgaXMgZGlzcGxheWVkXG4gKiBhcyBhIGNhcmQuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBodG1sXG4gKiAgIDxjOHktZGFzaGJvYXJkLWNoaWxkXG4gKiAgICAgI2NwV2lkZ2V0M1xuICogICAgIFtpc0Zyb3plbl09XCJpc0Zyb3plblwiXG4gKiAgICAgW3hdPVwiMFwiXG4gKiAgICAgW3ldPVwiM1wiXG4gKiAgICAgW3dpZHRoXT1cIjRcIlxuICogICAgIFtoZWlnaHRdPVwiNFwiXG4gKiAgICAgW2NsYXNzXT1cIidjYXJkLWRhc2hib2FyZCBwYW5lbC1jb250ZW50LXRyYW5zcGFyZW50J1wiXG4gKiAgID5cbiAqICAgICA8Yzh5LWRhc2hib2FyZC1jaGlsZC10aXRsZSAqbmdJZj1cInNob3dUaXRsZVwiPlxuICogICAgICAgPHNwYW4+VHJhbnNwYXJlbnQhPC9zcGFuPlxuICogICAgIDwvYzh5LWRhc2hib2FyZC1jaGlsZC10aXRsZT5cbiAqICAgICA8Yzh5LWRhc2hib2FyZC1jaGlsZC1hY3Rpb24+XG4gKiAgICAgICA8YSBocmVmPVwiXCIgKGNsaWNrKT1cInNob3dUaXRsZSA9ICFzaG93VGl0bGU7IChmYWxzZSlcIj5cbiAqICAgICAgICAgPGkgW2M4eUljb25dPVwiJ2hlYWRpbmcnXCI+PC9pPiBIaWRlL3Nob3cgdGl0bGVcbiAqICAgICAgIDwvYT5cbiAqICAgICA8L2M4eS1kYXNoYm9hcmQtY2hpbGQtYWN0aW9uPlxuICogICAgIDxjOHktZGFzaGJvYXJkLWNoaWxkLWFjdGlvbj5cbiAqICAgICAgIDxhIGhyZWY9XCJcIiAoY2xpY2spPVwiY3BXaWRnZXQzLmlzRnJvemVuID0gIWNwV2lkZ2V0My5pc0Zyb3plbjsgKGZhbHNlKVwiPlxuICogICAgICAgICA8aSBbYzh5SWNvbl09XCJjcFdpZGdldDMuaXNGcm96ZW4gPyAnbG9jaycgOiAndW5sb2NrJ1wiPjwvaT4gVG9nZ2xlIGZyZWV6ZVxuICogICAgICAgPC9hPlxuICogICAgIDwvYzh5LWRhc2hib2FyZC1jaGlsZC1hY3Rpb24+XG4gKiAgICAgeDoge3sgY3BXaWRnZXQzLnggfX08YnIgLz5cbiAqICAgICB5OiB7eyBjcFdpZGdldDMueSB9fTxiciAvPlxuICogICAgIHdpZHRoOiB7eyBjcFdpZGdldDMud2lkdGggfX08YnIgLz5cbiAqICAgICBoZWlnaHQ6IHt7IGNwV2lkZ2V0My5oZWlnaHQgfX08YnIgLz5cbiAqICAgPC9jOHktZGFzaGJvYXJkLWNoaWxkPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXNoYm9hcmQtY2hpbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGFzaGJvYXJkLWNoaWxkLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZGFzaGJvYXJkLWdyaWQtY2hpbGQnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkQ2hpbGRDb21wb25lbnQgaW1wbGVtZW50cyBEYXNoYm9hcmRDaGlsZERpbWVuc2lvbiB7XG4gIEBDb250ZW50Q2hpbGRyZW4oRGFzaGJvYXJkQ2hpbGRBY3Rpb25Db21wb25lbnQpIGFjdGlvbnMgPSBbXTtcbiAgZHJhZ1NvdXJjZTogQ2RrRHJhZztcbiAgaXNSZXNpemUgPSBmYWxzZTtcbiAgaXNEcmFnZ2luZyA9IGZhbHNlO1xuICBrbGFzc2VzID0ge307XG5cbiAgX3B4V2lkdGggPSAnMTAwJSc7XG4gIF9weEhlaWdodCA9ICcxMDAlJztcblxuICAvKipcbiAgICogVGhlIHggcG9zaXRpb24gb2YgdGhlIGNoaWxkLlxuICAgKi9cbiAgQElucHV0KCkgeDtcblxuICAvKipcbiAgICogVGhlIHkgcG9zaXRpb24gb2YgdGhlIGNoaWxkLlxuICAgKi9cbiAgQElucHV0KCkgeTtcblxuICAvKipcbiAgICogVGhlIHdpZHRoIG9mIHRoZSBjb21wb25lbnQgaW4gZ3JpZC1jb2x1bW5zLlxuICAgKi9cbiAgQElucHV0KCkgd2lkdGggPSAxO1xuXG4gIC8qKlxuICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjb21wb25lbnQgaW4gZ3JpZC1yb3dzLlxuICAgKi9cbiAgQElucHV0KCkgaGVpZ2h0ID0gMTtcblxuICAvKipcbiAgICogVGhlIGRhdGEgb2JqZWN0IGNhbiBiZSB1c2VkIGFzIGEgZGF0YVRyYW5zZmVyIG9iamVjdCBmb3IgZXZlbnRzIG9mIHRoZSBjaGlsZC5cbiAgICovXG4gIEBJbnB1dCgpIGRhdGE6IFdpZGdldCB8IGFueTtcblxuICAvKipcbiAgICogVGhlIG1hcmdpbiBvZiB0aGUgY2hpbGQgaW4gcGl4ZWwuXG4gICAqL1xuICBASW5wdXQoKSBtYXJnaW4gPSAxMjtcblxuICAvKipcbiAgICogSWYgYSBkYXNoYm9hcmQgaXMgZnJvemVuLCBhbGwgY2hpbGRyZW4gY2Fubm90IGJlIG1vdmVkXG4gICAqIG9yIHJlc2l6ZWQuXG4gICAqL1xuICBASW5wdXQoKSBpc0Zyb3plbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgY2hpbGQgY29udGVudCBpcyBpbml0aWFsaXplZCwgYXMgc29vbiBpdCBpcyBzY3JvbGxlZCBpbnRvIHZpZXdwb3J0XG4gICAqL1xuICBASW5wdXQoKSB1c2VJbnRlcnNlY3Rpb24gPSBmYWxzZTtcblxuICAvKipcbiAgICogQW4gZXZlbnQgZmlyZWQgaWYgYSBjaGlsZCBjaGFuZ2UgaXMgc3RhcnRlZCAoZHJhZ2dpbmcgb3IgcmVzaXppbmcpXG4gICAqL1xuICBAT3V0cHV0KCkgY2hhbmdlU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPERhc2hib2FyZENoaWxkQ29tcG9uZW50PigpO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBmaXJlZCBpZiBhIGNoaWxkIGNoYW5nZSBpcyBlbmRlZFxuICAgKi9cbiAgQE91dHB1dCgpIGNoYW5nZUVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGFzaGJvYXJkQ2hpbGRDb21wb25lbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEFsbCBjbGFzc2VzIGFkZGVkIHRvIHRoaXMgY2hpbGRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGNsYXNzOiBzdHJpbmdbXSB8IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBpeGVsIHdpZHRoIG9mIHRoZSBjaGlsZCAodXNlZCBmb3IgcmVzaXppbmcpXG4gICAqL1xuICBzZXQgcHhXaWR0aCh2YWx1ZSkge1xuICAgIHRoaXMuX3B4V2lkdGggPSBgJHt2YWx1ZX1weGA7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcGl4ZWwgaGVpZ2h0IG9mIHRoZSBjaGlsZCAodXNlZCBmb3IgcmVzaXppbmcpXG4gICAqL1xuICBzZXQgcHhIZWlnaHQodmFsdWUpIHtcbiAgICB0aGlzLl9weEhlaWdodCA9IGAke3ZhbHVlfXB4YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBpbmRpY2F0b3IgaWYgdGhlIGNoaWxkIGlzIGludGVyc2VjdGVkICh0aGF0IG1lYW4gdmlzaWJsZSBmb3IgdGhlIHVzZXIpXG4gICAqL1xuICBpbnRlcnNlY3RlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBuYXN0eSB3b3JrYXJvdW5kIGZvciB0aGF0IGlzc3VlOlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy85MzQzXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuc3R5bGUnKVxuICBnZXQgaW5saW5lU3R5bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShgXG4gICAgZ3JpZC1jb2x1bW4tc3RhcnQ6ICR7dGhpcy54ICsgMX07XG4gICAgLW1zLWdyaWQtY29sdW1uOiAke3RoaXMueCArIDF9O1xuICAgIGdyaWQtcm93LXN0YXJ0OiAke3RoaXMueSArIDF9O1xuICAgIC1tcy1ncmlkLXJvdzogJHt0aGlzLnkgKyAxfTtcbiAgICBncmlkLWNvbHVtbi1lbmQ6IHNwYW4gJHt0aGlzLndpZHRofTtcbiAgICAtbXMtZ3JpZC1jb2x1bW4tc3BhbjogJHt0aGlzLndpZHRofTtcbiAgICBncmlkLXJvdy1lbmQ6IHNwYW4gJHt0aGlzLmhlaWdodH07XG4gICAgLW1zLWdyaWQtcm93LXNwYW46ICR7dGhpcy5oZWlnaHR9O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbjogJHt0aGlzLm1hcmdpbiB8fCAxMn1weDtcbiAgICBgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgb2JzZXJ2YWJsZSBzdWJzY3JpcHRpb24gd2hpY2ggaXMgbGlzdGVuIHRvXG4gICAqIG9uIGNoYW5nZXMgKGRyYWcgb3IgcmVzaXplKS5cbiAgICovXG4gIGNoYW5nZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBEYXNoYm9hcmRDb21wb25lbnQpKSBwdWJsaWMgZGFzaGJvYXJkOiBEYXNoYm9hcmRDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWZcbiAgKSB7fVxuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMua2xhc3NlcyA9IHtcbiAgICAgIGNhcmQ6IHRydWUsXG4gICAgICAnY2FyZC1kYXNoYm9hcmQnOiB0cnVlLFxuICAgICAgZGlzYWJsZWQ6IHRoaXMuaXNGcm96ZW4sXG4gICAgICAnb24tcmVzaXplJzogdGhpcy5pc1Jlc2l6ZSxcbiAgICAgIC4uLnRoaXMuY2xhc3NcbiAgICB9O1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMueCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMueSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0RHluYW1pY0RpbWVuc2lvbigpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudXNlSW50ZXJzZWN0aW9uICYmICdJbnRlcnNlY3Rpb25PYnNlcnZlcicgaW4gd2luZG93KSB7XG4gICAgICBjb25zdCBpbnRlcnNlY3Rpb25PYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgICAgZXZlbnQgPT4gKHRoaXMuaW50ZXJzZWN0ZWQgPSB0aGlzLmNoaWxkSW5WaWV3KGV2ZW50WzBdLCBpbnRlcnNlY3Rpb25PYnNlcnZlcikpXG4gICAgICApO1xuICAgICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW50ZXJzZWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHNldER5bmFtaWNEaW1lbnNpb24oKSB7XG4gICAgY29uc3QgZHMgPSBuZXcgRGFzaGJvYXJkQ2hpbGRDaGFuZ2UodGhpcyk7XG4gICAgY29uc3QgeyB4LCB5IH0gPSBkcy5maW5kRnJlZURpbWVuc2lvbigpO1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcbiAgfVxuXG4gIHJlc2l6ZVN0YXJ0ZWQoJGV2ZW50OiBDZGtEcmFnU3RhcnQpIHtcbiAgICB0aGlzLmlzUmVzaXplID0gdHJ1ZTtcbiAgICB0aGlzLmRhc2hib2FyZC51cGRhdGVSZWN0U2l6ZSgpO1xuICAgIHRoaXMuZHJhZ1NvdXJjZSA9ICRldmVudC5zb3VyY2U7XG4gICAgY29uc3QgcG9zaXRpb25pbmcgPSBuZXcgRGFzaGJvYXJkQ2hpbGRDaGFuZ2UodGhpcyk7XG4gICAgdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24gPSBwb3NpdGlvbmluZy5yZXNpemUkLnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2hhbmdlU3RhcnQuZW1pdCh0aGlzKTtcbiAgICB0aGlzLm5nT25DaGFuZ2VzKCk7XG4gIH1cblxuICBkcmFnU3RhcnRlZCgkZXZlbnQ6IENka0RyYWdTdGFydCkge1xuICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XG4gICAgdGhpcy5kYXNoYm9hcmQudXBkYXRlUmVjdFNpemUoKTtcbiAgICB0aGlzLmRyYWdTb3VyY2UgPSAkZXZlbnQuc291cmNlO1xuICAgIGNvbnN0IHBvc2l0aW9uaW5nID0gbmV3IERhc2hib2FyZENoaWxkQ2hhbmdlKHRoaXMpO1xuICAgIHRoaXMuY2hhbmdlU3Vic2NyaXB0aW9uID0gcG9zaXRpb25pbmcuZHJhZyQuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jaGFuZ2VTdGFydC5lbWl0KHRoaXMpO1xuICB9XG5cbiAgcmVzZXQoJGV2ZW50PzogQ2RrRHJhZ0VuZCkge1xuICAgIHRoaXMuaXNSZXNpemUgPSBmYWxzZTtcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9weFdpZHRoID0gJzEwMCUnO1xuICAgIHRoaXMuX3B4SGVpZ2h0ID0gJzEwMCUnO1xuICAgIHRoaXMubmdPbkNoYW5nZXMoKTtcbiAgICBpZiAoJGV2ZW50KSB7XG4gICAgICAkZXZlbnQuc291cmNlLnJlc2V0KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuZGFzaGJvYXJkLmVtaXRDaGFuZ2UodGhpcyk7XG4gICAgICB0aGlzLmNoYW5nZUVuZC5lbWl0KHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hpbGRJblZpZXcoZXZlbnQsIG9ic2VydmVyKSB7XG4gICAgaWYgKGV2ZW50LmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICBvYnNlcnZlci51bm9ic2VydmUoZXZlbnQudGFyZ2V0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
|
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLWNoaWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BjOHkvbmd4LWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb3JlL2Rhc2hib2FyZC9kYXNoYm9hcmQtY2hpbGQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxlQUFlLEVBQ2YsTUFBTSxFQUNOLFlBQVksRUFDWixVQUFVLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXpELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRW5GOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRDRztBQVFILElBQWEsdUJBQXVCLEdBQXBDLE1BQWEsdUJBQXVCO0lBaUhsQyxZQUN1RCxTQUE2QixFQUMxRSxTQUF1QixFQUN2QixPQUFtQjtRQUYwQixjQUFTLEdBQVQsU0FBUyxDQUFvQjtRQUMxRSxjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFuSG1CLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFFN0QsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFFYixhQUFRLEdBQUcsTUFBTSxDQUFDO1FBQ2xCLGNBQVMsR0FBRyxNQUFNLENBQUM7UUFZbkI7O1dBRUc7UUFDTSxVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRW5COztXQUVHO1FBQ00sV0FBTSxH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RDtBQU1sRTtJQURDLEtBQUssRUFBRTtzREFDMEM7QUEwQmxEO0lBREMsV0FBVyxDQUFDLFlBQVksQ0FBQzswREFlekI7QUF6R1UsdUJBQXVCO0lBUG5DLFNBQVMsQ0FBQztRQUNULFFBQVEsRUFBRSxxQkFBcUI7UUFDL0IsMnpEQUErQztRQUMvQyxJQUFJLEVBQUU7WUFDSixLQUFLLEVBQUUsc0JBQXNCO1NBQzlCO0tBQ0YsQ0FBQztJQW1IRyxtQkFBQSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQTtHQWxIcEMsdUJBQXVCLENBb01uQztTQXBNWSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRW5kLCBDZGtEcmFnU3RhcnQgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgZm9yd2FyZFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIEVsZW1lbnRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQ29tcG9uZW50IH0gZnJvbSAnLi9kYXNoYm9hcmQuY29tcG9uZW50JztcbmltcG9ydCB7IERhc2hib2FyZENoaWxkRGltZW5zaW9uLCBXaWRnZXQgfSBmcm9tICcuL2Rhc2hib2FyZC5tb2RlbCc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDaGlsZENoYW5nZSB9IGZyb20gJy4vZGFzaGJvYXJkLWNoaWxkLWNoYW5nZSc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDaGlsZEFjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vZGFzaGJvYXJkLWNoaWxkLWFjdGlvbi5jb21wb25lbnQnO1xuXG4vKipcbiAqIEEgZGFzaGJvYXJkIGNoaWxkIGFsbG93cyB0byBwb3NpdGlvbiBlbGVtZW50c1xuICogY29ycmVjdGx5IG9uIGEgZ3JpZC4gVGhlIHVzZXIgY2FuIHRoZW4gcmVzaXplIGFuZFxuICogcmVhcnJhbmdlIHRoZSBlbGVtZW50cywgYXMgbG9uZyBhcyB0aGV5IGFyZSBub3QgYGZyb3plbmAuXG4gKlxuICogQnkgc2V0dGluZyBgYzh5LWRhc2hib2FyZC1jaGlsZC1hY3Rpb25zYCBhbmRcbiAqIGBjOHktZGFzaGJvYXJkLWNoaWxkLXRpdGxlYCBvbiB0aGUgZWxlbWVudCB5b3UgY2FuIGFkZFxuICogY3VzdG9tIGFjdGlvbnMgb3IgYSBjdXN0b20gdGl0bGUgdG8gdGhlIGN1cnJlbnQgY2hpbGQuXG4gKlxuICogQnkgYWRkaW5nIHRoZSBjb3JyZWN0IGJyYW5kZWQgY2xhc3NlcywgeW91IGNhbiBkZWZpbmVcbiAqIHRoZSBsb29rIGFuZCBmZWVsIG9mIHRoZSBjaGlsZC4gQnkgZGVmYXVsdCBpdCBpcyBkaXNwbGF5ZWRcbiAqIGFzIGEgY2FyZC5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGh0bWxcbiAqICAgPGM4eS1kYXNoYm9hcmQtY2hpbGRcbiAqICAgICAjY3BXaWRnZXQzXG4gKiAgICAgW2lzRnJvemVuXT1cImlzRnJvemVuXCJcbiAqICAgICBbeF09XCIwXCJcbiAqICAgICBbeV09XCIzXCJcbiAqICAgICBbd2lkdGhdPVwiNFwiXG4gKiAgICAgW2hlaWdodF09XCI0XCJcbiAqICAgICBbY2xhc3NdPVwiJ2NhcmQtZGFzaGJvYXJkIHBhbmVsLWNvbnRlbnQtdHJhbnNwYXJlbnQnXCJcbiAqICAgPlxuICogICAgIDxjOHktZGFzaGJvYXJkLWNoaWxkLXRpdGxlICpuZ0lmPVwic2hvd1RpdGxlXCI+XG4gKiAgICAgICA8c3Bhbj5UcmFuc3BhcmVudCE8L3NwYW4+XG4gKiAgICAgPC9jOHktZGFzaGJvYXJkLWNoaWxkLXRpdGxlPlxuICogICAgIDxjOHktZGFzaGJvYXJkLWNoaWxkLWFjdGlvbj5cbiAqICAgICAgIDxhIGhyZWY9XCJcIiAoY2xpY2spPVwic2hvd1RpdGxlID0gIXNob3dUaXRsZTsgKGZhbHNlKVwiPlxuICogICAgICAgICA8aSBbYzh5SWNvbl09XCInaGVhZGluZydcIj48L2k+IEhpZGUvc2hvdyB0aXRsZVxuICogICAgICAgPC9hPlxuICogICAgIDwvYzh5LWRhc2hib2FyZC1jaGlsZC1hY3Rpb24+XG4gKiAgICAgPGM4eS1kYXNoYm9hcmQtY2hpbGQtYWN0aW9uPlxuICogICAgICAgPGEgaHJlZj1cIlwiIChjbGljayk9XCJjcFdpZGdldDMuaXNGcm96ZW4gPSAhY3BXaWRnZXQzLmlzRnJvemVuOyAoZmFsc2UpXCI+XG4gKiAgICAgICAgIDxpIFtjOHlJY29uXT1cImNwV2lkZ2V0My5pc0Zyb3plbiA/ICdsb2NrJyA6ICd1bmxvY2snXCI+PC9pPiBUb2dnbGUgZnJlZXplXG4gKiAgICAgICA8L2E+XG4gKiAgICAgPC9jOHktZGFzaGJvYXJkLWNoaWxkLWFjdGlvbj5cbiAqICAgICB4OiB7eyBjcFdpZGdldDMueCB9fTxiciAvPlxuICogICAgIHk6IHt7IGNwV2lkZ2V0My55IH19PGJyIC8+XG4gKiAgICAgd2lkdGg6IHt7IGNwV2lkZ2V0My53aWR0aCB9fTxiciAvPlxuICogICAgIGhlaWdodDoge3sgY3BXaWRnZXQzLmhlaWdodCB9fTxiciAvPlxuICogICA8L2M4eS1kYXNoYm9hcmQtY2hpbGQ+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRhc2hib2FyZC1jaGlsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXNoYm9hcmQtY2hpbGQuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdkYXNoYm9hcmQtZ3JpZC1jaGlsZCdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBEYXNoYm9hcmRDaGlsZENvbXBvbmVudCBpbXBsZW1lbnRzIERhc2hib2FyZENoaWxkRGltZW5zaW9uIHtcbiAgQENvbnRlbnRDaGlsZHJlbihEYXNoYm9hcmRDaGlsZEFjdGlvbkNvbXBvbmVudCkgYWN0aW9ucyA9IFtdO1xuICBkcmFnU291cmNlOiBDZGtEcmFnO1xuICBpc1Jlc2l6ZSA9IGZhbHNlO1xuICBpc0RyYWdnaW5nID0gZmFsc2U7XG4gIGtsYXNzZXMgPSB7fTtcblxuICBfcHhXaWR0aCA9ICcxMDAlJztcbiAgX3B4SGVpZ2h0ID0gJzEwMCUnO1xuXG4gIC8qKlxuICAgKiBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgY2hpbGQuXG4gICAqL1xuICBASW5wdXQoKSB4O1xuXG4gIC8qKlxuICAgKiBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgY2hpbGQuXG4gICAqL1xuICBASW5wdXQoKSB5O1xuXG4gIC8qKlxuICAgKiBUaGUgd2lkdGggb2YgdGhlIGNvbXBvbmVudCBpbiBncmlkLWNvbHVtbnMuXG4gICAqL1xuICBASW5wdXQoKSB3aWR0aCA9IDE7XG5cbiAgLyoqXG4gICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNvbXBvbmVudCBpbiBncmlkLXJvd3MuXG4gICAqL1xuICBASW5wdXQoKSBoZWlnaHQgPSAxO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0YSBvYmplY3QgY2FuIGJlIHVzZWQgYXMgYSBkYXRhVHJhbnNmZXIgb2JqZWN0IGZvciBldmVudHMgb2YgdGhlIGNoaWxkLlxuICAgKi9cbiAgQElucHV0KCkgZGF0YTogV2lkZ2V0IHwgYW55O1xuXG4gIC8qKlxuICAgKiBUaGUgbWFyZ2luIG9mIHRoZSBjaGlsZCBpbiBwaXhlbC5cbiAgICovXG4gIEBJbnB1dCgpIG1hcmdpbiA9IDEyO1xuXG4gIC8qKlxuICAgKiBJZiBhIGRhc2hib2FyZCBpcyBmcm96ZW4sIGFsbCBjaGlsZHJlbiBjYW5ub3QgYmUgbW92ZWRcbiAgICogb3IgcmVzaXplZC5cbiAgICovXG4gIEBJbnB1dCgpIGlzRnJvemVuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBjaGlsZCBjb250ZW50IGlzIGluaXRpYWxpemVkLCBhcyBzb29uIGl0IGlzIHNjcm9sbGVkIGludG8gdmlld3BvcnRcbiAgICovXG4gIEBJbnB1dCgpIHVzZUludGVyc2VjdGlvbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBmaXJlZCBpZiBhIGNoaWxkIGNoYW5nZSBpcyBzdGFydGVkIChkcmFnZ2luZyBvciByZXNpemluZylcbiAgICovXG4gIEBPdXRwdXQoKSBjaGFuZ2VTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8RGFzaGJvYXJkQ2hpbGRDb21wb25lbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IGZpcmVkIGlmIGEgY2hpbGQgY2hhbmdlIGlzIGVuZGVkXG4gICAqL1xuICBAT3V0cHV0KCkgY2hhbmdlRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxEYXNoYm9hcmRDaGlsZENvbXBvbmVudD4oKTtcblxuICAvKipcbiAgICogQWxsIGNsYXNzZXMgYWRkZWQgdG8gdGhpcyBjaGlsZFxuICAgKi9cbiAgQElucHV0KClcbiAgY2xhc3M6IHN0cmluZ1tdIHwgeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcGl4ZWwgd2lkdGggb2YgdGhlIGNoaWxkICh1c2VkIGZvciByZXNpemluZylcbiAgICovXG4gIHNldCBweFdpZHRoKHZhbHVlKSB7XG4gICAgdGhpcy5fcHhXaWR0aCA9IGAke3ZhbHVlfXB4YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwaXhlbCBoZWlnaHQgb2YgdGhlIGNoaWxkICh1c2VkIGZvciByZXNpemluZylcbiAgICovXG4gIHNldCBweEhlaWdodCh2YWx1ZSkge1xuICAgIHRoaXMuX3B4SGVpZ2h0ID0gYCR7dmFsdWV9cHhgO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIGluZGljYXRvciBpZiB0aGUgY2hpbGQgaXMgaW50ZXJzZWN0ZWQgKHRoYXQgbWVhbiB2aXNpYmxlIGZvciB0aGUgdXNlcilcbiAgICovXG4gIGludGVyc2VjdGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIG5hc3R5IHdvcmthcm91bmQgZm9yIHRoYXQgaXNzdWU6XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzkzNDNcbiAgICovXG4gIEBIb3N0QmluZGluZygnYXR0ci5zdHlsZScpXG4gIGdldCBpbmxpbmVTdHlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKGBcbiAgICBncmlkLWNvbHVtbi1zdGFydDogJHt0aGlzLnggKyAxfTtcbiAgICAtbXMtZ3JpZC1jb2x1bW46ICR7dGhpcy54ICsgMX07XG4gICAgZ3JpZC1yb3ctc3RhcnQ6ICR7dGhpcy55ICsgMX07XG4gICAgLW1zLWdyaWQtcm93OiAke3RoaXMueSArIDF9O1xuICAgIGdyaWQtY29sdW1uLWVuZDogc3BhbiAke3RoaXMud2lkdGh9O1xuICAgIC1tcy1ncmlkLWNvbHVtbi1zcGFuOiAke3RoaXMud2lkdGh9O1xuICAgIGdyaWQtcm93LWVuZDogc3BhbiAke3RoaXMuaGVpZ2h0fTtcbiAgICAtbXMtZ3JpZC1yb3ctc3BhbjogJHt0aGlzLmhlaWdodH07XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luOiAke3RoaXMubWFyZ2luIHx8IDEyfXB4O1xuICAgIG9yZGVyOiAke3RoaXMuZ2V0T3JkZXIoKX07XG4gICAgYCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG9ic2VydmFibGUgc3Vic2NyaXB0aW9uIHdoaWNoIGlzIGxpc3RlbiB0b1xuICAgKiBvbiBjaGFuZ2VzIChkcmFnIG9yIHJlc2l6ZSkuXG4gICAqL1xuICBjaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gRGFzaGJvYXJkQ29tcG9uZW50KSkgcHVibGljIGRhc2hib2FyZDogRGFzaGJvYXJkQ29tcG9uZW50LFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmXG4gICkge31cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmtsYXNzZXMgPSB7XG4gICAgICBjYXJkOiB0cnVlLFxuICAgICAgJ2NhcmQtZGFzaGJvYXJkJzogdHJ1ZSxcbiAgICAgIGRpc2FibGVkOiB0aGlzLmlzRnJvemVuLFxuICAgICAgJ29uLXJlc2l6ZSc6IHRoaXMuaXNSZXNpemUsXG4gICAgICAuLi50aGlzLmNsYXNzXG4gICAgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnggPT09IHVuZGVmaW5lZCB8fCB0aGlzLnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNldER5bmFtaWNEaW1lbnNpb24oKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZUludGVyc2VjdGlvbiAmJiAnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInIGluIHdpbmRvdykge1xuICAgICAgY29uc3QgaW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXG4gICAgICAgIGV2ZW50ID0+ICh0aGlzLmludGVyc2VjdGVkID0gdGhpcy5jaGlsZEluVmlldyhldmVudFswXSwgaW50ZXJzZWN0aW9uT2JzZXJ2ZXIpKVxuICAgICAgKTtcbiAgICAgIGludGVyc2VjdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludGVyc2VjdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBzZXREeW5hbWljRGltZW5zaW9uKCkge1xuICAgIGNvbnN0IGRzID0gbmV3IERhc2hib2FyZENoaWxkQ2hhbmdlKHRoaXMpO1xuICAgIGNvbnN0IHsgeCwgeSB9ID0gZHMuZmluZEZyZWVEaW1lbnNpb24oKTtcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG4gIH1cblxuICByZXNpemVTdGFydGVkKCRldmVudDogQ2RrRHJhZ1N0YXJ0KSB7XG4gICAgdGhpcy5pc1Jlc2l6ZSA9IHRydWU7XG4gICAgdGhpcy5kYXNoYm9hcmQudXBkYXRlUmVjdFNpemUoKTtcbiAgICB0aGlzLmRyYWdTb3VyY2UgPSAkZXZlbnQuc291cmNlO1xuICAgIGNvbnN0IHBvc2l0aW9uaW5nID0gbmV3IERhc2hib2FyZENoaWxkQ2hhbmdlKHRoaXMpO1xuICAgIHRoaXMuY2hhbmdlU3Vic2NyaXB0aW9uID0gcG9zaXRpb25pbmcucmVzaXplJC5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNoYW5nZVN0YXJ0LmVtaXQodGhpcyk7XG4gICAgdGhpcy5uZ09uQ2hhbmdlcygpO1xuICB9XG5cbiAgZHJhZ1N0YXJ0ZWQoJGV2ZW50OiBDZGtEcmFnU3RhcnQpIHtcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgIHRoaXMuZGFzaGJvYXJkLnVwZGF0ZVJlY3RTaXplKCk7XG4gICAgdGhpcy5kcmFnU291cmNlID0gJGV2ZW50LnNvdXJjZTtcbiAgICBjb25zdCBwb3NpdGlvbmluZyA9IG5ldyBEYXNoYm9hcmRDaGlsZENoYW5nZSh0aGlzKTtcbiAgICB0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbiA9IHBvc2l0aW9uaW5nLmRyYWckLnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2hhbmdlU3RhcnQuZW1pdCh0aGlzKTtcbiAgfVxuXG4gIHJlc2V0KCRldmVudD86IENka0RyYWdFbmQpIHtcbiAgICB0aGlzLmlzUmVzaXplID0gZmFsc2U7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fcHhXaWR0aCA9ICcxMDAlJztcbiAgICB0aGlzLl9weEhlaWdodCA9ICcxMDAlJztcbiAgICB0aGlzLm5nT25DaGFuZ2VzKCk7XG4gICAgaWYgKCRldmVudCkge1xuICAgICAgJGV2ZW50LnNvdXJjZS5yZXNldCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLmRhc2hib2FyZC5lbWl0Q2hhbmdlKHRoaXMpO1xuICAgICAgdGhpcy5jaGFuZ2VFbmQuZW1pdCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE9yZGVyKCkge1xuICAgIHJldHVybiBgJHtNYXRoLnJvdW5kKCh0aGlzLnkgKyAodGhpcy54ICsgMSkgLyAxMDApICogMTAwKX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGlsZEluVmlldyhldmVudCwgb2JzZXJ2ZXIpIHtcbiAgICBpZiAoZXZlbnQuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgIG9ic2VydmVyLnVub2JzZXJ2ZShldmVudC50YXJnZXQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19
|
|
@@ -527,8 +527,8 @@ tslib_1.__decorate([
|
|
|
527
527
|
DataGridComponent = tslib_1.__decorate([
|
|
528
528
|
Component({
|
|
529
529
|
selector: 'c8y-data-grid',
|
|
530
|
-
template: "<div class=\"table-data-grid-scroll\" #scroll>\n <div *ngIf=\"displayOptions.gridHeader\" class=\"table-data-grid-header separator\">\n <h4 class=\"m-r-16\">{{ title | translate }}</h4>\n <span *ngIf=\"!filteringApplied\">\n <span class=\"label label-warning m-r-4\" translate>No filters</span>\n <small\n *ngIf=\"!!filteringLabelsParams.allItemsCount\"\n class=\"m-r-4\"\n ngNonBindable\n translate\n [translateParams]=\"filteringLabelsParams\"\n >{{ filteredItemsCount }} of {{ allItemsCount }} items</small\n >\n </span>\n <span *ngIf=\"filteringApplied\">\n <ng-container *ngIf=\"!!filteringLabelsParams.allItemsCount\">\n <span class=\"badge badge-info m-r-4\">\n {{ (dataSource.stats$ | async).filteredSize }}\n </span>\n <small ngNonBindable translate [translateParams]=\"filteringLabelsParams\"\n >of {{ allItemsCount }} items</small\n >\n </ng-container>\n <button class=\"m-l-8 btn btn-xs btn-default m-r-4\" (click)=\"clearFilters()\" translate>\n Clear filters\n </button>\n </span>\n <span class=\"hidden-xs hidden-sm\">\n <button\n class=\"btn-clean text-primary\"\n popover=\"{{ 'Click the column headers to apply filters.' | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n >\n <i c8yIcon=\"question-circle-o\"></i>\n </button>\n </span>\n\n <div class=\"flex-item-right\">\n <div class=\"btnbar flex-row\">\n <div class=\"dropdown\" dropdown [insideClick]=\"true\">\n <button class=\"btnbar-btn c8y-dropdown\" dropdownToggle>\n <i c8yIcon=\"columns\" class=\"m-r-4\"></i> <span translate>Configure columns</span>\n </button>\n\n <ul\n *dropdownMenu\n class=\"dropdown-menu\"\n (click)=\"$event.stopPropagation()\"\n >\n <li class=\"bg-white\">\n <div cdkDropList (cdkDropListDropped)=\"onColumnDrop($event)\" class=\"list-group m-0\">\n <div *ngFor=\"let column of columns\" cdkDrag cdkDragLockAxis=\"y\">\n <ng-container *ngIf=\"!column.positionFixed\">\n <div class=\"list-group-item draggable-after\">\n <label class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"column.visible\"\n (change)=\"updateGridColumnsSize()\"\n />\n <span></span> \n {{ (column.header | translate) || column.name }}\n </label>\n </div>\n </ng-container>\n </div>\n </div>\n </li>\n </ul>\n </div>\n\n <button\n class=\"btnbar-btn\"\n [disabled]=\"dataSource.loading$ | async\"\n (click)=\"searchText = ''; reload()\"\n >\n <i c8yIcon=\"refresh\"></i> <span translate> Reload</span>\n </button>\n\n <div *ngIf=\"!serverSideDataCallback\" class=\"input-group input-group-search\">\n <input\n type=\"search\"\n class=\"form-control\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\n [ngModel]=\"searchText\"\n (input)=\"searchText$.emit($event.target.value)\"\n />\n <div class=\"input-group-addon\">\n <i c8yIcon=\"search\" *ngIf=\"searchText.length === 0\"></i>\n <i\n c8yIcon=\"times\"\n class=\"pointer\"\n *ngIf=\"searchText.length > 0\"\n (click)=\"searchText = ''; searchText$.emit('')\"\n ></i>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"table-data-grid-header-bulk-actions animated slideInDown fast\"\n *ngIf=\"selectedItemIds.length !== 0\"\n >\n <h4>\n <span ngNonBindable translate [translateParams]=\"{ count: selectedItemIds.length }\">\n {{ count }} selected items.\n </span>\n <br class=\"visible-xs\" />\n <small *ngIf=\"selectedItemIds.length >= pagination.pageSize\">\n <a (click)=\"setAllItemsSelected(true)\" style=\"cursor: pointer\">\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ count: (dataSource.stats$ | async).filteredSize }\"\n >\n Select all {{ count }} items\n </span>\n </a>\n </small>\n </h4>\n <div class=\"flex-item-right\">\n <div class=\"btnbar flex-row\">\n <ng-container\n *ngFor=\"let bulkActionControl of bulkActionControls\"\n [ngSwitch]=\"bulkActionControl.type\"\n >\n <button\n *ngSwitchCase=\"builtInActionType.Export\"\n class=\"btnbar-btn\"\n (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n >\n <i c8yIcon=\"sign-out\"></i> <span translate>Export</span>\n </button>\n\n <button\n *ngSwitchCase=\"builtInActionType.Delete\"\n class=\"btnbar-btn\"\n (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n >\n <i c8yIcon=\"trash\"></i> <span translate>Delete</span>\n </button>\n\n <button\n *ngSwitchDefault\n class=\"btnbar-btn\"\n (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n >\n <i c8yIcon=\"{{ bulkActionControl.icon }}\"></i>\n {{ bulkActionControl.text | translate }}\n </button>\n </ng-container>\n\n <button class=\"btnbar-btn\" (click)=\"setAllItemsSelected(false)\">\n <i c8yIcon=\"times\"></i> <span translate>Cancel</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <table\n class=\"table table-hover table-filtered-sorted table-data-grid\"\n cdk-table\n [dataSource]=\"dataSource\"\n [trackBy]=\"trackByName\"\n [class.table-striped]=\"displayOptions.striped\"\n [class.table-bordered]=\"displayOptions.bordered\"\n [class.table-data-grid-with-checkboxes]=\"selectable\"\n [class.table-data-grid-with-actions]=\"actionControls.length > 0\"\n [style.grid-template-columns]=\"styles.gridTemplateColumns\"\n (mousemove)=\"resizeHandleContainerMouseMove$.emit($event)\"\n (mouseup)=\"resizeHandleContainerMouseUp$.emit($event)\"\n >\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\" [cdkColumnDef]=\"column.name\">\n <ng-container [ngSwitch]=\"column.name\">\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <th cdk-header-cell *cdkHeaderCellDef data-type=\"icon\">\n <div>\n <label class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"currentPageSelectionState.allSelected\"\n [indeterminate]=\"\n !(\n currentPageSelectionState.allSelected ||\n currentPageSelectionState.allDeselected\n )\n \"\n (change)=\"setAllItemsInCurrentPageSelected($event.target.checked)\"\n />\n <span></span>\n </label>\n </div>\n </th>\n\n <td cdk-cell *cdkCellDef=\"let row\">\n <label class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"isItemSelected(row)\"\n (change)=\"setItemsSelected([row], $event.target.checked)\"\n />\n <span></span>\n </label>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'actions'\">\n <th cdk-header-cell *cdkHeaderCellDef data-type=\"icon\"></th>\n\n <td cdk-cell *cdkCellDef=\"let row\">\n <ng-container *ngIf=\"actionControls.length <= 2\">\n <ng-container\n *ngFor=\"let actionControl of actionControls\"\n [ngSwitch]=\"actionControl.type\"\n >\n <button\n *ngSwitchCase=\"builtInActionType.Edit\"\n class=\"btn btn-icon btn-xs btn-primary\"\n title=\"{{ 'Edit' | translate }}\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"pencil\"></i>\n </button>\n <button\n *ngSwitchCase=\"builtInActionType.Delete\"\n class=\"btn btn-dot showOnHover\"\n title=\"{{ 'Delete' | translate }}\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i class=\"text-danger\" c8yIcon=\"minus-circle\"></i>\n </button>\n <button\n *ngSwitchDefault\n class=\"btn btn-icon btn-xs btn-primary\"\n title=\"{{ actionControl.text | translate }}\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"{{ actionControl.icon }}\"></i>\n </button>\n </ng-container>\n </ng-container>\n\n <div *ngIf=\"actionControls.length > 2\" class=\"dropdown\" dropdown>\n <button\n class=\"dropdown-toggle c8y-dropdown\"\n title=\"{{ 'Actions' | translate }}\"\n dropdownToggle\n >\n <i c8yIcon=\"ellipsis-v\"></i>\n </button>\n <ul class=\"dropdown-menu dropdown-menu-right\" *dropdownMenu>\n <li *ngFor=\"let actionControl of actionControls\" [ngSwitch]=\"actionControl.type\">\n <button\n *ngSwitchCase=\"builtInActionType.Edit\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"pencil\"></i> {{ 'Edit' | translate }}\n </button>\n <button\n *ngSwitchCase=\"builtInActionType.Delete\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"trash\"></i> {{ 'Delete' | translate }}\n </button>\n <button\n *ngSwitchCase=\"builtInActionType.Export\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"download\"></i> {{ 'Export' | translate }}\n </button>\n <button *ngSwitchDefault (click)=\"actionControl.callback(row, reload.bind(this))\">\n <i c8yIcon=\"{{ actionControl.icon }}\"></i> {{ actionControl.text | translate }}\n </button>\n </li>\n </ul>\n </div>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <th\n cdk-header-cell\n *cdkHeaderCellDef\n [ngClass]=\"column.headerCSSClassName\"\n [attr.data-type]=\"column.dataType\"\n [class.sorted]=\"column.sortOrder\"\n [class.filtered]=\"column | map: isColumnFilteringApplied\"\n [class.hidden]=\"!column.visible\"\n >\n <div *ngIf=\"!column.filterable\" [title]=\"(column.header | translate) || column.name\">\n <ng-container\n *ngIf=\"\n (\n [{\n columnName: column.name,\n value: ((column.header | translate) || column.name)\n }]\n | map:getHeaderCellRendererSpec:this\n ) as cellRendererSpec\n \"\n >\n <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n </ng-container>\n </div>\n <div\n *ngIf=\"column.filterable\"\n class=\"dropdown\"\n dropdown\n #dropdown=\"bs-dropdown\"\n [insideClick]=\"true\"\n container=\"body\"\n >\n <button\n class=\"btn-header c8y-dropdown\"\n dropdownToggle\n [title]=\"(column.header | translate) || column.name\"\n >\n <ng-container\n *ngIf=\"\n (\n [{\n columnName: column.name,\n value: ((column.header | translate) || column.name)\n }]\n | map:getHeaderCellRendererSpec:this\n ) as cellRendererSpec\n \"\n >\n <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n </ng-container>\n <i c8yIcon=\"filter\" title=\"{{ 'Filter' | translate }}\"></i>\n </button>\n\n <ul *dropdownMenu class=\"dropdown-menu \" (click)=\"$event.stopPropagation()\">\n <li class=\"data-grid__dropdown\">\n <ng-container\n *ngIf=\"\n (\n [{\n column: column,\n dropdown: dropdown\n }]\n | map:getFilteringFormRendererSpec:this\n ) as filteringFormRendererSpec\n \"\n >\n <c8y-filtering-form-renderer [spec]=\"filteringFormRendererSpec\">\n </c8y-filtering-form-renderer>\n </ng-container>\n </li>\n </ul>\n </div>\n\n <button\n *ngIf=\"column.sortable\"\n class=\"btn-sort\"\n title=\"{{ 'Sort' | translate }}\"\n (click)=\"changeSortOrder(column.name)\"\n >\n <ng-container [ngSwitch]=\"column.sortOrder\">\n <i *ngSwitchCase=\"'asc'\" c8yIcon=\"long-arrow-up\"></i>\n <i *ngSwitchCase=\"'desc'\" c8yIcon=\"long-arrow-down\"></i>\n <i *ngSwitchDefault c8yIcon=\"exchange\"></i>\n </ng-container>\n </button>\n\n <span\n class=\"resize-handle\"\n (mousedown)=\"\n resizeHandleMouseDown$.emit({ event: $event, targetColumnName: column.name })\n \"\n >\n </span>\n </th>\n\n <td\n cdk-cell\n *cdkCellDef=\"let row\"\n [ngClass]=\"column.cellCSSClassName\"\n [attr.data-cell-title]=\"column.header | translate\"\n [class.hidden]=\"!column.visible\"\n >\n <ng-container\n *ngIf=\"\n (\n [{\n value: resolveCellValue(row, column.path),\n row: row,\n columnName: column.name\n }]\n | map:getCellRendererSpec:this\n ) as cellRendererSpec\n \"\n >\n <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n </ng-container>\n </td>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container cdkColumnDef=\"infiniteScrollFooter\">\n <td cdk-footer-cell *cdkFooterCellDef [style.grid-column]=\"styles.gridInfiniteScrollColumn\">\n <template #infiniteScrollContainer></template>\n </td>\n </ng-container>\n\n <tr cdk-header-row *cdkHeaderRowDef=\"columnNames\"></tr>\n\n <tr\n cdk-row\n *cdkRowDef=\"let row; columns: columnNames\"\n (mouseover)=\"rowMouseOver.emit(row)\"\n (mouseleave)=\"rowMouseLeave.emit(row)\"\n (click)=\"rowClick.emit(row)\"\n ></tr>\n\n <ng-container *ngIf=\"infiniteScroll\">\n <tr cdk-footer-row *cdkFooterRowDef=\"['infiniteScrollFooter']\"></tr>\n </ng-container>\n </table>\n\n <div *ngIf=\"(dataSource.loading$ | async) && !loadMoreComponent\" class=\"text-center\">\n <c8y-progress-bar [message]=\"loadingItemsLabel\"></c8y-progress-bar>\n </div>\n\n <div\n class=\"row m-0 p-t-40 p-b-40\"\n *ngIf=\"!(dataSource.loading$ | async) && (dataSource.stats$ | async).filteredSize === 0\"\n >\n <div class=\"col-md-4 col-md-offset-4\">\n <div class=\"c8y-empty-state\">\n <h1 c8yIcon=\"search\"></h1>\n <div>\n <p>\n <strong>{{ noMatchingItemsLabel | translate }}</strong>\n </p>\n <small>{{ 'Refine your search terms' | translate }}</small>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"pagination && !infiniteScroll\" class=\"table-data-grid-footer separator\">\n <div class=\"col-sm-4 no-gutter\">\n <div *ngIf=\"(dataSource.stats$ | async).currentPageSize > 0\" class=\"counter\">\n <span class=\"text-muted\" ngNonBindable translate [translateParams]=\"paginationLabelParams\"\n >{{ pageFirstItemIdx }} - {{ pageLastItemIdx }} of {{ itemsTotal }}</span\n >\n </div>\n </div>\n\n <div class=\"col-sm-4 no-gutter text-center\">\n <div\n *ngIf=\"(dataSource.stats$ | async).filteredSize > minPossiblePageSize\"\n class=\"form-group form-inline\"\n >\n <label class=\"m-r-4\" translate>Items per page</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n [ngModel]=\"pagination.pageSize\"\n (ngModelChange)=\"\n updatePagination({ itemsPerPage: $event, page: pagination.currentPage })\n \"\n >\n <option *ngFor=\"let pageSize of possiblePageSizes\" [ngValue]=\"pageSize\">\n {{ pageSize }}\n </option>\n </select>\n </div>\n </div>\n </div>\n\n <div class=\"col-sm-4 no-gutter text-right\">\n <pagination\n [class.hidden]=\"totalPagesCount <= 1\"\n [ngModel]=\"pagination.currentPage\"\n (pageChanged)=\"updatePagination($event)\"\n [totalItems]=\"(dataSource.stats$ | async).filteredSize\"\n [itemsPerPage]=\"pagination.pageSize\"\n (numPages)=\"totalPagesCount = $event\"\n [maxSize]=\"5\"\n [boundaryLinks]=\"false\"\n previousText=\" \"\n nextText=\" \"\n ></pagination>\n </div>\n </div>\n</div>\n"
|
|
530
|
+
template: "<div class=\"table-data-grid-scroll\" #scroll>\n <div *ngIf=\"displayOptions.gridHeader\" class=\"table-data-grid-header separator\">\n <h4 class=\"m-r-16\">{{ title | translate }}</h4>\n <span *ngIf=\"!filteringApplied\">\n <span class=\"label label-warning m-r-4\" translate>No filters</span>\n <small\n *ngIf=\"!!filteringLabelsParams.allItemsCount\"\n class=\"m-r-4\"\n ngNonBindable\n translate\n [translateParams]=\"filteringLabelsParams\"\n >{{ filteredItemsCount }} of {{ allItemsCount }} items</small\n >\n </span>\n <span *ngIf=\"filteringApplied\">\n <ng-container *ngIf=\"!!filteringLabelsParams.allItemsCount\">\n <span class=\"badge badge-info m-r-4\">\n {{ (dataSource.stats$ | async).filteredSize }}\n </span>\n <small ngNonBindable translate [translateParams]=\"filteringLabelsParams\"\n >of {{ allItemsCount }} items</small\n >\n </ng-container>\n <button class=\"m-l-8 btn btn-xs btn-default m-r-4\" (click)=\"clearFilters()\" translate>\n Clear filters\n </button>\n </span>\n <span class=\"hidden-xs hidden-sm\">\n <button\n class=\"btn-clean text-primary\"\n popover=\"{{ 'Click the column headers to apply filters.' | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n >\n <i c8yIcon=\"question-circle-o\"></i>\n </button>\n </span>\n\n <div class=\"flex-item-right\">\n <div class=\"btnbar flex-row\">\n <div class=\"dropdown\" dropdown [insideClick]=\"true\">\n <button class=\"btnbar-btn c8y-dropdown\" dropdownToggle>\n <i c8yIcon=\"columns\" class=\"m-r-4\"></i> <span translate>Configure columns</span>\n </button>\n\n <ul\n *dropdownMenu\n class=\"dropdown-menu\"\n (click)=\"$event.stopPropagation()\"\n >\n <li class=\"bg-white\">\n <div cdkDropList (cdkDropListDropped)=\"onColumnDrop($event)\" class=\"list-group m-0\">\n <div *ngFor=\"let column of columns\" cdkDrag cdkDragLockAxis=\"y\">\n <ng-container *ngIf=\"!column.positionFixed\">\n <div class=\"list-group-item draggable-after\">\n <label class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"column.visible\"\n (change)=\"updateGridColumnsSize()\"\n />\n <span></span> \n {{ (column.header | translate) || column.name }}\n </label>\n </div>\n </ng-container>\n </div>\n </div>\n </li>\n </ul>\n </div>\n\n <button\n class=\"btnbar-btn\"\n [disabled]=\"dataSource.loading$ | async\"\n (click)=\"searchText = ''; reload()\"\n >\n <i c8yIcon=\"refresh\" class=\"m-r-4\"></i>\n <span>{{ 'Reload' | translate }}</span>\n </button>\n\n <div *ngIf=\"!serverSideDataCallback\" class=\"input-group input-group-search\">\n <input\n type=\"search\"\n class=\"form-control\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\n [ngModel]=\"searchText\"\n (input)=\"searchText$.emit($event.target.value)\"\n />\n <div class=\"input-group-addon\">\n <i c8yIcon=\"search\" *ngIf=\"searchText.length === 0\"></i>\n <i\n c8yIcon=\"times\"\n class=\"pointer\"\n *ngIf=\"searchText.length > 0\"\n (click)=\"searchText = ''; searchText$.emit('')\"\n ></i>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"table-data-grid-header-bulk-actions animated slideInDown fast\"\n *ngIf=\"selectedItemIds.length !== 0\"\n >\n <h4>\n <span ngNonBindable translate [translateParams]=\"{ count: selectedItemIds.length }\">\n {{ count }} selected items.\n </span>\n <br class=\"visible-xs\" />\n <small *ngIf=\"selectedItemIds.length >= pagination.pageSize\">\n <a (click)=\"setAllItemsSelected(true)\" style=\"cursor: pointer\">\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ count: (dataSource.stats$ | async).filteredSize }\"\n >\n Select all {{ count }} items\n </span>\n </a>\n </small>\n </h4>\n <div class=\"flex-item-right\">\n <div class=\"btnbar flex-row\">\n <ng-container\n *ngFor=\"let bulkActionControl of bulkActionControls\"\n [ngSwitch]=\"bulkActionControl.type\"\n >\n <button\n *ngSwitchCase=\"builtInActionType.Export\"\n class=\"btnbar-btn\"\n (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n >\n <i c8yIcon=\"sign-out\"></i> <span translate>Export</span>\n </button>\n\n <button\n *ngSwitchCase=\"builtInActionType.Delete\"\n class=\"btnbar-btn\"\n (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n >\n <i c8yIcon=\"trash\"></i> <span translate>Delete</span>\n </button>\n\n <button\n *ngSwitchDefault\n class=\"btnbar-btn\"\n (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n >\n <i c8yIcon=\"{{ bulkActionControl.icon }}\"></i>\n {{ bulkActionControl.text | translate }}\n </button>\n </ng-container>\n\n <button class=\"btnbar-btn\" (click)=\"setAllItemsSelected(false)\">\n <i c8yIcon=\"times\"></i> <span translate>Cancel</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <table\n class=\"table table-hover table-filtered-sorted table-data-grid\"\n cdk-table\n [dataSource]=\"dataSource\"\n [trackBy]=\"trackByName\"\n [class.table-striped]=\"displayOptions.striped\"\n [class.table-bordered]=\"displayOptions.bordered\"\n [class.table-data-grid-with-checkboxes]=\"selectable\"\n [class.table-data-grid-with-actions]=\"actionControls.length > 0\"\n [style.grid-template-columns]=\"styles.gridTemplateColumns\"\n (mousemove)=\"resizeHandleContainerMouseMove$.emit($event)\"\n (mouseup)=\"resizeHandleContainerMouseUp$.emit($event)\"\n >\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\" [cdkColumnDef]=\"column.name\">\n <ng-container [ngSwitch]=\"column.name\">\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <th cdk-header-cell *cdkHeaderCellDef data-type=\"icon\">\n <div>\n <label class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"currentPageSelectionState.allSelected\"\n [indeterminate]=\"\n !(\n currentPageSelectionState.allSelected ||\n currentPageSelectionState.allDeselected\n )\n \"\n (change)=\"setAllItemsInCurrentPageSelected($event.target.checked)\"\n />\n <span></span>\n </label>\n </div>\n </th>\n\n <td cdk-cell *cdkCellDef=\"let row\">\n <label class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"isItemSelected(row)\"\n (change)=\"setItemsSelected([row], $event.target.checked)\"\n />\n <span></span>\n </label>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'actions'\">\n <th cdk-header-cell *cdkHeaderCellDef data-type=\"icon\"></th>\n\n <td cdk-cell *cdkCellDef=\"let row\">\n <ng-container *ngIf=\"actionControls.length <= 2\">\n <ng-container\n *ngFor=\"let actionControl of actionControls\"\n [ngSwitch]=\"actionControl.type\"\n >\n <button\n *ngSwitchCase=\"builtInActionType.Edit\"\n class=\"btn btn-icon btn-xs btn-primary\"\n title=\"{{ 'Edit' | translate }}\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"pencil\"></i>\n </button>\n <button\n *ngSwitchCase=\"builtInActionType.Delete\"\n class=\"btn btn-dot showOnHover\"\n title=\"{{ 'Delete' | translate }}\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i class=\"text-danger\" c8yIcon=\"minus-circle\"></i>\n </button>\n <button\n *ngSwitchDefault\n class=\"btn btn-icon btn-xs btn-primary\"\n title=\"{{ actionControl.text | translate }}\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"{{ actionControl.icon }}\"></i>\n </button>\n </ng-container>\n </ng-container>\n\n <div *ngIf=\"actionControls.length > 2\" class=\"dropdown\" dropdown>\n <button\n class=\"dropdown-toggle c8y-dropdown\"\n title=\"{{ 'Actions' | translate }}\"\n dropdownToggle\n >\n <i c8yIcon=\"ellipsis-v\"></i>\n </button>\n <ul class=\"dropdown-menu dropdown-menu-right\" *dropdownMenu>\n <li *ngFor=\"let actionControl of actionControls\" [ngSwitch]=\"actionControl.type\">\n <button\n *ngSwitchCase=\"builtInActionType.Edit\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"pencil\"></i> {{ 'Edit' | translate }}\n </button>\n <button\n *ngSwitchCase=\"builtInActionType.Delete\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"trash\"></i> {{ 'Delete' | translate }}\n </button>\n <button\n *ngSwitchCase=\"builtInActionType.Export\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"download\"></i> {{ 'Export' | translate }}\n </button>\n <button *ngSwitchDefault (click)=\"actionControl.callback(row, reload.bind(this))\">\n <i c8yIcon=\"{{ actionControl.icon }}\"></i> {{ actionControl.text | translate }}\n </button>\n </li>\n </ul>\n </div>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <th\n cdk-header-cell\n *cdkHeaderCellDef\n [ngClass]=\"column.headerCSSClassName\"\n [attr.data-type]=\"column.dataType\"\n [class.sorted]=\"column.sortOrder\"\n [class.filtered]=\"column | map: isColumnFilteringApplied\"\n [class.hidden]=\"!column.visible\"\n >\n <div *ngIf=\"!column.filterable\" [title]=\"(column.header | translate) || column.name\">\n <ng-container\n *ngIf=\"\n (\n [{\n columnName: column.name,\n value: ((column.header | translate) || column.name)\n }]\n | map:getHeaderCellRendererSpec:this\n ) as cellRendererSpec\n \"\n >\n <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n </ng-container>\n </div>\n <div\n *ngIf=\"column.filterable\"\n class=\"dropdown\"\n dropdown\n #dropdown=\"bs-dropdown\"\n [insideClick]=\"true\"\n container=\"body\"\n >\n <button\n class=\"btn-header c8y-dropdown\"\n dropdownToggle\n [title]=\"(column.header | translate) || column.name\"\n >\n <ng-container\n *ngIf=\"\n (\n [{\n columnName: column.name,\n value: ((column.header | translate) || column.name)\n }]\n | map:getHeaderCellRendererSpec:this\n ) as cellRendererSpec\n \"\n >\n <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n </ng-container>\n <i c8yIcon=\"filter\" title=\"{{ 'Filter' | translate }}\"></i>\n </button>\n\n <ul *dropdownMenu class=\"dropdown-menu \" (click)=\"$event.stopPropagation()\">\n <li class=\"data-grid__dropdown\">\n <ng-container\n *ngIf=\"\n (\n [{\n column: column,\n dropdown: dropdown\n }]\n | map:getFilteringFormRendererSpec:this\n ) as filteringFormRendererSpec\n \"\n >\n <c8y-filtering-form-renderer [spec]=\"filteringFormRendererSpec\">\n </c8y-filtering-form-renderer>\n </ng-container>\n </li>\n </ul>\n </div>\n\n <button\n *ngIf=\"column.sortable\"\n class=\"btn-sort\"\n title=\"{{ 'Sort' | translate }}\"\n (click)=\"changeSortOrder(column.name)\"\n >\n <ng-container [ngSwitch]=\"column.sortOrder\">\n <i *ngSwitchCase=\"'asc'\" c8yIcon=\"long-arrow-up\"></i>\n <i *ngSwitchCase=\"'desc'\" c8yIcon=\"long-arrow-down\"></i>\n <i *ngSwitchDefault c8yIcon=\"exchange\"></i>\n </ng-container>\n </button>\n\n <span\n class=\"resize-handle\"\n (mousedown)=\"\n resizeHandleMouseDown$.emit({ event: $event, targetColumnName: column.name })\n \"\n >\n </span>\n </th>\n\n <td\n cdk-cell\n *cdkCellDef=\"let row\"\n [ngClass]=\"column.cellCSSClassName\"\n [attr.data-cell-title]=\"column.header | translate\"\n [class.hidden]=\"!column.visible\"\n >\n <ng-container\n *ngIf=\"\n (\n [{\n value: resolveCellValue(row, column.path),\n row: row,\n columnName: column.name\n }]\n | map:getCellRendererSpec:this\n ) as cellRendererSpec\n \"\n >\n <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n </ng-container>\n </td>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container cdkColumnDef=\"infiniteScrollFooter\">\n <td cdk-footer-cell *cdkFooterCellDef [style.grid-column]=\"styles.gridInfiniteScrollColumn\">\n <template #infiniteScrollContainer></template>\n </td>\n </ng-container>\n\n <tr cdk-header-row *cdkHeaderRowDef=\"columnNames\"></tr>\n\n <tr\n cdk-row\n *cdkRowDef=\"let row; columns: columnNames\"\n (mouseover)=\"rowMouseOver.emit(row)\"\n (mouseleave)=\"rowMouseLeave.emit(row)\"\n (click)=\"rowClick.emit(row)\"\n ></tr>\n\n <ng-container *ngIf=\"infiniteScroll\">\n <tr cdk-footer-row *cdkFooterRowDef=\"['infiniteScrollFooter']\"></tr>\n </ng-container>\n </table>\n\n <div *ngIf=\"(dataSource.loading$ | async) && !loadMoreComponent\" class=\"text-center\">\n <c8y-progress-bar [message]=\"loadingItemsLabel\"></c8y-progress-bar>\n </div>\n\n <div\n class=\"row m-0 p-t-40 p-b-40\"\n *ngIf=\"!(dataSource.loading$ | async) && (dataSource.stats$ | async).filteredSize === 0\"\n >\n <div class=\"col-md-4 col-md-offset-4\">\n <div class=\"c8y-empty-state\">\n <h1 c8yIcon=\"search\"></h1>\n <div>\n <p>\n <strong>{{ noMatchingItemsLabel | translate }}</strong>\n </p>\n <small>{{ 'Refine your search terms' | translate }}</small>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"pagination && !infiniteScroll\" class=\"table-data-grid-footer separator\">\n <div class=\"col-sm-4 no-gutter\">\n <div *ngIf=\"(dataSource.stats$ | async).currentPageSize > 0\" class=\"counter\">\n <span class=\"text-muted\" ngNonBindable translate [translateParams]=\"paginationLabelParams\"\n >{{ pageFirstItemIdx }} - {{ pageLastItemIdx }} of {{ itemsTotal }}</span\n >\n </div>\n </div>\n\n <div class=\"col-sm-4 no-gutter text-center\">\n <div\n *ngIf=\"(dataSource.stats$ | async).filteredSize > minPossiblePageSize\"\n class=\"form-group form-inline\"\n >\n <label class=\"m-r-4\" translate>Items per page</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n [ngModel]=\"pagination.pageSize\"\n (ngModelChange)=\"\n updatePagination({ itemsPerPage: $event, page: pagination.currentPage })\n \"\n >\n <option *ngFor=\"let pageSize of possiblePageSizes\" [ngValue]=\"pageSize\">\n {{ pageSize }}\n </option>\n </select>\n </div>\n </div>\n </div>\n\n <div class=\"col-sm-4 no-gutter text-right\">\n <pagination\n [class.hidden]=\"totalPagesCount <= 1\"\n [ngModel]=\"pagination.currentPage\"\n (pageChanged)=\"updatePagination($event)\"\n [totalItems]=\"(dataSource.stats$ | async).filteredSize\"\n [itemsPerPage]=\"pagination.pageSize\"\n (numPages)=\"totalPagesCount = $event\"\n [maxSize]=\"5\"\n [boundaryLinks]=\"false\"\n previousText=\" \"\n nextText=\" \"\n ></pagination>\n </div>\n </div>\n</div>\n"
|
|
531
531
|
})
|
|
532
532
|
], DataGridComponent);
|
|
533
533
|
export { DataGridComponent };
|
|
534
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BjOHkvbmd4LWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb3JlL2RhdGEtZ3JpZC9kYXRhLWdyaWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUNMLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGdCQUFnQixFQUNoQix3QkFBd0IsRUFDeEIsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLElBQUksU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUNMLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsS0FBSyxFQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0osU0FBUyxFQUNULEdBQUcsRUFDSixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFNUQsT0FBTyxFQVNMLG1CQUFtQixFQUNuQixzQkFBc0IsRUFFdEIsbUJBQW1CLEVBS3BCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FB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bnBCWSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtIZWFkZXJDZWxsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RhYmxlJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudEZhY3RvcnksXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgSVJlc3VsdExpc3QsIFBhZ2luZyB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IGZsb3csIGdldCwgcGFyc2VJbnQgYXMgX3BhcnNlSW50LCB1bmlvbiwgd2l0aG91dCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaXJzdCxcbiAgbWVyZ2VNYXAsXG4gIHRha2UsXG4gIHRha2VVbnRpbCxcbiAgdGFwXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IExvYWRNb3JlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tbW9uL2xvYWQtbW9yZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9hZE1vcmVNb2RlIH0gZnJvbSAnLi4vY29tbW9uL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJy4uL2kxOG4vZ2V0dGV4dCc7XG5pbXBvcnQgeyBDZWxsUmVuZGVyZXJTcGVjIH0gZnJvbSAnLi9jb2x1bW4vY2VsbC1yZW5kZXJlcic7XG5pbXBvcnQgeyBDb2x1bW5EaXJlY3RpdmUgfSBmcm9tICcuL2NvbHVtbi9jb2x1bW4uZGlyZWN0aXZlJztcbmltcG9ydCB7IEZpbHRlcmluZ0Zvcm1SZW5kZXJlclNwZWMsIEZpbHRlcmluZ01vZGlmaWVyIH0gZnJvbSAnLi9jb2x1bW4vZmlsdGVyaW5nLWZvcm0tcmVuZGVyZXInO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29udHJvbCxcbiAgQnVpbHRJbkFjdGlvblR5cGUsXG4gIEJ1bGtBY3Rpb25Db250cm9sLFxuICBDb2x1bW4sXG4gIENvbHVtbkRhdGFUeXBlLFxuICBEYXRhR3JpZCxcbiAgRGF0YVNvdXJjZVN0YXRzLFxuICBEaXNwbGF5T3B0aW9ucyxcbiAgRmlsdGVyaW5nQWN0aW9uVHlwZSxcbiAgbWluQ29sdW1uR3JpZFRyYWNrU2l6ZSxcbiAgUGFnaW5hdGlvbixcbiAgcmF0aW9zQnlDb2x1bW5UeXBlcyxcbiAgUm93LFxuICBTZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrLFxuICBTb3J0T3JkZXIsXG4gIFNwZWNpYWxDb2x1bW5OYW1lXG59IGZyb20gJy4vZGF0YS1ncmlkLm1vZGVsJztcbmltcG9ydCB7IEdyaWREYXRhU291cmNlIH0gZnJvbSAnLi9ncmlkLWRhdGEtc291cmNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRhdGEtZ3JpZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLWdyaWQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERhdGFHcmlkQ29tcG9uZW50IGltcGxlbWVudHMgRGF0YUdyaWQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSBnZXR0ZXh0KCdJdGVtcycpO1xuICBASW5wdXQoKSBsb2FkTW9yZUl0ZW1zTGFiZWw6IHN0cmluZyA9IGdldHRleHQoJ0xvYWQgbW9yZSBpdGVtcycpO1xuICBASW5wdXQoKSBsb2FkaW5nSXRlbXNMYWJlbDogc3RyaW5nID0gZ2V0dGV4dCgnTG9hZGluZyBpdGVtc+KApicpO1xuICBASW5wdXQoKSBub01hdGNoaW5nSXRlbXNMYWJlbDogc3RyaW5nID0gZ2V0dGV4dCgnTm8gbWF0Y2hpbmcgaXRlbXMuJyk7XG5cbiAgY29sdW1uczogQ29sdW1uW107XG4gIEBJbnB1dCgnY29sdW1ucycpXG4gIHNldCBfY29sdW1ucyhjb2x1bW5zKSB7XG4gICAgdGhpcy5jb2x1bW5zID0gY29sdW1ucyB8fCBbXTtcbiAgfVxuXG4gIGRhdGFTb3VyY2UgPSBuZXcgR3JpZERhdGFTb3VyY2UoKTtcbiAgcm93czogUm93W107XG4gIEBJbnB1dCgncm93cycpXG4gIHNldCBfcm93cyhyb3dzKSB7XG4gICAgdGhpcy5yb3dzID0gcm93cyB8fCBbXTtcbiAgfVxuXG4gIGZpbHRlcmluZ0xhYmVsc1BhcmFtcyA9IHtcbiAgICBmaWx0ZXJlZEl0ZW1zQ291bnQ6IDAsXG4gICAgYWxsSXRlbXNDb3VudDogMFxuICB9O1xuXG4gIHBhZ2luYXRpb246IFBhZ2luYXRpb247XG4gIHBhZ2luYXRpb25MYWJlbFBhcmFtcyA9IHtcbiAgICBwYWdlRmlyc3RJdGVtSWR4OiAwLFxuICAgIHBhZ2VMYXN0SXRlbUlkeDogMCxcbiAgICBpdGVtc1RvdGFsOiAwXG4gIH07XG4gIHJlYWRvbmx5IHBvc3NpYmxlUGFnZVNpemVzOiBudW1iZXJbXSA9IFsxMCwgMTUsIDIwLCAzMCwgNTBdO1xuICByZWFkb25seSBtaW5Qb3NzaWJsZVBhZ2VTaXplID0gTWF0aC5taW4oLi4udGhpcy5wb3NzaWJsZVBhZ2VTaXplcyk7XG4gIEBJbnB1dCgncGFnaW5hdGlvbicpXG4gIHNldCBfcGFnaW5hdGlvbihwYWdpbmF0aW9uKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uID0gcGFnaW5hdGlvbjtcbiAgICBjb25zdCBwYWdlU2l6ZSA9IGdldCh0aGlzLnBhZ2luYXRpb24sICdwYWdlU2l6ZScpO1xuXG4gICAgaWYgKFxuICAgICAgcGFnZVNpemUgJiZcbiAgICAgICF0aGlzLnBvc3NpYmxlUGFnZVNpemVzLmZpbmQocG9zc2libGVQYWdlU2l6ZSA9PiBwb3NzaWJsZVBhZ2VTaXplID09PSBwYWdlU2l6ZSlcbiAgICApIHtcbiAgICAgIHRoaXMucGFnaW5hdGlvbiA9IHsgLi4udGhpcy5wYWdpbmF0aW9uLCBwYWdlU2l6ZTogMTAgfTtcbiAgICB9XG4gIH1cblxuICBpbmZpbml0ZVNjcm9sbDogTG9hZE1vcmVNb2RlO1xuICBASW5wdXQoJ2luZmluaXRlU2Nyb2xsJylcbiAgc2V0IF9pbmZpbml0ZVNjcm9sbChpbmZpbml0ZVNjcm9sbDogTG9hZE1vcmVNb2RlKSB7XG4gICAgdGhpcy5pbmZpbml0ZVNjcm9sbCA9IGluZmluaXRlU2Nyb2xsO1xuICB9XG5cbiAgc2VydmVyU2lkZURhdGFDYWxsYmFjazogU2VydmVyU2lkZURhdGFDYWxsYmFjaztcbiAgQElucHV0KCdzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrJylcbiAgc2V0IF9zZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrKHNlcnZlclNpZGVEYXRhQ2FsbGJhY2spIHtcbiAgICB0aGlzLnNlcnZlclNpZGVEYXRhQ2FsbGJhY2sgPSBzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrO1xuICB9XG5cbiAgc2VsZWN0YWJsZSA9IGZhbHNlO1xuICBASW5wdXQoJ3NlbGVjdGFibGUnKVxuICBzZXQgX3NlbGVjdGFibGUoc2VsZWN0YWJsZSkge1xuICAgIHRoaXMuc2VsZWN0YWJsZSA9IHNlbGVjdGFibGU7XG4gIH1cblxuICBzZWxlY3Rpb25QcmltYXJ5S2V5ID0gJ2lkJztcbiAgQElucHV0KCdzZWxlY3Rpb25QcmltYXJ5S2V5JylcbiAgc2V0IF9zZWxlY3Rpb25QcmltYXJ5S2V5KHNlbGVjdGlvblByaW1hcnlLZXkpIHtcbiAgICB0aGlzLnNlbGVjdGlvblByaW1hcnlLZXkgPSBzZWxlY3Rpb25QcmltYXJ5S2V5O1xuICB9XG5cbiAgZGlzcGxheU9wdGlvbnM6IERpc3BsYXlPcHRpb25zID0ge1xuICAgIHN0cmlwZWQ6IHRydWUsXG4gICAgYm9yZGVyZWQ6IGZhbHNlLFxuICAgIGdyaWRIZWFkZXI6IHRydWVcbiAgfTtcbiAgQElucHV0KCdkaXNwbGF5T3B0aW9ucycpXG4gIHNldCBfZGlzcGxheU9wdGlvbnMoZGlzcGxheU9wdGlvbnMpIHtcbiAgICB0aGlzLmRpc3BsYXlPcHRpb25zID0geyAuLi50aGlzLmRpc3BsYXlPcHRpb25zLCAuLi5kaXNwbGF5T3B0aW9ucyB9O1xuICB9XG5cbiAgYWN0aW9uQ29udHJvbHM6IEFjdGlvbkNvbnRyb2xbXTtcbiAgQElucHV0KCdhY3Rpb25Db250cm9scycpXG4gIHNldCBfYWN0aW9uQ29udHJvbHMoYWN0aW9uQ29udHJvbHMpIHtcbiAgICB0aGlzLmFjdGlvbkNvbnRyb2xzID0gYWN0aW9uQ29udHJvbHMgfHwgW107XG4gIH1cblxuICBidWxrQWN0aW9uQ29udHJvbHM6IEJ1bGtBY3Rpb25Db250cm9sW107XG4gIEBJbnB1dCgnYnVsa0FjdGlvbkNvbnRyb2xzJylcbiAgc2V0IF9idWxrQWN0aW9uQ29udHJvbHMoYnVsa0FjdGlvbkNvbnRyb2xzKSB7XG4gICAgdGhpcy5idWxrQWN0aW9uQ29udHJvbHMgPSBidWxrQWN0aW9uQ29udHJvbHMgfHwgW107XG4gIH1cblxuICBAT3V0cHV0KCkgcm93TW91c2VPdmVyID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG4gIEBPdXRwdXQoKSByb3dNb3VzZUxlYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG4gIEBPdXRwdXQoKSByb3dDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuXG4gIEBPdXRwdXQoKSBpdGVtc1NlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihDb2x1bW5EaXJlY3RpdmUpIGNvbHVtblJlbmRlcmVyczogUXVlcnlMaXN0PENvbHVtbkRpcmVjdGl2ZT47XG5cbiAgQFZpZXdDaGlsZCgnc2Nyb2xsJywgeyBzdGF0aWM6IHRydWUgfSkgc2Nyb2xsQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ2luZmluaXRlU2Nyb2xsQ29udGFpbmVyJywgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gIGluZmluaXRlU2Nyb2xsQ29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIGxvYWRNb3JlQ29tcG9uZW50OiBMb2FkTW9yZUNvbXBvbmVudDtcblxuICBjb2x1bW5OYW1lcyA9IFtdO1xuXG4gIHN0eWxlcyA9IHtcbiAgICB0YWJsZUN1cnNvcjogJ2F1dG8nLFxuICAgIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IHVuZGVmaW5lZCxcbiAgICBncmlkSW5maW5pdGVTY3JvbGxDb2x1bW46IHVuZGVmaW5lZFxuICB9O1xuXG4gIHNlYXJjaFRleHQkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIHNlYXJjaFRleHQgPSAnJztcbiAgZmlsdGVyaW5nQXBwbGllZCA9IGZhbHNlO1xuICB0b3RhbFBhZ2VzQ291bnQgPSBJbmZpbml0eTtcblxuICBzZWxlY3RlZEl0ZW1JZHM6IHN0cmluZ1tdID0gW107XG4gIGN1cnJlbnRQYWdlU2VsZWN0aW9uU3RhdGUgPSB7XG4gICAgYWxsU2VsZWN0ZWQ6IGZhbHNlLFxuICAgIGFsbERlc2VsZWN0ZWQ6IHRydWVcbiAgfTtcblxuICBidWlsdEluQWN0aW9uVHlwZSA9IHtcbiAgICBFZGl0OiBCdWlsdEluQWN0aW9uVHlwZS5FZGl0LFxuICAgIERlbGV0ZTogQnVpbHRJbkFjdGlvblR5cGUuRGVsZXRlLFxuICAgIEV4cG9ydDogQnVpbHRJbkFjdGlvblR5cGUuRXhwb3J0XG4gIH07XG5cbiAgcmVzaXplSGFuZGxlTW91c2VEb3duJCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICByZXNpemVIYW5kbGVDb250YWluZXJNb3VzZU1vdmUkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHJlc2l6ZUhhbmRsZUNvbnRhaW5lck1vdXNlVXAkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHByaXZhdGUgaGVhZGVyQmVpbmdSZXNpemVkOiB7XG4gICAgY29sdW1uTmFtZTogc3RyaW5nO1xuICAgIGVsOiBIVE1MRWxlbWVudDtcbiAgfTtcbiAgQFZpZXdDaGlsZHJlbihDZGtIZWFkZXJDZWxsLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgcHJpdmF0ZSB0aFJlZnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgcHJpdmF0ZSB0aEVscztcblxuICBwcml2YXRlIHJlY3JlYXRlTG9hZE1vcmVDb21wb25lbnQ6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIGhvc3RSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBjZnI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlclxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZWFyY2hUZXh0JFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksXG4gICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICB0YXAoc2VhcmNoVGV4dCA9PiB7XG4gICAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gc2VhcmNoVGV4dDtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgfSk7XG5cbiAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICBjb21iaW5lTGF0ZXN0KHRoaXMuZGF0YVNvdXJjZS5kYXRhJCwgdGhpcy5pdGVtc1NlbGVjdC5hc09ic2VydmFibGUoKSlcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSlcbiAgICAgICAgLnN1YnNjcmliZSgoW2RhdGFdKSA9PiB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFBhZ2VFbXB0eSA9IGRhdGEubGVuZ3RoID09PSAwO1xuXG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZVNlbGVjdGlvblN0YXRlID0ge1xuICAgICAgICAgICAgYWxsU2VsZWN0ZWQ6IGN1cnJlbnRQYWdlRW1wdHkgPyBmYWxzZSA6IGRhdGEuZXZlcnkoaXRlbSA9PiB0aGlzLmlzSXRlbVNlbGVjdGVkKGl0ZW0pKSxcbiAgICAgICAgICAgIGFsbERlc2VsZWN0ZWQ6IGN1cnJlbnRQYWdlRW1wdHkgPyB0cnVlIDogZGF0YS5ldmVyeShpdGVtID0+ICF0aGlzLmlzSXRlbVNlbGVjdGVkKGl0ZW0pKVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmRhdGFTb3VyY2Uuc3RhdHMkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKHN0YXRzID0+IHtcbiAgICAgIHRoaXMuY3JlYXRlTG9hZE1vcmVDb21wb25lbnQoc3RhdHMpO1xuICAgICAgdGhpcy51cGRhdGVGaWx0ZXJpbmdMYWJlbHNQYXJhbXMoc3RhdHMpO1xuICAgICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uTGFiZWxQYXJhbXMoc3RhdHMpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy51cGRhdGVDb2x1bW5zKCk7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMudXBkYXRlR3JpZENvbHVtbnNTaXplKCk7XG4gICAgdGhpcy50aEVscyA9IHRoaXMudGhSZWZzLnRvQXJyYXkoKS5tYXAoKHsgbmF0aXZlRWxlbWVudCB9KSA9PiBuYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnNldHVwUmVzaXplSGFuZGxlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHRyYWNrQnlOYW1lKGluZGV4LCBpdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0ubmFtZTtcbiAgfVxuXG4gIHJlc29sdmVDZWxsVmFsdWUocm93LCBwYXRoKSB7XG4gICAgcmV0dXJuIGZsb3coW1xuICAgICAgeCA9PiB0aGlzLmRhdGFTb3VyY2UucmVzb2x2ZVZhbHVlKHgsIHBhdGgpLFxuICAgICAgdGhpcy5kYXRhU291cmNlLnJlc29sdmVGdW5jdGlvbixcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5ub3JtYWxpemVOaWxcbiAgICBdKShyb3cpO1xuICB9XG5cbiAgY2hhbmdlU29ydE9yZGVyKGNvbHVtbk5hbWUpIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IGNvbHVtbk5hbWUpO1xuXG4gICAgaWYgKGNvbHVtbikge1xuICAgICAgY29uc3QgeyBzb3J0T3JkZXIgfSA9IGNvbHVtbjtcblxuICAgICAgaWYgKCFzb3J0T3JkZXIpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTb3J0aW5nKFtjb2x1bW5OYW1lXSwgJ2FzYycpO1xuICAgICAgfSBlbHNlIGlmIChzb3J0T3JkZXIgPT09ICdhc2MnKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU29ydGluZyhbY29sdW1uTmFtZV0sICdkZXNjJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVwZGF0ZVNvcnRpbmcoW2NvbHVtbk5hbWVdLCAnJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlU29ydGluZyhjb2x1bW5OYW1lczogc3RyaW5nW10sIHNvcnRPcmRlcjogU29ydE9yZGVyKSB7XG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChcbiAgICAgIChjb2x1bW4pOiBDb2x1bW4gPT4ge1xuICAgICAgICBpZiAoY29sdW1uTmFtZXMuaW5jbHVkZXMoY29sdW1uLm5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4uY29sdW1uLCBzb3J0T3JkZXIgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICBhcHBseUZpbHRlcihjb2x1bW5OYW1lLCBkcm9wZG93biwgZmlsdGVyaW5nTW9kaWZpZXIpIHtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZyhbY29sdW1uTmFtZV0sIHtcbiAgICAgIHR5cGU6IEZpbHRlcmluZ0FjdGlvblR5cGUuQXBwbHlGaWx0ZXIsXG4gICAgICBwYXlsb2FkOiB7IGZpbHRlcmluZ01vZGlmaWVyIH1cbiAgICB9KTtcbiAgICBkcm9wZG93bi5oaWRlKCk7XG4gIH1cblxuICByZXNldEZpbHRlcihjb2x1bW5OYW1lLCBkcm9wZG93bikge1xuICAgIHRoaXMudXBkYXRlRmlsdGVyaW5nKFtjb2x1bW5OYW1lXSwgeyB0eXBlOiBGaWx0ZXJpbmdBY3Rpb25UeXBlLlJlc2V0RmlsdGVyIH0pO1xuICAgIGRyb3Bkb3duLmhpZGUoKTtcbiAgfVxuXG4gIGNsZWFyRmlsdGVycygpIHtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZyh0aGlzLmNvbHVtbnMubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSksIHtcbiAgICAgIHR5cGU6IEZpbHRlcmluZ0FjdGlvblR5cGUuUmVzZXRGaWx0ZXJcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUZpbHRlcmluZyhcbiAgICBjb2x1bW5OYW1lczogc3RyaW5nW10sXG4gICAgYWN0aW9uOiB7XG4gICAgICB0eXBlOiBGaWx0ZXJpbmdBY3Rpb25UeXBlO1xuICAgICAgcGF5bG9hZD86IHsgZmlsdGVyaW5nTW9kaWZpZXI6IEZpbHRlcmluZ01vZGlmaWVyIH07XG4gICAgfVxuICApIHtcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGNvbHVtbiA9PiB7XG4gICAgICBpZiAoY29sdW1uTmFtZXMuaW5jbHVkZXMoY29sdW1uLm5hbWUpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgIC4uLihhY3Rpb24udHlwZSA9PT0gRmlsdGVyaW5nQWN0aW9uVHlwZS5BcHBseUZpbHRlclxuICAgICAgICAgICAgPyBhY3Rpb24ucGF5bG9hZC5maWx0ZXJpbmdNb2RpZmllclxuICAgICAgICAgICAgOiB7IGZpbHRlclByZWRpY2F0ZTogdW5kZWZpbmVkLCBleHRlcm5hbEZpbHRlclF1ZXJ5OiB1bmRlZmluZWQgfSlcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9KTtcblxuICAgIHRoaXMudXBkYXRlRmlsdGVyaW5nQXBwbGllZCgpO1xuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICB1cGRhdGVGaWx0ZXJpbmdBcHBsaWVkKCkge1xuICAgIHRoaXMuZmlsdGVyaW5nQXBwbGllZCA9IHRoaXMuY29sdW1ucy5zb21lKHRoaXMuaXNDb2x1bW5GaWx0ZXJpbmdBcHBsaWVkKTtcbiAgfVxuXG4gIGlzQ29sdW1uRmlsdGVyaW5nQXBwbGllZChjb2x1bW46IENvbHVtbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgZmlsdGVyYWJsZSwgZmlsdGVyUHJlZGljYXRlLCBleHRlcm5hbEZpbHRlclF1ZXJ5IH0gPSBjb2x1bW47XG5cbiAgICByZXR1cm4gISEoZmlsdGVyYWJsZSAmJiAoZmlsdGVyUHJlZGljYXRlIHx8IGV4dGVybmFsRmlsdGVyUXVlcnkpKTtcbiAgfVxuXG4gIHVwZGF0ZVBhZ2luYXRpb24oeyBpdGVtc1BlclBhZ2UsIHBhZ2UgfSkge1xuICAgIHRoaXMucGFnaW5hdGlvbiA9IHsgLi4udGhpcy5wYWdpbmF0aW9uLCBwYWdlU2l6ZTogaXRlbXNQZXJQYWdlLCBjdXJyZW50UGFnZTogcGFnZSB9O1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgfVxuXG4gIHJlbG9hZCgpIHtcbiAgICB0aGlzLnBhZ2luYXRpb24gPSB7IC4uLnRoaXMucGFnaW5hdGlvbiwgY3VycmVudFBhZ2U6IDEgfTtcbiAgICB0aGlzLnJlY3JlYXRlTG9hZE1vcmVDb21wb25lbnQgPSB0cnVlO1xuICAgIHRoaXMubG9hZERhdGEodHJ1ZSk7XG4gICAgdGhpcy5zY3JvbGxUb1RvcCgpO1xuICB9XG5cbiAgbG9hZE5leHRQYWdlKCk6IFByb21pc2U8SVJlc3VsdExpc3Q8b2JqZWN0Pj4ge1xuICAgIHRoaXMucGFnaW5hdGlvbiA9IHsgLi4udGhpcy5wYWdpbmF0aW9uLCBjdXJyZW50UGFnZTogdGhpcy5wYWdpbmF0aW9uLm5leHRQYWdlIH07XG5cbiAgICB0aGlzLmxvYWREYXRhKCk7XG5cbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlLnJlc3VsdExpc3QkXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBpbiBvcmRlciBmb3IgYHRvUHJvbWlzZWAgdG8gd29yaywgdGhlIG9ic2VydmFibGUgbmVlZHMgdG8gY29tcGxldGVcbiAgICAgIC50b1Byb21pc2UoKVxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgcGFnaW5nOiB7XG4gICAgICAgICAgICAuLi5yZXN1bHQucGFnaW5nLFxuICAgICAgICAgICAgbmV4dDogdGhpcy5sb2FkTmV4dFBhZ2UuYmluZCh0aGlzKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBhcyBJUmVzdWx0TGlzdDxvYmplY3Q+O1xuICAgICAgfSk7XG4gIH1cblxuICBnZXRDZWxsUmVuZGVyZXJTcGVjKHsgdmFsdWUsIHJvdywgY29sdW1uTmFtZSB9KTogQ2VsbFJlbmRlcmVyU3BlYyB7XG4gICAgcmV0dXJuIHRoaXMuX2dldENlbGxSZW5kZXJlclNwZWMoeyB0eXBlOiAnQ0VMTCcsIHZhbHVlLCByb3csIGNvbHVtbk5hbWUgfSk7XG4gIH1cblxuICBnZXRIZWFkZXJDZWxsUmVuZGVyZXJTcGVjKHsgdmFsdWUsIGNvbHVtbk5hbWUgfSk6IENlbGxSZW5kZXJlclNwZWMge1xuICAgIHJldHVybiB0aGlzLl9nZXRDZWxsUmVuZGVyZXJTcGVjKHsgdHlwZTogJ0hFQURFUicsIHZhbHVlLCByb3c6IHVuZGVmaW5lZCwgY29sdW1uTmFtZSB9KTtcbiAgfVxuXG4gIGdldEZpbHRlcmluZ0Zvcm1SZW5kZXJlclNwZWMoeyBjb2x1bW4sIGRyb3Bkb3duIH0pOiBGaWx0ZXJpbmdGb3JtUmVuZGVyZXJTcGVjIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVuZGVyZXI6XG4gICAgICAgIGdldCh0aGlzLmdldENvbHVtblJlbmRlcmVyKGNvbHVtbiksICdmaWx0ZXJpbmdGb3JtUmVuZGVyZXJEZWYudGVtcGxhdGUnKSB8fFxuICAgICAgICBjb2x1bW4uZmlsdGVyaW5nRm9ybVJlbmRlcmVyQ29tcG9uZW50LFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBwcm9wZXJ0eTogY29sdW1uLFxuICAgICAgICBhcHBseUZpbHRlcjogdGhpcy5hcHBseUZpbHRlci5iaW5kKHRoaXMsIGNvbHVtbi5uYW1lLCBkcm9wZG93biksXG4gICAgICAgIHJlc2V0RmlsdGVyOiB0aGlzLnJlc2V0RmlsdGVyLmJpbmQodGhpcywgY29sdW1uLm5hbWUsIGRyb3Bkb3duKVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBzZXRBbGxJdGVtc1NlbGVjdGVkKHNlbGVjdGVkKSB7XG4gICAgdGhpcy5kYXRhU291cmNlLnNlbGVjdGlvbiRcbiAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGZpbHRlcmVkRGF0YUlkcyB9KSA9PiB0aGlzLnNldEl0ZW1zU2VsZWN0ZWQoZmlsdGVyZWREYXRhSWRzLCBzZWxlY3RlZCkpO1xuICB9XG5cbiAgc2V0QWxsSXRlbXNJbkN1cnJlbnRQYWdlU2VsZWN0ZWQoc2VsZWN0ZWQpIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoZGF0YSA9PiB0aGlzLnNldEl0ZW1zU2VsZWN0ZWQoZGF0YSwgc2VsZWN0ZWQpKTtcbiAgfVxuXG4gIHNldEl0ZW1zU2VsZWN0ZWQoaXRlbXM6IGFueVtdLCBzZWxlY3RlZCkge1xuICAgIGNvbnN0IGl0ZW1JZHMgPSBpdGVtcy5tYXAoKGl0ZW06IG9iamVjdCB8IHN0cmluZykgPT5cbiAgICAgIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyA/IGl0ZW1bdGhpcy5zZWxlY3Rpb25QcmltYXJ5S2V5XSA6IGl0ZW1cbiAgICApO1xuXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1JZHMgPSBzZWxlY3RlZFxuICAgICAgPyB1bmlvbih0aGlzLnNlbGVjdGVkSXRlbUlkcywgaXRlbUlkcylcbiAgICAgIDogd2l0aG91dCh0aGlzLnNlbGVjdGVkSXRlbUlkcywgLi4uaXRlbUlkcyk7XG5cbiAgICB0aGlzLml0ZW1zU2VsZWN0LmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1JZHMpO1xuICB9XG5cbiAgaXNJdGVtU2VsZWN0ZWQoaXRlbSkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbUlkcy5pbmNsdWRlcyhpdGVtW3RoaXMuc2VsZWN0aW9uUHJpbWFyeUtleV0pO1xuICB9XG5cbiAgb25Db2x1bW5Ecm9wKHsgcHJldmlvdXNJbmRleCwgY3VycmVudEluZGV4IH0pIHtcbiAgICBjb25zdCBkaWZmZXJlbnRJbmRleCA9IHByZXZpb3VzSW5kZXggIT09IGN1cnJlbnRJbmRleDtcblxuICAgIGlmIChkaWZmZXJlbnRJbmRleCkge1xuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLnNwbGljZShwcmV2aW91c0luZGV4LCAxKTtcbiAgICAgIHRoaXMuY29sdW1ucy5zcGxpY2UoY3VycmVudEluZGV4LCAwLCBjb2x1bW5bMF0pO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlQ29sdW1uTmFtZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUdyaWRDb2x1bW5zU2l6ZSgpO1xuICB9XG5cbiAgdXBkYXRlR3JpZENvbHVtbnNTaXplKCkge1xuICAgIHRoaXMuc3R5bGVzID0ge1xuICAgICAgLi4udGhpcy5zdHlsZXMsXG4gICAgICBncmlkVGVtcGxhdGVDb2x1bW5zOiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUoXG4gICAgICAgIHRoaXMuY29sdW1uc1xuICAgICAgICAgIC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi52aXNpYmxlKVxuICAgICAgICAgIC5tYXAoKHsgZ3JpZFRyYWNrU2l6ZSB9KSA9PiBncmlkVHJhY2tTaXplKVxuICAgICAgICAgIC5qb2luKCcgJylcbiAgICAgICksXG4gICAgICBncmlkSW5maW5pdGVTY3JvbGxDb2x1bW46IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShcbiAgICAgICAgYDEgLyBzcGFuICR7dGhpcy5jb2x1bW5zLmxlbmd0aH1gXG4gICAgICApXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29sdW1ucygpIHtcbiAgICBjb25zdCBzcGVjaWFsQ29sdW1uID0ge1xuICAgICAgZ3JpZFRyYWNrU2l6ZTogJzQycHgnLFxuICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgcG9zaXRpb25GaXhlZDogdHJ1ZVxuICAgIH07XG5cbiAgICB0aGlzLmNvbHVtbnMgPSBbXG4gICAgICB0aGlzLnNlbGVjdGFibGUgPyB7IC4uLnNwZWNpYWxDb2x1bW4sIG5hbWU6IFNwZWNpYWxDb2x1bW5OYW1lLkNoZWNrYm94IH0gOiB1bmRlZmluZWQsXG4gICAgICAuLi50aGlzLmNvbHVtbnMsXG4gICAgICB0aGlzLmFjdGlvbkNvbnRyb2xzLmxlbmd0aCA+IDBcbiAgICAgICAgPyB7IC4uLnNwZWNpYWxDb2x1bW4sIG5hbWU6IFNwZWNpYWxDb2x1bW5OYW1lLkFjdGlvbnMgfVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgIF1cbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5tYXAodGhpcy53aXRoQ29sdW1uRGVmYXVsdHMpO1xuXG4gICAgdGhpcy51cGRhdGVDb2x1bW5OYW1lcygpO1xuICAgIHRoaXMudXBkYXRlR3JpZENvbHVtbnNTaXplKCk7XG4gICAgdGhpcy51cGRhdGVGaWx0ZXJpbmdBcHBsaWVkKCk7XG4gIH1cblxuICBwcml2YXRlIHdpdGhDb2x1bW5EZWZhdWx0cyhjb2x1bW4pOiBDb2x1bW4ge1xuICAgIGNvbnN0IGRhdGFUeXBlID0gY29sdW1uLmRhdGFUeXBlIHx8IENvbHVtbkRhdGFUeXBlLlRleHRTaG9ydDtcbiAgICBjb25zdCB7IGhlYWRlckNTU0NsYXNzTmFtZSwgY2VsbENTU0NsYXNzTmFtZSB9ID0gY29sdW1uO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICBwb3NpdGlvbkZpeGVkOiBmYWxzZSxcbiAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgc29ydE9yZGVyOiAnJyxcbiAgICAgIGZpbHRlcmFibGU6IGZhbHNlLFxuICAgICAgLi4uY29sdW1uLFxuICAgICAgZGF0YVR5cGUsXG4gICAgICBncmlkVHJhY2tTaXplOlxuICAgICAgICBjb2x1bW4uZ3JpZFRyYWNrU2l6ZSB8fFxuICAgICAgICBgbWlubWF4KCR7bWluQ29sdW1uR3JpZFRyYWNrU2l6ZX1weCwgJHtyYXRpb3NCeUNvbHVtblR5cGVzW2RhdGFUeXBlXX1mcilgLFxuICAgICAgaGVhZGVyQ1NTQ2xhc3NOYW1lOlxuICAgICAgICAodHlwZW9mIGhlYWRlckNTU0NsYXNzTmFtZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICA/IGhlYWRlckNTU0NsYXNzTmFtZS5zcGxpdCgnICcpXG4gICAgICAgICAgOiBoZWFkZXJDU1NDbGFzc05hbWUpIHx8IFtdLFxuICAgICAgY2VsbENTU0NsYXNzTmFtZTpcbiAgICAgICAgKHR5cGVvZiBjZWxsQ1NTQ2xhc3NOYW1lID09PSAnc3RyaW5nJyA/IGNlbGxDU1NDbGFzc05hbWUuc3BsaXQoJyAnKSA6IGNlbGxDU1NDbGFzc05hbWUpIHx8XG4gICAgICAgIFtdXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29sdW1uTmFtZXMoKSB7XG4gICAgdGhpcy5jb2x1bW5OYW1lcyA9IHRoaXMuY29sdW1ucy5tYXAoKHsgbmFtZSB9KSA9PiBuYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBSZXNpemVIYW5kbGUoKSB7XG4gICAgY29uc3QgcmVzaXplSGFuZGxlRHJhZyQgPSB0aGlzLnJlc2l6ZUhhbmRsZU1vdXNlRG93biQucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5jbGVhck1vdXNlSGlnaGxpZ2h0cygpKSxcbiAgICAgIG1lcmdlTWFwKCh7IGV2ZW50LCB0YXJnZXRDb2x1bW5OYW1lIH0pID0+IHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjb2x1bW4gPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4ubmFtZSA9PT0gdGFyZ2V0Q29sdW1uTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgICAgICBoZWFkZXJDU1NDbGFzc05hbWU6IHVuaW9uKGNvbHVtbi5oZWFkZXJDU1NDbGFzc05hbWUsIFsnaGVhZGVyLS1iZWluZy1yZXNpemVkJ10pXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuaGVhZGVyQmVpbmdSZXNpemVkID0ge1xuICAgICAgICAgIGNvbHVtbk5hbWU6IHRhcmdldENvbHVtbk5hbWUsXG4gICAgICAgICAgZWw6IGV2ZW50LnRhcmdldC5wYXJlbnROb2RlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zdHlsZXMgPSB7XG4gICAgICAgICAgLi4udGhpcy5zdHlsZXMsXG4gICAgICAgICAgdGFibGVDdXJzb3I6ICdjb2wtcmVzaXplJ1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLnJlc2l6ZUhhbmRsZUNvbnRhaW5lck1vdXNlTW92ZSQucGlwZShcbiAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5jbGVhck1vdXNlSGlnaGxpZ2h0cygpKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5yZXNpemVIYW5kbGVDb250YWluZXJNb3VzZVVwJClcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHJlc2l6ZUhhbmRsZURyYWckLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKChjb2x1bW4sIGkpID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLm5hbWUgPT09IHRoaXMuaGVhZGVyQmVpbmdSZXNpemVkLmNvbHVtbk5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudDtcblxuICAgICAgICAgICAgLy8gUmVhZCB3cmFwcGVyJ3Mgb2Zmc2V0IGxlZnQgcmVsYXRpdmUgdG8gdGhlIGRvY3VtZW50LlxuICAgICAgICAgICAgY29uc3QgaG9yaXpvbnRhbE9mZnNldCA9IHdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblxuICAgICAgICAgICAgLy8gQWRqdXN0IHdpdGggdGhlIHdyYXBwZXIgaG9yaXpvbnRhbCBzY3JvbGwgcG9zaXRpb24uXG4gICAgICAgICAgICBjb25zdCBob3Jpem9udGFsU2Nyb2xsT2Zmc2V0ID0gd3JhcHBlci5zY3JvbGxMZWZ0IC0gaG9yaXpvbnRhbE9mZnNldDtcblxuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXNpcmVkIHdpZHRoLlxuICAgICAgICAgICAgY29uc3Qgd2lkdGggPVxuICAgICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsT2Zmc2V0ICsgZXZlbnQuY2xpZW50WCAtICh0aGlzLmhlYWRlckJlaW5nUmVzaXplZC5lbC5vZmZzZXRMZWZ0IHx8IDApO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgY29sdW1uIG9iamVjdCB3aXRoIHRoZSBuZXcgc2l6ZSB2YWx1ZSwgZW5mb3JjZSBvdXIgbWluaW11bSBzaXplLlxuICAgICAgICAgICAgICBncmlkVHJhY2tTaXplOiBgJHtNYXRoLm1heChtaW5Db2x1bW5HcmlkVHJhY2tTaXplLCB3aWR0aCl9cHhgXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEZvciB0aGUgb3RoZXIgaGVhZGVycyB3aGljaCBkb24ndCBoYXZlIGEgc2V0IHdpZHRoLCBmaXggaXQgdG8gdGhlaXIgY29tcHV0ZWQgd2lkdGguXG4gICAgICAgICAgaWYgKGNvbHVtbi5ncmlkVHJhY2tTaXplLnN0YXJ0c1dpdGgoJ21pbm1heCcpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgIC8vIGlzbid0IGZpeGVkIHlldCAoaXQgd291bGQgYmUgYSBweCB2YWx1ZSlcbiAgICAgICAgICAgICAgZ3JpZFRyYWNrU2l6ZTogYCR7X3BhcnNlSW50KHRoaXMudGhFbHNbaV0uY2xpZW50V2lkdGgpfXB4YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgICAgICB9KTtcblxuICAgICAgICAvKlxuICAgICAgICAgKiBVcGRhdGUgdGhlIGNvbHVtbiBzaXplcy5cbiAgICAgICAgICogTm90ZTogZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zIHNldHMgdGhlIHdpZHRoIGZvciBhbGwgY29sdW1ucyBpbiBvbmUgdmFsdWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnVwZGF0ZUdyaWRDb2x1bW5zU2l6ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc2l6ZUhhbmRsZUNvbnRhaW5lck1vdXNlVXAkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmhlYWRlckJlaW5nUmVzaXplZCkge1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGNvbHVtbiA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5uYW1lID09PSB0aGlzLmhlYWRlckJlaW5nUmVzaXplZC5jb2x1bW5OYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgIGhlYWRlckNTU0NsYXNzTmFtZTogd2l0aG91dChjb2x1bW4uaGVhZGVyQ1NTQ2xhc3NOYW1lLCAnaGVhZGVyLS1iZWluZy1yZXNpemVkJylcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaGVhZGVyQmVpbmdSZXNpemVkID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMuc3R5bGVzID0ge1xuICAgICAgICAgIC4uLnRoaXMuc3R5bGVzLFxuICAgICAgICAgIHRhYmxlQ3Vyc29yOiAnYXV0bydcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJNb3VzZUhpZ2hsaWdodHMoKSB7XG4gICAgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcbiAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXRDZWxsUmVuZGVyZXJTcGVjKHsgdHlwZSwgdmFsdWUsIHJvdywgY29sdW1uTmFtZSB9KTogQ2VsbFJlbmRlcmVyU3BlYyB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoKHsgbmFtZSB9KSA9PiBuYW1lID09PSBjb2x1bW5OYW1lKTtcbiAgICBjb25zdCBjb2x1bW5SZW5kZXJlciA9IHRoaXMuZ2V0Q29sdW1uUmVuZGVyZXIoY29sdW1uKTtcbiAgICBjb25zdCByZW5kZXJlclRlbXBsYXRlID0gZ2V0KFxuICAgICAgY29sdW1uUmVuZGVyZXIsXG4gICAgICBgJHt0eXBlID09PSAnSEVBREVSJyA/ICdoZWFkZXJDZWxsUmVuZGVyZXJEZWYnIDogJ2NlbGxSZW5kZXJlckRlZid9LnRlbXBsYXRlYFxuICAgICk7XG5cbiAgICBjb25zdCB7IGNlbGxSZW5kZXJlckNvbXBvbmVudCwgaGVhZGVyQ2VsbFJlbmRlcmVyQ29tcG9uZW50IH0gPSBjb2x1bW47XG4gICAgY29uc3QgcmVuZGVyZXJDb21wb25lbnQgPVxuICAgICAgdHlwZSA9PT0gJ0hFQURFUicgPyBoZWFkZXJDZWxsUmVuZGVyZXJDb21wb25lbnQgOiBjZWxsUmVuZGVyZXJDb21wb25lbnQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVuZGVyZXI6IHJlbmRlcmVyVGVtcGxhdGUgfHwgcmVuZGVyZXJDb21wb25lbnQsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBpdGVtOiByb3csXG4gICAgICAgIHByb3BlcnR5OiBjb2x1bW5cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5SZW5kZXJlcihjb2x1bW4pOiBDb2x1bW5EaXJlY3RpdmUge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblJlbmRlcmVycy50b0FycmF5KCkuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IGNvbHVtbi5uYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGEocmVsb2FkOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBjb25zdCB7XG4gICAgICByb3dzLFxuICAgICAgY29sdW1ucyxcbiAgICAgIHBhZ2luYXRpb24sXG4gICAgICBzZWFyY2hUZXh0LFxuICAgICAgc2VydmVyU2lkZURhdGFDYWxsYmFjayxcbiAgICAgIHNlbGVjdGFibGUsXG4gICAgICBzZWxlY3Rpb25QcmltYXJ5S2V5LFxuICAgICAgaW5maW5pdGVTY3JvbGxcbiAgICB9ID0gdGhpcztcblxuICAgIHRoaXMuZGF0YVNvdXJjZS5sb2FkRGF0YSh7XG4gICAgICByb3dzLFxuICAgICAgY29sdW1ucyxcbiAgICAgIHBhZ2luYXRpb24sXG4gICAgICBzZWFyY2hUZXh0LFxuICAgICAgc2VydmVyU2lkZURhdGFDYWxsYmFjayxcbiAgICAgIHNlbGVjdGFibGUsXG4gICAgICBzZWxlY3Rpb25QcmltYXJ5S2V5LFxuICAgICAgaW5maW5pdGVTY3JvbGwsXG4gICAgICByZWxvYWRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmlsdGVyaW5nTGFiZWxzUGFyYW1zKHN0YXRzOiBEYXRhU291cmNlU3RhdHMpIHtcbiAgICB0aGlzLmZpbHRlcmluZ0xhYmVsc1BhcmFtcyA9IHtcbiAgICAgIGZpbHRlcmVkSXRlbXNDb3VudDogc3RhdHMuZmlsdGVyZWRTaXplLFxuICAgICAgYWxsSXRlbXNDb3VudDogc3RhdHMuc2l6ZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBhZ2luYXRpb25MYWJlbFBhcmFtcyhzdGF0czogRGF0YVNvdXJjZVN0YXRzKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uLm5leHRQYWdlID0gc3RhdHMubmV4dFBhZ2U7XG4gICAgY29uc3QgcGFnZUZpcnN0SXRlbUlkeCA9IChzdGF0cy5jdXJyZW50UGFnZSAtIDEpICogc3RhdHMuZmlyc3RQYWdlU2l6ZSArIDE7XG4gICAgdGhpcy5wYWdpbmF0aW9uTGFiZWxQYXJhbXMgPSB7XG4gICAgICBwYWdlRmlyc3RJdGVtSWR4LFxuICAgICAgcGFnZUxhc3RJdGVtSWR4OiBwYWdlRmlyc3RJdGVtSWR4ICsgKHN0YXRzLmN1cnJlbnRQYWdlU2l6ZSAtIDEpLFxuICAgICAgaXRlbXNUb3RhbDogc3RhdHMuZmlsdGVyZWRTaXplXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTG9hZE1vcmVDb21wb25lbnQoc3RhdHM6IERhdGFTb3VyY2VTdGF0cykge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5maW5pdGVTY3JvbGwgJiZcbiAgICAgIHN0YXRzICYmXG4gICAgICBzdGF0cy5uZXh0UGFnZSAmJlxuICAgICAgKCF0aGlzLmxvYWRNb3JlQ29tcG9uZW50IHx8IHRoaXMucmVjcmVhdGVMb2FkTW9yZUNvbXBvbmVudClcbiAgICApIHtcbiAgICAgIHRoaXMucmVjcmVhdGVMb2FkTW9yZUNvbXBvbmVudCA9IGZhbHNlO1xuICAgICAgdGhpcy5pbmZpbml0ZVNjcm9sbENvbnRhaW5lci5jbGVhcigpO1xuICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxhbnk+ID0gdGhpcy5jZnIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoXG4gICAgICAgIExvYWRNb3JlQ29tcG9uZW50XG4gICAgICApO1xuICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5pbmZpbml0ZVNjcm9sbENvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBMb2FkTW9yZUNvbXBvbmVudDtcbiAgICAgIGluc3RhbmNlLnVzZUludGVyc2VjdGlvbiA9IHRoaXMuaW5maW5pdGVTY3JvbGwgPT09ICdhdXRvJyB8fCB0aGlzLmluZmluaXRlU2Nyb2xsID09PSAnaGlkZGVuJztcbiAgICAgIGluc3RhbmNlLmhpZGRlbiA9IHRoaXMuaW5maW5pdGVTY3JvbGwgPT09ICdoaWRkZW4nO1xuICAgICAgaW5zdGFuY2UucGFnaW5nID0ge1xuICAgICAgICBuZXh0UGFnZTogc3RhdHMubmV4dFBhZ2UsXG4gICAgICAgIG5leHQ6IHRoaXMubG9hZE5leHRQYWdlLmJpbmQodGhpcylcbiAgICAgIH0gYXMgUGFnaW5nPGFueT47XG4gICAgICBpbnN0YW5jZS5sb2FkTmV4dExhYmVsID0gdGhpcy5sb2FkTW9yZUl0ZW1zTGFiZWw7XG4gICAgICBpbnN0YW5jZS5sb2FkaW5nTGFiZWwgPSB0aGlzLmxvYWRpbmdJdGVtc0xhYmVsO1xuICAgICAgdGhpcy5sb2FkTW9yZUNvbXBvbmVudCA9IGluc3RhbmNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sb2FkTW9yZUNvbXBvbmVudCAmJiAhc3RhdHMubmV4dFBhZ2UpIHtcbiAgICAgIHRoaXMubG9hZE1vcmVDb21wb25lbnQucGFnaW5nID0ge1xuICAgICAgICBuZXh0UGFnZTogbnVsbFxuICAgICAgfSBhcyBQYWdpbmc8YW55PjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbFRvVG9wKCkge1xuICAgIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
534
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BjOHkvbmd4LWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb3JlL2RhdGEtZ3JpZC9kYXRhLWdyaWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUNMLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGdCQUFnQixFQUNoQix3QkFBd0IsRUFDeEIsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLElBQUksU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUNMLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsS0FBSyxFQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0osU0FBUyxFQUNULEdBQUcsRUFDSixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFNUQsT0FBTyxFQVNMLG1CQUFtQixFQUNuQixzQkFBc0IsRUFFdEIsbUJBQW1CLEVBS3BCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FB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bnBCWSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtIZWFkZXJDZWxsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RhYmxlJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudEZhY3RvcnksXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgSVJlc3VsdExpc3QsIFBhZ2luZyB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IGZsb3csIGdldCwgcGFyc2VJbnQgYXMgX3BhcnNlSW50LCB1bmlvbiwgd2l0aG91dCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaXJzdCxcbiAgbWVyZ2VNYXAsXG4gIHRha2UsXG4gIHRha2VVbnRpbCxcbiAgdGFwXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IExvYWRNb3JlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tbW9uL2xvYWQtbW9yZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9hZE1vcmVNb2RlIH0gZnJvbSAnLi4vY29tbW9uL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJy4uL2kxOG4vZ2V0dGV4dCc7XG5pbXBvcnQgeyBDZWxsUmVuZGVyZXJTcGVjIH0gZnJvbSAnLi9jb2x1bW4vY2VsbC1yZW5kZXJlcic7XG5pbXBvcnQgeyBDb2x1bW5EaXJlY3RpdmUgfSBmcm9tICcuL2NvbHVtbi9jb2x1bW4uZGlyZWN0aXZlJztcbmltcG9ydCB7IEZpbHRlcmluZ0Zvcm1SZW5kZXJlclNwZWMsIEZpbHRlcmluZ01vZGlmaWVyIH0gZnJvbSAnLi9jb2x1bW4vZmlsdGVyaW5nLWZvcm0tcmVuZGVyZXInO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29udHJvbCxcbiAgQnVpbHRJbkFjdGlvblR5cGUsXG4gIEJ1bGtBY3Rpb25Db250cm9sLFxuICBDb2x1bW4sXG4gIENvbHVtbkRhdGFUeXBlLFxuICBEYXRhR3JpZCxcbiAgRGF0YVNvdXJjZVN0YXRzLFxuICBEaXNwbGF5T3B0aW9ucyxcbiAgRmlsdGVyaW5nQWN0aW9uVHlwZSxcbiAgbWluQ29sdW1uR3JpZFRyYWNrU2l6ZSxcbiAgUGFnaW5hdGlvbixcbiAgcmF0aW9zQnlDb2x1bW5UeXBlcyxcbiAgUm93LFxuICBTZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrLFxuICBTb3J0T3JkZXIsXG4gIFNwZWNpYWxDb2x1bW5OYW1lXG59IGZyb20gJy4vZGF0YS1ncmlkLm1vZGVsJztcbmltcG9ydCB7IEdyaWREYXRhU291cmNlIH0gZnJvbSAnLi9ncmlkLWRhdGEtc291cmNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRhdGEtZ3JpZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLWdyaWQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERhdGFHcmlkQ29tcG9uZW50IGltcGxlbWVudHMgRGF0YUdyaWQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSBnZXR0ZXh0KCdJdGVtcycpO1xuICBASW5wdXQoKSBsb2FkTW9yZUl0ZW1zTGFiZWw6IHN0cmluZyA9IGdldHRleHQoJ0xvYWQgbW9yZSBpdGVtcycpO1xuICBASW5wdXQoKSBsb2FkaW5nSXRlbXNMYWJlbDogc3RyaW5nID0gZ2V0dGV4dCgnTG9hZGluZyBpdGVtc+KApicpO1xuICBASW5wdXQoKSBub01hdGNoaW5nSXRlbXNMYWJlbDogc3RyaW5nID0gZ2V0dGV4dCgnTm8gbWF0Y2hpbmcgaXRlbXMuJyk7XG5cbiAgY29sdW1uczogQ29sdW1uW107XG4gIEBJbnB1dCgnY29sdW1ucycpXG4gIHNldCBfY29sdW1ucyhjb2x1bW5zKSB7XG4gICAgdGhpcy5jb2x1bW5zID0gY29sdW1ucyB8fCBbXTtcbiAgfVxuXG4gIGRhdGFTb3VyY2UgPSBuZXcgR3JpZERhdGFTb3VyY2UoKTtcbiAgcm93czogUm93W107XG4gIEBJbnB1dCgncm93cycpXG4gIHNldCBfcm93cyhyb3dzKSB7XG4gICAgdGhpcy5yb3dzID0gcm93cyB8fCBbXTtcbiAgfVxuXG4gIGZpbHRlcmluZ0xhYmVsc1BhcmFtcyA9IHtcbiAgICBmaWx0ZXJlZEl0ZW1zQ291bnQ6IDAsXG4gICAgYWxsSXRlbXNDb3VudDogMFxuICB9O1xuXG4gIHBhZ2luYXRpb246IFBhZ2luYXRpb247XG4gIHBhZ2luYXRpb25MYWJlbFBhcmFtcyA9IHtcbiAgICBwYWdlRmlyc3RJdGVtSWR4OiAwLFxuICAgIHBhZ2VMYXN0SXRlbUlkeDogMCxcbiAgICBpdGVtc1RvdGFsOiAwXG4gIH07XG4gIHJlYWRvbmx5IHBvc3NpYmxlUGFnZVNpemVzOiBudW1iZXJbXSA9IFsxMCwgMTUsIDIwLCAzMCwgNTBdO1xuICByZWFkb25seSBtaW5Qb3NzaWJsZVBhZ2VTaXplID0gTWF0aC5taW4oLi4udGhpcy5wb3NzaWJsZVBhZ2VTaXplcyk7XG4gIEBJbnB1dCgncGFnaW5hdGlvbicpXG4gIHNldCBfcGFnaW5hdGlvbihwYWdpbmF0aW9uKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uID0gcGFnaW5hdGlvbjtcbiAgICBjb25zdCBwYWdlU2l6ZSA9IGdldCh0aGlzLnBhZ2luYXRpb24sICdwYWdlU2l6ZScpO1xuXG4gICAgaWYgKFxuICAgICAgcGFnZVNpemUgJiZcbiAgICAgICF0aGlzLnBvc3NpYmxlUGFnZVNpemVzLmZpbmQocG9zc2libGVQYWdlU2l6ZSA9PiBwb3NzaWJsZVBhZ2VTaXplID09PSBwYWdlU2l6ZSlcbiAgICApIHtcbiAgICAgIHRoaXMucGFnaW5hdGlvbiA9IHsgLi4udGhpcy5wYWdpbmF0aW9uLCBwYWdlU2l6ZTogMTAgfTtcbiAgICB9XG4gIH1cblxuICBpbmZpbml0ZVNjcm9sbDogTG9hZE1vcmVNb2RlO1xuICBASW5wdXQoJ2luZmluaXRlU2Nyb2xsJylcbiAgc2V0IF9pbmZpbml0ZVNjcm9sbChpbmZpbml0ZVNjcm9sbDogTG9hZE1vcmVNb2RlKSB7XG4gICAgdGhpcy5pbmZpbml0ZVNjcm9sbCA9IGluZmluaXRlU2Nyb2xsO1xuICB9XG5cbiAgc2VydmVyU2lkZURhdGFDYWxsYmFjazogU2VydmVyU2lkZURhdGFDYWxsYmFjaztcbiAgQElucHV0KCdzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrJylcbiAgc2V0IF9zZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrKHNlcnZlclNpZGVEYXRhQ2FsbGJhY2spIHtcbiAgICB0aGlzLnNlcnZlclNpZGVEYXRhQ2FsbGJhY2sgPSBzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrO1xuICB9XG5cbiAgc2VsZWN0YWJsZSA9IGZhbHNlO1xuICBASW5wdXQoJ3NlbGVjdGFibGUnKVxuICBzZXQgX3NlbGVjdGFibGUoc2VsZWN0YWJsZSkge1xuICAgIHRoaXMuc2VsZWN0YWJsZSA9IHNlbGVjdGFibGU7XG4gIH1cblxuICBzZWxlY3Rpb25QcmltYXJ5S2V5ID0gJ2lkJztcbiAgQElucHV0KCdzZWxlY3Rpb25QcmltYXJ5S2V5JylcbiAgc2V0IF9zZWxlY3Rpb25QcmltYXJ5S2V5KHNlbGVjdGlvblByaW1hcnlLZXkpIHtcbiAgICB0aGlzLnNlbGVjdGlvblByaW1hcnlLZXkgPSBzZWxlY3Rpb25QcmltYXJ5S2V5O1xuICB9XG5cbiAgZGlzcGxheU9wdGlvbnM6IERpc3BsYXlPcHRpb25zID0ge1xuICAgIHN0cmlwZWQ6IHRydWUsXG4gICAgYm9yZGVyZWQ6IGZhbHNlLFxuICAgIGdyaWRIZWFkZXI6IHRydWVcbiAgfTtcbiAgQElucHV0KCdkaXNwbGF5T3B0aW9ucycpXG4gIHNldCBfZGlzcGxheU9wdGlvbnMoZGlzcGxheU9wdGlvbnMpIHtcbiAgICB0aGlzLmRpc3BsYXlPcHRpb25zID0geyAuLi50aGlzLmRpc3BsYXlPcHRpb25zLCAuLi5kaXNwbGF5T3B0aW9ucyB9O1xuICB9XG5cbiAgYWN0aW9uQ29udHJvbHM6IEFjdGlvbkNvbnRyb2xbXTtcbiAgQElucHV0KCdhY3Rpb25Db250cm9scycpXG4gIHNldCBfYWN0aW9uQ29udHJvbHMoYWN0aW9uQ29udHJvbHMpIHtcbiAgICB0aGlzLmFjdGlvbkNvbnRyb2xzID0gYWN0aW9uQ29udHJvbHMgfHwgW107XG4gIH1cblxuICBidWxrQWN0aW9uQ29udHJvbHM6IEJ1bGtBY3Rpb25Db250cm9sW107XG4gIEBJbnB1dCgnYnVsa0FjdGlvbkNvbnRyb2xzJylcbiAgc2V0IF9idWxrQWN0aW9uQ29udHJvbHMoYnVsa0FjdGlvbkNvbnRyb2xzKSB7XG4gICAgdGhpcy5idWxrQWN0aW9uQ29udHJvbHMgPSBidWxrQWN0aW9uQ29udHJvbHMgfHwgW107XG4gIH1cblxuICBAT3V0cHV0KCkgcm93TW91c2VPdmVyID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG4gIEBPdXRwdXQoKSByb3dNb3VzZUxlYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG4gIEBPdXRwdXQoKSByb3dDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuXG4gIEBPdXRwdXQoKSBpdGVtc1NlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihDb2x1bW5EaXJlY3RpdmUpIGNvbHVtblJlbmRlcmVyczogUXVlcnlMaXN0PENvbHVtbkRpcmVjdGl2ZT47XG5cbiAgQFZpZXdDaGlsZCgnc2Nyb2xsJywgeyBzdGF0aWM6IHRydWUgfSkgc2Nyb2xsQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ2luZmluaXRlU2Nyb2xsQ29udGFpbmVyJywgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gIGluZmluaXRlU2Nyb2xsQ29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIGxvYWRNb3JlQ29tcG9uZW50OiBMb2FkTW9yZUNvbXBvbmVudDtcblxuICBjb2x1bW5OYW1lcyA9IFtdO1xuXG4gIHN0eWxlcyA9IHtcbiAgICB0YWJsZUN1cnNvcjogJ2F1dG8nLFxuICAgIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IHVuZGVmaW5lZCxcbiAgICBncmlkSW5maW5pdGVTY3JvbGxDb2x1bW46IHVuZGVmaW5lZFxuICB9O1xuXG4gIHNlYXJjaFRleHQkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIHNlYXJjaFRleHQgPSAnJztcbiAgZmlsdGVyaW5nQXBwbGllZCA9IGZhbHNlO1xuICB0b3RhbFBhZ2VzQ291bnQgPSBJbmZpbml0eTtcblxuICBzZWxlY3RlZEl0ZW1JZHM6IHN0cmluZ1tdID0gW107XG4gIGN1cnJlbnRQYWdlU2VsZWN0aW9uU3RhdGUgPSB7XG4gICAgYWxsU2VsZWN0ZWQ6IGZhbHNlLFxuICAgIGFsbERlc2VsZWN0ZWQ6IHRydWVcbiAgfTtcblxuICBidWlsdEluQWN0aW9uVHlwZSA9IHtcbiAgICBFZGl0OiBCdWlsdEluQWN0aW9uVHlwZS5FZGl0LFxuICAgIERlbGV0ZTogQnVpbHRJbkFjdGlvblR5cGUuRGVsZXRlLFxuICAgIEV4cG9ydDogQnVpbHRJbkFjdGlvblR5cGUuRXhwb3J0XG4gIH07XG5cbiAgcmVzaXplSGFuZGxlTW91c2VEb3duJCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICByZXNpemVIYW5kbGVDb250YWluZXJNb3VzZU1vdmUkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHJlc2l6ZUhhbmRsZUNvbnRhaW5lck1vdXNlVXAkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHByaXZhdGUgaGVhZGVyQmVpbmdSZXNpemVkOiB7XG4gICAgY29sdW1uTmFtZTogc3RyaW5nO1xuICAgIGVsOiBIVE1MRWxlbWVudDtcbiAgfTtcbiAgQFZpZXdDaGlsZHJlbihDZGtIZWFkZXJDZWxsLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgcHJpdmF0ZSB0aFJlZnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgcHJpdmF0ZSB0aEVscztcblxuICBwcml2YXRlIHJlY3JlYXRlTG9hZE1vcmVDb21wb25lbnQ6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIGhvc3RSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBjZnI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlclxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZWFyY2hUZXh0JFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksXG4gICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICB0YXAoc2VhcmNoVGV4dCA9PiB7XG4gICAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gc2VhcmNoVGV4dDtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgfSk7XG5cbiAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICBjb21iaW5lTGF0ZXN0KHRoaXMuZGF0YVNvdXJjZS5kYXRhJCwgdGhpcy5pdGVtc1NlbGVjdC5hc09ic2VydmFibGUoKSlcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSlcbiAgICAgICAgLnN1YnNjcmliZSgoW2RhdGFdKSA9PiB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFBhZ2VFbXB0eSA9IGRhdGEubGVuZ3RoID09PSAwO1xuXG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZVNlbGVjdGlvblN0YXRlID0ge1xuICAgICAgICAgICAgYWxsU2VsZWN0ZWQ6IGN1cnJlbnRQYWdlRW1wdHkgPyBmYWxzZSA6IGRhdGEuZXZlcnkoaXRlbSA9PiB0aGlzLmlzSXRlbVNlbGVjdGVkKGl0ZW0pKSxcbiAgICAgICAgICAgIGFsbERlc2VsZWN0ZWQ6IGN1cnJlbnRQYWdlRW1wdHkgPyB0cnVlIDogZGF0YS5ldmVyeShpdGVtID0+ICF0aGlzLmlzSXRlbVNlbGVjdGVkKGl0ZW0pKVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmRhdGFTb3VyY2Uuc3RhdHMkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKHN0YXRzID0+IHtcbiAgICAgIHRoaXMuY3JlYXRlTG9hZE1vcmVDb21wb25lbnQoc3RhdHMpO1xuICAgICAgdGhpcy51cGRhdGVGaWx0ZXJpbmdMYWJlbHNQYXJhbXMoc3RhdHMpO1xuICAgICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uTGFiZWxQYXJhbXMoc3RhdHMpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy51cGRhdGVDb2x1bW5zKCk7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMudXBkYXRlR3JpZENvbHVtbnNTaXplKCk7XG4gICAgdGhpcy50aEVscyA9IHRoaXMudGhSZWZzLnRvQXJyYXkoKS5tYXAoKHsgbmF0aXZlRWxlbWVudCB9KSA9PiBuYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnNldHVwUmVzaXplSGFuZGxlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHRyYWNrQnlOYW1lKGluZGV4LCBpdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0ubmFtZTtcbiAgfVxuXG4gIHJlc29sdmVDZWxsVmFsdWUocm93LCBwYXRoKSB7XG4gICAgcmV0dXJuIGZsb3coW1xuICAgICAgeCA9PiB0aGlzLmRhdGFTb3VyY2UucmVzb2x2ZVZhbHVlKHgsIHBhdGgpLFxuICAgICAgdGhpcy5kYXRhU291cmNlLnJlc29sdmVGdW5jdGlvbixcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5ub3JtYWxpemVOaWxcbiAgICBdKShyb3cpO1xuICB9XG5cbiAgY2hhbmdlU29ydE9yZGVyKGNvbHVtbk5hbWUpIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IGNvbHVtbk5hbWUpO1xuXG4gICAgaWYgKGNvbHVtbikge1xuICAgICAgY29uc3QgeyBzb3J0T3JkZXIgfSA9IGNvbHVtbjtcblxuICAgICAgaWYgKCFzb3J0T3JkZXIpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTb3J0aW5nKFtjb2x1bW5OYW1lXSwgJ2FzYycpO1xuICAgICAgfSBlbHNlIGlmIChzb3J0T3JkZXIgPT09ICdhc2MnKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU29ydGluZyhbY29sdW1uTmFtZV0sICdkZXNjJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVwZGF0ZVNvcnRpbmcoW2NvbHVtbk5hbWVdLCAnJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlU29ydGluZyhjb2x1bW5OYW1lczogc3RyaW5nW10sIHNvcnRPcmRlcjogU29ydE9yZGVyKSB7XG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChcbiAgICAgIChjb2x1bW4pOiBDb2x1bW4gPT4ge1xuICAgICAgICBpZiAoY29sdW1uTmFtZXMuaW5jbHVkZXMoY29sdW1uLm5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4uY29sdW1uLCBzb3J0T3JkZXIgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICBhcHBseUZpbHRlcihjb2x1bW5OYW1lLCBkcm9wZG93biwgZmlsdGVyaW5nTW9kaWZpZXIpIHtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZyhbY29sdW1uTmFtZV0sIHtcbiAgICAgIHR5cGU6IEZpbHRlcmluZ0FjdGlvblR5cGUuQXBwbHlGaWx0ZXIsXG4gICAgICBwYXlsb2FkOiB7IGZpbHRlcmluZ01vZGlmaWVyIH1cbiAgICB9KTtcbiAgICBkcm9wZG93bi5oaWRlKCk7XG4gIH1cblxuICByZXNldEZpbHRlcihjb2x1bW5OYW1lLCBkcm9wZG93bikge1xuICAgIHRoaXMudXBkYXRlRmlsdGVyaW5nKFtjb2x1bW5OYW1lXSwgeyB0eXBlOiBGaWx0ZXJpbmdBY3Rpb25UeXBlLlJlc2V0RmlsdGVyIH0pO1xuICAgIGRyb3Bkb3duLmhpZGUoKTtcbiAgfVxuXG4gIGNsZWFyRmlsdGVycygpIHtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZyh0aGlzLmNvbHVtbnMubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSksIHtcbiAgICAgIHR5cGU6IEZpbHRlcmluZ0FjdGlvblR5cGUuUmVzZXRGaWx0ZXJcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUZpbHRlcmluZyhcbiAgICBjb2x1bW5OYW1lczogc3RyaW5nW10sXG4gICAgYWN0aW9uOiB7XG4gICAgICB0eXBlOiBGaWx0ZXJpbmdBY3Rpb25UeXBlO1xuICAgICAgcGF5bG9hZD86IHsgZmlsdGVyaW5nTW9kaWZpZXI6IEZpbHRlcmluZ01vZGlmaWVyIH07XG4gICAgfVxuICApIHtcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGNvbHVtbiA9PiB7XG4gICAgICBpZiAoY29sdW1uTmFtZXMuaW5jbHVkZXMoY29sdW1uLm5hbWUpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgIC4uLihhY3Rpb24udHlwZSA9PT0gRmlsdGVyaW5nQWN0aW9uVHlwZS5BcHBseUZpbHRlclxuICAgICAgICAgICAgPyBhY3Rpb24ucGF5bG9hZC5maWx0ZXJpbmdNb2RpZmllclxuICAgICAgICAgICAgOiB7IGZpbHRlclByZWRpY2F0ZTogdW5kZWZpbmVkLCBleHRlcm5hbEZpbHRlclF1ZXJ5OiB1bmRlZmluZWQgfSlcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9KTtcblxuICAgIHRoaXMudXBkYXRlRmlsdGVyaW5nQXBwbGllZCgpO1xuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICB1cGRhdGVGaWx0ZXJpbmdBcHBsaWVkKCkge1xuICAgIHRoaXMuZmlsdGVyaW5nQXBwbGllZCA9IHRoaXMuY29sdW1ucy5zb21lKHRoaXMuaXNDb2x1bW5GaWx0ZXJpbmdBcHBsaWVkKTtcbiAgfVxuXG4gIGlzQ29sdW1uRmlsdGVyaW5nQXBwbGllZChjb2x1bW46IENvbHVtbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgZmlsdGVyYWJsZSwgZmlsdGVyUHJlZGljYXRlLCBleHRlcm5hbEZpbHRlclF1ZXJ5IH0gPSBjb2x1bW47XG5cbiAgICByZXR1cm4gISEoZmlsdGVyYWJsZSAmJiAoZmlsdGVyUHJlZGljYXRlIHx8IGV4dGVybmFsRmlsdGVyUXVlcnkpKTtcbiAgfVxuXG4gIHVwZGF0ZVBhZ2luYXRpb24oeyBpdGVtc1BlclBhZ2UsIHBhZ2UgfSkge1xuICAgIHRoaXMucGFnaW5hdGlvbiA9IHsgLi4udGhpcy5wYWdpbmF0aW9uLCBwYWdlU2l6ZTogaXRlbXNQZXJQYWdlLCBjdXJyZW50UGFnZTogcGFnZSB9O1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgfVxuXG4gIHJlbG9hZCgpIHtcbiAgICB0aGlzLnBhZ2luYXRpb24gPSB7IC4uLnRoaXMucGFnaW5hdGlvbiwgY3VycmVudFBhZ2U6IDEgfTtcbiAgICB0aGlzLnJlY3JlYXRlTG9hZE1vcmVDb21wb25lbnQgPSB0cnVlO1xuICAgIHRoaXMubG9hZERhdGEodHJ1ZSk7XG4gICAgdGhpcy5zY3JvbGxUb1RvcCgpO1xuICB9XG5cbiAgbG9hZE5leHRQYWdlKCk6IFByb21pc2U8SVJlc3VsdExpc3Q8b2JqZWN0Pj4ge1xuICAgIHRoaXMucGFnaW5hdGlvbiA9IHsgLi4udGhpcy5wYWdpbmF0aW9uLCBjdXJyZW50UGFnZTogdGhpcy5wYWdpbmF0aW9uLm5leHRQYWdlIH07XG5cbiAgICB0aGlzLmxvYWREYXRhKCk7XG5cbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlLnJlc3VsdExpc3QkXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBpbiBvcmRlciBmb3IgYHRvUHJvbWlzZWAgdG8gd29yaywgdGhlIG9ic2VydmFibGUgbmVlZHMgdG8gY29tcGxldGVcbiAgICAgIC50b1Byb21pc2UoKVxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgcGFnaW5nOiB7XG4gICAgICAgICAgICAuLi5yZXN1bHQucGFnaW5nLFxuICAgICAgICAgICAgbmV4dDogdGhpcy5sb2FkTmV4dFBhZ2UuYmluZCh0aGlzKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBhcyBJUmVzdWx0TGlzdDxvYmplY3Q+O1xuICAgICAgfSk7XG4gIH1cblxuICBnZXRDZWxsUmVuZGVyZXJTcGVjKHsgdmFsdWUsIHJvdywgY29sdW1uTmFtZSB9KTogQ2VsbFJlbmRlcmVyU3BlYyB7XG4gICAgcmV0dXJuIHRoaXMuX2dldENlbGxSZW5kZXJlclNwZWMoeyB0eXBlOiAnQ0VMTCcsIHZhbHVlLCByb3csIGNvbHVtbk5hbWUgfSk7XG4gIH1cblxuICBnZXRIZWFkZXJDZWxsUmVuZGVyZXJTcGVjKHsgdmFsdWUsIGNvbHVtbk5hbWUgfSk6IENlbGxSZW5kZXJlclNwZWMge1xuICAgIHJldHVybiB0aGlzLl9nZXRDZWxsUmVuZGVyZXJTcGVjKHsgdHlwZTogJ0hFQURFUicsIHZhbHVlLCByb3c6IHVuZGVmaW5lZCwgY29sdW1uTmFtZSB9KTtcbiAgfVxuXG4gIGdldEZpbHRlcmluZ0Zvcm1SZW5kZXJlclNwZWMoeyBjb2x1bW4sIGRyb3Bkb3duIH0pOiBGaWx0ZXJpbmdGb3JtUmVuZGVyZXJTcGVjIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVuZGVyZXI6XG4gICAgICAgIGdldCh0aGlzLmdldENvbHVtblJlbmRlcmVyKGNvbHVtbiksICdmaWx0ZXJpbmdGb3JtUmVuZGVyZXJEZWYudGVtcGxhdGUnKSB8fFxuICAgICAgICBjb2x1bW4uZmlsdGVyaW5nRm9ybVJlbmRlcmVyQ29tcG9uZW50LFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBwcm9wZXJ0eTogY29sdW1uLFxuICAgICAgICBhcHBseUZpbHRlcjogdGhpcy5hcHBseUZpbHRlci5iaW5kKHRoaXMsIGNvbHVtbi5uYW1lLCBkcm9wZG93biksXG4gICAgICAgIHJlc2V0RmlsdGVyOiB0aGlzLnJlc2V0RmlsdGVyLmJpbmQodGhpcywgY29sdW1uLm5hbWUsIGRyb3Bkb3duKVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBzZXRBbGxJdGVtc1NlbGVjdGVkKHNlbGVjdGVkKSB7XG4gICAgdGhpcy5kYXRhU291cmNlLnNlbGVjdGlvbiRcbiAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGZpbHRlcmVkRGF0YUlkcyB9KSA9PiB0aGlzLnNldEl0ZW1zU2VsZWN0ZWQoZmlsdGVyZWREYXRhSWRzLCBzZWxlY3RlZCkpO1xuICB9XG5cbiAgc2V0QWxsSXRlbXNJbkN1cnJlbnRQYWdlU2VsZWN0ZWQoc2VsZWN0ZWQpIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoZGF0YSA9PiB0aGlzLnNldEl0ZW1zU2VsZWN0ZWQoZGF0YSwgc2VsZWN0ZWQpKTtcbiAgfVxuXG4gIHNldEl0ZW1zU2VsZWN0ZWQoaXRlbXM6IGFueVtdLCBzZWxlY3RlZCkge1xuICAgIGNvbnN0IGl0ZW1JZHMgPSBpdGVtcy5tYXAoKGl0ZW06IG9iamVjdCB8IHN0cmluZykgPT5cbiAgICAgIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyA/IGl0ZW1bdGhpcy5zZWxlY3Rpb25QcmltYXJ5S2V5XSA6IGl0ZW1cbiAgICApO1xuXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1JZHMgPSBzZWxlY3RlZFxuICAgICAgPyB1bmlvbih0aGlzLnNlbGVjdGVkSXRlbUlkcywgaXRlbUlkcylcbiAgICAgIDogd2l0aG91dCh0aGlzLnNlbGVjdGVkSXRlbUlkcywgLi4uaXRlbUlkcyk7XG5cbiAgICB0aGlzLml0ZW1zU2VsZWN0LmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1JZHMpO1xuICB9XG5cbiAgaXNJdGVtU2VsZWN0ZWQoaXRlbSkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbUlkcy5pbmNsdWRlcyhpdGVtW3RoaXMuc2VsZWN0aW9uUHJpbWFyeUtleV0pO1xuICB9XG5cbiAgb25Db2x1bW5Ecm9wKHsgcHJldmlvdXNJbmRleCwgY3VycmVudEluZGV4IH0pIHtcbiAgICBjb25zdCBkaWZmZXJlbnRJbmRleCA9IHByZXZpb3VzSW5kZXggIT09IGN1cnJlbnRJbmRleDtcblxuICAgIGlmIChkaWZmZXJlbnRJbmRleCkge1xuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLnNwbGljZShwcmV2aW91c0luZGV4LCAxKTtcbiAgICAgIHRoaXMuY29sdW1ucy5zcGxpY2UoY3VycmVudEluZGV4LCAwLCBjb2x1bW5bMF0pO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlQ29sdW1uTmFtZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUdyaWRDb2x1bW5zU2l6ZSgpO1xuICB9XG5cbiAgdXBkYXRlR3JpZENvbHVtbnNTaXplKCkge1xuICAgIHRoaXMuc3R5bGVzID0ge1xuICAgICAgLi4udGhpcy5zdHlsZXMsXG4gICAgICBncmlkVGVtcGxhdGVDb2x1bW5zOiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUoXG4gICAgICAgIHRoaXMuY29sdW1uc1xuICAgICAgICAgIC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi52aXNpYmxlKVxuICAgICAgICAgIC5tYXAoKHsgZ3JpZFRyYWNrU2l6ZSB9KSA9PiBncmlkVHJhY2tTaXplKVxuICAgICAgICAgIC5qb2luKCcgJylcbiAgICAgICksXG4gICAgICBncmlkSW5maW5pdGVTY3JvbGxDb2x1bW46IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShcbiAgICAgICAgYDEgLyBzcGFuICR7dGhpcy5jb2x1bW5zLmxlbmd0aH1gXG4gICAgICApXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29sdW1ucygpIHtcbiAgICBjb25zdCBzcGVjaWFsQ29sdW1uID0ge1xuICAgICAgZ3JpZFRyYWNrU2l6ZTogJzQycHgnLFxuICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgcG9zaXRpb25GaXhlZDogdHJ1ZVxuICAgIH07XG5cbiAgICB0aGlzLmNvbHVtbnMgPSBbXG4gICAgICB0aGlzLnNlbGVjdGFibGUgPyB7IC4uLnNwZWNpYWxDb2x1bW4sIG5hbWU6IFNwZWNpYWxDb2x1bW5OYW1lLkNoZWNrYm94IH0gOiB1bmRlZmluZWQsXG4gICAgICAuLi50aGlzLmNvbHVtbnMsXG4gICAgICB0aGlzLmFjdGlvbkNvbnRyb2xzLmxlbmd0aCA+IDBcbiAgICAgICAgPyB7IC4uLnNwZWNpYWxDb2x1bW4sIG5hbWU6IFNwZWNpYWxDb2x1bW5OYW1lLkFjdGlvbnMgfVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgIF1cbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5tYXAodGhpcy53aXRoQ29sdW1uRGVmYXVsdHMpO1xuXG4gICAgdGhpcy51cGRhdGVDb2x1bW5OYW1lcygpO1xuICAgIHRoaXMudXBkYXRlR3JpZENvbHVtbnNTaXplKCk7XG4gICAgdGhpcy51cGRhdGVGaWx0ZXJpbmdBcHBsaWVkKCk7XG4gIH1cblxuICBwcml2YXRlIHdpdGhDb2x1bW5EZWZhdWx0cyhjb2x1bW4pOiBDb2x1bW4ge1xuICAgIGNvbnN0IGRhdGFUeXBlID0gY29sdW1uLmRhdGFUeXBlIHx8IENvbHVtbkRhdGFUeXBlLlRleHRTaG9ydDtcbiAgICBjb25zdCB7IGhlYWRlckNTU0NsYXNzTmFtZSwgY2VsbENTU0NsYXNzTmFtZSB9ID0gY29sdW1uO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICBwb3NpdGlvbkZpeGVkOiBmYWxzZSxcbiAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgc29ydE9yZGVyOiAnJyxcbiAgICAgIGZpbHRlcmFibGU6IGZhbHNlLFxuICAgICAgLi4uY29sdW1uLFxuICAgICAgZGF0YVR5cGUsXG4gICAgICBncmlkVHJhY2tTaXplOlxuICAgICAgICBjb2x1bW4uZ3JpZFRyYWNrU2l6ZSB8fFxuICAgICAgICBgbWlubWF4KCR7bWluQ29sdW1uR3JpZFRyYWNrU2l6ZX1weCwgJHtyYXRpb3NCeUNvbHVtblR5cGVzW2RhdGFUeXBlXX1mcilgLFxuICAgICAgaGVhZGVyQ1NTQ2xhc3NOYW1lOlxuICAgICAgICAodHlwZW9mIGhlYWRlckNTU0NsYXNzTmFtZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICA/IGhlYWRlckNTU0NsYXNzTmFtZS5zcGxpdCgnICcpXG4gICAgICAgICAgOiBoZWFkZXJDU1NDbGFzc05hbWUpIHx8IFtdLFxuICAgICAgY2VsbENTU0NsYXNzTmFtZTpcbiAgICAgICAgKHR5cGVvZiBjZWxsQ1NTQ2xhc3NOYW1lID09PSAnc3RyaW5nJyA/IGNlbGxDU1NDbGFzc05hbWUuc3BsaXQoJyAnKSA6IGNlbGxDU1NDbGFzc05hbWUpIHx8XG4gICAgICAgIFtdXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29sdW1uTmFtZXMoKSB7XG4gICAgdGhpcy5jb2x1bW5OYW1lcyA9IHRoaXMuY29sdW1ucy5tYXAoKHsgbmFtZSB9KSA9PiBuYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBSZXNpemVIYW5kbGUoKSB7XG4gICAgY29uc3QgcmVzaXplSGFuZGxlRHJhZyQgPSB0aGlzLnJlc2l6ZUhhbmRsZU1vdXNlRG93biQucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5jbGVhck1vdXNlSGlnaGxpZ2h0cygpKSxcbiAgICAgIG1lcmdlTWFwKCh7IGV2ZW50LCB0YXJnZXRDb2x1bW5OYW1lIH0pID0+IHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjb2x1bW4gPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4ubmFtZSA9PT0gdGFyZ2V0Q29sdW1uTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgICAgICBoZWFkZXJDU1NDbGFzc05hbWU6IHVuaW9uKGNvbHVtbi5oZWFkZXJDU1NDbGFzc05hbWUsIFsnaGVhZGVyLS1iZWluZy1yZXNpemVkJ10pXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuaGVhZGVyQmVpbmdSZXNpemVkID0ge1xuICAgICAgICAgIGNvbHVtbk5hbWU6IHRhcmdldENvbHVtbk5hbWUsXG4gICAgICAgICAgZWw6IGV2ZW50LnRhcmdldC5wYXJlbnROb2RlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zdHlsZXMgPSB7XG4gICAgICAgICAgLi4udGhpcy5zdHlsZXMsXG4gICAgICAgICAgdGFibGVDdXJzb3I6ICdjb2wtcmVzaXplJ1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLnJlc2l6ZUhhbmRsZUNvbnRhaW5lck1vdXNlTW92ZSQucGlwZShcbiAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5jbGVhck1vdXNlSGlnaGxpZ2h0cygpKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5yZXNpemVIYW5kbGVDb250YWluZXJNb3VzZVVwJClcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHJlc2l6ZUhhbmRsZURyYWckLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKChjb2x1bW4sIGkpID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLm5hbWUgPT09IHRoaXMuaGVhZGVyQmVpbmdSZXNpemVkLmNvbHVtbk5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudDtcblxuICAgICAgICAgICAgLy8gUmVhZCB3cmFwcGVyJ3Mgb2Zmc2V0IGxlZnQgcmVsYXRpdmUgdG8gdGhlIGRvY3VtZW50LlxuICAgICAgICAgICAgY29uc3QgaG9yaXpvbnRhbE9mZnNldCA9IHdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblxuICAgICAgICAgICAgLy8gQWRqdXN0IHdpdGggdGhlIHdyYXBwZXIgaG9yaXpvbnRhbCBzY3JvbGwgcG9zaXRpb24uXG4gICAgICAgICAgICBjb25zdCBob3Jpem9udGFsU2Nyb2xsT2Zmc2V0ID0gd3JhcHBlci5zY3JvbGxMZWZ0IC0gaG9yaXpvbnRhbE9mZnNldDtcblxuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXNpcmVkIHdpZHRoLlxuICAgICAgICAgICAgY29uc3Qgd2lkdGggPVxuICAgICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsT2Zmc2V0ICsgZXZlbnQuY2xpZW50WCAtICh0aGlzLmhlYWRlckJlaW5nUmVzaXplZC5lbC5vZmZzZXRMZWZ0IHx8IDApO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgY29sdW1uIG9iamVjdCB3aXRoIHRoZSBuZXcgc2l6ZSB2YWx1ZSwgZW5mb3JjZSBvdXIgbWluaW11bSBzaXplLlxuICAgICAgICAgICAgICBncmlkVHJhY2tTaXplOiBgJHtNYXRoLm1heChtaW5Db2x1bW5HcmlkVHJhY2tTaXplLCB3aWR0aCl9cHhgXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEZvciB0aGUgb3RoZXIgaGVhZGVycyB3aGljaCBkb24ndCBoYXZlIGEgc2V0IHdpZHRoLCBmaXggaXQgdG8gdGhlaXIgY29tcHV0ZWQgd2lkdGguXG4gICAgICAgICAgaWYgKGNvbHVtbi5ncmlkVHJhY2tTaXplLnN0YXJ0c1dpdGgoJ21pbm1heCcpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgIC8vIGlzbid0IGZpeGVkIHlldCAoaXQgd291bGQgYmUgYSBweCB2YWx1ZSlcbiAgICAgICAgICAgICAgZ3JpZFRyYWNrU2l6ZTogYCR7X3BhcnNlSW50KHRoaXMudGhFbHNbaV0uY2xpZW50V2lkdGgpfXB4YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgICAgICB9KTtcblxuICAgICAgICAvKlxuICAgICAgICAgKiBVcGRhdGUgdGhlIGNvbHVtbiBzaXplcy5cbiAgICAgICAgICogTm90ZTogZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zIHNldHMgdGhlIHdpZHRoIGZvciBhbGwgY29sdW1ucyBpbiBvbmUgdmFsdWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnVwZGF0ZUdyaWRDb2x1bW5zU2l6ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc2l6ZUhhbmRsZUNvbnRhaW5lck1vdXNlVXAkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmhlYWRlckJlaW5nUmVzaXplZCkge1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGNvbHVtbiA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5uYW1lID09PSB0aGlzLmhlYWRlckJlaW5nUmVzaXplZC5jb2x1bW5OYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgIGhlYWRlckNTU0NsYXNzTmFtZTogd2l0aG91dChjb2x1bW4uaGVhZGVyQ1NTQ2xhc3NOYW1lLCAnaGVhZGVyLS1iZWluZy1yZXNpemVkJylcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaGVhZGVyQmVpbmdSZXNpemVkID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMuc3R5bGVzID0ge1xuICAgICAgICAgIC4uLnRoaXMuc3R5bGVzLFxuICAgICAgICAgIHRhYmxlQ3Vyc29yOiAnYXV0bydcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJNb3VzZUhpZ2hsaWdodHMoKSB7XG4gICAgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcbiAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXRDZWxsUmVuZGVyZXJTcGVjKHsgdHlwZSwgdmFsdWUsIHJvdywgY29sdW1uTmFtZSB9KTogQ2VsbFJlbmRlcmVyU3BlYyB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoKHsgbmFtZSB9KSA9PiBuYW1lID09PSBjb2x1bW5OYW1lKTtcbiAgICBjb25zdCBjb2x1bW5SZW5kZXJlciA9IHRoaXMuZ2V0Q29sdW1uUmVuZGVyZXIoY29sdW1uKTtcbiAgICBjb25zdCByZW5kZXJlclRlbXBsYXRlID0gZ2V0KFxuICAgICAgY29sdW1uUmVuZGVyZXIsXG4gICAgICBgJHt0eXBlID09PSAnSEVBREVSJyA/ICdoZWFkZXJDZWxsUmVuZGVyZXJEZWYnIDogJ2NlbGxSZW5kZXJlckRlZid9LnRlbXBsYXRlYFxuICAgICk7XG5cbiAgICBjb25zdCB7IGNlbGxSZW5kZXJlckNvbXBvbmVudCwgaGVhZGVyQ2VsbFJlbmRlcmVyQ29tcG9uZW50IH0gPSBjb2x1bW47XG4gICAgY29uc3QgcmVuZGVyZXJDb21wb25lbnQgPVxuICAgICAgdHlwZSA9PT0gJ0hFQURFUicgPyBoZWFkZXJDZWxsUmVuZGVyZXJDb21wb25lbnQgOiBjZWxsUmVuZGVyZXJDb21wb25lbnQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVuZGVyZXI6IHJlbmRlcmVyVGVtcGxhdGUgfHwgcmVuZGVyZXJDb21wb25lbnQsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBpdGVtOiByb3csXG4gICAgICAgIHByb3BlcnR5OiBjb2x1bW5cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5SZW5kZXJlcihjb2x1bW4pOiBDb2x1bW5EaXJlY3RpdmUge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblJlbmRlcmVycy50b0FycmF5KCkuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IGNvbHVtbi5uYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGEocmVsb2FkOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBjb25zdCB7XG4gICAgICByb3dzLFxuICAgICAgY29sdW1ucyxcbiAgICAgIHBhZ2luYXRpb24sXG4gICAgICBzZWFyY2hUZXh0LFxuICAgICAgc2VydmVyU2lkZURhdGFDYWxsYmFjayxcbiAgICAgIHNlbGVjdGFibGUsXG4gICAgICBzZWxlY3Rpb25QcmltYXJ5S2V5LFxuICAgICAgaW5maW5pdGVTY3JvbGxcbiAgICB9ID0gdGhpcztcblxuICAgIHRoaXMuZGF0YVNvdXJjZS5sb2FkRGF0YSh7XG4gICAgICByb3dzLFxuICAgICAgY29sdW1ucyxcbiAgICAgIHBhZ2luYXRpb24sXG4gICAgICBzZWFyY2hUZXh0LFxuICAgICAgc2VydmVyU2lkZURhdGFDYWxsYmFjayxcbiAgICAgIHNlbGVjdGFibGUsXG4gICAgICBzZWxlY3Rpb25QcmltYXJ5S2V5LFxuICAgICAgaW5maW5pdGVTY3JvbGwsXG4gICAgICByZWxvYWRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmlsdGVyaW5nTGFiZWxzUGFyYW1zKHN0YXRzOiBEYXRhU291cmNlU3RhdHMpIHtcbiAgICB0aGlzLmZpbHRlcmluZ0xhYmVsc1BhcmFtcyA9IHtcbiAgICAgIGZpbHRlcmVkSXRlbXNDb3VudDogc3RhdHMuZmlsdGVyZWRTaXplLFxuICAgICAgYWxsSXRlbXNDb3VudDogc3RhdHMuc2l6ZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBhZ2luYXRpb25MYWJlbFBhcmFtcyhzdGF0czogRGF0YVNvdXJjZVN0YXRzKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uLm5leHRQYWdlID0gc3RhdHMubmV4dFBhZ2U7XG4gICAgY29uc3QgcGFnZUZpcnN0SXRlbUlkeCA9IChzdGF0cy5jdXJyZW50UGFnZSAtIDEpICogc3RhdHMuZmlyc3RQYWdlU2l6ZSArIDE7XG4gICAgdGhpcy5wYWdpbmF0aW9uTGFiZWxQYXJhbXMgPSB7XG4gICAgICBwYWdlRmlyc3RJdGVtSWR4LFxuICAgICAgcGFnZUxhc3RJdGVtSWR4OiBwYWdlRmlyc3RJdGVtSWR4ICsgKHN0YXRzLmN1cnJlbnRQYWdlU2l6ZSAtIDEpLFxuICAgICAgaXRlbXNUb3RhbDogc3RhdHMuZmlsdGVyZWRTaXplXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTG9hZE1vcmVDb21wb25lbnQoc3RhdHM6IERhdGFTb3VyY2VTdGF0cykge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5maW5pdGVTY3JvbGwgJiZcbiAgICAgIHN0YXRzICYmXG4gICAgICBzdGF0cy5uZXh0UGFnZSAmJlxuICAgICAgKCF0aGlzLmxvYWRNb3JlQ29tcG9uZW50IHx8IHRoaXMucmVjcmVhdGVMb2FkTW9yZUNvbXBvbmVudClcbiAgICApIHtcbiAgICAgIHRoaXMucmVjcmVhdGVMb2FkTW9yZUNvbXBvbmVudCA9IGZhbHNlO1xuICAgICAgdGhpcy5pbmZpbml0ZVNjcm9sbENvbnRhaW5lci5jbGVhcigpO1xuICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxhbnk+ID0gdGhpcy5jZnIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoXG4gICAgICAgIExvYWRNb3JlQ29tcG9uZW50XG4gICAgICApO1xuICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5pbmZpbml0ZVNjcm9sbENvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBMb2FkTW9yZUNvbXBvbmVudDtcbiAgICAgIGluc3RhbmNlLnVzZUludGVyc2VjdGlvbiA9IHRoaXMuaW5maW5pdGVTY3JvbGwgPT09ICdhdXRvJyB8fCB0aGlzLmluZmluaXRlU2Nyb2xsID09PSAnaGlkZGVuJztcbiAgICAgIGluc3RhbmNlLmhpZGRlbiA9IHRoaXMuaW5maW5pdGVTY3JvbGwgPT09ICdoaWRkZW4nO1xuICAgICAgaW5zdGFuY2UucGFnaW5nID0ge1xuICAgICAgICBuZXh0UGFnZTogc3RhdHMubmV4dFBhZ2UsXG4gICAgICAgIG5leHQ6IHRoaXMubG9hZE5leHRQYWdlLmJpbmQodGhpcylcbiAgICAgIH0gYXMgUGFnaW5nPGFueT47XG4gICAgICBpbnN0YW5jZS5sb2FkTmV4dExhYmVsID0gdGhpcy5sb2FkTW9yZUl0ZW1zTGFiZWw7XG4gICAgICBpbnN0YW5jZS5sb2FkaW5nTGFiZWwgPSB0aGlzLmxvYWRpbmdJdGVtc0xhYmVsO1xuICAgICAgdGhpcy5sb2FkTW9yZUNvbXBvbmVudCA9IGluc3RhbmNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sb2FkTW9yZUNvbXBvbmVudCAmJiAhc3RhdHMubmV4dFBhZ2UpIHtcbiAgICAgIHRoaXMubG9hZE1vcmVDb21wb25lbnQucGFnaW5nID0ge1xuICAgICAgICBuZXh0UGFnZTogbnVsbFxuICAgICAgfSBhcyBQYWdpbmc8YW55PjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbFRvVG9wKCkge1xuICAgIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -124,7 +124,7 @@ var DashboardChildComponent = /** @class */ (function () {
|
|
|
124
124
|
* https://github.com/angular/angular/issues/9343
|
|
125
125
|
*/
|
|
126
126
|
get: function () {
|
|
127
|
-
return this.sanitizer.bypassSecurityTrustStyle("\n grid-column-start: " + (this.x + 1) + ";\n -ms-grid-column: " + (this.x + 1) + ";\n grid-row-start: " + (this.y + 1) + ";\n -ms-grid-row: " + (this.y + 1) + ";\n grid-column-end: span " + this.width + ";\n -ms-grid-column-span: " + this.width + ";\n grid-row-end: span " + this.height + ";\n -ms-grid-row-span: " + this.height + ";\n display: block;\n margin: " + (this.margin || 12) + "px;\n ");
|
|
127
|
+
return this.sanitizer.bypassSecurityTrustStyle("\n grid-column-start: " + (this.x + 1) + ";\n -ms-grid-column: " + (this.x + 1) + ";\n grid-row-start: " + (this.y + 1) + ";\n -ms-grid-row: " + (this.y + 1) + ";\n grid-column-end: span " + this.width + ";\n -ms-grid-column-span: " + this.width + ";\n grid-row-end: span " + this.height + ";\n -ms-grid-row-span: " + this.height + ";\n display: block;\n margin: " + (this.margin || 12) + "px;\n order: " + this.getOrder() + ";\n ");
|
|
128
128
|
},
|
|
129
129
|
enumerable: true,
|
|
130
130
|
configurable: true
|
|
@@ -183,6 +183,9 @@ var DashboardChildComponent = /** @class */ (function () {
|
|
|
183
183
|
this.changeEnd.emit(this);
|
|
184
184
|
}
|
|
185
185
|
};
|
|
186
|
+
DashboardChildComponent.prototype.getOrder = function () {
|
|
187
|
+
return "" + Math.round((this.y + (this.x + 1) / 100) * 100);
|
|
188
|
+
};
|
|
186
189
|
DashboardChildComponent.prototype.childInView = function (event, observer) {
|
|
187
190
|
if (event.isIntersecting) {
|
|
188
191
|
observer.unobserve(event.target);
|
|
@@ -247,4 +250,4 @@ var DashboardChildComponent = /** @class */ (function () {
|
|
|
247
250
|
return DashboardChildComponent;
|
|
248
251
|
}());
|
|
249
252
|
export { DashboardChildComponent };
|
|
250
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLWNoaWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BjOHkvbmd4LWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb3JlL2Rhc2hib2FyZC9kYXNoYm9hcmQtY2hpbGQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxlQUFlLEVBQ2YsTUFBTSxFQUNOLFlBQVksRUFDWixVQUFVLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXpELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRW5GOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRDRztBQVFIO0lBZ0hFLGlDQUN1RCxTQUE2QixFQUMxRSxTQUF1QixFQUN2QixPQUFtQjtRQUYwQixjQUFTLEdBQVQsU0FBUyxDQUFvQjtRQUMxRSxjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFsSG1CLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFFN0QsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFFYixhQUFRLEdBQUcsTUFBTSxDQUFDO1FBQ2xCLGNBQVMsR0FBRyxNQUFNLENBQUM7UUFZbkI7O1dBRUc7UUFDTSxVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRW5COztXQUVHO1FBQ00sV0FBTSxHQUFHLENBQUMsQ0FBQztRQU9wQjs7V0FFRztRQUNN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QStDO1lBQy9DLElBQUksRUFBRTtnQkFDSixLQUFLLEVBQUUsc0JBQXNCO2FBQzlCO1NBQ0YsQ0FBQztRQWtIRyxtQkFBQSxNQUFNLENBQUMsVUFBVSxDQUFDLGNBQU0sT0FBQSxrQkFBa0IsRUFBbEIsQ0FBa0IsQ0FBQyxDQUFDLENBQUE7T0FqSHBDLHVCQUF1QixDQStMbkM7SUFBRCw4QkFBQztDQUFBLEFBL0xELElBK0xDO1NBL0xZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0RyYWcsIENka0RyYWdFbmQsIENka0RyYWdTdGFydCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgRWxlbWVudFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDb21wb25lbnQgfSBmcm9tICcuL2Rhc2hib2FyZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQ2hpbGREaW1lbnNpb24sIFdpZGdldCB9IGZyb20gJy4vZGFzaGJvYXJkLm1vZGVsJztcbmltcG9ydCB7IERhc2hib2FyZENoaWxkQ2hhbmdlIH0gZnJvbSAnLi9kYXNoYm9hcmQtY2hpbGQtY2hhbmdlJztcbmltcG9ydCB7IERhc2hib2FyZENoaWxkQWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9kYXNoYm9hcmQtY2hpbGQtYWN0aW9uLmNvbXBvbmVudCc7XG5cbi8qKlxuICogQSBkYXNoYm9hcmQgY2hpbGQgYWxsb3dzIHRvIHBvc2l0aW9uIGVsZW1lbnRzXG4gKiBjb3JyZWN0bHkgb24gYSBncmlkLiBUaGUgdXNlciBjYW4gdGhlbiByZXNpemUgYW5kXG4gKiByZWFycmFuZ2UgdGhlIGVsZW1lbnRzLCBhcyBsb25nIGFzIHRoZXkgYXJlIG5vdCBgZnJvemVuYC5cbiAqXG4gKiBCeSBzZXR0aW5nIGBjOHktZGFzaGJvYXJkLWNoaWxkLWFjdGlvbnNgIGFuZFxuICogYGM4eS1kYXNoYm9hcmQtY2hpbGQtdGl0bGVgIG9uIHRoZSBlbGVtZW50IHlvdSBjYW4gYWRkXG4gKiBjdXN0b20gYWN0aW9ucyBvciBhIGN1c3RvbSB0aXRsZSB0byB0aGUgY3VycmVudCBjaGlsZC5cbiAqXG4gKiBCeSBhZGRpbmcgdGhlIGNvcnJlY3QgYnJhbmRlZCBjbGFzc2VzLCB5b3UgY2FuIGRlZmluZVxuICogdGhlIGxvb2sgYW5kIGZlZWwgb2YgdGhlIGNoaWxkLiBCeSBkZWZhdWx0IGl0IGlzIGRpc3BsYXllZFxuICogYXMgYSBjYXJkLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBgaHRtbFxuICogICA8Yzh5LWRhc2hib2FyZC1jaGlsZFxuICogICAgICNjcFdpZGdldDNcbiAqICAgICBbaXNGcm96ZW5dPVwiaXNGcm96ZW5cIlxuICogICAgIFt4XT1cIjBcIlxuICogICAgIFt5XT1cIjNcIlxuICogICAgIFt3aWR0aF09XCI0XCJcbiAqICAgICBbaGVpZ2h0XT1cIjRcIlxuICogICAgIFtjbGFzc109XCInY2FyZC1kYXNoYm9hcmQgcGFuZWwtY29udGVudC10cmFuc3BhcmVudCdcIlxuICogICA+XG4gKiAgICAgPGM4eS1kYXNoYm9hcmQtY2hpbGQtdGl0bGUgKm5nSWY9XCJzaG93VGl0bGVcIj5cbiAqICAgICAgIDxzcGFuPlRyYW5zcGFyZW50ITwvc3Bhbj5cbiAqICAgICA8L2M4eS1kYXNoYm9hcmQtY2hpbGQtdGl0bGU+XG4gKiAgICAgPGM4eS1kYXNoYm9hcmQtY2hpbGQtYWN0aW9uPlxuICogICAgICAgPGEgaHJlZj1cIlwiIChjbGljayk9XCJzaG93VGl0bGUgPSAhc2hvd1RpdGxlOyAoZmFsc2UpXCI+XG4gKiAgICAgICAgIDxpIFtjOHlJY29uXT1cIidoZWFkaW5nJ1wiPjwvaT4gSGlkZS9zaG93IHRpdGxlXG4gKiAgICAgICA8L2E+XG4gKiAgICAgPC9jOHktZGFzaGJvYXJkLWNoaWxkLWFjdGlvbj5cbiAqICAgICA8Yzh5LWRhc2hib2FyZC1jaGlsZC1hY3Rpb24+XG4gKiAgICAgICA8YSBocmVmPVwiXCIgKGNsaWNrKT1cImNwV2lkZ2V0My5pc0Zyb3plbiA9ICFjcFdpZGdldDMuaXNGcm96ZW47IChmYWxzZSlcIj5cbiAqICAgICAgICAgPGkgW2M4eUljb25dPVwiY3BXaWRnZXQzLmlzRnJvemVuID8gJ2xvY2snIDogJ3VubG9jaydcIj48L2k+IFRvZ2dsZSBmcmVlemVcbiAqICAgICAgIDwvYT5cbiAqICAgICA8L2M4eS1kYXNoYm9hcmQtY2hpbGQtYWN0aW9uPlxuICogICAgIHg6IHt7IGNwV2lkZ2V0My54IH19PGJyIC8+XG4gKiAgICAgeToge3sgY3BXaWRnZXQzLnkgfX08YnIgLz5cbiAqICAgICB3aWR0aDoge3sgY3BXaWRnZXQzLndpZHRoIH19PGJyIC8+XG4gKiAgICAgaGVpZ2h0OiB7eyBjcFdpZGdldDMuaGVpZ2h0IH19PGJyIC8+XG4gKiAgIDwvYzh5LWRhc2hib2FyZC1jaGlsZD5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGFzaGJvYXJkLWNoaWxkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rhc2hib2FyZC1jaGlsZC5jb21wb25lbnQuaHRtbCcsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2Rhc2hib2FyZC1ncmlkLWNoaWxkJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIERhc2hib2FyZENoaWxkQ29tcG9uZW50IGltcGxlbWVudHMgRGFzaGJvYXJkQ2hpbGREaW1lbnNpb24ge1xuICBAQ29udGVudENoaWxkcmVuKERhc2hib2FyZENoaWxkQWN0aW9uQ29tcG9uZW50KSBhY3Rpb25zID0gW107XG4gIGRyYWdTb3VyY2U6IENka0RyYWc7XG4gIGlzUmVzaXplID0gZmFsc2U7XG4gIGlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAga2xhc3NlcyA9IHt9O1xuXG4gIF9weFdpZHRoID0gJzEwMCUnO1xuICBfcHhIZWlnaHQgPSAnMTAwJSc7XG5cbiAgLyoqXG4gICAqIFRoZSB4IHBvc2l0aW9uIG9mIHRoZSBjaGlsZC5cbiAgICovXG4gIEBJbnB1dCgpIHg7XG5cbiAgLyoqXG4gICAqIFRoZSB5IHBvc2l0aW9uIG9mIHRoZSBjaGlsZC5cbiAgICovXG4gIEBJbnB1dCgpIHk7XG5cbiAgLyoqXG4gICAqIFRoZSB3aWR0aCBvZiB0aGUgY29tcG9uZW50IGluIGdyaWQtY29sdW1ucy5cbiAgICovXG4gIEBJbnB1dCgpIHdpZHRoID0gMTtcblxuICAvKipcbiAgICogVGhlIGhlaWdodCBvZiB0aGUgY29tcG9uZW50IGluIGdyaWQtcm93cy5cbiAgICovXG4gIEBJbnB1dCgpIGhlaWdodCA9IDE7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIG9iamVjdCBjYW4gYmUgdXNlZCBhcyBhIGRhdGFUcmFuc2ZlciBvYmplY3QgZm9yIGV2ZW50cyBvZiB0aGUgY2hpbGQuXG4gICAqL1xuICBASW5wdXQoKSBkYXRhOiBXaWRnZXQgfCBhbnk7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXJnaW4gb2YgdGhlIGNoaWxkIGluIHBpeGVsLlxuICAgKi9cbiAgQElucHV0KCkgbWFyZ2luID0gMTI7XG5cbiAgLyoqXG4gICAqIElmIGEgZGFzaGJvYXJkIGlzIGZyb3plbiwgYWxsIGNoaWxkcmVuIGNhbm5vdCBiZSBtb3ZlZFxuICAgKiBvciByZXNpemVkLlxuICAgKi9cbiAgQElucHV0KCkgaXNGcm96ZW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIGNoaWxkIGNvbnRlbnQgaXMgaW5pdGlhbGl6ZWQsIGFzIHNvb24gaXQgaXMgc2Nyb2xsZWQgaW50byB2aWV3cG9ydFxuICAgKi9cbiAgQElucHV0KCkgdXNlSW50ZXJzZWN0aW9uID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IGZpcmVkIGlmIGEgY2hpbGQgY2hhbmdlIGlzIHN0YXJ0ZWQgKGRyYWdnaW5nIG9yIHJlc2l6aW5nKVxuICAgKi9cbiAgQE91dHB1dCgpIGNoYW5nZVN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXNoYm9hcmRDaGlsZENvbXBvbmVudD4oKTtcblxuICAvKipcbiAgICogQW4gZXZlbnQgZmlyZWQgaWYgYSBjaGlsZCBjaGFuZ2UgaXMgZW5kZWRcbiAgICovXG4gIEBPdXRwdXQoKSBjaGFuZ2VFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPERhc2hib2FyZENoaWxkQ29tcG9uZW50PigpO1xuXG4gIC8qKlxuICAgKiBBbGwgY2xhc3NlcyBhZGRlZCB0byB0aGlzIGNoaWxkXG4gICAqL1xuICBASW5wdXQoKVxuICBjbGFzczogc3RyaW5nW10gfCB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwaXhlbCB3aWR0aCBvZiB0aGUgY2hpbGQgKHVzZWQgZm9yIHJlc2l6aW5nKVxuICAgKi9cbiAgc2V0IHB4V2lkdGgodmFsdWUpIHtcbiAgICB0aGlzLl9weFdpZHRoID0gYCR7dmFsdWV9cHhgO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBpeGVsIGhlaWdodCBvZiB0aGUgY2hpbGQgKHVzZWQgZm9yIHJlc2l6aW5nKVxuICAgKi9cbiAgc2V0IHB4SGVpZ2h0KHZhbHVlKSB7XG4gICAgdGhpcy5fcHhIZWlnaHQgPSBgJHt2YWx1ZX1weGA7XG4gIH1cblxuICAvKipcbiAgICogQW4gaW5kaWNhdG9yIGlmIHRoZSBjaGlsZCBpcyBpbnRlcnNlY3RlZCAodGhhdCBtZWFuIHZpc2libGUgZm9yIHRoZSB1c2VyKVxuICAgKi9cbiAgaW50ZXJzZWN0ZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogbmFzdHkgd29ya2Fyb3VuZCBmb3IgdGhhdCBpc3N1ZTpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvOTM0M1xuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnN0eWxlJylcbiAgZ2V0IGlubGluZVN0eWxlKCkge1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUoYFxuICAgIGdyaWQtY29sdW1uLXN0YXJ0OiAke3RoaXMueCArIDF9O1xuICAgIC1tcy1ncmlkLWNvbHVtbjogJHt0aGlzLnggKyAxfTtcbiAgICBncmlkLXJvdy1zdGFydDogJHt0aGlzLnkgKyAxfTtcbiAgICAtbXMtZ3JpZC1yb3c6ICR7dGhpcy55ICsgMX07XG4gICAgZ3JpZC1jb2x1bW4tZW5kOiBzcGFuICR7dGhpcy53aWR0aH07XG4gICAgLW1zLWdyaWQtY29sdW1uLXNwYW46ICR7dGhpcy53aWR0aH07XG4gICAgZ3JpZC1yb3ctZW5kOiBzcGFuICR7dGhpcy5oZWlnaHR9O1xuICAgIC1tcy1ncmlkLXJvdy1zcGFuOiAke3RoaXMuaGVpZ2h0fTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW46ICR7dGhpcy5tYXJnaW4gfHwgMTJ9cHg7XG4gICAgYCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG9ic2VydmFibGUgc3Vic2NyaXB0aW9uIHdoaWNoIGlzIGxpc3RlbiB0b1xuICAgKiBvbiBjaGFuZ2VzIChkcmFnIG9yIHJlc2l6ZSkuXG4gICAqL1xuICBjaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gRGFzaGJvYXJkQ29tcG9uZW50KSkgcHVibGljIGRhc2hib2FyZDogRGFzaGJvYXJkQ29tcG9uZW50LFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmXG4gICkge31cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmtsYXNzZXMgPSB7XG4gICAgICBjYXJkOiB0cnVlLFxuICAgICAgJ2NhcmQtZGFzaGJvYXJkJzogdHJ1ZSxcbiAgICAgIGRpc2FibGVkOiB0aGlzLmlzRnJvemVuLFxuICAgICAgJ29uLXJlc2l6ZSc6IHRoaXMuaXNSZXNpemUsXG4gICAgICAuLi50aGlzLmNsYXNzXG4gICAgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnggPT09IHVuZGVmaW5lZCB8fCB0aGlzLnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNldER5bmFtaWNEaW1lbnNpb24oKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZUludGVyc2VjdGlvbiAmJiAnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInIGluIHdpbmRvdykge1xuICAgICAgY29uc3QgaW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXG4gICAgICAgIGV2ZW50ID0+ICh0aGlzLmludGVyc2VjdGVkID0gdGhpcy5jaGlsZEluVmlldyhldmVudFswXSwgaW50ZXJzZWN0aW9uT2JzZXJ2ZXIpKVxuICAgICAgKTtcbiAgICAgIGludGVyc2VjdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludGVyc2VjdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBzZXREeW5hbWljRGltZW5zaW9uKCkge1xuICAgIGNvbnN0IGRzID0gbmV3IERhc2hib2FyZENoaWxkQ2hhbmdlKHRoaXMpO1xuICAgIGNvbnN0IHsgeCwgeSB9ID0gZHMuZmluZEZyZWVEaW1lbnNpb24oKTtcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG4gIH1cblxuICByZXNpemVTdGFydGVkKCRldmVudDogQ2RrRHJhZ1N0YXJ0KSB7XG4gICAgdGhpcy5pc1Jlc2l6ZSA9IHRydWU7XG4gICAgdGhpcy5kYXNoYm9hcmQudXBkYXRlUmVjdFNpemUoKTtcbiAgICB0aGlzLmRyYWdTb3VyY2UgPSAkZXZlbnQuc291cmNlO1xuICAgIGNvbnN0IHBvc2l0aW9uaW5nID0gbmV3IERhc2hib2FyZENoaWxkQ2hhbmdlKHRoaXMpO1xuICAgIHRoaXMuY2hhbmdlU3Vic2NyaXB0aW9uID0gcG9zaXRpb25pbmcucmVzaXplJC5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNoYW5nZVN0YXJ0LmVtaXQodGhpcyk7XG4gICAgdGhpcy5uZ09uQ2hhbmdlcygpO1xuICB9XG5cbiAgZHJhZ1N0YXJ0ZWQoJGV2ZW50OiBDZGtEcmFnU3RhcnQpIHtcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgIHRoaXMuZGFzaGJvYXJkLnVwZGF0ZVJlY3RTaXplKCk7XG4gICAgdGhpcy5kcmFnU291cmNlID0gJGV2ZW50LnNvdXJjZTtcbiAgICBjb25zdCBwb3NpdGlvbmluZyA9IG5ldyBEYXNoYm9hcmRDaGlsZENoYW5nZSh0aGlzKTtcbiAgICB0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbiA9IHBvc2l0aW9uaW5nLmRyYWckLnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2hhbmdlU3RhcnQuZW1pdCh0aGlzKTtcbiAgfVxuXG4gIHJlc2V0KCRldmVudD86IENka0RyYWdFbmQpIHtcbiAgICB0aGlzLmlzUmVzaXplID0gZmFsc2U7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fcHhXaWR0aCA9ICcxMDAlJztcbiAgICB0aGlzLl9weEhlaWdodCA9ICcxMDAlJztcbiAgICB0aGlzLm5nT25DaGFuZ2VzKCk7XG4gICAgaWYgKCRldmVudCkge1xuICAgICAgJGV2ZW50LnNvdXJjZS5yZXNldCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLmRhc2hib2FyZC5lbWl0Q2hhbmdlKHRoaXMpO1xuICAgICAgdGhpcy5jaGFuZ2VFbmQuZW1pdCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoaWxkSW5WaWV3KGV2ZW50LCBvYnNlcnZlcikge1xuICAgIGlmIChldmVudC5pc0ludGVyc2VjdGluZykge1xuICAgICAgb2JzZXJ2ZXIudW5vYnNlcnZlKGV2ZW50LnRhcmdldCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=
|
|
253
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLWNoaWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BjOHkvbmd4LWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb3JlL2Rhc2hib2FyZC9kYXNoYm9hcmQtY2hpbGQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxlQUFlLEVBQ2YsTUFBTSxFQUNOLFlBQVksRUFDWixVQUFVLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXpELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRW5GOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRDRztBQVFIO0lBaUhFLGlDQUN1RCxTQUE2QixFQUMxRSxTQUF1QixFQUN2QixPQUFtQjtRQUYwQixjQUFTLEdBQVQsU0FBUyxDQUFvQjtRQUMxRSxjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFuSG1CLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFFN0QsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFFYixhQUFRLEdBQUcsTUFBTSxDQUFDO1FBQ2xCLGNBQVMsR0FBRyxNQUFNLENBQUM7UUFZbkI7O1dBRUc7UUFDTSxVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRW5COztXQUVHO1FBQ00sV0FBTSxHQUFHLENBQUMsQ0FBQztRQU9wQjs7V0FFRztRQUNN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O0lBS3ZCO1FBQVQsTUFBTSxFQUFFO2dFQUEyRDtJQUsxRDtRQUFULE1BQU0sRUFBRTs4REFBeUQ7SUFNbEU7UUFEQyxLQUFLLEVBQUU7MERBQzBDO0lBMEJsRDtRQURDLFdBQVcsQ0FBQyxZQUFZLENBQUM7OERBZXpCO0lBekdVLHVCQUF1QjtRQVBuQyxTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUscUJBQXFCO1lBQy9CLDJ6REFBK0M7WUFDL0MsSUFBSSxFQUFFO2dCQUNKLEtBQUssRUFBRSxzQkFBc0I7YUFDOUI7U0FDRixDQUFDO1FBbUhHLG1CQUFBLE1BQU0sQ0FBQyxVQUFVLENBQUMsY0FBTSxPQUFBLGtCQUFrQixFQUFsQixDQUFrQixDQUFDLENBQUMsQ0FBQTtPQWxIcEMsdUJBQXVCLENBb01uQztJQUFELDhCQUFDO0NBQUEsQUFwTUQsSUFvTUM7U0FwTVksdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZywgQ2RrRHJhZ0VuZCwgQ2RrRHJhZ1N0YXJ0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBFbGVtZW50UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERhc2hib2FyZENvbXBvbmVudCB9IGZyb20gJy4vZGFzaGJvYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDaGlsZERpbWVuc2lvbiwgV2lkZ2V0IH0gZnJvbSAnLi9kYXNoYm9hcmQubW9kZWwnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQ2hpbGRDaGFuZ2UgfSBmcm9tICcuL2Rhc2hib2FyZC1jaGlsZC1jaGFuZ2UnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQ2hpbGRBY3Rpb25Db21wb25lbnQgfSBmcm9tICcuL2Rhc2hib2FyZC1jaGlsZC1hY3Rpb24uY29tcG9uZW50JztcblxuLyoqXG4gKiBBIGRhc2hib2FyZCBjaGlsZCBhbGxvd3MgdG8gcG9zaXRpb24gZWxlbWVudHNcbiAqIGNvcnJlY3RseSBvbiBhIGdyaWQuIFRoZSB1c2VyIGNhbiB0aGVuIHJlc2l6ZSBhbmRcbiAqIHJlYXJyYW5nZSB0aGUgZWxlbWVudHMsIGFzIGxvbmcgYXMgdGhleSBhcmUgbm90IGBmcm96ZW5gLlxuICpcbiAqIEJ5IHNldHRpbmcgYGM4eS1kYXNoYm9hcmQtY2hpbGQtYWN0aW9uc2AgYW5kXG4gKiBgYzh5LWRhc2hib2FyZC1jaGlsZC10aXRsZWAgb24gdGhlIGVsZW1lbnQgeW91IGNhbiBhZGRcbiAqIGN1c3RvbSBhY3Rpb25zIG9yIGEgY3VzdG9tIHRpdGxlIHRvIHRoZSBjdXJyZW50IGNoaWxkLlxuICpcbiAqIEJ5IGFkZGluZyB0aGUgY29ycmVjdCBicmFuZGVkIGNsYXNzZXMsIHlvdSBjYW4gZGVmaW5lXG4gKiB0aGUgbG9vayBhbmQgZmVlbCBvZiB0aGUgY2hpbGQuIEJ5IGRlZmF1bHQgaXQgaXMgZGlzcGxheWVkXG4gKiBhcyBhIGNhcmQuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBodG1sXG4gKiAgIDxjOHktZGFzaGJvYXJkLWNoaWxkXG4gKiAgICAgI2NwV2lkZ2V0M1xuICogICAgIFtpc0Zyb3plbl09XCJpc0Zyb3plblwiXG4gKiAgICAgW3hdPVwiMFwiXG4gKiAgICAgW3ldPVwiM1wiXG4gKiAgICAgW3dpZHRoXT1cIjRcIlxuICogICAgIFtoZWlnaHRdPVwiNFwiXG4gKiAgICAgW2NsYXNzXT1cIidjYXJkLWRhc2hib2FyZCBwYW5lbC1jb250ZW50LXRyYW5zcGFyZW50J1wiXG4gKiAgID5cbiAqICAgICA8Yzh5LWRhc2hib2FyZC1jaGlsZC10aXRsZSAqbmdJZj1cInNob3dUaXRsZVwiPlxuICogICAgICAgPHNwYW4+VHJhbnNwYXJlbnQhPC9zcGFuPlxuICogICAgIDwvYzh5LWRhc2hib2FyZC1jaGlsZC10aXRsZT5cbiAqICAgICA8Yzh5LWRhc2hib2FyZC1jaGlsZC1hY3Rpb24+XG4gKiAgICAgICA8YSBocmVmPVwiXCIgKGNsaWNrKT1cInNob3dUaXRsZSA9ICFzaG93VGl0bGU7IChmYWxzZSlcIj5cbiAqICAgICAgICAgPGkgW2M4eUljb25dPVwiJ2hlYWRpbmcnXCI+PC9pPiBIaWRlL3Nob3cgdGl0bGVcbiAqICAgICAgIDwvYT5cbiAqICAgICA8L2M4eS1kYXNoYm9hcmQtY2hpbGQtYWN0aW9uPlxuICogICAgIDxjOHktZGFzaGJvYXJkLWNoaWxkLWFjdGlvbj5cbiAqICAgICAgIDxhIGhyZWY9XCJcIiAoY2xpY2spPVwiY3BXaWRnZXQzLmlzRnJvemVuID0gIWNwV2lkZ2V0My5pc0Zyb3plbjsgKGZhbHNlKVwiPlxuICogICAgICAgICA8aSBbYzh5SWNvbl09XCJjcFdpZGdldDMuaXNGcm96ZW4gPyAnbG9jaycgOiAndW5sb2NrJ1wiPjwvaT4gVG9nZ2xlIGZyZWV6ZVxuICogICAgICAgPC9hPlxuICogICAgIDwvYzh5LWRhc2hib2FyZC1jaGlsZC1hY3Rpb24+XG4gKiAgICAgeDoge3sgY3BXaWRnZXQzLnggfX08YnIgLz5cbiAqICAgICB5OiB7eyBjcFdpZGdldDMueSB9fTxiciAvPlxuICogICAgIHdpZHRoOiB7eyBjcFdpZGdldDMud2lkdGggfX08YnIgLz5cbiAqICAgICBoZWlnaHQ6IHt7IGNwV2lkZ2V0My5oZWlnaHQgfX08YnIgLz5cbiAqICAgPC9jOHktZGFzaGJvYXJkLWNoaWxkPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXNoYm9hcmQtY2hpbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGFzaGJvYXJkLWNoaWxkLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZGFzaGJvYXJkLWdyaWQtY2hpbGQnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkQ2hpbGRDb21wb25lbnQgaW1wbGVtZW50cyBEYXNoYm9hcmRDaGlsZERpbWVuc2lvbiB7XG4gIEBDb250ZW50Q2hpbGRyZW4oRGFzaGJvYXJkQ2hpbGRBY3Rpb25Db21wb25lbnQpIGFjdGlvbnMgPSBbXTtcbiAgZHJhZ1NvdXJjZTogQ2RrRHJhZztcbiAgaXNSZXNpemUgPSBmYWxzZTtcbiAgaXNEcmFnZ2luZyA9IGZhbHNlO1xuICBrbGFzc2VzID0ge307XG5cbiAgX3B4V2lkdGggPSAnMTAwJSc7XG4gIF9weEhlaWdodCA9ICcxMDAlJztcblxuICAvKipcbiAgICogVGhlIHggcG9zaXRpb24gb2YgdGhlIGNoaWxkLlxuICAgKi9cbiAgQElucHV0KCkgeDtcblxuICAvKipcbiAgICogVGhlIHkgcG9zaXRpb24gb2YgdGhlIGNoaWxkLlxuICAgKi9cbiAgQElucHV0KCkgeTtcblxuICAvKipcbiAgICogVGhlIHdpZHRoIG9mIHRoZSBjb21wb25lbnQgaW4gZ3JpZC1jb2x1bW5zLlxuICAgKi9cbiAgQElucHV0KCkgd2lkdGggPSAxO1xuXG4gIC8qKlxuICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjb21wb25lbnQgaW4gZ3JpZC1yb3dzLlxuICAgKi9cbiAgQElucHV0KCkgaGVpZ2h0ID0gMTtcblxuICAvKipcbiAgICogVGhlIGRhdGEgb2JqZWN0IGNhbiBiZSB1c2VkIGFzIGEgZGF0YVRyYW5zZmVyIG9iamVjdCBmb3IgZXZlbnRzIG9mIHRoZSBjaGlsZC5cbiAgICovXG4gIEBJbnB1dCgpIGRhdGE6IFdpZGdldCB8IGFueTtcblxuICAvKipcbiAgICogVGhlIG1hcmdpbiBvZiB0aGUgY2hpbGQgaW4gcGl4ZWwuXG4gICAqL1xuICBASW5wdXQoKSBtYXJnaW4gPSAxMjtcblxuICAvKipcbiAgICogSWYgYSBkYXNoYm9hcmQgaXMgZnJvemVuLCBhbGwgY2hpbGRyZW4gY2Fubm90IGJlIG1vdmVkXG4gICAqIG9yIHJlc2l6ZWQuXG4gICAqL1xuICBASW5wdXQoKSBpc0Zyb3plbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgY2hpbGQgY29udGVudCBpcyBpbml0aWFsaXplZCwgYXMgc29vbiBpdCBpcyBzY3JvbGxlZCBpbnRvIHZpZXdwb3J0XG4gICAqL1xuICBASW5wdXQoKSB1c2VJbnRlcnNlY3Rpb24gPSBmYWxzZTtcblxuICAvKipcbiAgICogQW4gZXZlbnQgZmlyZWQgaWYgYSBjaGlsZCBjaGFuZ2UgaXMgc3RhcnRlZCAoZHJhZ2dpbmcgb3IgcmVzaXppbmcpXG4gICAqL1xuICBAT3V0cHV0KCkgY2hhbmdlU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPERhc2hib2FyZENoaWxkQ29tcG9uZW50PigpO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBmaXJlZCBpZiBhIGNoaWxkIGNoYW5nZSBpcyBlbmRlZFxuICAgKi9cbiAgQE91dHB1dCgpIGNoYW5nZUVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGFzaGJvYXJkQ2hpbGRDb21wb25lbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEFsbCBjbGFzc2VzIGFkZGVkIHRvIHRoaXMgY2hpbGRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGNsYXNzOiBzdHJpbmdbXSB8IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBpeGVsIHdpZHRoIG9mIHRoZSBjaGlsZCAodXNlZCBmb3IgcmVzaXppbmcpXG4gICAqL1xuICBzZXQgcHhXaWR0aCh2YWx1ZSkge1xuICAgIHRoaXMuX3B4V2lkdGggPSBgJHt2YWx1ZX1weGA7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcGl4ZWwgaGVpZ2h0IG9mIHRoZSBjaGlsZCAodXNlZCBmb3IgcmVzaXppbmcpXG4gICAqL1xuICBzZXQgcHhIZWlnaHQodmFsdWUpIHtcbiAgICB0aGlzLl9weEhlaWdodCA9IGAke3ZhbHVlfXB4YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBpbmRpY2F0b3IgaWYgdGhlIGNoaWxkIGlzIGludGVyc2VjdGVkICh0aGF0IG1lYW4gdmlzaWJsZSBmb3IgdGhlIHVzZXIpXG4gICAqL1xuICBpbnRlcnNlY3RlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBuYXN0eSB3b3JrYXJvdW5kIGZvciB0aGF0IGlzc3VlOlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy85MzQzXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuc3R5bGUnKVxuICBnZXQgaW5saW5lU3R5bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShgXG4gICAgZ3JpZC1jb2x1bW4tc3RhcnQ6ICR7dGhpcy54ICsgMX07XG4gICAgLW1zLWdyaWQtY29sdW1uOiAke3RoaXMueCArIDF9O1xuICAgIGdyaWQtcm93LXN0YXJ0OiAke3RoaXMueSArIDF9O1xuICAgIC1tcy1ncmlkLXJvdzogJHt0aGlzLnkgKyAxfTtcbiAgICBncmlkLWNvbHVtbi1lbmQ6IHNwYW4gJHt0aGlzLndpZHRofTtcbiAgICAtbXMtZ3JpZC1jb2x1bW4tc3BhbjogJHt0aGlzLndpZHRofTtcbiAgICBncmlkLXJvdy1lbmQ6IHNwYW4gJHt0aGlzLmhlaWdodH07XG4gICAgLW1zLWdyaWQtcm93LXNwYW46ICR7dGhpcy5oZWlnaHR9O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbjogJHt0aGlzLm1hcmdpbiB8fCAxMn1weDtcbiAgICBvcmRlcjogJHt0aGlzLmdldE9yZGVyKCl9O1xuICAgIGApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBvYnNlcnZhYmxlIHN1YnNjcmlwdGlvbiB3aGljaCBpcyBsaXN0ZW4gdG9cbiAgICogb24gY2hhbmdlcyAoZHJhZyBvciByZXNpemUpLlxuICAgKi9cbiAgY2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChmb3J3YXJkUmVmKCgpID0+IERhc2hib2FyZENvbXBvbmVudCkpIHB1YmxpYyBkYXNoYm9hcmQ6IERhc2hib2FyZENvbXBvbmVudCxcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZlxuICApIHt9XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5rbGFzc2VzID0ge1xuICAgICAgY2FyZDogdHJ1ZSxcbiAgICAgICdjYXJkLWRhc2hib2FyZCc6IHRydWUsXG4gICAgICBkaXNhYmxlZDogdGhpcy5pc0Zyb3plbixcbiAgICAgICdvbi1yZXNpemUnOiB0aGlzLmlzUmVzaXplLFxuICAgICAgLi4udGhpcy5jbGFzc1xuICAgIH07XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy54ID09PSB1bmRlZmluZWQgfHwgdGhpcy55ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXREeW5hbWljRGltZW5zaW9uKCkpO1xuICAgIH1cbiAgICBpZiAodGhpcy51c2VJbnRlcnNlY3Rpb24gJiYgJ0ludGVyc2VjdGlvbk9ic2VydmVyJyBpbiB3aW5kb3cpIHtcbiAgICAgIGNvbnN0IGludGVyc2VjdGlvbk9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgICBldmVudCA9PiAodGhpcy5pbnRlcnNlY3RlZCA9IHRoaXMuY2hpbGRJblZpZXcoZXZlbnRbMF0sIGludGVyc2VjdGlvbk9ic2VydmVyKSlcbiAgICAgICk7XG4gICAgICBpbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnRlcnNlY3RlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgc2V0RHluYW1pY0RpbWVuc2lvbigpIHtcbiAgICBjb25zdCBkcyA9IG5ldyBEYXNoYm9hcmRDaGlsZENoYW5nZSh0aGlzKTtcbiAgICBjb25zdCB7IHgsIHkgfSA9IGRzLmZpbmRGcmVlRGltZW5zaW9uKCk7XG4gICAgdGhpcy54ID0geDtcbiAgICB0aGlzLnkgPSB5O1xuICB9XG5cbiAgcmVzaXplU3RhcnRlZCgkZXZlbnQ6IENka0RyYWdTdGFydCkge1xuICAgIHRoaXMuaXNSZXNpemUgPSB0cnVlO1xuICAgIHRoaXMuZGFzaGJvYXJkLnVwZGF0ZVJlY3RTaXplKCk7XG4gICAgdGhpcy5kcmFnU291cmNlID0gJGV2ZW50LnNvdXJjZTtcbiAgICBjb25zdCBwb3NpdGlvbmluZyA9IG5ldyBEYXNoYm9hcmRDaGlsZENoYW5nZSh0aGlzKTtcbiAgICB0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbiA9IHBvc2l0aW9uaW5nLnJlc2l6ZSQuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jaGFuZ2VTdGFydC5lbWl0KHRoaXMpO1xuICAgIHRoaXMubmdPbkNoYW5nZXMoKTtcbiAgfVxuXG4gIGRyYWdTdGFydGVkKCRldmVudDogQ2RrRHJhZ1N0YXJ0KSB7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmRhc2hib2FyZC51cGRhdGVSZWN0U2l6ZSgpO1xuICAgIHRoaXMuZHJhZ1NvdXJjZSA9ICRldmVudC5zb3VyY2U7XG4gICAgY29uc3QgcG9zaXRpb25pbmcgPSBuZXcgRGFzaGJvYXJkQ2hpbGRDaGFuZ2UodGhpcyk7XG4gICAgdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24gPSBwb3NpdGlvbmluZy5kcmFnJC5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNoYW5nZVN0YXJ0LmVtaXQodGhpcyk7XG4gIH1cblxuICByZXNldCgkZXZlbnQ/OiBDZGtEcmFnRW5kKSB7XG4gICAgdGhpcy5pc1Jlc2l6ZSA9IGZhbHNlO1xuICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgIHRoaXMuX3B4V2lkdGggPSAnMTAwJSc7XG4gICAgdGhpcy5fcHhIZWlnaHQgPSAnMTAwJSc7XG4gICAgdGhpcy5uZ09uQ2hhbmdlcygpO1xuICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICRldmVudC5zb3VyY2UucmVzZXQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5kYXNoYm9hcmQuZW1pdENoYW5nZSh0aGlzKTtcbiAgICAgIHRoaXMuY2hhbmdlRW5kLmVtaXQodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmRlcigpIHtcbiAgICByZXR1cm4gYCR7TWF0aC5yb3VuZCgodGhpcy55ICsgKHRoaXMueCArIDEpIC8gMTAwKSAqIDEwMCl9YDtcbiAgfVxuXG4gIHByaXZhdGUgY2hpbGRJblZpZXcoZXZlbnQsIG9ic2VydmVyKSB7XG4gICAgaWYgKGV2ZW50LmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICBvYnNlcnZlci51bm9ic2VydmUoZXZlbnQudGFyZ2V0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
|