igniteui-angular 13.0.0-alpha.3 → 13.0.0-alpha.4

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 (27) hide show
  1. package/esm2020/lib/core/utils.mjs +3 -2
  2. package/esm2020/lib/directives/scroll-inertia/scroll_inertia.directive.mjs +1 -90
  3. package/esm2020/lib/grids/cell.component.mjs +5 -5
  4. package/esm2020/lib/grids/common/grid.interface.mjs +1 -1
  5. package/esm2020/lib/grids/filtering/excel-style/grid.excel-style-filtering.component.mjs +4 -4
  6. package/esm2020/lib/grids/grid/grid.component.mjs +1 -1
  7. package/esm2020/lib/grids/grid-base.directive.mjs +13 -9
  8. package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +1 -1
  9. package/esm2020/lib/grids/hierarchical-grid/row-island.component.mjs +1 -1
  10. package/esm2020/lib/grids/state.directive.mjs +8 -5
  11. package/esm2020/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.mjs +13 -11
  12. package/esm2020/lib/grids/toolbar/grid-toolbar-exporter.component.mjs +17 -15
  13. package/esm2020/lib/grids/toolbar/grid-toolbar.base.mjs +6 -4
  14. package/esm2020/lib/grids/tree-grid/tree-grid.component.mjs +1 -1
  15. package/fesm2015/igniteui-angular.mjs +37 -109
  16. package/fesm2015/igniteui-angular.mjs.map +1 -1
  17. package/fesm2020/igniteui-angular.mjs +31 -109
  18. package/fesm2020/igniteui-angular.mjs.map +1 -1
  19. package/lib/core/utils.d.ts +5 -0
  20. package/lib/directives/scroll-inertia/scroll_inertia.directive.d.ts +0 -24
  21. package/lib/grids/common/grid.interface.d.ts +19 -1
  22. package/lib/grids/grid-base.directive.d.ts +5 -5
  23. package/lib/grids/state.directive.d.ts +3 -3
  24. package/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.d.ts +1 -1
  25. package/lib/grids/toolbar/grid-toolbar-exporter.component.d.ts +1 -1
  26. package/lib/grids/toolbar/grid-toolbar.base.d.ts +1 -1
  27. package/package.json +2 -2
@@ -1,12 +1,12 @@
1
1
  import { ChangeDetectionStrategy, Component, ContentChild, Directive, ElementRef, EventEmitter, forwardRef, Host, HostBinding, Inject, Input, Optional, Output, TemplateRef, ViewChild } from '@angular/core';
2
2
  import { FilteringExpressionsTree } from '../../../data-operations/filtering-expressions-tree';
3
- import { resolveNestedPath, parseDate, uniqueDates, formatDate } from '../../../core/utils';
3
+ import { resolveNestedPath, parseDate, uniqueDates, formatDate, formatCurrency } from '../../../core/utils';
4
4
  import { GridColumnDataType } from '../../../data-operations/data-util';
5
5
  import { DisplayDensity } from '../../../core/density';
6
6
  import { GridSelectionMode } from '../../common/enums';
7
7
  import { FormattedValuesFilteringStrategy } from '../../../data-operations/filtering-strategy';
8
8
  import { TreeGridFormattedValuesFilteringStrategy } from '../../tree-grid/tree-grid.filtering.strategy';
9
- import { formatCurrency, formatNumber, formatPercent, getLocaleCurrencyCode } from '@angular/common';
9
+ import { formatNumber, formatPercent, getLocaleCurrencyCode } from '@angular/common';
10
10
  import { BaseFilteringComponent } from './base-filtering.component';
11
11
  import { FilterListItem, generateExpressionsList } from './common';
12
12
  import { IGX_GRID_BASE } from '../../common/grid.interface';
@@ -618,7 +618,7 @@ export class IgxGridExcelStyleFilteringComponent extends BaseFilteringComponent
618
618
  case GridColumnDataType.Time:
619
619
  return formatDate(element, format, locale, timezone);
620
620
  case GridColumnDataType.Currency:
621
- return formatCurrency(element, locale, display, currencyCode ?? getLocaleCurrencyCode(locale), digitsInfo);
621
+ return formatCurrency(element, currencyCode ?? getLocaleCurrencyCode(locale), display, digitsInfo, locale);
622
622
  case GridColumnDataType.Number:
623
623
  return formatNumber(element, locale, digitsInfo);
624
624
  case GridColumnDataType.Percent:
@@ -705,4 +705,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
705
705
  type: HostBinding,
706
706
  args: ['style.max-height']
707
707
  }] } });
