@hmcts/ccd-case-ui-toolkit 6.13.0-test1 → 6.13.9

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.
Files changed (34) hide show
  1. package/bundles/hmcts-ccd-case-ui-toolkit.umd.js +484 -256
  2. package/bundles/hmcts-ccd-case-ui-toolkit.umd.js.map +1 -1
  3. package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js +1 -1
  4. package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js.map +1 -1
  5. package/esm2015/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.js +20 -3
  6. package/esm2015/lib/shared/components/palette/case-file-view/components/case-file-view-folder-selector/case-file-view-folder-selector.component.js +1 -1
  7. package/esm2015/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.js +30 -19
  8. package/esm2015/lib/shared/components/palette/case-flag/write-case-flag-field.component.js +35 -24
  9. package/esm2015/lib/shared/components/palette/datetime-picker/datetime-picker.component.js +10 -3
  10. package/esm2015/lib/shared/components/search-result/search-result.component.js +10 -14
  11. package/esm2015/lib/shared/directives/conditional-show/domain/conditional-show.model.js +103 -200
  12. package/esm2015/lib/shared/directives/conditional-show/services/condition-parser.service.js +201 -0
  13. package/esm2015/lib/shared/directives/conditional-show/services/condition.peg.js +103 -0
  14. package/esm2015/lib/shared/domain/case-flag/hmcts-service-detail.model.js +1 -1
  15. package/esm2015/lib/shared/services/case-flag/case-flag-refdata.service.js +25 -4
  16. package/fesm2015/hmcts-ccd-case-ui-toolkit.js +500 -236
  17. package/fesm2015/hmcts-ccd-case-ui-toolkit.js.map +1 -1
  18. package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts +1 -0
  19. package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts.map +1 -1
  20. package/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.d.ts +3 -1
  21. package/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.d.ts.map +1 -1
  22. package/lib/shared/components/palette/case-flag/write-case-flag-field.component.d.ts +2 -0
  23. package/lib/shared/components/palette/case-flag/write-case-flag-field.component.d.ts.map +1 -1
  24. package/lib/shared/components/palette/datetime-picker/datetime-picker.component.d.ts.map +1 -1
  25. package/lib/shared/directives/conditional-show/domain/conditional-show.model.d.ts +13 -30
  26. package/lib/shared/directives/conditional-show/domain/conditional-show.model.d.ts.map +1 -1
  27. package/lib/shared/directives/conditional-show/services/condition-parser.service.d.ts +30 -0
  28. package/lib/shared/directives/conditional-show/services/condition-parser.service.d.ts.map +1 -0
  29. package/lib/shared/directives/conditional-show/services/condition.peg.d.ts +3 -0
  30. package/lib/shared/directives/conditional-show/services/condition.peg.d.ts.map +1 -0
  31. package/lib/shared/domain/case-flag/hmcts-service-detail.model.d.ts.map +1 -1
  32. package/lib/shared/services/case-flag/case-flag-refdata.service.d.ts +14 -3
  33. package/lib/shared/services/case-flag/case-flag-refdata.service.d.ts.map +1 -1
  34. package/package.json +1 -1
@@ -59,7 +59,7 @@ function WriteCaseFlagFieldComponent_div_1_ng_container_5_Template(rf, ctx) { if
59
59
  } if (rf & 2) {
60
60
  const ctx_r8 = i0.ɵɵnextContext(2);
61
61
  i0.ɵɵadvance(1);
62
- i0.ɵɵproperty("formGroup", ctx_r8.caseFlagParentFormGroup)("jurisdiction", ctx_r8.jurisdiction);
62
+ i0.ɵɵproperty("formGroup", ctx_r8.caseFlagParentFormGroup)("jurisdiction", ctx_r8.jurisdiction)("caseTypeId", ctx_r8.caseTypeId)("hmctsServiceId", ctx_r8.hmctsServiceId);
63
63
  } }
