text: /**
   * @license
   * Copyright Google LLC All Rights Reserved.
   *
   * Use of this source code is governed by an MIT-style license that can be
   * found in the LICENSE file at https://angular.io/license
   */
  import { __extends } from "tslib";
  import { Directionality } from '@angular/cdk/bidi';
  import { CdkStep, CdkStepper, STEPPER_GLOBAL_OPTIONS } from '@angular/cdk/stepper';
  import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, Directive, ElementRef, EventEmitter, forwardRef, Inject, Input, Optional, Output, QueryList, SkipSelf, ViewChildren, ViewEncapsulation, } from '@angular/core';
  import { DOCUMENT } from '@angular/common';
  import { ErrorStateMatcher } from '@angular/material/core';
  import { Subject } from 'rxjs';
  import { takeUntil, distinctUntilChanged } from 'rxjs/operators';
  import { MatStepHeader } from './step-header';
  import { MatStepLabel } from './step-label';
  import { matStepperAnimations } from './stepper-animations';
  import { MatStepperIcon } from './stepper-icon';
  import * as ɵngcc0 from '@angular/core';
  import * as ɵngcc1 from '@angular/material/core';
  import * as ɵngcc2 from '@angular/common';
  import * as ɵngcc3 from './step-header';
  import * as ɵngcc4 from '@angular/cdk/bidi';
  
  function MatStep_ng_template_0_Template(rf, ctx) { if (rf & 1) {
      ɵngcc0.ɵɵprojection(0);
  } }
  var _c0 = ["*"];
  function MatHorizontalStepper_ng_container_1_div_2_Template(rf, ctx) { if (rf & 1) {
      ɵngcc0.ɵɵelement(0, "div", 6);
  } }
  function MatHorizontalStepper_ng_container_1_Template(rf, ctx) { if (rf & 1) {
      var _r155 = ɵngcc0.ɵɵgetCurrentView();
      ɵngcc0.ɵɵelementContainerStart(0);
      ɵngcc0.ɵɵelementStart(1, "mat-step-header", 4);
      ɵngcc0.ɵɵlistener("click", function MatHorizontalStepper_ng_container_1_Template_mat_step_header_click_1_listener() { var step_r149 = ctx.$implicit; return step_r149.select(); })("keydown", function MatHorizontalStepper_ng_container_1_Template_mat_step_header_keydown_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r155); var ctx_r154 = ɵngcc0.ɵɵnextContext(); return ctx_r154._onKeydown($event); });
      ɵngcc0.ɵɵelementEnd();
      ɵngcc0.ɵɵtemplate(2, MatHorizontalStepper_ng_container_1_div_2_Template, 1, 0, "div", 5);
      ɵngcc0.ɵɵelementContainerEnd();
  } if (rf & 2) {
      var step_r149 = ctx.$implicit;
      var i_r150 = ctx.index;
      var isLast_r151 = ctx.last;
      var ctx_r147 = ɵngcc0.ɵɵnextContext();
      ɵngcc0.ɵɵadvance(1);
      ɵngcc0.ɵɵproperty("tabIndex", ctx_r147._getFocusIndex() === i_r150 ? 0 : 0 - 1)("id", ctx_r147._getStepLabelId(i_r150))("index", i_r150)("state", ctx_r147._getIndicatorType(i_r150, step_r149.state))("label", step_r149.stepLabel || step_r149.label)("selected", ctx_r147.selectedIndex === i_r150)("active", step_r149.completed || ctx_r147.selectedIndex === i_r150 || !ctx_r147.linear)("optional", step_r149.optional)("errorMessage", step_r149.errorMessage)("iconOverrides", ctx_r147._iconOverrides)("disableRipple", ctx_r147.disableRipple);
      ɵngcc0.ɵɵattribute("aria-posinset", i_r150 + 1)("aria-setsize", ctx_r147.steps.length)("aria-controls", ctx_r147._getStepContentId(i_r150))("aria-selected", ctx_r147.selectedIndex == i_r150)("aria-label", step_r149.ariaLabel || null)("aria-labelledby", !step_r149.ariaLabel && step_r149.ariaLabelledby ? step_r149.ariaLabelledby : null);
      ɵngcc0.ɵɵadvance(1);
      ɵngcc0.ɵɵproperty("ngIf", !isLast_r151);
  } }
  function MatHorizontalStepper_div_3_Template(rf, ctx) { if (rf & 1) {
      var _r159 = ɵngcc0.ɵɵgetCurrentView();
      ɵngcc0.ɵɵelementStart(0, "div", 7);
      ɵngcc0.ɵɵlistener("@stepTransition.done", function MatHorizontalStepper_div_3_Template_div_animation_stepTransition_done_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r159); var ctx_r158 = ɵngcc0.ɵɵnextContext(); return ctx_r158._animationDone.next($event); });
      ɵngcc0.ɵɵelementContainer(1, 8);
      ɵngcc0.ɵɵelementEnd();
  } if (rf & 2) {
      var step_r156 = ctx.$implicit;
      var i_r157 = ctx.index;
      var ctx_r148 = ɵngcc0.ɵɵnextContext();
      ɵngcc0.ɵɵproperty("@stepTransition", ctx_r148._getAnimationDirection(i_r157))("id", ctx_r148._getStepContentId(i_r157));
      ɵngcc0.ɵɵattribute("tabindex", ctx_r148.selectedIndex === i_r157 ? 0 : null)("aria-labelledby", ctx_r148._getStepLabelId(i_r157))("aria-expanded", ctx_r148.selectedIndex === i_r157);
      ɵngcc0.ɵɵadvance(1);
      ɵngcc0.ɵɵproperty("ngTemplateOutlet", step_r156.content);
  } }
  function MatVerticalStepper_div_0_Template(rf, ctx) { if (rf & 1) {
      var _r166 = ɵngcc0.ɵɵgetCurrentView();
      ɵngcc0.ɵɵelementStart(0, "div", 1);
      ɵngcc0.ɵɵelementStart(1, "mat-step-header", 2);
      ɵngcc0.ɵɵlistener("click", function MatVerticalStepper_div_0_Template_mat_step_header_click_1_listener() { var step_r161 = ctx.$implicit; return step_r161.select(); })("keydown", function MatVerticalStepper_div_0_Template_mat_step_header_keydown_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r166); var ctx_r165 = ɵngcc0.ɵɵnextContext(); return ctx_r165._onKeydown($event); });
      ɵngcc0.ɵɵelementEnd();
      ɵngcc0.ɵɵelementStart(2, "div", 3);
      ɵngcc0.ɵɵelementStart(3, "div", 4);
      ɵngcc0.ɵɵlistener("@stepTransition.done", function MatVerticalStepper_div_0_Template_div_animation_stepTransition_done_3_listener($event) { ɵngcc0.ɵɵrestoreView(_r166); var ctx_r167 = ɵngcc0.ɵɵnextContext(); return ctx_r167._animationDone.next($event); });
      ɵngcc0.ɵɵelementStart(4, "div", 5);
      ɵngcc0.ɵɵelementContainer(5, 6);
      ɵngcc0.ɵɵelementEnd();
      ɵngcc0.ɵɵelementEnd();
      ɵngcc0.ɵɵelementEnd();
      ɵngcc0.ɵɵelementEnd();
  } if (rf & 2) {
      var step_r161 = ctx.$implicit;
      var i_r162 = ctx.index;
      var isLast_r163 = ctx.last;
      var ctx_r160 = ɵngcc0.ɵɵnextContext();
      ɵngcc0.ɵɵadvance(1);
      ɵngcc0.ɵɵproperty("tabIndex", ctx_r160._getFocusIndex() == i_r162 ? 0 : 0 - 1)("id", ctx_r160._getStepLabelId(i_r162))("index", i_r162)("state", ctx_r160._getIndicatorType(i_r162, step_r161.state))("label", step_r161.stepLabel || step_r161.label)("selected", ctx_r160.selectedIndex === i_r162)("active", step_r161.completed || ctx_r160.selectedIndex === i_r162 || !ctx_r160.linear)("optional", step_r161.optional)("errorMessage", step_r161.errorMessage)("iconOverrides", ctx_r160._iconOverrides)("disableRipple", ctx_r160.disableRipple);
      ɵngcc0.ɵɵattribute("aria-posinset", i_r162 + 1)("aria-setsize", ctx_r160.steps.length)("aria-controls", ctx_r160._getStepContentId(i_r162))("aria-selected", ctx_r160.selectedIndex === i_r162)("aria-label", step_r161.ariaLabel || null)("aria-labelledby", !step_r161.ariaLabel && step_r161.ariaLabelledby ? step_r161.ariaLabelledby : null);
      ɵngcc0.ɵɵadvance(1);
      ɵngcc0.ɵɵclassProp("mat-stepper-vertical-line", !isLast_r163);
      ɵngcc0.ɵɵadvance(1);
      ɵngcc0.ɵɵproperty("@stepTransition", ctx_r160._getAnimationDirection(i_r162))("id", ctx_r160._getStepContentId(i_r162));
      ɵngcc0.ɵɵattribute("tabindex", ctx_r160.selectedIndex === i_r162 ? 0 : null)("aria-labelledby", ctx_r160._getStepLabelId(i_r162))("aria-expanded", ctx_r160.selectedIndex === i_r162);
      ɵngcc0.ɵɵadvance(2);
      ɵngcc0.ɵɵproperty("ngTemplateOutlet", step_r161.content);
  } }
  var MatStep = /** @class */ (function (_super) {
      __extends(MatStep, _super);
      /** @breaking-change 8.0.0 remove the `?` after `stepperOptions` */
      function MatStep(stepper, _errorStateMatcher, stepperOptions) {
          var _this = _super.call(this, stepper, stepperOptions) || this;
          _this._errorStateMatcher = _errorStateMatcher;
          return _this;
      }
      /** Custom error state matcher that additionally checks for validity of interacted form. */
      MatStep.prototype.isErrorState = function (control, form) {
          var originalErrorState = this._errorStateMatcher.isErrorState(control, form);
          // Custom error state checks for the validity of form that is not submitted or touched
          // since user can trigger a form change by calling for another step without directly
          // interacting with the current form.
          var customErrorState = !!(control && control.invalid && this.interacted);
          return originalErrorState || customErrorState;
      };
      /** @nocollapse */
      MatStep.ctorParameters = function () { return [
          { type: MatStepper, decorators: [{ type: Inject, args: [forwardRef(function () { return MatStepper; }),] }] },
          { type: ErrorStateMatcher, decorators: [{ type: SkipSelf }] },
          { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [STEPPER_GLOBAL_OPTIONS,] }] }
      ]; };
      MatStep.propDecorators = {
          stepLabel: [{ type: ContentChild, args: [MatStepLabel,] }]
      };
  MatStep.ɵfac = function MatStep_Factory(t) { return new (t || MatStep)(ɵngcc0.ɵɵdirectiveInject(forwardRef(function () { return MatStepper; })), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.ErrorStateMatcher, 4), ɵngcc0.ɵɵdirectiveInject(STEPPER_GLOBAL_OPTIONS, 8)); };
  MatStep.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatStep, selectors: [["mat-step"]], contentQueries: function MatStep_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
          ɵngcc0.ɵɵcontentQuery(dirIndex, MatStepLabel, true);
      } if (rf & 2) {
          var _t;
          ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.stepLabel = _t.first);
      } }, exportAs: ["matStep"], features: [ɵngcc0.ɵɵProvidersFeature([
              { provide: ErrorStateMatcher, useExisting: MatStep },
              { provide: CdkStep, useExisting: MatStep },
          ]), ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function MatStep_Template(rf, ctx) { if (rf & 1) {
          ɵngcc0.ɵɵprojectionDef();
          ɵngcc0.ɵɵtemplate(0, MatStep_ng_template_0_Template, 1, 0, "ng-template");
      } }, encapsulation: 2, changeDetection: 0 });
  /*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatStep, [{
          type: Component,
          args: [{
                  selector: 'mat-step',
                  template: "<ng-template><ng-content></ng-content></ng-template>\n",
                  providers: [
                      { provide: ErrorStateMatcher, useExisting: MatStep },
                      { provide: CdkStep, useExisting: MatStep },
                  ],
                  encapsulation: ViewEncapsulation.None,
                  exportAs: 'matStep',
                  changeDetection: ChangeDetectionStrategy.OnPush
              }]
      }], function () { return [{ type: MatStepper, decorators: [{
                  type: Inject,
                  args: [forwardRef(function () { return MatStepper; })]
              }] }, { type: ɵngcc1.ErrorStateMatcher, decorators: [{
                  type: SkipSelf
              }] }, { type: undefined, decorators: [{
                  type: Optional
              }, {
                  type: Inject,
                  args: [STEPPER_GLOBAL_OPTIONS]
              }] }]; }, { stepLabel: [{
              type: ContentChild,
              args: [MatStepLabel]
          }] }); })();
      return MatStep;
  }(CdkStep));
  export { MatStep };
  var MatStepper = /** @class */ (function (_super) {
      __extends(MatStepper, _super);
      function MatStepper() {
          var _this = _super !== null && _super.apply(this, arguments) || this;
          /** Event emitted when the current step is done transitioning in. */
          _this.animationDone = new EventEmitter();
          /** Consumer-specified template-refs to be used to override the header icons. */
          _this._iconOverrides = {};
          /** Stream of animation `done` events when the body expands/collapses. */
          _this._animationDone = new Subject();
          return _this;
      }
      MatStepper.prototype.ngAfterContentInit = function () {
          var _this = this;
          this._icons.forEach(function (_a) {
              var name = _a.name, templateRef = _a.templateRef;
              return _this._iconOverrides[name] = templateRef;
          });
          // Mark the component for change detection whenever the content children query changes
          this._steps.changes.pipe(takeUntil(this._destroyed)).subscribe(function () {
              _this._stateChanged();
          });
          this._animationDone.pipe(
          // This needs a `distinctUntilChanged` in order to avoid emitting the same event twice due
          // to a bug in animations where the `.done` callback gets invoked twice on some browsers.
          // See https://github.com/angular/angular/issues/24084
          distinctUntilChanged(function (x, y) { return x.fromState === y.fromState && x.toState === y.toState; }), takeUntil(this._destroyed)).subscribe(function (event) {
              if (event.toState === 'current') {
                  _this.animationDone.emit();
              }
          });
      };
      MatStepper.propDecorators = {
          _stepHeader: [{ type: ViewChildren, args: [MatStepHeader,] }],
          _steps: [{ type: ContentChildren, args: [MatStep, { descendants: true },] }],
          _icons: [{ type: ContentChildren, args: [MatStepperIcon, { descendants: true },] }],
          animationDone: [{ type: Output }],
          disableRipple: [{ type: Input }]
      };
  MatStepper.ɵfac = function MatStepper_Factory(t) { return ɵMatStepper_BaseFactory(t || MatStepper); };
  MatStepper.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatStepper, selectors: [["", "matStepper", ""]], contentQueries: function MatStepper_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
          ɵngcc0.ɵɵcontentQuery(dirIndex, MatStep, true);
          ɵngcc0.ɵɵcontentQuery(dirIndex, MatStepperIcon, true);
      } if (rf & 2) {
          var _t;
          ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._steps = _t);
          ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._icons = _t);
      } }, viewQuery: function MatStepper_Query(rf, ctx) { if (rf & 1) {
          ɵngcc0.ɵɵviewQuery(MatStepHeader, true);
      } if (rf & 2) {
          var _t;
          ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._stepHeader = _t);
      } }, inputs: { disableRipple: "disableRipple" }, outputs: { animationDone: "animationDone" }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CdkStepper, useExisting: MatStepper }]), ɵngcc0.ɵɵInheritDefinitionFeature] });
  var ɵMatStepper_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatStepper);
  /*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatStepper, [{
          type: Directive,
          args: [{ selector: '[matStepper]', providers: [{ provide: CdkStepper, useExisting: MatStepper }] }]
      }], null, { _stepHeader: [{
              type: ViewChildren,
              args: [MatStepHeader]
          }], _steps: [{
              type: ContentChildren,
              args: [MatStep, { descendants: true }]
          }], _icons: [{
              type: ContentChildren,
              args: [MatStepperIcon, { descendants: true }]
          }], animationDone: [{
              type: Output
          }], disableRipple: [{
              type: Input
          }] }); })();
      return MatStepper;
  }(CdkStepper));
  export { MatStepper };
  var MatHorizontalStepper = /** @class */ (function (_super) {
      __extends(MatHorizontalStepper, _super);
      function MatHorizontalStepper() {
          var _this = _super !== null && _super.apply(this, arguments) || this;
          /** Whether the label should display in bottom or end position. */
          _this.labelPosition = 'end';
          return _this;
      }
      MatHorizontalStepper.propDecorators = {
          labelPosition: [{ type: Input }]
      };
  MatHorizontalStepper.ɵfac = function MatHorizontalStepper_Factory(t) { return ɵMatHorizontalStepper_BaseFactory(t || MatHorizontalStepper); };
  MatHorizontalStepper.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatHorizontalStepper, selectors: [["mat-horizontal-stepper"]], hostAttrs: ["aria-orientation", "horizontal", "role", "tablist", 1, "mat-stepper-horizontal"], hostVars: 4, hostBindings: function MatHorizontalStepper_HostBindings(rf, ctx) { if (rf & 2) {
          ɵngcc0.ɵɵclassProp("mat-stepper-label-position-end", ctx.labelPosition == "end")("mat-stepper-label-position-bottom", ctx.labelPosition == "bottom");
      } }, inputs: { selectedIndex: "selectedIndex", labelPosition: "labelPosition" }, exportAs: ["matHorizontalStepper"], features: [ɵngcc0.ɵɵProvidersFeature([
              { provide: MatStepper, useExisting: MatHorizontalStepper },
              { provide: CdkStepper, useExisting: MatHorizontalStepper }
          ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 4, vars: 2, consts: [[1, "mat-horizontal-stepper-header-container"], [4, "ngFor", "ngForOf"], [1, "mat-horizontal-content-container"], ["class", "mat-horizontal-stepper-content", "role", "tabpanel", 3, "id", 4, "ngFor", "ngForOf"], [1, "mat-horizontal-stepper-header", 3, "tabIndex", "id", "index", "state", "label", "selected", "active", "optional", "errorMessage", "iconOverrides", "disableRipple", "click", "keydown"], ["class", "mat-stepper-horizontal-line", 4, "ngIf"], [1, "mat-stepper-horizontal-line"], ["role", "tabpanel", 1, "mat-horizontal-stepper-content", 3, "id"], [3, "ngTemplateOutlet"]], template: function MatHorizontalStepper_Template(rf, ctx) { if (rf & 1) {
          ɵngcc0.ɵɵelementStart(0, "div", 0);
          ɵngcc0.ɵɵtemplate(1, MatHorizontalStepper_ng_container_1_Template, 3, 18, "ng-container", 1);
          ɵngcc0.ɵɵelementEnd();
          ɵngcc0.ɵɵelementStart(2, "div", 2);
          ɵngcc0.ɵɵtemplate(3, MatHorizontalStepper_div_3_Template, 2, 6, "div", 3);
          ɵngcc0.ɵɵelementEnd();
      } if (rf & 2) {
          ɵngcc0.ɵɵadvance(1);
          ɵngcc0.ɵɵproperty("ngForOf", ctx.steps);
          ɵngcc0.ɵɵadvance(2);
          ɵngcc0.ɵɵproperty("ngForOf", ctx.steps);
      } }, directives: [ɵngcc2.NgForOf, ɵngcc3.MatStepHeader, ɵngcc2.NgIf, ɵngcc2.NgTemplateOutlet], styles: [".mat-stepper-vertical,.mat-stepper-horizontal{display:block}.mat-horizontal-stepper-header-container{white-space:nowrap;display:flex;align-items:center}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header-container{align-items:flex-start}.mat-stepper-horizontal-line{border-top-width:1px;border-top-style:solid;flex:auto;height:0;margin:0 -16px;min-width:32px}.mat-stepper-label-position-bottom .mat-stepper-horizontal-line{margin:0;min-width:0;position:relative;top:36px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{border-top-width:1px;border-top-style:solid;content:\"\";display:inline-block;height:0;position:absolute;top:36px;width:calc(50% - 20px)}.mat-horizontal-stepper-header{display:flex;height:72px;overflow:hidden;align-items:center;padding:0 24px}.mat-horizontal-stepper-header .mat-step-icon{margin-right:8px;flex:none}[dir=rtl] .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:8px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header{box-sizing:border-box;flex-direction:column;height:auto;padding:24px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{right:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before{left:0}[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:last-child::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:first-child::after{display:none}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-label{padding:16px 0 0 0;text-align:center;width:100%}.mat-vertical-stepper-header{display:flex;align-items:center;padding:24px;height:24px}.mat-vertical-stepper-header .mat-step-icon{margin-right:12px}[dir=rtl] .mat-vertical-stepper-header .mat-step-icon{margin-right:0;margin-left:12px}.mat-horizontal-stepper-content{outline:0}.mat-horizontal-stepper-content[aria-expanded=false]{height:0;overflow:hidden}.mat-horizontal-content-container{overflow:hidden;padding:0 24px 24px 24px}.mat-vertical-content-container{margin-left:36px;border:0;position:relative}[dir=rtl] .mat-vertical-content-container{margin-left:0;margin-right:36px}.mat-stepper-vertical-line::before{content:\"\";position:absolute;top:-16px;bottom:-16px;left:0;border-left-width:1px;border-left-style:solid}[dir=rtl] .mat-stepper-vertical-line::before{left:auto;right:0}.mat-vertical-stepper-content{overflow:hidden;outline:0}.mat-vertical-content{padding:0 24px 24px 24px}.mat-step:last-child .mat-vertical-content-container{border:none}\n"], encapsulation: 2, data: { animation: [matStepperAnimations.horizontalStepTransition] }, changeDetection: 0 });
  var ɵMatHorizontalStepper_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatHorizontalStepper);
  /*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatHorizontalStepper, [{
          type: Component,
          args: [{
                  selector: 'mat-horizontal-stepper',
                  exportAs: 'matHorizontalStepper',
                  template: "<div class=\"mat-horizontal-stepper-header-container\">\n  <ng-container *ngFor=\"let step of steps; let i = index; let isLast = last\">\n    <mat-step-header class=\"mat-horizontal-stepper-header\"\n                     (click)=\"step.select()\"\n                     (keydown)=\"_onKeydown($event)\"\n                     [tabIndex]=\"_getFocusIndex() === i ? 0 : -1\"\n                     [id]=\"_getStepLabelId(i)\"\n                     [attr.aria-posinset]=\"i + 1\"\n                     [attr.aria-setsize]=\"steps.length\"\n                     [attr.aria-controls]=\"_getStepContentId(i)\"\n                     [attr.aria-selected]=\"selectedIndex == i\"\n                     [attr.aria-label]=\"step.ariaLabel || null\"\n                     [attr.aria-labelledby]=\"(!step.ariaLabel && step.ariaLabelledby) ? step.ariaLabelledby : null\"\n                     [index]=\"i\"\n                     [state]=\"_getIndicatorType(i, step.state)\"\n                     [label]=\"step.stepLabel || step.label\"\n                     [selected]=\"selectedIndex === i\"\n                     [active]=\"step.completed || selectedIndex === i || !linear\"\n                     [optional]=\"step.optional\"\n                     [errorMessage]=\"step.errorMessage\"\n                     [iconOverrides]=\"_iconOverrides\"\n                     [disableRipple]=\"disableRipple\">\n    </mat-step-header>\n    <div *ngIf=\"!isLast\" class=\"mat-stepper-horizontal-line\"></div>\n  </ng-container>\n</div>\n\n<div class=\"mat-horizontal-content-container\">\n  <div *ngFor=\"let step of steps; let i = index\"\n       [attr.tabindex]=\"selectedIndex === i ? 0 : null\"\n       class=\"mat-horizontal-stepper-content\" role=\"tabpanel\"\n       [@stepTransition]=\"_getAnimationDirection(i)\"\n       (@stepTransition.done)=\"_animationDone.next($event)\"\n       [id]=\"_getStepContentId(i)\"\n       [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n       [attr.aria-expanded]=\"selectedIndex === i\">\n    <ng-container [ngTemplateOutlet]=\"step.content\"></ng-container>\n  </div>\n</div>\n",
                  inputs: ['selectedIndex'],
                  host: {
                      'class': 'mat-stepper-horizontal',
                      '[class.mat-stepper-label-position-end]': 'labelPosition == "end"',
                      '[class.mat-stepper-label-position-bottom]': 'labelPosition == "bottom"',
                      'aria-orientation': 'horizontal',
                      'role': 'tablist'
                  },
                  animations: [matStepperAnimations.horizontalStepTransition],
                  providers: [
                      { provide: MatStepper, useExisting: MatHorizontalStepper },
                      { provide: CdkStepper, useExisting: MatHorizontalStepper }
                  ],
                  encapsulation: ViewEncapsulation.None,
                  changeDetection: ChangeDetectionStrategy.OnPush,
                  styles: [".mat-stepper-vertical,.mat-stepper-horizontal{display:block}.mat-horizontal-stepper-header-container{white-space:nowrap;display:flex;align-items:center}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header-container{align-items:flex-start}.mat-stepper-horizontal-line{border-top-width:1px;border-top-style:solid;flex:auto;height:0;margin:0 -16px;min-width:32px}.mat-stepper-label-position-bottom .mat-stepper-horizontal-line{margin:0;min-width:0;position:relative;top:36px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{border-top-width:1px;border-top-style:solid;content:\"\";display:inline-block;height:0;position:absolute;top:36px;width:calc(50% - 20px)}.mat-horizontal-stepper-header{display:flex;height:72px;overflow:hidden;align-items:center;padding:0 24px}.mat-horizontal-stepper-header .mat-step-icon{margin-right:8px;flex:none}[dir=rtl] .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:8px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header{box-sizing:border-box;flex-direction:column;height:auto;padding:24px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{right:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before{left:0}[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:last-child::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:first-child::after{display:none}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-label{padding:16px 0 0 0;text-align:center;width:100%}.mat-vertical-stepper-header{display:flex;align-items:center;padding:24px;height:24px}.mat-vertical-stepper-header .mat-step-icon{margin-right:12px}[dir=rtl] .mat-vertical-stepper-header .mat-step-icon{margin-right:0;margin-left:12px}.mat-horizontal-stepper-content{outline:0}.mat-horizontal-stepper-content[aria-expanded=false]{height:0;overflow:hidden}.mat-horizontal-content-container{overflow:hidden;padding:0 24px 24px 24px}.mat-vertical-content-container{margin-left:36px;border:0;position:relative}[dir=rtl] .mat-vertical-content-container{margin-left:0;margin-right:36px}.mat-stepper-vertical-line::before{content:\"\";position:absolute;top:-16px;bottom:-16px;left:0;border-left-width:1px;border-left-style:solid}[dir=rtl] .mat-stepper-vertical-line::before{left:auto;right:0}.mat-vertical-stepper-content{overflow:hidden;outline:0}.mat-vertical-content{padding:0 24px 24px 24px}.mat-step:last-child .mat-vertical-content-container{border:none}\n"]
              }]
      }], null, { labelPosition: [{
              type: Input
          }] }); })();
      return MatHorizontalStepper;
  }(MatStepper));
  export { MatHorizontalStepper };
  var MatVerticalStepper = /** @class */ (function (_super) {
      __extends(MatVerticalStepper, _super);
      function MatVerticalStepper(dir, changeDetectorRef, 
      // @breaking-change 8.0.0 `elementRef` and `_document` parameters to become required.
      elementRef, _document) {
          var _this = _super.call(this, dir, changeDetectorRef, elementRef, _document) || this;
          _this._orientation = 'vertical';
          return _this;
      }
      /** @nocollapse */
      MatVerticalStepper.ctorParameters = function () { return [
          { type: Directionality, decorators: [{ type: Optional }] },
          { type: ChangeDetectorRef },
          { type: ElementRef },
          { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }
      ]; };
  MatVerticalStepper.ɵfac = function MatVerticalStepper_Factory(t) { return new (t || MatVerticalStepper)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.Directionality, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(DOCUMENT)); };
  MatVerticalStepper.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatVerticalStepper, selectors: [["mat-vertical-stepper"]], hostAttrs: ["aria-orientation", "vertical", "role", "tablist", 1, "mat-stepper-vertical"], inputs: { selectedIndex: "selectedIndex" }, exportAs: ["matVerticalStepper"], features: [ɵngcc0.ɵɵProvidersFeature([
              { provide: MatStepper, useExisting: MatVerticalStepper },
              { provide: CdkStepper, useExisting: MatVerticalStepper }
          ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [["class", "mat-step", 4, "ngFor", "ngForOf"], [1, "mat-step"], [1, "mat-vertical-stepper-header", 3, "tabIndex", "id", "index", "state", "label", "selected", "active", "optional", "errorMessage", "iconOverrides", "disableRipple", "click", "keydown"], [1, "mat-vertical-content-container"], ["role", "tabpanel", 1, "mat-vertical-stepper-content", 3, "id"], [1, "mat-vertical-content"], [3, "ngTemplateOutlet"]], template: function MatVerticalStepper_Template(rf, ctx) { if (rf & 1) {
          ɵngcc0.ɵɵtemplate(0, MatVerticalStepper_div_0_Template, 6, 25, "div", 0);
      } if (rf & 2) {
          ɵngcc0.ɵɵproperty("ngForOf", ctx.steps);
      } }, directives: [ɵngcc2.NgForOf, ɵngcc3.MatStepHeader, ɵngcc2.NgTemplateOutlet], styles: [".mat-stepper-vertical,.mat-stepper-horizontal{display:block}.mat-horizontal-stepper-header-container{white-space:nowrap;display:flex;align-items:center}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header-container{align-items:flex-start}.mat-stepper-horizontal-line{border-top-width:1px;border-top-style:solid;flex:auto;height:0;margin:0 -16px;min-width:32px}.mat-stepper-label-position-bottom .mat-stepper-horizontal-line{margin:0;min-width:0;position:relative;top:36px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{border-top-width:1px;border-top-style:solid;content:\"\";display:inline-block;height:0;position:absolute;top:36px;width:calc(50% - 20px)}.mat-horizontal-stepper-header{display:flex;height:72px;overflow:hidden;align-items:center;padding:0 24px}.mat-horizontal-stepper-header .mat-step-icon{margin-right:8px;flex:none}[dir=rtl] .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:8px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header{box-sizing:border-box;flex-direction:column;height:auto;padding:24px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{right:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before{left:0}[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:last-child::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:first-child::after{display:none}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-label{padding:16px 0 0 0;text-align:center;width:100%}.mat-vertical-stepper-header{display:flex;align-items:center;padding:24px;height:24px}.mat-vertical-stepper-header .mat-step-icon{margin-right:12px}[dir=rtl] .mat-vertical-stepper-header .mat-step-icon{margin-right:0;margin-left:12px}.mat-horizontal-stepper-content{outline:0}.mat-horizontal-stepper-content[aria-expanded=false]{height:0;overflow:hidden}.mat-horizontal-content-container{overflow:hidden;padding:0 24px 24px 24px}.mat-vertical-content-container{margin-left:36px;border:0;position:relative}[dir=rtl] .mat-vertical-content-container{margin-left:0;margin-right:36px}.mat-stepper-vertical-line::before{content:\"\";position:absolute;top:-16px;bottom:-16px;left:0;border-left-width:1px;border-left-style:solid}[dir=rtl] .mat-stepper-vertical-line::before{left:auto;right:0}.mat-vertical-stepper-content{overflow:hidden;outline:0}.mat-vertical-content{padding:0 24px 24px 24px}.mat-step:last-child .mat-vertical-content-container{border:none}\n"], encapsulation: 2, data: { animation: [matStepperAnimations.verticalStepTransition] }, changeDetection: 0 });
  /*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatVerticalStepper, [{
          type: Component,
          args: [{
                  selector: 'mat-vertical-stepper',
                  exportAs: 'matVerticalStepper',
                  template: "<div class=\"mat-step\" *ngFor=\"let step of steps; let i = index; let isLast = last\">\n  <mat-step-header class=\"mat-vertical-stepper-header\"\n                   (click)=\"step.select()\"\n                   (keydown)=\"_onKeydown($event)\"\n                   [tabIndex]=\"_getFocusIndex() == i ? 0 : -1\"\n                   [id]=\"_getStepLabelId(i)\"\n                   [attr.aria-posinset]=\"i + 1\"\n                   [attr.aria-setsize]=\"steps.length\"\n                   [attr.aria-controls]=\"_getStepContentId(i)\"\n                   [attr.aria-selected]=\"selectedIndex === i\"\n                   [attr.aria-label]=\"step.ariaLabel || null\"\n                   [attr.aria-labelledby]=\"(!step.ariaLabel && step.ariaLabelledby) ? step.ariaLabelledby : null\"\n                   [index]=\"i\"\n                   [state]=\"_getIndicatorType(i, step.state)\"\n                   [label]=\"step.stepLabel || step.label\"\n                   [selected]=\"selectedIndex === i\"\n                   [active]=\"step.completed || selectedIndex === i || !linear\"\n                   [optional]=\"step.optional\"\n                   [errorMessage]=\"step.errorMessage\"\n                   [iconOverrides]=\"_iconOverrides\"\n                   [disableRipple]=\"disableRipple\">\n  </mat-step-header>\n\n  <div class=\"mat-vertical-content-container\" [class.mat-stepper-vertical-line]=\"!isLast\">\n    <div class=\"mat-vertical-stepper-content\" role=\"tabpanel\"\n         [attr.tabindex]=\"selectedIndex === i ? 0 : null\"\n         [@stepTransition]=\"_getAnimationDirection(i)\"\n         (@stepTransition.done)=\"_animationDone.next($event)\"\n         [id]=\"_getStepContentId(i)\"\n         [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n         [attr.aria-expanded]=\"selectedIndex === i\">\n      <div class=\"mat-vertical-content\">\n        <ng-container [ngTemplateOutlet]=\"step.content\"></ng-container>\n      </div>\n    </div>\n  </div>\n</div>\n",
                  inputs: ['selectedIndex'],
                  host: {
                      'class': 'mat-stepper-vertical',
                      'aria-orientation': 'vertical',
                      'role': 'tablist'
                  },
                  animations: [matStepperAnimations.verticalStepTransition],
                  providers: [
                      { provide: MatStepper, useExisting: MatVerticalStepper },
                      { provide: CdkStepper, useExisting: MatVerticalStepper }
                  ],
                  encapsulation: ViewEncapsulation.None,
                  changeDetection: ChangeDetectionStrategy.OnPush,
                  styles: [".mat-stepper-vertical,.mat-stepper-horizontal{display:block}.mat-horizontal-stepper-header-container{white-space:nowrap;display:flex;align-items:center}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header-container{align-items:flex-start}.mat-stepper-horizontal-line{border-top-width:1px;border-top-style:solid;flex:auto;height:0;margin:0 -16px;min-width:32px}.mat-stepper-label-position-bottom .mat-stepper-horizontal-line{margin:0;min-width:0;position:relative;top:36px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{border-top-width:1px;border-top-style:solid;content:\"\";display:inline-block;height:0;position:absolute;top:36px;width:calc(50% - 20px)}.mat-horizontal-stepper-header{display:flex;height:72px;overflow:hidden;align-items:center;padding:0 24px}.mat-horizontal-stepper-header .mat-step-icon{margin-right:8px;flex:none}[dir=rtl] .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:8px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header{box-sizing:border-box;flex-direction:column;height:auto;padding:24px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{right:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before{left:0}[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:last-child::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:first-child::after{display:none}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-label{padding:16px 0 0 0;text-align:center;width:100%}.mat-vertical-stepper-header{display:flex;align-items:center;padding:24px;height:24px}.mat-vertical-stepper-header .mat-step-icon{margin-right:12px}[dir=rtl] .mat-vertical-stepper-header .mat-step-icon{margin-right:0;margin-left:12px}.mat-horizontal-stepper-content{outline:0}.mat-horizontal-stepper-content[aria-expanded=false]{height:0;overflow:hidden}.mat-horizontal-content-container{overflow:hidden;padding:0 24px 24px 24px}.mat-vertical-content-container{margin-left:36px;border:0;position:relative}[dir=rtl] .mat-vertical-content-container{margin-left:0;margin-right:36px}.mat-stepper-vertical-line::before{content:\"\";position:absolute;top:-16px;bottom:-16px;left:0;border-left-width:1px;border-left-style:solid}[dir=rtl] .mat-stepper-vertical-line::before{left:auto;right:0}.mat-vertical-stepper-content{overflow:hidden;outline:0}.mat-vertical-content{padding:0 24px 24px 24px}.mat-step:last-child .mat-vertical-content-container{border:none}\n"]
              }]
      }], function () { return [{ type: ɵngcc4.Directionality, decorators: [{
                  type: Optional
              }] }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.ElementRef }, { type: undefined, decorators: [{
                  type: Inject,
                  args: [DOCUMENT]
              }] }]; }, null); })();
      return MatVerticalStepper;
  }(MatStepper));
  export { MatVerticalStepper };
  
  //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21hdGVyaWFsL3N0ZXBwZXIvc3RlcHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7O0FBRUgsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRWpELE9BQU8sRUFDTCxPQUFPLEVBQ1AsVUFBVSxFQUVWLHNCQUFzQixFQUV2QixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFFBQVEsRUFFUixZQUFZLEVBQ1osaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBQyxTQUFTLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGNBQWMsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVyRTtJQVc2QiwyQkFBTztJQUlsQyxtRUFBbUU7SUFDbkUsaUJBQWtELE9BQW1CLEVBQ3JDLGtCQUFxQyxFQUNiLGNBQStCO1FBRnZGLFlBR0Usa0JBQU0sT0FBTyxFQUFFLGNBQWMsQ0FBQyxTQUMvQjtRQUgrQix3QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1COztJQUdyRSxDQUFDO0lBRUQsMkZBQTJGO0lBQzNGLDhCQUFZLEdBQVosVUFBYSxPQUEyQixFQUFFLElBQXdDO1FBQ2hGLElBQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFL0Usc0ZBQXNGO1FBQ3RGLG9GQUFvRjtRQUNwRixxQ0FBcUM7UUFDckMsSUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFM0UsT0FBTyxrQkFBa0IsSUFBSSxnQkFBZ0IsQ0FBQztJQUNoRCxDQUFDLENBQ0gsQUF0QlE7O29CQVhQLFNBQVMsU0FBQztRQUNULFFBQVEsRUFBRSxVQUFVLHNCQUNwQixrRUFBd0IscEdBY21DLFVBQVUsdUJBQXhELE1BQU0sU0FBQyxVQUFVLENBQUMsY0FBTSxPQUFBLFVBQVUsRUFBVixDQUFVLENBQUM7bUJBYmhELFNBQVMsRUFBRSwwQkFDVCxFQUFDLE9BQU8sRUFBRSxuREFiTixpQkFBaUIsdUJBMEJWLFFBQVE7YUFiUSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUMsMEJBQ2xELEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFDLHpEQWE3QixRQUFRLFlBQUksTUFBTSxTQUFDLHNCQUFzQjs7S0FackQsc0JBQ0Q7U0FBYSxFQUFFLGlCQUFpQixDQUFDLElBQUksc0JBQ3JDLFFBQVEsRUFBRSxyQ0FLVCxZQUFZLFNBQUMsWUFBWTs7QUFMUCxzQkFDbkIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU0sa0JBQ2hEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBR3VDO0lBb0J4QyxjQUFDO0NBQUEsQUFqQ0QsQ0FXNkIsT0FBTyxHQXNCbkM7U0F0QlksT0FBTztBQXlCcEI7SUFDZ0MsOEJBQVU7SUFEMUM7UUFBQSxxRUFnREM7UUFyQ0Msb0VBQW9FO1FBQ2pELG1CQUFhLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFLaEYsZ0ZBQWdGO1FBQ2hGLG9CQUFjLEdBQXdELEVBQUUsQ0FBQztRQUV6RSx5RUFBeUU7UUFDekUsb0JBQWMsR0FBRyxJQUFJLE9BQU8sRUFBa0IsQ0FBQzs7SUEyQmpELENBQUM7SUF6QkMsdUNBQWtCLEdBQWxCO1FBQUEsaUJBbUJDO1FBbEJDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQUMsRUFBbUI7Z0JBQWxCLGNBQUksRUFBRSw0QkFBVztZQUFNLE9BQUEsS0FBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXO1FBQXZDLENBQXVDLENBQUMsQ0FBQztRQUV0RixzRkFBc0Y7UUFDdEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDN0QsS0FBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJO1FBQ3RCLDBGQUEwRjtRQUMxRix5RkFBeUY7UUFDekYsc0RBQXNEO1FBQ3RELG9CQUFvQixDQUFDLFVBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSyxPQUFBLENBQUMsQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQXRELENBQXNELENBQUMsRUFDdEYsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDM0IsQ0FBQyxTQUFTLENBQUMsVUFBQSxLQUFLO1lBQ2YsSUFBSyxLQUFLLENBQUMsT0FBb0MsS0FBSyxTQUFTLEVBQUU7Z0JBQzdELEtBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDM0I7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FDSCxBQTFDUzs7WUFEUixTQUFTLFNBQUMsRUFBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxDQUFDLHhDQUcvQyxZQUFZLFNBQUMsYUFBYTtDQUhzQixPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUMsQ0FBQyxFQUFDLHpCQU0vRixlQUFlLFNBQUMsT0FBTyxFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQzt5QkFHNUMsZUFBZSxTQUFDLGNBQWMsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUM7Z0NBR25ELE1BQU07Z0NBR04sS0FBSzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFVO0lBaUNsQixpQkFBQztDQUFBLEFBaERELENBQ2dDLFVBQVUsR0ErQ3pDO1NBL0NZLFVBQVU7QUFpRHZCO0lBcUIwQyx3Q0FBVTtJQXJCcEQ7UUFBQSxxRUE4QkM7UUFSQyxrRUFBa0U7UUFFbEUsbUJBQWEsR0FBcUIsS0FBSyxDQUFDOztJQU0xQyxDQUFDLEFBVE87O1lBckJQLFNBQVMsU0FBQyxFQXVCUixLQUFLOztJQXRCTixRQUFRLEVBQUUsd0JBQXdCLHNCQUNsQyxRQUFRLEVBQUUsc0JBQXNCLHNCQUNoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O3dEQUFzQyxzQkFFdEMsTUFBTSxFQUFFLENBQUMsZUFBZSxDQUFDLHNCQUN6QixJQUFJLEVBQUUsMEJBQ0osT0FBTyxFQUFFLHdCQUF3QiwwQkFDakMsd0NBQXdDLEVBQUUsd0JBQXdCLDBCQUNsRSwyQ0FBMkMsRUFBRSwyQkFBMkIsMEJBQ3hFLGtCQUFrQixFQUFFLFlBQVksMEJBQ2hDLE1BQU0sRUFBRSxTQUFTLHVCQUNsQixzQkFDRCxVQUFVLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyx3QkFBd0IsQ0FBQyxzQkFDM0QsU0FBUyxFQUFFLDBCQUNULEVBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUMsMEJBQ3hELEVBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUMsc0JBQ3pELHNCQUNELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLHNCQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7Ozs7OztpY0FDaEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUlNO0lBTVAsMkJBQUM7Q0FBQSxBQTlCRCxDQXFCMEMsVUFBVSxHQVNuRDtTQVRZLG9CQUFvQjtBQVdqQztJQW1Cd0Msc0NBQVU7SUFDaEQsNEJBQ2MsR0FBbUIsRUFDL0IsaUJBQW9DO0lBQ3BDLHFGQUFxRjtJQUNyRixVQUFvQyxFQUNsQixTQUFlO1FBTG5DLFlBTUUsa0JBQU0sR0FBRyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsU0FFckQ7UUFEQyxLQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQzs7SUFDakMsQ0FBQyxBQVRLOzsrQkFuQlAsU0FBUyxTQUFDO1FBQ1QsUUFBUSxFQUFFLHNCQUFzQixzQkFDaEMsOUNBbEtNLGNBQWMsdUJBcUxqQixRQUFRO0VBbkJILEVBQUUsb0JBQW9CLFJBcko5QixpQkFBaUI7U0FzSmpCLE9BakpBLFVBQVU7Z0RBdUtQLE1BQU0sU0FBQyxRQUFROzs7Ozs7Ozs7OzhaQXRCa0Isc0JBRXBDLE1BQU0sRUFBRSxDQUFDLGVBQWUsQ0FBQyxzQkFDekIsSUFBSSxFQUFFLDBCQUNKLE9BQU8sRUFBRSxzQkFBc0IsMEJBQy9CLGtCQUFrQixFQUFFLFVBQVUsMEJBQzlCLE1BQU0sRUFBRSxTQUFTLHVCQUNsQixzQkFDRCxVQUFVLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxzQkFBc0IsQ0FBQyxzQkFDekQsU0FBUyxFQUFFLDBCQUNULEVBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUMsMEJBQ3RELEVBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUMsc0JBQ3ZELHNCQUNELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLHNCQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7Ozs7O2d0QkFDaEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0FPb0M7SUFTckMseUJBQUM7Q0FBQSxBQWxDRCxDQW1Cd0MsVUFBVSxHQWVqRDtTQWZZLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0RpcmVjdGlvbmFsaXR5fSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XG5pbXBvcnQge0Jvb2xlYW5JbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gIENka1N0ZXAsXG4gIENka1N0ZXBwZXIsXG4gIFN0ZXBDb250ZW50UG9zaXRpb25TdGF0ZSxcbiAgU1RFUFBFUl9HTE9CQUxfT1BUSU9OUyxcbiAgU3RlcHBlck9wdGlvbnNcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL3N0ZXBwZXInO1xuaW1wb3J0IHtBbmltYXRpb25FdmVudH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFNraXBTZWxmLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1Db250cm9sLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5nRm9ybX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7RXJyb3JTdGF0ZU1hdGNoZXJ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7dGFrZVVudGlsLCBkaXN0aW5jdFVudGlsQ2hhbmdlZH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge01hdFN0ZXBIZWFkZXJ9IGZyb20gJy4vc3RlcC1oZWFkZXInO1xuaW1wb3J0IHtNYXRTdGVwTGFiZWx9IGZyb20gJy4vc3RlcC1sYWJlbCc7XG5pbXBvcnQge21hdFN0ZXBwZXJBbmltYXRpb25zfSBmcm9tICcuL3N0ZXBwZXItYW5pbWF0aW9ucyc7XG5pbXBvcnQge01hdFN0ZXBwZXJJY29uLCBNYXRTdGVwcGVySWNvbkNvbnRleHR9IGZyb20gJy4vc3RlcHBlci1pY29uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWF0LXN0ZXAnLFxuICB0ZW1wbGF0ZVVybDogJ3N0ZXAuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtwcm92aWRlOiBFcnJvclN0YXRlTWF0Y2hlciwgdXNlRXhpc3Rpbmc6IE1hdFN0ZXB9LFxuICAgIHtwcm92aWRlOiBDZGtTdGVwLCB1c2VFeGlzdGluZzogTWF0U3RlcH0sXG4gIF0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGV4cG9ydEFzOiAnbWF0U3RlcCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRTdGVwIGV4dGVuZHMgQ2RrU3RlcCBpbXBsZW1lbnRzIEVycm9yU3RhdGVNYXRjaGVyIHtcbiAgLyoqIENvbnRlbnQgZm9yIHN0ZXAgbGFiZWwgZ2l2ZW4gYnkgYDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+YC4gKi9cbiAgQENvbnRlbnRDaGlsZChNYXRTdGVwTGFiZWwpIHN0ZXBMYWJlbDogTWF0U3RlcExhYmVsO1xuXG4gIC8qKiBAYnJlYWtpbmctY2hhbmdlIDguMC4wIHJlbW92ZSB0aGUgYD9gIGFmdGVyIGBzdGVwcGVyT3B0aW9uc2AgKi9cbiAgY29uc3RydWN0b3IoQEluamVjdChmb3J3YXJkUmVmKCgpID0+IE1hdFN0ZXBwZXIpKSBzdGVwcGVyOiBNYXRTdGVwcGVyLFxuICAgICAgICAgICAgICBAU2tpcFNlbGYoKSBwcml2YXRlIF9lcnJvclN0YXRlTWF0Y2hlcjogRXJyb3JTdGF0ZU1hdGNoZXIsXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoU1RFUFBFUl9HTE9CQUxfT1BUSU9OUykgc3RlcHBlck9wdGlvbnM/OiBTdGVwcGVyT3B0aW9ucykge1xuICAgIHN1cGVyKHN0ZXBwZXIsIHN0ZXBwZXJPcHRpb25zKTtcbiAgfVxuXG4gIC8qKiBDdXN0b20gZXJyb3Igc3RhdGUgbWF0Y2hlciB0aGF0IGFkZGl0aW9uYWxseSBjaGVja3MgZm9yIHZhbGlkaXR5IG9mIGludGVyYWN0ZWQgZm9ybS4gKi9cbiAgaXNFcnJvclN0YXRlKGNvbnRyb2w6IEZvcm1Db250cm9sIHwgbnVsbCwgZm9ybTogRm9ybUdyb3VwRGlyZWN0aXZlIHwgTmdGb3JtIHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG9yaWdpbmFsRXJyb3JTdGF0ZSA9IHRoaXMuX2Vycm9yU3RhdGVNYXRjaGVyLmlzRXJyb3JTdGF0ZShjb250cm9sLCBmb3JtKTtcblxuICAgIC8vIEN1c3RvbSBlcnJvciBzdGF0ZSBjaGVja3MgZm9yIHRoZSB2YWxpZGl0eSBvZiBmb3JtIHRoYXQgaXMgbm90IHN1Ym1pdHRlZCBvciB0b3VjaGVkXG4gICAgLy8gc2luY2UgdXNlciBjYW4gdHJpZ2dlciBhIGZvcm0gY2hhbmdlIGJ5IGNhbGxpbmcgZm9yIGFub3RoZXIgc3RlcCB3aXRob3V0IGRpcmVjdGx5XG4gICAgLy8gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgY3VycmVudCBmb3JtLlxuICAgIGNvbnN0IGN1c3RvbUVycm9yU3RhdGUgPSAhIShjb250cm9sICYmIGNvbnRyb2wuaW52YWxpZCAmJiB0aGlzLmludGVyYWN0ZWQpO1xuXG4gICAgcmV0dXJuIG9yaWdpbmFsRXJyb3JTdGF0ZSB8fCBjdXN0b21FcnJvclN0YXRlO1xuICB9XG59XG5cblxuQERpcmVjdGl2ZSh7c2VsZWN0b3I6ICdbbWF0U3RlcHBlcl0nLCBwcm92aWRlcnM6IFt7cHJvdmlkZTogQ2RrU3RlcHBlciwgdXNlRXhpc3Rpbmc6IE1hdFN0ZXBwZXJ9XX0pXG5leHBvcnQgY2xhc3MgTWF0U3RlcHBlciBleHRlbmRzIENka1N0ZXBwZXIgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgLyoqIFRoZSBsaXN0IG9mIHN0ZXAgaGVhZGVycyBvZiB0aGUgc3RlcHMgaW4gdGhlIHN0ZXBwZXIuICovXG4gIEBWaWV3Q2hpbGRyZW4oTWF0U3RlcEhlYWRlcikgX3N0ZXBIZWFkZXI6IFF1ZXJ5TGlzdDxNYXRTdGVwSGVhZGVyPjtcblxuICAvKiogU3RlcHMgdGhhdCB0aGUgc3RlcHBlciBob2xkcy4gKi9cbiAgQENvbnRlbnRDaGlsZHJlbihNYXRTdGVwLCB7ZGVzY2VuZGFudHM6IHRydWV9KSBfc3RlcHM6IFF1ZXJ5TGlzdDxNYXRTdGVwPjtcblxuICAvKiogQ3VzdG9tIGljb24gb3ZlcnJpZGVzIHBhc3NlZCBpbiBieSB0aGUgY29uc3VtZXIuICovXG4gIEBDb250ZW50Q2hpbGRyZW4oTWF0U3RlcHBlckljb24sIHtkZXNjZW5kYW50czogdHJ1ZX0pIF9pY29uczogUXVlcnlMaXN0PE1hdFN0ZXBwZXJJY29uPjtcblxuICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBjdXJyZW50IHN0ZXAgaXMgZG9uZSB0cmFuc2l0aW9uaW5nIGluLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgYW5pbWF0aW9uRG9uZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBXaGV0aGVyIHJpcHBsZXMgc2hvdWxkIGJlIGRpc2FibGVkIGZvciB0aGUgc3RlcCBoZWFkZXJzLiAqL1xuICBASW5wdXQoKSBkaXNhYmxlUmlwcGxlOiBib29sZWFuO1xuXG4gIC8qKiBDb25zdW1lci1zcGVjaWZpZWQgdGVtcGxhdGUtcmVmcyB0byBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBoZWFkZXIgaWNvbnMuICovXG4gIF9pY29uT3ZlcnJpZGVzOiB7W2tleTogc3RyaW5nXTogVGVtcGxhdGVSZWY8TWF0U3RlcHBlckljb25Db250ZXh0Pn0gPSB7fTtcblxuICAvKiogU3RyZWFtIG9mIGFuaW1hdGlvbiBgZG9uZWAgZXZlbnRzIHdoZW4gdGhlIGJvZHkgZXhwYW5kcy9jb2xsYXBzZXMuICovXG4gIF9hbmltYXRpb25Eb25lID0gbmV3IFN1YmplY3Q8QW5pbWF0aW9uRXZlbnQ+KCk7XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuX2ljb25zLmZvckVhY2goKHtuYW1lLCB0ZW1wbGF0ZVJlZn0pID0+IHRoaXMuX2ljb25PdmVycmlkZXNbbmFtZV0gPSB0ZW1wbGF0ZVJlZik7XG5cbiAgICAvLyBNYXJrIHRoZSBjb21wb25lbnQgZm9yIGNoYW5nZSBkZXRlY3Rpb24gd2hlbmV2ZXIgdGhlIGNvbnRlbnQgY2hpbGRyZW4gcXVlcnkgY2hhbmdlc1xuICAgIHRoaXMuX3N0ZXBzLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuX3N0YXRlQ2hhbmdlZCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fYW5pbWF0aW9uRG9uZS5waXBlKFxuICAgICAgLy8gVGhpcyBuZWVkcyBhIGBkaXN0aW5jdFVudGlsQ2hhbmdlZGAgaW4gb3JkZXIgdG8gYXZvaWQgZW1pdHRpbmcgdGhlIHNhbWUgZXZlbnQgdHdpY2UgZHVlXG4gICAgICAvLyB0byBhIGJ1ZyBpbiBhbmltYXRpb25zIHdoZXJlIHRoZSBgLmRvbmVgIGNhbGxiYWNrIGdldHMgaW52b2tlZCB0d2ljZSBvbiBzb21lIGJyb3dzZXJzLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzI0MDg0XG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoeCwgeSkgPT4geC5mcm9tU3RhdGUgPT09IHkuZnJvbVN0YXRlICYmIHgudG9TdGF0ZSA9PT0geS50b1N0YXRlKSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpXG4gICAgKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgaWYgKChldmVudC50b1N0YXRlIGFzIFN0ZXBDb250ZW50UG9zaXRpb25TdGF0ZSkgPT09ICdjdXJyZW50Jykge1xuICAgICAgICB0aGlzLmFuaW1hdGlvbkRvbmUuZW1pdCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2VkaXRhYmxlOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9vcHRpb25hbDogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfY29tcGxldGVkOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9oYXNFcnJvcjogQm9vbGVhbklucHV0O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtaG9yaXpvbnRhbC1zdGVwcGVyJyxcbiAgZXhwb3J0QXM6ICdtYXRIb3Jpem9udGFsU3RlcHBlcicsXG4gIHRlbXBsYXRlVXJsOiAnc3RlcHBlci1ob3Jpem9udGFsLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnc3RlcHBlci5jc3MnXSxcbiAgaW5wdXRzOiBbJ3NlbGVjdGVkSW5kZXgnXSxcbiAgaG9zdDoge1xuICAgICdjbGFzcyc6ICdtYXQtc3RlcHBlci1ob3Jpem9udGFsJyxcbiAgICAnW2NsYXNzLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWVuZF0nOiAnbGFiZWxQb3NpdGlvbiA9PSBcImVuZFwiJyxcbiAgICAnW2NsYXNzLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbV0nOiAnbGFiZWxQb3NpdGlvbiA9PSBcImJvdHRvbVwiJyxcbiAgICAnYXJpYS1vcmllbnRhdGlvbic6ICdob3Jpem9udGFsJyxcbiAgICAncm9sZSc6ICd0YWJsaXN0JyxcbiAgfSxcbiAgYW5pbWF0aW9uczogW21hdFN0ZXBwZXJBbmltYXRpb25zLmhvcml6b250YWxTdGVwVHJhbnNpdGlvbl0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtwcm92aWRlOiBNYXRTdGVwcGVyLCB1c2VFeGlzdGluZzogTWF0SG9yaXpvbnRhbFN0ZXBwZXJ9LFxuICAgIHtwcm92aWRlOiBDZGtTdGVwcGVyLCB1c2VFeGlzdGluZzogTWF0SG9yaXpvbnRhbFN0ZXBwZXJ9XG4gIF0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRIb3Jpem9udGFsU3RlcHBlciBleHRlbmRzIE1hdFN0ZXBwZXIge1xuICAvKiogV2hldGhlciB0aGUgbGFiZWwgc2hvdWxkIGRpc3BsYXkgaW4gYm90dG9tIG9yIGVuZCBwb3NpdGlvbi4gKi9cbiAgQElucHV0KClcbiAgbGFiZWxQb3NpdGlvbjogJ2JvdHRvbScgfCAnZW5kJyA9ICdlbmQnO1xuXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9lZGl0YWJsZTogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfb3B0aW9uYWw6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2NvbXBsZXRlZDogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfaGFzRXJyb3I6IEJvb2xlYW5JbnB1dDtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWF0LXZlcnRpY2FsLXN0ZXBwZXInLFxuICBleHBvcnRBczogJ21hdFZlcnRpY2FsU3RlcHBlcicsXG4gIHRlbXBsYXRlVXJsOiAnc3RlcHBlci12ZXJ0aWNhbC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3N0ZXBwZXIuY3NzJ10sXG4gIGlucHV0czogWydzZWxlY3RlZEluZGV4J10sXG4gIGhvc3Q6IHtcbiAgICAnY2xhc3MnOiAnbWF0LXN0ZXBwZXItdmVydGljYWwnLFxuICAgICdhcmlhLW9yaWVudGF0aW9uJzogJ3ZlcnRpY2FsJyxcbiAgICAncm9sZSc6ICd0YWJsaXN0JyxcbiAgfSxcbiAgYW5pbWF0aW9uczogW21hdFN0ZXBwZXJBbmltYXRpb25zLnZlcnRpY2FsU3RlcFRyYW5zaXRpb25dLFxuICBwcm92aWRlcnM6IFtcbiAgICB7cHJvdmlkZTogTWF0U3RlcHBlciwgdXNlRXhpc3Rpbmc6IE1hdFZlcnRpY2FsU3RlcHBlcn0sXG4gICAge3Byb3ZpZGU6IENka1N0ZXBwZXIsIHVzZUV4aXN0aW5nOiBNYXRWZXJ0aWNhbFN0ZXBwZXJ9XG4gIF0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRWZXJ0aWNhbFN0ZXBwZXIgZXh0ZW5kcyBNYXRTdGVwcGVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgZGlyOiBEaXJlY3Rpb25hbGl0eSxcbiAgICBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMCBgZWxlbWVudFJlZmAgYW5kIGBfZG9jdW1lbnRgIHBhcmFtZXRlcnMgdG8gYmVjb21lIHJlcXVpcmVkLlxuICAgIGVsZW1lbnRSZWY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBfZG9jdW1lbnQ/OiBhbnkpIHtcbiAgICBzdXBlcihkaXIsIGNoYW5nZURldGVjdG9yUmVmLCBlbGVtZW50UmVmLCBfZG9jdW1lbnQpO1xuICAgIHRoaXMuX29yaWVudGF0aW9uID0gJ3ZlcnRpY2FsJztcbiAgfVxuXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9lZGl0YWJsZTogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfb3B0aW9uYWw6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2NvbXBsZXRlZDogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfaGFzRXJyb3I6IEJvb2xlYW5JbnB1dDtcbn1cbiJdfQ==