708
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5leGNlbC1zdHlsZS1maWx0ZXJpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2ZpbHRlcmluZy9leGNlbC1zdHlsZS9ncmlkLmV4Y2VsLXN0eWxlLWZpbHRlcmluZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvZmlsdGVyaW5nL2V4Y2VsLXN0eWxlL2dyaWQuZXhjZWwtc3R5bGUtZmlsdGVyaW5nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsSUFBSSxFQUNKLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFFWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsd0JBQXdCLEVBQTZCLE1BQU0scURBQXFELENBQUM7QUFDMUgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQWdCLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXhFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMvRixPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN4RyxP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QUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFPcEUsNEJBQTRCO3NCQURyQyxTQUFTO3VCQUFDLDhCQUE4QixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU9uRSxNQUFNO3NCQURoQixLQUFLO2dCQStESyxTQUFTO3NCQURuQixLQUFLO2dCQXVDSyxTQUFTO3NCQUZuQixLQUFLOztzQkFDTCxXQUFXO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0LFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLCBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIH0gZnJvbSAnLi4vLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9ucy10cmVlJztcbmltcG9ydCB7IHJlc29sdmVOZXN0ZWRQYXRoLCBwYXJzZURhdGUsIHVuaXF1ZURhdGVzLCBQbGF0Zm9ybVV0aWwsIGZvcm1hdERhdGUgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEdyaWRDb2x1bW5EYXRhVHlwZSB9IGZyb20gJy4uLy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvZGVuc2l0eSc7XG5pbXBvcnQgeyBHcmlkU2VsZWN0aW9uTW9kZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtcyc7XG5pbXBvcnQgeyBGb3JtYXR0ZWRWYWx1ZXNGaWx0ZXJpbmdTdHJhdGVneSB9IGZyb20gJy4uLy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctc3RyYXRlZ3knO1xuaW1wb3J0IHsgVHJlZUdyaWRGb3JtYXR0ZWRWYWx1ZXNGaWx0ZXJpbmdTdHJhdGVneSB9IGZyb20gJy4uLy4uL3RyZWUtZ3JpZC90cmVlLWdyaWQuZmlsdGVyaW5nLnN0cmF0ZWd5JztcbmltcG9ydCB7IGZvcm1hdEN1cnJlbmN5LCBmb3JtYXROdW1iZXIsIGZvcm1hdFBlcmNlbnQsIGdldExvY2FsZUN1cnJlbmN5Q29kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCYXNlRmlsdGVyaW5nQ29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLWZpbHRlcmluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRXhwcmVzc2lvblVJLCBGaWx0ZXJMaXN0SXRlbSwgZ2VuZXJhdGVFeHByZXNzaW9uc0xpc3QgfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgeyBDb2x1bW5UeXBlLCBHcmlkVHlwZSwgSUdYX0dSSURfQkFTRSB9IGZyb20gJy4uLy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJZ3hPdmVybGF5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL292ZXJsYXkvb3ZlcmxheSc7XG5pbXBvcnQgeyBTb3J0aW5nRGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vZGF0YS1vcGVyYXRpb25zL3NvcnRpbmctc3RyYXRlZ3knO1xuXG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnaWd4LWV4Y2VsLXN0eWxlLWNvbHVtbi1vcGVyYXRpb25zLFtpZ3hFeGNlbFN0eWxlQ29sdW1uT3BlcmF0aW9uc10nXG59KVxuZXhwb3J0IGNsYXNzIElneEV4Y2VsU3R5bGVDb2x1bW5PcGVyYXRpb25zVGVtcGxhdGVEaXJlY3RpdmUgeyB9XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnaWd4LWV4Y2VsLXN0eWxlLWZpbHRlci1vcGVyYXRpb25zLFtpZ3hFeGNlbFN0eWxlRmlsdGVyT3BlcmF0aW9uc10nXG59KVxuZXhwb3J0IGNsYXNzIElneEV4Y2VsU3R5bGVGaWx0ZXJPcGVyYXRpb25zVGVtcGxhdGVEaXJlY3RpdmUgeyB9XG5cbi8qKlxuICogQSBjb21wb25lbnQgdXNlZCBmb3IgcHJlc2VudGluZyBFeGNlbCBzdHlsZSBmaWx0ZXJpbmcgVUkgZm9yIGEgc3BlY2lmaWMgY29sdW1uLlxuICogSXQgaXMgdXNlZCBpbnRlcm5hbGx5IGluIHRoZSBHcmlkLCBidXQgY291bGQgYWxzbyBiZSBob3N0ZWQgaW4gYSBjb250YWluZXIgb3V0c2lkZSBvZiBpdC5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgaHRtbFxuICogPGlneC1ncmlkLWV4Y2VsLXN0eWxlLWZpbHRlcmluZ1xuICogICAgIFtjb2x1bW5dPVwiZ3JpZDEuY29sdW1uc1swXVwiPlxuICogPC9pZ3gtZ3JpZC1leGNlbC1zdHlsZS1maWx0ZXJpbmc+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBCYXNlRmlsdGVyaW5nQ29tcG9uZW50LCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJZ3hHcmlkRXhjZWxTdHlsZUZpbHRlcmluZ0NvbXBvbmVudCl9XSxcbiAgICBzZWxlY3RvcjogJ2lneC1ncmlkLWV4Y2VsLXN0eWxlLWZpbHRlcmluZycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuZXhjZWwtc3R5bGUtZmlsdGVyaW5nLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkRXhjZWxTdHlsZUZpbHRlcmluZ0NvbXBvbmVudCBleHRlbmRzIEJhc2VGaWx0ZXJpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1leGNlbC1maWx0ZXInKVxuICAgIHB1YmxpYyBkZWZhdWx0Q2xhc3MgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1leGNlbC1maWx0ZXItLWlubGluZScpXG4gICAgcHVibGljIGlubGluZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBsb2FkaW5nU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBsb2FkaW5nRW5kID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgaW5pdGlhbGl6ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzb3J0aW5nQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNvbHVtbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sdW1uVHlwZT4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGxpc3REYXRhTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQFZpZXdDaGlsZCgnbWFpbkRyb3Bkb3duJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcHVibGljIG1haW5Ecm9wZG93bjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4RXhjZWxTdHlsZUNvbHVtbk9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBJZ3hFeGNlbFN0eWxlQ29sdW1uT3BlcmF0aW9uc1RlbXBsYXRlRGlyZWN0aXZlIH0pXG4gICAgcHVibGljIGV4Y2VsQ29sdW1uT3BlcmF0aW9uc0RpcmVjdGl2ZTogSWd4RXhjZWxTdHlsZUNvbHVtbk9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hFeGNlbFN0eWxlRmlsdGVyT3BlcmF0aW9uc1RlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IElneEV4Y2VsU3R5bGVGaWx0ZXJPcGVyYXRpb25zVGVtcGxhdGVEaXJlY3RpdmUgfSlcbiAgICBwdWJsaWMgZXhjZWxGaWx0ZXJPcGVyYXRpb25zRGlyZWN0aXZlOiBJZ3hFeGNlbFN0eWxlRmlsdGVyT3BlcmF0aW9uc1RlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0RXhjZWxDb2x1bW5PcGVyYXRpb25zJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRFeGNlbENvbHVtbk9wZXJhdGlvbnM6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRFeGNlbEZpbHRlck9wZXJhdGlvbnMnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdEV4Y2VsRmlsdGVyT3BlcmF0aW9uczogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIGNvbHVtbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgY29sdW1uKHZhbHVlOiBDb2x1bW5UeXBlKSB7XG4gICAgICAgIHRoaXMuX2NvbHVtbiA9IHZhbHVlO1xuICAgICAgICB0aGlzLmxpc3REYXRhID0gbmV3IEFycmF5PEZpbHRlckxpc3RJdGVtPigpO1xuICAgICAgICB0aGlzLmNvbHVtbkNoYW5nZS5lbWl0KHRoaXMuX2NvbHVtbik7XG5cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zPy51bnN1YnNjcmliZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLl9jb2x1bW4pIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLnJlZ2lzdGVyU1ZHSWNvbnMoKTtcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgICAgICAgdGhpcy5zb3J0aW5nQ2hhbmdlZC5lbWl0KCk7XG5cbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IHRoaXMuZ3JpZC5jb2x1bW5QaW4uc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoISh0aGlzLmNkciBhcyBWaWV3UmVmKS5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5ncmlkLmNvbHVtblZpc2liaWxpdHlDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLmRldGVjdENoYW5nZXMoKSkpO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zQ2hhbmdlLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNvcnRpbmdDaGFuZ2VkLmVtaXQoKSkpO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlQ2hhbmdlLnN1YnNjcmliZSgoKSA9PiB0aGlzLmluaXQoKSkpO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmdyaWQub25EZW5zaXR5Q2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kZXRlY3RDaGFuZ2VzKCkpKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5ncmlkLmNvbHVtbk1vdmluZ0VuZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZHIubWFya0ZvckNoZWNrKCkpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgY29sdW1uLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29sdW1uKCk6IENvbHVtblR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGV4cHJlc3Npb25zTGlzdCA9IG5ldyBBcnJheTxFeHByZXNzaW9uVUk+KCk7XG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbGlzdERhdGEgPSBuZXcgQXJyYXk8RmlsdGVyTGlzdEl0ZW0+KCk7XG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgdW5pcXVlVmFsdWVzID0gW107XG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcmxheVNlcnZpY2U6IElneE92ZXJsYXlTZXJ2aWNlO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJsYXlDb21wb25lbnRJZDogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBfbWluSGVpZ2h0O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbWluaW11bSBoZWlnaHQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IG1pbkhlaWdodCgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5fbWluSGVpZ2h0IHx8IHRoaXMuX21pbkhlaWdodCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21pbkhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pbmxpbmUpIHtcbiAgICAgICAgICAgIGxldCBtaW5IZWlnaHQgPSA2NDU7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGlzcGxheURlbnNpdHkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIERpc3BsYXlEZW5zaXR5LmNvc3k6IG1pbkhlaWdodCA9IDQ2NTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBEaXNwbGF5RGVuc2l0eS5jb21wYWN0OiBtaW5IZWlnaHQgPSAzMzA7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGAke21pbkhlaWdodH1weGA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtaW5pbXVtIGhlaWdodC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IG1pbkhlaWdodCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21pbkhlaWdodCA9IHZhbHVlO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBfbWF4SGVpZ2h0OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBjb250YWluc051bGxPckVtcHR5ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBzZWxlY3RBbGxTZWxlY3RlZCA9IHRydWU7XG4gICAgcHJpdmF0ZSBzZWxlY3RBbGxJbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBmaWx0ZXJWYWx1ZXMgPSBuZXcgU2V0PGFueT4oKTtcbiAgICBwcml2YXRlIF9jb2x1bW46IENvbHVtblR5cGU7XG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBfb3JpZ2luYWxEaXNwbGF5OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBtYXhpbXVtIGhlaWdodC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnc3R5bGUubWF4LWhlaWdodCcpXG4gICAgcHVibGljIGdldCBtYXhIZWlnaHQoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuX21heEhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21heEhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pbmxpbmUpIHtcbiAgICAgICAgICAgIGxldCBtYXhIZWlnaHQgPSA3NzU7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGlzcGxheURlbnNpdHkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIERpc3BsYXlEZW5zaXR5LmNvc3k6IG1heEhlaWdodCA9IDU2NTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBEaXNwbGF5RGVuc2l0eS5jb21wYWN0OiBtYXhIZWlnaHQgPSA0MDU7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGAke21heEhlaWdodH1weGA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXhpbXVtIGhlaWdodC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IG1heEhlaWdodCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21heEhlaWdodCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBncmlkKCk6IEdyaWRUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uPy5ncmlkID8/IHRoaXMuZ3JpZEFQSTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGlzcGxheURlbnNpdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQ/LmRpc3BsYXlEZW5zaXR5O1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHVibGljIGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBwcm90ZWN0ZWQgcGxhdGZvcm06IFBsYXRmb3JtVXRpbCxcbiAgICAgICAgQEhvc3QoKSBAT3B0aW9uYWwoKSBASW5qZWN0KElHWF9HUklEX0JBU0UpIHByb3RlY3RlZCBncmlkQVBJPzogR3JpZFR5cGUpIHtcbiAgICAgICAgc3VwZXIoY2RyLCBlbGVtZW50LCBwbGF0Zm9ybSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucz8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBpbml0aWFsaXplKGNvbHVtbjogQ29sdW1uVHlwZSwgb3ZlcmxheVNlcnZpY2U6IElneE92ZXJsYXlTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuaW5saW5lID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29sdW1uID0gY29sdW1uO1xuICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlID0gb3ZlcmxheVNlcnZpY2U7XG4gICAgICAgIGlmICh0aGlzLl9vcmlnaW5hbERpc3BsYXkpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSB0aGlzLl9vcmlnaW5hbERpc3BsYXk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmluaXRpYWxpemVkLmVtaXQoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmdyaWQuY29sdW1uTW92aW5nLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsb3NlRHJvcGRvd24oKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uUGluKCkge1xuICAgICAgICB0aGlzLmNvbHVtbi5waW5uZWQgPSAhdGhpcy5jb2x1bW4ucGlubmVkO1xuICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvblNlbGVjdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbHVtbi5zZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Q29sdW1uKHRoaXMuY29sdW1uLmZpZWxkLCB0aGlzLmdyaWQuY29sdW1uU2VsZWN0aW9uID09PSBHcmlkU2VsZWN0aW9uTW9kZS5zaW5nbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RDb2x1bW4odGhpcy5jb2x1bW4uZmllbGQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY29sdW1uU2VsZWN0YWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZD8uY29sdW1uU2VsZWN0aW9uICE9PSBHcmlkU2VsZWN0aW9uTW9kZS5ub25lICYmIHRoaXMuY29sdW1uPy5zZWxlY3RhYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uSGlkZVRvZ2dsZSgpIHtcbiAgICAgICAgdGhpcy5jb2x1bW4udG9nZ2xlVmlzaWJpbGl0eSgpO1xuICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjYW5jZWwoKSB7XG4gICAgICAgIGlmICghdGhpcy5vdmVybGF5Q29tcG9uZW50SWQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNsb3NlRHJvcGRvd24oKSB7XG4gICAgICAgIGlmICh0aGlzLm92ZXJsYXlDb21wb25lbnRJZCkge1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5oaWRlKHRoaXMub3ZlcmxheUNvbXBvbmVudElkKTtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheUNvbXBvbmVudElkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uS2V5RG93bihldmVudEFyZ3M6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMucGxhdGZvcm0uaXNGaWx0ZXJpbmdLZXlDb21ibyhldmVudEFyZ3MpKSB7XG4gICAgICAgICAgICBldmVudEFyZ3MucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50QXJncy5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBoaWRlKCkge1xuICAgICAgICB0aGlzLl9vcmlnaW5hbERpc3BsYXkgPSBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KS5kaXNwbGF5O1xuICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGRldGVjdENoYW5nZXMoKSB7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXQoKSB7XG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0ID0gbmV3IEFycmF5PEV4cHJlc3Npb25VST4oKTtcbiAgICAgICAgZ2VuZXJhdGVFeHByZXNzaW9uc0xpc3QodGhpcy5jb2x1bW4uZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLCB0aGlzLmdyaWQuZmlsdGVyaW5nTG9naWMsIHRoaXMuZXhwcmVzc2lvbnNMaXN0KTtcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUNvbHVtbkRhdGEoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFyZUV4cHJlc3Npb25zU2VsZWN0YWJsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXhwcmVzc2lvbnNMaXN0Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgKHRoaXMuZXhwcmVzc2lvbnNMaXN0WzBdLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdlcXVhbHMnIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uc0xpc3RbMF0uZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ2F0JyB8fFxuICAgICAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0WzBdLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICd0cnVlJyB8fFxuICAgICAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0WzBdLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdmYWxzZScgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25zTGlzdFswXS5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnZW1wdHknIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uc0xpc3RbMF0uZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ2luJykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0YWJsZUV4cHJlc3Npb25zQ291bnQgPSB0aGlzLmV4cHJlc3Npb25zTGlzdC5maWx0ZXIoZXhwID0+XG4gICAgICAgICAgICAoZXhwLmJlZm9yZU9wZXJhdG9yID09PSAxIHx8IGV4cC5hZnRlck9wZXJhdG9yID09PSAxKSAmJlxuICAgICAgICAgICAgKGV4cC5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnZXF1YWxzJyB8fFxuICAgICAgICAgICAgICAgIGV4cC5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnYXQnIHx8XG4gICAgICAgICAgICAgICAgZXhwLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICd0cnVlJyB8fFxuICAgICAgICAgICAgICAgIGV4cC5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnZmFsc2UnIHx8XG4gICAgICAgICAgICAgICAgZXhwLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdlbXB0eScgfHxcbiAgICAgICAgICAgICAgICBleHAuZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ2luJykpLmxlbmd0aDtcblxuICAgICAgICByZXR1cm4gc2VsZWN0YWJsZUV4cHJlc3Npb25zQ291bnQgPT09IHRoaXMuZXhwcmVzc2lvbnNMaXN0Lmxlbmd0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFyZUV4cHJlc3Npb25zVmFsdWVzSW5UaGVMaXN0KCkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5Cb29sZWFuKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZpbHRlclZhbHVlcy5zaXplID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFZhbHVlID0gdGhpcy5maWx0ZXJWYWx1ZXMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuXG4gICAgICAgICAgICBpZiAoIWZpcnN0VmFsdWUgJiYgZmlyc3RWYWx1ZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBleHByZXNzaW9uIG9mIHRoaXMudW5pcXVlVmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0RXhwcmVzc2lvblZhbHVlKGV4cHJlc3Npb24pO1xuICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyVmFsdWVzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBvcHVsYXRlQ29sdW1uRGF0YSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC51bmlxdWVDb2x1bW5WYWx1ZXNTdHJhdGVneSkge1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb2x1bW5WYWx1ZXNSZW1vdGVseSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb2x1bW5WYWx1ZXNGcm9tRGF0YSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDb2x1bW5WYWx1ZXNSZW1vdGVseSgpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nU3RhcnQuZW1pdCgpO1xuICAgICAgICBjb25zdCBleHByZXNzaW9uc1RyZWU6IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSA9IHRoaXMuZ2V0Q29sdW1uRmlsdGVyRXhwcmVzc2lvbnNUcmVlKCk7XG5cbiAgICAgICAgY29uc3QgcHJldkNvbHVtbiA9IHRoaXMuY29sdW1uO1xuICAgICAgICB0aGlzLmdyaWQudW5pcXVlQ29sdW1uVmFsdWVzU3RyYXRlZ3kodGhpcy5jb2x1bW4sIGV4cHJlc3Npb25zVHJlZSwgKGNvbFZhbHM6IGFueVtdKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29sdW1uIHx8IHRoaXMuY29sdW1uICE9PSBwcmV2Q29sdW1uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZXMgPSAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlKSA/XG4gICAgICAgICAgICAgICAgY29sVmFscy5tYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuZ2V0RmlsdGVySXRlbUxhYmVsKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbGFiZWwsIHZhbHVlIH07XG4gICAgICAgICAgICAgICAgfSkgOiBjb2xWYWxzO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlclZhbHVlcyhjb2x1bW5WYWx1ZXMpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nRW5kLmVtaXQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG91bGRGb3JtYXRWYWx1ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5mb3JtYXR0ZXIgJiZcbiAgICAgICAgICAgICh0aGlzLmdyaWQuZmlsdGVyU3RyYXRlZ3kgaW5zdGFuY2VvZiBGb3JtYXR0ZWRWYWx1ZXNGaWx0ZXJpbmdTdHJhdGVneSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5maWx0ZXJTdHJhdGVneSBpbnN0YW5jZW9mIFRyZWVHcmlkRm9ybWF0dGVkVmFsdWVzRmlsdGVyaW5nU3RyYXRlZ3kpICYmXG4gICAgICAgICAgICB0aGlzLmdyaWQuZmlsdGVyU3RyYXRlZ3kuc2hvdWxkQXBwbHlGb3JtYXR0ZXIodGhpcy5jb2x1bW4uZmllbGQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ29sdW1uVmFsdWVzRnJvbURhdGEoKSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb25zVHJlZSA9IHRoaXMuZ2V0Q29sdW1uRmlsdGVyRXhwcmVzc2lvbnNUcmVlKCk7XG4gICAgICAgIC8vIFRPRE86IENoZWNrIHdoeSB3ZSBhY2Nlc3MgdGhlIEFQSSBzZXJ2aWNlIHRocm91Z2ggdGhlIGNvbHVtbiA/P1xuICAgICAgICAvLyBjb25zdCBkYXRhID0gdGhpcy5jb2x1bW4uZ3JpZEFQSS5maWx0ZXJEYXRhQnlFeHByZXNzaW9ucyhleHByZXNzaW9uc1RyZWUpO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5ncmlkLmdyaWRBUEkuZmlsdGVyRGF0YUJ5RXhwcmVzc2lvbnMoZXhwcmVzc2lvbnNUcmVlKTtcblxuICAgICAgICBjb25zdCBzaG91bGRGb3JtYXRWYWx1ZXMgPSB0aGlzLnNob3VsZEZvcm1hdFZhbHVlcygpO1xuICAgICAgICBjb25zdCBjb2x1bW5GaWVsZCA9IHRoaXMuY29sdW1uLmZpZWxkO1xuICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZXMgPSAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlKSA/XG4gICAgICAgICAgICBkYXRhLm1hcChyZWNvcmQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKHJlc29sdmVOZXN0ZWRQYXRoKHJlY29yZCwgY29sdW1uRmllbGQpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuZ2V0RmlsdGVySXRlbUxhYmVsKHZhbHVlLCB0cnVlLCByZWNvcmQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGxhYmVsLCB2YWx1ZSB9O1xuICAgICAgICAgICAgfSkgOiBkYXRhLm1hcChyZWNvcmQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVzb2x2ZU5lc3RlZFBhdGgocmVjb3JkLCBjb2x1bW5GaWVsZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNob3VsZEZvcm1hdFZhbHVlcyA/IHRoaXMuY29sdW1uLmZvcm1hdHRlcih2YWx1ZSwgcmVjb3JkKSA6IHZhbHVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJWYWx1ZXMoY29sdW1uVmFsdWVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlclZhbHVlcyhjb2x1bW5WYWx1ZXM6IGFueVtdKSB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVVbmlxdWVWYWx1ZXMoY29sdW1uVmFsdWVzKTtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUZpbHRlclZhbHVlcyh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkRhdGUgfHwgdGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlVGltZSk7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVMaXN0RGF0YSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVVbmlxdWVWYWx1ZXMoY29sdW1uVmFsdWVzOiBhbnlbXSkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5TdHJpbmcgJiYgdGhpcy5jb2x1bW4uZmlsdGVyaW5nSWdub3JlQ2FzZSkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRVbmlxdWVWYWx1ZXMgPSBjb2x1bW5WYWx1ZXMubWFwKHMgPT4gcz8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKG1hcCwgdmFsLCBpKSA9PiBtYXAuZ2V0KHZhbCkgPyBtYXAgOiBtYXAuc2V0KHZhbCwgY29sdW1uVmFsdWVzW2ldKSwgbmV3IE1hcCgpKTtcbiAgICAgICAgICAgIHRoaXMudW5pcXVlVmFsdWVzID0gQXJyYXkuZnJvbShmaWx0ZXJlZFVuaXF1ZVZhbHVlcy52YWx1ZXMoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlVGltZSkge1xuICAgICAgICAgICAgdGhpcy51bmlxdWVWYWx1ZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoY29sdW1uVmFsdWVzLm1hcCh2ID0+IHY/LnRvTG9jYWxlU3RyaW5nKCkpKSk7XG4gICAgICAgICAgICB0aGlzLnVuaXF1ZVZhbHVlcy5mb3JFYWNoKChkLCBpKSA9PiB0aGlzLnVuaXF1ZVZhbHVlc1tpXSA9IGQgPyBuZXcgRGF0ZShkKSA6IGQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuVGltZSkge1xuICAgICAgICAgICAgdGhpcy51bmlxdWVWYWx1ZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoY29sdW1uVmFsdWVzLm1hcCh2ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICB2ID0gbmV3IERhdGUodik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLnNldEhvdXJzKHYuZ2V0SG91cnMoKSwgdi5nZXRNaW51dGVzKCksIHYuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSkpO1xuICAgICAgICAgICAgdGhpcy51bmlxdWVWYWx1ZXMuZm9yRWFjaCgoZCwgaSkgPT4gdGhpcy51bmlxdWVWYWx1ZXNbaV0gPSBkID8gbmV3IERhdGUoZCkgOiBkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudW5pcXVlVmFsdWVzID0gdGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlID9cbiAgICAgICAgICAgICAgICB1bmlxdWVEYXRlcyhjb2x1bW5WYWx1ZXMpIDogQXJyYXkuZnJvbShuZXcgU2V0KGNvbHVtblZhbHVlcykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUZpbHRlclZhbHVlcyhpc0RhdGVDb2x1bW46IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBpZiAoaXNEYXRlQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlcyA9IG5ldyBTZXQ8YW55Pih0aGlzLmV4cHJlc3Npb25zTGlzdC5yZWR1Y2UoKGFyciwgZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdpbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5hcnIsIC4uLkFycmF5LmZyb20oKGUuZXhwcmVzc2lvbi5zZWFyY2hWYWwgYXMgU2V0PGFueT4pLnZhbHVlcygpKS5tYXAodiA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERhdGUodikudG9JU09TdHJpbmcoKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gWy4uLmFyciwgLi4uW2UuZXhwcmVzc2lvbi5zZWFyY2hWYWwgPyBlLmV4cHJlc3Npb24uc2VhcmNoVmFsLnRvSVNPU3RyaW5nKCkgOiBlLmV4cHJlc3Npb24uc2VhcmNoVmFsXV07XG4gICAgICAgICAgICB9LCBbXSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuVGltZSkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZXMgPSBuZXcgU2V0PGFueT4odGhpcy5leHByZXNzaW9uc0xpc3QucmVkdWNlKChhcnIsIGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnaW4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbLi4uYXJyLCAuLi5BcnJheS5mcm9tKChlLmV4cHJlc3Npb24uc2VhcmNoVmFsIGFzIFNldDxhbnk+KS52YWx1ZXMoKSkubWFwKHYgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IHYgOiBuZXcgRGF0ZSh2KS50b0xvY2FsZVRpbWVTdHJpbmcoKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gWy4uLmFyciwgLi4uW2UuZXhwcmVzc2lvbi5zZWFyY2hWYWwgPyBlLmV4cHJlc3Npb24uc2VhcmNoVmFsLnRvTG9jYWxlVGltZVN0cmluZygpIDogZS5leHByZXNzaW9uLnNlYXJjaFZhbF1dO1xuICAgICAgICAgICAgfSwgW10pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWVzID0gbmV3IFNldDxhbnk+KHRoaXMuZXhwcmVzc2lvbnNMaXN0LnJlZHVjZSgoYXJyLCBlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGUuZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ2luJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWy4uLmFyciwgLi4uQXJyYXkuZnJvbSgoZS5leHByZXNzaW9uLnNlYXJjaFZhbCBhcyBTZXQ8YW55PikudmFsdWVzKCkpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5hcnIsIC4uLltlLmV4cHJlc3Npb24uc2VhcmNoVmFsXV07XG4gICAgICAgICAgICB9LCBbXSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUxpc3REYXRhKCkge1xuICAgICAgICB0aGlzLmxpc3REYXRhID0gbmV3IEFycmF5PEZpbHRlckxpc3RJdGVtPigpO1xuICAgICAgICBjb25zdCBzaG91bGRVcGRhdGVTZWxlY3Rpb24gPSB0aGlzLmFyZUV4cHJlc3Npb25zU2VsZWN0YWJsZSgpICYmIHRoaXMuYXJlRXhwcmVzc2lvbnNWYWx1ZXNJblRoZUxpc3QoKTtcblxuICAgICAgICBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5Cb29sZWFuKSB7XG4gICAgICAgICAgICB0aGlzLmFkZEJvb2xlYW5JdGVtcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hZGRJdGVtcyhzaG91bGRVcGRhdGVTZWxlY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5saXN0RGF0YSA9IHRoaXMuY29sdW1uLnNvcnRTdHJhdGVneS5zb3J0KHRoaXMubGlzdERhdGEsICd2YWx1ZScsIFNvcnRpbmdEaXJlY3Rpb24uQXNjLCB0aGlzLmNvbHVtbi5zb3J0aW5nSWdub3JlQ2FzZSxcbiAgICAgICAgICAgIChvYmosIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByZXNvbHZlZFZhbHVlID0gb2JqW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuVGltZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFZhbHVlID0gbmV3IERhdGUoKS5zZXRIb3VycyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkVmFsdWUuZ2V0SG91cnMoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkVmFsdWUuZ2V0TWludXRlcygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZS5nZXRTZWNvbmRzKCksXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFZhbHVlLmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5zTnVsbE9yRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQmxhbmtzSXRlbShzaG91bGRVcGRhdGVTZWxlY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubGlzdERhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5hZGRTZWxlY3RBbGxJdGVtKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISh0aGlzLmNkciBhcyBhbnkpLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5saXN0RGF0YUxvYWRlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb2x1bW5GaWx0ZXJFeHByZXNzaW9uc1RyZWUoKSB7XG4gICAgICAgIGNvbnN0IGdyaWRFeHByZXNzaW9uc1RyZWU6IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgPSB0aGlzLmdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgICAgICBjb25zdCBleHByZXNzaW9uc1RyZWUgPSBuZXcgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKGdyaWRFeHByZXNzaW9uc1RyZWUub3BlcmF0b3IsIGdyaWRFeHByZXNzaW9uc1RyZWUuZmllbGROYW1lKTtcblxuICAgICAgICBmb3IgKGNvbnN0IG9wZXJhbmQgb2YgZ3JpZEV4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgaWYgKG9wZXJhbmQgaW5zdGFuY2VvZiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5FeHByVHJlZSA9IG9wZXJhbmQgYXMgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW5FeHByVHJlZS5maWVsZE5hbWUgPT09IHRoaXMuY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5wdXNoKG9wZXJhbmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4cHJlc3Npb25zVHJlZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEJvb2xlYW5JdGVtcygpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RBbGxTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnVuaXF1ZVZhbHVlcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyTGlzdEl0ZW0gPSBuZXcgRmlsdGVyTGlzdEl0ZW0oKTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50ICE9PSB1bmRlZmluZWQgJiYgZWxlbWVudCAhPT0gbnVsbCAmJiBlbGVtZW50ICE9PSAnJykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbHVtbi5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT09IHRydWUgJiYgdGhpcy5leHByZXNzaW9uc0xpc3QuZmluZChleHAgPT4gZXhwLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICd0cnVlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNGaWx0ZXJlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEFsbEluZGV0ZXJtaW5hdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT09IGZhbHNlICYmIHRoaXMuZXhwcmVzc2lvbnNMaXN0LmZpbmQoZXhwID0+IGV4cC5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnZmFsc2UnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc0ZpbHRlcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc0ZpbHRlcmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNGaWx0ZXJlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLnZhbHVlID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5sYWJlbCA9IGVsZW1lbnQgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2ZpbHRlcl90cnVlIDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9maWx0ZXJfZmFsc2U7XG4gICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdERhdGEucHVzaChmaWx0ZXJMaXN0SXRlbSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbnNOdWxsT3JFbXB0eSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkSXRlbXMoc2hvdWxkVXBkYXRlU2VsZWN0aW9uOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmNvbnRhaW5zTnVsbE9yRW1wdHkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZWxlY3RBbGxJbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGFwcGx5Rm9ybWF0dGVyID0gIXRoaXMuc2hvdWxkRm9ybWF0VmFsdWVzKCk7XG5cbiAgICAgICAgdGhpcy51bmlxdWVWYWx1ZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhhc1ZhbHVlID0gKGVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJiBlbGVtZW50ICE9PSBudWxsICYmIGVsZW1lbnQgIT09ICcnXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5jb2x1bW4uZGF0YVR5cGUgIT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlKVxuICAgICAgICAgICAgICAgIHx8ICEhKGVsZW1lbnQgJiYgZWxlbWVudC5sYWJlbCk7XG5cbiAgICAgICAgICAgIGlmIChoYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlckxpc3RJdGVtID0gbmV3IEZpbHRlckxpc3RJdGVtKCk7XG4gICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNGaWx0ZXJlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2x1bW4uZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNGaWx0ZXJlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRVcGRhdGVTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRFeHByZXNzaW9uVmFsdWUoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJWYWx1ZXMuaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzRmlsdGVyZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxJbmRldGVybWluYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS52YWx1ZSA9IHRoaXMuZ2V0RmlsdGVySXRlbVZhbHVlKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmxhYmVsID0gdGhpcy5nZXRGaWx0ZXJJdGVtTGFiZWwoZWxlbWVudCwgYXBwbHlGb3JtYXR0ZXIpO1xuICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3REYXRhLnB1c2goZmlsdGVyTGlzdEl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb250YWluc051bGxPckVtcHR5ID0gdGhpcy51bmlxdWVWYWx1ZXMubGVuZ3RoID4gdGhpcy5saXN0RGF0YS5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRTZWxlY3RBbGxJdGVtKCkge1xuICAgICAgICBjb25zdCBzZWxlY3RBbGwgPSBuZXcgRmlsdGVyTGlzdEl0ZW0oKTtcbiAgICAgICAgc2VsZWN0QWxsLmlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdEFsbFNlbGVjdGVkO1xuICAgICAgICBzZWxlY3RBbGwudmFsdWUgPSB0aGlzLmdyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2V4Y2VsX3NlbGVjdF9hbGw7XG4gICAgICAgIHNlbGVjdEFsbC5sYWJlbCA9IHRoaXMuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfc2VsZWN0X2FsbDtcbiAgICAgICAgc2VsZWN0QWxsLmluZGV0ZXJtaW5hdGUgPSB0aGlzLnNlbGVjdEFsbEluZGV0ZXJtaW5hdGU7XG4gICAgICAgIHNlbGVjdEFsbC5pc1NwZWNpYWwgPSB0cnVlO1xuICAgICAgICBzZWxlY3RBbGwuaXNGaWx0ZXJlZCA9IHRoaXMuc2VsZWN0QWxsU2VsZWN0ZWQ7XG4gICAgICAgIHRoaXMubGlzdERhdGEudW5zaGlmdChzZWxlY3RBbGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQmxhbmtzSXRlbShzaG91bGRVcGRhdGVTZWxlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgYmxhbmtzID0gbmV3IEZpbHRlckxpc3RJdGVtKCk7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpIHtcbiAgICAgICAgICAgIGlmIChzaG91bGRVcGRhdGVTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJWYWx1ZXMuaGFzKG51bGwpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJsYW5rcy5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYmxhbmtzLmlzRmlsdGVyZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJsYW5rcy5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGJsYW5rcy5pc0ZpbHRlcmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYmxhbmtzLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgYmxhbmtzLmlzRmlsdGVyZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGJsYW5rcy52YWx1ZSA9IG51bGw7XG4gICAgICAgIGJsYW5rcy5sYWJlbCA9IHRoaXMuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfYmxhbmtzO1xuICAgICAgICBibGFua3MuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICBibGFua3MuaXNTcGVjaWFsID0gdHJ1ZTtcbiAgICAgICAgYmxhbmtzLmlzQmxhbmtzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5saXN0RGF0YS51bnNoaWZ0KGJsYW5rcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJJdGVtTGFiZWwoZWxlbWVudDogYW55LCBhcHBseUZvcm1hdHRlcjogYm9vbGVhbiA9IHRydWUsIGRhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQ/LmxhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC5sYWJlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgIGlmIChhcHBseUZvcm1hdHRlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5mb3JtYXR0ZXIoZWxlbWVudCwgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgZGlzcGxheSwgZm9ybWF0LCBkaWdpdHNJbmZvLCBjdXJyZW5jeUNvZGUsIHRpbWV6b25lIH0gPSB0aGlzLmNvbHVtbi5waXBlQXJncztcbiAgICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy5ncmlkLmxvY2FsZTtcblxuICAgICAgICBzd2l0Y2ggKHRoaXMuY29sdW1uLmRhdGFUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlOlxuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZVRpbWU6XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5UaW1lOlxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXREYXRlKGVsZW1lbnQsIGZvcm1hdCwgbG9jYWxlLCB0aW1lem9uZSk7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5DdXJyZW5jeTpcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0Q3VycmVuY3koZWxlbWVudCwgbG9jYWxlLCBkaXNwbGF5LCBjdXJyZW5jeUNvZGUgPz8gZ2V0TG9jYWxlQ3VycmVuY3lDb2RlKGxvY2FsZSksIGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuTnVtYmVyOlxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXROdW1iZXIoZWxlbWVudCwgbG9jYWxlLCBkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLlBlcmNlbnQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFBlcmNlbnQoZWxlbWVudCwgbG9jYWxlLCBkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpbHRlckl0ZW1WYWx1ZShlbGVtZW50OiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZSkge1xuICAgICAgICAgICAgZWxlbWVudCA9IHBhcnNlRGF0ZShlbGVtZW50LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEV4cHJlc3Npb25WYWx1ZShlbGVtZW50OiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkRhdGUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gZWxlbWVudCAmJiBlbGVtZW50LnZhbHVlID8gbmV3IERhdGUoZWxlbWVudC52YWx1ZSkudG9JU09TdHJpbmcoKSA6IGVsZW1lbnQudmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlVGltZSkge1xuICAgICAgICAgICAgdmFsdWUgPSBlbGVtZW50ID8gbmV3IERhdGUoZWxlbWVudCkudG9JU09TdHJpbmcoKSA6IGVsZW1lbnQ7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5UaW1lKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGVsZW1lbnQgPyBuZXcgRGF0ZShlbGVtZW50KS50b0xvY2FsZVRpbWVTdHJpbmcoKSA6IGVsZW1lbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEV4Y2VsQ29sdW1uT3BlcmF0aW9ucz5cbiAgICA8aWd4LWV4Y2VsLXN0eWxlLWhlYWRlclxuICAgICAgICBbc2hvd0hpZGluZ109XCJkaXNwbGF5RGVuc2l0eSAhPT0gJ2NvbWZvcnRhYmxlJyAmJiAhY29sdW1uPy5kaXNhYmxlSGlkaW5nXCJcbiAgICAgICAgW3Nob3dQaW5uaW5nXT1cImRpc3BsYXlEZW5zaXR5ICE9PSAnY29tZm9ydGFibGUnICYmICFjb2x1bW4/LmRpc2FibGVQaW5uaW5nXCJcbiAgICAgICAgW3Nob3dTZWxlY3RpbmddPVwiZGlzcGxheURlbnNpdHkgIT09ICdjb21mb3J0YWJsZScgJiYgY29sdW1uU2VsZWN0YWJsZSgpXCJcbiAgICA+XG4gICAgPC9pZ3gtZXhjZWwtc3R5bGUtaGVhZGVyPlxuXG4gICAgPGlneC1leGNlbC1zdHlsZS1zb3J0aW5nICpuZ0lmPVwiY29sdW1uPy5zb3J0YWJsZVwiPlxuICAgIDwvaWd4LWV4Y2VsLXN0eWxlLXNvcnRpbmc+XG5cbiAgICA8aWd4LWV4Y2VsLXN0eWxlLW1vdmluZyAqbmdJZj1cImNvbHVtbj8ubW92YWJsZVwiPlxuICAgIDwvaWd4LWV4Y2VsLXN0eWxlLW1vdmluZz5cblxuICAgIDxpZ3gtZXhjZWwtc3R5bGUtcGlubmluZyAqbmdJZj1cIiFjb2x1bW4/LmRpc2FibGVQaW5uaW5nICYmIGRpc3BsYXlEZW5zaXR5PT09J2NvbWZvcnRhYmxlJ1wiPlxuICAgIDwvaWd4LWV4Y2VsLXN0eWxlLXBpbm5pbmc+XG5cbiAgICA8aWd4LWV4Y2VsLXN0eWxlLWhpZGluZyAqbmdJZj1cIiFjb2x1bW4/LmRpc2FibGVIaWRpbmcgJiYgZGlzcGxheURlbnNpdHk9PT0nY29tZm9ydGFibGUnXCI+XG4gICAgPC9pZ3gtZXhjZWwtc3R5bGUtaGlkaW5nPlxuXG4gICAgPGlneC1leGNlbC1zdHlsZS1zZWxlY3RpbmcgKm5nSWY9XCJjb2x1bW5TZWxlY3RhYmxlKCkgJiYgZGlzcGxheURlbnNpdHk9PT0nY29tZm9ydGFibGUnXCI+XG4gICAgPC9pZ3gtZXhjZWwtc3R5bGUtc2VsZWN0aW5nPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0RXhjZWxGaWx0ZXJPcGVyYXRpb25zPlxuICAgIDxpZ3gtZXhjZWwtc3R5bGUtY2xlYXItZmlsdGVycz5cbiAgICA8L2lneC1leGNlbC1zdHlsZS1jbGVhci1maWx0ZXJzPlxuXG4gICAgPGlneC1leGNlbC1zdHlsZS1jb25kaXRpb25hbC1maWx0ZXI+XG4gICAgPC9pZ3gtZXhjZWwtc3R5bGUtY29uZGl0aW9uYWwtZmlsdGVyPlxuXG4gICAgPGlneC1leGNlbC1zdHlsZS1zZWFyY2g+XG4gICAgPC9pZ3gtZXhjZWwtc3R5bGUtc2VhcmNoPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGFydGljbGUgI21haW5Ecm9wZG93blxuICAgIGNsYXNzPVwiaWd4LWV4Y2VsLWZpbHRlcl9fbWVudVwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnaWd4LWV4Y2VsLWZpbHRlcl9fbWVudS0tY29zeSc6IGRpc3BsYXlEZW5zaXR5ID09PSAnY29zeScsXG4gICAgICAgICdpZ3gtZXhjZWwtZmlsdGVyX19tZW51LS1jb21wYWN0JzogZGlzcGxheURlbnNpdHkgPT09ICdjb21wYWN0J1xuICAgIH1cIlxuICAgIFtpZF09XCJvdmVybGF5Q29tcG9uZW50SWRcIlxuICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICBbc3R5bGUubWluLWhlaWdodF09XCJtaW5IZWlnaHRcIlxuICAgIFtzdHlsZS5tYXgtaGVpZ2h0XT1cIm1heEhlaWdodFwiPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRoaXMuZXhjZWxDb2x1bW5PcGVyYXRpb25zRGlyZWN0aXZlOyBlbHNlIGRlZmF1bHRFeGNlbENvbHVtbk9wZXJhdGlvbnNcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LWV4Y2VsLXN0eWxlLWNvbHVtbi1vcGVyYXRpb25zLFtpZ3hFeGNlbFN0eWxlQ29sdW1uT3BlcmF0aW9uc11cIj5cbiAgICAgICAgPC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRoaXMuZXhjZWxGaWx0ZXJPcGVyYXRpb25zRGlyZWN0aXZlOyBlbHNlIGRlZmF1bHRFeGNlbEZpbHRlck9wZXJhdGlvbnNcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LWV4Y2VsLXN0eWxlLWZpbHRlci1vcGVyYXRpb25zLFtpZ3hFeGNlbFN0eWxlRmlsdGVyT3BlcmF0aW9uc11cIj5cbiAgICAgICAgPC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9hcnRpY2xlPlxuIl19
708
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5leGNlbC1zdHlsZS1maWx0ZXJpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2ZpbHRlcmluZy9leGNlbC1zdHlsZS9ncmlkLmV4Y2VsLXN0eWxlLWZpbHRlcmluZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvZmlsdGVyaW5nL2V4Y2VsLXN0eWxlL2dyaWQuZXhjZWwtc3R5bGUtZmlsdGVyaW5nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsSUFBSSxFQUNKLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFFWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsd0JBQXdCLEVBQTZCLE1BQU0scURBQXFELENBQUM7QUFDMUgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQWdCLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDL0YsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sOENBQThDLENB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QUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFPcEUsNEJBQTRCO3NCQURyQyxTQUFTO3VCQUFDLDhCQUE4QixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU9uRSxNQUFNO3NCQURoQixLQUFLO2dCQStESyxTQUFTO3NCQURuQixLQUFLO2dCQXVDSyxTQUFTO3NCQUZuQixLQUFLOztzQkFDTCxXQUFXO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0LFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLCBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIH0gZnJvbSAnLi4vLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9ucy10cmVlJztcbmltcG9ydCB7IHJlc29sdmVOZXN0ZWRQYXRoLCBwYXJzZURhdGUsIHVuaXF1ZURhdGVzLCBQbGF0Zm9ybVV0aWwsIGZvcm1hdERhdGUsIGZvcm1hdEN1cnJlbmN5IH0gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBHcmlkQ29sdW1uRGF0YVR5cGUgfSBmcm9tICcuLi8uLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHkgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2RlbnNpdHknO1xuaW1wb3J0IHsgR3JpZFNlbGVjdGlvbk1vZGUgfSBmcm9tICcuLi8uLi9jb21tb24vZW51bXMnO1xuaW1wb3J0IHsgRm9ybWF0dGVkVmFsdWVzRmlsdGVyaW5nU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IFRyZWVHcmlkRm9ybWF0dGVkVmFsdWVzRmlsdGVyaW5nU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi90cmVlLWdyaWQvdHJlZS1ncmlkLmZpbHRlcmluZy5zdHJhdGVneSc7XG5pbXBvcnQgeyBmb3JtYXROdW1iZXIsIGZvcm1hdFBlcmNlbnQsIGdldExvY2FsZUN1cnJlbmN5Q29kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCYXNlRmlsdGVyaW5nQ29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLWZpbHRlcmluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRXhwcmVzc2lvblVJLCBGaWx0ZXJMaXN0SXRlbSwgZ2VuZXJhdGVFeHByZXNzaW9uc0xpc3QgfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgeyBDb2x1bW5UeXBlLCBHcmlkVHlwZSwgSUdYX0dSSURfQkFTRSB9IGZyb20gJy4uLy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJZ3hPdmVybGF5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL292ZXJsYXkvb3ZlcmxheSc7XG5pbXBvcnQgeyBTb3J0aW5nRGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vZGF0YS1vcGVyYXRpb25zL3NvcnRpbmctc3RyYXRlZ3knO1xuXG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnaWd4LWV4Y2VsLXN0eWxlLWNvbHVtbi1vcGVyYXRpb25zLFtpZ3hFeGNlbFN0eWxlQ29sdW1uT3BlcmF0aW9uc10nXG59KVxuZXhwb3J0IGNsYXNzIElneEV4Y2VsU3R5bGVDb2x1bW5PcGVyYXRpb25zVGVtcGxhdGVEaXJlY3RpdmUgeyB9XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnaWd4LWV4Y2VsLXN0eWxlLWZpbHRlci1vcGVyYXRpb25zLFtpZ3hFeGNlbFN0eWxlRmlsdGVyT3BlcmF0aW9uc10nXG59KVxuZXhwb3J0IGNsYXNzIElneEV4Y2VsU3R5bGVGaWx0ZXJPcGVyYXRpb25zVGVtcGxhdGVEaXJlY3RpdmUgeyB9XG5cbi8qKlxuICogQSBjb21wb25lbnQgdXNlZCBmb3IgcHJlc2VudGluZyBFeGNlbCBzdHlsZSBmaWx0ZXJpbmcgVUkgZm9yIGEgc3BlY2lmaWMgY29sdW1uLlxuICogSXQgaXMgdXNlZCBpbnRlcm5hbGx5IGluIHRoZSBHcmlkLCBidXQgY291bGQgYWxzbyBiZSBob3N0ZWQgaW4gYSBjb250YWluZXIgb3V0c2lkZSBvZiBpdC5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgaHRtbFxuICogPGlneC1ncmlkLWV4Y2VsLXN0eWxlLWZpbHRlcmluZ1xuICogICAgIFtjb2x1bW5dPVwiZ3JpZDEuY29sdW1uc1swXVwiPlxuICogPC9pZ3gtZ3JpZC1leGNlbC1zdHlsZS1maWx0ZXJpbmc+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBCYXNlRmlsdGVyaW5nQ29tcG9uZW50LCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJZ3hHcmlkRXhjZWxTdHlsZUZpbHRlcmluZ0NvbXBvbmVudCl9XSxcbiAgICBzZWxlY3RvcjogJ2lneC1ncmlkLWV4Y2VsLXN0eWxlLWZpbHRlcmluZycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuZXhjZWwtc3R5bGUtZmlsdGVyaW5nLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkRXhjZWxTdHlsZUZpbHRlcmluZ0NvbXBvbmVudCBleHRlbmRzIEJhc2VGaWx0ZXJpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1leGNlbC1maWx0ZXInKVxuICAgIHB1YmxpYyBkZWZhdWx0Q2xhc3MgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1leGNlbC1maWx0ZXItLWlubGluZScpXG4gICAgcHVibGljIGlubGluZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBsb2FkaW5nU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBsb2FkaW5nRW5kID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgaW5pdGlhbGl6ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzb3J0aW5nQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNvbHVtbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sdW1uVHlwZT4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGxpc3REYXRhTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQFZpZXdDaGlsZCgnbWFpbkRyb3Bkb3duJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcHVibGljIG1haW5Ecm9wZG93bjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4RXhjZWxTdHlsZUNvbHVtbk9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBJZ3hFeGNlbFN0eWxlQ29sdW1uT3BlcmF0aW9uc1RlbXBsYXRlRGlyZWN0aXZlIH0pXG4gICAgcHVibGljIGV4Y2VsQ29sdW1uT3BlcmF0aW9uc0RpcmVjdGl2ZTogSWd4RXhjZWxTdHlsZUNvbHVtbk9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hFeGNlbFN0eWxlRmlsdGVyT3BlcmF0aW9uc1RlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IElneEV4Y2VsU3R5bGVGaWx0ZXJPcGVyYXRpb25zVGVtcGxhdGVEaXJlY3RpdmUgfSlcbiAgICBwdWJsaWMgZXhjZWxGaWx0ZXJPcGVyYXRpb25zRGlyZWN0aXZlOiBJZ3hFeGNlbFN0eWxlRmlsdGVyT3BlcmF0aW9uc1RlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0RXhjZWxDb2x1bW5PcGVyYXRpb25zJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRFeGNlbENvbHVtbk9wZXJhdGlvbnM6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRFeGNlbEZpbHRlck9wZXJhdGlvbnMnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdEV4Y2VsRmlsdGVyT3BlcmF0aW9uczogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIGNvbHVtbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgY29sdW1uKHZhbHVlOiBDb2x1bW5UeXBlKSB7XG4gICAgICAgIHRoaXMuX2NvbHVtbiA9IHZhbHVlO1xuICAgICAgICB0aGlzLmxpc3REYXRhID0gbmV3IEFycmF5PEZpbHRlckxpc3RJdGVtPigpO1xuICAgICAgICB0aGlzLmNvbHVtbkNoYW5nZS5lbWl0KHRoaXMuX2NvbHVtbik7XG5cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zPy51bnN1YnNjcmliZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLl9jb2x1bW4pIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLnJlZ2lzdGVyU1ZHSWNvbnMoKTtcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgICAgICAgdGhpcy5zb3J0aW5nQ2hhbmdlZC5lbWl0KCk7XG5cbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IHRoaXMuZ3JpZC5jb2x1bW5QaW4uc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoISh0aGlzLmNkciBhcyBWaWV3UmVmKS5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5ncmlkLmNvbHVtblZpc2liaWxpdHlDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLmRldGVjdENoYW5nZXMoKSkpO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zQ2hhbmdlLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNvcnRpbmdDaGFuZ2VkLmVtaXQoKSkpO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlQ2hhbmdlLnN1YnNjcmliZSgoKSA9PiB0aGlzLmluaXQoKSkpO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmdyaWQub25EZW5zaXR5Q2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kZXRlY3RDaGFuZ2VzKCkpKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5ncmlkLmNvbHVtbk1vdmluZ0VuZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZHIubWFya0ZvckNoZWNrKCkpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgY29sdW1uLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29sdW1uKCk6IENvbHVtblR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGV4cHJlc3Npb25zTGlzdCA9IG5ldyBBcnJheTxFeHByZXNzaW9uVUk+KCk7XG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbGlzdERhdGEgPSBuZXcgQXJyYXk8RmlsdGVyTGlzdEl0ZW0+KCk7XG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgdW5pcXVlVmFsdWVzID0gW107XG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcmxheVNlcnZpY2U6IElneE92ZXJsYXlTZXJ2aWNlO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJsYXlDb21wb25lbnRJZDogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBfbWluSGVpZ2h0O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbWluaW11bSBoZWlnaHQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IG1pbkhlaWdodCgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5fbWluSGVpZ2h0IHx8IHRoaXMuX21pbkhlaWdodCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21pbkhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pbmxpbmUpIHtcbiAgICAgICAgICAgIGxldCBtaW5IZWlnaHQgPSA2NDU7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGlzcGxheURlbnNpdHkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIERpc3BsYXlEZW5zaXR5LmNvc3k6IG1pbkhlaWdodCA9IDQ2NTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBEaXNwbGF5RGVuc2l0eS5jb21wYWN0OiBtaW5IZWlnaHQgPSAzMzA7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGAke21pbkhlaWdodH1weGA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtaW5pbXVtIGhlaWdodC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IG1pbkhlaWdodCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21pbkhlaWdodCA9IHZhbHVlO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBfbWF4SGVpZ2h0OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBjb250YWluc051bGxPckVtcHR5ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBzZWxlY3RBbGxTZWxlY3RlZCA9IHRydWU7XG4gICAgcHJpdmF0ZSBzZWxlY3RBbGxJbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBmaWx0ZXJWYWx1ZXMgPSBuZXcgU2V0PGFueT4oKTtcbiAgICBwcml2YXRlIF9jb2x1bW46IENvbHVtblR5cGU7XG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBfb3JpZ2luYWxEaXNwbGF5OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBtYXhpbXVtIGhlaWdodC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnc3R5bGUubWF4LWhlaWdodCcpXG4gICAgcHVibGljIGdldCBtYXhIZWlnaHQoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuX21heEhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21heEhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pbmxpbmUpIHtcbiAgICAgICAgICAgIGxldCBtYXhIZWlnaHQgPSA3NzU7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGlzcGxheURlbnNpdHkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIERpc3BsYXlEZW5zaXR5LmNvc3k6IG1heEhlaWdodCA9IDU2NTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBEaXNwbGF5RGVuc2l0eS5jb21wYWN0OiBtYXhIZWlnaHQgPSA0MDU7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGAke21heEhlaWdodH1weGA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXhpbXVtIGhlaWdodC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IG1heEhlaWdodCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21heEhlaWdodCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBncmlkKCk6IEdyaWRUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uPy5ncmlkID8/IHRoaXMuZ3JpZEFQSTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGlzcGxheURlbnNpdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQ/LmRpc3BsYXlEZW5zaXR5O1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHVibGljIGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBwcm90ZWN0ZWQgcGxhdGZvcm06IFBsYXRmb3JtVXRpbCxcbiAgICAgICAgQEhvc3QoKSBAT3B0aW9uYWwoKSBASW5qZWN0KElHWF9HUklEX0JBU0UpIHByb3RlY3RlZCBncmlkQVBJPzogR3JpZFR5cGUpIHtcbiAgICAgICAgc3VwZXIoY2RyLCBlbGVtZW50LCBwbGF0Zm9ybSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucz8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBpbml0aWFsaXplKGNvbHVtbjogQ29sdW1uVHlwZSwgb3ZlcmxheVNlcnZpY2U6IElneE92ZXJsYXlTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuaW5saW5lID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29sdW1uID0gY29sdW1uO1xuICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlID0gb3ZlcmxheVNlcnZpY2U7XG4gICAgICAgIGlmICh0aGlzLl9vcmlnaW5hbERpc3BsYXkpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSB0aGlzLl9vcmlnaW5hbERpc3BsYXk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmluaXRpYWxpemVkLmVtaXQoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmdyaWQuY29sdW1uTW92aW5nLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsb3NlRHJvcGRvd24oKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uUGluKCkge1xuICAgICAgICB0aGlzLmNvbHVtbi5waW5uZWQgPSAhdGhpcy5jb2x1bW4ucGlubmVkO1xuICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvblNlbGVjdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbHVtbi5zZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Q29sdW1uKHRoaXMuY29sdW1uLmZpZWxkLCB0aGlzLmdyaWQuY29sdW1uU2VsZWN0aW9uID09PSBHcmlkU2VsZWN0aW9uTW9kZS5zaW5nbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RDb2x1bW4odGhpcy5jb2x1bW4uZmllbGQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY29sdW1uU2VsZWN0YWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZD8uY29sdW1uU2VsZWN0aW9uICE9PSBHcmlkU2VsZWN0aW9uTW9kZS5ub25lICYmIHRoaXMuY29sdW1uPy5zZWxlY3RhYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uSGlkZVRvZ2dsZSgpIHtcbiAgICAgICAgdGhpcy5jb2x1bW4udG9nZ2xlVmlzaWJpbGl0eSgpO1xuICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjYW5jZWwoKSB7XG4gICAgICAgIGlmICghdGhpcy5vdmVybGF5Q29tcG9uZW50SWQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNsb3NlRHJvcGRvd24oKSB7XG4gICAgICAgIGlmICh0aGlzLm92ZXJsYXlDb21wb25lbnRJZCkge1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5oaWRlKHRoaXMub3ZlcmxheUNvbXBvbmVudElkKTtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheUNvbXBvbmVudElkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uS2V5RG93bihldmVudEFyZ3M6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMucGxhdGZvcm0uaXNGaWx0ZXJpbmdLZXlDb21ibyhldmVudEFyZ3MpKSB7XG4gICAgICAgICAgICBldmVudEFyZ3MucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50QXJncy5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBoaWRlKCkge1xuICAgICAgICB0aGlzLl9vcmlnaW5hbERpc3BsYXkgPSBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KS5kaXNwbGF5O1xuICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGRldGVjdENoYW5nZXMoKSB7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXQoKSB7XG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0ID0gbmV3IEFycmF5PEV4cHJlc3Npb25VST4oKTtcbiAgICAgICAgZ2VuZXJhdGVFeHByZXNzaW9uc0xpc3QodGhpcy5jb2x1bW4uZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLCB0aGlzLmdyaWQuZmlsdGVyaW5nTG9naWMsIHRoaXMuZXhwcmVzc2lvbnNMaXN0KTtcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUNvbHVtbkRhdGEoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFyZUV4cHJlc3Npb25zU2VsZWN0YWJsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXhwcmVzc2lvbnNMaXN0Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgKHRoaXMuZXhwcmVzc2lvbnNMaXN0WzBdLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdlcXVhbHMnIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uc0xpc3RbMF0uZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ2F0JyB8fFxuICAgICAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0WzBdLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICd0cnVlJyB8fFxuICAgICAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0WzBdLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdmYWxzZScgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25zTGlzdFswXS5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnZW1wdHknIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uc0xpc3RbMF0uZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ2luJykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0YWJsZUV4cHJlc3Npb25zQ291bnQgPSB0aGlzLmV4cHJlc3Npb25zTGlzdC5maWx0ZXIoZXhwID0+XG4gICAgICAgICAgICAoZXhwLmJlZm9yZU9wZXJhdG9yID09PSAxIHx8IGV4cC5hZnRlck9wZXJhdG9yID09PSAxKSAmJlxuICAgICAgICAgICAgKGV4cC5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnZXF1YWxzJyB8fFxuICAgICAgICAgICAgICAgIGV4cC5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnYXQnIHx8XG4gICAgICAgICAgICAgICAgZXhwLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICd0cnVlJyB8fFxuICAgICAgICAgICAgICAgIGV4cC5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnZmFsc2UnIHx8XG4gICAgICAgICAgICAgICAgZXhwLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdlbXB0eScgfHxcbiAgICAgICAgICAgICAgICBleHAuZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ2luJykpLmxlbmd0aDtcblxuICAgICAgICByZXR1cm4gc2VsZWN0YWJsZUV4cHJlc3Npb25zQ291bnQgPT09IHRoaXMuZXhwcmVzc2lvbnNMaXN0Lmxlbmd0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFyZUV4cHJlc3Npb25zVmFsdWVzSW5UaGVMaXN0KCkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5Cb29sZWFuKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZpbHRlclZhbHVlcy5zaXplID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFZhbHVlID0gdGhpcy5maWx0ZXJWYWx1ZXMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuXG4gICAgICAgICAgICBpZiAoIWZpcnN0VmFsdWUgJiYgZmlyc3RWYWx1ZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBleHByZXNzaW9uIG9mIHRoaXMudW5pcXVlVmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0RXhwcmVzc2lvblZhbHVlKGV4cHJlc3Npb24pO1xuICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyVmFsdWVzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBvcHVsYXRlQ29sdW1uRGF0YSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC51bmlxdWVDb2x1bW5WYWx1ZXNTdHJhdGVneSkge1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb2x1bW5WYWx1ZXNSZW1vdGVseSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb2x1bW5WYWx1ZXNGcm9tRGF0YSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDb2x1bW5WYWx1ZXNSZW1vdGVseSgpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nU3RhcnQuZW1pdCgpO1xuICAgICAgICBjb25zdCBleHByZXNzaW9uc1RyZWU6IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSA9IHRoaXMuZ2V0Q29sdW1uRmlsdGVyRXhwcmVzc2lvbnNUcmVlKCk7XG5cbiAgICAgICAgY29uc3QgcHJldkNvbHVtbiA9IHRoaXMuY29sdW1uO1xuICAgICAgICB0aGlzLmdyaWQudW5pcXVlQ29sdW1uVmFsdWVzU3RyYXRlZ3kodGhpcy5jb2x1bW4sIGV4cHJlc3Npb25zVHJlZSwgKGNvbFZhbHM6IGFueVtdKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29sdW1uIHx8IHRoaXMuY29sdW1uICE9PSBwcmV2Q29sdW1uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZXMgPSAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlKSA/XG4gICAgICAgICAgICAgICAgY29sVmFscy5tYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuZ2V0RmlsdGVySXRlbUxhYmVsKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbGFiZWwsIHZhbHVlIH07XG4gICAgICAgICAgICAgICAgfSkgOiBjb2xWYWxzO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlclZhbHVlcyhjb2x1bW5WYWx1ZXMpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nRW5kLmVtaXQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG91bGRGb3JtYXRWYWx1ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5mb3JtYXR0ZXIgJiZcbiAgICAgICAgICAgICh0aGlzLmdyaWQuZmlsdGVyU3RyYXRlZ3kgaW5zdGFuY2VvZiBGb3JtYXR0ZWRWYWx1ZXNGaWx0ZXJpbmdTdHJhdGVneSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5maWx0ZXJTdHJhdGVneSBpbnN0YW5jZW9mIFRyZWVHcmlkRm9ybWF0dGVkVmFsdWVzRmlsdGVyaW5nU3RyYXRlZ3kpICYmXG4gICAgICAgICAgICB0aGlzLmdyaWQuZmlsdGVyU3RyYXRlZ3kuc2hvdWxkQXBwbHlGb3JtYXR0ZXIodGhpcy5jb2x1bW4uZmllbGQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ29sdW1uVmFsdWVzRnJvbURhdGEoKSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb25zVHJlZSA9IHRoaXMuZ2V0Q29sdW1uRmlsdGVyRXhwcmVzc2lvbnNUcmVlKCk7XG4gICAgICAgIC8vIFRPRE86IENoZWNrIHdoeSB3ZSBhY2Nlc3MgdGhlIEFQSSBzZXJ2aWNlIHRocm91Z2ggdGhlIGNvbHVtbiA/P1xuICAgICAgICAvLyBjb25zdCBkYXRhID0gdGhpcy5jb2x1bW4uZ3JpZEFQSS5maWx0ZXJEYXRhQnlFeHByZXNzaW9ucyhleHByZXNzaW9uc1RyZWUpO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5ncmlkLmdyaWRBUEkuZmlsdGVyRGF0YUJ5RXhwcmVzc2lvbnMoZXhwcmVzc2lvbnNUcmVlKTtcblxuICAgICAgICBjb25zdCBzaG91bGRGb3JtYXRWYWx1ZXMgPSB0aGlzLnNob3VsZEZvcm1hdFZhbHVlcygpO1xuICAgICAgICBjb25zdCBjb2x1bW5GaWVsZCA9IHRoaXMuY29sdW1uLmZpZWxkO1xuICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZXMgPSAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlKSA/XG4gICAgICAgICAgICBkYXRhLm1hcChyZWNvcmQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKHJlc29sdmVOZXN0ZWRQYXRoKHJlY29yZCwgY29sdW1uRmllbGQpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuZ2V0RmlsdGVySXRlbUxhYmVsKHZhbHVlLCB0cnVlLCByZWNvcmQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGxhYmVsLCB2YWx1ZSB9O1xuICAgICAgICAgICAgfSkgOiBkYXRhLm1hcChyZWNvcmQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVzb2x2ZU5lc3RlZFBhdGgocmVjb3JkLCBjb2x1bW5GaWVsZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNob3VsZEZvcm1hdFZhbHVlcyA/IHRoaXMuY29sdW1uLmZvcm1hdHRlcih2YWx1ZSwgcmVjb3JkKSA6IHZhbHVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJWYWx1ZXMoY29sdW1uVmFsdWVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlclZhbHVlcyhjb2x1bW5WYWx1ZXM6IGFueVtdKSB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVVbmlxdWVWYWx1ZXMoY29sdW1uVmFsdWVzKTtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUZpbHRlclZhbHVlcyh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkRhdGUgfHwgdGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlVGltZSk7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVMaXN0RGF0YSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVVbmlxdWVWYWx1ZXMoY29sdW1uVmFsdWVzOiBhbnlbXSkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5TdHJpbmcgJiYgdGhpcy5jb2x1bW4uZmlsdGVyaW5nSWdub3JlQ2FzZSkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRVbmlxdWVWYWx1ZXMgPSBjb2x1bW5WYWx1ZXMubWFwKHMgPT4gcz8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKG1hcCwgdmFsLCBpKSA9PiBtYXAuZ2V0KHZhbCkgPyBtYXAgOiBtYXAuc2V0KHZhbCwgY29sdW1uVmFsdWVzW2ldKSwgbmV3IE1hcCgpKTtcbiAgICAgICAgICAgIHRoaXMudW5pcXVlVmFsdWVzID0gQXJyYXkuZnJvbShmaWx0ZXJlZFVuaXF1ZVZhbHVlcy52YWx1ZXMoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlVGltZSkge1xuICAgICAgICAgICAgdGhpcy51bmlxdWVWYWx1ZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoY29sdW1uVmFsdWVzLm1hcCh2ID0+IHY/LnRvTG9jYWxlU3RyaW5nKCkpKSk7XG4gICAgICAgICAgICB0aGlzLnVuaXF1ZVZhbHVlcy5mb3JFYWNoKChkLCBpKSA9PiB0aGlzLnVuaXF1ZVZhbHVlc1tpXSA9IGQgPyBuZXcgRGF0ZShkKSA6IGQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuVGltZSkge1xuICAgICAgICAgICAgdGhpcy51bmlxdWVWYWx1ZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoY29sdW1uVmFsdWVzLm1hcCh2ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICB2ID0gbmV3IERhdGUodik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLnNldEhvdXJzKHYuZ2V0SG91cnMoKSwgdi5nZXRNaW51dGVzKCksIHYuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSkpO1xuICAgICAgICAgICAgdGhpcy51bmlxdWVWYWx1ZXMuZm9yRWFjaCgoZCwgaSkgPT4gdGhpcy51bmlxdWVWYWx1ZXNbaV0gPSBkID8gbmV3IERhdGUoZCkgOiBkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudW5pcXVlVmFsdWVzID0gdGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlID9cbiAgICAgICAgICAgICAgICB1bmlxdWVEYXRlcyhjb2x1bW5WYWx1ZXMpIDogQXJyYXkuZnJvbShuZXcgU2V0KGNvbHVtblZhbHVlcykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUZpbHRlclZhbHVlcyhpc0RhdGVDb2x1bW46IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBpZiAoaXNEYXRlQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlcyA9IG5ldyBTZXQ8YW55Pih0aGlzLmV4cHJlc3Npb25zTGlzdC5yZWR1Y2UoKGFyciwgZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdpbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5hcnIsIC4uLkFycmF5LmZyb20oKGUuZXhwcmVzc2lvbi5zZWFyY2hWYWwgYXMgU2V0PGFueT4pLnZhbHVlcygpKS5tYXAodiA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERhdGUodikudG9JU09TdHJpbmcoKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gWy4uLmFyciwgLi4uW2UuZXhwcmVzc2lvbi5zZWFyY2hWYWwgPyBlLmV4cHJlc3Npb24uc2VhcmNoVmFsLnRvSVNPU3RyaW5nKCkgOiBlLmV4cHJlc3Npb24uc2VhcmNoVmFsXV07XG4gICAgICAgICAgICB9LCBbXSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuVGltZSkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZXMgPSBuZXcgU2V0PGFueT4odGhpcy5leHByZXNzaW9uc0xpc3QucmVkdWNlKChhcnIsIGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnaW4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbLi4uYXJyLCAuLi5BcnJheS5mcm9tKChlLmV4cHJlc3Npb24uc2VhcmNoVmFsIGFzIFNldDxhbnk+KS52YWx1ZXMoKSkubWFwKHYgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IHYgOiBuZXcgRGF0ZSh2KS50b0xvY2FsZVRpbWVTdHJpbmcoKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gWy4uLmFyciwgLi4uW2UuZXhwcmVzc2lvbi5zZWFyY2hWYWwgPyBlLmV4cHJlc3Npb24uc2VhcmNoVmFsLnRvTG9jYWxlVGltZVN0cmluZygpIDogZS5leHByZXNzaW9uLnNlYXJjaFZhbF1dO1xuICAgICAgICAgICAgfSwgW10pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWVzID0gbmV3IFNldDxhbnk+KHRoaXMuZXhwcmVzc2lvbnNMaXN0LnJlZHVjZSgoYXJyLCBlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGUuZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ2luJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWy4uLmFyciwgLi4uQXJyYXkuZnJvbSgoZS5leHByZXNzaW9uLnNlYXJjaFZhbCBhcyBTZXQ8YW55PikudmFsdWVzKCkpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5hcnIsIC4uLltlLmV4cHJlc3Npb24uc2VhcmNoVmFsXV07XG4gICAgICAgICAgICB9LCBbXSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUxpc3REYXRhKCkge1xuICAgICAgICB0aGlzLmxpc3REYXRhID0gbmV3IEFycmF5PEZpbHRlckxpc3RJdGVtPigpO1xuICAgICAgICBjb25zdCBzaG91bGRVcGRhdGVTZWxlY3Rpb24gPSB0aGlzLmFyZUV4cHJlc3Npb25zU2VsZWN0YWJsZSgpICYmIHRoaXMuYXJlRXhwcmVzc2lvbnNWYWx1ZXNJblRoZUxpc3QoKTtcblxuICAgICAgICBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5Cb29sZWFuKSB7XG4gICAgICAgICAgICB0aGlzLmFkZEJvb2xlYW5JdGVtcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hZGRJdGVtcyhzaG91bGRVcGRhdGVTZWxlY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5saXN0RGF0YSA9IHRoaXMuY29sdW1uLnNvcnRTdHJhdGVneS5zb3J0KHRoaXMubGlzdERhdGEsICd2YWx1ZScsIFNvcnRpbmdEaXJlY3Rpb24uQXNjLCB0aGlzLmNvbHVtbi5zb3J0aW5nSWdub3JlQ2FzZSxcbiAgICAgICAgICAgIChvYmosIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByZXNvbHZlZFZhbHVlID0gb2JqW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuVGltZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFZhbHVlID0gbmV3IERhdGUoKS5zZXRIb3VycyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkVmFsdWUuZ2V0SG91cnMoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkVmFsdWUuZ2V0TWludXRlcygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZS5nZXRTZWNvbmRzKCksXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFZhbHVlLmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5zTnVsbE9yRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQmxhbmtzSXRlbShzaG91bGRVcGRhdGVTZWxlY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubGlzdERhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5hZGRTZWxlY3RBbGxJdGVtKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISh0aGlzLmNkciBhcyBhbnkpLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5saXN0RGF0YUxvYWRlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb2x1bW5GaWx0ZXJFeHByZXNzaW9uc1RyZWUoKSB7XG4gICAgICAgIGNvbnN0IGdyaWRFeHByZXNzaW9uc1RyZWU6IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgPSB0aGlzLmdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgICAgICBjb25zdCBleHByZXNzaW9uc1RyZWUgPSBuZXcgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKGdyaWRFeHByZXNzaW9uc1RyZWUub3BlcmF0b3IsIGdyaWRFeHByZXNzaW9uc1RyZWUuZmllbGROYW1lKTtcblxuICAgICAgICBmb3IgKGNvbnN0IG9wZXJhbmQgb2YgZ3JpZEV4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgaWYgKG9wZXJhbmQgaW5zdGFuY2VvZiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5FeHByVHJlZSA9IG9wZXJhbmQgYXMgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW5FeHByVHJlZS5maWVsZE5hbWUgPT09IHRoaXMuY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5wdXNoKG9wZXJhbmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4cHJlc3Npb25zVHJlZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEJvb2xlYW5JdGVtcygpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RBbGxTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnVuaXF1ZVZhbHVlcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyTGlzdEl0ZW0gPSBuZXcgRmlsdGVyTGlzdEl0ZW0oKTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50ICE9PSB1bmRlZmluZWQgJiYgZWxlbWVudCAhPT0gbnVsbCAmJiBlbGVtZW50ICE9PSAnJykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbHVtbi5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT09IHRydWUgJiYgdGhpcy5leHByZXNzaW9uc0xpc3QuZmluZChleHAgPT4gZXhwLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICd0cnVlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNGaWx0ZXJlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEFsbEluZGV0ZXJtaW5hdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT09IGZhbHNlICYmIHRoaXMuZXhwcmVzc2lvbnNMaXN0LmZpbmQoZXhwID0+IGV4cC5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnZmFsc2UnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc0ZpbHRlcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc0ZpbHRlcmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNGaWx0ZXJlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLnZhbHVlID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5sYWJlbCA9IGVsZW1lbnQgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2ZpbHRlcl90cnVlIDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9maWx0ZXJfZmFsc2U7XG4gICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdERhdGEucHVzaChmaWx0ZXJMaXN0SXRlbSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbnNOdWxsT3JFbXB0eSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkSXRlbXMoc2hvdWxkVXBkYXRlU2VsZWN0aW9uOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmNvbnRhaW5zTnVsbE9yRW1wdHkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZWxlY3RBbGxJbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGFwcGx5Rm9ybWF0dGVyID0gIXRoaXMuc2hvdWxkRm9ybWF0VmFsdWVzKCk7XG5cbiAgICAgICAgdGhpcy51bmlxdWVWYWx1ZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhhc1ZhbHVlID0gKGVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJiBlbGVtZW50ICE9PSBudWxsICYmIGVsZW1lbnQgIT09ICcnXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5jb2x1bW4uZGF0YVR5cGUgIT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlKVxuICAgICAgICAgICAgICAgIHx8ICEhKGVsZW1lbnQgJiYgZWxlbWVudC5sYWJlbCk7XG5cbiAgICAgICAgICAgIGlmIChoYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlckxpc3RJdGVtID0gbmV3IEZpbHRlckxpc3RJdGVtKCk7XG4gICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNGaWx0ZXJlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2x1bW4uZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNGaWx0ZXJlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRVcGRhdGVTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRFeHByZXNzaW9uVmFsdWUoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJWYWx1ZXMuaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzRmlsdGVyZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxJbmRldGVybWluYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS52YWx1ZSA9IHRoaXMuZ2V0RmlsdGVySXRlbVZhbHVlKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmxhYmVsID0gdGhpcy5nZXRGaWx0ZXJJdGVtTGFiZWwoZWxlbWVudCwgYXBwbHlGb3JtYXR0ZXIpO1xuICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3REYXRhLnB1c2goZmlsdGVyTGlzdEl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb250YWluc051bGxPckVtcHR5ID0gdGhpcy51bmlxdWVWYWx1ZXMubGVuZ3RoID4gdGhpcy5saXN0RGF0YS5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRTZWxlY3RBbGxJdGVtKCkge1xuICAgICAgICBjb25zdCBzZWxlY3RBbGwgPSBuZXcgRmlsdGVyTGlzdEl0ZW0oKTtcbiAgICAgICAgc2VsZWN0QWxsLmlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdEFsbFNlbGVjdGVkO1xuICAgICAgICBzZWxlY3RBbGwudmFsdWUgPSB0aGlzLmdyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2V4Y2VsX3NlbGVjdF9hbGw7XG4gICAgICAgIHNlbGVjdEFsbC5sYWJlbCA9IHRoaXMuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfc2VsZWN0X2FsbDtcbiAgICAgICAgc2VsZWN0QWxsLmluZGV0ZXJtaW5hdGUgPSB0aGlzLnNlbGVjdEFsbEluZGV0ZXJtaW5hdGU7XG4gICAgICAgIHNlbGVjdEFsbC5pc1NwZWNpYWwgPSB0cnVlO1xuICAgICAgICBzZWxlY3RBbGwuaXNGaWx0ZXJlZCA9IHRoaXMuc2VsZWN0QWxsU2VsZWN0ZWQ7XG4gICAgICAgIHRoaXMubGlzdERhdGEudW5zaGlmdChzZWxlY3RBbGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQmxhbmtzSXRlbShzaG91bGRVcGRhdGVTZWxlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgYmxhbmtzID0gbmV3IEZpbHRlckxpc3RJdGVtKCk7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpIHtcbiAgICAgICAgICAgIGlmIChzaG91bGRVcGRhdGVTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJWYWx1ZXMuaGFzKG51bGwpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJsYW5rcy5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYmxhbmtzLmlzRmlsdGVyZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJsYW5rcy5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGJsYW5rcy5pc0ZpbHRlcmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYmxhbmtzLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgYmxhbmtzLmlzRmlsdGVyZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGJsYW5rcy52YWx1ZSA9IG51bGw7XG4gICAgICAgIGJsYW5rcy5sYWJlbCA9IHRoaXMuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfYmxhbmtzO1xuICAgICAgICBibGFua3MuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICBibGFua3MuaXNTcGVjaWFsID0gdHJ1ZTtcbiAgICAgICAgYmxhbmtzLmlzQmxhbmtzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5saXN0RGF0YS51bnNoaWZ0KGJsYW5rcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJJdGVtTGFiZWwoZWxlbWVudDogYW55LCBhcHBseUZvcm1hdHRlcjogYm9vbGVhbiA9IHRydWUsIGRhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQ/LmxhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC5sYWJlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgIGlmIChhcHBseUZvcm1hdHRlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5mb3JtYXR0ZXIoZWxlbWVudCwgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgZGlzcGxheSwgZm9ybWF0LCBkaWdpdHNJbmZvLCBjdXJyZW5jeUNvZGUsIHRpbWV6b25lIH0gPSB0aGlzLmNvbHVtbi5waXBlQXJncztcbiAgICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy5ncmlkLmxvY2FsZTtcblxuICAgICAgICBzd2l0Y2ggKHRoaXMuY29sdW1uLmRhdGFUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlOlxuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZVRpbWU6XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5UaW1lOlxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXREYXRlKGVsZW1lbnQsIGZvcm1hdCwgbG9jYWxlLCB0aW1lem9uZSk7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5DdXJyZW5jeTpcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0Q3VycmVuY3koZWxlbWVudCwgY3VycmVuY3lDb2RlID8/IGdldExvY2FsZUN1cnJlbmN5Q29kZShsb2NhbGUpLCBkaXNwbGF5LCBkaWdpdHNJbmZvLCBsb2NhbGUpO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuTnVtYmVyOlxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXROdW1iZXIoZWxlbWVudCwgbG9jYWxlLCBkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLlBlcmNlbnQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFBlcmNlbnQoZWxlbWVudCwgbG9jYWxlLCBkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpbHRlckl0ZW1WYWx1ZShlbGVtZW50OiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZSkge1xuICAgICAgICAgICAgZWxlbWVudCA9IHBhcnNlRGF0ZShlbGVtZW50LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEV4cHJlc3Npb25WYWx1ZShlbGVtZW50OiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkRhdGUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gZWxlbWVudCAmJiBlbGVtZW50LnZhbHVlID8gbmV3IERhdGUoZWxlbWVudC52YWx1ZSkudG9JU09TdHJpbmcoKSA6IGVsZW1lbnQudmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlVGltZSkge1xuICAgICAgICAgICAgdmFsdWUgPSBlbGVtZW50ID8gbmV3IERhdGUoZWxlbWVudCkudG9JU09TdHJpbmcoKSA6IGVsZW1lbnQ7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5UaW1lKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGVsZW1lbnQgPyBuZXcgRGF0ZShlbGVtZW50KS50b0xvY2FsZVRpbWVTdHJpbmcoKSA6IGVsZW1lbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEV4Y2VsQ29sdW1uT3BlcmF0aW9ucz5cbiAgICA8aWd4LWV4Y2VsLXN0eWxlLWhlYWRlclxuICAgICAgICBbc2hvd0hpZGluZ109XCJkaXNwbGF5RGVuc2l0eSAhPT0gJ2NvbWZvcnRhYmxlJyAmJiAhY29sdW1uPy5kaXNhYmxlSGlkaW5nXCJcbiAgICAgICAgW3Nob3dQaW5uaW5nXT1cImRpc3BsYXlEZW5zaXR5ICE9PSAnY29tZm9ydGFibGUnICYmICFjb2x1bW4/LmRpc2FibGVQaW5uaW5nXCJcbiAgICAgICAgW3Nob3dTZWxlY3RpbmddPVwiZGlzcGxheURlbnNpdHkgIT09ICdjb21mb3J0YWJsZScgJiYgY29sdW1uU2VsZWN0YWJsZSgpXCJcbiAgICA+XG4gICAgPC9pZ3gtZXhjZWwtc3R5bGUtaGVhZGVyPlxuXG4gICAgPGlneC1leGNlbC1zdHlsZS1zb3J0aW5nICpuZ0lmPVwiY29sdW1uPy5zb3J0YWJsZVwiPlxuICAgIDwvaWd4LWV4Y2VsLXN0eWxlLXNvcnRpbmc+XG5cbiAgICA8aWd4LWV4Y2VsLXN0eWxlLW1vdmluZyAqbmdJZj1cImNvbHVtbj8ubW92YWJsZVwiPlxuICAgIDwvaWd4LWV4Y2VsLXN0eWxlLW1vdmluZz5cblxuICAgIDxpZ3gtZXhjZWwtc3R5bGUtcGlubmluZyAqbmdJZj1cIiFjb2x1bW4/LmRpc2FibGVQaW5uaW5nICYmIGRpc3BsYXlEZW5zaXR5PT09J2NvbWZvcnRhYmxlJ1wiPlxuICAgIDwvaWd4LWV4Y2VsLXN0eWxlLXBpbm5pbmc+XG5cbiAgICA8aWd4LWV4Y2VsLXN0eWxlLWhpZGluZyAqbmdJZj1cIiFjb2x1bW4/LmRpc2FibGVIaWRpbmcgJiYgZGlzcGxheURlbnNpdHk9PT0nY29tZm9ydGFibGUnXCI+XG4gICAgPC9pZ3gtZXhjZWwtc3R5bGUtaGlkaW5nPlxuXG4gICAgPGlneC1leGNlbC1zdHlsZS1zZWxlY3RpbmcgKm5nSWY9XCJjb2x1bW5TZWxlY3RhYmxlKCkgJiYgZGlzcGxheURlbnNpdHk9PT0nY29tZm9ydGFibGUnXCI+XG4gICAgPC9pZ3gtZXhjZWwtc3R5bGUtc2VsZWN0aW5nPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0RXhjZWxGaWx0ZXJPcGVyYXRpb25zPlxuICAgIDxpZ3gtZXhjZWwtc3R5bGUtY2xlYXItZmlsdGVycz5cbiAgICA8L2lneC1leGNlbC1zdHlsZS1jbGVhci1maWx0ZXJzPlxuXG4gICAgPGlneC1leGNlbC1zdHlsZS1jb25kaXRpb25hbC1maWx0ZXI+XG4gICAgPC9pZ3gtZXhjZWwtc3R5bGUtY29uZGl0aW9uYWwtZmlsdGVyPlxuXG4gICAgPGlneC1leGNlbC1zdHlsZS1zZWFyY2g+XG4gICAgPC9pZ3gtZXhjZWwtc3R5bGUtc2VhcmNoPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGFydGljbGUgI21haW5Ecm9wZG93blxuICAgIGNsYXNzPVwiaWd4LWV4Y2VsLWZpbHRlcl9fbWVudVwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnaWd4LWV4Y2VsLWZpbHRlcl9fbWVudS0tY29zeSc6IGRpc3BsYXlEZW5zaXR5ID09PSAnY29zeScsXG4gICAgICAgICdpZ3gtZXhjZWwtZmlsdGVyX19tZW51LS1jb21wYWN0JzogZGlzcGxheURlbnNpdHkgPT09ICdjb21wYWN0J1xuICAgIH1cIlxuICAgIFtpZF09XCJvdmVybGF5Q29tcG9uZW50SWRcIlxuICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICBbc3R5bGUubWluLWhlaWdodF09XCJtaW5IZWlnaHRcIlxuICAgIFtzdHlsZS5tYXgtaGVpZ2h0XT1cIm1heEhlaWdodFwiPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRoaXMuZXhjZWxDb2x1bW5PcGVyYXRpb25zRGlyZWN0aXZlOyBlbHNlIGRlZmF1bHRFeGNlbENvbHVtbk9wZXJhdGlvbnNcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LWV4Y2VsLXN0eWxlLWNvbHVtbi1vcGVyYXRpb25zLFtpZ3hFeGNlbFN0eWxlQ29sdW1uT3BlcmF0aW9uc11cIj5cbiAgICAgICAgPC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRoaXMuZXhjZWxGaWx0ZXJPcGVyYXRpb25zRGlyZWN0aXZlOyBlbHNlIGRlZmF1bHRFeGNlbEZpbHRlck9wZXJhdGlvbnNcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LWV4Y2VsLXN0eWxlLWZpbHRlci1vcGVyYXRpb25zLFtpZ3hFeGNlbFN0eWxlRmlsdGVyT3BlcmF0aW9uc11cIj5cbiAgICAgICAgPC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9hcnRpY2xlPlxuIl19