tnx-shared 5.3.426 → 5.3.428

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.
@@ -134,8 +134,8 @@ export declare abstract class DataFormBase extends ComponentBaseWithButton imple
134
134
  handleUpdateError(response?: any): void;
135
135
  getPromiseActionUpdate(): Promise<ResponseResult>;
136
136
  private setDefaultValue;
137
- private showMessageAfterInsert;
138
- private showMessageAfterUpdate;
137
+ showMessageAfterInsert(isSuccess?: boolean, error?: any): void;
138
+ showMessageAfterUpdate(isSuccess?: boolean, error?: any): void;
139
139
  handleResponseError(error: any): void;
140
140
  onFormInitialized(data: EventData): Promise<void>;
141
141
  _handleAfterTrinhKy(evt: any): void;
@@ -1 +1 @@
1
- {"version":3,"file":"data-form-base.d.ts","sourceRoot":"","sources":["../../../../projects/tnx-shared/src/lib/classes/base/data-form-base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-form-base.d.ts","sourceRoot":"","sources":["../../../../projects/tnx-shared/src/lib/classes/base/data-form-base.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,7 @@ export declare class UserPickerComponent extends ComponentBase implements OnInit
23
23
  get readOnlyValues(): string[];
24
24
  onInit: EventEmitter<any>;
25
25
  onSelect: EventEmitter<any>;
26
+ onClickSubmit: EventEmitter<any>;
26
27
  onUnSelect: EventEmitter<any>;
27
28
  onChanged: EventEmitter<any>;
28
29
  onFocus: EventEmitter<any>;
@@ -1 +1 @@
1
- {"version":3,"file":"user-picker.component.d.ts","sourceRoot":"","sources":["../../../../projects/tnx-shared/src/lib/components/user-picker/user-picker.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user-picker.component.d.ts","sourceRoot":"","sources":["../../../../projects/tnx-shared/src/lib/components/user-picker/user-picker.component.ts"],"names":[],"mappings":"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"}
@@ -951,4 +951,4 @@ DataFormBase.propDecorators = {
951
951
  onFormReady: [{ type: Output }],
952
952
  onDataBinded: [{ type: Output }]
953
953
  };
954
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1mb3JtLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY2xhc3Nlcy9iYXNlL2RhdGEtZm9ybS1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUVILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFFBQVEsRUFDUixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQW1CLGlCQUFpQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDekcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSw0QkFBNEIsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1B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QkFDTixNQUFNO3VCQUNOLE1BQU07d0JBQ04sTUFBTTswQkFDTixNQUFNOzJCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRmlsZVVwbG9hZCB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2ZpbGV1cGxvYWQnO1xuaW1wb3J0IHsgQ29udHJvbFRyZWVOb2RlLCBDcnVkRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3J1ZC9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDT05GSUdfQ0FMRU5EQVJfVklFVE5BTUVTRSB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY2FsZW5kYXIuY29uZmlnJztcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZUJvb2xlYW4sIEZpZWxkRGVmaW5lSXNUYXNrRm9ybUNvbnRyb2wsIEZpZWxkV29ya2Zsb3dDb2RlSW5DcnVkRm9ybSB9IGZyb20gJy4uLy4uL2NvbnN0L2NvbW1vbic7XG5pbXBvcnQgeyBQZXJtaXNzaW9uQmFzZSB9IGZyb20gJy4uLy4uL2VudW1zL2NvbW1vbic7XG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3J1ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jcnVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tUm91dGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2N1c3RvbS1yb3V0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBEb21TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZG9tLnNlcnZpY2UnO1xuaW1wb3J0IHsgRW50aXR5TWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW50aXR5LW1ldGFkYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWFzdGVyRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYXN0ZXItZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtU3RhdGUsIEtleUZsYXNoU2hvdyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBpc0xpdGVyYWxPYmplY3QsIGlzVmFsaWREYXRlIH0gZnJvbSAnLi4vZW52aXJvbm1lbnQtc2NoZW1hJztcbmltcG9ydCB7XG4gICAgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSxcbiAgICBDaGVja2JveENvbnRyb2xTY2hlbWEsXG4gICAgQ29udGFpbmVyU2NoZW1hLFxuICAgIENydWRGb3JtRGF0YSxcbiAgICBDcnVkRm9ybVNldHRpbmcsXG4gICAgQ3J1ZExpc3RTZXR0aW5nLFxuICAgIEN1c3RvbUNvbnRyb2xTY2hlbWEsXG4gICAgRGF0ZVRpbWVDb250cm9sU2NoZW1hLFxuICAgIERyb3Bkb3duQ29udHJvbFNjaGVtYSxcbiAgICBFZGl0b3JDb250cm9sU2NoZW1hLFxuICAgIEVudW1Mb2dUeXBlLFxuICAgIEV2ZW50RGF0YSxcbiAgICBFdmVudFR5cGUsXG4gICAgRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hLFxuICAgIEZvcm1Db250cm9sQmFzZSxcbiAgICBMb2dDb2x1bW4sXG4gICAgTG9nU2V0dGluZyxcbiAgICBNYXNrQ29udHJvbFNjaGVtYSxcbiAgICBPcGVyYXRvcixcbiAgICBTd2l0Y2hDb250cm9sU2NoZW1hLFxuICAgIFRhYmxlU2NoZW1hLFxuICAgIFRleHRBcmVhQ29udHJvbFNjaGVtYSxcbiAgICBUaXRsZVNjaGVtYVxufSBmcm9tICcuLi9mb3JtLXNjaGVtYSc7XG5pbXBvcnQgeyBDb21wb25lbnRCYXNlV2l0aEJ1dHRvbiB9IGZyb20gJy4vY29tcG9uZW50LWJhc2Utd2l0aC1idXR0b24nO1xuaW1wb3J0IHsgUmVxdWlyZWRWYWxpZGF0b3IgfSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEYXRhRm9ybUJhc2UgZXh0ZW5kcyBDb21wb25lbnRCYXNlV2l0aEJ1dHRvbiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICAgIEBWaWV3Q2hpbGQoQ3J1ZEZvcm1Db21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KSBjcnVkRm9ybTogQ3J1ZEZvcm1Db21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgnZm9ybUVsZW1lbnQnLCB7IHN0YXRpYzogdHJ1ZSB9KSBmb3JtRWxlbWVudDogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdwVXBsb2FkJywgeyBzdGF0aWM6IHRydWUgfSkgcFVwbG9hZDogRmlsZVVwbG9hZDtcblxuICAgIEBJbnB1dCgpIHBhcmVudFNldHRpbmc6IENydWRMaXN0U2V0dGluZztcbiAgICBASW5wdXQoKSBtb2RlbDogQ3J1ZEZvcm1EYXRhID0gbmV3IENydWRGb3JtRGF0YSgpO1xuICAgIEBJbnB1dCgpIGZvcmNlT25seVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBPdXRwdXQoKSBvblNhdmU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uU2F2ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uQ2FuY2VsOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbk1lc3NhZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRm9ybVJlYWR5OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkRhdGFCaW5kZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBkb05vdENoZWNrQmFzZVNlcnZpY2UgPSBmYWxzZTtcbiAgICBwcml2YXRlIG5vdENvbmZpZ0Jhc2VTZXJ2aWNlTWVzc2FnZSA9ICdDaMawYSBj4bqldSBow6xuaCBDUlVEIGJhc2Ugc2VydmljZSc7XG4gICAgbWVzc2FnZUluc2VydFN1Y2Nlc3MgPSAnJztcbiAgICBtZXNzYWdlVXBkYXRlU3VjY2VzcyA9ICcnO1xuICAgIHNldHRpbmc6IENydWRGb3JtU2V0dGluZyA9IG5ldyBDcnVkRm9ybVNldHRpbmcoKTtcbiAgICBsb2dTZXR0aW5nOiBMb2dTZXR0aW5nID0gbmV3IExvZ1NldHRpbmcoKTtcblxuICAgIHZpID0gQ09ORklHX0NBTEVOREFSX1ZJRVROQU1FU0U7XG5cbiAgICBmb3JtQ29udHJvbHM6IGFueTtcbiAgICBmb3JtQ29udHJvbHNMaXN0ID0ge307XG4gICAgZW52aXJvbm1lbnQ6IGFueSA9IHt9O1xuICAgIG1kV2lkdGhXb3JrZmxvdzogbnVtYmVyO1xuXG4gICAgYXV0b0dldERldGFpbCA9IHRydWU7XG4gICAgYXV0b1NhdmUgPSB0cnVlO1xuICAgIGlzQ2xvc2VGb3JtID0gdHJ1ZTtcbiAgICBtZXNzYWdlQ29uZmlybVNhdmU6IHN0cmluZztcbiAgICBzYXZpbmcgPSBmYWxzZTtcbiAgICBnZXREZXRhaWxQbHVzVXJsID0gbnVsbDtcbiAgICBpbnNlcnRQbHVzVXJsID0gbnVsbDtcbiAgICB1cGRhdGVQbHVzVXJsID0gbnVsbDtcbiAgICBkeW5hbWljQ29udHJvbDogYW55ID0ge307XG4gICAgc2V0VmFsaWRhdGVGb3JtID0gdHJ1ZTtcbiAgICBoYXZlRW50aXR5TWV0YWRhdGFBUEkgPSB0cnVlO1xuICAgIGlzQmFzZU1vZGVsID0gdHJ1ZTtcbiAgICBhdXRvR2VuZXJhdGVJZCA9IHRydWU7XG4gICAgcHVibGljIF9faXNGb3JtVmlldzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHVibGljIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZTtcbiAgICBwdWJsaWMgX21hc3RlckRhdGFTZXJ2aWNlOiBNYXN0ZXJEYXRhU2VydmljZTtcbiAgICBwdWJsaWMgX3JvdXRlcjogUm91dGVyO1xuICAgIHB1YmxpYyBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlO1xuICAgIHB1YmxpYyBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZTtcbiAgICBwdWJsaWMgX2N1c3RvbVJvdXRlclNlcnZpY2U6IEN1c3RvbVJvdXRlclNlcnZpY2U7XG4gICAgcHVibGljIF9jcnVkU2VydmljZTogQ3J1ZFNlcnZpY2U7XG4gICAgcHVibGljIF9kb21TZXJ2aWNlOiBEb21TZXJ2aWNlO1xuICAgIHB1YmxpYyBfZW50aXR5TWV0YWRhdGFTZXJ2aWNlOiBFbnRpdHlNZXRhZGF0YVNlcnZpY2U7XG4gICAgcHVibGljIF91c2VyU2VydmljZTogVXNlclNlcnZpY2U7XG4gICAgcHVibGljIF9udW1iZXJQaXBlOiBEZWNpbWFsUGlwZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBfaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XG4gICAgICAgIGNvbnN0IG1vZHVsZUNvbmZpZ1NlcnZpY2UgPSBfaW5qZWN0b3IuZ2V0KE1vZHVsZUNvbmZpZ1NlcnZpY2UpO1xuICAgICAgICB0aGlzLmVudmlyb25tZW50ID0gbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudDtcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSk7XG4gICAgICAgIHRoaXMuX251bWJlclBpcGUgPSB0aGlzLl9pbmplY3Rvci5nZXQoRGVjaW1hbFBpcGUpO1xuICAgICAgICB0aGlzLl9tYXN0ZXJEYXRhU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChNYXN0ZXJEYXRhU2VydmljZSk7XG4gICAgICAgIHRoaXMuX3JvdXRlciA9IHRoaXMuX2luamVjdG9yLmdldChSb3V0ZXIpO1xuICAgICAgICB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSA9IHRoaXMuX2luamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2N1c3RvbVJvdXRlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ3VzdG9tUm91dGVyU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENydWRTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fZG9tU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChEb21TZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEVudGl0eU1ldGFkYXRhU2VydmljZSk7XG4gICAgICAgIHRoaXMuX3VzZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFVzZXJTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDb21tb25TZXJ2aWNlKTtcblxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICAvLyB0aGlzLmNoZWNrUGVybWlzc2lvbih0aGlzLm1vZGVsLmRhdGEuYmFzZVBlcm1pc3Npb24pO1xuXG4gICAgICAgIGNvbnN0IGRlZmF1bHRTZXR0aW5nID0gbmV3IENydWRGb3JtU2V0dGluZygpO1xuICAgICAgICBjb25zdCBjYXVIaW5oTmdoaWVwVnUgPSB0aGlzLmVudmlyb25tZW50Py5jYXVIaW5oTmdoaWVwVnU7XG4gICAgICAgIGlmIChjYXVIaW5oTmdoaWVwVnUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGNhdUhpbmhOZ2hpZXBWdSkge1xuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0U2V0dGluZ1trZXldID09IHRoaXMuc2V0dGluZ1trZXldXG4gICAgICAgICAgICAgICAgICAgICYmIHRoaXMuc2V0dGluZ1trZXldICE9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAmJiBjYXVIaW5oTmdoaWVwVnVba2V5XSAhPSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5zZXR0aW5nW2tleV0gIT0gY2F1SGluaE5naGllcFZ1W2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nW2tleV0gPSBjYXVIaW5oTmdoaWVwVnVba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIH1cbiAgICBjaGVja1Blcm1pc3Npb24oYmFzZVBlcm1pc3Npb24pIHtcbiAgICAgICAgaWYgKHRoaXMuaXNCYXNlTW9kZWwpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLmZvcm1TdGF0ZSA9PSBGb3JtU3RhdGUuRURJVCkge1xuICAgICAgICAgICAgICAgIGlmIChiYXNlUGVybWlzc2lvbiAmIFBlcm1pc3Npb25CYXNlLkVESVQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuRURJVDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZm9ybVN0YXRlID0gRm9ybVN0YXRlLlZJRVc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubW9kZWwuZGF0YS5pc0J1aWxkSW5BbGwgJiYgIXRoaXMuX3VzZXJTZXJ2aWNlLmlzU3VwZXJVc2VyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuVklFVztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9faXNGb3JtVmlldyA9IHRoaXMuX2lzRm9ybVZpZXcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZFNjaGVtYUJhc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLl91c2VyU2VydmljZS5pc1N1cGVyVXNlcigpXG4gICAgICAgICAgICAmJiB0aGlzLm1vZGVsXG4gICAgICAgICAgICAmJiB0aGlzLm1vZGVsLmRhdGEuaGFzQnVpbGRJblxuICAgICAgICAgICAgJiYgdGhpcy5zZXR0aW5nLnNjaGVtYVxuICAgICAgICAgICAgJiYgdGhpcy5zZXR0aW5nLnNjaGVtYS5sZW5ndGggPiAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnNjaGVtYS5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBTd2l0Y2hDb250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdpc0J1aWxkSW4nLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0tow7NhIG3DoycsXG4gICAgICAgICAgICAgICAgICAgIG1kV2lkdGg6IDRcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5zY2hlbWEucHVzaChcbiAgICAgICAgICAgICAgICBuZXcgU3dpdGNoQ29udHJvbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiAnaXNCdWlsZEluQWxsJyxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdLaMOzYSBi4bqjbiBnaGknLFxuICAgICAgICAgICAgICAgICAgICBtZFdpZHRoOiA0XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wYXJlbnRTZXR0aW5nXG4gICAgICAgICAgICAmJiB0aGlzLl9pc0Zvcm1BZGROZXcoKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCBkYXRhU291cmNlID0gW10sIGRlZmF1bHRWYWx1ZSA9IG51bGwsIGhhc1dvcmtmbG93ID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBpbml0RGF0YVRhc2tGb3JtOiBhbnkgPSB7fTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudFNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3ICYmIHRoaXMucGFyZW50U2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXcud29ya2Zsb3dzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UgPSB0aGlzLnBhcmVudFNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3LndvcmtmbG93cztcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0aGlzLnBhcmVudFNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3LndvcmtmbG93Q29kZTtcbiAgICAgICAgICAgICAgICBoYXNXb3JrZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhLmNyZWF0ZVRhc2tJbnN0ZWFkID0gdGhpcy5wYXJlbnRTZXR0aW5nLndvcmtmbG93U2V0dGluZ05ldy5jcmVhdGVUYXNrSW5zdGVhZDtcbiAgICAgICAgICAgICAgICBpbml0RGF0YVRhc2tGb3JtLmlkTG9haUNvbmdWaWVjID0gdGhpcy5wYXJlbnRTZXR0aW5nLndvcmtmbG93U2V0dGluZ05ldy5pZExvYWlDb25nVmllY0RlZmF1bHQ7XG4gICAgICAgICAgICAgICAgaW5pdERhdGFUYXNrRm9ybS5fX3RlbXBsYXRlVGFza05hbWUgPSB0aGlzLnBhcmVudFNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3LnRlbXBsYXRlVGFza05hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnBhcmVudFNldHRpbmcuaXNXb3JrZmxvd1RyZWUpIHtcbiAgICAgICAgICAgICAgICBoYXNXb3JrZmxvdyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzV29ya2Zsb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmR5bmFtaWNDb250cm9sW0ZpZWxkRGVmaW5lSXNUYXNrRm9ybUNvbnRyb2xdID0gbmV3IEN1c3RvbUNvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDogRmllbGREZWZpbmVJc1Rhc2tGb3JtQ29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgbWRXaWR0aDogMTIsXG4gICAgICAgICAgICAgICAgICAgIHNob3dMYWJlbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiAnbm8tcGFkZGluZycsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGluaXREYXRhVGFza0Zvcm0sXG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbkNoZWNrOiAocm9vdE1vZGVsKSA9PiAhcm9vdE1vZGVsIHx8ICFyb290TW9kZWwuY3JlYXRlVGFza0luc3RlYWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuc2NoZW1hLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIG5ldyBEcm9wZG93bkNvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IEZpZWxkV29ya2Zsb3dDb2RlSW5DcnVkRm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnUXV5IHRyw6xuaCBz4butIGThu6VuZycsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGaWVsZDogJ2NvZGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkOiAndGl0bGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWRXaWR0aDogdGhpcy5tZFdpZHRoV29ya2Zsb3cgfHwgMTIsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVDYWNoaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbkNoZWNrOiAocm9vdE1vZGVsKSA9PiAhcm9vdE1vZGVsIHx8IHJvb3RNb2RlbC5jcmVhdGVUYXNrSW5zdGVhZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlZDogYXN5bmMgKGV2dDogRXZlbnREYXRhKSA9PiBhd2FpdCB0aGlzLmhhbmRsZUNoYW5nZVdvcmtmbG93Q29kZShldnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25BZGp1c3RlZFZhbHVlOiBhc3luYyAoZXZ0OiBFdmVudERhdGEpID0+IGF3YWl0IHRoaXMuaGFuZGxlQ2hhbmdlV29ya2Zsb3dDb2RlKGV2dClcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudFNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3XG4gICAgICAgICAgICAgICAgICAgICYmIHRoaXMucGFyZW50U2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXcudGFza0luc2lkZUJ1c2luZXNzRm9ybVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuc2NoZW1hLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgVGl0bGVTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICdDw7RuZyB2aeG7h2MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbkNoZWNrOiAocm9vdE1vZGVsKSA9PiAhcm9vdE1vZGVsIHx8ICFyb290TW9kZWwuY3JlYXRlVGFza0luc3RlYWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5keW5hbWljQ29udHJvbFtGaWVsZERlZmluZUlzVGFza0Zvcm1Db250cm9sXVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGhhbmRsZUNoYW5nZVdvcmtmbG93Q29kZShldnQ6IEV2ZW50RGF0YSkge1xuXG4gICAgfVxuXG4gICAgc2V0V29ya2Zsb3dEYXRhc291cmNlKGV2dDogRXZlbnREYXRhLCB3b3JrZmxvd1NldHRpbmcpIHtcbiAgICAgICAgZXZ0LmZvcm1Db250cm9sc1tGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm1dLmRhdGFTb3VyY2UgPSB3b3JrZmxvd1NldHRpbmcud29ya2Zsb3dzO1xuICAgICAgICBpZiAoIWV2dC5yb290TW9kZWxbRmllbGRXb3JrZmxvd0NvZGVJbkNydWRGb3JtXSkge1xuICAgICAgICAgICAgZXZ0LnJvb3RNb2RlbFtGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm1dID0gd29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghd29ya2Zsb3dTZXR0aW5nLndvcmtmbG93cy5zb21lKHggPT4geC5jb2RlID09IGV2dC5yb290TW9kZWxbRmllbGRXb3JrZmxvd0NvZGVJbkNydWRGb3JtXSkpIHtcbiAgICAgICAgICAgIGV2dC5yb290TW9kZWxbRmllbGRXb3JrZmxvd0NvZGVJbkNydWRGb3JtXSA9IHdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBfaGFuZGxlRm9ybVJlYWR5KGZvcm1FdmVudDogRXZlbnREYXRhKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX19oYW5kbGVGb3JtUmVhZHkoZm9ybUV2ZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9faGFuZGxlRm9ybVJlYWR5KGZvcm1FdmVudDogRXZlbnREYXRhKSB7XG4gICAgICAgIGlmICghdGhpcy5kb05vdENoZWNrQmFzZVNlcnZpY2UgJiYgIXRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKHRoaXMubm90Q29uZmlnQmFzZVNlcnZpY2VNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvcm1Db250cm9scyA9IGZvcm1FdmVudC5mb3JtQ29udHJvbHM7XG4gICAgICAgIGF3YWl0IHRoaXMub25Gb3JtSW5pdGlhbGl6ZWQoZm9ybUV2ZW50KTtcbiAgICAgICAgdGhpcy5vbkZvcm1SZWFkeS5lbWl0KHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMsXG4gICAgICAgICAgICBzZXR0aW5nOiB0aGlzLnNldHRpbmcsXG4gICAgICAgICAgICBmb3JtRXZlbnRcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJHZXREZXRhaWwoKTtcbiAgICB9XG5cbiAgICBfdHJpZ2dlckdldERldGFpbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuYXV0b0dldERldGFpbCkge1xuICAgICAgICAgICAgdGhpcy5nZXREZXRhaWwoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNydWRGb3JtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5pbml0Q29udHJvbERlZmF1bHRWYWx1ZUZyb21FeHRlcm5hbCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3J1ZEZvcm0uZmlyZU1vZGVsQ2hhbmdlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgb25CZWZvcmVHZXREZXRhaWwoKSB7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0T2JqZWN0RGV0YWlsKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5nZXREZXRhaWxXaXRoUGVybWlzc2lvbih0aGlzLm1vZGVsLmRhdGEuaWQsIHRoaXMubW9kZWwuZGF0YS5waWQsIHRoaXMuZ2V0RGV0YWlsUGx1c1VybCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0RGV0YWlsQ3VzdG9tKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXREZXRhaWwoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdENoZWNrID0gYXdhaXQgdGhpcy5nZXREZXRhaWxDdXN0b20oKTtcbiAgICAgICAgLy8gS2jDtG5nIG92ZXJyaWRlXG4gICAgICAgIGlmIChyZXN1bHRDaGVjayA9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzRm9ybUFkZE5ldygpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vbkJlZm9yZUdldERldGFpbCgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNydWRGb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3J1ZEZvcm0uc2V0SXNMb2FkZWREYXRhRWRpdChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRPYmplY3REZXRhaWwoKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm1vZGlmeURldGFpbERhdGEocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Byb2Nlc3NBZnRlckdldERhdGEocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vbkFmdGVyR2V0RGV0YWlsKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvZ1NldHRpbmcuaXNFbmFibGVMb2cpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dTZXR0aW5nLnZhbHVlQmVmb3JlVXBkYXRlID0gdGhpcy5fY29tbW9uU2VydmljZS5jbG9uZU9iamVjdChyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jcnVkRm9ybSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudERhdGEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGU6IHRoaXMuY3J1ZEZvcm0uX3Jvb3ROb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlOiBFdmVudFR5cGUuRk9STV9SRUFEWSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNydWRGb3JtOiB0aGlzLmNydWRGb3JtXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmluaXREYXRhQWRkKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0RGVmYXVsdFNldHRpbmdGaWxlQ29udHJvbChldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3J1ZEZvcm0uaW5pdENvbnRyb2xEZWZhdWx0VmFsdWVGcm9tRXh0ZXJuYWwoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5maXJlTW9kZWxDaGFuZ2VkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE92ZXJyaWRlIGPDoWNoIGzhuqV5IGThu68gbGnhu4d1IGdldERldGFpbFxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHRDaGVjay5zdWNjZXNzICYmIHJlc3VsdENoZWNrLmRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubW9kZWwuZm9ybVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZm9ybVN0YXRlID0gRm9ybVN0YXRlLkVESVQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNydWRGb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3J1ZEZvcm0uc2V0SXNMb2FkZWREYXRhRWRpdChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubW9kaWZ5RGV0YWlsRGF0YShyZXN1bHRDaGVjay5kYXRhKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9wcm9jZXNzQWZ0ZXJHZXREYXRhKHJlc3VsdENoZWNrLmRhdGEpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub25BZnRlckdldERldGFpbChyZXN1bHRDaGVjay5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZm9ybVN0YXRlID0gRm9ybVN0YXRlLkFERDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jcnVkRm9ybSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudERhdGEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGU6IHRoaXMuY3J1ZEZvcm0uX3Jvb3ROb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlOiAnZm9ybVJlYWR5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNydWRGb3JtOiB0aGlzLmNydWRGb3JtXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmluaXREYXRhQWRkKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0RGVmYXVsdFNldHRpbmdGaWxlQ29udHJvbChldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3J1ZEZvcm0uaW5pdENvbnRyb2xEZWZhdWx0VmFsdWVGcm9tRXh0ZXJuYWwoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5maXJlTW9kZWxDaGFuZ2VkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgaW5pdERhdGFBZGQoZXZ0OiBFdmVudERhdGEpIHsgfVxuXG4gICAgcHJpdmF0ZSBpbml0RGVmYXVsdFNldHRpbmdGaWxlQ29udHJvbChldnQ6IEV2ZW50RGF0YSkge1xuICAgICAgICBpZiAoIWV2dC5yb290TW9kZWwuaWQgJiYgdGhpcy5zZXR0aW5nLnNjaGVtYS5zb21lKHAgPT4gKHAgaW5zdGFuY2VvZiBGaWxlTWFuYWdlckNvbnRyb2xTY2hlbWEpKSkge1xuICAgICAgICAgICAgZXZ0LnJvb3RNb2RlbC5pZCA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGjhuqNpIGfhu41pIGjDoG0gbsOgeSBraGkgb3ZlcnJpZGUgZ2V0RGV0YWlsXG4gICAgICovXG4gICAgYXN5bmMgX3Byb2Nlc3NBZnRlckdldERhdGEoZGF0YSkge1xuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIGRhdGEgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIER1eeG7h3QgY8OhYyBjb250cm9sIGRhdGV0aW1lIMSR4buDIGNvbnZlcnQgdmFsdWUgc2FuZyBkYXRldGltZVxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnNjaGVtYS5mb3JFYWNoKHNjaGVtYSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXhEYXRlVmFsdWUoc2NoZW1hLCBkYXRhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEuX19kaXNhYmxlRWRpdCA9IHRoaXMubW9kZWwuZGF0YS5fX2Rpc2FibGVFZGl0O1xuXG4gICAgICAgIC8vIFNldCBiYXNlUGVybWlzc2lvbiB04burIGNydWRsaXN0XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmRhdGEuYmFzZVBlcm1pc3Npb24gJiYgdGhpcy5tb2RlbC5kYXRhLmJhc2VQZXJtaXNzaW9uID09PSBQZXJtaXNzaW9uQmFzZS5GVUxMKSB7XG4gICAgICAgICAgICBkYXRhLmJhc2VQZXJtaXNzaW9uID0gdGhpcy5tb2RlbC5kYXRhLmJhc2VQZXJtaXNzaW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tb2RlbC5kYXRhID0gZGF0YTtcbiAgICAgICAgaWYgKGRhdGEucGlkICYmIGRhdGEucGlkICE9IHRoaXMuZ3VpZEVtcHR5ICYmIGRhdGEuYmFzZVBlcm1pc3Npb25CeVBpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrUGVybWlzc2lvbihkYXRhLmJhc2VQZXJtaXNzaW9uQnlQaWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGVja1Blcm1pc3Npb24oZGF0YS5iYXNlUGVybWlzc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZm9yY2VPbmx5Vmlldykge1xuICAgICAgICAgICAgdGhpcy5fX2lzRm9ybVZpZXcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuVklFVztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNydWRGb3JtKSB7XG4gICAgICAgICAgICB0aGlzLmNydWRGb3JtLnN3aXRjaFZpZXdNb2RlKHRoaXMuX19pc0Zvcm1WaWV3KTtcbiAgICAgICAgICAgIHRoaXMuY3J1ZEZvcm0uc3dpdGNoRm9ybVN0YXRlRm9yVXNlcnBpY2tlcih0aGlzLl9pc0Zvcm1BZGROZXcoKSk7XG4gICAgICAgICAgICB0aGlzLmNydWRGb3JtLmRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5zZXRJc0xvYWRlZERhdGFFZGl0KHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZVxuICAgICAgICAgICAgJiYgdGhpcy5oYXZlRW50aXR5TWV0YWRhdGFBUEkgLy8gc2V0dGluZyDEkeG7gyBmaXggbOG7l2kgayBsb2FkIGRjIGVudGl0eSBtZXRhZGF0YSBjaG8gY8ahIGPhuqV1IHThu5UgY2jhu6ljIHNlcnZpY2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UubG9hZCh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UsIHRoaXMuY29udGV4dCwgdHJ1ZSk7IC8vIGZvcmNlIGxvYWQgxJHhu4MgxJHhu41jIHThu6sgY3NkbFxuICAgICAgICAgICAgY29uc3QgZW5hYmxlVmVyc2lvbiA9IHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5nZXRCeUNvZGUoJ2VuYWJsZVZlcnNpb24nKTtcbiAgICAgICAgICAgIGlmIChlbmFibGVWZXJzaW9uID09ICcxJykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5maWx0ZXJDaGVja0V4aXN0QnlWZXJzaW9uID0gW1xuICAgICAgICAgICAgICAgICAgICBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiAnY29kZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3Iubm90RXF1YWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkodGhpcy5tb2RlbC5kYXRhLmNvZGUpXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGlzYWJsZUJ1aWxkSW5GaWVsZCgpO1xuICAgICAgICBpZiAodGhpcy5sb2dTZXR0aW5nLmlzRW5hYmxlTG9nKSB7XG4gICAgICAgICAgICB0aGlzLmdldExvZ1ZhbHVlQWZ0ZXJMb2FkRGV0YWlsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRMb2dWYWx1ZUFmdGVyTG9hZERldGFpbCgpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2xOYW1lIG9mIE9iamVjdC5rZXlzKHRoaXMuZm9ybUNvbnRyb2xzKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNydWRGb3JtLmZvcm1Db250cm9sc1tjb250cm9sTmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xOYW1lLmluY2x1ZGVzKCcuJykgfHwgdGhpcy5jcnVkRm9ybS5mb3JtQ29udHJvbHNbY29udHJvbE5hbWVdPy5oaWRkZW4gPT09IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfHwgIShjb250cm9sIGluc3RhbmNlb2YgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHRoaXMubG9nU2V0dGluZy5hcnJWYWx1ZUFmdGVyVXBkYXRlLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIG5ldyBMb2dDb2x1bW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbnRyb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29udHJvbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlQmVmb3JlOiBjb250cm9sLl9jb21wb25lbnQuZGF0YVNvdXJjZS5tYXAocCA9PiBwLmxhYmVsKS5qb2luKCcsICcpIHx8IHRoaXMubG9nU2V0dGluZy5lbXB0eVZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUFmdGVyOiAnJ1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDIwMDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZml4RGF0ZVZhbHVlKGNvbnRyb2wsIHBhcmVudE1vZGVsLCBwYXJlbnRQYXRoPykge1xuICAgICAgICBsZXQgX3BhcmVudFBhdGggPSBjb250cm9sLmZpZWxkO1xuICAgICAgICBpZiAocGFyZW50UGF0aCAhPSBudWxsKSBfcGFyZW50UGF0aCA9IHBhcmVudFBhdGggKyAnLicgKyBfcGFyZW50UGF0aDtcblxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFRhYmxlU2NoZW1hKSB7XG4gICAgICAgICAgICBpZiAoIXBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdIHx8ICEocGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzdWJDb250cm9sIG9mIGNvbnRyb2wucm93VGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXhEYXRlVmFsdWUoc3ViQ29udHJvbCwgaXRlbSwgX3BhcmVudFBhdGggKyAnWycgKyBpICsgJ10nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBDb250YWluZXJTY2hlbWEpIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSA9PSBudWxsIHx8ICFpc0xpdGVyYWxPYmplY3QocGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0pKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBzdWJDb250cm9sIG9mIGNvbnRyb2wuY29udHJvbHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpeERhdGVWYWx1ZShzdWJDb250cm9sLCBwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSwgX3BhcmVudFBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBEYXRlVGltZUNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY29udHJvbC50aW1lT25seSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKFN0cmluZyhwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWREYXRlKGRhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gPSBkYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gPSB0aGlzLl9jb21tb25TZXJ2aWNlLmdldFRpbWUocGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkaXNhYmxlQnVpbGRJbkZpZWxkKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2lzRm9ybUFkZE5ldygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlbC5kYXRhLmlzQnVpbGRJbkFsbCAmJiAhdGhpcy5fdXNlclNlcnZpY2UuaXNTdXBlclVzZXIoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5zY2hlbWEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfYWRkUmVxdWlyZWRWYWxpZGF0b3Ioc2NoZW1hOiBGb3JtQ29udHJvbEJhc2UpIHtcbiAgICAgICAgbGV0IGV4aXN0ID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIHNjaGVtYS52YWxpZGF0b3JzKSB7XG4gICAgICAgICAgICBpZiAodmFsaWRhdG9yIGluc3RhbmNlb2YgUmVxdWlyZWRWYWxpZGF0b3IpIHtcbiAgICAgICAgICAgICAgICBleGlzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFleGlzdCkge1xuICAgICAgICAgICAgc2NoZW1hLnZhbGlkYXRvcnMucHVzaChuZXcgUmVxdWlyZWRWYWxpZGF0b3IoKSk7XG4gICAgICAgIH1cbiAgICAgICAgc2NoZW1hLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBfcmVtb3ZlUmVxdWlyZWRWYWxpZGF0b3Ioc2NoZW1hOiBGb3JtQ29udHJvbEJhc2UpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiBzY2hlbWEudmFsaWRhdG9ycykge1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRvciBpbnN0YW5jZW9mIFJlcXVpcmVkVmFsaWRhdG9yKSB7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaCh2YWxpZGF0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNjaGVtYS52YWxpZGF0b3JzID0gdmFsaWRhdG9ycztcbiAgICAgICAgc2NoZW1hLnJlcXVpcmVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgX3NldE1vZGVsVmFsdWUoZmllbGQ6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcnVkRm9ybS5fcm9vdE5vZGUuZ2V0Tm9kZUJ5UGF0aChmaWVsZCk7XG4gICAgICAgIHRoaXMuX3NldE1vZGVsVmFsdWVCeU5vZGUobm9kZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIF9zZXRNb2RlbFZhbHVlQnlOb2RlKG5vZGU6IENvbnRyb2xUcmVlTm9kZSwgdmFsdWU6IGFueSkge1xuICAgICAgICBub2RlLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5jcnVkRm9ybS5maXJlTW9kZWxDaGFuZ2VkKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgbW9kaWZ5RGV0YWlsRGF0YShkYXRhKSB7XG4gICAgfVxuXG4gICAgX3RyaWdnZXJTYXZlKCkge1xuICAgICAgICB0aGlzLnNhdmUoKTtcbiAgICB9XG5cbiAgICBhc3luYyBvbkFmdGVyR2V0TG9nVmFsdWUoKSB7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTaW5nbGVMYWJlbChjb250cm9sLCBkYXRhU291cmNlLCB2YWx1ZVBhcmFtKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBkYXRhU291cmNlLmZpbmQocCA9PiBwPy52YWx1ZVtjb250cm9sLnZhbHVlRmllbGRdID09IHZhbHVlUGFyYW0pO1xuICAgICAgICBpZiAoISFyZXN1bHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZ1bmNHZXRMYWJlbCA9IGNvbnRyb2wuZnVuY0dldExhYmVsO1xuICAgICAgICAgICAgaWYgKGZ1bmNHZXRMYWJlbCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmNHZXRMYWJlbChyZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Py5sYWJlbCA/PyByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmxvZ1NldHRpbmcuZW1wdHlWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBwcml2YXRlIGdldE11bHRpcGxlTGFiZWwoY29udHJvbCwgZGF0YVNvdXJjZSwgdmFsdWVQYXJhbSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHZhbHVlUGFyYW0uc29tZShwID0+IHAgPT0gTnVtYmVyKHApKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlUGFyYW0gPSB2YWx1ZVBhcmFtLm1hcChwID0+IE51bWJlcihwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggeyB9XG4gICAgICAgIGxldCByZXN1bHQgPSBkYXRhU291cmNlXG4gICAgICAgICAgICAuZmlsdGVyKHAgPT4gdmFsdWVQYXJhbS5pbmNsdWRlcyhwLnZhbHVlW2NvbnRyb2wudmFsdWVGaWVsZF0pKVxuICAgICAgICAgICAgLm1hcChwID0+IGNvbnRyb2wuZnVuY0dldExhYmVsKHAudmFsdWUpKVxuICAgICAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmxvZ1NldHRpbmcuZW1wdHlWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGFkZFNpbmdsZVByb3BlcnR5TG9nKGNvbnRyb2wsIG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvZ0NvbHVtbiA9IHRoaXMubG9nU2V0dGluZy5hcnJWYWx1ZUFmdGVyVXBkYXRlLmZpbmQocCA9PiBwLmZpZWxkID09IGNvbnRyb2wuZmllbGQpO1xuICAgICAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBjb250cm9sLl9jb21wb25lbnQuc2VsZWN0ZWRWYWx1ZU9iamVjdDtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhU291cmNlKSkgZGF0YVNvdXJjZSA9IFtkYXRhU291cmNlXTtcbiAgICAgICAgICAgIGxvZ0NvbHVtbi52YWx1ZUFmdGVyID0gdGhpcy5nZXRTaW5nbGVMYWJlbChjb250cm9sLCBkYXRhU291cmNlLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICBsb2dDb2x1bW4udmlzaWJsZSA9IGxvZ0NvbHVtbi52YWx1ZUJlZm9yZSAhPT0gbG9nQ29sdW1uLnZhbHVlQWZ0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhU291cmNlID0gY29udHJvbC5fY29tcG9uZW50LmRhdGFTb3VyY2VJbnRlcm5hbDtcbiAgICAgICAgICAgIHRoaXMubG9nU2V0dGluZy5hcnJWYWx1ZUFmdGVyVXBkYXRlLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IExvZ0NvbHVtbih7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb250cm9sLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29udHJvbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVCZWZvcmU6IHRoaXMuZ2V0U2luZ2xlTGFiZWwoY29udHJvbCwgZGF0YVNvdXJjZSwgb2xkVmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUFmdGVyOiB0aGlzLmdldFNpbmdsZUxhYmVsKGNvbnRyb2wsIGRhdGFTb3VyY2UsIG5ld1ZhbHVlKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZE11bHRpcGxlUHJvcGVydHlMb2coY29udHJvbCwgb2xkVmFsdWUsIG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSkge1xuICAgICAgICAgICAgY29uc3QgbG9nQ29sdW1uID0gdGhpcy5sb2dTZXR0aW5nLmFyclZhbHVlQWZ0ZXJVcGRhdGUuZmluZChwID0+IHAuZmllbGQgPT0gY29udHJvbC5maWVsZCk7XG4gICAgICAgICAgICBsb2dDb2x1bW4udmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICBsb2dDb2x1bW4udmFsdWVBZnRlciA9IHRoaXMuZ2V0TXVsdGlwbGVMYWJlbChjb250cm9sLCBjb250cm9sLl9jb21wb25lbnQuc2VsZWN0ZWRWYWx1ZU9iamVjdCwgbmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGNvbnRyb2wuX2NvbXBvbmVudC5kYXRhU291cmNlSW50ZXJuYWw7XG4gICAgICAgICAgICB0aGlzLmxvZ1NldHRpbmcuYXJyVmFsdWVBZnRlclVwZGF0ZS5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBMb2dDb2x1bW4oe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29udHJvbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGNvbnRyb2wubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlQmVmb3JlOiB0aGlzLmdldE11bHRpcGxlTGFiZWwoY29udHJvbCwgZGF0YVNvdXJjZSwgb2xkVmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUFmdGVyOiB0aGlzLmdldE11bHRpcGxlTGFiZWwoY29udHJvbCwgZGF0YVNvdXJjZSwgbmV3VmFsdWUpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0TG9nVmFsdWVEZWZhdWx0KGNvbnRyb2wsIG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICAgICAgICBjb25zdCBpc051bGxPbGRWYWx1ZSA9IHRoaXMuaXNOdWxsT3JFbXB0eShvbGRWYWx1ZSk7XG4gICAgICAgIGNvbnN0IGlzTnVsbE5ld1ZhbHVlID0gdGhpcy5pc051bGxPckVtcHR5KG5ld1ZhbHVlKTtcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBEYXRlVGltZUNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IGNvbnRyb2wuc2hvd1RpbWUgPyAnSEg6bW0gZGQvTU0veXl5eScgOiAnZGQvTU0veXl5eSc7XG4gICAgICAgICAgICBvbGRWYWx1ZSA9IGlzTnVsbE9sZFZhbHVlID8gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWUgOiB0aGlzLl9kYXRlUGlwZS50cmFuc2Zvcm0ob2xkVmFsdWUsIGZvcm1hdCk7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IGlzTnVsbE5ld1ZhbHVlID8gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWUgOiB0aGlzLl9kYXRlUGlwZS50cmFuc2Zvcm0obmV3VmFsdWUsIGZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIE1hc2tDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICBvbGRWYWx1ZSA9IGlzTnVsbE9sZFZhbHVlID8gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWUgOiB0aGlzLl9udW1iZXJQaXBlLnRyYW5zZm9ybShvbGRWYWx1ZSwgJycsICd2aS1WTicpO1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBpc051bGxOZXdWYWx1ZSA/IHRoaXMubG9nU2V0dGluZy5lbXB0eVZhbHVlIDogdGhpcy5fbnVtYmVyUGlwZS50cmFuc2Zvcm0obmV3VmFsdWUsICcnLCAndmktVk4nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgQ2hlY2tib3hDb250cm9sU2NoZW1hIHx8IGNvbnRyb2wgaW5zdGFuY2VvZiBTd2l0Y2hDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICBvbGRWYWx1ZSA9IGlzTnVsbE9sZFZhbHVlID8gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWUgOiBEYXRhU291cmNlQm9vbGVhbi5maW5kKHAgPT4gcC5pZCA9PSBvbGRWYWx1ZSk/LnRlbjtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gaXNOdWxsTmV3VmFsdWUgPyB0aGlzLmxvZ1NldHRpbmcuZW1wdHlWYWx1ZSA6IERhdGFTb3VyY2VCb29sZWFuLmZpbmQocCA9PiBwLmlkID09IG5ld1ZhbHVlKT8udGVuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbb2xkVmFsdWUsIG5ld1ZhbHVlXTtcbiAgICB9XG5cbiAgICBnZXRMb2dWYWx1ZSgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lTW9kZWwgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmNsb25lT2JqZWN0KHRoaXMubW9kZWwuZGF0YSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2xOYW1lIG9mIE9iamVjdC5rZXlzKHRoaXMuZm9ybUNvbnRyb2xzKSkge1xuICAgICAgICAgICAgICAgIGlmIChjb250cm9sTmFtZS5pbmNsdWRlcygnLicpIHx8IHRoaXMuY3J1ZEZvcm0uZm9ybUNvbnRyb2xzW2NvbnRyb2xOYW1lXT8uaGlkZGVuID09PSB0cnVlKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtQ29udHJvbHNbY29udHJvbE5hbWVdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5sb2dTZXR0aW5nLnZhbHVlQmVmb3JlVXBkYXRlW2NvbnRyb2wuZmllbGRdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gY2xvbmVNb2RlbFtjb250cm9sLmZpZWxkXTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc011bHRpcGxlID0gQXJyYXkuaXNBcnJheShvbGRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCghdGhpcy5pc051bGxPckVtcHR5KG9sZFZhbHVlKSB8fCAhdGhpcy5pc051bGxPckVtcHR5KG5ld1ZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgJiYgIShjb250cm9sIGluc3RhbmNlb2YgRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFRhYmxlU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkob2xkVmFsdWUpICE9IEpTT04uc3RyaW5naWZ5KG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nU2V0dGluZy5hcnJWYWx1ZUFmdGVyVXBkYXRlLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMb2dDb2x1bW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbnRyb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29udHJvbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1Mb2dUeXBlOiBFbnVtTG9nVHlwZS5UYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIERyb3Bkb3duQ29udHJvbFNjaGVtYSB8fCBjb250cm9sIGluc3RhbmNlb2YgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc011bHRpcGxlICYmIG9sZFZhbHVlICE9IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRTaW5nbGVQcm9wZXJ0eUxvZyhjb250cm9sLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNNdWx0aXBsZSAmJiAhdGhpcy5fY29tbW9uU2VydmljZS5pc1NhbWVBcnJheShvbGRWYWx1ZSwgbmV3VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRNdWx0aXBsZVByb3BlcnR5TG9nKGNvbnRyb2wsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYXJlVmFsdWVzRXF1YWwobmV3VmFsdWUsIG9sZFZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFt2YWx1ZUJlZm9yZSwgdmFsdWVBZnRlcl0gPSB0aGlzLmdldExvZ1ZhbHVlRGVmYXVsdChjb250cm9sLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nU2V0dGluZy5hcnJWYWx1ZUFmdGVyVXBkYXRlLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMb2dDb2x1bW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbnRyb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29udHJvbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlQmVmb3JlOiB2YWx1ZUJlZm9yZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlQWZ0ZXI6IHZhbHVlQWZ0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtTG9nVHlwZTogKGNvbnRyb2wgaW5zdGFuY2VvZiBFZGl0b3JDb250cm9sU2NoZW1hIHx8IGNvbnRyb2wgaW5zdGFuY2VvZiBUZXh0QXJlYUNvbnRyb2xTY2hlbWEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBFbnVtTG9nVHlwZS5UYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogRW51bUxvZ1R5cGUuTm9ybWFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJy0tLS1sb2cgZGF0YSBmYWlsLS0tLScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXJlVmFsdWVzRXF1YWwodmFsdWUxOiBhbnksIHZhbHVlMjogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh2YWx1ZTEgPT09IHZhbHVlMikgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlMSkgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcmVBcnJheXNFcXVhbCh2YWx1ZTEsIHZhbHVlMik7IC8vIFNvIHPDoW5oIGFycmF5XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZTEgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZTIgPT09ICdvYmplY3QnICYmIHZhbHVlMSAhPT0gbnVsbCAmJiB2YWx1ZTIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFyZU9iamVjdHNFcXVhbCh2YWx1ZTEsIHZhbHVlMik7IC8vIFNvIHPDoW5oIG9iamVjdHNcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgYXJlQXJyYXlzRXF1YWwoYXJyMTogYW55W10sIGFycjI6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChhcnIxLmxlbmd0aCAhPT0gYXJyMi5sZW5ndGgpIHJldHVybiBmYWxzZTsgLy8gS2jDoWMgxJHhu5kgZMOgaVxuICAgICAgICByZXR1cm4gYXJyMS5ldmVyeSgoaXRlbSwgaW5kZXgpID0+IHRoaXMuYXJlVmFsdWVzRXF1YWwoaXRlbSwgYXJyMltpbmRleF0pKTsgLy8gU28gc8OhbmggdHLDqm4gdOG7q25nIHBo4bqnbiB04butIGPhu6dhIGFycmF5XG4gICAgfVxuXG4gICAgYXJlT2JqZWN0c0VxdWFsKG9iajE6IGFueSwgb2JqMjogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGtleXMxID0gT2JqZWN0LmtleXMob2JqMSk7XG4gICAgICAgIGNvbnN0IGtleXMyID0gT2JqZWN0LmtleXMob2JqMik7XG4gICAgICAgIGlmIChrZXlzMS5sZW5ndGggIT09IGtleXMyLmxlbmd0aCkgcmV0dXJuIGZhbHNlOyAvLyBLaMOhYyDEkeG7mSBkw6BpXG4gICAgICAgIHJldHVybiBrZXlzMS5ldmVyeShrZXkgPT5cbiAgICAgICAgICAgIG9iajIuaGFzT3duUHJvcGVydHkoa2V5KSAmJlxuICAgICAgICAgICAgdGhpcy5hcmVWYWx1ZXNFcXVhbChvYmoxW2tleV0sIG9iajJba2V5XSkgIC8vIFNvIHPDoW5oIHRyw6puIHThu6tuZyBwaOG6p24gdOG7rSBj4bunYSBvYmplY3RcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGlzTnVsbE9yRW1wdHkoaW5wdXQ6IGFueSkge1xuICAgICAgICBpZiAoaW5wdXQgIT09IHVuZGVmaW5lZCAmJiBpbnB1dCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0Lmxlbmd0aCA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbnB1dC50b1N0cmluZygpLnRyaW0oKSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHByaXZhdGUgYXN5bmMgc2F2ZSgpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkID0gYXdhaXQgdGhpcy52YWxpZGF0ZUZvcm1CYXNlKCk7XG4gICAgICAgIGlmICh2YWxpZGF0ZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxvZ1NldHRpbmcuaXNFbmFibGVMb2cpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubG9nU2V0dGluZy5pc0N1c3RvbUFsbCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmdldExvZ1ZhbHVlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGPhuqV1IGjDrG5oIHRow6ptXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vbkFmdGVyR2V0TG9nVmFsdWUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGEubG9nTWV0YURhdGEgPSB0aGlzLmxvZ1NldHRpbmcuYXJyVmFsdWVBZnRlclVwZGF0ZS5maWx0ZXIocCA9PiBwLnZpc2libGUpLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KHRoaXMubG9nU2V0dGluZy5hcnJWYWx1ZUFmdGVyVXBkYXRlLmZpbHRlcihwID0+IHAudmlzaWJsZSkpXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMub25CZWZvcmVTYXZlKCk7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJTYXZlRmlsZVVwbG9hZCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuYXV0b1NhdmUpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNGb3JtRWRpdCgpIHx8IHRoaXMuX2lzRm9ybVZpZXcoKSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uVXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX2lzRm9ybUFkZE5ldygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub25JbnNlcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZvcm0gdmlldywgZG8gbm90aGluZ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlTWFudWFsU2F2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVNYW51YWxTYXZlKCkge1xuXG4gICAgfVxuXG4gICAgdHJpZ2dlclNhdmVGaWxlVXBsb2FkKCkge1xuICAgICAgICB0aGlzLnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuQ09NTU9OLlNBVkVfRklMRV9JTl9GT1JNKTtcbiAgICB9XG5cbiAgICBhc3luYyBfZ2V0UmVzdWx0VmFsaWRhdGUoKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnZhbGlkYXRlRm9ybUJhc2UoKTtcbiAgICB9XG5cbiAgICBhc3luYyB2YWxpZGF0ZUZvcm0ocmVzdWx0VmFsaWRhdGVCYXNlOiBib29sZWFuKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVGb3JtQmFzZSgpIHtcbiAgICAgICAgbGV0IHJlc3VsdFZhbGlkYXRlQmFzZSA9IHRydWU7XG4gICAgICAgIC8vIEPDsyB0aOG7gyBjw7MgZm9ybSBrIGPDsyBjcnVkLWZvcm0gKFbDrCBsw6AgZm9ybSBtYXN0ZXIgY+G7p2EgY8OhYyBmb3JtIGNvbilcbiAgICAgICAgaWYgKHRoaXMuY3J1ZEZvcm0pIHtcbiAgICAgICAgICAgIHJlc3VsdFZhbGlkYXRlQmFzZSA9IGF3YWl0IHRoaXMuY3J1ZEZvcm0udmFsaWRhdGVGb3JtKHRoaXMuc2V0VmFsaWRhdGVGb3JtKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHRWYWxpZGF0ZSA9IGF3YWl0IHRoaXMudmFsaWRhdGVGb3JtKHJlc3VsdFZhbGlkYXRlQmFzZSk7XG4gICAgICAgIC8vIELhu48gY2hlY2sgdmFsaWQgZm9ybSBjw7RuZyB2aeG7h2MuIG7hur91IG5oxrAgZm9ybSBjw7RuZyB2aeG7h2Mga2jDtG5nIHZhbGlkIHRow6wga2jDtG5nIHThu7EgxJHhu5luZyB04bqhbyBjw7RuZyB2aeG7h2NcbiAgICAgICAgLy8gaWYgKHRoaXMuZHluYW1pY0NvbnRyb2xbRmllbGREZWZpbmVJc1Rhc2tGb3JtQ29udHJvbF1cbiAgICAgICAgLy8gICAgICYmIHRoaXMuZHluYW1pY0NvbnRyb2xbRmllbGREZWZpbmVJc1Rhc2tGb3JtQ29udHJvbF0uX2NvbXBvbmVudFxuICAgICAgICAvLyApIHtcbiAgICAgICAgLy8gICAgIGNvbnN0IHRhc2tGb3JtID0gdGhpcy5keW5hbWljQ29udHJvbFtGaWVsZERlZmluZUlzVGFza0Zvcm1Db250cm9sXS5fY29tcG9uZW50O1xuICAgICAgICAvLyAgICAgY29uc3QgcmVzdWx0VmFsaWRhdGVGb3JtVGFzayA9IGF3YWl0IHRhc2tGb3JtLl9nZXRSZXN1bHRWYWxpZGF0ZSgpO1xuICAgICAgICAvLyAgICAgcmVzdWx0VmFsaWRhdGUgPSByZXN1bHRWYWxpZGF0ZUZvcm1UYXNrICYmIHJlc3VsdFZhbGlkYXRlO1xuICAgICAgICAvLyB9XG4gICAgICAgIHJldHVybiByZXN1bHRWYWxpZGF0ZSAmJiByZXN1bHRWYWxpZGF0ZUJhc2U7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlRm9ybUNvbnRyb2woZmllbGRQYXRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNydWRGb3JtLnZhbGlkYXRlRm9ybUNvbnRyb2woZmllbGRQYXRoKTtcbiAgICB9XG5cbiAgICBfY2xlYW5Gb3JtKCkge1xuICAgICAgICB0aGlzLmNydWRGb3JtLmNsZWFuKCk7XG4gICAgfVxuXG4gICAgX3RyaWdnZXJDb250cm9sQ2hhbmdlKGZpZWxkUGF0aCkge1xuICAgICAgICB0aGlzLmNydWRGb3JtLnRyaWdnZXJDaGFuZ2UoZmllbGRQYXRoKTtcbiAgICB9XG5cbiAgICBvbkJlZm9yZVNhdmUoKTogdm9pZCB8IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIH1cblxuICAgIG9uQWZ0ZXJTYXZlKHJlc3BvbnNlOiBSZXNwb25zZVJlc3VsdCk6IHZvaWQgfCBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB9XG5cblxuICAgIGFzeW5jIG9uQWZ0ZXJHZXREZXRhaWwoZGF0YT86IGFueVtdKSB7XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIG9uSW5zZXJ0KCkge1xuICAgICAgICB0aGlzLnNldERlZmF1bHRWYWx1ZSh0aGlzLm1vZGVsLmRhdGEpO1xuICAgICAgICBpZiAodGhpcy5keW5hbWljQ29udHJvbFtGaWVsZERlZmluZUlzVGFza0Zvcm1Db250cm9sXVxuICAgICAgICAgICAgJiYgdGhpcy5keW5hbWljQ29udHJvbFtGaWVsZERlZmluZUlzVGFza0Zvcm1Db250cm9sXS5fY29tcG9uZW50XG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgdGFza0Zvcm0gPSB0aGlzLmR5bmFtaWNDb250cm9sW0ZpZWxkRGVmaW5lSXNUYXNrRm9ybUNvbnRyb2xdLl9jb21wb25lbnQ7XG4gICAgICAgICAgICBjb25zdCByZXN1bHRWYWxpZGF0ZUZvcm1UYXNrID0gYXdhaXQgdGFza0Zvcm0uX2dldFJlc3VsdFZhbGlkYXRlKCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0VmFsaWRhdGVGb3JtVGFzaykge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YS5pdGVtQ29uZ1ZpZWMgPSB0YXNrRm9ybS5tb2RlbC5kYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmRhdGEuY3JlYXRlVGFza0luc3RlYWQpIHtcbiAgICAgICAgICAgIC8vIHJlc2V0IGZpZWxkIF9Xb3JrZmxvd0NvZGUgxJHhu4MgYmFja2VuZCBraMO0bmcgY2jhuqF5IHF1eSB0csOsbmggYuG6o24gZ2hpXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGFbRmllbGRXb3JrZmxvd0NvZGVJbkNydWRGb3JtXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgdGhpcy5jcmVhdGVDb25maXJtSWZSZXF1aXJlKCk7XG4gICAgICAgIGlmICghY29uZmlybWVkKSByZXR1cm47XG4gICAgICAgIGF3YWl0IHRoaXMuX2luc2VydCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQ29uZmlybUlmUmVxdWlyZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMubWVzc2FnZUNvbmZpcm1TYXZlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dDb25maXJtKHRoaXMubWVzc2FnZUNvbmZpcm1TYXZlKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcyh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXModHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2luc2VydCgpIHtcbiAgICAgICAgdGhpcy5nZXRQcm9taXNlQWN0aW9uSW5zZXJ0KClcbiAgICAgICAgICAgIC50aGVuKGFzeW5jIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnN1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlQWZ0ZXJJbnNlcnQocmVzcG9uc2Uuc3VjY2VzcywgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YS5pZCA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub25BZnRlclNhdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2F2ZWQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogdGhpcy5tb2RlbC5kYXRhLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDbG9zZUZvcm06IHRoaXMuaXNDbG9zZUZvcm1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUluc2VydEVycm9yKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvci5lcnJvci5zdWNjZXNzICYmIGVycm9yLmVycm9yLmVycm9yQ2hlY2tFeGlzdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnN1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnN1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlQWZ0ZXJJbnNlcnQoZmFsc2UsIGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFByb21pc2VBY3Rpb25JbnNlcnQoKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnBvc3QodGhpcy5tb2RlbC5kYXRhLCB0aGlzLmluc2VydFBsdXNVcmwpO1xuICAgIH1cblxuICAgIGhhbmRsZUluc2VydEVycm9yKHJlc3BvbnNlPzogYW55KSB7XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIG9uVXBkYXRlKCkge1xuICAgICAgICB0aGlzLnNldERlZmF1bHRWYWx1ZSh0aGlzLm1vZGVsLmRhdGEpO1xuICAgICAgICB0aGlzLmdldFByb21pc2VBY3Rpb25VcGRhdGUoKVxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd01lc3NhZ2VBZnRlclVwZGF0ZShyZXNwb25zZS5zdWNjZXNzLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vbkFmdGVyU2F2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25TYXZlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLm1vZGVsLmRhdGEuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDbG9zZUZvcm06IHRoaXMuaXNDbG9zZUZvcm1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVVwZGF0ZUVycm9yKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvci5lcnJvci5zdWNjZXNzICYmIGVycm9yLmVycm9yLmVycm9yQ2hlY2tFeGlzdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnN1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnN1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlQWZ0ZXJVcGRhdGUoZmFsc2UsIGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmxvZ1NldHRpbmcuaXNFbmFibGVMb2cpIHtcbiAgICAgICAgICAgIHRoaXMubG9nU2V0dGluZy5hcnJWYWx1ZUFmdGVyVXBkYXRlID0gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVVcGRhdGVFcnJvcihyZXNwb25zZT86IGFueSkge1xuXG4gICAgfVxuXG4gICAgZ2V0UHJvbWlzZUFjdGlvblVwZGF0ZSgpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UucHV0KHRoaXMubW9kZWwuZGF0YS5pZC50b1N0cmluZygpLCB0aGlzLm1vZGVsLmRhdGEsIHRoaXMudXBkYXRlUGx1c1VybCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREZWZhdWx0VmFsdWUobW9kZWwpIHtcbiAgICAgICAgaWYgKG1vZGVsLmlzQnVpbGRJbiA9PT0gbnVsbCB8fCBtb2RlbC5pc0J1aWxkSW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbW9kZWwuaXNCdWlsZEluID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kZWwuaXNCdWlsZEluQWxsID09PSBudWxsIHx8IG1vZGVsLmlzQnVpbGRJbkFsbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBtb2RlbC5pc0J1aWxkSW5BbGwgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYXJlbnRTZXR0aW5nPy5lbmFibGVSZW9yZGVyUm93ICYmIHRoaXMucGFyZW50U2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnRGaWVsZCkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhW3RoaXMucGFyZW50U2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnRGaWVsZF0gPz89IHRoaXMucGFyZW50TW9kZWwudG90YWwgKyAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93TWVzc2FnZUFmdGVySW5zZXJ0KGlzU3VjY2VzczogYm9vbGVhbiA9IGZhbHNlLCBlcnJvcj86IGFueSkge1xuICAgICAgICBpZiAoaXNTdWNjZXNzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubWVzc2FnZUluc2VydFN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VJbnNlcnRTdWNjZXNzID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdNRVNTQUdFLklOU0VSVF9EQVRBX1NVQ0NFU1MnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1lc3NhZ2VJbnNlcnRTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKHRoaXMubWVzc2FnZUluc2VydFN1Y2Nlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVSZXNwb25zZUVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd01lc3NhZ2VBZnRlclVwZGF0ZShpc1N1Y2Nlc3M6IGJvb2xlYW4gPSBmYWxzZSwgZXJyb3I/OiBhbnkpIHtcbiAgICAgICAgaWYgKGlzU3VjY2Vzcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm1lc3NhZ2VVcGRhdGVTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlVXBkYXRlU3VjY2VzcyA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnTUVTU0FHRS5VUERBVEVfREFUQV9TVUNDRVNTJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5tZXNzYWdlVXBkYXRlU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2Vzcyh0aGlzLm1lc3NhZ2VVcGRhdGVTdWNjZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVzcG9uc2VFcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVSZXNwb25zZUVycm9yKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5tZXNzYWdlKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXJyb3IuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhlcnJvci5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0PDsyBs4buXaSB44bqjeSByYSwgbGnDqm4gaOG7hyBxdeG6o24gdHLhu4sgdmnDqm4gxJHhu4MgYmnhur90IHRow6ptIGNoaSB0aeG6v3QnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIG9uRm9ybUluaXRpYWxpemVkKGRhdGE6IEV2ZW50RGF0YSkge1xuXG4gICAgfVxuXG4gICAgX2hhbmRsZUFmdGVyVHJpbmhLeShldnQpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMubW9kZWwuZGF0YVtLZXlGbGFzaFNob3ddO1xuICAgICAgICB0aGlzLl9oYW5kbGVDYW5jZWwoZXZ0KTtcbiAgICB9XG5cbiAgICBfaGFuZGxlU2F2ZShldnQpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuc3VibWl0dGluZykgcmV0dXJuO1xuICAgICAgICB0aGlzLm1vZGVsLnN1Ym1pdHRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnNhdmUoKTtcbiAgICAgICAgdGhpcy5vblNhdmUuZW1pdChldnQpO1xuICAgIH1cblxuICAgIF9oYW5kbGVDYW5jZWwoZXZ0KSB7XG4gICAgICAgIHRoaXMub25DYW5jZWwuZW1pdChldnQpO1xuICAgIH1cblxuICAgIF9oYW5kbGVNZXNzYWdlKGV2dCkge1xuICAgICAgICB0aGlzLm9uTWVzc2FnZS5lbWl0KGV2dCk7XG4gICAgfVxuXG4gICAgX3NldERpc2FibGVDb250cm9sKHVuaXF1ZUZpZWxkLCBpc0Rpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuY3J1ZEZvcm0uZm9ybUNvbnRyb2xzW3VuaXF1ZUZpZWxkXS5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgX3NldEhpZGRlbkNvbnRyb2wodW5pcXVlRmllbGQsIGlzSGlkZGVuKSB7XG4gICAgICAgIHRoaXMuY3J1ZEZvcm0uZm9ybUNvbnRyb2xzW3VuaXF1ZUZpZWxkXS5oaWRkZW4gPSBpc0hpZGRlbjtcbiAgICB9XG5cbiAgICBfZ2V0Rm9ybVN0YXRlKCk6IEZvcm1TdGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmZvcm1TdGF0ZTtcbiAgICB9XG5cbiAgICBfaXNGb3JtQWRkTmV3KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Rm9ybVN0YXRlKCkgPT0gRm9ybVN0YXRlLkFERDtcbiAgICB9XG5cbiAgICBfaXNGb3JtRWRpdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEZvcm1TdGF0ZSgpID09IEZvcm1TdGF0ZS5FRElUO1xuICAgIH1cblxuICAgIF9pc0Zvcm1WaWV3KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Rm9ybVN0YXRlKCkgPT0gRm9ybVN0YXRlLlZJRVc7XG4gICAgfVxufVxuIl19
954
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1mb3JtLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY2xhc3Nlcy9iYXNlL2RhdGEtZm9ybS1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUVILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFFBQVEsRUFDUixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQW1CLGlCQUFpQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDekcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSw0QkFBNEIsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFDSCwrQkFBK0IsRUFDL0IscUJBQXFCLEVBQ3JCLGVBQWUsRUFDZixZQUFZLEVBQ1osZUFBZSxFQUNmLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLFNBQVMsRUFDVCxTQUFTLEVBQ1Qsd0JBQXdCLEVBRXhCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLHFCQUFxQixFQUNyQixXQUFXLEVBQ2QsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHakQsTUFBTSxPQUFnQixZQUFhLFNBQVEsdUJBQXVCO0lBMEQ5RCxZQUNJLFNBQW1CO1FBRW5CLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQXREWixVQUFLLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDekMsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFFOUIsV0FBTSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3BELFlBQU8sR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNyRCxhQUFRLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDdEQsY0FBUyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3ZELGdCQUFXLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDekQsaUJBQVksR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVwRSwwQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDdEIsZ0NBQTJCLEdBQUcsaUNBQWlDLENBQUM7UUFDeEUseUJBQW9CLEdBQUcsRUFBRSxDQUFDO1FBQzFCLHlCQUFvQixHQUFHLEVBQUUsQ0FBQztRQUMxQixZQUFPLEdBQW9CLElBQUksZUFBZSxFQUFFLENBQUM7UUFDakQsZUFBVSxHQUFlLElBQUksVUFBVSxFQUFFLENBQUM7UUFFMUMsT0FBRSxHQUFHLDBCQUEwQixDQUFDO1FBR2hDLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN0QixnQkFBVyxHQUFRLEVBQUUsQ0FBQztRQUd0QixrQkFBYSxHQUFHLElBQUksQ0FBQztRQUNyQixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBRW5CLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDeEIsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFDckIsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFDckIsbUJBQWMsR0FBUSxFQUFFLENBQUM7UUFDekIsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDdkIsMEJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ25CLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ2YsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFrQmpDLE1BQU0sbUJBQW1CLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDO1FBQy9ELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRTVELENBQUM7SUFFRCxRQUFRO1FBQ0osd0RBQXdEOztRQUV4RCxNQUFNLGNBQWMsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQzdDLE1BQU0sZUFBZSxHQUFHLE1BQUEsSUFBSSxDQUFDLFdBQVcsMENBQUUsZUFBZSxDQUFDO1FBQzFELElBQUksZUFBZSxFQUFFO1lBQ2pCLEtBQUssTUFBTSxHQUFHLElBQUksZUFBZSxFQUFFO2dCQUMvQixJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQzt1QkFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxTQUFTO3VCQUM5QixlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksU0FBUzt1QkFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUM1QzthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBQ0QsZUFBZTtJQUNmLENBQUM7SUFDRCxlQUFlLENBQUMsY0FBYztRQUMxQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFO2dCQUN4QyxJQUFJLGNBQWMsR0FBRyxjQUFjLENBQUMsSUFBSSxFQUFFO29CQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO2lCQUN6QztxQkFDSTtvQkFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO2lCQUN6QztnQkFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUU7b0JBQ2xFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7aUJBQ3pDO2FBQ0o7aUJBQ0k7Z0JBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDMUM7U0FDSjtJQUNMLENBQUM7SUFFRCxhQUFhO1FBQ1QsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRTtlQUM1QixJQUFJLENBQUMsS0FBSztlQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVU7ZUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO2VBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ25DO1lBQ0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNwQixJQUFJLG1CQUFtQixDQUFDO2dCQUNwQixLQUFLLEVBQUUsV0FBVztnQkFDbEIsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLE9BQU8sRUFBRSxDQUFDO2FBQ2IsQ0FBQyxDQUNMLENBQUM7WUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3BCLElBQUksbUJBQW1CLENBQUM7Z0JBQ3BCLEtBQUssRUFBRSxjQUFjO2dCQUNyQixLQUFLLEVBQUUsY0FBYztnQkFDckIsT0FBTyxFQUFFLENBQUM7YUFDYixDQUFDLENBQ0wsQ0FBQztTQUNMO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYTtlQUNmLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFDekI7WUFDRSxJQUFJLFVBQVUsR0FBRyxFQUFFLEVBQUUsWUFBWSxHQUFHLElBQUksRUFBRSxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQzlELE1BQU0sZ0JBQWdCLEdBQVEsRUFBRSxDQUFDO1lBQ2pDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUNyRztnQkFDRSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUM7Z0JBQzdELFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQztnQkFDbEUsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDNUYsZ0JBQWdCLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMscUJBQXFCLENBQUM7Z0JBQzlGLGdCQUFnQixDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUM7YUFDaEc7aUJBQ0ksSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRTtnQkFDeEMsV0FBVyxHQUFHLElBQUksQ0FBQzthQUN0QjtZQUNELElBQUksV0FBVyxFQUFFO2dCQUNiLElBQUksQ0FBQyxjQUFjLENBQUMsNEJBQTRCLENBQUMsR0FBRyxJQUFJLG1CQUFtQixDQUFDO29CQUN4RSxLQUFLLEVBQUUsNEJBQTRCO29CQUNuQyxPQUFPLEVBQUUsRUFBRTtvQkFDWCxTQUFTLEVBQUUsS0FBSztvQkFDaEIsS0FBSyxFQUFFLFlBQVk7b0JBQ25CLElBQUksRUFBRSxnQkFBZ0I7b0JBQ3RCLFdBQVcsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCO2lCQUN6RSxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNwQixJQUFJLHFCQUFxQixDQUFDO29CQUN0QixLQUFLLEVBQUUsMkJBQTJCO29CQUNsQyxLQUFLLEVBQUUsbUJBQW1CO29CQUMxQixVQUFVO29CQUNWLFlBQVk7b0JBQ1osVUFBVSxFQUFFLE1BQU07b0JBQ2xCLFlBQVksRUFBRSxPQUFPO29CQUNyQixPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsSUFBSSxFQUFFO29CQUNuQyxhQUFhLEVBQUUsS0FBSztvQkFDcEIsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsaUJBQWlCO29CQUNyRSxTQUFTLEVBQUUsQ0FBTyxHQUFjLEVBQUUsRUFBRSxnREFBQyxPQUFBLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxDQUFBLEdBQUE7b0JBQzdFLGVBQWUsRUFBRSxDQUFPLEdBQWMsRUFBRSxFQUFFLGdEQUFDLE9BQUEsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLENBQUEsR0FBQTtpQkFDdEYsQ0FBQyxDQUNMLENBQUM7Z0JBQ0YsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQjt1QkFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0IsRUFDakU7b0JBQ0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNwQixJQUFJLFdBQVcsQ0FBQzt3QkFDWixJQUFJLEVBQUUsV0FBVzt3QkFDakIsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUI7cUJBQ3pFLENBQUMsRUFDRixJQUFJLENBQUMsY0FBYyxDQUFDLDRCQUE0QixDQUFDLENBQ3BELENBQUM7aUJBQ0w7YUFDSjtTQUNKO0lBQ0wsQ0FBQztJQUVLLHdCQUF3QixDQUFDLEdBQWM7O1FBRTdDLENBQUM7S0FBQTtJQUVELHFCQUFxQixDQUFDLEdBQWMsRUFBRSxlQUFlO1FBQ2pELEdBQUcsQ0FBQyxZQUFZLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQztRQUNyRixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFO1lBQzdDLEdBQUcsQ0FBQyxTQUFTLENBQUMsMkJBQTJCLENBQUMsR0FBRyxlQUFlLENBQUMsWUFBWSxDQUFDO1NBQzdFO2FBQ0ksSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLDJCQUEyQixDQUFDLENBQUMsRUFBRTtZQUNqRyxHQUFHLENBQUMsU0FBUyxDQUFDLDJCQUEyQixDQUFDLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQztTQUM3RTtJQUNMLENBQUM7SUFFSyxnQkFBZ0IsQ0FBQyxTQUFvQjs7WUFDdkMsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUMsQ0FBQztLQUFBO0lBRWEsaUJBQWlCLENBQUMsU0FBb0I7O1lBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtnQkFDMUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQzthQUN2RTtZQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQztZQUMzQyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDbEIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNyQixTQUFTO2FBQ1osQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDN0IsQ0FBQztLQUFBO0lBRUQsaUJBQWlCO1FBQ2IsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNwQjthQUNJO1lBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsbUNBQW1DLEVBQUUsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2FBQ3BDO1NBQ0o7SUFDTCxDQUFDO0lBRUssaUJBQWlCOztRQUN2QixDQUFDO0tBQUE7SUFFSyxlQUFlOztZQUNqQixPQUFPLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNsSSxDQUFDO0tBQUE7SUFFSyxlQUFlOztZQUNqQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0tBQUE7SUFFYSxTQUFTOztZQUNuQixNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNqRCxpQkFBaUI7WUFDakIsSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFO2dCQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFO29CQUN2QixNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUMvQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7d0JBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDNUM7b0JBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQzlDLElBQUksUUFBUSxDQUFDLElBQUksRUFBRTt3QkFDZixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQzlDO29CQUNELE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDL0MsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMzQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFO3dCQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDdEY7aUJBQ0o7cUJBQ0k7b0JBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO3dCQUNmLE1BQU0sS0FBSyxHQUFHLElBQUksU0FBUyxDQUFDOzRCQUN4QixXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTOzRCQUNwQyxTQUFTLEVBQUUsU0FBUyxDQUFDLFVBQVU7NEJBQy9CLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTt5QkFDMUIsQ0FBQyxDQUFDO3dCQUNILE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDOUIsSUFBSSxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUMxQyxJQUFJLENBQUMsUUFBUSxDQUFDLG1DQUFtQyxFQUFFLENBQUM7d0JBQ3BELElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztxQkFDcEM7aUJBQ0o7YUFDSjtZQUNELHNDQUFzQztpQkFDakM7Z0JBQ0QsSUFBSSxXQUFXLENBQUMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUU7b0JBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRTt3QkFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztxQkFDekM7b0JBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO3dCQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQzVDO29CQUNELE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDOUMsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNsRCxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ2pEO3FCQUNJO29CQUNELElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUM7b0JBQ3JDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTt3QkFDZixNQUFNLEtBQUssR0FBRyxJQUFJLFNBQVMsQ0FBQzs0QkFDeEIsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUzs0QkFDcEMsU0FBUyxFQUFFLFdBQVc7NEJBQ3RCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTt5QkFDMUIsQ0FBQyxDQUFDO3dCQUNILE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDOUIsSUFBSSxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUMxQyxJQUFJLENBQUMsUUFBUSxDQUFDLG1DQUFtQyxFQUFFLENBQUM7d0JBQ3BELElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztxQkFDcEM7aUJBQ0o7YUFDSjtRQUNMLENBQUM7S0FBQTtJQUVLLFdBQVcsQ0FBQyxHQUFjOzhEQUFJLENBQUM7S0FBQTtJQUU3Qiw2QkFBNkIsQ0FBQyxHQUFjO1FBQ2hELElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSx3QkFBd0IsQ0FBQyxDQUFDLEVBQUU7WUFDN0YsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNqRDtJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNHLG9CQUFvQixDQUFDLElBQUk7O1lBQzNCLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1AsSUFBSSxHQUFHLEVBQUUsQ0FBQzthQUNiO2lCQUNJO2dCQUNELDREQUE0RDtnQkFDNUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDcEMsQ0FBQyxDQUFDLENBQUM7YUFDTjtZQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBRW5ELGlDQUFpQztZQUNqQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLEtBQUssY0FBYyxDQUFDLElBQUksRUFBRTtnQkFDMUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7YUFDeEQ7WUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDdkIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEtBQUssU0FBUyxFQUFFO2dCQUNsRixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2FBQ2xEO2lCQUNJO2dCQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQzdDO1lBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQzthQUN6QztZQUVELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDZixJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxRQUFRLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMzQztZQUVELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXO21CQUNyQixJQUFJLENBQUMscUJBQXFCLENBQUMsMEVBQTBFO2NBQzFHO2dCQUNFLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsNEJBQTRCO2dCQUNsSCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUM3RSxJQUFJLGFBQWEsSUFBSSxHQUFHLEVBQUU7b0JBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMseUJBQXlCLEdBQUc7d0JBQ3JDLElBQUksTUFBTSxDQUFDOzRCQUNQLEtBQUssRUFBRSxNQUFNOzRCQUNiLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTs0QkFDM0IsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO3lCQUM5QyxDQUFDO3FCQUNMLENBQUM7aUJBQ0w7YUFDSjtZQUVELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzNCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUU7Z0JBQzdCLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO2FBQ3JDO1FBQ0wsQ0FBQztLQUFBO0lBRUQsMEJBQTBCO1FBQ3RCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7O1lBQ1osS0FBSyxNQUFNLFdBQVcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDdEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3hELElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFBLE1BQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLDBDQUFFLE1BQU0sTUFBSyxJQUFJO3VCQUNsRixDQUFDLENBQUMsT0FBTyxZQUFZLCtCQUErQixDQUFDO29CQUFFLFNBQVM7Z0JBQ3ZFLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUNwQyxJQUFJLFNBQVMsQ0FBQztvQkFDVixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7b0JBQ3BCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztvQkFDcEIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVO29CQUNyRyxPQUFPLEVBQUUsS0FBSztvQkFDZCxVQUFVLEVBQUUsRUFBRTtpQkFDakIsQ0FBQyxDQUNMLENBQUM7YUFDTDtRQUNMLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFTyxZQUFZLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFXO1FBQ2xELElBQUksV0FBVyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDaEMsSUFBSSxVQUFVLElBQUksSUFBSTtZQUFFLFdBQVcsR0FBRyxVQUFVLEdBQUcsR0FBRyxHQUFHLFdBQVcsQ0FBQztRQUVyRSxJQUFJLE9BQU8sWUFBWSxXQUFXLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksS0FBSyxDQUFDLEVBQUU7Z0JBQy9FLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQ25DO1lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsS0FBSyxNQUFNLElBQUksSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUMzQyxLQUFLLE1BQU0sVUFBVSxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUU7b0JBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxXQUFXLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztpQkFDcEU7Z0JBQ0QsQ0FBQyxFQUFFLENBQUM7YUFDUDtTQUNKO2FBQ0ksSUFBSSxPQUFPLFlBQVksZUFBZSxFQUFFO1lBQ3pDLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUNwRixXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUNuQztZQUVELEtBQUssTUFBTSxVQUFVLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQzthQUMxRTtTQUNKO2FBQ0k7WUFDRCxJQUFJLE9BQU8sWUFBWSxxQkFBcUIsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLENBQUMsRUFBRTtvQkFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7d0JBQ25CLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDMUQsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7NEJBQ25CLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDO3lCQUNyQzs2QkFDSTs0QkFDRCxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQzt5QkFDckM7cUJBQ0o7eUJBQ0k7d0JBQ0QsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7cUJBQ3hGO2lCQUNKO2FBQ0o7U0FDSjtJQUNMLENBQUM7SUFFTyxtQkFBbUI7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUN2QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ2xFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3pCLENBQUMsQ0FBQyxDQUFDO2FBQ047U0FDSjtJQUNMLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxNQUF1QjtRQUN6QyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbEIsS0FBSyxNQUFNLFNBQVMsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFO1lBQ3ZDLElBQUksU0FBUyxZQUFZLGlCQUFpQixFQUFFO2dCQUN4QyxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUNiLE1BQU07YUFDVDtTQUNKO1FBQ0QsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNSLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUVELHdCQUF3QixDQUFDLE1BQXVCO1FBQzVDLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUN0QixLQUFLLE1BQU0sU0FBUyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUU7WUFDdkMsSUFBSSxTQUFTLFlBQVksaUJBQWlCLEVBQUU7YUFFM0M7aUJBQ0k7Z0JBQ0QsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUM5QjtTQUNKO1FBQ0QsTUFBTSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDL0IsTUFBTSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFhLEVBQUUsS0FBVTtRQUNwQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBcUIsRUFBRSxLQUFVO1FBQ2xELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFSyxnQkFBZ0IsQ0FBQyxJQUFJOztRQUMzQixDQUFDO0tBQUE7SUFFRCxZQUFZO1FBQ1IsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFSyxrQkFBa0I7O1FBQ3hCLENBQUM7S0FBQTtJQUVPLGNBQWMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVU7O1FBQ2xELElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBLENBQUMsYUFBRCxDQUFDLHVCQUFELENBQUMsQ0FBRSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFJLFVBQVUsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUNWLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7WUFDMUMsSUFBSSxZQUFZLEVBQUU7Z0JBQ2QsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdkM7aUJBQ0k7Z0JBQ0QsTUFBTSxHQUFHLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLEtBQUssbUNBQUksTUFBTSxDQUFDO2FBQ3BDO1NBQ0o7YUFDSTtZQUNELE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztTQUN2QztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFDTyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVU7UUFDcEQsSUFBSTtZQUNBLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDdEMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMvQztTQUNKO1FBQ0QsV0FBTSxHQUFHO1FBQ1QsSUFBSSxNQUFNLEdBQUcsVUFBVTthQUNsQixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7YUFDN0QsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7U0FDdkM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsb0JBQW9CLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRO1FBQzVDLElBQUksT0FBTyxZQUFZLCtCQUErQixFQUFFO1lBQ3BELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUYsSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQztZQUN4RCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7Z0JBQUUsVUFBVSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUQsU0FBUyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDMUUsU0FBUyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsV0FBVyxLQUFLLFNBQVMsQ0FBQyxVQUFVLENBQUM7U0FDdEU7YUFDSTtZQUNELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUM7WUFDekQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQ3BDLElBQUksU0FBUyxDQUFDO2dCQUNWLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztnQkFDcEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO2dCQUNwQixXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQztnQkFDL0QsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUM7YUFDakUsQ0FBQyxDQUNMLENBQUM7U0FDTDtJQUNMLENBQUM7SUFDRCxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVE7UUFDOUMsSUFBSSxPQUFPLFlBQVksK0JBQStCLEVBQUU7WUFDcEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxRixTQUFTLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUN6QixTQUFTLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUMzRzthQUNJO1lBQ0QsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQztZQUN6RCxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FDcEMsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO2dCQUNwQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7Z0JBQ3BCLFdBQVcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUM7Z0JBQ2pFLFVBQVUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUM7YUFDbkUsQ0FBQyxDQUNMLENBQUM7U0FDTDtJQUNMLENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVE7O1FBQzFDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRCxJQUFJLE9BQU8sWUFBWSxxQkFBcUIsRUFBRTtZQUMxQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1lBQ3BFLFFBQVEsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDcEcsUUFBUSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUN2RzthQUNJLElBQUksT0FBTyxZQUFZLGlCQUFpQixFQUFFO1lBQzNDLFFBQVEsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzNHLFFBQVEsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzlHO2FBQ0ksSUFBSSxPQUFPLFlBQVkscUJBQXFCLElBQUksT0FBTyxZQUFZLG1CQUFtQixFQUFFO1lBQ3pGLFFBQVEsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFBLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLDBDQUFFLEdBQUcsQ0FBQztZQUM1RyxRQUFRLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBQSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQywwQ0FBRSxHQUFHLENBQUM7U0FDL0c7UUFDRCxPQUFPLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxXQUFXOztRQUNQLElBQUk7WUFDQSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BFLEtBQUssTUFBTSxXQUFXLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ3RELElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFBLE1BQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLDBDQUFFLE1BQU0sTUFBSyxJQUFJO29CQUFFLFNBQVM7Z0JBQ3BHLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQy9DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsRSxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzQyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQzt1QkFDN0QsQ0FBQyxDQUFDLE9BQU8sWUFBWSx3QkFBd0IsQ0FBQyxFQUNuRDtvQkFDRSxJQUFJLE9BQU8sWUFBWSxXQUFXLEVBQUU7d0JBQ2hDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFOzRCQUN0RCxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FDcEMsSUFBSSxTQUFTLENBQUM7Z0NBQ1YsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO2dDQUNwQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7Z0NBQ3BCLFdBQVcsRUFBRSxXQUFXLENBQUMsS0FBSzs2QkFDakMsQ0FBQyxDQUNMLENBQUM7eUJBQ0w7cUJBQ0o7eUJBQ0ksSUFBSSxPQUFPLFlBQVkscUJBQXFCLElBQUksT0FBTyxZQUFZLCtCQUErQixFQUFFO3dCQUNyRyxJQUFJLENBQUMsVUFBVSxJQUFJLFFBQVEsSUFBSSxRQUFRLEVBQUU7NEJBQ3JDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO3lCQUMxRDs2QkFDSSxJQUFJLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFBRTs0QkFDekUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7eUJBQzVEO3FCQUNKO3lCQUNJO3dCQUNELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFBRTs0QkFDMUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQzs0QkFDdkYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQ3BDLElBQUksU0FBUyxDQUFDO2dDQUNWLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztnQ0FDcEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO2dDQUNwQixXQUFXLEVBQUUsV0FBVztnQ0FDeEIsVUFBVSxFQUFFLFVBQVU7Z0NBQ3RCLFdBQVcsRUFBRSxDQUFDLE9BQU8sWUFBWSxtQkFBbUIsSUFBSSxPQUFPLFlBQVkscUJBQXFCLENBQUM7b0NBQzdGLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSztvQ0FDbkIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNOzZCQUMzQixDQUFDLENBQ0wsQ0FBQzt5QkFDTDtxQkFDSjtpQkFFSjthQUNKO1NBQ0o7UUFDRCxXQUFNO1lBQ0YsT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQzFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFXLEVBQUUsTUFBVztRQUNuQyxJQUFJLE1BQU0sS0FBSyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDbkMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDaEQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtTQUMvRDtRQUNELElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7WUFDaEcsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLGtCQUFrQjtTQUNsRTtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBVyxFQUFFLElBQVc7UUFDbkMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxjQUFjO1FBQzdELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQ0FBc0M7SUFDdEgsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFTLEVBQUUsSUFBUztRQUNoQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxNQUFNO1lBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxjQUFjO1FBQy9ELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQztZQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBRSx1Q0FBdUM7U0FDckYsQ0FBQztJQUNOLENBQUM7SUFHRCxhQUFhLENBQUMsS0FBVTtRQUNwQixJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtZQUN2QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3RCLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7YUFDdEM7WUFDRCxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ2hDLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ2EsSUFBSTs7WUFDZCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2hELElBQUksU0FBUyxFQUFFO2dCQUNYLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUU7b0JBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRTt3QkFDOUIsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7cUJBQzVCO29CQUNELGdCQUFnQjtvQkFDaEIsTUFBTSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztvQkFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU07d0JBQzNGLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUM1RSxDQUFDLENBQUMsSUFBSSxDQUFDO2lCQUNkO2dCQUNELE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUNmLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTt3QkFDMUMsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7cUJBQ3pCO3lCQUNJLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFO3dCQUMzQixNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztxQkFDekI7eUJBQ0k7d0JBQ0Qsd0JBQXdCO3FCQUMzQjtpQkFDSjtxQkFDSTtvQkFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztpQkFDM0I7YUFDSjtpQkFDSTtnQkFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7YUFDakM7UUFDTCxDQUFDO0tBQUE7SUFFRCxnQkFBZ0I7SUFFaEIsQ0FBQztJQUVELHFCQUFxQjtRQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVLLGtCQUFrQjs7WUFDcEIsT0FBTyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3pDLENBQUM7S0FBQTtJQUVLLFlBQVksQ0FBQyxrQkFBMkI7O1lBQzFDLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7S0FBQTtJQUVhLGdCQUFnQjs7WUFDMUIsSUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7WUFDOUIscUVBQXFFO1lBQ3JFLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDZixrQkFBa0IsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUMvRTtZQUNELE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ25FLG9HQUFvRztZQUNwRyx3REFBd0Q7WUFDeEQsc0VBQXNFO1lBQ3RFLE1BQU07WUFDTixxRkFBcUY7WUFDckYsMEVBQTBFO1lBQzFFLGlFQUFpRTtZQUNqRSxJQUFJO1lBQ0osT0FBTyxjQUFjLElBQUksa0JBQWtCLENBQUM7UUFDaEQsQ0FBQztLQUFBO0lBRUQsb0JBQW9CLENBQUMsU0FBUztRQUMxQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELFVBQVU7UUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxTQUFTO1FBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxZQUFZO0lBQ1osQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUF3QjtJQUNwQyxDQUFDO0lBR0ssZ0JBQWdCLENBQUMsSUFBWTs7UUFFbkMsQ0FBQztLQUFBO0lBRWEsUUFBUTs7WUFDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyw0QkFBNEIsQ0FBQzttQkFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLFVBQVUsRUFDakU7Z0JBQ0UsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLFVBQVUsQ0FBQztnQkFDOUUsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUNuRSxJQUFJLHNCQUFzQixFQUFFO29CQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ3REO2FBQ0o7WUFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUNuQyxvRUFBb0U7Z0JBQ3BFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsSUFBSSxDQUFDO2FBQ3ZEO1lBQ0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsU0FBUztnQkFBRSxPQUFPO1lBQ3ZCLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLENBQUM7S0FBQTtJQUVPLHNCQUFzQjtRQUMxQixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQzVCLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO2dCQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztxQkFDckQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNSLElBQUksQ0FBQyxHQUFHLEVBQUU7d0JBQ04sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNYLE9BQU87cUJBQ1Y7b0JBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNkLENBQUMsQ0FBQyxDQUFDO2FBQ1Y7aUJBQ0k7Z0JBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2I7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFYSxPQUFPOztZQUNqQixJQUFJLENBQUMsc0JBQXNCLEVBQUU7aUJBQ3hCLElBQUksQ0FBQyxDQUFNLFFBQVEsRUFBQyxFQUFFO2dCQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUN4RCxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO29CQUNuQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUNkLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO3dCQUN0QixNQUFNLEVBQUUsSUFBSTt3QkFDWixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7cUJBQ2hDLENBQUMsQ0FBQztpQkFDTjtxQkFDSTtvQkFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ3BDO1lBQ0wsQ0FBQyxDQUFBLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFO29CQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7b0JBQzlCLE9BQU87aUJBQ1Y7Z0JBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUM5QixJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzlDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQztLQUFBO0lBRUQsc0JBQXNCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsaUJBQWlCLENBQUMsUUFBYztJQUVoQyxDQUFDO0lBRWEsUUFBUTs7WUFDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtpQkFDeEIsSUFBSSxDQUFDLENBQU0sUUFBUSxFQUFDLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztnQkFDOUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ3hELElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRTtvQkFDbEIsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQzt3QkFDZCxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDdEIsTUFBTSxFQUFFLEtBQUs7d0JBQ2IsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO3FCQUNoQyxDQUFDLENBQUM7aUJBQ047cUJBQ0k7b0JBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUNwQztZQUNMLENBQUMsQ0FBQSxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRTtvQkFDckQsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO29CQUM5QixPQUFPO2lCQUNWO2dCQUNELElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztnQkFDOUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM5QyxDQUFDLENBQUMsQ0FBQztZQUVQLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO2FBQzVDO1FBQ0wsQ0FBQztLQUFBO0lBRUQsaUJBQWlCLENBQUMsUUFBYztJQUVoQyxDQUFDO0lBRUQsc0JBQXNCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUVPLGVBQWUsQ0FBQyxLQUFLOzs7UUFDekIsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLElBQUksSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtZQUMzRCxLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztTQUMzQjtRQUVELElBQUksS0FBSyxDQUFDLFlBQVksS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUU7WUFDakUsS0FBSyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7U0FDOUI7UUFDRCxJQUFJLENBQUEsTUFBQSxJQUFJLENBQUMsYUFBYSwwQ0FBRSxnQkFBZ0IsS0FBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUU7WUFDcEYsWUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksT0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxTQUFTLDhDQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBQztTQUM5RjtJQUNMLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxZQUFxQixLQUFLLEVBQUUsS0FBVztRQUMxRCxJQUFJLFNBQVMsRUFBRTtZQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQUM7YUFDN0Y7WUFDRCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQzthQUNoRTtTQUNKO2FBQ0k7WUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbkM7SUFDTCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsWUFBcUIsS0FBSyxFQUFFLEtBQVc7UUFDMUQsSUFBSSxTQUFTLEVBQUU7WUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO2dCQUM1QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO2FBQzdGO1lBQ0QsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7YUFDaEU7U0FDSjthQUNJO1lBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ25DO0lBQ0wsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQUs7UUFDckIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ2YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDcEQ7YUFDSSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbEQ7YUFDSTtZQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsNERBQTRELENBQUMsQ0FBQztTQUNuRztJQUNMLENBQUM7SUFFSyxpQkFBaUIsQ0FBQyxJQUFlOztRQUV2QyxDQUFDO0tBQUE7SUFFRCxtQkFBbUIsQ0FBQyxHQUFHO1FBQ25CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQUc7UUFDWCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVTtZQUFFLE9BQU87UUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBRztRQUNiLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxjQUFjLENBQUMsR0FBRztRQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsVUFBVTtRQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQ2xFLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsUUFBUTtRQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO0lBQzlELENBQUM7SUFFRCxhQUFhO1FBQ1QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsYUFBYTtRQUNULE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUM7SUFDakQsQ0FBQztJQUVELFdBQVc7UUFDUCxPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDO0lBQ2xELENBQUM7SUFFRCxXQUFXO1FBQ1AsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQztJQUNsRCxDQUFDOzs7WUFqK0JKLFNBQVM7OztZQXhETixRQUFROzs7dUJBMkRQLFNBQVMsU0FBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7MEJBQzlDLFNBQVMsU0FBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO3NCQUN6QyxTQUFTLFNBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTs0QkFFckMsS0FBSztvQkFDTCxLQUFLOzRCQUNMLEtBQUs7cUJBRUwsTUFBTTtzQkFDTixNQUFNO3VCQUNOLE1BQU07d0JBQ04sTUFBTTswQkFDTixNQUFNOzJCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRmlsZVVwbG9hZCB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2ZpbGV1cGxvYWQnO1xuaW1wb3J0IHsgQ29udHJvbFRyZWVOb2RlLCBDcnVkRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3J1ZC9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDT05GSUdfQ0FMRU5EQVJfVklFVE5BTUVTRSB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY2FsZW5kYXIuY29uZmlnJztcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZUJvb2xlYW4sIEZpZWxkRGVmaW5lSXNUYXNrRm9ybUNvbnRyb2wsIEZpZWxkV29ya2Zsb3dDb2RlSW5DcnVkRm9ybSB9IGZyb20gJy4uLy4uL2NvbnN0L2NvbW1vbic7XG5pbXBvcnQgeyBQZXJtaXNzaW9uQmFzZSB9IGZyb20gJy4uLy4uL2VudW1zL2NvbW1vbic7XG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3J1ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jcnVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tUm91dGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2N1c3RvbS1yb3V0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBEb21TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZG9tLnNlcnZpY2UnO1xuaW1wb3J0IHsgRW50aXR5TWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW50aXR5LW1ldGFkYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWFzdGVyRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYXN0ZXItZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtU3RhdGUsIEtleUZsYXNoU2hvdyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBpc0xpdGVyYWxPYmplY3QsIGlzVmFsaWREYXRlIH0gZnJvbSAnLi4vZW52aXJvbm1lbnQtc2NoZW1hJztcbmltcG9ydCB7XG4gICAgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSxcbiAgICBDaGVja2JveENvbnRyb2xTY2hlbWEsXG4gICAgQ29udGFpbmVyU2NoZW1hLFxuICAgIENydWRGb3JtRGF0YSxcbiAgICBDcnVkRm9ybVNldHRpbmcsXG4gICAgQ3J1ZExpc3RTZXR0aW5nLFxuICAgIEN1c3RvbUNvbnRyb2xTY2hlbWEsXG4gICAgRGF0ZVRpbWVDb250cm9sU2NoZW1hLFxuICAgIERyb3Bkb3duQ29udHJvbFNjaGVtYSxcbiAgICBFZGl0b3JDb250cm9sU2NoZW1hLFxuICAgIEVudW1Mb2dUeXBlLFxuICAgIEV2ZW50RGF0YSxcbiAgICBFdmVudFR5cGUsXG4gICAgRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hLFxuICAgIEZvcm1Db250cm9sQmFzZSxcbiAgICBMb2dDb2x1bW4sXG4gICAgTG9nU2V0dGluZyxcbiAgICBNYXNrQ29udHJvbFNjaGVtYSxcbiAgICBPcGVyYXRvcixcbiAgICBTd2l0Y2hDb250cm9sU2NoZW1hLFxuICAgIFRhYmxlU2NoZW1hLFxuICAgIFRleHRBcmVhQ29udHJvbFNjaGVtYSxcbiAgICBUaXRsZVNjaGVtYVxufSBmcm9tICcuLi9mb3JtLXNjaGVtYSc7XG5pbXBvcnQgeyBDb21wb25lbnRCYXNlV2l0aEJ1dHRvbiB9IGZyb20gJy4vY29tcG9uZW50LWJhc2Utd2l0aC1idXR0b24nO1xuaW1wb3J0IHsgUmVxdWlyZWRWYWxpZGF0b3IgfSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEYXRhRm9ybUJhc2UgZXh0ZW5kcyBDb21wb25lbnRCYXNlV2l0aEJ1dHRvbiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICAgIEBWaWV3Q2hpbGQoQ3J1ZEZvcm1Db21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KSBjcnVkRm9ybTogQ3J1ZEZvcm1Db21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgnZm9ybUVsZW1lbnQnLCB7IHN0YXRpYzogdHJ1ZSB9KSBmb3JtRWxlbWVudDogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdwVXBsb2FkJywgeyBzdGF0aWM6IHRydWUgfSkgcFVwbG9hZDogRmlsZVVwbG9hZDtcblxuICAgIEBJbnB1dCgpIHBhcmVudFNldHRpbmc6IENydWRMaXN0U2V0dGluZztcbiAgICBASW5wdXQoKSBtb2RlbDogQ3J1ZEZvcm1EYXRhID0gbmV3IENydWRGb3JtRGF0YSgpO1xuICAgIEBJbnB1dCgpIGZvcmNlT25seVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBPdXRwdXQoKSBvblNhdmU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uU2F2ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uQ2FuY2VsOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbk1lc3NhZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRm9ybVJlYWR5OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkRhdGFCaW5kZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBkb05vdENoZWNrQmFzZVNlcnZpY2UgPSBmYWxzZTtcbiAgICBwcml2YXRlIG5vdENvbmZpZ0Jhc2VTZXJ2aWNlTWVzc2FnZSA9ICdDaMawYSBj4bqldSBow6xuaCBDUlVEIGJhc2Ugc2VydmljZSc7XG4gICAgbWVzc2FnZUluc2VydFN1Y2Nlc3MgPSAnJztcbiAgICBtZXNzYWdlVXBkYXRlU3VjY2VzcyA9ICcnO1xuICAgIHNldHRpbmc6IENydWRGb3JtU2V0dGluZyA9IG5ldyBDcnVkRm9ybVNldHRpbmcoKTtcbiAgICBsb2dTZXR0aW5nOiBMb2dTZXR0aW5nID0gbmV3IExvZ1NldHRpbmcoKTtcblxuICAgIHZpID0gQ09ORklHX0NBTEVOREFSX1ZJRVROQU1FU0U7XG5cbiAgICBmb3JtQ29udHJvbHM6IGFueTtcbiAgICBmb3JtQ29udHJvbHNMaXN0ID0ge307XG4gICAgZW52aXJvbm1lbnQ6IGFueSA9IHt9O1xuICAgIG1kV2lkdGhXb3JrZmxvdzogbnVtYmVyO1xuXG4gICAgYXV0b0dldERldGFpbCA9IHRydWU7XG4gICAgYXV0b1NhdmUgPSB0cnVlO1xuICAgIGlzQ2xvc2VGb3JtID0gdHJ1ZTtcbiAgICBtZXNzYWdlQ29uZmlybVNhdmU6IHN0cmluZztcbiAgICBzYXZpbmcgPSBmYWxzZTtcbiAgICBnZXREZXRhaWxQbHVzVXJsID0gbnVsbDtcbiAgICBpbnNlcnRQbHVzVXJsID0gbnVsbDtcbiAgICB1cGRhdGVQbHVzVXJsID0gbnVsbDtcbiAgICBkeW5hbWljQ29udHJvbDogYW55ID0ge307XG4gICAgc2V0VmFsaWRhdGVGb3JtID0gdHJ1ZTtcbiAgICBoYXZlRW50aXR5TWV0YWRhdGFBUEkgPSB0cnVlO1xuICAgIGlzQmFzZU1vZGVsID0gdHJ1ZTtcbiAgICBhdXRvR2VuZXJhdGVJZCA9IHRydWU7XG4gICAgcHVibGljIF9faXNGb3JtVmlldzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHVibGljIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZTtcbiAgICBwdWJsaWMgX21hc3RlckRhdGFTZXJ2aWNlOiBNYXN0ZXJEYXRhU2VydmljZTtcbiAgICBwdWJsaWMgX3JvdXRlcjogUm91dGVyO1xuICAgIHB1YmxpYyBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlO1xuICAgIHB1YmxpYyBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZTtcbiAgICBwdWJsaWMgX2N1c3RvbVJvdXRlclNlcnZpY2U6IEN1c3RvbVJvdXRlclNlcnZpY2U7XG4gICAgcHVibGljIF9jcnVkU2VydmljZTogQ3J1ZFNlcnZpY2U7XG4gICAgcHVibGljIF9kb21TZXJ2aWNlOiBEb21TZXJ2aWNlO1xuICAgIHB1YmxpYyBfZW50aXR5TWV0YWRhdGFTZXJ2aWNlOiBFbnRpdHlNZXRhZGF0YVNlcnZpY2U7XG4gICAgcHVibGljIF91c2VyU2VydmljZTogVXNlclNlcnZpY2U7XG4gICAgcHVibGljIF9udW1iZXJQaXBlOiBEZWNpbWFsUGlwZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBfaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XG4gICAgICAgIGNvbnN0IG1vZHVsZUNvbmZpZ1NlcnZpY2UgPSBfaW5qZWN0b3IuZ2V0KE1vZHVsZUNvbmZpZ1NlcnZpY2UpO1xuICAgICAgICB0aGlzLmVudmlyb25tZW50ID0gbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudDtcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSk7XG4gICAgICAgIHRoaXMuX251bWJlclBpcGUgPSB0aGlzLl9pbmplY3Rvci5nZXQoRGVjaW1hbFBpcGUpO1xuICAgICAgICB0aGlzLl9tYXN0ZXJEYXRhU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChNYXN0ZXJEYXRhU2VydmljZSk7XG4gICAgICAgIHRoaXMuX3JvdXRlciA9IHRoaXMuX2luamVjdG9yLmdldChSb3V0ZXIpO1xuICAgICAgICB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSA9IHRoaXMuX2luamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2N1c3RvbVJvdXRlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ3VzdG9tUm91dGVyU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENydWRTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fZG9tU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChEb21TZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEVudGl0eU1ldGFkYXRhU2VydmljZSk7XG4gICAgICAgIHRoaXMuX3VzZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFVzZXJTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDb21tb25TZXJ2aWNlKTtcblxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICAvLyB0aGlzLmNoZWNrUGVybWlzc2lvbih0aGlzLm1vZGVsLmRhdGEuYmFzZVBlcm1pc3Npb24pO1xuXG4gICAgICAgIGNvbnN0IGRlZmF1bHRTZXR0aW5nID0gbmV3IENydWRGb3JtU2V0dGluZygpO1xuICAgICAgICBjb25zdCBjYXVIaW5oTmdoaWVwVnUgPSB0aGlzLmVudmlyb25tZW50Py5jYXVIaW5oTmdoaWVwVnU7XG4gICAgICAgIGlmIChjYXVIaW5oTmdoaWVwVnUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGNhdUhpbmhOZ2hpZXBWdSkge1xuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0U2V0dGluZ1trZXldID09IHRoaXMuc2V0dGluZ1trZXldXG4gICAgICAgICAgICAgICAgICAgICYmIHRoaXMuc2V0dGluZ1trZXldICE9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAmJiBjYXVIaW5oTmdoaWVwVnVba2V5XSAhPSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5zZXR0aW5nW2tleV0gIT0gY2F1SGluaE5naGllcFZ1W2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nW2tleV0gPSBjYXVIaW5oTmdoaWVwVnVba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIH1cbiAgICBjaGVja1Blcm1pc3Npb24oYmFzZVBlcm1pc3Npb24pIHtcbiAgICAgICAgaWYgKHRoaXMuaXNCYXNlTW9kZWwpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLmZvcm1TdGF0ZSA9PSBGb3JtU3RhdGUuRURJVCkge1xuICAgICAgICAgICAgICAgIGlmIChiYXNlUGVybWlzc2lvbiAmIFBlcm1pc3Npb25CYXNlLkVESVQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuRURJVDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZm9ybVN0YXRlID0gRm9ybVN0YXRlLlZJRVc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubW9kZWwuZGF0YS5pc0J1aWxkSW5BbGwgJiYgIXRoaXMuX3VzZXJTZXJ2aWNlLmlzU3VwZXJVc2VyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuVklFVztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9faXNGb3JtVmlldyA9IHRoaXMuX2lzRm9ybVZpZXcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZFNjaGVtYUJhc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLl91c2VyU2VydmljZS5pc1N1cGVyVXNlcigpXG4gICAgICAgICAgICAmJiB0aGlzLm1vZGVsXG4gICAgICAgICAgICAmJiB0aGlzLm1vZGVsLmRhdGEuaGFzQnVpbGRJblxuICAgICAgICAgICAgJiYgdGhpcy5zZXR0aW5nLnNjaGVtYVxuICAgICAgICAgICAgJiYgdGhpcy5zZXR0aW5nLnNjaGVtYS5sZW5ndGggPiAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnNjaGVtYS5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBTd2l0Y2hDb250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdpc0J1aWxkSW4nLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0tow7NhIG3DoycsXG4gICAgICAgICAgICAgICAgICAgIG1kV2lkdGg6IDRcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5zY2hlbWEucHVzaChcbiAgICAgICAgICAgICAgICBuZXcgU3dpdGNoQ29udHJvbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiAnaXNCdWlsZEluQWxsJyxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdLaMOzYSBi4bqjbiBnaGknLFxuICAgICAgICAgICAgICAgICAgICBtZFdpZHRoOiA0XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wYXJlbnRTZXR0aW5nXG4gICAgICAgICAgICAmJiB0aGlzLl9pc0Zvcm1BZGROZXcoKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCBkYXRhU291cmNlID0gW10sIGRlZmF1bHRWYWx1ZSA9IG51bGwsIGhhc1dvcmtmbG93ID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBpbml0RGF0YVRhc2tGb3JtOiBhbnkgPSB7fTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudFNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3ICYmIHRoaXMucGFyZW50U2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXcud29ya2Zsb3dzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UgPSB0aGlzLnBhcmVudFNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3LndvcmtmbG93cztcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0aGlzLnBhcmVudFNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3LndvcmtmbG93Q29kZTtcbiAgICAgICAgICAgICAgICBoYXNXb3JrZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhLmNyZWF0ZVRhc2tJbnN0ZWFkID0gdGhpcy5wYXJlbnRTZXR0aW5nLndvcmtmbG93U2V0dGluZ05ldy5jcmVhdGVUYXNrSW5zdGVhZDtcbiAgICAgICAgICAgICAgICBpbml0RGF0YVRhc2tGb3JtLmlkTG9haUNvbmdWaWVjID0gdGhpcy5wYXJlbnRTZXR0aW5nLndvcmtmbG93U2V0dGluZ05ldy5pZExvYWlDb25nVmllY0RlZmF1bHQ7XG4gICAgICAgICAgICAgICAgaW5pdERhdGFUYXNrRm9ybS5fX3RlbXBsYXRlVGFza05hbWUgPSB0aGlzLnBhcmVudFNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3LnRlbXBsYXRlVGFza05hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnBhcmVudFNldHRpbmcuaXNXb3JrZmxvd1RyZWUpIHtcbiAgICAgICAgICAgICAgICBoYXNXb3JrZmxvdyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzV29ya2Zsb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmR5bmFtaWNDb250cm9sW0ZpZWxkRGVmaW5lSXNUYXNrRm9ybUNvbnRyb2xdID0gbmV3IEN1c3RvbUNvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDogRmllbGREZWZpbmVJc1Rhc2tGb3JtQ29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgbWRXaWR0aDogMTIsXG4gICAgICAgICAgICAgICAgICAgIHNob3dMYWJlbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiAnbm8tcGFkZGluZycsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGluaXREYXRhVGFza0Zvcm0sXG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbkNoZWNrOiAocm9vdE1vZGVsKSA9PiAhcm9vdE1vZGVsIHx8ICFyb290TW9kZWwuY3JlYXRlVGFza0luc3RlYWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuc2NoZW1hLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIG5ldyBEcm9wZG93bkNvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IEZpZWxkV29ya2Zsb3dDb2RlSW5DcnVkRm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnUXV5IHRyw6xuaCBz4butIGThu6VuZycsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGaWVsZDogJ2NvZGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkOiAndGl0bGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWRXaWR0aDogdGhpcy5tZFdpZHRoV29ya2Zsb3cgfHwgMTIsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVDYWNoaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbkNoZWNrOiAocm9vdE1vZGVsKSA9PiAhcm9vdE1vZGVsIHx8IHJvb3RNb2RlbC5jcmVhdGVUYXNrSW5zdGVhZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlZDogYXN5bmMgKGV2dDogRXZlbnREYXRhKSA9PiBhd2FpdCB0aGlzLmhhbmRsZUNoYW5nZVdvcmtmbG93Q29kZShldnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25BZGp1c3RlZFZhbHVlOiBhc3luYyAoZXZ0OiBFdmVudERhdGEpID0+IGF3YWl0IHRoaXMuaGFuZGxlQ2hhbmdlV29ya2Zsb3dDb2RlKGV2dClcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudFNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3XG4gICAgICAgICAgICAgICAgICAgICYmIHRoaXMucGFyZW50U2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXcudGFza0luc2lkZUJ1c2luZXNzRm9ybVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuc2NoZW1hLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgVGl0bGVTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICdDw7RuZyB2aeG7h2MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbkNoZWNrOiAocm9vdE1vZGVsKSA9PiAhcm9vdE1vZGVsIHx8ICFyb290TW9kZWwuY3JlYXRlVGFza0luc3RlYWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5keW5hbWljQ29udHJvbFtGaWVsZERlZmluZUlzVGFza0Zvcm1Db250cm9sXVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGhhbmRsZUNoYW5nZVdvcmtmbG93Q29kZShldnQ6IEV2ZW50RGF0YSkge1xuXG4gICAgfVxuXG4gICAgc2V0V29ya2Zsb3dEYXRhc291cmNlKGV2dDogRXZlbnREYXRhLCB3b3JrZmxvd1NldHRpbmcpIHtcbiAgICAgICAgZXZ0LmZvcm1Db250cm9sc1tGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm1dLmRhdGFTb3VyY2UgPSB3b3JrZmxvd1NldHRpbmcud29ya2Zsb3dzO1xuICAgICAgICBpZiAoIWV2dC5yb290TW9kZWxbRmllbGRXb3JrZmxvd0NvZGVJbkNydWRGb3JtXSkge1xuICAgICAgICAgICAgZXZ0LnJvb3RNb2RlbFtGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm1dID0gd29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghd29ya2Zsb3dTZXR0aW5nLndvcmtmbG93cy5zb21lKHggPT4geC5jb2RlID09IGV2dC5yb290TW9kZWxbRmllbGRXb3JrZmxvd0NvZGVJbkNydWRGb3JtXSkpIHtcbiAgICAgICAgICAgIGV2dC5yb290TW9kZWxbRmllbGRXb3JrZmxvd0NvZGVJbkNydWRGb3JtXSA9IHdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBfaGFuZGxlRm9ybVJlYWR5KGZvcm1FdmVudDogRXZlbnREYXRhKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX19oYW5kbGVGb3JtUmVhZHkoZm9ybUV2ZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9faGFuZGxlRm9ybVJlYWR5KGZvcm1FdmVudDogRXZlbnREYXRhKSB7XG4gICAgICAgIGlmICghdGhpcy5kb05vdENoZWNrQmFzZVNlcnZpY2UgJiYgIXRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKHRoaXMubm90Q29uZmlnQmFzZVNlcnZpY2VNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvcm1Db250cm9scyA9IGZvcm1FdmVudC5mb3JtQ29udHJvbHM7XG4gICAgICAgIGF3YWl0IHRoaXMub25Gb3JtSW5pdGlhbGl6ZWQoZm9ybUV2ZW50KTtcbiAgICAgICAgdGhpcy5vbkZvcm1SZWFkeS5lbWl0KHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMsXG4gICAgICAgICAgICBzZXR0aW5nOiB0aGlzLnNldHRpbmcsXG4gICAgICAgICAgICBmb3JtRXZlbnRcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJHZXREZXRhaWwoKTtcbiAgICB9XG5cbiAgICBfdHJpZ2dlckdldERldGFpbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuYXV0b0dldERldGFpbCkge1xuICAgICAgICAgICAgdGhpcy5nZXREZXRhaWwoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNydWRGb3JtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5pbml0Q29udHJvbERlZmF1bHRWYWx1ZUZyb21FeHRlcm5hbCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3J1ZEZvcm0uZmlyZU1vZGVsQ2hhbmdlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgb25CZWZvcmVHZXREZXRhaWwoKSB7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0T2JqZWN0RGV0YWlsKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5nZXREZXRhaWxXaXRoUGVybWlzc2lvbih0aGlzLm1vZGVsLmRhdGEuaWQsIHRoaXMubW9kZWwuZGF0YS5waWQsIHRoaXMuZ2V0RGV0YWlsUGx1c1VybCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0RGV0YWlsQ3VzdG9tKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXREZXRhaWwoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdENoZWNrID0gYXdhaXQgdGhpcy5nZXREZXRhaWxDdXN0b20oKTtcbiAgICAgICAgLy8gS2jDtG5nIG92ZXJyaWRlXG4gICAgICAgIGlmIChyZXN1bHRDaGVjayA9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzRm9ybUFkZE5ldygpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vbkJlZm9yZUdldERldGFpbCgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNydWRGb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3J1ZEZvcm0uc2V0SXNMb2FkZWREYXRhRWRpdChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRPYmplY3REZXRhaWwoKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm1vZGlmeURldGFpbERhdGEocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Byb2Nlc3NBZnRlckdldERhdGEocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vbkFmdGVyR2V0RGV0YWlsKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvZ1NldHRpbmcuaXNFbmFibGVMb2cpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dTZXR0aW5nLnZhbHVlQmVmb3JlVXBkYXRlID0gdGhpcy5fY29tbW9uU2VydmljZS5jbG9uZU9iamVjdChyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jcnVkRm9ybSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudERhdGEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGU6IHRoaXMuY3J1ZEZvcm0uX3Jvb3ROb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlOiBFdmVudFR5cGUuRk9STV9SRUFEWSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNydWRGb3JtOiB0aGlzLmNydWRGb3JtXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmluaXREYXRhQWRkKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0RGVmYXVsdFNldHRpbmdGaWxlQ29udHJvbChldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3J1ZEZvcm0uaW5pdENvbnRyb2xEZWZhdWx0VmFsdWVGcm9tRXh0ZXJuYWwoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5maXJlTW9kZWxDaGFuZ2VkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE92ZXJyaWRlIGPDoWNoIGzhuqV5IGThu68gbGnhu4d1IGdldERldGFpbFxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHRDaGVjay5zdWNjZXNzICYmIHJlc3VsdENoZWNrLmRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubW9kZWwuZm9ybVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZm9ybVN0YXRlID0gRm9ybVN0YXRlLkVESVQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNydWRGb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3J1ZEZvcm0uc2V0SXNMb2FkZWREYXRhRWRpdChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubW9kaWZ5RGV0YWlsRGF0YShyZXN1bHRDaGVjay5kYXRhKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9wcm9jZXNzQWZ0ZXJHZXREYXRhKHJlc3VsdENoZWNrLmRhdGEpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub25BZnRlckdldERldGFpbChyZXN1bHRDaGVjay5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZm9ybVN0YXRlID0gRm9ybVN0YXRlLkFERDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jcnVkRm9ybSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudERhdGEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGU6IHRoaXMuY3J1ZEZvcm0uX3Jvb3ROb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlOiAnZm9ybVJlYWR5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNydWRGb3JtOiB0aGlzLmNydWRGb3JtXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmluaXREYXRhQWRkKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0RGVmYXVsdFNldHRpbmdGaWxlQ29udHJvbChldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3J1ZEZvcm0uaW5pdENvbnRyb2xEZWZhdWx0VmFsdWVGcm9tRXh0ZXJuYWwoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5maXJlTW9kZWxDaGFuZ2VkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgaW5pdERhdGFBZGQoZXZ0OiBFdmVudERhdGEpIHsgfVxuXG4gICAgcHJpdmF0ZSBpbml0RGVmYXVsdFNldHRpbmdGaWxlQ29udHJvbChldnQ6IEV2ZW50RGF0YSkge1xuICAgICAgICBpZiAoIWV2dC5yb290TW9kZWwuaWQgJiYgdGhpcy5zZXR0aW5nLnNjaGVtYS5zb21lKHAgPT4gKHAgaW5zdGFuY2VvZiBGaWxlTWFuYWdlckNvbnRyb2xTY2hlbWEpKSkge1xuICAgICAgICAgICAgZXZ0LnJvb3RNb2RlbC5pZCA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGjhuqNpIGfhu41pIGjDoG0gbsOgeSBraGkgb3ZlcnJpZGUgZ2V0RGV0YWlsXG4gICAgICovXG4gICAgYXN5bmMgX3Byb2Nlc3NBZnRlckdldERhdGEoZGF0YSkge1xuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIGRhdGEgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIER1eeG7h3QgY8OhYyBjb250cm9sIGRhdGV0aW1lIMSR4buDIGNvbnZlcnQgdmFsdWUgc2FuZyBkYXRldGltZVxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnNjaGVtYS5mb3JFYWNoKHNjaGVtYSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXhEYXRlVmFsdWUoc2NoZW1hLCBkYXRhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEuX19kaXNhYmxlRWRpdCA9IHRoaXMubW9kZWwuZGF0YS5fX2Rpc2FibGVFZGl0O1xuXG4gICAgICAgIC8vIFNldCBiYXNlUGVybWlzc2lvbiB04burIGNydWRsaXN0XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmRhdGEuYmFzZVBlcm1pc3Npb24gJiYgdGhpcy5tb2RlbC5kYXRhLmJhc2VQZXJtaXNzaW9uID09PSBQZXJtaXNzaW9uQmFzZS5GVUxMKSB7XG4gICAgICAgICAgICBkYXRhLmJhc2VQZXJtaXNzaW9uID0gdGhpcy5tb2RlbC5kYXRhLmJhc2VQZXJtaXNzaW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tb2RlbC5kYXRhID0gZGF0YTtcbiAgICAgICAgaWYgKGRhdGEucGlkICYmIGRhdGEucGlkICE9IHRoaXMuZ3VpZEVtcHR5ICYmIGRhdGEuYmFzZVBlcm1pc3Npb25CeVBpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrUGVybWlzc2lvbihkYXRhLmJhc2VQZXJtaXNzaW9uQnlQaWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGVja1Blcm1pc3Npb24oZGF0YS5iYXNlUGVybWlzc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZm9yY2VPbmx5Vmlldykge1xuICAgICAgICAgICAgdGhpcy5fX2lzRm9ybVZpZXcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuVklFVztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNydWRGb3JtKSB7XG4gICAgICAgICAgICB0aGlzLmNydWRGb3JtLnN3aXRjaFZpZXdNb2RlKHRoaXMuX19pc0Zvcm1WaWV3KTtcbiAgICAgICAgICAgIHRoaXMuY3J1ZEZvcm0uc3dpdGNoRm9ybVN0YXRlRm9yVXNlcnBpY2tlcih0aGlzLl9pc0Zvcm1BZGROZXcoKSk7XG4gICAgICAgICAgICB0aGlzLmNydWRGb3JtLmRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5zZXRJc0xvYWRlZERhdGFFZGl0KHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZVxuICAgICAgICAgICAgJiYgdGhpcy5oYXZlRW50aXR5TWV0YWRhdGFBUEkgLy8gc2V0dGluZyDEkeG7gyBmaXggbOG7l2kgayBsb2FkIGRjIGVudGl0eSBtZXRhZGF0YSBjaG8gY8ahIGPhuqV1IHThu5UgY2jhu6ljIHNlcnZpY2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UubG9hZCh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UsIHRoaXMuY29udGV4dCwgdHJ1ZSk7IC8vIGZvcmNlIGxvYWQgxJHhu4MgxJHhu41jIHThu6sgY3NkbFxuICAgICAgICAgICAgY29uc3QgZW5hYmxlVmVyc2lvbiA9IHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5nZXRCeUNvZGUoJ2VuYWJsZVZlcnNpb24nKTtcbiAgICAgICAgICAgIGlmIChlbmFibGVWZXJzaW9uID09ICcxJykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5maWx0ZXJDaGVja0V4aXN0QnlWZXJzaW9uID0gW1xuICAgICAgICAgICAgICAgICAgICBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiAnY29kZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3Iubm90RXF1YWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkodGhpcy5tb2RlbC5kYXRhLmNvZGUpXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGlzYWJsZUJ1aWxkSW5GaWVsZCgpO1xuICAgICAgICBpZiAodGhpcy5sb2dTZXR0aW5nLmlzRW5hYmxlTG9nKSB7XG4gICAgICAgICAgICB0aGlzLmdldExvZ1ZhbHVlQWZ0ZXJMb2FkRGV0YWlsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRMb2dWYWx1ZUFmdGVyTG9hZERldGFpbCgpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2xOYW1lIG9mIE9iamVjdC5rZXlzKHRoaXMuZm9ybUNvbnRyb2xzKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNydWRGb3JtLmZvcm1Db250cm9sc1tjb250cm9sTmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xOYW1lLmluY2x1ZGVzKCcuJykgfHwgdGhpcy5jcnVkRm9ybS5mb3JtQ29udHJvbHNbY29udHJvbE5hbWVdPy5oaWRkZW4gPT09IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfHwgIShjb250cm9sIGluc3RhbmNlb2YgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHRoaXMubG9nU2V0dGluZy5hcnJWYWx1ZUFmdGVyVXBkYXRlLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIG5ldyBMb2dDb2x1bW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbnRyb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29udHJvbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlQmVmb3JlOiBjb250cm9sLl9jb21wb25lbnQuZGF0YVNvdXJjZS5tYXAocCA9PiBwLmxhYmVsKS5qb2luKCcsICcpIHx8IHRoaXMubG9nU2V0dGluZy5lbXB0eVZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUFmdGVyOiAnJ1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDIwMDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZml4RGF0ZVZhbHVlKGNvbnRyb2wsIHBhcmVudE1vZGVsLCBwYXJlbnRQYXRoPykge1xuICAgICAgICBsZXQgX3BhcmVudFBhdGggPSBjb250cm9sLmZpZWxkO1xuICAgICAgICBpZiAocGFyZW50UGF0aCAhPSBudWxsKSBfcGFyZW50UGF0aCA9IHBhcmVudFBhdGggKyAnLicgKyBfcGFyZW50UGF0aDtcblxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFRhYmxlU2NoZW1hKSB7XG4gICAgICAgICAgICBpZiAoIXBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdIHx8ICEocGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzdWJDb250cm9sIG9mIGNvbnRyb2wucm93VGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXhEYXRlVmFsdWUoc3ViQ29udHJvbCwgaXRlbSwgX3BhcmVudFBhdGggKyAnWycgKyBpICsgJ10nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBDb250YWluZXJTY2hlbWEpIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSA9PSBudWxsIHx8ICFpc0xpdGVyYWxPYmplY3QocGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0pKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBzdWJDb250cm9sIG9mIGNvbnRyb2wuY29udHJvbHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpeERhdGVWYWx1ZShzdWJDb250cm9sLCBwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSwgX3BhcmVudFBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBEYXRlVGltZUNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY29udHJvbC50aW1lT25seSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKFN0cmluZyhwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWREYXRlKGRhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gPSBkYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gPSB0aGlzLl9jb21tb25TZXJ2aWNlLmdldFRpbWUocGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkaXNhYmxlQnVpbGRJbkZpZWxkKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2lzRm9ybUFkZE5ldygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlbC5kYXRhLmlzQnVpbGRJbkFsbCAmJiAhdGhpcy5fdXNlclNlcnZpY2UuaXNTdXBlclVzZXIoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5zY2hlbWEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfYWRkUmVxdWlyZWRWYWxpZGF0b3Ioc2NoZW1hOiBGb3JtQ29udHJvbEJhc2UpIHtcbiAgICAgICAgbGV0IGV4aXN0ID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIHNjaGVtYS52YWxpZGF0b3JzKSB7XG4gICAgICAgICAgICBpZiAodmFsaWRhdG9yIGluc3RhbmNlb2YgUmVxdWlyZWRWYWxpZGF0b3IpIHtcbiAgICAgICAgICAgICAgICBleGlzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFleGlzdCkge1xuICAgICAgICAgICAgc2NoZW1hLnZhbGlkYXRvcnMucHVzaChuZXcgUmVxdWlyZWRWYWxpZGF0b3IoKSk7XG4gICAgICAgIH1cbiAgICAgICAgc2NoZW1hLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBfcmVtb3ZlUmVxdWlyZWRWYWxpZGF0b3Ioc2NoZW1hOiBGb3JtQ29udHJvbEJhc2UpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiBzY2hlbWEudmFsaWRhdG9ycykge1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRvciBpbnN0YW5jZW9mIFJlcXVpcmVkVmFsaWRhdG9yKSB7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaCh2YWxpZGF0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNjaGVtYS52YWxpZGF0b3JzID0gdmFsaWRhdG9ycztcbiAgICAgICAgc2NoZW1hLnJlcXVpcmVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgX3NldE1vZGVsVmFsdWUoZmllbGQ6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcnVkRm9ybS5fcm9vdE5vZGUuZ2V0Tm9kZUJ5UGF0aChmaWVsZCk7XG4gICAgICAgIHRoaXMuX3NldE1vZGVsVmFsdWVCeU5vZGUobm9kZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIF9zZXRNb2RlbFZhbHVlQnlOb2RlKG5vZGU6IENvbnRyb2xUcmVlTm9kZSwgdmFsdWU6IGFueSkge1xuICAgICAgICBub2RlLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5jcnVkRm9ybS5maXJlTW9kZWxDaGFuZ2VkKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgbW9kaWZ5RGV0YWlsRGF0YShkYXRhKSB7XG4gICAgfVxuXG4gICAgX3RyaWdnZXJTYXZlKCkge1xuICAgICAgICB0aGlzLnNhdmUoKTtcbiAgICB9XG5cbiAgICBhc3luYyBvbkFmdGVyR2V0TG9nVmFsdWUoKSB7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTaW5nbGVMYWJlbChjb250cm9sLCBkYXRhU291cmNlLCB2YWx1ZVBhcmFtKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBkYXRhU291cmNlLmZpbmQocCA9PiBwPy52YWx1ZVtjb250cm9sLnZhbHVlRmllbGRdID09IHZhbHVlUGFyYW0pO1xuICAgICAgICBpZiAoISFyZXN1bHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZ1bmNHZXRMYWJlbCA9IGNvbnRyb2wuZnVuY0dldExhYmVsO1xuICAgICAgICAgICAgaWYgKGZ1bmNHZXRMYWJlbCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmNHZXRMYWJlbChyZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Py5sYWJlbCA/PyByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmxvZ1NldHRpbmcuZW1wdHlWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBwcml2YXRlIGdldE11bHRpcGxlTGFiZWwoY29udHJvbCwgZGF0YVNvdXJjZSwgdmFsdWVQYXJhbSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHZhbHVlUGFyYW0uc29tZShwID0+IHAgPT0gTnVtYmVyKHApKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlUGFyYW0gPSB2YWx1ZVBhcmFtLm1hcChwID0+IE51bWJlcihwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggeyB9XG4gICAgICAgIGxldCByZXN1bHQgPSBkYXRhU291cmNlXG4gICAgICAgICAgICAuZmlsdGVyKHAgPT4gdmFsdWVQYXJhbS5pbmNsdWRlcyhwLnZhbHVlW2NvbnRyb2wudmFsdWVGaWVsZF0pKVxuICAgICAgICAgICAgLm1hcChwID0+IGNvbnRyb2wuZnVuY0dldExhYmVsKHAudmFsdWUpKVxuICAgICAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmxvZ1NldHRpbmcuZW1wdHlWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGFkZFNpbmdsZVByb3BlcnR5TG9nKGNvbnRyb2wsIG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvZ0NvbHVtbiA9IHRoaXMubG9nU2V0dGluZy5hcnJWYWx1ZUFmdGVyVXBkYXRlLmZpbmQocCA9PiBwLmZpZWxkID09IGNvbnRyb2wuZmllbGQpO1xuICAgICAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBjb250cm9sLl9jb21wb25lbnQuc2VsZWN0ZWRWYWx1ZU9iamVjdDtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhU291cmNlKSkgZGF0YVNvdXJjZSA9IFtkYXRhU291cmNlXTtcbiAgICAgICAgICAgIGxvZ0NvbHVtbi52YWx1ZUFmdGVyID0gdGhpcy5nZXRTaW5nbGVMYWJlbChjb250cm9sLCBkYXRhU291cmNlLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICBsb2dDb2x1bW4udmlzaWJsZSA9IGxvZ0NvbHVtbi52YWx1ZUJlZm9yZSAhPT0gbG9nQ29sdW1uLnZhbHVlQWZ0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhU291cmNlID0gY29udHJvbC5fY29tcG9uZW50LmRhdGFTb3VyY2VJbnRlcm5hbDtcbiAgICAgICAgICAgIHRoaXMubG9nU2V0dGluZy5hcnJWYWx1ZUFmdGVyVXBkYXRlLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IExvZ0NvbHVtbih7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb250cm9sLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29udHJvbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVCZWZvcmU6IHRoaXMuZ2V0U2luZ2xlTGFiZWwoY29udHJvbCwgZGF0YVNvdXJjZSwgb2xkVmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUFmdGVyOiB0aGlzLmdldFNpbmdsZUxhYmVsKGNvbnRyb2wsIGRhdGFTb3VyY2UsIG5ld1ZhbHVlKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZE11bHRpcGxlUHJvcGVydHlMb2coY29udHJvbCwgb2xkVmFsdWUsIG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSkge1xuICAgICAgICAgICAgY29uc3QgbG9nQ29sdW1uID0gdGhpcy5sb2dTZXR0aW5nLmFyclZhbHVlQWZ0ZXJVcGRhdGUuZmluZChwID0+IHAuZmllbGQgPT0gY29udHJvbC5maWVsZCk7XG4gICAgICAgICAgICBsb2dDb2x1bW4udmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICBsb2dDb2x1bW4udmFsdWVBZnRlciA9IHRoaXMuZ2V0TXVsdGlwbGVMYWJlbChjb250cm9sLCBjb250cm9sLl9jb21wb25lbnQuc2VsZWN0ZWRWYWx1ZU9iamVjdCwgbmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGNvbnRyb2wuX2NvbXBvbmVudC5kYXRhU291cmNlSW50ZXJuYWw7XG4gICAgICAgICAgICB0aGlzLmxvZ1NldHRpbmcuYXJyVmFsdWVBZnRlclVwZGF0ZS5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBMb2dDb2x1bW4oe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29udHJvbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGNvbnRyb2wubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlQmVmb3JlOiB0aGlzLmdldE11bHRpcGxlTGFiZWwoY29udHJvbCwgZGF0YVNvdXJjZSwgb2xkVmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUFmdGVyOiB0aGlzLmdldE11bHRpcGxlTGFiZWwoY29udHJvbCwgZGF0YVNvdXJjZSwgbmV3VmFsdWUpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0TG9nVmFsdWVEZWZhdWx0KGNvbnRyb2wsIG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICAgICAgICBjb25zdCBpc051bGxPbGRWYWx1ZSA9IHRoaXMuaXNOdWxsT3JFbXB0eShvbGRWYWx1ZSk7XG4gICAgICAgIGNvbnN0IGlzTnVsbE5ld1ZhbHVlID0gdGhpcy5pc051bGxPckVtcHR5KG5ld1ZhbHVlKTtcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBEYXRlVGltZUNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IGNvbnRyb2wuc2hvd1RpbWUgPyAnSEg6bW0gZGQvTU0veXl5eScgOiAnZGQvTU0veXl5eSc7XG4gICAgICAgICAgICBvbGRWYWx1ZSA9IGlzTnVsbE9sZFZhbHVlID8gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWUgOiB0aGlzLl9kYXRlUGlwZS50cmFuc2Zvcm0ob2xkVmFsdWUsIGZvcm1hdCk7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IGlzTnVsbE5ld1ZhbHVlID8gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWUgOiB0aGlzLl9kYXRlUGlwZS50cmFuc2Zvcm0obmV3VmFsdWUsIGZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIE1hc2tDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICBvbGRWYWx1ZSA9IGlzTnVsbE9sZFZhbHVlID8gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWUgOiB0aGlzLl9udW1iZXJQaXBlLnRyYW5zZm9ybShvbGRWYWx1ZSwgJycsICd2aS1WTicpO1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBpc051bGxOZXdWYWx1ZSA/IHRoaXMubG9nU2V0dGluZy5lbXB0eVZhbHVlIDogdGhpcy5fbnVtYmVyUGlwZS50cmFuc2Zvcm0obmV3VmFsdWUsICcnLCAndmktVk4nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgQ2hlY2tib3hDb250cm9sU2NoZW1hIHx8IGNvbnRyb2wgaW5zdGFuY2VvZiBTd2l0Y2hDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICBvbGRWYWx1ZSA9IGlzTnVsbE9sZFZhbHVlID8gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWUgOiBEYXRhU291cmNlQm9vbGVhbi5maW5kKHAgPT4gcC5pZCA9PSBvbGRWYWx1ZSk/LnRlbjtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gaXNOdWxsTmV3VmFsdWUgPyB0aGlzLmxvZ1NldHRpbmcuZW1wdHlWYWx1ZSA6IERhdGFTb3VyY2VCb29sZWFuLmZpbmQocCA9PiBwLmlkID09IG5ld1ZhbHVlKT8udGVuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbb2xkVmFsdWUsIG5ld1ZhbHVlXTtcbiAgICB9XG5cbiAgICBnZXRMb2dWYWx1ZSgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lTW9kZWwgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmNsb25lT2JqZWN0KHRoaXMubW9kZWwuZGF0YSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2xOYW1lIG9mIE9iamVjdC5rZXlzKHRoaXMuZm9ybUNvbnRyb2xzKSkge1xuICAgICAgICAgICAgICAgIGlmIChjb250cm9sTmFtZS5pbmNsdWRlcygnLicpIHx8IHRoaXMuY3J1ZEZvcm0uZm9ybUNvbnRyb2xzW2NvbnRyb2xOYW1lXT8uaGlkZGVuID09PSB0cnVlKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtQ29udHJvbHNbY29udHJvbE5hbWVdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5sb2dTZXR0aW5nLnZhbHVlQmVmb3JlVXBkYXRlW2NvbnRyb2wuZmllbGRdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gY2xvbmVNb2RlbFtjb250cm9sLmZpZWxkXTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc011bHRpcGxlID0gQXJyYXkuaXNBcnJheShvbGRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCghdGhpcy5pc051bGxPckVtcHR5KG9sZFZhbHVlKSB8fCAhdGhpcy5pc051bGxPckVtcHR5KG5ld1ZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgJiYgIShjb250cm9sIGluc3RhbmNlb2YgRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFRhYmxlU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkob2xkVmFsdWUpICE9IEpTT04uc3RyaW5naWZ5KG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nU2V0dGluZy5hcnJWYWx1ZUFmdGVyVXBkYXRlLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMb2dDb2x1bW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbnRyb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29udHJvbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1Mb2dUeXBlOiBFbnVtTG9nVHlwZS5UYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIERyb3Bkb3duQ29udHJvbFNjaGVtYSB8fCBjb250cm9sIGluc3RhbmNlb2YgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc011bHRpcGxlICYmIG9sZFZhbHVlICE9IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRTaW5nbGVQcm9wZXJ0eUxvZyhjb250cm9sLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNNdWx0aXBsZSAmJiAhdGhpcy5fY29tbW9uU2VydmljZS5pc1NhbWVBcnJheShvbGRWYWx1ZSwgbmV3VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRNdWx0aXBsZVByb3BlcnR5TG9nKGNvbnRyb2wsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYXJlVmFsdWVzRXF1YWwobmV3VmFsdWUsIG9sZFZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFt2YWx1ZUJlZm9yZSwgdmFsdWVBZnRlcl0gPSB0aGlzLmdldExvZ1ZhbHVlRGVmYXVsdChjb250cm9sLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nU2V0dGluZy5hcnJWYWx1ZUFmdGVyVXBkYXRlLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMb2dDb2x1bW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbnRyb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29udHJvbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlQmVmb3JlOiB2YWx1ZUJlZm9yZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlQWZ0ZXI6IHZhbHVlQWZ0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtTG9nVHlwZTogKGNvbnRyb2wgaW5zdGFuY2VvZiBFZGl0b3JDb250cm9sU2NoZW1hIHx8IGNvbnRyb2wgaW5zdGFuY2VvZiBUZXh0QXJlYUNvbnRyb2xTY2hlbWEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBFbnVtTG9nVHlwZS5UYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogRW51bUxvZ1R5cGUuTm9ybWFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJy0tLS1sb2cgZGF0YSBmYWlsLS0tLScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXJlVmFsdWVzRXF1YWwodmFsdWUxOiBhbnksIHZhbHVlMjogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh2YWx1ZTEgPT09IHZhbHVlMikgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlMSkgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcmVBcnJheXNFcXVhbCh2YWx1ZTEsIHZhbHVlMik7IC8vIFNvIHPDoW5oIGFycmF5XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZTEgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZTIgPT09ICdvYmplY3QnICYmIHZhbHVlMSAhPT0gbnVsbCAmJiB2YWx1ZTIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFyZU9iamVjdHNFcXVhbCh2YWx1ZTEsIHZhbHVlMik7IC8vIFNvIHPDoW5oIG9iamVjdHNcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgYXJlQXJyYXlzRXF1YWwoYXJyMTogYW55W10sIGFycjI6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChhcnIxLmxlbmd0aCAhPT0gYXJyMi5sZW5ndGgpIHJldHVybiBmYWxzZTsgLy8gS2jDoWMgxJHhu5kgZMOgaVxuICAgICAgICByZXR1cm4gYXJyMS5ldmVyeSgoaXRlbSwgaW5kZXgpID0+IHRoaXMuYXJlVmFsdWVzRXF1YWwoaXRlbSwgYXJyMltpbmRleF0pKTsgLy8gU28gc8OhbmggdHLDqm4gdOG7q25nIHBo4bqnbiB04butIGPhu6dhIGFycmF5XG4gICAgfVxuXG4gICAgYXJlT2JqZWN0c0VxdWFsKG9iajE6IGFueSwgb2JqMjogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGtleXMxID0gT2JqZWN0LmtleXMob2JqMSk7XG4gICAgICAgIGNvbnN0IGtleXMyID0gT2JqZWN0LmtleXMob2JqMik7XG4gICAgICAgIGlmIChrZXlzMS5sZW5ndGggIT09IGtleXMyLmxlbmd0aCkgcmV0dXJuIGZhbHNlOyAvLyBLaMOhYyDEkeG7mSBkw6BpXG4gICAgICAgIHJldHVybiBrZXlzMS5ldmVyeShrZXkgPT5cbiAgICAgICAgICAgIG9iajIuaGFzT3duUHJvcGVydHkoa2V5KSAmJlxuICAgICAgICAgICAgdGhpcy5hcmVWYWx1ZXNFcXVhbChvYmoxW2tleV0sIG9iajJba2V5XSkgIC8vIFNvIHPDoW5oIHRyw6puIHThu6tuZyBwaOG6p24gdOG7rSBj4bunYSBvYmplY3RcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGlzTnVsbE9yRW1wdHkoaW5wdXQ6IGFueSkge1xuICAgICAgICBpZiAoaW5wdXQgIT09IHVuZGVmaW5lZCAmJiBpbnB1dCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0Lmxlbmd0aCA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbnB1dC50b1N0cmluZygpLnRyaW0oKSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHByaXZhdGUgYXN5bmMgc2F2ZSgpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkID0gYXdhaXQgdGhpcy52YWxpZGF0ZUZvcm1CYXNlKCk7XG4gICAgICAgIGlmICh2YWxpZGF0ZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxvZ1NldHRpbmcuaXNFbmFibGVMb2cpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubG9nU2V0dGluZy5pc0N1c3RvbUFsbCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmdldExvZ1ZhbHVlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGPhuqV1IGjDrG5oIHRow6ptXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vbkFmdGVyR2V0TG9nVmFsdWUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGEubG9nTWV0YURhdGEgPSB0aGlzLmxvZ1NldHRpbmcuYXJyVmFsdWVBZnRlclVwZGF0ZS5maWx0ZXIocCA9PiBwLnZpc2libGUpLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KHRoaXMubG9nU2V0dGluZy5hcnJWYWx1ZUFmdGVyVXBkYXRlLmZpbHRlcihwID0+IHAudmlzaWJsZSkpXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMub25CZWZvcmVTYXZlKCk7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJTYXZlRmlsZVVwbG9hZCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuYXV0b1NhdmUpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNGb3JtRWRpdCgpIHx8IHRoaXMuX2lzRm9ybVZpZXcoKSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uVXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX2lzRm9ybUFkZE5ldygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub25JbnNlcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZvcm0gdmlldywgZG8gbm90aGluZ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlTWFudWFsU2F2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVNYW51YWxTYXZlKCkge1xuXG4gICAgfVxuXG4gICAgdHJpZ2dlclNhdmVGaWxlVXBsb2FkKCkge1xuICAgICAgICB0aGlzLnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuQ09NTU9OLlNBVkVfRklMRV9JTl9GT1JNKTtcbiAgICB9XG5cbiAgICBhc3luYyBfZ2V0UmVzdWx0VmFsaWRhdGUoKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnZhbGlkYXRlRm9ybUJhc2UoKTtcbiAgICB9XG5cbiAgICBhc3luYyB2YWxpZGF0ZUZvcm0ocmVzdWx0VmFsaWRhdGVCYXNlOiBib29sZWFuKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVGb3JtQmFzZSgpIHtcbiAgICAgICAgbGV0IHJlc3VsdFZhbGlkYXRlQmFzZSA9IHRydWU7XG4gICAgICAgIC8vIEPDsyB0aOG7gyBjw7MgZm9ybSBrIGPDsyBjcnVkLWZvcm0gKFbDrCBsw6AgZm9ybSBtYXN0ZXIgY+G7p2EgY8OhYyBmb3JtIGNvbilcbiAgICAgICAgaWYgKHRoaXMuY3J1ZEZvcm0pIHtcbiAgICAgICAgICAgIHJlc3VsdFZhbGlkYXRlQmFzZSA9IGF3YWl0IHRoaXMuY3J1ZEZvcm0udmFsaWRhdGVGb3JtKHRoaXMuc2V0VmFsaWRhdGVGb3JtKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHRWYWxpZGF0ZSA9IGF3YWl0IHRoaXMudmFsaWRhdGVGb3JtKHJlc3VsdFZhbGlkYXRlQmFzZSk7XG4gICAgICAgIC8vIELhu48gY2hlY2sgdmFsaWQgZm9ybSBjw7RuZyB2aeG7h2MuIG7hur91IG5oxrAgZm9ybSBjw7RuZyB2aeG7h2Mga2jDtG5nIHZhbGlkIHRow6wga2jDtG5nIHThu7EgxJHhu5luZyB04bqhbyBjw7RuZyB2aeG7h2NcbiAgICAgICAgLy8gaWYgKHRoaXMuZHluYW1pY0NvbnRyb2xbRmllbGREZWZpbmVJc1Rhc2tGb3JtQ29udHJvbF1cbiAgICAgICAgLy8gICAgICYmIHRoaXMuZHluYW1pY0NvbnRyb2xbRmllbGREZWZpbmVJc1Rhc2tGb3JtQ29udHJvbF0uX2NvbXBvbmVudFxuICAgICAgICAvLyApIHtcbiAgICAgICAgLy8gICAgIGNvbnN0IHRhc2tGb3JtID0gdGhpcy5keW5hbWljQ29udHJvbFtGaWVsZERlZmluZUlzVGFza0Zvcm1Db250cm9sXS5fY29tcG9uZW50O1xuICAgICAgICAvLyAgICAgY29uc3QgcmVzdWx0VmFsaWRhdGVGb3JtVGFzayA9IGF3YWl0IHRhc2tGb3JtLl9nZXRSZXN1bHRWYWxpZGF0ZSgpO1xuICAgICAgICAvLyAgICAgcmVzdWx0VmFsaWRhdGUgPSByZXN1bHRWYWxpZGF0ZUZvcm1UYXNrICYmIHJlc3VsdFZhbGlkYXRlO1xuICAgICAgICAvLyB9XG4gICAgICAgIHJldHVybiByZXN1bHRWYWxpZGF0ZSAmJiByZXN1bHRWYWxpZGF0ZUJhc2U7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlRm9ybUNvbnRyb2woZmllbGRQYXRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNydWRGb3JtLnZhbGlkYXRlRm9ybUNvbnRyb2woZmllbGRQYXRoKTtcbiAgICB9XG5cbiAgICBfY2xlYW5Gb3JtKCkge1xuICAgICAgICB0aGlzLmNydWRGb3JtLmNsZWFuKCk7XG4gICAgfVxuXG4gICAgX3RyaWdnZXJDb250cm9sQ2hhbmdlKGZpZWxkUGF0aCkge1xuICAgICAgICB0aGlzLmNydWRGb3JtLnRyaWdnZXJDaGFuZ2UoZmllbGRQYXRoKTtcbiAgICB9XG5cbiAgICBvbkJlZm9yZVNhdmUoKTogdm9pZCB8IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIH1cblxuICAgIG9uQWZ0ZXJTYXZlKHJlc3BvbnNlOiBSZXNwb25zZVJlc3VsdCk6IHZvaWQgfCBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB9XG5cblxuICAgIGFzeW5jIG9uQWZ0ZXJHZXREZXRhaWwoZGF0YT86IGFueVtdKSB7XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIG9uSW5zZXJ0KCkge1xuICAgICAgICB0aGlzLnNldERlZmF1bHRWYWx1ZSh0aGlzLm1vZGVsLmRhdGEpO1xuICAgICAgICBpZiAodGhpcy5keW5hbWljQ29udHJvbFtGaWVsZERlZmluZUlzVGFza0Zvcm1Db250cm9sXVxuICAgICAgICAgICAgJiYgdGhpcy5keW5hbWljQ29udHJvbFtGaWVsZERlZmluZUlzVGFza0Zvcm1Db250cm9sXS5fY29tcG9uZW50XG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgdGFza0Zvcm0gPSB0aGlzLmR5bmFtaWNDb250cm9sW0ZpZWxkRGVmaW5lSXNUYXNrRm9ybUNvbnRyb2xdLl9jb21wb25lbnQ7XG4gICAgICAgICAgICBjb25zdCByZXN1bHRWYWxpZGF0ZUZvcm1UYXNrID0gYXdhaXQgdGFza0Zvcm0uX2dldFJlc3VsdFZhbGlkYXRlKCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0VmFsaWRhdGVGb3JtVGFzaykge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YS5pdGVtQ29uZ1ZpZWMgPSB0YXNrRm9ybS5tb2RlbC5kYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmRhdGEuY3JlYXRlVGFza0luc3RlYWQpIHtcbiAgICAgICAgICAgIC8vIHJlc2V0IGZpZWxkIF9Xb3JrZmxvd0NvZGUgxJHhu4MgYmFja2VuZCBraMO0bmcgY2jhuqF5IHF1eSB0csOsbmggYuG6o24gZ2hpXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGFbRmllbGRXb3JrZmxvd0NvZGVJbkNydWRGb3JtXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgdGhpcy5jcmVhdGVDb25maXJtSWZSZXF1aXJlKCk7XG4gICAgICAgIGlmICghY29uZmlybWVkKSByZXR1cm47XG4gICAgICAgIGF3YWl0IHRoaXMuX2luc2VydCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQ29uZmlybUlmUmVxdWlyZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMubWVzc2FnZUNvbmZpcm1TYXZlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dDb25maXJtKHRoaXMubWVzc2FnZUNvbmZpcm1TYXZlKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcyh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXModHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2luc2VydCgpIHtcbiAgICAgICAgdGhpcy5nZXRQcm9taXNlQWN0aW9uSW5zZXJ0KClcbiAgICAgICAgICAgIC50aGVuKGFzeW5jIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnN1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlQWZ0ZXJJbnNlcnQocmVzcG9uc2Uuc3VjY2VzcywgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YS5pZCA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub25BZnRlclNhdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2F2ZWQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogdGhpcy5tb2RlbC5kYXRhLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDbG9zZUZvcm06IHRoaXMuaXNDbG9zZUZvcm1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUluc2VydEVycm9yKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvci5lcnJvci5zdWNjZXNzICYmIGVycm9yLmVycm9yLmVycm9yQ2hlY2tFeGlzdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnN1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnN1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlQWZ0ZXJJbnNlcnQoZmFsc2UsIGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFByb21pc2VBY3Rpb25JbnNlcnQoKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnBvc3QodGhpcy5tb2RlbC5kYXRhLCB0aGlzLmluc2VydFBsdXNVcmwpO1xuICAgIH1cblxuICAgIGhhbmRsZUluc2VydEVycm9yKHJlc3BvbnNlPzogYW55KSB7XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIG9uVXBkYXRlKCkge1xuICAgICAgICB0aGlzLnNldERlZmF1bHRWYWx1ZSh0aGlzLm1vZGVsLmRhdGEpO1xuICAgICAgICB0aGlzLmdldFByb21pc2VBY3Rpb25VcGRhdGUoKVxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd01lc3NhZ2VBZnRlclVwZGF0ZShyZXNwb25zZS5zdWNjZXNzLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vbkFmdGVyU2F2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25TYXZlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLm1vZGVsLmRhdGEuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDbG9zZUZvcm06IHRoaXMuaXNDbG9zZUZvcm1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVVwZGF0ZUVycm9yKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvci5lcnJvci5zdWNjZXNzICYmIGVycm9yLmVycm9yLmVycm9yQ2hlY2tFeGlzdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnN1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnN1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlQWZ0ZXJVcGRhdGUoZmFsc2UsIGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmxvZ1NldHRpbmcuaXNFbmFibGVMb2cpIHtcbiAgICAgICAgICAgIHRoaXMubG9nU2V0dGluZy5hcnJWYWx1ZUFmdGVyVXBkYXRlID0gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVVcGRhdGVFcnJvcihyZXNwb25zZT86IGFueSkge1xuXG4gICAgfVxuXG4gICAgZ2V0UHJvbWlzZUFjdGlvblVwZGF0ZSgpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UucHV0KHRoaXMubW9kZWwuZGF0YS5pZC50b1N0cmluZygpLCB0aGlzLm1vZGVsLmRhdGEsIHRoaXMudXBkYXRlUGx1c1VybCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREZWZhdWx0VmFsdWUobW9kZWwpIHtcbiAgICAgICAgaWYgKG1vZGVsLmlzQnVpbGRJbiA9PT0gbnVsbCB8fCBtb2RlbC5pc0J1aWxkSW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbW9kZWwuaXNCdWlsZEluID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kZWwuaXNCdWlsZEluQWxsID09PSBudWxsIHx8IG1vZGVsLmlzQnVpbGRJbkFsbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBtb2RlbC5pc0J1aWxkSW5BbGwgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYXJlbnRTZXR0aW5nPy5lbmFibGVSZW9yZGVyUm93ICYmIHRoaXMucGFyZW50U2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnRGaWVsZCkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhW3RoaXMucGFyZW50U2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnRGaWVsZF0gPz89IHRoaXMucGFyZW50TW9kZWwudG90YWwgKyAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2hvd01lc3NhZ2VBZnRlckluc2VydChpc1N1Y2Nlc3M6IGJvb2xlYW4gPSBmYWxzZSwgZXJyb3I/OiBhbnkpIHtcbiAgICAgICAgaWYgKGlzU3VjY2Vzcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm1lc3NhZ2VJbnNlcnRTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlSW5zZXJ0U3VjY2VzcyA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnTUVTU0FHRS5JTlNFUlRfREFUQV9TVUNDRVNTJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5tZXNzYWdlSW5zZXJ0U3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2Vzcyh0aGlzLm1lc3NhZ2VJbnNlcnRTdWNjZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVzcG9uc2VFcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzaG93TWVzc2FnZUFmdGVyVXBkYXRlKGlzU3VjY2VzczogYm9vbGVhbiA9IGZhbHNlLCBlcnJvcj86IGFueSkge1xuICAgICAgICBpZiAoaXNTdWNjZXNzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubWVzc2FnZVVwZGF0ZVN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VVcGRhdGVTdWNjZXNzID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdNRVNTQUdFLlVQREFURV9EQVRBX1NVQ0NFU1MnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1lc3NhZ2VVcGRhdGVTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKHRoaXMubWVzc2FnZVVwZGF0ZVN1Y2Nlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVSZXNwb25zZUVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZVJlc3BvbnNlRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChlcnJvci5lcnJvcikge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKGVycm9yLmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ8OzIGzhu5dpIHjhuqN5IHJhLCBsacOqbiBo4buHIHF14bqjbiB0cuG7iyB2acOqbiDEkeG7gyBiaeG6v3QgdGjDqm0gY2hpIHRp4bq/dCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgb25Gb3JtSW5pdGlhbGl6ZWQoZGF0YTogRXZlbnREYXRhKSB7XG5cbiAgICB9XG5cbiAgICBfaGFuZGxlQWZ0ZXJUcmluaEt5KGV2dCkge1xuICAgICAgICBkZWxldGUgdGhpcy5tb2RlbC5kYXRhW0tleUZsYXNoU2hvd107XG4gICAgICAgIHRoaXMuX2hhbmRsZUNhbmNlbChldnQpO1xuICAgIH1cblxuICAgIF9oYW5kbGVTYXZlKGV2dCkge1xuICAgICAgICBpZiAodGhpcy5tb2RlbC5zdWJtaXR0aW5nKSByZXR1cm47XG4gICAgICAgIHRoaXMubW9kZWwuc3VibWl0dGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KGV2dCk7XG4gICAgfVxuXG4gICAgX2hhbmRsZUNhbmNlbChldnQpIHtcbiAgICAgICAgdGhpcy5vbkNhbmNlbC5lbWl0KGV2dCk7XG4gICAgfVxuXG4gICAgX2hhbmRsZU1lc3NhZ2UoZXZ0KSB7XG4gICAgICAgIHRoaXMub25NZXNzYWdlLmVtaXQoZXZ0KTtcbiAgICB9XG5cbiAgICBfc2V0RGlzYWJsZUNvbnRyb2wodW5pcXVlRmllbGQsIGlzRGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5jcnVkRm9ybS5mb3JtQ29udHJvbHNbdW5pcXVlRmllbGRdLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICBfc2V0SGlkZGVuQ29udHJvbCh1bmlxdWVGaWVsZCwgaXNIaWRkZW4pIHtcbiAgICAgICAgdGhpcy5jcnVkRm9ybS5mb3JtQ29udHJvbHNbdW5pcXVlRmllbGRdLmhpZGRlbiA9IGlzSGlkZGVuO1xuICAgIH1cblxuICAgIF9nZXRGb3JtU3RhdGUoKTogRm9ybVN0YXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuZm9ybVN0YXRlO1xuICAgIH1cblxuICAgIF9pc0Zvcm1BZGROZXcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRGb3JtU3RhdGUoKSA9PSBGb3JtU3RhdGUuQUREO1xuICAgIH1cblxuICAgIF9pc0Zvcm1FZGl0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Rm9ybVN0YXRlKCkgPT0gRm9ybVN0YXRlLkVESVQ7XG4gICAgfVxuXG4gICAgX2lzRm9ybVZpZXcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRGb3JtU3RhdGUoKSA9PSBGb3JtU3RhdGUuVklFVztcbiAgICB9XG59XG4iXX0=