@mediusinc/mng-commons 5.3.0-rc.3 → 5.3.0-rc.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/core/data-list/data-list.model.d.ts +1 -1
  2. package/core/data-providers/lookup.data-provider.d.ts +5 -5
  3. package/core/descriptors/lookup.descriptor.d.ts +3 -3
  4. package/core/descriptors/table.descriptor.d.ts +1 -1
  5. package/esm2022/core/data-list/data-list-params-helpers.mjs +1 -1
  6. package/esm2022/core/data-list/data-list.model.mjs +1 -1
  7. package/esm2022/core/data-providers/lookup.data-provider.mjs +1 -1
  8. package/esm2022/core/descriptors/lookup.descriptor.mjs +1 -1
  9. package/esm2022/core/descriptors/table.descriptor.mjs +1 -1
  10. package/esm2022/filter/descriptors/filter-lookup.descriptor.mjs +60 -2
  11. package/esm2022/filter/descriptors/filter.descriptor.mjs +118 -8
  12. package/esm2022/form/api/data-providers/lookup-data-provider.factory.mjs +17 -6
  13. package/esm2022/form/api/data-providers/lookup.data-provider.mjs +1 -1
  14. package/esm2022/form/components/autocomplete/autocomplete.component.mjs +1 -1
  15. package/esm2022/form/components/dropdown/dropdown.component.mjs +1 -1
  16. package/esm2022/model/helpers/model.mjs +1 -1
  17. package/esm2022/table/api/data-providers/table-data-provider.factory.mjs +16 -7
  18. package/esm2022/table/api/descriptors/column.descriptor.mjs +125 -4
  19. package/esm2022/table/api/descriptors/sort.descriptor.mjs +23 -1
  20. package/esm2022/table/api/descriptors/table-descriptor.factory.mjs +1 -1
  21. package/esm2022/table/api/descriptors/table.descriptor.mjs +424 -43
  22. package/esm2022/table/api/helpers/table-data-provider-descriptor-convert.mjs +7 -0
  23. package/esm2022/table/api/index.mjs +2 -1
  24. package/esm2022/table/api/models/table-columns.model.mjs +1 -1
  25. package/esm2022/table/components/table/table.component.mjs +4 -4
  26. package/esm2022/tableview/api/editor/descriptors/editor.descriptor.mjs +6 -6
  27. package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +2 -2
  28. package/esm2022/tableview/api/editor/descriptors/field-lookup.descriptor.mjs +1 -1
  29. package/esm2022/tableview/api/index.mjs +2 -1
  30. package/esm2022/tableview/api/tableview/data-providers/tableview-data-provider.factory.mjs +16 -7
  31. package/esm2022/tableview/api/tableview/descriptors/tableview-descriptor.factory.mjs +1 -1
  32. package/esm2022/tableview/api/tableview/descriptors/tableview.descriptor.mjs +5 -5
  33. package/esm2022/tableview/api/tableview/helpers/tableview-data-provider-descriptor-convert.mjs +7 -0
  34. package/esm2022/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +1 -1
  35. package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
  36. package/fesm2022/mediusinc-mng-commons-filter.mjs +176 -8
  37. package/fesm2022/mediusinc-mng-commons-filter.mjs.map +1 -1
  38. package/fesm2022/mediusinc-mng-commons-form-api.mjs +16 -5
  39. package/fesm2022/mediusinc-mng-commons-form-api.mjs.map +1 -1
  40. package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
  41. package/fesm2022/mediusinc-mng-commons-model.mjs.map +1 -1
  42. package/fesm2022/mediusinc-mng-commons-table-api.mjs +591 -52
  43. package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
  44. package/fesm2022/mediusinc-mng-commons-table.mjs +3 -3
  45. package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
  46. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +32 -17
  47. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
  48. package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
  49. package/filter/descriptors/filter-lookup.descriptor.d.ts +70 -12
  50. package/filter/descriptors/filter.descriptor.d.ts +116 -5
  51. package/form/api/data-providers/lookup-data-provider.factory.d.ts +16 -12
  52. package/form/api/data-providers/lookup.data-provider.d.ts +5 -5
  53. package/form/components/autocomplete/autocomplete.component.d.ts +1 -1
  54. package/form/components/dropdown/dropdown.component.d.ts +1 -1
  55. package/model/helpers/model.d.ts +1 -1
  56. package/package.json +1 -1
  57. package/table/api/data-providers/table-data-provider.factory.d.ts +9 -5
  58. package/table/api/descriptors/column.descriptor.d.ts +126 -5
  59. package/table/api/descriptors/sort.descriptor.d.ts +22 -0
  60. package/table/api/descriptors/table-descriptor.factory.d.ts +8 -4
  61. package/table/api/descriptors/table.descriptor.d.ts +421 -27
  62. package/table/api/helpers/table-data-provider-descriptor-convert.d.ts +20 -0
  63. package/table/api/index.d.ts +1 -0
  64. package/table/api/models/table-columns.model.d.ts +6 -6
  65. package/table/components/column-filter/column-filter.component.d.ts +1 -1
  66. package/table/components/filter/filter-form/filter-form.component.d.ts +1 -1
  67. package/tableview/action/components/localization/data-language-dropdown.component.d.ts +1 -1
  68. package/tableview/api/editor/descriptors/editor.descriptor.d.ts +11 -11
  69. package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +1 -1
  70. package/tableview/api/editor/descriptors/field-lookup.descriptor.d.ts +12 -12
  71. package/tableview/api/index.d.ts +1 -0
  72. package/tableview/api/tableview/data-providers/tableview-data-provider.factory.d.ts +9 -5
  73. package/tableview/api/tableview/descriptors/tableview-descriptor.factory.d.ts +10 -6
  74. package/tableview/api/tableview/descriptors/tableview.descriptor.d.ts +17 -17
  75. package/tableview/api/tableview/helpers/tableview-data-provider-descriptor-convert.d.ts +20 -0
  76. package/version-info.json +6 -6
@@ -4,7 +4,7 @@ export interface DataListParams<Sorts = string, Filters extends keyof any = stri
4
4
  limit?: number;
5
5
  sort?: DataListSort<Sorts>[];
6
6
  search?: string;
7
- filters?: DataListFiltersType<Filters>;
7
+ filters?: Partial<DataListFiltersType<Filters>>;
8
8
  }