64
64
  function WriteCaseFlagFieldComponent_div_1_ng_container_6_Template(rf, ctx) { if (rf & 1) {
65
65
  const _r17 = i0.ɵɵgetCurrentView();
@@ -93,7 +93,7 @@ function WriteCaseFlagFieldComponent_div_1_Template(rf, ctx) { if (rf & 1) {
93
93
  i0.ɵɵtext(3);
94
94
  i0.ɵɵelementEnd();
95
95
  i0.ɵɵtemplate(4, WriteCaseFlagFieldComponent_div_1_ng_container_4_Template, 2, 2, "ng-container", 11);
96
- i0.ɵɵtemplate(5, WriteCaseFlagFieldComponent_div_1_ng_container_5_Template, 2, 2, "ng-container", 11);
96
+ i0.ɵɵtemplate(5, WriteCaseFlagFieldComponent_div_1_ng_container_5_Template, 2, 4, "ng-container", 11);
97
97
  i0.ɵɵtemplate(6, WriteCaseFlagFieldComponent_div_1_ng_container_6_Template, 2, 3, "ng-container", 11);
98
98
  i0.ɵɵtemplate(7, WriteCaseFlagFieldComponent_div_1_ng_container_7_Template, 2, 2, "ng-container", 11);
99
99
  i0.ɵɵelementEnd();
@@ -192,29 +192,40 @@ export class WriteCaseFlagFieldComponent extends AbstractFieldWriteComponent {
192
192
  }
193
193
  }), true);
194
194
  this.createFlagCaption = CaseFlagText.CAPTION;
195
- // Get the jurisdiction from the CaseView object in the snapshot data (required for retrieving the available flag
195
+ // Get the case type ID from the CaseView object in the snapshot data (required for retrieving the available flag
196
196
  // types for a case)
197
- if (this.route.snapshot.data.case && this.route.snapshot.data.case.case_type &&
198
- this.route.snapshot.data.case.case_type.jurisdiction) {
199
- this.jurisdiction = this.route.snapshot.data.case.case_type.jurisdiction.id;
197
+ if (this.route.snapshot.data.case && this.route.snapshot.data.case.case_type) {
198
+ this.caseTypeId = this.route.snapshot.data.case.case_type.id;
199
+ // Get the jurisdiction (required for retrieving the available flag types if unable to determine using case type ID)
200
+ if (this.route.snapshot.data.case.case_type.jurisdiction) {
201
+ this.jurisdiction = this.route.snapshot.data.case.case_type.jurisdiction.id;
202
+ }
200
203
  }
201
204
  // Extract all flags-related data from the CaseEventTrigger object in the snapshot data
202
- if (this.route.snapshot.data.eventTrigger && this.route.snapshot.data.eventTrigger.case_fields) {
203
- this.flagsData = (this.route.snapshot.data.eventTrigger.case_fields)
204
- .reduce((flags, caseField) => {
205
- return FieldsUtils.extractFlagsDataFromCaseField(flags, caseField, caseField.id, caseField);
206
- }, []);
207
- // Set boolean indicating the display_context_parameter is "update"
208
- this.isDisplayContextParameterUpdate =
209
- this.setDisplayContextParameterUpdate((this.route.snapshot.data.eventTrigger.case_fields));
210
- // Set starting field state
211
- this.fieldState = this.isDisplayContextParameterUpdate ? CaseFlagFieldState.FLAG_MANAGE_CASE_FLAGS : CaseFlagFieldState.FLAG_LOCATION;
212
- // Get case title, to be used by child components
213
- this.caseEditDataService.caseTitle$.subscribe({
214
- next: title => {
215
- this.caseTitle = title.length > 0 ? title : this.caseNameMissing;
216
- }
217
- });
205
+ if (this.route.snapshot.data.eventTrigger) {
206
+ // Get the HMCTSServiceId from supplementary data, if it exists (required for retrieving the available flag types in
207
+ // the first instance, only falling back on case type ID or jurisidiction if it's not present)
208
+ if (this.route.snapshot.data.eventTrigger.supplementary_data
209
+ && this.route.snapshot.data.eventTrigger.supplementary_data.HMCTSServiceId) {
210
+ this.hmctsServiceId = this.route.snapshot.data.eventTrigger.supplementary_data.HMCTSServiceId;
211
+ }
212
+ if (this.route.snapshot.data.eventTrigger.case_fields) {
213
+ this.flagsData = (this.route.snapshot.data.eventTrigger.case_fields)
214
+ .reduce((flags, caseField) => {
215
+ return FieldsUtils.extractFlagsDataFromCaseField(flags, caseField, caseField.id, caseField);
216
+ }, []);
217
+ // Set boolean indicating the display_context_parameter is "update"
218
+ this.isDisplayContextParameterUpdate =
219
+ this.setDisplayContextParameterUpdate((this.route.snapshot.data.eventTrigger.case_fields));
220
+ // Set starting field state
221
+ this.fieldState = this.isDisplayContextParameterUpdate ? CaseFlagFieldState.FLAG_MANAGE_CASE_FLAGS : CaseFlagFieldState.FLAG_LOCATION;
222
+ // Get case title, to be used by child components
223
+ this.caseEditDataService.caseTitle$.subscribe({
224
+ next: title => {
225
+ this.caseTitle = title.length > 0 ? title : this.caseNameMissing;
226
+ }
227
+ });
228
+ }
218
229
  }
219
230
  }
220
231
  setDisplayContextParameterUpdate(caseFields) {
@@ -447,7 +458,7 @@ export class WriteCaseFlagFieldComponent extends AbstractFieldWriteComponent {
447
458
  }
448
459
  }
449
460
  WriteCaseFlagFieldComponent.ɵfac = function WriteCaseFlagFieldComponent_Factory(t) { return new (t || WriteCaseFlagFieldComponent)(i0.ɵɵdirectiveInject(i1.ActivatedRoute), i0.ɵɵdirectiveInject(i2.CaseEditDataService)); };
450
- WriteCaseFlagFieldComponent.ɵcmp = i0.ɵɵdefineComponent({ type: WriteCaseFlagFieldComponent, selectors: [["ccd-write-case-flag-field"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 3, consts: [["class", "govuk-error-summary", "aria-labelledby", "error-summary-title", "role", "alert", "tabindex", "-1", "data-module", "govuk-error-summary", 4, "ngIf"], ["class", "form-group", 3, "formGroup", 4, "ngIf"], ["aria-labelledby", "error-summary-title", "role", "alert", "tabindex", "-1", "data-module", "govuk-error-summary", 1, "govuk-error-summary"], ["id", "error-summary-title", 1, "govuk-error-summary__title"], ["class", "govuk-error-summary__body", 4, "ngFor", "ngForOf"], [1, "govuk-error-summary__body"], [1, "govuk-list", "govuk-error-summary__list"], [1, "validation-error", 3, "click"], [1, "form-group", 3, "formGroup"], [1, "govuk-form-group", 3, "ngSwitch"], ["id", "create-flag-caption", 1, "govuk-caption-l", 3, "ngClass"], [4, "ngSwitchCase"], [3, "formGroup", "flagsData", "caseFlagStateEmitter"], [3, "formGroup", "jurisdiction", "caseFlagStateEmitter", "flagCommentsOptionalEmitter"], [3, "formGroup", "languages", "flagCode", "caseFlagStateEmitter"], [3, "formGroup", "optional", "caseFlagStateEmitter"], [3, "formGroup", "flagsData", "caseTitle", "caseFlagStateEmitter"], [3, "formGroup", "selectedFlag", "caseFlagStateEmitter"]], template: function WriteCaseFlagFieldComponent_Template(rf, ctx) { if (rf & 1) {
461
+ WriteCaseFlagFieldComponent.ɵcmp = i0.ɵɵdefineComponent({ type: WriteCaseFlagFieldComponent, selectors: [["ccd-write-case-flag-field"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 3, consts: [["class", "govuk-error-summary", "aria-labelledby", "error-summary-title", "role", "alert", "tabindex", "-1", "data-module", "govuk-error-summary", 4, "ngIf"], ["class", "form-group", 3, "formGroup", 4, "ngIf"], ["aria-labelledby", "error-summary-title", "role", "alert", "tabindex", "-1", "data-module", "govuk-error-summary", 1, "govuk-error-summary"], ["id", "error-summary-title", 1, "govuk-error-summary__title"], ["class", "govuk-error-summary__body", 4, "ngFor", "ngForOf"], [1, "govuk-error-summary__body"], [1, "govuk-list", "govuk-error-summary__list"], [1, "validation-error", 3, "click"], [1, "form-group", 3, "formGroup"], [1, "govuk-form-group", 3, "ngSwitch"], ["id", "create-flag-caption", 1, "govuk-caption-l", 3, "ngClass"], [4, "ngSwitchCase"], [3, "formGroup", "flagsData", "caseFlagStateEmitter"], [3, "formGroup", "jurisdiction", "caseTypeId", "hmctsServiceId", "caseFlagStateEmitter", "flagCommentsOptionalEmitter"], [3, "formGroup", "languages", "flagCode", "caseFlagStateEmitter"], [3, "formGroup", "optional", "caseFlagStateEmitter"], [3, "formGroup", "flagsData", "caseTitle", "caseFlagStateEmitter"], [3, "formGroup", "selectedFlag", "caseFlagStateEmitter"]], template: function WriteCaseFlagFieldComponent_Template(rf, ctx) { if (rf & 1) {
451
462
  i0.ɵɵtemplate(0, WriteCaseFlagFieldComponent_div_0_Template, 4, 1, "div", 0);
452
463
  i0.ɵɵtemplate(1, WriteCaseFlagFieldComponent_div_1_Template, 8, 10, "div", 1);
453
464
  i0.ɵɵtemplate(2, WriteCaseFlagFieldComponent_div_2_Template, 4, 4, "div", 1);
@@ -466,4 +477,4 @@ WriteCaseFlagFieldComponent.ɵcmp = i0.ɵɵdefineComponent({ type: WriteCaseFlag
466
477
  styleUrls: ['./write-case-flag-field.component.scss']
467
478
  }]
468
479
  }], function () { return [{ type: i1.ActivatedRoute }, { type: i2.CaseEditDataService }]; }, null); })();
469
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtY2FzZS1mbGFnLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL2Nhc2UtZmxhZy93cml0ZS1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1mbGFnL3dyaXRlLWNhc2UtZmxhZy1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQW1CLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUU3RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFM0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7Ozs7OztJQ0h6RSw4QkFBa0Y7SUFDaEYsNkJBQWlEO0lBQy9DLDBCQUFJO0lBQ0YsNEJBQW1GO0lBQWhGLDJRQUFzRDtJQUEwQixZQUE0QjtJQUFBLGlCQUFJO0lBQ3JILGlCQUFLO0lBQ1AsaUJBQUs7SUFDUCxpQkFBTTs7O0lBSG1GLGVBQTRCO0lBQTVCLGlEQUE0Qjs7O0lBUHZILDhCQUFxSztJQUNuSyw2QkFBZ0U7SUFDOUQsb0NBQ0Y7SUFBQSxpQkFBSztJQUNMLGtGQU1NO0lBQ1IsaUJBQU07OztJQVAwQixlQUFnQjtJQUFoQiw4Q0FBZ0I7Ozs7SUFhNUMsNkJBQStEO0lBQzdELG9EQUMwRDtJQUF4RCwwUkFBdUQ7SUFBQyxpQkFBMkI7SUFDdkYsMEJBQWU7OztJQUZhLGVBQXFDO0lBQXJDLDBEQUFxQywrQkFBQTs7OztJQUdqRSw2QkFBMkQ7SUFDekQsZ0RBRXdFO0lBRHRFLHNSQUF1RCw4UkFBQTtJQUNlLGlCQUF1QjtJQUNqRywwQkFBZTs7O0lBSFMsZUFBcUM7SUFBckMsMERBQXFDLHFDQUFBOzs7O0lBSTdELDZCQUEyRTtJQUN6RSwyREFDMEQ7SUFBeEQsaVNBQXVEO0lBQUMsaUJBQWtDO0lBQzlGLDBCQUFlOzs7SUFGb0IsZUFBcUM7SUFBckMsMERBQXFDLGtDQUFBLDZCQUFBOzs7O0lBR3hFLDZCQUErRDtJQUM3RCw0Q0FDMEQ7SUFBeEQsa1JBQXVEO0lBQUMsaUJBQW1CO0lBQy9FLDBCQUFlOzs7SUFGSyxlQUFxQztJQUFyQywyREFBcUMsMENBQUE7Ozs7SUFuQjdELDhCQUF5RjtJQUN2Riw4QkFBc0Q7SUFDcEQsK0JBQWlIO0lBQy9HLFlBQ0Y7SUFBQSxpQkFBTTtJQUNOLHFHQUdlO0lBQ2YscUdBSWU7SUFDZixxR0FHZTtJQUNmLHFHQUdlO0lBQ2pCLGlCQUFNO0lBQ1IsaUJBQU07OztJQXZCMkQsNENBQXVCO0lBQ3hELGVBQXVCO0lBQXZCLDRDQUF1QjtJQUNHLGVBQTBEO0lBQTFELHFGQUEwRDtJQUM5RyxlQUNGO0lBREUseURBQ0Y7SUFDZSxlQUE4QztJQUE5QyxzRUFBOEM7SUFJOUMsZUFBMEM7SUFBMUMsa0VBQTBDO0lBSzFDLGVBQTBEO0lBQTFELGtGQUEwRDtJQUkxRCxlQUE4QztJQUE5QyxzRUFBOEM7Ozs7SUFRN0QsNkJBQXdFO0lBQ3RFLGlEQUMwRDtJQUF4RCx1UkFBdUQ7SUFBQyxpQkFBd0I7SUFDcEYsMEJBQWU7OztJQUZVLGVBQXFDO0lBQXJDLDJEQUFxQyxnQ0FBQSxnQ0FBQTs7OztJQUc5RCw2QkFBNkQ7SUFDM0QsMkNBQzBEO0lBQXhELGlSQUF1RDtJQUFDLGlCQUFrQjtJQUM5RSwwQkFBZTs7O0lBRkksZUFBcUM7SUFBckMsMkRBQXFDLHNDQUFBOzs7SUFQNUQsOEJBQXdGO0lBQ3RGLDhCQUFzRDtJQUNwRCxxR0FHZTtJQUNmLHFHQUdlO0lBQ2pCLGlCQUFNO0lBQ1IsaUJBQU07OztJQVgwRCw0Q0FBdUI7SUFDdkQsZUFBdUI7SUFBdkIsNENBQXVCO0lBQ3BDLGVBQXVEO0lBQXZELCtFQUF1RDtJQUl2RCxlQUE0QztJQUE1QyxvRUFBNEM7O0FENUIvRCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsMkJBQTJCO0lBMEIxRSxZQUNtQixLQUFxQixFQUNyQixtQkFBd0M7UUFFekQsS0FBSyxFQUFFLENBQUM7UUFIUyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBeEJwRCx1QkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUN4QyxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFLbkMsNEJBQXVCLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUMseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBTTdCLGlCQUFZLEdBQW1DLElBQUksQ0FBQztRQUduRCwrQkFBMEIsR0FBRyxLQUFLLENBQUM7UUFDMUIsZUFBVSxHQUFHLG1CQUFtQixDQUFDO1FBQ2xELDBEQUEwRDtRQUN6QyxzQkFBaUIsR0FBRyxRQUFRLENBQUM7UUFDOUIsb0JBQWUsR0FBRyxtQkFBbUIsQ0FBQztJQU90RCxDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ3JELGtIQUFrSDtRQUNsSCxpSEFBaUg7UUFDakgsb0NBQW9DO1FBQ3BDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQzNELElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDakQ7UUFDRCwrR0FBK0c7UUFDL0csSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksU0FBUyxDQUFDLEVBQUUsRUFBRTtZQUN0RCxVQUFVLEVBQUUsQ0FBQyxDQUFrQixFQUFtQyxFQUFFO2dCQUNsRSxJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFO29CQUNwQyxtR0FBbUc7b0JBQ25HLE9BQU8sRUFBQyw2QkFBNkIsRUFBRSxJQUFJLEVBQUMsQ0FBQztpQkFDOUM7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1NBQ0YsQ0FBQyxFQUFFLElBQUksQ0FBYyxDQUFDO1FBRXZCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDO1FBQzlDLGlIQUFpSDtRQUNqSCxvQkFBb0I7UUFDcEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUztZQUMxRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUU7WUFDdEQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1NBQzdFO1FBQ0QsdUZBQXVGO1FBQ3ZGLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRTtZQUM5RixJQUFJLENBQUMsU0FBUyxHQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQWlCO2lCQUNsRixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUU7Z0JBQzNCLE9BQU8sV0FBVyxDQUFDLDZCQUE2QixDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM5RixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFVCxtRUFBbUU7WUFDbkUsSUFBSSxDQUFDLCtCQUErQjtnQkFDbEMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQWdCLENBQUMsQ0FBQztZQUU1RywyQkFBMkI7WUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUM7WUFDdEksaURBQWlEO1lBQ2pELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO2dCQUM1QyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUU7b0JBQ1osSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO2dCQUNuRSxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRU0sZ0NBQWdDLENBQUMsVUFBdUI7UUFDN0QsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUNwQixTQUFTLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUMseUJBQXlCLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVILENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxhQUE0QjtRQUN4RCxJQUFJLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUNyRCxxSEFBcUg7UUFDckgsbUhBQW1IO1FBQ25ILG1EQUFtRDtRQUNuRCxJQUFJLGFBQWEsQ0FBQyx5QkFBeUIsS0FBSyxrQkFBa0IsQ0FBQyxhQUFhO2VBQzNFLGFBQWEsQ0FBQyxxQkFBcUI7ZUFDbkMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLG9CQUFvQixFQUFFO1lBQzdELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUMxRixJQUFJLENBQUMscUJBQXFCLEdBQUcsYUFBYSxDQUFDLHFCQUFxQixDQUFDO1NBQ2xFO1FBQ0QscUhBQXFIO1FBQ3JILHFFQUFxRTtRQUNyRSxJQUFJLGFBQWEsQ0FBQyx5QkFBeUIsS0FBSyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUU7WUFDNUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQztZQUN2QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsYUFBYSxDQUFDLG1CQUFtQixDQUFDO1lBQzdELElBQUksQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQztZQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUM7U0FDaEQ7UUFDRCxpSEFBaUg7UUFDakgsK0ZBQStGO1FBQy9GLElBQUksYUFBYSxDQUFDLHlCQUF5QixLQUFLLGtCQUFrQixDQUFDLHNCQUFzQjtlQUNwRixhQUFhLENBQUMsWUFBWTtlQUMxQixhQUFhLENBQUMsWUFBWSxDQUFDLG9CQUFvQixFQUFFO1lBQ3BELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDbEY7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUM7UUFDakQsSUFBSSxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDO1FBQy9DLDJGQUEyRjtRQUMzRixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNuQyw0R0FBNEc7WUFDNUcsZUFBZTtZQUNmLElBQUksYUFBYSxDQUFDLHlCQUF5QixLQUFLLGtCQUFrQixDQUFDLGFBQWE7Z0JBQzVFLGFBQWEsQ0FBQyx5QkFBeUIsS0FBSyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUU7Z0JBQzlFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUM5QixpSEFBaUg7Z0JBQ2pILHlGQUF5RjthQUMxRjtpQkFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFO2dCQUMxQyx3QkFBd0I7Z0JBQ3hCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQzNCO1NBQ0Y7SUFDSCxDQUFDO0lBRU0sa0JBQWtCO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUU7WUFDMUIsbUhBQW1IO1lBQ25ILG1IQUFtSDtZQUNuSCxZQUFZO1lBQ1osSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGtCQUFrQixDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQzFFLElBQUksQ0FBQyxVQUFVLEdBQUcsa0JBQWtCLENBQUMsYUFBYSxDQUFDO2FBQ3BEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzthQUNuQjtTQUNGO0lBQ0gsQ0FBQztJQUVNLHNCQUFzQjtRQUMzQiwyQ0FBMkM7UUFDM0MsUUFBUSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3ZCLEtBQUssa0JBQWtCLENBQUMsYUFBYTtnQkFDbkMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQzNCLE1BQU07WUFDUixLQUFLLGtCQUFrQixDQUFDLFdBQVc7Z0JBQ2pDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUM5QixNQUFNO1NBQ1Q7SUFDSCxDQUFDO0lBRU0sbUJBQW1CO1FBQ3hCLHFIQUFxSDtRQUNySCxtSEFBbUg7UUFDbkgsa0hBQWtIO1FBQ2xILGdGQUFnRjtRQUNoRixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNoQywyR0FBMkc7WUFDM0csK0NBQStDO1lBQy9DLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1lBQ3JDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztZQUNsRCxtSEFBbUg7WUFDbkgsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNqQyxXQUFXLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNqRztZQUNELElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUN0RCxNQUFNLG9CQUFvQixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQy9GLElBQUksb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQzdCLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUMvQzthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLG1CQUFtQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQ3JFLGlIQUFpSDtRQUNqSCxzQ0FBc0M7UUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDO1FBQzdELG1IQUFtSDtRQUNuSCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQy9HO1FBQ0Qsa0hBQWtIO1FBQ2xILG9CQUFvQjtRQUNwQixJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDeEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2hELG1CQUFtQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1NBQ2xFO1FBQ0QsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDbEQsbUJBQW1CLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztTQUNsQztRQUNELGdIQUFnSDtRQUNoSCxXQUFXO1FBQ1gsbUJBQW1CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsNkJBQTZCLEVBQUUsRUFBQyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVNLHNCQUFzQjtRQUMzQixvSEFBb0g7UUFDcEgsc0hBQXNIO1FBQ3RILGtIQUFrSDtRQUNsSCw4RUFBOEU7UUFDOUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDaEMsMkdBQTJHO1lBQzNHLDJEQUEyRDtZQUMzRCxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztZQUNyQyxJQUFJLGNBQWMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztZQUN4RCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsb0JBQW9CLENBQUM7WUFDbEQsbUhBQW1IO1lBQ25ILElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDakMsV0FBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3hFLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3BCLElBQUksY0FBYyxJQUFJLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsRUFBRTt3QkFDbEUsY0FBYyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDdkM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUNELElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLGNBQWMsSUFBSSxXQUFXLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEVBQUU7Z0JBQ3hILEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO29CQUNqQyxNQUFNLGtCQUFrQixHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzlGLElBQUksa0JBQWtCLEVBQUU7d0JBQ3RCLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxXQUFXOzRCQUNqRSxDQUFDLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLFdBQVc7NEJBQ3RDLENBQUMsQ0FBQyxJQUFJLENBQUM7d0JBQ1QsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQzt3QkFDMUQsVUFBVSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCOzRCQUMzRSxDQUFDLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLGdCQUFnQjs0QkFDM0MsQ0FBQyxDQUFDLElBQUksQ0FBQztxQkFDVjtnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLG1CQUFtQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUM1RCxpSEFBaUg7UUFDakgsc0NBQXNDO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUM7UUFDcEQsbUhBQW1IO1FBQ25ILElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDL0c7UUFDRCxJQUFJLG1CQUFtQixFQUFFO1lBQ3ZCLE1BQU0sa0JBQWtCLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDekQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdFLElBQUksa0JBQWtCLEVBQUU7Z0JBQ3RCLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxZQUFZO29CQUNwRixDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxZQUFZO29CQUNqRCxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNULGtCQUFrQixDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO2dCQUN4RixrQkFBa0IsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUN0RTtTQUNGO0lBQ0gsQ0FBQztJQUVNLGNBQWM7UUFDbkIsT0FBTyxJQUFJLENBQUMsK0JBQStCO1lBQ3pDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLGtCQUFrQixDQUFDLFdBQVc7WUFDcEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssa0JBQWtCLENBQUMsYUFBYSxDQUFDO0lBQzNELENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxTQUFpQjtRQUM3QyxJQUFJLFNBQVMsRUFBRTtZQUNiLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkQsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ3BFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNyQjtTQUNGO0lBQ0gsQ0FBQztJQUVNLDZCQUE2QixDQUFDLENBQU07UUFDekMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLDBCQUEwQixDQUFDLG9CQUE0QjtRQUM1RCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFjLENBQUM7SUFDOUYsQ0FBQztJQUVNLDZCQUE2QjtRQUNsQyxPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ25CLG9GQUFvRjtZQUNwRixZQUFZLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxrQkFBa0I7Z0JBQ2pFLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQUs7Z0JBQzdELENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLG1CQUFtQjtvQkFDdEQsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsbUJBQW1CO29CQUN4RCxDQUFDLENBQUMsSUFBSTtZQUNWLHdFQUF3RTtZQUN4RSxVQUFVLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxrQkFBa0I7Z0JBQy9ELENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEdBQUc7Z0JBQzNELENBQUMsQ0FBQyxJQUFJO1lBQ1IsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyx3QkFBd0I7Z0JBQ3ZILENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLHdCQUF3QjtnQkFDN0QsQ0FBQyxDQUFDLElBQUk7WUFDUixXQUFXLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ3JILGVBQWUsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtZQUN6QyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDbkIsZUFBZSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ3hELFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU07U0FDaEIsQ0FBQztJQUNsQixDQUFDO0lBRU0sc0JBQXNCO1FBQzNCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlCLGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkQsQ0FBQzs7c0dBaFVVLDJCQUEyQjtnRUFBM0IsMkJBQTJCO1FDZHhDLDRFQVdNO1FBQ04sNkVBdUJNO1FBQ04sNEVBV007O1FBL0NBLG1EQUE4QjtRQVk5QixlQUFzQztRQUF0QywyREFBc0M7UUF3QnRDLGVBQXFDO1FBQXJDLDBEQUFxQzs7dUZEdEI5QiwyQkFBMkI7Y0FMdkMsU0FBUztlQUFDO2dCQUNULFFBQVEsRUFBRSwyQkFBMkI7Z0JBQ3JDLFdBQVcsRUFBRSx3Q0FBd0M7Z0JBQ3JELFNBQVMsRUFBRSxDQUFDLHdDQUF3QyxDQUFDO2FBQ3REIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENhc2VFZGl0RGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb21tb25zL2Nhc2UtZWRpdC1kYXRhL2Nhc2UtZWRpdC1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FzZUZpZWxkLCBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi9kb21haW4nO1xuaW1wb3J0IHsgRmllbGRzVXRpbHMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9maWVsZHMnO1xuaW1wb3J0IHsgQWJzdHJhY3RGaWVsZFdyaXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS1maWVsZC9hYnN0cmFjdC1maWVsZC13cml0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FzZUZsYWdTdGF0ZSwgRmxhZ0RldGFpbCwgRmxhZ0RldGFpbERpc3BsYXlXaXRoRm9ybUdyb3VwUGF0aCwgRmxhZ1BhdGgsIEZsYWdzV2l0aEZvcm1Hcm91cFBhdGggfSBmcm9tICcuL2RvbWFpbic7XG5pbXBvcnQgeyBDYXNlRmxhZ0ZpZWxkU3RhdGUsIENhc2VGbGFnU3RhdHVzLCBDYXNlRmxhZ1RleHQgfSBmcm9tICcuL2VudW1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLXdyaXRlLWNhc2UtZmxhZy1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi93cml0ZS1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi93cml0ZS1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBXcml0ZUNhc2VGbGFnRmllbGRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdEZpZWxkV3JpdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgcHVibGljIGZpZWxkU3RhdGU6IG51bWJlcjtcbiAgcHVibGljIGNhc2VGbGFnRmllbGRTdGF0ZSA9IENhc2VGbGFnRmllbGRTdGF0ZTtcbiAgcHVibGljIGVycm9yTWVzc2FnZXM6IEVycm9yTWVzc2FnZVtdID0gW107XG4gIHB1YmxpYyBjcmVhdGVGbGFnQ2FwdGlvbjogQ2FzZUZsYWdUZXh0O1xuICBwdWJsaWMgZmxhZ3NEYXRhOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoW107XG4gIHB1YmxpYyBzZWxlY3RlZEZsYWc6IEZsYWdEZXRhaWxEaXNwbGF5V2l0aEZvcm1Hcm91cFBhdGg7XG4gIHB1YmxpYyBzZWxlY3RlZEZsYWdzTG9jYXRpb246IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGg7XG4gIHB1YmxpYyBjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICBwdWJsaWMgZmxhZ0NvbW1lbnRzT3B0aW9uYWwgPSBmYWxzZTtcbiAgcHVibGljIGp1cmlzZGljdGlvbjogc3RyaW5nO1xuICBwdWJsaWMgZmxhZ05hbWU6IHN0cmluZztcbiAgcHVibGljIGZsYWdQYXRoOiBGbGFnUGF0aFtdO1xuICBwdWJsaWMgaGVhcmluZ1JlbGV2YW50RmxhZzogYm9vbGVhbjtcbiAgcHVibGljIGZsYWdDb2RlOiBzdHJpbmc7XG4gIHB1YmxpYyBsaXN0T2ZWYWx1ZXM6IHtrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZ31bXSA9IG51bGw7XG4gIHB1YmxpYyBpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyVXBkYXRlOiBib29sZWFuO1xuICBwdWJsaWMgY2FzZVRpdGxlOiBzdHJpbmc7XG4gIHByaXZhdGUgYWxsQ2FzZUZsYWdTdGFnZXNDb21wbGV0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSB1cGRhdGVNb2RlID0gJyNBUkdVTUVOVChVUERBVEUpJztcbiAgLy8gQ29kZSBmb3IgXCJPdGhlclwiIGZsYWcgdHlwZSBhcyBkZWZpbmVkIGluIFJlZmVyZW5jZSBEYXRhXG4gIHByaXZhdGUgcmVhZG9ubHkgb3RoZXJGbGFnVHlwZUNvZGUgPSAnT1QwMDAxJztcbiAgcHVibGljIHJlYWRvbmx5IGNhc2VOYW1lTWlzc2luZyA9ICdDYXNlIG5hbWUgbWlzc2luZyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXNlRWRpdERhdGFTZXJ2aWNlOiBDYXNlRWRpdERhdGFTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLmNsZWFyRm9ybVZhbGlkYXRpb25FcnJvcnMoKTtcbiAgICAvLyBDaGVjayBmb3IgZXhpc3RpbmcgRmxhZ0xhdW5jaGVyIGNvbnRyb2wgaW4gcGFyZW50IGFuZCByZW1vdmUgaXQgLSB0aGlzIGlzIHRoZSBvbmx5IHdheSB0byBlbnN1cmUgaXRzIGludmFsaWRpdHlcbiAgICAvLyBpcyBzZXQgY29ycmVjdGx5IGF0IHRoZSBzdGFydCwgd2hlbiB0aGUgY29tcG9uZW50IGlzIHJlbG9hZGVkIGFuZCB0aGUgY29udHJvbCBpcyByZS1yZWdpc3RlcmVkLiBPdGhlcndpc2UsIHRoZVxuICAgIC8vIHZhbGlkYXRvciBzdGF0ZSBnZXRzIGNhcnJpZWQgb3ZlclxuICAgIGlmICh0aGlzLmZvcm1Hcm91cCAmJiB0aGlzLmZvcm1Hcm91cC5nZXQodGhpcy5jYXNlRmllbGQuaWQpKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5yZW1vdmVDb250cm9sKHRoaXMuY2FzZUZpZWxkLmlkKTtcbiAgICB9XG4gICAgLy8gRnJvbSB0aGlzIHBvaW50LCB0aGlzLmZvcm1Hcm91cCByZWZlcnMgdG8gdGhlIEZvcm1Hcm91cCBmb3IgdGhlIEZsYWdMYXVuY2hlciBmaWVsZCwgbm90IHRoZSBwYXJlbnQgRm9ybUdyb3VwXG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLnJlZ2lzdGVyQ29udHJvbChuZXcgRm9ybUdyb3VwKHt9LCB7XG4gICAgICB2YWxpZGF0b3JzOiAoXzogQWJzdHJhY3RDb250cm9sKToge1trZXk6IHN0cmluZ106IGJvb2xlYW59IHwgbnVsbCA9PiB7XG4gICAgICAgIGlmICghdGhpcy5hbGxDYXNlRmxhZ1N0YWdlc0NvbXBsZXRlZCkge1xuICAgICAgICAgIC8vIFJldHVybiBhbiBlcnJvciB0byBtYXJrIHRoZSBGb3JtR3JvdXAgYXMgaW52YWxpZCBpZiBub3QgYWxsIENhc2UgRmxhZyBzdGFnZXMgaGF2ZSBiZWVuIGNvbXBsZXRlZFxuICAgICAgICAgIHJldHVybiB7bm90QWxsQ2FzZUZsYWdTdGFnZXNDb21wbGV0ZWQ6IHRydWV9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0pLCB0cnVlKSBhcyBGb3JtR3JvdXA7XG5cbiAgICB0aGlzLmNyZWF0ZUZsYWdDYXB0aW9uID0gQ2FzZUZsYWdUZXh0LkNBUFRJT047XG4gICAgLy8gR2V0IHRoZSBqdXJpc2RpY3Rpb24gZnJvbSB0aGUgQ2FzZVZpZXcgb2JqZWN0IGluIHRoZSBzbmFwc2hvdCBkYXRhIChyZXF1aXJlZCBmb3IgcmV0cmlldmluZyB0aGUgYXZhaWxhYmxlIGZsYWdcbiAgICAvLyB0eXBlcyBmb3IgYSBjYXNlKVxuICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuY2FzZSAmJiB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuY2FzZS5jYXNlX3R5cGUgJiZcbiAgICAgIHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5jYXNlLmNhc2VfdHlwZS5qdXJpc2RpY3Rpb24pIHtcbiAgICAgIHRoaXMuanVyaXNkaWN0aW9uID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmNhc2UuY2FzZV90eXBlLmp1cmlzZGljdGlvbi5pZDtcbiAgICB9XG4gICAgLy8gRXh0cmFjdCBhbGwgZmxhZ3MtcmVsYXRlZCBkYXRhIGZyb20gdGhlIENhc2VFdmVudFRyaWdnZXIgb2JqZWN0IGluIHRoZSBzbmFwc2hvdCBkYXRhXG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIgJiYgdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcykge1xuICAgICAgdGhpcy5mbGFnc0RhdGEgPSAoKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpIGFzIENhc2VGaWVsZFtdKVxuICAgICAgICAucmVkdWNlKChmbGFncywgY2FzZUZpZWxkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIEZpZWxkc1V0aWxzLmV4dHJhY3RGbGFnc0RhdGFGcm9tQ2FzZUZpZWxkKGZsYWdzLCBjYXNlRmllbGQsIGNhc2VGaWVsZC5pZCwgY2FzZUZpZWxkKTtcbiAgICAgICAgfSwgW10pO1xuXG4gICAgICAvLyBTZXQgYm9vbGVhbiBpbmRpY2F0aW5nIHRoZSBkaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyIGlzIFwidXBkYXRlXCJcbiAgICAgIHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZSA9XG4gICAgICAgIHRoaXMuc2V0RGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGUoKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpIGFzIENhc2VGaWVsZFtdKTtcblxuICAgICAgLy8gU2V0IHN0YXJ0aW5nIGZpZWxkIHN0YXRlXG4gICAgICB0aGlzLmZpZWxkU3RhdGUgPSB0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGUgPyBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19NQU5BR0VfQ0FTRV9GTEFHUyA6IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0xPQ0FUSU9OO1xuICAgICAgLy8gR2V0IGNhc2UgdGl0bGUsIHRvIGJlIHVzZWQgYnkgY2hpbGQgY29tcG9uZW50c1xuICAgICAgdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLmNhc2VUaXRsZSQuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogdGl0bGUgPT4ge1xuICAgICAgICAgIHRoaXMuY2FzZVRpdGxlID0gdGl0bGUubGVuZ3RoID4gMCA/IHRpdGxlIDogdGhpcy5jYXNlTmFtZU1pc3Npbmc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZShjYXNlRmllbGRzOiBDYXNlRmllbGRbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjYXNlRmllbGRzLnNvbWUoXG4gICAgICBjYXNlRmllbGQgPT4gRmllbGRzVXRpbHMuaXNGbGFnTGF1bmNoZXJDYXNlRmllbGQoY2FzZUZpZWxkKSAmJiBjYXNlRmllbGQuZGlzcGxheV9jb250ZXh0X3BhcmFtZXRlciA9PT0gdGhpcy51cGRhdGVNb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNhc2VGbGFnU3RhdGVFbWl0dGVkKGNhc2VGbGFnU3RhdGU6IENhc2VGbGFnU3RhdGUpOiB2b2lkIHtcbiAgICB0aGlzLmNhc2VFZGl0RGF0YVNlcnZpY2UuY2xlYXJGb3JtVmFsaWRhdGlvbkVycm9ycygpO1xuICAgIC8vIElmIHRoZSBjdXJyZW50IHN0YXRlIGlzIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0xPQ0FUSU9OIGFuZCBhIGZsYWcgbG9jYXRpb24gKGEgRmxhZ3MgaW5zdGFuY2UpIGhhcyBiZWVuIHNlbGVjdGVkLFxuICAgIC8vIHNldCB0aGUgcGFyZW50IENhc2UgRmxhZyBGb3JtR3JvdXAgZm9yIHRoaXMgY29tcG9uZW50J3MgY2hpbGRyZW4gYnkgdXNpbmcgdGhlIHByb3ZpZGVkIHBhdGhUb0ZsYWdzRm9ybUdyb3VwLCBhbmRcbiAgICAvLyBzZXQgdGhlIHNlbGVjdGVkIGZsYWcgbG9jYXRpb24gb24gdGhpcyBjb21wb25lbnRcbiAgICBpZiAoY2FzZUZsYWdTdGF0ZS5jdXJyZW50Q2FzZUZsYWdGaWVsZFN0YXRlID09PSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19MT0NBVElPTlxuICAgICAgJiYgY2FzZUZsYWdTdGF0ZS5zZWxlY3RlZEZsYWdzTG9jYXRpb25cbiAgICAgICYmIGNhc2VGbGFnU3RhdGUuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uLnBhdGhUb0ZsYWdzRm9ybUdyb3VwKSB7XG4gICAgICB0aGlzLnNldENhc2VGbGFnUGFyZW50Rm9ybUdyb3VwKGNhc2VGbGFnU3RhdGUuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uLnBhdGhUb0ZsYWdzRm9ybUdyb3VwKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uID0gY2FzZUZsYWdTdGF0ZS5zZWxlY3RlZEZsYWdzTG9jYXRpb247XG4gICAgfVxuICAgIC8vIElmIHRoZSBjdXJyZW50IHN0YXRlIGlzIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1RZUEUsIGNhY2hlIHRoZSBmbGFnIG5hbWUsIHBhdGgsIGhlYXJpbmcgcmVsZXZhbnQgaW5kaWNhdG9yLCBjb2RlLFxuICAgIC8vIGFuZCBcImxpc3Qgb2YgdmFsdWVzXCIgKGN1cnJlbnRseSBhcHBsaWNhYmxlIHRvIGxhbmd1YWdlIGZsYWcgdHlwZXMpXG4gICAgaWYgKGNhc2VGbGFnU3RhdGUuY3VycmVudENhc2VGbGFnRmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVFlQRSkge1xuICAgICAgdGhpcy5mbGFnTmFtZSA9IGNhc2VGbGFnU3RhdGUuZmxhZ05hbWU7XG4gICAgICB0aGlzLmZsYWdQYXRoID0gY2FzZUZsYWdTdGF0ZS5mbGFnUGF0aDtcbiAgICAgIHRoaXMuaGVhcmluZ1JlbGV2YW50RmxhZyA9IGNhc2VGbGFnU3RhdGUuaGVhcmluZ1JlbGV2YW50RmxhZztcbiAgICAgIHRoaXMuZmxhZ0NvZGUgPSBjYXNlRmxhZ1N0YXRlLmZsYWdDb2RlO1xuICAgICAgdGhpcy5saXN0T2ZWYWx1ZXMgPSBjYXNlRmxhZ1N0YXRlLmxpc3RPZlZhbHVlcztcbiAgICB9XG4gICAgLy8gSWYgdGhlIGN1cnJlbnQgc3RhdGUgaXMgQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTUFOQUdFX0NBU0VfRkxBR1MgYW5kIGEgZmxhZyBoYXMgYmVlbiBzZWxlY3RlZCwgc2V0IHRoZSBwYXJlbnRcbiAgICAvLyBDYXNlIEZsYWcgRm9ybUdyb3VwIGZvciB0aGlzIGNvbXBvbmVudCdzIGNoaWxkcmVuIGJ5IHVzaW5nIHRoZSBwcm92aWRlZCBwYXRoVG9GbGFnc0Zvcm1Hcm91cFxuICAgIGlmIChjYXNlRmxhZ1N0YXRlLmN1cnJlbnRDYXNlRmxhZ0ZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX01BTkFHRV9DQVNFX0ZMQUdTXG4gICAgICAmJiBjYXNlRmxhZ1N0YXRlLnNlbGVjdGVkRmxhZ1xuICAgICAgJiYgY2FzZUZsYWdTdGF0ZS5zZWxlY3RlZEZsYWcucGF0aFRvRmxhZ3NGb3JtR3JvdXApIHtcbiAgICAgIHRoaXMuc2V0Q2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAoY2FzZUZsYWdTdGF0ZS5zZWxlY3RlZEZsYWcucGF0aFRvRmxhZ3NGb3JtR3JvdXApO1xuICAgIH1cblxuICAgIHRoaXMuZXJyb3JNZXNzYWdlcyA9IGNhc2VGbGFnU3RhdGUuZXJyb3JNZXNzYWdlcztcbiAgICB0aGlzLnNlbGVjdGVkRmxhZyA9IGNhc2VGbGFnU3RhdGUuc2VsZWN0ZWRGbGFnO1xuICAgIC8vIFZhbGlkYXRpb24gc3VjY2VlZGVkOyBwcm9jZWVkIHRvIG5leHQgc3RhdGUgb3IgZmluYWwgcmV2aWV3IHN0YWdlIChcIkNoZWNrIHlvdXIgYW5zd2Vyc1wiKVxuICAgIGlmICh0aGlzLmVycm9yTWVzc2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBJZiB0aGUgY3VycmVudCBzdGF0ZSBpcyBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UUyBvciBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEUsIG1vdmUgdG8gZmluYWxcbiAgICAgIC8vIHJldmlldyBzdGFnZVxuICAgICAgaWYgKGNhc2VGbGFnU3RhdGUuY3VycmVudENhc2VGbGFnRmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfQ09NTUVOVFMgfHxcbiAgICAgICAgICBjYXNlRmxhZ1N0YXRlLmN1cnJlbnRDYXNlRmxhZ0ZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURSkge1xuICAgICAgICB0aGlzLm1vdmVUb0ZpbmFsUmV2aWV3U3RhZ2UoKTtcbiAgICAgICAgLy8gRG9uJ3QgbW92ZSB0byBuZXh0IHN0YXRlIGlmIGN1cnJlbnQgc3RhdGUgaXMgQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVFlQRSBhbmQgdGhlIGZsYWcgdHlwZSBpcyBhIHBhcmVudCAtIHRoaXNcbiAgICAgICAgLy8gbWVhbnMgdGhlIHVzZXIgbmVlZHMgdG8gc2VsZWN0IGZyb20gdGhlIG5leHQgc2V0IG9mIGZsYWcgdHlwZXMgYmVmb3JlIHRoZXkgY2FuIG1vdmUgb25cbiAgICAgIH0gZWxzZSBpZiAoIWNhc2VGbGFnU3RhdGUuaXNQYXJlbnRGbGFnVHlwZSkge1xuICAgICAgICAvLyBQcm9jZWVkIHRvIG5leHQgc3RhdGVcbiAgICAgICAgdGhpcy5wcm9jZWVkVG9OZXh0U3RhdGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcHJvY2VlZFRvTmV4dFN0YXRlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0F0RmluYWxTdGF0ZSgpKSB7XG4gICAgICAvLyBTa2lwIHRoZSBcImxhbmd1YWdlIGludGVycHJldGVyXCIgc3RhdGUgaWYgY3VycmVudCBzdGF0ZSBpcyBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19UWVBFIGFuZCB0aGUgZmxhZyB0eXBlIGRvZXNuJ3RcbiAgICAgIC8vIGhhdmUgYSBcImxpc3Qgb2YgdmFsdWVzXCIgLSBjdXJyZW50bHksIHRoaXMgaXMgcHJlc2VudCBvbmx5IGZvciB0aG9zZSBmbGFnIHR5cGVzIHRoYXQgcmVxdWlyZSBsYW5ndWFnZSBpbnRlcnByZXRlclxuICAgICAgLy8gc2VsZWN0aW9uXG4gICAgICBpZiAodGhpcy5maWVsZFN0YXRlID09PSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19UWVBFICYmICF0aGlzLmxpc3RPZlZhbHVlcykge1xuICAgICAgICB0aGlzLmZpZWxkU3RhdGUgPSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UUztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmllbGRTdGF0ZSsrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRGbGFnc0Nhc2VGaWVsZFZhbHVlKCk6IHZvaWQge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogc3dpdGNoLWRlZmF1bHRcbiAgICBzd2l0Y2ggKHRoaXMuZmllbGRTdGF0ZSkge1xuICAgICAgY2FzZSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UUzpcbiAgICAgICAgdGhpcy5hZGRGbGFnVG9Db2xsZWN0aW9uKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEU6XG4gICAgICAgIHRoaXMudXBkYXRlRmxhZ0luQ29sbGVjdGlvbigpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkRmxhZ1RvQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICAvLyBFbnN1cmUgbm8gbW9yZSB0aGFuIG9uZSBuZXcgZmxhZyBpcyBiZWluZyBhZGRlZCBhdCBhIHRpbWUsIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIGVhY2ggRmxhZ3MgY2FzZSBmaWVsZCBhbmQgcmVtb3ZpbmdcbiAgICAvLyBhbnkgcHJldmlvdXMgZW50cnkgZnJvbSB0aGUgZGV0YWlscyBhcnJheSB3aGVyZSB0aGF0IGVudHJ5IGhhcyBubyBpZCAoaGVuY2UgaXQgaXMgbmV3IC0gYW5kIHRoZXJlIHNob3VsZCBiZSBvbmx5XG4gICAgLy8gb25lIHN1Y2ggZW50cnkpLiAoVGhpcyBzY2VuYXJpbyBvY2N1cnMgaWYgdGhlIHVzZXIgcmVwZWF0cyB0aGUgQ2FzZSBGbGFnIGNyZWF0aW9uIGpvdXJuZXkgYnkgdXNpbmcgdGhlIFwiQ2hhbmdlXCJcbiAgICAvLyBsaW5rIGFuZCBzZWxlY3RzIGVpdGhlciB0aGUgc2FtZSBmbGFnIGxvY2F0aW9uIGFzIGJlZm9yZSBvciBhIGRpZmZlcmVudCBvbmUuKVxuICAgIHRoaXMuZmxhZ3NEYXRhLmZvckVhY2goaW5zdGFuY2UgPT4ge1xuICAgICAgLy8gVXNlIHRoZSBwYXRoVG9GbGFnc0Zvcm1Hcm91cCBwcm9wZXJ0eSBmb3IgZWFjaCBGbGFncyBjYXNlIGZpZWxkIHRvIGRyaWxsIGRvd24gdG8gdGhlIGNvcnJlY3QgcGFydCBvZiB0aGVcbiAgICAgIC8vIENhc2VGaWVsZCB2YWx1ZSB0byByZW1vdmUgdGhlIG5ldyB2YWx1ZSBmcm9tXG4gICAgICBsZXQgdmFsdWUgPSBpbnN0YW5jZS5jYXNlRmllbGQudmFsdWU7XG4gICAgICBjb25zdCBwYXRoVG9WYWx1ZSA9IGluc3RhbmNlLnBhdGhUb0ZsYWdzRm9ybUdyb3VwO1xuICAgICAgLy8gUm9vdC1sZXZlbCBGbGFncyBDYXNlRmllbGRzIGRvbid0IGhhdmUgYSBkb3QtZGVsaW1pdGVkIHBhdGggLSBqdXN0IHRoZSBDYXNlRmllbGQgSUQgaXRzZWxmIC0gc28gZG9uJ3QgZHJpbGwgZG93blxuICAgICAgaWYgKHBhdGhUb1ZhbHVlLmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgICAgIHBhdGhUb1ZhbHVlLnNsaWNlKHBhdGhUb1ZhbHVlLmluZGV4T2YoJy4nKSArIDEpLnNwbGl0KCcuJykuZm9yRWFjaChwYXJ0ID0+IHZhbHVlID0gdmFsdWVbcGFydF0pO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmRldGFpbHMgJiYgdmFsdWUuZGV0YWlscy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZOZXdGbGFnRGV0YWlsID0gdmFsdWUuZGV0YWlscy5maW5kSW5kZXgoZWxlbWVudCA9PiAhZWxlbWVudC5oYXNPd25Qcm9wZXJ0eSgnaWQnKSk7XG4gICAgICAgIGlmIChpbmRleE9mTmV3RmxhZ0RldGFpbCA+IC0xKSB7XG4gICAgICAgICAgdmFsdWUuZGV0YWlscy5zcGxpY2UoaW5kZXhPZk5ld0ZsYWdEZXRhaWwsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgbGV0IGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSB0aGlzLnNlbGVjdGVkRmxhZ3NMb2NhdGlvbi5jYXNlRmllbGQudmFsdWU7XG4gICAgLy8gVXNlIHRoZSBwYXRoVG9GbGFnc0Zvcm1Hcm91cCBwcm9wZXJ0eSBmcm9tIHRoZSBzZWxlY3RlZCBmbGFnIGxvY2F0aW9uIHRvIGRyaWxsIGRvd24gdG8gdGhlIGNvcnJlY3QgcGFydCBvZiB0aGVcbiAgICAvLyBDYXNlRmllbGQgdmFsdWUgdG8gYXBwbHkgY2hhbmdlcyB0b1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLnNlbGVjdGVkRmxhZ3NMb2NhdGlvbi5wYXRoVG9GbGFnc0Zvcm1Hcm91cDtcbiAgICAvLyBSb290LWxldmVsIEZsYWdzIENhc2VGaWVsZHMgZG9uJ3QgaGF2ZSBhIGRvdC1kZWxpbWl0ZWQgcGF0aCAtIGp1c3QgdGhlIENhc2VGaWVsZCBJRCBpdHNlbGYgLSBzbyBkb24ndCBkcmlsbCBkb3duXG4gICAgaWYgKHBhdGguaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgIHBhdGguc2xpY2UocGF0aC5pbmRleE9mKCcuJykgKyAxKS5zcGxpdCgnLicpLmZvckVhY2gocGFydCA9PiBmbGFnc0Nhc2VGaWVsZFZhbHVlID0gZmxhZ3NDYXNlRmllbGRWYWx1ZVtwYXJ0XSk7XG4gICAgfVxuICAgIC8vIElmIHRoZSBDYXNlRmllbGQgZm9yIHRoZSBzZWxlY3RlZCBmbGFncyBsb2NhdGlvbiBoYXMgbm8gdmFsdWUsIHNldCBpdCB0byBhbiBlbXB0eSBvYmplY3Qgc28gaXQgY2FuIGJlIHBvcHVsYXRlZFxuICAgIC8vIHdpdGggZmxhZyBkZXRhaWxzXG4gICAgaWYgKCFmbGFnc0Nhc2VGaWVsZFZhbHVlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRmxhZ3NMb2NhdGlvbi5jYXNlRmllbGQudmFsdWUgPSB7fTtcbiAgICAgIGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSB0aGlzLnNlbGVjdGVkRmxhZ3NMb2NhdGlvbi5jYXNlRmllbGQudmFsdWU7XG4gICAgfVxuICAgIC8vIENyZWF0ZSBhIGRldGFpbHMgYXJyYXkgaWYgb25lIGRvZXMgbm90IGV4aXN0XG4gICAgaWYgKCFmbGFnc0Nhc2VGaWVsZFZhbHVlLmhhc093blByb3BlcnR5KCdkZXRhaWxzJykpIHtcbiAgICAgIGZsYWdzQ2FzZUZpZWxkVmFsdWUuZGV0YWlscyA9IFtdO1xuICAgIH1cbiAgICAvLyBQb3B1bGF0ZSBuZXcgRmxhZ0RldGFpbCBpbnN0YW5jZSBhbmQgYWRkIHRvIHRoZSBGbGFncyBkYXRhIHdpdGhpbiB0aGUgQ2FzZUZpZWxkIGluc3RhbmNlIG9mIHRoZSBzZWxlY3RlZCBmbGFnXG4gICAgLy8gbG9jYXRpb25cbiAgICBmbGFnc0Nhc2VGaWVsZFZhbHVlLmRldGFpbHMucHVzaCh7dmFsdWU6IHRoaXMucG9wdWxhdGVOZXdGbGFnRGV0YWlsSW5zdGFuY2UoKX0pO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUZsYWdJbkNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgLy8gRW5zdXJlIG5vIG1vcmUgdGhhbiBvbmUgZmxhZyBpcyBiZWluZyB1cGRhdGVkIGF0IGEgdGltZSwgYnkgaXRlcmF0aW5nIHRocm91Z2ggZWFjaCBGbGFncyBjYXNlIGZpZWxkIGFuZCByZXNldHRpbmdcbiAgICAvLyB0aGUgY29tbWVudHMsIHN0YXR1cywgYW5kIGRhdGUvdGltZSBtb2RpZmllZCAoaWYgcHJlc2VudCkgZm9yIGVhY2ggZW50cnkgaW4gdGhlIGRldGFpbHMgYXJyYXksIHdpdGggb3JpZ2luYWwgdmFsdWVzXG4gICAgLy8gZnJvbSB0aGUgY29ycmVzcG9uZGluZyBmb3JtYXR0ZWRfdmFsdWUgcHJvcGVydHkuIChUaGlzIHNjZW5hcmlvIG9jY3VycyBpZiB0aGUgdXNlciByZXBlYXRzIHRoZSBNYW5hZ2UgQ2FzZSBGbGFnXG4gICAgLy8gam91cm5leSBieSB1c2luZyB0aGUgXCJDaGFuZ2VcIiBsaW5rIGFuZCBzZWxlY3RzIGEgZGlmZmVyZW50IGZsYWcgdG8gdXBkYXRlLilcbiAgICB0aGlzLmZsYWdzRGF0YS5mb3JFYWNoKGluc3RhbmNlID0+IHtcbiAgICAgIC8vIFVzZSB0aGUgcGF0aFRvRmxhZ3NGb3JtR3JvdXAgcHJvcGVydHkgZm9yIGVhY2ggRmxhZ3MgY2FzZSBmaWVsZCB0byBkcmlsbCBkb3duIHRvIHRoZSBjb3JyZWN0IHBhcnQgb2YgdGhlXG4gICAgICAvLyBDYXNlRmllbGQgdmFsdWUgZm9yIHdoaWNoIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHZhbHVlc1xuICAgICAgbGV0IHZhbHVlID0gaW5zdGFuY2UuY2FzZUZpZWxkLnZhbHVlO1xuICAgICAgbGV0IGZvcm1hdHRlZFZhbHVlID0gaW5zdGFuY2UuY2FzZUZpZWxkLmZvcm1hdHRlZF92YWx1ZTtcbiAgICAgIGNvbnN0IHBhdGhUb1ZhbHVlID0gaW5zdGFuY2UucGF0aFRvRmxhZ3NGb3JtR3JvdXA7XG4gICAgICAvLyBSb290LWxldmVsIEZsYWdzIENhc2VGaWVsZHMgZG9uJ3QgaGF2ZSBhIGRvdC1kZWxpbWl0ZWQgcGF0aCAtIGp1c3QgdGhlIENhc2VGaWVsZCBJRCBpdHNlbGYgLSBzbyBkb24ndCBkcmlsbCBkb3duXG4gICAgICBpZiAocGF0aFRvVmFsdWUuaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgICAgcGF0aFRvVmFsdWUuc2xpY2UocGF0aFRvVmFsdWUuaW5kZXhPZignLicpICsgMSkuc3BsaXQoJy4nKS5mb3JFYWNoKHBhcnQgPT4ge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWVbcGFydF07XG4gICAgICAgICAgaWYgKGZvcm1hdHRlZFZhbHVlICYmIEZpZWxkc1V0aWxzLmlzTm9uRW1wdHlPYmplY3QoZm9ybWF0dGVkVmFsdWUpKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IGZvcm1hdHRlZFZhbHVlW3BhcnRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUuZGV0YWlscyAmJiB2YWx1ZS5kZXRhaWxzLmxlbmd0aCA+IDAgJiYgZm9ybWF0dGVkVmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdChmb3JtYXR0ZWRWYWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuZGV0YWlscy5mb3JFYWNoKGZsYWdEZXRhaWwgPT4ge1xuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRmxhZ0RldGFpbCA9IGZvcm1hdHRlZFZhbHVlLmRldGFpbHMuZmluZChkZXRhaWwgPT4gZGV0YWlsLmlkID09PSBmbGFnRGV0YWlsLmlkKTtcbiAgICAgICAgICBpZiAob3JpZ2luYWxGbGFnRGV0YWlsKSB7XG4gICAgICAgICAgICBmbGFnRGV0YWlsLnZhbHVlLmZsYWdDb21tZW50ID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlLmZsYWdDb21tZW50XG4gICAgICAgICAgICAgID8gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlLmZsYWdDb21tZW50XG4gICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGZsYWdEZXRhaWwudmFsdWUuc3RhdHVzID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlLnN0YXR1cztcbiAgICAgICAgICAgIGZsYWdEZXRhaWwudmFsdWUuZGF0ZVRpbWVNb2RpZmllZCA9IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZS5kYXRlVGltZU1vZGlmaWVkXG4gICAgICAgICAgICAgID8gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlLmRhdGVUaW1lTW9kaWZpZWRcbiAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbGV0IGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSB0aGlzLnNlbGVjdGVkRmxhZy5jYXNlRmllbGQudmFsdWU7XG4gICAgLy8gVXNlIHRoZSBwYXRoVG9GbGFnc0Zvcm1Hcm91cCBwcm9wZXJ0eSBmcm9tIHRoZSBzZWxlY3RlZCBmbGFnIGxvY2F0aW9uIHRvIGRyaWxsIGRvd24gdG8gdGhlIGNvcnJlY3QgcGFydCBvZiB0aGVcbiAgICAvLyBDYXNlRmllbGQgdmFsdWUgdG8gYXBwbHkgY2hhbmdlcyB0b1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLnNlbGVjdGVkRmxhZy5wYXRoVG9GbGFnc0Zvcm1Hcm91cDtcbiAgICAvLyBSb290LWxldmVsIEZsYWdzIENhc2VGaWVsZHMgZG9uJ3QgaGF2ZSBhIGRvdC1kZWxpbWl0ZWQgcGF0aCAtIGp1c3QgdGhlIENhc2VGaWVsZCBJRCBpdHNlbGYgLSBzbyBkb24ndCBkcmlsbCBkb3duXG4gICAgaWYgKHBhdGguaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgIHBhdGguc2xpY2UocGF0aC5pbmRleE9mKCcuJykgKyAxKS5zcGxpdCgnLicpLmZvckVhY2gocGFydCA9PiBmbGFnc0Nhc2VGaWVsZFZhbHVlID0gZmxhZ3NDYXNlRmllbGRWYWx1ZVtwYXJ0XSk7XG4gICAgfVxuICAgIGlmIChmbGFnc0Nhc2VGaWVsZFZhbHVlKSB7XG4gICAgICBjb25zdCBmbGFnRGV0YWlsVG9VcGRhdGUgPSBmbGFnc0Nhc2VGaWVsZFZhbHVlLmRldGFpbHMuZmluZChcbiAgICAgICAgZGV0YWlsID0+IGRldGFpbC5pZCA9PT0gdGhpcy5zZWxlY3RlZEZsYWcuZmxhZ0RldGFpbERpc3BsYXkuZmxhZ0RldGFpbC5pZCk7XG4gICAgICBpZiAoZmxhZ0RldGFpbFRvVXBkYXRlKSB7XG4gICAgICAgIGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZS5mbGFnQ29tbWVudCA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAudmFsdWUuZmxhZ0NvbW1lbnRzXG4gICAgICAgICAgPyB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLnZhbHVlLmZsYWdDb21tZW50c1xuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgZmxhZ0RldGFpbFRvVXBkYXRlLnZhbHVlLnN0YXR1cyA9IHRoaXMuc2VsZWN0ZWRGbGFnLmZsYWdEZXRhaWxEaXNwbGF5LmZsYWdEZXRhaWwuc3RhdHVzO1xuICAgICAgICBmbGFnRGV0YWlsVG9VcGRhdGUudmFsdWUuZGF0ZVRpbWVNb2RpZmllZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNBdEZpbmFsU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZVxuICAgICAgPyB0aGlzLmZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURVxuICAgICAgOiB0aGlzLmZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTO1xuICB9XG5cbiAgcHVibGljIG5hdmlnYXRlVG9FcnJvckVsZW1lbnQoZWxlbWVudElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoZWxlbWVudElkKSB7XG4gICAgICBjb25zdCBodG1sRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XG4gICAgICBpZiAoaHRtbEVsZW1lbnQpIHtcbiAgICAgICAgaHRtbEVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcbiAgICAgICAgaHRtbEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25GbGFnQ29tbWVudHNPcHRpb25hbEVtaXR0ZWQoXzogYW55KTogdm9pZCB7XG4gICAgdGhpcy5mbGFnQ29tbWVudHNPcHRpb25hbCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBwYXJlbnQge0BsaW5rIEZvcm1Hcm91cH0gZm9yIHRoaXMgY29tcG9uZW50J3MgY2hpbGRyZW4sIGRlcGVuZGluZyBvbiB0aGUgYEZsYWdzYCB7QGxpbmsgQ2FzZUZpZWxkfSBpbnN0YW5jZVxuICAgKiB0byB3aGljaCBkYXRhIHNob3VsZCBiZSBhdHRhY2hlZC4gKipOb3RlOioqIFRoZSBwYXJlbnQgaXMgbm90IF90aGlzXyBjb21wb25lbnQncyBgRm9ybUdyb3VwYCAoYXMgbWlnaHQgb3RoZXJ3aXNlIGJlXG4gICAqIGV4cGVjdGVkKSBiZWNhdXNlIHRoaXMgY29tcG9uZW50IGlzIG5vdCBleHBlY3RlZCB0byBoYXZlIGEgdmFsdWUsIGdpdmVuIGl0IGlzIHVzZWQgZm9yIHRoZSBlbXB0eSBgRmxhZ0xhdW5jaGVyYCBiYXNlXG4gICAqIGZpZWxkIHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoVG9GbGFnc0Zvcm1Hcm91cCBUaGUgZG90LWRlbGltaXRlZCBzdHJpbmcgdGhhdCBpcyB0aGUgcGF0aCB0byB0aGUgYEZvcm1Hcm91cGAgZm9yIGEgYEZsYWdzYCBpbnN0YW5jZVxuICAgKi9cbiAgcHVibGljIHNldENhc2VGbGFnUGFyZW50Rm9ybUdyb3VwKHBhdGhUb0ZsYWdzRm9ybUdyb3VwOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwID0gdGhpcy5mb3JtR3JvdXAucGFyZW50LmdldChwYXRoVG9GbGFnc0Zvcm1Hcm91cCkgYXMgRm9ybUdyb3VwO1xuICB9XG5cbiAgcHVibGljIHBvcHVsYXRlTmV3RmxhZ0RldGFpbEluc3RhbmNlKCk6IEZsYWdEZXRhaWwge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLmZsYWdOYW1lLFxuICAgICAgLy8gQ3VycmVudGx5LCBzdWJUeXBlVmFsdWUgYW5kIHN1YlR5cGVLZXkgYXJlIGFwcGxpY2FibGUgb25seSB0byBsYW5ndWFnZSBmbGFnIHR5cGVzXG4gICAgICBzdWJUeXBlVmFsdWU6IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAudmFsdWUubGFuZ3VhZ2VTZWFyY2hUZXJtXG4gICAgICAgID8gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC52YWx1ZS5sYW5ndWFnZVNlYXJjaFRlcm0udmFsdWVcbiAgICAgICAgOiB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLnZhbHVlLm1hbnVhbExhbmd1YWdlRW50cnlcbiAgICAgICAgICA/IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAudmFsdWUubWFudWFsTGFuZ3VhZ2VFbnRyeVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIC8vIEZvciB1c2VyLWVudGVyZWQgKGkuZS4gbm9uLVJlZmVyZW5jZSBEYXRhKSBsYW5ndWFnZXMsIHRoZXJlIGlzIG5vIGtleVxuICAgICAgc3ViVHlwZUtleTogdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC52YWx1ZS5sYW5ndWFnZVNlYXJjaFRlcm1cbiAgICAgICAgPyB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLnZhbHVlLmxhbmd1YWdlU2VhcmNoVGVybS5rZXlcbiAgICAgICAgOiBudWxsLFxuICAgICAgb3RoZXJEZXNjcmlwdGlvbjogdGhpcy5mbGFnQ29kZSA9PT0gdGhpcy5vdGhlckZsYWdUeXBlQ29kZSAmJiB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLnZhbHVlLm90aGVyRmxhZ1R5cGVEZXNjcmlwdGlvblxuICAgICAgICA/IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAudmFsdWUub3RoZXJGbGFnVHlwZURlc2NyaXB0aW9uXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGZsYWdDb21tZW50OiB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLnZhbHVlLmZsYWdDb21tZW50cyA/IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAudmFsdWUuZmxhZ0NvbW1lbnRzIDogbnVsbCxcbiAgICAgIGRhdGVUaW1lQ3JlYXRlZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgcGF0aDogdGhpcy5mbGFnUGF0aCxcbiAgICAgIGhlYXJpbmdSZWxldmFudDogdGhpcy5oZWFyaW5nUmVsZXZhbnRGbGFnID8gJ1llcycgOiAnTm8nLFxuICAgICAgZmxhZ0NvZGU6IHRoaXMuZmxhZ0NvZGUsXG4gICAgICBzdGF0dXM6IENhc2VGbGFnU3RhdHVzLkFDVElWRVxuICAgIH0gYXMgRmxhZ0RldGFpbDtcbiAgfVxuXG4gIHB1YmxpYyBtb3ZlVG9GaW5hbFJldmlld1N0YWdlKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0RmxhZ3NDYXNlRmllbGRWYWx1ZSgpO1xuICAgIC8vIENsZWFyIHRoZSBcIm5vdEFsbENhc2VGbGFnU3RhZ2VzQ29tcGxldGVkXCIgZXJyb3JcbiAgICB0aGlzLmFsbENhc2VGbGFnU3RhZ2VzQ29tcGxldGVkID0gdHJ1ZTtcbiAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLnNldFRyaWdnZXJTdWJtaXRFdmVudCh0cnVlKTtcbiAgfVxufVxuIiwiPCEtLSBFcnJvciBtZXNzYWdlIHN1bW1hcnkgLS0+XG48ZGl2ICpuZ0lmPVwiZXJyb3JNZXNzYWdlcy5sZW5ndGggPiAwXCIgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5XCIgYXJpYS1sYWJlbGxlZGJ5PVwiZXJyb3Itc3VtbWFyeS10aXRsZVwiIHJvbGU9XCJhbGVydFwiIHRhYmluZGV4PVwiLTFcIiBkYXRhLW1vZHVsZT1cImdvdnVrLWVycm9yLXN1bW1hcnlcIj5cbiAgPGgyIGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fdGl0bGVcIiBpZD1cImVycm9yLXN1bW1hcnktdGl0bGVcIj5cbiAgICBUaGVyZSBpcyBhIHByb2JsZW1cbiAgPC9oMj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgZXJyb3JNZXNzYWdlIG9mIGVycm9yTWVzc2FnZXNcIiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlfX2JvZHlcIj5cbiAgICA8dWwgY2xhc3M9XCJnb3Z1ay1saXN0IGdvdnVrLWVycm9yLXN1bW1hcnlfX2xpc3RcIj5cbiAgICAgIDxsaT5cbiAgICAgICAgPGEgKGNsaWNrKT1cIm5hdmlnYXRlVG9FcnJvckVsZW1lbnQoZXJyb3JNZXNzYWdlLmZpZWxkSWQpXCIgY2xhc3M9XCJ2YWxpZGF0aW9uLWVycm9yXCI+e3tlcnJvck1lc3NhZ2UuZGVzY3JpcHRpb259fTwvYT5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCIhaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZVwiIGNsYXNzPVwiZm9ybS1ncm91cFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCIgW25nU3dpdGNoXT1cImZpZWxkU3RhdGVcIj5cbiAgICA8ZGl2IGlkPVwiY3JlYXRlLWZsYWctY2FwdGlvblwiIGNsYXNzPVwiZ292dWstY2FwdGlvbi1sXCIgW25nQ2xhc3NdPVwieydmb3JtLWdyb3VwLWVycm9yJzogZXJyb3JNZXNzYWdlcy5sZW5ndGggPiAwfVwiPlxuICAgICAge3tjcmVhdGVGbGFnQ2FwdGlvbn19XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTE9DQVRJT05cIj5cbiAgICAgIDxjY2Qtc2VsZWN0LWZsYWctbG9jYXRpb24gW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiIFtmbGFnc0RhdGFdPVwiZmxhZ3NEYXRhXCJcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiPjwvY2NkLXNlbGVjdC1mbGFnLWxvY2F0aW9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1RZUEVcIj5cbiAgICAgIDxjY2Qtc2VsZWN0LWZsYWctdHlwZSBbZm9ybUdyb3VwXT1cImNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwXCIgW2p1cmlzZGljdGlvbl09XCJqdXJpc2RpY3Rpb25cIlxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCJcbiAgICAgICAgKGZsYWdDb21tZW50c09wdGlvbmFsRW1pdHRlcik9XCJvbkZsYWdDb21tZW50c09wdGlvbmFsRW1pdHRlZCgkZXZlbnQpXCI+PC9jY2Qtc2VsZWN0LWZsYWctdHlwZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19MQU5HVUFHRV9JTlRFUlBSRVRFUlwiPlxuICAgICAgPGNjZC1zZWFyY2gtbGFuZ3VhZ2UtaW50ZXJwcmV0ZXIgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiIFtsYW5ndWFnZXNdPVwibGlzdE9mVmFsdWVzXCIgW2ZsYWdDb2RlXT1cImZsYWdDb2RlXCJcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiPjwvY2NkLXNlYXJjaC1sYW5ndWFnZS1pbnRlcnByZXRlcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UU1wiPlxuICAgICAgPGNjZC1hZGQtY29tbWVudHMgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiIFtvcHRpb25hbF09XCJmbGFnQ29tbWVudHNPcHRpb25hbFwiXG4gICAgICAgIChjYXNlRmxhZ1N0YXRlRW1pdHRlcik9XCJvbkNhc2VGbGFnU3RhdGVFbWl0dGVkKCRldmVudClcIj48L2NjZC1hZGQtY29tbWVudHM+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZVwiIGNsYXNzPVwiZm9ybS1ncm91cFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCIgW25nU3dpdGNoXT1cImZpZWxkU3RhdGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19NQU5BR0VfQ0FTRV9GTEFHU1wiPlxuICAgICAgPGNjZC1tYW5hZ2UtY2FzZS1mbGFncyBbZm9ybUdyb3VwXT1cImNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwXCIgW2ZsYWdzRGF0YV09XCJmbGFnc0RhdGFcIiBbY2FzZVRpdGxlXT1cImNhc2VUaXRsZVwiXG4gICAgICAgIChjYXNlRmxhZ1N0YXRlRW1pdHRlcik9XCJvbkNhc2VGbGFnU3RhdGVFbWl0dGVkKCRldmVudClcIj48L2NjZC1tYW5hZ2UtY2FzZS1mbGFncz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEVcIj5cbiAgICAgIDxjY2QtdXBkYXRlLWZsYWcgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiIFtzZWxlY3RlZEZsYWddPVwic2VsZWN0ZWRGbGFnXCJcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiPjwvY2NkLXVwZGF0ZS1mbGFnPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
480
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtY2FzZS1mbGFnLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL2Nhc2UtZmxhZy93cml0ZS1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1mbGFnL3dyaXRlLWNhc2UtZmxhZy1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQW1CLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUU3RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFM0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7Ozs7OztJQ0h6RSw4QkFBa0Y7SUFDaEYsNkJBQWlEO0lBQy9DLDBCQUFJO0lBQ0YsNEJBQW1GO0lBQWhGLDJRQUFzRDtJQUEwQixZQUE0QjtJQUFBLGlCQUFJO0lBQ3JILGlCQUFLO0lBQ1AsaUJBQUs7SUFDUCxpQkFBTTs7O0lBSG1GLGVBQTRCO0lBQTVCLGlEQUE0Qjs7O0lBUHZILDhCQUFxSztJQUNuSyw2QkFBZ0U7SUFDOUQsb0NBQ0Y7SUFBQSxp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OztRQWhEQSxtREFBOEI7UUFZOUIsZUFBc0M7UUFBdEMsMkRBQXNDO1FBeUJ0QyxlQUFxQztRQUFyQywwREFBcUM7O3VGRHZCOUIsMkJBQTJCO2NBTHZDLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsMkJBQTJCO2dCQUNyQyxXQUFXLEVBQUUsd0NBQXdDO2dCQUNyRCxTQUFTLEVBQUUsQ0FBQyx3Q0FBd0MsQ0FBQzthQUN0RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBDYXNlRWRpdERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9ucy9jYXNlLWVkaXQtZGF0YS9jYXNlLWVkaXQtZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IENhc2VGaWVsZCwgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IEZpZWxkc1V0aWxzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmllbGRzJztcbmltcG9ydCB7IEFic3RyYWN0RmllbGRXcml0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UtZmllbGQvYWJzdHJhY3QtZmllbGQtd3JpdGUuY29tcG9uZW50JztcbmltcG9ydCB7IENhc2VGbGFnU3RhdGUsIEZsYWdEZXRhaWwsIEZsYWdEZXRhaWxEaXNwbGF5V2l0aEZvcm1Hcm91cFBhdGgsIEZsYWdQYXRoLCBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoIH0gZnJvbSAnLi9kb21haW4nO1xuaW1wb3J0IHsgQ2FzZUZsYWdGaWVsZFN0YXRlLCBDYXNlRmxhZ1N0YXR1cywgQ2FzZUZsYWdUZXh0IH0gZnJvbSAnLi9lbnVtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjZC13cml0ZS1jYXNlLWZsYWctZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vd3JpdGUtY2FzZS1mbGFnLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vd3JpdGUtY2FzZS1mbGFnLWZpZWxkLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgV3JpdGVDYXNlRmxhZ0ZpZWxkQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RGaWVsZFdyaXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBwdWJsaWMgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBmaWVsZFN0YXRlOiBudW1iZXI7XG4gIHB1YmxpYyBjYXNlRmxhZ0ZpZWxkU3RhdGUgPSBDYXNlRmxhZ0ZpZWxkU3RhdGU7XG4gIHB1YmxpYyBlcnJvck1lc3NhZ2VzOiBFcnJvck1lc3NhZ2VbXSA9IFtdO1xuICBwdWJsaWMgY3JlYXRlRmxhZ0NhcHRpb246IENhc2VGbGFnVGV4dDtcbiAgcHVibGljIGZsYWdzRGF0YTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aFtdO1xuICBwdWJsaWMgc2VsZWN0ZWRGbGFnOiBGbGFnRGV0YWlsRGlzcGxheVdpdGhGb3JtR3JvdXBQYXRoO1xuICBwdWJsaWMgc2VsZWN0ZWRGbGFnc0xvY2F0aW9uOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoO1xuICBwdWJsaWMgY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgcHVibGljIGZsYWdDb21tZW50c09wdGlvbmFsID0gZmFsc2U7XG4gIHB1YmxpYyBqdXJpc2RpY3Rpb246IHN0cmluZztcbiAgcHVibGljIGNhc2VUeXBlSWQ6IHN0cmluZztcbiAgcHVibGljIGhtY3RzU2VydmljZUlkOiBzdHJpbmc7XG4gIHB1YmxpYyBmbGFnTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgZmxhZ1BhdGg6IEZsYWdQYXRoW107XG4gIHB1YmxpYyBoZWFyaW5nUmVsZXZhbnRGbGFnOiBib29sZWFuO1xuICBwdWJsaWMgZmxhZ0NvZGU6IHN0cmluZztcbiAgcHVibGljIGxpc3RPZlZhbHVlczoge2tleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nfVtdID0gbnVsbDtcbiAgcHVibGljIGlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGU6IGJvb2xlYW47XG4gIHB1YmxpYyBjYXNlVGl0bGU6IHN0cmluZztcbiAgcHJpdmF0ZSBhbGxDYXNlRmxhZ1N0YWdlc0NvbXBsZXRlZCA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IHVwZGF0ZU1vZGUgPSAnI0FSR1VNRU5UKFVQREFURSknO1xuICAvLyBDb2RlIGZvciBcIk90aGVyXCIgZmxhZyB0eXBlIGFzIGRlZmluZWQgaW4gUmVmZXJlbmNlIERhdGFcbiAgcHJpdmF0ZSByZWFkb25seSBvdGhlckZsYWdUeXBlQ29kZSA9ICdPVDAwMDEnO1xuICBwdWJsaWMgcmVhZG9ubHkgY2FzZU5hbWVNaXNzaW5nID0gJ0Nhc2UgbmFtZSBtaXNzaW5nJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhc2VFZGl0RGF0YVNlcnZpY2U6IENhc2VFZGl0RGF0YVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhc2VFZGl0RGF0YVNlcnZpY2UuY2xlYXJGb3JtVmFsaWRhdGlvbkVycm9ycygpO1xuICAgIC8vIENoZWNrIGZvciBleGlzdGluZyBGbGFnTGF1bmNoZXIgY29udHJvbCBpbiBwYXJlbnQgYW5kIHJlbW92ZSBpdCAtIHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIGVuc3VyZSBpdHMgaW52YWxpZGl0eVxuICAgIC8vIGlzIHNldCBjb3JyZWN0bHkgYXQgdGhlIHN0YXJ0LCB3aGVuIHRoZSBjb21wb25lbnQgaXMgcmVsb2FkZWQgYW5kIHRoZSBjb250cm9sIGlzIHJlLXJlZ2lzdGVyZWQuIE90aGVyd2lzZSwgdGhlXG4gICAgLy8gdmFsaWRhdG9yIHN0YXRlIGdldHMgY2FycmllZCBvdmVyXG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwICYmIHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLmNhc2VGaWVsZC5pZCkpIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnJlbW92ZUNvbnRyb2wodGhpcy5jYXNlRmllbGQuaWQpO1xuICAgIH1cbiAgICAvLyBGcm9tIHRoaXMgcG9pbnQsIHRoaXMuZm9ybUdyb3VwIHJlZmVycyB0byB0aGUgRm9ybUdyb3VwIGZvciB0aGUgRmxhZ0xhdW5jaGVyIGZpZWxkLCBub3QgdGhlIHBhcmVudCBGb3JtR3JvdXBcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMucmVnaXN0ZXJDb250cm9sKG5ldyBGb3JtR3JvdXAoe30sIHtcbiAgICAgIHZhbGlkYXRvcnM6IChfOiBBYnN0cmFjdENvbnRyb2wpOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0gfCBudWxsID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmFsbENhc2VGbGFnU3RhZ2VzQ29tcGxldGVkKSB7XG4gICAgICAgICAgLy8gUmV0dXJuIGFuIGVycm9yIHRvIG1hcmsgdGhlIEZvcm1Hcm91cCBhcyBpbnZhbGlkIGlmIG5vdCBhbGwgQ2FzZSBGbGFnIHN0YWdlcyBoYXZlIGJlZW4gY29tcGxldGVkXG4gICAgICAgICAgcmV0dXJuIHtub3RBbGxDYXNlRmxhZ1N0YWdlc0NvbXBsZXRlZDogdHJ1ZX07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSksIHRydWUpIGFzIEZvcm1Hcm91cDtcblxuICAgIHRoaXMuY3JlYXRlRmxhZ0NhcHRpb24gPSBDYXNlRmxhZ1RleHQuQ0FQVElPTjtcbiAgICAvLyBHZXQgdGhlIGNhc2UgdHlwZSBJRCBmcm9tIHRoZSBDYXNlVmlldyBvYmplY3QgaW4gdGhlIHNuYXBzaG90IGRhdGEgKHJlcXVpcmVkIGZvciByZXRyaWV2aW5nIHRoZSBhdmFpbGFibGUgZmxhZ1xuICAgIC8vIHR5cGVzIGZvciBhIGNhc2UpXG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5jYXNlICYmIHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5jYXNlLmNhc2VfdHlwZSkge1xuICAgICAgdGhpcy5jYXNlVHlwZUlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmNhc2UuY2FzZV90eXBlLmlkO1xuICAgICAgLy8gR2V0IHRoZSBqdXJpc2RpY3Rpb24gKHJlcXVpcmVkIGZvciByZXRyaWV2aW5nIHRoZSBhdmFpbGFibGUgZmxhZyB0eXBlcyBpZiB1bmFibGUgdG8gZGV0ZXJtaW5lIHVzaW5nIGNhc2UgdHlwZSBJRClcbiAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuY2FzZS5jYXNlX3R5cGUuanVyaXNkaWN0aW9uKSB7XG4gICAgICAgIHRoaXMuanVyaXNkaWN0aW9uID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmNhc2UuY2FzZV90eXBlLmp1cmlzZGljdGlvbi5pZDtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRXh0cmFjdCBhbGwgZmxhZ3MtcmVsYXRlZCBkYXRhIGZyb20gdGhlIENhc2VFdmVudFRyaWdnZXIgb2JqZWN0IGluIHRoZSBzbmFwc2hvdCBkYXRhXG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIpIHtcbiAgICAgIC8vIEdldCB0aGUgSE1DVFNTZXJ2aWNlSWQgZnJvbSBzdXBwbGVtZW50YXJ5IGRhdGEsIGlmIGl0IGV4aXN0cyAocmVxdWlyZWQgZm9yIHJldHJpZXZpbmcgdGhlIGF2YWlsYWJsZSBmbGFnIHR5cGVzIGluXG4gICAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2UsIG9ubHkgZmFsbGluZyBiYWNrIG9uIGNhc2UgdHlwZSBJRCBvciBqdXJpc2lkaWN0aW9uIGlmIGl0J3Mgbm90IHByZXNlbnQpXG4gICAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmV2ZW50VHJpZ2dlci5zdXBwbGVtZW50YXJ5X2RhdGFcbiAgICAgICAgJiYgdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmV2ZW50VHJpZ2dlci5zdXBwbGVtZW50YXJ5X2RhdGEuSE1DVFNTZXJ2aWNlSWQpIHtcbiAgICAgICAgdGhpcy5obWN0c1NlcnZpY2VJZCA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIuc3VwcGxlbWVudGFyeV9kYXRhLkhNQ1RTU2VydmljZUlkO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcykge1xuICAgICAgICB0aGlzLmZsYWdzRGF0YSA9ICgodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcykgYXMgQ2FzZUZpZWxkW10pXG4gICAgICAgIC5yZWR1Y2UoKGZsYWdzLCBjYXNlRmllbGQpID0+IHtcbiAgICAgICAgICByZXR1cm4gRmllbGRzVXRpbHMuZXh0cmFjdEZsYWdzRGF0YUZyb21DYXNlRmllbGQoZmxhZ3MsIGNhc2VGaWVsZCwgY2FzZUZpZWxkLmlkLCBjYXNlRmllbGQpO1xuICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgLy8gU2V0IGJvb2xlYW4gaW5kaWNhdGluZyB0aGUgZGlzcGxheV9jb250ZXh0X3BhcmFtZXRlciBpcyBcInVwZGF0ZVwiXG4gICAgICAgIHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZSA9XG4gICAgICAgICAgdGhpcy5zZXREaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZSgodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcykgYXMgQ2FzZUZpZWxkW10pO1xuXG4gICAgICAgIC8vIFNldCBzdGFydGluZyBmaWVsZCBzdGF0ZVxuICAgICAgICB0aGlzLmZpZWxkU3RhdGUgPSB0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGUgPyBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19NQU5BR0VfQ0FTRV9GTEFHUyA6IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0xPQ0FUSU9OO1xuICAgICAgICAvLyBHZXQgY2FzZSB0aXRsZSwgdG8gYmUgdXNlZCBieSBjaGlsZCBjb21wb25lbnRzXG4gICAgICAgIHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5jYXNlVGl0bGUkLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogdGl0bGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5jYXNlVGl0bGUgPSB0aXRsZS5sZW5ndGggPiAwID8gdGl0bGUgOiB0aGlzLmNhc2VOYW1lTWlzc2luZztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZShjYXNlRmllbGRzOiBDYXNlRmllbGRbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjYXNlRmllbGRzLnNvbWUoXG4gICAgICBjYXNlRmllbGQgPT4gRmllbGRzVXRpbHMuaXNGbGFnTGF1bmNoZXJDYXNlRmllbGQoY2FzZUZpZWxkKSAmJiBjYXNlRmllbGQuZGlzcGxheV9jb250ZXh0X3BhcmFtZXRlciA9PT0gdGhpcy51cGRhdGVNb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNhc2VGbGFnU3RhdGVFbWl0dGVkKGNhc2VGbGFnU3RhdGU6IENhc2VGbGFnU3RhdGUpOiB2b2lkIHtcbiAgICB0aGlzLmNhc2VFZGl0RGF0YVNlcnZpY2UuY2xlYXJGb3JtVmFsaWRhdGlvbkVycm9ycygpO1xuICAgIC8vIElmIHRoZSBjdXJyZW50IHN0YXRlIGlzIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0xPQ0FUSU9OIGFuZCBhIGZsYWcgbG9jYXRpb24gKGEgRmxhZ3MgaW5zdGFuY2UpIGhhcyBiZWVuIHNlbGVjdGVkLFxuICAgIC8vIHNldCB0aGUgcGFyZW50IENhc2UgRmxhZyBGb3JtR3JvdXAgZm9yIHRoaXMgY29tcG9uZW50J3MgY2hpbGRyZW4gYnkgdXNpbmcgdGhlIHByb3ZpZGVkIHBhdGhUb0ZsYWdzRm9ybUdyb3VwLCBhbmRcbiAgICAvLyBzZXQgdGhlIHNlbGVjdGVkIGZsYWcgbG9jYXRpb24gb24gdGhpcyBjb21wb25lbnRcbiAgICBpZiAoY2FzZUZsYWdTdGF0ZS5jdXJyZW50Q2FzZUZsYWdGaWVsZFN0YXRlID09PSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19MT0NBVElPTlxuICAgICAgJiYgY2FzZUZsYWdTdGF0ZS5zZWxlY3RlZEZsYWdzTG9jYXRpb25cbiAgICAgICYmIGNhc2VGbGFnU3RhdGUuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uLnBhdGhUb0ZsYWdzRm9ybUdyb3VwKSB7XG4gICAgICB0aGlzLnNldENhc2VGbGFnUGFyZW50Rm9ybUdyb3VwKGNhc2VGbGFnU3RhdGUuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uLnBhdGhUb0ZsYWdzRm9ybUdyb3VwKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uID0gY2FzZUZsYWdTdGF0ZS5zZWxlY3RlZEZsYWdzTG9jYXRpb247XG4gICAgfVxuICAgIC8vIElmIHRoZSBjdXJyZW50IHN0YXRlIGlzIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1RZUEUsIGNhY2hlIHRoZSBmbGFnIG5hbWUsIHBhdGgsIGhlYXJpbmcgcmVsZXZhbnQgaW5kaWNhdG9yLCBjb2RlLFxuICAgIC8vIGFuZCBcImxpc3Qgb2YgdmFsdWVzXCIgKGN1cnJlbnRseSBhcHBsaWNhYmxlIHRvIGxhbmd1YWdlIGZsYWcgdHlwZXMpXG4gICAgaWYgKGNhc2VGbGFnU3RhdGUuY3VycmVudENhc2VGbGFnRmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVFlQRSkge1xuICAgICAgdGhpcy5mbGFnTmFtZSA9IGNhc2VGbGFnU3RhdGUuZmxhZ05hbWU7XG4gICAgICB0aGlzLmZsYWdQYXRoID0gY2FzZUZsYWdTdGF0ZS5mbGFnUGF0aDtcbiAgICAgIHRoaXMuaGVhcmluZ1JlbGV2YW50RmxhZyA9IGNhc2VGbGFnU3RhdGUuaGVhcmluZ1JlbGV2YW50RmxhZztcbiAgICAgIHRoaXMuZmxhZ0NvZGUgPSBjYXNlRmxhZ1N0YXRlLmZsYWdDb2RlO1xuICAgICAgdGhpcy5saXN0T2ZWYWx1ZXMgPSBjYXNlRmxhZ1N0YXRlLmxpc3RPZlZhbHVlcztcbiAgICB9XG4gICAgLy8gSWYgdGhlIGN1cnJlbnQgc3RhdGUgaXMgQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTUFOQUdFX0NBU0VfRkxBR1MgYW5kIGEgZmxhZyBoYXMgYmVlbiBzZWxlY3RlZCwgc2V0IHRoZSBwYXJlbnRcbiAgICAvLyBDYXNlIEZsYWcgRm9ybUdyb3VwIGZvciB0aGlzIGNvbXBvbmVudCdzIGNoaWxkcmVuIGJ5IHVzaW5nIHRoZSBwcm92aWRlZCBwYXRoVG9GbGFnc0Zvcm1Hcm91cFxuICAgIGlmIChjYXNlRmxhZ1N0YXRlLmN1cnJlbnRDYXNlRmxhZ0ZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX01BTkFHRV9DQVNFX0ZMQUdTXG4gICAgICAmJiBjYXNlRmxhZ1N0YXRlLnNlbGVjdGVkRmxhZ1xuICAgICAgJiYgY2FzZUZsYWdTdGF0ZS5zZWxlY3RlZEZsYWcucGF0aFRvRmxhZ3NGb3JtR3JvdXApIHtcbiAgICAgIHRoaXMuc2V0Q2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAoY2FzZUZsYWdTdGF0ZS5zZWxlY3RlZEZsYWcucGF0aFRvRmxhZ3NGb3JtR3JvdXApO1xuICAgIH1cblxuICAgIHRoaXMuZXJyb3JNZXNzYWdlcyA9IGNhc2VGbGFnU3RhdGUuZXJyb3JNZXNzYWdlcztcbiAgICB0aGlzLnNlbGVjdGVkRmxhZyA9IGNhc2VGbGFnU3RhdGUuc2VsZWN0ZWRGbGFnO1xuICAgIC8vIFZhbGlkYXRpb24gc3VjY2VlZGVkOyBwcm9jZWVkIHRvIG5leHQgc3RhdGUgb3IgZmluYWwgcmV2aWV3IHN0YWdlIChcIkNoZWNrIHlvdXIgYW5zd2Vyc1wiKVxuICAgIGlmICh0aGlzLmVycm9yTWVzc2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBJZiB0aGUgY3VycmVudCBzdGF0ZSBpcyBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UUyBvciBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEUsIG1vdmUgdG8gZmluYWxcbiAgICAgIC8vIHJldmlldyBzdGFnZVxuICAgICAgaWYgKGNhc2VGbGFnU3RhdGUuY3VycmVudENhc2VGbGFnRmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfQ09NTUVOVFMgfHxcbiAgICAgICAgICBjYXNlRmxhZ1N0YXRlLmN1cnJlbnRDYXNlRmxhZ0ZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURSkge1xuICAgICAgICB0aGlzLm1vdmVUb0ZpbmFsUmV2aWV3U3RhZ2UoKTtcbiAgICAgICAgLy8gRG9uJ3QgbW92ZSB0byBuZXh0IHN0YXRlIGlmIGN1cnJlbnQgc3RhdGUgaXMgQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVFlQRSBhbmQgdGhlIGZsYWcgdHlwZSBpcyBhIHBhcmVudCAtIHRoaXNcbiAgICAgICAgLy8gbWVhbnMgdGhlIHVzZXIgbmVlZHMgdG8gc2VsZWN0IGZyb20gdGhlIG5leHQgc2V0IG9mIGZsYWcgdHlwZXMgYmVmb3JlIHRoZXkgY2FuIG1vdmUgb25cbiAgICAgIH0gZWxzZSBpZiAoIWNhc2VGbGFnU3RhdGUuaXNQYXJlbnRGbGFnVHlwZSkge1xuICAgICAgICAvLyBQcm9jZWVkIHRvIG5leHQgc3RhdGVcbiAgICAgICAgdGhpcy5wcm9jZWVkVG9OZXh0U3RhdGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcHJvY2VlZFRvTmV4dFN0YXRlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0F0RmluYWxTdGF0ZSgpKSB7XG4gICAgICAvLyBTa2lwIHRoZSBcImxhbmd1YWdlIGludGVycHJldGVyXCIgc3RhdGUgaWYgY3VycmVudCBzdGF0ZSBpcyBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19UWVBFIGFuZCB0aGUgZmxhZyB0eXBlIGRvZXNuJ3RcbiAgICAgIC8vIGhhdmUgYSBcImxpc3Qgb2YgdmFsdWVzXCIgLSBjdXJyZW50bHksIHRoaXMgaXMgcHJlc2VudCBvbmx5IGZvciB0aG9zZSBmbGFnIHR5cGVzIHRoYXQgcmVxdWlyZSBsYW5ndWFnZSBpbnRlcnByZXRlclxuICAgICAgLy8gc2VsZWN0aW9uXG4gICAgICBpZiAodGhpcy5maWVsZFN0YXRlID09PSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19UWVBFICYmICF0aGlzLmxpc3RPZlZhbHVlcykge1xuICAgICAgICB0aGlzLmZpZWxkU3RhdGUgPSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UUztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmllbGRTdGF0ZSsrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRGbGFnc0Nhc2VGaWVsZFZhbHVlKCk6IHZvaWQge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogc3dpdGNoLWRlZmF1bHRcbiAgICBzd2l0Y2ggKHRoaXMuZmllbGRTdGF0ZSkge1xuICAgICAgY2FzZSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UUzpcbiAgICAgICAgdGhpcy5hZGRGbGFnVG9Db2xsZWN0aW9uKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEU6XG4gICAgICAgIHRoaXMudXBkYXRlRmxhZ0luQ29sbGVjdGlvbigpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkRmxhZ1RvQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICAvLyBFbnN1cmUgbm8gbW9yZSB0aGFuIG9uZSBuZXcgZmxhZyBpcyBiZWluZyBhZGRlZCBhdCBhIHRpbWUsIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIGVhY2ggRmxhZ3MgY2FzZSBmaWVsZCBhbmQgcmVtb3ZpbmdcbiAgICAvLyBhbnkgcHJldmlvdXMgZW50cnkgZnJvbSB0aGUgZGV0YWlscyBhcnJheSB3aGVyZSB0aGF0IGVudHJ5IGhhcyBubyBpZCAoaGVuY2UgaXQgaXMgbmV3IC0gYW5kIHRoZXJlIHNob3VsZCBiZSBvbmx5XG4gICAgLy8gb25lIHN1Y2ggZW50cnkpLiAoVGhpcyBzY2VuYXJpbyBvY2N1cnMgaWYgdGhlIHVzZXIgcmVwZWF0cyB0aGUgQ2FzZSBGbGFnIGNyZWF0aW9uIGpvdXJuZXkgYnkgdXNpbmcgdGhlIFwiQ2hhbmdlXCJcbiAgICAvLyBsaW5rIGFuZCBzZWxlY3RzIGVpdGhlciB0aGUgc2FtZSBmbGFnIGxvY2F0aW9uIGFzIGJlZm9yZSBvciBhIGRpZmZlcmVudCBvbmUuKVxuICAgIHRoaXMuZmxhZ3NEYXRhLmZvckVhY2goaW5zdGFuY2UgPT4ge1xuICAgICAgLy8gVXNlIHRoZSBwYXRoVG9GbGFnc0Zvcm1Hcm91cCBwcm9wZXJ0eSBmb3IgZWFjaCBGbGFncyBjYXNlIGZpZWxkIHRvIGRyaWxsIGRvd24gdG8gdGhlIGNvcnJlY3QgcGFydCBvZiB0aGVcbiAgICAgIC8vIENhc2VGaWVsZCB2YWx1ZSB0byByZW1vdmUgdGhlIG5ldyB2YWx1ZSBmcm9tXG4gICAgICBsZXQgdmFsdWUgPSBpbnN0YW5jZS5jYXNlRmllbGQudmFsdWU7XG4gICAgICBjb25zdCBwYXRoVG9WYWx1ZSA9IGluc3RhbmNlLnBhdGhUb0ZsYWdzRm9ybUdyb3VwO1xuICAgICAgLy8gUm9vdC1sZXZlbCBGbGFncyBDYXNlRmllbGRzIGRvbid0IGhhdmUgYSBkb3QtZGVsaW1pdGVkIHBhdGggLSBqdXN0IHRoZSBDYXNlRmllbGQgSUQgaXRzZWxmIC0gc28gZG9uJ3QgZHJpbGwgZG93blxuICAgICAgaWYgKHBhdGhUb1ZhbHVlLmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgICAgIHBhdGhUb1ZhbHVlLnNsaWNlKHBhdGhUb1ZhbHVlLmluZGV4T2YoJy4nKSArIDEpLnNwbGl0KCcuJykuZm9yRWFjaChwYXJ0ID0+IHZhbHVlID0gdmFsdWVbcGFydF0pO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmRldGFpbHMgJiYgdmFsdWUuZGV0YWlscy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZOZXdGbGFnRGV0YWlsID0gdmFsdWUuZGV0YWlscy5maW5kSW5kZXgoZWxlbWVudCA9PiAhZWxlbWVudC5oYXNPd25Qcm9wZXJ0eSgnaWQnKSk7XG4gICAgICAgIGlmIChpbmRleE9mTmV3RmxhZ0RldGFpbCA+IC0xKSB7XG4gICAgICAgICAgdmFsdWUuZGV0YWlscy5zcGxpY2UoaW5kZXhPZk5ld0ZsYWdEZXRhaWwsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgbGV0IGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSB0aGlzLnNlbGVjdGVkRmxhZ3NMb2NhdGlvbi5jYXNlRmllbGQudmFsdWU7XG4gICAgLy8gVXNlIHRoZSBwYXRoVG9GbGFnc0Zvcm1Hcm91cCBwcm9wZXJ0eSBmcm9tIHRoZSBzZWxlY3RlZCBmbGFnIGxvY2F0aW9uIHRvIGRyaWxsIGRvd24gdG8gdGhlIGNvcnJlY3QgcGFydCBvZiB0aGVcbiAgICAvLyBDYXNlRmllbGQgdmFsdWUgdG8gYXBwbHkgY2hhbmdlcyB0b1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLnNlbGVjdGVkRmxhZ3NMb2NhdGlvbi5wYXRoVG9GbGFnc0Zvcm1Hcm91cDtcbiAgICAvLyBSb290LWxldmVsIEZsYWdzIENhc2VGaWVsZHMgZG9uJ3QgaGF2ZSBhIGRvdC1kZWxpbWl0ZWQgcGF0aCAtIGp1c3QgdGhlIENhc2VGaWVsZCBJRCBpdHNlbGYgLSBzbyBkb24ndCBkcmlsbCBkb3duXG4gICAgaWYgKHBhdGguaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgIHBhdGguc2xpY2UocGF0aC5pbmRleE9mKCcuJykgKyAxKS5zcGxpdCgnLicpLmZvckVhY2gocGFydCA9PiBmbGFnc0Nhc2VGaWVsZFZhbHVlID0gZmxhZ3NDYXNlRmllbGRWYWx1ZVtwYXJ0XSk7XG4gICAgfVxuICAgIC8vIElmIHRoZSBDYXNlRmllbGQgZm9yIHRoZSBzZWxlY3RlZCBmbGFncyBsb2NhdGlvbiBoYXMgbm8gdmFsdWUsIHNldCBpdCB0byBhbiBlbXB0eSBvYmplY3Qgc28gaXQgY2FuIGJlIHBvcHVsYXRlZFxuICAgIC8vIHdpdGggZmxhZyBkZXRhaWxzXG4gICAgaWYgKCFmbGFnc0Nhc2VGaWVsZFZhbHVlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRmxhZ3NMb2NhdGlvbi5jYXNlRmllbGQudmFsdWUgPSB7fTtcbiAgICAgIGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSB0aGlzLnNlbGVjdGVkRmxhZ3NMb2NhdGlvbi5jYXNlRmllbGQudmFsdWU7XG4gICAgfVxuICAgIC8vIENyZWF0ZSBhIGRldGFpbHMgYXJyYXkgaWYgb25lIGRvZXMgbm90IGV4aXN0XG4gICAgaWYgKCFmbGFnc0Nhc2VGaWVsZFZhbHVlLmhhc093blByb3BlcnR5KCdkZXRhaWxzJykpIHtcbiAgICAgIGZsYWdzQ2FzZUZpZWxkVmFsdWUuZGV0YWlscyA9IFtdO1xuICAgIH1cbiAgICAvLyBQb3B1bGF0ZSBuZXcgRmxhZ0RldGFpbCBpbnN0YW5jZSBhbmQgYWRkIHRvIHRoZSBGbGFncyBkYXRhIHdpdGhpbiB0aGUgQ2FzZUZpZWxkIGluc3RhbmNlIG9mIHRoZSBzZWxlY3RlZCBmbGFnXG4gICAgLy8gbG9jYXRpb25cbiAgICBmbGFnc0Nhc2VGaWVsZFZhbHVlLmRldGFpbHMucHVzaCh7dmFsdWU6IHRoaXMucG9wdWxhdGVOZXdGbGFnRGV0YWlsSW5zdGFuY2UoKX0pO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUZsYWdJbkNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgLy8gRW5zdXJlIG5vIG1vcmUgdGhhbiBvbmUgZmxhZyBpcyBiZWluZyB1cGRhdGVkIGF0IGEgdGltZSwgYnkgaXRlcmF0aW5nIHRocm91Z2ggZWFjaCBGbGFncyBjYXNlIGZpZWxkIGFuZCByZXNldHRpbmdcbiAgICAvLyB0aGUgY29tbWVudHMsIHN0YXR1cywgYW5kIGRhdGUvdGltZSBtb2RpZmllZCAoaWYgcHJlc2VudCkgZm9yIGVhY2ggZW50cnkgaW4gdGhlIGRldGFpbHMgYXJyYXksIHdpdGggb3JpZ2luYWwgdmFsdWVzXG4gICAgLy8gZnJvbSB0aGUgY29ycmVzcG9uZGluZyBmb3JtYXR0ZWRfdmFsdWUgcHJvcGVydHkuIChUaGlzIHNjZW5hcmlvIG9jY3VycyBpZiB0aGUgdXNlciByZXBlYXRzIHRoZSBNYW5hZ2UgQ2FzZSBGbGFnXG4gICAgLy8gam91cm5leSBieSB1c2luZyB0aGUgXCJDaGFuZ2VcIiBsaW5rIGFuZCBzZWxlY3RzIGEgZGlmZmVyZW50IGZsYWcgdG8gdXBkYXRlLilcbiAgICB0aGlzLmZsYWdzRGF0YS5mb3JFYWNoKGluc3RhbmNlID0+IHtcbiAgICAgIC8vIFVzZSB0aGUgcGF0aFRvRmxhZ3NGb3JtR3JvdXAgcHJvcGVydHkgZm9yIGVhY2ggRmxhZ3MgY2FzZSBmaWVsZCB0byBkcmlsbCBkb3duIHRvIHRoZSBjb3JyZWN0IHBhcnQgb2YgdGhlXG4gICAgICAvLyBDYXNlRmllbGQgdmFsdWUgZm9yIHdoaWNoIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHZhbHVlc1xuICAgICAgbGV0IHZhbHVlID0gaW5zdGFuY2UuY2FzZUZpZWxkLnZhbHVlO1xuICAgICAgbGV0IGZvcm1hdHRlZFZhbHVlID0gaW5zdGFuY2UuY2FzZUZpZWxkLmZvcm1hdHRlZF92YWx1ZTtcbiAgICAgIGNvbnN0IHBhdGhUb1ZhbHVlID0gaW5zdGFuY2UucGF0aFRvRmxhZ3NGb3JtR3JvdXA7XG4gICAgICAvLyBSb290LWxldmVsIEZsYWdzIENhc2VGaWVsZHMgZG9uJ3QgaGF2ZSBhIGRvdC1kZWxpbWl0ZWQgcGF0aCAtIGp1c3QgdGhlIENhc2VGaWVsZCBJRCBpdHNlbGYgLSBzbyBkb24ndCBkcmlsbCBkb3duXG4gICAgICBpZiAocGF0aFRvVmFsdWUuaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgICAgcGF0aFRvVmFsdWUuc2xpY2UocGF0aFRvVmFsdWUuaW5kZXhPZignLicpICsgMSkuc3BsaXQoJy4nKS5mb3JFYWNoKHBhcnQgPT4ge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWVbcGFydF07XG4gICAgICAgICAgaWYgKGZvcm1hdHRlZFZhbHVlICYmIEZpZWxkc1V0aWxzLmlzTm9uRW1wdHlPYmplY3QoZm9ybWF0dGVkVmFsdWUpKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IGZvcm1hdHRlZFZhbHVlW3BhcnRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUuZGV0YWlscyAmJiB2YWx1ZS5kZXRhaWxzLmxlbmd0aCA+IDAgJiYgZm9ybWF0dGVkVmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdChmb3JtYXR0ZWRWYWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuZGV0YWlscy5mb3JFYWNoKGZsYWdEZXRhaWwgPT4ge1xuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRmxhZ0RldGFpbCA9IGZvcm1hdHRlZFZhbHVlLmRldGFpbHMuZmluZChkZXRhaWwgPT4gZGV0YWlsLmlkID09PSBmbGFnRGV0YWlsLmlkKTtcbiAgICAgICAgICBpZiAob3JpZ2luYWxGbGFnRGV0YWlsKSB7XG4gICAgICAgICAgICBmbGFnRGV0YWlsLnZhbHVlLmZsYWdDb21tZW50ID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlLmZsYWdDb21tZW50XG4gICAgICAgICAgICAgID8gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlLmZsYWdDb21tZW50XG4gICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGZsYWdEZXRhaWwudmFsdWUuc3RhdHVzID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlLnN0YXR1cztcbiAgICAgICAgICAgIGZsYWdEZXRhaWwudmFsdWUuZGF0ZVRpbWVNb2RpZmllZCA9IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZS5kYXRlVGltZU1vZGlmaWVkXG4gICAgICAgICAgICAgID8gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlLmRhdGVUaW1lTW9kaWZpZWRcbiAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbGV0IGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSB0aGlzLnNlbGVjdGVkRmxhZy5jYXNlRmllbGQudmFsdWU7XG4gICAgLy8gVXNlIHRoZSBwYXRoVG9GbGFnc0Zvcm1Hcm91cCBwcm9wZXJ0eSBmcm9tIHRoZSBzZWxlY3RlZCBmbGFnIGxvY2F0aW9uIHRvIGRyaWxsIGRvd24gdG8gdGhlIGNvcnJlY3QgcGFydCBvZiB0aGVcbiAgICAvLyBDYXNlRmllbGQgdmFsdWUgdG8gYXBwbHkgY2hhbmdlcyB0b1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLnNlbGVjdGVkRmxhZy5wYXRoVG9GbGFnc0Zvcm1Hcm91cDtcbiAgICAvLyBSb290LWxldmVsIEZsYWdzIENhc2VGaWVsZHMgZG9uJ3QgaGF2ZSBhIGRvdC1kZWxpbWl0ZWQgcGF0aCAtIGp1c3QgdGhlIENhc2VGaWVsZCBJRCBpdHNlbGYgLSBzbyBkb24ndCBkcmlsbCBkb3duXG4gICAgaWYgKHBhdGguaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgIHBhdGguc2xpY2UocGF0aC5pbmRleE9mKCcuJykgKyAxKS5zcGxpdCgnLicpLmZvckVhY2gocGFydCA9PiBmbGFnc0Nhc2VGaWVsZFZhbHVlID0gZmxhZ3NDYXNlRmllbGRWYWx1ZVtwYXJ0XSk7XG4gICAgfVxuICAgIGlmIChmbGFnc0Nhc2VGaWVsZFZhbHVlKSB7XG4gICAgICBjb25zdCBmbGFnRGV0YWlsVG9VcGRhdGUgPSBmbGFnc0Nhc2VGaWVsZFZhbHVlLmRldGFpbHMuZmluZChcbiAgICAgICAgZGV0YWlsID0+IGRldGFpbC5pZCA9PT0gdGhpcy5zZWxlY3RlZEZsYWcuZmxhZ0RldGFpbERpc3BsYXkuZmxhZ0RldGFpbC5pZCk7XG4gICAgICBpZiAoZmxhZ0RldGFpbFRvVXBkYXRlKSB7XG4gICAgICAgIGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZS5mbGFnQ29tbWVudCA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAudmFsdWUuZmxhZ0NvbW1lbnRzXG4gICAgICAgICAgPyB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLnZhbHVlLmZsYWdDb21tZW50c1xuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgZmxhZ0RldGFpbFRvVXBkYXRlLnZhbHVlLnN0YXR1cyA9IHRoaXMuc2VsZWN0ZWRGbGFnLmZsYWdEZXRhaWxEaXNwbGF5LmZsYWdEZXRhaWwuc3RhdHVzO1xuICAgICAgICBmbGFnRGV0YWlsVG9VcGRhdGUudmFsdWUuZGF0ZVRpbWVNb2RpZmllZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNBdEZpbmFsU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZVxuICAgICAgPyB0aGlzLmZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURVxuICAgICAgOiB0aGlzLmZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTO1xuICB9XG5cbiAgcHVibGljIG5hdmlnYXRlVG9FcnJvckVsZW1lbnQoZWxlbWVudElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoZWxlbWVudElkKSB7XG4gICAgICBjb25zdCBodG1sRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XG4gICAgICBpZiAoaHRtbEVsZW1lbnQpIHtcbiAgICAgICAgaHRtbEVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcbiAgICAgICAgaHRtbEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25GbGFnQ29tbWVudHNPcHRpb25hbEVtaXR0ZWQoXzogYW55KTogdm9pZCB7XG4gICAgdGhpcy5mbGFnQ29tbWVudHNPcHRpb25hbCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBwYXJlbnQge0BsaW5rIEZvcm1Hcm91cH0gZm9yIHRoaXMgY29tcG9uZW50J3MgY2hpbGRyZW4sIGRlcGVuZGluZyBvbiB0aGUgYEZsYWdzYCB7QGxpbmsgQ2FzZUZpZWxkfSBpbnN0YW5jZVxuICAgKiB0byB3aGljaCBkYXRhIHNob3VsZCBiZSBhdHRhY2hlZC4gKipOb3RlOioqIFRoZSBwYXJlbnQgaXMgbm90IF90aGlzXyBjb21wb25lbnQncyBgRm9ybUdyb3VwYCAoYXMgbWlnaHQgb3RoZXJ3aXNlIGJlXG4gICAqIGV4cGVjdGVkKSBiZWNhdXNlIHRoaXMgY29tcG9uZW50IGlzIG5vdCBleHBlY3RlZCB0byBoYXZlIGEgdmFsdWUsIGdpdmVuIGl0IGlzIHVzZWQgZm9yIHRoZSBlbXB0eSBgRmxhZ0xhdW5jaGVyYCBiYXNlXG4gICAqIGZpZWxkIHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoVG9GbGFnc0Zvcm1Hcm91cCBUaGUgZG90LWRlbGltaXRlZCBzdHJpbmcgdGhhdCBpcyB0aGUgcGF0aCB0byB0aGUgYEZvcm1Hcm91cGAgZm9yIGEgYEZsYWdzYCBpbnN0YW5jZVxuICAgKi9cbiAgcHVibGljIHNldENhc2VGbGFnUGFyZW50Rm9ybUdyb3VwKHBhdGhUb0ZsYWdzRm9ybUdyb3VwOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwID0gdGhpcy5mb3JtR3JvdXAucGFyZW50LmdldChwYXRoVG9GbGFnc0Zvcm1Hcm91cCkgYXMgRm9ybUdyb3VwO1xuICB9XG5cbiAgcHVibGljIHBvcHVsYXRlTmV3RmxhZ0RldGFpbEluc3RhbmNlKCk6IEZsYWdEZXRhaWwge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLmZsYWdOYW1lLFxuICAgICAgLy8gQ3VycmVudGx5LCBzdWJUeXBlVmFsdWUgYW5kIHN1YlR5cGVLZXkgYXJlIGFwcGxpY2FibGUgb25seSB0byBsYW5ndWFnZSBmbGFnIHR5cGVzXG4gICAgICBzdWJUeXBlVmFsdWU6IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAudmFsdWUubGFuZ3VhZ2VTZWFyY2hUZXJtXG4gICAgICAgID8gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC52YWx1ZS5sYW5ndWFnZVNlYXJjaFRlcm0udmFsdWVcbiAgICAgICAgOiB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLnZhbHVlLm1hbnVhbExhbmd1YWdlRW50cnlcbiAgICAgICAgICA/IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAudmFsdWUubWFudWFsTGFuZ3VhZ2VFbnRyeVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIC8vIEZvciB1c2VyLWVudGVyZWQgKGkuZS4gbm9uLVJlZmVyZW5jZSBEYXRhKSBsYW5ndWFnZXMsIHRoZXJlIGlzIG5vIGtleVxuICAgICAgc3ViVHlwZUtleTogdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC52YWx1ZS5sYW5ndWFnZVNlYXJjaFRlcm1cbiAgICAgICAgPyB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLnZhbHVlLmxhbmd1YWdlU2VhcmNoVGVybS5rZXlcbiAgICAgICAgOiBudWxsLFxuICAgICAgb3RoZXJEZXNjcmlwdGlvbjogdGhpcy5mbGFnQ29kZSA9PT0gdGhpcy5vdGhlckZsYWdUeXBlQ29kZSAmJiB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLnZhbHVlLm90aGVyRmxhZ1R5cGVEZXNjcmlwdGlvblxuICAgICAgICA/IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAudmFsdWUub3RoZXJGbGFnVHlwZURlc2NyaXB0aW9uXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGZsYWdDb21tZW50OiB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLnZhbHVlLmZsYWdDb21tZW50cyA/IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAudmFsdWUuZmxhZ0NvbW1lbnRzIDogbnVsbCxcbiAgICAgIGRhdGVUaW1lQ3JlYXRlZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgcGF0aDogdGhpcy5mbGFnUGF0aCxcbiAgICAgIGhlYXJpbmdSZWxldmFudDogdGhpcy5oZWFyaW5nUmVsZXZhbnRGbGFnID8gJ1llcycgOiAnTm8nLFxuICAgICAgZmxhZ0NvZGU6IHRoaXMuZmxhZ0NvZGUsXG4gICAgICBzdGF0dXM6IENhc2VGbGFnU3RhdHVzLkFDVElWRVxuICAgIH0gYXMgRmxhZ0RldGFpbDtcbiAgfVxuXG4gIHB1YmxpYyBtb3ZlVG9GaW5hbFJldmlld1N0YWdlKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0RmxhZ3NDYXNlRmllbGRWYWx1ZSgpO1xuICAgIC8vIENsZWFyIHRoZSBcIm5vdEFsbENhc2VGbGFnU3RhZ2VzQ29tcGxldGVkXCIgZXJyb3JcbiAgICB0aGlzLmFsbENhc2VGbGFnU3RhZ2VzQ29tcGxldGVkID0gdHJ1ZTtcbiAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLnNldFRyaWdnZXJTdWJtaXRFdmVudCh0cnVlKTtcbiAgfVxufVxuIiwiPCEtLSBFcnJvciBtZXNzYWdlIHN1bW1hcnkgLS0+XG48ZGl2ICpuZ0lmPVwiZXJyb3JNZXNzYWdlcy5sZW5ndGggPiAwXCIgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5XCIgYXJpYS1sYWJlbGxlZGJ5PVwiZXJyb3Itc3VtbWFyeS10aXRsZVwiIHJvbGU9XCJhbGVydFwiIHRhYmluZGV4PVwiLTFcIiBkYXRhLW1vZHVsZT1cImdvdnVrLWVycm9yLXN1bW1hcnlcIj5cbiAgPGgyIGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fdGl0bGVcIiBpZD1cImVycm9yLXN1bW1hcnktdGl0bGVcIj5cbiAgICBUaGVyZSBpcyBhIHByb2JsZW1cbiAgPC9oMj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgZXJyb3JNZXNzYWdlIG9mIGVycm9yTWVzc2FnZXNcIiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlfX2JvZHlcIj5cbiAgICA8dWwgY2xhc3M9XCJnb3Z1ay1saXN0IGdvdnVrLWVycm9yLXN1bW1hcnlfX2xpc3RcIj5cbiAgICAgIDxsaT5cbiAgICAgICAgPGEgKGNsaWNrKT1cIm5hdmlnYXRlVG9FcnJvckVsZW1lbnQoZXJyb3JNZXNzYWdlLmZpZWxkSWQpXCIgY2xhc3M9XCJ2YWxpZGF0aW9uLWVycm9yXCI+e3tlcnJvck1lc3NhZ2UuZGVzY3JpcHRpb259fTwvYT5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCIhaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZVwiIGNsYXNzPVwiZm9ybS1ncm91cFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCIgW25nU3dpdGNoXT1cImZpZWxkU3RhdGVcIj5cbiAgICA8ZGl2IGlkPVwiY3JlYXRlLWZsYWctY2FwdGlvblwiIGNsYXNzPVwiZ292dWstY2FwdGlvbi1sXCIgW25nQ2xhc3NdPVwieydmb3JtLWdyb3VwLWVycm9yJzogZXJyb3JNZXNzYWdlcy5sZW5ndGggPiAwfVwiPlxuICAgICAge3tjcmVhdGVGbGFnQ2FwdGlvbn19XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTE9DQVRJT05cIj5cbiAgICAgIDxjY2Qtc2VsZWN0LWZsYWctbG9jYXRpb24gW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiIFtmbGFnc0RhdGFdPVwiZmxhZ3NEYXRhXCJcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiPjwvY2NkLXNlbGVjdC1mbGFnLWxvY2F0aW9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1RZUEVcIj5cbiAgICAgIDxjY2Qtc2VsZWN0LWZsYWctdHlwZSBbZm9ybUdyb3VwXT1cImNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwXCIgW2p1cmlzZGljdGlvbl09XCJqdXJpc2RpY3Rpb25cIiBbY2FzZVR5cGVJZF09XCJjYXNlVHlwZUlkXCJcbiAgICAgICAgW2htY3RzU2VydmljZUlkXT1cImhtY3RzU2VydmljZUlkXCJcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiXG4gICAgICAgIChmbGFnQ29tbWVudHNPcHRpb25hbEVtaXR0ZXIpPVwib25GbGFnQ29tbWVudHNPcHRpb25hbEVtaXR0ZWQoJGV2ZW50KVwiPjwvY2NkLXNlbGVjdC1mbGFnLXR5cGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTEFOR1VBR0VfSU5URVJQUkVURVJcIj5cbiAgICAgIDxjY2Qtc2VhcmNoLWxhbmd1YWdlLWludGVycHJldGVyIFtmb3JtR3JvdXBdPVwiY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBcIiBbbGFuZ3VhZ2VzXT1cImxpc3RPZlZhbHVlc1wiIFtmbGFnQ29kZV09XCJmbGFnQ29kZVwiXG4gICAgICAgIChjYXNlRmxhZ1N0YXRlRW1pdHRlcik9XCJvbkNhc2VGbGFnU3RhdGVFbWl0dGVkKCRldmVudClcIj48L2NjZC1zZWFyY2gtbGFuZ3VhZ2UtaW50ZXJwcmV0ZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfQ09NTUVOVFNcIj5cbiAgICAgIDxjY2QtYWRkLWNvbW1lbnRzIFtmb3JtR3JvdXBdPVwiY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBcIiBbb3B0aW9uYWxdPVwiZmxhZ0NvbW1lbnRzT3B0aW9uYWxcIlxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCI+PC9jY2QtYWRkLWNvbW1lbnRzPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cImlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGVcIiBjbGFzcz1cImZvcm0tZ3JvdXBcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiIFtuZ1N3aXRjaF09XCJmaWVsZFN0YXRlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTUFOQUdFX0NBU0VfRkxBR1NcIj5cbiAgICAgIDxjY2QtbWFuYWdlLWNhc2UtZmxhZ3MgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiIFtmbGFnc0RhdGFdPVwiZmxhZ3NEYXRhXCIgW2Nhc2VUaXRsZV09XCJjYXNlVGl0bGVcIlxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCI+PC9jY2QtbWFuYWdlLWNhc2UtZmxhZ3M+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFXCI+XG4gICAgICA8Y2NkLXVwZGF0ZS1mbGFnIFtmb3JtR3JvdXBdPVwiY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBcIiBbc2VsZWN0ZWRGbGFnXT1cInNlbGVjdGVkRmxhZ1wiXG4gICAgICAgIChjYXNlRmxhZ1N0YXRlRW1pdHRlcik9XCJvbkNhc2VGbGFnU3RhdGVFbWl0dGVkKCRldmVudClcIj48L2NjZC11cGRhdGUtZmxhZz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -2,6 +2,7 @@ import { NgxMatDateAdapter, NgxMatDatetimePicker, NGX_MAT_DATE_FORMATS } from '@
2
2
  import { NgxMatMomentAdapter, NGX_MAT_MOMENT_DATE_ADAPTER_OPTIONS } from '@angular-material-components/moment-adapter';
3
3
  import { Component, ElementRef, Inject, Input, ViewChild, ViewEncapsulation } from '@angular/core';
4
4
  import { FormControl, Validators } from '@angular/forms';
5
+ import { MAT_DATE_LOCALE } from '@angular/material/core';
5
6
  import * as moment from 'moment';
6
7
  import { FormatTranslatorService } from '../../../services/case-fields/format-translator.service';
7
8
  import { AbstractFormFieldComponent } from '../base-field/abstract-form-field.component';
@@ -228,7 +229,10 @@ DatetimePickerComponent.ɵcmp = i0.ɵɵdefineComponent({ type: DatetimePickerCom
228
229
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.inputElement = _t.first);
229
230
  } }, inputs: { dateControl: "dateControl" }, features: [i0.ɵɵProvidersFeature([
230
231
  { provide: NGX_MAT_DATE_FORMATS, useValue: CUSTOM_MOMENT_FORMATS },
231
- { provide: NgxMatDateAdapter, useClass: NgxMatMomentAdapter },
232
+ { provide: NgxMatDateAdapter,
233
+ useClass: NgxMatMomentAdapter,
234
+ deps: [MAT_DATE_LOCALE, NGX_MAT_MOMENT_DATE_ADAPTER_OPTIONS]
235
+ },
232
236
  { provide: NGX_MAT_MOMENT_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true } }
233
237
  ]), i0.ɵɵInheritDefinitionFeature], decls: 14, vars: 26, consts: [[1, "govuk-form-group", "bottom-30", 3, "id", "ngClass"], ["class", "form-label", 4, "ngIf"], ["class", "form-hint", 4, "ngIf"], ["class", "error-message", 4, "ngIf"], [1, "datepicker-container"], ["ng-model-options", "{timezone:'utc'}", 1, "govuk-input", 3, "min", "max", "formControl", "ngxMatDatetimePicker", "focusin", "focusout", "dateChange"], ["input", ""], ["matSuffix", "", "id", "pickerOpener", 3, "for"], [3, "color", "touchUi", "hideTime", "startView", "stepHour", "stepSecond", "stepMinute", "showSeconds", "showSpinners", "disableMinute", "enableMeridian", "yearSelected", "monthSelected", "opened"], ["picker", ""], [1, "form-label"], [1, "form-hint"], [1, "error-message"]], template: function DatetimePickerComponent_Template(rf, ctx) { if (rf & 1) {
234
238
  i0.ɵɵelementStart(0, "div", 0);
@@ -281,7 +285,10 @@ DatetimePickerComponent.ɵcmp = i0.ɵɵdefineComponent({ type: DatetimePickerCom
281
285
  encapsulation: ViewEncapsulation.None,
282
286
  providers: [
283
287
  { provide: NGX_MAT_DATE_FORMATS, useValue: CUSTOM_MOMENT_FORMATS },
284
- { provide: NgxMatDateAdapter, useClass: NgxMatMomentAdapter },
288
+ { provide: NgxMatDateAdapter,
289
+ useClass: NgxMatMomentAdapter,
290
+ deps: [MAT_DATE_LOCALE, NGX_MAT_MOMENT_DATE_ADAPTER_OPTIONS]
291
+ },
285
292
  { provide: NGX_MAT_MOMENT_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true } }
286
293
  ]
287
294
  }]
@@ -297,4 +304,4 @@ DatetimePickerComponent.ɵcmp = i0.ɵɵdefineComponent({ type: DatetimePickerCom
297
304
  }], dateControl: [{
298
305
  type: Input
299
306
  }] }); })();
300
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL2RhdGV0aW1lLXBpY2tlci9kYXRldGltZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvZGF0ZXRpbWUtcGlja2VyL2RhdGV0aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBRWpCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDckIsTUFBTSw4Q0FBOEMsQ0FBQztBQUN0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN2SCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXpELE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRWpDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7O0lDWjFELGdDQUFpRDtJQUFBLFlBQThCOztJQUFBLGlCQUFPOzs7SUFBckMsZUFBOEI7SUFBOUIsNERBQThCOzs7SUFDL0Us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O2VBQUM7Z0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtnQkFDL0IsV0FBVyxFQUFFLGtDQUFrQztnQkFDL0MsU0FBUyxFQUFFLENBQUMsa0NBQWtDLENBQUM7Z0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2dCQUNyQyxTQUFTLEVBQUU7b0JBQ1QsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixFQUFFO29CQUNsRSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsbUJBQW1CLEVBQUU7b0JBQzdELEVBQUUsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRTtpQkFDN0U7YUFDRjs7c0JBaUNJLE1BQU07dUJBQUMsb0JBQW9CO3dCQVZpQixjQUFjO2tCQUE1RCxTQUFTO21CQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7WUFDUSxZQUFZO2tCQUF6RCxTQUFTO21CQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7WUFFckIsV0FBVztrQkFBMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIE5neE1hdERhdGVBZGFwdGVyLFxuICBOZ3hNYXREYXRlRm9ybWF0cyxcbiAgTmd4TWF0RGF0ZXRpbWVQaWNrZXIsXG4gIE5HWF9NQVRfREFURV9GT1JNQVRTXG59IGZyb20gJ0Bhbmd1bGFyLW1hdGVyaWFsLWNvbXBvbmVudHMvZGF0ZXRpbWUtcGlja2VyJztcbmltcG9ydCB7IE5neE1hdE1vbWVudEFkYXB0ZXIsIE5HWF9NQVRfTU9NRU5UX0RBVEVfQURBUFRFUl9PUFRJT05TIH0gZnJvbSAnQGFuZ3VsYXItbWF0ZXJpYWwtY29tcG9uZW50cy9tb21lbnQtYWRhcHRlcic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUaGVtZVBhbGV0dGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1vbWVudCB9IGZyb20gJ21vbWVudC9tb21lbnQnO1xuXG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IENhc2VGaWVsZCB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi9kZWZpbml0aW9uL2Nhc2UtZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgRm9ybWF0VHJhbnNsYXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jYXNlLWZpZWxkcy9mb3JtYXQtdHJhbnNsYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IEFic3RyYWN0Rm9ybUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS1maWVsZC9hYnN0cmFjdC1mb3JtLWZpZWxkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDVVNUT01fTU9NRU5UX0ZPUk1BVFMgfSBmcm9tICcuL2RhdGV0aW1lLXBpY2tlci11dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjZC1kYXRldGltZS1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogTkdYX01BVF9EQVRFX0ZPUk1BVFMsIHVzZVZhbHVlOiBDVVNUT01fTU9NRU5UX0ZPUk1BVFMgfSxcbiAgICB7IHByb3ZpZGU6IE5neE1hdERhdGVBZGFwdGVyLCB1c2VDbGFzczogTmd4TWF0TW9tZW50QWRhcHRlciB9LFxuICAgIHsgcHJvdmlkZTogTkdYX01BVF9NT01FTlRfREFURV9BREFQVEVSX09QVElPTlMsIHVzZVZhbHVlOiB7IHVzZVV0YzogdHJ1ZSB9IH1cbiAgXVxufSlcblxuZXhwb3J0IGNsYXNzIERhdGV0aW1lUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RGb3JtRmllbGRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHB1YmxpYyBzaG93U3Bpbm5lcnMgPSB0cnVlO1xuICBwdWJsaWMgc2hvd1NlY29uZHMgPSBmYWxzZTtcbiAgcHVibGljIHRvdWNoVWkgPSBmYWxzZTtcbiAgcHVibGljIGVuYWJsZU1lcmlkaWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzdGVwSG91ciA9IDE7XG4gIHB1YmxpYyBzdGVwTWludXRlID0gMTtcbiAgcHVibGljIHN0ZXBTZWNvbmQgPSAxO1xuICBwdWJsaWMgY29sb3I6IFRoZW1lUGFsZXR0ZSA9ICdwcmltYXJ5JztcbiAgcHVibGljIGRpc2FibGVNaW51dGUgPSB0cnVlO1xuICBwdWJsaWMgaGlkZVRpbWUgPSB0cnVlO1xuICBwdWJsaWMgaGlkZU1pbnV0ZXMgPSB0cnVlO1xuICBwdWJsaWMgc3RhcnRWaWV3ID0gJ21vbnRoJztcbiAgcHVibGljIHllYXJTZWxlY3Rpb24gPSBmYWxzZTtcbiAgcHVibGljIGNoZWNrVGltZSA9IHRydWU7XG4gIHB1YmxpYyBzdHJpbmdFZGl0ZWQgPSBmYWxzZTtcbiAgcHVibGljIG1pbkVycm9yID0gZmFsc2U7XG4gIHB1YmxpYyBtYXhFcnJvciA9IGZhbHNlO1xuICBwdWJsaWMgZGF0ZVRpbWVFbnRyeUZvcm1hdDogc3RyaW5nO1xuXG4gIEBWaWV3Q2hpbGQoJ3BpY2tlcicsIHsgc3RhdGljOiBmYWxzZSB9KSBwdWJsaWMgZGF0ZXRpbWVQaWNrZXI6IE5neE1hdERhdGV0aW1lUGlja2VyPGFueT47XG4gIEBWaWV3Q2hpbGQoJ2lucHV0JywgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyBpbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgQElucHV0KCkgcHVibGljIGRhdGVDb250cm9sOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChuZXcgRGF0ZSgpKTtcblxuICBwcml2YXRlIG1pbmltdW1EYXRlID0gbmV3IERhdGUoJzAxLzAxLzE4MDAnKTtcbiAgcHJpdmF0ZSBtYXhpbXVtRGF0ZSA9IG51bGw7XG4gIHByaXZhdGUgbW9tZW50Rm9ybWF0ID0gJ1lZWVktTU0tRERUSEg6bW06c3MuU1NTJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGZvcm1hdFRyYW5zbGF0aW9uU2VydmljZTogRm9ybWF0VHJhbnNsYXRvclNlcnZpY2UsXG4gICAgQEluamVjdChOR1hfTUFUX0RBVEVfRk9STUFUUykgcHJpdmF0ZSByZWFkb25seSBuZ3hNYXREYXRlRm9ybWF0czogTmd4TWF0RGF0ZUZvcm1hdHMpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZGF0ZVRpbWVFbnRyeUZvcm1hdCA9IHRoaXMuZm9ybWF0VHJhbnNsYXRpb25TZXJ2aWNlLnNob3dPbmx5RGF0ZXModGhpcy5jYXNlRmllbGQuZGF0ZVRpbWVFbnRyeUZvcm1hdCk7XG4gICAgdGhpcy5jb25maWd1cmVEYXRlUGlja2VyKHRoaXMuZGF0ZVRpbWVFbnRyeUZvcm1hdCk7XG4gICAgLy8gc2V0IGRhdGUgY29udHJvbCBiYXNlZCBvbiBtYW5kYXRvcnkgZmllbGRcbiAgICB0aGlzLmRhdGVDb250cm9sID0gKHRoaXMuY2FzZUZpZWxkLmlzTWFuZGF0b3J5ID9cbiAgICAgIHRoaXMucmVnaXN0ZXJDb250cm9sKG5ldyBGb3JtQ29udHJvbCh0aGlzLmNhc2VGaWVsZC52YWx1ZSB8fCAnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSlcbiAgICAgICA6IHRoaXMucmVnaXN0ZXJDb250cm9sKG5ldyBGb3JtQ29udHJvbCh0aGlzLmNhc2VGaWVsZC52YWx1ZSkpKSBhcyBGb3JtQ29udHJvbDtcbiAgICAvLyBpbiByZXNldHRpbmcgdGhlIGZvcm1hdCBqdXN0IGFmdGVyIHRoZSBwYWdlIGluaXRpYWxpc2VzLCB0aGUgaW5wdXQgY2FuIGJlIHJlZm9ybWF0dGVkXG4gICAgLy8gb3RoZXJ3aXNlIHRoZSBsYXN0IGZvcm1hdCBnaXZlbiB3aWxsIGJlIGhvdyB0aGUgdGV4dCBzaG93biB3aWxsIGJlIGRpc3BsYXllZFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZXREYXRlVGltZUZvcm1hdCgpO1xuICAgICAgdGhpcy5mb3JtYXRWYWx1ZUFuZFNldEVycm9ycygpO1xuICAgIH0sIDEwMDApO1xuICAgIC8vIHdoZW4gdGhlIHN0YXR1cyBjaGFuZ2VzIGNoZWNrIHRoYXQgdGhlIG1heGltdW0vbWluaW11bSBkYXRlIGhhcyBub3QgYmVlbiBleGNlZWRlZFxuICAgIHRoaXMuZGF0ZUNvbnRyb2wuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5taW5FcnJvciA9IHRoaXMuZGF0ZUNvbnRyb2wuaGFzRXJyb3IoJ21hdERhdGV0aW1lUGlja2VyTWluJyk7XG4gICAgICB0aGlzLm1heEVycm9yID0gdGhpcy5kYXRlQ29udHJvbC5oYXNFcnJvcignbWF0RGF0ZXRpbWVQaWNrZXJNYXgnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXREYXRlVGltZUZvcm1hdCgpOiB2b2lkIHtcbiAgICB0aGlzLm5neE1hdERhdGVGb3JtYXRzLnBhcnNlLmRhdGVJbnB1dCA9IHRoaXMuZGF0ZVRpbWVFbnRyeUZvcm1hdDtcbiAgICB0aGlzLm5neE1hdERhdGVGb3JtYXRzLmRpc3BsYXkuZGF0ZUlucHV0ID0gdGhpcy5kYXRlVGltZUVudHJ5Rm9ybWF0O1xuICB9XG5cbiAgLypcbiAgV2hlbiB0aGUgdmFsdWUgY2hhbmdlcywgdXBkYXRlIHRoZSBmb3JtIGNvbnRyb2xcbiAgKi9cbiAgcHVibGljIHZhbHVlQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1hdFZhbHVlQW5kU2V0RXJyb3JzKCk7XG4gIH1cblxuICBwdWJsaWMgZm9jdXNJbigpOiB2b2lkIHtcbiAgICB0aGlzLnNldERhdGVUaW1lRm9ybWF0KCk7XG4gIH1cblxuICBwdWJsaWMgZm9jdXNPdXQoKTogdm9pZCB7XG4gICAgLy8gZm9jdXMgb3V0IG5lZWRlZCB0byBvYnRhaW4gZXJyb3JzIChyZWxldmFudCB0byBmb3JtYXR0aW5nKVxuICAgIHRoaXMuZm9ybWF0VmFsdWVBbmRTZXRFcnJvcnMoKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLnNldERhdGVUaW1lRm9ybWF0KCk7XG4gIH1cblxuICBwdWJsaWMgbWluRGF0ZShjYXNlRmllbGQ6IENhc2VGaWVsZCk6IERhdGUge1xuICAgIC8vIHNldCBtaW5pbXVtIGRhdGVcbiAgICBpZiAoY2FzZUZpZWxkLmZpZWxkX3R5cGUubWluIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgdGhpcy5taW5pbXVtRGF0ZSA9IGNhc2VGaWVsZC5maWVsZF90eXBlLm1pbiA/IG5ldyBEYXRlKGNhc2VGaWVsZC5maWVsZF90eXBlLm1pbikgOiB0aGlzLm1pbmltdW1EYXRlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5taW5pbXVtRGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBtYXhEYXRlKGNhc2VGaWVsZDogQ2FzZUZpZWxkKTogRGF0ZSB7XG4gICAgLy8gc2V0IG1heGltdW0gZGF0ZVxuICAgIGlmIChjYXNlRmllbGQuZmllbGRfdHlwZS5tYXggaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICB0aGlzLm1heGltdW1EYXRlID0gY2FzZUZpZWxkLmZpZWxkX3R5cGUubWF4ID8gbmV3IERhdGUoY2FzZUZpZWxkLmZpZWxkX3R5cGUubWF4KSA6IHRoaXMubWF4aW11bURhdGU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1heGltdW1EYXRlO1xuICB9XG5cbiAgcHVibGljIGNvbmZpZ3VyZURhdGVQaWNrZXIoZGF0ZVRpbWVQaWNrZXJGb3JtYXQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhc2VGaWVsZC5maWVsZF90eXBlLnR5cGUgPT09ICdEYXRlJykge1xuICAgICAgdGhpcy5oaWRlVGltZSA9IHRydWU7XG4gICAgICB0aGlzLmNoZWNrVGltZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kYXRlVGltZUVudHJ5Rm9ybWF0ID0gdGhpcy5mb3JtYXRUcmFuc2xhdGlvblNlcnZpY2UucmVtb3ZlVGltZSh0aGlzLmRhdGVUaW1lRW50cnlGb3JtYXQpO1xuICAgICAgdGhpcy5tb21lbnRGb3JtYXQgPSAnWVlZWS1NTS1ERCc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2hlY2tUaW1lKSB7XG5cbiAgICAgIGlmICh0aGlzLmZvcm1hdFRyYW5zbGF0aW9uU2VydmljZS5oYXNTZWNvbmRzKGRhdGVUaW1lUGlja2VyRm9ybWF0KSkge1xuICAgICAgICB0aGlzLnNob3dTZWNvbmRzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5oaWRlTWludXRlcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRpc2FibGVNaW51dGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oaWRlVGltZSA9IGZhbHNlO1xuICAgICAgICBpZiAoIXRoaXMuZm9ybWF0VHJhbnNsYXRpb25TZXJ2aWNlLmlzMjRIb3VyKGRhdGVUaW1lUGlja2VyRm9ybWF0KSkge1xuICAgICAgICAgIHRoaXMuZW5hYmxlTWVyaWRpYW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5mb3JtYXRUcmFuc2xhdGlvblNlcnZpY2UuaGFzSG91cnMoZGF0ZVRpbWVQaWNrZXJGb3JtYXQpKSB7XG4gICAgICAgIHRoaXMuaGlkZVRpbWUgPSBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1hdFRyYW5zbGF0aW9uU2VydmljZS5pczI0SG91cihkYXRlVGltZVBpY2tlckZvcm1hdCkpIHtcbiAgICAgICAgICB0aGlzLmVuYWJsZU1lcmlkaWFuID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZvcm1hdFRyYW5zbGF0aW9uU2VydmljZS5oYXNNaW51dGVzKGRhdGVUaW1lUGlja2VyRm9ybWF0KSkge1xuICAgICAgICB0aGlzLmhpZGVNaW51dGVzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZGlzYWJsZU1pbnV0ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhpZGVUaW1lID0gZmFsc2U7XG4gICAgICAgIGlmICghdGhpcy5mb3JtYXRUcmFuc2xhdGlvblNlcnZpY2UuaXMyNEhvdXIoZGF0ZVRpbWVQaWNrZXJGb3JtYXQpKSB7XG4gICAgICAgICAgdGhpcy5lbmFibGVNZXJpZGlhbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmZvcm1hdFRyYW5zbGF0aW9uU2VydmljZS5oYXNEYXRlKGRhdGVUaW1lUGlja2VyRm9ybWF0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZvcm1hdFRyYW5zbGF0aW9uU2VydmljZS5oYXNOb0RheShkYXRlVGltZVBpY2tlckZvcm1hdCkpIHtcbiAgICAgIHRoaXMuc3RhcnRWaWV3ID0gJ211bHRpLXllYXInO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZvcm1hdFRyYW5zbGF0aW9uU2VydmljZS5oYXNOb0RheUFuZE1vbnRoKGRhdGVUaW1lUGlja2VyRm9ybWF0KSkge1xuICAgICAgdGhpcy5zdGFydFZpZXcgPSAnbXVsdGkteWVhcic7XG4gICAgICB0aGlzLnllYXJTZWxlY3Rpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB5ZWFyU2VsZWN0ZWQoZXZlbnQ6IE1vbWVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXJ0VmlldyA9PT0gJ211bHRpLXllYXInICYmIHRoaXMueWVhclNlbGVjdGlvbikge1xuICAgICAgdGhpcy5kYXRlQ29udHJvbC5wYXRjaFZhbHVlKGV2ZW50LnRvSVNPU3RyaW5nKCkpO1xuICAgICAgdGhpcy5kYXRldGltZVBpY2tlci5jbG9zZSgpO1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZWQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbW9udGhTZWxlY3RlZChldmVudDogTW9tZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhcnRWaWV3ID09PSAnbXVsdGkteWVhcicpIHtcbiAgICAgIHRoaXMuZGF0ZUNvbnRyb2wucGF0Y2hWYWx1ZShldmVudC50b0lTT1N0cmluZygpKTtcbiAgICAgIHRoaXMuZGF0ZUNvbnRyb2wucGF0Y2hWYWx1ZShldmVudC50b0lTT1N0cmluZygpKTtcbiAgICAgIHRoaXMuZGF0ZXRpbWVQaWNrZXIuY2xvc2UoKTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRWYWx1ZUFuZFNldEVycm9ycygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSkge1xuICAgICAgbGV0IGZvcm1WYWx1ZSA9IHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgICBmb3JtVmFsdWUgPSBtb21lbnQoZm9ybVZhbHVlLCB0aGlzLmRhdGVUaW1lRW50cnlGb3JtYXQpLmZvcm1hdCh0aGlzLm1vbWVudEZvcm1hdCk7XG4gICAgICBpZiAoZm9ybVZhbHVlICE9PSAnSW52YWxpZCBkYXRlJykge1xuICAgICAgICAvLyBpZiBub3QgaW52YWxpZCBzZXQgdGhlIHZhbHVlIGFzIHRoZSBmb3JtYXR0ZWQgdmFsdWVcbiAgICAgICAgdGhpcy5kYXRlQ29udHJvbC5zZXRWYWx1ZShmb3JtVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZW5zdXJlIHRoYXQgdGhlIGRhdGVwaWNrZXIgcGlja3MgdXAgdGhlIGludmFsaWQgZXJyb3JcbiAgICAgICAgY29uc3Qga2VlcEVycm9yVGV4dCA9IHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgICAgIHRoaXMuZGF0ZUNvbnRyb2wuc2V0VmFsdWUoa2VlcEVycm9yVGV4dCk7XG4gICAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBrZWVwRXJyb3JUZXh0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBlbnN1cmUgcmVxdWlyZWQgZXJyb3JzIGFyZSBwaWNrZWQgdXAgaWYgcmVsZXZhbnRcbiAgICAgIHRoaXMuZGF0ZUNvbnRyb2wuc2V0VmFsdWUoJycpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXAgIGJvdHRvbS0zMFwiIFtpZF09XCJjYXNlRmllbGQuaWRcIlxuICAgICBbbmdDbGFzc109XCJ7J2Zvcm0tZ3JvdXAtZXJyb3InOiBkYXRlQ29udHJvbCAmJiAhZGF0ZUNvbnRyb2wudmFsaWQgJiYgZGF0ZUNvbnRyb2wuZGlydHl9XCI+XG4gIDxmaWVsZHNldD5cbiAgICA8bGVnZW5kPlxuICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWxhYmVsXCIgKm5nSWY9XCJjYXNlRmllbGQubGFiZWxcIj57e2Nhc2VGaWVsZCB8IGNjZEZpZWxkTGFiZWwgfX08L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImZvcm0taGludFwiICpuZ0lmPVwiY2FzZUZpZWxkLmhpbnRfdGV4dFwiPnt7Y2FzZUZpZWxkLmhpbnRfdGV4dH19PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICAgICpuZ0lmPVwiZGF0ZUNvbnRyb2wgJiYgZGF0ZUNvbnRyb2wuZXJyb3JzICYmIGRhdGVDb250cm9sLmRpcnR5ICYmICEobWluRXJyb3IgfHwgbWF4RXJyb3IpXCI+e3tkYXRlQ29udHJvbC5lcnJvcnMgfCBjY2RGaXJzdEVycm9yOmNhc2VGaWVsZC5sYWJlbH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICAgICpuZ0lmPVwiZGF0ZUNvbnRyb2wgJiYgZGF0ZUNvbnRyb2wuZGlydHkgJiYgbWluRXJyb3JcIj5UaGlzIGRhdGUgaXMgb2xkZXIgdGhhbiB0aGUgbWluaW11bSBkYXRlIGFsbG93ZWQ8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIlxuICAgICAgICAgICAgKm5nSWY9XCJkYXRlQ29udHJvbCAmJiBkYXRlQ29udHJvbC5kaXJ0eSAmJiBtYXhFcnJvclwiPlRoaXMgZGF0ZSBpcyBsYXRlciB0aGFuIHRoZSBtYXhpbXVtIGRhdGUgYWxsb3dlZDwvc3Bhbj5cbiAgICA8L2xlZ2VuZD5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJcIj5cbiAgICAgIDxpbnB1dCBjbGFzcz1cImdvdnVrLWlucHV0XCJcbiAgICAgICAgICAgICAjaW5wdXRcbiAgICAgICAgICAgICBhdHRyLmFyaWEtbGFiZWw9XCJQbGVhc2UgZW50ZXIgYSBkYXRlIGFuZCB0aW1lIGluIHRoZSBmb3JtYXQge3tkYXRlVGltZUVudHJ5Rm9ybWF0fX1cIlxuICAgICAgICAgICAgIFttaW5dPVwibWluRGF0ZShjYXNlRmllbGQpXCJcbiAgICAgICAgICAgICBbbWF4XT1cIm1heERhdGUoY2FzZUZpZWxkKVwiXG4gICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImRhdGVDb250cm9sXCJcbiAgICAgICAgICAgICBbbmd4TWF0RGF0ZXRpbWVQaWNrZXJdPVwicGlja2VyXCJcbiAgICAgICAgICAgICAoZm9jdXNpbik9XCJmb2N1c0luKClcIlxuICAgICAgICAgICAgIChmb2N1c291dCk9XCJmb2N1c091dCgpXCJcbiAgICAgICAgICAgICAoZGF0ZUNoYW5nZSk9XCJ2YWx1ZUNoYW5nZWQoKVwiXG4gICAgICAgICAgICAgbmctbW9kZWwtb3B0aW9ucz1cInt0aW1lem9uZTondXRjJ31cIlxuICAgICAgPlxuICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXJcIiBpZD1cInBpY2tlck9wZW5lclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgPG5neC1tYXQtZGF0ZXRpbWUtcGlja2VyICNwaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b3VjaFVpXT1cInRvdWNoVWlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlVGltZV09XCJoaWRlVGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXJ0Vmlld109XCJzdGFydFZpZXdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGVwSG91cl09XCJzdGVwSG91clwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0ZXBTZWNvbmRdPVwic3RlcFNlY29uZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0ZXBNaW51dGVdPVwic3RlcE1pbnV0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dTZWNvbmRzXT1cInNob3dTZWNvbmRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1NwaW5uZXJzXT1cInNob3dTcGlubmVyc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVNaW51dGVdPVwiZGlzYWJsZU1pbnV0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJsZU1lcmlkaWFuXT1cImVuYWJsZU1lcmlkaWFuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeWVhclNlbGVjdGVkKT1cInllYXJTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9udGhTZWxlY3RlZCk9XCJtb250aFNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcGVuZWQpPVwidG9nZ2xlQ2xpY2soKVwiXG4gICAgICA+XG4gICAgICA8L25neC1tYXQtZGF0ZXRpbWUtcGlja2VyPlxuICAgIDwvZGl2PlxuICA8L2ZpZWxkc2V0PlxuPC9kaXY+XG4iXX0=
307
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL2RhdGV0aW1lLXBpY2tlci9kYXRldGltZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvZGF0ZXRpbWUtcGlja2VyL2RhdGV0aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBRWpCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDckIsTUFBTSw4Q0FBOEMsQ0FBQztBQUN0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN2SCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sd0JBQXdCLENBQUM7QUFHdkUsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFakMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDbEcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDekYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7Ozs7SUNaMUQsZ0NBQWlEO0lBQUEsWUFBOEI7O0lB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Q0FBZSx3QkFBQSwwQkFBQSw0QkFBQSwwQkFBQSw4QkFBQSw4QkFBQSxnQ0FBQSxrQ0FBQSxvQ0FBQSxzQ0FBQTs7dUZES2pDLHVCQUF1QjtjQWZuQyxTQUFTO2VBQUM7Z0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtnQkFDL0IsV0FBVyxFQUFFLGtDQUFrQztnQkFDL0MsU0FBUyxFQUFFLENBQUMsa0NBQWtDLENBQUM7Z0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2dCQUNyQyxTQUFTLEVBQUU7b0JBQ1QsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixFQUFFO29CQUNsRSxFQUFFLE9BQU8sRUFBRSxpQkFBaUI7d0JBQzFCLFFBQVEsRUFBRSxtQkFBbUI7d0JBQzdCLElBQUksRUFBRSxDQUFDLGVBQWUsRUFBRSxtQ0FBbUMsQ0FBQztxQkFDN0Q7b0JBQ0QsRUFBRSxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFO2lCQUM3RTthQUNGOztzQkFpQ0ksTUFBTTt1QkFBQyxvQkFBb0I7d0JBVmlCLGNBQWM7a0JBQTVELFNBQVM7bUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtZQUNRLFlBQVk7a0JBQXpELFNBQVM7bUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtZQUVyQixXQUFXO2tCQUExQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgTmd4TWF0RGF0ZUFkYXB0ZXIsXG4gIE5neE1hdERhdGVGb3JtYXRzLFxuICBOZ3hNYXREYXRldGltZVBpY2tlcixcbiAgTkdYX01BVF9EQVRFX0ZPUk1BVFNcbn0gZnJvbSAnQGFuZ3VsYXItbWF0ZXJpYWwtY29tcG9uZW50cy9kYXRldGltZS1waWNrZXInO1xuaW1wb3J0IHsgTmd4TWF0TW9tZW50QWRhcHRlciwgTkdYX01BVF9NT01FTlRfREFURV9BREFQVEVSX09QVElPTlMgfSBmcm9tICdAYW5ndWxhci1tYXRlcmlhbC1jb21wb25lbnRzL21vbWVudC1hZGFwdGVyJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1BVF9EQVRFX0xPQ0FMRSwgVGhlbWVQYWxldHRlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQvbW9tZW50JztcblxuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBDYXNlRmllbGQgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vZGVmaW5pdGlvbi9jYXNlLWZpZWxkLm1vZGVsJztcbmltcG9ydCB7IEZvcm1hdFRyYW5zbGF0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2FzZS1maWVsZHMvZm9ybWF0LXRyYW5zbGF0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBBYnN0cmFjdEZvcm1GaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UtZmllbGQvYWJzdHJhY3QtZm9ybS1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ1VTVE9NX01PTUVOVF9GT1JNQVRTIH0gZnJvbSAnLi9kYXRldGltZS1waWNrZXItdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY2QtZGF0ZXRpbWUtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGV0aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGV0aW1lLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IE5HWF9NQVRfREFURV9GT1JNQVRTLCB1c2VWYWx1ZTogQ1VTVE9NX01PTUVOVF9GT1JNQVRTIH0sXG4gICAgeyBwcm92aWRlOiBOZ3hNYXREYXRlQWRhcHRlcixcbiAgICAgIHVzZUNsYXNzOiBOZ3hNYXRNb21lbnRBZGFwdGVyLFxuICAgICAgZGVwczogW01BVF9EQVRFX0xPQ0FMRSwgTkdYX01BVF9NT01FTlRfREFURV9BREFQVEVSX09QVElPTlNdXG4gICAgfSxcbiAgICB7IHByb3ZpZGU6IE5HWF9NQVRfTU9NRU5UX0RBVEVfQURBUFRFUl9PUFRJT05TLCB1c2VWYWx1ZTogeyB1c2VVdGM6IHRydWUgfSB9XG4gIF1cbn0pXG5cbmV4cG9ydCBjbGFzcyBEYXRldGltZVBpY2tlckNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0Rm9ybUZpZWxkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBwdWJsaWMgc2hvd1NwaW5uZXJzID0gdHJ1ZTtcbiAgcHVibGljIHNob3dTZWNvbmRzID0gZmFsc2U7XG4gIHB1YmxpYyB0b3VjaFVpID0gZmFsc2U7XG4gIHB1YmxpYyBlbmFibGVNZXJpZGlhbiA9IGZhbHNlO1xuICBwdWJsaWMgc3RlcEhvdXIgPSAxO1xuICBwdWJsaWMgc3RlcE1pbnV0ZSA9IDE7XG4gIHB1YmxpYyBzdGVwU2Vjb25kID0gMTtcbiAgcHVibGljIGNvbG9yOiBUaGVtZVBhbGV0dGUgPSAncHJpbWFyeSc7XG4gIHB1YmxpYyBkaXNhYmxlTWludXRlID0gdHJ1ZTtcbiAgcHVibGljIGhpZGVUaW1lID0gdHJ1ZTtcbiAgcHVibGljIGhpZGVNaW51dGVzID0gdHJ1ZTtcbiAgcHVibGljIHN0YXJ0VmlldyA9ICdtb250aCc7XG4gIHB1YmxpYyB5ZWFyU2VsZWN0aW9uID0gZmFsc2U7XG4gIHB1YmxpYyBjaGVja1RpbWUgPSB0cnVlO1xuICBwdWJsaWMgc3RyaW5nRWRpdGVkID0gZmFsc2U7XG4gIHB1YmxpYyBtaW5FcnJvciA9IGZhbHNlO1xuICBwdWJsaWMgbWF4RXJyb3IgPSBmYWxzZTtcbiAgcHVibGljIGRhdGVUaW1lRW50cnlGb3JtYXQ6IHN0cmluZztcblxuICBAVmlld0NoaWxkKCdwaWNrZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgcHVibGljIGRhdGV0aW1lUGlja2VyOiBOZ3hNYXREYXRldGltZVBpY2tlcjxhbnk+O1xuICBAVmlld0NoaWxkKCdpbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwdWJsaWMgaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBkYXRlQ29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2wobmV3IERhdGUoKSk7XG5cbiAgcHJpdmF0ZSBtaW5pbXVtRGF0ZSA9IG5ldyBEYXRlKCcwMS8wMS8xODAwJyk7XG4gIHByaXZhdGUgbWF4aW11bURhdGUgPSBudWxsO1xuICBwcml2YXRlIG1vbWVudEZvcm1hdCA9ICdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUyc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBmb3JtYXRUcmFuc2xhdGlvblNlcnZpY2U6IEZvcm1hdFRyYW5zbGF0b3JTZXJ2aWNlLFxuICAgIEBJbmplY3QoTkdYX01BVF9EQVRFX0ZPUk1BVFMpIHByaXZhdGUgcmVhZG9ubHkgbmd4TWF0RGF0ZUZvcm1hdHM6IE5neE1hdERhdGVGb3JtYXRzKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGVUaW1lRW50cnlGb3JtYXQgPSB0aGlzLmZvcm1hdFRyYW5zbGF0aW9uU2VydmljZS5zaG93T25seURhdGVzKHRoaXMuY2FzZUZpZWxkLmRhdGVUaW1lRW50cnlGb3JtYXQpO1xuICAgIHRoaXMuY29uZmlndXJlRGF0ZVBpY2tlcih0aGlzLmRhdGVUaW1lRW50cnlGb3JtYXQpO1xuICAgIC8vIHNldCBkYXRlIGNvbnRyb2wgYmFzZWQgb24gbWFuZGF0b3J5IGZpZWxkXG4gICAgdGhpcy5kYXRlQ29udHJvbCA9ICh0aGlzLmNhc2VGaWVsZC5pc01hbmRhdG9yeSA/XG4gICAgICB0aGlzLnJlZ2lzdGVyQ29udHJvbChuZXcgRm9ybUNvbnRyb2wodGhpcy5jYXNlRmllbGQudmFsdWUgfHwgJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSkpXG4gICAgICAgOiB0aGlzLnJlZ2lzdGVyQ29udHJvbChuZXcgRm9ybUNvbnRyb2wodGhpcy5jYXNlRmllbGQudmFsdWUpKSkgYXMgRm9ybUNvbnRyb2w7XG4gICAgLy8gaW4gcmVzZXR0aW5nIHRoZSBmb3JtYXQganVzdCBhZnRlciB0aGUgcGFnZSBpbml0aWFsaXNlcywgdGhlIGlucHV0IGNhbiBiZSByZWZvcm1hdHRlZFxuICAgIC8vIG90aGVyd2lzZSB0aGUgbGFzdCBmb3JtYXQgZ2l2ZW4gd2lsbCBiZSBob3cgdGhlIHRleHQgc2hvd24gd2lsbCBiZSBkaXNwbGF5ZWRcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2V0RGF0ZVRpbWVGb3JtYXQoKTtcbiAgICAgIHRoaXMuZm9ybWF0VmFsdWVBbmRTZXRFcnJvcnMoKTtcbiAgICB9LCAxMDAwKTtcbiAgICAvLyB3aGVuIHRoZSBzdGF0dXMgY2hhbmdlcyBjaGVjayB0aGF0IHRoZSBtYXhpbXVtL21pbmltdW0gZGF0ZSBoYXMgbm90IGJlZW4gZXhjZWVkZWRcbiAgICB0aGlzLmRhdGVDb250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMubWluRXJyb3IgPSB0aGlzLmRhdGVDb250cm9sLmhhc0Vycm9yKCdtYXREYXRldGltZVBpY2tlck1pbicpO1xuICAgICAgdGhpcy5tYXhFcnJvciA9IHRoaXMuZGF0ZUNvbnRyb2wuaGFzRXJyb3IoJ21hdERhdGV0aW1lUGlja2VyTWF4Jyk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0RGF0ZVRpbWVGb3JtYXQoKTogdm9pZCB7XG4gICAgdGhpcy5uZ3hNYXREYXRlRm9ybWF0cy5wYXJzZS5kYXRlSW5wdXQgPSB0aGlzLmRhdGVUaW1lRW50cnlGb3JtYXQ7XG4gICAgdGhpcy5uZ3hNYXREYXRlRm9ybWF0cy5kaXNwbGF5LmRhdGVJbnB1dCA9IHRoaXMuZGF0ZVRpbWVFbnRyeUZvcm1hdDtcbiAgfVxuXG4gIC8qXG4gIFdoZW4gdGhlIHZhbHVlIGNoYW5nZXMsIHVwZGF0ZSB0aGUgZm9ybSBjb250cm9sXG4gICovXG4gIHB1YmxpYyB2YWx1ZUNoYW5nZWQoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtYXRWYWx1ZUFuZFNldEVycm9ycygpO1xuICB9XG5cbiAgcHVibGljIGZvY3VzSW4oKTogdm9pZCB7XG4gICAgdGhpcy5zZXREYXRlVGltZUZvcm1hdCgpO1xuICB9XG5cbiAgcHVibGljIGZvY3VzT3V0KCk6IHZvaWQge1xuICAgIC8vIGZvY3VzIG91dCBuZWVkZWQgdG8gb2J0YWluIGVycm9ycyAocmVsZXZhbnQgdG8gZm9ybWF0dGluZylcbiAgICB0aGlzLmZvcm1hdFZhbHVlQW5kU2V0RXJyb3JzKCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5zZXREYXRlVGltZUZvcm1hdCgpO1xuICB9XG5cbiAgcHVibGljIG1pbkRhdGUoY2FzZUZpZWxkOiBDYXNlRmllbGQpOiBEYXRlIHtcbiAgICAvLyBzZXQgbWluaW11bSBkYXRlXG4gICAgaWYgKGNhc2VGaWVsZC5maWVsZF90eXBlLm1pbiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHRoaXMubWluaW11bURhdGUgPSBjYXNlRmllbGQuZmllbGRfdHlwZS5taW4gPyBuZXcgRGF0ZShjYXNlRmllbGQuZmllbGRfdHlwZS5taW4pIDogdGhpcy5taW5pbXVtRGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWluaW11bURhdGU7XG4gIH1cblxuICBwdWJsaWMgbWF4RGF0ZShjYXNlRmllbGQ6IENhc2VGaWVsZCk6IERhdGUge1xuICAgIC8vIHNldCBtYXhpbXVtIGRhdGVcbiAgICBpZiAoY2FzZUZpZWxkLmZpZWxkX3R5cGUubWF4IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgdGhpcy5tYXhpbXVtRGF0ZSA9IGNhc2VGaWVsZC5maWVsZF90eXBlLm1heCA/IG5ldyBEYXRlKGNhc2VGaWVsZC5maWVsZF90eXBlLm1heCkgOiB0aGlzLm1heGltdW1EYXRlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tYXhpbXVtRGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBjb25maWd1cmVEYXRlUGlja2VyKGRhdGVUaW1lUGlja2VyRm9ybWF0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jYXNlRmllbGQuZmllbGRfdHlwZS50eXBlID09PSAnRGF0ZScpIHtcbiAgICAgIHRoaXMuaGlkZVRpbWUgPSB0cnVlO1xuICAgICAgdGhpcy5jaGVja1RpbWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGF0ZVRpbWVFbnRyeUZvcm1hdCA9IHRoaXMuZm9ybWF0VHJhbnNsYXRpb25TZXJ2aWNlLnJlbW92ZVRpbWUodGhpcy5kYXRlVGltZUVudHJ5Rm9ybWF0KTtcbiAgICAgIHRoaXMubW9tZW50Rm9ybWF0ID0gJ1lZWVktTU0tREQnO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNoZWNrVGltZSkge1xuXG4gICAgICBpZiAodGhpcy5mb3JtYXRUcmFuc2xhdGlvblNlcnZpY2UuaGFzU2Vjb25kcyhkYXRlVGltZVBpY2tlckZvcm1hdCkpIHtcbiAgICAgICAgdGhpcy5zaG93U2Vjb25kcyA9IHRydWU7XG4gICAgICAgIHRoaXMuaGlkZU1pbnV0ZXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kaXNhYmxlTWludXRlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGlkZVRpbWUgPSBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1hdFRyYW5zbGF0aW9uU2VydmljZS5pczI0SG91cihkYXRlVGltZVBpY2tlckZvcm1hdCkpIHtcbiAgICAgICAgICB0aGlzLmVuYWJsZU1lcmlkaWFuID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZm9ybWF0VHJhbnNsYXRpb25TZXJ2aWNlLmhhc0hvdXJzKGRhdGVUaW1lUGlja2VyRm9ybWF0KSkge1xuICAgICAgICB0aGlzLmhpZGVUaW1lID0gZmFsc2U7XG4gICAgICAgIGlmICghdGhpcy5mb3JtYXRUcmFuc2xhdGlvblNlcnZpY2UuaXMyNEhvdXIoZGF0ZVRpbWVQaWNrZXJGb3JtYXQpKSB7XG4gICAgICAgICAgdGhpcy5lbmFibGVNZXJpZGlhbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5mb3JtYXRUcmFuc2xhdGlvblNlcnZpY2UuaGFzTWludXRlcyhkYXRlVGltZVBpY2tlckZvcm1hdCkpIHtcbiAgICAgICAgdGhpcy5oaWRlTWludXRlcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRpc2FibGVNaW51dGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oaWRlVGltZSA9IGZhbHNlO1xuICAgICAgICBpZiAoIXRoaXMuZm9ybWF0VHJhbnNsYXRpb25TZXJ2aWNlLmlzMjRIb3VyKGRhdGVUaW1lUGlja2VyRm9ybWF0KSkge1xuICAgICAgICAgIHRoaXMuZW5hYmxlTWVyaWRpYW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5mb3JtYXRUcmFuc2xhdGlvblNlcnZpY2UuaGFzRGF0ZShkYXRlVGltZVBpY2tlckZvcm1hdCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mb3JtYXRUcmFuc2xhdGlvblNlcnZpY2UuaGFzTm9EYXkoZGF0ZVRpbWVQaWNrZXJGb3JtYXQpKSB7XG4gICAgICB0aGlzLnN0YXJ0VmlldyA9ICdtdWx0aS15ZWFyJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mb3JtYXRUcmFuc2xhdGlvblNlcnZpY2UuaGFzTm9EYXlBbmRNb250aChkYXRlVGltZVBpY2tlckZvcm1hdCkpIHtcbiAgICAgIHRoaXMuc3RhcnRWaWV3ID0gJ211bHRpLXllYXInO1xuICAgICAgdGhpcy55ZWFyU2VsZWN0aW9uID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgeWVhclNlbGVjdGVkKGV2ZW50OiBNb21lbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGFydFZpZXcgPT09ICdtdWx0aS15ZWFyJyAmJiB0aGlzLnllYXJTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMuZGF0ZUNvbnRyb2wucGF0Y2hWYWx1ZShldmVudC50b0lTT1N0cmluZygpKTtcbiAgICAgIHRoaXMuZGF0ZXRpbWVQaWNrZXIuY2xvc2UoKTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG1vbnRoU2VsZWN0ZWQoZXZlbnQ6IE1vbWVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXJ0VmlldyA9PT0gJ211bHRpLXllYXInKSB7XG4gICAgICB0aGlzLmRhdGVDb250cm9sLnBhdGNoVmFsdWUoZXZlbnQudG9JU09TdHJpbmcoKSk7XG4gICAgICB0aGlzLmRhdGVDb250cm9sLnBhdGNoVmFsdWUoZXZlbnQudG9JU09TdHJpbmcoKSk7XG4gICAgICB0aGlzLmRhdGV0aW1lUGlja2VyLmNsb3NlKCk7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0VmFsdWVBbmRTZXRFcnJvcnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUpIHtcbiAgICAgIGxldCBmb3JtVmFsdWUgPSB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgICAgZm9ybVZhbHVlID0gbW9tZW50KGZvcm1WYWx1ZSwgdGhpcy5kYXRlVGltZUVudHJ5Rm9ybWF0KS5mb3JtYXQodGhpcy5tb21lbnRGb3JtYXQpO1xuICAgICAgaWYgKGZvcm1WYWx1ZSAhPT0gJ0ludmFsaWQgZGF0ZScpIHtcbiAgICAgICAgLy8gaWYgbm90IGludmFsaWQgc2V0IHRoZSB2YWx1ZSBhcyB0aGUgZm9ybWF0dGVkIHZhbHVlXG4gICAgICAgIHRoaXMuZGF0ZUNvbnRyb2wuc2V0VmFsdWUoZm9ybVZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBkYXRlcGlja2VyIHBpY2tzIHVwIHRoZSBpbnZhbGlkIGVycm9yXG4gICAgICAgIGNvbnN0IGtlZXBFcnJvclRleHQgPSB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgICAgICB0aGlzLmRhdGVDb250cm9sLnNldFZhbHVlKGtlZXBFcnJvclRleHQpO1xuICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0ga2VlcEVycm9yVGV4dDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZW5zdXJlIHJlcXVpcmVkIGVycm9ycyBhcmUgcGlja2VkIHVwIGlmIHJlbGV2YW50XG4gICAgICB0aGlzLmRhdGVDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwICBib3R0b20tMzBcIiBbaWRdPVwiY2FzZUZpZWxkLmlkXCJcbiAgICAgW25nQ2xhc3NdPVwieydmb3JtLWdyb3VwLWVycm9yJzogZGF0ZUNvbnRyb2wgJiYgIWRhdGVDb250cm9sLnZhbGlkICYmIGRhdGVDb250cm9sLmRpcnR5fVwiPlxuICA8ZmllbGRzZXQ+XG4gICAgPGxlZ2VuZD5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1sYWJlbFwiICpuZ0lmPVwiY2FzZUZpZWxkLmxhYmVsXCI+e3tjYXNlRmllbGQgfCBjY2RGaWVsZExhYmVsIH19PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWhpbnRcIiAqbmdJZj1cImNhc2VGaWVsZC5oaW50X3RleHRcIj57e2Nhc2VGaWVsZC5oaW50X3RleHR9fTwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgICAqbmdJZj1cImRhdGVDb250cm9sICYmIGRhdGVDb250cm9sLmVycm9ycyAmJiBkYXRlQ29udHJvbC5kaXJ0eSAmJiAhKG1pbkVycm9yIHx8IG1heEVycm9yKVwiPnt7ZGF0ZUNvbnRyb2wuZXJyb3JzIHwgY2NkRmlyc3RFcnJvcjpjYXNlRmllbGQubGFiZWx9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgICAqbmdJZj1cImRhdGVDb250cm9sICYmIGRhdGVDb250cm9sLmRpcnR5ICYmIG1pbkVycm9yXCI+VGhpcyBkYXRlIGlzIG9sZGVyIHRoYW4gdGhlIG1pbmltdW0gZGF0ZSBhbGxvd2VkPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICAgICpuZ0lmPVwiZGF0ZUNvbnRyb2wgJiYgZGF0ZUNvbnRyb2wuZGlydHkgJiYgbWF4RXJyb3JcIj5UaGlzIGRhdGUgaXMgbGF0ZXIgdGhhbiB0aGUgbWF4aW11bSBkYXRlIGFsbG93ZWQ8L3NwYW4+XG4gICAgPC9sZWdlbmQ+XG4gICAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyXCI+XG4gICAgICA8aW5wdXQgY2xhc3M9XCJnb3Z1ay1pbnB1dFwiXG4gICAgICAgICAgICAgI2lucHV0XG4gICAgICAgICAgICAgYXR0ci5hcmlhLWxhYmVsPVwiUGxlYXNlIGVudGVyIGEgZGF0ZSBhbmQgdGltZSBpbiB0aGUgZm9ybWF0IHt7ZGF0ZVRpbWVFbnRyeUZvcm1hdH19XCJcbiAgICAgICAgICAgICBbbWluXT1cIm1pbkRhdGUoY2FzZUZpZWxkKVwiXG4gICAgICAgICAgICAgW21heF09XCJtYXhEYXRlKGNhc2VGaWVsZClcIlxuICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJkYXRlQ29udHJvbFwiXG4gICAgICAgICAgICAgW25neE1hdERhdGV0aW1lUGlja2VyXT1cInBpY2tlclwiXG4gICAgICAgICAgICAgKGZvY3VzaW4pPVwiZm9jdXNJbigpXCJcbiAgICAgICAgICAgICAoZm9jdXNvdXQpPVwiZm9jdXNPdXQoKVwiXG4gICAgICAgICAgICAgKGRhdGVDaGFuZ2UpPVwidmFsdWVDaGFuZ2VkKClcIlxuICAgICAgICAgICAgIG5nLW1vZGVsLW9wdGlvbnM9XCJ7dGltZXpvbmU6J3V0Yyd9XCJcbiAgICAgID5cbiAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwicGlja2VyXCIgaWQ9XCJwaWNrZXJPcGVuZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgIDxuZ3gtbWF0LWRhdGV0aW1lLXBpY2tlciAjcGlja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG91Y2hVaV09XCJ0b3VjaFVpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZVRpbWVdPVwiaGlkZVRpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGFydFZpZXddPVwic3RhcnRWaWV3XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RlcEhvdXJdPVwic3RlcEhvdXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGVwU2Vjb25kXT1cInN0ZXBTZWNvbmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGVwTWludXRlXT1cInN0ZXBNaW51dGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93U2Vjb25kc109XCJzaG93U2Vjb25kc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dTcGlubmVyc109XCJzaG93U3Bpbm5lcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlTWludXRlXT1cImRpc2FibGVNaW51dGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmFibGVNZXJpZGlhbl09XCJlbmFibGVNZXJpZGlhblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHllYXJTZWxlY3RlZCk9XCJ5ZWFyU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vbnRoU2VsZWN0ZWQpPVwibW9udGhTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3BlbmVkKT1cInRvZ2dsZUNsaWNrKClcIlxuICAgICAgPlxuICAgICAgPC9uZ3gtbWF0LWRhdGV0aW1lLXBpY2tlcj5cbiAgICA8L2Rpdj5cbiAgPC9maWVsZHNldD5cbjwvZGl2PlxuIl19