@messaia/cdk 13.3.6 → 14.0.0-rc03
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/base/base.module.mjs +15 -17
- package/esm2020/lib/base/components/base.component.mjs +3 -3
- package/esm2020/lib/base/components/dynamic-table-config-dialog.comnponent.mjs +7 -11
- package/esm2020/lib/base/components/generic-form-base.component.mjs +3 -3
- package/esm2020/lib/base/components/generic-form.component.mjs +3 -3
- package/esm2020/lib/base/components/generic-list.component.mjs +3 -3
- package/esm2020/lib/base/components/generic-reactive-form.component.mjs +3 -3
- package/esm2020/lib/base/interceptors/base.interceptor.mjs +3 -3
- package/esm2020/lib/base/interceptors/caching-interceptor.mjs +3 -3
- package/esm2020/lib/base/interceptors/loading.interceptor.mjs +3 -3
- package/esm2020/lib/base/services/file.service.mjs +3 -3
- package/esm2020/lib/base/services/loading-screen.service.mjs +3 -3
- package/esm2020/lib/base/services/print.service.mjs +3 -3
- package/esm2020/lib/chips/chips.module.mjs +9 -11
- package/esm2020/lib/chips/components/chips.component.mjs +12 -12
- package/esm2020/lib/chips/directives/autocomplete-option.directive.mjs +3 -3
- package/esm2020/lib/chips/directives/chip.directive.mjs +3 -3
- package/esm2020/lib/common/common.module.mjs +5 -5
- package/esm2020/lib/common/directives/disable-control.directive.mjs +3 -3
- package/esm2020/lib/common/functions/utils.mjs +3 -3
- package/esm2020/lib/common/helpers/app-storage.mjs +3 -3
- package/esm2020/lib/common/helpers/dynamic-builder.mjs +3 -3
- package/esm2020/lib/common/helpers/dynamic-component-compiler.mjs +3 -3
- package/esm2020/lib/common/models/action-menu-item.mjs +1 -1
- package/esm2020/lib/common/models/app-setting.mjs +3 -3
- package/esm2020/lib/common/pipes/data-source.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/enum.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/file-size.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/filter.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/first-letter.mjs +3 -3
- package/esm2020/lib/common/pipes/keys.mjs +3 -3
- package/esm2020/lib/common/pipes/month-name.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/only-number.mjs +3 -3
- package/esm2020/lib/common/pipes/order.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/placeholder.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/safe-html.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/time.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/titlecase.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/truncate.pipe.mjs +3 -3
- package/esm2020/lib/common/pipes/values.mjs +3 -3
- package/esm2020/lib/common/services/base.service.mjs +3 -3
- package/esm2020/lib/common/services/enum.service.mjs +3 -3
- package/esm2020/lib/dialogs/alert-dialog/alert-dialog.component.mjs +5 -5
- package/esm2020/lib/dialogs/confirm-dialog/confirm-dialog.component.mjs +5 -5
- package/esm2020/lib/dialogs/dialog.component.mjs +12 -12
- package/esm2020/lib/dialogs/dialogs.module.mjs +10 -12
- package/esm2020/lib/dialogs/prompt-dialog/prompt-dialog.component.mjs +9 -9
- package/esm2020/lib/dialogs/services/dialog.service.mjs +3 -3
- package/esm2020/lib/file/file-input.component.mjs +12 -23
- package/esm2020/lib/file/file.module.mjs +9 -11
- package/esm2020/lib/form-validators/directives/base-directive.mjs +3 -3
- package/esm2020/lib/form-validators/directives/control-host.directive.mjs +3 -3
- package/esm2020/lib/form-validators/directives/html-control-template.directive.mjs +3 -3
- package/esm2020/lib/form-validators/directives/rx-form.directive.mjs +3 -3
- package/esm2020/lib/form-validators/directives/template-validations/async-validation.directive.mjs +3 -3
- package/esm2020/lib/form-validators/directives/template-validations/base-validator.directive.mjs +3 -3
- package/esm2020/lib/form-validators/directives/template-validations/control-expression-process.mjs +3 -3
- package/esm2020/lib/form-validators/directives/template-validations/file-control.directive.mjs +3 -3
- package/esm2020/lib/form-validators/directives/template-validations/image-file-control.directive.mjs +3 -3
- package/esm2020/lib/form-validators/directives/template-validations/rxformcontrol.directive.mjs +3 -3
- package/esm2020/lib/form-validators/domain/element-processor/decimal.provider.mjs +3 -3
- package/esm2020/lib/form-validators/domain/element-processor/mask.provider.mjs +2 -1
- package/esm2020/lib/form-validators/models/interface/i-abstract-control.mjs +1 -1
- package/esm2020/lib/form-validators/services/form-control.mjs +28 -26
- package/esm2020/lib/form-validators/services/reactive-form.module.mjs +9 -9
- package/esm2020/lib/form-validators/services/rx-form-builder.mjs +17 -17
- package/esm2020/lib/form-validators/services/typed-form-builder.mjs +3 -3
- package/esm2020/lib/form-validators/validators-function/alpha-validation.function.mjs +2 -3
- package/esm2020/lib/forms/components/generic-form/generic-form.component.mjs +34 -34
- package/esm2020/lib/forms/directives/mat-form-field-editor.directive.mjs +21 -10
- package/esm2020/lib/forms/directives/mat-form-field-readonly.directive.mjs +3 -3
- package/esm2020/lib/forms/forms.module.mjs +21 -23
- package/esm2020/lib/forms/helpers/abstract-mat-form-field.mjs +29 -11
- package/esm2020/lib/forms/helpers/value-accessor-base.mjs +3 -3
- package/esm2020/lib/forms/validators/equal-validator.directive.mjs +3 -3
- package/esm2020/lib/forms/validators/native-element-injector.directive.mjs +3 -3
- package/esm2020/lib/forms/validators/unique-validator-directive.mjs +3 -3
- package/esm2020/lib/http/http.module.mjs +5 -7
- package/esm2020/lib/layout/dynamic-menu/dynamic-menu.component.mjs +7 -7
- package/esm2020/lib/layout/form-toolbar/form-toolbar.component.mjs +8 -8
- package/esm2020/lib/layout/form-toolbar-menu/form-toolbar-menu.component.mjs +7 -7
- package/esm2020/lib/layout/layout-card-over/layout-card-over.component.mjs +7 -7
- package/esm2020/lib/layout/layout-footer/layout-footer.component.mjs +3 -3
- package/esm2020/lib/layout/layout-manage-list/layout-manage-list.component.mjs +10 -10
- package/esm2020/lib/layout/layout-manage-list/layout-manage-list.directives.mjs +9 -9
- package/esm2020/lib/layout/layout-nav/layout-nav.component.mjs +9 -9
- package/esm2020/lib/layout/layout-nav-list/layout-nav-list.component.mjs +8 -8
- package/esm2020/lib/layout/layout-nav-list/layout-nav-list.directives.mjs +9 -9
- package/esm2020/lib/layout/layout-toggle.class.mjs +3 -3
- package/esm2020/lib/layout/layout.component.mjs +3 -3
- package/esm2020/lib/layout/layout.directives.mjs +9 -9
- package/esm2020/lib/layout/layout.module.mjs +15 -17
- package/esm2020/lib/layout/list-toolbar/list-toolbar.component.mjs +9 -9
- package/esm2020/lib/layout/navigation-drawer/navigation-drawer.component.mjs +13 -13
- package/esm2020/lib/media/directives/media-toggle.directive.mjs +3 -3
- package/esm2020/lib/media/media.module.mjs +6 -8
- package/esm2020/lib/media/services/media.service.mjs +3 -3
- package/esm2020/lib/menu/components/menu.component.mjs +10 -10
- package/esm2020/lib/menu/menu.module.mjs +8 -10
- package/esm2020/lib/menu/services/menu-items.service.mjs +3 -3
- package/esm2020/lib/menu/services/menu.resolve.mjs +6 -6
- package/esm2020/lib/menu/services/menu.service.mjs +3 -3
- package/esm2020/lib/search/search.module.mjs +9 -11
- package/esm2020/lib/search/vd-search-box/vd-search-box.component.mjs +8 -8
- package/esm2020/lib/search/vd-search-input/vd-search-input.component.mjs +7 -7
- package/esm2020/lib/select/components/select.component.mjs +7 -7
- package/esm2020/lib/select/directives/vd-select-option.directive.mjs +3 -3
- package/esm2020/lib/select/directives/vd-select-trigger.directive.mjs +3 -3
- package/esm2020/lib/select/select.module.mjs +9 -11
- package/esm2020/lib/table/components/dynamic-table/dynamic-table.component.mjs +41 -25
- package/esm2020/lib/table/components/filter-clear.component.mjs +4 -4
- package/esm2020/lib/table/components/filter-date.component.mjs +11 -11
- package/esm2020/lib/table/components/filter-input.component.mjs +10 -10
- package/esm2020/lib/table/components/filter-select.component.mjs +16 -37
- package/esm2020/lib/table/directives/data-source-filter.directive.mjs +3 -3
- package/esm2020/lib/table/enums/table-column-type.mjs +2 -1
- package/esm2020/lib/table/functions/decorators.mjs +10 -6
- package/esm2020/lib/table/models/table-column.mjs +1 -1
- package/esm2020/lib/table/paginator-intl.mjs +3 -3
- package/esm2020/lib/table/table.module.mjs +26 -28
- package/fesm2015/messaia-cdk.mjs +830 -841
- package/fesm2015/messaia-cdk.mjs.map +1 -1
- package/fesm2020/messaia-cdk.mjs +830 -841
- package/fesm2020/messaia-cdk.mjs.map +1 -1
- package/{messaia-cdk.d.ts → index.d.ts} +0 -0
- package/lib/base/components/base.component.d.ts +1 -1
- package/lib/base/components/dynamic-table-config-dialog.comnponent.d.ts +1 -1
- package/lib/base/components/generic-form-base.component.d.ts +1 -1
- package/lib/base/components/generic-form.component.d.ts +1 -1
- package/lib/base/components/generic-list.component.d.ts +1 -1
- package/lib/base/components/generic-reactive-form.component.d.ts +1 -1
- package/lib/chips/components/chips.component.d.ts +1 -1
- package/lib/chips/directives/autocomplete-option.directive.d.ts +1 -1
- package/lib/chips/directives/chip.directive.d.ts +1 -1
- package/lib/common/directives/disable-control.directive.d.ts +1 -1
- package/lib/common/functions/utils.d.ts +1 -1
- package/lib/common/helpers/app-storage.d.ts +1 -1
- package/lib/common/models/action-menu-item.d.ts +1 -1
- package/lib/common/pipes/data-source.pipe.d.ts +1 -1
- package/lib/common/pipes/enum.pipe.d.ts +1 -1
- package/lib/common/pipes/file-size.pipe.d.ts +1 -1
- package/lib/common/pipes/filter.pipe.d.ts +1 -1
- package/lib/common/pipes/first-letter.d.ts +1 -1
- package/lib/common/pipes/keys.d.ts +1 -1
- package/lib/common/pipes/month-name.pipe.d.ts +1 -1
- package/lib/common/pipes/only-number.d.ts +1 -1
- package/lib/common/pipes/order.pipe.d.ts +1 -1
- package/lib/common/pipes/placeholder.pipe.d.ts +1 -1
- package/lib/common/pipes/safe-html.pipe.d.ts +1 -1
- package/lib/common/pipes/time.pipe.d.ts +1 -1
- package/lib/common/pipes/titlecase.pipe.d.ts +1 -1
- package/lib/common/pipes/truncate.pipe.d.ts +1 -1
- package/lib/common/pipes/values.d.ts +1 -1
- package/lib/dialogs/alert-dialog/alert-dialog.component.d.ts +1 -1
- package/lib/dialogs/confirm-dialog/confirm-dialog.component.d.ts +1 -1
- package/lib/dialogs/dialog.component.d.ts +4 -4
- package/lib/dialogs/prompt-dialog/prompt-dialog.component.d.ts +1 -1
- package/lib/file/file-input.component.d.ts +1 -1
- package/lib/form-validators/directives/base-directive.d.ts +1 -1
- package/lib/form-validators/directives/control-host.directive.d.ts +1 -1
- package/lib/form-validators/directives/html-control-template.directive.d.ts +1 -1
- package/lib/form-validators/directives/rx-form.directive.d.ts +1 -1
- package/lib/form-validators/directives/template-validations/async-validation.directive.d.ts +1 -1
- package/lib/form-validators/directives/template-validations/base-validator.directive.d.ts +1 -1
- package/lib/form-validators/directives/template-validations/control-expression-process.d.ts +1 -1
- package/lib/form-validators/directives/template-validations/file-control.directive.d.ts +1 -1
- package/lib/form-validators/directives/template-validations/image-file-control.directive.d.ts +1 -1
- package/lib/form-validators/directives/template-validations/rxformcontrol.directive.d.ts +1 -1
- package/lib/form-validators/domain/element-processor/mask.provider.d.ts +1 -4
- package/lib/form-validators/models/interface/i-abstract-control.d.ts +1 -1
- package/lib/form-validators/services/form-control.d.ts +12 -9
- package/lib/form-validators/services/rx-form-builder.d.ts +5 -5
- package/lib/forms/components/generic-form/generic-form.component.d.ts +5 -5
- package/lib/forms/directives/mat-form-field-editor.directive.d.ts +21 -18
- package/lib/forms/directives/mat-form-field-readonly.directive.d.ts +1 -1
- package/lib/forms/helpers/abstract-mat-form-field.d.ts +22 -13
- package/lib/forms/helpers/value-accessor-base.d.ts +1 -1
- package/lib/forms/validators/equal-validator.directive.d.ts +1 -1
- package/lib/forms/validators/native-element-injector.directive.d.ts +1 -1
- package/lib/forms/validators/unique-validator-directive.d.ts +1 -1
- package/lib/layout/dynamic-menu/dynamic-menu.component.d.ts +1 -1
- package/lib/layout/form-toolbar/form-toolbar.component.d.ts +1 -1
- package/lib/layout/form-toolbar-menu/form-toolbar-menu.component.d.ts +1 -1
- package/lib/layout/layout-card-over/layout-card-over.component.d.ts +1 -1
- package/lib/layout/layout-footer/layout-footer.component.d.ts +1 -1
- package/lib/layout/layout-manage-list/layout-manage-list.component.d.ts +1 -1
- package/lib/layout/layout-manage-list/layout-manage-list.directives.d.ts +3 -3
- package/lib/layout/layout-nav/layout-nav.component.d.ts +1 -1
- package/lib/layout/layout-nav-list/layout-nav-list.component.d.ts +1 -1
- package/lib/layout/layout-nav-list/layout-nav-list.directives.d.ts +3 -3
- package/lib/layout/layout-toggle.class.d.ts +1 -1
- package/lib/layout/layout.component.d.ts +1 -1
- package/lib/layout/layout.directives.d.ts +3 -3
- package/lib/layout/list-toolbar/list-toolbar.component.d.ts +1 -1
- package/lib/layout/navigation-drawer/navigation-drawer.component.d.ts +3 -3
- package/lib/media/directives/media-toggle.directive.d.ts +1 -1
- package/lib/menu/components/menu.component.d.ts +1 -1
- package/lib/search/vd-search-box/vd-search-box.component.d.ts +1 -1
- package/lib/search/vd-search-input/vd-search-input.component.d.ts +1 -1
- package/lib/select/components/select.component.d.ts +1 -1
- package/lib/select/directives/vd-select-option.directive.d.ts +1 -1
- package/lib/select/directives/vd-select-trigger.directive.d.ts +1 -1
- package/lib/table/components/dynamic-table/dynamic-table.component.d.ts +7 -1
- package/lib/table/components/filter-clear.component.d.ts +1 -1
- package/lib/table/components/filter-date.component.d.ts +1 -1
- package/lib/table/components/filter-input.component.d.ts +1 -1
- package/lib/table/components/filter-select.component.d.ts +2 -2
- package/lib/table/directives/data-source-filter.directive.d.ts +1 -1
- package/lib/table/enums/table-column-type.d.ts +2 -1
- package/lib/table/models/table-column.d.ts +14 -14
- package/package.json +3 -3
package/esm2020/lib/form-validators/directives/template-validations/rxformcontrol.directive.mjs
CHANGED
|
@@ -163,9 +163,9 @@ export class RxFormControlDirective extends BaseValidator {
|
|
|
163
163
|
this.maskProvider.onDestroy();
|
|
164
164
|
}
|
|
165
165
|
}
|
|
166
|
-
/** @nocollapse */ RxFormControlDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
167
|
-
/** @nocollapse */ RxFormControlDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "
|
|
168
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
166
|
+
/** @nocollapse */ RxFormControlDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: RxFormControlDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.DecimalProvider }], target: i0.ɵɵFactoryTarget.Directive });
|
|
167
|
+
/** @nocollapse */ RxFormControlDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.0", type: RxFormControlDirective, selector: "[ngModel],[formControlName],[formControl]", inputs: { rxalpha: "rxalpha", rxalphaNumeric: "rxalphaNumeric", rxascii: "rxascii", rxcompare: "rxcompare", rxcompose: "rxcompose", rxcontains: "rxcontains", rxcreditCard: "rxcreditCard", rxdataUri: "rxdataUri", rxdifferent: "rxdifferent", rxdigit: "rxdigit", rxemail: "rxemail", rxendsWith: "rxendsWith", rxeven: "rxeven", rxextension: "rxextension", rxfactor: "rxfactor", rxfileSize: "rxfileSize", rxgreaterThanEqualTo: "rxgreaterThanEqualTo", rxgreaterThan: "rxgreaterThan", rxhexColor: "rxhexColor", rxjson: "rxjson", rxlatitude: "rxlatitude", rxlatLong: "rxlatLong", rxleapYear: "rxleapYear", rxlessThan: "rxlessThan", rxlessThanEqualTo: "rxlessThanEqualTo", rxlongitude: "rxlongitude", rxlowerCase: "rxlowerCase", rxmac: "rxmac", rxmaxDate: "rxmaxDate", rxmaxLength: "rxmaxLength", rxmaxNumber: "rxmaxNumber", rxminDate: "rxminDate", rxminLength: "rxminLength", rxminNumber: "rxminNumber", rxnumeric: "rxnumeric", rxodd: "rxodd", rxpassword: "rxpassword", rxport: "rxport", rxprimeNumber: "rxprimeNumber", rxrequired: "rxrequired", rxrange: "rxrange", rxrule: "rxrule", rxstartsWith: "rxstartsWith", rxtime: "rxtime", rxupperCase: "rxupperCase", rxurl: "rxurl", rxunique: "rxunique", rxnotEmpty: "rxnotEmpty", rxcusip: "rxcusip", rxgrid: "rxgrid", rxdate: "rxdate" }, providers: [NGMODEL_BINDING], usesInheritance: true, ngImport: i0 });
|
|
168
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: RxFormControlDirective, decorators: [{
|
|
169
169
|
type: Directive,
|
|
170
170
|
args: [{
|
|
171
171
|
selector: '[ngModel],[formControlName],[formControl]',
|
|
@@ -48,9 +48,9 @@ export class DecimalProvider {
|
|
|
48
48
|
this.isSetConfig = true;
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
|
-
/** @nocollapse */ DecimalProvider.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
52
|
-
/** @nocollapse */ DecimalProvider.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
53
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
51
|
+
/** @nocollapse */ DecimalProvider.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: DecimalProvider, deps: [{ token: i1.DecimalPipe }, { token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
52
|
+
/** @nocollapse */ DecimalProvider.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: DecimalProvider });
|
|
53
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: DecimalProvider, decorators: [{
|
|
54
54
|
type: Injectable
|
|
55
55
|
}], ctorParameters: function () { return [{ type: i1.DecimalPipe }, { type: undefined, decorators: [{
|
|
56
56
|
type: Inject,
|
|
@@ -132,6 +132,7 @@ export class MaskProvider {
|
|
|
132
132
|
}
|
|
133
133
|
return { begin: begin, end: end };
|
|
134
134
|
}
|
|
135
|
+
return;
|
|
135
136
|
}
|
|
136
137
|
isCompleted(lastRequiredNonMaskPos, isNotRunValidator) {
|
|
137
138
|
let completed;
|
|
@@ -427,4 +428,4 @@ export class MaskProvider {
|
|
|
427
428
|
this.eventListeners = [];
|
|
428
429
|
}
|
|
429
430
|
}
|
|
430
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL2Zvcm0tdmFsaWRhdG9ycy9kb21haW4vZWxlbWVudC1wcm9jZXNzb3IvbWFzay5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTVELE1BQU0sT0FBTyxZQUFZO0lBNENyQixZQUFvQixLQUF1QixFQUFVLElBQVksRUFBVSxRQUFtQixFQUFVLFdBQXdCLEVBQVUsTUFBa0I7UUFBeEksVUFBSyxHQUFMLEtBQUssQ0FBa0I7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQTFDcEosbUJBQWMsR0FBVSxFQUFFLENBQUM7UUFFbkMsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUV0QixTQUFJLEdBQVcsTUFBTSxDQUFDO1FBRXRCLGFBQVEsR0FBVyxHQUFHLENBQUM7UUFFdkIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQW1HM0IsY0FBUyxHQUFZLEtBQUssQ0FBQztRQXFRM0Isb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFyVTdCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsSUFBSTtRQUNBLElBQUksY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUM5QyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDNUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLElBQUksR0FBRztZQUNSLEdBQUcsRUFBRSxPQUFPO1lBQ1osR0FBRyxFQUFFLFVBQVU7WUFDZixHQUFHLEVBQUUsYUFBYTtTQUNyQixDQUFDO1FBR0YsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFFM0IsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7YUFDNUI7aUJBQ0ksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLElBQUksRUFBRTtvQkFDL0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7aUJBQ2hEO2dCQUNELElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7aUJBQ3ZEO2FBQ0o7aUJBQ0k7Z0JBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDekI7U0FDSjtRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUM7UUFDM0osSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRTtnQkFDVixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7b0JBRXpDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNCO1NBQ0o7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDbEMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsVUFBVTtRQUNOLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekcsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3pELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQTtTQUNuQztRQUNELElBQUksTUFBTSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1RCxJQUFJLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUU7WUFDMUcsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNoQixPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDckY7U0FFSjtRQUNELE9BQU8sV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBVTtRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDWixJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO2dCQUMvQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7YUFDekI7WUFDRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDbkI7UUFFRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQWMsRUFBRSxJQUFhO1FBQy9CLElBQUksS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUM7UUFFdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLGFBQWEsRUFBRTtZQUNuRSxPQUFPO1NBQ1Y7UUFFRCxJQUFJLE9BQU8sS0FBSyxJQUFJLFFBQVEsRUFBRTtZQUMxQixLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ2QsR0FBRyxHQUFHLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ2hELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDNUM7aUJBQ0ksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEVBQUU7Z0JBQ3BDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztnQkFDeEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDckIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ2hDLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNwQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDbEI7U0FDSjthQUNJO1lBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFO2dCQUM5QixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7Z0JBQ2xDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQzthQUNqQztpQkFDSSxJQUFJLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsV0FBVyxFQUFFO2dCQUNqRSxLQUFLLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM1QyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzlELEdBQUcsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDbkM7WUFFRCxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7U0FDckM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLHNCQUErQixFQUFFLGlCQUEyQjtRQUNwRSxJQUFJLFNBQWtCLENBQUM7UUFDdkIsc0JBQXNCLEdBQUcsc0JBQXNCLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDO1FBQy9FLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLElBQUksc0JBQXNCLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDakUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDNUQsT0FBTyxLQUFLLENBQUM7YUFDaEI7U0FDSjtRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUI7WUFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxjQUFjLENBQUMsQ0FBUztRQUNwQixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsUUFBUSxDQUFDLEdBQUc7UUFDUixPQUFPLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUFDLENBQUM7UUFDN0MsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQsUUFBUSxDQUFDLEdBQUc7UUFDUixPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQUMsQ0FBQztRQUN2QyxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBYSxFQUFFLEdBQVc7UUFDN0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRVQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQ1gsT0FBTztTQUNWO1FBRUQsS0FBSyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3ZELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDZixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDcEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzNDO3FCQUFNO29CQUNILE1BQU07aUJBQ1Q7Z0JBRUQsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDeEI7U0FDSjtRQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxNQUFNLENBQUMsR0FBRztRQUNOLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWYsS0FBSyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzNELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDZixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckIsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUN2QyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNUO3FCQUFNO29CQUNILE1BQU07aUJBQ1Q7YUFDSjtTQUNKO0lBQ0wsQ0FBQztJQUVELGtCQUFrQixDQUFDLENBQUM7UUFDaEIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDOUIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ3pFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEIsT0FBTyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQzlDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQixJQUFJLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO2dCQUNqQixPQUFPLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztvQkFDN0QsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ25CO1lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNwQzthQUFNO1lBQ0gsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixPQUFPLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDakQsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRWhCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDcEM7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztTQUMxQjthQUFNO1lBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQzdDO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxDQUFDO1FBR0osSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ3BDLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDL0MsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7WUFDN0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDO1NBQ2xDO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxDQUFDO1FBQ1AsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsT0FBTyxFQUN4QixHQUFHLEVBQ0gsS0FBSyxFQUNMLEdBQUcsQ0FBQztRQUNSLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQy9CLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN4RixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDOUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQixLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUNsQixHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUdkLElBQUksR0FBRyxHQUFHLEtBQUssS0FBSyxDQUFDLEVBQUU7Z0JBQ25CLEtBQUssR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO2FBQzdDO1lBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN0QjthQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkI7YUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztZQUM3QyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7U0FFdEI7SUFFTCxDQUFDO0lBRUQsVUFBVSxDQUFDLENBQUM7UUFDUixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQ3hCLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQ2xCLENBQUMsRUFDRCxDQUFDLEVBQ0QsSUFBSSxFQUNKLFNBQVMsQ0FBQztRQUNkLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUM5QyxPQUFPO1NBQ1Y7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3RCLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDdkM7WUFFRCxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBRWYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ25CLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDbkIsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBR3hCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2pCLElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7d0JBQzFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7cUJBQ2xDO2lCQUNKO2FBQ0o7WUFDRCxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdEI7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLElBQUksU0FBUyxLQUFLLFNBQVM7WUFDdkIsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6RyxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHO1FBQ2xCLElBQUksQ0FBQyxDQUFDO1FBQ04sS0FBSyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMzQztTQUNKO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWU7UUFDcEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQ3ZCLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFDZCxDQUFDLEVBQ0QsQ0FBQyxFQUNELEdBQUcsQ0FBQztRQUVSLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDZixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLE9BQU8sR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDeEIsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUN6QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDbkIsU0FBUyxHQUFHLENBQUMsQ0FBQzt3QkFDZCxNQUFNO3FCQUNUO2lCQUNKO2dCQUNELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2xDLE1BQU07aUJBQ1Q7YUFDSjtpQkFBTTtnQkFDSCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDckMsR0FBRyxFQUFFLENBQUM7aUJBQ1Q7Z0JBQ0QsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRTtvQkFDMUIsU0FBUyxHQUFHLENBQUMsQ0FBQztpQkFDakI7YUFDSjtTQUNKO1FBQ0QsSUFBSSxLQUFLLEVBQUU7WUFDUCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdEI7YUFBTSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUU7WUFDN0csSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQy9ELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFBO2FBQ3hCO2lCQUFNO2dCQUNILElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFBO2dCQUNyQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDdEI7U0FDSjthQUFNO1lBQ0gsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ25FO1FBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxPQUFPLENBQUMsS0FBSztRQUVULElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBRWxCLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbEMsSUFBSSxHQUFHLENBQUM7UUFFUixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBRWxDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFdEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2xDLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsYUFBYSxFQUFFO2dCQUN2QyxPQUFPO2FBQ1Y7WUFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtnQkFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDdEI7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNuQjtZQUNELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzdCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBSztRQUNULElBQUksSUFBSSxDQUFDLGFBQWE7WUFDbEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDOztZQUUvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUNELGVBQWUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLGNBQXdCO1FBQ2hELElBQUksQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDN0QsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDN0IsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUztZQUNmLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtRQUM5RSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUN6QyxJQUFJLENBQUMsT0FBTztZQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQUs7UUFDbkIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDeEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM5QyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzFCO1NBQ0o7UUFDRCxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELFdBQVcsQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELGlCQUFpQjtRQUNiLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUVELFNBQVM7UUFDTCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztRQUM1QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDcEM7UUFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztJQUM3QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZW5kZXJlcjIgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBCTFVSLCBGT0NVUywgS0VZX0RPV04sIEtFWV9QUkVTUywgUEFTVEUgfSBmcm9tIFwiLi4vLi4vY29uc3RcIjtcclxuaW1wb3J0IHsgQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIi4uLy4uL2NvcmUvdmFsaWRhdG9yLnN0YXRpY1wiO1xyXG5pbXBvcnQgeyBNYXNrQ29uZmlnIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb25maWcvbWFzay1jb25maWdcIjtcclxuaW1wb3J0IHsgZ2V0Q29uZmlnT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3V0aWwvY29uZmlnLXByb3ZpZGVyXCI7XHJcbmltcG9ydCB7IEZvcm1Qcm92aWRlciB9IGZyb20gXCIuLi8uLi91dGlsL2Zvcm0tcHJvdmlkZXJcIjtcclxuaW1wb3J0IHsgT2JqZWN0TWFrZXIgfSBmcm9tIFwiLi4vLi4vdXRpbC9vYmplY3QtbWFrZXJcIjtcclxuaW1wb3J0IHsgUmVnZXhWYWxpZGF0b3IgfSBmcm9tIFwiLi4vLi4vdXRpbC9yZWdleC12YWxpZGF0b3JcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBNYXNrUHJvdmlkZXIge1xyXG5cclxuICAgIHByaXZhdGUgZXZlbnRMaXN0ZW5lcnM6IGFueVtdID0gW107XHJcblxyXG4gICAgb2xkVmFsdWU6IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIHR5cGU6IHN0cmluZyA9ICd0ZXh0JztcclxuXHJcbiAgICBzbG90Q2hhcjogc3RyaW5nID0gJ18nO1xyXG5cclxuICAgIGF1dG9DbGVhcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHZhbHVlOiBhbnk7XHJcblxyXG4gICAgZGVmczogYW55O1xyXG5cclxuICAgIHRlc3RzOiBhbnlbXTtcclxuXHJcbiAgICBwYXJ0aWFsUG9zaXRpb246IGFueTtcclxuXHJcbiAgICBmaXJzdE5vbk1hc2tQb3M6IG51bWJlcjtcclxuXHJcbiAgICBsYXN0UmVxdWlyZWROb25NYXNrUG9zOiBhbnk7XHJcblxyXG4gICAgbGVuOiBudW1iZXI7XHJcblxyXG4gICAgb2xkVmFsOiBzdHJpbmc7XHJcblxyXG4gICAgYnVmZmVyOiBhbnk7XHJcblxyXG4gICAgZGVmYXVsdEJ1ZmZlcjogc3RyaW5nO1xyXG5cclxuICAgIGZvY3VzVGV4dDogc3RyaW5nO1xyXG5cclxuICAgIGNhcmV0VGltZW91dElkOiBhbnk7XHJcblxyXG4gICAgYW5kcm9pZENocm9tZTogYm9vbGVhbjtcclxuXHJcbiAgICBmb2N1czogYm9vbGVhbjtcclxuXHJcbiAgICBmaWxsZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgbWluTGVuZ3RoOiBudW1iZXI7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpbnB1dDogSFRNTElucHV0RWxlbWVudCwgcHJpdmF0ZSBtYXNrOiBzdHJpbmcsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBmb3JtQ29udHJvbDogRm9ybUNvbnRyb2wsIHByaXZhdGUgY29uZmlnOiBNYXNrQ29uZmlnKSB7XHJcbiAgICAgICAgdGhpcy5iaW5kKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYmluZCgpIHtcclxuICAgICAgICBpZiAoUmVnZXhWYWxpZGF0b3IuaXNOb3RCbGFuayh0aGlzLmZvcm1Db250cm9sLnZhbHVlKSlcclxuICAgICAgICAgICAgdGhpcy5pbnB1dC52YWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgICAgICAgdGhpcy50ZXN0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMucGFydGlhbFBvc2l0aW9uID0gdGhpcy5tYXNrLmxlbmd0aDtcclxuICAgICAgICB0aGlzLmxlbiA9IHRoaXMubWFzay5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5maXJzdE5vbk1hc2tQb3MgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZGVmcyA9IHtcclxuICAgICAgICAgICAgJzknOiAnWzAtOV0nLFxyXG4gICAgICAgICAgICAnYSc6ICdbQS1aYS16XScsXHJcbiAgICAgICAgICAgICcqJzogJ1tBLVphLXowLTldJ1xyXG4gICAgICAgIH07XHJcblxyXG5cclxuICAgICAgICB0aGlzLmFuZHJvaWRDaHJvbWUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IG1hc2tUb2tlbnMgPSB0aGlzLm1hc2suc3BsaXQoJycpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWFza1Rva2Vucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgYyA9IG1hc2tUb2tlbnNbaV07XHJcbiAgICAgICAgICAgIGlmIChjID09ICc/Jykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sZW4tLTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFydGlhbFBvc2l0aW9uID0gaTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmRlZnNbY10pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGVzdHMucHVzaChuZXcgUmVnRXhwKHRoaXMuZGVmc1tjXSkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlyc3ROb25NYXNrUG9zID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdE5vbk1hc2tQb3MgPSB0aGlzLnRlc3RzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaSA8IHRoaXMucGFydGlhbFBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0UmVxdWlyZWROb25NYXNrUG9zID0gdGhpcy50ZXN0cy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50ZXN0cy5wdXNoKG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWluTGVuZ3RoID0gdGhpcy5jb25maWcubWluTGVuZ3RoID8gdGhpcy5sYXN0UmVxdWlyZWROb25NYXNrUG9zIC0gKHRoaXMubGFzdFJlcXVpcmVkTm9uTWFza1BvcyAtIHRoaXMuY29uZmlnLm1pbkxlbmd0aCkgOiB0aGlzLmxhc3RSZXF1aXJlZE5vbk1hc2tQb3M7XHJcbiAgICAgICAgdGhpcy5idWZmZXIgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hc2tUb2tlbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGMgPSBtYXNrVG9rZW5zW2ldO1xyXG4gICAgICAgICAgICBpZiAoYyAhPSAnPycpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlZnNbY10pXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXIucHVzaCh0aGlzLmdldFBsYWNlaG9sZGVyKGkpKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlci5wdXNoKGMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGVmYXVsdEJ1ZmZlciA9IHRoaXMuYnVmZmVyLmpvaW4oJycpO1xyXG4gICAgICAgIHRoaXMuZm9jdXNUZXh0ID0gdGhpcy5pbnB1dC52YWx1ZTtcclxuICAgICAgICB0aGlzLmJpbmRFdmVudHMoKTtcclxuICAgICAgICB0aGlzLmNoZWNrVmFsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYmluZEV2ZW50cygpIHtcclxuICAgICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5pbnB1dCwgRk9DVVMsIHRoaXMub25Gb2N1cy5iaW5kKHRoaXMpKSk7XHJcbiAgICAgICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaW5wdXQsIEJMVVIsIHRoaXMub25CbHVyLmJpbmQodGhpcykpKTtcclxuICAgICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5pbnB1dCwgS0VZX0RPV04sIHRoaXMub25LZXlEb3duLmJpbmQodGhpcykpKTtcclxuICAgICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5pbnB1dCwgS0VZX1BSRVNTLCB0aGlzLm9uS2V5UHJlc3MuYmluZCh0aGlzKSkpO1xyXG4gICAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmlucHV0LCBcImlucHV0XCIsIHRoaXMub25JbnB1dC5iaW5kKHRoaXMpKSk7XHJcbiAgICAgICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaW5wdXQsIFBBU1RFLCB0aGlzLmhhbmRsZUlucHV0Q2hhbmdlLmJpbmQodGhpcykpKTtcclxuICAgIH1cclxuICAgIGlzSW52YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgdmFsaWRhdGUoKSB7XHJcbiAgICAgICAgaWYgKCh0aGlzLmlucHV0LnZhbHVlICYmIHRoaXMub2xkVmFsdWUgIT0gdGhpcy5pbnB1dC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja1ZhbCh0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5pc0NvbXBsZXRlZChudWxsLCB0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5vbGRWYWx1ZSA9IHRoaXMuaW5wdXQudmFsdWVcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGNvbmZpZyA9IGdldENvbmZpZ09iamVjdCh0aGlzLmNvbmZpZywgdGhpcy5mb3JtQ29udHJvbCk7XHJcbiAgICAgICAgaWYgKFJlZ2V4VmFsaWRhdG9yLmlzTm90QmxhbmsodGhpcy5nZXRVbm1hc2tlZFZhbHVlKCkpICYmIEZvcm1Qcm92aWRlci5Qcm9jZXNzUnVsZSh0aGlzLmZvcm1Db250cm9sLCBjb25maWcpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSW52YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdE1ha2VyLnRvSnNvbihBbm5vdGF0aW9uVHlwZXMubWFzaywgY29uZmlnLCBbdGhpcy5mb3JtQ29udHJvbC52YWx1ZV0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gT2JqZWN0TWFrZXIubnVsbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgPT0gdW5kZWZpbmVkIHx8IHRoaXMudmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dC52YWx1ZSA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tWYWwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlRmlsbGVkU3RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBjYXJldChmaXJzdD86IG51bWJlciwgbGFzdD86IG51bWJlcikge1xyXG4gICAgICAgIGxldCByYW5nZSwgYmVnaW4sIGVuZDtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlucHV0Lm9mZnNldFBhcmVudCB8fCB0aGlzLmlucHV0ICE9PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgZmlyc3QgPT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgYmVnaW4gPSBmaXJzdDtcclxuICAgICAgICAgICAgZW5kID0gKHR5cGVvZiBsYXN0ID09PSAnbnVtYmVyJykgPyBsYXN0IDogYmVnaW47XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0LnNldFNlbGVjdGlvblJhbmdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0LnNldFNlbGVjdGlvblJhbmdlKGJlZ2luLCBlbmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaW5wdXRbJ2NyZWF0ZVRleHRSYW5nZSddKSB7XHJcbiAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuaW5wdXRbJ2NyZWF0ZVRleHRSYW5nZSddKCk7XHJcbiAgICAgICAgICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgIHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIGVuZCk7XHJcbiAgICAgICAgICAgICAgICByYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIGJlZ2luKTtcclxuICAgICAgICAgICAgICAgIHJhbmdlLnNlbGVjdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dC5zZXRTZWxlY3Rpb25SYW5nZSkge1xyXG4gICAgICAgICAgICAgICAgYmVnaW4gPSB0aGlzLmlucHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgZW5kID0gdGhpcy5pbnB1dC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZG9jdW1lbnRbJ3NlbGVjdGlvbiddICYmIGRvY3VtZW50WydzZWxlY3Rpb24nXS5jcmVhdGVSYW5nZSkge1xyXG4gICAgICAgICAgICAgICAgcmFuZ2UgPSBkb2N1bWVudFsnc2VsZWN0aW9uJ10uY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgICAgICAgICAgIGJlZ2luID0gMCAtIHJhbmdlLmR1cGxpY2F0ZSgpLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgLTEwMDAwMCk7XHJcbiAgICAgICAgICAgICAgICBlbmQgPSBiZWdpbiArIHJhbmdlLnRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4geyBiZWdpbjogYmVnaW4sIGVuZDogZW5kIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlzQ29tcGxldGVkKGxhc3RSZXF1aXJlZE5vbk1hc2tQb3M/OiBudW1iZXIsIGlzTm90UnVuVmFsaWRhdG9yPzogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBjb21wbGV0ZWQ6IGJvb2xlYW47XHJcbiAgICAgICAgbGFzdFJlcXVpcmVkTm9uTWFza1BvcyA9IGxhc3RSZXF1aXJlZE5vbk1hc2tQb3MgfHwgdGhpcy5sYXN0UmVxdWlyZWROb25NYXNrUG9zO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmZpcnN0Tm9uTWFza1BvczsgaSA8PSBsYXN0UmVxdWlyZWROb25NYXNrUG9zOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGVzdHNbaV0gJiYgdGhpcy5idWZmZXJbaV0gPT09IHRoaXMuZ2V0UGxhY2Vob2xkZXIoaSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzSW52YWxpZCA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghaXNOb3RSdW5WYWxpZGF0b3IpXHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBsYWNlaG9sZGVyKGk6IG51bWJlcikge1xyXG4gICAgICAgIGlmIChpIDwgdGhpcy5zbG90Q2hhci5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2xvdENoYXIuY2hhckF0KGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5zbG90Q2hhci5jaGFyQXQoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2Vla05leHQocG9zKSB7XHJcbiAgICAgICAgd2hpbGUgKCsrcG9zIDwgdGhpcy5sZW4gJiYgIXRoaXMudGVzdHNbcG9zXSk7XHJcbiAgICAgICAgcmV0dXJuIHBvcztcclxuICAgIH1cclxuXHJcbiAgICBzZWVrUHJldihwb3MpIHtcclxuICAgICAgICB3aGlsZSAoLS1wb3MgPj0gMCAmJiAhdGhpcy50ZXN0c1twb3NdKTtcclxuICAgICAgICByZXR1cm4gcG9zO1xyXG4gICAgfVxyXG5cclxuICAgIHNoaWZ0TChiZWdpbjogbnVtYmVyLCBlbmQ6IG51bWJlcikge1xyXG4gICAgICAgIGxldCBpLCBqO1xyXG5cclxuICAgICAgICBpZiAoYmVnaW4gPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoaSA9IGJlZ2luLCBqID0gdGhpcy5zZWVrTmV4dChlbmQpOyBpIDwgdGhpcy5sZW47IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy50ZXN0c1tpXSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGogPCB0aGlzLmxlbiAmJiB0aGlzLnRlc3RzW2ldLnRlc3QodGhpcy5idWZmZXJbal0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJbaV0gPSB0aGlzLmJ1ZmZlcltqXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlcltqXSA9IHRoaXMuZ2V0UGxhY2Vob2xkZXIoaik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGogPSB0aGlzLnNlZWtOZXh0KGopO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud3JpdGVCdWZmZXIoKTtcclxuICAgICAgICB0aGlzLmNhcmV0KE1hdGgubWF4KHRoaXMuZmlyc3ROb25NYXNrUG9zLCBiZWdpbikpO1xyXG4gICAgfVxyXG5cclxuICAgIHNoaWZ0Uihwb3MpIHtcclxuICAgICAgICBsZXQgaSwgYywgaiwgdDtcclxuXHJcbiAgICAgICAgZm9yIChpID0gcG9zLCBjID0gdGhpcy5nZXRQbGFjZWhvbGRlcihwb3MpOyBpIDwgdGhpcy5sZW47IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy50ZXN0c1tpXSkge1xyXG4gICAgICAgICAgICAgICAgaiA9IHRoaXMuc2Vla05leHQoaSk7XHJcbiAgICAgICAgICAgICAgICB0ID0gdGhpcy5idWZmZXJbaV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlcltpXSA9IGM7XHJcbiAgICAgICAgICAgICAgICBpZiAoaiA8IHRoaXMubGVuICYmIHRoaXMudGVzdHNbal0udGVzdCh0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGMgPSB0O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVBbmRyb2lkSW5wdXQoZSkge1xyXG4gICAgICAgIHZhciBjdXJWYWwgPSB0aGlzLmlucHV0LnZhbHVlO1xyXG4gICAgICAgIHZhciBwb3MgPSB0aGlzLmNhcmV0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMub2xkVmFsICYmIHRoaXMub2xkVmFsLmxlbmd0aCAmJiB0aGlzLm9sZFZhbC5sZW5ndGggPiBjdXJWYWwubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tWYWwodHJ1ZSk7XHJcbiAgICAgICAgICAgIHdoaWxlIChwb3MuYmVnaW4gPiAwICYmICF0aGlzLnRlc3RzW3Bvcy5iZWdpbiAtIDFdKVxyXG4gICAgICAgICAgICAgICAgcG9zLmJlZ2luLS07XHJcbiAgICAgICAgICAgIGlmIChwb3MuYmVnaW4gPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChwb3MuYmVnaW4gPCB0aGlzLmZpcnN0Tm9uTWFza1BvcyAmJiAhdGhpcy50ZXN0c1twb3MuYmVnaW5dKVxyXG4gICAgICAgICAgICAgICAgICAgIHBvcy5iZWdpbisrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY2FyZXQocG9zLmJlZ2luLCBwb3MuYmVnaW4pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBwb3MyID0gdGhpcy5jaGVja1ZhbCh0cnVlKTtcclxuICAgICAgICAgICAgd2hpbGUgKHBvcy5iZWdpbiA8IHRoaXMubGVuICYmICF0aGlzLnRlc3RzW3Bvcy5iZWdpbl0pXHJcbiAgICAgICAgICAgICAgICBwb3MuYmVnaW4rKztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2FyZXQocG9zLmJlZ2luLCBwb3MuYmVnaW4pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb21wbGV0ZWQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzSW52YWxpZCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNJbnZhbGlkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQmx1cihlKSB7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmZvY3VzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGVja1ZhbCgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTW9kZWwoZSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVGaWxsZWRTdGF0ZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLmlucHV0LnZhbHVlICE9IHRoaXMuZm9jdXNUZXh0KSB7XHJcbiAgICAgICAgICAgIGxldCBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdIVE1MRXZlbnRzJyk7XHJcbiAgICAgICAgICAgIGV2ZW50LmluaXRFdmVudCgnY2hhbmdlJywgdHJ1ZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLmlucHV0LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgICAgICAgICBsZXQgbWFza2VkVmFsdWUgPSB0aGlzLmlucHV0LnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuY29uZmlnLnZhbHVlV2l0aE1hc2sgPyBtYXNrZWRWYWx1ZSA6IHRoaXMuZ2V0VW5tYXNrZWRWYWx1ZSgpKTtcclxuICAgICAgICAgICAgdGhpcy5pbnB1dC52YWx1ZSA9IG1hc2tlZFZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbktleURvd24oZSkge1xyXG4gICAgICAgIGxldCBrID0gZS53aGljaCB8fCBlLmtleUNvZGUsXHJcbiAgICAgICAgICAgIHBvcyxcclxuICAgICAgICAgICAgYmVnaW4sXHJcbiAgICAgICAgICAgIGVuZDtcclxuICAgICAgICBsZXQgaVBob25lID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vbGRWYWwgPSB0aGlzLmlucHV0LnZhbHVlO1xyXG4gICAgICAgIGxldCBjb250cm9sVmFsaWQgPSB0aGlzLmNvbmZpZy5taW5MZW5ndGggPyB0aGlzLmlzQ29tcGxldGVkKHRoaXMubWluTGVuZ3RoICsgMSkgOiBmYWxzZTtcclxuICAgICAgICBpZiAoayA9PT0gOCB8fCBrID09PSA0NiB8fCAoaVBob25lICYmIGsgPT09IDEyNykpIHtcclxuICAgICAgICAgICAgcG9zID0gdGhpcy5jYXJldCgpO1xyXG4gICAgICAgICAgICBiZWdpbiA9IHBvcy5iZWdpbjtcclxuICAgICAgICAgICAgZW5kID0gcG9zLmVuZDtcclxuXHJcblxyXG4gICAgICAgICAgICBpZiAoZW5kIC0gYmVnaW4gPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGJlZ2luID0gayAhPT0gNDYgPyB0aGlzLnNlZWtQcmV2KGJlZ2luKSA6IChlbmQgPSB0aGlzLnNlZWtOZXh0KGJlZ2luIC0gMSkpO1xyXG4gICAgICAgICAgICAgICAgZW5kID0gayA9PT0gNDYgPyB0aGlzLnNlZWtOZXh0KGVuZCkgOiBlbmQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJCdWZmZXIoYmVnaW4sIGVuZCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2hpZnRMKGJlZ2luLCBlbmQgLSAxKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRDb250cm9sVmFsdWUoZSwgZmFsc2UsIGNvbnRyb2xWYWxpZCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTW9kZWwoZSk7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGsgPT09IDEzKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25CbHVyKGUpO1xyXG4gICAgICAgICAgICB0aGlzLnNldENvbnRyb2xWYWx1ZShlLCBmYWxzZSwgY29udHJvbFZhbGlkKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVNb2RlbChlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGsgPT09IDI3KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wdXQudmFsdWUgPSB0aGlzLmZvY3VzVGV4dDtcclxuICAgICAgICAgICAgdGhpcy5jYXJldCgwLCB0aGlzLmNoZWNrVmFsKCkpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsKGUpO1xyXG4gICAgICAgICAgICB0aGlzLnNldENvbnRyb2xWYWx1ZShlLCBmYWxzZSwgY29udHJvbFZhbGlkKTtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9uS2V5UHJlc3MoZSkge1xyXG4gICAgICAgIHZhciBrID0gZS53aGljaCB8fCBlLmtleUNvZGUsXHJcbiAgICAgICAgICAgIHBvcyA9IHRoaXMuY2FyZXQoKSxcclxuICAgICAgICAgICAgcCxcclxuICAgICAgICAgICAgYyxcclxuICAgICAgICAgICAgbmV4dCxcclxuICAgICAgICAgICAgY29tcGxldGVkO1xyXG4gICAgICAgIGlmIChlLmN0cmxLZXkgfHwgZS5hbHRLZXkgfHwgZS5tZXRhS2V5IHx8IGsgPCAzMikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIGlmIChrICYmIGsgIT09IDEzKSB7XHJcbiAgICAgICAgICAgIGlmIChwb3MuZW5kIC0gcG9zLmJlZ2luICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyQnVmZmVyKHBvcy5iZWdpbiwgcG9zLmVuZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoaWZ0TChwb3MuYmVnaW4sIHBvcy5lbmQgLSAxKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcCA9IHRoaXMuc2Vla05leHQocG9zLmJlZ2luIC0gMSk7XHJcbiAgICAgICAgICAgIGlmIChwIDwgdGhpcy5sZW4pIHtcclxuICAgICAgICAgICAgICAgIGMgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGspO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudGVzdHNbcF0udGVzdChjKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnRSKHApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlcltwXSA9IGM7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZUJ1ZmZlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSB0aGlzLnNlZWtOZXh0KHApO1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXJldChuZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocG9zLmJlZ2luIDw9IHRoaXMubGFzdFJlcXVpcmVkTm9uTWFza1Bvcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgPSB0aGlzLmlzQ29tcGxldGVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlTW9kZWwoZSk7XHJcbiAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICBjb21wbGV0ZWQgPSB0aGlzLmlzQ29tcGxldGVkKClcclxuICAgICAgICB0aGlzLnNldENvbnRyb2xWYWx1ZShlLCBjb21wbGV0ZWQsIHRoaXMuY29uZmlnLm1pbkxlbmd0aCA/IHRoaXMuaXNDb21wbGV0ZWQodGhpcy5taW5MZW5ndGgpIDogZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgaW50ZXJuYWxQcm9jZXNzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBjbGVhckJ1ZmZlcihzdGFydCwgZW5kKSB7XHJcbiAgICAgICAgbGV0IGk7XHJcbiAgICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQgJiYgaSA8IHRoaXMubGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGVzdHNbaV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyW2ldID0gdGhpcy5nZXRQbGFjZWhvbGRlcihpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB3cml0ZUJ1ZmZlcigpIHtcclxuICAgICAgICB0aGlzLmlucHV0LnZhbHVlID0gdGhpcy5idWZmZXIuam9pbignJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tWYWwoYWxsb3c/OiBib29sZWFuKSB7XHJcbiAgICAgICAgbGV0IHRlc3QgPSB0aGlzLmlucHV0LnZhbHVlLFxyXG4gICAgICAgICAgICBsYXN0TWF0Y2ggPSAtMSxcclxuICAgICAgICAgICAgaSxcclxuICAgICAgICAgICAgYyxcclxuICAgICAgICAgICAgcG9zO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSAwLCBwb3MgPSAwOyBpIDwgdGhpcy5sZW47IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy50ZXN0c1tpXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idWZmZXJbaV0gPSB0aGlzLmdldFBsYWNlaG9sZGVyKGkpO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKHBvcysrIDwgdGVzdC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjID0gdGVzdC5jaGFyQXQocG9zIC0gMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGVzdHNbaV0udGVzdChjKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlcltpXSA9IGM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RNYXRjaCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwb3MgPiB0ZXN0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJCdWZmZXIoaSArIDEsIHRoaXMubGVuKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmJ1ZmZlcltpXSA9PT0gdGVzdC5jaGFyQXQocG9zKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvcysrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGkgPCB0aGlzLnBhcnRpYWxQb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RNYXRjaCA9IGk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFsbG93KSB7XHJcbiAgICAgICAgICAgIHRoaXMud3JpdGVCdWZmZXIoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKChsYXN0TWF0Y2ggKyAxIDwgdGhpcy5wYXJ0aWFsUG9zaXRpb24pICYmICghdGhpcy5jb25maWcubWluTGVuZ3RoIHx8ICEobGFzdE1hdGNoID49IHRoaXMubWluTGVuZ3RoKSkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYXV0b0NsZWFyIHx8IHRoaXMuYnVmZmVyLmpvaW4oJycpID09PSB0aGlzLmRlZmF1bHRCdWZmZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNJbnZhbGlkID0gdHJ1ZVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0ludmFsaWQgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLndyaXRlQnVmZmVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLndyaXRlQnVmZmVyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wdXQudmFsdWUgPSB0aGlzLmlucHV0LnZhbHVlLnN1YnN0cmluZygwLCBsYXN0TWF0Y2ggKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnBhcnRpYWxQb3NpdGlvbiA/IGkgOiB0aGlzLmZpcnN0Tm9uTWFza1Bvcyk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Gb2N1cyhldmVudCkge1xyXG5cclxuICAgICAgICB0aGlzLmZvY3VzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY2FyZXRUaW1lb3V0SWQpO1xyXG4gICAgICAgIGxldCBwb3M7XHJcblxyXG4gICAgICAgIHRoaXMuZm9jdXNUZXh0ID0gdGhpcy5pbnB1dC52YWx1ZTtcclxuXHJcbiAgICAgICAgcG9zID0gdGhpcy5jaGVja1ZhbCgpO1xyXG5cclxuICAgICAgICB0aGlzLmNhcmV0VGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0ICE9PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy53cml0ZUJ1ZmZlcigpO1xyXG4gICAgICAgICAgICBpZiAocG9zID09IHRoaXMubWFzay5yZXBsYWNlKFwiP1wiLCBcIlwiKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FyZXQoMCwgcG9zKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FyZXQocG9zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZpbGxlZFN0YXRlKCk7XHJcbiAgICAgICAgfSwgMTApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uSW5wdXQoZXZlbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5hbmRyb2lkQ2hyb21lKVxyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFuZHJvaWRJbnB1dChldmVudCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUlucHV0Q2hhbmdlKGV2ZW50KTtcclxuICAgIH1cclxuICAgIHNldENvbnRyb2xWYWx1ZShlLCBpc1ZhbGlkLCBpc1ZhbGlkQ29udHJvbD86IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmlzSW52YWxpZCA9IGlzVmFsaWRDb250cm9sID8gIWlzVmFsaWRDb250cm9sIDogIWlzVmFsaWQ7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5pbnB1dC52YWx1ZTtcclxuICAgICAgICBsZXQgY29udHJvbFZhbHVlID0gJyc7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzSW52YWxpZClcclxuICAgICAgICAgICAgY29udHJvbFZhbHVlID0gdGhpcy5jb25maWcudmFsdWVXaXRoTWFzayA/IHZhbHVlIDogdGhpcy5nZXRVbm1hc2tlZFZhbHVlKClcclxuICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKGNvbnRyb2xWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5vbGRWYWx1ZSA9IHRoaXMuaW5wdXQudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICBpZiAoIWlzVmFsaWQpXHJcbiAgICAgICAgICAgIHRoaXMub25Gb2N1cyhlKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVJbnB1dENoYW5nZShldmVudCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgcG9zID0gdGhpcy5jaGVja1ZhbCh0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5jYXJldChwb3MpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsKGV2ZW50KTtcclxuICAgICAgICAgICAgdGhpcy5zZXRDb250cm9sVmFsdWUoZXZlbnQsIHRoaXMuaXNDb21wbGV0ZWQoKSk7XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VW5tYXNrZWRWYWx1ZSgpIHtcclxuICAgICAgICBsZXQgdW5tYXNrZWRCdWZmZXIgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYnVmZmVyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBjID0gdGhpcy5idWZmZXJbaV07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRlc3RzW2ldICYmIGMgIT0gdGhpcy5nZXRQbGFjZWhvbGRlcihpKSkge1xyXG4gICAgICAgICAgICAgICAgdW5tYXNrZWRCdWZmZXIucHVzaChjKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5tYXNrZWRCdWZmZXIuam9pbignJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlTW9kZWwoZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUZpbGxlZFN0YXRlKCkge1xyXG4gICAgICAgIHRoaXMuZmlsbGVkID0gdGhpcy5pbnB1dCAmJiB0aGlzLmlucHV0LnZhbHVlICE9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRGVzdHJveSgpIHtcclxuICAgICAgICBsZXQgZXZlbnRDb3VudCA9IHRoaXMuZXZlbnRMaXN0ZW5lcnMubGVuZ3RoO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnNbMF0oKTtcclxuICAgICAgICAgICAgdGhpcy5ldmVudExpc3RlbmVycy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMgPSBbXTtcclxuICAgIH1cclxufSJdfQ==
|
|
431
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL2Zvcm0tdmFsaWRhdG9ycy9kb21haW4vZWxlbWVudC1wcm9jZXNzb3IvbWFzay5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTVELE1BQU0sT0FBTyxZQUFZO0lBNENyQixZQUFvQixLQUF1QixFQUFVLElBQVksRUFBVSxRQUFtQixFQUFVLFdBQXdCLEVBQVUsTUFBa0I7UUFBeEksVUFBSyxHQUFMLEtBQUssQ0FBa0I7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQTFDcEosbUJBQWMsR0FBVSxFQUFFLENBQUM7UUFFbkMsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUV0QixTQUFJLEdBQVcsTUFBTSxDQUFDO1FBRXRCLGFBQVEsR0FBVyxHQUFHLENBQUM7UUFFdkIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQW1HM0IsY0FBUyxHQUFZLEtBQUssQ0FBQztRQXVRM0Isb0JBQWUsR0FBWSxLQUFLLENBQUM7UUF2VTdCLElBQUksQ0FB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QyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFFRCxTQUFTO1FBQ0wsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNqQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3BDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDN0IsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVuZGVyZXIyIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQkxVUiwgRk9DVVMsIEtFWV9ET1dOLCBLRVlfUFJFU1MsIFBBU1RFIH0gZnJvbSBcIi4uLy4uL2NvbnN0XCI7XHJcbmltcG9ydCB7IEFubm90YXRpb25UeXBlcyB9IGZyb20gXCIuLi8uLi9jb3JlL3ZhbGlkYXRvci5zdGF0aWNcIjtcclxuaW1wb3J0IHsgTWFza0NvbmZpZyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvY29uZmlnL21hc2stY29uZmlnXCI7XHJcbmltcG9ydCB7IGdldENvbmZpZ09iamVjdCB9IGZyb20gXCIuLi8uLi91dGlsL2NvbmZpZy1wcm92aWRlclwiO1xyXG5pbXBvcnQgeyBGb3JtUHJvdmlkZXIgfSBmcm9tIFwiLi4vLi4vdXRpbC9mb3JtLXByb3ZpZGVyXCI7XHJcbmltcG9ydCB7IE9iamVjdE1ha2VyIH0gZnJvbSBcIi4uLy4uL3V0aWwvb2JqZWN0LW1ha2VyXCI7XHJcbmltcG9ydCB7IFJlZ2V4VmFsaWRhdG9yIH0gZnJvbSBcIi4uLy4uL3V0aWwvcmVnZXgtdmFsaWRhdG9yXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTWFza1Byb3ZpZGVyIHtcclxuXHJcbiAgICBwcml2YXRlIGV2ZW50TGlzdGVuZXJzOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIG9sZFZhbHVlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICB0eXBlOiBzdHJpbmcgPSAndGV4dCc7XHJcblxyXG4gICAgc2xvdENoYXI6IHN0cmluZyA9ICdfJztcclxuXHJcbiAgICBhdXRvQ2xlYXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICB2YWx1ZTogYW55O1xyXG5cclxuICAgIGRlZnM6IGFueTtcclxuXHJcbiAgICB0ZXN0czogYW55W107XHJcblxyXG4gICAgcGFydGlhbFBvc2l0aW9uOiBhbnk7XHJcblxyXG4gICAgZmlyc3ROb25NYXNrUG9zOiBudW1iZXI7XHJcblxyXG4gICAgbGFzdFJlcXVpcmVkTm9uTWFza1BvczogYW55O1xyXG5cclxuICAgIGxlbjogbnVtYmVyO1xyXG5cclxuICAgIG9sZFZhbDogc3RyaW5nO1xyXG5cclxuICAgIGJ1ZmZlcjogYW55O1xyXG5cclxuICAgIGRlZmF1bHRCdWZmZXI6IHN0cmluZztcclxuXHJcbiAgICBmb2N1c1RleHQ6IHN0cmluZztcclxuXHJcbiAgICBjYXJldFRpbWVvdXRJZDogYW55O1xyXG5cclxuICAgIGFuZHJvaWRDaHJvbWU6IGJvb2xlYW47XHJcblxyXG4gICAgZm9jdXM6IGJvb2xlYW47XHJcblxyXG4gICAgZmlsbGVkOiBib29sZWFuO1xyXG5cclxuICAgIG1pbkxlbmd0aDogbnVtYmVyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQsIHByaXZhdGUgbWFzazogc3RyaW5nLCBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sLCBwcml2YXRlIGNvbmZpZzogTWFza0NvbmZpZykge1xyXG4gICAgICAgIHRoaXMuYmluZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGJpbmQoKSB7XHJcbiAgICAgICAgaWYgKFJlZ2V4VmFsaWRhdG9yLmlzTm90QmxhbmsodGhpcy5mb3JtQ29udHJvbC52YWx1ZSkpXHJcbiAgICAgICAgICAgIHRoaXMuaW5wdXQudmFsdWUgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgICAgIHRoaXMudGVzdHMgPSBbXTtcclxuICAgICAgICB0aGlzLnBhcnRpYWxQb3NpdGlvbiA9IHRoaXMubWFzay5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5sZW4gPSB0aGlzLm1hc2subGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuZmlyc3ROb25NYXNrUG9zID0gbnVsbDtcclxuICAgICAgICB0aGlzLmRlZnMgPSB7XHJcbiAgICAgICAgICAgICc5JzogJ1swLTldJyxcclxuICAgICAgICAgICAgJ2EnOiAnW0EtWmEtel0nLFxyXG4gICAgICAgICAgICAnKic6ICdbQS1aYS16MC05XSdcclxuICAgICAgICB9O1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5hbmRyb2lkQ2hyb21lID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBtYXNrVG9rZW5zID0gdGhpcy5tYXNrLnNwbGl0KCcnKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hc2tUb2tlbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGMgPSBtYXNrVG9rZW5zW2ldO1xyXG4gICAgICAgICAgICBpZiAoYyA9PSAnPycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGVuLS07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcnRpYWxQb3NpdGlvbiA9IGk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5kZWZzW2NdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlc3RzLnB1c2gobmV3IFJlZ0V4cCh0aGlzLmRlZnNbY10pKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpcnN0Tm9uTWFza1BvcyA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyc3ROb25NYXNrUG9zID0gdGhpcy50ZXN0cy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGkgPCB0aGlzLnBhcnRpYWxQb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFJlcXVpcmVkTm9uTWFza1BvcyA9IHRoaXMudGVzdHMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGVzdHMucHVzaChudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1pbkxlbmd0aCA9IHRoaXMuY29uZmlnLm1pbkxlbmd0aCA/IHRoaXMubGFzdFJlcXVpcmVkTm9uTWFza1BvcyAtICh0aGlzLmxhc3RSZXF1aXJlZE5vbk1hc2tQb3MgLSB0aGlzLmNvbmZpZy5taW5MZW5ndGgpIDogdGhpcy5sYXN0UmVxdWlyZWROb25NYXNrUG9zO1xyXG4gICAgICAgIHRoaXMuYnVmZmVyID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXNrVG9rZW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBjID0gbWFza1Rva2Vuc1tpXTtcclxuICAgICAgICAgICAgaWYgKGMgIT0gJz8nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWZzW2NdKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyLnB1c2godGhpcy5nZXRQbGFjZWhvbGRlcihpKSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXIucHVzaChjKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRlZmF1bHRCdWZmZXIgPSB0aGlzLmJ1ZmZlci5qb2luKCcnKTtcclxuICAgICAgICB0aGlzLmZvY3VzVGV4dCA9IHRoaXMuaW5wdXQudmFsdWU7XHJcbiAgICAgICAgdGhpcy5iaW5kRXZlbnRzKCk7XHJcbiAgICAgICAgdGhpcy5jaGVja1ZhbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGJpbmRFdmVudHMoKSB7XHJcbiAgICAgICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaW5wdXQsIEZPQ1VTLCB0aGlzLm9uRm9jdXMuYmluZCh0aGlzKSkpO1xyXG4gICAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmlucHV0LCBCTFVSLCB0aGlzLm9uQmx1ci5iaW5kKHRoaXMpKSk7XHJcbiAgICAgICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaW5wdXQsIEtFWV9ET1dOLCB0aGlzLm9uS2V5RG93bi5iaW5kKHRoaXMpKSk7XHJcbiAgICAgICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaW5wdXQsIEtFWV9QUkVTUywgdGhpcy5vbktleVByZXNzLmJpbmQodGhpcykpKTtcclxuICAgICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5pbnB1dCwgXCJpbnB1dFwiLCB0aGlzLm9uSW5wdXQuYmluZCh0aGlzKSkpO1xyXG4gICAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmlucHV0LCBQQVNURSwgdGhpcy5oYW5kbGVJbnB1dENoYW5nZS5iaW5kKHRoaXMpKSk7XHJcbiAgICB9XHJcbiAgICBpc0ludmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHZhbGlkYXRlKCkge1xyXG4gICAgICAgIGlmICgodGhpcy5pbnB1dC52YWx1ZSAmJiB0aGlzLm9sZFZhbHVlICE9IHRoaXMuaW5wdXQudmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tWYWwodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb21wbGV0ZWQobnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkVmFsdWUgPSB0aGlzLmlucHV0LnZhbHVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBjb25maWcgPSBnZXRDb25maWdPYmplY3QodGhpcy5jb25maWcsIHRoaXMuZm9ybUNvbnRyb2wpO1xyXG4gICAgICAgIGlmIChSZWdleFZhbGlkYXRvci5pc05vdEJsYW5rKHRoaXMuZ2V0VW5tYXNrZWRWYWx1ZSgpKSAmJiBGb3JtUHJvdmlkZXIuUHJvY2Vzc1J1bGUodGhpcy5mb3JtQ29udHJvbCwgY29uZmlnKSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0ludmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3RNYWtlci50b0pzb24oQW5ub3RhdGlvblR5cGVzLm1hc2ssIGNvbmZpZywgW3RoaXMuZm9ybUNvbnRyb2wudmFsdWVdKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdE1ha2VyLm51bGwoKTtcclxuICAgIH1cclxuXHJcbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlucHV0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlID09IHVuZGVmaW5lZCB8fCB0aGlzLnZhbHVlID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQudmFsdWUgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrVmFsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUZpbGxlZFN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FyZXQoZmlyc3Q/OiBudW1iZXIsIGxhc3Q/OiBudW1iZXIpOiBhbnkge1xyXG4gICAgICAgIGxldCByYW5nZSwgYmVnaW4sIGVuZDtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlucHV0Lm9mZnNldFBhcmVudCB8fCB0aGlzLmlucHV0ICE9PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgZmlyc3QgPT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgYmVnaW4gPSBmaXJzdDtcclxuICAgICAgICAgICAgZW5kID0gKHR5cGVvZiBsYXN0ID09PSAnbnVtYmVyJykgPyBsYXN0IDogYmVnaW47XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0LnNldFNlbGVjdGlvblJhbmdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0LnNldFNlbGVjdGlvblJhbmdlKGJlZ2luLCBlbmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaW5wdXRbJ2NyZWF0ZVRleHRSYW5nZSddKSB7XHJcbiAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuaW5wdXRbJ2NyZWF0ZVRleHRSYW5nZSddKCk7XHJcbiAgICAgICAgICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgIHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIGVuZCk7XHJcbiAgICAgICAgICAgICAgICByYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIGJlZ2luKTtcclxuICAgICAgICAgICAgICAgIHJhbmdlLnNlbGVjdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dC5zZXRTZWxlY3Rpb25SYW5nZSkge1xyXG4gICAgICAgICAgICAgICAgYmVnaW4gPSB0aGlzLmlucHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgZW5kID0gdGhpcy5pbnB1dC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZG9jdW1lbnRbJ3NlbGVjdGlvbiddICYmIGRvY3VtZW50WydzZWxlY3Rpb24nXS5jcmVhdGVSYW5nZSkge1xyXG4gICAgICAgICAgICAgICAgcmFuZ2UgPSBkb2N1bWVudFsnc2VsZWN0aW9uJ10uY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgICAgICAgICAgIGJlZ2luID0gMCAtIHJhbmdlLmR1cGxpY2F0ZSgpLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgLTEwMDAwMCk7XHJcbiAgICAgICAgICAgICAgICBlbmQgPSBiZWdpbiArIHJhbmdlLnRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4geyBiZWdpbjogYmVnaW4sIGVuZDogZW5kIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaXNDb21wbGV0ZWQobGFzdFJlcXVpcmVkTm9uTWFza1Bvcz86IG51bWJlciwgaXNOb3RSdW5WYWxpZGF0b3I/OiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IGNvbXBsZXRlZDogYm9vbGVhbjtcclxuICAgICAgICBsYXN0UmVxdWlyZWROb25NYXNrUG9zID0gbGFzdFJlcXVpcmVkTm9uTWFza1BvcyB8fCB0aGlzLmxhc3RSZXF1aXJlZE5vbk1hc2tQb3M7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuZmlyc3ROb25NYXNrUG9zOyBpIDw9IGxhc3RSZXF1aXJlZE5vbk1hc2tQb3M7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy50ZXN0c1tpXSAmJiB0aGlzLmJ1ZmZlcltpXSA9PT0gdGhpcy5nZXRQbGFjZWhvbGRlcihpKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNJbnZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKCFpc05vdFJ1blZhbGlkYXRvcilcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGxhY2Vob2xkZXIoaTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKGkgPCB0aGlzLnNsb3RDaGFyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zbG90Q2hhci5jaGFyQXQoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnNsb3RDaGFyLmNoYXJBdCgwKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWVrTmV4dChwb3MpIHtcclxuICAgICAgICB3aGlsZSAoKytwb3MgPCB0aGlzLmxlbiAmJiAhdGhpcy50ZXN0c1twb3NdKTtcclxuICAgICAgICByZXR1cm4gcG9zO1xyXG4gICAgfVxyXG5cclxuICAgIHNlZWtQcmV2KHBvcykge1xyXG4gICAgICAgIHdoaWxlICgtLXBvcyA+PSAwICYmICF0aGlzLnRlc3RzW3Bvc10pO1xyXG4gICAgICAgIHJldHVybiBwb3M7XHJcbiAgICB9XHJcblxyXG4gICAgc2hpZnRMKGJlZ2luOiBudW1iZXIsIGVuZDogbnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IGksIGo7XHJcblxyXG4gICAgICAgIGlmIChiZWdpbiA8IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChpID0gYmVnaW4sIGogPSB0aGlzLnNlZWtOZXh0KGVuZCk7IGkgPCB0aGlzLmxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRlc3RzW2ldKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaiA8IHRoaXMubGVuICYmIHRoaXMudGVzdHNbaV0udGVzdCh0aGlzLmJ1ZmZlcltqXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlcltpXSA9IHRoaXMuYnVmZmVyW2pdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyW2pdID0gdGhpcy5nZXRQbGFjZWhvbGRlcihqKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaiA9IHRoaXMuc2Vla05leHQoaik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy53cml0ZUJ1ZmZlcigpO1xyXG4gICAgICAgIHRoaXMuY2FyZXQoTWF0aC5tYXgodGhpcy5maXJzdE5vbk1hc2tQb3MsIGJlZ2luKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hpZnRSKHBvcykge1xyXG4gICAgICAgIGxldCBpLCBjLCBqLCB0O1xyXG5cclxuICAgICAgICBmb3IgKGkgPSBwb3MsIGMgPSB0aGlzLmdldFBsYWNlaG9sZGVyKHBvcyk7IGkgPCB0aGlzLmxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRlc3RzW2ldKSB7XHJcbiAgICAgICAgICAgICAgICBqID0gdGhpcy5zZWVrTmV4dChpKTtcclxuICAgICAgICAgICAgICAgIHQgPSB0aGlzLmJ1ZmZlcltpXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyW2ldID0gYztcclxuICAgICAgICAgICAgICAgIGlmIChqIDwgdGhpcy5sZW4gJiYgdGhpcy50ZXN0c1tqXS50ZXN0KHQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYyA9IHQ7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUFuZHJvaWRJbnB1dChlKSB7XHJcbiAgICAgICAgdmFyIGN1clZhbCA9IHRoaXMuaW5wdXQudmFsdWU7XHJcbiAgICAgICAgdmFyIHBvcyA9IHRoaXMuY2FyZXQoKTtcclxuICAgICAgICBpZiAodGhpcy5vbGRWYWwgJiYgdGhpcy5vbGRWYWwubGVuZ3RoICYmIHRoaXMub2xkVmFsLmxlbmd0aCA+IGN1clZhbC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja1ZhbCh0cnVlKTtcclxuICAgICAgICAgICAgd2hpbGUgKHBvcy5iZWdpbiA+IDAgJiYgIXRoaXMudGVzdHNbcG9zLmJlZ2luIC0gMV0pXHJcbiAgICAgICAgICAgICAgICBwb3MuYmVnaW4tLTtcclxuICAgICAgICAgICAgaWYgKHBvcy5iZWdpbiA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKHBvcy5iZWdpbiA8IHRoaXMuZmlyc3ROb25NYXNrUG9zICYmICF0aGlzLnRlc3RzW3Bvcy5iZWdpbl0pXHJcbiAgICAgICAgICAgICAgICAgICAgcG9zLmJlZ2luKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jYXJldChwb3MuYmVnaW4sIHBvcy5iZWdpbik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIHBvczIgPSB0aGlzLmNoZWNrVmFsKHRydWUpO1xyXG4gICAgICAgICAgICB3aGlsZSAocG9zLmJlZ2luIDwgdGhpcy5sZW4gJiYgIXRoaXMudGVzdHNbcG9zLmJlZ2luXSlcclxuICAgICAgICAgICAgICAgIHBvcy5iZWdpbisrO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jYXJldChwb3MuYmVnaW4sIHBvcy5iZWdpbik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pc0NvbXBsZXRlZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNJbnZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc0ludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25CbHVyKGUpIHtcclxuXHJcblxyXG4gICAgICAgIHRoaXMuZm9jdXMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNoZWNrVmFsKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVNb2RlbChlKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUZpbGxlZFN0YXRlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQudmFsdWUgIT0gdGhpcy5mb2N1c1RleHQpIHtcclxuICAgICAgICAgICAgbGV0IGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMnKTtcclxuICAgICAgICAgICAgZXZlbnQuaW5pdEV2ZW50KCdjaGFuZ2UnLCB0cnVlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICAgICAgICAgIGxldCBtYXNrZWRWYWx1ZSA9IHRoaXMuaW5wdXQudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5jb25maWcudmFsdWVXaXRoTWFzayA/IG1hc2tlZFZhbHVlIDogdGhpcy5nZXRVbm1hc2tlZFZhbHVlKCkpO1xyXG4gICAgICAgICAgICB0aGlzLmlucHV0LnZhbHVlID0gbWFza2VkVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uS2V5RG93bihlKSB7XHJcbiAgICAgICAgbGV0IGsgPSBlLndoaWNoIHx8IGUua2V5Q29kZSxcclxuICAgICAgICAgICAgcG9zLFxyXG4gICAgICAgICAgICBiZWdpbixcclxuICAgICAgICAgICAgZW5kO1xyXG4gICAgICAgIGxldCBpUGhvbmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm9sZFZhbCA9IHRoaXMuaW5wdXQudmFsdWU7XHJcbiAgICAgICAgbGV0IGNvbnRyb2xWYWxpZCA9IHRoaXMuY29uZmlnLm1pbkxlbmd0aCA/IHRoaXMuaXNDb21wbGV0ZWQodGhpcy5taW5MZW5ndGggKyAxKSA6IGZhbHNlO1xyXG4gICAgICAgIGlmIChrID09PSA4IHx8IGsgPT09IDQ2IHx8IChpUGhvbmUgJiYgayA9PT0gMTI3KSkge1xyXG4gICAgICAgICAgICBwb3MgPSB0aGlzLmNhcmV0KCk7XHJcbiAgICAgICAgICAgIGJlZ2luID0gcG9zLmJlZ2luO1xyXG4gICAgICAgICAgICBlbmQgPSBwb3MuZW5kO1xyXG5cclxuXHJcbiAgICAgICAgICAgIGlmIChlbmQgLSBiZWdpbiA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgYmVnaW4gPSBrICE9PSA0NiA/IHRoaXMuc2Vla1ByZXYoYmVnaW4pIDogKGVuZCA9IHRoaXMuc2Vla05leHQoYmVnaW4gLSAxKSk7XHJcbiAgICAgICAgICAgICAgICBlbmQgPSBrID09PSA0NiA/IHRoaXMuc2Vla05leHQoZW5kKSA6IGVuZDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jbGVhckJ1ZmZlcihiZWdpbiwgZW5kKTtcclxuICAgICAgICAgICAgdGhpcy5zaGlmdEwoYmVnaW4sIGVuZCAtIDEpO1xyXG4gICAgICAgICAgICB0aGlzLnNldENvbnRyb2xWYWx1ZShlLCBmYWxzZSwgY29udHJvbFZhbGlkKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVNb2RlbChlKTtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoayA9PT0gMTMpIHtcclxuICAgICAgICAgICAgdGhpcy5vbkJsdXIoZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udHJvbFZhbHVlKGUsIGZhbHNlLCBjb250cm9sVmFsaWQpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsKGUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoayA9PT0gMjcpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnB1dC52YWx1ZSA9IHRoaXMuZm9jdXNUZXh0O1xyXG4gICAgICAgICAgICB0aGlzLmNhcmV0KDAsIHRoaXMuY2hlY2tWYWwoKSk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTW9kZWwoZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udHJvbFZhbHVlKGUsIGZhbHNlLCBjb250cm9sVmFsaWQpO1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25LZXlQcmVzcyhlKSB7XHJcbiAgICAgICAgdmFyIGsgPSBlLndoaWNoIHx8IGUua2V5Q29kZSxcclxuICAgICAgICAgICAgcG9zID0gdGhpcy5jYXJldCgpLFxyXG4gICAgICAgICAgICBwLFxyXG4gICAgICAgICAgICBjLFxyXG4gICAgICAgICAgICBuZXh0LFxyXG4gICAgICAgICAgICBjb21wbGV0ZWQ7XHJcbiAgICAgICAgaWYgKGUuY3RybEtleSB8fCBlLmFsdEtleSB8fCBlLm1ldGFLZXkgfHwgayA8IDMyKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2UgaWYgKGsgJiYgayAhPT0gMTMpIHtcclxuICAgICAgICAgICAgaWYgKHBvcy5lbmQgLSBwb3MuYmVnaW4gIT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJCdWZmZXIocG9zLmJlZ2luLCBwb3MuZW5kKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hpZnRMKHBvcy5iZWdpbiwgcG9zLmVuZCAtIDEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwID0gdGhpcy5zZWVrTmV4dChwb3MuYmVnaW4gLSAxKTtcclxuICAgICAgICAgICAgaWYgKHAgPCB0aGlzLmxlbikge1xyXG4gICAgICAgICAgICAgICAgYyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoayk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50ZXN0c1twXS50ZXN0KGMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGlmdFIocCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyW3BdID0gYztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndyaXRlQnVmZmVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHRoaXMuc2Vla05leHQocCk7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhcmV0KG5leHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3MuYmVnaW4gPD0gdGhpcy5sYXN0UmVxdWlyZWROb25NYXNrUG9zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IHRoaXMuaXNDb21wbGV0ZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVNb2RlbChlKTtcclxuICAgICAgICBpZiAoY29tcGxldGVkID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIGNvbXBsZXRlZCA9IHRoaXMuaXNDb21wbGV0ZWQoKVxyXG4gICAgICAgIHRoaXMuc2V0Q29udHJvbFZhbHVlKGUsIGNvbXBsZXRlZCwgdGhpcy5jb25maWcubWluTGVuZ3RoID8gdGhpcy5pc0NvbXBsZXRlZCh0aGlzLm1pbkxlbmd0aCkgOiBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBpbnRlcm5hbFByb2Nlc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGNsZWFyQnVmZmVyKHN0YXJ0LCBlbmQpIHtcclxuICAgICAgICBsZXQgaTtcclxuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZCAmJiBpIDwgdGhpcy5sZW47IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy50ZXN0c1tpXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idWZmZXJbaV0gPSB0aGlzLmdldFBsYWNlaG9sZGVyKGkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHdyaXRlQnVmZmVyKCkge1xyXG4gICAgICAgIHRoaXMuaW5wdXQudmFsdWUgPSB0aGlzLmJ1ZmZlci5qb2luKCcnKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja1ZhbChhbGxvdz86IGJvb2xlYW4pIHtcclxuICAgICAgICBsZXQgdGVzdCA9IHRoaXMuaW5wdXQudmFsdWUsXHJcbiAgICAgICAgICAgIGxhc3RNYXRjaCA9IC0xLFxyXG4gICAgICAgICAgICBpLFxyXG4gICAgICAgICAgICBjLFxyXG4gICAgICAgICAgICBwb3M7XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDAsIHBvcyA9IDA7IGkgPCB0aGlzLmxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRlc3RzW2ldKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlcltpXSA9IHRoaXMuZ2V0UGxhY2Vob2xkZXIoaSk7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAocG9zKysgPCB0ZXN0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGMgPSB0ZXN0LmNoYXJBdChwb3MgLSAxKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50ZXN0c1tpXS50ZXN0KGMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyW2ldID0gYztcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE1hdGNoID0gaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBvcyA+IHRlc3QubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhckJ1ZmZlcihpICsgMSwgdGhpcy5sZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYnVmZmVyW2ldID09PSB0ZXN0LmNoYXJBdChwb3MpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zKys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaSA8IHRoaXMucGFydGlhbFBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdE1hdGNoID0gaTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWxsb3cpIHtcclxuICAgICAgICAgICAgdGhpcy53cml0ZUJ1ZmZlcigpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoKGxhc3RNYXRjaCArIDEgPCB0aGlzLnBhcnRpYWxQb3NpdGlvbikgJiYgKCF0aGlzLmNvbmZpZy5taW5MZW5ndGggfHwgIShsYXN0TWF0Y2ggPj0gdGhpcy5taW5MZW5ndGgpKSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvQ2xlYXIgfHwgdGhpcy5idWZmZXIuam9pbignJykgPT09IHRoaXMuZGVmYXVsdEJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0ludmFsaWQgPSB0cnVlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzSW52YWxpZCA9IHRydWVcclxuICAgICAgICAgICAgICAgIHRoaXMud3JpdGVCdWZmZXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMud3JpdGVCdWZmZXIoKTtcclxuICAgICAgICAgICAgdGhpcy5pbnB1dC52YWx1ZSA9IHRoaXMuaW5wdXQudmFsdWUuc3Vic3RyaW5nKDAsIGxhc3RNYXRjaCArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKHRoaXMucGFydGlhbFBvc2l0aW9uID8gaSA6IHRoaXMuZmlyc3ROb25NYXNrUG9zKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkZvY3VzKGV2ZW50KSB7XHJcblxyXG4gICAgICAgIHRoaXMuZm9jdXMgPSB0cnVlO1xyXG5cclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5jYXJldFRpbWVvdXRJZCk7XHJcbiAgICAgICAgbGV0IHBvcztcclxuXHJcbiAgICAgICAgdGhpcy5mb2N1c1RleHQgPSB0aGlzLmlucHV0LnZhbHVlO1xyXG5cclxuICAgICAgICBwb3MgPSB0aGlzLmNoZWNrVmFsKCk7XHJcblxyXG4gICAgICAgIHRoaXMuY2FyZXRUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXQgIT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLndyaXRlQnVmZmVyKCk7XHJcbiAgICAgICAgICAgIGlmIChwb3MgPT0gdGhpcy5tYXNrLnJlcGxhY2UoXCI/XCIsIFwiXCIpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJldCgwLCBwb3MpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJldChwb3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmlsbGVkU3RhdGUoKTtcclxuICAgICAgICB9LCAxMCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25JbnB1dChldmVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLmFuZHJvaWRDaHJvbWUpXHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQW5kcm9pZElucHV0KGV2ZW50KTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2UoZXZlbnQpO1xyXG4gICAgfVxyXG4gICAgc2V0Q29udHJvbFZhbHVlKGUsIGlzVmFsaWQsIGlzVmFsaWRDb250cm9sPzogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuaXNJbnZhbGlkID0gaXNWYWxpZENvbnRyb2wgPyAhaXNWYWxpZENvbnRyb2wgOiAhaXNWYWxpZDtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmlucHV0LnZhbHVlO1xyXG4gICAgICAgIGxldCBjb250cm9sVmFsdWUgPSAnJztcclxuICAgICAgICBpZiAoIXRoaXMuaXNJbnZhbGlkKVxyXG4gICAgICAgICAgICBjb250cm9sVmFsdWUgPSB0aGlzLmNvbmZpZy52YWx1ZVdpdGhNYXNrID8gdmFsdWUgOiB0aGlzLmdldFVubWFza2VkVmFsdWUoKVxyXG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoY29udHJvbFZhbHVlKTtcclxuICAgICAgICB0aGlzLm9sZFZhbHVlID0gdGhpcy5pbnB1dC52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIGlmICghaXNWYWxpZClcclxuICAgICAgICAgICAgdGhpcy5vbkZvY3VzKGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUlucHV0Q2hhbmdlKGV2ZW50KSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBwb3MgPSB0aGlzLmNoZWNrVmFsKHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLmNhcmV0KHBvcyk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTW9kZWwoZXZlbnQpO1xyXG4gICAgICAgICAgICB0aGlzLnNldENvbnRyb2xWYWx1ZShldmVudCwgdGhpcy5pc0NvbXBsZXRlZCgpKTtcclxuICAgICAgICB9LCAwKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVbm1hc2tlZFZhbHVlKCkge1xyXG4gICAgICAgIGxldCB1bm1hc2tlZEJ1ZmZlciA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5idWZmZXIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGMgPSB0aGlzLmJ1ZmZlcltpXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGVzdHNbaV0gJiYgYyAhPSB0aGlzLmdldFBsYWNlaG9sZGVyKGkpKSB7XHJcbiAgICAgICAgICAgICAgICB1bm1hc2tlZEJ1ZmZlci5wdXNoKGMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bm1hc2tlZEJ1ZmZlci5qb2luKCcnKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVNb2RlbChlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlRmlsbGVkU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5maWxsZWQgPSB0aGlzLmlucHV0ICYmIHRoaXMuaW5wdXQudmFsdWUgIT0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgb25EZXN0cm95KCkge1xyXG4gICAgICAgIGxldCBldmVudENvdW50ID0gdGhpcy5ldmVudExpc3RlbmVycy5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudENvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5ldmVudExpc3RlbmVyc1swXSgpO1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnNwbGljZSgwLCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ldmVudExpc3RlbmVycyA9IFtdO1xyXG4gICAgfVxyXG59Il19
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { AbstractControl } from "@angular/forms";
|
|
2
2
|
export class IAbstractControl extends AbstractControl {
|
|
3
3
|
}
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaS1hYnN0cmFjdC1jb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvZm9ybS12YWxpZGF0b3JzL21vZGVscy9pbnRlcmZhY2UvaS1hYnN0cmFjdC1jb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQWlDLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEYsTUFBTSxPQUFnQixnQkFBaUIsU0FBUSxlQUFlO0NBZ0I3RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQXN5bmNWYWxpZGF0b3JGbiwgVmFsaWRhdG9yRm4gfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJQWJzdHJhY3RDb250cm9sIGV4dGVuZHMgQWJzdHJhY3RDb250cm9sIHtcclxuICAgIGVycm9yTWVzc2FnZXM6IHN0cmluZ1tdO1xyXG5cclxuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICAgIGJpbmRFcnJvcjogKCkgPT4gdm9pZDtcclxuXHJcbiAgICByZWZyZXNoOiAoKSA9PiB2b2lkO1xyXG5cclxuICAgIHNldEJhY2tFbmRFcnJvcnM6IChlcnJvcnM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pID0+IHZvaWQ7XHJcblxyXG4gICAgY2xlYXJCYWNrRW5kRXJyb3JzOiAoZXJyb3JzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkgPT4gdm9pZDtcclxuXHJcbiAgICBnZXRWYWxpZGF0b3JzOiAoKSA9PiBWYWxpZGF0b3JGbltdO1xyXG5cclxuICAgIGdldEFzeW5jVmFsaWRhdG9yczogKCkgPT4gQXN5bmNWYWxpZGF0b3JGbltdO1xyXG59Il19
|
|
@@ -1,30 +1,36 @@
|
|
|
1
1
|
import { FormControl } from "@angular/forms";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { ApplicationUtil } from '../util/app-util';
|
|
5
|
-
import { DisableProvider } from '../domain/disable-provider';
|
|
6
|
-
import { RXCODE, MODEL_INSTANCE, PATCH } from "../const/app.const";
|
|
2
|
+
import { CONTROLS_ERROR, MESSAGE, VALUE_CHANGED_SYNC } from '../const';
|
|
3
|
+
import { MODEL_INSTANCE, PATCH, RXCODE } from "../const/app.const";
|
|
7
4
|
import { DECORATORS } from "../const/decorators.const";
|
|
8
5
|
import { defaultContainer } from "../core/defaultContainer";
|
|
9
|
-
import {
|
|
6
|
+
import { DisableProvider } from '../domain/disable-provider';
|
|
10
7
|
import { ErrorMessageBindingStrategy } from "../enums";
|
|
8
|
+
import { ApplicationUtil } from '../util/app-util';
|
|
9
|
+
import { ObjectMaker } from "../util/object-maker";
|
|
11
10
|
import { ReactiveFormConfig } from "../util/reactive-form-config";
|
|
11
|
+
import { SANITIZERS } from "../util/sanitizers";
|
|
12
12
|
const DIRTY = "dirty";
|
|
13
13
|
const TOUCHED = "touched";
|
|
14
14
|
const UNTOUCHED = "untouched";
|
|
15
15
|
const PRISTINE = "pristine";
|
|
16
16
|
const PENDING = "pending";
|
|
17
17
|
export class RxFormControl extends FormControl {
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Constructor
|
|
20
|
+
* @param formState
|
|
21
|
+
* @param validator
|
|
22
|
+
* @param asyncValidator
|
|
23
|
+
* @param entityObject
|
|
24
|
+
* @param baseObject
|
|
25
|
+
* @param controlName
|
|
26
|
+
* @param _sanitizers
|
|
27
|
+
*/
|
|
28
|
+
constructor(formState, validatorOrOpts, entityObject, baseObject, controlName, _sanitizers) {
|
|
29
|
+
super(formState, validatorOrOpts);
|
|
20
30
|
this.entityObject = entityObject;
|
|
21
31
|
this.baseObject = baseObject;
|
|
22
32
|
this._sanitizers = _sanitizers;
|
|
23
33
|
this._errorMessages = [];
|
|
24
|
-
this._childColumns = [];
|
|
25
|
-
this._refDisableControls = [];
|
|
26
|
-
this._refMessageControls = [];
|
|
27
|
-
this._refClassNameControls = [];
|
|
28
34
|
this._isPassedExpression = false;
|
|
29
35
|
this._dirty = false;
|
|
30
36
|
this.backEndErrors = {};
|
|
@@ -32,8 +38,8 @@ export class RxFormControl extends FormControl {
|
|
|
32
38
|
this._baseValue = formState === undefined ? null : this.getFormState(formState);
|
|
33
39
|
this._isModified = false;
|
|
34
40
|
this.keyName = controlName;
|
|
35
|
-
this._validators =
|
|
36
|
-
this._asyncValidators =
|
|
41
|
+
this._validators = validatorOrOpts.validators;
|
|
42
|
+
this._asyncValidators = validatorOrOpts.asyncValidators;
|
|
37
43
|
this._errorMessageBindingStrategy = ReactiveFormConfig.get("reactiveForm.errorMessageBindingStrategy");
|
|
38
44
|
if (this._sanitizers) {
|
|
39
45
|
var floatSanitizer = this._sanitizers.filter(t => t.name == "toFloat")[0];
|
|
@@ -92,15 +98,9 @@ export class RxFormControl extends FormControl {
|
|
|
92
98
|
}
|
|
93
99
|
return baseValue;
|
|
94
100
|
}
|
|
95
|
-
get isModified() {
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
getValidators() {
|
|
99
|
-
return this.getValidatorSource(this._validators);
|
|
100
|
-
}
|
|
101
|
-
getAsyncValidators() {
|
|
102
|
-
return this.getValidatorSource(this._asyncValidators);
|
|
103
|
-
}
|
|
101
|
+
get isModified() { return this._isModified; }
|
|
102
|
+
getValidators() { return this.getValidatorSource(this._validators); }
|
|
103
|
+
getAsyncValidators() { return this.getValidatorSource(this._asyncValidators); }
|
|
104
104
|
getValidatorSource(validators) {
|
|
105
105
|
if (validators)
|
|
106
106
|
return Array.isArray(validators) ? [...validators] : [validators];
|
|
@@ -180,14 +180,16 @@ export class RxFormControl extends FormControl {
|
|
|
180
180
|
markAsPristine(opts) {
|
|
181
181
|
let currentState = this.pristine;
|
|
182
182
|
super.markAsDirty(opts);
|
|
183
|
-
if (currentState != this.pristine)
|
|
183
|
+
if (currentState != this.pristine) {
|
|
184
184
|
this.runControlPropChangeExpression([PRISTINE]);
|
|
185
|
+
}
|
|
185
186
|
}
|
|
186
187
|
markAsPending(opts) {
|
|
187
188
|
let currentState = this.pending;
|
|
188
189
|
super.markAsDirty(opts);
|
|
189
|
-
if (currentState != this.pending)
|
|
190
|
+
if (currentState != this.pending) {
|
|
190
191
|
this.runControlPropChangeExpression([PENDING]);
|
|
192
|
+
}
|
|
191
193
|
}
|
|
192
194
|
runControlPropChangeExpression(propNames) {
|
|
193
195
|
propNames.forEach(name => {
|
|
@@ -346,4 +348,4 @@ export class RxFormControl extends FormControl {
|
|
|
346
348
|
return value !== undefined && value !== null && value !== "" ? value : "";
|
|
347
349
|
}
|
|
348
350
|
}
|
|
349
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvZm9ybS12YWxpZGF0b3JzL3NlcnZpY2VzL2Zvcm0tY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQThCLFdBQVcsRUFBeUQsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoSSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ2xELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBRS9DLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVsRSxNQUFNLEtBQUssR0FBVyxPQUFPLENBQUM7QUFDOUIsTUFBTSxPQUFPLEdBQVcsU0FBUyxDQUFDO0FBQ2xDLE1BQU0sU0FBUyxHQUFXLFdBQVcsQ0FBQztBQUN0QyxNQUFNLFFBQVEsR0FBVyxVQUFVLENBQUM7QUFDcEMsTUFBTSxPQUFPLEdBQVcsU0FBUyxDQUFDO0FBRWxDLE1BQU0sT0FBTyxhQUFjLFNBQVEsV0FBVztJQTJEMUMsWUFBWSxTQUFjLEVBQUUsU0FB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LCBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBWYWxpZGF0b3JGbiwgQXN5bmNWYWxpZGF0b3JGbiwgQWJzdHJhY3RDb250cm9sT3B0aW9ucyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBPYmplY3RNYWtlciB9IGZyb20gXCIuLi91dGlsL29iamVjdC1tYWtlclwiO1xyXG5pbXBvcnQgeyBNRVNTQUdFLCBDT05UUk9MU19FUlJPUiwgVkFMVUVfQ0hBTkdFRF9TWU5DIH0gZnJvbSAnLi4vY29uc3QnXHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uVXRpbCB9IGZyb20gJy4uL3V0aWwvYXBwLXV0aWwnXHJcbmltcG9ydCB7IERpc2FibGVQcm92aWRlciB9IGZyb20gJy4uL2RvbWFpbi9kaXNhYmxlLXByb3ZpZGVyJztcclxuaW1wb3J0IHsgUlhDT0RFLCBNT0RFTF9JTlNUQU5DRSwgUEFUQ0ggfSBmcm9tIFwiLi4vY29uc3QvYXBwLmNvbnN0XCJcclxuaW1wb3J0IHsgREVDT1JBVE9SUyB9IGZyb20gXCIuLi9jb25zdC9kZWNvcmF0b3JzLmNvbnN0XCI7XHJcbmltcG9ydCB7IGRlZmF1bHRDb250YWluZXIgfSBmcm9tIFwiLi4vY29yZS9kZWZhdWx0Q29udGFpbmVyXCI7XHJcbmltcG9ydCB7IFNBTklUSVpFUlMgfSBmcm9tIFwiLi4vdXRpbC9zYW5pdGl6ZXJzXCJcclxuaW1wb3J0IHsgRGF0YVNhbml0aXplciB9IGZyb20gJy4uL2NvcmUvdmFsaWRhdG9yLmludGVyZmFjZSdcclxuaW1wb3J0IHsgRXJyb3JNZXNzYWdlQmluZGluZ1N0cmF0ZWd5IH0gZnJvbSBcIi4uL2VudW1zXCI7XHJcbmltcG9ydCB7IFJlYWN0aXZlRm9ybUNvbmZpZyB9IGZyb20gXCIuLi91dGlsL3JlYWN0aXZlLWZvcm0tY29uZmlnXCI7XHJcblxyXG5jb25zdCBESVJUWTogc3RyaW5nID0gXCJkaXJ0eVwiO1xyXG5jb25zdCBUT1VDSEVEOiBzdHJpbmcgPSBcInRvdWNoZWRcIjtcclxuY29uc3QgVU5UT1VDSEVEOiBzdHJpbmcgPSBcInVudG91Y2hlZFwiO1xyXG5jb25zdCBQUklTVElORTogc3RyaW5nID0gXCJwcmlzdGluZVwiO1xyXG5jb25zdCBQRU5ESU5HOiBzdHJpbmcgPSBcInBlbmRpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBSeEZvcm1Db250cm9sIGV4dGVuZHMgRm9ybUNvbnRyb2wge1xyXG4gICAgcHJpdmF0ZSBfbGFuZ3VhZ2U6IHN0cmluZztcclxuICAgIHByaXZhdGUga2V5TmFtZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBfZXJyb3JNZXNzYWdlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIF9lcnJvck1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBfZGlzYWJsZVByb3ZpZGVyOiBEaXNhYmxlUHJvdmlkZXI7XHJcbiAgICBwcml2YXRlIF9jb2x1bW5zOiBzdHJpbmdbXTtcclxuICAgIHByaXZhdGUgX2NoaWxkQ29sdW1uczogYW55ID0gW107XHJcbiAgICBwcml2YXRlIF9wYXJlbnRDb2x1bW5zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH07XHJcbiAgICBwcml2YXRlIF9yZWZEaXNhYmxlQ29udHJvbHMgPSBbXTtcclxuICAgIHByaXZhdGUgX3JlZk1lc3NhZ2VDb250cm9scyA9IFtdO1xyXG4gICAgcHJpdmF0ZSBfcmVmQ2xhc3NOYW1lQ29udHJvbHMgPSBbXTtcclxuICAgIHByaXZhdGUgX2Vycm9yTWVzc2FnZUJpbmRpbmdTdHJhdGVneTogRXJyb3JNZXNzYWdlQmluZGluZ1N0cmF0ZWd5O1xyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZUV4cHJlc3Npb246IEZ1bmN0aW9uO1xyXG4gICAgcHJpdmF0ZSBfY2xhc3NOYW1lRXhwcmVzc2lvbjogRnVuY3Rpb247XHJcbiAgICBwcml2YXRlIF9pc1Bhc3NlZEV4cHJlc3Npb246IEJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgX2NvbnRyb2xQcm9wOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfTtcclxuICAgIHByaXZhdGUgX2NsYXNzTmFtZUNvbnRyb2xQcm9wOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfTtcclxuICAgIHByaXZhdGUgX2Jhc2VWYWx1ZTogYW55O1xyXG4gICAgcHJpdmF0ZSBfaXNNb2RpZmllZDogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgX2Vycm9yczogYW55O1xyXG4gICAgcHJpdmF0ZSBfZGlydHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgX3ZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gO1xyXG4gICAgcHJpdmF0ZSBfYXN5bmNWYWxpZGF0b3JzOiBBc3luY1ZhbGlkYXRvckZuW10gO1xyXG5cclxuXHJcbiAgICBiYWNrRW5kRXJyb3JzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgICB1cGRhdGVPbkVsZW1lbnRDbGFzczogYm9vbGVhbiB8IEZ1bmN0aW9uO1xyXG4gICAgcHJlSG9vazogRnVuY3Rpb247XHJcbiAgICBwb3N0SG9vazogRnVuY3Rpb247XHJcblxyXG5cclxuICAgIGdldCBlcnJvck1lc3NhZ2VzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICBpZiAoIXRoaXMuX21lc3NhZ2VFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9lcnJvck1lc3NhZ2VzLmxlbmd0aCA9PSAwICYmIHRoaXMuZXJyb3JzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDb250cm9sRXJyb3JNZXNzYWdlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLl9tZXNzYWdlRXhwcmVzc2lvbiAmJiAhdGhpcy5faXNQYXNzZWRFeHByZXNzaW9uKVxyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgaWYgKCF0aGlzLmVycm9ycyAmJiB0aGlzLl9lcnJvck1lc3NhZ2VzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udHJvbEVycm9yTWVzc2FnZXMoKTtcclxuICAgICAgICBpZiAodGhpcy5fbGFuZ3VhZ2UgIT0gdGhpcy5nZXRMYW5ndWFnZSgpKVxyXG4gICAgICAgICAgICB0aGlzLnNldENvbnRyb2xFcnJvck1lc3NhZ2VzKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yTWVzc2FnZXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGVycm9yTWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghdGhpcy5fbWVzc2FnZUV4cHJlc3Npb24pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2Vycm9yTWVzc2FnZSA9PSB1bmRlZmluZWQgJiYgdGhpcy5lcnJvcnMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldENvbnRyb2xFcnJvck1lc3NhZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX21lc3NhZ2VFeHByZXNzaW9uICYmICF0aGlzLl9pc1Bhc3NlZEV4cHJlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVycm9ycyAmJiB0aGlzLl9lcnJvck1lc3NhZ2UpXHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udHJvbEVycm9yTWVzc2FnZXMoKTtcclxuICAgICAgICBpZiAodGhpcy5fbGFuZ3VhZ2UgIT0gdGhpcy5nZXRMYW5ndWFnZSgpKVxyXG4gICAgICAgICAgICB0aGlzLnNldENvbnRyb2xFcnJvck1lc3NhZ2VzKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yTWVzc2FnZTtcclxuICAgIH1cclxuICAgIGNvbnN0cnVjdG9yKGZvcm1TdGF0ZTogYW55LCB2YWxpZGF0b3I6IFZhbGlkYXRvckZuIHwgQWJzdHJhY3RDb250cm9sT3B0aW9ucyB8IFZhbGlkYXRvckZuW10gfCBudWxsLCBhc3luY1ZhbGlkYXRvcjogQXN5bmNWYWxpZGF0b3JGbiB8IEFzeW5jVmFsaWRhdG9yRm5bXSB8IG51bGwsIHByaXZhdGUgZW50aXR5T2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBwcml2YXRlIGJhc2VPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGNvbnRyb2xOYW1lOiBzdHJpbmcsIHByaXZhdGUgX3Nhbml0aXplcnM6IERhdGFTYW5pdGl6ZXJbXSkge1xyXG4gICAgICAgIHN1cGVyKGZvcm1TdGF0ZSwgdmFsaWRhdG9yLCBhc3luY1ZhbGlkYXRvcilcclxuICAgICAgICB0aGlzLmRlZmluZUVycm9yc1Byb3BlcnR5KCk7XHJcbiAgICAgICAgdGhpcy5fYmFzZVZhbHVlID0gZm9ybVN0YXRlID09PSB1bmRlZmluZWQgPyBudWxsIDogdGhpcy5nZXRGb3JtU3RhdGUoZm9ybVN0YXRlKTtcclxuICAgICAgICB0aGlzLl9pc01vZGlmaWVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5rZXlOYW1lID0gY29udHJvbE5hbWU7XHJcbiAgICAgICAgdGhpcy5fdmFsaWRhdG9ycyA9ICh2YWxpZGF0b3IgYXMgQWJzdHJhY3RDb250cm9sT3B0aW9ucykudmFsaWRhdG9ycyBhcyBWYWxpZGF0b3JGbltdO1xyXG4gICAgICAgIHRoaXMuX2FzeW5jVmFsaWRhdG9ycyA9ICh2YWxpZGF0b3IgYXMgQWJzdHJhY3RDb250cm9sT3B0aW9ucykuYXN5bmNWYWxpZGF0b3JzIGFzIEFzeW5jVmFsaWRhdG9yRm5bXTtcclxuICAgICAgICB0aGlzLl9lcnJvck1lc3NhZ2VCaW5kaW5nU3RyYXRlZ3kgPSBSZWFjdGl2ZUZvcm1Db25maWcuZ2V0KFwicmVhY3RpdmVGb3JtLmVycm9yTWVzc2FnZUJpbmRpbmdTdHJhdGVneVwiKSBhcyBFcnJvck1lc3NhZ2VCaW5kaW5nU3RyYXRlZ3k7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Nhbml0aXplcnMpIHtcclxuICAgICAgICAgICAgdmFyIGZsb2F0U2FuaXRpemVyID0gdGhpcy5fc2FuaXRpemVycy5maWx0ZXIodCA9PiB0Lm5hbWUgPT0gXCJ0b0Zsb2F0XCIpWzBdXHJcbiAgICAgICAgICAgIGlmIChmbG9hdFNhbml0aXplciAmJiB0aGlzLl9iYXNlVmFsdWUgJiYgUmVhY3RpdmVGb3JtQ29uZmlnLm51bWJlciAmJiBSZWFjdGl2ZUZvcm1Db25maWcubnVtYmVyLmRlY2ltYWxTeW1ib2wgPT0gXCIsXCIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBiYXNlVmFsdWUgPSBTdHJpbmcodGhpcy5fYmFzZVZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGlmIChiYXNlVmFsdWUuaW5kZXhPZignLicpICE9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYmFzZVZhbHVlID0gYmFzZVZhbHVlLnJlcGxhY2UoXCIuXCIsIFJlYWN0aXZlRm9ybUNvbmZpZy5udW1iZXIuZGVjaW1hbFN5bWJvbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIuc2V0VmFsdWUodGhpcy5fYmFzZVZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZWZpbmVFcnJvcnNQcm9wZXJ0eSgpIHtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImVycm9yc1wiLCB7XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xhbmd1YWdlICYmIHRoaXMuX2xhbmd1YWdlICE9IHRoaXMuZ2V0TGFuZ3VhZ2UoKSAmJiB0aGlzLnZhbGlkYXRvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbXCJlcnJvcnNcIl0gPSB0aGlzLnZhbGlkYXRvcih0aGlzKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yczt9LFxyXG4gICAgICAgICAgICBzZXQodmFsdWUpIHsgdGhpcy5fZXJyb3JzID0gdmFsdWU7IH0sXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEZvcm1TdGF0ZSh2YWx1ZSkge1xyXG4gICAgICAgIGxldCBiYXNlVmFsdWUgPSB2YWx1ZVxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICBiYXNlVmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCh0ID0+IGJhc2VWYWx1ZS5wdXNoKHQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNNb2RpZmllZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNNb2RpZmllZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRWYWxpZGF0b3JzKCk6IFZhbGlkYXRvckZuW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFZhbGlkYXRvclNvdXJjZSh0aGlzLl92YWxpZGF0b3JzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBc3luY1ZhbGlkYXRvcnMoKTogQXN5bmNWYWxpZGF0b3JGbltdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWxpZGF0b3JTb3VyY2UodGhpcy5fYXN5bmNWYWxpZGF0b3JzKTsgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VmFsaWRhdG9yU291cmNlKHZhbGlkYXRvcnM6YW55W10pIHtcclxuICAgICAgICBpZiAodmFsaWRhdG9ycylcclxuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsaWRhdG9ycykgPyBbLi4udmFsaWRhdG9yc10gOiBbdmFsaWRhdG9yc11cclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsaWRhdG9ycyhuZXdWYWxpZGF0b3I6IFZhbGlkYXRvckZuIHwgVmFsaWRhdG9yRm5bXSB8IG51bGwpIHtcclxuICAgICAgICB0aGlzLl92YWxpZGF0b3JzID0gbmV3VmFsaWRhdG9yIGFzIFZhbGlkYXRvckZuW107XHJcbiAgICAgICAgc3VwZXIuc2V0VmFsaWRhdG9ycyhuZXdWYWxpZGF0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEFzeW5jVmFsaWRhdG9ycyhuZXdWYWxpZGF0b3I6IEFzeW5jVmFsaWRhdG9yRm4gfCBBc3luY1ZhbGlkYXRvckZuW10gfCBudWxsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fYXN5bmNWYWxpZGF0b3JzID0gbmV3VmFsaWRhdG9yIGFzIEFzeW5jVmFsaWRhdG9yRm5bXTtcclxuICAgICAgICBzdXBlci5zZXRBc3luY1ZhbGlkYXRvcnMobmV3VmFsaWRhdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWx1ZSh2YWx1ZTogYW55LCBvcHRpb25zPzoge1xyXG4gICAgICAgIGRpcnR5PzogYm9vbGVhbjtcclxuICAgICAgICB1cGRhdGVDaGFuZ2VkPzogYm9vbGVhbjtcclxuICAgICAgICBvbmx5U2VsZj86IGJvb2xlYW47XHJcbiAgICAgICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcclxuICAgICAgICBpc1Rocm91Z2hEeW5hbWljPzogYm9vbGVhbjtcclxuICAgIH0pOiB2b2lkIHtcclxuICAgICAgICAoPGFueT50aGlzLnBhcmVudCkuY2hhbmdpbmcgPSB0cnVlO1xyXG4gICAgICAgIGxldCBwYXJzZWRWYWx1ZSA9IHRoaXMuZ2V0U2FuaXRpemVkVmFsdWUodmFsdWUpXHJcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5kaXJ0eSlcclxuICAgICAgICAgICAgdGhpcy5iYXNlT2JqZWN0W3RoaXMua2V5TmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmVudGl0eU9iamVjdFt0aGlzLmtleU5hbWVdID0gcGFyc2VkVmFsdWU7XHJcbiAgICAgICAgc3VwZXIuc2V0VmFsdWUodmFsdWUsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICB0aGlzLmJpbmRFcnJvcigpO1xyXG4gICAgICAgIHRoaXMuYmluZENsYXNzTmFtZSgpO1xyXG4gICAgICAgIHRoaXMuZXhlY3V0ZUV4cHJlc3Npb25zKCk7XHJcbiAgICAgICAgdGhpcy5jYWxsUGF0Y2goKTtcclxuICAgICAgICBpZiAob3B0aW9ucyAmJiAhb3B0aW9ucy51cGRhdGVDaGFuZ2VkICYmIHRoaXMucm9vdFtWQUxVRV9DSEFOR0VEX1NZTkNdKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm9vdFtWQUxVRV9DSEFOR0VEX1NZTkNdKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICg8YW55PnRoaXMucGFyZW50KS5jaGFuZ2luZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvbnRyb2xWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTYW5pdGl6ZWRWYWx1ZSh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBiaW5kRXJyb3IoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX21lc3NhZ2VFeHByZXNzaW9uKVxyXG4gICAgICAgICAgICB0aGlzLl9pc1Bhc3NlZEV4cHJlc3Npb24gPSB0aGlzLmV4ZWN1dGVFeHByZXNzaW9uKHRoaXMuX21lc3NhZ2VFeHByZXNzaW9uLCB0aGlzKTtcclxuICAgICAgICB0aGlzLnNldENvbnRyb2xFcnJvck1lc3NhZ2VzKCk7XHJcbiAgICAgICAgdmFyIHQ6IGFueSA9IHRoaXM7XHJcbiAgICAgICAgdFtcImVycm9yc1wiXSA9IHRoaXMuZXJyb3JzO1xyXG4gICAgfVxyXG5cclxuICAgIGJpbmRDbGFzc05hbWUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudXBkYXRlT25FbGVtZW50Q2xhc3MgJiYgdHlwZW9mIHRoaXMudXBkYXRlT25FbGVtZW50Q2xhc3MgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gdGhpcy5leGVjdXRlRXhwcmVzc2lvbih0aGlzLl9jbGFzc05hbWVFeHByZXNzaW9uLCB0aGlzKTtcclxuICAgICAgICAgICAgbGV0IHVwZGF0ZUVsZW1lbnQgPSB0aGlzLnVwZGF0ZU9uRWxlbWVudENsYXNzIGFzIEZ1bmN0aW9uO1xyXG4gICAgICAgICAgICB1cGRhdGVFbGVtZW50KGNsYXNzTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRCYWNrRW5kRXJyb3JzKGVycm9yOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoZXJyb3IpLmZvckVhY2goa2V5ID0+IHRoaXMuYmFja0VuZEVycm9yc1trZXldID0gZXJyb3Jba2V5XSk7XHJcbiAgICAgICAgdGhpcy5zZXRDb250cm9sRXJyb3JNZXNzYWdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyQmFja0VuZEVycm9ycyhlcnJvcnM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XHJcbiAgICAgICAgaWYgKCFlcnJvcnMpXHJcbiAgICAgICAgICAgIHRoaXMuYmFja0VuZEVycm9ycyA9IHt9O1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMoZXJyb3JzKS5mb3JFYWNoKHQgPT4gZGVsZXRlIHRoaXMuYmFja0VuZEVycm9yc1t0XSk7XHJcbiAgICAgICAgdGhpcy5zZXRDb250cm9sRXJyb3JNZXNzYWdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIG1hcmtBc1RvdWNoZWQob3B0cz86IHtcclxuICAgICAgICBvbmx5U2VsZj86IGJvb2xlYW47XHJcbiAgICB9KTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRTdGF0ZSA9IHRoaXMudG91Y2hlZDtcclxuICAgICAgICBzdXBlci5tYXJrQXNUb3VjaGVkKG9wdHMpO1xyXG4gICAgICAgIGlmIChjdXJyZW50U3RhdGUgIT0gdGhpcy50b3VjaGVkKVxyXG4gICAgICAgICAgICB0aGlzLnJ1bkNvbnRyb2xQcm9wQ2hhbmdlRXhwcmVzc2lvbihbVE9VQ0hFRCwgVU5UT1VDSEVEXSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFya0FzVW50b3VjaGVkKG9wdHM/OiB7XHJcbiAgICAgICAgb25seVNlbGY/OiBib29sZWFuO1xyXG4gICAgfSk6IHZvaWQge1xyXG4gICAgICAgIGxldCBjdXJyZW50U3RhdGUgPSB0aGlzLnVudG91Y2hlZDtcclxuICAgICAgICBzdXBlci5tYXJrQXNVbnRvdWNoZWQob3B0cyk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSAhPSB0aGlzLnVudG91Y2hlZClcclxuICAgICAgICAgICAgdGhpcy5ydW5Db250cm9sUHJvcENoYW5nZUV4cHJlc3Npb24oW1VOVE9VQ0hFRCwgVE9VQ0hFRF0pXHJcbiAgICB9XHJcblxyXG4gICAgbWFya0FzRGlydHkob3B0cz86IHtcclxuICAgICAgICBvbmx5U2VsZj86IGJvb2xlYW47XHJcbiAgICB9KTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuX2RpcnR5O1xyXG4gICAgICAgIHN1cGVyLm1hcmtBc0RpcnR5KG9wdHMpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICBpZiAoY3VycmVudFN0YXRlICE9IHRoaXMuX2RpcnR5KVxyXG4gICAgICAgICAgICB0aGlzLnJ1bkNvbnRyb2xQcm9wQ2hhbmdlRXhwcmVzc2lvbihbRElSVFldKVxyXG4gICAgfVxyXG5cclxuICAgIG1hcmtBc1ByaXN0aW5lKG9wdHM/OiB7XHJcbiAgICAgICAgb25seVNlbGY/OiBib29sZWFuO1xyXG4gICAgfSk6IHZvaWQge1xyXG4gICAgICAgIGxldCBjdXJyZW50U3RhdGUgPSB0aGlzLnByaXN0aW5lO1xyXG4gICAgICAgIHN1cGVyLm1hcmtBc0RpcnR5KG9wdHMpO1xyXG4gICAgICAgIGlmIChjdXJyZW50U3RhdGUgIT0gdGhpcy5wcmlzdGluZSlcclxuICAgICAgICAgICAgdGhpcy5ydW5Db250cm9sUHJvcENoYW5nZUV4cHJlc3Npb24oW1BSSVNUSU5FXSlcclxuICAgIH1cclxuXHJcbiAgICBtYXJrQXNQZW5kaW5nKG9wdHM/OiB7XHJcbiAgICAgICAgb25seVNlbGY/OiBib29sZWFuO1xyXG4gICAgICAgIGVtaXRFdmVudD86IGJvb2xlYW47XHJcbiAgICB9KTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRTdGF0ZSA9IHRoaXMucGVuZGluZztcclxuICAgICAgICBzdXBlci5tYXJrQXNEaXJ0eShvcHRzKTtcclxuICAgICAgICBpZiAoY3VycmVudFN0YXRlICE9IHRoaXMucGVuZGluZylcclxuICAgICAgICAgICAgdGhpcy5ydW5Db250cm9sUHJvcENoYW5nZUV4cHJlc3Npb24oW1BFTkRJTkddKVxyXG4gICAgfVxyXG5cclxuICAgIHJ1bkNvbnRyb2xQcm9wQ2hhbmdlRXhwcmVzc2lvbihwcm9wTmFtZXM6IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgcHJvcE5hbWVzLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICgodGhpcy5fY29udHJvbFByb3AgJiYgdGhpcy5fbWVzc2FnZUV4cHJlc3Npb24gJiYgdGhpcy5fY29udHJvbFByb3BbbmFtZV0pIHx8ICghdGhpcy5fbWVzc2FnZUV4cHJlc3Npb24gJiYgdGhpcy5jaGVja0Vycm9yTWVzc2FnZVN0cmF0ZWd5KCkpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kRXJyb3IoKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NsYXNzTmFtZUNvbnRyb2xQcm9wICYmIHRoaXMuX2NsYXNzTmFtZUNvbnRyb2xQcm9wW25hbWVdKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kQ2xhc3NOYW1lKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVmcmVzaCgpIHtcclxuICAgICAgICB0aGlzLmdldE1lc3NhZ2VFeHByZXNzaW9uKDxGb3JtR3JvdXA+dGhpcy5wYXJlbnQsIHRoaXMua2V5TmFtZSk7XHJcbiAgICAgICAgdGhpcy5iaW5kQ29uZGl0aW9uYWxDb250cm9scyhERUNPUkFUT1JTLmRpc2FibGVkLCBcIl9yZWZEaXNhYmxlQ29udHJvbHNcIik7XHJcbiAgICAgICAgdGhpcy5iaW5kQ29uZGl0aW9uYWxDb250cm9scyhERUNPUkFUT1JTLmVycm9yLCBcIl9yZWZNZXNzYWdlQ29udHJvbHNcIik7XHJcbiAgICAgICAgdGhpcy5iaW5kQ29uZGl0aW9uYWxDb250cm9scyhERUNPUkFUT1JTLmVsZW1lbnRDbGFzcywgXCJfcmVmQ2xhc3NOYW1lQ29udHJvbHNcIik7XHJcbiAgICAgICAgdGhpcy5leGVjdXRlRXhwcmVzc2lvbnMoKTtcclxuICAgICAgICB0aGlzLmJpbmRFcnJvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0KHZhbHVlPzogYW55KSB7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLmdldEZvcm1TdGF0ZSh0aGlzLl9iYXNlVmFsdWUpKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbW1pdCgpIHtcclxuICAgICAgICB0aGlzLl9iYXNlVmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY2FsbFBhdGNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjYWxsUGF0Y2goKSB7XHJcbiAgICAgICAgdGhpcy5faXNNb2RpZmllZCA9IHRoaXMuZ2V0VmFsdWUodGhpcy5fYmFzZVZhbHVlKSAhPSB0aGlzLmdldFZhbHVlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgIGlmICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudFtQQVRDSF0pXHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50W1BBVENIXSh0aGlzLmtleU5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hlY2tFcnJvck1lc3NhZ2VTdHJhdGVneSgpIHtcclxuICAgICAgICBsZXQgaXNCaW5kOiBib29sZWFuID0gdHJ1ZTtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuX2Vycm9yTWVzc2FnZUJpbmRpbmdTdHJhdGVneSkge1xyXG4gICAgICAgICAgICBjYXNlIEVycm9yTWVzc2FnZUJpbmRpbmdTdHJhdGVneS5PblN1Ym1pdDpcclxuICAgICAgICAgICAgICAgIGlzQmluZCA9ICg8YW55PnRoaXMucGFyZW50KS5zdWJtaXR0ZWQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBFcnJvck1lc3NhZ2VCaW5kaW5nU3RyYXRlZ3kuT25EaXJ0eTpcclxuICAgICAgICAgICAgICAgIGlzQmluZCA9IHRoaXMuX2RpcnR5O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRXJyb3JNZXNzYWdlQmluZGluZ1N0cmF0ZWd5Lk9uVG91Y2hlZDpcclxuICAgICAgICAgICAgICAgIGlzQmluZCA9IHRoaXMudG91Y2hlZDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEVycm9yTWVzc2FnZUJpbmRpbmdTdHJhdGVneS5PbkRpcnR5T3JUb3VjaGVkOlxyXG4gICAgICAgICAgICAgICAgaXNCaW5kID0gdGhpcy5fZGlydHkgfHwgdGhpcy50b3VjaGVkO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRXJyb3JNZXNzYWdlQmluZGluZ1N0cmF0ZWd5Lk9uRGlydHlPclN1Ym1pdDpcclxuICAgICAgICAgICAgICAgIGlzQmluZCA9IHRoaXMuX2RpcnR5IHx8ICg8YW55PnRoaXMucGFyZW50KS5zdWJtaXR0ZWQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBFcnJvck1lc3NhZ2VCaW5kaW5nU3RyYXRlZ3kuT25Ub3VjaGVkT3JTdWJtaXQ6XHJcbiAgICAgICAgICAgICAgICBpc0JpbmQgPSB0aGlzLnRvdWNoZWQgfHwgKDxhbnk+dGhpcy5wYXJlbnQpLnN1Ym1pdHRlZDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgaXNCaW5kID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlzQmluZDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGV4ZWN1dGVFeHByZXNzaW9ucygpIHtcclxuICAgICAgICB0aGlzLnByb2Nlc3NFeHByZXNzaW9uKFwiX3JlZkRpc2FibGVDb250cm9sc1wiLCBcImRpc2FibGVkXCIpO1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc0V4cHJlc3Npb24oXCJfcmVmTWVzc2FnZUNvbnRyb2xzXCIsIFwiYmluZEVycm9yXCIpO1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc0V4cHJlc3Npb24oXCJfcmVmQ2xhc3NOYW1lQ29udHJvbHNcIiwgXCJiaW5kQ2xhc3NOYW1lXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0TWVzc2FnZUV4cHJlc3Npb24oZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGtleU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmIChmb3JtR3JvdXBbTU9ERUxfSU5TVEFOQ0VdKSB7XHJcbiAgICAgICAgICAgIGxldCBpbnN0YW5jZUNvbnRhaW5lciA9IGRlZmF1bHRDb250YWluZXIuZ2V0KGZvcm1Hcm91cFtNT0RFTF9JTlNUQU5DRV0uY29uc3RydWN0b3IpO1xyXG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VDb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VFeHByZXNzaW9uID0gaW5zdGFuY2VDb250YWluZXIubm9uVmFsaWRhdGlvbkRlY29yYXRvcnMuZXJyb3IuY29uZGl0aW9uYWxFeHByZXNzaW9uc1trZXlOYW1lXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udHJvbFByb3AgPSBpbnN0YW5jZUNvbnRhaW5lci5ub25WYWxpZGF0aW9uRGVjb3JhdG9ycy5lcnJvci5jb250cm9sUHJvcFt0aGlzLmtleU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xhc3NOYW1lRXhwcmVzc2lvbiA9IGluc3RhbmNlQ29udGFpbmVyLm5vblZhbGlkYXRpb25EZWNvcmF0b3JzLmVsZW1lbnRDbGFzcy5jb25kaXRpb25hbEV4cHJlc3Npb25zW2tleU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xhc3NOYW1lQ29udHJvbFByb3AgPSBpbnN0YW5jZUNvbnRhaW5lci5ub25WYWxpZGF0aW9uRGVjb3JhdG9ycy5lbGVtZW50Q2xhc3MuY29udHJvbFByb3Bba2V5TmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2xhc3NOYW1lRXhwcmVzc2lvbilcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU9uRWxlbWVudENsYXNzID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRTYW5pdGl6ZWRWYWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Nhbml0aXplcnMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgc2FuaXRpemVyIG9mIHRoaXMuX3Nhbml0aXplcnMpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gU0FOSVRJWkVSU1tzYW5pdGl6ZXIubmFtZV0odmFsdWUsIHNhbml0aXplci5jb25maWcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJpbmRDb25kaXRpb25hbENvbnRyb2xzKGRlY29yYXRvclR5cGU6IHN0cmluZywgcmVmTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fZGlzYWJsZVByb3ZpZGVyID0gbmV3IERpc2FibGVQcm92aWRlcihkZWNvcmF0b3JUeXBlLCB0aGlzLmVudGl0eU9iamVjdCk7XHJcbiAgICAgICAgdGhpc1tyZWZOYW1lXSA9IHRoaXMuX2Rpc2FibGVQcm92aWRlci56ZXJvQXJndW1lbnRQcm9jZXNzKHRoaXMsIHRoaXMua2V5TmFtZSlcclxuICAgICAgICB0aGlzLl9kaXNhYmxlUHJvdmlkZXIub25lQXJndW1lbnRQcm9jZXNzKHRoaXMsIGAke3RoaXMua2V5TmFtZX0ke1JYQ09ERX0xYCkuZm9yRWFjaCh0ID0+IHRoaXNbcmVmTmFtZV0ucHVzaCh0KSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRDb250cm9sRXJyb3JNZXNzYWdlcygpIHtcclxuICAgICAgICBpZiAoKCF0aGlzLl9tZXNzYWdlRXhwcmVzc2lvbiAmJiB0aGlzLmNoZWNrRXJyb3JNZXNzYWdlU3RyYXRlZ3koKSkgfHwgdGhpcy5faXNQYXNzZWRFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yTWVzc2FnZXMgPSBbXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZXJyb3JzKSB7XHJcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmVycm9ycykuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRbQ09OVFJPTFNfRVJST1JdW3RoaXMua2V5TmFtZV0gPSB0aGlzLl9lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSh0aGlzLmVycm9ycywgdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXJyb3JPYmplY3QgPSBPYmplY3RNYWtlci50b0pzb24odCwgdW5kZWZpbmVkLCBbdGhpcy5lcnJvcnNbdF1bdF1dKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50W0NPTlRST0xTX0VSUk9SXVt0aGlzLmtleU5hbWVdID0gdGhpcy5fZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3JPYmplY3QsIHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKHRoaXMuZXJyb3JzLCB0KVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yTWVzc2FnZXMucHVzaCh0aGlzLl9lcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yTWVzc2FnZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50W0NPTlRST0xTX0VSUk9SXVt0aGlzLmtleU5hbWVdID0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGFyZW50W0NPTlRST0xTX0VSUk9SXVt0aGlzLmtleU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBiYWNrRW5kRXJyb3JzID0gT2JqZWN0LmtleXModGhpcy5iYWNrRW5kRXJyb3JzKTtcclxuICAgICAgICAgICAgaWYgKGJhY2tFbmRFcnJvcnMubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIGJhY2tFbmRFcnJvcnMuZm9yRWFjaCh0ID0+IHsgdGhpcy5fZXJyb3JNZXNzYWdlcy5wdXNoKHRoaXMuX2Vycm9yTWVzc2FnZSA9IHRoaXMuYmFja0VuZEVycm9yc1t0XSk7IH0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3JNZXNzYWdlcyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvck1lc3NhZ2UgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2xhbmd1YWdlID0gdGhpcy5nZXRMYW5ndWFnZSgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0TGFuZ3VhZ2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIChSZWFjdGl2ZUZvcm1Db25maWcuaTE4biAmJiBSZWFjdGl2ZUZvcm1Db25maWcuaTE4bi5sYW5ndWFnZSkgPyBSZWFjdGl2ZUZvcm1Db25maWcuaTE4bi5sYW5ndWFnZSA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEVycm9yTWVzc2FnZShlcnJvck9iamVjdDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSwga2V5TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGVycm9yT2JqZWN0W2tleU5hbWVdW01FU1NBR0VdKVxyXG4gICAgICAgICAgICByZXR1cm4gZXJyb3JPYmplY3Rba2V5TmFtZV1bTUVTU0FHRV07XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBwcm9jZXNzRXhwcmVzc2lvbihwcm9wTmFtZTogc3RyaW5nLCBvcGVyYXRpb25UeXBlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpc1twcm9wTmFtZV0pXHJcbiAgICAgICAgICAgIGZvciAodmFyIGNvbnRyb2xJbmZvIG9mIHRoaXNbcHJvcE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29udHJvbCA9IGNvbnRyb2xJbmZvLmlzUm9vdCA/IEFwcGxpY2F0aW9uVXRpbC5nZXRDb250cm9sKGNvbnRyb2xJbmZvLmNvbnRyb2xQYXRoLCBBcHBsaWNhdGlvblV0aWwuZ2V0Um9vdEZvcm1Hcm91cCh0aGlzKSkgOiBBcHBsaWNhdGlvblV0aWwuZ2V0Rm9ybUNvbnRyb2woY29udHJvbEluZm8uY29udHJvbFBhdGgsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmF0aW9uVHlwZSA9PSBcImRpc2FibGVkXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuZXhlY3V0ZUV4cHJlc3Npb24oY29udHJvbEluZm8uY29uZGl0aW9uYWxFeHByZXNzaW9uLCBjb250cm9sKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZGlzYWJsZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb25UeXBlID09IFwiYmluZEVycm9yXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuYmluZEVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAob3BlcmF0aW9uVHlwZSA9PSBcImJpbmRDbGFzc05hbWVcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5iaW5kQ2xhc3NOYW1lKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBleGVjdXRlRXhwcmVzc2lvbihleHByZXNzaW9uOiBGdW5jdGlvbiwgY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogQm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGV4cHJlc3Npb24uY2FsbChjb250cm9sLnBhcmVudFtNT0RFTF9JTlNUQU5DRV0sIGNvbnRyb2wsIEFwcGxpY2F0aW9uVXRpbC5nZXRQYXJlbnRNb2RlbEluc3RhbmNlVmFsdWUodGhpcyksIGNvbnRyb2wucGFyZW50W01PREVMX0lOU1RBTkNFXSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gXCJcIiA/IHZhbHVlIDogXCJcIjtcclxuICAgIH1cclxuXHJcbn1cclxuIl19
|
|
351
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvZm9ybS12YWxpZGF0b3JzL3NlcnZpY2VzL2Zvcm0tY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTZELFdBQVcsRUFBOEMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwSixPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVoRCxNQUFNLEtBQUssR0FBVyxPQUFPLENBQUM7QUFDOUIsTUFBTSxPQUFPLEdBQVcsU0FBUyxDQUFDO0FBQ2xDLE1BQU0sU0FBUyxHQUFXLFdBQVcsQ0FBQztBQUN0QyxNQUFNLFFBQVEsR0FBVyxVQUFVLENBQUM7QUFDcEMsTUFBTSxPQUFPLEdBQVcsU0FBUyxDQUFDO0FBRWxDLE1BQU0sT0FBTyxhQUFjLFNBQVEsV0FBVztJQW9EMUM7Ozs7Ozs7OztPQVNHO0lBQ0gs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Q0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQy9MLElBQUksT0FBTyxFQUFFO29CQUNULElBQUksYUFBYSxJQUFJLFVBQVUsRUFBRTt3QkFDN0IsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLENBQUMsQ0FBQzt3QkFDaEYsSUFBSSxNQUFNOzRCQUNOLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTs7NEJBRWpCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztxQkFDeEI7eUJBQU0sSUFBSSxhQUFhLElBQUksV0FBVzt3QkFDbkMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO3lCQUNuQixJQUFJLGFBQWEsSUFBSSxlQUFlO3dCQUNyQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7aUJBRS9CO2FBQ0o7SUFDVCxDQUFDO0lBRU8saUJBQWlCLENBQUMsVUFBb0IsRUFBRSxPQUF3QjtRQUNwRSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQTtJQUN0SixDQUFDO0lBRU8sUUFBUSxDQUFDLEtBQVU7UUFDdkIsT0FBTyxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDOUUsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBBYnN0cmFjdENvbnRyb2xPcHRpb25zLCBBc3luY1ZhbGlkYXRvckZuLCBGb3JtQ29udHJvbCwgRm9ybUNvbnRyb2xPcHRpb25zLCBGb3JtR3JvdXAsIFZhbGlkYXRvckZuIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IENPTlRST0xTX0VSUk9SLCBNRVNTQUdFLCBWQUxVRV9DSEFOR0VEX1NZTkMgfSBmcm9tICcuLi9jb25zdCc7XHJcbmltcG9ydCB7IE1PREVMX0lOU1RBTkNFLCBQQVRDSCwgUlhDT0RFIH0gZnJvbSBcIi4uL2NvbnN0L2FwcC5jb25zdFwiO1xyXG5pbXBvcnQgeyBERUNPUkFUT1JTIH0gZnJvbSBcIi4uL2NvbnN0L2RlY29yYXRvcnMuY29uc3RcIjtcclxuaW1wb3J0IHsgZGVmYXVsdENvbnRhaW5lciB9IGZyb20gXCIuLi9jb3JlL2RlZmF1bHRDb250YWluZXJcIjtcclxuaW1wb3J0IHsgRGF0YVNhbml0aXplciB9IGZyb20gJy4uL2NvcmUvdmFsaWRhdG9yLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IERpc2FibGVQcm92aWRlciB9IGZyb20gJy4uL2RvbWFpbi9kaXNhYmxlLXByb3ZpZGVyJztcclxuaW1wb3J0IHsgRXJyb3JNZXNzYWdlQmluZGluZ1N0cmF0ZWd5IH0gZnJvbSBcIi4uL2VudW1zXCI7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uVXRpbCB9IGZyb20gJy4uL3V0aWwvYXBwLXV0aWwnO1xyXG5pbXBvcnQgeyBPYmplY3RNYWtlciB9IGZyb20gXCIuLi91dGlsL29iamVjdC1tYWtlclwiO1xyXG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1Db25maWcgfSBmcm9tIFwiLi4vdXRpbC9yZWFjdGl2ZS1mb3JtLWNvbmZpZ1wiO1xyXG5pbXBvcnQgeyBTQU5JVElaRVJTIH0gZnJvbSBcIi4uL3V0aWwvc2FuaXRpemVyc1wiO1xyXG5cclxuY29uc3QgRElSVFk6IHN0cmluZyA9IFwiZGlydHlcIjtcclxuY29uc3QgVE9VQ0hFRDogc3RyaW5nID0gXCJ0b3VjaGVkXCI7XHJcbmNvbnN0IFVOVE9VQ0hFRDogc3RyaW5nID0gXCJ1bnRvdWNoZWRcIjtcclxuY29uc3QgUFJJU1RJTkU6IHN0cmluZyA9IFwicHJpc3RpbmVcIjtcclxuY29uc3QgUEVORElORzogc3RyaW5nID0gXCJwZW5kaW5nXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUnhGb3JtQ29udHJvbCBleHRlbmRzIEZvcm1Db250cm9sIHtcclxuICAgIHByaXZhdGUgX2xhbmd1YWdlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGtleU5hbWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgX2Vycm9yTWVzc2FnZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBfZXJyb3JNZXNzYWdlczogc3RyaW5nW10gPSBbXTtcclxuICAgIHByaXZhdGUgX2Rpc2FibGVQcm92aWRlcjogRGlzYWJsZVByb3ZpZGVyO1xyXG4gICAgcHJpdmF0ZSBfZXJyb3JNZXNzYWdlQmluZGluZ1N0cmF0ZWd5OiBFcnJvck1lc3NhZ2VCaW5kaW5nU3RyYXRlZ3k7XHJcbiAgICBwcml2YXRlIF9tZXNzYWdlRXhwcmVzc2lvbjogRnVuY3Rpb247XHJcbiAgICBwcml2YXRlIF9jbGFzc05hbWVFeHByZXNzaW9uOiBGdW5jdGlvbjtcclxuICAgIHByaXZhdGUgX2lzUGFzc2VkRXhwcmVzc2lvbjogQm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfY29udHJvbFByb3A6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9O1xyXG4gICAgcHJpdmF0ZSBfY2xhc3NOYW1lQ29udHJvbFByb3A6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9O1xyXG4gICAgcHJpdmF0ZSBfYmFzZVZhbHVlOiBhbnk7XHJcbiAgICBwcml2YXRlIF9pc01vZGlmaWVkOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBfZGlydHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgX3ZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW107XHJcbiAgICBwcml2YXRlIF9hc3luY1ZhbGlkYXRvcnM6IEFzeW5jVmFsaWRhdG9yRm5bXTtcclxuXHJcbiAgICBiYWNrRW5kRXJyb3JzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgICB1cGRhdGVPbkVsZW1lbnRDbGFzczogYm9vbGVhbiB8IEZ1bmN0aW9uO1xyXG4gICAgcHJlSG9vazogRnVuY3Rpb247XHJcbiAgICBwb3N0SG9vazogRnVuY3Rpb247XHJcblxyXG5cclxuICAgIGdldCBlcnJvck1lc3NhZ2VzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICBpZiAoIXRoaXMuX21lc3NhZ2VFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9lcnJvck1lc3NhZ2VzLmxlbmd0aCA9PSAwICYmIHRoaXMuZXJyb3JzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDb250cm9sRXJyb3JNZXNzYWdlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLl9tZXNzYWdlRXhwcmVzc2lvbiAmJiAhdGhpcy5faXNQYXNzZWRFeHByZXNzaW9uKVxyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgaWYgKCF0aGlzLmVycm9ycyAmJiB0aGlzLl9lcnJvck1lc3NhZ2VzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udHJvbEVycm9yTWVzc2FnZXMoKTtcclxuICAgICAgICBpZiAodGhpcy5fbGFuZ3VhZ2UgIT0gdGhpcy5nZXRMYW5ndWFnZSgpKVxyXG4gICAgICAgICAgICB0aGlzLnNldENvbnRyb2xFcnJvck1lc3NhZ2VzKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yTWVzc2FnZXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGVycm9yTWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghdGhpcy5fbWVzc2FnZUV4cHJlc3Npb24pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2Vycm9yTWVzc2FnZSA9PSB1bmRlZmluZWQgJiYgdGhpcy5lcnJvcnMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldENvbnRyb2xFcnJvck1lc3NhZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX21lc3NhZ2VFeHByZXNzaW9uICYmICF0aGlzLl9pc1Bhc3NlZEV4cHJlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVycm9ycyAmJiB0aGlzLl9lcnJvck1lc3NhZ2UpXHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udHJvbEVycm9yTWVzc2FnZXMoKTtcclxuICAgICAgICBpZiAodGhpcy5fbGFuZ3VhZ2UgIT0gdGhpcy5nZXRMYW5ndWFnZSgpKVxyXG4gICAgICAgICAgICB0aGlzLnNldENvbnRyb2xFcnJvck1lc3NhZ2VzKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yTWVzc2FnZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgKiBAcGFyYW0gZm9ybVN0YXRlIFxyXG4gICAgICogQHBhcmFtIHZhbGlkYXRvciBcclxuICAgICAqIEBwYXJhbSBhc3luY1ZhbGlkYXRvciBcclxuICAgICAqIEBwYXJhbSBlbnRpdHlPYmplY3QgXHJcbiAgICAgKiBAcGFyYW0gYmFzZU9iamVjdCBcclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZSBcclxuICAgICAqIEBwYXJhbSBfc2FuaXRpemVycyBcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoZm9ybVN0YXRlOiBhbnksIHZhbGlkYXRvck9yT3B0czogVmFsaWRhdG9yRm4gfCBWYWxpZGF0b3JGbltdIHwgRm9ybUNvbnRyb2xPcHRpb25zIHwgbnVsbCwgcHJpdmF0ZSBlbnRpdHlPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIHByaXZhdGUgYmFzZU9iamVjdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY29udHJvbE5hbWU6IHN0cmluZywgcHJpdmF0ZSBfc2FuaXRpemVyczogRGF0YVNhbml0aXplcltdKSB7XHJcbiAgICAgICAgc3VwZXIoZm9ybVN0YXRlLCB2YWxpZGF0b3JPck9wdHMpXHJcbiAgICAgICAgdGhpcy5kZWZpbmVFcnJvcnNQcm9wZXJ0eSgpO1xyXG4gICAgICAgIHRoaXMuX2Jhc2VWYWx1ZSA9IGZvcm1TdGF0ZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IHRoaXMuZ2V0Rm9ybVN0YXRlKGZvcm1TdGF0ZSk7XHJcbiAgICAgICAgdGhpcy5faXNNb2RpZmllZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMua2V5TmFtZSA9IGNvbnRyb2xOYW1lO1xyXG4gICAgICAgIHRoaXMuX3ZhbGlkYXRvcnMgPSAodmFsaWRhdG9yT3JPcHRzIGFzIEFic3RyYWN0Q29udHJvbE9wdGlvbnMpLnZhbGlkYXRvcnMgYXMgVmFsaWRhdG9yRm5bXTtcclxuICAgICAgICB0aGlzLl9hc3luY1ZhbGlkYXRvcnMgPSAodmFsaWRhdG9yT3JPcHRzIGFzIEFic3RyYWN0Q29udHJvbE9wdGlvbnMpLmFzeW5jVmFsaWRhdG9ycyBhcyBBc3luY1ZhbGlkYXRvckZuW107XHJcbiAgICAgICAgdGhpcy5fZXJyb3JNZXNzYWdlQmluZGluZ1N0cmF0ZWd5ID0gUmVhY3RpdmVGb3JtQ29uZmlnLmdldChcInJlYWN0aXZlRm9ybS5lcnJvck1lc3NhZ2VCaW5kaW5nU3RyYXRlZ3lcIikgYXMgRXJyb3JNZXNzYWdlQmluZGluZ1N0cmF0ZWd5O1xyXG4gICAgICAgIGlmICh0aGlzLl9zYW5pdGl6ZXJzKSB7XHJcbiAgICAgICAgICAgIHZhciBmbG9hdFNhbml0aXplciA9IHRoaXMuX3Nhbml0aXplcnMuZmlsdGVyKHQgPT4gdC5uYW1lID09IFwidG9GbG9hdFwiKVswXVxyXG4gICAgICAgICAgICBpZiAoZmxvYXRTYW5pdGl6ZXIgJiYgdGhpcy5fYmFzZVZhbHVlICYmIFJlYWN0aXZlRm9ybUNvbmZpZy5udW1iZXIgJiYgUmVhY3RpdmVGb3JtQ29uZmlnLm51bWJlci5kZWNpbWFsU3ltYm9sID09IFwiLFwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYmFzZVZhbHVlID0gU3RyaW5nKHRoaXMuX2Jhc2VWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYmFzZVZhbHVlLmluZGV4T2YoJy4nKSAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Jhc2VWYWx1ZSA9IGJhc2VWYWx1ZS5yZXBsYWNlKFwiLlwiLCBSZWFjdGl2ZUZvcm1Db25maWcubnVtYmVyLmRlY2ltYWxTeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgICAgIHN1cGVyLnNldFZhbHVlKHRoaXMuX2Jhc2VWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZGVmaW5lRXJyb3JzUHJvcGVydHkoKSB7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiZXJyb3JzXCIsIHtcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbGFuZ3VhZ2UgJiYgdGhpcy5fbGFuZ3VhZ2UgIT0gdGhpcy5nZXRMYW5ndWFnZSgpICYmIHRoaXMudmFsaWRhdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tcImVycm9yc1wiXSA9IHRoaXMudmFsaWRhdG9yKHRoaXMpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3JzO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXQodmFsdWUpIHsgdGhpcy5fZXJyb3JzID0gdmFsdWU7IH0sXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEZvcm1TdGF0ZSh2YWx1ZSkge1xyXG4gICAgICAgIGxldCBiYXNlVmFsdWUgPSB2YWx1ZVxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICBiYXNlVmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCh0ID0+IGJhc2VWYWx1ZS5wdXNoKHQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNNb2RpZmllZCgpIHsgcmV0dXJuIHRoaXMuX2lzTW9kaWZpZWQ7IH1cclxuXHJcbiAgICBnZXRWYWxpZGF0b3JzKCk6IFZhbGlkYXRvckZuW10geyByZXR1cm4gdGhpcy5nZXRWYWxpZGF0b3JTb3VyY2UodGhpcy5fdmFsaWRhdG9ycyk7IH1cclxuXHJcbiAgICBnZXRBc3luY1ZhbGlkYXRvcnMoKTogQXN5bmNWYWxpZGF0b3JGbltdIHsgcmV0dXJuIHRoaXMuZ2V0VmFsaWRhdG9yU291cmNlKHRoaXMuX2FzeW5jVmFsaWRhdG9ycyk7IH1cclxuXHJcbiAgICBwcml2YXRlIGdldFZhbGlkYXRvclNvdXJjZSh2YWxpZGF0b3JzOiBhbnlbXSkge1xyXG4gICAgICAgIGlmICh2YWxpZGF0b3JzKVxyXG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWxpZGF0b3JzKSA/IFsuLi52YWxpZGF0b3JzXSA6IFt2YWxpZGF0b3JzXVxyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWxpZGF0b3JzKG5ld1ZhbGlkYXRvcjogVmFsaWRhdG9yRm4gfCBWYWxpZGF0b3JGbltdIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX3ZhbGlkYXRvcnMgPSBuZXdWYWxpZGF0b3IgYXMgVmFsaWRhdG9yRm5bXTtcclxuICAgICAgICBzdXBlci5zZXRWYWxpZGF0b3JzKG5ld1ZhbGlkYXRvcik7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QXN5bmNWYWxpZGF0b3JzKG5ld1ZhbGlkYXRvcjogQXN5bmNWYWxpZGF0b3JGbiB8IEFzeW5jVmFsaWRhdG9yRm5bXSB8IG51bGwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9hc3luY1ZhbGlkYXRvcnMgPSBuZXdWYWxpZGF0b3IgYXMgQXN5bmNWYWxpZGF0b3JGbltdO1xyXG4gICAgICAgIHN1cGVyLnNldEFzeW5jVmFsaWRhdG9ycyhuZXdWYWxpZGF0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlKHZhbHVlOiBhbnksIG9wdGlvbnM/OiB7IGRpcnR5PzogYm9vbGVhbjsgdXBkYXRlQ2hhbmdlZD86IGJvb2xlYW47IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbjsgaXNUaHJvdWdoRHluYW1pYz86IGJvb2xlYW47IH0pOiB2b2lkIHtcclxuICAgICAgICAoPGFueT50aGlzLnBhcmVudCkuY2hhbmdpbmcgPSB0cnVlO1xyXG4gICAgICAgIGxldCBwYXJzZWRWYWx1ZSA9IHRoaXMuZ2V0U2FuaXRpemVkVmFsdWUodmFsdWUpXHJcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5kaXJ0eSlcclxuICAgICAgICAgICAgdGhpcy5iYXNlT2JqZWN0W3RoaXMua2V5TmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmVudGl0eU9iamVjdFt0aGlzLmtleU5hbWVdID0gcGFyc2VkVmFsdWU7XHJcbiAgICAgICAgc3VwZXIuc2V0VmFsdWUodmFsdWUsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICB0aGlzLmJpbmRFcnJvcigpO1xyXG4gICAgICAgIHRoaXMuYmluZENsYXNzTmFtZSgpO1xyXG4gICAgICAgIHRoaXMuZXhlY3V0ZUV4cHJlc3Npb25zKCk7XHJcbiAgICAgICAgdGhpcy5jYWxsUGF0Y2goKTtcclxuICAgICAgICBpZiAob3B0aW9ucyAmJiAhb3B0aW9ucy51cGRhdGVDaGFuZ2VkICYmIHRoaXMucm9vdFtWQUxVRV9DSEFOR0VEX1NZTkNdKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm9vdFtWQUxVRV9DSEFOR0VEX1NZTkNdKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICg8YW55PnRoaXMucGFyZW50KS5jaGFuZ2luZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvbnRyb2xWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTYW5pdGl6ZWRWYWx1ZSh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBiaW5kRXJyb3IoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX21lc3NhZ2VFeHByZXNzaW9uKVxyXG4gICAgICAgICAgICB0aGlzLl9pc1Bhc3NlZEV4cHJlc3Npb24gPSB0aGlzLmV4ZWN1dGVFeHByZXNzaW9uKHRoaXMuX21lc3NhZ2VFeHByZXNzaW9uLCB0aGlzKTtcclxuICAgICAgICB0aGlzLnNldENvbnRyb2xFcnJvck1lc3NhZ2VzKCk7XHJcbiAgICAgICAgdmFyIHQ6IGFueSA9IHRoaXM7XHJcbiAgICAgICAgdFtcImVycm9yc1wiXSA9IHRoaXMuZXJyb3JzO1xyXG4gICAgfVxyXG5cclxuICAgIGJpbmRDbGFzc05hbWUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudXBkYXRlT25FbGVtZW50Q2xhc3MgJiYgdHlwZW9mIHRoaXMudXBkYXRlT25FbGVtZW50Q2xhc3MgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gdGhpcy5leGVjdXRlRXhwcmVzc2lvbih0aGlzLl9jbGFzc05hbWVFeHByZXNzaW9uLCB0aGlzKTtcclxuICAgICAgICAgICAgbGV0IHVwZGF0ZUVsZW1lbnQgPSB0aGlzLnVwZGF0ZU9uRWxlbWVudENsYXNzIGFzIEZ1bmN0aW9uO1xyXG4gICAgICAgICAgICB1cGRhdGVFbGVtZW50KGNsYXNzTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldEJhY2tFbmRFcnJvcnMoZXJyb3I6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcclxuICAgICAgICBPYmplY3Qua2V5cyhlcnJvcikuZm9yRWFjaChrZXkgPT4gdGhpcy5iYWNrRW5kRXJyb3JzW2tleV0gPSBlcnJvcltrZXldKTtcclxuICAgICAgICB0aGlzLnNldENvbnRyb2xFcnJvck1lc3NhZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJCYWNrRW5kRXJyb3JzKGVycm9ycz86IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcclxuICAgICAgICBpZiAoIWVycm9ycylcclxuICAgICAgICAgICAgdGhpcy5iYWNrRW5kRXJyb3JzID0ge307XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhlcnJvcnMpLmZvckVhY2godCA9PiBkZWxldGUgdGhpcy5iYWNrRW5kRXJyb3JzW3RdKTtcclxuICAgICAgICB0aGlzLnNldENvbnRyb2xFcnJvck1lc3NhZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbWFya0FzVG91Y2hlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IH0pOiB2b2lkIHtcclxuICAgICAgICBsZXQgY3VycmVudFN0YXRlID0gdGhpcy50b3VjaGVkO1xyXG4gICAgICAgIHN1cGVyLm1hcmtBc1RvdWNoZWQob3B0cyk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSAhPSB0aGlzLnRvdWNoZWQpXHJcbiAgICAgICAgICAgIHRoaXMucnVuQ29udHJvbFByb3BDaGFuZ2VFeHByZXNzaW9uKFtUT1VDSEVELCBVTlRPVUNIRURdKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYXJrQXNVbnRvdWNoZWQob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyB9KTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRTdGF0ZSA9IHRoaXMudW50b3VjaGVkO1xyXG4gICAgICAgIHN1cGVyLm1hcmtBc1VudG91Y2hlZChvcHRzKTtcclxuICAgICAgICBpZiAoY3VycmVudFN0YXRlICE9IHRoaXMudW50b3VjaGVkKVxyXG4gICAgICAgICAgICB0aGlzLnJ1bkNvbnRyb2xQcm9wQ2hhbmdlRXhwcmVzc2lvbihbVU5UT1VDSEVELCBUT1VDSEVEXSlcclxuICAgIH1cclxuXHJcbiAgICBtYXJrQXNEaXJ0eShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IH0pOiB2b2lkIHtcclxuICAgICAgICBsZXQgY3VycmVudFN0YXRlID0gdGhpcy5fZGlydHk7XHJcbiAgICAgICAgc3VwZXIubWFya0FzRGlydHkob3B0cyk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIGlmIChjdXJyZW50U3RhdGUgIT0gdGhpcy5fZGlydHkpXHJcbiAgICAgICAgICAgIHRoaXMucnVuQ29udHJvbFByb3BDaGFuZ2VFeHByZXNzaW9uKFtESVJUWV0pXHJcbiAgICB9XHJcblxyXG4gICAgbWFya0FzUHJpc3RpbmUob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyB9KTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRTdGF0ZSA9IHRoaXMucHJpc3RpbmU7XHJcbiAgICAgICAgc3VwZXIubWFya0FzRGlydHkob3B0cyk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSAhPSB0aGlzLnByaXN0aW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMucnVuQ29udHJvbFByb3BDaGFuZ2VFeHByZXNzaW9uKFtQUklTVElORV0pXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG1hcmtBc1BlbmRpbmcob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuOyB9KTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRTdGF0ZSA9IHRoaXMucGVuZGluZztcclxuICAgICAgICBzdXBlci5tYXJrQXNEaXJ0eShvcHRzKTtcclxuICAgICAgICBpZiAoY3VycmVudFN0YXRlICE9IHRoaXMucGVuZGluZykge1xyXG4gICAgICAgICAgICB0aGlzLnJ1bkNvbnRyb2xQcm9wQ2hhbmdlRXhwcmVzc2lvbihbUEVORElOR10pXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJ1bkNvbnRyb2xQcm9wQ2hhbmdlRXhwcmVzc2lvbihwcm9wTmFtZXM6IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgcHJvcE5hbWVzLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICgodGhpcy5fY29udHJvbFByb3AgJiYgdGhpcy5fbWVzc2FnZUV4cHJlc3Npb24gJiYgdGhpcy5fY29udHJvbFByb3BbbmFtZV0pIHx8ICghdGhpcy5fbWVzc2FnZUV4cHJlc3Npb24gJiYgdGhpcy5jaGVja0Vycm9yTWVzc2FnZVN0cmF0ZWd5KCkpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kRXJyb3IoKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NsYXNzTmFtZUNvbnRyb2xQcm9wICYmIHRoaXMuX2NsYXNzTmFtZUNvbnRyb2xQcm9wW25hbWVdKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kQ2xhc3NOYW1lKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVmcmVzaCgpIHtcclxuICAgICAgICB0aGlzLmdldE1lc3NhZ2VFeHByZXNzaW9uKDxGb3JtR3JvdXA+dGhpcy5wYXJlbnQsIHRoaXMua2V5TmFtZSk7XHJcbiAgICAgICAgdGhpcy5iaW5kQ29uZGl0aW9uYWxDb250cm9scyhERUNPUkFUT1JTLmRpc2FibGVkLCBcIl9yZWZEaXNhYmxlQ29udHJvbHNcIik7XHJcbiAgICAgICAgdGhpcy5iaW5kQ29uZGl0aW9uYWxDb250cm9scyhERUNPUkFUT1JTLmVycm9yLCBcIl9yZWZNZXNzYWdlQ29udHJvbHNcIik7XHJcbiAgICAgICAgdGhpcy5iaW5kQ29uZGl0aW9uYWxDb250cm9scyhERUNPUkFUT1JTLmVsZW1lbnRDbGFzcywgXCJfcmVmQ2xhc3NOYW1lQ29udHJvbHNcIik7XHJcbiAgICAgICAgdGhpcy5leGVjdXRlRXhwcmVzc2lvbnMoKTtcclxuICAgICAgICB0aGlzLmJpbmRFcnJvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0KHZhbHVlPzogYW55KSB7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLmdldEZvcm1TdGF0ZSh0aGlzLl9iYXNlVmFsdWUpKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbW1pdCgpIHtcclxuICAgICAgICB0aGlzLl9iYXNlVmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuY2FsbFBhdGNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjYWxsUGF0Y2goKSB7XHJcbiAgICAgICAgdGhpcy5faXNNb2RpZmllZCA9IHRoaXMuZ2V0VmFsdWUodGhpcy5fYmFzZVZhbHVlKSAhPSB0aGlzLmdldFZhbHVlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgIGlmICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudFtQQVRDSF0pXHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50W1BBVENIXSh0aGlzLmtleU5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hlY2tFcnJvck1lc3NhZ2VTdHJhdGVneSgpIHtcclxuICAgICAgICBsZXQgaXNCaW5kOiBib29sZWFuID0gdHJ1ZTtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuX2Vycm9yTWVzc2FnZUJpbmRpbmdTdHJhdGVneSkge1xyXG4gICAgICAgICAgICBjYXNlIEVycm9yTWVzc2FnZUJpbmRpbmdTdHJhdGVneS5PblN1Ym1pdDpcclxuICAgICAgICAgICAgICAgIGlzQmluZCA9ICg8YW55PnRoaXMucGFyZW50KS5zdWJtaXR0ZWQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBFcnJvck1lc3NhZ2VCaW5kaW5nU3RyYXRlZ3kuT25EaXJ0eTpcclxuICAgICAgICAgICAgICAgIGlzQmluZCA9IHRoaXMuX2RpcnR5O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRXJyb3JNZXNzYWdlQmluZGluZ1N0cmF0ZWd5Lk9uVG91Y2hlZDpcclxuICAgICAgICAgICAgICAgIGlzQmluZCA9IHRoaXMudG91Y2hlZDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEVycm9yTWVzc2FnZUJpbmRpbmdTdHJhdGVneS5PbkRpcnR5T3JUb3VjaGVkOlxyXG4gICAgICAgICAgICAgICAgaXNCaW5kID0gdGhpcy5fZGlydHkgfHwgdGhpcy50b3VjaGVkO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRXJyb3JNZXNzYWdlQmluZGluZ1N0cmF0ZWd5Lk9uRGlydHlPclN1Ym1pdDpcclxuICAgICAgICAgICAgICAgIGlzQmluZCA9IHRoaXMuX2RpcnR5IHx8ICg8YW55PnRoaXMucGFyZW50KS5zdWJtaXR0ZWQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBFcnJvck1lc3NhZ2VCaW5kaW5nU3RyYXRlZ3kuT25Ub3VjaGVkT3JTdWJtaXQ6XHJcbiAgICAgICAgICAgICAgICBpc0JpbmQgPSB0aGlzLnRvdWNoZWQgfHwgKDxhbnk+dGhpcy5wYXJlbnQpLnN1Ym1pdHRlZDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgaXNCaW5kID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlzQmluZDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGV4ZWN1dGVFeHByZXNzaW9ucygpIHtcclxuICAgICAgICB0aGlzLnByb2Nlc3NFeHByZXNzaW9uKFwiX3JlZkRpc2FibGVDb250cm9sc1wiLCBcImRpc2FibGVkXCIpO1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc0V4cHJlc3Npb24oXCJfcmVmTWVzc2FnZUNvbnRyb2xzXCIsIFwiYmluZEVycm9yXCIpO1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc0V4cHJlc3Npb24oXCJfcmVmQ2xhc3NOYW1lQ29udHJvbHNcIiwgXCJiaW5kQ2xhc3NOYW1lXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0TWVzc2FnZUV4cHJlc3Npb24oZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGtleU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmIChmb3JtR3JvdXBbTU9ERUxfSU5TVEFOQ0VdKSB7XHJcbiAgICAgICAgICAgIGxldCBpbnN0YW5jZUNvbnRhaW5lciA9IGRlZmF1bHRDb250YWluZXIuZ2V0KGZvcm1Hcm91cFtNT0RFTF9JTlNUQU5DRV0uY29uc3RydWN0b3IpO1xyXG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VDb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VFeHByZXNzaW9uID0gaW5zdGFuY2VDb250YWluZXIubm9uVmFsaWRhdGlvbkRlY29yYXRvcnMuZXJyb3IuY29uZGl0aW9uYWxFeHByZXNzaW9uc1trZXlOYW1lXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udHJvbFByb3AgPSBpbnN0YW5jZUNvbnRhaW5lci5ub25WYWxpZGF0aW9uRGVjb3JhdG9ycy5lcnJvci5jb250cm9sUHJvcFt0aGlzLmtleU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xhc3NOYW1lRXhwcmVzc2lvbiA9IGluc3RhbmNlQ29udGFpbmVyLm5vblZhbGlkYXRpb25EZWNvcmF0b3JzLmVsZW1lbnRDbGFzcy5jb25kaXRpb25hbEV4cHJlc3Npb25zW2tleU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xhc3NOYW1lQ29udHJvbFByb3AgPSBpbnN0YW5jZUNvbnRhaW5lci5ub25WYWxpZGF0aW9uRGVjb3JhdG9ycy5lbGVtZW50Q2xhc3MuY29udHJvbFByb3Bba2V5TmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2xhc3NOYW1lRXhwcmVzc2lvbilcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU9uRWxlbWVudENsYXNzID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRTYW5pdGl6ZWRWYWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Nhbml0aXplcnMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgc2FuaXRpemVyIG9mIHRoaXMuX3Nhbml0aXplcnMpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gU0FOSVRJWkVSU1tzYW5pdGl6ZXIubmFtZV0odmFsdWUsIHNhbml0aXplci5jb25maWcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJpbmRDb25kaXRpb25hbENvbnRyb2xzKGRlY29yYXRvclR5cGU6IHN0cmluZywgcmVmTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fZGlzYWJsZVByb3ZpZGVyID0gbmV3IERpc2FibGVQcm92aWRlcihkZWNvcmF0b3JUeXBlLCB0aGlzLmVudGl0eU9iamVjdCk7XHJcbiAgICAgICAgdGhpc1tyZWZOYW1lXSA9IHRoaXMuX2Rpc2FibGVQcm92aWRlci56ZXJvQXJndW1lbnRQcm9jZXNzKHRoaXMsIHRoaXMua2V5TmFtZSlcclxuICAgICAgICB0aGlzLl9kaXNhYmxlUHJvdmlkZXIub25lQXJndW1lbnRQcm9jZXNzKHRoaXMsIGAke3RoaXMua2V5TmFtZX0ke1JYQ09ERX0xYCkuZm9yRWFjaCh0ID0+IHRoaXNbcmVmTmFtZV0ucHVzaCh0KSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRDb250cm9sRXJyb3JNZXNzYWdlcygpIHtcclxuICAgICAgICBpZiAoKCF0aGlzLl9tZXNzYWdlRXhwcmVzc2lvbiAmJiB0aGlzLmNoZWNrRXJyb3JNZXNzYWdlU3RyYXRlZ3koKSkgfHwgdGhpcy5faXNQYXNzZWRFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yTWVzc2FnZXMgPSBbXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZXJyb3JzKSB7XHJcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmVycm9ycykuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRbQ09OVFJPTFNfRVJST1JdW3RoaXMua2V5TmFtZV0gPSB0aGlzLl9lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSh0aGlzLmVycm9ycywgdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXJyb3JPYmplY3QgPSBPYmplY3RNYWtlci50b0pzb24odCwgdW5kZWZpbmVkLCBbdGhpcy5lcnJvcnNbdF1bdF1dKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50W0NPTlRST0xTX0VSUk9SXVt0aGlzLmtleU5hbWVdID0gdGhpcy5fZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3JPYmplY3QsIHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKHRoaXMuZXJyb3JzLCB0KVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yTWVzc2FnZXMucHVzaCh0aGlzLl9lcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yTWVzc2FnZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50W0NPTlRST0xTX0VSUk9SXVt0aGlzLmtleU5hbWVdID0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGFyZW50W0NPTlRST0xTX0VSUk9SXVt0aGlzLmtleU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBiYWNrRW5kRXJyb3JzID0gT2JqZWN0LmtleXModGhpcy5iYWNrRW5kRXJyb3JzKTtcclxuICAgICAgICAgICAgaWYgKGJhY2tFbmRFcnJvcnMubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIGJhY2tFbmRFcnJvcnMuZm9yRWFjaCh0ID0+IHsgdGhpcy5fZXJyb3JNZXNzYWdlcy5wdXNoKHRoaXMuX2Vycm9yTWVzc2FnZSA9IHRoaXMuYmFja0VuZEVycm9yc1t0XSk7IH0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3JNZXNzYWdlcyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvck1lc3NhZ2UgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2xhbmd1YWdlID0gdGhpcy5nZXRMYW5ndWFnZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldExhbmd1YWdlKCkge1xyXG4gICAgICAgIHJldHVybiAoUmVhY3RpdmVGb3JtQ29uZmlnLmkxOG4gJiYgUmVhY3RpdmVGb3JtQ29uZmlnLmkxOG4ubGFuZ3VhZ2UpID8gUmVhY3RpdmVGb3JtQ29uZmlnLmkxOG4ubGFuZ3VhZ2UgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRFcnJvck1lc3NhZ2UoZXJyb3JPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sIGtleU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChlcnJvck9iamVjdFtrZXlOYW1lXVtNRVNTQUdFXSlcclxuICAgICAgICAgICAgcmV0dXJuIGVycm9yT2JqZWN0W2tleU5hbWVdW01FU1NBR0VdO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHByb2Nlc3NFeHByZXNzaW9uKHByb3BOYW1lOiBzdHJpbmcsIG9wZXJhdGlvblR5cGU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzW3Byb3BOYW1lXSlcclxuICAgICAgICAgICAgZm9yICh2YXIgY29udHJvbEluZm8gb2YgdGhpc1twcm9wTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIGxldCBjb250cm9sID0gY29udHJvbEluZm8uaXNSb290ID8gQXBwbGljYXRpb25VdGlsLmdldENvbnRyb2woY29udHJvbEluZm8uY29udHJvbFBhdGgsIEFwcGxpY2F0aW9uVXRpbC5nZXRSb290Rm9ybUdyb3VwKHRoaXMpKSA6IEFwcGxpY2F0aW9uVXRpbC5nZXRGb3JtQ29udHJvbChjb250cm9sSW5mby5jb250cm9sUGF0aCwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYXRpb25UeXBlID09IFwiZGlzYWJsZWRcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5leGVjdXRlRXhwcmVzc2lvbihjb250cm9sSW5mby5jb25kaXRpb25hbEV4cHJlc3Npb24sIGNvbnRyb2wpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5kaXNhYmxlKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5lbmFibGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvblR5cGUgPT0gXCJiaW5kRXJyb3JcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5iaW5kRXJyb3IoKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChvcGVyYXRpb25UeXBlID09IFwiYmluZENsYXNzTmFtZVwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLmJpbmRDbGFzc05hbWUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGV4ZWN1dGVFeHByZXNzaW9uKGV4cHJlc3Npb246IEZ1bmN0aW9uLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBCb29sZWFuIHtcclxuICAgICAgICByZXR1cm4gZXhwcmVzc2lvbi5jYWxsKGNvbnRyb2wucGFyZW50W01PREVMX0lOU1RBTkNFXSwgY29udHJvbCwgQXBwbGljYXRpb25VdGlsLmdldFBhcmVudE1vZGVsSW5zdGFuY2VWYWx1ZSh0aGlzKSwgY29udHJvbC5wYXJlbnRbTU9ERUxfSU5TVEFOQ0VdKVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSBcIlwiID8gdmFsdWUgOiBcIlwiO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|