9
9
  export interface DataListSort<Property = string> {
10
10
  property: Property;
@@ -2,9 +2,9 @@ import { DataListParams } from '../data-list/data-list.model';
2
2
  import { ItemOrObservable } from '../helpers/type-helpers';
3
3
  import { ClassOptType, ServiceClassOptType } from '../models/class-service.model';
4
4
  import { IDataProvider } from './base.data-provider';
5
- export type LookupDataProviderLookupFnType<ModelType = any, ServiceType = undefined, ReturnType = ItemOrObservable<Array<ModelType>>> = (params: DataListParams | undefined, service: ServiceType, search?: string) => ReturnType;
6
- export interface ILookupDataProviderLookup<ModelType, ServiceType> {
7
- lookup: LookupDataProviderLookupFnType<ModelType, ServiceType>;
8
- withLookup(fn?: LookupDataProviderLookupFnType<ModelType, ServiceType>): this;
5
+ export type LookupDataProviderLookupFnType<Model = any, Service = undefined, Sorts = keyof Model, Filters extends keyof any = keyof Model, ReturnType = ItemOrObservable<Array<Model>>> = (params: DataListParams<Sorts, Filters> | undefined, service: Service, search?: string) => ReturnType;
6
+ export interface ILookupDataProviderLookup<Model, Service, Sorts = keyof Model, Filters extends keyof any = keyof Model> {
7
+ lookup: LookupDataProviderLookupFnType<Model, Service, Sorts, Filters>;
8
+ withLookup(fn?: LookupDataProviderLookupFnType<Model, Service, Sorts, Filters>): this;
9
9
  }
10
- export type ILookupDataProvider<ModelType = any, ServiceType = any, CT = ClassOptType<ModelType>, ST = ServiceClassOptType<ServiceType>> = IDataProvider<ModelType, ServiceType, CT, ST> & ILookupDataProviderLookup<ModelType, ServiceType>;
10
+ export type ILookupDataProvider<Model = any, Service = any, Sorts = keyof Model, Filters extends keyof any = keyof Model, ModelClass = ClassOptType<Model>, ServiceClass = ServiceClassOptType<Service>> = IDataProvider<Model, Service, ModelClass, ServiceClass> & ILookupDataProviderLookup<Model, Service, Sorts, Filters>;
@@ -1,12 +1,12 @@
1
1
  import { ILookupDataProvider, LookupDataProviderLookupFnType } from '../data-providers/lookup.data-provider';
2
- export interface ILookupDescriptor<Model, Service = any> {
2
+ export interface ILookupDescriptor<Model, Service = any, Sorts = keyof Model, Filters extends keyof any = keyof Model> {
3
3
  optionsLabelProperty?: string;
4
4
  optionsValueProperty?: string;
5
5
  optionsTrackProperty?: string;
6
- dataProvider: ILookupDataProvider<Model, Service>;
6
+ dataProvider: ILookupDataProvider<Model, Service, Sorts, Filters>;
7
7
  withOptionsLabelProperty(property: keyof Model): this;
8
8
  withOptionsLabelPropertyUnsafe(property: string): this;
9
9
  withOptionsTrackProperty(property: keyof Model): this;
10
10
  withOptionsTrackPropertyUnsafe(property: string): this;
11
- withLookup(lookup: LookupDataProviderLookupFnType<Model, Service>): this;
11
+ withLookup(lookup: LookupDataProviderLookupFnType<Model, Service, Sorts, Filters>): this;
12
12
  }
@@ -5,5 +5,5 @@ export interface ITableDescriptor<TableModel, SortProperty, FilterProperty> {
5
5
  model: IModelDescriptor<TableModel>;
6
6
  withDefaultSortUnsafe(property: string, ascending?: boolean, order?: number, enabled?: boolean): this;
7
7
  withSortUnsafe(property: string, isDefault: boolean, ascending?: boolean): this;
8
- addFilterFromColumnDescriptorUnsafe<ColumnModel, ColumnValue>(column: IColumnDescriptor<ColumnModel, TableModel, ColumnValue>, forceSimple: boolean): IFilterDescriptor<any, TableModel>;
8
+ addFilterFromColumnDescriptorUnsafe<FilterModel>(column: IColumnDescriptor<FilterModel, TableModel, any>, forceSimple: boolean): IFilterDescriptor<any, TableModel>;
9
9
  }
@@ -417,4 +417,4 @@ export function dataListParamsFilterValueToUrlString(value, allowNull = false) {
417
417
  }
418
418
  return String(value);
419
419
  }
420
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saXN0LXBhcmFtcy1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvZGF0YS1saXN0L2RhdGEtbGlzdC1wYXJhbXMtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBR3JEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUFDLEtBQXlCO0lBQ25FLE1BQU0sTUFBTSxHQUFtQixFQUFFLENBQUM7SUFFbEMsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxPQUFPLEtBQUssQ0FBQyxZQUFZLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDekMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO0lBQ3ZDLENBQUM7U0FBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzVFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdkUsTUFBTSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQzVELE1BQU0sTUFBTSxHQUFtQixFQUFFLENBQUM7WUFDbEMsTUFBTSxXQUFXLEdBQWdFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFtQixDQUFDLENBQUM7WUFDdEgsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDcEMsTUFBTSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUM1QyxNQUFNLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFDeEQsQ0FBQztpQkFBTSxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO2dCQUNqQyxNQUFNLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUM7Z0JBQ3pDLE1BQU0sQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQztZQUNyRCxDQUFDO1lBQ0QsT0FBTyxFQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFDLENBQUM7UUFDbkMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSx3QkFBd0IsQ0FDcEMsTUFBZ0MsRUFDaEMsV0FBNEM7SUFDeEMsS0FBSyxFQUFFLEVBQUU7SUFDVCxNQUFNLEVBQUUsQ0FBQztDQUNaO0lBRUQsTUFBTSxTQUFTLEdBQVcsRUFBRSxDQUFDO0lBRTdCLElBQUksTUFBTSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNuRCxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUN0QyxDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3RELFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3hDLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDdEQsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbkMsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN0RSxJQUNJLFFBQVEsRUFBRSxJQUFJLElBQUksSUFBSTtZQUN0QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUM3QixRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUMzQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUFDLElBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsRUFDakosQ0FBQztZQUNDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RCxDQUFDO0lBQ0wsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNwQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBUSxDQUFDLENBQWlCLENBQUMsQ0FBQztZQUN2RCxNQUFNLGFBQWEsR0FBRyxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBaUIsQ0FBQyxDQUFDO1lBQzdELElBQ0ksYUFBYTtnQkFDYixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO29CQUNoQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7b0JBQ2hDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTTtvQkFDdkQsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUU7d0JBQ2pDLE1BQU0sS0FBSyxHQUFJLFdBQVcsQ0FBQyxLQUF3QyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUN6RSxJQUFJLEtBQUssWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUk7NEJBQUUsT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDOzs0QkFDbEYsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDO29CQUM1QixDQUFDLENBQUMsQ0FBQyxJQUFJLGdCQUFnQjtvQkFDdkIsYUFBYSxDQUFDLEtBQUssS0FBSyxXQUFXLENBQUMsS0FBSyxDQUFDO2dCQUM5QyxhQUFhLENBQUMsU0FBUyxLQUFLLFdBQVcsQ0FBQyxTQUFTO2dCQUNqRCxDQUFDLGFBQWEsQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQyxFQUNqRixDQUFDO2dCQUNDLE9BQU87WUFDWCxDQUFDO1lBRUQsSUFDSSxXQUFXLENBQUMsS0FBSyxJQUFJLElBQUk7Z0JBQ3pCLGFBQWEsRUFBRSxLQUFLLElBQUksSUFBSTtnQkFDNUIsV0FBVyxDQUFDLFNBQVMsS0FBSyxlQUFlLENBQUMsTUFBTTtnQkFDaEQsV0FBVyxDQUFDLFNBQVMsS0FBSyxlQUFlLENBQUMsWUFBWSxFQUN4RCxDQUFDO2dCQUNDLE9BQU87WUFDWCxDQUFDO1lBRUQsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLCtCQUErQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0QsSUFBSSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDcEIscUJBQXFCO1FBQ3JCLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO2FBQ3hCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNULFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRywrQkFBK0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSwrQkFBK0IsQ0FDM0MsTUFBc0MsRUFDdEMsV0FBMkM7SUFDdkMsS0FBSyxFQUFFLEVBQUU7SUFDVCxNQUFNLEVBQUUsQ0FBQztDQUNaO0lBRUQsTUFBTSxNQUFNLEdBQW1DO1FBQzNDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxLQUFLO1FBQ3JDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNO1FBQ3hDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNO1FBQ3hDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxDQUFDLENBQUM7S0FDM0QsQ0FBQztJQUVGLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsRUFBa0MsQ0FBQztRQUNwRCxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBUSxDQUFDLEdBQWMsQ0FBQyxHQUFHLEVBQUMsR0FBSSxLQUF3QixFQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pJLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87WUFBRSxNQUFNLENBQUMsT0FBTyxHQUFHLEVBQWtDLENBQUM7UUFDekUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUN0RCxJQUFJLE1BQU0sQ0FBQyxPQUFRLENBQUMsR0FBYyxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ2hELE1BQU0sQ0FBQyxPQUFRLENBQUMsR0FBYyxDQUFDLEdBQUcsRUFBQyxHQUFJLEtBQXdCLEVBQUMsQ0FBQztZQUNyRSxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxNQUFpQztJQUMxRSxPQUFPLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDdkMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUMvSCxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSwrQkFBK0IsQ0FDM0MsTUFBZ0QsRUFDaEQsR0FBWSxFQUNaLFNBQVMsR0FBRyxLQUFLO0lBRWpCLE1BQU0sV0FBVyxHQUFHLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQyxPQUFPLDhCQUE4QixDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsOEJBQThCLENBQUMsV0FBNEIsRUFBRSxTQUFTLEdBQUcsS0FBSztJQUMxRixNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN4SixNQUFNLFNBQVMsR0FBRyxXQUFXLEVBQUUsU0FBUyxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUM7SUFDbkUsSUFDSSxXQUFXLEtBQUssU0FBUztRQUN6QixDQUFDLENBQUMsU0FBUyxJQUFJLFNBQVMsS0FBSyxRQUFRLElBQUksU0FBUyxLQUFLLGNBQWMsSUFBSSxXQUFXLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztRQUNuRyxDQUFDLE9BQU8sV0FBVyxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFDeEUsQ0FBQztRQUNDLDhDQUE4QztRQUM5QyxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxTQUFTLEtBQUssZUFBZSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ25ILE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyx3REFBd0QsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDaEgsQ0FBQztJQUVELElBQUksQ0FBQyxTQUFTLEtBQUssZUFBZSxDQUFDLEVBQUUsSUFBSSxTQUFTLEtBQUssZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksa0JBQWtCLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdkosTUFBTSxJQUFJLG9CQUFvQixDQUFDLHFCQUFxQixTQUFTLDhCQUE4QixXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNwSCxDQUFDO0lBRUQsSUFBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1FBQ3BKLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxxQkFBcUIsU0FBUyx1QkFBdUIsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxTQUFTLEtBQUssZUFBZSxDQUFDLE1BQU0sSUFBSSxXQUFXLENBQUMsU0FBUyxLQUFLLGVBQWUsQ0FBQyxZQUFZLENBQUM7SUFDekgsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksb0NBQW9DLENBQUMsa0JBQWtCLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO0lBRWpJLE9BQU8sR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxhQUFhLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsR0FBRyxZQUFZLEVBQUUsQ0FBQztBQUM5SyxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxTQUFpQjtJQUMxRCxNQUFNLE1BQU0sR0FBbUIsRUFBRSxDQUFDO0lBRWxDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLEVBQUUsRUFBRTtRQUMvRCxJQUFJLFdBQVcsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUMxQixNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsYUFBYSxDQUFDO1lBQzlCLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDeEIsQ0FBQztRQUNMLENBQUM7YUFBTSxJQUFJLFdBQVcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNsQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsYUFBYSxDQUFDO1lBQy9CLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM1QyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDekIsQ0FBQztRQUNMLENBQUM7YUFBTSxJQUFJLFdBQVcsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUM3QixNQUFNLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQztRQUNsQyxDQUFDO2FBQU0sSUFBSSxXQUFXLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDaEMsSUFBSSxPQUFPLGFBQWEsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDM0MsTUFBTSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMzQyxPQUFPLEVBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBaUIsRUFBRSxTQUFTLEVBQUUsU0FBUyxLQUFLLE1BQU0sRUFBQyxDQUFDO2dCQUNoRyxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7aUJBQU0sQ0FBQztnQkFDSixNQUFNLElBQUksb0JBQW9CLENBQUMsb0NBQW9DLFdBQVcsa0NBQWtDLENBQUMsQ0FBQztZQUN0SCxDQUFDO1FBQ0wsQ0FBQzthQUFNLElBQUksT0FBTyxhQUFhLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDM0MsSUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM3QixpQ0FBaUM7Z0JBQ2pDLE9BQU87WUFDWCxDQUFDO1lBRUQsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3QyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFFaEIsaUJBQWlCO1lBQ2pCLElBQUksYUFBYSxHQUF3QixTQUFTLENBQUM7WUFDbkQsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDakUsYUFBYSxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQztZQUNwRCxDQUFDO1lBRUQsYUFBYTtZQUNiLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQztZQUNqSixPQUFPLEVBQUUsQ0FBQztZQUVWLE1BQU0sS0FBSyxHQUFHLFNBQVMsS0FBSyxlQUFlLENBQUMsTUFBTSxJQUFJLFNBQVMsS0FBSyxlQUFlLENBQUMsWUFBWSxDQUFDO1lBRWpHLFFBQVE7WUFDUixJQUFJLEtBQUssR0FBeUMsU0FBUyxDQUFDO1lBQzVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDVCxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3pCLE9BQU87Z0JBQ1gsQ0FBQztnQkFFRCxJQUFJLE9BQU8sS0FBSyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNyQyxLQUFLLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNqQyxDQUFDO3FCQUFNLElBQUksT0FBTyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDdEMsd0RBQXdEO29CQUN4RCxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckUsQ0FBQztnQkFFRCxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksU0FBUyxLQUFLLGVBQWUsQ0FBQyxNQUFNLElBQUksU0FBUyxLQUFLLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDNUcsNkRBQTZEO29CQUM3RCxPQUFPO2dCQUNYLENBQUM7Z0JBRUQsSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFLENBQUM7b0JBQ25CLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ2pCLENBQUM7Z0JBRUQsSUFBSSxDQUFDLFNBQVMsS0FBSyxlQUFlLENBQUMsRUFBRSxJQUFJLFNBQVMsS0FBSyxlQUFlLENBQUMsS0FBSyxJQUFJLFNBQVMsS0FBSyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ2xKLElBQUksUUFBUSxHQUFhLEVBQUUsQ0FBQztvQkFDNUIsaUNBQWlDO29CQUNqQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQzFCLE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQzt3QkFDNUIsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO3dCQUN0QixJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQyw4Q0FBOEM7d0JBQzFFLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQyxDQUFDLDhCQUE4Qjt3QkFDeEQsSUFBSSxzQkFBc0IsR0FBRyxLQUFLLENBQUMsQ0FBQyx5RkFBeUY7d0JBRTdILEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7NEJBQ3BDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFFbkIsc0RBQXNEOzRCQUN0RCxrQkFBa0I7NEJBQ2xCLHlGQUF5Rjs0QkFDekYsb0hBQW9IOzRCQUNwSCx3RUFBd0U7NEJBQ3hFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsWUFBWSxJQUFJLHNCQUFzQixJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQ0FDNUUsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQ0FDMUIsWUFBWSxHQUFHLEVBQUUsQ0FBQztnQ0FDbEIsWUFBWSxHQUFHLEtBQUssQ0FBQztnQ0FDckIsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO2dDQUMvQixjQUFjLEdBQUcsS0FBSyxDQUFDOzRCQUMzQixDQUFDO2lDQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dDQUNsQix3QkFBd0I7Z0NBQ3hCLElBQUksY0FBYyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO29DQUNqRSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsK0NBQStDO29DQUNsRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLDZCQUE2QjtnQ0FDdEMsQ0FBQztnQ0FDRCxzRkFBc0Y7cUNBQ2pGLElBQUksY0FBYyxFQUFFLENBQUM7b0NBQ3RCLHNCQUFzQixHQUFHLElBQUksQ0FBQztnQ0FDbEMsQ0FBQztnQ0FDRCxrQkFBa0I7cUNBQ2IsSUFBSSxZQUFZLEVBQUUsQ0FBQztvQ0FDcEIsWUFBWSxJQUFJLENBQUMsQ0FBQztnQ0FDdEIsQ0FBQztnQ0FDRCw4REFBOEQ7cUNBQ3pELENBQUM7b0NBQ0YsWUFBWSxHQUFHLEVBQUUsQ0FBQztvQ0FDbEIsWUFBWSxHQUFHLElBQUksQ0FBQztvQ0FDcEIsY0FBYyxHQUFHLElBQUksQ0FBQztnQ0FDMUIsQ0FBQzs0QkFDTCxDQUFDO2lDQUFNLENBQUM7Z0NBQ0osSUFBSSxzQkFBc0IsRUFBRSxDQUFDO29DQUN6QixPQUFPO2dDQUNYLENBQUM7Z0NBRUQsWUFBWSxHQUFHLElBQUksQ0FBQztnQ0FDcEIsWUFBWSxJQUFJLENBQUMsQ0FBQzs0QkFDdEIsQ0FBQzt3QkFDTCxDQUFDO3dCQUVELElBQUksWUFBWSxJQUFJLENBQUMsc0JBQXNCLElBQUksY0FBYyxFQUFFLENBQUM7NEJBQzVELE9BQU87d0JBQ1gsQ0FBQzt3QkFFRCw0Q0FBNEM7d0JBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7d0JBRXJDLFFBQVEsR0FBRyxNQUFNLENBQUM7b0JBQ3RCLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDaEMsQ0FBQztvQkFFRCxJQUFJLFNBQVMsS0FBSyxlQUFlLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ2pFLE9BQU87b0JBQ1gsQ0FBQztvQkFFRCxLQUFLLEdBQUcsUUFBUSxDQUFDO2dCQUNyQixDQUFDO2dCQUVELElBQUksQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNyRywyQ0FBMkM7b0JBQzNDLE9BQU87Z0JBQ1gsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDSixhQUFhLEdBQUcsU0FBUyxDQUFDO1lBQzlCLENBQUM7WUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNsQixNQUFNLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUN4QixDQUFDO1lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUEyQixDQUFDLEdBQUcsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBQyxDQUFDO1FBQ3JILENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBcUQsTUFBc0M7SUFDekgsTUFBTSxJQUFJLEdBQW1DO1FBQ3pDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtRQUNyQixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7UUFDbkIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO0tBQ3hCLENBQUM7SUFFRixJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDdkUsTUFBTSxXQUFXLEdBQUcsS0FBdUIsQ0FBQztZQUM1QyxPQUFPO2dCQUNILEdBQUcsR0FBRztnQkFDTixDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNILEdBQUcsV0FBVztvQkFDZCxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLO2lCQUNyRTthQUN0QixDQUFDO1FBQ04sQ0FBQyxFQUFFLEVBQWtDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLG9DQUFvQyxDQUFDLEtBQWMsRUFBRSxTQUFTLEdBQUcsS0FBSztJQUNsRixJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksU0FBUztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQy9DLElBQUksS0FBSyxJQUFJLElBQUk7UUFBRSxNQUFNLElBQUksb0JBQW9CLENBQUMsbURBQW1ELENBQUMsQ0FBQyxDQUFDLHlEQUF5RDtJQUNqSyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3BCLE9BQU8sS0FBSzthQUNQLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLG9DQUFvQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQzthQUM1RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNGLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVCLElBQUksS0FBSyxZQUFZLElBQUk7WUFBRSxPQUFPLGVBQWUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7YUFDN0UsQ0FBQztZQUNGLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UGFyYW1zfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1RhYmxlTGF6eUxvYWRFdmVudH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5cbmltcG9ydCB7Q29tbW9uc0ludGVybmFsRXJyb3J9IGZyb20gJy4uL2Vycm9yL2Vycm9yLm1vZGVsJztcbmltcG9ydCB7ZGF0ZVRvSXNvU3RyaW5nfSBmcm9tICcuLi9oZWxwZXJzL2RhdGUnO1xuaW1wb3J0IHtEYXRhTGlzdEZpbHRlciwgRGF0YUxpc3RGaWx0ZXJWYWx1ZVR5cGUsIERhdGFMaXN0RmlsdGVyc1R5cGUsIERhdGFMaXN0UGFyYW1zfSBmcm9tICcuL2RhdGEtbGlzdC5tb2RlbCc7XG5pbXBvcnQge0ZpbHRlck1hdGNoTW9kZX0gZnJvbSAnLi9maWx0ZXItbWF0Y2gubW9kZWwnO1xuaW1wb3J0IHtDb21tb25zRmlsdGVyTWV0YWRhdGF9IGZyb20gJy4vZmlsdGVyLW1ldGFkYXRhLm1vZGVsJztcblxuLyoqXG4gKiBDb252ZXJ0cyBhIFRhYmxlTGF6eUxvYWRFdmVudCB0byBEYXRhTGlzdFBhcmFtcy5cbiAqXG4gKiBAcGFyYW0ge1RhYmxlTGF6eUxvYWRFdmVudH0gZXZlbnQgLSBUaGUgZXZlbnQgY29udGFpbmluZyB0aGUgZGF0YSB0byBjb252ZXJ0LlxuICogQHJldHVybiB7RGF0YUxpc3RQYXJhbXN9IC0gVGhlIGNvbnZlcnRlZCBEYXRhTGlzdFBhcmFtcyBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVGFibGVMb2FkVG9EYXRhTGlzdFBhcmFtcyhldmVudDogVGFibGVMYXp5TG9hZEV2ZW50KTogRGF0YUxpc3RQYXJhbXMge1xuICAgIGNvbnN0IHBhcmFtczogRGF0YUxpc3RQYXJhbXMgPSB7fTtcblxuICAgIGlmIChldmVudC5maXJzdCAhPSBudWxsKSB7XG4gICAgICAgIHBhcmFtcy5vZmZzZXQgPSBldmVudC5maXJzdDtcbiAgICB9XG4gICAgaWYgKGV2ZW50LnJvd3MgIT0gbnVsbCkge1xuICAgICAgICBwYXJhbXMubGltaXQgPSBldmVudC5yb3dzO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXZlbnQuZ2xvYmFsRmlsdGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICBwYXJhbXMuc2VhcmNoID0gZXZlbnQuZ2xvYmFsRmlsdGVyO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShldmVudC5nbG9iYWxGaWx0ZXIpICYmIGV2ZW50Lmdsb2JhbEZpbHRlci5sZW5ndGggPiAwKSB7XG4gICAgICAgIHBhcmFtcy5zZWFyY2ggPSBldmVudC5nbG9iYWxGaWx0ZXIuam9pbignLCcpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50Lm11bHRpU29ydE1ldGEpICYmIGV2ZW50Lm11bHRpU29ydE1ldGEubGVuZ3RoID4gMCkge1xuICAgICAgICBwYXJhbXMuc29ydCA9IGV2ZW50Lm11bHRpU29ydE1ldGEubWFwKG0gPT4gKHtwcm9wZXJ0eTogbS5maWVsZCwgYXNjZW5kaW5nOiBtLm9yZGVyID49IDB9KSk7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmZpbHRlcnMpIHtcbiAgICAgICAgcGFyYW1zLmZpbHRlcnMgPSBPYmplY3Qua2V5cyhldmVudC5maWx0ZXJzKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXI6IERhdGFMaXN0RmlsdGVyID0ge307XG4gICAgICAgICAgICBjb25zdCBldmVudEZpbHRlcjogQ29tbW9uc0ZpbHRlck1ldGFkYXRhIHwgQ29tbW9uc0ZpbHRlck1ldGFkYXRhW10gfCB1bmRlZmluZWQgPSBldmVudC5maWx0ZXJzPy5ba2V5IGFzIGtleW9mIG9iamVjdF07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShldmVudEZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWUgPSBldmVudEZpbHRlclswXS52YWx1ZTtcbiAgICAgICAgICAgICAgICBmaWx0ZXIubWF0Y2hNb2RlID0gZXZlbnRGaWx0ZXJbMF0ubWF0Y2hNb2RlO1xuICAgICAgICAgICAgICAgIGZpbHRlci5jYXNlU2Vuc2l0aXZlID0gZXZlbnRGaWx0ZXJbMF0uY2FzZVNlbnNpdGl2ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRGaWx0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZSA9IGV2ZW50RmlsdGVyLnZhbHVlO1xuICAgICAgICAgICAgICAgIGZpbHRlci5tYXRjaE1vZGUgPSBldmVudEZpbHRlci5tYXRjaE1vZGU7XG4gICAgICAgICAgICAgICAgZmlsdGVyLmNhc2VTZW5zaXRpdmUgPSBldmVudEZpbHRlci5jYXNlU2Vuc2l0aXZlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsuLi5hY2MsIFtrZXldOiBmaWx0ZXJ9O1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gcGFyYW1ldGVycyB0byBVUkwgcXVlcnkgcGFyYW1ldGVycy5cbiAqIFNvcnRzIGFyZSBmb3JtYXR0ZWQgaW4gTWVkaXVzIGRhdGEgQVBJIHNvcnQgcXVlcnkgbGFuZ3VhZ2U6IGBhc2M6cHJvcDEsZGVzYzpwcm9wMmAsIC4uLlxuICogRmlsdGVyIGtleXMgYXJlIFwiZmxhdHRlbmVkXCIgaW4gdGhlIG5ldyBvYmplY3QsIHZhbHVlcyBhcmUgZm9ybWF0dGVkIGluIE1lZGl1cyBkYXRhIEFQSSBmaWx0ZXIgcXVlcnkgbGFuZ3VhZ2U6IGBjczplcTphc2RgLCBgaW46YXNkLHF3ZWAsIGBleGAsIC4uLlxuICpcbiAqIEBwYXJhbSB7RGF0YUxpc3RQYXJhbXN9IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIGNvbnZlcnQuXG4gKiBAcGFyYW0ge0RhdGFMaXN0UGFyYW1zfG51bGx9IGRlZmF1bHRzIC0gVGhlIGRlZmF1bHQgcGFyYW1ldGVycyB1c2VkIGlmIG5vIG1hdGNoaW5nIHByb3BlcnR5IGluIHBhcmFtcyBpcyBhdmFpbGFibGUuIERlZmF1bHRzIHRvIHsgbGltaXQ6IDI1LCBvZmZzZXQ6IDAgfSBpZiBub3QgcHJvdmlkZWQuXG4gKiBAcmV0dXJucyB7UGFyYW1zfSAtIFRoZSBVUkwgcXVlcnkgcGFyYW1ldGVycyBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRhTGlzdFBhcmFtc1RvVXJsUXVlcnkoXG4gICAgcGFyYW1zOiBEYXRhTGlzdFBhcmFtczxhbnksIGFueT4sXG4gICAgZGVmYXVsdHM6IERhdGFMaXN0UGFyYW1zPGFueSwgYW55PiB8IG51bGwgPSB7XG4gICAgICAgIGxpbWl0OiAyNSxcbiAgICAgICAgb2Zmc2V0OiAwXG4gICAgfVxuKTogUGFyYW1zIHtcbiAgICBjb25zdCB1cmxQYXJhbXM6IFBhcmFtcyA9IHt9O1xuXG4gICAgaWYgKHBhcmFtcy5saW1pdCAmJiBwYXJhbXMubGltaXQgIT09IGRlZmF1bHRzPy5saW1pdCkge1xuICAgICAgICB1cmxQYXJhbXNbJ2xpbWl0J10gPSBwYXJhbXMubGltaXQ7XG4gICAgfVxuICAgIGlmIChwYXJhbXMub2Zmc2V0ICYmIHBhcmFtcy5vZmZzZXQgIT09IGRlZmF1bHRzPy5vZmZzZXQpIHtcbiAgICAgICAgdXJsUGFyYW1zWydvZmZzZXQnXSA9IHBhcmFtcy5vZmZzZXQ7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuc2VhcmNoICYmIHBhcmFtcy5zZWFyY2ggIT09IGRlZmF1bHRzPy5zZWFyY2gpIHtcbiAgICAgICAgdXJsUGFyYW1zWydxJ10gPSBwYXJhbXMuc2VhcmNoO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLnNvcnQgJiYgQXJyYXkuaXNBcnJheShwYXJhbXMuc29ydCkgJiYgcGFyYW1zLnNvcnQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBkZWZhdWx0cz8uc29ydCA9PSBudWxsIHx8XG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShkZWZhdWx0cy5zb3J0KSB8fFxuICAgICAgICAgICAgZGVmYXVsdHMuc29ydC5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHBhcmFtcy5zb3J0Lmxlbmd0aCAhPT0gZGVmYXVsdHMuc29ydC5sZW5ndGggfHxcbiAgICAgICAgICAgIGRlZmF1bHRzLnNvcnQuc29tZSgoZHMsIGlkeCkgPT4gZHMucHJvcGVydHkgIT09IHBhcmFtcy5zb3J0IVtpZHhdLnByb3BlcnR5IHx8IChkcy5hc2NlbmRpbmcgPz8gdHJ1ZSkgIT09IChwYXJhbXMuc29ydCFbaWR4XS5hc2NlbmRpbmcgPz8gdHJ1ZSkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdXJsUGFyYW1zWydzb3J0J10gPSBkYXRhTGlzdFBhcmFtc1NvcnRUb1VybFF1ZXJ5KHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBhcmFtcy5maWx0ZXJzKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHBhcmFtcy5maWx0ZXJzKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1GaWx0ZXIgPSBwYXJhbXMuZmlsdGVycyFbayBhcyBrZXlvZiBvYmplY3RdO1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEZpbHRlciA9IGRlZmF1bHRzPy5maWx0ZXJzPy5bayBhcyBrZXlvZiBvYmplY3RdO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXIgJiZcbiAgICAgICAgICAgICAgICAoKEFycmF5LmlzQXJyYXkoZGVmYXVsdEZpbHRlci52YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShwYXJhbUZpbHRlci52YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlci52YWx1ZS5sZW5ndGggPT09IHBhcmFtRmlsdGVyLnZhbHVlLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVyLnZhbHVlLmV2ZXJ5KCh2LCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKHBhcmFtRmlsdGVyLnZhbHVlIGFzIEFycmF5PERhdGFMaXN0RmlsdGVyVmFsdWVUeXBlPilbaWR4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgdiBpbnN0YW5jZW9mIERhdGUpIHJldHVybiB2YWx1ZS5nZXRUaW1lKCkgPT09IHYuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gdmFsdWUgPT09IHY7XG4gICAgICAgICAgICAgICAgICAgIH0pKSB8fCAvLyBoYW5kbGUgYXJyYXlzXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXIudmFsdWUgPT09IHBhcmFtRmlsdGVyLnZhbHVlKSAmJlxuICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXIubWF0Y2hNb2RlID09PSBwYXJhbUZpbHRlci5tYXRjaE1vZGUgJiZcbiAgICAgICAgICAgICAgICAoZGVmYXVsdEZpbHRlci5jYXNlU2Vuc2l0aXZlID8/IGZhbHNlKSA9PT0gKHBhcmFtRmlsdGVyLmNhc2VTZW5zaXRpdmUgPz8gZmFsc2UpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBwYXJhbUZpbHRlci52YWx1ZSA9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlcj8udmFsdWUgPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIHBhcmFtRmlsdGVyLm1hdGNoTW9kZSAhPT0gRmlsdGVyTWF0Y2hNb2RlLkV4aXN0cyAmJlxuICAgICAgICAgICAgICAgIHBhcmFtRmlsdGVyLm1hdGNoTW9kZSAhPT0gRmlsdGVyTWF0Y2hNb2RlLkRvZXNOb3RFeGlzdFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1cmxQYXJhbXNba10gPSBkYXRhTGlzdFBhcmFtc0ZpbHRlcnNUb1VybFF1ZXJ5KHBhcmFtcywgaywgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdHM/LmZpbHRlcnMpIHtcbiAgICAgICAgLy8gYWRkIG90aGVyIGRlZmF1bHRzXG4gICAgICAgIGNvbnN0IHBhcmFtRmlsdGVyS2V5cyA9IHBhcmFtcy5maWx0ZXJzID8gT2JqZWN0LmtleXMocGFyYW1zLmZpbHRlcnMpIDogW107XG4gICAgICAgIE9iamVjdC5rZXlzKGRlZmF1bHRzLmZpbHRlcnMpXG4gICAgICAgICAgICAuZmlsdGVyKGsgPT4gcGFyYW1GaWx0ZXJLZXlzLmluZGV4T2YoaykgPCAwKVxuICAgICAgICAgICAgLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgdXJsUGFyYW1zW2tdID0gZGF0YUxpc3RQYXJhbXNGaWx0ZXJzVG9VcmxRdWVyeShkZWZhdWx0cywgayk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsUGFyYW1zO1xufVxuXG4vKipcbiAqIE1lcmdlcyB0aGUgcHJvdmlkZWQgcGFyYW1ldGVycyB3aXRoIGRlZmF1bHQgdmFsdWVzIGFuZCByZXR1cm5zIHRoZSBtZXJnZWQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7RGF0YUxpc3RQYXJhbXN9IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIG1lcmdlIHdpdGggZGVmYXVsdHMuXG4gKiBAcGFyYW0ge0RhdGFMaXN0UGFyYW1zfSBkZWZhdWx0cyAtIFRoZSBkZWZhdWx0IHZhbHVlcyB0byBtZXJnZSB3aXRoIHBhcmFtcyAob3B0aW9uYWwsIGRlZmF1bHQgaXMgeyBsaW1pdDogMjUsIG9mZnNldDogMCB9KS5cbiAqIEByZXR1cm5zIHtEYXRhTGlzdFBhcmFtc30gLSBUaGUgbWVyZ2VkIHBhcmFtZXRlcnMgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VEYXRhTGlzdFBhcmFtc1dpdGhEZWZhdWx0czxTb3J0cyA9IGFueSwgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IGFueT4oXG4gICAgcGFyYW1zOiBEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz4sXG4gICAgZGVmYXVsdHM6IERhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPiA9IHtcbiAgICAgICAgbGltaXQ6IDI1LFxuICAgICAgICBvZmZzZXQ6IDBcbiAgICB9XG4pOiBEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz4ge1xuICAgIGNvbnN0IG1lcmdlZDogRGF0YUxpc3RQYXJhbXM8U29ydHMsIEZpbHRlcnM+ID0ge1xuICAgICAgICBsaW1pdDogcGFyYW1zLmxpbWl0ID8/IGRlZmF1bHRzLmxpbWl0LFxuICAgICAgICBvZmZzZXQ6IHBhcmFtcy5vZmZzZXQgPz8gZGVmYXVsdHMub2Zmc2V0LFxuICAgICAgICBzZWFyY2g6IHBhcmFtcy5zZWFyY2ggPz8gZGVmYXVsdHMuc2VhcmNoLFxuICAgICAgICBzb3J0OiAocGFyYW1zLnNvcnQgPz8gZGVmYXVsdHMuc29ydCk/Lm1hcChzID0+ICh7Li4uc30pKVxuICAgIH07XG5cbiAgICBpZiAocGFyYW1zLmZpbHRlcnMpIHtcbiAgICAgICAgbWVyZ2VkLmZpbHRlcnMgPSB7fSBhcyBEYXRhTGlzdEZpbHRlcnNUeXBlPEZpbHRlcnM+O1xuICAgICAgICBPYmplY3QuZW50cmllcyhwYXJhbXMuZmlsdGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiAobWVyZ2VkLmZpbHRlcnMhW2tleSBhcyBGaWx0ZXJzXSA9IHsuLi4odmFsdWUgYXMgRGF0YUxpc3RGaWx0ZXIpfSkpO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdHMuZmlsdGVycykge1xuICAgICAgICBpZiAoIW1lcmdlZC5maWx0ZXJzKSBtZXJnZWQuZmlsdGVycyA9IHt9IGFzIERhdGFMaXN0RmlsdGVyc1R5cGU8RmlsdGVycz47XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGRlZmF1bHRzLmZpbHRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgaWYgKG1lcmdlZC5maWx0ZXJzIVtrZXkgYXMgRmlsdGVyc10gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG1lcmdlZC5maWx0ZXJzIVtrZXkgYXMgRmlsdGVyc10gPSB7Li4uKHZhbHVlIGFzIERhdGFMaXN0RmlsdGVyKX07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtZXJnZWQ7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHBhcmFtZXRlcnMgdG8gYSBVUkwgcXVlcnkgc3RyaW5nIGZvciBzb3J0aW5nLlxuICogU29ydHMgYXJlIGZvcm1hdHRlZCBpbiBNZWRpdXMgZGF0YSBBUEkgc29ydCBxdWVyeSBsYW5ndWFnZTogYGFzYzpwcm9wMSxkZXNjOnByb3AyYCwgLi4uXG4gKlxuICogQHBhcmFtIHtEYXRhTGlzdFBhcmFtc30gcGFyYW1zIC0gQW4gb3B0aW9uYWwgb2JqZWN0IGNvbnRhaW5pbmcgc29ydCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBVUkwgcXVlcnkgb3IgdW5kZWZpbmVkIGlmIG5vIHNvcnQgcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRhTGlzdFBhcmFtc1NvcnRUb1VybFF1ZXJ5KHBhcmFtcz86IERhdGFMaXN0UGFyYW1zPGFueSwgYW55Pik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHBhcmFtcyAmJiBBcnJheS5pc0FycmF5KHBhcmFtcy5zb3J0KVxuICAgICAgICA/IHBhcmFtcy5zb3J0Lm1hcChzID0+IGAke3MuYXNjZW5kaW5nID09PSB0cnVlIHx8IHMuYXNjZW5kaW5nID09PSB1bmRlZmluZWQgPyAnYXNjJyA6ICdkZXNjJ306JHtTdHJpbmcocy5wcm9wZXJ0eSl9YCkuam9pbignLCcpXG4gICAgICAgIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3BlY2lmaWMgZmlsdGVyIHBhcmFtZXRlciAoYnkga2V5KSBmcm9tIERhdGFMaXN0UGFyYW1zIG9iamVjdCB0byBhIFVSTCBxdWVyeSBzdHJpbmcuXG4gKiBGaWx0ZXIga2V5cyBhcmUgXCJmbGF0dGVuZWRcIiBpbiB0aGUgbmV3IG9iamVjdCwgdmFsdWVzIGFyZSBmb3JtYXR0ZWQgaW4gTWVkaXVzIGRhdGEgQVBJIGZpbHRlciBxdWVyeSBsYW5ndWFnZTogYGNzOmVxOmFzZGAsIGBpbjphc2QscXdlYCwgYGV4YCwgLi4uXG4gKlxuICogQHBhcmFtIHtEYXRhTGlzdFBhcmFtczxhbnksIEZpbHRlcnM+IHwgdW5kZWZpbmVkfSBwYXJhbXMgLSBUaGUgRGF0YUxpc3RQYXJhbXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZpbHRlcnMuXG4gKiBAcGFyYW0ge0ZpbHRlcnN9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGZpbHRlciB0byBjb252ZXJ0LlxuICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dOdWxsPWZhbHNlXSAtIEluZGljYXRlcyB3aGV0aGVyIHRvIGFsbG93IG51bGwgdmFsdWVzIGluIHRoZSBxdWVyeSBzdHJpbmcuXG4gKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gVGhlIFVSTCBxdWVyeSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzcGVjaWZpZWQgZmlsdGVyLCBvciB1bmRlZmluZWQgaWYgdGhlIGZpbHRlciBpcyBub3QgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRhTGlzdFBhcmFtc0ZpbHRlcnNUb1VybFF1ZXJ5PEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBzdHJpbmc+KFxuICAgIHBhcmFtczogRGF0YUxpc3RQYXJhbXM8YW55LCBGaWx0ZXJzPiB8IHVuZGVmaW5lZCxcbiAgICBrZXk6IEZpbHRlcnMsXG4gICAgYWxsb3dOdWxsID0gZmFsc2Vcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcGFyYW1GaWx0ZXIgPSBwYXJhbXM/LmZpbHRlcnM/LltrZXldO1xuICAgIHJldHVybiBkYXRhTGlzdFBhcmFtc0ZpbHRlclRvVXJsUXVlcnkocGFyYW1GaWx0ZXIsIGFsbG93TnVsbCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBmaWx0ZXIgdG8gYSBVUkwgcXVlcnkgc3RyaW5nLlxuICogRmlsdGVyIGtleXMgYXJlIFwiZmxhdHRlbmVkXCIgaW4gdGhlIG5ldyBvYmplY3QsIHZhbHVlcyBhcmUgZm9ybWF0dGVkIGluIE1lZGl1cyBkYXRhIEFQSSBmaWx0ZXIgcXVlcnkgbGFuZ3VhZ2U6IGBjczplcTphc2RgLCBgaW46YXNkLHF3ZWAsIGBleGAsIC4uLlxuICpcbiAqIEBwYXJhbSB7RGF0YUxpc3RGaWx0ZXJ9IHBhcmFtRmlsdGVyIC0gVGhlIGZpbHRlciBvYmplY3QgdG8gYmUgY29udmVydGVkLlxuICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dOdWxsPWZhbHNlXSAtIEluZGljYXRlcyB3aGV0aGVyIHRvIGFsbG93IG51bGwgdmFsdWVzIGluIHRoZSBmaWx0ZXIuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gLSBUaGUgZmlsdGVyIGNvbnZlcnRlZCB0byBhIFVSTCBxdWVyeSBzdHJpbmcsIG9yIHVuZGVmaW5lZCBpZiBubyBmaWx0ZXIgaXMgcHJvdmlkZWQgb3IgdGhlIGZpbHRlciBoYXMgZW1wdHkgb3IgaW52YWxpZCB2YWx1ZXMuXG4gKiBAdGhyb3dzIHtDb21tb25zSW50ZXJuYWxFcnJvcn0gLSBJZiB0aGUgZmlsdGVyIGhhcyBpbnZhbGlkIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGFMaXN0UGFyYW1zRmlsdGVyVG9VcmxRdWVyeShwYXJhbUZpbHRlcj86IERhdGFMaXN0RmlsdGVyLCBhbGxvd051bGwgPSBmYWxzZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZmlsdGVyVmFsdWVBc0FycmF5ID0gQXJyYXkuaXNBcnJheShwYXJhbUZpbHRlcj8udmFsdWUpID8gcGFyYW1GaWx0ZXIhLnZhbHVlLmZpbHRlcih2ID0+IHYgIT09IHVuZGVmaW5lZCAmJiAoYWxsb3dOdWxsIHx8IHYgIT09IG51bGwpKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBtYXRjaE1vZGUgPSBwYXJhbUZpbHRlcj8ubWF0Y2hNb2RlID8/IEZpbHRlck1hdGNoTW9kZS5FcXVhbHM7XG4gICAgaWYgKFxuICAgICAgICBwYXJhbUZpbHRlciA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICghYWxsb3dOdWxsICYmIG1hdGNoTW9kZSAhPT0gJ2V4aXN0cycgJiYgbWF0Y2hNb2RlICE9PSAnZG9lc05vdEV4aXN0JyAmJiBwYXJhbUZpbHRlci52YWx1ZSA9PSBudWxsKSB8fFxuICAgICAgICAodHlwZW9mIHBhcmFtRmlsdGVyLnZhbHVlID09PSAnc3RyaW5nJyAmJiBwYXJhbUZpbHRlci52YWx1ZS5sZW5ndGggPT09IDApIHx8XG4gICAgICAgIChBcnJheS5pc0FycmF5KGZpbHRlclZhbHVlQXNBcnJheSkgJiYgZmlsdGVyVmFsdWVBc0FycmF5Lmxlbmd0aCA9PT0gMClcbiAgICApIHtcbiAgICAgICAgLy8gbm8gbmVlZCB0byBpbmNsdWRlIGZpbHRlcnMgZm9yIGVtcHR5IHZhbHVlc1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuICYmICEoQXJyYXkuaXNBcnJheShmaWx0ZXJWYWx1ZUFzQXJyYXkpICYmIGZpbHRlclZhbHVlQXNBcnJheS5sZW5ndGggPT09IDIpKSB7XG4gICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgRmlsdGVyIG1hdGNoIG1vZGUgYmV0d2VlbiByZXF1aXJlcyBleGFjdGx5IDIgdmFsdWVzOiAke3BhcmFtRmlsdGVyLnZhbHVlfWApO1xuICAgIH1cblxuICAgIGlmICgobWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuSW4gfHwgbWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuTm90SW4pICYmICghQXJyYXkuaXNBcnJheShmaWx0ZXJWYWx1ZUFzQXJyYXkpIHx8IGZpbHRlclZhbHVlQXNBcnJheS5sZW5ndGggPT09IDApKSB7XG4gICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgRmlsdGVyIG1hdGNoIG1vZGUgJHttYXRjaE1vZGV9IHJlcXVpcmVzIG5vbi1lbXB0eSBhcnJheTogJHtwYXJhbUZpbHRlci52YWx1ZX1gKTtcbiAgICB9XG5cbiAgICBpZiAoKFtGaWx0ZXJNYXRjaE1vZGUuSW4sIEZpbHRlck1hdGNoTW9kZS5Ob3RJbiwgRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW5dIGFzIHN0cmluZ1tdKS5pbmRleE9mKG1hdGNoTW9kZSkgPT09IC0xICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyVmFsdWVBc0FycmF5KSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEZpbHRlciBtYXRjaCBtb2RlICR7bWF0Y2hNb2RlfSBtdXN0IG5vdCBiZSBhcnJheTogJHtwYXJhbUZpbHRlci52YWx1ZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBub1ZhbCA9IHBhcmFtRmlsdGVyLm1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkV4aXN0cyB8fCBwYXJhbUZpbHRlci5tYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3Q7XG4gICAgY29uc3QgdXJsVmFsdWVQYXJ0ID0gbm9WYWwgPyAnJyA6IGA6JHtkYXRhTGlzdFBhcmFtc0ZpbHRlclZhbHVlVG9VcmxTdHJpbmcoZmlsdGVyVmFsdWVBc0FycmF5ID8/IHBhcmFtRmlsdGVyLnZhbHVlLCBhbGxvd051bGwpfWA7XG5cbiAgICByZXR1cm4gYCR7cGFyYW1GaWx0ZXIuY2FzZVNlbnNpdGl2ZSA/ICdjczonIDogcGFyYW1GaWx0ZXIuY2FzZVNlbnNpdGl2ZSA9PT0gZmFsc2UgPyAnY2k6JyA6ICcnfSR7RmlsdGVyTWF0Y2hNb2RlLmdldEFiYnJldmlhdGlvbihtYXRjaE1vZGUpID8/IG1hdGNoTW9kZX0ke3VybFZhbHVlUGFydH1gO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIFVSTCBxdWVyeSBwYXJhbWV0ZXJzIHRvIGEgRGF0YUxpc3RQYXJhbXMgb2JqZWN0LlxuICogU29ydHMgYXJlIGZvcm1hdHRlZCBmcm9tIE1lZGl1cyBkYXRhIEFQSSBzb3J0IHF1ZXJ5IGxhbmd1YWdlOiBgYXNjOnByb3AxLGRlc2M6cHJvcDJgLCAuLi5cbiAqIEZpbHRlciBrZXlzIGFyZSBhbGwga2V5cyBpbiBQYXJhbXMgb2JqZWN0IHRoYXQgYXJlIG5vdCBtYXRjaGVkIGVsc2V3aGVyZSwgdmFsdWVzIGFyZSBmb3JtYXR0ZWQgZnJvbSBNZWRpdXMgZGF0YSBBUEkgZmlsdGVyIHF1ZXJ5IGxhbmd1YWdlOiBgY3M6ZXE6YXNkYCwgYGluOmFzZCxxd2VgLCBgZXhgLCAuLi5cbiAqXG4gKiBAcGFyYW0ge1BhcmFtc30gdXJsUGFyYW1zIC0gVGhlIFVSTCBxdWVyeSBwYXJhbWV0ZXJzLlxuICogQHJldHVybiB7RGF0YUxpc3RQYXJhbXN9IC0gVGhlIGNvbnZlcnRlZCBEYXRhTGlzdFBhcmFtcyBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVXJsUXVlcnlUb0RhdGFMaXN0UGFyYW1zKHVybFBhcmFtczogUGFyYW1zKTogRGF0YUxpc3RQYXJhbXMge1xuICAgIGNvbnN0IHBhcmFtczogRGF0YUxpc3RQYXJhbXMgPSB7fTtcblxuICAgIE9iamVjdC5lbnRyaWVzKHVybFBhcmFtcykuZm9yRWFjaCgoW3VybFBhcmFtS2V5LCB1cmxQYXJhbVZhbHVlXSkgPT4ge1xuICAgICAgICBpZiAodXJsUGFyYW1LZXkgPT09ICdsaW1pdCcpIHtcbiAgICAgICAgICAgIHBhcmFtcy5saW1pdCA9ICt1cmxQYXJhbVZhbHVlO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHBhcmFtcy5saW1pdCkgfHwgcGFyYW1zLmxpbWl0IDwgMCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJhbXMubGltaXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodXJsUGFyYW1LZXkgPT09ICdvZmZzZXQnKSB7XG4gICAgICAgICAgICBwYXJhbXMub2Zmc2V0ID0gK3VybFBhcmFtVmFsdWU7XG4gICAgICAgICAgICBpZiAoaXNOYU4ocGFyYW1zLm9mZnNldCkgfHwgcGFyYW1zLm9mZnNldCA8IDApIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgcGFyYW1zLm9mZnNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh1cmxQYXJhbUtleSA9PT0gJ3EnKSB7XG4gICAgICAgICAgICBwYXJhbXMuc2VhcmNoID0gdXJsUGFyYW1WYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh1cmxQYXJhbUtleSA9PT0gJ3NvcnQnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHVybFBhcmFtVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnNvcnQgPSB1cmxQYXJhbVZhbHVlLnNwbGl0KCcsJykubWFwKHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbZGlyZWN0aW9uLCBwcm9wZXJ0eV0gPSBzLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7cHJvcGVydHk6IChwcm9wZXJ0eSA/PyBkaXJlY3Rpb24pIGFzIGtleW9mIG9iamVjdCwgYXNjZW5kaW5nOiBkaXJlY3Rpb24gIT09ICdkZXNjJ307XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgU3RyaW5nIGlzIGV4cGVjdGVkIGFzIHZhbHVlIGZvciAnJHt1cmxQYXJhbUtleX0nIHdoZW4gY29udmVydGluZyBmcm9tIHVybFBhcmFtc2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB1cmxQYXJhbVZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKHVybFBhcmFtVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gZW1wdHkgc3RyaW5nIHNob3VsZCBiZSBpZ25vcmVkXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJQYXJ0cyA9IHVybFBhcmFtVmFsdWUuc3BsaXQoJzonKTtcbiAgICAgICAgICAgIGxldCBwYXJ0SWR4ID0gMDtcblxuICAgICAgICAgICAgLy8gY2FzZSBzZW5zaXRpdmVcbiAgICAgICAgICAgIGxldCBjYXNlU2Vuc2l0aXZlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGZpbHRlclBhcnRzW3BhcnRJZHhdID09PSAnY3MnIHx8IGZpbHRlclBhcnRzW3BhcnRJZHhdID09PSAnY2knKSB7XG4gICAgICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZSA9IGZpbHRlclBhcnRzW3BhcnRJZHgrK10gPT09ICdjcyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG1hdGNoIG1vZGVcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoTW9kZSA9IGZpbHRlclBhcnRzW3BhcnRJZHhdID8gRmlsdGVyTWF0Y2hNb2RlLmZyb21BYmJyZXZpYXRpb24oZmlsdGVyUGFydHNbcGFydElkeF0pID8/IGZpbHRlclBhcnRzW3BhcnRJZHhdIDogRmlsdGVyTWF0Y2hNb2RlLkVxdWFscztcbiAgICAgICAgICAgIHBhcnRJZHgrKztcblxuICAgICAgICAgICAgY29uc3Qgbm9WYWwgPSBtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5FeGlzdHMgfHwgbWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuRG9lc05vdEV4aXN0O1xuXG4gICAgICAgICAgICAvLyB2YWx1ZVxuICAgICAgICAgICAgbGV0IHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCB8IG51bGwgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoIW5vVmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlclBhcnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChwYXJ0SWR4ID09PSBmaWx0ZXJQYXJ0cy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZmlsdGVyUGFydHNbcGFydElkeF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0SWR4IDwgZmlsdGVyUGFydHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGFycmF5IHRoYXQgc2hvdWxkIG5vdCBiZSBhcnJheSwgc28gam9pbiBiYWNrIHRvZ2V0aGVyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZmlsdGVyUGFydHMuc2xpY2UocGFydElkeCwgZmlsdGVyUGFydHMubGVuZ3RoKS5qb2luKCc6Jyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgbWF0Y2hNb2RlICE9PSBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzICYmIG1hdGNoTW9kZSAhPT0gRmlsdGVyTWF0Y2hNb2RlLkRvZXNOb3RFeGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB2YWx1ZSB1bmRlZmluZWQgYW5kIG1hdGNoIG1vZGUgZXhwZWN0cyB2YWx1ZSwgdGhlbiBza2lwXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09ICdudWxsJykge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKChtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5JbiB8fCBtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5Ob3RJbiB8fCBtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuKSAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBhcnJheVZhbDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlc2UgbWF0Y2ggbW9kZXMgZXhwZWN0IGFycmF5XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pbmRleE9mKCdcIicpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRva2Vuczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50VG9rZW4gPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleHBsaWNpdFF1b3RlcyA9IGZhbHNlOyAvL3Rva2VuIGlzIHF1b3RlZCwgZS5nLiBpbjoxLDIsXCIyMlwiXCJcIixcIiwxMjNcIlwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBxdW90ZXNPcGVuZWQgPSBmYWxzZTsgLy90b2tlbiBoYXMgc3RhcnRlZCBwcm9jZXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcXVvdGVzRXhwbGljaXRseUNsb3NlZCA9IGZhbHNlOyAvL3Rva2VuIHByb2Nlc3NpbmcgaGFzIGZpbmlzaGVkLCBhZnRlciBzaW5nbGUgXCIgaW4gcXVvdGVkIG1vZGUsIG9yIGJlZm9yZSAsIGluIG5vdCBxdW90ZWRcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGMgPSB2YWx1ZVtpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc2V0IHRoZSB0b2tlbml6ZXIgd2hlbiBzZWVpbmcgdGhlIHRva2VuIHNlcGFyYXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgaWYgZWl0aGVyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBxdW90ZXMgaGF2ZSBub3QgYmVlbiBvcGVuZWQgeWV0ICh3aGVuIHRoZXJlIGFyZSBubyBjaGFyYWN0ZXJzIGJldHdlZW4gc2VwYXJhdG9ycyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHRva2VuIGhhcyBiZWVuIGV4cGxpY2l0bHkgY2xvc2VkICh3aGVuIHdlIGFjdHVhbGx5IGhhdmUgZXhwbGljaXQgb3BlbmluZyBpLmUuLCBxdW90ZXMgYXMgdGhlIGZpcnN0IGNoYXJhY3RlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvciB3ZSBoYXZlIGltcGxpY2l0IHF1b3RlcyAoaS5lLiwgcXVvdGVzIGFyZSBub3QgdGhlIGZpcnN0IGNoYXJhY3RlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJywnICYmICghcXVvdGVzT3BlbmVkIHx8IHF1b3Rlc0V4cGxpY2l0bHlDbG9zZWQgfHwgIWV4cGxpY2l0UXVvdGVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaChjdXJyZW50VG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VG9rZW4gPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGVzT3BlbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3Rlc0V4cGxpY2l0bHlDbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGljaXRRdW90ZXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1wiJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2NhcGVkIGRvdWJsZS1xdW90ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGxpY2l0UXVvdGVzICYmIGkgKyAxIDwgdmFsdWUubGVuZ3RoICYmIHZhbHVlW2kgKyAxXSA9PT0gJ1wiJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFRva2VuICs9IGM7IC8vIEFwcGVuZCBvbmUgZG91YmxlLXF1b3RlIHRvIHRoZSBjdXJyZW50IHRva2VuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7IC8vIFNraXAgdGhlIG5leHQgZG91YmxlLXF1b3RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZW5jb3VudGVyIHF1b3RlcyBhZ2FpbiBhZnRlciB0aGV5IHdlcmUgdGhlIGZpcnN0IGNoYXJhY3RlciA9PiB3ZSBjbG9zZSB0aGUgdG9rZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXhwbGljaXRRdW90ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3Rlc0V4cGxpY2l0bHlDbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGltcGxpY2l0IHF1b3Rlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChxdW90ZXNPcGVuZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUb2tlbiArPSBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHF1b3RlcyBhcmUgdGhlIGZpcnN0IGNoYXJhY3RlciA9PiBleHBsaWNpdGx5IG9wZW4gdGhlIHRva2VuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFRva2VuID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZXNPcGVuZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGljaXRRdW90ZXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1b3Rlc0V4cGxpY2l0bHlDbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3Rlc09wZW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUb2tlbiArPSBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1b3Rlc09wZW5lZCAmJiAhcXVvdGVzRXhwbGljaXRseUNsb3NlZCAmJiBleHBsaWNpdFF1b3Rlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwZW5kIHRoZSBsYXN0IHRva2VuIGFmdGVyIHRoZSBsb29wIGVuZHNcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKGN1cnJlbnRUb2tlbi50b1N0cmluZygpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlWYWwgPSB0b2tlbnM7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVZhbCA9IHZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2VlbiAmJiBhcnJheVZhbC5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXJyYXlWYWw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkgfHwgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlIS5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZpbHRlciB3aXRoIGVtcHR5IHZhbHVlIGlzIHRvIGJlIGlnbm9yZWRcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuZmlsdGVycykge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXJzID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhcmFtcy5maWx0ZXJzW3VybFBhcmFtS2V5IGFzIGtleW9mIG9iamVjdF0gPSB7dmFsdWU6IHZhbHVlLCBtYXRjaE1vZGU6IG1hdGNoTW9kZSwgY2FzZVNlbnNpdGl2ZTogY2FzZVNlbnNpdGl2ZX07XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBwYXJhbXM7XG59XG5cbi8qKlxuICogTWFrZXMgYSBjb3B5IG9mIHRoZSBnaXZlbiBEYXRhTGlzdFBhcmFtcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz59IHBhcmFtcyAtIFRoZSBEYXRhTGlzdFBhcmFtcyBvYmplY3QgdG8gYmUgY29waWVkLlxuICogQHJldHVybnMge0RhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPn0gLSBSZXR1cm5zIGEgbmV3IGNvcHkgb2YgdGhlIERhdGFMaXN0UGFyYW1zIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlEYXRhTGlzdFBhcmFtczxTb3J0cyA9IHN0cmluZywgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IHN0cmluZz4ocGFyYW1zOiBEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz4pOiBEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz4ge1xuICAgIGNvbnN0IGNvcHk6IERhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPiA9IHtcbiAgICAgICAgb2Zmc2V0OiBwYXJhbXMub2Zmc2V0LFxuICAgICAgICBsaW1pdDogcGFyYW1zLmxpbWl0LFxuICAgICAgICBzZWFyY2g6IHBhcmFtcy5zZWFyY2hcbiAgICB9O1xuXG4gICAgaWYgKHBhcmFtcy5zb3J0KSB7XG4gICAgICAgIGNvcHkuc29ydCA9IHBhcmFtcy5zb3J0Py5tYXAocyA9PiAoey4uLnN9KSk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuZmlsdGVycykge1xuICAgICAgICBjb3B5LmZpbHRlcnMgPSBPYmplY3QuZW50cmllcyhwYXJhbXMuZmlsdGVycykucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSB2YWx1ZSBhcyBEYXRhTGlzdEZpbHRlcjtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgICAgICAgIFtrZXldOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmZpbHRlclZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogQXJyYXkuaXNBcnJheShmaWx0ZXJWYWx1ZS52YWx1ZSkgPyBbLi4uZmlsdGVyVmFsdWUudmFsdWVdIDogZmlsdGVyVmFsdWUudmFsdWVcbiAgICAgICAgICAgICAgICB9IGFzIERhdGFMaXN0RmlsdGVyXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LCB7fSBhcyBEYXRhTGlzdEZpbHRlcnNUeXBlPEZpbHRlcnM+KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29weTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHZhbHVlIHRvIGEgVVJMIHF1ZXJ5IHBhcmFtIHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbG93TnVsbD1mYWxzZV0gLSBJbmRpY2F0ZXMgd2hldGhlciBudWxsIHZhbHVlcyBhcmUgYWxsb3dlZC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBVUkwgcGFyYW1ldGVyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZS5cbiAqIEB0aHJvd3Mge0NvbW1vbnNJbnRlcm5hbEVycm9yfSBJZiBhbiB1bmRlZmluZWQgdmFsdWUgaXMgcGFzc2VkIHdpdGhvdXQgYWxsb3dOdWxsIHNldCB0byB0cnVlLlxuICogQHRocm93cyB7Q29tbW9uc0ludGVybmFsRXJyb3J9IElmIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QgKGV4Y2x1ZGluZyBEYXRlKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGFMaXN0UGFyYW1zRmlsdGVyVmFsdWVUb1VybFN0cmluZyh2YWx1ZTogdW5rbm93biwgYWxsb3dOdWxsID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCAmJiBhbGxvd051bGwpIHJldHVybiAnbnVsbCc7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcignVW5kZWZpbmVkIHZhbHVlIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gdXJsIHBhcmFtLicpOyAvLyB0aGlzIHNob3VsZCBub3QgaGFwcGVuLCBzaG91bGQgYmUgZmlsdGVyZWQgb3V0IGVhcmxpZXJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgLm1hcCh2ID0+IGRhdGFMaXN0UGFyYW1zRmlsdGVyVmFsdWVUb1VybFN0cmluZyh2LCBhbGxvd051bGwpKVxuICAgICAgICAgICAgLm1hcCh2ID0+ICh2LmluZGV4T2YoJywnKSA+PSAwIHx8IHYuaW5kZXhPZignXCInKSA+PSAwID8gYFwiJHt2LnJlcGxhY2VBbGwoJ1wiJywgJ1wiXCInKX1cImAgOiB2KSlcbiAgICAgICAgICAgIC5qb2luKCcsJyk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIGRhdGVUb0lzb1N0cmluZyh2YWx1ZSwgJ2RhdGVUaW1lJywge3V0YzogdHJ1ZX0pO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcignRmlsdGVyIHZhbHVlIGNhbm5vdCBiZSBvYmplY3QnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cbiJdfQ==
420
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saXN0LXBhcmFtcy1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvZGF0YS1saXN0L2RhdGEtbGlzdC1wYXJhbXMtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBR3JEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUFDLEtBQXlCO0lBQ25FLE1BQU0sTUFBTSxHQUFtQixFQUFFLENBQUM7SUFFbEMsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxPQUFPLEtBQUssQ0FBQyxZQUFZLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDekMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO0lBQ3ZDLENBQUM7U0FBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzVFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFL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QzthQUM1RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNGLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVCLElBQUksS0FBSyxZQUFZLElBQUk7WUFBRSxPQUFPLGVBQWUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7YUFDN0UsQ0FBQztZQUNGLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UGFyYW1zfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1RhYmxlTGF6eUxvYWRFdmVudH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5cbmltcG9ydCB7Q29tbW9uc0ludGVybmFsRXJyb3J9IGZyb20gJy4uL2Vycm9yL2Vycm9yLm1vZGVsJztcbmltcG9ydCB7ZGF0ZVRvSXNvU3RyaW5nfSBmcm9tICcuLi9oZWxwZXJzL2RhdGUnO1xuaW1wb3J0IHtEYXRhTGlzdEZpbHRlciwgRGF0YUxpc3RGaWx0ZXJWYWx1ZVR5cGUsIERhdGFMaXN0RmlsdGVyc1R5cGUsIERhdGFMaXN0UGFyYW1zfSBmcm9tICcuL2RhdGEtbGlzdC5tb2RlbCc7XG5pbXBvcnQge0ZpbHRlck1hdGNoTW9kZX0gZnJvbSAnLi9maWx0ZXItbWF0Y2gubW9kZWwnO1xuaW1wb3J0IHtDb21tb25zRmlsdGVyTWV0YWRhdGF9IGZyb20gJy4vZmlsdGVyLW1ldGFkYXRhLm1vZGVsJztcblxuLyoqXG4gKiBDb252ZXJ0cyBhIFRhYmxlTGF6eUxvYWRFdmVudCB0byBEYXRhTGlzdFBhcmFtcy5cbiAqXG4gKiBAcGFyYW0ge1RhYmxlTGF6eUxvYWRFdmVudH0gZXZlbnQgLSBUaGUgZXZlbnQgY29udGFpbmluZyB0aGUgZGF0YSB0byBjb252ZXJ0LlxuICogQHJldHVybiB7RGF0YUxpc3RQYXJhbXN9IC0gVGhlIGNvbnZlcnRlZCBEYXRhTGlzdFBhcmFtcyBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVGFibGVMb2FkVG9EYXRhTGlzdFBhcmFtcyhldmVudDogVGFibGVMYXp5TG9hZEV2ZW50KTogRGF0YUxpc3RQYXJhbXMge1xuICAgIGNvbnN0IHBhcmFtczogRGF0YUxpc3RQYXJhbXMgPSB7fTtcblxuICAgIGlmIChldmVudC5maXJzdCAhPSBudWxsKSB7XG4gICAgICAgIHBhcmFtcy5vZmZzZXQgPSBldmVudC5maXJzdDtcbiAgICB9XG4gICAgaWYgKGV2ZW50LnJvd3MgIT0gbnVsbCkge1xuICAgICAgICBwYXJhbXMubGltaXQgPSBldmVudC5yb3dzO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXZlbnQuZ2xvYmFsRmlsdGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICBwYXJhbXMuc2VhcmNoID0gZXZlbnQuZ2xvYmFsRmlsdGVyO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShldmVudC5nbG9iYWxGaWx0ZXIpICYmIGV2ZW50Lmdsb2JhbEZpbHRlci5sZW5ndGggPiAwKSB7XG4gICAgICAgIHBhcmFtcy5zZWFyY2ggPSBldmVudC5nbG9iYWxGaWx0ZXIuam9pbignLCcpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50Lm11bHRpU29ydE1ldGEpICYmIGV2ZW50Lm11bHRpU29ydE1ldGEubGVuZ3RoID4gMCkge1xuICAgICAgICBwYXJhbXMuc29ydCA9IGV2ZW50Lm11bHRpU29ydE1ldGEubWFwKG0gPT4gKHtwcm9wZXJ0eTogbS5maWVsZCwgYXNjZW5kaW5nOiBtLm9yZGVyID49IDB9KSk7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmZpbHRlcnMpIHtcbiAgICAgICAgcGFyYW1zLmZpbHRlcnMgPSBPYmplY3Qua2V5cyhldmVudC5maWx0ZXJzKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXI6IERhdGFMaXN0RmlsdGVyID0ge307XG4gICAgICAgICAgICBjb25zdCBldmVudEZpbHRlcjogQ29tbW9uc0ZpbHRlck1ldGFkYXRhIHwgQ29tbW9uc0ZpbHRlck1ldGFkYXRhW10gfCB1bmRlZmluZWQgPSBldmVudC5maWx0ZXJzPy5ba2V5IGFzIGtleW9mIG9iamVjdF07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShldmVudEZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWUgPSBldmVudEZpbHRlclswXS52YWx1ZTtcbiAgICAgICAgICAgICAgICBmaWx0ZXIubWF0Y2hNb2RlID0gZXZlbnRGaWx0ZXJbMF0ubWF0Y2hNb2RlO1xuICAgICAgICAgICAgICAgIGZpbHRlci5jYXNlU2Vuc2l0aXZlID0gZXZlbnRGaWx0ZXJbMF0uY2FzZVNlbnNpdGl2ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRGaWx0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZSA9IGV2ZW50RmlsdGVyLnZhbHVlO1xuICAgICAgICAgICAgICAgIGZpbHRlci5tYXRjaE1vZGUgPSBldmVudEZpbHRlci5tYXRjaE1vZGU7XG4gICAgICAgICAgICAgICAgZmlsdGVyLmNhc2VTZW5zaXRpdmUgPSBldmVudEZpbHRlci5jYXNlU2Vuc2l0aXZlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsuLi5hY2MsIFtrZXldOiBmaWx0ZXJ9O1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gcGFyYW1ldGVycyB0byBVUkwgcXVlcnkgcGFyYW1ldGVycy5cbiAqIFNvcnRzIGFyZSBmb3JtYXR0ZWQgaW4gTWVkaXVzIGRhdGEgQVBJIHNvcnQgcXVlcnkgbGFuZ3VhZ2U6IGBhc2M6cHJvcDEsZGVzYzpwcm9wMmAsIC4uLlxuICogRmlsdGVyIGtleXMgYXJlIFwiZmxhdHRlbmVkXCIgaW4gdGhlIG5ldyBvYmplY3QsIHZhbHVlcyBhcmUgZm9ybWF0dGVkIGluIE1lZGl1cyBkYXRhIEFQSSBmaWx0ZXIgcXVlcnkgbGFuZ3VhZ2U6IGBjczplcTphc2RgLCBgaW46YXNkLHF3ZWAsIGBleGAsIC4uLlxuICpcbiAqIEBwYXJhbSB7RGF0YUxpc3RQYXJhbXN9IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIGNvbnZlcnQuXG4gKiBAcGFyYW0ge0RhdGFMaXN0UGFyYW1zfG51bGx9IGRlZmF1bHRzIC0gVGhlIGRlZmF1bHQgcGFyYW1ldGVycyB1c2VkIGlmIG5vIG1hdGNoaW5nIHByb3BlcnR5IGluIHBhcmFtcyBpcyBhdmFpbGFibGUuIERlZmF1bHRzIHRvIHsgbGltaXQ6IDI1LCBvZmZzZXQ6IDAgfSBpZiBub3QgcHJvdmlkZWQuXG4gKiBAcmV0dXJucyB7UGFyYW1zfSAtIFRoZSBVUkwgcXVlcnkgcGFyYW1ldGVycyBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRhTGlzdFBhcmFtc1RvVXJsUXVlcnkoXG4gICAgcGFyYW1zOiBEYXRhTGlzdFBhcmFtczxhbnksIGFueT4sXG4gICAgZGVmYXVsdHM6IERhdGFMaXN0UGFyYW1zPGFueSwgYW55PiB8IG51bGwgPSB7XG4gICAgICAgIGxpbWl0OiAyNSxcbiAgICAgICAgb2Zmc2V0OiAwXG4gICAgfVxuKTogUGFyYW1zIHtcbiAgICBjb25zdCB1cmxQYXJhbXM6IFBhcmFtcyA9IHt9O1xuXG4gICAgaWYgKHBhcmFtcy5saW1pdCAmJiBwYXJhbXMubGltaXQgIT09IGRlZmF1bHRzPy5saW1pdCkge1xuICAgICAgICB1cmxQYXJhbXNbJ2xpbWl0J10gPSBwYXJhbXMubGltaXQ7XG4gICAgfVxuICAgIGlmIChwYXJhbXMub2Zmc2V0ICYmIHBhcmFtcy5vZmZzZXQgIT09IGRlZmF1bHRzPy5vZmZzZXQpIHtcbiAgICAgICAgdXJsUGFyYW1zWydvZmZzZXQnXSA9IHBhcmFtcy5vZmZzZXQ7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuc2VhcmNoICYmIHBhcmFtcy5zZWFyY2ggIT09IGRlZmF1bHRzPy5zZWFyY2gpIHtcbiAgICAgICAgdXJsUGFyYW1zWydxJ10gPSBwYXJhbXMuc2VhcmNoO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLnNvcnQgJiYgQXJyYXkuaXNBcnJheShwYXJhbXMuc29ydCkgJiYgcGFyYW1zLnNvcnQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBkZWZhdWx0cz8uc29ydCA9PSBudWxsIHx8XG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShkZWZhdWx0cy5zb3J0KSB8fFxuICAgICAgICAgICAgZGVmYXVsdHMuc29ydC5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHBhcmFtcy5zb3J0Lmxlbmd0aCAhPT0gZGVmYXVsdHMuc29ydC5sZW5ndGggfHxcbiAgICAgICAgICAgIGRlZmF1bHRzLnNvcnQuc29tZSgoZHMsIGlkeCkgPT4gZHMucHJvcGVydHkgIT09IHBhcmFtcy5zb3J0IVtpZHhdLnByb3BlcnR5IHx8IChkcy5hc2NlbmRpbmcgPz8gdHJ1ZSkgIT09IChwYXJhbXMuc29ydCFbaWR4XS5hc2NlbmRpbmcgPz8gdHJ1ZSkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdXJsUGFyYW1zWydzb3J0J10gPSBkYXRhTGlzdFBhcmFtc1NvcnRUb1VybFF1ZXJ5KHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBhcmFtcy5maWx0ZXJzKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHBhcmFtcy5maWx0ZXJzKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1GaWx0ZXIgPSBwYXJhbXMuZmlsdGVycyFbayBhcyBrZXlvZiBvYmplY3RdITtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXIgPSBkZWZhdWx0cz8uZmlsdGVycz8uW2sgYXMga2V5b2Ygb2JqZWN0XTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVyICYmXG4gICAgICAgICAgICAgICAgKChBcnJheS5pc0FycmF5KGRlZmF1bHRGaWx0ZXIudmFsdWUpICYmXG4gICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocGFyYW1GaWx0ZXIudmFsdWUpICYmXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXIudmFsdWUubGVuZ3RoID09PSBwYXJhbUZpbHRlci52YWx1ZS5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlci52YWx1ZS5ldmVyeSgodiwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IChwYXJhbUZpbHRlci52YWx1ZSBhcyBBcnJheTxEYXRhTGlzdEZpbHRlclZhbHVlVHlwZT4pW2lkeF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmIHYgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gdmFsdWUuZ2V0VGltZSgpID09PSB2LmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIHZhbHVlID09PSB2O1xuICAgICAgICAgICAgICAgICAgICB9KSkgfHwgLy8gaGFuZGxlIGFycmF5c1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVyLnZhbHVlID09PSBwYXJhbUZpbHRlci52YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVyLm1hdGNoTW9kZSA9PT0gcGFyYW1GaWx0ZXIubWF0Y2hNb2RlICYmXG4gICAgICAgICAgICAgICAgKGRlZmF1bHRGaWx0ZXIuY2FzZVNlbnNpdGl2ZSA/PyBmYWxzZSkgPT09IChwYXJhbUZpbHRlci5jYXNlU2Vuc2l0aXZlID8/IGZhbHNlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgcGFyYW1GaWx0ZXIudmFsdWUgPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXI/LnZhbHVlID09IG51bGwgJiZcbiAgICAgICAgICAgICAgICBwYXJhbUZpbHRlci5tYXRjaE1vZGUgIT09IEZpbHRlck1hdGNoTW9kZS5FeGlzdHMgJiZcbiAgICAgICAgICAgICAgICBwYXJhbUZpbHRlci5tYXRjaE1vZGUgIT09IEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3RcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdXJsUGFyYW1zW2tdID0gZGF0YUxpc3RQYXJhbXNGaWx0ZXJzVG9VcmxRdWVyeShwYXJhbXMsIGssIHRydWUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGRlZmF1bHRzPy5maWx0ZXJzKSB7XG4gICAgICAgIC8vIGFkZCBvdGhlciBkZWZhdWx0c1xuICAgICAgICBjb25zdCBwYXJhbUZpbHRlcktleXMgPSBwYXJhbXMuZmlsdGVycyA/IE9iamVjdC5rZXlzKHBhcmFtcy5maWx0ZXJzKSA6IFtdO1xuICAgICAgICBPYmplY3Qua2V5cyhkZWZhdWx0cy5maWx0ZXJzKVxuICAgICAgICAgICAgLmZpbHRlcihrID0+IHBhcmFtRmlsdGVyS2V5cy5pbmRleE9mKGspIDwgMClcbiAgICAgICAgICAgIC5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIHVybFBhcmFtc1trXSA9IGRhdGFMaXN0UGFyYW1zRmlsdGVyc1RvVXJsUXVlcnkoZGVmYXVsdHMsIGspO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybFBhcmFtcztcbn1cblxuLyoqXG4gKiBNZXJnZXMgdGhlIHByb3ZpZGVkIHBhcmFtZXRlcnMgd2l0aCBkZWZhdWx0IHZhbHVlcyBhbmQgcmV0dXJucyB0aGUgbWVyZ2VkIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge0RhdGFMaXN0UGFyYW1zfSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byBtZXJnZSB3aXRoIGRlZmF1bHRzLlxuICogQHBhcmFtIHtEYXRhTGlzdFBhcmFtc30gZGVmYXVsdHMgLSBUaGUgZGVmYXVsdCB2YWx1ZXMgdG8gbWVyZ2Ugd2l0aCBwYXJhbXMgKG9wdGlvbmFsLCBkZWZhdWx0IGlzIHsgbGltaXQ6IDI1LCBvZmZzZXQ6IDAgfSkuXG4gKiBAcmV0dXJucyB7RGF0YUxpc3RQYXJhbXN9IC0gVGhlIG1lcmdlZCBwYXJhbWV0ZXJzIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRGF0YUxpc3RQYXJhbXNXaXRoRGVmYXVsdHM8U29ydHMgPSBhbnksIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBhbnk+KFxuICAgIHBhcmFtczogRGF0YUxpc3RQYXJhbXM8U29ydHMsIEZpbHRlcnM+LFxuICAgIGRlZmF1bHRzOiBEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz4gPSB7XG4gICAgICAgIGxpbWl0OiAyNSxcbiAgICAgICAgb2Zmc2V0OiAwXG4gICAgfVxuKTogRGF0YUxpc3RQYXJhbXM8U29ydHMsIEZpbHRlcnM+IHtcbiAgICBjb25zdCBtZXJnZWQ6IERhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPiA9IHtcbiAgICAgICAgbGltaXQ6IHBhcmFtcy5saW1pdCA/PyBkZWZhdWx0cy5saW1pdCxcbiAgICAgICAgb2Zmc2V0OiBwYXJhbXMub2Zmc2V0ID8/IGRlZmF1bHRzLm9mZnNldCxcbiAgICAgICAgc2VhcmNoOiBwYXJhbXMuc2VhcmNoID8/IGRlZmF1bHRzLnNlYXJjaCxcbiAgICAgICAgc29ydDogKHBhcmFtcy5zb3J0ID8/IGRlZmF1bHRzLnNvcnQpPy5tYXAocyA9PiAoey4uLnN9KSlcbiAgICB9O1xuXG4gICAgaWYgKHBhcmFtcy5maWx0ZXJzKSB7XG4gICAgICAgIG1lcmdlZC5maWx0ZXJzID0ge30gYXMgRGF0YUxpc3RGaWx0ZXJzVHlwZTxGaWx0ZXJzPjtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMocGFyYW1zLmZpbHRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gKG1lcmdlZC5maWx0ZXJzIVtrZXkgYXMgRmlsdGVyc10gPSB7Li4uKHZhbHVlIGFzIERhdGFMaXN0RmlsdGVyKX0pKTtcbiAgICB9XG4gICAgaWYgKGRlZmF1bHRzLmZpbHRlcnMpIHtcbiAgICAgICAgaWYgKCFtZXJnZWQuZmlsdGVycykgbWVyZ2VkLmZpbHRlcnMgPSB7fSBhcyBEYXRhTGlzdEZpbHRlcnNUeXBlPEZpbHRlcnM+O1xuICAgICAgICBPYmplY3QuZW50cmllcyhkZWZhdWx0cy5maWx0ZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGlmIChtZXJnZWQuZmlsdGVycyFba2V5IGFzIEZpbHRlcnNdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBtZXJnZWQuZmlsdGVycyFba2V5IGFzIEZpbHRlcnNdID0gey4uLih2YWx1ZSBhcyBEYXRhTGlzdEZpbHRlcil9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2VkO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiBwYXJhbWV0ZXJzIHRvIGEgVVJMIHF1ZXJ5IHN0cmluZyBmb3Igc29ydGluZy5cbiAqIFNvcnRzIGFyZSBmb3JtYXR0ZWQgaW4gTWVkaXVzIGRhdGEgQVBJIHNvcnQgcXVlcnkgbGFuZ3VhZ2U6IGBhc2M6cHJvcDEsZGVzYzpwcm9wMmAsIC4uLlxuICpcbiAqIEBwYXJhbSB7RGF0YUxpc3RQYXJhbXN9IHBhcmFtcyAtIEFuIG9wdGlvbmFsIG9iamVjdCBjb250YWluaW5nIHNvcnQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgVVJMIHF1ZXJ5IG9yIHVuZGVmaW5lZCBpZiBubyBzb3J0IHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGF0YUxpc3RQYXJhbXNTb3J0VG9VcmxRdWVyeShwYXJhbXM/OiBEYXRhTGlzdFBhcmFtczxhbnksIGFueT4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBwYXJhbXMgJiYgQXJyYXkuaXNBcnJheShwYXJhbXMuc29ydClcbiAgICAgICAgPyBwYXJhbXMuc29ydC5tYXAocyA9PiBgJHtzLmFzY2VuZGluZyA9PT0gdHJ1ZSB8fCBzLmFzY2VuZGluZyA9PT0gdW5kZWZpbmVkID8gJ2FzYycgOiAnZGVzYyd9OiR7U3RyaW5nKHMucHJvcGVydHkpfWApLmpvaW4oJywnKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHNwZWNpZmljIGZpbHRlciBwYXJhbWV0ZXIgKGJ5IGtleSkgZnJvbSBEYXRhTGlzdFBhcmFtcyBvYmplY3QgdG8gYSBVUkwgcXVlcnkgc3RyaW5nLlxuICogRmlsdGVyIGtleXMgYXJlIFwiZmxhdHRlbmVkXCIgaW4gdGhlIG5ldyBvYmplY3QsIHZhbHVlcyBhcmUgZm9ybWF0dGVkIGluIE1lZGl1cyBkYXRhIEFQSSBmaWx0ZXIgcXVlcnkgbGFuZ3VhZ2U6IGBjczplcTphc2RgLCBgaW46YXNkLHF3ZWAsIGBleGAsIC4uLlxuICpcbiAqIEBwYXJhbSB7RGF0YUxpc3RQYXJhbXM8YW55LCBGaWx0ZXJzPiB8IHVuZGVmaW5lZH0gcGFyYW1zIC0gVGhlIERhdGFMaXN0UGFyYW1zIG9iamVjdCBjb250YWluaW5nIHRoZSBmaWx0ZXJzLlxuICogQHBhcmFtIHtGaWx0ZXJzfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBmaWx0ZXIgdG8gY29udmVydC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbG93TnVsbD1mYWxzZV0gLSBJbmRpY2F0ZXMgd2hldGhlciB0byBhbGxvdyBudWxsIHZhbHVlcyBpbiB0aGUgcXVlcnkgc3RyaW5nLlxuICogQHJldHVybiB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIFRoZSBVUkwgcXVlcnkgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgc3BlY2lmaWVkIGZpbHRlciwgb3IgdW5kZWZpbmVkIGlmIHRoZSBmaWx0ZXIgaXMgbm90IGZvdW5kLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGF0YUxpc3RQYXJhbXNGaWx0ZXJzVG9VcmxRdWVyeTxGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0gc3RyaW5nPihcbiAgICBwYXJhbXM6IERhdGFMaXN0UGFyYW1zPGFueSwgRmlsdGVycz4gfCB1bmRlZmluZWQsXG4gICAga2V5OiBGaWx0ZXJzLFxuICAgIGFsbG93TnVsbCA9IGZhbHNlXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHBhcmFtRmlsdGVyID0gcGFyYW1zPy5maWx0ZXJzPy5ba2V5XTtcbiAgICByZXR1cm4gZGF0YUxpc3RQYXJhbXNGaWx0ZXJUb1VybFF1ZXJ5KHBhcmFtRmlsdGVyLCBhbGxvd051bGwpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgZmlsdGVyIHRvIGEgVVJMIHF1ZXJ5IHN0cmluZy5cbiAqIEZpbHRlciBrZXlzIGFyZSBcImZsYXR0ZW5lZFwiIGluIHRoZSBuZXcgb2JqZWN0LCB2YWx1ZXMgYXJlIGZvcm1hdHRlZCBpbiBNZWRpdXMgZGF0YSBBUEkgZmlsdGVyIHF1ZXJ5IGxhbmd1YWdlOiBgY3M6ZXE6YXNkYCwgYGluOmFzZCxxd2VgLCBgZXhgLCAuLi5cbiAqXG4gKiBAcGFyYW0ge0RhdGFMaXN0RmlsdGVyfSBwYXJhbUZpbHRlciAtIFRoZSBmaWx0ZXIgb2JqZWN0IHRvIGJlIGNvbnZlcnRlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbG93TnVsbD1mYWxzZV0gLSBJbmRpY2F0ZXMgd2hldGhlciB0byBhbGxvdyBudWxsIHZhbHVlcyBpbiB0aGUgZmlsdGVyLlxuICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9IC0gVGhlIGZpbHRlciBjb252ZXJ0ZWQgdG8gYSBVUkwgcXVlcnkgc3RyaW5nLCBvciB1bmRlZmluZWQgaWYgbm8gZmlsdGVyIGlzIHByb3ZpZGVkIG9yIHRoZSBmaWx0ZXIgaGFzIGVtcHR5IG9yIGludmFsaWQgdmFsdWVzLlxuICogQHRocm93cyB7Q29tbW9uc0ludGVybmFsRXJyb3J9IC0gSWYgdGhlIGZpbHRlciBoYXMgaW52YWxpZCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRhTGlzdFBhcmFtc0ZpbHRlclRvVXJsUXVlcnkocGFyYW1GaWx0ZXI/OiBEYXRhTGlzdEZpbHRlciwgYWxsb3dOdWxsID0gZmFsc2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGZpbHRlclZhbHVlQXNBcnJheSA9IEFycmF5LmlzQXJyYXkocGFyYW1GaWx0ZXI/LnZhbHVlKSA/IHBhcmFtRmlsdGVyIS52YWx1ZS5maWx0ZXIodiA9PiB2ICE9PSB1bmRlZmluZWQgJiYgKGFsbG93TnVsbCB8fCB2ICE9PSBudWxsKSkgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgbWF0Y2hNb2RlID0gcGFyYW1GaWx0ZXI/Lm1hdGNoTW9kZSA/PyBGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzO1xuICAgIGlmIChcbiAgICAgICAgcGFyYW1GaWx0ZXIgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAoIWFsbG93TnVsbCAmJiBtYXRjaE1vZGUgIT09ICdleGlzdHMnICYmIG1hdGNoTW9kZSAhPT0gJ2RvZXNOb3RFeGlzdCcgJiYgcGFyYW1GaWx0ZXIudmFsdWUgPT0gbnVsbCkgfHxcbiAgICAgICAgKHR5cGVvZiBwYXJhbUZpbHRlci52YWx1ZSA9PT0gJ3N0cmluZycgJiYgcGFyYW1GaWx0ZXIudmFsdWUubGVuZ3RoID09PSAwKSB8fFxuICAgICAgICAoQXJyYXkuaXNBcnJheShmaWx0ZXJWYWx1ZUFzQXJyYXkpICYmIGZpbHRlclZhbHVlQXNBcnJheS5sZW5ndGggPT09IDApXG4gICAgKSB7XG4gICAgICAgIC8vIG5vIG5lZWQgdG8gaW5jbHVkZSBmaWx0ZXJzIGZvciBlbXB0eSB2YWx1ZXNcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2VlbiAmJiAhKEFycmF5LmlzQXJyYXkoZmlsdGVyVmFsdWVBc0FycmF5KSAmJiBmaWx0ZXJWYWx1ZUFzQXJyYXkubGVuZ3RoID09PSAyKSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEZpbHRlciBtYXRjaCBtb2RlIGJldHdlZW4gcmVxdWlyZXMgZXhhY3RseSAyIHZhbHVlczogJHtwYXJhbUZpbHRlci52YWx1ZX1gKTtcbiAgICB9XG5cbiAgICBpZiAoKG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkluIHx8IG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLk5vdEluKSAmJiAoIUFycmF5LmlzQXJyYXkoZmlsdGVyVmFsdWVBc0FycmF5KSB8fCBmaWx0ZXJWYWx1ZUFzQXJyYXkubGVuZ3RoID09PSAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEZpbHRlciBtYXRjaCBtb2RlICR7bWF0Y2hNb2RlfSByZXF1aXJlcyBub24tZW1wdHkgYXJyYXk6ICR7cGFyYW1GaWx0ZXIudmFsdWV9YCk7XG4gICAgfVxuXG4gICAgaWYgKChbRmlsdGVyTWF0Y2hNb2RlLkluLCBGaWx0ZXJNYXRjaE1vZGUuTm90SW4sIEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuXSBhcyBzdHJpbmdbXSkuaW5kZXhPZihtYXRjaE1vZGUpID09PSAtMSAmJiBBcnJheS5pc0FycmF5KGZpbHRlclZhbHVlQXNBcnJheSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGBGaWx0ZXIgbWF0Y2ggbW9kZSAke21hdGNoTW9kZX0gbXVzdCBub3QgYmUgYXJyYXk6ICR7cGFyYW1GaWx0ZXIudmFsdWV9YCk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9WYWwgPSBwYXJhbUZpbHRlci5tYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5FeGlzdHMgfHwgcGFyYW1GaWx0ZXIubWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuRG9lc05vdEV4aXN0O1xuICAgIGNvbnN0IHVybFZhbHVlUGFydCA9IG5vVmFsID8gJycgOiBgOiR7ZGF0YUxpc3RQYXJhbXNGaWx0ZXJWYWx1ZVRvVXJsU3RyaW5nKGZpbHRlclZhbHVlQXNBcnJheSA/PyBwYXJhbUZpbHRlci52YWx1ZSwgYWxsb3dOdWxsKX1gO1xuXG4gICAgcmV0dXJuIGAke3BhcmFtRmlsdGVyLmNhc2VTZW5zaXRpdmUgPyAnY3M6JyA6IHBhcmFtRmlsdGVyLmNhc2VTZW5zaXRpdmUgPT09IGZhbHNlID8gJ2NpOicgOiAnJ30ke0ZpbHRlck1hdGNoTW9kZS5nZXRBYmJyZXZpYXRpb24obWF0Y2hNb2RlKSA/PyBtYXRjaE1vZGV9JHt1cmxWYWx1ZVBhcnR9YDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBVUkwgcXVlcnkgcGFyYW1ldGVycyB0byBhIERhdGFMaXN0UGFyYW1zIG9iamVjdC5cbiAqIFNvcnRzIGFyZSBmb3JtYXR0ZWQgZnJvbSBNZWRpdXMgZGF0YSBBUEkgc29ydCBxdWVyeSBsYW5ndWFnZTogYGFzYzpwcm9wMSxkZXNjOnByb3AyYCwgLi4uXG4gKiBGaWx0ZXIga2V5cyBhcmUgYWxsIGtleXMgaW4gUGFyYW1zIG9iamVjdCB0aGF0IGFyZSBub3QgbWF0Y2hlZCBlbHNld2hlcmUsIHZhbHVlcyBhcmUgZm9ybWF0dGVkIGZyb20gTWVkaXVzIGRhdGEgQVBJIGZpbHRlciBxdWVyeSBsYW5ndWFnZTogYGNzOmVxOmFzZGAsIGBpbjphc2QscXdlYCwgYGV4YCwgLi4uXG4gKlxuICogQHBhcmFtIHtQYXJhbXN9IHVybFBhcmFtcyAtIFRoZSBVUkwgcXVlcnkgcGFyYW1ldGVycy5cbiAqIEByZXR1cm4ge0RhdGFMaXN0UGFyYW1zfSAtIFRoZSBjb252ZXJ0ZWQgRGF0YUxpc3RQYXJhbXMgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbVVybFF1ZXJ5VG9EYXRhTGlzdFBhcmFtcyh1cmxQYXJhbXM6IFBhcmFtcyk6IERhdGFMaXN0UGFyYW1zIHtcbiAgICBjb25zdCBwYXJhbXM6IERhdGFMaXN0UGFyYW1zID0ge307XG5cbiAgICBPYmplY3QuZW50cmllcyh1cmxQYXJhbXMpLmZvckVhY2goKFt1cmxQYXJhbUtleSwgdXJsUGFyYW1WYWx1ZV0pID0+IHtcbiAgICAgICAgaWYgKHVybFBhcmFtS2V5ID09PSAnbGltaXQnKSB7XG4gICAgICAgICAgICBwYXJhbXMubGltaXQgPSArdXJsUGFyYW1WYWx1ZTtcbiAgICAgICAgICAgIGlmIChpc05hTihwYXJhbXMubGltaXQpIHx8IHBhcmFtcy5saW1pdCA8IDApIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgcGFyYW1zLmxpbWl0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHVybFBhcmFtS2V5ID09PSAnb2Zmc2V0Jykge1xuICAgICAgICAgICAgcGFyYW1zLm9mZnNldCA9ICt1cmxQYXJhbVZhbHVlO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHBhcmFtcy5vZmZzZXQpIHx8IHBhcmFtcy5vZmZzZXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHBhcmFtcy5vZmZzZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodXJsUGFyYW1LZXkgPT09ICdxJykge1xuICAgICAgICAgICAgcGFyYW1zLnNlYXJjaCA9IHVybFBhcmFtVmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodXJsUGFyYW1LZXkgPT09ICdzb3J0Jykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB1cmxQYXJhbVZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5zb3J0ID0gdXJsUGFyYW1WYWx1ZS5zcGxpdCgnLCcpLm1hcChzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgW2RpcmVjdGlvbiwgcHJvcGVydHldID0gcy5zcGxpdCgnOicpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3Byb3BlcnR5OiAocHJvcGVydHkgPz8gZGlyZWN0aW9uKSBhcyBrZXlvZiBvYmplY3QsIGFzY2VuZGluZzogZGlyZWN0aW9uICE9PSAnZGVzYyd9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYFN0cmluZyBpcyBleHBlY3RlZCBhcyB2YWx1ZSBmb3IgJyR7dXJsUGFyYW1LZXl9JyB3aGVuIGNvbnZlcnRpbmcgZnJvbSB1cmxQYXJhbXNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdXJsUGFyYW1WYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICh1cmxQYXJhbVZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGVtcHR5IHN0cmluZyBzaG91bGQgYmUgaWdub3JlZFxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyUGFydHMgPSB1cmxQYXJhbVZhbHVlLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICBsZXQgcGFydElkeCA9IDA7XG5cbiAgICAgICAgICAgIC8vIGNhc2Ugc2Vuc2l0aXZlXG4gICAgICAgICAgICBsZXQgY2FzZVNlbnNpdGl2ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJQYXJ0c1twYXJ0SWR4XSA9PT0gJ2NzJyB8fCBmaWx0ZXJQYXJ0c1twYXJ0SWR4XSA9PT0gJ2NpJykge1xuICAgICAgICAgICAgICAgIGNhc2VTZW5zaXRpdmUgPSBmaWx0ZXJQYXJ0c1twYXJ0SWR4KytdID09PSAnY3MnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBtYXRjaCBtb2RlXG4gICAgICAgICAgICBjb25zdCBtYXRjaE1vZGUgPSBmaWx0ZXJQYXJ0c1twYXJ0SWR4XSA/IEZpbHRlck1hdGNoTW9kZS5mcm9tQWJicmV2aWF0aW9uKGZpbHRlclBhcnRzW3BhcnRJZHhdKSA/PyBmaWx0ZXJQYXJ0c1twYXJ0SWR4XSA6IEZpbHRlck1hdGNoTW9kZS5FcXVhbHM7XG4gICAgICAgICAgICBwYXJ0SWR4Kys7XG5cbiAgICAgICAgICAgIGNvbnN0IG5vVmFsID0gbWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzIHx8IG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkRvZXNOb3RFeGlzdDtcblxuICAgICAgICAgICAgLy8gdmFsdWVcbiAgICAgICAgICAgIGxldCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQgfCBudWxsID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKCFub1ZhbCkge1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJQYXJ0cy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocGFydElkeCA9PT0gZmlsdGVyUGFydHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGZpbHRlclBhcnRzW3BhcnRJZHhdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFydElkeCA8IGZpbHRlclBhcnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBhcnJheSB0aGF0IHNob3VsZCBub3QgYmUgYXJyYXksIHNvIGpvaW4gYmFjayB0b2dldGhlclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGZpbHRlclBhcnRzLnNsaWNlKHBhcnRJZHgsIGZpbHRlclBhcnRzLmxlbmd0aCkuam9pbignOicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIG1hdGNoTW9kZSAhPT0gRmlsdGVyTWF0Y2hNb2RlLkV4aXN0cyAmJiBtYXRjaE1vZGUgIT09IEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdmFsdWUgdW5kZWZpbmVkIGFuZCBtYXRjaCBtb2RlIGV4cGVjdHMgdmFsdWUsIHRoZW4gc2tpcFxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAnbnVsbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgobWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuSW4gfHwgbWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuTm90SW4gfHwgbWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2VlbikgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXJyYXlWYWw6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZXNlIG1hdGNoIG1vZGVzIGV4cGVjdCBhcnJheVxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuaW5kZXhPZignXCInKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0b2tlbnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudFRva2VuID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXhwbGljaXRRdW90ZXMgPSBmYWxzZTsgLy90b2tlbiBpcyBxdW90ZWQsIGUuZy4gaW46MSwyLFwiMjJcIlwiXCIsXCIsMTIzXCJcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcXVvdGVzT3BlbmVkID0gZmFsc2U7IC8vdG9rZW4gaGFzIHN0YXJ0ZWQgcHJvY2Vzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHF1b3Rlc0V4cGxpY2l0bHlDbG9zZWQgPSBmYWxzZTsgLy90b2tlbiBwcm9jZXNzaW5nIGhhcyBmaW5pc2hlZCwgYWZ0ZXIgc2luZ2xlIFwiIGluIHF1b3RlZCBtb2RlLCBvciBiZWZvcmUgLCBpbiBub3QgcXVvdGVkXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjID0gdmFsdWVbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNldCB0aGUgdG9rZW5pemVyIHdoZW4gc2VlaW5nIHRoZSB0b2tlbiBzZXBhcmF0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IGlmIGVpdGhlcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcXVvdGVzIGhhdmUgbm90IGJlZW4gb3BlbmVkIHlldCAod2hlbiB0aGVyZSBhcmUgbm8gY2hhcmFjdGVycyBiZXR3ZWVuIHNlcGFyYXRvcnMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB0b2tlbiBoYXMgYmVlbiBleHBsaWNpdGx5IGNsb3NlZCAod2hlbiB3ZSBhY3R1YWxseSBoYXZlIGV4cGxpY2l0IG9wZW5pbmcgaS5lLiwgcXVvdGVzIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3Igd2UgaGF2ZSBpbXBsaWNpdCBxdW90ZXMgKGkuZS4sIHF1b3RlcyBhcmUgbm90IHRoZSBmaXJzdCBjaGFyYWN0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICcsJyAmJiAoIXF1b3Rlc09wZW5lZCB8fCBxdW90ZXNFeHBsaWNpdGx5Q2xvc2VkIHx8ICFleHBsaWNpdFF1b3RlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2goY3VycmVudFRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFRva2VuID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3Rlc09wZW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZXNFeHBsaWNpdGx5Q2xvc2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxpY2l0UXVvdGVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICdcIicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNjYXBlZCBkb3VibGUtcXVvdGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHBsaWNpdFF1b3RlcyAmJiBpICsgMSA8IHZhbHVlLmxlbmd0aCAmJiB2YWx1ZVtpICsgMV0gPT09ICdcIicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUb2tlbiArPSBjOyAvLyBBcHBlbmQgb25lIGRvdWJsZS1xdW90ZSB0byB0aGUgY3VycmVudCB0b2tlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrOyAvLyBTa2lwIHRoZSBuZXh0IGRvdWJsZS1xdW90ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGVuY291bnRlciBxdW90ZXMgYWdhaW4gYWZ0ZXIgdGhleSB3ZXJlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgPT4gd2UgY2xvc2UgdGhlIHRva2VuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV4cGxpY2l0UXVvdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZXNFeHBsaWNpdGx5Q2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbXBsaWNpdCBxdW90ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocXVvdGVzT3BlbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VG9rZW4gKz0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBxdW90ZXMgYXJlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgPT4gZXhwbGljaXRseSBvcGVuIHRoZSB0b2tlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUb2tlbiA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGVzT3BlbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxpY2l0UXVvdGVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdW90ZXNFeHBsaWNpdGx5Q2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZXNPcGVuZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VG9rZW4gKz0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdW90ZXNPcGVuZWQgJiYgIXF1b3Rlc0V4cGxpY2l0bHlDbG9zZWQgJiYgZXhwbGljaXRRdW90ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB0aGUgbGFzdCB0b2tlbiBhZnRlciB0aGUgbG9vcCBlbmRzXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaChjdXJyZW50VG9rZW4udG9TdHJpbmcoKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5VmFsID0gdG9rZW5zO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlWYWwgPSB2YWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW4gJiYgYXJyYXlWYWwubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFycmF5VmFsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHx8IChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZSEubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBmaWx0ZXIgd2l0aCBlbXB0eSB2YWx1ZSBpcyB0byBiZSBpZ25vcmVkXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhc2VTZW5zaXRpdmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghcGFyYW1zLmZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVycyA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwYXJhbXMuZmlsdGVyc1t1cmxQYXJhbUtleSBhcyBrZXlvZiBvYmplY3RdID0ge3ZhbHVlOiB2YWx1ZSwgbWF0Y2hNb2RlOiBtYXRjaE1vZGUsIGNhc2VTZW5zaXRpdmU6IGNhc2VTZW5zaXRpdmV9O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcGFyYW1zO1xufVxuXG4vKipcbiAqIE1ha2VzIGEgY29weSBvZiB0aGUgZ2l2ZW4gRGF0YUxpc3RQYXJhbXMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7RGF0YUxpc3RQYXJhbXM8U29ydHMsIEZpbHRlcnM+fSBwYXJhbXMgLSBUaGUgRGF0YUxpc3RQYXJhbXMgb2JqZWN0IHRvIGJlIGNvcGllZC5cbiAqIEByZXR1cm5zIHtEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz59IC0gUmV0dXJucyBhIG5ldyBjb3B5IG9mIHRoZSBEYXRhTGlzdFBhcmFtcyBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5RGF0YUxpc3RQYXJhbXM8U29ydHMgPSBzdHJpbmcsIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBzdHJpbmc+KHBhcmFtczogRGF0YUxpc3RQYXJhbXM8U29ydHMsIEZpbHRlcnM+KTogRGF0YUxpc3RQYXJhbXM8U29ydHMsIEZpbHRlcnM+IHtcbiAgICBjb25zdCBjb3B5OiBEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz4gPSB7XG4gICAgICAgIG9mZnNldDogcGFyYW1zLm9mZnNldCxcbiAgICAgICAgbGltaXQ6IHBhcmFtcy5saW1pdCxcbiAgICAgICAgc2VhcmNoOiBwYXJhbXMuc2VhcmNoXG4gICAgfTtcblxuICAgIGlmIChwYXJhbXMuc29ydCkge1xuICAgICAgICBjb3B5LnNvcnQgPSBwYXJhbXMuc29ydD8ubWFwKHMgPT4gKHsuLi5zfSkpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmZpbHRlcnMpIHtcbiAgICAgICAgY29weS5maWx0ZXJzID0gT2JqZWN0LmVudHJpZXMocGFyYW1zLmZpbHRlcnMpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gdmFsdWUgYXMgRGF0YUxpc3RGaWx0ZXI7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICAgICAgICBba2V5XToge1xuICAgICAgICAgICAgICAgICAgICAuLi5maWx0ZXJWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IEFycmF5LmlzQXJyYXkoZmlsdGVyVmFsdWUudmFsdWUpID8gWy4uLmZpbHRlclZhbHVlLnZhbHVlXSA6IGZpbHRlclZhbHVlLnZhbHVlXG4gICAgICAgICAgICAgICAgfSBhcyBEYXRhTGlzdEZpbHRlclxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSwge30gYXMgRGF0YUxpc3RGaWx0ZXJzVHlwZTxGaWx0ZXJzPik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvcHk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSB2YWx1ZSB0byBhIFVSTCBxdWVyeSBwYXJhbSBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gKlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxvd051bGw9ZmFsc2VdIC0gSW5kaWNhdGVzIHdoZXRoZXIgbnVsbCB2YWx1ZXMgYXJlIGFsbG93ZWQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgVVJMIHBhcmFtZXRlciByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUuXG4gKiBAdGhyb3dzIHtDb21tb25zSW50ZXJuYWxFcnJvcn0gSWYgYW4gdW5kZWZpbmVkIHZhbHVlIGlzIHBhc3NlZCB3aXRob3V0IGFsbG93TnVsbCBzZXQgdG8gdHJ1ZS5cbiAqIEB0aHJvd3Mge0NvbW1vbnNJbnRlcm5hbEVycm9yfSBJZiB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0IChleGNsdWRpbmcgRGF0ZSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRhTGlzdFBhcmFtc0ZpbHRlclZhbHVlVG9VcmxTdHJpbmcodmFsdWU6IHVua25vd24sIGFsbG93TnVsbCA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgJiYgYWxsb3dOdWxsKSByZXR1cm4gJ251bGwnO1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoJ1VuZGVmaW5lZCB2YWx1ZSBjYW5ub3QgYmUgY29udmVydGVkIHRvIHVybCBwYXJhbS4nKTsgLy8gdGhpcyBzaG91bGQgbm90IGhhcHBlbiwgc2hvdWxkIGJlIGZpbHRlcmVkIG91dCBlYXJsaWVyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKVxuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgIC5tYXAodiA9PiBkYXRhTGlzdFBhcmFtc0ZpbHRlclZhbHVlVG9VcmxTdHJpbmcodiwgYWxsb3dOdWxsKSlcbiAgICAgICAgICAgIC5tYXAodiA9PiAodi5pbmRleE9mKCcsJykgPj0gMCB8fCB2LmluZGV4T2YoJ1wiJykgPj0gMCA/IGBcIiR7di5yZXBsYWNlQWxsKCdcIicsICdcIlwiJyl9XCJgIDogdikpXG4gICAgICAgICAgICAuam9pbignLCcpO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHJldHVybiBkYXRlVG9Jc29TdHJpbmcodmFsdWUsICdkYXRlVGltZScsIHt1dGM6IHRydWV9KTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoJ0ZpbHRlciB2YWx1ZSBjYW5ub3QgYmUgb2JqZWN0Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saXN0Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvZGF0YS1saXN0L2RhdGEtbGlzdC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtGaWx0ZXJNYXRjaE1vZGVFeHRlbmRlZFR5cGV9IGZyb20gJy4vZmlsdGVyLW1hdGNoLm1vZGVsJztcblxuZXhwb3J0IGludGVyZmFjZSBEYXRhTGlzdFBhcmFtczxTb3J0cyA9IHN0cmluZywgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IHN0cmluZz4ge1xuICAgIG9mZnNldD86IG51bWJlcjtcbiAgICBsaW1pdD86IG51bWJlcjtcbiAgICBzb3J0PzogRGF0YUxpc3RTb3J0PFNvcnRzPltdO1xuICAgIHNlYXJjaD86IHN0cmluZztcbiAgICBmaWx0ZXJzPzogRGF0YUxpc3RGaWx0ZXJzVHlwZTxGaWx0ZXJzPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhTGlzdFNvcnQ8UHJvcGVydHkgPSBzdHJpbmc+IHtcbiAgICBwcm9wZXJ0eTogUHJvcGVydHk7XG4gICAgYXNjZW5kaW5nPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgRGF0YUxpc3RGaWx0ZXJCYXNlVmFsdWVUeXBlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IERhdGUgfCB1bmRlZmluZWQgfCBudWxsO1xuZXhwb3J0IHR5cGUgRGF0YUxpc3RGaWx0ZXJWYWx1ZVR5cGUgPSBEYXRhTGlzdEZpbHRlckJhc2VWYWx1ZVR5cGUgfCBEYXRhTGlzdEZpbHRlckJhc2VWYWx1ZVR5cGVbXSB8IHVuZGVmaW5lZCB8IG51bGw7XG5leHBvcnQgdHlwZSBEYXRhTGlzdEZpbHRlckZyb21VcmxWYWx1ZVR5cGUgPSBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbmV4cG9ydCB0eXBlIERhdGFMaXN0RmlsdGVyc1R5cGU8RmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IHN0cmluZz4gPSB7XG4gICAgW1Byb3AgaW4gRmlsdGVyc106IERhdGFMaXN0RmlsdGVyO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBEYXRhTGlzdEZpbHRlcjxWYWx1ZSA9IERhdGFMaXN0RmlsdGVyVmFsdWVUeXBlPiB7XG4gICAgdmFsdWU/OiBWYWx1ZTtcbiAgICBtYXRjaE1vZGU/OiBGaWx0ZXJNYXRjaE1vZGVFeHRlbmRlZFR5cGU7XG4gICAgY2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUxpc3RSZXN1bHQ8SXRlbSA9IGFueT4ge1xuICAgIGRhdGE6IEl0ZW1bXTtcbiAgICB0b3RhbENvdW50PzogbnVtYmVyO1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saXN0Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvZGF0YS1saXN0L2RhdGEtbGlzdC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtGaWx0ZXJNYXRjaE1vZGVFeHRlbmRlZFR5cGV9IGZyb20gJy4vZmlsdGVyLW1hdGNoLm1vZGVsJztcblxuZXhwb3J0IGludGVyZmFjZSBEYXRhTGlzdFBhcmFtczxTb3J0cyA9IHN0cmluZywgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IHN0cmluZz4ge1xuICAgIG9mZnNldD86IG51bWJlcjtcbiAgICBsaW1pdD86IG51bWJlcjtcbiAgICBzb3J0PzogRGF0YUxpc3RTb3J0PFNvcnRzPltdO1xuICAgIHNlYXJjaD86IHN0cmluZztcbiAgICBmaWx0ZXJzPzogUGFydGlhbDxEYXRhTGlzdEZpbHRlcnNUeXBlPEZpbHRlcnM+Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhTGlzdFNvcnQ8UHJvcGVydHkgPSBzdHJpbmc+IHtcbiAgICBwcm9wZXJ0eTogUHJvcGVydHk7XG4gICAgYXNjZW5kaW5nPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgRGF0YUxpc3RGaWx0ZXJCYXNlVmFsdWVUeXBlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IERhdGUgfCB1bmRlZmluZWQgfCBudWxsO1xuZXhwb3J0IHR5cGUgRGF0YUxpc3RGaWx0ZXJWYWx1ZVR5cGUgPSBEYXRhTGlzdEZpbHRlckJhc2VWYWx1ZVR5cGUgfCBEYXRhTGlzdEZpbHRlckJhc2VWYWx1ZVR5cGVbXSB8IHVuZGVmaW5lZCB8IG51bGw7XG5leHBvcnQgdHlwZSBEYXRhTGlzdEZpbHRlckZyb21VcmxWYWx1ZVR5cGUgPSBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbmV4cG9ydCB0eXBlIERhdGFMaXN0RmlsdGVyc1R5cGU8RmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IHN0cmluZz4gPSB7XG4gICAgW1Byb3AgaW4gRmlsdGVyc106IERhdGFMaXN0RmlsdGVyO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBEYXRhTGlzdEZpbHRlcjxWYWx1ZSA9IERhdGFMaXN0RmlsdGVyVmFsdWVUeXBlPiB7XG4gICAgdmFsdWU/OiBWYWx1ZTtcbiAgICBtYXRjaE1vZGU/OiBGaWx0ZXJNYXRjaE1vZGVFeHRlbmRlZFR5cGU7XG4gICAgY2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUxpc3RSZXN1bHQ8SXRlbSA9IGFueT4ge1xuICAgIGRhdGE6IEl0ZW1bXTtcbiAgICB0b3RhbENvdW50PzogbnVtYmVyO1xufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLmRhdGEtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9kYXRhLXByb3ZpZGVycy9sb29rdXAuZGF0YS1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEYXRhTGlzdFBhcmFtc30gZnJvbSAnLi4vZGF0YS1saXN0L2RhdGEtbGlzdC5tb2RlbCc7XG5pbXBvcnQge0l0ZW1Pck9ic2VydmFibGV9IGZyb20gJy4uL2hlbHBlcnMvdHlwZS1oZWxwZXJzJztcbmltcG9ydCB7Q2xhc3NPcHRUeXBlLCBTZXJ2aWNlQ2xhc3NPcHRUeXBlfSBmcm9tICcuLi9tb2RlbHMvY2xhc3Mtc2VydmljZS5tb2RlbCc7XG5pbXBvcnQge0lEYXRhUHJvdmlkZXJ9IGZyb20gJy4vYmFzZS5kYXRhLXByb3ZpZGVyJztcblxuZXhwb3J0IHR5cGUgTG9va3VwRGF0YVByb3ZpZGVyTG9va3VwRm5UeXBlPE1vZGVsVHlwZSA9IGFueSwgU2VydmljZVR5cGUgPSB1bmRlZmluZWQsIFJldHVyblR5cGUgPSBJdGVtT3JPYnNlcnZhYmxlPEFycmF5PE1vZGVsVHlwZT4+PiA9IChcbiAgICBwYXJhbXM6IERhdGFMaXN0UGFyYW1zIHwgdW5kZWZpbmVkLFxuICAgIHNlcnZpY2U6IFNlcnZpY2VUeXBlLFxuICAgIHNlYXJjaD86IHN0cmluZ1xuKSA9PiBSZXR1cm5UeXBlO1xuXG5leHBvcnQgaW50ZXJmYWNlIElMb29rdXBEYXRhUHJvdmlkZXJMb29rdXA8TW9kZWxUeXBlLCBTZXJ2aWNlVHlwZT4ge1xuICAgIGxvb2t1cDogTG9va3VwRGF0YVByb3ZpZGVyTG9va3VwRm5UeXBlPE1vZGVsVHlwZSwgU2VydmljZVR5cGU+O1xuXG4gICAgd2l0aExvb2t1cChmbj86IExvb2t1cERhdGFQcm92aWRlckxvb2t1cEZuVHlwZTxNb2RlbFR5cGUsIFNlcnZpY2VUeXBlPik6IHRoaXM7XG59XG5cbmV4cG9ydCB0eXBlIElMb29rdXBEYXRhUHJvdmlkZXI8TW9kZWxUeXBlID0gYW55LCBTZXJ2aWNlVHlwZSA9IGFueSwgQ1QgPSBDbGFzc09wdFR5cGU8TW9kZWxUeXBlPiwgU1QgPSBTZXJ2aWNlQ2xhc3NPcHRUeXBlPFNlcnZpY2VUeXBlPj4gPSBJRGF0YVByb3ZpZGVyPFxuICAgIE1vZGVsVHlwZSxcbiAgICBTZXJ2aWNlVHlwZSxcbiAgICBDVCxcbiAgICBTVFxuPiAmXG4gICAgSUxvb2t1cERhdGFQcm92aWRlckxvb2t1cDxNb2RlbFR5cGUsIFNlcnZpY2VUeXBlPjtcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLmRhdGEtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9kYXRhLXByb3ZpZGVycy9sb29rdXAuZGF0YS1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEYXRhTGlzdFBhcmFtc30gZnJvbSAnLi4vZGF0YS1saXN0L2RhdGEtbGlzdC5tb2RlbCc7XG5pbXBvcnQge0l0ZW1Pck9ic2VydmFibGV9IGZyb20gJy4uL2hlbHBlcnMvdHlwZS1oZWxwZXJzJztcbmltcG9ydCB7Q2xhc3NPcHRUeXBlLCBTZXJ2aWNlQ2xhc3NPcHRUeXBlfSBmcm9tICcuLi9tb2RlbHMvY2xhc3Mtc2VydmljZS5tb2RlbCc7XG5pbXBvcnQge0lEYXRhUHJvdmlkZXJ9IGZyb20gJy4vYmFzZS5kYXRhLXByb3ZpZGVyJztcblxuZXhwb3J0IHR5cGUgTG9va3VwRGF0YVByb3ZpZGVyTG9va3VwRm5UeXBlPFxuICAgIE1vZGVsID0gYW55LFxuICAgIFNlcnZpY2UgPSB1bmRlZmluZWQsXG4gICAgU29ydHMgPSBrZXlvZiBNb2RlbCxcbiAgICBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0ga2V5b2YgTW9kZWwsXG4gICAgUmV0dXJuVHlwZSA9IEl0ZW1Pck9ic2VydmFibGU8QXJyYXk8TW9kZWw+PlxuPiA9IChwYXJhbXM6IERhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPiB8IHVuZGVmaW5lZCwgc2VydmljZTogU2VydmljZSwgc2VhcmNoPzogc3RyaW5nKSA9PiBSZXR1cm5UeXBlO1xuXG5leHBvcnQgaW50ZXJmYWNlIElMb29rdXBEYXRhUHJvdmlkZXJMb29rdXA8TW9kZWwsIFNlcnZpY2UsIFNvcnRzID0ga2V5b2YgTW9kZWwsIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBrZXlvZiBNb2RlbD4ge1xuICAgIGxvb2t1cDogTG9va3VwRGF0YVByb3ZpZGVyTG9va3VwRm5UeXBlPE1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycz47XG5cbiAgICB3aXRoTG9va3VwKGZuPzogTG9va3VwRGF0YVByb3ZpZGVyTG9va3VwRm5UeXBlPE1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycz4pOiB0aGlzO1xufVxuXG5leHBvcnQgdHlwZSBJTG9va3VwRGF0YVByb3ZpZGVyPFxuICAgIE1vZGVsID0gYW55LFxuICAgIFNlcnZpY2UgPSBhbnksXG4gICAgU29ydHMgPSBrZXlvZiBNb2RlbCxcbiAgICBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0ga2V5b2YgTW9kZWwsXG4gICAgTW9kZWxDbGFzcyA9IENsYXNzT3B0VHlwZTxNb2RlbD4sXG4gICAgU2VydmljZUNsYXNzID0gU2VydmljZUNsYXNzT3B0VHlwZTxTZXJ2aWNlPlxuPiA9IElEYXRhUHJvdmlkZXI8TW9kZWwsIFNlcnZpY2UsIE1vZGVsQ2xhc3MsIFNlcnZpY2VDbGFzcz4gJiBJTG9va3VwRGF0YVByb3ZpZGVyTG9va3VwPE1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycz47XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9kZXNjcmlwdG9ycy9sb29rdXAuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJTG9va3VwRGF0YVByb3ZpZGVyLCBMb29rdXBEYXRhUHJvdmlkZXJMb29rdXBGblR5cGV9IGZyb20gJy4uL2RhdGEtcHJvdmlkZXJzL2xvb2t1cC5kYXRhLXByb3ZpZGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBJTG9va3VwRGVzY3JpcHRvcjxNb2RlbCwgU2VydmljZSA9IGFueT4ge1xuICAgIG9wdGlvbnNMYWJlbFByb3BlcnR5Pzogc3RyaW5nO1xuICAgIG9wdGlvbnNWYWx1ZVByb3BlcnR5Pzogc3RyaW5nO1xuICAgIG9wdGlvbnNUcmFja1Byb3BlcnR5Pzogc3RyaW5nO1xuICAgIGRhdGFQcm92aWRlcjogSUxvb2t1cERhdGFQcm92aWRlcjxNb2RlbCwgU2VydmljZT47XG5cbiAgICB3aXRoT3B0aW9uc0xhYmVsUHJvcGVydHkocHJvcGVydHk6IGtleW9mIE1vZGVsKTogdGhpcztcbiAgICB3aXRoT3B0aW9uc0xhYmVsUHJvcGVydHlVbnNhZmUocHJvcGVydHk6IHN0cmluZyk6IHRoaXM7XG5cbiAgICB3aXRoT3B0aW9uc1RyYWNrUHJvcGVydHkocHJvcGVydHk6IGtleW9mIE1vZGVsKTogdGhpcztcbiAgICB3aXRoT3B0aW9uc1RyYWNrUHJvcGVydHlVbnNhZmUocHJvcGVydHk6IHN0cmluZyk6IHRoaXM7XG5cbiAgICB3aXRoTG9va3VwKGxvb2t1cDogTG9va3VwRGF0YVByb3ZpZGVyTG9va3VwRm5UeXBlPE1vZGVsLCBTZXJ2aWNlPik6IHRoaXM7XG59XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9kZXNjcmlwdG9ycy9sb29rdXAuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJTG9va3VwRGF0YVByb3ZpZGVyLCBMb29rdXBEYXRhUHJvdmlkZXJMb29rdXBGblR5cGV9IGZyb20gJy4uL2RhdGEtcHJvdmlkZXJzL2xvb2t1cC5kYXRhLXByb3ZpZGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBJTG9va3VwRGVzY3JpcHRvcjxNb2RlbCwgU2VydmljZSA9IGFueSwgU29ydHMgPSBrZXlvZiBNb2RlbCwgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IGtleW9mIE1vZGVsPiB7XG4gICAgb3B0aW9uc0xhYmVsUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgb3B0aW9uc1ZhbHVlUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgb3B0aW9uc1RyYWNrUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgZGF0YVByb3ZpZGVyOiBJTG9va3VwRGF0YVByb3ZpZGVyPE1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycz47XG5cbiAgICB3aXRoT3B0aW9uc0xhYmVsUHJvcGVydHkocHJvcGVydHk6IGtleW9mIE1vZGVsKTogdGhpcztcbiAgICB3aXRoT3B0aW9uc0xhYmVsUHJvcGVydHlVbnNhZmUocHJvcGVydHk6IHN0cmluZyk6IHRoaXM7XG5cbiAgICB3aXRoT3B0aW9uc1RyYWNrUHJvcGVydHkocHJvcGVydHk6IGtleW9mIE1vZGVsKTogdGhpcztcbiAgICB3aXRoT3B0aW9uc1RyYWNrUHJvcGVydHlVbnNhZmUocHJvcGVydHk6IHN0cmluZyk6IHRoaXM7XG5cbiAgICB3aXRoTG9va3VwKGxvb2t1cDogTG9va3VwRGF0YVByb3ZpZGVyTG9va3VwRm5UeXBlPE1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycz4pOiB0aGlzO1xufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL2Rlc2NyaXB0b3JzL3RhYmxlLmRlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SUNvbHVtbkRlc2NyaXB0b3J9IGZyb20gJy4vY29sdW1uLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtJRmlsdGVyRGVzY3JpcHRvcn0gZnJvbSAnLi9maWx0ZXIuZGVzY3JpcHRvcic7XG5pbXBvcnQge0lNb2RlbERlc2NyaXB0b3J9IGZyb20gJy4vbW9kZWwuZGVzY3JpcHRvcic7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlRGVzY3JpcHRvcjxUYWJsZU1vZGVsLCBTb3J0UHJvcGVydHksIEZpbHRlclByb3BlcnR5PiB7XG4gICAgbW9kZWw6IElNb2RlbERlc2NyaXB0b3I8VGFibGVNb2RlbD47XG5cbiAgICB3aXRoRGVmYXVsdFNvcnRVbnNhZmUocHJvcGVydHk6IHN0cmluZywgYXNjZW5kaW5nPzogYm9vbGVhbiwgb3JkZXI/OiBudW1iZXIsIGVuYWJsZWQ/OiBib29sZWFuKTogdGhpcztcblxuICAgIHdpdGhTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcsIGlzRGVmYXVsdDogYm9vbGVhbiwgYXNjZW5kaW5nPzogYm9vbGVhbik6IHRoaXM7XG5cbiAgICBhZGRGaWx0ZXJGcm9tQ29sdW1uRGVzY3JpcHRvclVuc2FmZTxDb2x1bW5Nb2RlbCwgQ29sdW1uVmFsdWU+KFxuICAgICAgICBjb2x1bW46IElDb2x1bW5EZXNjcmlwdG9yPENvbHVtbk1vZGVsLCBUYWJsZU1vZGVsLCBDb2x1bW5WYWx1ZT4sXG4gICAgICAgIGZvcmNlU2ltcGxlOiBib29sZWFuXG4gICAgKTogSUZpbHRlckRlc2NyaXB0b3I8YW55LCBUYWJsZU1vZGVsPjtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL2Rlc2NyaXB0b3JzL3RhYmxlLmRlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SUNvbHVtbkRlc2NyaXB0b3J9IGZyb20gJy4vY29sdW1uLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtJRmlsdGVyRGVzY3JpcHRvcn0gZnJvbSAnLi9maWx0ZXIuZGVzY3JpcHRvcic7XG5pbXBvcnQge0lNb2RlbERlc2NyaXB0b3J9IGZyb20gJy4vbW9kZWwuZGVzY3JpcHRvcic7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlRGVzY3JpcHRvcjxUYWJsZU1vZGVsLCBTb3J0UHJvcGVydHksIEZpbHRlclByb3BlcnR5PiB7XG4gICAgbW9kZWw6IElNb2RlbERlc2NyaXB0b3I8VGFibGVNb2RlbD47XG5cbiAgICB3aXRoRGVmYXVsdFNvcnRVbnNhZmUocHJvcGVydHk6IHN0cmluZywgYXNjZW5kaW5nPzogYm9vbGVhbiwgb3JkZXI/OiBudW1iZXIsIGVuYWJsZWQ/OiBib29sZWFuKTogdGhpcztcblxuICAgIHdpdGhTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcsIGlzRGVmYXVsdDogYm9vbGVhbiwgYXNjZW5kaW5nPzogYm9vbGVhbik6IHRoaXM7XG5cbiAgICBhZGRGaWx0ZXJGcm9tQ29sdW1uRGVzY3JpcHRvclVuc2FmZTxGaWx0ZXJNb2RlbD4oY29sdW1uOiBJQ29sdW1uRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbCwgYW55PiwgZm9yY2VTaW1wbGU6IGJvb2xlYW4pOiBJRmlsdGVyRGVzY3JpcHRvcjxhbnksIFRhYmxlTW9kZWw+O1xufVxuIl19
@@ -51,9 +51,23 @@ export class FilterLookupDescriptor extends FilterDescriptor {
51
51
  get dropdownClassName() {
52
52
  return this._dropdownClassName;
53
53
  }
54
+ /**
55
+ * Sets label property for options display.
56
+ *
57
+ * @param property Property for label options.
58
+ * @param translate If the options should be translated through the i18n.
59
+ */
54
60
  withOptionsLabelProperty(property, translate = false) {
55
61
  return this.withOptionsLabelPropertyUnsafe(property, translate);
56
62
  }
63
+ /**
64
+ * Sets label property for options display.
65
+ *
66
+ * This function is UNSAFE!
67
+ *
68
+ * @param property Property for label options.
69
+ * @param translate If the options should be translated through the i18n.
70
+ */
57
71
  withOptionsLabelPropertyUnsafe(property, translate = false) {
58
72
  this._optionsLabelProperty = property;
59
73
  this._optionsLabelTranslate = translate;
@@ -61,11 +75,15 @@ export class FilterLookupDescriptor extends FilterDescriptor {
61
75
  }
62
76
  /**
63
77
  * Method will set `optionsValueProperty`, because track properties are not supported here as filters need final value to work correctly.
64
- * Use `optionsValueProperty` instead.
78
+ * Use `optionsValueProperty` in filter creation instead.
65
79
  */
66
80
  withOptionsTrackProperty() {
67
81
  return this;
68
82
  }
83
+ /**
84
+ * Method will set `optionsValueProperty`, because track properties are not supported here as filters need final value to work correctly.
85
+ * Use `optionsValueProperty` in filter creation instead.
86
+ */
69
87
  withOptionsTrackPropertyUnsafe() {
70
88
  return this;
71
89
  }
@@ -73,14 +91,29 @@ export class FilterLookupDescriptor extends FilterDescriptor {
73
91
  this._dataProvider.withLookup(lookup);
74
92
  return this;
75
93
  }
94
+ /**
95
+ * Sets multiselect for lookups.
96
+ *
97
+ * @param multiselect Enables/disables the feature.
98
+ */
76
99
  withMultiselect(multiselect = true) {
77
100
  this._multiselect = multiselect;
78
101
  return this;
79
102
  }
103
+ /**
104
+ * Sets the dropdown class name.
105
+ * @param dropdownClassName Class name for dropdown.
106
+ */
80
107
  withDropdownClassName(dropdownClassName) {
81
108
  this._dropdownClassName = dropdownClassName;
82
109
  return this;
83
110
  }
111
+ /**
112
+ * Sets default filter value for filter.
113
+ *
114
+ * @param value Value for default filter.
115
+ * @param matchMode Match mode for default filter.
116
+ */
84
117
  withDefaultFilter(value, matchMode) {
85
118
  this._hasDefaultValue = true;
86
119
  this._defaultValue = value;
@@ -91,6 +124,11 @@ export class FilterLookupDescriptor extends FilterDescriptor {
91
124
  }
92
125
  return this;
93
126
  }
127
+ /**
128
+ * Sets lookup as autocomplete instead of dropdown.
129
+ *
130
+ * @param opts Additional options.
131
+ */
94
132
  asAutocomplete(opts) {
95
133
  this._lookupType = FilterLookupTypeEnum.Autocomplete;
96
134
  this._autocompleteAutoClear = opts?.autoClear;
@@ -98,6 +136,9 @@ export class FilterLookupDescriptor extends FilterDescriptor {
98
136
  this._autocompleteInlineSearch = opts?.inlineSearch;
99
137
  return this;
100
138
  }
139
+ /**
140
+ * Copies current descriptor to a new instance.
141
+ */
101
142
  copy() {
102
143
  const descriptor = new FilterLookupDescriptor(this._property, {
103
144
  dataProvider: this.dataProvider
@@ -134,6 +175,11 @@ export class FilterLookupEnumDescriptor extends FilterLookupDescriptor {
134
175
  get enum() {
135
176
  return this._enum;
136
177
  }
178
+ /**
179
+ * Sets lookup as autocomplete instead of dropdown.
180
+ *
181
+ * @param opts Additional options.
182
+ */
137
183
  asAutocomplete(opts) {
138
184
  super.asAutocomplete({
139
185
  ...opts,
@@ -145,9 +191,18 @@ export class FilterLookupEnumDescriptor extends FilterLookupDescriptor {
145
191
  withMultiselectEnum(multiselect = true) {
146
192
  return super.withMultiselect(multiselect);
147
193
  }
194
+ /**
195
+ * Do not use, use `withDefaultFilterEnum` instead.
196
+ */
148
197
  withDefaultFilter() {
149
198
  throw new CommonsInternalError(`withDefaultFilter on FilterLookupEnumDescriptor should not be used. Use withDefaultFilterEnum instead.`, { name: 'FilterDescriptorError' });
150
199
  }
200
+ /**
201
+ * Sets default filter value for filter.
202
+ *
203
+ * @param value Value(s) for default filter.
204
+ * @param matchMode Match mode for default filter.
205
+ */
151
206
  withDefaultFilterEnum(value, matchMode) {
152
207
  let defaultOptionValue;
153
208
  if (Array.isArray(value)) {
@@ -175,10 +230,13 @@ export class FilterLookupEnumDescriptor extends FilterLookupDescriptor {
175
230
  }
176
231
  return this;
177
232
  }
233
+ /**
234
+ * Copies current descriptor to a new instance.
235
+ */
178
236
  copy() {
179
237
  const field = new FilterLookupEnumDescriptor(this._property, this.enum, []);
180
238
  this.copyFieldsTo(field);
181
239
  return field;
182
240
  }
183
241
  }
184
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWxvb2t1cC5kZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZmlsdGVyL3NyYy9kZXNjcmlwdG9ycy9maWx0ZXItbG9va3VwLmRlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUV4QixPQUFPLEVBR0gsb0JBQW9CLEVBU3BCLDZCQUE2QixFQUM3QiwwQkFBMEIsRUFDMUIsbUJBQW1CLEVBQ3RCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUFpQixvQkFBb0IsRUFBRSwyQkFBMkIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRS9HLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxjQUFjLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQWtCckQsTUFBTSxPQUFPLHNCQUErRCxTQUFRLGdCQUF5QztJQWN6SCxZQUFZLFFBQWdCLEVBQUUsR0FBcUU7UUFDL0YsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBWlYsZ0JBQVcsR0FBMEIsb0JBQW9CLENBQUMsUUFBUSxDQUFDO1FBRW5FLDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQUMvQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUVyQix1QkFBa0IsR0FBRyw0QkFBNEIsQ0FBQztRQVF4RCxJQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFFekMsSUFBSSxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDO1FBQzFDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLHNCQUFzQixD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QUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRWUsSUFBSTtRQUNoQixNQUFNLEtBQUssR0FBRyxJQUFJLDBCQUEwQixDQUFtQixJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDOUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge29mfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgICBDbGFzc09wdFR5cGUsXG4gICAgQ2xhc3NUeXBlLFxuICAgIENvbW1vbnNJbnRlcm5hbEVycm9yLFxuICAgIEVudW1Db25zdGFudFR5cGUsXG4gICAgRW51bVZhbHVlLFxuICAgIEZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZSxcbiAgICBJTG9va3VwRGF0YVByb3ZpZGVyLFxuICAgIElMb29rdXBEZXNjcmlwdG9yLFxuICAgIExvb2t1cERhdGFQcm92aWRlckxvb2t1cEZuVHlwZSxcbiAgICBTZXJ2aWNlQ2xhc3NPcHRUeXBlLFxuICAgIFNlcnZpY2VDbGFzc1R5cGUsXG4gICAgZnJvbUVudW1Db25zdGFudHNBc1ZhbHVlQXJyYXksXG4gICAgZnJvbUVudW1WYWx1ZXNBc1ZhbHVlQXJyYXksXG4gICAgZ2V0RW51bUNvbnN0YW50TmFtZVxufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtMb29rdXBEYXRhUHJvdmlkZXJJbnN0fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2Zvcm0vYXBpJztcbmltcG9ydCB7RW51bURlc2NyaXB0b3IsIGZpbmRDbGFzc0lkQXR0cmlidXRlLCB0cnlTZXRMb29rdXBJdGVtc1Byb3BlcnRpZXN9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvbW9kZWwnO1xuXG5pbXBvcnQge0ZpbHRlckxvb2t1cFR5cGVFbnVtLCBGaWx0ZXJUeXBlRW51bX0gZnJvbSAnLi4vbW9kZWxzL2ZpbHRlci5tb2RlbCc7XG5pbXBvcnQge0ZpbHRlckRlc2NyaXB0b3J9IGZyb20gJy4vZmlsdGVyLmRlc2NyaXB0b3InO1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yQ29uc3RydWN0b3JPcHRzVHlwZTxGaWx0ZXJNb2RlbCwgU2VydmljZT4gPSBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yQ3JlYXRlT3B0c1Byb3ZpZGVyVHlwZTxGaWx0ZXJNb2RlbCwgU2VydmljZT4gJiB7XG4gICAgdHlwZT86IENsYXNzVHlwZTxGaWx0ZXJNb2RlbD47XG4gICAgb3B0aW9uc1ZhbHVlUHJvcGVydHk/OiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgRmlsdGVyTG9va3VwRGVzY3JpcHRvckNyZWF0ZU9wdHNQcm92aWRlclR5cGU8RmlsdGVyTW9kZWwsIFNlcnZpY2U+ID0ge1xuICAgIHNlcnZpY2VUeXBlPzogU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPjtcbiAgICBkYXRhUHJvdmlkZXI/OiBJTG9va3VwRGF0YVByb3ZpZGVyPEZpbHRlck1vZGVsLCBTZXJ2aWNlPjtcbn07XG5cbmV4cG9ydCB0eXBlIEZpbHRlckxvb2t1cEF1dG9jb21wbGV0ZU9wdHNUeXBlID0ge1xuICAgIG9wZW5PbkZvY3VzPzogYm9vbGVhbjtcbiAgICBpbmxpbmVTZWFyY2g/OiBib29sZWFuO1xuICAgIGF1dG9DbGVhcj86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgY2xhc3MgRmlsdGVyTG9va3VwRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbCwgU2VydmljZSA9IGFueT4gZXh0ZW5kcyBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPiBpbXBsZW1lbnRzIElMb29rdXBEZXNjcmlwdG9yPEZpbHRlck1vZGVsPiB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9kYXRhUHJvdmlkZXI6IElMb29rdXBEYXRhUHJvdmlkZXI8RmlsdGVyTW9kZWwsIFNlcnZpY2U+O1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfb3B0aW9uc1ZhbHVlUHJvcGVydHk/OiBzdHJpbmcgfCBudWxsO1xuICAgIHByb3RlY3RlZCBfbG9va3VwVHlwZT86IEZpbHRlckxvb2t1cFR5cGVFbnVtID0gRmlsdGVyTG9va3VwVHlwZUVudW0uRHJvcGRvd247XG4gICAgcHJvdGVjdGVkIF9vcHRpb25zTGFiZWxQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX29wdGlvbnNMYWJlbFRyYW5zbGF0ZSA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfbXVsdGlzZWxlY3QgPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBfZHJvcGRvd25DbGFzc05hbWUgPSAnbW5nLWZpbHRlci1sb29rdXAtZHJvcGRvd24nO1xuXG4gICAgcHJvdGVjdGVkIF9hdXRvY29tcGxldGVPcGVuT25Gb2N1cz86IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIF9hdXRvY29tcGxldGVJbmxpbmVTZWFyY2g/OiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBfYXV0b2NvbXBsZXRlQXV0b0NsZWFyPzogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBzdHJpbmcsIGNmZz86IEZpbHRlckxvb2t1cERlc2NyaXB0b3JDb25zdHJ1Y3Rvck9wdHNUeXBlPEZpbHRlck1vZGVsLCBTZXJ2aWNlPikge1xuICAgICAgICBzdXBlcihwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX2ZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5Mb29rdXA7XG5cbiAgICAgICAgaWYgKGNmZz8uZGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBjZmcuZGF0YVByb3ZpZGVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVByb3ZpZGVyID0gbmV3IExvb2t1cERhdGFQcm92aWRlckluc3Q8RmlsdGVyTW9kZWwsIFNlcnZpY2UsIENsYXNzT3B0VHlwZTxGaWx0ZXJNb2RlbD4sIFNlcnZpY2VDbGFzc09wdFR5cGU8U2VydmljZT4+KGNmZz8udHlwZSwgY2ZnPy5zZXJ2aWNlVHlwZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9vcHRpb25zVmFsdWVQcm9wZXJ0eSA9IHR5cGVvZiBjZmc/Lm9wdGlvbnNWYWx1ZVByb3BlcnR5ID09PSAndW5kZWZpbmVkJyA/IGZpbmRDbGFzc0lkQXR0cmlidXRlKHRoaXMuX2RhdGFQcm92aWRlci5jbGFzc1R5cGUpID8/IHVuZGVmaW5lZCA6IGNmZz8ub3B0aW9uc1ZhbHVlUHJvcGVydHk7XG5cbiAgICAgICAgdHJ5U2V0TG9va3VwSXRlbXNQcm9wZXJ0aWVzKHRoaXMsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvb2t1cFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb29rdXBUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGF0YVByb3ZpZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVByb3ZpZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgb3B0aW9uc0xhYmVsUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcHRpb25zTGFiZWxQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG9wdGlvbnNMYWJlbFRyYW5zbGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnNMYWJlbFRyYW5zbGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG9wdGlvbnNWYWx1ZVByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9uc1ZhbHVlUHJvcGVydHkgPz8gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbXVsdGlzZWxlY3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tdWx0aXNlbGVjdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGF1dG9jb21wbGV0ZU9wZW5PbkZvY3VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b2NvbXBsZXRlT3Blbk9uRm9jdXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhdXRvY29tcGxldGVBdXRvQ2xlYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvY29tcGxldGVBdXRvQ2xlYXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhdXRvY29tcGxldGVJbmxpbmVTZWFyY2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvY29tcGxldGVJbmxpbmVTZWFyY2g7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkcm9wZG93bkNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Ryb3Bkb3duQ2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoT3B0aW9uc0xhYmVsUHJvcGVydHkocHJvcGVydHk6IGtleW9mIEZpbHRlck1vZGVsLCB0cmFuc2xhdGUgPSBmYWxzZSk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoT3B0aW9uc0xhYmVsUHJvcGVydHlVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nLCB0cmFuc2xhdGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoT3B0aW9uc0xhYmVsUHJvcGVydHlVbnNhZmUocHJvcGVydHk6IHN0cmluZywgdHJhbnNsYXRlID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fb3B0aW9uc0xhYmVsUHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgdGhpcy5fb3B0aW9uc0xhYmVsVHJhbnNsYXRlID0gdHJhbnNsYXRlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2Qgd2lsbCBzZXQgYG9wdGlvbnNWYWx1ZVByb3BlcnR5YCwgYmVjYXVzZSB0cmFjayBwcm9wZXJ0aWVzIGFyZSBub3Qgc3VwcG9ydGVkIGhlcmUgYXMgZmlsdGVycyBuZWVkIGZpbmFsIHZhbHVlIHRvIHdvcmsgY29ycmVjdGx5LlxuICAgICAqIFVzZSBgb3B0aW9uc1ZhbHVlUHJvcGVydHlgIGluc3RlYWQuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhPcHRpb25zVHJhY2tQcm9wZXJ0eSgpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhPcHRpb25zVHJhY2tQcm9wZXJ0eVVuc2FmZSgpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhMb29rdXAobG9va3VwPzogTG9va3VwRGF0YVByb3ZpZGVyTG9va3VwRm5UeXBlPEZpbHRlck1vZGVsLCBTZXJ2aWNlPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIud2l0aExvb2t1cChsb29rdXApO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE11bHRpc2VsZWN0KG11bHRpc2VsZWN0ID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLl9tdWx0aXNlbGVjdCA9IG11bHRpc2VsZWN0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERyb3Bkb3duQ2xhc3NOYW1lKGRyb3Bkb3duQ2xhc3NOYW1lOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZHJvcGRvd25DbGFzc05hbWUgPSBkcm9wZG93bkNsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhEZWZhdWx0RmlsdGVyKHZhbHVlOiBGaWx0ZXJNb2RlbCB8IEZpbHRlck1vZGVsW10gfCB1bmRlZmluZWQsIG1hdGNoTW9kZTogRmlsdGVyTWF0Y2hNb2RlRXh0ZW5kZWRUeXBlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc0RlZmF1bHRWYWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9kZWZhdWx0TWF0Y2hNb2RlID0gbWF0Y2hNb2RlO1xuXG4gICAgICAgIHRoaXMudmFsaWRhdGVEZWZhdWx0RmlsdGVyKHZhbHVlLCBtYXRjaE1vZGUpO1xuXG4gICAgICAgIGlmICgoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgIXRoaXMubXVsdGlzZWxlY3QpIHx8ICh0aGlzLm11bHRpc2VsZWN0ICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgRGVmYXVsdCB2YWx1ZSBub3QgaW4gY29ycmVjdCBmb3JtYXQgZm9yIHByb3BlcnR5ICR7dGhpcy5fcHJvcGVydHl9LmAsIHtuYW1lOiAnRmlsdGVyRGVzY3JpcHRvckVycm9yJ30pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzQXV0b2NvbXBsZXRlKG9wdHM/OiBGaWx0ZXJMb29rdXBBdXRvY29tcGxldGVPcHRzVHlwZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9sb29rdXBUeXBlID0gRmlsdGVyTG9va3VwVHlwZUVudW0uQXV0b2NvbXBsZXRlO1xuICAgICAgICB0aGlzLl9hdXRvY29tcGxldGVBdXRvQ2xlYXIgPSBvcHRzPy5hdXRvQ2xlYXI7XG4gICAgICAgIHRoaXMuX2F1dG9jb21wbGV0ZU9wZW5PbkZvY3VzID0gb3B0cz8ub3Blbk9uRm9jdXM7XG4gICAgICAgIHRoaXMuX2F1dG9jb21wbGV0ZUlubGluZVNlYXJjaCA9IG9wdHM/LmlubGluZVNlYXJjaDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGNvcHkoKTogRmlsdGVyTG9va3VwRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbCwgU2VydmljZT4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IEZpbHRlckxvb2t1cERlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWwsIFNlcnZpY2U+KHRoaXMuX3Byb3BlcnR5LCB7XG4gICAgICAgICAgICBkYXRhUHJvdmlkZXI6IHRoaXMuZGF0YVByb3ZpZGVyXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGNvcHlGaWVsZHNUbyhmaWx0ZXI6IEZpbHRlckxvb2t1cERlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWwsIFNlcnZpY2U+KSB7XG4gICAgICAgIHN1cGVyLmNvcHlGaWVsZHNUbyhmaWx0ZXIpO1xuICAgICAgICBmaWx0ZXIuX2xvb2t1cFR5cGUgPSB0aGlzLl9sb29rdXBUeXBlO1xuICAgICAgICBmaWx0ZXIuX29wdGlvbnNMYWJlbFByb3BlcnR5ID0gdGhpcy5fb3B0aW9uc0xhYmVsUHJvcGVydHk7XG4gICAgICAgIGZpbHRlci5fb3B0aW9uc0xhYmVsVHJhbnNsYXRlID0gdGhpcy5fb3B0aW9uc0xhYmVsVHJhbnNsYXRlO1xuICAgICAgICBmaWx0ZXIuX211bHRpc2VsZWN0ID0gdGhpcy5fbXVsdGlzZWxlY3Q7XG4gICAgICAgIGZpbHRlci5fZHJvcGRvd25DbGFzc05hbWUgPSB0aGlzLl9kcm9wZG93bkNsYXNzTmFtZTtcbiAgICAgICAgZmlsdGVyLl9hdXRvY29tcGxldGVPcGVuT25Gb2N1cyA9IHRoaXMuX2F1dG9jb21wbGV0ZU9wZW5PbkZvY3VzO1xuICAgICAgICBmaWx0ZXIuX2F1dG9jb21wbGV0ZUlubGluZVNlYXJjaCA9IHRoaXMuX2F1dG9jb21wbGV0ZUlubGluZVNlYXJjaDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJMb29rdXBFbnVtRGVzY3JpcHRvcjxFbnVtLCBUYWJsZU1vZGVsPiBleHRlbmRzIEZpbHRlckxvb2t1cERlc2NyaXB0b3I8RW51bVZhbHVlLCBUYWJsZU1vZGVsPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZW51bTogRW51bURlc2NyaXB0b3I8RW51bT47XG4gICAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uRW51bVZhbHVlczogRW51bVZhbHVlW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbmFtZUFzVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBzdHJpbmcsIGVudW1EZXNjOiBFbnVtRGVzY3JpcHRvcjxFbnVtPiwgb3B0aW9ucz86IEFycmF5PEVudW0+KSB7XG4gICAgICAgIHN1cGVyKHByb3BlcnR5LCB7XG4gICAgICAgICAgICBkYXRhUHJvdmlkZXI6IG5ldyBMb29rdXBEYXRhUHJvdmlkZXJJbnN0PEVudW1WYWx1ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZD4odW5kZWZpbmVkLCB1bmRlZmluZWQpLFxuICAgICAgICAgICAgb3B0aW9uc1ZhbHVlUHJvcGVydHk6ICd2YWx1ZSdcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2ZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5Mb29rdXBFbnVtO1xuXG4gICAgICAgIHRoaXMuX2VudW0gPSBlbnVtRGVzYztcblxuICAgICAgICB0aGlzLl9vcHRpb25FbnVtVmFsdWVzID0gQXJyYXkuaXNBcnJheShvcHRpb25zKVxuICAgICAgICAgICAgPyBmcm9tRW51bVZhbHVlc0FzVmFsdWVBcnJheSh0aGlzLl9lbnVtLnR5cGUsIG9wdGlvbnMsIHRoaXMuX2VudW0ubmFtZUFzVmFsdWUsIHRoaXMuX2VudW0uaTE4bkJhc2VLZXkgPz8gdW5kZWZpbmVkKVxuICAgICAgICAgICAgOiBmcm9tRW51bUNvbnN0YW50c0FzVmFsdWVBcnJheSh0aGlzLl9lbnVtLnR5cGUsIHRoaXMuX2VudW0ubmFtZUFzVmFsdWUsIHRoaXMuX2VudW0uaTE4bkJhc2VLZXkgPz8gdW5kZWZpbmVkKTtcblxuICAgICAgICB0aGlzLndpdGhMb29rdXAoKCkgPT4gb2YodGhpcy5fb3B0aW9uRW51bVZhbHVlcykpO1xuICAgICAgICB0aGlzLndpdGhPcHRpb25zTGFiZWxQcm9wZXJ0eSgndGl0bGUnLCB0aGlzLl9lbnVtLmkxOG5CYXNlS2V5ICE9PSBudWxsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVudW0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnVtO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBhc0F1dG9jb21wbGV0ZShvcHRzPzogRmlsdGVyTG9va3VwQXV0b2NvbXBsZXRlT3B0c1R5cGUpOiB0aGlzIHtcbiAgICAgICAgc3VwZXIuYXNBdXRvY29tcGxldGUoe1xuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgICAgIG9wZW5PbkZvY3VzOiBvcHRzPy5vcGVuT25Gb2N1cyA/PyB0cnVlLFxuICAgICAgICAgICAgaW5saW5lU2VhcmNoOiBvcHRzPy5pbmxpbmVTZWFyY2ggPz8gdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhNdWx0aXNlbGVjdEVudW0obXVsdGlzZWxlY3QgPSB0cnVlKTogRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3I8RW51bSwgVGFibGVNb2RlbD4ge1xuICAgICAgICByZXR1cm4gc3VwZXIud2l0aE11bHRpc2VsZWN0KG11bHRpc2VsZWN0KSBhcyBGaWx0ZXJMb29rdXBFbnVtRGVzY3JpcHRvcjxFbnVtLCBUYWJsZU1vZGVsPjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd2l0aERlZmF1bHRGaWx0ZXIoKTogdGhpcyB7XG4gICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgd2l0aERlZmF1bHRGaWx0ZXIgb24gRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3Igc2hvdWxkIG5vdCBiZSB1c2VkLiBVc2Ugd2l0aERlZmF1bHRGaWx0ZXJFbnVtIGluc3RlYWQuYCwge25hbWU6ICdGaWx0ZXJEZXNjcmlwdG9yRXJyb3InfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEZWZhdWx0RmlsdGVyRW51bSh2YWx1ZTogRW51bUNvbnN0YW50VHlwZSB8IEVudW1Db25zdGFudFR5cGVbXSB8IHVuZGVmaW5lZCwgbWF0Y2hNb2RlOiBGaWx0ZXJNYXRjaE1vZGVFeHRlbmRlZFR5cGUpOiB0aGlzIHtcbiAgICAgICAgbGV0IGRlZmF1bHRPcHRpb25WYWx1ZTogYW55IHwgYW55W107XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgZGVmYXVsdE9wdGlvblZhbHVlID0gdGhpcy5fbmFtZUFzVmFsdWUgPyB2YWx1ZS5tYXAodmFsdWUgPT4gZ2V0RW51bUNvbnN0YW50TmFtZSh0aGlzLmVudW0udHlwZSwgdmFsdWUpKSA6IHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRlZmF1bHRPcHRpb25WYWx1ZSA9IHRoaXMuX25hbWVBc1ZhbHVlID8gZ2V0RW51bUNvbnN0YW50TmFtZSh0aGlzLmVudW0udHlwZSwgdmFsdWUpIDogdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVmYXVsdE9wdGlvblZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGxldCBvcHRpb246IGFueSB8IGFueVtdO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGVmYXVsdE9wdGlvblZhbHVlKSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbiA9IGRlZmF1bHRPcHRpb25WYWx1ZS5tYXAodmFsdWUgPT4gdGhpcy5fb3B0aW9uRW51bVZhbHVlcy5maW5kKG8gPT4gby52YWx1ZSA9PT0gdmFsdWUpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uID0gdGhpcy5fb3B0aW9uRW51bVZhbHVlcy5maW5kKG8gPT4gby52YWx1ZSA9PT0gZGVmYXVsdE9wdGlvblZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGRlZmF1bHRGaWx0ZXJWYWx1ZTogYW55IHwgYW55W107XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb24pKSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlclZhbHVlID0gdGhpcy5fb3B0aW9uc1ZhbHVlUHJvcGVydHkgPyBvcHRpb24ubWFwKHZhbHVlID0+IHZhbHVlW3RoaXMuX29wdGlvbnNWYWx1ZVByb3BlcnR5IGFzIGtleW9mIG9iamVjdF0pIDogb3B0aW9uO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVyVmFsdWUgPSB0aGlzLl9vcHRpb25zVmFsdWVQcm9wZXJ0eSA/IG9wdGlvblt0aGlzLl9vcHRpb25zVmFsdWVQcm9wZXJ0eSBhcyBrZXlvZiBvYmplY3RdIDogb3B0aW9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdXBlci53aXRoRGVmYXVsdEZpbHRlcihkZWZhdWx0RmlsdGVyVmFsdWUsIG1hdGNoTW9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGNvcHkoKTogRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3I8RW51bSwgVGFibGVNb2RlbD4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWx0ZXJMb29rdXBFbnVtRGVzY3JpcHRvcjxFbnVtLCBUYWJsZU1vZGVsPih0aGlzLl9wcm9wZXJ0eSwgdGhpcy5lbnVtLCBbXSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cbn1cbiJdfQ==
242
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWxvb2t1cC5kZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZmlsdGVyL3NyYy9kZXNjcmlwdG9ycy9maWx0ZXItbG9va3VwLmRlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUV4QixPQUFPLEVBR0gsb0JBQW9CLEVBU3BCLDZCQUE2QixFQUM3QiwwQkFBMEIsRUFDMUIsbUJBQW1CLEVBQ3RCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUFpQixvQkFBb0IsRUFBRSwyQkFBMkIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRS9HLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxjQUFjLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQXVCckQsTUFBTSxPQUFPLHNCQUNULFNBQVEsZ0JBQXlDO0lBZ0JqRCxZQUFZLFFBQWdCLEVBQUUsR0FBcUY7UUFDL0csS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBWlYsZ0JBQVcsR0FBMEIsb0JBQW9CLENBQUMsUUFBUSxDQUFDO1FBRW5FLDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQUMvQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUVyQix1QkFBa0IsR0FBRyw0QkFBNEIsQ0FBQztRQVF4RCxJQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFFekMsSUFBSSxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDO1FBQzFDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLHNCQUFzQixD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a0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ2xILENBQUM7WUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNhLElBQUk7UUFDaEIsTUFBTSxLQUFLLEdBQUcsSUFBSSwwQkFBMEIsQ0FBbUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlGLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtvZn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gICAgQ2xhc3NPcHRUeXBlLFxuICAgIENsYXNzVHlwZSxcbiAgICBDb21tb25zSW50ZXJuYWxFcnJvcixcbiAgICBFbnVtQ29uc3RhbnRUeXBlLFxuICAgIEVudW1WYWx1ZSxcbiAgICBGaWx0ZXJNYXRjaE1vZGVFeHRlbmRlZFR5cGUsXG4gICAgSUxvb2t1cERhdGFQcm92aWRlcixcbiAgICBJTG9va3VwRGVzY3JpcHRvcixcbiAgICBMb29rdXBEYXRhUHJvdmlkZXJMb29rdXBGblR5cGUsXG4gICAgU2VydmljZUNsYXNzT3B0VHlwZSxcbiAgICBTZXJ2aWNlQ2xhc3NUeXBlLFxuICAgIGZyb21FbnVtQ29uc3RhbnRzQXNWYWx1ZUFycmF5LFxuICAgIGZyb21FbnVtVmFsdWVzQXNWYWx1ZUFycmF5LFxuICAgIGdldEVudW1Db25zdGFudE5hbWVcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7TG9va3VwRGF0YVByb3ZpZGVySW5zdH0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9mb3JtL2FwaSc7XG5pbXBvcnQge0VudW1EZXNjcmlwdG9yLCBmaW5kQ2xhc3NJZEF0dHJpYnV0ZSwgdHJ5U2V0TG9va3VwSXRlbXNQcm9wZXJ0aWVzfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL21vZGVsJztcblxuaW1wb3J0IHtGaWx0ZXJMb29rdXBUeXBlRW51bSwgRmlsdGVyVHlwZUVudW19IGZyb20gJy4uL21vZGVscy9maWx0ZXIubW9kZWwnO1xuaW1wb3J0IHtGaWx0ZXJEZXNjcmlwdG9yfSBmcm9tICcuL2ZpbHRlci5kZXNjcmlwdG9yJztcblxuZXhwb3J0IHR5cGUgRmlsdGVyTG9va3VwRGVzY3JpcHRvckNvbnN0cnVjdG9yT3B0c1R5cGU8XG4gICAgRmlsdGVyTW9kZWwsXG4gICAgU2VydmljZSxcbiAgICBTb3J0cyA9IGtleW9mIEZpbHRlck1vZGVsLFxuICAgIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBrZXlvZiBGaWx0ZXJNb2RlbFxuPiA9IEZpbHRlckxvb2t1cERlc2NyaXB0b3JDcmVhdGVPcHRzUHJvdmlkZXJUeXBlPEZpbHRlck1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycz4gJiB7XG4gICAgdHlwZT86IENsYXNzVHlwZTxGaWx0ZXJNb2RlbD47XG4gICAgb3B0aW9uc1ZhbHVlUHJvcGVydHk/OiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgRmlsdGVyTG9va3VwRGVzY3JpcHRvckNyZWF0ZU9wdHNQcm92aWRlclR5cGU8RmlsdGVyTW9kZWwsIFNlcnZpY2UsIFNvcnRzID0ga2V5b2YgRmlsdGVyTW9kZWwsIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBrZXlvZiBGaWx0ZXJNb2RlbD4gPSB7XG4gICAgc2VydmljZVR5cGU/OiBTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+O1xuICAgIGRhdGFQcm92aWRlcj86IElMb29rdXBEYXRhUHJvdmlkZXI8RmlsdGVyTW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzPjtcbn07XG5cbmV4cG9ydCB0eXBlIEZpbHRlckxvb2t1cEF1dG9jb21wbGV0ZU9wdHNUeXBlID0ge1xuICAgIG9wZW5PbkZvY3VzPzogYm9vbGVhbjtcbiAgICBpbmxpbmVTZWFyY2g/OiBib29sZWFuO1xuICAgIGF1dG9DbGVhcj86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgY2xhc3MgRmlsdGVyTG9va3VwRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbCwgU2VydmljZSA9IGFueSwgU29ydHMgPSBrZXlvZiBGaWx0ZXJNb2RlbCwgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IGtleW9mIEZpbHRlck1vZGVsPlxuICAgIGV4dGVuZHMgRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD5cbiAgICBpbXBsZW1lbnRzIElMb29rdXBEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycz5cbntcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2RhdGFQcm92aWRlcjogSUxvb2t1cERhdGFQcm92aWRlcjxGaWx0ZXJNb2RlbCwgU2VydmljZSwgU29ydHMsIEZpbHRlcnM+O1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfb3B0aW9uc1ZhbHVlUHJvcGVydHk/OiBzdHJpbmcgfCBudWxsO1xuICAgIHByb3RlY3RlZCBfbG9va3VwVHlwZT86IEZpbHRlckxvb2t1cFR5cGVFbnVtID0gRmlsdGVyTG9va3VwVHlwZUVudW0uRHJvcGRvd247XG4gICAgcHJvdGVjdGVkIF9vcHRpb25zTGFiZWxQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX29wdGlvbnNMYWJlbFRyYW5zbGF0ZSA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfbXVsdGlzZWxlY3QgPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBfZHJvcGRvd25DbGFzc05hbWUgPSAnbW5nLWZpbHRlci1sb29rdXAtZHJvcGRvd24nO1xuXG4gICAgcHJvdGVjdGVkIF9hdXRvY29tcGxldGVPcGVuT25Gb2N1cz86IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIF9hdXRvY29tcGxldGVJbmxpbmVTZWFyY2g/OiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBfYXV0b2NvbXBsZXRlQXV0b0NsZWFyPzogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBzdHJpbmcsIGNmZz86IEZpbHRlckxvb2t1cERlc2NyaXB0b3JDb25zdHJ1Y3Rvck9wdHNUeXBlPEZpbHRlck1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycz4pIHtcbiAgICAgICAgc3VwZXIocHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9maWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uTG9va3VwO1xuXG4gICAgICAgIGlmIChjZmc/LmRhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVByb3ZpZGVyID0gY2ZnLmRhdGFQcm92aWRlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFQcm92aWRlciA9IG5ldyBMb29rdXBEYXRhUHJvdmlkZXJJbnN0PEZpbHRlck1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycywgQ2xhc3NPcHRUeXBlPEZpbHRlck1vZGVsPiwgU2VydmljZUNsYXNzT3B0VHlwZTxTZXJ2aWNlPj4oXG4gICAgICAgICAgICAgICAgY2ZnPy50eXBlLFxuICAgICAgICAgICAgICAgIGNmZz8uc2VydmljZVR5cGVcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9vcHRpb25zVmFsdWVQcm9wZXJ0eSA9IHR5cGVvZiBjZmc/Lm9wdGlvbnNWYWx1ZVByb3BlcnR5ID09PSAndW5kZWZpbmVkJyA/IGZpbmRDbGFzc0lkQXR0cmlidXRlKHRoaXMuX2RhdGFQcm92aWRlci5jbGFzc1R5cGUpID8/IHVuZGVmaW5lZCA6IGNmZz8ub3B0aW9uc1ZhbHVlUHJvcGVydHk7XG5cbiAgICAgICAgdHJ5U2V0TG9va3VwSXRlbXNQcm9wZXJ0aWVzKHRoaXMsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvb2t1cFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb29rdXBUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGF0YVByb3ZpZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVByb3ZpZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgb3B0aW9uc0xhYmVsUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcHRpb25zTGFiZWxQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG9wdGlvbnNMYWJlbFRyYW5zbGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnNMYWJlbFRyYW5zbGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG9wdGlvbnNWYWx1ZVByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9uc1ZhbHVlUHJvcGVydHkgPz8gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbXVsdGlzZWxlY3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tdWx0aXNlbGVjdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGF1dG9jb21wbGV0ZU9wZW5PbkZvY3VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b2NvbXBsZXRlT3Blbk9uRm9jdXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhdXRvY29tcGxldGVBdXRvQ2xlYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvY29tcGxldGVBdXRvQ2xlYXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhdXRvY29tcGxldGVJbmxpbmVTZWFyY2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvY29tcGxldGVJbmxpbmVTZWFyY2g7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkcm9wZG93bkNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Ryb3Bkb3duQ2xhc3NOYW1lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgbGFiZWwgcHJvcGVydHkgZm9yIG9wdGlvbnMgZGlzcGxheS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBQcm9wZXJ0eSBmb3IgbGFiZWwgb3B0aW9ucy5cbiAgICAgKiBAcGFyYW0gdHJhbnNsYXRlIElmIHRoZSBvcHRpb25zIHNob3VsZCBiZSB0cmFuc2xhdGVkIHRocm91Z2ggdGhlIGkxOG4uXG4gICAgICovXG4gICAgcHVibGljIHdpdGhPcHRpb25zTGFiZWxQcm9wZXJ0eShwcm9wZXJ0eToga2V5b2YgRmlsdGVyTW9kZWwsIHRyYW5zbGF0ZSA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhPcHRpb25zTGFiZWxQcm9wZXJ0eVVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIHRyYW5zbGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBsYWJlbCBwcm9wZXJ0eSBmb3Igb3B0aW9ucyBkaXNwbGF5LlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBVTlNBRkUhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgUHJvcGVydHkgZm9yIGxhYmVsIG9wdGlvbnMuXG4gICAgICogQHBhcmFtIHRyYW5zbGF0ZSBJZiB0aGUgb3B0aW9ucyBzaG91bGQgYmUgdHJhbnNsYXRlZCB0aHJvdWdoIHRoZSBpMThuLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoT3B0aW9uc0xhYmVsUHJvcGVydHlVbnNhZmUocHJvcGVydHk6IHN0cmluZywgdHJhbnNsYXRlID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fb3B0aW9uc0xhYmVsUHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgdGhpcy5fb3B0aW9uc0xhYmVsVHJhbnNsYXRlID0gdHJhbnNsYXRlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2Qgd2lsbCBzZXQgYG9wdGlvbnNWYWx1ZVByb3BlcnR5YCwgYmVjYXVzZSB0cmFjayBwcm9wZXJ0aWVzIGFyZSBub3Qgc3VwcG9ydGVkIGhlcmUgYXMgZmlsdGVycyBuZWVkIGZpbmFsIHZhbHVlIHRvIHdvcmsgY29ycmVjdGx5LlxuICAgICAqIFVzZSBgb3B0aW9uc1ZhbHVlUHJvcGVydHlgIGluIGZpbHRlciBjcmVhdGlvbiBpbnN0ZWFkLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoT3B0aW9uc1RyYWNrUHJvcGVydHkoKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB3aWxsIHNldCBgb3B0aW9uc1ZhbHVlUHJvcGVydHlgLCBiZWNhdXNlIHRyYWNrIHByb3BlcnRpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaGVyZSBhcyBmaWx0ZXJzIG5lZWQgZmluYWwgdmFsdWUgdG8gd29yayBjb3JyZWN0bHkuXG4gICAgICogVXNlIGBvcHRpb25zVmFsdWVQcm9wZXJ0eWAgaW4gZmlsdGVyIGNyZWF0aW9uIGluc3RlYWQuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhPcHRpb25zVHJhY2tQcm9wZXJ0eVVuc2FmZSgpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhMb29rdXAobG9va3VwPzogTG9va3VwRGF0YVByb3ZpZGVyTG9va3VwRm5UeXBlPEZpbHRlck1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycz4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGF0YVByb3ZpZGVyLndpdGhMb29rdXAobG9va3VwKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBtdWx0aXNlbGVjdCBmb3IgbG9va3Vwcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtdWx0aXNlbGVjdCBFbmFibGVzL2Rpc2FibGVzIHRoZSBmZWF0dXJlLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoTXVsdGlzZWxlY3QobXVsdGlzZWxlY3QgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX211bHRpc2VsZWN0ID0gbXVsdGlzZWxlY3Q7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGRyb3Bkb3duIGNsYXNzIG5hbWUuXG4gICAgICogQHBhcmFtIGRyb3Bkb3duQ2xhc3NOYW1lIENsYXNzIG5hbWUgZm9yIGRyb3Bkb3duLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRHJvcGRvd25DbGFzc05hbWUoZHJvcGRvd25DbGFzc05hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9kcm9wZG93bkNsYXNzTmFtZSA9IGRyb3Bkb3duQ2xhc3NOYW1lO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGRlZmF1bHQgZmlsdGVyIHZhbHVlIGZvciBmaWx0ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgVmFsdWUgZm9yIGRlZmF1bHQgZmlsdGVyLlxuICAgICAqIEBwYXJhbSBtYXRjaE1vZGUgTWF0Y2ggbW9kZSBmb3IgZGVmYXVsdCBmaWx0ZXIuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhEZWZhdWx0RmlsdGVyKHZhbHVlOiBGaWx0ZXJNb2RlbCB8IEZpbHRlck1vZGVsW10gfCB1bmRlZmluZWQsIG1hdGNoTW9kZTogRmlsdGVyTWF0Y2hNb2RlRXh0ZW5kZWRUeXBlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc0RlZmF1bHRWYWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9kZWZhdWx0TWF0Y2hNb2RlID0gbWF0Y2hNb2RlO1xuXG4gICAgICAgIHRoaXMudmFsaWRhdGVEZWZhdWx0RmlsdGVyKHZhbHVlLCBtYXRjaE1vZGUpO1xuXG4gICAgICAgIGlmICgoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgIXRoaXMubXVsdGlzZWxlY3QpIHx8ICh0aGlzLm11bHRpc2VsZWN0ICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgRGVmYXVsdCB2YWx1ZSBub3QgaW4gY29ycmVjdCBmb3JtYXQgZm9yIHByb3BlcnR5ICR7dGhpcy5fcHJvcGVydHl9LmAsIHtuYW1lOiAnRmlsdGVyRGVzY3JpcHRvckVycm9yJ30pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBsb29rdXAgYXMgYXV0b2NvbXBsZXRlIGluc3RlYWQgb2YgZHJvcGRvd24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0cyBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAgICovXG4gICAgcHVibGljIGFzQXV0b2NvbXBsZXRlKG9wdHM/OiBGaWx0ZXJMb29rdXBBdXRvY29tcGxldGVPcHRzVHlwZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9sb29rdXBUeXBlID0gRmlsdGVyTG9va3VwVHlwZUVudW0uQXV0b2NvbXBsZXRlO1xuICAgICAgICB0aGlzLl9hdXRvY29tcGxldGVBdXRvQ2xlYXIgPSBvcHRzPy5hdXRvQ2xlYXI7XG4gICAgICAgIHRoaXMuX2F1dG9jb21wbGV0ZU9wZW5PbkZvY3VzID0gb3B0cz8ub3Blbk9uRm9jdXM7XG4gICAgICAgIHRoaXMuX2F1dG9jb21wbGV0ZUlubGluZVNlYXJjaCA9IG9wdHM/LmlubGluZVNlYXJjaDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIGN1cnJlbnQgZGVzY3JpcHRvciB0byBhIG5ldyBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29weSgpOiBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycz4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IEZpbHRlckxvb2t1cERlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzPih0aGlzLl9wcm9wZXJ0eSwge1xuICAgICAgICAgICAgZGF0YVByb3ZpZGVyOiB0aGlzLmRhdGFQcm92aWRlclxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZGVzY3JpcHRvcik7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBjb3B5RmllbGRzVG8oZmlsdGVyOiBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycz4pIHtcbiAgICAgICAgc3VwZXIuY29weUZpZWxkc1RvKGZpbHRlcik7XG4gICAgICAgIGZpbHRlci5fbG9va3VwVHlwZSA9IHRoaXMuX2xvb2t1cFR5cGU7XG4gICAgICAgIGZpbHRlci5fb3B0aW9uc0xhYmVsUHJvcGVydHkgPSB0aGlzLl9vcHRpb25zTGFiZWxQcm9wZXJ0eTtcbiAgICAgICAgZmlsdGVyLl9vcHRpb25zTGFiZWxUcmFuc2xhdGUgPSB0aGlzLl9vcHRpb25zTGFiZWxUcmFuc2xhdGU7XG4gICAgICAgIGZpbHRlci5fbXVsdGlzZWxlY3QgPSB0aGlzLl9tdWx0aXNlbGVjdDtcbiAgICAgICAgZmlsdGVyLl9kcm9wZG93bkNsYXNzTmFtZSA9IHRoaXMuX2Ryb3Bkb3duQ2xhc3NOYW1lO1xuICAgICAgICBmaWx0ZXIuX2F1dG9jb21wbGV0ZU9wZW5PbkZvY3VzID0gdGhpcy5fYXV0b2NvbXBsZXRlT3Blbk9uRm9jdXM7XG4gICAgICAgIGZpbHRlci5fYXV0b2NvbXBsZXRlSW5saW5lU2VhcmNoID0gdGhpcy5fYXV0b2NvbXBsZXRlSW5saW5lU2VhcmNoO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpbHRlckxvb2t1cEVudW1EZXNjcmlwdG9yPEVudW0sIFRhYmxlTW9kZWw+IGV4dGVuZHMgRmlsdGVyTG9va3VwRGVzY3JpcHRvcjxFbnVtVmFsdWUsIFRhYmxlTW9kZWwsIHVuZGVmaW5lZCwgbmV2ZXIsIG5ldmVyPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZW51bTogRW51bURlc2NyaXB0b3I8RW51bT47XG4gICAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uRW51bVZhbHVlczogRW51bVZhbHVlW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbmFtZUFzVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBzdHJpbmcsIGVudW1EZXNjOiBFbnVtRGVzY3JpcHRvcjxFbnVtPiwgb3B0aW9ucz86IEFycmF5PEVudW0+KSB7XG4gICAgICAgIHN1cGVyKHByb3BlcnR5LCB7XG4gICAgICAgICAgICBkYXRhUHJvdmlkZXI6IG5ldyBMb29rdXBEYXRhUHJvdmlkZXJJbnN0PEVudW1WYWx1ZSwgdW5kZWZpbmVkLCBuZXZlciwgbmV2ZXIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHVuZGVmaW5lZCksXG4gICAgICAgICAgICBvcHRpb25zVmFsdWVQcm9wZXJ0eTogJ3ZhbHVlJ1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLkxvb2t1cEVudW07XG5cbiAgICAgICAgdGhpcy5fZW51bSA9IGVudW1EZXNjO1xuXG4gICAgICAgIHRoaXMuX29wdGlvbkVudW1WYWx1ZXMgPSBBcnJheS5pc0FycmF5KG9wdGlvbnMpXG4gICAgICAgICAgICA/IGZyb21FbnVtVmFsdWVzQXNWYWx1ZUFycmF5KHRoaXMuX2VudW0udHlwZSwgb3B0aW9ucywgdGhpcy5fZW51bS5uYW1lQXNWYWx1ZSwgdGhpcy5fZW51bS5pMThuQmFzZUtleSA/PyB1bmRlZmluZWQpXG4gICAgICAgICAgICA6IGZyb21FbnVtQ29uc3RhbnRzQXNWYWx1ZUFycmF5KHRoaXMuX2VudW0udHlwZSwgdGhpcy5fZW51bS5uYW1lQXNWYWx1ZSwgdGhpcy5fZW51bS5pMThuQmFzZUtleSA/PyB1bmRlZmluZWQpO1xuXG4gICAgICAgIHRoaXMud2l0aExvb2t1cCgoKSA9PiBvZih0aGlzLl9vcHRpb25FbnVtVmFsdWVzKSk7XG4gICAgICAgIHRoaXMud2l0aE9wdGlvbnNMYWJlbFByb3BlcnR5KCd0aXRsZScsIHRoaXMuX2VudW0uaTE4bkJhc2VLZXkgIT09IG51bGwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZW51bSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudW07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBsb29rdXAgYXMgYXV0b2NvbXBsZXRlIGluc3RlYWQgb2YgZHJvcGRvd24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0cyBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGFzQXV0b2NvbXBsZXRlKG9wdHM/OiBGaWx0ZXJMb29rdXBBdXRvY29tcGxldGVPcHRzVHlwZSk6IHRoaXMge1xuICAgICAgICBzdXBlci5hc0F1dG9jb21wbGV0ZSh7XG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICAgICAgb3Blbk9uRm9jdXM6IG9wdHM/Lm9wZW5PbkZvY3VzID8/IHRydWUsXG4gICAgICAgICAgICBpbmxpbmVTZWFyY2g6IG9wdHM/LmlubGluZVNlYXJjaCA/PyB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE11bHRpc2VsZWN0RW51bShtdWx0aXNlbGVjdCA9IHRydWUpOiBGaWx0ZXJMb29rdXBFbnVtRGVzY3JpcHRvcjxFbnVtLCBUYWJsZU1vZGVsPiB7XG4gICAgICAgIHJldHVybiBzdXBlci53aXRoTXVsdGlzZWxlY3QobXVsdGlzZWxlY3QpIGFzIEZpbHRlckxvb2t1cEVudW1EZXNjcmlwdG9yPEVudW0sIFRhYmxlTW9kZWw+O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERvIG5vdCB1c2UsIHVzZSBgd2l0aERlZmF1bHRGaWx0ZXJFbnVtYCBpbnN0ZWFkLlxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSB3aXRoRGVmYXVsdEZpbHRlcigpOiB0aGlzIHtcbiAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGB3aXRoRGVmYXVsdEZpbHRlciBvbiBGaWx0ZXJMb29rdXBFbnVtRGVzY3JpcHRvciBzaG91bGQgbm90IGJlIHVzZWQuIFVzZSB3aXRoRGVmYXVsdEZpbHRlckVudW0gaW5zdGVhZC5gLCB7bmFtZTogJ0ZpbHRlckRlc2NyaXB0b3JFcnJvcid9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGRlZmF1bHQgZmlsdGVyIHZhbHVlIGZvciBmaWx0ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgVmFsdWUocykgZm9yIGRlZmF1bHQgZmlsdGVyLlxuICAgICAqIEBwYXJhbSBtYXRjaE1vZGUgTWF0Y2ggbW9kZSBmb3IgZGVmYXVsdCBmaWx0ZXIuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhEZWZhdWx0RmlsdGVyRW51bSh2YWx1ZTogRW51bUNvbnN0YW50VHlwZSB8IEVudW1Db25zdGFudFR5cGVbXSB8IHVuZGVmaW5lZCwgbWF0Y2hNb2RlOiBGaWx0ZXJNYXRjaE1vZGVFeHRlbmRlZFR5cGUpOiB0aGlzIHtcbiAgICAgICAgbGV0IGRlZmF1bHRPcHRpb25WYWx1ZTogYW55IHwgYW55W107XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgZGVmYXVsdE9wdGlvblZhbHVlID0gdGhpcy5fbmFtZUFzVmFsdWUgPyB2YWx1ZS5tYXAodmFsdWUgPT4gZ2V0RW51bUNvbnN0YW50TmFtZSh0aGlzLmVudW0udHlwZSwgdmFsdWUpKSA6IHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRlZmF1bHRPcHRpb25WYWx1ZSA9IHRoaXMuX25hbWVBc1ZhbHVlID8gZ2V0RW51bUNvbnN0YW50TmFtZSh0aGlzLmVudW0udHlwZSwgdmFsdWUpIDogdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVmYXVsdE9wdGlvblZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGxldCBvcHRpb246IGFueSB8IGFueVtdO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGVmYXVsdE9wdGlvblZhbHVlKSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbiA9IGRlZmF1bHRPcHRpb25WYWx1ZS5tYXAodmFsdWUgPT4gdGhpcy5fb3B0aW9uRW51bVZhbHVlcy5maW5kKG8gPT4gby52YWx1ZSA9PT0gdmFsdWUpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uID0gdGhpcy5fb3B0aW9uRW51bVZhbHVlcy5maW5kKG8gPT4gby52YWx1ZSA9PT0gZGVmYXVsdE9wdGlvblZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGRlZmF1bHRGaWx0ZXJWYWx1ZTogYW55IHwgYW55W107XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb24pKSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlclZhbHVlID0gdGhpcy5fb3B0aW9uc1ZhbHVlUHJvcGVydHkgPyBvcHRpb24ubWFwKHZhbHVlID0+IHZhbHVlW3RoaXMuX29wdGlvbnNWYWx1ZVByb3BlcnR5IGFzIGtleW9mIG9iamVjdF0pIDogb3B0aW9uO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVyVmFsdWUgPSB0aGlzLl9vcHRpb25zVmFsdWVQcm9wZXJ0eSA/IG9wdGlvblt0aGlzLl9vcHRpb25zVmFsdWVQcm9wZXJ0eSBhcyBrZXlvZiBvYmplY3RdIDogb3B0aW9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdXBlci53aXRoRGVmYXVsdEZpbHRlcihkZWZhdWx0RmlsdGVyVmFsdWUsIG1hdGNoTW9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIGN1cnJlbnQgZGVzY3JpcHRvciB0byBhIG5ldyBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29weSgpOiBGaWx0ZXJMb29rdXBFbnVtRGVzY3JpcHRvcjxFbnVtLCBUYWJsZU1vZGVsPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpbHRlckxvb2t1cEVudW1EZXNjcmlwdG9yPEVudW0sIFRhYmxlTW9kZWw+KHRoaXMuX3Byb3BlcnR5LCB0aGlzLmVudW0sIFtdKTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxufVxuIl19