@coreui/angular-pro 5.2.22 → 5.2.23

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.
@@ -1,6 +1,6 @@
1
1
  import { booleanAttribute, Component, ContentChildren, DestroyRef, ElementRef, EventEmitter, forwardRef, HostBinding, HostListener, inject, Input, numberAttribute, Output, signal, ViewChild, ViewChildren } from '@angular/core';
2
2
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
- import { AsyncPipe, I18nPluralPipe, NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';
3
+ import { AsyncPipe, DOCUMENT, I18nPluralPipe, NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';
4
4
  import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
5
5
  import { FocusKeyManager } from '@angular/cdk/a11y';
6
6
  import { BehaviorSubject, skip, Subject } from 'rxjs';
@@ -63,6 +63,7 @@ export const defaultPopperOptions = {
63
63
  };
64
64
  export class MultiSelectComponent {
65
65
  #destroyRef;
66
+ #document;
66
67
  #i18nPlural;
67
68
  constructor(elementRef, renderer, ngZone, changeDetectorRef, viewContainerRef, focusMonitor, multiSelectService, iterableDiffers) {
68
69
  this.elementRef = elementRef;
@@ -74,6 +75,7 @@ export class MultiSelectComponent {
74
75
  this.multiSelectService = multiSelectService;
75
76
  this.iterableDiffers = iterableDiffers;
76
77
  this.#destroyRef = inject(DestroyRef);
78
+ this.#document = inject(DOCUMENT);
77
79
  this.#i18nPlural = inject(I18nPluralPipe);
78
80
  this.#destroy$ = new Subject();
79
81
  this.#optionsReady$ = new Subject();
@@ -1032,7 +1034,7 @@ export class MultiSelectComponent {
1032
1034
  this.scrollViewport = scrollViewport;
1033
1035
  const cdkVirtualScrollContentWrapper = this.scrollViewport.getElementRef().nativeElement?.firstElementChild;
1034
1036
  if (cdkVirtualScrollContentWrapper) {
1035
- const style = getComputedStyle(cdkVirtualScrollContentWrapper, null) ?? undefined;
1037
+ const style = this.#document.defaultView?.getComputedStyle(cdkVirtualScrollContentWrapper, null) ?? undefined;
1036
1038
  const padding = parseInt(style?.getPropertyValue('padding-left') ?? '12px') * 3;
1037
1039
  const observer = new MutationObserver((mutationRecords) => {
1038
1040
  mutationRecords.forEach((child) => {
@@ -1291,4 +1293,4 @@ i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "18.2.9", ng
1291
1293
  type: HostListener,
1292
1294
  args: ['click', ['$event']]
1293
1295
  }] } }) });
1294
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmV1aS1hbmd1bGFyL3NyYy9saWIvbXVsdGktc2VsZWN0L211bHRpLXNlbGVjdC9tdWx0aS1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9tdWx0aS1zZWxlY3QvbXVsdGktc2VsZWN0L211bHRpLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsZ0JBQWdCLEVBRWhCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxlQUFlLEVBSWYsTUFBTSxFQUdOLE1BQU0sRUFHTixTQUFTLEVBQ1QsWUFBWSxFQUViLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRyxPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBbUIsZUFBZSxFQUE2QixNQUFNLG1CQUFtQixDQUFDO0FBRWhHLE9BQU8sRUFBRSxlQUFlLEVBQWMsSUFBSSxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdEgsT0FBTyxFQUNMLGlCQUFpQixFQUNqQix3QkFBd0IsRUFDeEIscUJBQXFCLEVBQ3JCLHVCQUF1QixFQUN4QixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUNsRyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUN0SCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7QUFNN0UsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQThCO0lBQ3ZFLElBQUksRUFBRSxnQ0FBZ0M7SUFDdEMsT0FBTyxFQUFFLElBQUk7SUFDYixLQUFLLEVBQUUsTUFBTTtJQUNiLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtRQUNWLFdBQVc7SUFDYixDQUFDO0lBQ0QsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUE4QixFQUFFLEVBQUU7UUFDMUQsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLENBQUM7UUFDakMsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFFckMsSUFBSSxjQUFjLEdBQTBCLElBQUksY0FBYyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDekUsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hELFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQixDQUFDO1FBQ0gsQ0FBQyxDQUEwQixDQUFDO1FBRTVCLGNBQWMsQ0FBQyxPQUFPLENBQVUsU0FBUyxDQUFDLENBQUM7UUFDM0MsT0FBTyxHQUFHLEVBQUU7WUFDVixjQUFjLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDN0IsY0FBYyxHQUFHLElBQUksQ0FBQztRQUN4QixDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUE4QjtJQUNyRSxJQUFJLEVBQUUsOEJBQThCO0lBQ3BDLE9BQU8sRUFBRSxJQUFJO0lBQ2IsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1FBQ2hCLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLENBQUM7SUFDdkUsQ0FBQztJQUNELEtBQUssRUFBRSxhQUFhO0lBQ3BCLFFBQVEsRUFBRSxDQUFDLGVBQWUsQ0FBQztDQUM1QixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQXFCO0lBQ3BELFFBQVEsRUFBRSxPQUFPO0lBQ2pCLFNBQVMsRUFBRTtRQUNULDhCQUE4QjtRQUM5Qiw0QkFBNEI7UUFDNUI7WUFDRSxJQUFJLEVBQUUsUUFBUTtZQUNkLE9BQU8sRUFBRTtnQkFDUCxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3JCO1NBQ0Y7S0FDRjtDQUNGLENBQUM7QUFxQ0YsTUFBTSxPQUFPLG9CQUFvQjtJQUd0QixXQUFXLENBQXNCO0lBQ2pDLFdBQVcsQ0FBMEI7SUFFOUMsWUFDVSxVQUFzQixFQUN0QixRQUFtQixFQUNuQixNQUFjLEVBQ2QsaUJBQW9DLEVBQ3BDLGdCQUFrQyxFQUNsQyxZQUEwQixFQUMxQixrQkFBc0MsRUFDdEMsZUFBZ0M7UUFQaEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFYakMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFtQnJDLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ2hDLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUVyQyxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBWSxFQUFFLENBQUMsQ0FBQztRQUN2RCxhQUFRLEdBQWdDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDbEQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQVksRUFBRSxDQUFDLENBQUM7UUFDdEQsb0JBQWUsR0FBc0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUMvQyxXQUFNLEdBQUcsSUFBSSxlQUFlLENBQVcsRUFBRSxDQUFDLENBQUM7UUFDcEQsb0JBQWUsR0FBVSxFQUFFLENBQUM7UUFFNUIsYUFBUSxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDeEIsV0FBVztRQUNiLENBQUMsQ0FBQztRQUNGLGNBQVMsR0FBRyxHQUFHLEVBQUU7WUFDZixXQUFXO1FBQ2IsQ0FBQyxDQUFDO1FBc0JGOzs7OztXQUtHO1FBQ3FDLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUU1RTs7OztXQUlHO1FBQ00sWUFBTyxHQUF1QixJQUFJLENBQUM7UUFFNUM7Ozs7O1dBS0c7UUFDcUMsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBbUJyRSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBYTFCLGNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFpQmxCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFMUI7Ozs7V0FJRztRQUNNLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBRW5DOzs7O1dBSUc7UUFDTSxhQUFRLEdBQVcsRUFBRSxDQUFDO1FBRS9COzs7O1dBSUc7UUFDTSxlQUFVLEdBQVcsRUFBRSxDQUFDO1FBbUJqQzs7OztXQUlHO1FBQ00scUJBQWdCLEdBQW9CLE1BQU0sQ0FBQztRQVlwRDs7OztXQUlHO1FBQ00sZ0JBQVcsR0FBVyxXQUFXLENBQUM7UUFFM0M7Ozs7V0FJRztRQUNNLFdBQU0sR0FBb0MsSUFBSSxDQUFDO1FBRXhEOzs7O1dBSUc7UUFDTSx5QkFBb0IsR0FBVyxVQUFVLENBQUM7UUFzQjNDLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBRWxDOzs7V0FHRztRQUNnQixzQkFBaUIsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUV4Rjs7OztXQUlHO1FBQ00sY0FBUyxHQUFZLElBQUksQ0FBQztRQUVuQzs7OztXQUlHO1FBQ00sbUJBQWMsR0FBVyxvQkFBb0IsQ0FBQztRQUV2RDs7OztXQUlHO1FBQ00sa0JBQWEsR0FBZ0MsTUFBTSxDQUFDO1FBRTdEOzs7O1dBSUc7UUFDTSw2QkFBd0IsR0FBVyxrQkFBa0IsQ0FBQztRQUUvRDs7OztXQUlHO1FBQ00sc0NBQWlDLEdBQWdCLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztRQWlDN0csV0FBTSxHQUFHLE1BQU0sQ0FBVyxFQUFFLENBQUMsQ0FBQztRQUU5Qjs7O1dBR0c7UUFDZ0IsZ0JBQVcsR0FBb0MsSUFBSSxZQUFZLEVBQXFCLENBQUM7UUF1QmhHLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQWlCekIsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFFMUI7Ozs7V0FJRztRQUNNLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFFL0I7Ozs7V0FJRztRQUNNLGlCQUFZLEdBQVcsR0FBRyxDQUFDO1FBQzNCLGFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBd0J0QyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRXpCOzs7V0FHRztRQUNnQixrQkFBYSxHQUEwQixJQUFJLFlBQVksRUFBVyxDQUFDO1FBNEI3RSxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRXZELHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQXVDaEIsY0FBUyxHQUF1QyxFQUFFLENBQUM7UUFpRHJELGNBQVMsR0FBa0IsQ0FBQyxDQUFDLENBQUM7UUErSC9CLG1CQUFjLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBZ0I5QixvQkFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFrTWpELGdCQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsRUFBRSxDQUFDO1FBaVJ2RCxpQkFBWSxHQUEwRCxJQUFJLENBQUM7UUFqbEN6RSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDakUsQ0FBQztJQUlRLFNBQVMsQ0FBdUI7SUFDaEMsY0FBYyxDQUF1QjtJQUdyQyxRQUFRLENBQTBDO0lBSTNELGVBQWUsQ0FBYTtJQVM1QixVQUFVLENBQUMsS0FBd0I7UUFDakMsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBTztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBTztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBbUI7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDN0IsQ0FBQztJQXlCRDs7OztPQUlHO0lBQ0gsSUFDSSxRQUFRLENBQUMsS0FBYztRQUN6QixJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFJRDs7Ozs7T0FLRztJQUNILElBQ0ksT0FBTyxDQUFDLEtBQWM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUlEOzs7O09BSUc7SUFDSCxJQUNJLFFBQVEsQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBeUJEOzs7O09BSUc7SUFDSCxJQUNJLE9BQU8sQ0FBQyxPQUFrQjtRQUM1QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQVNEOzs7O09BSUc7SUFDSCxJQUNJLFlBQVksQ0FBQyxLQUEwQjtRQUN6QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxHQUFHLEtBQUssSUFBSSxVQUFVLENBQUM7SUFDN0QsQ0FBQztJQXVCRDs7OztPQUlHO0lBQ0gsSUFDSSxXQUFXLENBQUMsS0FBSztRQUNuQixJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ3hGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pELENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFtREQ7OztPQUdHO0lBQ0gsSUFBYSxLQUFLLENBQUMsS0FBd0I7UUFDekMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdELHFCQUFxQjtRQUNyQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pELENBQUM7WUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQixxQ0FBcUM7UUFDdkMsQ0FBQztRQUNELElBQUk7SUFDTixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsTUFBTSxLQUFLLEdBQWEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsRUFBRSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQy9GLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELE1BQU0sQ0FBd0I7SUFlOUI7Ozs7T0FJRztJQUNILElBQ0ksZUFBZSxDQUFDLEtBQWM7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFJRDs7OztPQUlHO0lBQ0gsSUFDSSxZQUFZLENBQUMsS0FBSztRQUNwQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvRSxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFtQkQ7Ozs7T0FJRztJQUNILElBQ0ksT0FBTyxDQUFDLEtBQWM7UUFDeEIsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQyxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCx5QkFBeUI7WUFDM0IsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFVRDs7O09BR0c7SUFDSCxJQUNJLGFBQWEsQ0FBQyxPQUF5QjtRQUN6QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDMUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxhQUFhLEdBQUcsRUFBRSxFQUFFLEdBQUcsV0FBVyxDQUFDO1FBQ3RELE1BQU0sRUFBRSxTQUFTLEVBQUUsYUFBYSxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUNsRCxNQUFNLFdBQVcsR0FBcUI7WUFDcEMsR0FBRyxPQUFPO1lBQ1YsU0FBUyxFQUFFO2dCQUNULEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FDckIsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQ2pHO2dCQUNELEdBQUcsYUFBYTthQUNqQjtTQUNGLENBQUM7UUFFRixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsV0FBVyxFQUFFLEdBQUcsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVRLGNBQWMsQ0FBZ0M7SUFJdkQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDckIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQzNFLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxJQUFJLHNCQUFzQjtRQUN4QixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzFFLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN0QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDMUIsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGlDQUFpQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyx3QkFBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDaE0sQ0FBQztJQUNILENBQUM7SUFzQkQsSUFDSSxXQUFXO1FBQ2IsT0FBTztZQUNMLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtTQUN4QixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksa0JBQWtCO1FBQ3BCLE9BQU87WUFDTCxtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLENBQUMscUJBQXFCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSTtZQUMvQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDbEIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUk7WUFDL0IsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSztTQUNuQyxDQUFDO0lBQ0osQ0FBQztJQUVELElBQ1ksbUJBQW1CO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFDWSxZQUFZO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFDWSxRQUFRO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBWSxRQUFRLENBQUMsS0FBSztRQUN4QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFJa0MsT0FBTyxDQUFDLE1BQXFCO1FBQzlELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sYUFBYSxHQUFJLE1BQU0sQ0FBQyxNQUFzQixDQUFDLE9BQU8sQ0FBQztRQUM3RCxJQUFJLE1BQU0sQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDckMsT0FBTztRQUNULENBQUM7UUFDRCxJQUNFLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNyRCxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFDekYsQ0FBQztZQUNELE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN2QyxDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2pDLGtDQUFrQztZQUNsQyw0REFBNEQ7WUFDNUQsMkNBQTJDO1lBQzNDLElBQUk7WUFFSixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUN2QyxDQUFDO2dCQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFDO2dCQUMvQixPQUFPO1lBQ1QsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3hDLElBQUksYUFBYSxLQUFLLHVCQUF1QixFQUFFLENBQUM7b0JBQzlDLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyx1QkFBdUIsRUFBRSxDQUFDO3dCQUMvQyxJQUNFLE1BQU0sQ0FBQyxRQUFROzRCQUNmLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLEtBQUs7Z0NBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQ3ZGLENBQUM7NEJBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7NEJBQ3JDLElBQUksQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFDOzRCQUMvQixPQUFPO3dCQUNULENBQUM7d0JBRUQsSUFDRSxDQUFDLE1BQU0sQ0FBQyxRQUFROzRCQUNoQixJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxLQUFLO2dDQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQ3hGLENBQUM7NEJBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7NEJBQ3JDLElBQUksQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFDOzRCQUMvQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3pCLE9BQU87d0JBQ1QsQ0FBQztvQkFDSCxDQUFDO29CQUVELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLGFBQWEsRUFBRSxDQUFDO3dCQUN6RSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzs0QkFDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO3dCQUN4RCxDQUFDOzZCQUFNLENBQUM7NEJBQ04sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7d0JBQzVCLENBQUM7b0JBQ0gsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUM1RyxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUM7Z0JBQy9CLE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFb0MsU0FBUyxDQUFDLE1BQXFCO1FBQ2xFLE1BQU0sYUFBYSxHQUFJLE1BQU0sQ0FBQyxNQUFzQixDQUFDLE9BQU8sQ0FBQztRQUM3RCxJQUFJLE1BQU0sQ0FBQyxHQUFHLEtBQUssT0FBTyxJQUFJLGFBQWEsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUN4RCxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDMUIsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQztZQUMvQixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxXQUFXLElBQUksYUFBYSxLQUFLLHVCQUF1QixFQUFFLENBQUM7WUFDNUUsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsT0FBTztRQUNULENBQUM7UUFDRCx1REFBdUQ7UUFDdkQsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLENBQUM7WUFDdkQsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGVBQWUsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFHRCxPQUFPLENBQUMsTUFBa0I7UUFDeEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDL0IsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFJRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLGNBQWMsQ0FBQyxPQUFnQjtRQUNqQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDO0lBTUQsV0FBVyxDQUFDLE1BQW1CO1FBQzdCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsT0FBTzthQUMzQyxJQUFJLENBQ0gsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUM1QixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDYixJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM1QiwrQ0FBK0M7Z0JBQy9DLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN4QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsRUFDRixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQ3JDO2FBQ0EsU0FBUyxFQUFFLENBQUM7UUFFZixJQUFJLENBQUMsY0FBYzthQUNoQixJQUFJLENBQ0gsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUNuQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztRQUMvRixDQUFDLENBQUMsRUFDRixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQ3JDO2FBQ0EsU0FBUyxFQUFFLENBQUM7UUFFZixJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLE9BQU87YUFDM0MsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2IsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQztZQUNoQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUNqRCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN4QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQ0Ysa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUNyQzthQUNBLFNBQVMsRUFBRSxDQUFDO1FBRWYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxPQUFPO2FBQzNDLElBQUk7UUFDSCxZQUFZO1FBQ1osaUJBQWlCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUN0QyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ3RCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUM7WUFDbEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQyxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUM5RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckMsSUFBSSxLQUFLLEVBQUUsQ0FBQztvQkFDVixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZDLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRWxFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxFQUNGLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDckM7YUFDQSxTQUFTLEVBQUUsQ0FBQztRQUVmLHFCQUFxQjtRQUNyQixJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3pFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDdkIsT0FBTztZQUNULENBQUM7WUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTTthQUNSLElBQUksQ0FDSCxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQ2pCLG9CQUFvQixFQUFFLEVBQ3RCLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1osSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxFQUNGLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDckM7YUFDQSxTQUFTLEVBQUUsQ0FBQztRQUVmLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhO2FBQ2xDLElBQUksQ0FDSCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFDekMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDMUcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFFekIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDakQsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztnQkFDNUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDakQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ2xFLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxFQUFFLE9BQU8sSUFBSSxLQUFLLENBQUM7b0JBQ3pDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2dCQUN4QixDQUFDLENBQUMsQ0FBQztnQkFDSCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7Z0JBQy9DLElBQUksY0FBYyxFQUFFLENBQUM7b0JBQ25CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDeEMsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN2QixVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0IsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0QsSUFBSSxDQUFDLHlCQUF5QixFQUFFLGVBQWUsRUFBRSxDQUFDO1FBQ3BELENBQUMsQ0FBQyxFQUNGLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDckM7YUFDQSxTQUFTLEVBQUUsQ0FBQztRQUVmLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QyxJQUFJLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMzQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsQ0FBQztZQUNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQWtCO1FBQzVCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxVQUFVLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtnQkFDcEMsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDekIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3pCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDekIsTUFBTSxLQUFLLEdBQUc7Z0JBQ1osS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUs7Z0JBQ25DLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFO2dCQUMvQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsS0FBSyxJQUFJO2dCQUNsQyxPQUFPLEVBQ0wsSUFBSSxDQUFDLE1BQU0sS0FBSyxVQUFVO29CQUN4QixDQUFDLENBQUMsSUFBSTtvQkFDTixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsUUFBUTt3QkFDaEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPO3dCQUNoQixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxLQUFLO2dCQUNoQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFO2dCQUM3RCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7Z0JBQ3pCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtnQkFDckIsNkVBQTZFO2dCQUM3RSxnQkFBZ0I7YUFDakIsQ0FBQztZQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXJDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxlQUFlLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBSUQsc0NBQXNDO0lBQ3RDLG1DQUFtQztJQUNuQyxvR0FBb0c7SUFDcEcsTUFBTTtJQUNOLE1BQU07SUFFTixhQUFhO1FBQ1gsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQzNFLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsT0FBTztZQUNULENBQUM7WUFDRCxNQUFNLFVBQVUsR0FBWTtnQkFDMUIsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDdEIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsTUFBTSxFQUFFLElBQUk7Z0JBQ1osUUFBUSxFQUFFLElBQUk7YUFDZixDQUFDO1lBQ0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDL0YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDO0lBQ0gsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRTFCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxPQUFPO2FBQ3BDLElBQUksQ0FDSCxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1Isb0JBQW9CLENBQUMsQ0FBQyxRQUErQyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ2hGLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0QsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDZCxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6RSxDQUFDLENBQUMsRUFDRixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQ3JDO2FBQ0EsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDMUYsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDeEIsQ0FBQztnQkFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzdELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDL0csSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMseUJBQXlCLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDbkQsQ0FBQztRQUVELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBRTVCLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFckMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFekIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRWpELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUI7YUFDdEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUMxQyxTQUFTLENBQUMsQ0FBQyxNQUFrQyxFQUFFLEVBQUU7WUFDaEQsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDbEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0MsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUlPLG9CQUFvQixDQUFDLFlBQXFCLElBQUk7UUFDcEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQjthQUN4QyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLG9CQUFvQixFQUFFLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ3JGLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3JCLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDakMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNiLFdBQVc7Z0JBQ2IsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO3dCQUN6QixDQUFDOzRCQUNDLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7NEJBQ3RGLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUM7d0JBQ2pHLENBQUM7d0JBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO3dCQUM1RSxJQUFJLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDeEMsQ0FBQztnQkFDSCxDQUFDO2dCQUNELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNuRCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFtQjtRQUNqQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDO2lCQUM3RCxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztpQkFDcEMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUU1QixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN0QixJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDOUMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUN0RCxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO2FBQ3RELEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFVO1FBQ3hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELFFBQVEsQ0FBQyxTQUFzQixTQUFTLEVBQUUsVUFBbUI7UUFDM0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLGFBQWEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2pHLE1BQU0sYUFBYSxHQUFHLE1BQU0sS0FBSyxTQUFTLENBQUM7UUFDM0MsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLDZHQUE2RztJQUMvRyxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWE7UUFDekIsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNwQyxJQUFJLFlBQVksS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQy9DLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ2xFLHVCQUF1QjtnQkFDdkIsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQztRQUMxRSxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzlHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDL0YsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM1QyxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzVELE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDakUsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNqSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sMkVBQTJFO2dCQUMzRSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDNUUsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsTUFBcUI7UUFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDekYsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixNQUFNLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RDLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMvRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2pELE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDN0UsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sZUFBZSxDQUFDLE9BQWdCO1FBQ3RDLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlCLGtDQUFrQztZQUNsQyxxREFBcUQ7WUFDckQsV0FBVztZQUNYLHNCQUFzQjtZQUN0QixtRkFBbUY7WUFDbkYsbURBQW1EO1lBQ25ELFVBQVU7WUFDVixVQUFVO1lBQ1YsMkNBQTJDO1lBQzNDLE1BQU07WUFDTixrQkFBa0I7WUFDbEIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxZQUFZO2dCQUMvQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztpQkFDL0IsSUFBSTtZQUNILDREQUE0RDtZQUM1RCxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQ2pCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDckM7aUJBQ0EsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUMvQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLENBQUM7Z0JBQ3pDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDL0MsQ0FBQztJQUNILENBQUM7SUFJRCx5QkFBeUIsQ0FBQyxhQUFxQixFQUFFLGNBQXdDO1FBQ3ZGLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDdkMsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6RSxNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzNELE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUcsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRTlELElBQUksYUFBYSxHQUFHLGlCQUFpQixFQUFFLENBQUM7WUFDdEMsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ25HLElBQUksZ0JBQWdCLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDdkQsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUMvRCxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RHLElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzlFLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsS0FBYSxFQUFFLE1BQWU7UUFDdEMsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxXQUFtQjtRQUN6QyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ2pELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1lBQ3RELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzFCLE9BQU87UUFDVCxDQUFDO1FBRUQsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUEwQixFQUFFLEVBQUU7WUFDM0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUVILHVFQUF1RTtRQUN2RSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztZQUM3RCxJQUFJLENBQUMseUJBQXlCLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDbkQsQ0FBQztRQUVELHlEQUF5RDtRQUN6RCx3QkFBd0I7UUFDeEIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxNQUFrQyxFQUFFLEVBQUU7WUFDM0QsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9HLENBQUMsQ0FBQztRQUVGLE1BQU0sY0FBYyxHQUFzRCxJQUFJLENBQUMseUJBQXlCLENBQUMsT0FBTyxDQUFDO1FBRWpILE1BQU0sY0FBYyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQ3hDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQ25DLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFDdkMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzdFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDckMsQ0FBQztRQUVGLGNBQWMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDcEYsT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU87YUFDNUIsSUFBSSxDQUNILElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN0QyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztnQkFFckMsTUFBTSw4QkFBOEIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQztnQkFDNUcsSUFBSSw4QkFBOEIsRUFBRSxDQUFDO29CQUNuQyxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUM7b0JBQ2xGLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUVoRixNQUFNLFFBQVEsR0FBRyxJQUFJLGdCQUFnQixDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7d0JBQ3hELGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTs0QkFDaEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQ0FDaEMsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLHVCQUF1QixFQUFFLENBQUM7b0NBQzlDLE1BQU0sS0FBSyxHQUFJLElBQW9CLENBQUMsV0FBVyxDQUFDO29DQUNoRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7d0NBQzlCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQztvQ0FDdEMsQ0FBQztnQ0FDSCxDQUFDOzRCQUNILENBQUMsQ0FBQyxDQUFDO3dCQUNMLENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO29CQUVILFFBQVEsRUFBRSxPQUFPLENBQUMsOEJBQThCLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFFdkUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO3dCQUM1QixRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUM7b0JBQ3pCLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQ0Ysa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUNyQzthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsa0RBQWtEO1FBQ2xELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPO2FBQ25DLElBQUksQ0FDSCxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFDekMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLEVBQ0Ysa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUNyQzthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxnQkFBc0Y7UUFDdkcsbUNBQW1DO1FBRW5DLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQUMsZ0JBQWdCLENBQUM7YUFDekQsY0FBYyxFQUFFO2FBQ2hCLGNBQWMsRUFBRTthQUNoQixhQUFhLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFakUsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU07YUFDeEIsSUFBSSxDQUNILGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFDcEMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLFdBQVc7UUFDYixDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsRUFBRSxDQUFDO1FBRWYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzFGLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDeEcsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNoRCxDQUFDO1lBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQztZQUNwRCxNQUFNLE1BQU0sR0FBK0IsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUM3RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7UUFFSCwwQ0FBMEM7UUFDMUMsK0JBQStCO1FBQy9CLElBQUk7SUFDTixDQUFDO0lBRUQsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTyxDQUNMLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQ3BGLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQ2xGLENBQUM7SUFDSixDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBQ25ELGtCQUFrQjtZQUNoQixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsa0JBQWtCLENBQUM7WUFDekQsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsVUFBVSxJQUFJLElBQUksQ0FBQztJQUMvRCxDQUFDO0lBTUQsZ0JBQWdCLENBQUMsSUFBUztRQUN4QixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUM7UUFDM0Qsa0JBQWtCO1lBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDO1lBQzVELENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxVQUFVLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ2pELE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLHNCQUFzQixFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUM5QyxNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUN4QixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDaEQsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxVQUFVLElBQUksSUFBSSxDQUFDO0lBQy9ELENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxNQUFrQjtRQUNyQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQy9CLENBQUM7OEdBcnpDVSxvQkFBb0I7a0dBQXBCLG9CQUFvQiw2SEFrRVgsZ0JBQWdCLDJGQWVoQixnQkFBZ0Isc0NBT2hCLGdCQUFnQixtQ0FvQmhCLGdCQUFnQixzQ0FZaEIsZ0JBQWdCLCtsQkEwTWhCLGdCQUFnQixrREFnQmhCLGVBQWUsdUZBZ0NmLGdCQUFnQixxY0FoWnpCO1lBQ1QsY0FBYztZQUNkLGtCQUFrQjtZQUNsQjtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDO2dCQUNuRCxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0Ysb0VBNGRnQiwwQkFBMEIsc0VBUzFCLG1CQUFtQiw0UkFLekIscUJBQXFCLDJCQUFVLFVBQVUsd0RBQ3pDLGlCQUFpQiwyQkFBVSxVQUFVLDhEQUNyQyx1QkFBdUIsMkJBQVUsVUFBVSx5REFkeEMsMEJBQTBCLDJMQ3ZsQjFDLGtvTUFxSkEsNG1DRHpCSSxTQUFTLDhDQUVULE9BQU8sb0ZBQ1AsT0FBTywyRUFDUCxnQkFBZ0IsbUpBSWhCLFdBQVcsK21CQUNYLHVCQUF1QixzSUFDdkIsMEJBQTBCLHlQQUMxQiwwQkFBMEIseUpBQzFCLGlCQUFpQiwyTkFFakIscUJBQXFCLDJIQUNyQix1QkFBdUIsMEpBQ3ZCLHFCQUFxQixzSEFoQnJCLFNBQVM7Z0JBR1QsT0FBTztnQkFDUCxnQkFBZ0I7O2dHQWVQLG9CQUFvQjtzQkFuQ2hDLFNBQVM7bUNBQ0UsZ0JBQWdCLFlBR2hCLGNBQWMsYUFDYjs0QkFDVCxjQUFjOzRCQUNkLGtCQUFrQjs0QkFDbEI7Z0NBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQ0FDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUscUJBQXFCLENBQUM7Z0NBQ25ELEtBQUssRUFBRSxJQUFJOzZCQUNaO3lCQUNGLGNBQ1csSUFBSSxXQUNQOzRCQUNQLFNBQVM7NEJBQ1QsY0FBYzs0QkFDZCxPQUFPOzRCQUNQLE9BQU87NEJBQ1AsZ0JBQWdCOzRCQUNoQix5QkFBeUI7NEJBQ3pCLHdCQUF3Qjs0QkFDeEIsZUFBZTs0QkFDZixXQUFXOzRCQUNYLHVCQUF1Qjs0QkFDdkIsMEJBQTBCOzRCQUMxQiwwQkFBMEI7NEJBQzFCLGlCQUFpQjs0QkFDakIsd0JBQXdCOzRCQUN4QixxQkFBcUI7NEJBQ3JCLHVCQUF1Qjs0QkFDdkIscUJBQXFCO3lCQUN0Qjt5UkFvRXVDLGtCQUFrQjswQkFBekQsS0FBSzsyQkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtvQkFPN0IsT0FBTzswQkFBZixLQUFLO29CQVFrQyxtQkFBbUI7MEJBQTFELEtBQUs7MkJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7b0JBUWxDLFFBQVE7MEJBRFgsS0FBSzsyQkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtvQkFxQmxDLE9BQU87MEJBRFYsS0FBSzsyQkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtvQkFhbEMsUUFBUTswQkFEWCxLQUFLOzJCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO29CQWlCN0IsWUFBWTswQkFBcEIsS0FBSztvQkFPRyxRQUFROzBCQUFoQixLQUFLO29CQU9HLFVBQVU7MEJBQWxCLEtBQUs7b0JBUUYsT0FBTzswQkFEVixLQUFLO29CQWlCRyxnQkFBZ0I7MEJBQXhCLEtBQUs7b0JBUUYsWUFBWTswQkFEZixLQUFLO29CQVVHLFdBQVc7MEJBQW5CLEtBQUs7b0JBT0csTUFBTTswQkFBZCxLQUFLO29CQU9HLG9CQUFvQjswQkFBNUIsS0FBSztvQkFRRixXQUFXOzBCQURkLEtBQUs7b0JBcUJhLGlCQUFpQjswQkFBbkMsTUFBTTtvQkFPRSxTQUFTOzBCQUFqQixLQUFLO29CQU9HLGNBQWM7MEJBQXRCLEtBQUs7b0JBT0csYUFBYTswQkFBckIsS0FBSztvQkFPRyx3QkFBd0I7MEJBQWhDLEtBQUs7b0JBT0csaUNBQWlDOzBCQUF6QyxLQUFLO29CQU1HLElBQUk7MEJBQVosS0FBSztvQkFNTyxLQUFLOzBCQUFqQixLQUFLO29CQTJCYSxXQUFXOzBCQUE3QixNQUFNO29CQU9FLEtBQUs7MEJBQWIsS0FBSztvQkFRRixlQUFlOzBCQURsQixLQUFLOzJCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO29CQWlCbEMsWUFBWTswQkFEZixLQUFLOzJCQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtvQkFpQjVCLFFBQVE7MEJBQWhCLEtBQUs7b0JBT0csWUFBWTswQkFBcEIsS0FBSztvQkFTRixPQUFPOzBCQURWLEtBQUs7MkJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7b0JBdUJuQixhQUFhOzBCQUEvQixNQUFNO29CQU9ILGFBQWE7MEJBRGhCLEtBQUs7b0JBd0ROLHlCQUF5QjswQkFEeEIsZUFBZTsyQkFBQywwQkFBMEIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7b0JBRXhCLHNCQUFzQjswQkFBL0QsWUFBWTsyQkFBQywwQkFBMEI7b0JBQ1Isa0JBQWtCOzBCQUFqRCxZQUFZOzJCQUFDLGdCQUFnQjtvQkFDUixpQkFBaUI7MEJBQXRDLFNBQVM7MkJBQUMsU0FBUztvQkFLeUMsZ0JBQWdCOzBCQUE1RSxlQUFlOzJCQUFDLG1CQUFtQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtvQkFJaEMsWUFBWTswQkFBdEMsU0FBUzsyQkFBQyxjQUFjO29CQUMrQixZQUFZOzBCQUFuRSxTQUFTOzJCQUFDLHFCQUFxQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtvQkFDRixRQUFROzBCQUEzRCxTQUFTOzJCQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtvQkFDUSxjQUFjOzBCQUF2RSxTQUFTOzJCQUFDLHVCQUF1QixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtvQkFHcEQsV0FBVzswQkFEZCxXQUFXOzJCQUFDLE9BQU87b0JBbUJSLG1CQUFtQjswQkFEOUIsV0FBVzsyQkFBQywyQkFBMkI7b0JBTTVCLFlBQVk7MEJBRHZCLFdBQVc7MkJBQUMsb0JBQW9CO29CQU1yQixRQUFROzBCQURuQixXQUFXOzJCQUFDLGVBQWU7b0JBYU8sT0FBTzswQkFBekMsWUFBWTsyQkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7b0JBZ0ZJLFNBQVM7MEJBQTdDLFlBQVk7MkJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO29CQWdDbkMsT0FBTzswQkFETixZQUFZOzJCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGVzdHJveVJlZixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBJdGVyYWJsZURpZmZlcixcbiAgSXRlcmFibGVEaWZmZXJzLFxuICBOZ1pvbmUsXG4gIG51bWJlckF0dHJpYnV0ZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgc2lnbmFsLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIEkxOG5QbHVyYWxQaXBlLCBOZ0NsYXNzLCBOZ1N0eWxlLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb2N1c2FibGVPcHRpb24sIEZvY3VzS2V5TWFuYWdlciwgRm9jdXNNb25pdG9yLCBGb2N1c09yaWdpbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsIENka1ZpcnR1YWxGb3JPZiwgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIHNraXAsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdFdpdGgsIGRlYm91bmNlVGltZSwgZGVsYXksIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTW9kaWZpZXIsIE1vZGlmaWVyQXJndW1lbnRzLCBPcHRpb25zIH0gZnJvbSAnQHBvcHBlcmpzL2NvcmUnO1xuXG5pbXBvcnQge1xuICBEcm9wZG93bkNvbXBvbmVudCxcbiAgRHJvcGRvd25EaXZpZGVyRGlyZWN0aXZlLFxuICBEcm9wZG93bk1lbnVEaXJlY3RpdmUsXG4gIERyb3Bkb3duVG9nZ2xlRGlyZWN0aXZlXG59IGZyb20gJy4uLy4uL2Ryb3Bkb3duJztcbmltcG9ydCB7IEVsZW1lbnRDb3ZlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnQtY292ZXInO1xuaW1wb3J0IHsgVGVtcGxhdGVJZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL3NoYXJlZCc7XG5pbXBvcnQgeyBJTXVsdGlTZWxlY3QsIElPcHRpb24sIE9wdGlvbnNNYXAsIFNlYXJjaEZuIH0gZnJvbSAnLi4vbXVsdGktc2VsZWN0LnR5cGUnO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3RTZXJ2aWNlIH0gZnJvbSAnLi4vbXVsdGktc2VsZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQgfSBmcm9tICcuLi9tdWx0aS1zZWxlY3Qtb3B0aW9uL211bHRpLXNlbGVjdC1vcHRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IE11bHRpU2VsZWN0TmF0aXZlU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vbXVsdGktc2VsZWN0LW5hdGl2ZS1zZWxlY3QvbXVsdGktc2VsZWN0LW5hdGl2ZS1zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IE11bHRpU2VsZWN0VGFnQ29tcG9uZW50IH0gZnJvbSAnLi4vbXVsdGktc2VsZWN0LXRhZy9tdWx0aS1zZWxlY3QtdGFnLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNdWx0aVNlbGVjdFNlYXJjaERpcmVjdGl2ZSB9IGZyb20gJy4vbXVsdGktc2VsZWN0LXNlYXJjaC5kaXJlY3RpdmUnO1xuXG5pbnRlcmZhY2UgSVBsdXJhbE1hcCB7XG4gIFtrOiBzdHJpbmddOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBvYnNlcnZlUmVmZXJlbmNlUmVzaXplTW9kaWZpZXI6IE1vZGlmaWVyPHN0cmluZywgT3B0aW9ucz4gPSB7XG4gIG5hbWU6ICdvYnNlcnZlUmVmZXJlbmNlUmVzaXplTW9kaWZpZXInLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbih7IHN0YXRlIH0pIHtcbiAgICAvKiBlbXB0eSAqL1xuICB9LFxuICBlZmZlY3Q6ICh7IHN0YXRlLCBpbnN0YW5jZSB9OiBNb2RpZmllckFyZ3VtZW50czxPcHRpb25zPikgPT4ge1xuICAgIGNvbnN0IFJPX1BST1AgPSAnX19wb3BwZXJqc1JPX18nO1xuICAgIGNvbnN0IHsgcmVmZXJlbmNlIH0gPSBzdGF0ZS5lbGVtZW50cztcblxuICAgIGxldCByZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXIgfCBudWxsID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG4gICAgICBpZiAoZW50cmllcy5maW5kKChlbnRyeSkgPT4gZW50cnkudGFyZ2V0ID09PSByZWZlcmVuY2UpKSB7XG4gICAgICAgIGluc3RhbmNlLnVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH0pIHNhdGlzZmllcyBSZXNpemVPYnNlcnZlcjtcblxuICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUoPEVsZW1lbnQ+cmVmZXJlbmNlKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICAgIHJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgICB9O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2FtZUFzUmVmZXJlbmNlV2lkdGhNb2RpZmllcjogTW9kaWZpZXI8c3RyaW5nLCBPcHRpb25zPiA9IHtcbiAgbmFtZTogJ3NhbWVBc1JlZmVyZW5jZVdpZHRoTW9kaWZpZXInLFxuICBlbmFibGVkOiB0cnVlLFxuICBmbjogKHsgc3RhdGUgfSkgPT4ge1xuICAgIHN0YXRlLnN0eWxlc1sncG9wcGVyJ10ubWluV2lkdGggPSBgJHtzdGF0ZS5yZWN0cy5yZWZlcmVuY2Uud2lkdGh9cHhgO1xuICB9LFxuICBwaGFzZTogJ2JlZm9yZVdyaXRlJyxcbiAgcmVxdWlyZXM6IFsnY29tcHV0ZVN0eWxlcyddXG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFBvcHBlck9wdGlvbnM6IFBhcnRpYWw8T3B0aW9ucz4gPSB7XG4gIHN0cmF0ZWd5OiAnZml4ZWQnLFxuICBtb2RpZmllcnM6IFtcbiAgICBvYnNlcnZlUmVmZXJlbmNlUmVzaXplTW9kaWZpZXIsXG4gICAgc2FtZUFzUmVmZXJlbmNlV2lkdGhNb2RpZmllcixcbiAgICB7XG4gICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgb2Zmc2V0OiAoKSA9PiBbMCwgNF1cbiAgICAgIH1cbiAgICB9XG4gIF1cbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2MtbXVsdGktc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL211bHRpLXNlbGVjdC5jb21wb25lbnQuc2NzcyddLFxuICBleHBvcnRBczogJ2NNdWx0aVNlbGVjdCcsXG4gIHByb3ZpZGVyczogW1xuICAgIEkxOG5QbHVyYWxQaXBlLFxuICAgIE11bHRpU2VsZWN0U2VydmljZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE11bHRpU2VsZWN0Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQXN5bmNQaXBlLFxuICAgIEkxOG5QbHVyYWxQaXBlLFxuICAgIE5nQ2xhc3MsXG4gICAgTmdTdHlsZSxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsXG4gICAgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LFxuICAgIENka1ZpcnR1YWxGb3JPZixcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNdWx0aVNlbGVjdFRhZ0NvbXBvbmVudCxcbiAgICBNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudCxcbiAgICBNdWx0aVNlbGVjdFNlYXJjaERpcmVjdGl2ZSxcbiAgICBEcm9wZG93bkNvbXBvbmVudCxcbiAgICBEcm9wZG93bkRpdmlkZXJEaXJlY3RpdmUsXG4gICAgRHJvcGRvd25NZW51RGlyZWN0aXZlLFxuICAgIERyb3Bkb3duVG9nZ2xlRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRDb3ZlckNvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE11bHRpU2VsZWN0Q29tcG9uZW50PFRWYWx1ZSBleHRlbmRzIHN0cmluZyB8IG51bWJlcj5cbiAgaW1wbGVtZW50cyBJTXVsdGlTZWxlY3Q8VFZhbHVlPiwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXRcbntcbiAgcmVhZG9ubHkgI2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIHJlYWRvbmx5ICNpMThuUGx1cmFsID0gaW5qZWN0KEkxOG5QbHVyYWxQaXBlKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXG4gICAgcHJpdmF0ZSBtdWx0aVNlbGVjdFNlcnZpY2U6IE11bHRpU2VsZWN0U2VydmljZSxcbiAgICBwcml2YXRlIGl0ZXJhYmxlRGlmZmVyczogSXRlcmFibGVEaWZmZXJzXG4gICkge1xuICAgIHRoaXMuZGlmZmVyID0gdGhpcy5pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLiN2YWx1ZSgpKS5jcmVhdGUoKTtcbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZXRTZWxlY3Rpb25Nb2RlbCh0aGlzLm11bHRpcGxlKTtcbiAgICB0aGlzLm9wdGlvbnNBcnJheSQgPSB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5nZXRPcHRpb25zQXJyYXkoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGlmZmVyITogSXRlcmFibGVEaWZmZXI8YW55PjtcblxuICByZWFkb25seSAjZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICByZWFkb25seSAjb3B0aW9uc1JlYWR5JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IG9wdGlvbnNBcnJheSQhOiBPYnNlcnZhYmxlPElPcHRpb25bXT47XG4gIHJlYWRvbmx5IHVzZXJPcHRpb25zQXJyYXkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJT3B0aW9uW10+KFtdKTtcbiAgcmVhZG9ubHkgI29wdGlvbnM6IE9wdGlvbnNNYXA8c3RyaW5nIHwgbnVtYmVyPiA9IG5ldyBNYXAoKTtcbiAgcmVhZG9ubHkgb3B0aW9uc1NlbGVjdGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SU9wdGlvbltdPihbXSk7XG4gIHJlYWRvbmx5IG9wdGlvbnNTZWxlY3RlZDogTWFwPGFueSwgSU9wdGlvbj4gPSBuZXcgTWFwKCk7XG4gIHJlYWRvbmx5IHZhbHVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VFZhbHVlW10+KFtdKTtcbiAgI29wdGlvbnNDb250ZW50OiBhbnlbXSA9IFtdO1xuXG4gIG9uQ2hhbmdlID0gKHZhbHVlOiBhbnkpID0+IHtcbiAgICAvKiBlbXB0eSAqL1xuICB9O1xuICBvblRvdWNoZWQgPSAoKSA9PiB7XG4gICAgLyogZW1wdHkgKi9cbiAgfTtcblxuICB3cml0ZVZhbHVlKHZhbHVlOiBUVmFsdWUgfCBUVmFsdWVbXSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbLi4udmFsdWVdIDogW3ZhbHVlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IEFycmF5KDApO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgdXNlcnMgdG8gY3JlYXRlIG9wdGlvbnMgaWYgdGhleSBhcmUgbm90IGluIHRoZSBsaXN0IG9mIG9wdGlvbnMuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQHNpbmNlIDQuNS4xMVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGFsbG93Q3JlYXRlT3B0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIHNlbGVjdGlvbiBjbGVhbmVyIGVsZW1lbnRcbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCB0cnVlIHwgJ2FjdGl2ZSdcbiAgICovXG4gIEBJbnB1dCgpIGNsZWFuZXI6IGJvb2xlYW4gfCAnYWN0aXZlJyA9IHRydWU7XG5cbiAgLyoqXG4gICAqIENsZWFyIGN1cnJlbnQgc2VhcmNoIG9uIHNlbGVjdGluZyBhbiBpdGVtXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQHNpbmNlIDQuNS4xMVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNsZWFyU2VhcmNoT25TZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogRGlzYWJsZXMgbXVsdGktc2VsZWN0IGNvbXBvbmVudFxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuX2Rpc2FibGVkICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuc2V0Rm9jdXNNb25pdG9yKCF2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEFkZCBsb2FkaW5nIHNwaW5uZXIgYW5kIHJlZHVjZWQgb3BhY2l0eS5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAc2luY2UgNC41LjJcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBzZXQgbG9hZGluZyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuaXNMb2FkaW5nLnNldCh2YWx1ZSk7XG4gIH1cblxuICBpc0xvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhhdCBtdWx0aXBsZSBvcHRpb25zIGNhbiBiZSBzZWxlY3RlZCBhdCBvbmNlXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBzZXQgbXVsdGlwbGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9tdWx0aXBsZSA9IHZhbHVlO1xuICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNldFNlbGVjdGlvbk1vZGVsKHRoaXMuX211bHRpcGxlKTtcbiAgfVxuXG4gIGdldCBtdWx0aXBsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbXVsdGlwbGU7XG4gIH1cblxuICBwcml2YXRlIF9tdWx0aXBsZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBIaWRkZW4gbmF0aXZlIHNlbGVjdCBmb3JtXG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgQElucHV0KCkgbmF0aXZlRm9ybUlkOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogSGlkZGVuIG5hdGl2ZSBzZWxlY3QgaWRcbiAgICogQHR5cGUgc3RyaW5nXG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICBASW5wdXQoKSBuYXRpdmVJZDogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIEhpZGRlbiBuYXRpdmUgc2VsZWN0IG5hbWVcbiAgICogQHR5cGUgc3RyaW5nXG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICBASW5wdXQoKSBuYXRpdmVOYW1lOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogTGlzdCBvZiBvcHRpb24gZWxlbWVudHNcbiAgICogQHR5cGUgSU9wdGlvbltdXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgb3B0aW9ucyhvcHRpb25zOiBJT3B0aW9uW10pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgdGhpcy4jb3B0aW9ucy5jbGVhcigpO1xuICAgICAgdGhpcy5tYWtlT3B0aW9ucyhvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuI29wdGlvbnMudmFsdWVzKCldO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgbWF4SGVpZ2h0IG9mIG9wdGlvbnMgbGlzdCBpbiBweFxuICAgKiBAdHlwZSBzdHJpbmcgfCBudW1iZXJcbiAgICogQGRlZmF1bHQgJ2F1dG8nXG4gICAqL1xuICBASW5wdXQoKSBvcHRpb25zTWF4SGVpZ2h0OiBzdHJpbmcgfCBudW1iZXIgPSAnYXV0byc7XG5cbiAgLyoqXG4gICAqIFNldHMgb3B0aW9uIHN0eWxlXG4gICAqIEB0eXBlICdjaGVja2JveCcgfCAndGV4dCdcbiAgICogQGRlZmF1bHQgJ2NoZWNrYm94J1xuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IG9wdGlvbnNTdHlsZSh2YWx1ZTogJ2NoZWNrYm94JyB8ICd0ZXh0Jykge1xuICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLm9wdGlvbnNTdHlsZSA9IHZhbHVlID8/ICdjaGVja2JveCc7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmaWVzIGEgc2hvcnQgaGludCB0aGF0IGlzIHZpc2libGUgaW4gdGhlIHNlYXJjaCBpbnB1dFxuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQGRlZmF1bHQgJ1NlbGVjdC4uLidcbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VsZWN0Li4uJztcblxuICAvKipcbiAgICogRW5hYmxlcyBzZWFyY2ggaW5wdXQgZWxlbWVudFxuICAgKiBAdHlwZSBib29sZWFuIHwgU2VhcmNoRm4gfCAnZXh0ZXJuYWwnXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIEBJbnB1dCgpIHNlYXJjaDogYm9vbGVhbiB8ICdleHRlcm5hbCcgfCBTZWFyY2hGbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGxhYmVsIGZvciBubyByZXN1bHRzIHdoZW4gZmlsdGVyaW5nXG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKiBAZGVmYXVsdCAnbm8gaXRlbXMnXG4gICAqL1xuICBASW5wdXQoKSBzZWFyY2hOb1Jlc3VsdHNMYWJlbDogc3RyaW5nID0gJ25vIGl0ZW1zJztcblxuICAvKipcbiAgICogU2V0cyBpbml0aWFsIHNlYXJjaCBzdHJpbmdcbiAgICogQHR5cGUgc3RyaW5nXG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgc2VhcmNoVmFsdWUodmFsdWUpIHtcbiAgICBpZiAodGhpcy5fc2VhcmNoVmFsdWUgIT09IHZhbHVlLnRyaW1TdGFydCgpKSB7XG4gICAgICB0aGlzLl9zZWFyY2hWYWx1ZSA9IHZhbHVlLnRyaW1TdGFydCgpO1xuICAgICAgdGhpcy52aXNpYmxlID0gdGhpcy5zZWFyY2hWYWx1ZS5sZW5ndGggPiAwICYmIHRoaXMuc3VidHJlZUZvY3VzZWQgPyB0cnVlIDogdGhpcy52aXNpYmxlO1xuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zKHRoaXMuc2VhcmNoVmFsdWUpO1xuICAgICAgdGhpcy5pbnB1dEVsZW1lbnRTaXplKCk7XG4gICAgICB0aGlzLnNlYXJjaFZhbHVlQ2hhbmdlLmVtaXQodGhpcy5fc2VhcmNoVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzZWFyY2hWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9zZWFyY2hWYWx1ZTogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHNlYXJjaFZhbHVlIHN0cmluZyBmb3IgZXh0ZXJuYWwgZmlsdGVyaW5nXG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNlYXJjaFZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIHNlbGVjdCBhbGwgYnV0dG9uXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0QWxsOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogU2V0cyB0aGUgc2VsZWN0IGFsbCBidXR0b24gbGFiZWxcbiAgICogQHR5cGUgc3RyaW5nXG4gICAqIEBkZWZhdWx0ICdTZWxlY3QgYWxsIG9wdGlvbnMnXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RBbGxMYWJlbDogc3RyaW5nID0gJ1NlbGVjdCBhbGwgb3B0aW9ucyc7XG5cbiAgLyoqXG4gICAqIFNlbGVjdGlvbiB0eXBlXG4gICAqIEB0eXBlICdjb3VudGVyJyB8ICd0YWdzJyB8ICd0ZXh0J1xuICAgKiBAZGVmYXVsdCAndGFncydcbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGlvblR5cGU6ICdjb3VudGVyJyB8ICd0YWdzJyB8ICd0ZXh0JyA9ICd0YWdzJztcblxuICAvKipcbiAgICogQ291bnRlciBzZWxlY3Rpb24gbGFiZWwgdmFsdWVcbiAgICogQHR5cGUgc3RyaW5nXG4gICAqIEBkZWZhdWx0ICdpdGVtKHMpIHNlbGVjdGVkJ1xuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0aW9uVHlwZUNvdW50ZXJUZXh0OiBzdHJpbmcgPSAnaXRlbShzKSBzZWxlY3RlZCc7XG5cbiAgLyoqXG4gICAqIENvdW50ZXIgc2VsZWN0aW9uIGxhYmVsIHBsdXJhbCBtYXAgZm9yIEkxOG5QbHVyYWxQaXBlXG4gICAqIEB0eXBlIElQbHVyYWxNYXBcbiAgICogQGRlZmF1bHQgeyAnPTEnOiAnaXRlbSBzZWxlY3RlZCcsICdvdGhlcic6ICdpdGVtcyBzZWxlY3RlZCcgfVxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0aW9uVHlwZUNvdW50ZXJUZXh0UGx1cmFsTWFwPzogSVBsdXJhbE1hcCA9IHsgJz0xJzogJ2l0ZW0gc2VsZWN0ZWQnLCBvdGhlcjogJ2l0ZW1zIHNlbGVjdGVkJyB9O1xuXG4gIC8qKlxuICAgKiBTaXplIHRoZSBjb21wb25lbnQgc21hbGwgb3IgbGFyZ2UuXG4gICAqIEB0eXBlICdzbScgfCAnbGcnIHwgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSBzaXplPzogJ3NtJyB8ICdsZyc7XG5cbiAgLyoqXG4gICAqIEluaXRpYWwgdmFsdWUgb2YgbXVsdGktc2VsZWN0XG4gICAqIEB0eXBlIChUVmFsdWUgfCBUVmFsdWVbXSlcbiAgICovXG4gIEBJbnB1dCgpIHNldCB2YWx1ZSh2YWx1ZTogVFZhbHVlIHwgVFZhbHVlW10pIHtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gWy4uLnZhbHVlXSA6IFt2YWx1ZV07XG4gICAgLy8gaWYgKHRoaXMuZGlmZmVyKSB7XG4gICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuZGlmZmVyPy5kaWZmKG5ld1ZhbHVlKTtcbiAgICBpZiAoY2hhbmdlcykge1xuICAgICAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5jbGVhcigpO1xuICAgICAgfVxuICAgICAgdGhpcy4jdmFsdWUuc2V0KFsuLi5uZXdWYWx1ZV0pO1xuICAgICAgdGhpcy52YWx1ZSQubmV4dChbLi4ubmV3VmFsdWVdKTtcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgICAvLyB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgfVxuICAgIC8vIH1cbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUVmFsdWUgfCBUVmFsdWVbXSB7XG4gICAgY29uc3QgdmFsdWU6IFRWYWx1ZVtdID0gdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWw/LnNlbGVjdGVkID8/IFsuLi50aGlzLiN2YWx1ZSgpXTtcbiAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSA/IFsuLi52YWx1ZV0gOiB2YWx1ZVswXTtcbiAgfVxuXG4gICN2YWx1ZSA9IHNpZ25hbDxUVmFsdWVbXT4oW10pO1xuXG4gIC8qKlxuICAgKiBFbWl0cyB2YWx1ZUNoYW5nZVxuICAgKiBAdHlwZSBUVmFsdWUgfCBUVmFsdWVbXVxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VFZhbHVlIHwgVFZhbHVlW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxUVmFsdWUgfCBUVmFsdWVbXT4oKTtcblxuICAvKipcbiAgICogVG9nZ2xlIHZpc3VhbCB2YWxpZGF0aW9uIGZlZWRiYWNrLlxuICAgKiBAdHlwZSBib29sZWFuIHwgdW5kZWZpbmVkXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgQElucHV0KCkgdmFsaWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgdmlydHVhbCBzY3JvbGxlciBmb3Igb3B0aW9ucyBsaXN0LlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgc2V0IHZpcnR1YWxTY3JvbGxlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3ZpcnR1YWxTY3JvbGxlciA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHZpcnR1YWxTY3JvbGxlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fdmlydHVhbFNjcm9sbGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBfdmlydHVhbFNjcm9sbGVyID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEFtb3VudCBvZiB2aXNpYmxlIG9wdGlvbnMsIGlmIHNldCAtIG92ZXJ3cml0ZXMgb3B0aW9uc01heEhlaWdodFxuICAgKiBAdHlwZSBudW1iZXJcbiAgICogQGRlZmF1bHQgOFxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSlcbiAgc2V0IHZpc2libGVJdGVtcyh2YWx1ZSkge1xuICAgIHRoaXMuX3Zpc2libGVJdGVtcyA9IHZhbHVlID4gMCA/IHZhbHVlIDogODtcbiAgICB0aGlzLm9wdGlvbnNNYXhIZWlnaHQgPSAodGhpcy5pdGVtU2l6ZSAqIHRoaXMuX3Zpc2libGVJdGVtcyArIDE2KS50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IHZpc2libGVJdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZUl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBfdmlzaWJsZUl0ZW1zID0gODtcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIG9wdGlvbiBpdGVtIGluIHRoZSBsaXN0IChpbiBwaXhlbHMpLlxuICAgKiBAdHlwZSBudW1iZXJcbiAgICogQGRlZmF1bHQgNDBcbiAgICovXG4gIEBJbnB1dCgpIGl0ZW1TaXplOiBudW1iZXIgPSA0MDtcblxuICAvKipcbiAgICogTWluIHdpZHRoIG9mIHRoZSBvcHRpb25zIGxpc3QgKGluIHBpeGVscykuXG4gICAqIEB0eXBlIG51bWJlclxuICAgKiBAZGVmYXVsdCAxOTZcbiAgICovXG4gIEBJbnB1dCgpIGl0ZW1NaW5XaWR0aDogbnVtYmVyID0gMTk2O1xuICByZWFkb25seSBtaW5XaWR0aCA9IHNpZ25hbCh0aGlzLml0ZW1NaW5XaWR0aCk7XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZHJvcGRvd24gc2VsZWN0IGNvbXBvbmVudC5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHNldCB2aXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl92aXNpYmxlKSB7XG4gICAgICB0aGlzLl92aXNpYmxlID0gdmFsdWU7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2UudG9nZ2xlVmlzaWJsZSh2YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgLy8gdGhpcy5zZWFyY2hWYWx1ZSA9ICcnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCB2aXNpYmxlKCkge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xuICB9XG5cbiAgcHJpdmF0ZSBfdmlzaWJsZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBFbWl0cyB2aXNpYmxlQ2hhbmdlXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSB2aXNpYmxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHBvcHBlciBPcHRpb25zIG9iamVjdFxuICAgKiBAdHlwZSBQYXJ0aWFsPE9wdGlvbnM+XG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgcG9wcGVyT3B0aW9ucyhvcHRpb25zOiBQYXJ0aWFsPE9wdGlvbnM+KSB7XG4gICAgY29uc3QgcHJldk9wdGlvbnMgPSB0aGlzLiNwb3BwZXJPcHRpb25zKCk7XG4gICAgY29uc3QgeyBtb2RpZmllcnM6IHByZXZNb2RpZmllcnMgPSBbXSB9ID0gcHJldk9wdGlvbnM7XG4gICAgY29uc3QgeyBtb2RpZmllcnM6IGN1cnJNb2RpZmllcnMgPSBbXSB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBjdXJyT3B0aW9uczogUGFydGlhbDxPcHRpb25zPiA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBtb2RpZmllcnM6IFtcbiAgICAgICAgLi4ucHJldk1vZGlmaWVycy5maWx0ZXIoXG4gICAgICAgICAgKHByZXZNb2RpZmllcikgPT4gIWN1cnJNb2RpZmllcnMuZmluZCgoY3Vyck1vZGlmaWVyKSA9PiBjdXJyTW9kaWZpZXIubmFtZSA9PT0gcHJldk1vZGlmaWVyLm5hbWUpXG4gICAgICAgICksXG4gICAgICAgIC4uLmN1cnJNb2RpZmllcnNcbiAgICAgIF1cbiAgICB9O1xuXG4gICAgdGhpcy4jcG9wcGVyT3B0aW9ucy5zZXQoeyAuLi5wcmV2T3B0aW9ucywgLi4uY3Vyck9wdGlvbnMgfSk7XG4gIH1cblxuICBnZXQgcG9wcGVyT3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy4jcG9wcGVyT3B0aW9ucygpO1xuICB9XG5cbiAgcmVhZG9ubHkgI3BvcHBlck9wdGlvbnMgPSBzaWduYWwoZGVmYXVsdFBvcHBlck9wdGlvbnMpO1xuXG4gIGlzRHJvcGRvd25WaXNpYmxlID0gZmFsc2U7XG5cbiAgZ2V0IHNlbGVjdGVkT3B0aW9ucygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMub3B0aW9uc1NlbGVjdGVkLnZhbHVlcygpXTtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZE9wdGlvbnNUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkT3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLmxhYmVsKS5qb2luKCcsICcpO1xuICB9XG5cbiAgZ2V0IGNvdW50ZXJUZXh0KCkge1xuICAgIHJldHVybiBgJHt0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGh9ICR7dGhpcy5zZWxlY3Rpb25UeXBlQ291bnRlclRleHR9YDtcbiAgfVxuXG4gIGdldCBjb3VudGVyVGV4dFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mICh0aGlzLnNlbGVjdGlvblR5cGVDb3VudGVyVGV4dFBsdXJhbE1hcCA/PyB0aGlzLnNlbGVjdGlvblR5cGVDb3VudGVyVGV4dCk7XG4gIH1cblxuICBnZXQgY291bnRlclBsYWNlaG9sZGVyVGV4dCgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAwIHx8IHRoaXMuc2VsZWN0aW9uVHlwZSAhPT0gJ2NvdW50ZXInKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuY291bnRlclRleHRUeXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRoaXMuY291bnRlclRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGh9ICR7dGhpcy4jaTE4blBsdXJhbC50cmFuc2Zvcm0odGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoLCB0aGlzLnNlbGVjdGlvblR5cGVDb3VudGVyVGV4dFBsdXJhbE1hcCA/PyB7IG90aGVyOiB0aGlzLnNlbGVjdGlvblR5cGVDb3VudGVyVGV4dCA/PyAnKycgfSl9YDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvY3VzTW9uaXRvclN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcblxuICBAQ29udGVudENoaWxkcmVuKE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIG11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQhOiBRdWVyeUxpc3Q8TXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQ+O1xuICBAVmlld0NoaWxkcmVuKE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50KSBtdWx0aVNlbGVjdE9wdGlvbnNWaWV3ITogUXVlcnlMaXN0PE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50PjtcbiAgQFZpZXdDaGlsZHJlbignc2Nyb2xsVmlld3BvcnQnKSBzY3JvbGxWaWV3cG9ydFZpZXchOiBRdWVyeUxpc3Q8Q2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0PjtcbiAgQFZpZXdDaGlsZCgnb3B0aW9ucycpIG9wdGlvbnNFbGVtZW50UmVmITogRWxlbWVudFJlZjtcblxuICBwcm90ZWN0ZWQgc2Nyb2xsVmlld3BvcnQhOiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG5cbiAgcHJvdGVjdGVkIHRlbXBsYXRlczogeyBbaWQ6IHN0cmluZ106IFRlbXBsYXRlUmVmPGFueT4gfSA9IHt9O1xuICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlSWREaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgY29udGVudFRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxUZW1wbGF0ZUlkRGlyZWN0aXZlPjtcblxuICBwcml2YXRlIGZvY3VzS2V5TWFuYWdlciE6IEZvY3VzS2V5TWFuYWdlcjxNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudD47XG5cbiAgQFZpZXdDaGlsZCgnaW5wdXRFbGVtZW50JykgaW5wdXRFbGVtZW50ITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZChEcm9wZG93bk1lbnVEaXJlY3RpdmUsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBkcm9wZG93bk1lbnUhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKERyb3Bkb3duQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZHJvcGRvd24hOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKERyb3Bkb3duVG9nZ2xlRGlyZWN0aXZlLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZHJvcGRvd25Ub2dnbGUhOiBFbGVtZW50UmVmO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgaG9zdENsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkXG4gICAgfTtcbiAgfVxuXG4gIGdldCBtdWx0aXNlbGVjdENsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdmb3JtLW11bHRpLXNlbGVjdCc6IHRydWUsXG4gICAgICBbYGZvcm0tbXVsdGktc2VsZWN0LSR7dGhpcy5zaXplfWBdOiAhIXRoaXMuc2l6ZSxcbiAgICAgIHNob3c6IHRoaXMudmlzaWJsZSxcbiAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkLFxuICAgICAgJ2lzLXZhbGlkJzogdGhpcy52YWxpZCA9PT0gdHJ1ZSxcbiAgICAgICdpcy1pbnZhbGlkJzogdGhpcy52YWxpZCA9PT0gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbXVsdGlzZWxlY3RhYmxlJylcbiAgcHJpdmF0ZSBnZXQgYXJpYU11bHRpU2VsZWN0YWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aXBsZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWV4cGFuZGVkJylcbiAgcHJpdmF0ZSBnZXQgYXJpYUV4cGFuZGVkKCkge1xuICAgIHJldHVybiB0aGlzLnZpc2libGU7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICBwcml2YXRlIGdldCB0YWJJbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGFiSW5kZXg7XG4gIH1cblxuICBwcml2YXRlIHNldCB0YWJJbmRleCh2YWx1ZSkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fdGFiSW5kZXggPSB0aGlzLmRpc2FibGVkIHx8IHRoaXMuc2VhcmNoID8gLTEgOiB2YWx1ZSA9PT0gbnVsbCA/IG51bGwgOiAwO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdGFiSW5kZXg6IG51bWJlciB8IG51bGwgPSAtMTtcblxuICBASG9zdExpc3RlbmVyKCdrZXl1cCcsIFsnJGV2ZW50J10pIG9uS2V5VXAoJGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICBjb25zdCB0YXJnZXRUYWdOYW1lID0gKCRldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWU7XG4gICAgaWYgKCRldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgIHRoaXMuc2V0Rm9jdXMoJ2tleWJvYXJkJywgJ29uS2V5VXAnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgWydFbnRlcicsICdTcGFjZScsICdBcnJvd0Rvd24nXS5pbmNsdWRlcygkZXZlbnQuY29kZSkgJiZcbiAgICAgIFt0aGlzLmlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudCwgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnRdLmluY2x1ZGVzKCRldmVudC50YXJnZXQpXG4gICAgKSB7XG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgICAgaWYgKCF0aGlzLnNlYXJjaCkge1xuICAgICAgICB0aGlzLnNldEZvY3VzKCdrZXlib2FyZCcsICdvbktleVVwJyk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFsnVGFiJ10uaW5jbHVkZXMoJGV2ZW50LmtleSkpIHtcbiAgICAgIC8vIHRvZG8gZm9jdXMgb24gaW5wdXQgd2hlbiB0YWIgaW5cbiAgICAgIC8vIGlmICgkZXZlbnQudGFyZ2V0ID09PSB0aGlzLmlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgLy8gICBjb25zb2xlLmxvZygkZXZlbnQua2V5LCAkZXZlbnQudGFyZ2V0KVxuICAgICAgLy8gfVxuXG4gICAgICBpZiAoJGV2ZW50LnRhcmdldCA9PT0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaCkge1xuICAgICAgICAgIHRoaXMuc2V0Rm9jdXMoJ2tleWJvYXJkJywgJ29uS2V5VXAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYlRhcmdldCA9IHRhcmdldFRhZ05hbWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudmlzaWJsZSAmJiB0aGlzLnN1YnRyZWVGb2N1c2VkKSB7XG4gICAgICAgIGlmICh0YXJnZXRUYWdOYW1lID09PSAnQy1NVUxUSS1TRUxFQ1QtT1BUSU9OJykge1xuICAgICAgICAgIGlmICh0aGlzLnRhYlRhcmdldCA9PT0gJ0MtTVVMVEktU0VMRUNULU9QVElPTicpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgJGV2ZW50LnNoaWZ0S2V5ICYmXG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0/LnZhbHVlID09PVxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLnZpc2libGUgJiYgIW9wdGlvbi5kaXNhYmxlZCkuc2xpY2UoMClbMF0udmFsdWVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzKCdrZXlib2FyZCcsICdvbktleVVwJyk7XG4gICAgICAgICAgICAgIHRoaXMudGFiVGFyZ2V0ID0gdGFyZ2V0VGFnTmFtZTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICEkZXZlbnQuc2hpZnRLZXkgJiZcbiAgICAgICAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbT8udmFsdWUgPT09XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24udmlzaWJsZSAmJiAhb3B0aW9uLmRpc2FibGVkKS5zbGljZSgtMSlbMF0udmFsdWVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzKCdrZXlib2FyZCcsICdvbktleVVwJyk7XG4gICAgICAgICAgICAgIHRoaXMudGFiVGFyZ2V0ID0gdGFyZ2V0VGFnTmFtZTtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVJdGVtKDApO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCF0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtIHx8IHRoaXMudGFiVGFyZ2V0ICE9PSB0YXJnZXRUYWdOYW1lKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVPcHRpb24pIHtcbiAgICAgICAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSh0aGlzLmFjdGl2ZU9wdGlvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNldEZpcnN0SXRlbUFjdGl2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkZXZlbnQuc2hpZnRLZXkgPyB0aGlzLmZvY3VzS2V5TWFuYWdlci5zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKSA6IHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNldE5leHRJdGVtQWN0aXZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudGFiVGFyZ2V0ID0gdGFyZ2V0VGFnTmFtZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKSBvbktleURvd24oJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0VGFnTmFtZSA9ICgkZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS50YWdOYW1lO1xuICAgIGlmICgkZXZlbnQua2V5ID09PSAnRW50ZXInICYmIHRhcmdldFRhZ05hbWUgPT09ICdJTlBVVCcpIHtcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAoJGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgIHRoaXMudGFiVGFyZ2V0ID0gdGFyZ2V0VGFnTmFtZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCRldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nICYmIHRhcmdldFRhZ05hbWUgIT09ICdDLU1VTFRJLVNFTEVDVC1PUFRJT04nKSB7XG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCRldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgIHRoaXMuc2V0Rm9jdXMoJ2tleWJvYXJkJywgJ29uS2V5RG93bicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBhdm9pZCBzZXR0aW5nIGZvY3VzIHRvIG9wdGlvbiB3aGlsZSBvbiBpbnB1dCBlbGVtZW50XG4gICAgaWYgKCRldmVudC50YXJnZXQgPT09IHRoaXMuaW5wdXRFbGVtZW50Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgkZXZlbnQua2V5ICE9PSAnVGFiJykge1xuICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXI/Lm9uS2V5ZG93bigkZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgb25DbGljaygkZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoW3RoaXMuZHJvcGRvd24ubmF0aXZlRWxlbWVudF0uaW5jbHVkZXMoJGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHRoaXMudmlzaWJsZSA9ICF0aGlzLnZpc2libGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgdGhpcy5zZXRGb2N1cygnbW91c2UnLCAnb25DbGljaycpO1xuICB9XG5cbiAgcHVibGljIHZpc2libGVPcHRpb25zID0gc2lnbmFsKGZhbHNlKTtcblxuICBnZXQgc3VidHJlZUZvY3VzZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YnRyZWVGb2N1c2VkO1xuICB9XG5cbiAgc2V0IHN1YnRyZWVGb2N1c2VkKGZvY3VzZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zdWJ0cmVlRm9jdXNlZCA9IHRoaXMuZGlzYWJsZWQgPyBmYWxzZSA6IGZvY3VzZWQ7XG4gICAgaWYgKCFmb2N1c2VkKSB7XG4gICAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgfVxuICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsZXIpIHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IGZvY3VzZWQgPT09IGZhbHNlID8gZmFsc2UgOiB0aGlzLnZpc2libGU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc3VidHJlZUZvY3VzZWQgPSB0aGlzLmZvY3VzT3JpZ2luKG51bGwpO1xuXG4gIHByaXZhdGUgbmF0aXZlU2VsZWN0UmVmITogYW55O1xuXG4gIGZvY3VzT3JpZ2luKG9yaWdpbjogRm9jdXNPcmlnaW4pOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gISFvcmlnaW47XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5jaGFuZ2VkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLm11bHRpcGxlKSxcbiAgICAgICAgZGVsYXkoMCksXG4gICAgICAgIHRhcCgoY2hhbmdlKSA9PiB7XG4gICAgICAgICAgaWYgKGNoYW5nZS5hZGRlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBjbG9zZSBkcm9wZG93biBmb3Igc2luZ2xlIHNlbGVjdCAoIW11bHRpcGxlKVxuICAgICAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgc2tpcCgxKSxcbiAgICAgICAgdGFwKChjaGFuZ2UpID0+IHtcbiAgICAgICAgICB0aGlzLnNldEZvY3VzKCdwcm9ncmFtJywgJ3NlbGVjdGlvbk1vZGVsLmNoYW5nZWQgKHNpbmdsZSknKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy4jb3B0aW9uc1JlYWR5JFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy52aXJ0dWFsU2Nyb2xsZXIpLFxuICAgICAgICBkZWxheSgwKSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldEZvY3VzS2V5TWFuYWdlcihbLi4udGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50LCAuLi50aGlzLm11bHRpU2VsZWN0T3B0aW9uc1ZpZXddKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuY2hhbmdlZFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoY2hhbmdlKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBhZGRlZCB9ID0geyAuLi5jaGFuZ2UgfTtcbiAgICAgICAgICBpZiAoYWRkZWQubGVuZ3RoID4gMCAmJiB0aGlzLmNsZWFyU2VhcmNoT25TZWxlY3QpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLmNoYW5nZWRcbiAgICAgIC5waXBlKFxuICAgICAgICAvLyBkZWxheSgwKSxcbiAgICAgICAgY29tYmluZUxhdGVzdFdpdGgodGhpcy4jb3B0aW9uc1JlYWR5JCksXG4gICAgICAgIHRhcCgoW2NoYW5nZSwgcmVhZHldKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyByZW1vdmVkIH0gPSB7IC4uLmNoYW5nZSB9O1xuICAgICAgICAgIHJlbW92ZWQuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uc1NlbGVjdGVkLmRlbGV0ZSh2YWx1ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuI29wdGlvbnMuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zU2VsZWN0ZWQuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5vcHRpb25zU2VsZWN0ZWQkLm5leHQoQXJyYXkuZnJvbSh0aGlzLm9wdGlvbnNTZWxlY3RlZC52YWx1ZXMoKSkpO1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBbLi4udGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRdO1xuXG4gICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnRTaXplKCk7XG4gICAgICAgICAgdGhpcy51cGRhdGVOYXRpdmVTZWxlY3QoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgLy8gc2V0IGluaXRpYWwgdmFsdWVzXG4gICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KC4uLnRoaXMuI3ZhbHVlKCkpO1xuXG4gICAgdGhpcy52YWx1ZSQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZikpLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIGlmICghdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuY2xlYXJBbGxPcHRpb25zKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFsdWUuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy52YWx1ZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uub3B0aW9uc0FycmF5JFxuICAgICAgLnBpcGUoXG4gICAgICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRoaXMudXNlck9wdGlvbnNBcnJheSQpLFxuICAgICAgICB0YXAoKFtvcHRpb25zLCB1c2VyT3B0aW9uc10pID0+IHtcbiAgICAgICAgICB0aGlzLnZpc2libGVPcHRpb25zLnNldChvcHRpb25zLnNvbWUoKGl0ZW0pID0+IGl0ZW0udmlzaWJsZSkgfHwgdXNlck9wdGlvbnMuc29tZSgoaXRlbSkgPT4gaXRlbS52aXNpYmxlKSk7XG4gICAgICAgICAgdGhpcy5hY3RpdmVPcHRpb24gPSBudWxsO1xuXG4gICAgICAgICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbGVyKSB7XG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/LmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICBvcHRpb24uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVmlld3BvcnQ/LnNldFJlbmRlcmVkUmFuZ2UoeyBzdGFydDogMCwgZW5kOiB0aGlzLnZpc2libGVJdGVtcyB9KTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVmlld3BvcnQ/LnNjcm9sbFRvSW5kZXgoMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudD8uZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gb3B0aW9ucy5maW5kKChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSBvcHRpb24udmFsdWUpO1xuICAgICAgICAgICAgICBvcHRpb24udmlzaWJsZSA9IGZvdW5kPy52aXNpYmxlID8/IGZhbHNlO1xuICAgICAgICAgICAgICBvcHRpb24uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlID0gdGhpcy5maXJzdEZvY3VzYWJsZUl0ZW07XG4gICAgICAgICAgICBpZiAoZmlyc3RGb2N1c2FibGUpIHtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVJdGVtKGZpcnN0Rm9jdXNhYmxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZU9wdGlvbikge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlSXRlbSgwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLnRhYkluZGV4ID0gMDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI2Rlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLiNkZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuc2V0Rm9jdXNNb25pdG9yKGZhbHNlKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1sndmFsdWUnXSkge1xuICAgICAgY29uc3QgdmFsdWVDaGFuZ2VzID0gY2hhbmdlc1sndmFsdWUnXTtcbiAgICAgIGlmICh2YWx1ZUNoYW5nZXMuY3VycmVudFZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmNsZWFyQWxsT3B0aW9ucygpO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnB1dEVsZW1lbnRTaXplKCk7XG4gICAgfVxuICB9XG5cbiAgbWFrZU9wdGlvbnMob3B0aW9uczogSU9wdGlvbltdKSB7XG4gICAgaWYgKHRoaXMuc2VhcmNoID09PSAnZXh0ZXJuYWwnICYmIHRoaXMuc2VhcmNoVmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLiNvcHRpb25zLmZvckVhY2goKG9wdGlvbiwga2V5KSA9PiB7XG4gICAgICAgIG9wdGlvbi52aXNpYmxlID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBvcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gb3B0aW9uLnZhbHVlO1xuICAgICAgY29uc3QgdmFsdWUgPSB7XG4gICAgICAgIHZhbHVlOiBvcHRpb24udmFsdWUgPz8gb3B0aW9uLmxhYmVsLFxuICAgICAgICBsYWJlbDogb3B0aW9uLmxhYmVsID8/IG9wdGlvbi52YWx1ZT8udG9TdHJpbmcoKSxcbiAgICAgICAgZGlzYWJsZWQ6IG9wdGlvbi5kaXNhYmxlZCA9PT0gdHJ1ZSxcbiAgICAgICAgdmlzaWJsZTpcbiAgICAgICAgICB0aGlzLnNlYXJjaCA9PT0gJ2V4dGVybmFsJ1xuICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICA6IG9wdGlvbi5jdXN0b20gJiYgb3B0aW9uLnNlbGVjdGVkXG4gICAgICAgICAgICAgID8gb3B0aW9uLnZpc2libGVcbiAgICAgICAgICAgICAgOiBvcHRpb24udmlzaWJsZSAhPT0gZmFsc2UsXG4gICAgICAgIHRleHQ6IG9wdGlvbi50ZXh0ID8/IG9wdGlvbi5sYWJlbCA/PyBvcHRpb24udmFsdWU/LnRvU3RyaW5nKCksXG4gICAgICAgIHNlbGVjdGVkOiBvcHRpb24uc2VsZWN0ZWQsXG4gICAgICAgIGN1c3RvbTogb3B0aW9uLmN1c3RvbVxuICAgICAgICAvLyBzZWxlY3RlZDogdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChvcHRpb24udmFsdWUpLFxuICAgICAgICAvLyBpZDogb3B0aW9uLmlkXG4gICAgICB9O1xuICAgICAgdGhpcy4jb3B0aW9ucy5zZXQoa2V5LCB7IC4uLnZhbHVlIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5maWx0ZXJPcHRpb25zKHRoaXMuc2VhcmNoVmFsdWUpO1xuXG4gICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50Py5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc1ZpZXc/Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgIHRoaXMuI29wdGlvbnNSZWFkeSQubmV4dCgpO1xuICB9XG5cbiAgdXNlck9wdGlvbnMgPSB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5nZXRVc2VyT3B0aW9ucygpO1xuXG4gIC8vICNlZmZlY3RVc2VyT3B0aW9ucyA9IGVmZmVjdCgoKSA9PiB7XG4gIC8vICAgaWYgKHRoaXMuYWxsb3dDcmVhdGVPcHRpb25zKSB7XG4gIC8vICAgICB0aGlzLnVzZXJPcHRpb25zQXJyYXkkLm5leHQoQXJyYXkuZnJvbSh0aGlzLnVzZXJPcHRpb25zKCkuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24udmlzaWJsZSkpKTtcbiAgLy8gICB9XG4gIC8vIH0pO1xuXG4gIGFkZFVzZXJPcHRpb24oKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dDcmVhdGVPcHRpb25zKSB7XG4gICAgICBpZiAodGhpcy51c2VyT3B0aW9ucygpLnNvbWUoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSB0aGlzLnNlYXJjaFZhbHVlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy4jb3B0aW9ucy5nZXQodGhpcy5zZWFyY2hWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgdXNlck9wdGlvbjogSU9wdGlvbiA9IHtcbiAgICAgICAgdmFsdWU6IHRoaXMuc2VhcmNoVmFsdWUsXG4gICAgICAgIGxhYmVsOiB0aGlzLnNlYXJjaFZhbHVlLFxuICAgICAgICB0ZXh0OiB0aGlzLnNlYXJjaFZhbHVlLFxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICBjdXN0b206IHRydWUsXG4gICAgICAgIHNlbGVjdGVkOiB0cnVlXG4gICAgICB9O1xuICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9IHRoaXMuY2xlYXJTZWFyY2hPblNlbGVjdCB8fCB0aGlzLmFsbG93Q3JlYXRlT3B0aW9ucyA/ICcnIDogdGhpcy5zZWFyY2hWYWx1ZTtcbiAgICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLmFkZFVzZXJPcHRpb24odXNlck9wdGlvbik7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QodXNlck9wdGlvbi52YWx1ZSk7XG4gICAgICB0aGlzLm9wdGlvbnNTZWxlY3RlZC5zZXQodXNlck9wdGlvbi52YWx1ZSwgdXNlck9wdGlvbik7XG4gICAgICB0aGlzLm1ha2VPcHRpb25zKFsuLi50aGlzLm9wdGlvbnMsIC4uLnRoaXMudXNlck9wdGlvbnMoKV0pO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUFsbFVzZXJPcHRpb25zKCkge1xuICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnJlbW92ZUFsbFVzZXJPcHRpb25zKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRWaXJ0dWFsU2Nyb2xsZXIoKTtcblxuICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudD8uY2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGRlbGF5KDApLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldmlvdXM6IFF1ZXJ5TGlzdDxNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudD4sIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBwcmV2ID0gcHJldmlvdXMudG9BcnJheSgpLm1hcCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUpO1xuICAgICAgICAgIGNvbnN0IGN1cnIgPSBjdXJyZW50LnRvQXJyYXkoKS5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlKTtcbiAgICAgICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3Vycik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLiNvcHRpb25zQ29udGVudCkgPT09IEpTT04uc3RyaW5naWZ5KGN1cnIpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKChjaGFuZ2VzKSA9PiB7XG4gICAgICAgICAgdGhpcy4jb3B0aW9uc0NvbnRlbnQgPSBjaGFuZ2VzLnRvQXJyYXkoKS5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgobmV4dCkgPT4ge1xuICAgICAgICB0aGlzLnZpc2libGVPcHRpb25zLnNldCh0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/LnNvbWUoKG9wdGlvbikgPT4gb3B0aW9uLnZpc2libGUpKTtcbiAgICAgICAgaWYgKHRoaXMudmlzaWJsZU9wdGlvbnMoKSkge1xuICAgICAgICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsZXIpIHtcbiAgICAgICAgICAgIHRoaXMuI29wdGlvbnMuY2xlYXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5tYWtlT3B0aW9ucyh0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQudG9BcnJheSgpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLnZpc2libGVPcHRpb25zLnNldCh0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/Lmxlbmd0aCA+IDAgfHwgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNWaWV3Py5sZW5ndGggPiAwKTtcbiAgICBpZiAodGhpcy52aXNpYmxlT3B0aW9ucygpKSB7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5tdWx0aXNlbGVjdFN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5zZXRGb2N1c01vbml0b3IoIXRoaXMuZGlzYWJsZWQpO1xuXG4gICAgdGhpcy5zZXRMaXN0S2V5TWFuYWdlcigpO1xuXG4gICAgdGhpcy5pbnB1dEVsZW1lbnRTaXplKCk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQubm90aWZ5T25DaGFuZ2VzKCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY3JlYXRlTmF0aXZlU2VsZWN0KCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5tdWx0aVNlbGVjdEZvY3VzJFxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgob3B0aW9uOiBNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVPcHRpb24gJiYgdGhpcy5hY3RpdmVPcHRpb24udmFsdWUgIT09IG9wdGlvbi52YWx1ZSkge1xuICAgICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0ob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHRhYlRhcmdldCE6IHN0cmluZztcblxuICBwcml2YXRlIG11bHRpc2VsZWN0U3Vic2NyaWJlKHN1YnNjcmliZTogYm9vbGVhbiA9IHRydWUpIHtcbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5tdWx0aVNlbGVjdFZpc2libGUkXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgodmlzaWJsZSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pc0Ryb3Bkb3duVmlzaWJsZSAhPT0gdmlzaWJsZSkge1xuICAgICAgICAgIHRoaXMuaXNEcm9wZG93blZpc2libGUgPSB2aXNpYmxlO1xuICAgICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHZpc2libGUpO1xuICAgICAgICAgIGlmICghdmlzaWJsZSkge1xuICAgICAgICAgICAgLyogZW1wdHkgKi9cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbGVyKSB7XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkcm9wZG93bk1pbldpZHRoID0gcGFyc2VJbnQodGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudC5zdHlsZS5taW5XaWR0aCwgMTApO1xuICAgICAgICAgICAgICAgIHRoaXMubWluV2lkdGguc2V0KHRoaXMuaXRlbU1pbldpZHRoID4gZHJvcGRvd25NaW5XaWR0aCA/IHRoaXMuaXRlbU1pbldpZHRoIDogZHJvcGRvd25NaW5XaWR0aCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxWaWV3cG9ydD8uc2V0UmVuZGVyZWRSYW5nZSh7IHN0YXJ0OiAwLCBlbmQ6IHRoaXMudmlzaWJsZUl0ZW1zIH0pO1xuICAgICAgICAgICAgICB0aGlzLnNjcm9sbFZpZXdwb3J0Py5zY3JvbGxUb0luZGV4KDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVJdGVtKDApO1xuICAgICAgfSk7XG4gIH1cblxuICBjbGVhckFsbE9wdGlvbnMoJGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZW5hYmxlZE9wdGlvbnMgPSBBcnJheS5mcm9tKHRoaXMub3B0aW9uc1NlbGVjdGVkLnZhbHVlcygpKVxuICAgICAgICAuZmlsdGVyKChvcHRpb24pID0+ICFvcHRpb24uZGlzYWJsZWQpXG4gICAgICAgIC5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlKTtcbiAgICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KC4uLmVuYWJsZWRPcHRpb25zKTtcbiAgICAgIHRoaXMucmVtb3ZlQWxsVXNlck9wdGlvbnMoKTtcblxuICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICcnO1xuICAgICAgaWYgKCRldmVudCkge1xuICAgICAgICB0aGlzLnNldEZvY3VzKCdwcm9ncmFtJywgJ2NsZWFyQWxsT3B0aW9ucycpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2VsZWN0QWxsT3B0aW9ucygpIHtcbiAgICBjb25zdCBlbmFibGVkT3B0aW9ucyA9IEFycmF5LmZyb20odGhpcy4jb3B0aW9ucy52YWx1ZXMoKSlcbiAgICAgIC5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLnZpc2libGUgJiYgIW9wdGlvbi5kaXNhYmxlZClcbiAgICAgIC5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlKTtcbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoLi4uZW5hYmxlZE9wdGlvbnMpO1xuICAgIHRoaXMuaW5wdXRFbGVtZW50U2l6ZSgpO1xuICB9XG5cbiAgaGFuZGxlVGFnUmVtb3ZlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdCh2YWx1ZSk7XG4gICAgdGhpcy5zZXRGb2N1cygncHJvZ3JhbScsICdoYW5kbGVUYWdSZW1vdmUnKTtcbiAgfVxuXG4gIHNldEZvY3VzKG9yaWdpbjogRm9jdXNPcmlnaW4gPSAncHJvZ3JhbScsIG1ldGhvZE5hbWU/OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50ID0gPEhUTUxFbGVtZW50Pih0aGlzLmlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudCA/PyB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgY29uc3QgcHJldmVudFNjcm9sbCA9IG9yaWdpbiA9PT0gJ3Byb2dyYW0nO1xuICAgIHRoaXMuZm9jdXNNb25pdG9yPy5mb2N1c1ZpYShlbGVtZW50LCBvcmlnaW4sIHsgcHJldmVudFNjcm9sbDogcHJldmVudFNjcm9sbCB9KTtcbiAgICAvLyBjb25zb2xlLmxvZygnc2V0Rm9jdXMnLCBvcmlnaW4sIG1ldGhvZE5hbWUsICdwcmV2ZW50U2Nyb2xsOicsIHByZXZlbnRTY3JvbGwsIGVsZW1lbnQudGFnTmFtZSwgdGhpcy52YWx1ZSk7XG4gIH1cblxuICBmaWx0ZXJPcHRpb25zKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZWFyY2hTdHJpbmcgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpID8/ICcnO1xuICAgIHRoaXMuI29wdGlvbnMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChzZWFyY2hTdHJpbmcgPT09ICcnKSB7XG4gICAgICAgIGl0ZW0udmlzaWJsZSA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5zZWFyY2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaXRlbS52aXNpYmxlID0gdGhpcy5zZWFyY2goaXRlbSwgc2VhcmNoU3RyaW5nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCh0aGlzLnNlYXJjaCA9PT0gJ2V4dGVybmFsJyAmJiAhaXRlbS5jdXN0b20pIHx8ICFzZWFyY2hTdHJpbmcpIHtcbiAgICAgICAgLy8gaXRlbS52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaXRlbS52aXNpYmxlID0gaXRlbS5sYWJlbD8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hTdHJpbmcpID8/IHRydWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS51cGRhdGVPcHRpb25zQXJyYXkoQXJyYXkuZnJvbSh0aGlzLiNvcHRpb25zLnZhbHVlcygpKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udmlzaWJsZSkpO1xuICAgIHRoaXMudXNlck9wdGlvbnNBcnJheSQubmV4dChBcnJheS5mcm9tKHRoaXMuI29wdGlvbnMudmFsdWVzKCkpLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5jdXN0b20pKTtcbiAgfVxuXG4gIGNyZWF0ZU5hdGl2ZVNlbGVjdCgpIHtcbiAgICBpZiAoIXRoaXMubmF0aXZlSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KE11bHRpU2VsZWN0TmF0aXZlU2VsZWN0Q29tcG9uZW50KTtcbiAgICB0aGlzLnVwZGF0ZU5hdGl2ZVNlbGVjdCgpO1xuICB9XG5cbiAgdXBkYXRlTmF0aXZlU2VsZWN0KCkge1xuICAgIGlmICghdGhpcy5uYXRpdmVTZWxlY3RSZWYgfHwgIXRoaXMubmF0aXZlSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IEFycmF5LmZyb20odGhpcy5vcHRpb25zU2VsZWN0ZWQpLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgeyBzZWxlY3RlZCwgdmFsdWUsIGxhYmVsIH0gPSBpdGVtWzFdO1xuICAgICAgcmV0dXJuIHsgc2VsZWN0ZWQsIHZhbHVlLCBsYWJlbCB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYuc2V0SW5wdXQoJ211bHRpcGxlJywgdGhpcy5tdWx0aXBsZSk7XG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYuc2V0SW5wdXQoJ2Zvcm0nLCB0aGlzLm5hdGl2ZUZvcm1JZCk7XG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYuc2V0SW5wdXQoJ2lkJywgdGhpcy5uYXRpdmVJZCk7XG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYuc2V0SW5wdXQoJ25hbWUnLCB0aGlzLm5hdGl2ZU5hbWUpO1xuICAgIHRoaXMubmF0aXZlU2VsZWN0UmVmLnNldElucHV0KCdvcHRpb25zJywgWy4uLm9wdGlvbnNdKTtcbiAgICB0aGlzLm5hdGl2ZVNlbGVjdFJlZi5zZXRJbnB1dCgnZGlzYWJsZWQnLCB0aGlzLmRpc2FibGVkKTtcbiAgICB0aGlzLm5hdGl2ZVNlbGVjdFJlZi5pbnN0YW5jZS5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGlucHV0RWxlbWVudFNpemUoKSB7XG4gICAgaWYgKHRoaXMuaW5wdXRFbGVtZW50KSB7XG4gICAgICBpZiAoIXRoaXMuaW5wdXRFbGVtZW50Py5uYXRpdmVFbGVtZW50Py5kaXNhYmxlZCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudCwgJ3NpemUnLCAodGhpcy5zZWFyY2hWYWx1ZS5sZW5ndGggKyAyKS50b1N0cmluZygpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuaW5wdXRFbGVtZW50Py5uYXRpdmVFbGVtZW50LCAnc2l6ZScpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudCwgJ3NpemUnLCAnMicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNlYXJjaEtleURvd24oJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKFsnRW50ZXInXS5pbmNsdWRlcygkZXZlbnQua2V5KSAmJiB0aGlzLnNlYXJjaFZhbHVlLmxlbmd0aCAmJiB0aGlzLmFsbG93Q3JlYXRlT3B0aW9ucykge1xuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAkZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmFkZFVzZXJPcHRpb24oKTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VhcmNoVmFsdWUubGVuZ3RoIHx8IHRoaXMub3B0aW9uc1NlbGVjdGVkLnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoWydCYWNrc3BhY2UnLCAnRGVsZXRlJ10uaW5jbHVkZXMoJGV2ZW50LmtleSkpIHtcbiAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNvbnN0IGxhc3QgPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gIW9wdGlvbi5kaXNhYmxlZCkucG9wKCk7XG4gICAgICBpZiAobGFzdCkge1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChsYXN0LnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzTW9uaXRvcihtb25pdG9yOiBib29sZWFuKSB7XG4gICAgaWYgKG1vbml0b3IgJiYgIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIC8vIHRvZG8gZm9jdXMgb24gaW5wdXQgd2hlbiB0YWIgaW5cbiAgICAgIC8vIHRoaXMuZm9jdXNNb25pdG9yPy5tb25pdG9yKHRoaXMuZWxlbWVudFJlZiwgZmFsc2UpXG4gICAgICAvLyAgIC5waXBlKFxuICAgICAgLy8gICAgIHRhcChvcmlnaW4gPT4ge1xuICAgICAgLy8gICAgICAgaWYgKG9yaWdpbiA9PT0gJ2tleWJvYXJkJyAmJiB0aGlzLnNlYXJjaCAmJiB0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIC8vICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgLy8gICAgICAgfVxuICAgICAgLy8gICAgIH0pLFxuICAgICAgLy8gICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgLy8gICApXG4gICAgICAvLyAgIC5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuZm9jdXNNb25pdG9yU3Vic2NyaXB0aW9uID0gdGhpcy5mb2N1c01vbml0b3JcbiAgICAgICAgPy5tb25pdG9yKHRoaXMuZWxlbWVudFJlZiwgdHJ1ZSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gdG8gYXZvaWQgZm9jdXMgbG9zdCBvbiBzcGVlZCBzY3JvbGxpbmcgd2l0aCB2aXJ0dWFsU2Nyb2xsXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgob3JpZ2luKSA9PiB7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3VidHJlZUZvY3VzZWQgPSB0aGlzLmZvY3VzT3JpZ2luKG9yaWdpbik7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNNb25pdG9yPy5zdG9wTW9uaXRvcmluZyh0aGlzLmVsZW1lbnRSZWYpO1xuICAgICAgdGhpcy5mb2N1c01vbml0b3JTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgYWN0aXZlT3B0aW9uOiAoRm9jdXNhYmxlT3B0aW9uICYgTXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQpIHwgbnVsbCA9IG51bGw7XG5cbiAgaGFuZGxlU2Nyb2xsZWRJbmRleENoYW5nZShzY3JvbGxlZEluZGV4OiBudW1iZXIsIHNjcm9sbFZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQpIHtcbiAgICBpZiAoIXRoaXMuc2Nyb2xsVmlld3BvcnQpIHtcbiAgICAgIHRoaXMuc2Nyb2xsVmlld3BvcnQgPSBzY3JvbGxWaWV3cG9ydDtcbiAgICB9XG5cbiAgICBjb25zdCBhdmFpbGFibGVPcHRpb25zID0gdGhpcy5vcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24udmlzaWJsZSk7XG4gICAgY29uc3QgZmlyc3RWaXNpYmxlT3B0aW9uID0gYXZhaWxhYmxlT3B0aW9uc1tzY3JvbGxlZEluZGV4XTtcbiAgICBjb25zdCBhY3RpdmVPcHRpb25JbmRleCA9IGF2YWlsYWJsZU9wdGlvbnMuZmluZEluZGV4KChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gdGhpcy5hY3RpdmVPcHRpb24/LnZhbHVlKTtcbiAgICBjb25zdCBvcHRpb25zQXJyYXkgPSB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQudG9BcnJheSgpO1xuXG4gICAgaWYgKHNjcm9sbGVkSW5kZXggPiBhY3RpdmVPcHRpb25JbmRleCkge1xuICAgICAgY29uc3QgZmlyc3RWaXNpYmxlSXRlbSA9IG9wdGlvbnNBcnJheS5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gZmlyc3RWaXNpYmxlT3B0aW9uPy52YWx1ZSk7XG4gICAgICBpZiAoZmlyc3RWaXNpYmxlSXRlbSAmJiBzY3JvbGxlZEluZGV4KSB7XG4gICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oZmlyc3RWaXNpYmxlSXRlbSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNjcm9sbGVkSW5kZXggKyB0aGlzLnZpc2libGVJdGVtcyAtIDIgPD0gYWN0aXZlT3B0aW9uSW5kZXgpIHtcbiAgICAgIGNvbnN0IGxhc3RWaXNpYmxlSXRlbSA9IG9wdGlvbnNBcnJheS5maW5kSW5kZXgoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSBmaXJzdFZpc2libGVPcHRpb24udmFsdWUpO1xuICAgICAgaWYgKGxhc3RWaXNpYmxlSXRlbSA+IC0xKSB7XG4gICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0obGFzdFZpc2libGVJdGVtICsgdGhpcy52aXNpYmxlSXRlbXMgLSAyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgb3B0aW9uOiBJT3B0aW9uKSB7XG4gICAgcmV0dXJuIG9wdGlvbi52YWx1ZTtcbiAgfVxuXG4gIGhhbmRsZVNlYXJjaFZhbHVlQ2hhbmdlKHNlYXJjaFZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWU7XG4gICAgaWYgKCFzZWFyY2hWYWx1ZSkge1xuICAgICAgdGhpcy5zY3JvbGxWaWV3cG9ydD8uc2Nyb2xsVG9JbmRleCgwKTtcbiAgICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudC5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICAgIGlmICh0aGlzLnN1YnRyZWVGb2N1c2VkKSB7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXMoJ3Byb2dyYW0nLCAnaGFuZGxlU2VhcmNoVmFsdWVDaGFuZ2UnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFZpcnR1YWxTY3JvbGxlcigpIHtcbiAgICBpZiAoIXRoaXMudmlydHVhbFNjcm9sbGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gbXVsdGlTZWxlY3RPcHRpb25UZW1wbGF0ZSBmb3IgdmlydHVhbFNjcm9sbGVyXG4gICAgdGhpcy5jb250ZW50VGVtcGxhdGVzLmZvckVhY2goKGNoaWxkOiBUZW1wbGF0ZUlkRGlyZWN0aXZlKSA9PiB7XG4gICAgICB0aGlzLnRlbXBsYXRlc1tjaGlsZC5pZF0gPSBjaGlsZC50ZW1wbGF0ZVJlZjtcbiAgICB9KTtcblxuICAgIC8vIGlmIG5vIHRlbXBsYXRlIGZvdW5kLCBnZXQgZGVmYXVsdE11bHRpU2VsZWN0T3B0aW9uVGVtcGxhdGUgZnJvbSB2aWV3XG4gICAgaWYgKCF0aGlzLnRlbXBsYXRlc1snbXVsdGlTZWxlY3RPcHRpb25UZW1wbGF0ZSddKSB7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQgPSB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc1ZpZXc7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLy8gbXVsdGlTZWxlY3RPcHRpb25zQ29udGVudCBnZXRzIG91dCBvZiBvcmRlciBvbiBjaGFuZ2VzXG4gICAgLy8gZG8gc29ydCgpIGFuZCByZXNldCgpXG4gICAgY29uc3QgaW5kZXhPZk9wdGlvbiA9IChvcHRpb246IE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50KSA9PiB7XG4gICAgICByZXR1cm4gWy4uLm9wdGlvbi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5jaGlsZHJlbl0/LmluZGV4T2Yob3B0aW9uLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvbnNDaGFuZ2UkOiBPYnNlcnZhYmxlPFF1ZXJ5TGlzdDxNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudD4+ID0gdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50LmNoYW5nZXM7XG5cbiAgICBjb25zdCBzb3J0ZWRPcHRpb25zJCA9IG9wdGlvbnNDaGFuZ2UkLnBpcGUoXG4gICAgICBtYXAoKG9wdGlvbnMpID0+IG9wdGlvbnMudG9BcnJheSgpKSxcbiAgICAgIGZpbHRlcigob3B0aW9ucykgPT4gb3B0aW9ucy5sZW5ndGggPiAwKSxcbiAgICAgIG1hcCgob3B0aW9ucykgPT4gb3B0aW9ucy5zb3J0KChhLCBiKSA9PiBpbmRleE9mT3B0aW9uKGEpIC0gaW5kZXhPZk9wdGlvbihiKSkpLFxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpXG4gICAgKTtcblxuICAgIHNvcnRlZE9wdGlvbnMkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKHNvcnRlZE9wdGlvbnMpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQucmVzZXQoc29ydGVkT3B0aW9ucyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNjcm9sbFZpZXdwb3J0Vmlldy5jaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgbWFwKChjaGFuZ2VzKSA9PiBjaGFuZ2VzLnRvQXJyYXkoKVswXSksXG4gICAgICAgIHRhcCgoc2Nyb2xsVmlld3BvcnQpID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuc2Nyb2xsVmlld3BvcnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVmlld3BvcnQgPSBzY3JvbGxWaWV3cG9ydDtcblxuICAgICAgICAgICAgY29uc3QgY2RrVmlydHVhbFNjcm9sbENvbnRlbnRXcmFwcGVyID0gdGhpcy5zY3JvbGxWaWV3cG9ydC5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudD8uZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICBpZiAoY2RrVmlydHVhbFNjcm9sbENvbnRlbnRXcmFwcGVyKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjZGtWaXJ0dWFsU2Nyb2xsQ29udGVudFdyYXBwZXIsIG51bGwpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgY29uc3QgcGFkZGluZyA9IHBhcnNlSW50KHN0eWxlPy5nZXRQcm9wZXJ0eVZhbHVlKCdwYWRkaW5nLWxlZnQnKSA/PyAnMTJweCcpICogMztcblxuICAgICAgICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvblJlY29yZHMpID0+IHtcbiAgICAgICAgICAgICAgICBtdXRhdGlvblJlY29yZHMuZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNoaWxkLmFkZGVkTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gJ0MtTVVMVEktU0VMRUNULU9QVElPTicpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWR0aCA9IChub2RlIGFzIEhUTUxFbGVtZW50KS5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGggPiB0aGlzLml0ZW1NaW5XaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtTWluV2lkdGggPSB3aWR0aCArIHBhZGRpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgb2JzZXJ2ZXI/Lm9ic2VydmUoY2RrVmlydHVhbFNjcm9sbENvbnRlbnRXcmFwcGVyLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcblxuICAgICAgICAgICAgICB0aGlzLiNkZXN0cm95JC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRMaXN0S2V5TWFuYWdlcigpIHtcbiAgICAvLyBydW4gb25jZSBvbiBtdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50IGZpcnN0IHNldFxuICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudC5jaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChjaGFuZ2VzKSA9PiB0aGlzLnZpcnR1YWxTY3JvbGxlciksXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRGb2N1c0tleU1hbmFnZXIodGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50KTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgc2V0Rm9jdXNLZXlNYW5hZ2VyKGZvY3VzYWJsZU9wdGlvbnM6IFF1ZXJ5TGlzdDxNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudD4gfCBNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudFtdKSB7XG4gICAgLy8gdGhpcy5mb2N1c0tleU1hbmFnZXI/LmRlc3Ryb3koKTtcblxuICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyID0gbmV3IEZvY3VzS2V5TWFuYWdlcihmb2N1c2FibGVPcHRpb25zKVxuICAgICAgLndpdGhIb21lQW5kRW5kKClcbiAgICAgIC53aXRoUGFnZVVwRG93bigpXG4gICAgICAuc2tpcFByZWRpY2F0ZSgob3B0aW9uKSA9PiBvcHRpb24uZGlzYWJsZWQgfHwgIW9wdGlvbi52aXNpYmxlKTtcblxuICAgIGlmICghdGhpcy5fdmlydHVhbFNjcm9sbGVyKSB7XG4gICAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci53aXRoVHlwZUFoZWFkKDMwMCk7XG4gICAgfVxuXG4gICAgdGhpcy5mb2N1c0tleU1hbmFnZXIudGFiT3V0XG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIC8qIGVtcHR5ICovXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci5jaGFuZ2UucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZikpLnN1YnNjcmliZSgoY2hhbmdlKSA9PiB7XG4gICAgICBpZiAoY2hhbmdlIDwgMCkge1xuICAgICAgICB0aGlzLmFjdGl2ZU9wdGlvbiA/IHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odGhpcy5hY3RpdmVPcHRpb24pIDogdGhpcy5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtKSB7XG4gICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uYWN0aXZlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWN0aXZlT3B0aW9uID0gdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbTtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IDxNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudD50aGlzLmFjdGl2ZU9wdGlvbjtcbiAgICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLmZvY3VzQ2hhbmdlKG9wdGlvbik7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc1ZpZXcubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgfSk7XG5cbiAgICAvLyBpZiAoIXRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0pIHtcbiAgICAvLyAgIHRoaXMuc2V0Rmlyc3RJdGVtQWN0aXZlKCk7XG4gICAgLy8gfVxuICB9XG5cbiAgZ2V0IGZpcnN0Rm9jdXNhYmxlSXRlbSgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50Py5maW5kKChvcHRpb24pID0+IG9wdGlvbi52aXNpYmxlICYmICFvcHRpb24uZGlzYWJsZWQpID8/XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc1ZpZXc/LmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZpc2libGUgJiYgIW9wdGlvbi5kaXNhYmxlZClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGaXJzdEl0ZW1BY3RpdmUoKSB7XG4gICAgY29uc3QgZmlyc3RGb2N1c2FibGVJdGVtID0gdGhpcy5maXJzdEZvY3VzYWJsZUl0ZW07XG4gICAgZmlyc3RGb2N1c2FibGVJdGVtXG4gICAgICA/IHRoaXMuZm9jdXNLZXlNYW5hZ2VyPy5zZXRBY3RpdmVJdGVtKGZpcnN0Rm9jdXNhYmxlSXRlbSlcbiAgICAgIDogdGhpcy5mb2N1c0tleU1hbmFnZXI/LnNldEZpcnN0SXRlbUFjdGl2ZSgpO1xuICAgIHRoaXMuYWN0aXZlT3B0aW9uID0gdGhpcy5mb2N1c0tleU1hbmFnZXI/LmFjdGl2ZUl0ZW0gPz8gbnVsbDtcbiAgfVxuXG4gIHVwZGF0ZUFjdGl2ZUl0ZW0oaW5kZXg6IG51bWJlcik6IHZvaWQ7XG5cbiAgdXBkYXRlQWN0aXZlSXRlbTxUSXRlbSBleHRlbmRzIE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50ICYgRm9jdXNhYmxlT3B0aW9uPihpdGVtOiBUSXRlbSk6IHZvaWQ7XG5cbiAgdXBkYXRlQWN0aXZlSXRlbShpdGVtOiBhbnkpIHtcbiAgICBjb25zdCBmaXJzdEZvY3VzYWJsZUl0ZW0gPSB0aGlzLmZpcnN0Rm9jdXNhYmxlSXRlbSA/PyBpdGVtO1xuICAgIGZpcnN0Rm9jdXNhYmxlSXRlbVxuICAgICAgPyB0aGlzLmZvY3VzS2V5TWFuYWdlcj8udXBkYXRlQWN0aXZlSXRlbShmaXJzdEZvY3VzYWJsZUl0ZW0pXG4gICAgICA6IHRoaXMuZm9jdXNLZXlNYW5hZ2VyPy51cGRhdGVBY3RpdmVJdGVtKDApO1xuICAgIGlmICh0aGlzLmZvY3VzS2V5TWFuYWdlcj8uYWN0aXZlSXRlbSkge1xuICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50Py5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgICAgb3B0aW9uLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc1ZpZXc/LmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgICBvcHRpb24uYWN0aXZlID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uYWN0aXZlID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVPcHRpb24gPSB0aGlzLmZvY3VzS2V5TWFuYWdlcj8uYWN0aXZlSXRlbSA/PyBudWxsO1xuICB9XG5cbiAgaGFuZGxlSW5kaWNhdG9yQ2xpY2soJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMudmlzaWJsZSA9ICF0aGlzLnZpc2libGU7XG4gIH1cbn1cbiIsIjxjLWRyb3Bkb3duICNkcm9wZG93bj1cImNEcm9wZG93blwiXG4gICAgICAgICAgICBbKHZpc2libGUpXT1cInZpc2libGVcIlxuICAgICAgICAgICAgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwibXVsdGlzZWxlY3RDbGFzc2VzXCJcbiAgICAgICAgICAgIFtwb3BwZXJPcHRpb25zXT1cInBvcHBlck9wdGlvbnNcIj5cbiAgPGRpdiAjZHJvcGRvd25Ub2dnbGU9XCJjRHJvcGRvd25Ub2dnbGVcIiBbY2FyZXRdPVwiZmFsc2VcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBjRHJvcGRvd25Ub2dnbGUgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgY2xhc3M9XCJmb3JtLW11bHRpLXNlbGVjdC1pbnB1dC1ncm91cFwiPlxuICAgIDxzcGFuXG4gICAgICBbbmdDbGFzc109XCJ7J2Zvcm0tbXVsdGktc2VsZWN0LXNlbGVjdGlvbic6IHRydWUsICdmb3JtLW11bHRpLXNlbGVjdC1zZWxlY3Rpb24tdGFncyc6IChzZWxlY3Rpb25UeXBlID09PSAndGFncycgJiYgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCl9XCI+XG4gICAgICBAaWYgKHNlbGVjdGlvblR5cGUgPT09ICd0YWdzJykge1xuICAgICAgICBAaWYgKG9wdGlvbnNTZWxlY3RlZCQgfCBhc3luYzsgYXMgb3B0aW9uVGFncykge1xuICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBvcHRpb25UYWdzOyB0cmFjayBvcHRpb24udmFsdWU7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICA8Yy1tdWx0aS1zZWxlY3QtdGFnXG4gICAgICAgICAgICAgIChyZW1vdmUpPVwiaGFuZGxlVGFnUmVtb3ZlKCRldmVudClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIm9wdGlvbi5sYWJlbCA/PyBvcHRpb24udmFsdWU/LnRvU3RyaW5nKClcIlxuICAgICAgICAgICAgICBbb3B0aW9uXT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tbXVsdGktc2VsZWN0LXRhZyB0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBAZWxzZSBpZiAoc2VsZWN0aW9uVHlwZSA9PT0gJ3RleHQnICYmICEhc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBAZm9yIChvcHRpb24gb2Ygc2VsZWN0ZWRPcHRpb25zOyB0cmFjayBvcHRpb24udmFsdWU7IGxldCBpID0gJGluZGV4LCBsYXN0ID0gJGxhc3QpIHtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tbXVsdGktc2VsZWN0LXRleHQgdGV4dC10cnVuY2F0ZVwiPnt7IG9wdGlvbi5sYWJlbCB9fXt7IGxhc3QgPyAnJm5ic3A7JyA6ICcsJm5ic3A7JyB9fTwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQGlmICghc2VhcmNoKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1wbGFjZWhvbGRlciB0ZXh0LXRydW5jYXRlXCI+XG4gICAgICAgICAge3sgb3B0aW9uc1NlbGVjdGVkLnNpemUgPT09IDAgPyBwbGFjZWhvbGRlciA6IGNvdW50ZXJQbGFjZWhvbGRlclRleHQgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgfVxuICAgICAgQGlmIChzZWFyY2gpIHtcbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgI2lucHV0RWxlbWVudFxuICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZVNlYXJjaEtleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImhhbmRsZVNlYXJjaFZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cInNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPT09IDAgPyBwbGFjZWhvbGRlciA6IGNvdW50ZXJQbGFjZWhvbGRlclRleHRcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCAhc2VhcmNoXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdmb3JtLW11bHRpLXNlbGVjdC1zZWFyY2gnOiB0cnVlLCBkaXNhYmxlZDogKGRpc2FibGVkIHx8ICFzZWFyY2gpLCAndGV4dC10cnVuY2F0ZSc6IHRydWUgfVwiXG4gICAgICAgICAgW25nTW9kZWxdPVwic2VhcmNoVmFsdWVcIlxuICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hWYWx1ZVwiXG4gICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICBjTXVsdGlTZWxlY3RTZWFyY2hcbiAgICAgICAgICBzaXplPVwiMlwiXG4gICAgICAgICAgdGFiaW5kZXg9XCJ7eyBkaXNhYmxlZCA/IC0xIDogMCB9fVwiXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICA+XG4gICAgICB9XG4gICAgPC9zcGFuPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLW11bHRpLXNlbGVjdC1idXR0b25zXCI+XG4gICAgICBAaWYgKCEhY2xlYW5lciAmJiBvcHRpb25zU2VsZWN0ZWQuc2l6ZSA+IDAgJiYgIWRpc2FibGVkKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXJBbGxPcHRpb25zKCRldmVudClcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCAoIWlzRHJvcGRvd25WaXNpYmxlICYmIGNsZWFuZXIgIT09ICdhY3RpdmUnKVwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyIGFsbFwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLW11bHRpLXNlbGVjdC1jbGVhbmVyXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgfVxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiaGFuZGxlSW5kaWNhdG9yQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3QtaW5kaWNhdG9yXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICBAaWYgKCFkaXNhYmxlZCkge1xuICAgIDxkaXYgI2Ryb3Bkb3duTWVudT1cImNEcm9wZG93bk1lbnVcIiBbdmlzaWJsZV09XCJkcm9wZG93bi52aXNpYmxlXCIgY0Ryb3Bkb3duTWVudVxuICAgICAgICAgY2xhc3M9XCJmb3JtLW11bHRpLXNlbGVjdC1kcm9wZG93blwiIHJvbGU9XCJtZW51XCI+XG4gICAgICBAaWYgKHZpc2libGVPcHRpb25zKCkgJiYgb3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIEBpZiAoc2VsZWN0QWxsICYmIG11bHRpcGxlICYmICF2aXJ0dWFsU2Nyb2xsZXIpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0QWxsT3B0aW9ucygpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3QtYWxsXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBzZWxlY3RBbGxMYWJlbCB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBAaWYgKCh2aXNpYmxlT3B0aW9ucygpICYmIG9wdGlvbnMubGVuZ3RoID4gMCkgfHwgaXNMb2FkaW5nKCkpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInZpcnR1YWxTY3JvbGxlciA/IG11bHRpc2VsZWN0VmlydHVhbFNjcm9sbGVyIDogbXVsdGlzZWxlY3RPcHRpb25zRGl2XCIgLz5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3Qtb3B0aW9ucy1lbXB0eVwiPnt7IHNlYXJjaE5vUmVzdWx0c0xhYmVsIH19PC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKGlzTG9hZGluZygpKSB7XG4gICAgICAgIDxjLWVsZW1lbnQtY292ZXIgW25nU3R5bGVdPVwieydib3JkZXItcmFkaXVzJzogJzZweCcsICd6LWluZGV4JzogMn1cIiAvPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L2MtZHJvcGRvd24+XG5cbjxuZy10ZW1wbGF0ZSAjbXVsdGlzZWxlY3RWaXJ0dWFsU2Nyb2xsZXI+XG4gIEBkZWZlciAob24gaW1tZWRpYXRlKSB7XG4gICAgQGlmICgob3B0aW9uc0FycmF5JCB8IGFzeW5jKTsgYXMgb3B0aW9uc0FycmF5KSB7XG4gICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgICAgICNzY3JvbGxWaWV3cG9ydFxuICAgICAgICAoc2Nyb2xsZWRJbmRleENoYW5nZSk9XCJoYW5kbGVTY3JvbGxlZEluZGV4Q2hhbmdlKCRldmVudCwgc2Nyb2xsVmlld3BvcnQpXCJcbiAgICAgICAgW2l0ZW1TaXplXT1cIml0ZW1TaXplXCJcbiAgICAgICAgW25nU3R5bGVdPVwib3B0aW9uc01heEhlaWdodCAhPT0gJ2F1dG8nID8geyAnaGVpZ2h0LnB4Jzogb3B0aW9uc01heEhlaWdodCwgJ21heEhlaWdodC5weCc6IG9wdGlvbnNNYXhIZWlnaHQsICdtaW5XaWR0aC5weCc6IG1pbldpZHRoKCksIG92ZXJmbG93WDogJ2hpZGRlbicgfSA6IHsgJ21pbldpZHRoLnB4JzogbWluV2lkdGgoKSwgb3ZlcmZsb3dYOiAnaGlkZGVuJ31cIlxuICAgICAgICBtYXhCdWZmZXJQeD1cInt7aXRlbVNpemUgKiB2aXNpYmxlSXRlbXN9fVwiXG4gICAgICAgIG1pbkJ1ZmZlclB4PVwie3tpdGVtU2l6ZSAqIHZpc2libGVJdGVtc319XCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLW11bHRpLXNlbGVjdC1vcHRpb25zXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAjY2RrVmlydHVhbEZvclxuICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zQXJyYXk7IHRyYWNrQnk6IHRyYWNrQnlGbjsgdGVtcGxhdGVDYWNoZVNpemU6IDA7IGV2ZW4gYXMgZXZlbjsgb2RkIGFzIG9kZDsgaW5kZXggYXMgaW5kZXg7IGNvdW50IGFzIGNvdW50OyBmaXJzdCBhcyBmaXJzdDsgbGFzdCBhcyBsYXN0O1wiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IG9wdGlvbiwgZXZlbiwgb2RkLCBpbmRleCwgY291bnQsIGZpcnN0LCBsYXN0fVwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVzWydtdWx0aVNlbGVjdE9wdGlvblRlbXBsYXRlJ10gfHwgZGVmYXVsdE11bHRpU2VsZWN0T3B0aW9uVGVtcGxhdGVcIlxuICAgICAgICAvPlxuICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgfVxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI211bHRpc2VsZWN0T3B0aW9uc0Rpdj5cbiAgPGRpdlxuICAgIFtuZ0NsYXNzXT1cInsnZm9ybS1tdWx0aS1zZWxlY3Qtb3B0aW9ucyc6IHZpc2libGVPcHRpb25zKCl9XCJcbiAgICBbbmdTdHlsZV09XCJvcHRpb25zTWF4SGVpZ2h0ICE9PSAnYXV0bycgPyB7ICdtYXhIZWlnaHQucHgnOiBvcHRpb25zTWF4SGVpZ2h0LCBvdmVyZmxvd1k6ICdzY3JvbGwnIH0gOiB7fVwiXG4gID5cbiAgICA8bmctY29udGVudCAvPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwidXNlck9wdGlvbnNUZW1wbGF0ZVwiIC8+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0TXVsdGlTZWxlY3RPcHRpb25UZW1wbGF0ZSBsZXQtb3B0aW9uPlxuICA8Yy1tdWx0aS1zZWxlY3Qtb3B0aW9uXG4gICAgW2Rpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiXG4gICAgW2xhYmVsXT1cIm9wdGlvbi5sYWJlbFwiXG4gICAgW3RleHRdPVwib3B0aW9uLnRleHRcIlxuICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgIFt2aXNpYmxlXT1cIm9wdGlvbi52aXNpYmxlXCJcbiAgPlxuICAgIHt7IG9wdGlvbi50ZXh0IH19XG4gIDwvYy1tdWx0aS1zZWxlY3Qtb3B0aW9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN1c2VyT3B0aW9uc1RlbXBsYXRlPlxuICBAZm9yIChvcHRpb24gb2YgdXNlck9wdGlvbnNBcnJheSQgfCBhc3luYzsgdHJhY2sgb3B0aW9uOyBsZXQgZXZlbiA9ICRldmVuLCBvZGQgPSAkb2RkLCBpbmRleCA9ICRpbmRleCwgY291bnQgPSAkY291bnQsIGZpcnN0ID0gJGZpcnN0LCBsYXN0ID0gJGxhc3QpIHtcbiAgICA8bmctY29udGFpbmVyXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZXNbJ211bHRpU2VsZWN0T3B0aW9uVGVtcGxhdGUnXSB8fCBkZWZhdWx0TXVsdGlTZWxlY3RPcHRpb25UZW1wbGF0ZVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDogb3B0aW9uLCBldmVuLCBvZGQsIGluZGV4LCBjb3VudCwgZmlyc3QsIGxhc3R9XCJcbiAgICAvPlxuICB9XG48L25nLXRlbXBsYXRlPlxuIl19
1296
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmV1aS1hbmd1bGFyL3NyYy9saWIvbXVsdGktc2VsZWN0L211bHRpLXNlbGVjdC9tdWx0aS1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9tdWx0aS1zZWxlY3QvbXVsdGktc2VsZWN0L211bHRpLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsZ0JBQWdCLEVBRWhCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxlQUFlLEVBSWYsTUFBTSxFQUdOLE1BQU0sRUFHTixTQUFTLEVBQ1QsWUFBWSxFQUViLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUcsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQW1CLGVBQWUsRUFBNkIsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRyxPQUFPLEVBQUUsZUFBZSxFQUFjLElBQUksRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3RILE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsd0JBQXdCLEVBQ3hCLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDeEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDbEcsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDdEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7O0FBTTdFLE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUE4QjtJQUN2RSxJQUFJLEVBQUUsZ0NBQWdDO0lBQ3RDLE9BQU8sRUFBRSxJQUFJO0lBQ2IsS0FBSyxFQUFFLE1BQU07SUFDYixFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7UUFDVixXQUFXO0lBQ2IsQ0FBQztJQUNELE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBOEIsRUFBRSxFQUFFO1FBQzFELE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDO1FBQ2pDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBRXJDLElBQUksY0FBYyxHQUEwQixJQUFJLGNBQWMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3pFLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUN4RCxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEIsQ0FBQztRQUNILENBQUMsQ0FBMEIsQ0FBQztRQUU1QixjQUFjLENBQUMsT0FBTyxDQUFVLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sR0FBRyxFQUFFO1lBQ1YsY0FBYyxFQUFFLFVBQVUsRUFBRSxDQUFDO1lBQzdCLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDeEIsQ0FBQyxDQUFDO0lBQ0osQ0FBQztDQUNGLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBOEI7SUFDckUsSUFBSSxFQUFFLDhCQUE4QjtJQUNwQyxPQUFPLEVBQUUsSUFBSTtJQUNiLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtRQUNoQixLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxLQUFLLEVBQUUsYUFBYTtJQUNwQixRQUFRLEVBQUUsQ0FBQyxlQUFlLENBQUM7Q0FDNUIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFxQjtJQUNwRCxRQUFRLEVBQUUsT0FBTztJQUNqQixTQUFTLEVBQUU7UUFDVCw4QkFBOEI7UUFDOUIsNEJBQTRCO1FBQzVCO1lBQ0UsSUFBSSxFQUFFLFFBQVE7WUFDZCxPQUFPLEVBQUU7Z0JBQ1AsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNyQjtTQUNGO0tBQ0Y7Q0FDRixDQUFDO0FBcUNGLE1BQU0sT0FBTyxvQkFBb0I7SUFHdEIsV0FBVyxDQUFzQjtJQUNqQyxTQUFTLENBQW9CO0lBQzdCLFdBQVcsQ0FBMEI7SUFFOUMsWUFDVSxVQUFzQixFQUN0QixRQUFtQixFQUNuQixNQUFjLEVBQ2QsaUJBQW9DLEVBQ3BDLGdCQUFrQyxFQUNsQyxZQUEwQixFQUMxQixrQkFBc0MsRUFDdEMsZUFBZ0M7UUFQaEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFaakMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakMsY0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQW1CckMsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDaEMsbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRXJDLHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELGFBQVEsR0FBZ0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNsRCxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBWSxFQUFFLENBQUMsQ0FBQztRQUN0RCxvQkFBZSxHQUFzQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQy9DLFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBVyxFQUFFLENBQUMsQ0FBQztRQUNwRCxvQkFBZSxHQUFVLEVBQUUsQ0FBQztRQUU1QixhQUFRLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUN4QixXQUFXO1FBQ2IsQ0FBQyxDQUFDO1FBQ0YsY0FBUyxHQUFHLEdBQUcsRUFBRTtZQUNmLFdBQVc7UUFDYixDQUFDLENBQUM7UUFzQkY7Ozs7O1dBS0c7UUFDcUMsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBRTVFOzs7O1dBSUc7UUFDTSxZQUFPLEdBQXVCLElBQUksQ0FBQztRQUU1Qzs7Ozs7V0FLRztRQUNxQyx3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFtQnJFLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFhMUIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQWlCbEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUUxQjs7OztXQUlHO1FBQ00saUJBQVksR0FBVyxFQUFFLENBQUM7UUFFbkM7Ozs7V0FJRztRQUNNLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFFL0I7Ozs7V0FJRztRQUNNLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFtQmpDOzs7O1dBSUc7UUFDTSxxQkFBZ0IsR0FBb0IsTUFBTSxDQUFDO1FBWXBEOzs7O1dBSUc7UUFDTSxnQkFBVyxHQUFXLFdBQVcsQ0FBQztRQUUzQzs7OztXQUlHO1FBQ00sV0FBTSxHQUFvQyxJQUFJLENBQUM7UUFFeEQ7Ozs7V0FJRztRQUNNLHlCQUFvQixHQUFXLFVBQVUsQ0FBQztRQXNCM0MsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFFbEM7OztXQUdHO1FBQ2dCLHNCQUFpQixHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXhGOzs7O1dBSUc7UUFDTSxjQUFTLEdBQVksSUFBSSxDQUFDO1FBRW5DOzs7O1dBSUc7UUFDTSxtQkFBYyxHQUFXLG9CQUFvQixDQUFDO1FBRXZEOzs7O1dBSUc7UUFDTSxrQkFBYSxHQUFnQyxNQUFNLENBQUM7UUFFN0Q7Ozs7V0FJRztRQUNNLDZCQUF3QixHQUFXLGtCQUFrQixDQUFDO1FBRS9EOzs7O1dBSUc7UUFDTSxzQ0FBaUMsR0FBZ0IsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1FBaUM3RyxXQUFNLEdBQUcsTUFBTSxDQUFXLEVBQUUsQ0FBQyxDQUFDO1FBRTlCOzs7V0FHRztRQUNnQixnQkFBVyxHQUFvQyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQXVCaEcscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBaUJ6QixrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUUxQjs7OztXQUlHO1FBQ00sYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUUvQjs7OztXQUlHO1FBQ00saUJBQVksR0FBVyxHQUFHLENBQUM7UUFDM0IsYUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUF3QnRDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFekI7OztXQUdHO1FBQ2dCLGtCQUFhLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7UUE0QjdFLG1CQUFjLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFdkQsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBdUNoQixjQUFTLEdBQXVDLEVBQUUsQ0FBQztRQWlEckQsY0FBUyxHQUFrQixDQUFDLENBQUMsQ0FBQztRQStIL0IsbUJBQWMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFnQjlCLG9CQUFlLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQWtNeEMsZ0JBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFLENBQUM7UUFpUmhFLGlCQUFZLEdBQTBELElBQUksQ0FBQztRQWpsQ3pFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUNqRSxDQUFDO0lBSVEsU0FBUyxDQUF1QjtJQUNoQyxjQUFjLENBQXVCO0lBR3JDLFFBQVEsQ0FBMEM7SUFJM0QsZUFBZSxDQUFhO0lBUzVCLFVBQVUsQ0FBQyxLQUF3QjtRQUNqQyxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM3QixDQUFDO0lBeUJEOzs7O09BSUc7SUFDSCxJQUNJLFFBQVEsQ0FBQyxLQUFjO1FBQ3pCLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUlEOzs7OztPQUtHO0lBQ0gsSUFDSSxPQUFPLENBQUMsS0FBYztRQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBSUQ7Ozs7T0FJRztJQUNILElBQ0ksUUFBUSxDQUFDLEtBQWM7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUF5QkQ7Ozs7T0FJRztJQUNILElBQ0ksT0FBTyxDQUFDLE9BQWtCO1FBQzVCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBU0Q7Ozs7T0FJRztJQUNILElBQ0ksWUFBWSxDQUFDLEtBQTBCO1FBQ3pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEdBQUcsS0FBSyxJQUFJLFVBQVUsQ0FBQztJQUM3RCxDQUFDO0lBdUJEOzs7O09BSUc7SUFDSCxJQUNJLFdBQVcsQ0FBQyxLQUFLO1FBQ25CLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDeEYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakQsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQW1ERDs7O09BR0c7SUFDSCxJQUFhLEtBQUssQ0FBQyxLQUF3QjtRQUN6QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0QscUJBQXFCO1FBQ3JCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakQsQ0FBQztZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFCLHFDQUFxQztRQUN2QyxDQUFDO1FBQ0QsSUFBSTtJQUNOLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxNQUFNLEtBQUssR0FBYSxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDL0YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsTUFBTSxDQUF3QjtJQWU5Qjs7OztPQUlHO0lBQ0gsSUFDSSxlQUFlLENBQUMsS0FBYztRQUNoQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUlEOzs7O09BSUc7SUFDSCxJQUNJLFlBQVksQ0FBQyxLQUFLO1FBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9FLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQW1CRDs7OztPQUlHO0lBQ0gsSUFDSSxPQUFPLENBQUMsS0FBYztRQUN4QixJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9DLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLHlCQUF5QjtZQUMzQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQVVEOzs7T0FHRztJQUNILElBQ0ksYUFBYSxDQUFDLE9BQXlCO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQyxNQUFNLEVBQUUsU0FBUyxFQUFFLGFBQWEsR0FBRyxFQUFFLEVBQUUsR0FBRyxXQUFXLENBQUM7UUFDdEQsTUFBTSxFQUFFLFNBQVMsRUFBRSxhQUFhLEdBQUcsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ2xELE1BQU0sV0FBVyxHQUFxQjtZQUNwQyxHQUFHLE9BQU87WUFDVixTQUFTLEVBQUU7Z0JBQ1QsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUNyQixDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FDakc7Z0JBQ0QsR0FBRyxhQUFhO2FBQ2pCO1NBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxXQUFXLEVBQUUsR0FBRyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRVEsY0FBYyxDQUFnQztJQUl2RCxJQUFJLGVBQWU7UUFDakIsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxJQUFJLG1CQUFtQjtRQUNyQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDM0UsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUNBQWlDLElBQUksSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELElBQUksc0JBQXNCO1FBQ3hCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDMUUsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3RDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxQixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsaUNBQWlDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNoTSxDQUFDO0lBQ0gsQ0FBQztJQXNCRCxJQUNJLFdBQVc7UUFDYixPQUFPO1lBQ0wsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3hCLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTztZQUNMLG1CQUFtQixFQUFFLElBQUk7WUFDekIsQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJO1lBQy9DLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTztZQUNsQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSTtZQUMvQixZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLO1NBQ25DLENBQUM7SUFDSixDQUFDO0lBRUQsSUFDWSxtQkFBbUI7UUFDN0IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUNZLFlBQVk7UUFDdEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUNZLFFBQVE7UUFDbEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFZLFFBQVEsQ0FBQyxLQUFLO1FBQ3hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUlrQyxPQUFPLENBQUMsTUFBcUI7UUFDOUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsTUFBTSxhQUFhLEdBQUksTUFBTSxDQUFDLE1BQXNCLENBQUMsT0FBTyxDQUFDO1FBQzdELElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNyQyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQ0UsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3JELENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUN6RixDQUFDO1lBQ0QsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakMsa0NBQWtDO1lBQ2xDLDREQUE0RDtZQUM1RCwyQ0FBMkM7WUFDM0MsSUFBSTtZQUVKLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNwRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3ZDLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUM7Z0JBQy9CLE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxhQUFhLEtBQUssdUJBQXVCLEVBQUUsQ0FBQztvQkFDOUMsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLHVCQUF1QixFQUFFLENBQUM7d0JBQy9DLElBQ0UsTUFBTSxDQUFDLFFBQVE7NEJBQ2YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsS0FBSztnQ0FDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFDdkYsQ0FBQzs0QkFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQzs0QkFDckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUM7NEJBQy9CLE9BQU87d0JBQ1QsQ0FBQzt3QkFFRCxJQUNFLENBQUMsTUFBTSxDQUFDLFFBQVE7NEJBQ2hCLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLEtBQUs7Z0NBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFDeEYsQ0FBQzs0QkFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQzs0QkFDckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUM7NEJBQy9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDekIsT0FBTzt3QkFDVCxDQUFDO29CQUNILENBQUM7b0JBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssYUFBYSxFQUFFLENBQUM7d0JBQ3pFLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDOzRCQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7d0JBQ3hELENBQUM7NkJBQU0sQ0FBQzs0QkFDTixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzt3QkFDNUIsQ0FBQztvQkFDSCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixFQUFFLENBQUM7b0JBQzVHLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQztnQkFDL0IsT0FBTztZQUNULENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVvQyxTQUFTLENBQUMsTUFBcUI7UUFDbEUsTUFBTSxhQUFhLEdBQUksTUFBTSxDQUFDLE1BQXNCLENBQUMsT0FBTyxDQUFDO1FBQzdELElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxPQUFPLElBQUksYUFBYSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3hELE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsR0FBRyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFDO1lBQy9CLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsR0FBRyxLQUFLLFdBQVcsSUFBSSxhQUFhLEtBQUssdUJBQXVCLEVBQUUsQ0FBQztZQUM1RSxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDdkMsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUNELHVEQUF1RDtRQUN2RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUN2RCxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQztJQUdELE9BQU8sQ0FBQyxNQUFrQjtRQUN4QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUMvQixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUlELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksY0FBYyxDQUFDLE9BQWdCO1FBQ2pDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDdkQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDeEIsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDMUQsQ0FBQztJQUNILENBQUM7SUFNRCxXQUFXLENBQUMsTUFBbUI7UUFDN0IsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxPQUFPO2FBQzNDLElBQUksQ0FDSCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQzVCLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNiLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLCtDQUErQztnQkFDL0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLENBQUM7UUFDSCxDQUFDLENBQUMsRUFDRixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDYixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxpQ0FBaUMsQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxFQUNGLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDckM7YUFDQSxTQUFTLEVBQUUsQ0FBQztRQUVmLElBQUksQ0FBQyxjQUFjO2FBQ2hCLElBQUksQ0FDSCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMseUJBQXlCLEVBQUUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO1FBQy9GLENBQUMsQ0FBQyxFQUNGLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDckM7YUFDQSxTQUFTLEVBQUUsQ0FBQztRQUVmLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsT0FBTzthQUMzQyxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDYixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO1lBQ2hDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLENBQUM7UUFDSCxDQUFDLENBQUMsRUFDRixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQ3JDO2FBQ0EsU0FBUyxFQUFFLENBQUM7UUFFZixJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLE9BQU87YUFDM0MsSUFBSTtRQUNILFlBQVk7UUFDWixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQ3RDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDdEIsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQztZQUNsQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzlELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLEtBQUssRUFBRSxDQUFDO29CQUNWLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDdkMsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFbEUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLEVBQ0Ysa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUNyQzthQUNBLFNBQVMsRUFBRSxDQUFDO1FBRWYscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFaEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDekUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN2QixPQUFPO1lBQ1QsQ0FBQztZQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNO2FBQ1IsSUFBSSxDQUNILFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsb0JBQW9CLEVBQUUsRUFDdEIsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDWixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLEVBQ0Ysa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUNyQzthQUNBLFNBQVMsRUFBRSxDQUFDO1FBRWYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWE7YUFDbEMsSUFBSSxDQUNILGlCQUFpQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUN6QyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFO1lBQzdCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUMxRyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUV6QixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLHlCQUF5QixFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUNqRCxNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDeEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RSxJQUFJLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLHlCQUF5QixFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUNqRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDbEUsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLEVBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQztvQkFDekMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztnQkFDL0MsSUFBSSxjQUFjLEVBQUUsQ0FBQztvQkFDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3ZCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxJQUFJLENBQUMseUJBQXlCLEVBQUUsZUFBZSxFQUFFLENBQUM7UUFDcEQsQ0FBQyxDQUFDLEVBQ0Ysa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUNyQzthQUNBLFNBQVMsRUFBRSxDQUFDO1FBRWYsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDckIsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RDLElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixDQUFDO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBa0I7UUFDNUIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUNwQyxNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDekIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUN6QixNQUFNLEtBQUssR0FBRztnQkFDWixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSztnQkFDbkMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUU7Z0JBQy9DLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxLQUFLLElBQUk7Z0JBQ2xDLE9BQU8sRUFDTCxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVU7b0JBQ3hCLENBQUMsQ0FBQyxJQUFJO29CQUNOLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRO3dCQUNoQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU87d0JBQ2hCLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxLQUFLLEtBQUs7Z0JBQ2hDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUU7Z0JBQzdELFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtnQkFDekIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO2dCQUNyQiw2RUFBNkU7Z0JBQzdFLGdCQUFnQjthQUNqQixDQUFDO1lBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFckMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLGVBQWUsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxlQUFlLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFJRCxzQ0FBc0M7SUFDdEMsbUNBQW1DO0lBQ25DLG9HQUFvRztJQUNwRyxNQUFNO0lBQ04sTUFBTTtJQUVOLGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzVCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDM0UsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxPQUFPO1lBQ1QsQ0FBQztZQUNELE1BQU0sVUFBVSxHQUFZO2dCQUMxQixLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUN0QixPQUFPLEVBQUUsSUFBSTtnQkFDYixNQUFNLEVBQUUsSUFBSTtnQkFDWixRQUFRLEVBQUUsSUFBSTthQUNmLENBQUM7WUFDRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUMvRixJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdELENBQUM7SUFDSCxDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFMUIsSUFBSSxDQUFDLHlCQUF5QixFQUFFLE9BQU87YUFDcEMsSUFBSSxDQUNILEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixvQkFBb0IsQ0FBQyxDQUFDLFFBQStDLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDaEYsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3RCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkQsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNkLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLENBQUMsQ0FBQyxFQUNGLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDckM7YUFDQSxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNsQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUMxRixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN4QixDQUFDO2dCQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDN0QsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvRyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNuRCxDQUFDO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVyQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUV6QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUV4QixJQUFJLENBQUMseUJBQXlCLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFakQsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQjthQUN0QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQzFDLFNBQVMsQ0FBQyxDQUFDLE1BQWtDLEVBQUUsRUFBRTtZQUNoRCxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNsRSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBSU8sb0JBQW9CLENBQUMsWUFBcUIsSUFBSTtRQUNwRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CO2FBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDckYsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDckIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2IsV0FBVztnQkFDYixDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7d0JBQ3pCLENBQUM7NEJBQ0MsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQzs0QkFDdEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzt3QkFDakcsQ0FBQzt3QkFDRCxJQUFJLENBQUMsY0FBYyxFQUFFLGdCQUFnQixDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7d0JBQzVFLElBQUksQ0FBQyxjQUFjLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN4QyxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ25ELENBQUM7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQW1CO1FBQ2pDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUM7aUJBQzdELE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO2lCQUNwQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBRTVCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUM5QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ3RELE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7YUFDdEQsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQVU7UUFDeEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsUUFBUSxDQUFDLFNBQXNCLFNBQVMsRUFBRSxVQUFtQjtRQUMzRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsYUFBYSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakcsTUFBTSxhQUFhLEdBQUcsTUFBTSxLQUFLLFNBQVMsQ0FBQztRQUMzQyxJQUFJLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDL0UsNkdBQTZHO0lBQy9HLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYTtRQUN6QixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3BDLElBQUksWUFBWSxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDcEIsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDL0MsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDbEUsdUJBQXVCO2dCQUN2QixPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDO1FBQzFFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDOUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUMvRixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzVDLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDNUQsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNqRSxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxDQUFDO2dCQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ2pILENBQUM7aUJBQU0sQ0FBQztnQkFDTiwyRUFBMkU7Z0JBQzNFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM1RSxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxNQUFxQjtRQUN2QyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUN6RixNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEMsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9ELE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakQsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUM3RSxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5RCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxlQUFlLENBQUMsT0FBZ0I7UUFDdEMsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUIsa0NBQWtDO1lBQ2xDLHFEQUFxRDtZQUNyRCxXQUFXO1lBQ1gsc0JBQXNCO1lBQ3RCLG1GQUFtRjtZQUNuRixtREFBbUQ7WUFDbkQsVUFBVTtZQUNWLFVBQVU7WUFDViwyQ0FBMkM7WUFDM0MsTUFBTTtZQUNOLGtCQUFrQjtZQUNsQixJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLFlBQVk7Z0JBQy9DLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO2lCQUMvQixJQUFJO1lBQ0gsNERBQTREO1lBQzVELFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUNyQztpQkFDQSxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO29CQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQy9DLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsQ0FBQztnQkFDekMsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUMvQyxDQUFDO0lBQ0gsQ0FBQztJQUlELHlCQUF5QixDQUFDLGFBQXFCLEVBQUUsY0FBd0M7UUFDdkYsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUN2QyxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDM0QsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFOUQsSUFBSSxhQUFhLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQztZQUN0QyxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbkcsSUFBSSxnQkFBZ0IsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN2RCxDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQy9ELE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEcsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDOUUsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFhLEVBQUUsTUFBZTtRQUN0QyxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELHVCQUF1QixDQUFDLFdBQW1CO1FBQ3pDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMseUJBQXlCLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDakQsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLHlCQUF5QixDQUFDLENBQUM7WUFDdEQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDMUIsT0FBTztRQUNULENBQUM7UUFFRCxnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQTBCLEVBQUUsRUFBRTtZQUMzRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUFDO1FBRUgsdUVBQXVFO1FBQ3ZFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLDJCQUEyQixDQUFDLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1lBQzdELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNuRCxDQUFDO1FBRUQseURBQXlEO1FBQ3pELHdCQUF3QjtRQUN4QixNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQWtDLEVBQUUsRUFBRTtZQUMzRCxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0csQ0FBQyxDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQXNELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUM7UUFFakgsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FDeEMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsRUFDbkMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUN2QyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDN0Usa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUNyQyxDQUFDO1FBRUYsY0FBYyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUNwRixPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTzthQUM1QixJQUFJLENBQ0gsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3RDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO2dCQUVyQyxNQUFNLDhCQUE4QixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDO2dCQUM1RyxJQUFJLDhCQUE4QixFQUFFLENBQUM7b0JBQ25DLE1BQU0sS0FBSyxHQUNULElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLDhCQUE4QixFQUFFLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQztvQkFDbEcsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBRWhGLE1BQU0sUUFBUSxHQUFHLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRTt3QkFDeEQsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFOzRCQUNoQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dDQUNoQyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssdUJBQXVCLEVBQUUsQ0FBQztvQ0FDOUMsTUFBTSxLQUFLLEdBQUksSUFBb0IsQ0FBQyxXQUFXLENBQUM7b0NBQ2hELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzt3Q0FDOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLEdBQUcsT0FBTyxDQUFDO29DQUN0QyxDQUFDO2dDQUNILENBQUM7NEJBQ0gsQ0FBQyxDQUFDLENBQUM7d0JBQ0wsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7b0JBRUgsUUFBUSxFQUFFLE9BQU8sQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUV2RSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7d0JBQzVCLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQztvQkFDekIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsRUFDRixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQ3JDO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixrREFBa0Q7UUFDbEQsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU87YUFDbkMsSUFBSSxDQUNILE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUN6QyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsRUFDRixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQ3JDO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELGtCQUFrQixDQUFDLGdCQUFzRjtRQUN2RyxtQ0FBbUM7UUFFbkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQzthQUN6RCxjQUFjLEVBQUU7YUFDaEIsY0FBYyxFQUFFO2FBQ2hCLGFBQWEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVqRSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUVELElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTTthQUN4QixJQUFJLENBQ0gsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUNwQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsV0FBVztRQUNiLENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxFQUFFLENBQUM7UUFFZixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDMUYsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUN4RyxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ2hELENBQUM7WUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDO1lBQ3BELE1BQU0sTUFBTSxHQUErQixJQUFJLENBQUMsWUFBWSxDQUFDO1lBQzdELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztRQUVILDBDQUEwQztRQUMxQywrQkFBK0I7UUFDL0IsSUFBSTtJQUNOLENBQUM7SUFFRCxJQUFJLGtCQUFrQjtRQUNwQixPQUFPLENBQ0wsSUFBSSxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDcEYsSUFBSSxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FDbEYsQ0FBQztJQUNKLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDbkQsa0JBQWtCO1lBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQztZQUN6RCxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxVQUFVLElBQUksSUFBSSxDQUFDO0lBQy9ELENBQUM7SUFNRCxnQkFBZ0IsQ0FBQyxJQUFTO1FBQ3hCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQztRQUMzRCxrQkFBa0I7WUFDaEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUM7WUFDNUQsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLFVBQVUsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDakQsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQzlDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNoRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLFVBQVUsSUFBSSxJQUFJLENBQUM7SUFDL0QsQ0FBQztJQUVELG9CQUFvQixDQUFDLE1BQWtCO1FBQ3JDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQzs4R0F2ekNVLG9CQUFvQjtrR0FBcEIsb0JBQW9CLDZIQW1FWCxnQkFBZ0IsMkZBZWhCLGdCQUFnQixzQ0FPaEIsZ0JBQWdCLG1DQW9CaEIsZ0JBQWdCLHNDQVloQixnQkFBZ0IsK2xCQTBNaEIsZ0JBQWdCLGtEQWdCaEIsZUFBZSx1RkFnQ2YsZ0JBQWdCLHFjQWpaekI7WUFDVCxjQUFjO1lBQ2Qsa0JBQWtCO1lBQ2xCO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUM7Z0JBQ25ELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRixvRUE2ZGdCLDBCQUEwQixzRUFTMUIsbUJBQW1CLDRSQUt6QixxQkFBcUIsMkJBQVUsVUFBVSx3REFDekMsaUJBQWlCLDJCQUFVLFVBQVUsOERBQ3JDLHVCQUF1QiwyQkFBVSxVQUFVLHlEQWR4QywwQkFBMEIsMkxDeGxCMUMsa29NQXFKQSw0bUNEekJJLFNBQVMsOENBRVQsT0FBTyxvRkFDUCxPQUFPLDJFQUNQLGdCQUFnQixtSkFJaEIsV0FBVywrbUJBQ1gsdUJBQXVCLHNJQUN2QiwwQkFBMEIseVBBQzFCLDBCQUEwQix5SkFDMUIsaUJBQWlCLDJOQUVqQixxQkFBcUIsMkhBQ3JCLHVCQUF1QiwwSkFDdkIscUJBQXFCLHNIQWhCckIsU0FBUztnQkFHVCxPQUFPO2dCQUNQLGdCQUFnQjs7Z0dBZVAsb0JBQW9CO3NCQW5DaEMsU0FBUzttQ0FDRSxnQkFBZ0IsWUFHaEIsY0FBYyxhQUNiOzRCQUNULGNBQWM7NEJBQ2Qsa0JBQWtCOzRCQUNsQjtnQ0FDRSxPQUFPLEVBQUUsaUJBQWlCO2dDQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQztnQ0FDbkQsS0FBSyxFQUFFLElBQUk7NkJBQ1o7eUJBQ0YsY0FDVyxJQUFJLFdBQ1A7NEJBQ1AsU0FBUzs0QkFDVCxjQUFjOzRCQUNkLE9BQU87NEJBQ1AsT0FBTzs0QkFDUCxnQkFBZ0I7NEJBQ2hCLHlCQUF5Qjs0QkFDekIsd0JBQXdCOzRCQUN4QixlQUFlOzRCQUNmLFdBQVc7NEJBQ1gsdUJBQXVCOzRCQUN2QiwwQkFBMEI7NEJBQzFCLDBCQUEwQjs0QkFDMUIsaUJBQWlCOzRCQUNqQix3QkFBd0I7NEJBQ3hCLHFCQUFxQjs0QkFDckIsdUJBQXVCOzRCQUN2QixxQkFBcUI7eUJBQ3RCO3lSQXFFdUMsa0JBQWtCOzBCQUF6RCxLQUFLOzJCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO29CQU83QixPQUFPOzBCQUFmLEtBQUs7b0JBUWtDLG1CQUFtQjswQkFBMUQsS0FBSzsyQkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtvQkFRbEMsUUFBUTswQkFEWCxLQUFLOzJCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO29CQXFCbEMsT0FBTzswQkFEVixLQUFLOzJCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO29CQWFsQyxRQUFROzBCQURYLEtBQUs7MkJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7b0JBaUI3QixZQUFZOzBCQUFwQixLQUFLO29CQU9HLFFBQVE7MEJBQWhCLEtBQUs7b0JBT0csVUFBVTswQkFBbEIsS0FBSztvQkFRRixPQUFPOzBCQURWLEtBQUs7b0JBaUJHLGdCQUFnQjswQkFBeEIsS0FBSztvQkFRRixZQUFZOzBCQURmLEtBQUs7b0JBVUcsV0FBVzswQkFBbkIsS0FBSztvQkFPRyxNQUFNOzBCQUFkLEtBQUs7b0JBT0csb0JBQW9COzBCQUE1QixLQUFLO29CQVFGLFdBQVc7MEJBRGQsS0FBSztvQkFxQmEsaUJBQWlCOzBCQUFuQyxNQUFNO29CQU9FLFNBQVM7MEJBQWpCLEtBQUs7b0JBT0csY0FBYzswQkFBdEIsS0FBSztvQkFPRyxhQUFhOzBCQUFyQixLQUFLO29CQU9HLHdCQUF3QjswQkFBaEMsS0FBSztvQkFPRyxpQ0FBaUM7MEJBQXpDLEtBQUs7b0JBTUcsSUFBSTswQkFBWixLQUFLO29CQU1PLEtBQUs7MEJBQWpCLEtBQUs7b0JBMkJhLFdBQVc7MEJBQTdCLE1BQU07b0JBT0UsS0FBSzswQkFBYixLQUFLO29CQVFGLGVBQWU7MEJBRGxCLEtBQUs7MkJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7b0JBaUJsQyxZQUFZOzBCQURmLEtBQUs7MkJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO29CQWlCNUIsUUFBUTswQkFBaEIsS0FBSztvQkFPRyxZQUFZOzBCQUFwQixLQUFLO29CQVNGLE9BQU87MEJBRFYsS0FBSzsyQkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtvQkF1Qm5CLGFBQWE7MEJBQS9CLE1BQU07b0JBT0gsYUFBYTswQkFEaEIsS0FBSztvQkF3RE4seUJBQXlCOzBCQUR4QixlQUFlOzJCQUFDLDBCQUEwQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtvQkFFeEIsc0JBQXNCOzBCQUEvRCxZQUFZOzJCQUFDLDBCQUEwQjtvQkFDUixrQkFBa0I7MEJBQWpELFlBQVk7MkJBQUMsZ0JBQWdCO29CQUNSLGlCQUFpQjswQkFBdEMsU0FBUzsyQkFBQyxTQUFTO29CQUt5QyxnQkFBZ0I7MEJBQTVFLGVBQWU7MkJBQUMsbUJBQW1CLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO29CQUloQyxZQUFZOzBCQUF0QyxTQUFTOzJCQUFDLGNBQWM7b0JBQytCLFlBQVk7MEJBQW5FLFNBQVM7MkJBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO29CQUNGLFFBQVE7MEJBQTNELFNBQVM7MkJBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO29CQUNRLGNBQWM7MEJBQXZFLFNBQVM7MkJBQUMsdUJBQXVCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO29CQUdwRCxXQUFXOzBCQURkLFdBQVc7MkJBQUMsT0FBTztvQkFtQlIsbUJBQW1COzBCQUQ5QixXQUFXOzJCQUFDLDJCQUEyQjtvQkFNNUIsWUFBWTswQkFEdkIsV0FBVzsyQkFBQyxvQkFBb0I7b0JBTXJCLFFBQVE7MEJBRG5CLFdBQVc7MkJBQUMsZUFBZTtvQkFhTyxPQUFPOzBCQUF6QyxZQUFZOzJCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztvQkFnRkksU0FBUzswQkFBN0MsWUFBWTsyQkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7b0JBZ0NuQyxPQUFPOzBCQUROLFlBQVk7MkJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBEZXN0cm95UmVmLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIEl0ZXJhYmxlRGlmZmVyLFxuICBJdGVyYWJsZURpZmZlcnMsXG4gIE5nWm9uZSxcbiAgbnVtYmVyQXR0cmlidXRlLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBzaWduYWwsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgRE9DVU1FTlQsIEkxOG5QbHVyYWxQaXBlLCBOZ0NsYXNzLCBOZ1N0eWxlLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb2N1c2FibGVPcHRpb24sIEZvY3VzS2V5TWFuYWdlciwgRm9jdXNNb25pdG9yLCBGb2N1c09yaWdpbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsIENka1ZpcnR1YWxGb3JPZiwgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIHNraXAsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdFdpdGgsIGRlYm91bmNlVGltZSwgZGVsYXksIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTW9kaWZpZXIsIE1vZGlmaWVyQXJndW1lbnRzLCBPcHRpb25zIH0gZnJvbSAnQHBvcHBlcmpzL2NvcmUnO1xuXG5pbXBvcnQge1xuICBEcm9wZG93bkNvbXBvbmVudCxcbiAgRHJvcGRvd25EaXZpZGVyRGlyZWN0aXZlLFxuICBEcm9wZG93bk1lbnVEaXJlY3RpdmUsXG4gIERyb3Bkb3duVG9nZ2xlRGlyZWN0aXZlXG59IGZyb20gJy4uLy4uL2Ryb3Bkb3duJztcbmltcG9ydCB7IEVsZW1lbnRDb3ZlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnQtY292ZXInO1xuaW1wb3J0IHsgVGVtcGxhdGVJZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL3NoYXJlZCc7XG5pbXBvcnQgeyBJTXVsdGlTZWxlY3QsIElPcHRpb24sIE9wdGlvbnNNYXAsIFNlYXJjaEZuIH0gZnJvbSAnLi4vbXVsdGktc2VsZWN0LnR5cGUnO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3RTZXJ2aWNlIH0gZnJvbSAnLi4vbXVsdGktc2VsZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQgfSBmcm9tICcuLi9tdWx0aS1zZWxlY3Qtb3B0aW9uL211bHRpLXNlbGVjdC1vcHRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IE11bHRpU2VsZWN0TmF0aXZlU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vbXVsdGktc2VsZWN0LW5hdGl2ZS1zZWxlY3QvbXVsdGktc2VsZWN0LW5hdGl2ZS1zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IE11bHRpU2VsZWN0VGFnQ29tcG9uZW50IH0gZnJvbSAnLi4vbXVsdGktc2VsZWN0LXRhZy9tdWx0aS1zZWxlY3QtdGFnLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNdWx0aVNlbGVjdFNlYXJjaERpcmVjdGl2ZSB9IGZyb20gJy4vbXVsdGktc2VsZWN0LXNlYXJjaC5kaXJlY3RpdmUnO1xuXG5pbnRlcmZhY2UgSVBsdXJhbE1hcCB7XG4gIFtrOiBzdHJpbmddOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBvYnNlcnZlUmVmZXJlbmNlUmVzaXplTW9kaWZpZXI6IE1vZGlmaWVyPHN0cmluZywgT3B0aW9ucz4gPSB7XG4gIG5hbWU6ICdvYnNlcnZlUmVmZXJlbmNlUmVzaXplTW9kaWZpZXInLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbih7IHN0YXRlIH0pIHtcbiAgICAvKiBlbXB0eSAqL1xuICB9LFxuICBlZmZlY3Q6ICh7IHN0YXRlLCBpbnN0YW5jZSB9OiBNb2RpZmllckFyZ3VtZW50czxPcHRpb25zPikgPT4ge1xuICAgIGNvbnN0IFJPX1BST1AgPSAnX19wb3BwZXJqc1JPX18nO1xuICAgIGNvbnN0IHsgcmVmZXJlbmNlIH0gPSBzdGF0ZS5lbGVtZW50cztcblxuICAgIGxldCByZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXIgfCBudWxsID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG4gICAgICBpZiAoZW50cmllcy5maW5kKChlbnRyeSkgPT4gZW50cnkudGFyZ2V0ID09PSByZWZlcmVuY2UpKSB7XG4gICAgICAgIGluc3RhbmNlLnVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH0pIHNhdGlzZmllcyBSZXNpemVPYnNlcnZlcjtcblxuICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUoPEVsZW1lbnQ+cmVmZXJlbmNlKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICAgIHJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgICB9O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2FtZUFzUmVmZXJlbmNlV2lkdGhNb2RpZmllcjogTW9kaWZpZXI8c3RyaW5nLCBPcHRpb25zPiA9IHtcbiAgbmFtZTogJ3NhbWVBc1JlZmVyZW5jZVdpZHRoTW9kaWZpZXInLFxuICBlbmFibGVkOiB0cnVlLFxuICBmbjogKHsgc3RhdGUgfSkgPT4ge1xuICAgIHN0YXRlLnN0eWxlc1sncG9wcGVyJ10ubWluV2lkdGggPSBgJHtzdGF0ZS5yZWN0cy5yZWZlcmVuY2Uud2lkdGh9cHhgO1xuICB9LFxuICBwaGFzZTogJ2JlZm9yZVdyaXRlJyxcbiAgcmVxdWlyZXM6IFsnY29tcHV0ZVN0eWxlcyddXG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFBvcHBlck9wdGlvbnM6IFBhcnRpYWw8T3B0aW9ucz4gPSB7XG4gIHN0cmF0ZWd5OiAnZml4ZWQnLFxuICBtb2RpZmllcnM6IFtcbiAgICBvYnNlcnZlUmVmZXJlbmNlUmVzaXplTW9kaWZpZXIsXG4gICAgc2FtZUFzUmVmZXJlbmNlV2lkdGhNb2RpZmllcixcbiAgICB7XG4gICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgb2Zmc2V0OiAoKSA9PiBbMCwgNF1cbiAgICAgIH1cbiAgICB9XG4gIF1cbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2MtbXVsdGktc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL211bHRpLXNlbGVjdC5jb21wb25lbnQuc2NzcyddLFxuICBleHBvcnRBczogJ2NNdWx0aVNlbGVjdCcsXG4gIHByb3ZpZGVyczogW1xuICAgIEkxOG5QbHVyYWxQaXBlLFxuICAgIE11bHRpU2VsZWN0U2VydmljZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE11bHRpU2VsZWN0Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQXN5bmNQaXBlLFxuICAgIEkxOG5QbHVyYWxQaXBlLFxuICAgIE5nQ2xhc3MsXG4gICAgTmdTdHlsZSxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsXG4gICAgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LFxuICAgIENka1ZpcnR1YWxGb3JPZixcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNdWx0aVNlbGVjdFRhZ0NvbXBvbmVudCxcbiAgICBNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudCxcbiAgICBNdWx0aVNlbGVjdFNlYXJjaERpcmVjdGl2ZSxcbiAgICBEcm9wZG93bkNvbXBvbmVudCxcbiAgICBEcm9wZG93bkRpdmlkZXJEaXJlY3RpdmUsXG4gICAgRHJvcGRvd25NZW51RGlyZWN0aXZlLFxuICAgIERyb3Bkb3duVG9nZ2xlRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRDb3ZlckNvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE11bHRpU2VsZWN0Q29tcG9uZW50PFRWYWx1ZSBleHRlbmRzIHN0cmluZyB8IG51bWJlcj5cbiAgaW1wbGVtZW50cyBJTXVsdGlTZWxlY3Q8VFZhbHVlPiwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXRcbntcbiAgcmVhZG9ubHkgI2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIHJlYWRvbmx5ICNkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG4gIHJlYWRvbmx5ICNpMThuUGx1cmFsID0gaW5qZWN0KEkxOG5QbHVyYWxQaXBlKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXG4gICAgcHJpdmF0ZSBtdWx0aVNlbGVjdFNlcnZpY2U6IE11bHRpU2VsZWN0U2VydmljZSxcbiAgICBwcml2YXRlIGl0ZXJhYmxlRGlmZmVyczogSXRlcmFibGVEaWZmZXJzXG4gICkge1xuICAgIHRoaXMuZGlmZmVyID0gdGhpcy5pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLiN2YWx1ZSgpKS5jcmVhdGUoKTtcbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZXRTZWxlY3Rpb25Nb2RlbCh0aGlzLm11bHRpcGxlKTtcbiAgICB0aGlzLm9wdGlvbnNBcnJheSQgPSB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5nZXRPcHRpb25zQXJyYXkoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGlmZmVyITogSXRlcmFibGVEaWZmZXI8YW55PjtcblxuICByZWFkb25seSAjZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICByZWFkb25seSAjb3B0aW9uc1JlYWR5JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IG9wdGlvbnNBcnJheSQhOiBPYnNlcnZhYmxlPElPcHRpb25bXT47XG4gIHJlYWRvbmx5IHVzZXJPcHRpb25zQXJyYXkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJT3B0aW9uW10+KFtdKTtcbiAgcmVhZG9ubHkgI29wdGlvbnM6IE9wdGlvbnNNYXA8c3RyaW5nIHwgbnVtYmVyPiA9IG5ldyBNYXAoKTtcbiAgcmVhZG9ubHkgb3B0aW9uc1NlbGVjdGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SU9wdGlvbltdPihbXSk7XG4gIHJlYWRvbmx5IG9wdGlvbnNTZWxlY3RlZDogTWFwPGFueSwgSU9wdGlvbj4gPSBuZXcgTWFwKCk7XG4gIHJlYWRvbmx5IHZhbHVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VFZhbHVlW10+KFtdKTtcbiAgI29wdGlvbnNDb250ZW50OiBhbnlbXSA9IFtdO1xuXG4gIG9uQ2hhbmdlID0gKHZhbHVlOiBhbnkpID0+IHtcbiAgICAvKiBlbXB0eSAqL1xuICB9O1xuICBvblRvdWNoZWQgPSAoKSA9PiB7XG4gICAgLyogZW1wdHkgKi9cbiAgfTtcblxuICB3cml0ZVZhbHVlKHZhbHVlOiBUVmFsdWUgfCBUVmFsdWVbXSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbLi4udmFsdWVdIDogW3ZhbHVlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IEFycmF5KDApO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgdXNlcnMgdG8gY3JlYXRlIG9wdGlvbnMgaWYgdGhleSBhcmUgbm90IGluIHRoZSBsaXN0IG9mIG9wdGlvbnMuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQHNpbmNlIDQuNS4xMVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGFsbG93Q3JlYXRlT3B0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIHNlbGVjdGlvbiBjbGVhbmVyIGVsZW1lbnRcbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCB0cnVlIHwgJ2FjdGl2ZSdcbiAgICovXG4gIEBJbnB1dCgpIGNsZWFuZXI6IGJvb2xlYW4gfCAnYWN0aXZlJyA9IHRydWU7XG5cbiAgLyoqXG4gICAqIENsZWFyIGN1cnJlbnQgc2VhcmNoIG9uIHNlbGVjdGluZyBhbiBpdGVtXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQHNpbmNlIDQuNS4xMVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNsZWFyU2VhcmNoT25TZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogRGlzYWJsZXMgbXVsdGktc2VsZWN0IGNvbXBvbmVudFxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuX2Rpc2FibGVkICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuc2V0Rm9jdXNNb25pdG9yKCF2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEFkZCBsb2FkaW5nIHNwaW5uZXIgYW5kIHJlZHVjZWQgb3BhY2l0eS5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAc2luY2UgNC41LjJcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBzZXQgbG9hZGluZyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuaXNMb2FkaW5nLnNldCh2YWx1ZSk7XG4gIH1cblxuICBpc0xvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhhdCBtdWx0aXBsZSBvcHRpb25zIGNhbiBiZSBzZWxlY3RlZCBhdCBvbmNlXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBzZXQgbXVsdGlwbGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9tdWx0aXBsZSA9IHZhbHVlO1xuICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNldFNlbGVjdGlvbk1vZGVsKHRoaXMuX211bHRpcGxlKTtcbiAgfVxuXG4gIGdldCBtdWx0aXBsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbXVsdGlwbGU7XG4gIH1cblxuICBwcml2YXRlIF9tdWx0aXBsZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBIaWRkZW4gbmF0aXZlIHNlbGVjdCBmb3JtXG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgQElucHV0KCkgbmF0aXZlRm9ybUlkOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogSGlkZGVuIG5hdGl2ZSBzZWxlY3QgaWRcbiAgICogQHR5cGUgc3RyaW5nXG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICBASW5wdXQoKSBuYXRpdmVJZDogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIEhpZGRlbiBuYXRpdmUgc2VsZWN0IG5hbWVcbiAgICogQHR5cGUgc3RyaW5nXG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICBASW5wdXQoKSBuYXRpdmVOYW1lOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogTGlzdCBvZiBvcHRpb24gZWxlbWVudHNcbiAgICogQHR5cGUgSU9wdGlvbltdXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgb3B0aW9ucyhvcHRpb25zOiBJT3B0aW9uW10pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgdGhpcy4jb3B0aW9ucy5jbGVhcigpO1xuICAgICAgdGhpcy5tYWtlT3B0aW9ucyhvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuI29wdGlvbnMudmFsdWVzKCldO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgbWF4SGVpZ2h0IG9mIG9wdGlvbnMgbGlzdCBpbiBweFxuICAgKiBAdHlwZSBzdHJpbmcgfCBudW1iZXJcbiAgICogQGRlZmF1bHQgJ2F1dG8nXG4gICAqL1xuICBASW5wdXQoKSBvcHRpb25zTWF4SGVpZ2h0OiBzdHJpbmcgfCBudW1iZXIgPSAnYXV0byc7XG5cbiAgLyoqXG4gICAqIFNldHMgb3B0aW9uIHN0eWxlXG4gICAqIEB0eXBlICdjaGVja2JveCcgfCAndGV4dCdcbiAgICogQGRlZmF1bHQgJ2NoZWNrYm94J1xuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IG9wdGlvbnNTdHlsZSh2YWx1ZTogJ2NoZWNrYm94JyB8ICd0ZXh0Jykge1xuICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLm9wdGlvbnNTdHlsZSA9IHZhbHVlID8/ICdjaGVja2JveCc7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmaWVzIGEgc2hvcnQgaGludCB0aGF0IGlzIHZpc2libGUgaW4gdGhlIHNlYXJjaCBpbnB1dFxuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQGRlZmF1bHQgJ1NlbGVjdC4uLidcbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VsZWN0Li4uJztcblxuICAvKipcbiAgICogRW5hYmxlcyBzZWFyY2ggaW5wdXQgZWxlbWVudFxuICAgKiBAdHlwZSBib29sZWFuIHwgU2VhcmNoRm4gfCAnZXh0ZXJuYWwnXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIEBJbnB1dCgpIHNlYXJjaDogYm9vbGVhbiB8ICdleHRlcm5hbCcgfCBTZWFyY2hGbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGxhYmVsIGZvciBubyByZXN1bHRzIHdoZW4gZmlsdGVyaW5nXG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKiBAZGVmYXVsdCAnbm8gaXRlbXMnXG4gICAqL1xuICBASW5wdXQoKSBzZWFyY2hOb1Jlc3VsdHNMYWJlbDogc3RyaW5nID0gJ25vIGl0ZW1zJztcblxuICAvKipcbiAgICogU2V0cyBpbml0aWFsIHNlYXJjaCBzdHJpbmdcbiAgICogQHR5cGUgc3RyaW5nXG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgc2VhcmNoVmFsdWUodmFsdWUpIHtcbiAgICBpZiAodGhpcy5fc2VhcmNoVmFsdWUgIT09IHZhbHVlLnRyaW1TdGFydCgpKSB7XG4gICAgICB0aGlzLl9zZWFyY2hWYWx1ZSA9IHZhbHVlLnRyaW1TdGFydCgpO1xuICAgICAgdGhpcy52aXNpYmxlID0gdGhpcy5zZWFyY2hWYWx1ZS5sZW5ndGggPiAwICYmIHRoaXMuc3VidHJlZUZvY3VzZWQgPyB0cnVlIDogdGhpcy52aXNpYmxlO1xuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zKHRoaXMuc2VhcmNoVmFsdWUpO1xuICAgICAgdGhpcy5pbnB1dEVsZW1lbnRTaXplKCk7XG4gICAgICB0aGlzLnNlYXJjaFZhbHVlQ2hhbmdlLmVtaXQodGhpcy5fc2VhcmNoVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzZWFyY2hWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9zZWFyY2hWYWx1ZTogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHNlYXJjaFZhbHVlIHN0cmluZyBmb3IgZXh0ZXJuYWwgZmlsdGVyaW5nXG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNlYXJjaFZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIHNlbGVjdCBhbGwgYnV0dG9uXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0QWxsOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogU2V0cyB0aGUgc2VsZWN0IGFsbCBidXR0b24gbGFiZWxcbiAgICogQHR5cGUgc3RyaW5nXG4gICAqIEBkZWZhdWx0ICdTZWxlY3QgYWxsIG9wdGlvbnMnXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RBbGxMYWJlbDogc3RyaW5nID0gJ1NlbGVjdCBhbGwgb3B0aW9ucyc7XG5cbiAgLyoqXG4gICAqIFNlbGVjdGlvbiB0eXBlXG4gICAqIEB0eXBlICdjb3VudGVyJyB8ICd0YWdzJyB8ICd0ZXh0J1xuICAgKiBAZGVmYXVsdCAndGFncydcbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGlvblR5cGU6ICdjb3VudGVyJyB8ICd0YWdzJyB8ICd0ZXh0JyA9ICd0YWdzJztcblxuICAvKipcbiAgICogQ291bnRlciBzZWxlY3Rpb24gbGFiZWwgdmFsdWVcbiAgICogQHR5cGUgc3RyaW5nXG4gICAqIEBkZWZhdWx0ICdpdGVtKHMpIHNlbGVjdGVkJ1xuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0aW9uVHlwZUNvdW50ZXJUZXh0OiBzdHJpbmcgPSAnaXRlbShzKSBzZWxlY3RlZCc7XG5cbiAgLyoqXG4gICAqIENvdW50ZXIgc2VsZWN0aW9uIGxhYmVsIHBsdXJhbCBtYXAgZm9yIEkxOG5QbHVyYWxQaXBlXG4gICAqIEB0eXBlIElQbHVyYWxNYXBcbiAgICogQGRlZmF1bHQgeyAnPTEnOiAnaXRlbSBzZWxlY3RlZCcsICdvdGhlcic6ICdpdGVtcyBzZWxlY3RlZCcgfVxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0aW9uVHlwZUNvdW50ZXJUZXh0UGx1cmFsTWFwPzogSVBsdXJhbE1hcCA9IHsgJz0xJzogJ2l0ZW0gc2VsZWN0ZWQnLCBvdGhlcjogJ2l0ZW1zIHNlbGVjdGVkJyB9O1xuXG4gIC8qKlxuICAgKiBTaXplIHRoZSBjb21wb25lbnQgc21hbGwgb3IgbGFyZ2UuXG4gICAqIEB0eXBlICdzbScgfCAnbGcnIHwgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSBzaXplPzogJ3NtJyB8ICdsZyc7XG5cbiAgLyoqXG4gICAqIEluaXRpYWwgdmFsdWUgb2YgbXVsdGktc2VsZWN0XG4gICAqIEB0eXBlIChUVmFsdWUgfCBUVmFsdWVbXSlcbiAgICovXG4gIEBJbnB1dCgpIHNldCB2YWx1ZSh2YWx1ZTogVFZhbHVlIHwgVFZhbHVlW10pIHtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gWy4uLnZhbHVlXSA6IFt2YWx1ZV07XG4gICAgLy8gaWYgKHRoaXMuZGlmZmVyKSB7XG4gICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuZGlmZmVyPy5kaWZmKG5ld1ZhbHVlKTtcbiAgICBpZiAoY2hhbmdlcykge1xuICAgICAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5jbGVhcigpO1xuICAgICAgfVxuICAgICAgdGhpcy4jdmFsdWUuc2V0KFsuLi5uZXdWYWx1ZV0pO1xuICAgICAgdGhpcy52YWx1ZSQubmV4dChbLi4ubmV3VmFsdWVdKTtcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgICAvLyB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgfVxuICAgIC8vIH1cbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUVmFsdWUgfCBUVmFsdWVbXSB7XG4gICAgY29uc3QgdmFsdWU6IFRWYWx1ZVtdID0gdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWw/LnNlbGVjdGVkID8/IFsuLi50aGlzLiN2YWx1ZSgpXTtcbiAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSA/IFsuLi52YWx1ZV0gOiB2YWx1ZVswXTtcbiAgfVxuXG4gICN2YWx1ZSA9IHNpZ25hbDxUVmFsdWVbXT4oW10pO1xuXG4gIC8qKlxuICAgKiBFbWl0cyB2YWx1ZUNoYW5nZVxuICAgKiBAdHlwZSBUVmFsdWUgfCBUVmFsdWVbXVxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VFZhbHVlIHwgVFZhbHVlW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxUVmFsdWUgfCBUVmFsdWVbXT4oKTtcblxuICAvKipcbiAgICogVG9nZ2xlIHZpc3VhbCB2YWxpZGF0aW9uIGZlZWRiYWNrLlxuICAgKiBAdHlwZSBib29sZWFuIHwgdW5kZWZpbmVkXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgQElucHV0KCkgdmFsaWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgdmlydHVhbCBzY3JvbGxlciBmb3Igb3B0aW9ucyBsaXN0LlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgc2V0IHZpcnR1YWxTY3JvbGxlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3ZpcnR1YWxTY3JvbGxlciA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHZpcnR1YWxTY3JvbGxlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fdmlydHVhbFNjcm9sbGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBfdmlydHVhbFNjcm9sbGVyID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEFtb3VudCBvZiB2aXNpYmxlIG9wdGlvbnMsIGlmIHNldCAtIG92ZXJ3cml0ZXMgb3B0aW9uc01heEhlaWdodFxuICAgKiBAdHlwZSBudW1iZXJcbiAgICogQGRlZmF1bHQgOFxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSlcbiAgc2V0IHZpc2libGVJdGVtcyh2YWx1ZSkge1xuICAgIHRoaXMuX3Zpc2libGVJdGVtcyA9IHZhbHVlID4gMCA/IHZhbHVlIDogODtcbiAgICB0aGlzLm9wdGlvbnNNYXhIZWlnaHQgPSAodGhpcy5pdGVtU2l6ZSAqIHRoaXMuX3Zpc2libGVJdGVtcyArIDE2KS50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IHZpc2libGVJdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZUl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBfdmlzaWJsZUl0ZW1zID0gODtcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIG9wdGlvbiBpdGVtIGluIHRoZSBsaXN0IChpbiBwaXhlbHMpLlxuICAgKiBAdHlwZSBudW1iZXJcbiAgICogQGRlZmF1bHQgNDBcbiAgICovXG4gIEBJbnB1dCgpIGl0ZW1TaXplOiBudW1iZXIgPSA0MDtcblxuICAvKipcbiAgICogTWluIHdpZHRoIG9mIHRoZSBvcHRpb25zIGxpc3QgKGluIHBpeGVscykuXG4gICAqIEB0eXBlIG51bWJlclxuICAgKiBAZGVmYXVsdCAxOTZcbiAgICovXG4gIEBJbnB1dCgpIGl0ZW1NaW5XaWR0aDogbnVtYmVyID0gMTk2O1xuICByZWFkb25seSBtaW5XaWR0aCA9IHNpZ25hbCh0aGlzLml0ZW1NaW5XaWR0aCk7XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZHJvcGRvd24gc2VsZWN0IGNvbXBvbmVudC5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHNldCB2aXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl92aXNpYmxlKSB7XG4gICAgICB0aGlzLl92aXNpYmxlID0gdmFsdWU7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2UudG9nZ2xlVmlzaWJsZSh2YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgLy8gdGhpcy5zZWFyY2hWYWx1ZSA9ICcnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCB2aXNpYmxlKCkge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xuICB9XG5cbiAgcHJpdmF0ZSBfdmlzaWJsZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBFbWl0cyB2aXNpYmxlQ2hhbmdlXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSB2aXNpYmxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHBvcHBlciBPcHRpb25zIG9iamVjdFxuICAgKiBAdHlwZSBQYXJ0aWFsPE9wdGlvbnM+XG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgcG9wcGVyT3B0aW9ucyhvcHRpb25zOiBQYXJ0aWFsPE9wdGlvbnM+KSB7XG4gICAgY29uc3QgcHJldk9wdGlvbnMgPSB0aGlzLiNwb3BwZXJPcHRpb25zKCk7XG4gICAgY29uc3QgeyBtb2RpZmllcnM6IHByZXZNb2RpZmllcnMgPSBbXSB9ID0gcHJldk9wdGlvbnM7XG4gICAgY29uc3QgeyBtb2RpZmllcnM6IGN1cnJNb2RpZmllcnMgPSBbXSB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBjdXJyT3B0aW9uczogUGFydGlhbDxPcHRpb25zPiA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBtb2RpZmllcnM6IFtcbiAgICAgICAgLi4ucHJldk1vZGlmaWVycy5maWx0ZXIoXG4gICAgICAgICAgKHByZXZNb2RpZmllcikgPT4gIWN1cnJNb2RpZmllcnMuZmluZCgoY3Vyck1vZGlmaWVyKSA9PiBjdXJyTW9kaWZpZXIubmFtZSA9PT0gcHJldk1vZGlmaWVyLm5hbWUpXG4gICAgICAgICksXG4gICAgICAgIC4uLmN1cnJNb2RpZmllcnNcbiAgICAgIF1cbiAgICB9O1xuXG4gICAgdGhpcy4jcG9wcGVyT3B0aW9ucy5zZXQoeyAuLi5wcmV2T3B0aW9ucywgLi4uY3Vyck9wdGlvbnMgfSk7XG4gIH1cblxuICBnZXQgcG9wcGVyT3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy4jcG9wcGVyT3B0aW9ucygpO1xuICB9XG5cbiAgcmVhZG9ubHkgI3BvcHBlck9wdGlvbnMgPSBzaWduYWwoZGVmYXVsdFBvcHBlck9wdGlvbnMpO1xuXG4gIGlzRHJvcGRvd25WaXNpYmxlID0gZmFsc2U7XG5cbiAgZ2V0IHNlbGVjdGVkT3B0aW9ucygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMub3B0aW9uc1NlbGVjdGVkLnZhbHVlcygpXTtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZE9wdGlvbnNUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkT3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLmxhYmVsKS5qb2luKCcsICcpO1xuICB9XG5cbiAgZ2V0IGNvdW50ZXJUZXh0KCkge1xuICAgIHJldHVybiBgJHt0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGh9ICR7dGhpcy5zZWxlY3Rpb25UeXBlQ291bnRlclRleHR9YDtcbiAgfVxuXG4gIGdldCBjb3VudGVyVGV4dFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mICh0aGlzLnNlbGVjdGlvblR5cGVDb3VudGVyVGV4dFBsdXJhbE1hcCA/PyB0aGlzLnNlbGVjdGlvblR5cGVDb3VudGVyVGV4dCk7XG4gIH1cblxuICBnZXQgY291bnRlclBsYWNlaG9sZGVyVGV4dCgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAwIHx8IHRoaXMuc2VsZWN0aW9uVHlwZSAhPT0gJ2NvdW50ZXInKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuY291bnRlclRleHRUeXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRoaXMuY291bnRlclRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGh9ICR7dGhpcy4jaTE4blBsdXJhbC50cmFuc2Zvcm0odGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoLCB0aGlzLnNlbGVjdGlvblR5cGVDb3VudGVyVGV4dFBsdXJhbE1hcCA/PyB7IG90aGVyOiB0aGlzLnNlbGVjdGlvblR5cGVDb3VudGVyVGV4dCA/PyAnKycgfSl9YDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvY3VzTW9uaXRvclN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcblxuICBAQ29udGVudENoaWxkcmVuKE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIG11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQhOiBRdWVyeUxpc3Q8TXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQ+O1xuICBAVmlld0NoaWxkcmVuKE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50KSBtdWx0aVNlbGVjdE9wdGlvbnNWaWV3ITogUXVlcnlMaXN0PE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50PjtcbiAgQFZpZXdDaGlsZHJlbignc2Nyb2xsVmlld3BvcnQnKSBzY3JvbGxWaWV3cG9ydFZpZXchOiBRdWVyeUxpc3Q8Q2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0PjtcbiAgQFZpZXdDaGlsZCgnb3B0aW9ucycpIG9wdGlvbnNFbGVtZW50UmVmITogRWxlbWVudFJlZjtcblxuICBwcm90ZWN0ZWQgc2Nyb2xsVmlld3BvcnQhOiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG5cbiAgcHJvdGVjdGVkIHRlbXBsYXRlczogeyBbaWQ6IHN0cmluZ106IFRlbXBsYXRlUmVmPGFueT4gfSA9IHt9O1xuICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlSWREaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgY29udGVudFRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxUZW1wbGF0ZUlkRGlyZWN0aXZlPjtcblxuICBwcml2YXRlIGZvY3VzS2V5TWFuYWdlciE6IEZvY3VzS2V5TWFuYWdlcjxNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudD47XG5cbiAgQFZpZXdDaGlsZCgnaW5wdXRFbGVtZW50JykgaW5wdXRFbGVtZW50ITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZChEcm9wZG93bk1lbnVEaXJlY3RpdmUsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBkcm9wZG93bk1lbnUhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKERyb3Bkb3duQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZHJvcGRvd24hOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKERyb3Bkb3duVG9nZ2xlRGlyZWN0aXZlLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZHJvcGRvd25Ub2dnbGUhOiBFbGVtZW50UmVmO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgaG9zdENsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkXG4gICAgfTtcbiAgfVxuXG4gIGdldCBtdWx0aXNlbGVjdENsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdmb3JtLW11bHRpLXNlbGVjdCc6IHRydWUsXG4gICAgICBbYGZvcm0tbXVsdGktc2VsZWN0LSR7dGhpcy5zaXplfWBdOiAhIXRoaXMuc2l6ZSxcbiAgICAgIHNob3c6IHRoaXMudmlzaWJsZSxcbiAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkLFxuICAgICAgJ2lzLXZhbGlkJzogdGhpcy52YWxpZCA9PT0gdHJ1ZSxcbiAgICAgICdpcy1pbnZhbGlkJzogdGhpcy52YWxpZCA9PT0gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbXVsdGlzZWxlY3RhYmxlJylcbiAgcHJpdmF0ZSBnZXQgYXJpYU11bHRpU2VsZWN0YWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aXBsZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWV4cGFuZGVkJylcbiAgcHJpdmF0ZSBnZXQgYXJpYUV4cGFuZGVkKCkge1xuICAgIHJldHVybiB0aGlzLnZpc2libGU7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICBwcml2YXRlIGdldCB0YWJJbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGFiSW5kZXg7XG4gIH1cblxuICBwcml2YXRlIHNldCB0YWJJbmRleCh2YWx1ZSkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fdGFiSW5kZXggPSB0aGlzLmRpc2FibGVkIHx8IHRoaXMuc2VhcmNoID8gLTEgOiB2YWx1ZSA9PT0gbnVsbCA/IG51bGwgOiAwO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdGFiSW5kZXg6IG51bWJlciB8IG51bGwgPSAtMTtcblxuICBASG9zdExpc3RlbmVyKCdrZXl1cCcsIFsnJGV2ZW50J10pIG9uS2V5VXAoJGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICBjb25zdCB0YXJnZXRUYWdOYW1lID0gKCRldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWU7XG4gICAgaWYgKCRldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgIHRoaXMuc2V0Rm9jdXMoJ2tleWJvYXJkJywgJ29uS2V5VXAnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgWydFbnRlcicsICdTcGFjZScsICdBcnJvd0Rvd24nXS5pbmNsdWRlcygkZXZlbnQuY29kZSkgJiZcbiAgICAgIFt0aGlzLmlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudCwgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnRdLmluY2x1ZGVzKCRldmVudC50YXJnZXQpXG4gICAgKSB7XG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgICAgaWYgKCF0aGlzLnNlYXJjaCkge1xuICAgICAgICB0aGlzLnNldEZvY3VzKCdrZXlib2FyZCcsICdvbktleVVwJyk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFsnVGFiJ10uaW5jbHVkZXMoJGV2ZW50LmtleSkpIHtcbiAgICAgIC8vIHRvZG8gZm9jdXMgb24gaW5wdXQgd2hlbiB0YWIgaW5cbiAgICAgIC8vIGlmICgkZXZlbnQudGFyZ2V0ID09PSB0aGlzLmlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgLy8gICBjb25zb2xlLmxvZygkZXZlbnQua2V5LCAkZXZlbnQudGFyZ2V0KVxuICAgICAgLy8gfVxuXG4gICAgICBpZiAoJGV2ZW50LnRhcmdldCA9PT0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaCkge1xuICAgICAgICAgIHRoaXMuc2V0Rm9jdXMoJ2tleWJvYXJkJywgJ29uS2V5VXAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYlRhcmdldCA9IHRhcmdldFRhZ05hbWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudmlzaWJsZSAmJiB0aGlzLnN1YnRyZWVGb2N1c2VkKSB7XG4gICAgICAgIGlmICh0YXJnZXRUYWdOYW1lID09PSAnQy1NVUxUSS1TRUxFQ1QtT1BUSU9OJykge1xuICAgICAgICAgIGlmICh0aGlzLnRhYlRhcmdldCA9PT0gJ0MtTVVMVEktU0VMRUNULU9QVElPTicpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgJGV2ZW50LnNoaWZ0S2V5ICYmXG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0/LnZhbHVlID09PVxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLnZpc2libGUgJiYgIW9wdGlvbi5kaXNhYmxlZCkuc2xpY2UoMClbMF0udmFsdWVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzKCdrZXlib2FyZCcsICdvbktleVVwJyk7XG4gICAgICAgICAgICAgIHRoaXMudGFiVGFyZ2V0ID0gdGFyZ2V0VGFnTmFtZTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICEkZXZlbnQuc2hpZnRLZXkgJiZcbiAgICAgICAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbT8udmFsdWUgPT09XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24udmlzaWJsZSAmJiAhb3B0aW9uLmRpc2FibGVkKS5zbGljZSgtMSlbMF0udmFsdWVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzKCdrZXlib2FyZCcsICdvbktleVVwJyk7XG4gICAgICAgICAgICAgIHRoaXMudGFiVGFyZ2V0ID0gdGFyZ2V0VGFnTmFtZTtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVJdGVtKDApO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCF0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtIHx8IHRoaXMudGFiVGFyZ2V0ICE9PSB0YXJnZXRUYWdOYW1lKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVPcHRpb24pIHtcbiAgICAgICAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSh0aGlzLmFjdGl2ZU9wdGlvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNldEZpcnN0SXRlbUFjdGl2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkZXZlbnQuc2hpZnRLZXkgPyB0aGlzLmZvY3VzS2V5TWFuYWdlci5zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKSA6IHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNldE5leHRJdGVtQWN0aXZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudGFiVGFyZ2V0ID0gdGFyZ2V0VGFnTmFtZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKSBvbktleURvd24oJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0VGFnTmFtZSA9ICgkZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS50YWdOYW1lO1xuICAgIGlmICgkZXZlbnQua2V5ID09PSAnRW50ZXInICYmIHRhcmdldFRhZ05hbWUgPT09ICdJTlBVVCcpIHtcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAoJGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgIHRoaXMudGFiVGFyZ2V0ID0gdGFyZ2V0VGFnTmFtZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCRldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nICYmIHRhcmdldFRhZ05hbWUgIT09ICdDLU1VTFRJLVNFTEVDVC1PUFRJT04nKSB7XG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCRldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgIHRoaXMuc2V0Rm9jdXMoJ2tleWJvYXJkJywgJ29uS2V5RG93bicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBhdm9pZCBzZXR0aW5nIGZvY3VzIHRvIG9wdGlvbiB3aGlsZSBvbiBpbnB1dCBlbGVtZW50XG4gICAgaWYgKCRldmVudC50YXJnZXQgPT09IHRoaXMuaW5wdXRFbGVtZW50Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgkZXZlbnQua2V5ICE9PSAnVGFiJykge1xuICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXI/Lm9uS2V5ZG93bigkZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgb25DbGljaygkZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoW3RoaXMuZHJvcGRvd24ubmF0aXZlRWxlbWVudF0uaW5jbHVkZXMoJGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHRoaXMudmlzaWJsZSA9ICF0aGlzLnZpc2libGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgdGhpcy5zZXRGb2N1cygnbW91c2UnLCAnb25DbGljaycpO1xuICB9XG5cbiAgcHVibGljIHZpc2libGVPcHRpb25zID0gc2lnbmFsKGZhbHNlKTtcblxuICBnZXQgc3VidHJlZUZvY3VzZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YnRyZWVGb2N1c2VkO1xuICB9XG5cbiAgc2V0IHN1YnRyZWVGb2N1c2VkKGZvY3VzZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zdWJ0cmVlRm9jdXNlZCA9IHRoaXMuZGlzYWJsZWQgPyBmYWxzZSA6IGZvY3VzZWQ7XG4gICAgaWYgKCFmb2N1c2VkKSB7XG4gICAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgfVxuICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsZXIpIHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IGZvY3VzZWQgPT09IGZhbHNlID8gZmFsc2UgOiB0aGlzLnZpc2libGU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc3VidHJlZUZvY3VzZWQgPSB0aGlzLmZvY3VzT3JpZ2luKG51bGwpO1xuXG4gIHByaXZhdGUgbmF0aXZlU2VsZWN0UmVmITogYW55O1xuXG4gIGZvY3VzT3JpZ2luKG9yaWdpbjogRm9jdXNPcmlnaW4pOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gISFvcmlnaW47XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5jaGFuZ2VkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLm11bHRpcGxlKSxcbiAgICAgICAgZGVsYXkoMCksXG4gICAgICAgIHRhcCgoY2hhbmdlKSA9PiB7XG4gICAgICAgICAgaWYgKGNoYW5nZS5hZGRlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBjbG9zZSBkcm9wZG93biBmb3Igc2luZ2xlIHNlbGVjdCAoIW11bHRpcGxlKVxuICAgICAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgc2tpcCgxKSxcbiAgICAgICAgdGFwKChjaGFuZ2UpID0+IHtcbiAgICAgICAgICB0aGlzLnNldEZvY3VzKCdwcm9ncmFtJywgJ3NlbGVjdGlvbk1vZGVsLmNoYW5nZWQgKHNpbmdsZSknKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy4jb3B0aW9uc1JlYWR5JFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy52aXJ0dWFsU2Nyb2xsZXIpLFxuICAgICAgICBkZWxheSgwKSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldEZvY3VzS2V5TWFuYWdlcihbLi4udGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50LCAuLi50aGlzLm11bHRpU2VsZWN0T3B0aW9uc1ZpZXddKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuY2hhbmdlZFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoY2hhbmdlKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBhZGRlZCB9ID0geyAuLi5jaGFuZ2UgfTtcbiAgICAgICAgICBpZiAoYWRkZWQubGVuZ3RoID4gMCAmJiB0aGlzLmNsZWFyU2VhcmNoT25TZWxlY3QpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLmNoYW5nZWRcbiAgICAgIC5waXBlKFxuICAgICAgICAvLyBkZWxheSgwKSxcbiAgICAgICAgY29tYmluZUxhdGVzdFdpdGgodGhpcy4jb3B0aW9uc1JlYWR5JCksXG4gICAgICAgIHRhcCgoW2NoYW5nZSwgcmVhZHldKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyByZW1vdmVkIH0gPSB7IC4uLmNoYW5nZSB9O1xuICAgICAgICAgIHJlbW92ZWQuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uc1NlbGVjdGVkLmRlbGV0ZSh2YWx1ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuI29wdGlvbnMuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zU2VsZWN0ZWQuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5vcHRpb25zU2VsZWN0ZWQkLm5leHQoQXJyYXkuZnJvbSh0aGlzLm9wdGlvbnNTZWxlY3RlZC52YWx1ZXMoKSkpO1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBbLi4udGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRdO1xuXG4gICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnRTaXplKCk7XG4gICAgICAgICAgdGhpcy51cGRhdGVOYXRpdmVTZWxlY3QoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgLy8gc2V0IGluaXRpYWwgdmFsdWVzXG4gICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KC4uLnRoaXMuI3ZhbHVlKCkpO1xuXG4gICAgdGhpcy52YWx1ZSQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZikpLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIGlmICghdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuY2xlYXJBbGxPcHRpb25zKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFsdWUuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy52YWx1ZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uub3B0aW9uc0FycmF5JFxuICAgICAgLnBpcGUoXG4gICAgICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRoaXMudXNlck9wdGlvbnNBcnJheSQpLFxuICAgICAgICB0YXAoKFtvcHRpb25zLCB1c2VyT3B0aW9uc10pID0+IHtcbiAgICAgICAgICB0aGlzLnZpc2libGVPcHRpb25zLnNldChvcHRpb25zLnNvbWUoKGl0ZW0pID0+IGl0ZW0udmlzaWJsZSkgfHwgdXNlck9wdGlvbnMuc29tZSgoaXRlbSkgPT4gaXRlbS52aXNpYmxlKSk7XG4gICAgICAgICAgdGhpcy5hY3RpdmVPcHRpb24gPSBudWxsO1xuXG4gICAgICAgICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbGVyKSB7XG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/LmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICBvcHRpb24uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVmlld3BvcnQ/LnNldFJlbmRlcmVkUmFuZ2UoeyBzdGFydDogMCwgZW5kOiB0aGlzLnZpc2libGVJdGVtcyB9KTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVmlld3BvcnQ/LnNjcm9sbFRvSW5kZXgoMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudD8uZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gb3B0aW9ucy5maW5kKChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSBvcHRpb24udmFsdWUpO1xuICAgICAgICAgICAgICBvcHRpb24udmlzaWJsZSA9IGZvdW5kPy52aXNpYmxlID8/IGZhbHNlO1xuICAgICAgICAgICAgICBvcHRpb24uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlID0gdGhpcy5maXJzdEZvY3VzYWJsZUl0ZW07XG4gICAgICAgICAgICBpZiAoZmlyc3RGb2N1c2FibGUpIHtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVJdGVtKGZpcnN0Rm9jdXNhYmxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZU9wdGlvbikge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlSXRlbSgwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLnRhYkluZGV4ID0gMDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI2Rlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLiNkZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuc2V0Rm9jdXNNb25pdG9yKGZhbHNlKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1sndmFsdWUnXSkge1xuICAgICAgY29uc3QgdmFsdWVDaGFuZ2VzID0gY2hhbmdlc1sndmFsdWUnXTtcbiAgICAgIGlmICh2YWx1ZUNoYW5nZXMuY3VycmVudFZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmNsZWFyQWxsT3B0aW9ucygpO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnB1dEVsZW1lbnRTaXplKCk7XG4gICAgfVxuICB9XG5cbiAgbWFrZU9wdGlvbnMob3B0aW9uczogSU9wdGlvbltdKSB7XG4gICAgaWYgKHRoaXMuc2VhcmNoID09PSAnZXh0ZXJuYWwnICYmIHRoaXMuc2VhcmNoVmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLiNvcHRpb25zLmZvckVhY2goKG9wdGlvbiwga2V5KSA9PiB7XG4gICAgICAgIG9wdGlvbi52aXNpYmxlID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBvcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gb3B0aW9uLnZhbHVlO1xuICAgICAgY29uc3QgdmFsdWUgPSB7XG4gICAgICAgIHZhbHVlOiBvcHRpb24udmFsdWUgPz8gb3B0aW9uLmxhYmVsLFxuICAgICAgICBsYWJlbDogb3B0aW9uLmxhYmVsID8/IG9wdGlvbi52YWx1ZT8udG9TdHJpbmcoKSxcbiAgICAgICAgZGlzYWJsZWQ6IG9wdGlvbi5kaXNhYmxlZCA9PT0gdHJ1ZSxcbiAgICAgICAgdmlzaWJsZTpcbiAgICAgICAgICB0aGlzLnNlYXJjaCA9PT0gJ2V4dGVybmFsJ1xuICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICA6IG9wdGlvbi5jdXN0b20gJiYgb3B0aW9uLnNlbGVjdGVkXG4gICAgICAgICAgICAgID8gb3B0aW9uLnZpc2libGVcbiAgICAgICAgICAgICAgOiBvcHRpb24udmlzaWJsZSAhPT0gZmFsc2UsXG4gICAgICAgIHRleHQ6IG9wdGlvbi50ZXh0ID8/IG9wdGlvbi5sYWJlbCA/PyBvcHRpb24udmFsdWU/LnRvU3RyaW5nKCksXG4gICAgICAgIHNlbGVjdGVkOiBvcHRpb24uc2VsZWN0ZWQsXG4gICAgICAgIGN1c3RvbTogb3B0aW9uLmN1c3RvbVxuICAgICAgICAvLyBzZWxlY3RlZDogdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChvcHRpb24udmFsdWUpLFxuICAgICAgICAvLyBpZDogb3B0aW9uLmlkXG4gICAgICB9O1xuICAgICAgdGhpcy4jb3B0aW9ucy5zZXQoa2V5LCB7IC4uLnZhbHVlIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5maWx0ZXJPcHRpb25zKHRoaXMuc2VhcmNoVmFsdWUpO1xuXG4gICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50Py5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc1ZpZXc/Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgIHRoaXMuI29wdGlvbnNSZWFkeSQubmV4dCgpO1xuICB9XG5cbiAgcmVhZG9ubHkgdXNlck9wdGlvbnMgPSB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5nZXRVc2VyT3B0aW9ucygpO1xuXG4gIC8vICNlZmZlY3RVc2VyT3B0aW9ucyA9IGVmZmVjdCgoKSA9PiB7XG4gIC8vICAgaWYgKHRoaXMuYWxsb3dDcmVhdGVPcHRpb25zKSB7XG4gIC8vICAgICB0aGlzLnVzZXJPcHRpb25zQXJyYXkkLm5leHQoQXJyYXkuZnJvbSh0aGlzLnVzZXJPcHRpb25zKCkuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24udmlzaWJsZSkpKTtcbiAgLy8gICB9XG4gIC8vIH0pO1xuXG4gIGFkZFVzZXJPcHRpb24oKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dDcmVhdGVPcHRpb25zKSB7XG4gICAgICBpZiAodGhpcy51c2VyT3B0aW9ucygpLnNvbWUoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSB0aGlzLnNlYXJjaFZhbHVlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy4jb3B0aW9ucy5nZXQodGhpcy5zZWFyY2hWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgdXNlck9wdGlvbjogSU9wdGlvbiA9IHtcbiAgICAgICAgdmFsdWU6IHRoaXMuc2VhcmNoVmFsdWUsXG4gICAgICAgIGxhYmVsOiB0aGlzLnNlYXJjaFZhbHVlLFxuICAgICAgICB0ZXh0OiB0aGlzLnNlYXJjaFZhbHVlLFxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICBjdXN0b206IHRydWUsXG4gICAgICAgIHNlbGVjdGVkOiB0cnVlXG4gICAgICB9O1xuICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9IHRoaXMuY2xlYXJTZWFyY2hPblNlbGVjdCB8fCB0aGlzLmFsbG93Q3JlYXRlT3B0aW9ucyA/ICcnIDogdGhpcy5zZWFyY2hWYWx1ZTtcbiAgICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLmFkZFVzZXJPcHRpb24odXNlck9wdGlvbik7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QodXNlck9wdGlvbi52YWx1ZSk7XG4gICAgICB0aGlzLm9wdGlvbnNTZWxlY3RlZC5zZXQodXNlck9wdGlvbi52YWx1ZSwgdXNlck9wdGlvbik7XG4gICAgICB0aGlzLm1ha2VPcHRpb25zKFsuLi50aGlzLm9wdGlvbnMsIC4uLnRoaXMudXNlck9wdGlvbnMoKV0pO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUFsbFVzZXJPcHRpb25zKCkge1xuICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnJlbW92ZUFsbFVzZXJPcHRpb25zKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRWaXJ0dWFsU2Nyb2xsZXIoKTtcblxuICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudD8uY2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGRlbGF5KDApLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldmlvdXM6IFF1ZXJ5TGlzdDxNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudD4sIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBwcmV2ID0gcHJldmlvdXMudG9BcnJheSgpLm1hcCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUpO1xuICAgICAgICAgIGNvbnN0IGN1cnIgPSBjdXJyZW50LnRvQXJyYXkoKS5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlKTtcbiAgICAgICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3Vycik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLiNvcHRpb25zQ29udGVudCkgPT09IEpTT04uc3RyaW5naWZ5KGN1cnIpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKChjaGFuZ2VzKSA9PiB7XG4gICAgICAgICAgdGhpcy4jb3B0aW9uc0NvbnRlbnQgPSBjaGFuZ2VzLnRvQXJyYXkoKS5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgobmV4dCkgPT4ge1xuICAgICAgICB0aGlzLnZpc2libGVPcHRpb25zLnNldCh0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/LnNvbWUoKG9wdGlvbikgPT4gb3B0aW9uLnZpc2libGUpKTtcbiAgICAgICAgaWYgKHRoaXMudmlzaWJsZU9wdGlvbnMoKSkge1xuICAgICAgICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsZXIpIHtcbiAgICAgICAgICAgIHRoaXMuI29wdGlvbnMuY2xlYXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5tYWtlT3B0aW9ucyh0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQudG9BcnJheSgpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLnZpc2libGVPcHRpb25zLnNldCh0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/Lmxlbmd0aCA+IDAgfHwgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNWaWV3Py5sZW5ndGggPiAwKTtcbiAgICBpZiAodGhpcy52aXNpYmxlT3B0aW9ucygpKSB7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5tdWx0aXNlbGVjdFN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5zZXRGb2N1c01vbml0b3IoIXRoaXMuZGlzYWJsZWQpO1xuXG4gICAgdGhpcy5zZXRMaXN0S2V5TWFuYWdlcigpO1xuXG4gICAgdGhpcy5pbnB1dEVsZW1lbnRTaXplKCk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQubm90aWZ5T25DaGFuZ2VzKCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY3JlYXRlTmF0aXZlU2VsZWN0KCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5tdWx0aVNlbGVjdEZvY3VzJFxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgob3B0aW9uOiBNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVPcHRpb24gJiYgdGhpcy5hY3RpdmVPcHRpb24udmFsdWUgIT09IG9wdGlvbi52YWx1ZSkge1xuICAgICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0ob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHRhYlRhcmdldCE6IHN0cmluZztcblxuICBwcml2YXRlIG11bHRpc2VsZWN0U3Vic2NyaWJlKHN1YnNjcmliZTogYm9vbGVhbiA9IHRydWUpIHtcbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5tdWx0aVNlbGVjdFZpc2libGUkXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgodmlzaWJsZSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pc0Ryb3Bkb3duVmlzaWJsZSAhPT0gdmlzaWJsZSkge1xuICAgICAgICAgIHRoaXMuaXNEcm9wZG93blZpc2libGUgPSB2aXNpYmxlO1xuICAgICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHZpc2libGUpO1xuICAgICAgICAgIGlmICghdmlzaWJsZSkge1xuICAgICAgICAgICAgLyogZW1wdHkgKi9cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbGVyKSB7XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkcm9wZG93bk1pbldpZHRoID0gcGFyc2VJbnQodGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudC5zdHlsZS5taW5XaWR0aCwgMTApO1xuICAgICAgICAgICAgICAgIHRoaXMubWluV2lkdGguc2V0KHRoaXMuaXRlbU1pbldpZHRoID4gZHJvcGRvd25NaW5XaWR0aCA/IHRoaXMuaXRlbU1pbldpZHRoIDogZHJvcGRvd25NaW5XaWR0aCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxWaWV3cG9ydD8uc2V0UmVuZGVyZWRSYW5nZSh7IHN0YXJ0OiAwLCBlbmQ6IHRoaXMudmlzaWJsZUl0ZW1zIH0pO1xuICAgICAgICAgICAgICB0aGlzLnNjcm9sbFZpZXdwb3J0Py5zY3JvbGxUb0luZGV4KDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVJdGVtKDApO1xuICAgICAgfSk7XG4gIH1cblxuICBjbGVhckFsbE9wdGlvbnMoJGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZW5hYmxlZE9wdGlvbnMgPSBBcnJheS5mcm9tKHRoaXMub3B0aW9uc1NlbGVjdGVkLnZhbHVlcygpKVxuICAgICAgICAuZmlsdGVyKChvcHRpb24pID0+ICFvcHRpb24uZGlzYWJsZWQpXG4gICAgICAgIC5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlKTtcbiAgICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KC4uLmVuYWJsZWRPcHRpb25zKTtcbiAgICAgIHRoaXMucmVtb3ZlQWxsVXNlck9wdGlvbnMoKTtcblxuICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICcnO1xuICAgICAgaWYgKCRldmVudCkge1xuICAgICAgICB0aGlzLnNldEZvY3VzKCdwcm9ncmFtJywgJ2NsZWFyQWxsT3B0aW9ucycpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2VsZWN0QWxsT3B0aW9ucygpIHtcbiAgICBjb25zdCBlbmFibGVkT3B0aW9ucyA9IEFycmF5LmZyb20odGhpcy4jb3B0aW9ucy52YWx1ZXMoKSlcbiAgICAgIC5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLnZpc2libGUgJiYgIW9wdGlvbi5kaXNhYmxlZClcbiAgICAgIC5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlKTtcbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoLi4uZW5hYmxlZE9wdGlvbnMpO1xuICAgIHRoaXMuaW5wdXRFbGVtZW50U2l6ZSgpO1xuICB9XG5cbiAgaGFuZGxlVGFnUmVtb3ZlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdCh2YWx1ZSk7XG4gICAgdGhpcy5zZXRGb2N1cygncHJvZ3JhbScsICdoYW5kbGVUYWdSZW1vdmUnKTtcbiAgfVxuXG4gIHNldEZvY3VzKG9yaWdpbjogRm9jdXNPcmlnaW4gPSAncHJvZ3JhbScsIG1ldGhvZE5hbWU/OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50ID0gPEhUTUxFbGVtZW50Pih0aGlzLmlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudCA/PyB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgY29uc3QgcHJldmVudFNjcm9sbCA9IG9yaWdpbiA9PT0gJ3Byb2dyYW0nO1xuICAgIHRoaXMuZm9jdXNNb25pdG9yPy5mb2N1c1ZpYShlbGVtZW50LCBvcmlnaW4sIHsgcHJldmVudFNjcm9sbDogcHJldmVudFNjcm9sbCB9KTtcbiAgICAvLyBjb25zb2xlLmxvZygnc2V0Rm9jdXMnLCBvcmlnaW4sIG1ldGhvZE5hbWUsICdwcmV2ZW50U2Nyb2xsOicsIHByZXZlbnRTY3JvbGwsIGVsZW1lbnQudGFnTmFtZSwgdGhpcy52YWx1ZSk7XG4gIH1cblxuICBmaWx0ZXJPcHRpb25zKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZWFyY2hTdHJpbmcgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpID8/ICcnO1xuICAgIHRoaXMuI29wdGlvbnMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChzZWFyY2hTdHJpbmcgPT09ICcnKSB7XG4gICAgICAgIGl0ZW0udmlzaWJsZSA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5zZWFyY2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaXRlbS52aXNpYmxlID0gdGhpcy5zZWFyY2goaXRlbSwgc2VhcmNoU3RyaW5nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCh0aGlzLnNlYXJjaCA9PT0gJ2V4dGVybmFsJyAmJiAhaXRlbS5jdXN0b20pIHx8ICFzZWFyY2hTdHJpbmcpIHtcbiAgICAgICAgLy8gaXRlbS52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaXRlbS52aXNpYmxlID0gaXRlbS5sYWJlbD8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hTdHJpbmcpID8/IHRydWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS51cGRhdGVPcHRpb25zQXJyYXkoQXJyYXkuZnJvbSh0aGlzLiNvcHRpb25zLnZhbHVlcygpKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udmlzaWJsZSkpO1xuICAgIHRoaXMudXNlck9wdGlvbnNBcnJheSQubmV4dChBcnJheS5mcm9tKHRoaXMuI29wdGlvbnMudmFsdWVzKCkpLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5jdXN0b20pKTtcbiAgfVxuXG4gIGNyZWF0ZU5hdGl2ZVNlbGVjdCgpIHtcbiAgICBpZiAoIXRoaXMubmF0aXZlSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KE11bHRpU2VsZWN0TmF0aXZlU2VsZWN0Q29tcG9uZW50KTtcbiAgICB0aGlzLnVwZGF0ZU5hdGl2ZVNlbGVjdCgpO1xuICB9XG5cbiAgdXBkYXRlTmF0aXZlU2VsZWN0KCkge1xuICAgIGlmICghdGhpcy5uYXRpdmVTZWxlY3RSZWYgfHwgIXRoaXMubmF0aXZlSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IEFycmF5LmZyb20odGhpcy5vcHRpb25zU2VsZWN0ZWQpLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgeyBzZWxlY3RlZCwgdmFsdWUsIGxhYmVsIH0gPSBpdGVtWzFdO1xuICAgICAgcmV0dXJuIHsgc2VsZWN0ZWQsIHZhbHVlLCBsYWJlbCB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYuc2V0SW5wdXQoJ211bHRpcGxlJywgdGhpcy5tdWx0aXBsZSk7XG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYuc2V0SW5wdXQoJ2Zvcm0nLCB0aGlzLm5hdGl2ZUZvcm1JZCk7XG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYuc2V0SW5wdXQoJ2lkJywgdGhpcy5uYXRpdmVJZCk7XG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYuc2V0SW5wdXQoJ25hbWUnLCB0aGlzLm5hdGl2ZU5hbWUpO1xuICAgIHRoaXMubmF0aXZlU2VsZWN0UmVmLnNldElucHV0KCdvcHRpb25zJywgWy4uLm9wdGlvbnNdKTtcbiAgICB0aGlzLm5hdGl2ZVNlbGVjdFJlZi5zZXRJbnB1dCgnZGlzYWJsZWQnLCB0aGlzLmRpc2FibGVkKTtcbiAgICB0aGlzLm5hdGl2ZVNlbGVjdFJlZi5pbnN0YW5jZS5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGlucHV0RWxlbWVudFNpemUoKSB7XG4gICAgaWYgKHRoaXMuaW5wdXRFbGVtZW50KSB7XG4gICAgICBpZiAoIXRoaXMuaW5wdXRFbGVtZW50Py5uYXRpdmVFbGVtZW50Py5kaXNhYmxlZCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudCwgJ3NpemUnLCAodGhpcy5zZWFyY2hWYWx1ZS5sZW5ndGggKyAyKS50b1N0cmluZygpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuaW5wdXRFbGVtZW50Py5uYXRpdmVFbGVtZW50LCAnc2l6ZScpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudCwgJ3NpemUnLCAnMicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNlYXJjaEtleURvd24oJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKFsnRW50ZXInXS5pbmNsdWRlcygkZXZlbnQua2V5KSAmJiB0aGlzLnNlYXJjaFZhbHVlLmxlbmd0aCAmJiB0aGlzLmFsbG93Q3JlYXRlT3B0aW9ucykge1xuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAkZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmFkZFVzZXJPcHRpb24oKTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VhcmNoVmFsdWUubGVuZ3RoIHx8IHRoaXMub3B0aW9uc1NlbGVjdGVkLnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoWydCYWNrc3BhY2UnLCAnRGVsZXRlJ10uaW5jbHVkZXMoJGV2ZW50LmtleSkpIHtcbiAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNvbnN0IGxhc3QgPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gIW9wdGlvbi5kaXNhYmxlZCkucG9wKCk7XG4gICAgICBpZiAobGFzdCkge1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChsYXN0LnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzTW9uaXRvcihtb25pdG9yOiBib29sZWFuKSB7XG4gICAgaWYgKG1vbml0b3IgJiYgIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIC8vIHRvZG8gZm9jdXMgb24gaW5wdXQgd2hlbiB0YWIgaW5cbiAgICAgIC8vIHRoaXMuZm9jdXNNb25pdG9yPy5tb25pdG9yKHRoaXMuZWxlbWVudFJlZiwgZmFsc2UpXG4gICAgICAvLyAgIC5waXBlKFxuICAgICAgLy8gICAgIHRhcChvcmlnaW4gPT4ge1xuICAgICAgLy8gICAgICAgaWYgKG9yaWdpbiA9PT0gJ2tleWJvYXJkJyAmJiB0aGlzLnNlYXJjaCAmJiB0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIC8vICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgLy8gICAgICAgfVxuICAgICAgLy8gICAgIH0pLFxuICAgICAgLy8gICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgLy8gICApXG4gICAgICAvLyAgIC5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuZm9jdXNNb25pdG9yU3Vic2NyaXB0aW9uID0gdGhpcy5mb2N1c01vbml0b3JcbiAgICAgICAgPy5tb25pdG9yKHRoaXMuZWxlbWVudFJlZiwgdHJ1ZSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gdG8gYXZvaWQgZm9jdXMgbG9zdCBvbiBzcGVlZCBzY3JvbGxpbmcgd2l0aCB2aXJ0dWFsU2Nyb2xsXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgob3JpZ2luKSA9PiB7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3VidHJlZUZvY3VzZWQgPSB0aGlzLmZvY3VzT3JpZ2luKG9yaWdpbik7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNNb25pdG9yPy5zdG9wTW9uaXRvcmluZyh0aGlzLmVsZW1lbnRSZWYpO1xuICAgICAgdGhpcy5mb2N1c01vbml0b3JTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgYWN0aXZlT3B0aW9uOiAoRm9jdXNhYmxlT3B0aW9uICYgTXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQpIHwgbnVsbCA9IG51bGw7XG5cbiAgaGFuZGxlU2Nyb2xsZWRJbmRleENoYW5nZShzY3JvbGxlZEluZGV4OiBudW1iZXIsIHNjcm9sbFZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQpIHtcbiAgICBpZiAoIXRoaXMuc2Nyb2xsVmlld3BvcnQpIHtcbiAgICAgIHRoaXMuc2Nyb2xsVmlld3BvcnQgPSBzY3JvbGxWaWV3cG9ydDtcbiAgICB9XG5cbiAgICBjb25zdCBhdmFpbGFibGVPcHRpb25zID0gdGhpcy5vcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24udmlzaWJsZSk7XG4gICAgY29uc3QgZmlyc3RWaXNpYmxlT3B0aW9uID0gYXZhaWxhYmxlT3B0aW9uc1tzY3JvbGxlZEluZGV4XTtcbiAgICBjb25zdCBhY3RpdmVPcHRpb25JbmRleCA9IGF2YWlsYWJsZU9wdGlvbnMuZmluZEluZGV4KChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gdGhpcy5hY3RpdmVPcHRpb24/LnZhbHVlKTtcbiAgICBjb25zdCBvcHRpb25zQXJyYXkgPSB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQudG9BcnJheSgpO1xuXG4gICAgaWYgKHNjcm9sbGVkSW5kZXggPiBhY3RpdmVPcHRpb25JbmRleCkge1xuICAgICAgY29uc3QgZmlyc3RWaXNpYmxlSXRlbSA9IG9wdGlvbnNBcnJheS5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gZmlyc3RWaXNpYmxlT3B0aW9uPy52YWx1ZSk7XG4gICAgICBpZiAoZmlyc3RWaXNpYmxlSXRlbSAmJiBzY3JvbGxlZEluZGV4KSB7XG4gICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oZmlyc3RWaXNpYmxlSXRlbSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNjcm9sbGVkSW5kZXggKyB0aGlzLnZpc2libGVJdGVtcyAtIDIgPD0gYWN0aXZlT3B0aW9uSW5kZXgpIHtcbiAgICAgIGNvbnN0IGxhc3RWaXNpYmxlSXRlbSA9IG9wdGlvbnNBcnJheS5maW5kSW5kZXgoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSBmaXJzdFZpc2libGVPcHRpb24udmFsdWUpO1xuICAgICAgaWYgKGxhc3RWaXNpYmxlSXRlbSA+IC0xKSB7XG4gICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0obGFzdFZpc2libGVJdGVtICsgdGhpcy52aXNpYmxlSXRlbXMgLSAyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgb3B0aW9uOiBJT3B0aW9uKSB7XG4gICAgcmV0dXJuIG9wdGlvbi52YWx1ZTtcbiAgfVxuXG4gIGhhbmRsZVNlYXJjaFZhbHVlQ2hhbmdlKHNlYXJjaFZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWU7XG4gICAgaWYgKCFzZWFyY2hWYWx1ZSkge1xuICAgICAgdGhpcy5zY3JvbGxWaWV3cG9ydD8uc2Nyb2xsVG9JbmRleCgwKTtcbiAgICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudC5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICAgIGlmICh0aGlzLnN1YnRyZWVGb2N1c2VkKSB7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXMoJ3Byb2dyYW0nLCAnaGFuZGxlU2VhcmNoVmFsdWVDaGFuZ2UnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFZpcnR1YWxTY3JvbGxlcigpIHtcbiAgICBpZiAoIXRoaXMudmlydHVhbFNjcm9sbGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gbXVsdGlTZWxlY3RPcHRpb25UZW1wbGF0ZSBmb3IgdmlydHVhbFNjcm9sbGVyXG4gICAgdGhpcy5jb250ZW50VGVtcGxhdGVzLmZvckVhY2goKGNoaWxkOiBUZW1wbGF0ZUlkRGlyZWN0aXZlKSA9PiB7XG4gICAgICB0aGlzLnRlbXBsYXRlc1tjaGlsZC5pZF0gPSBjaGlsZC50ZW1wbGF0ZVJlZjtcbiAgICB9KTtcblxuICAgIC8vIGlmIG5vIHRlbXBsYXRlIGZvdW5kLCBnZXQgZGVmYXVsdE11bHRpU2VsZWN0T3B0aW9uVGVtcGxhdGUgZnJvbSB2aWV3XG4gICAgaWYgKCF0aGlzLnRlbXBsYXRlc1snbXVsdGlTZWxlY3RPcHRpb25UZW1wbGF0ZSddKSB7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQgPSB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc1ZpZXc7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLy8gbXVsdGlTZWxlY3RPcHRpb25zQ29udGVudCBnZXRzIG91dCBvZiBvcmRlciBvbiBjaGFuZ2VzXG4gICAgLy8gZG8gc29ydCgpIGFuZCByZXNldCgpXG4gICAgY29uc3QgaW5kZXhPZk9wdGlvbiA9IChvcHRpb246IE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50KSA9PiB7XG4gICAgICByZXR1cm4gWy4uLm9wdGlvbi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5jaGlsZHJlbl0/LmluZGV4T2Yob3B0aW9uLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvbnNDaGFuZ2UkOiBPYnNlcnZhYmxlPFF1ZXJ5TGlzdDxNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudD4+ID0gdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50LmNoYW5nZXM7XG5cbiAgICBjb25zdCBzb3J0ZWRPcHRpb25zJCA9IG9wdGlvbnNDaGFuZ2UkLnBpcGUoXG4gICAgICBtYXAoKG9wdGlvbnMpID0+IG9wdGlvbnMudG9BcnJheSgpKSxcbiAgICAgIGZpbHRlcigob3B0aW9ucykgPT4gb3B0aW9ucy5sZW5ndGggPiAwKSxcbiAgICAgIG1hcCgob3B0aW9ucykgPT4gb3B0aW9ucy5zb3J0KChhLCBiKSA9PiBpbmRleE9mT3B0aW9uKGEpIC0gaW5kZXhPZk9wdGlvbihiKSkpLFxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpXG4gICAgKTtcblxuICAgIHNvcnRlZE9wdGlvbnMkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKHNvcnRlZE9wdGlvbnMpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQucmVzZXQoc29ydGVkT3B0aW9ucyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNjcm9sbFZpZXdwb3J0Vmlldy5jaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgbWFwKChjaGFuZ2VzKSA9PiBjaGFuZ2VzLnRvQXJyYXkoKVswXSksXG4gICAgICAgIHRhcCgoc2Nyb2xsVmlld3BvcnQpID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuc2Nyb2xsVmlld3BvcnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVmlld3BvcnQgPSBzY3JvbGxWaWV3cG9ydDtcblxuICAgICAgICAgICAgY29uc3QgY2RrVmlydHVhbFNjcm9sbENvbnRlbnRXcmFwcGVyID0gdGhpcy5zY3JvbGxWaWV3cG9ydC5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudD8uZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICBpZiAoY2RrVmlydHVhbFNjcm9sbENvbnRlbnRXcmFwcGVyKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN0eWxlID1cbiAgICAgICAgICAgICAgICB0aGlzLiNkb2N1bWVudC5kZWZhdWx0Vmlldz8uZ2V0Q29tcHV0ZWRTdHlsZShjZGtWaXJ0dWFsU2Nyb2xsQ29udGVudFdyYXBwZXIsIG51bGwpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgY29uc3QgcGFkZGluZyA9IHBhcnNlSW50KHN0eWxlPy5nZXRQcm9wZXJ0eVZhbHVlKCdwYWRkaW5nLWxlZnQnKSA/PyAnMTJweCcpICogMztcblxuICAgICAgICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvblJlY29yZHMpID0+IHtcbiAgICAgICAgICAgICAgICBtdXRhdGlvblJlY29yZHMuZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNoaWxkLmFkZGVkTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gJ0MtTVVMVEktU0VMRUNULU9QVElPTicpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWR0aCA9IChub2RlIGFzIEhUTUxFbGVtZW50KS5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGggPiB0aGlzLml0ZW1NaW5XaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtTWluV2lkdGggPSB3aWR0aCArIHBhZGRpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgb2JzZXJ2ZXI/Lm9ic2VydmUoY2RrVmlydHVhbFNjcm9sbENvbnRlbnRXcmFwcGVyLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcblxuICAgICAgICAgICAgICB0aGlzLiNkZXN0cm95JC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRMaXN0S2V5TWFuYWdlcigpIHtcbiAgICAvLyBydW4gb25jZSBvbiBtdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50IGZpcnN0IHNldFxuICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudC5jaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChjaGFuZ2VzKSA9PiB0aGlzLnZpcnR1YWxTY3JvbGxlciksXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRGb2N1c0tleU1hbmFnZXIodGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50KTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgc2V0Rm9jdXNLZXlNYW5hZ2VyKGZvY3VzYWJsZU9wdGlvbnM6IFF1ZXJ5TGlzdDxNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudD4gfCBNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudFtdKSB7XG4gICAgLy8gdGhpcy5mb2N1c0tleU1hbmFnZXI/LmRlc3Ryb3koKTtcblxuICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyID0gbmV3IEZvY3VzS2V5TWFuYWdlcihmb2N1c2FibGVPcHRpb25zKVxuICAgICAgLndpdGhIb21lQW5kRW5kKClcbiAgICAgIC53aXRoUGFnZVVwRG93bigpXG4gICAgICAuc2tpcFByZWRpY2F0ZSgob3B0aW9uKSA9PiBvcHRpb24uZGlzYWJsZWQgfHwgIW9wdGlvbi52aXNpYmxlKTtcblxuICAgIGlmICghdGhpcy5fdmlydHVhbFNjcm9sbGVyKSB7XG4gICAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci53aXRoVHlwZUFoZWFkKDMwMCk7XG4gICAgfVxuXG4gICAgdGhpcy5mb2N1c0tleU1hbmFnZXIudGFiT3V0XG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIC8qIGVtcHR5ICovXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci5jaGFuZ2UucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZikpLnN1YnNjcmliZSgoY2hhbmdlKSA9PiB7XG4gICAgICBpZiAoY2hhbmdlIDwgMCkge1xuICAgICAgICB0aGlzLmFjdGl2ZU9wdGlvbiA/IHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odGhpcy5hY3RpdmVPcHRpb24pIDogdGhpcy5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtKSB7XG4gICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uYWN0aXZlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWN0aXZlT3B0aW9uID0gdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbTtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IDxNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudD50aGlzLmFjdGl2ZU9wdGlvbjtcbiAgICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLmZvY3VzQ2hhbmdlKG9wdGlvbik7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc1ZpZXcubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgfSk7XG5cbiAgICAvLyBpZiAoIXRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0pIHtcbiAgICAvLyAgIHRoaXMuc2V0Rmlyc3RJdGVtQWN0aXZlKCk7XG4gICAgLy8gfVxuICB9XG5cbiAgZ2V0IGZpcnN0Rm9jdXNhYmxlSXRlbSgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50Py5maW5kKChvcHRpb24pID0+IG9wdGlvbi52aXNpYmxlICYmICFvcHRpb24uZGlzYWJsZWQpID8/XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc1ZpZXc/LmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZpc2libGUgJiYgIW9wdGlvbi5kaXNhYmxlZClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGaXJzdEl0ZW1BY3RpdmUoKSB7XG4gICAgY29uc3QgZmlyc3RGb2N1c2FibGVJdGVtID0gdGhpcy5maXJzdEZvY3VzYWJsZUl0ZW07XG4gICAgZmlyc3RGb2N1c2FibGVJdGVtXG4gICAgICA/IHRoaXMuZm9jdXNLZXlNYW5hZ2VyPy5zZXRBY3RpdmVJdGVtKGZpcnN0Rm9jdXNhYmxlSXRlbSlcbiAgICAgIDogdGhpcy5mb2N1c0tleU1hbmFnZXI/LnNldEZpcnN0SXRlbUFjdGl2ZSgpO1xuICAgIHRoaXMuYWN0aXZlT3B0aW9uID0gdGhpcy5mb2N1c0tleU1hbmFnZXI/LmFjdGl2ZUl0ZW0gPz8gbnVsbDtcbiAgfVxuXG4gIHVwZGF0ZUFjdGl2ZUl0ZW0oaW5kZXg6IG51bWJlcik6IHZvaWQ7XG5cbiAgdXBkYXRlQWN0aXZlSXRlbTxUSXRlbSBleHRlbmRzIE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50ICYgRm9jdXNhYmxlT3B0aW9uPihpdGVtOiBUSXRlbSk6IHZvaWQ7XG5cbiAgdXBkYXRlQWN0aXZlSXRlbShpdGVtOiBhbnkpIHtcbiAgICBjb25zdCBmaXJzdEZvY3VzYWJsZUl0ZW0gPSB0aGlzLmZpcnN0Rm9jdXNhYmxlSXRlbSA/PyBpdGVtO1xuICAgIGZpcnN0Rm9jdXNhYmxlSXRlbVxuICAgICAgPyB0aGlzLmZvY3VzS2V5TWFuYWdlcj8udXBkYXRlQWN0aXZlSXRlbShmaXJzdEZvY3VzYWJsZUl0ZW0pXG4gICAgICA6IHRoaXMuZm9jdXNLZXlNYW5hZ2VyPy51cGRhdGVBY3RpdmVJdGVtKDApO1xuICAgIGlmICh0aGlzLmZvY3VzS2V5TWFuYWdlcj8uYWN0aXZlSXRlbSkge1xuICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50Py5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgICAgb3B0aW9uLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc1ZpZXc/LmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgICBvcHRpb24uYWN0aXZlID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uYWN0aXZlID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVPcHRpb24gPSB0aGlzLmZvY3VzS2V5TWFuYWdlcj8uYWN0aXZlSXRlbSA/PyBudWxsO1xuICB9XG5cbiAgaGFuZGxlSW5kaWNhdG9yQ2xpY2soJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMudmlzaWJsZSA9ICF0aGlzLnZpc2libGU7XG4gIH1cbn1cbiIsIjxjLWRyb3Bkb3duICNkcm9wZG93bj1cImNEcm9wZG93blwiXG4gICAgICAgICAgICBbKHZpc2libGUpXT1cInZpc2libGVcIlxuICAgICAgICAgICAgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwibXVsdGlzZWxlY3RDbGFzc2VzXCJcbiAgICAgICAgICAgIFtwb3BwZXJPcHRpb25zXT1cInBvcHBlck9wdGlvbnNcIj5cbiAgPGRpdiAjZHJvcGRvd25Ub2dnbGU9XCJjRHJvcGRvd25Ub2dnbGVcIiBbY2FyZXRdPVwiZmFsc2VcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBjRHJvcGRvd25Ub2dnbGUgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgY2xhc3M9XCJmb3JtLW11bHRpLXNlbGVjdC1pbnB1dC1ncm91cFwiPlxuICAgIDxzcGFuXG4gICAgICBbbmdDbGFzc109XCJ7J2Zvcm0tbXVsdGktc2VsZWN0LXNlbGVjdGlvbic6IHRydWUsICdmb3JtLW11bHRpLXNlbGVjdC1zZWxlY3Rpb24tdGFncyc6IChzZWxlY3Rpb25UeXBlID09PSAndGFncycgJiYgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCl9XCI+XG4gICAgICBAaWYgKHNlbGVjdGlvblR5cGUgPT09ICd0YWdzJykge1xuICAgICAgICBAaWYgKG9wdGlvbnNTZWxlY3RlZCQgfCBhc3luYzsgYXMgb3B0aW9uVGFncykge1xuICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBvcHRpb25UYWdzOyB0cmFjayBvcHRpb24udmFsdWU7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICA8Yy1tdWx0aS1zZWxlY3QtdGFnXG4gICAgICAgICAgICAgIChyZW1vdmUpPVwiaGFuZGxlVGFnUmVtb3ZlKCRldmVudClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIm9wdGlvbi5sYWJlbCA/PyBvcHRpb24udmFsdWU/LnRvU3RyaW5nKClcIlxuICAgICAgICAgICAgICBbb3B0aW9uXT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tbXVsdGktc2VsZWN0LXRhZyB0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBAZWxzZSBpZiAoc2VsZWN0aW9uVHlwZSA9PT0gJ3RleHQnICYmICEhc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBAZm9yIChvcHRpb24gb2Ygc2VsZWN0ZWRPcHRpb25zOyB0cmFjayBvcHRpb24udmFsdWU7IGxldCBpID0gJGluZGV4LCBsYXN0ID0gJGxhc3QpIHtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tbXVsdGktc2VsZWN0LXRleHQgdGV4dC10cnVuY2F0ZVwiPnt7IG9wdGlvbi5sYWJlbCB9fXt7IGxhc3QgPyAnJm5ic3A7JyA6ICcsJm5ic3A7JyB9fTwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQGlmICghc2VhcmNoKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1wbGFjZWhvbGRlciB0ZXh0LXRydW5jYXRlXCI+XG4gICAgICAgICAge3sgb3B0aW9uc1NlbGVjdGVkLnNpemUgPT09IDAgPyBwbGFjZWhvbGRlciA6IGNvdW50ZXJQbGFjZWhvbGRlclRleHQgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgfVxuICAgICAgQGlmIChzZWFyY2gpIHtcbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgI2lucHV0RWxlbWVudFxuICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZVNlYXJjaEtleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImhhbmRsZVNlYXJjaFZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cInNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPT09IDAgPyBwbGFjZWhvbGRlciA6IGNvdW50ZXJQbGFjZWhvbGRlclRleHRcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCAhc2VhcmNoXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdmb3JtLW11bHRpLXNlbGVjdC1zZWFyY2gnOiB0cnVlLCBkaXNhYmxlZDogKGRpc2FibGVkIHx8ICFzZWFyY2gpLCAndGV4dC10cnVuY2F0ZSc6IHRydWUgfVwiXG4gICAgICAgICAgW25nTW9kZWxdPVwic2VhcmNoVmFsdWVcIlxuICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hWYWx1ZVwiXG4gICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICBjTXVsdGlTZWxlY3RTZWFyY2hcbiAgICAgICAgICBzaXplPVwiMlwiXG4gICAgICAgICAgdGFiaW5kZXg9XCJ7eyBkaXNhYmxlZCA/IC0xIDogMCB9fVwiXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICA+XG4gICAgICB9XG4gICAgPC9zcGFuPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLW11bHRpLXNlbGVjdC1idXR0b25zXCI+XG4gICAgICBAaWYgKCEhY2xlYW5lciAmJiBvcHRpb25zU2VsZWN0ZWQuc2l6ZSA+IDAgJiYgIWRpc2FibGVkKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXJBbGxPcHRpb25zKCRldmVudClcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCAoIWlzRHJvcGRvd25WaXNpYmxlICYmIGNsZWFuZXIgIT09ICdhY3RpdmUnKVwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyIGFsbFwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLW11bHRpLXNlbGVjdC1jbGVhbmVyXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgfVxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiaGFuZGxlSW5kaWNhdG9yQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3QtaW5kaWNhdG9yXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICBAaWYgKCFkaXNhYmxlZCkge1xuICAgIDxkaXYgI2Ryb3Bkb3duTWVudT1cImNEcm9wZG93bk1lbnVcIiBbdmlzaWJsZV09XCJkcm9wZG93bi52aXNpYmxlXCIgY0Ryb3Bkb3duTWVudVxuICAgICAgICAgY2xhc3M9XCJmb3JtLW11bHRpLXNlbGVjdC1kcm9wZG93blwiIHJvbGU9XCJtZW51XCI+XG4gICAgICBAaWYgKHZpc2libGVPcHRpb25zKCkgJiYgb3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIEBpZiAoc2VsZWN0QWxsICYmIG11bHRpcGxlICYmICF2aXJ0dWFsU2Nyb2xsZXIpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0QWxsT3B0aW9ucygpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3QtYWxsXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBzZWxlY3RBbGxMYWJlbCB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBAaWYgKCh2aXNpYmxlT3B0aW9ucygpICYmIG9wdGlvbnMubGVuZ3RoID4gMCkgfHwgaXNMb2FkaW5nKCkpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInZpcnR1YWxTY3JvbGxlciA/IG11bHRpc2VsZWN0VmlydHVhbFNjcm9sbGVyIDogbXVsdGlzZWxlY3RPcHRpb25zRGl2XCIgLz5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3Qtb3B0aW9ucy1lbXB0eVwiPnt7IHNlYXJjaE5vUmVzdWx0c0xhYmVsIH19PC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKGlzTG9hZGluZygpKSB7XG4gICAgICAgIDxjLWVsZW1lbnQtY292ZXIgW25nU3R5bGVdPVwieydib3JkZXItcmFkaXVzJzogJzZweCcsICd6LWluZGV4JzogMn1cIiAvPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L2MtZHJvcGRvd24+XG5cbjxuZy10ZW1wbGF0ZSAjbXVsdGlzZWxlY3RWaXJ0dWFsU2Nyb2xsZXI+XG4gIEBkZWZlciAob24gaW1tZWRpYXRlKSB7XG4gICAgQGlmICgob3B0aW9uc0FycmF5JCB8IGFzeW5jKTsgYXMgb3B0aW9uc0FycmF5KSB7XG4gICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgICAgICNzY3JvbGxWaWV3cG9ydFxuICAgICAgICAoc2Nyb2xsZWRJbmRleENoYW5nZSk9XCJoYW5kbGVTY3JvbGxlZEluZGV4Q2hhbmdlKCRldmVudCwgc2Nyb2xsVmlld3BvcnQpXCJcbiAgICAgICAgW2l0ZW1TaXplXT1cIml0ZW1TaXplXCJcbiAgICAgICAgW25nU3R5bGVdPVwib3B0aW9uc01heEhlaWdodCAhPT0gJ2F1dG8nID8geyAnaGVpZ2h0LnB4Jzogb3B0aW9uc01heEhlaWdodCwgJ21heEhlaWdodC5weCc6IG9wdGlvbnNNYXhIZWlnaHQsICdtaW5XaWR0aC5weCc6IG1pbldpZHRoKCksIG92ZXJmbG93WDogJ2hpZGRlbicgfSA6IHsgJ21pbldpZHRoLnB4JzogbWluV2lkdGgoKSwgb3ZlcmZsb3dYOiAnaGlkZGVuJ31cIlxuICAgICAgICBtYXhCdWZmZXJQeD1cInt7aXRlbVNpemUgKiB2aXNpYmxlSXRlbXN9fVwiXG4gICAgICAgIG1pbkJ1ZmZlclB4PVwie3tpdGVtU2l6ZSAqIHZpc2libGVJdGVtc319XCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLW11bHRpLXNlbGVjdC1vcHRpb25zXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAjY2RrVmlydHVhbEZvclxuICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zQXJyYXk7IHRyYWNrQnk6IHRyYWNrQnlGbjsgdGVtcGxhdGVDYWNoZVNpemU6IDA7IGV2ZW4gYXMgZXZlbjsgb2RkIGFzIG9kZDsgaW5kZXggYXMgaW5kZXg7IGNvdW50IGFzIGNvdW50OyBmaXJzdCBhcyBmaXJzdDsgbGFzdCBhcyBsYXN0O1wiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IG9wdGlvbiwgZXZlbiwgb2RkLCBpbmRleCwgY291bnQsIGZpcnN0LCBsYXN0fVwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVzWydtdWx0aVNlbGVjdE9wdGlvblRlbXBsYXRlJ10gfHwgZGVmYXVsdE11bHRpU2VsZWN0T3B0aW9uVGVtcGxhdGVcIlxuICAgICAgICAvPlxuICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgfVxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI211bHRpc2VsZWN0T3B0aW9uc0Rpdj5cbiAgPGRpdlxuICAgIFtuZ0NsYXNzXT1cInsnZm9ybS1tdWx0aS1zZWxlY3Qtb3B0aW9ucyc6IHZpc2libGVPcHRpb25zKCl9XCJcbiAgICBbbmdTdHlsZV09XCJvcHRpb25zTWF4SGVpZ2h0ICE9PSAnYXV0bycgPyB7ICdtYXhIZWlnaHQucHgnOiBvcHRpb25zTWF4SGVpZ2h0LCBvdmVyZmxvd1k6ICdzY3JvbGwnIH0gOiB7fVwiXG4gID5cbiAgICA8bmctY29udGVudCAvPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwidXNlck9wdGlvbnNUZW1wbGF0ZVwiIC8+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0TXVsdGlTZWxlY3RPcHRpb25UZW1wbGF0ZSBsZXQtb3B0aW9uPlxuICA8Yy1tdWx0aS1zZWxlY3Qtb3B0aW9uXG4gICAgW2Rpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiXG4gICAgW2xhYmVsXT1cIm9wdGlvbi5sYWJlbFwiXG4gICAgW3RleHRdPVwib3B0aW9uLnRleHRcIlxuICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgIFt2aXNpYmxlXT1cIm9wdGlvbi52aXNpYmxlXCJcbiAgPlxuICAgIHt7IG9wdGlvbi50ZXh0IH19XG4gIDwvYy1tdWx0aS1zZWxlY3Qtb3B0aW9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN1c2VyT3B0aW9uc1RlbXBsYXRlPlxuICBAZm9yIChvcHRpb24gb2YgdXNlck9wdGlvbnNBcnJheSQgfCBhc3luYzsgdHJhY2sgb3B0aW9uOyBsZXQgZXZlbiA9ICRldmVuLCBvZGQgPSAkb2RkLCBpbmRleCA9ICRpbmRleCwgY291bnQgPSAkY291bnQsIGZpcnN0ID0gJGZpcnN0LCBsYXN0ID0gJGxhc3QpIHtcbiAgICA8bmctY29udGFpbmVyXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZXNbJ211bHRpU2VsZWN0T3B0aW9uVGVtcGxhdGUnXSB8fCBkZWZhdWx0TXVsdGlTZWxlY3RPcHRpb25UZW1wbGF0ZVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDogb3B0aW9uLCBldmVuLCBvZGQsIGluZGV4LCBjb3VudCwgZmlyc3QsIGxhc3R9XCJcbiAgICAvPlxuICB9XG48L25nLXRlbXBsYXRlPlxuIl19