ng-configcat-publicapi-ui 4.2.0 → 4.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/esm2022/lib/_directives/input-display-normalizer.directive.mjs +4 -4
  2. package/esm2022/lib/_services/app-data-adapter.mjs +4 -4
  3. package/esm2022/lib/_services/comparison-value-list-helper.mjs +4 -4
  4. package/esm2022/lib/_services/form-generator.mjs +4 -4
  5. package/esm2022/lib/_services/messaging.service.mjs +4 -4
  6. package/esm2022/lib/_services/public-api.service.mjs +4 -4
  7. package/esm2022/lib/_services/setting-list-form-helper.mjs +4 -4
  8. package/esm2022/lib/_services/tracking.directive.mjs +4 -4
  9. package/esm2022/lib/ace-editor/ace-editor.component.mjs +4 -4
  10. package/esm2022/lib/authorization/authorization.component.mjs +4 -4
  11. package/esm2022/lib/base/base-select.component.mjs +4 -4
  12. package/esm2022/lib/base/base.component.mjs +4 -4
  13. package/esm2022/lib/configuration.mjs +4 -4
  14. package/esm2022/lib/dialogs/confirmation-dialog/confirmation-dialog.mjs +4 -4
  15. package/esm2022/lib/dialogs/delete-setting-dialog/delete-setting-dialog.component.mjs +4 -4
  16. package/esm2022/lib/dialogs/expand-dialog/expand-dialog.component.mjs +4 -4
  17. package/esm2022/lib/dialogs/info-dialog/info-dialog.mjs +4 -4
  18. package/esm2022/lib/dialogs/reason-dialog/reason-dialog.component.mjs +4 -4
  19. package/esm2022/lib/dialogs/reroute-dialog/reroute-dialog.mjs +4 -4
  20. package/esm2022/lib/dialogs/save-snackbar/save-snackbar.component.mjs +4 -4
  21. package/esm2022/lib/ng-configcat-publicapi-ui.module.mjs +5 -5
  22. package/esm2022/lib/selects/config-select/config-select.component.mjs +4 -4
  23. package/esm2022/lib/selects/environment-select/environment-select.component.mjs +4 -4
  24. package/esm2022/lib/selects/product-select/product-select.component.mjs +4 -4
  25. package/esm2022/lib/selects/setting-select/setting-select.component.mjs +4 -4
  26. package/esm2022/lib/setting-item/setting-item.component.mjs +4 -4
  27. package/esm2022/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.mjs +4 -4
  28. package/esm2022/lib/setting-list/setting/rollout-rules/rollout-rules.component.mjs +4 -4
  29. package/esm2022/lib/setting-list/setting/setting.component.mjs +4 -4
  30. package/esm2022/lib/setting-list/setting/value/value.component.mjs +4 -4
  31. package/esm2022/lib/setting-list/setting-list.component.mjs +4 -4
  32. package/esm2022/lib/v2/feature-flag/date-time-picker/date-time-picker.component.mjs +4 -4
  33. package/esm2022/lib/v2/feature-flag/dependees-dialog/dependees-dialog.component.mjs +4 -4
  34. package/esm2022/lib/v2/feature-flag/evaluation-formula/evaluation-formula.component.mjs +4 -4
  35. package/esm2022/lib/v2/feature-flag/evaluation-formula/feature-flag-value/feature-flag-value.component.mjs +4 -4
  36. package/esm2022/lib/v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component.mjs +4 -4
  37. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/condition-chip/condition-chip.component.mjs +4 -4
  38. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/conditions.component.mjs +4 -4
  39. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/prerequisite-flag-condition/prerequisite-flag-condition.component.mjs +4 -4
  40. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/segment-condition/segment-condition.component.mjs +4 -4
  41. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/comparator-dialog/comparator-dialog.component.mjs +4 -4
  42. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/popout-list-editor-dialog/popout-list-editor-dialog.component.mjs +4 -4
  43. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/user-condition.component.mjs +4 -4
  44. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/percentage-options/percentage-options.component.mjs +4 -4
  45. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/targeting-rule.component.mjs +4 -4
  46. package/esm2022/lib/v2/feature-flag/feature-flag.component.mjs +4 -4
  47. package/esm2022/lib/v2/feature-flag/percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component.mjs +4 -4
  48. package/esm2022/lib/v2/feature-flag-item.component.mjs +4 -4
  49. package/fesm2022/ng-configcat-publicapi-ui.mjs +145 -145
  50. package/fesm2022/ng-configcat-publicapi-ui.mjs.map +1 -1
  51. package/package.json +4 -4
@@ -100,14 +100,14 @@ export class ComparatorDialogComponent {
100
100
  const result = this.isConfidential && selected.sensitiveValue ? selected.sensitiveValue : selected.value;
101
101
  this.dialogRef.close(result);
102
102
  }
103
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ComparatorDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
104
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: ComparatorDialogComponent, selector: "app-comparator-dialog", ngImport: i0, template: "<h2 mat-dialog-title cdkDrag cdkDragRootElement=\".cdk-overlay-pane\" cdkDragHandle class=\"draggable\">Comparator selector</h2>\n<div class=\"tabs\">\n <mat-button-toggle-group [ngModel]=\"selectedGroup\" (ngModelChange)=\"changeGroup($event)\">\n <mat-button-toggle [value]=\"ComparatorGroup.Text\">Text</mat-button-toggle>\n <mat-button-toggle [value]=\"ComparatorGroup.Number\">Number</mat-button-toggle>\n <mat-button-toggle [value]=\"ComparatorGroup.Semver\">Semantic version</mat-button-toggle>\n <mat-button-toggle [value]=\"ComparatorGroup.DateTime\">Datetime</mat-button-toggle>\n <mat-button-toggle [value]=\"ComparatorGroup.Array\">Array</mat-button-toggle>\n </mat-button-toggle-group>\n</div>\n\n<div mat-dialog-content class=\"container\" [ngSwitch]=\"selectedGroup\">\n <div *ngSwitchCase=\"ComparatorGroup.Text\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain string/text.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.Text}\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"confidential\"></ng-container>\n </div>\n\n <div *ngSwitchCase=\"ComparatorGroup.Number\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain numbers.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.Number}\"></ng-container>\n </div>\n\n <div *ngSwitchCase=\"ComparatorGroup.Semver\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain semantic versions.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.Semver}\"></ng-container>\n </div>\n\n <div *ngSwitchCase=\"ComparatorGroup.DateTime\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain datetimes.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.DateTime}\"></ng-container>\n </div>\n\n <div *ngSwitchCase=\"ComparatorGroup.Array\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain items of a string/text list.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.Array}\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"confidential\"></ng-container>\n </div>\n</div>\n<div mat-dialog-actions>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-stroked-button mat-dialog-close>Cancel</button>\n <button *ngIf=\"data.readOnly\" type=\"button\" mat-stroked-button color=\"primary\" mat-dialog-close>Close</button>\n</div>\n\n<ng-template #comparators let-group=\"group\">\n <div>\n <mat-radio-group (change)=\"comparatorChange($event.value)\">\n <div class=\"comparator-container\">\n <div class=\"item\" [ngClass]=\"'col-' + i % 2\" [class.selected]=\"comparator.value === selectedComparator\" \n *ngFor=\"let comparator of listComparators(group); let i = index\" (click)=\"comparatorChange(comparator.value)\"> \n <mat-radio-button color=\"primary\" [value]=\"comparator.value\" [disabled]=\"data.readOnly\"\n [checked]=\"comparator.value === selectedComparator\" [matTooltip]=\"comparator.description\">\n <div class=\"title\">\n {{comparator.label}}\n </div>\n </mat-radio-button>\n <div class=\"description\">\n <div class=\"example\">\n <ng-container [ngSwitch]=\"comparator.value\">\n\n <!-- TEXT -->\n <ng-container *ngSwitchCase=\"UserComparator.TextEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;foo.com</span> EQUALS <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">bob&#64;foo.com</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextDoesNotEqual\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">alice&#64;foo.com</span> NOT EQUALS <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">bob&#64;foo.com</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.IsOneOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">iOS</span> IS ONE OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ Android, macOS, <span class=\"match-val\">iOS</span> ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.IsNotOneOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">iOS</span> IS NOT ONE OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ Android, macOS, Windows ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextStartsWithAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;foo.com</span> STARTS WITH ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">bob</span>, jane ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextNotStartsWithAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">alice&#64;foo.com</span> NOT STARTS WITH ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ bob, jane ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextEndsWithAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;foo.com</span> ENDS WITH ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">&#64;foo.com</span>, &#64;bar.com ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextNotEndsWithAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;example.com</span> NOT ENDS WITH ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ &#64;foo.com, &#64;bar.com ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.ContainsAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">https://test-app.foo.com</span> CONTAINS ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">test</span>, localhost ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.DoesNotContainAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">https://app.foo.com</span> NOT CONTAINS ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ test, localhost ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n\n <!-- NUMBER -->\n\n <ng-container *ngSwitchCase=\"UserComparator.NumberEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">42</span> = <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberDoesNotEqual\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">42</span> != <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">3.14</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberLess\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">3.14</span> &lt; <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberLessOrEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">3.14</span> &lt;= <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberGreater\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">69</span> &gt; <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberGreaterOrEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">69</span> &gt;= <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n\n\n <!-- SEMVER -->\n\n <ng-container *ngSwitchCase=\"UserComparator.SemVerIsOneOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span> IS ONE OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">1.0.0</span>, 4.3.5 ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerIsNotOneOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">2.1.0</span> IS NOT ONE OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ 1.0.0, 4.3.5 ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerLess\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span> &lt; <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.2.0</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerLessOrEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span> &lt;= <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.2.0</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerGreater\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span> &gt; <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.0.0-alpha</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerGreaterOrEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.2.0</span> &gt;= <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.1.0</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n\n <!-- DATETIME -->\n\n <ng-container *ngSwitchCase=\"UserComparator.DateTimeBefore\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">2020.11.05 10:36:24</span> BEFORE <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">2020.11.05 12:00:00</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.DateTimeAfter\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">2020.11.05 15:41:06</span> AFTER <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">2020.11.05 12:00:00</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n\n <!-- ARRAY -->\n\n <ng-container *ngSwitchCase=\"UserComparator.ArrayContainsAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">[ Writer, Reader ]</span> ARRAY CONTAINS ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">Writer</span>, Admin ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.ArrayDoesNotContainAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">[ Guest, Reader ]</span> ARRAY NOT CONTAINS ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ Writer, Admin ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </mat-radio-group>\n </div>\n</ng-template>\n\n<ng-template #confidential>\n <p>Select how the <i>comparison values</i> should be persisted:</p>\n <div matTooltip=\"The currently selected comparator does not support hashed comparison values, they will be presented as cleartext in the config JSON.\"\n [matTooltipDisabled]=\"confidentialEnabled\">\n <mat-radio-group class=\"confidential-container\" (change)=\"confidentialChange($event.value)\">\n <div class=\"confidential item\" (click)=\"confidentialChange(true)\">\n <mat-radio-button color=\"primary\" [value]=\"true\" [checked]=\"isConfidential\" [disabled]=\"!confidentialEnabled || data.readOnly\">\n <div class=\"title\">\n <div class=\"text\">Hashed</div>\n <div class=\"icon\"><mat-icon>lock</mat-icon></div>\n </div>\n </mat-radio-button>\n <div class=\"description\">\n We recommend using this option in case of frontend applications targeting users based on sensitive data (like email addresses, names, etc). \n \n </div>\n </div>\n <div class=\"cleartext item\" (click)=\"confidentialChange(false)\">\n <mat-radio-button color=\"primary\" [value]=\"false\" [checked]=\"!isConfidential\" [disabled]=\"!confidentialEnabled || data.readOnly\">\n <div class=\"title\">\n <div class=\"text\">Cleartext</div>\n <div class=\"icon\"><mat-icon>lock_open_right</mat-icon></div>\n </div>\n </mat-radio-button>\n <div class=\"description\">\n You can use this option when you target users based on non-sensitive data. Comparison values will be presented as plain text in the <i>config JSON</i>.\n </div>\n </div>\n </mat-radio-group>\n </div>\n</ng-template>", styles: [".container{width:100%;padding:0 24px!important}.container .confidential-container{display:flex;flex-direction:row;margin-bottom:15px}.container .confidential-container .item{flex:50%;border:1px solid rgb(224,224,224);cursor:pointer;padding:5px 5px 10px;border-radius:5px}.container .confidential-container .confidential{margin-right:5px}.container .confidential-container .cleartext{margin-left:5px}.container .confidential-container .title{cursor:pointer;display:flex;flex-direction:row;align-items:center}.container .confidential-container .title .text{font-weight:700}.container .confidential-container .title .icon{margin-left:3px}.container .confidential-container .title .icon mat-icon{font-size:18px;width:18px;height:18px}.container .confidential-container .description{font-size:12px;padding-left:10px;line-height:16px}.container .comparator-container{display:flex;flex-direction:row;flex-wrap:wrap;width:100%}.container .comparator-container .item{flex:0 0 calc(50% - 17px);border:1px solid rgb(224,224,224);cursor:pointer;padding:5px 5px 10px;border-radius:5px;margin-bottom:10px}.container .comparator-container .col-0{margin-right:5px}.container .comparator-container .col-1{margin-left:5px}.container .comparator-container .title{cursor:pointer;font-weight:700}.container .comparator-container .description{font-size:12px;line-height:16px;padding-left:10px;cursor:pointer}.container .comparator-container .description .example{background-color:#f1f1f1;opacity:.8;padding:3px 5px;border-radius:5px;display:inline-block}.container .comparator-container .description .example .comp-attr{font-weight:600;font-style:italic;padding-right:3px}.container .comparator-container .description .example .comp-val{padding-left:3px;padding-right:3px;font-style:italic}.container .comparator-container .description .example .match-val{font-weight:600}.container .comparator-container .description .example .arrow{color:#636363}.container .comparator-container .selected{border-color:#f7a224}.tabs{margin:0 24px}.mat-button-toggle-group{flex-wrap:wrap}@media (max-width: 500px){.container .comparator-container .item{flex:100%}.container .comparator-container .col-0{margin-right:0}.container .comparator-container .col-1{margin-left:0}.container .confidential-container{flex-wrap:wrap}.container .confidential-container .item{flex:100%}.container .confidential-container .confidential{margin-right:0;margin-bottom:10px}.container .confidential-container .cleartext{margin-left:0}}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i7.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i7.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i8.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i8.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "directive", type: i9.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i9.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }] }); }
103
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ComparatorDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
104
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ComparatorDialogComponent, selector: "app-comparator-dialog", ngImport: i0, template: "<h2 mat-dialog-title cdkDrag cdkDragRootElement=\".cdk-overlay-pane\" cdkDragHandle class=\"draggable\">Comparator selector</h2>\n<div class=\"tabs\">\n <mat-button-toggle-group [ngModel]=\"selectedGroup\" (ngModelChange)=\"changeGroup($event)\">\n <mat-button-toggle [value]=\"ComparatorGroup.Text\">Text</mat-button-toggle>\n <mat-button-toggle [value]=\"ComparatorGroup.Number\">Number</mat-button-toggle>\n <mat-button-toggle [value]=\"ComparatorGroup.Semver\">Semantic version</mat-button-toggle>\n <mat-button-toggle [value]=\"ComparatorGroup.DateTime\">Datetime</mat-button-toggle>\n <mat-button-toggle [value]=\"ComparatorGroup.Array\">Array</mat-button-toggle>\n </mat-button-toggle-group>\n</div>\n\n<div mat-dialog-content class=\"container\" [ngSwitch]=\"selectedGroup\">\n <div *ngSwitchCase=\"ComparatorGroup.Text\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain string/text.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.Text}\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"confidential\"></ng-container>\n </div>\n\n <div *ngSwitchCase=\"ComparatorGroup.Number\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain numbers.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.Number}\"></ng-container>\n </div>\n\n <div *ngSwitchCase=\"ComparatorGroup.Semver\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain semantic versions.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.Semver}\"></ng-container>\n </div>\n\n <div *ngSwitchCase=\"ComparatorGroup.DateTime\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain datetimes.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.DateTime}\"></ng-container>\n </div>\n\n <div *ngSwitchCase=\"ComparatorGroup.Array\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain items of a string/text list.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.Array}\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"confidential\"></ng-container>\n </div>\n</div>\n<div mat-dialog-actions>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-stroked-button mat-dialog-close>Cancel</button>\n <button *ngIf=\"data.readOnly\" type=\"button\" mat-stroked-button color=\"primary\" mat-dialog-close>Close</button>\n</div>\n\n<ng-template #comparators let-group=\"group\">\n <div>\n <mat-radio-group (change)=\"comparatorChange($event.value)\">\n <div class=\"comparator-container\">\n <div class=\"item\" [ngClass]=\"'col-' + i % 2\" [class.selected]=\"comparator.value === selectedComparator\" \n *ngFor=\"let comparator of listComparators(group); let i = index\" (click)=\"comparatorChange(comparator.value)\"> \n <mat-radio-button color=\"primary\" [value]=\"comparator.value\" [disabled]=\"data.readOnly\"\n [checked]=\"comparator.value === selectedComparator\" [matTooltip]=\"comparator.description\">\n <div class=\"title\">\n {{comparator.label}}\n </div>\n </mat-radio-button>\n <div class=\"description\">\n <div class=\"example\">\n <ng-container [ngSwitch]=\"comparator.value\">\n\n <!-- TEXT -->\n <ng-container *ngSwitchCase=\"UserComparator.TextEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;foo.com</span> EQUALS <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">bob&#64;foo.com</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextDoesNotEqual\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">alice&#64;foo.com</span> NOT EQUALS <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">bob&#64;foo.com</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.IsOneOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">iOS</span> IS ONE OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ Android, macOS, <span class=\"match-val\">iOS</span> ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.IsNotOneOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">iOS</span> IS NOT ONE OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ Android, macOS, Windows ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextStartsWithAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;foo.com</span> STARTS WITH ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">bob</span>, jane ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextNotStartsWithAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">alice&#64;foo.com</span> NOT STARTS WITH ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ bob, jane ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextEndsWithAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;foo.com</span> ENDS WITH ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">&#64;foo.com</span>, &#64;bar.com ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextNotEndsWithAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;example.com</span> NOT ENDS WITH ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ &#64;foo.com, &#64;bar.com ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.ContainsAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">https://test-app.foo.com</span> CONTAINS ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">test</span>, localhost ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.DoesNotContainAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">https://app.foo.com</span> NOT CONTAINS ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ test, localhost ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n\n <!-- NUMBER -->\n\n <ng-container *ngSwitchCase=\"UserComparator.NumberEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">42</span> = <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberDoesNotEqual\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">42</span> != <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">3.14</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberLess\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">3.14</span> &lt; <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberLessOrEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">3.14</span> &lt;= <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberGreater\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">69</span> &gt; <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberGreaterOrEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">69</span> &gt;= <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n\n\n <!-- SEMVER -->\n\n <ng-container *ngSwitchCase=\"UserComparator.SemVerIsOneOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span> IS ONE OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">1.0.0</span>, 4.3.5 ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerIsNotOneOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">2.1.0</span> IS NOT ONE OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ 1.0.0, 4.3.5 ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerLess\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span> &lt; <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.2.0</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerLessOrEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span> &lt;= <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.2.0</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerGreater\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span> &gt; <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.0.0-alpha</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerGreaterOrEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.2.0</span> &gt;= <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.1.0</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n\n <!-- DATETIME -->\n\n <ng-container *ngSwitchCase=\"UserComparator.DateTimeBefore\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">2020.11.05 10:36:24</span> BEFORE <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">2020.11.05 12:00:00</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.DateTimeAfter\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">2020.11.05 15:41:06</span> AFTER <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">2020.11.05 12:00:00</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n\n <!-- ARRAY -->\n\n <ng-container *ngSwitchCase=\"UserComparator.ArrayContainsAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">[ Writer, Reader ]</span> ARRAY CONTAINS ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">Writer</span>, Admin ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.ArrayDoesNotContainAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">[ Guest, Reader ]</span> ARRAY NOT CONTAINS ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ Writer, Admin ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </mat-radio-group>\n </div>\n</ng-template>\n\n<ng-template #confidential>\n <p>Select how the <i>comparison values</i> should be persisted:</p>\n <div matTooltip=\"The currently selected comparator does not support hashed comparison values, they will be presented as cleartext in the config JSON.\"\n [matTooltipDisabled]=\"confidentialEnabled\">\n <mat-radio-group class=\"confidential-container\" (change)=\"confidentialChange($event.value)\">\n <div class=\"confidential item\" (click)=\"confidentialChange(true)\">\n <mat-radio-button color=\"primary\" [value]=\"true\" [checked]=\"isConfidential\" [disabled]=\"!confidentialEnabled || data.readOnly\">\n <div class=\"title\">\n <div class=\"text\">Hashed</div>\n <div class=\"icon\"><mat-icon>lock</mat-icon></div>\n </div>\n </mat-radio-button>\n <div class=\"description\">\n We recommend using this option in case of frontend applications targeting users based on sensitive data (like email addresses, names, etc). \n \n </div>\n </div>\n <div class=\"cleartext item\" (click)=\"confidentialChange(false)\">\n <mat-radio-button color=\"primary\" [value]=\"false\" [checked]=\"!isConfidential\" [disabled]=\"!confidentialEnabled || data.readOnly\">\n <div class=\"title\">\n <div class=\"text\">Cleartext</div>\n <div class=\"icon\"><mat-icon>lock_open_right</mat-icon></div>\n </div>\n </mat-radio-button>\n <div class=\"description\">\n You can use this option when you target users based on non-sensitive data. Comparison values will be presented as plain text in the <i>config JSON</i>.\n </div>\n </div>\n </mat-radio-group>\n </div>\n</ng-template>", styles: [".container{width:100%;padding:0 24px!important}.container .confidential-container{display:flex;flex-direction:row;margin-bottom:15px}.container .confidential-container .item{flex:50%;border:1px solid rgb(224,224,224);cursor:pointer;padding:5px 5px 10px;border-radius:5px}.container .confidential-container .confidential{margin-right:5px}.container .confidential-container .cleartext{margin-left:5px}.container .confidential-container .title{cursor:pointer;display:flex;flex-direction:row;align-items:center}.container .confidential-container .title .text{font-weight:700}.container .confidential-container .title .icon{margin-left:3px}.container .confidential-container .title .icon mat-icon{font-size:18px;width:18px;height:18px}.container .confidential-container .description{font-size:12px;padding-left:10px;line-height:16px}.container .comparator-container{display:flex;flex-direction:row;flex-wrap:wrap;width:100%}.container .comparator-container .item{flex:0 0 calc(50% - 17px);border:1px solid rgb(224,224,224);cursor:pointer;padding:5px 5px 10px;border-radius:5px;margin-bottom:10px}.container .comparator-container .col-0{margin-right:5px}.container .comparator-container .col-1{margin-left:5px}.container .comparator-container .title{cursor:pointer;font-weight:700}.container .comparator-container .description{font-size:12px;line-height:16px;padding-left:10px;cursor:pointer}.container .comparator-container .description .example{background-color:#f1f1f1;opacity:.8;padding:3px 5px;border-radius:5px;display:inline-block}.container .comparator-container .description .example .comp-attr{font-weight:600;font-style:italic;padding-right:3px}.container .comparator-container .description .example .comp-val{padding-left:3px;padding-right:3px;font-style:italic}.container .comparator-container .description .example .match-val{font-weight:600}.container .comparator-container .description .example .arrow{color:#636363}.container .comparator-container .selected{border-color:#f7a224}.tabs{margin:0 24px}.mat-button-toggle-group{flex-wrap:wrap}@media (max-width: 500px){.container .comparator-container .item{flex:100%}.container .comparator-container .col-0{margin-right:0}.container .comparator-container .col-1{margin-left:0}.container .confidential-container{flex-wrap:wrap}.container .confidential-container .item{flex:100%}.container .confidential-container .confidential{margin-right:0;margin-bottom:10px}.container .confidential-container .cleartext{margin-left:0}}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i7.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i7.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i8.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i8.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "directive", type: i9.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i9.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }] }); }
105
105
  }
106
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ComparatorDialogComponent, decorators: [{
106
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ComparatorDialogComponent, decorators: [{
107
107
  type: Component,
108
108
  args: [{ selector: 'app-comparator-dialog', template: "<h2 mat-dialog-title cdkDrag cdkDragRootElement=\".cdk-overlay-pane\" cdkDragHandle class=\"draggable\">Comparator selector</h2>\n<div class=\"tabs\">\n <mat-button-toggle-group [ngModel]=\"selectedGroup\" (ngModelChange)=\"changeGroup($event)\">\n <mat-button-toggle [value]=\"ComparatorGroup.Text\">Text</mat-button-toggle>\n <mat-button-toggle [value]=\"ComparatorGroup.Number\">Number</mat-button-toggle>\n <mat-button-toggle [value]=\"ComparatorGroup.Semver\">Semantic version</mat-button-toggle>\n <mat-button-toggle [value]=\"ComparatorGroup.DateTime\">Datetime</mat-button-toggle>\n <mat-button-toggle [value]=\"ComparatorGroup.Array\">Array</mat-button-toggle>\n </mat-button-toggle-group>\n</div>\n\n<div mat-dialog-content class=\"container\" [ngSwitch]=\"selectedGroup\">\n <div *ngSwitchCase=\"ComparatorGroup.Text\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain string/text.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.Text}\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"confidential\"></ng-container>\n </div>\n\n <div *ngSwitchCase=\"ComparatorGroup.Number\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain numbers.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.Number}\"></ng-container>\n </div>\n\n <div *ngSwitchCase=\"ComparatorGroup.Semver\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain semantic versions.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.Semver}\"></ng-container>\n </div>\n\n <div *ngSwitchCase=\"ComparatorGroup.DateTime\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain datetimes.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.DateTime}\"></ng-container>\n </div>\n\n <div *ngSwitchCase=\"ComparatorGroup.Array\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain items of a string/text list.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.Array}\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"confidential\"></ng-container>\n </div>\n</div>\n<div mat-dialog-actions>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-stroked-button mat-dialog-close>Cancel</button>\n <button *ngIf=\"data.readOnly\" type=\"button\" mat-stroked-button color=\"primary\" mat-dialog-close>Close</button>\n</div>\n\n<ng-template #comparators let-group=\"group\">\n <div>\n <mat-radio-group (change)=\"comparatorChange($event.value)\">\n <div class=\"comparator-container\">\n <div class=\"item\" [ngClass]=\"'col-' + i % 2\" [class.selected]=\"comparator.value === selectedComparator\" \n *ngFor=\"let comparator of listComparators(group); let i = index\" (click)=\"comparatorChange(comparator.value)\"> \n <mat-radio-button color=\"primary\" [value]=\"comparator.value\" [disabled]=\"data.readOnly\"\n [checked]=\"comparator.value === selectedComparator\" [matTooltip]=\"comparator.description\">\n <div class=\"title\">\n {{comparator.label}}\n </div>\n </mat-radio-button>\n <div class=\"description\">\n <div class=\"example\">\n <ng-container [ngSwitch]=\"comparator.value\">\n\n <!-- TEXT -->\n <ng-container *ngSwitchCase=\"UserComparator.TextEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;foo.com</span> EQUALS <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">bob&#64;foo.com</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextDoesNotEqual\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">alice&#64;foo.com</span> NOT EQUALS <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">bob&#64;foo.com</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.IsOneOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">iOS</span> IS ONE OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ Android, macOS, <span class=\"match-val\">iOS</span> ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.IsNotOneOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">iOS</span> IS NOT ONE OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ Android, macOS, Windows ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextStartsWithAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;foo.com</span> STARTS WITH ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">bob</span>, jane ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextNotStartsWithAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">alice&#64;foo.com</span> NOT STARTS WITH ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ bob, jane ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextEndsWithAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;foo.com</span> ENDS WITH ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">&#64;foo.com</span>, &#64;bar.com ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextNotEndsWithAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;example.com</span> NOT ENDS WITH ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ &#64;foo.com, &#64;bar.com ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.ContainsAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">https://test-app.foo.com</span> CONTAINS ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">test</span>, localhost ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.DoesNotContainAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">https://app.foo.com</span> NOT CONTAINS ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ test, localhost ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n\n <!-- NUMBER -->\n\n <ng-container *ngSwitchCase=\"UserComparator.NumberEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">42</span> = <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberDoesNotEqual\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">42</span> != <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">3.14</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberLess\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">3.14</span> &lt; <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberLessOrEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">3.14</span> &lt;= <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberGreater\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">69</span> &gt; <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberGreaterOrEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">69</span> &gt;= <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n\n\n <!-- SEMVER -->\n\n <ng-container *ngSwitchCase=\"UserComparator.SemVerIsOneOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span> IS ONE OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">1.0.0</span>, 4.3.5 ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerIsNotOneOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">2.1.0</span> IS NOT ONE OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ 1.0.0, 4.3.5 ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerLess\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span> &lt; <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.2.0</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerLessOrEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span> &lt;= <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.2.0</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerGreater\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span> &gt; <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.0.0-alpha</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerGreaterOrEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.2.0</span> &gt;= <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.1.0</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n\n <!-- DATETIME -->\n\n <ng-container *ngSwitchCase=\"UserComparator.DateTimeBefore\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">2020.11.05 10:36:24</span> BEFORE <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">2020.11.05 12:00:00</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.DateTimeAfter\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">2020.11.05 15:41:06</span> AFTER <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">2020.11.05 12:00:00</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n\n <!-- ARRAY -->\n\n <ng-container *ngSwitchCase=\"UserComparator.ArrayContainsAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">[ Writer, Reader ]</span> ARRAY CONTAINS ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">Writer</span>, Admin ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.ArrayDoesNotContainAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">[ Guest, Reader ]</span> ARRAY NOT CONTAINS ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ Writer, Admin ]</span> <span class=\"arrow\">\u2794</span> true\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </mat-radio-group>\n </div>\n</ng-template>\n\n<ng-template #confidential>\n <p>Select how the <i>comparison values</i> should be persisted:</p>\n <div matTooltip=\"The currently selected comparator does not support hashed comparison values, they will be presented as cleartext in the config JSON.\"\n [matTooltipDisabled]=\"confidentialEnabled\">\n <mat-radio-group class=\"confidential-container\" (change)=\"confidentialChange($event.value)\">\n <div class=\"confidential item\" (click)=\"confidentialChange(true)\">\n <mat-radio-button color=\"primary\" [value]=\"true\" [checked]=\"isConfidential\" [disabled]=\"!confidentialEnabled || data.readOnly\">\n <div class=\"title\">\n <div class=\"text\">Hashed</div>\n <div class=\"icon\"><mat-icon>lock</mat-icon></div>\n </div>\n </mat-radio-button>\n <div class=\"description\">\n We recommend using this option in case of frontend applications targeting users based on sensitive data (like email addresses, names, etc). \n \n </div>\n </div>\n <div class=\"cleartext item\" (click)=\"confidentialChange(false)\">\n <mat-radio-button color=\"primary\" [value]=\"false\" [checked]=\"!isConfidential\" [disabled]=\"!confidentialEnabled || data.readOnly\">\n <div class=\"title\">\n <div class=\"text\">Cleartext</div>\n <div class=\"icon\"><mat-icon>lock_open_right</mat-icon></div>\n </div>\n </mat-radio-button>\n <div class=\"description\">\n You can use this option when you target users based on non-sensitive data. Comparison values will be presented as plain text in the <i>config JSON</i>.\n </div>\n </div>\n </mat-radio-group>\n </div>\n</ng-template>", styles: [".container{width:100%;padding:0 24px!important}.container .confidential-container{display:flex;flex-direction:row;margin-bottom:15px}.container .confidential-container .item{flex:50%;border:1px solid rgb(224,224,224);cursor:pointer;padding:5px 5px 10px;border-radius:5px}.container .confidential-container .confidential{margin-right:5px}.container .confidential-container .cleartext{margin-left:5px}.container .confidential-container .title{cursor:pointer;display:flex;flex-direction:row;align-items:center}.container .confidential-container .title .text{font-weight:700}.container .confidential-container .title .icon{margin-left:3px}.container .confidential-container .title .icon mat-icon{font-size:18px;width:18px;height:18px}.container .confidential-container .description{font-size:12px;padding-left:10px;line-height:16px}.container .comparator-container{display:flex;flex-direction:row;flex-wrap:wrap;width:100%}.container .comparator-container .item{flex:0 0 calc(50% - 17px);border:1px solid rgb(224,224,224);cursor:pointer;padding:5px 5px 10px;border-radius:5px;margin-bottom:10px}.container .comparator-container .col-0{margin-right:5px}.container .comparator-container .col-1{margin-left:5px}.container .comparator-container .title{cursor:pointer;font-weight:700}.container .comparator-container .description{font-size:12px;line-height:16px;padding-left:10px;cursor:pointer}.container .comparator-container .description .example{background-color:#f1f1f1;opacity:.8;padding:3px 5px;border-radius:5px;display:inline-block}.container .comparator-container .description .example .comp-attr{font-weight:600;font-style:italic;padding-right:3px}.container .comparator-container .description .example .comp-val{padding-left:3px;padding-right:3px;font-style:italic}.container .comparator-container .description .example .match-val{font-weight:600}.container .comparator-container .description .example .arrow{color:#636363}.container .comparator-container .selected{border-color:#f7a224}.tabs{margin:0 24px}.mat-button-toggle-group{flex-wrap:wrap}@media (max-width: 500px){.container .comparator-container .item{flex:100%}.container .comparator-container .col-0{margin-right:0}.container .comparator-container .col-1{margin-left:0}.container .confidential-container{flex-wrap:wrap}.container .confidential-container .item{flex:100%}.container .confidential-container .confidential{margin-right:0;margin-bottom:10px}.container .confidential-container .cleartext{margin-left:0}}\n"] }]
109
109
  }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
110
110
  type: Inject,
111
111
  args: [MAT_DIALOG_DATA]
112
112
  }] }] });
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFyYXRvci1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29uZmlnY2F0LXB1YmxpY2FwaS11aS9zcmMvbGliL3YyL2ZlYXR1cmUtZmxhZy9ldmFsdWF0aW9uLWZvcm11bGEvdGFyZ2V0aW5nLXJ1bGUvY29uZGl0aW9ucy91c2VyLWNvbmRpdGlvbi9jb21wYXJhdG9yLWRpYWxvZy9jb21wYXJhdG9yLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1jb25maWdjYXQtcHVibGljYXBpLXVpL3NyYy9saWIvdjIvZmVhdHVyZS1mbGFnL2V2YWx1YXRpb24tZm9ybXVsYS90YXJnZXRpbmctcnVsZS9jb25kaXRpb25zL3VzZXItY29uZGl0aW9uL2NvbXBhcmF0b3ItZGlhbG9nL2NvbXBhcmF0b3ItZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7OztBQUVoRSxJQUFLLGVBTUo7QUFORCxXQUFLLGVBQWU7SUFDbEIscURBQVEsQ0FBQTtJQUNSLHlEQUFVLENBQUE7SUFDVix5REFBVSxDQUFBO0lBQ1YsNkRBQVksQ0FBQTtJQUNaLHVEQUFTLENBQUE7QUFDWCxDQUFDLEVBTkksZUFBZSxLQUFmLGVBQWUsUUFNbkI7QUFlRCxNQUFNLE9BQU8seUJBQXlCO0lBOENwQyxZQUNTLFNBQWtELEVBQ3pCLElBQVM7UUFEbEMsY0FBUyxHQUFULFNBQVMsQ0FBeUM7UUFDekIsU0FBSSxHQUFK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RlUseUJBQXlCLDhDQWdEMUIsZUFBZTtrR0FoRGQseUJBQXlCLDZEQ3pCdEMsczVqQkFpTWM7OzJGRHhLRCx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0UsdUJBQXVCOzswQkFvRDlCLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IFVzZXJDb21wYXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vYm9vdHN0cmFwJztcblxuZW51bSBDb21wYXJhdG9yR3JvdXAge1xuICBUZXh0ID0gMCxcbiAgTnVtYmVyID0gMSxcbiAgU2VtdmVyID0gMixcbiAgRGF0ZVRpbWUgPSAzLFxuICBBcnJheSA9IDRcbn1cblxuaW50ZXJmYWNlIENvbXBhcmF0b3JJdGVtIHtcbiAgdmFsdWU6IFVzZXJDb21wYXJhdG9yLFxuICBzZW5zaXRpdmVWYWx1ZT86IFVzZXJDb21wYXJhdG9yLFxuICBsYWJlbDogc3RyaW5nLFxuICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICBncm91cDogQ29tcGFyYXRvckdyb3VwLFxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY29tcGFyYXRvci1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29tcGFyYXRvci1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb21wYXJhdG9yLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDb21wYXJhdG9yRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBDb21wYXJhdG9yR3JvdXAgPSBDb21wYXJhdG9yR3JvdXA7XG4gIHNlbGVjdGVkR3JvdXAgPSBDb21wYXJhdG9yR3JvdXAuVGV4dDtcbiAgc2VsZWN0ZWRDb21wYXJhdG9yID0gVXNlckNvbXBhcmF0b3IuVGV4dEVxdWFscztcbiAgaXNDb25maWRlbnRpYWwgPSB0cnVlO1xuICBsYXN0Q29uZmlkZW50aWFsVmFsdWUgPSB0cnVlO1xuICBjb25maWRlbnRpYWxFbmFibGVkID0gdHJ1ZTtcbiAgVXNlckNvbXBhcmF0b3IgPSBVc2VyQ29tcGFyYXRvcjtcblxuICBjb21wYXJpc29uQXR0cmlidXRlVG9vbHRpcCA9IFwiVXNlciBPYmplY3QncyB2YWx1ZSBwYXNzZWQgdG8gdGhlIFNESyAoQ29tcGFyaXNvbiBhdHRyaWJ1dGUpXCI7XG4gIGNvbXBhcmlzb25WYWx1ZVRvb2x0aXAgPSBcIkNvbXBhcmlzb24gdmFsdWUgc2V0IG9uIHRoZSBDb25maWdDYXQgRGFzaGJvYXJkXCI7XG5cbiAgY29tcGFyYXRvcnM6IENvbXBhcmF0b3JJdGVtW10gPSBbXG4gICAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuVGV4dEVxdWFscywgc2Vuc2l0aXZlVmFsdWU6IFVzZXJDb21wYXJhdG9yLlNlbnNpdGl2ZVRleHRFcXVhbHMsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuVGV4dCwgbGFiZWw6ICdFUVVBTFMnLCBkZXNjcmlwdGlvbjogXCJDaGVja3Mgd2hldGhlciB0aGUgVXNlciBPYmplY3QncyBjb21wYXJpc29uIGF0dHJpYnV0ZSBwYXNzZWQgdG8gdGhlIFNESyBpcyBlcXVhbCB0byB0aGUgY29tcGFyaXNvbiB2YWx1ZSBzZXQgb24gdGhlIENvbmZpZ0NhdCBEYXNoYm9hcmRcIiB9LFxuICAgIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLlRleHREb2VzTm90RXF1YWwsIHNlbnNpdGl2ZVZhbHVlOiBVc2VyQ29tcGFyYXRvci5TZW5zaXRpdmVUZXh0RG9lc05vdEVxdWFsLCBncm91cDogQ29tcGFyYXRvckdyb3VwLlRleHQsIGxhYmVsOiAnTk9UIEVRVUFMUycsIGRlc2NyaXB0aW9uOiBcIkNoZWNrcyB3aGV0aGVyIHRoZSBVc2VyIE9iamVjdCdzIGNvbXBhcmlzb24gYXR0cmlidXRlIHBhc3NlZCB0byB0aGUgU0RLIGlzIG5vdCBlcXVhbCB0byB0aGUgY29tcGFyaXNvbiB2YWx1ZVwiIH0sXG4gICAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuSXNPbmVPZiwgc2Vuc2l0aXZlVmFsdWU6IFVzZXJDb21wYXJhdG9yLlNlbnNpdGl2ZUlzT25lT2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuVGV4dCwgbGFiZWw6ICdJUyBPTkUgT0YnLCBkZXNjcmlwdGlvbjogXCJDaGVja3Mgd2hldGhlciB0aGUgVXNlciBPYmplY3QncyBjb21wYXJpc29uIGF0dHJpYnV0ZSBwYXNzZWQgdG8gdGhlIFNESyBpcyBlcXVhbCB0byBhbnkgb2YgdGhlIGNvbXBhcmlzb24gdmFsdWVzXCIgfSxcbiAgICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5Jc05vdE9uZU9mLCBzZW5zaXRpdmVWYWx1ZTogVXNlckNvbXBhcmF0b3IuU2Vuc2l0aXZlSXNOb3RPbmVPZiwgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5UZXh0LCBsYWJlbDogJ0lTIE5PVCBPTkUgT0YnLCBkZXNjcmlwdGlvbjogXCJDaGVja3Mgd2hldGhlciB0aGUgVXNlciBPYmplY3QncyBjb21wYXJpc29uIGF0dHJpYnV0ZSBwYXNzZWQgdG8gdGhlIFNESyBpcyBub3QgZXF1YWwgdG8gYW55IG9mIHRoZSBjb21wYXJpc29uIHZhbHVlc1wiIH0sXG4gICAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuVGV4dFN0YXJ0c1dpdGhBbnlPZiwgc2Vuc2l0aXZlVmFsdWU6IFVzZXJDb21wYXJhdG9yLlNlbnNpdGl2ZVRleHRTdGFydHNXaXRoQW55T2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuVGV4dCwgbGFiZWw6ICdTVEFSVFMgV0lUSCBBTlkgT0YnLCBkZXNjcmlwdGlvbjogXCJDaGVja3Mgd2hldGhlciB0aGUgVXNlciBPYmplY3QncyBjb21wYXJpc29uIGF0dHJpYnV0ZSBwYXNzZWQgdG8gdGhlIFNESyBzdGFydHMgd2l0aCBhbnkgb2YgdGhlIGNvbXBhcmlzb24gdmFsdWVzXCIgfSxcbiAgICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5UZXh0Tm90U3RhcnRzV2l0aEFueU9mLCBzZW5zaXRpdmVWYWx1ZTogVXNlckNvbXBhcmF0b3IuU2Vuc2l0aXZlVGV4dE5vdFN0YXJ0c1dpdGhBbnlPZiwgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5UZXh0LCBsYWJlbDogJ05PVCBTVEFSVFMgV0lUSCBBTlkgT0YnLCBkZXNjcmlwdGlvbjogXCJDaGVja3Mgd2hldGhlciB0aGUgVXNlciBPYmplY3QncyBjb21wYXJpc29uIGF0dHJpYnV0ZSBwYXNzZWQgdG8gdGhlIFNESyBkb2VzIG5vdCBzdGFydCB3aXRoIGFueSBvZiB0aGUgY29tcGFyaXNvbiB2YWx1ZXNcIiB9LFxuICAgIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLlRleHRFbmRzV2l0aEFueU9mLCBzZW5zaXRpdmVWYWx1ZTogVXNlckNvbXBhcmF0b3IuU2Vuc2l0aXZlVGV4dEVuZHNXaXRoQW55T2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuVGV4dCwgbGFiZWw6ICdFTkRTIFdJVEggQU5ZIE9GJywgZGVzY3JpcHRpb246IFwiQ2hlY2tzIHdoZXRoZXIgdGhlIFVzZXIgT2JqZWN0J3MgY29tcGFyaXNvbiBhdHRyaWJ1dGUgcGFzc2VkIHRvIHRoZSBTREsgZW5kcyB3aXRoIGFueSBvZiB0aGUgY29tcGFyaXNvbiB2YWx1ZXNcIiB9LFxuICAgIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLlRleHROb3RFbmRzV2l0aEFueU9mLCBzZW5zaXRpdmVWYWx1ZTogVXNlckNvbXBhcmF0b3IuU2Vuc2l0aXZlVGV4dE5vdEVuZHNXaXRoQW55T2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuVGV4dCwgbGFiZWw6ICdOT1QgRU5EUyBXSVRIIEFOWSBPRicsIGRlc2NyaXB0aW9uOiBcIkNoZWNrcyB3aGV0aGVyIHRoZSBVc2VyIE9iamVjdCdzIGNvbXBhcmlzb24gYXR0cmlidXRlIHBhc3NlZCB0byB0aGUgU0RLIGRvZXMgbm90IGVuZCB3aXRoIGFueSBvZiB0aGUgY29tcGFyaXNvbiB2YWx1ZXNcIiB9LFxuICAgIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLkNvbnRhaW5zQW55T2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuVGV4dCwgbGFiZWw6ICdDT05UQUlOUyBBTlkgT0YnLCBkZXNjcmlwdGlvbjogXCJDaGVja3Mgd2hldGhlciB0aGUgVXNlciBPYmplY3QncyBjb21wYXJpc29uIGF0dHJpYnV0ZSBwYXNzZWQgdG8gdGhlIFNESyBjb250YWlucyBhbnkgY29tcGFyaXNvbiB2YWx1ZXMgYXMgYSBzdWJzdHJpbmdcIiB9LFxuICAgIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLkRvZXNOb3RDb250YWluQW55T2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuVGV4dCwgbGFiZWw6ICdET0VTIE5PVCBDT05UQUlOIEFOWSBPRicsIGRlc2NyaXB0aW9uOiBcIkNoZWNrcyB3aGV0aGVyIHRoZSBVc2VyIE9iamVjdCdzIGNvbXBhcmlzb24gYXR0cmlidXRlIHBhc3NlZCB0byB0aGUgU0RLIGRvZXMgbm90IGNvbnRhaW4gYW55IGNvbXBhcmlzb24gdmFsdWVzIGFzIGEgc3Vic3RyaW5nXCIgfSxcblxuICAgIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLk51bWJlckVxdWFscywgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5OdW1iZXIsIGxhYmVsOiAnPSAoRVFVQUxTKScsIGRlc2NyaXB0aW9uOiBcIkNoZWNrcyB3aGV0aGVyIHRoZSBVc2VyIE9iamVjdCdzIGNvbXBhcmlzb24gYXR0cmlidXRlIHBhc3NlZCB0byB0aGUgU0RLIChpbnRlcnByZXRlZCBhcyBhIGRlY2ltYWwgbnVtYmVyKSBpcyBlcXVhbCB0byB0aGUgY29tcGFyaXNvbiB2YWx1ZVwiIH0sXG4gICAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuTnVtYmVyRG9lc05vdEVxdWFsLCBncm91cDogQ29tcGFyYXRvckdyb3VwLk51bWJlciwgbGFiZWw6ICchPSAoTk9UIEVRVUFMUyknLCBkZXNjcmlwdGlvbjogXCJDaGVja3Mgd2hldGhlciB0aGUgVXNlciBPYmplY3QncyBjb21wYXJpc29uIGF0dHJpYnV0ZSBwYXNzZWQgdG8gdGhlIFNESyAoaW50ZXJwcmV0ZWQgYXMgYSBkZWNpbWFsIG51bWJlcikgaXMgbm90IGVxdWFsIHRvIHRoZSBjb21wYXJpc29uIHZhbHVlXCIgfSxcbiAgICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5OdW1iZXJMZXNzLCBncm91cDogQ29tcGFyYXRvckdyb3VwLk51bWJlciwgbGFiZWw6ICc8IChMRVNTIFRIQU4pJywgZGVzY3JpcHRpb246IFwiQ2hlY2tzIHdoZXRoZXIgdGhlIFVzZXIgT2JqZWN0J3MgY29tcGFyaXNvbiBhdHRyaWJ1dGUgcGFzc2VkIHRvIHRoZSBTREsgKGludGVycHJldGVkIGFzIGEgZGVjaW1hbCBudW1iZXIpIGlzIGxlc3MgdGhhbiB0aGUgY29tcGFyaXNvbiB2YWx1ZVwiIH0sXG4gICAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuTnVtYmVyTGVzc09yRXF1YWxzLCBncm91cDogQ29tcGFyYXRvckdyb3VwLk51bWJlciwgbGFiZWw6ICc8PSAoTEVTUyBUSEFOIE9SIEVRVUFMKScsIGRlc2NyaXB0aW9uOiBcIkNoZWNrcyB3aGV0aGVyIHRoZSBVc2VyIE9iamVjdCdzIGNvbXBhcmlzb24gYXR0cmlidXRlIHBhc3NlZCB0byB0aGUgU0RLIChpbnRlcnByZXRlZCBhcyBhIGRlY2ltYWwgbnVtYmVyKSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGNvbXBhcmlzb24gdmFsdWVcIiB9LFxuICAgIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLk51bWJlckdyZWF0ZXIsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuTnVtYmVyLCBsYWJlbDogJz4gKEdSRUFURVIgVEhBTiknLCBkZXNjcmlwdGlvbjogXCJDaGVja3Mgd2hldGhlciB0aGUgVXNlciBPYmplY3QncyBjb21wYXJpc29uIGF0dHJpYnV0ZSBwYXNzZWQgdG8gdGhlIFNESyAoaW50ZXJwcmV0ZWQgYXMgYSBkZWNpbWFsIG51bWJlcikgaXMgZ3JlYXRlciB0aGFuIHRoZSBjb21wYXJpc29uIHZhbHVlXCIgfSxcbiAgICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5OdW1iZXJHcmVhdGVyT3JFcXVhbHMsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuTnVtYmVyLCBsYWJlbDogJz49IChHUkFURVIgVEhBTiBPUiBFUVVBTCknLCBkZXNjcmlwdGlvbjogXCJDaGVja3Mgd2hldGhlciB0aGUgVXNlciBPYmplY3QncyBjb21wYXJpc29uIGF0dHJpYnV0ZSBwYXNzZWQgdG8gdGhlIFNESyAoaW50ZXJwcmV0ZWQgYXMgYSBkZWNpbWFsIG51bWJlcikgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBjb21wYXJpc29uIHZhbHVlXCIgfSxcblxuICAgIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLlNlbVZlcklzT25lT2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuU2VtdmVyLCBsYWJlbDogJ0lTIE9ORSBPRicsIGRlc2NyaXB0aW9uOiBcIkNoZWNrcyB3aGV0aGVyIHRoZSBVc2VyIE9iamVjdCdzIGNvbXBhcmlzb24gYXR0cmlidXRlIHBhc3NlZCB0byB0aGUgU0RLIChpbnRlcnByZXRlZCBhcyBhIHNlbWFudGljIHZlcnNpb24pIGlzIGVxdWFsIHRvIGFueSBvZiB0aGUgY29tcGFyaXNvbiB2YWx1ZXNcIiB9LFxuICAgIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLlNlbVZlcklzTm90T25lT2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuU2VtdmVyLCBsYWJlbDogJ0lTIE5PVCBPTkUgT0YnLCBkZXNjcmlwdGlvbjogXCJDaGVja3Mgd2hldGhlciB0aGUgVXNlciBPYmplY3QncyBjb21wYXJpc29uIGF0dHJpYnV0ZSBwYXNzZWQgdG8gdGhlIFNESyAoaW50ZXJwcmV0ZWQgYXMgYSBzZW1hbnRpYyB2ZXJzaW9uKSBpcyBub3QgZXF1YWwgdG8gYW55IG9mIHRoZSBjb21wYXJpc29uIHZhbHVlc1wiIH0sXG4gICAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuU2VtVmVyTGVzcywgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5TZW12ZXIsIGxhYmVsOiAnPCAoTEVTUyBUSEFOKScsIGRlc2NyaXB0aW9uOiBcIkNoZWNrcyB3aGV0aGVyIHRoZSBVc2VyIE9iamVjdCdzIGNvbXBhcmlzb24gYXR0cmlidXRlIHBhc3NlZCB0byB0aGUgU0RLIChpbnRlcnByZXRlZCBhcyBhIHNlbWFudGljIHZlcnNpb24pIGlzIGxlc3MgdGhhbiB0aGUgY29tcGFyaXNvbiB2YWx1ZVwiIH0sXG4gICAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuU2VtVmVyTGVzc09yRXF1YWxzLCBncm91cDogQ29tcGFyYXRvckdyb3VwLlNlbXZlciwgbGFiZWw6ICc8PSAoTEVTUyBUSEFOIE9SIEVRVUFMKScsIGRlc2NyaXB0aW9uOiBcIkNoZWNrcyB3aGV0aGVyIHRoZSBVc2VyIE9iamVjdCdzIGNvbXBhcmlzb24gYXR0cmlidXRlIHBhc3NlZCB0byB0aGUgU0RLIChpbnRlcnByZXRlZCBhcyBhIHNlbWFudGljIHZlcnNpb24pIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgY29tcGFyaXNvbiB2YWx1ZVwiIH0sXG4gICAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuU2VtVmVyR3JlYXRlciwgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5TZW12ZXIsIGxhYmVsOiAnPiAoR1JFQVRFUiBUSEFOKScsIGRlc2NyaXB0aW9uOiBcIkNoZWNrcyB3aGV0aGVyIHRoZSBVc2VyIE9iamVjdCdzIGNvbXBhcmlzb24gYXR0cmlidXRlIHBhc3NlZCB0byB0aGUgU0RLIChpbnRlcnByZXRlZCBhcyBhIHNlbWFudGljIHZlcnNpb24pIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY29tcGFyaXNvbiB2YWx1ZVwiIH0sXG4gICAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuU2VtVmVyR3JlYXRlck9yRXF1YWxzLCBncm91cDogQ29tcGFyYXRvckdyb3VwLlNlbXZlciwgbGFiZWw6ICc+PSAoR1JBVEVSIFRIQU4gT1IgRVFVQUwpJywgZGVzY3JpcHRpb246IFwiQ2hlY2tzIHdoZXRoZXIgdGhlIFVzZXIgT2JqZWN0J3MgY29tcGFyaXNvbiBhdHRyaWJ1dGUgcGFzc2VkIHRvIHRoZSBTREsgKGludGVycHJldGVkIGFzIGEgc2VtYW50aWMgdmVyc2lvbikgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBjb21wYXJpc29uIHZhbHVlXCIgfSxcblxuICAgIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLkRhdGVUaW1lQmVmb3JlLCBncm91cDogQ29tcGFyYXRvckdyb3VwLkRhdGVUaW1lLCBsYWJlbDogJ0JFRk9SRSAoVVRDKScsIGRlc2NyaXB0aW9uOiBcIkNoZWNrcyB3aGV0aGVyIHRoZSBVc2VyIE9iamVjdCdzIGNvbXBhcmlzb24gYXR0cmlidXRlIHBhc3NlZCB0byB0aGUgU0RLIChpbnRlcnByZXRlZCBhcyB0aGUgc2Vjb25kcyBlbGFwc2VkIHNpbmNlIFVuaXggRXBvY2gpIGlzIGxlc3MgdGhhbiB0aGUgY29tcGFyaXNvbiB2YWx1ZVwiIH0sXG4gICAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuRGF0ZVRpbWVBZnRlciwgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5EYXRlVGltZSwgbGFiZWw6ICdBRlRFUiAoVVRDKScsIGRlc2NyaXB0aW9uOiBcIkNoZWNrcyB3aGV0aGVyIHRoZSBVc2VyIE9iamVjdCdzIGNvbXBhcmlzb24gYXR0cmlidXRlIHBhc3NlZCB0byB0aGUgU0RLIChpbnRlcnByZXRlZCBhcyB0aGUgc2Vjb25kcyBlbGFwc2VkIHNpbmNlIFVuaXggRXBvY2gpIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY29tcGFyaXNvbiB2YWx1ZS52YWx1ZVwiIH0sXG5cbiAgICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5BcnJheUNvbnRhaW5zQW55T2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuQXJyYXksIHNlbnNpdGl2ZVZhbHVlOiBVc2VyQ29tcGFyYXRvci5TZW5zaXRpdmVBcnJheUNvbnRhaW5zQW55T2YsIGxhYmVsOiAnQVJSQVkgQ09OVEFJTlMgQU5ZIE9GJywgZGVzY3JpcHRpb246IFwiQ2hlY2tzIHdoZXRoZXIgdGhlIFVzZXIgT2JqZWN0J3MgY29tcGFyaXNvbiBhdHRyaWJ1dGUgcGFzc2VkIHRvIHRoZSBTREsgKGludGVycHJldGVkIGFzIGEgc3RyaW5nIGxpc3QpIGNvbnRhaW5zIGFueSBvZiB0aGUgY29tcGFyaXNvbiB2YWx1ZXNcIiB9LFxuICAgIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLkFycmF5RG9lc05vdENvbnRhaW5BbnlPZiwgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5BcnJheSwgc2Vuc2l0aXZlVmFsdWU6IFVzZXJDb21wYXJhdG9yLlNlbnNpdGl2ZUFycmF5RG9lc05vdENvbnRhaW5BbnlPZiwgbGFiZWw6ICdBUlJBWSBOT1QgQ09OVEFJTlMgQU5ZIE9GJywgZGVzY3JpcHRpb246IFwiQ2hlY2tzIHdoZXRoZXIgdGhlIFVzZXIgT2JqZWN0J3MgY29tcGFyaXNvbiBhdHRyaWJ1dGUgcGFzc2VkIHRvIHRoZSBTREsgKGludGVycHJldGVkIGFzIGEgc3RyaW5nIGxpc3QpIGRvZXMgbm90IGNvbnRhaW4gYW55IG9mIHRoZSBjb21wYXJpc29uIHZhbHVlc1wiIH0sXG4gIF1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8Q29tcGFyYXRvckRpYWxvZ0NvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnkpIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5jb21wYXJhdG9ycy5maW5kKGMgPT4gYy52YWx1ZSA9PT0gdGhpcy5kYXRhLnNlbGVjdGVkQ29tcGFyYXRvciB8fCBjLnNlbnNpdGl2ZVZhbHVlID09PSB0aGlzLmRhdGEuc2VsZWN0ZWRDb21wYXJhdG9yKTtcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXAgPSBzZWxlY3RlZC5ncm91cDtcbiAgICB0aGlzLnNlbGVjdGVkQ29tcGFyYXRvciA9IHNlbGVjdGVkLnZhbHVlO1xuICAgIHRoaXMuaXNDb25maWRlbnRpYWwgPSB0aGlzLmRhdGEuc2VsZWN0ZWRDb21wYXJhdG9yID09PSBzZWxlY3RlZC5zZW5zaXRpdmVWYWx1ZTtcbiAgICB0aGlzLmxhc3RDb25maWRlbnRpYWxWYWx1ZSA9ICFzZWxlY3RlZC5zZW5zaXRpdmVWYWx1ZSA/IHRydWUgOiB0aGlzLmlzQ29uZmlkZW50aWFsO1xuICAgIHRoaXMuY29uZmlkZW50aWFsRW5hYmxlZCA9ICEhc2VsZWN0ZWQuc2Vuc2l0aXZlVmFsdWU7XG4gIH1cblxuICBsaXN0Q29tcGFyYXRvcnMoZ3JvdXA6IENvbXBhcmF0b3JHcm91cCk6IENvbXBhcmF0b3JJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmNvbXBhcmF0b3JzLmZpbHRlcihjID0+IGMuZ3JvdXAgPT09IGdyb3VwKTtcbiAgfVxuXG4gIGNoYW5nZUdyb3VwKGdyb3VwOiBDb21wYXJhdG9yR3JvdXApOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXAgPSBncm91cDtcbiAgfVxuXG4gIGNvbmZpZGVudGlhbENoYW5nZShjb25maWRlbnRpYWw6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29uZmlkZW50aWFsRW5hYmxlZCB8fCB0aGlzLmRhdGEucmVhZE9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pc0NvbmZpZGVudGlhbCA9IHRoaXMubGFzdENvbmZpZGVudGlhbFZhbHVlID0gY29uZmlkZW50aWFsO1xuICB9XG5cbiAgY29tcGFyYXRvckNoYW5nZShjb21wOiBVc2VyQ29tcGFyYXRvcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGEucmVhZE9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkQ29tcGFyYXRvciA9IGNvbXA7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmNvbXBhcmF0b3JzLmZpbmQoYyA9PiBjLnZhbHVlID09PSBjb21wIHx8IGMuc2Vuc2l0aXZlVmFsdWUgPT09IGNvbXApO1xuICAgIHRoaXMuY29uZmlkZW50aWFsRW5hYmxlZCA9ICEhc2VsZWN0ZWQuc2Vuc2l0aXZlVmFsdWU7XG4gICAgaWYgKCF0aGlzLmNvbmZpZGVudGlhbEVuYWJsZWQpIHtcbiAgICAgIHRoaXMuaXNDb25maWRlbnRpYWwgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0NvbmZpZGVudGlhbCA9IHRoaXMubGFzdENvbmZpZGVudGlhbFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHNldCgpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuY29tcGFyYXRvcnMuZmluZChjID0+IGMudmFsdWUgPT09IHRoaXMuc2VsZWN0ZWRDb21wYXJhdG9yIHx8IGMuc2Vuc2l0aXZlVmFsdWUgPT09IHRoaXMuc2VsZWN0ZWRDb21wYXJhdG9yKTtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmlzQ29uZmlkZW50aWFsICYmIHNlbGVjdGVkLnNlbnNpdGl2ZVZhbHVlID8gc2VsZWN0ZWQuc2Vuc2l0aXZlVmFsdWUgOiBzZWxlY3RlZC52YWx1ZTtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShyZXN1bHQpO1xuICB9XG59XG4iLCI8aDIgbWF0LWRpYWxvZy10aXRsZSBjZGtEcmFnIGNka0RyYWdSb290RWxlbWVudD1cIi5jZGstb3ZlcmxheS1wYW5lXCIgY2RrRHJhZ0hhbmRsZSBjbGFzcz1cImRyYWdnYWJsZVwiPkNvbXBhcmF0b3Igc2VsZWN0b3I8L2gyPlxuPGRpdiBjbGFzcz1cInRhYnNcIj5cbiAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgW25nTW9kZWxdPVwic2VsZWN0ZWRHcm91cFwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUdyb3VwKCRldmVudClcIj5cbiAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCJDb21wYXJhdG9yR3JvdXAuVGV4dFwiPlRleHQ8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cIkNvbXBhcmF0b3JHcm91cC5OdW1iZXJcIj5OdW1iZXI8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cIkNvbXBhcmF0b3JHcm91cC5TZW12ZXJcIj5TZW1hbnRpYyB2ZXJzaW9uPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCJDb21wYXJhdG9yR3JvdXAuRGF0ZVRpbWVcIj5EYXRldGltZTwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBbdmFsdWVdPVwiQ29tcGFyYXRvckdyb3VwLkFycmF5XCI+QXJyYXk8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XG48L2Rpdj5cblxuPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJjb250YWluZXJcIiBbbmdTd2l0Y2hdPVwic2VsZWN0ZWRHcm91cFwiPlxuICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIkNvbXBhcmF0b3JHcm91cC5UZXh0XCI+XG4gICAgICAgIDxwPlRoZSBmb2xsb3dpbmcgY29tcGFyYXRvcnMgYXNzdW1lIHRoYXQgdGhlIDxpPmNvbXBhcmlzb24gYXR0cmlidXRlJ3M8L2k+IHZhbHVlIChzZXQgb24gdGhlIFNESydzIDxhIGhyZWY9XCJodHRwczovL2NvbmZpZ2NhdC5jb20vZG9jcy90YXJnZXRpbmcvdXNlci1vYmplY3RcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+VXNlciBPYmplY3Q8L2E+KSBhbmQgdGhlIDxpPmNvbXBhcmlzb24gdmFsdWU8L2k+IGNvbnRhaW4gc3RyaW5nL3RleHQuPC9wPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbXBhcmF0b3JzXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntncm91cDpDb21wYXJhdG9yR3JvdXAuVGV4dH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb25maWRlbnRpYWxcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIkNvbXBhcmF0b3JHcm91cC5OdW1iZXJcIj5cbiAgICAgICAgPHA+VGhlIGZvbGxvd2luZyBjb21wYXJhdG9ycyBhc3N1bWUgdGhhdCB0aGUgPGk+Y29tcGFyaXNvbiBhdHRyaWJ1dGUnczwvaT4gdmFsdWUgKHNldCBvbiB0aGUgU0RLJ3MgPGEgaHJlZj1cImh0dHBzOi8vY29uZmlnY2F0LmNvbS9kb2NzL3RhcmdldGluZy91c2VyLW9iamVjdFwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5Vc2VyIE9iamVjdDwvYT4pIGFuZCB0aGUgPGk+Y29tcGFyaXNvbiB2YWx1ZTwvaT4gY29udGFpbiBudW1iZXJzLjwvcD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb21wYXJhdG9yc1wiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7Z3JvdXA6Q29tcGFyYXRvckdyb3VwLk51bWJlcn1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIkNvbXBhcmF0b3JHcm91cC5TZW12ZXJcIj5cbiAgICAgICAgPHA+VGhlIGZvbGxvd2luZyBjb21wYXJhdG9ycyBhc3N1bWUgdGhhdCB0aGUgPGk+Y29tcGFyaXNvbiBhdHRyaWJ1dGUnczwvaT4gdmFsdWUgKHNldCBvbiB0aGUgU0RLJ3MgPGEgaHJlZj1cImh0dHBzOi8vY29uZmlnY2F0LmNvbS9kb2NzL3RhcmdldGluZy91c2VyLW9iamVjdFwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5Vc2VyIE9iamVjdDwvYT4pIGFuZCB0aGUgPGk+Y29tcGFyaXNvbiB2YWx1ZTwvaT4gY29udGFpbiBzZW1hbnRpYyB2ZXJzaW9ucy48L3A+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29tcGFyYXRvcnNcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2dyb3VwOkNvbXBhcmF0b3JHcm91cC5TZW12ZXJ9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJDb21wYXJhdG9yR3JvdXAuRGF0ZVRpbWVcIj5cbiAgICAgICAgPHA+VGhlIGZvbGxvd2luZyBjb21wYXJhdG9ycyBhc3N1bWUgdGhhdCB0aGUgPGk+Y29tcGFyaXNvbiBhdHRyaWJ1dGUnczwvaT4gdmFsdWUgKHNldCBvbiB0aGUgU0RLJ3MgPGEgaHJlZj1cImh0dHBzOi8vY29uZmlnY2F0LmNvbS9kb2NzL3RhcmdldGluZy91c2VyLW9iamVjdFwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5Vc2VyIE9iamVjdDwvYT4pIGFuZCB0aGUgPGk+Y29tcGFyaXNvbiB2YWx1ZTwvaT4gY29udGFpbiBkYXRldGltZXMuPC9wPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbXBhcmF0b3JzXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntncm91cDpDb21wYXJhdG9yR3JvdXAuRGF0ZVRpbWV9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJDb21wYXJhdG9yR3JvdXAuQXJyYXlcIj5cbiAgICAgICAgPHA+VGhlIGZvbGxvd2luZyBjb21wYXJhdG9ycyBhc3N1bWUgdGhhdCB0aGUgPGk+Y29tcGFyaXNvbiBhdHRyaWJ1dGUnczwvaT4gdmFsdWUgKHNldCBvbiB0aGUgU0RLJ3MgPGEgaHJlZj1cImh0dHBzOi8vY29uZmlnY2F0LmNvbS9kb2NzL3RhcmdldGluZy91c2VyLW9iamVjdFwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5Vc2VyIE9iamVjdDwvYT4pIGFuZCB0aGUgPGk+Y29tcGFyaXNvbiB2YWx1ZTwvaT4gY29udGFpbiBpdGVtcyBvZiBhIHN0cmluZy90ZXh0IGxpc3QuPC9wPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbXBhcmF0b3JzXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntncm91cDpDb21wYXJhdG9yR3JvdXAuQXJyYXl9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29uZmlkZW50aWFsXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDxidXR0b24gKm5nSWY9XCIhZGF0YS5yZWFkT25seVwiIHR5cGU9XCJidXR0b25cIiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNldCgpXCI+U2V0PC9idXR0b24+XG4gICAgPGJ1dHRvbiAqbmdJZj1cIiFkYXRhLnJlYWRPbmx5XCIgdHlwZT1cImJ1dHRvblwiIG1hdC1zdHJva2VkLWJ1dHRvbiBtYXQtZGlhbG9nLWNsb3NlPkNhbmNlbDwvYnV0dG9uPlxuICAgIDxidXR0b24gKm5nSWY9XCJkYXRhLnJlYWRPbmx5XCIgdHlwZT1cImJ1dHRvblwiIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBtYXQtZGlhbG9nLWNsb3NlPkNsb3NlPC9idXR0b24+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNjb21wYXJhdG9ycyBsZXQtZ3JvdXA9XCJncm91cFwiPlxuICAgIDxkaXY+XG4gICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgKGNoYW5nZSk9XCJjb21wYXJhdG9yQ2hhbmdlKCRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wYXJhdG9yLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtXCIgW25nQ2xhc3NdPVwiJ2NvbC0nICsgaSAlIDJcIiBbY2xhc3Muc2VsZWN0ZWRdPVwiY29tcGFyYXRvci52YWx1ZSA9PT0gc2VsZWN0ZWRDb21wYXJhdG9yXCIgXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb21wYXJhdG9yIG9mIGxpc3RDb21wYXJhdG9ycyhncm91cCk7IGxldCBpID0gaW5kZXhcIiAoY2xpY2spPVwiY29tcGFyYXRvckNoYW5nZShjb21wYXJhdG9yLnZhbHVlKVwiPiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJjb21wYXJhdG9yLnZhbHVlXCIgW2Rpc2FibGVkXT1cImRhdGEucmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJjb21wYXJhdG9yLnZhbHVlID09PSBzZWxlY3RlZENvbXBhcmF0b3JcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJhdG9yLmRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXBhcmF0b3IubGFiZWx9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhhbXBsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbXBhcmF0b3IudmFsdWVcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRFWFQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlVzZXJDb21wYXJhdG9yLlRleHRFcXVhbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcC1hdHRyXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvbkF0dHJpYnV0ZVRvb2x0aXBcIj5ib2ImIzY0O2Zvby5jb208L3NwYW4+IEVRVUFMUyA8c3BhbiBjbGFzcz1cImNvbXAtdmFsIG1hdGNoLXZhbFwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25WYWx1ZVRvb2x0aXBcIj5ib2ImIzY0O2Zvby5jb208L3NwYW4+IDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7inpQ8L3NwYW4+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlVzZXJDb21wYXJhdG9yLlRleHREb2VzTm90RXF1YWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcC1hdHRyXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvbkF0dHJpYnV0ZVRvb2x0aXBcIj5hbGljZSYjNjQ7Zm9vLmNvbTwvc3Bhbj4gTk9UIEVRVUFMUyA8c3BhbiBjbGFzcz1cImNvbXAtdmFsXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvblZhbHVlVG9vbHRpcFwiPmJvYiYjNjQ7Zm9vLmNvbTwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJhcnJvd1wiPuKelDwvc3Bhbj4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiVXNlckNvbXBhcmF0b3IuSXNPbmVPZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wLWF0dHJcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uQXR0cmlidXRlVG9vbHRpcFwiPmlPUzwvc3Bhbj4gSVMgT05FIE9GIDxzcGFuIGNsYXNzPVwiY29tcC12YWxcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uVmFsdWVUb29sdGlwXCI+WyBBbmRyb2lkLCBtYWNPUywgPHNwYW4gY2xhc3M9XCJtYXRjaC12YWxcIj5pT1M8L3NwYW4+IF08L3NwYW4+IDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7inpQ8L3NwYW4+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlVzZXJDb21wYXJhdG9yLklzTm90T25lT2ZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcC1hdHRyXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvbkF0dHJpYnV0ZVRvb2x0aXBcIj5pT1M8L3NwYW4+IElTIE5PVCBPTkUgT0YgPHNwYW4gY2xhc3M9XCJjb21wLXZhbFwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25WYWx1ZVRvb2x0aXBcIj5bIEFuZHJvaWQsIG1hY09TLCBXaW5kb3dzIF08L3NwYW4+IDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7inpQ8L3NwYW4+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlVzZXJDb21wYXJhdG9yLlRleHRTdGFydHNXaXRoQW55T2ZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcC1hdHRyXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvbkF0dHJpYnV0ZVRvb2x0aXBcIj5ib2ImIzY0O2Zvby5jb208L3NwYW4+IFNUQVJUUyBXSVRIIEFOWSBPRiA8c3BhbiBjbGFzcz1cImNvbXAtdmFsXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvblZhbHVlVG9vbHRpcFwiPlsgPHNwYW4gY2xhc3M9XCJtYXRjaC12YWxcIj5ib2I8L3NwYW4+LCBqYW5lIF08L3NwYW4+IDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7inpQ8L3NwYW4+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlVzZXJDb21wYXJhdG9yLlRleHROb3RTdGFydHNXaXRoQW55T2ZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcC1hdHRyXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvbkF0dHJpYnV0ZVRvb2x0aXBcIj5hbGljZSYjNjQ7Zm9vLmNvbTwvc3Bhbj4gTk9UIFNUQVJUUyBXSVRIIEFOWSBPRiA8c3BhbiBjbGFzcz1cImNvbXAtdmFsXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvblZhbHVlVG9vbHRpcFwiPlsgYm9iLCBqYW5lIF08L3NwYW4+IDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7inpQ8L3NwYW4+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlVzZXJDb21wYXJhdG9yLlRleHRFbmRzV2l0aEFueU9mXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXAtYXR0clwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25BdHRyaWJ1dGVUb29sdGlwXCI+Ym9iJiM2NDtmb28uY29tPC9zcGFuPiBFTkRTIFdJVEggQU5ZIE9GIDxzcGFuIGNsYXNzPVwiY29tcC12YWxcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uVmFsdWVUb29sdGlwXCI+WyA8c3BhbiBjbGFzcz1cIm1hdGNoLXZhbFwiPiYjNjQ7Zm9vLmNvbTwvc3Bhbj4sICYjNjQ7YmFyLmNvbSBdPC9zcGFuPiA8c3BhbiBjbGFzcz1cImFycm93XCI+4p6UPC9zcGFuPiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJVc2VyQ29tcGFyYXRvci5UZXh0Tm90RW5kc1dpdGhBbnlPZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wLWF0dHJcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uQXR0cmlidXRlVG9vbHRpcFwiPmJvYiYjNjQ7ZXhhbXBsZS5jb208L3NwYW4+IE5PVCBFTkRTIFdJVEggQU5ZIE9GIDxzcGFuIGNsYXNzPVwiY29tcC12YWxcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uVmFsdWVUb29sdGlwXCI+WyAmIzY0O2Zvby5jb20sICYjNjQ7YmFyLmNvbSBdPC9zcGFuPiA8c3BhbiBjbGFzcz1cImFycm93XCI+4p6UPC9zcGFuPiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJVc2VyQ29tcGFyYXRvci5Db250YWluc0FueU9mXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXAtYXR0clwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25BdHRyaWJ1dGVUb29sdGlwXCI+aHR0cHM6Ly90ZXN0LWFwcC5mb28uY29tPC9zcGFuPiBDT05UQUlOUyBBTlkgT0YgPHNwYW4gY2xhc3M9XCJjb21wLXZhbFwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25WYWx1ZVRvb2x0aXBcIj5bIDxzcGFuIGNsYXNzPVwibWF0Y2gtdmFsXCI+dGVzdDwvc3Bhbj4sIGxvY2FsaG9zdCBdPC9zcGFuPiA8c3BhbiBjbGFzcz1cImFycm93XCI+4p6UPC9zcGFuPiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJVc2VyQ29tcGFyYXRvci5Eb2VzTm90Q29udGFpbkFueU9mXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXAtYXR0clwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25BdHRyaWJ1dGVUb29sdGlwXCI+aHR0cHM6Ly9hcHAuZm9vLmNvbTwvc3Bhbj4gTk9UIENPTlRBSU5TIEFOWSBPRiA8c3BhbiBjbGFzcz1cImNvbXAtdmFsXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvblZhbHVlVG9vbHRpcFwiPlsgdGVzdCwgbG9jYWxob3N0IF08L3NwYW4+IDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7inpQ8L3NwYW4+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBOVU1CRVIgLS0+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiVXNlckNvbXBhcmF0b3IuTnVtYmVyRXF1YWxzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXAtYXR0clwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25BdHRyaWJ1dGVUb29sdGlwXCI+NDI8L3NwYW4+ID0gPHNwYW4gY2xhc3M9XCJjb21wLXZhbCBtYXRjaC12YWxcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uVmFsdWVUb29sdGlwXCI+NDI8L3NwYW4+IDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7inpQ8L3NwYW4+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlVzZXJDb21wYXJhdG9yLk51bWJlckRvZXNOb3RFcXVhbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wLWF0dHJcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uQXR0cmlidXRlVG9vbHRpcFwiPjQyPC9zcGFuPiAhPSA8c3BhbiBjbGFzcz1cImNvbXAtdmFsIG1hdGNoLXZhbFwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25WYWx1ZVRvb2x0aXBcIj4zLjE0PC9zcGFuPiA8c3BhbiBjbGFzcz1cImFycm93XCI+4p6UPC9zcGFuPiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJVc2VyQ29tcGFyYXRvci5OdW1iZXJMZXNzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXAtYXR0clwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25BdHRyaWJ1dGVUb29sdGlwXCI+My4xNDwvc3Bhbj4gJmx0OyA8c3BhbiBjbGFzcz1cImNvbXAtdmFsIG1hdGNoLXZhbFwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25WYWx1ZVRvb2x0aXBcIj40Mjwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJhcnJvd1wiPuKelDwvc3Bhbj4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiVXNlckNvbXBhcmF0b3IuTnVtYmVyTGVzc09yRXF1YWxzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXAtYXR0clwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25BdHRyaWJ1dGVUb29sdGlwXCI+My4xNDwvc3Bhbj4gJmx0Oz0gPHNwYW4gY2xhc3M9XCJjb21wLXZhbCBtYXRjaC12YWxcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uVmFsdWVUb29sdGlwXCI+NDI8L3NwYW4+IDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7inpQ8L3NwYW4+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlVzZXJDb21wYXJhdG9yLk51bWJlckdyZWF0ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcC1hdHRyXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvbkF0dHJpYnV0ZVRvb2x0aXBcIj42OTwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz1cImNvbXAtdmFsIG1hdGNoLXZhbFwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25WYWx1ZVRvb2x0aXBcIj40Mjwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJhcnJvd1wiPuKelDwvc3Bhbj4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiVXNlckNvbXBhcmF0b3IuTnVtYmVyR3JlYXRlck9yRXF1YWxzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXAtYXR0clwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25BdHRyaWJ1dGVUb29sdGlwXCI+Njk8L3NwYW4+ICZndDs9IDxzcGFuIGNsYXNzPVwiY29tcC12YWwgbWF0Y2gtdmFsXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvblZhbHVlVG9vbHRpcFwiPjQyPC9zcGFuPiA8c3BhbiBjbGFzcz1cImFycm93XCI+4p6UPC9zcGFuPiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTRU1WRVIgLS0+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiVXNlckNvbXBhcmF0b3IuU2VtVmVySXNPbmVPZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wLWF0dHJcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uQXR0cmlidXRlVG9vbHRpcFwiPjEuMC4wPC9zcGFuPiBJUyBPTkUgT0YgPHNwYW4gY2xhc3M9XCJjb21wLXZhbFwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25WYWx1ZVRvb2x0aXBcIj5bIDxzcGFuIGNsYXNzPVwibWF0Y2gtdmFsXCI+MS4wLjA8L3NwYW4+LCA0LjMuNSBdPC9zcGFuPiA8c3BhbiBjbGFzcz1cImFycm93XCI+4p6UPC9zcGFuPiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJVc2VyQ29tcGFyYXRvci5TZW1WZXJJc05vdE9uZU9mXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXAtYXR0clwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25BdHRyaWJ1dGVUb29sdGlwXCI+Mi4xLjA8L3NwYW4+IElTIE5PVCBPTkUgT0YgPHNwYW4gY2xhc3M9XCJjb21wLXZhbFwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25WYWx1ZVRvb2x0aXBcIj5bIDEuMC4wLCA0LjMuNSBdPC9zcGFuPiA8c3BhbiBjbGFzcz1cImFycm93XCI+4p6UPC9zcGFuPiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJVc2VyQ29tcGFyYXRvci5TZW1WZXJMZXNzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXAtYXR0clwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25BdHRyaWJ1dGVUb29sdGlwXCI+MS4wLjA8L3NwYW4+ICZsdDsgPHNwYW4gY2xhc3M9XCJjb21wLXZhbCBtYXRjaC12YWxcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uVmFsdWVUb29sdGlwXCI+MS4yLjA8L3NwYW4+IDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7inpQ8L3NwYW4+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlVzZXJDb21wYXJhdG9yLlNlbVZlckxlc3NPckVxdWFsc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wLWF0dHJcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uQXR0cmlidXRlVG9vbHRpcFwiPjEuMC4wPC9zcGFuPiAmbHQ7PSA8c3BhbiBjbGFzcz1cImNvbXAtdmFsIG1hdGNoLXZhbFwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25WYWx1ZVRvb2x0aXBcIj4xLjIuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJhcnJvd1wiPuKelDwvc3Bhbj4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiVXNlckNvbXBhcmF0b3IuU2VtVmVyR3JlYXRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wLWF0dHJcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uQXR0cmlidXRlVG9vbHRpcFwiPjEuMC4wPC9zcGFuPiAmZ3Q7IDxzcGFuIGNsYXNzPVwiY29tcC12YWwgbWF0Y2gtdmFsXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvblZhbHVlVG9vbHRpcFwiPjEuMC4wLWFscGhhPC9zcGFuPiA8c3BhbiBjbGFzcz1cImFycm93XCI+4p6UPC9zcGFuPiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJVc2VyQ29tcGFyYXRvci5TZW1WZXJHcmVhdGVyT3JFcXVhbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcC1hdHRyXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvbkF0dHJpYnV0ZVRvb2x0aXBcIj4xLjIuMDwvc3Bhbj4gJmd0Oz0gPHNwYW4gY2xhc3M9XCJjb21wLXZhbCBtYXRjaC12YWxcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uVmFsdWVUb29sdGlwXCI+MS4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7inpQ8L3NwYW4+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEQVRFVElNRSAtLT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJVc2VyQ29tcGFyYXRvci5EYXRlVGltZUJlZm9yZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wLWF0dHJcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uQXR0cmlidXRlVG9vbHRpcFwiPjIwMjAuMTEuMDUgMTA6MzY6MjQ8L3NwYW4+IEJFRk9SRSA8c3BhbiBjbGFzcz1cImNvbXAtdmFsIG1hdGNoLXZhbFwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25WYWx1ZVRvb2x0aXBcIj4yMDIwLjExLjA1IDEyOjAwOjAwPC9zcGFuPiA8c3BhbiBjbGFzcz1cImFycm93XCI+4p6UPC9zcGFuPiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJVc2VyQ29tcGFyYXRvci5EYXRlVGltZUFmdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXAtYXR0clwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25BdHRyaWJ1dGVUb29sdGlwXCI+MjAyMC4xMS4wNSAxNTo0MTowNjwvc3Bhbj4gQUZURVIgPHNwYW4gY2xhc3M9XCJjb21wLXZhbCBtYXRjaC12YWxcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uVmFsdWVUb29sdGlwXCI+MjAyMC4xMS4wNSAxMjowMDowMDwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJhcnJvd1wiPuKelDwvc3Bhbj4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFSUkFZIC0tPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlVzZXJDb21wYXJhdG9yLkFycmF5Q29udGFpbnNBbnlPZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wLWF0dHJcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uQXR0cmlidXRlVG9vbHRpcFwiPlsgV3JpdGVyLCBSZWFkZXIgXTwvc3Bhbj4gQVJSQVkgQ09OVEFJTlMgQU5ZIE9GIDxzcGFuIGNsYXNzPVwiY29tcC12YWxcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uVmFsdWVUb29sdGlwXCI+WyA8c3BhbiBjbGFzcz1cIm1hdGNoLXZhbFwiPldyaXRlcjwvc3Bhbj4sIEFkbWluIF08L3NwYW4+IDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7inpQ8L3NwYW4+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlVzZXJDb21wYXJhdG9yLkFycmF5RG9lc05vdENvbnRhaW5BbnlPZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wLWF0dHJcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uQXR0cmlidXRlVG9vbHRpcFwiPlsgR3Vlc3QsIFJlYWRlciBdPC9zcGFuPiBBUlJBWSBOT1QgQ09OVEFJTlMgQU5ZIE9GIDxzcGFuIGNsYXNzPVwiY29tcC12YWxcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uVmFsdWVUb29sdGlwXCI+WyBXcml0ZXIsIEFkbWluIF08L3NwYW4+IDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7inpQ8L3NwYW4+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY29uZmlkZW50aWFsPlxuICAgIDxwPlNlbGVjdCBob3cgdGhlIDxpPmNvbXBhcmlzb24gdmFsdWVzPC9pPiBzaG91bGQgYmUgcGVyc2lzdGVkOjwvcD5cbiAgICA8ZGl2IG1hdFRvb2x0aXA9XCJUaGUgY3VycmVudGx5IHNlbGVjdGVkIGNvbXBhcmF0b3IgZG9lcyBub3Qgc3VwcG9ydCBoYXNoZWQgY29tcGFyaXNvbiB2YWx1ZXMsIHRoZXkgd2lsbCBiZSBwcmVzZW50ZWQgYXMgY2xlYXJ0ZXh0IGluIHRoZSBjb25maWcgSlNPTi5cIlxuICAgICAgICBbbWF0VG9vbHRpcERpc2FibGVkXT1cImNvbmZpZGVudGlhbEVuYWJsZWRcIj5cbiAgICAgICAgPG1hdC1yYWRpby1ncm91cCBjbGFzcz1cImNvbmZpZGVudGlhbC1jb250YWluZXJcIiAoY2hhbmdlKT1cImNvbmZpZGVudGlhbENoYW5nZSgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlkZW50aWFsIGl0ZW1cIiAoY2xpY2spPVwiY29uZmlkZW50aWFsQ2hhbmdlKHRydWUpXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgW3ZhbHVlXT1cInRydWVcIiBbY2hlY2tlZF09XCJpc0NvbmZpZGVudGlhbFwiIFtkaXNhYmxlZF09XCIhY29uZmlkZW50aWFsRW5hYmxlZCB8fCBkYXRhLnJlYWRPbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHRcIj5IYXNoZWQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uXCI+PG1hdC1pY29uPmxvY2s8L21hdC1pY29uPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIFdlIHJlY29tbWVuZCB1c2luZyB0aGlzIG9wdGlvbiBpbiBjYXNlIG9mIGZyb250ZW5kIGFwcGxpY2F0aW9ucyB0YXJnZXRpbmcgdXNlcnMgYmFzZWQgb24gc2Vuc2l0aXZlIGRhdGEgKGxpa2UgZW1haWwgYWRkcmVzc2VzLCBuYW1lcywgZXRjKS4gXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xlYXJ0ZXh0IGl0ZW1cIiAoY2xpY2spPVwiY29uZmlkZW50aWFsQ2hhbmdlKGZhbHNlKVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJmYWxzZVwiIFtjaGVja2VkXT1cIiFpc0NvbmZpZGVudGlhbFwiIFtkaXNhYmxlZF09XCIhY29uZmlkZW50aWFsRW5hYmxlZCB8fCBkYXRhLnJlYWRPbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHRcIj5DbGVhcnRleHQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uXCI+PG1hdC1pY29uPmxvY2tfb3Blbl9yaWdodDwvbWF0LWljb24+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhpcyBvcHRpb24gd2hlbiB5b3UgdGFyZ2V0IHVzZXJzIGJhc2VkIG9uIG5vbi1zZW5zaXRpdmUgZGF0YS4gQ29tcGFyaXNvbiB2YWx1ZXMgd2lsbCBiZSBwcmVzZW50ZWQgYXMgcGxhaW4gdGV4dCBpbiB0aGUgPGk+Y29uZmlnIEpTT048L2k+LlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFyYXRvci1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29uZmlnY2F0LXB1YmxpY2FwaS11aS9zcmMvbGliL3YyL2ZlYXR1cmUtZmxhZy9ldmFsdWF0aW9uLWZvcm11bGEvdGFyZ2V0aW5nLXJ1bGUvY29uZGl0aW9ucy91c2VyLWNvbmRpdGlvbi9jb21wYXJhdG9yLWRpYWxvZy9jb21wYXJhdG9yLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1jb25maWdjYXQtcHVibGljYXBpLXVpL3NyYy9saWIvdjIvZmVhdHVyZS1mbGFnL2V2YWx1YXRpb24tZm9ybXVsYS90YXJnZXRpbmctcnVsZS9jb25kaXRpb25zL3VzZXItY29uZGl0aW9uL2NvbXBhcmF0b3ItZGlhbG9nL2NvbXBhcmF0b3ItZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7OztBQUVoRSxJQUFLLGVBTUo7QUFORCxXQUFLLGVBQWU7SUFDbEIscURBQVEsQ0FBQTtJQUNSLHlEQUFVLENBQUE7SUFDVix5REFBVSxDQUFBO0lBQ1YsNkRBQVksQ0FBQTtJQUNaLHVEQUFTLENBQUE7QUFDWCxDQUFDLEVBTkksZUFBZSxLQUFmLGVBQWUsUUFNbkI7QUFlRCxNQUFNLE9BQU8seUJBQXlCO0lBOENwQyxZQUNTLFNBQWtELEVBQ3pCLElBQVM7UUFEbEMsY0FBUyxHQUFULFNBQVMsQ0FBeUM7UUFDekIsU0FBSSxHQUFK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RlUseUJBQXlCLDhDQWdEMUIsZUFBZTttR0FoRGQseUJBQXlCLDZEQ3pCdEMsczVqQkFpTWM7OzRGRHhLRCx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0UsdUJBQXVCOzswQkFvRDlCLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IFVzZXJDb21wYXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vYm9vdHN0cmFwJztcblxuZW51bSBDb21wYXJhdG9yR3JvdXAge1xuICBUZXh0ID0gMCxcbiAgTnVtYmVyID0gMSxcbiAgU2VtdmVyID0gMixcbiAgRGF0ZVRpbWUgPSAzLFxuICBBcnJheSA9IDRcbn1cblxuaW50ZXJmYWNlIENvbXBhcmF0b3JJdGVtIHtcbiAgdmFsdWU6IFVzZXJDb21wYXJhdG9yLFxuICBzZW5zaXRpdmVWYWx1ZT86IFVzZXJDb21wYXJhdG9yLFxuICBsYWJlbDogc3RyaW5nLFxuICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICBncm91cDogQ29tcGFyYXRvckdyb3VwLFxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY29tcGFyYXRvci1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29tcGFyYXRvci1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb21wYXJhdG9yLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDb21wYXJhdG9yRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBDb21wYXJhdG9yR3JvdXAgPSBDb21wYXJhdG9yR3JvdXA7XG4gIHNlbGVjdGVkR3JvdXAgPSBDb21wYXJhdG9yR3JvdXAuVGV4dDtcbiAgc2VsZWN0ZWRDb21wYXJhdG9yID0gVXNlckNvbXBhcmF0b3IuVGV4dEVxdWFscztcbiAgaXNDb25maWRlbnRpYWwgPSB0cnVlO1xuICBsYXN0Q29uZmlkZW50aWFsVmFsdWUgPSB0cnVlO1xuICBjb25maWRlbnRpYWxFbmFibGVkID0gdHJ1ZTtcbiAgVXNlckNvbXBhcmF0b3IgPSBVc2VyQ29tcGFyYXRvcjtcblxuICBjb21wYXJpc29uQXR0cmlidXRlVG9vbHRpcCA9IFwiVXNlciBPYmplY3QncyB2YWx1ZSBwYXNzZWQgdG8gdGhlIFNESyAoQ29tcGFyaXNvbiBhdHRyaWJ1dGUpXCI7XG4gIGNvbXBhcmlzb25WYWx1ZVRvb2x0aXAgPSBcIkNvbXBhcmlzb24gdmFsdWUgc2V0IG9uIHRoZSBDb25maWdDYXQgRGFzaGJvYXJkXCI7XG5cbiAgY29tcGFyYXRvcnM6IENvbXBhcmF0b3JJdGVtW10gPSBbXG4gICAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuVGV4dEVxdWFscywgc2Vuc2l0aXZlVmFsdWU6IFVzZXJDb21wYXJhdG9yLlNlbnNpdGl2ZVRleHRFcXVhbHMsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuVGV4dCwgbGFiZWw6ICdFUVVBTFMnLCBkZXNjcmlwdGlvbjogXCJDaGVja3Mgd2hldGhlciB0aGUgVXNlciBPYmplY3QncyBjb21wYXJpc29uIGF0dHJpYnV0ZSBwYXNzZWQgdG8gdGhlIFNESyBpcyBlcXVhbCB0byB0aGUgY29tcGFyaXNvbiB2YWx1ZSBzZXQgb24gdGhlIENvbmZpZ0NhdCBEYXNoYm9hcmRcIiB9LFxuICAgIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLlRleHREb2VzTm90RXF1YWwsIHNlbnNpdGl2ZVZhbHVlOiBVc2VyQ29tcGFyYXRvci5TZW5zaXRpdmVUZXh0RG9lc05vdEVxdWFsLCBncm91cDogQ29tcGFyYXRvckdyb3VwLlRleHQsIGxhYmVsOiAnTk9UIEVRVUFMUycsIGRlc2NyaXB0aW9uOiBcIkNoZWNrcyB3aGV0aGVyIHRoZSBVc2VyIE9iamVjdCdzIGNvbXBhcmlzb24gYXR0cmlidXRlIHBhc3NlZCB0byB0aGUgU0RLIGlzIG5vdCBlcXVhbCB0byB0aGUgY29tcGFyaXNvbiB2YWx1ZVwiIH0sXG4gICAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuSXNPbmVPZiwgc2Vuc2l0aXZlVmFsdWU6IFVzZXJDb21wYXJhdG9yLlNlbnNpdGl2ZUlzT25lT2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuVGV4dCwgbGFiZWw6ICdJUyBPTkUgT0YnLCBkZXNjcmlwdGlvbjogXCJDaGVja3Mgd2hldGhlciB0aGUgVXNlciBPYmplY3QncyBjb21wYXJpc29uIGF0dHJpYnV0ZSBwYXNzZWQgdG8gdGhlIFNESyBpcyBlcXVhbCB0byBhbnkgb2YgdGhlIGNvbXBhcmlzb24gdmFsdWVzXCIgfSxcbiAgICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5Jc05vdE9uZU9mLCBzZW5zaXRpdmVWYWx1ZTogVXNlckNvbXBhcmF0b3IuU2Vuc2l0aXZlSXNOb3RPbmVPZiwgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5UZXh0LCBsYWJlbDogJ0lTIE5PVCBPTkUgT0YnLCBkZXNjcmlwdGlvbjogXCJDaGVja3Mgd2hldGhlciB0aGUgVXNlciBPYmplY3QncyBjb21wYXJpc29uIGF0dHJpYnV0ZSBwYXNzZWQgdG8gdGhlIFNESyBpcyBub3QgZXF1YWwgdG8gYW55IG9mIHRoZSBjb21wYXJpc29uIHZhbHVlc1wiIH0sXG4gICAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuVGV4dFN0YXJ0c1dpdGhBbnlPZiwgc2Vuc2l0aXZlVmFsdWU6IFVzZXJDb21wYXJhdG9yLlNlbnNpdGl2ZVRleHRTdGFydHNXaXRoQW55T2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuVGV4dCwgbGFiZWw6ICdTVEFSVFMgV0lUSCBBTlkgT0YnLCBkZXNjcmlwdGlvbjogXCJDaGVja3Mgd2hldGhlciB0aGUgVXNlciBPYmplY3QncyBjb21wYXJpc29uIGF0dHJpYnV0ZSBwYXNzZWQgdG8gdGhlIFNESyBzdGFydHMgd2l0aCBhbnkgb2YgdGhlIGNvbXBhcmlzb24gdmFsdWVzXCIgfSxcbiAgICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5UZXh0Tm90U3RhcnRzV2l0aEFueU9mLCBzZW5zaXRpdmVWYWx1ZTogVXNlckNvbXBhcmF0b3IuU2Vuc2l0aXZlVGV4dE5vdFN0YXJ0c1dpdGhBbnlPZiwgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5UZXh0LCBsYWJlbDogJ05PVCBTVEFSVFMgV0lUSCBBTlkgT0YnLCBkZXNjcmlwdGlvbjogXCJDaGVja3Mgd2hldGhlciB0aGUgVXNlciBPYmplY3QncyBjb21wYXJpc29uIGF0dHJpYnV0ZSBwYXNzZWQgdG8gdGhlIFNESyBkb2VzIG5vdCBzdGFydCB3aXRoIGFueSBvZiB0aGUgY29tcGFyaXNvbiB2YWx1ZXNcIiB9LFxuICAgIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLlRleHRFbmRzV2l0aEFueU9mLCBzZW5zaXRpdmVWYWx1ZTogVXNlckNvbXBhcmF0b3IuU2Vuc2l0aXZlVGV4dEVuZHNXaXRoQW55T2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuVGV4dCwgbGFiZWw6ICdFTkRTIFdJVEggQU5ZIE9GJywgZGVzY3JpcHRpb246IFwiQ2hlY2tzIHdoZXRoZXIgdGhlIFVzZXIgT2JqZWN0J3MgY29tcGFyaXNvbiBhdHRyaWJ1dGUgcGFzc2VkIHRvIHRoZSBTREsgZW5kcyB3aXRoIGFueSBvZiB0aGUgY29tcGFyaXNvbiB2YWx1ZXNcIiB9LFxuICAgIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLlRleHROb3RFbmRzV2l0aEFueU9mLCBzZW5zaXRpdmVWYWx1ZTogVXNlckNvbXBhcmF0b3IuU2Vuc2l0aXZlVGV4dE5vdEVuZHNXaXRoQW55T2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuVGV4dCwgbGFiZWw6ICdOT1QgRU5EUyBXSVRIIEFOWSBPRicsIGRlc2NyaXB0aW9uOiBcIkNoZWNrcyB3aGV0aGVyIHRoZSBVc2VyIE9iamVjdCdzIGNvbXBhcmlzb24gYXR0cmlidXRlIHBhc3NlZCB0byB0aGUgU0RLIGRvZXMgbm90IGVuZCB3aXRoIGFueSBvZiB0aGUgY29tcGFyaXNvbiB2YWx1ZXNcIiB9LFxuICAgIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLkNvbnRhaW5zQW55T2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuVGV4dCwgbGFiZWw6ICdDT05UQUlOUyBBTlkgT0YnLCBkZXNjcmlwdGlvbjogXCJDaGVja3Mgd2hldGhlciB0aGUgVXNlciBPYmplY3QncyBjb21wYXJpc29uIGF0dHJpYnV0ZSBwYXNzZWQgdG8gdGhlIFNESyBjb250YWlucyBhbnkgY29tcGFyaXNvbiB2YWx1ZXMgYXMgYSBzdWJzdHJpbmdcIiB9LFxuICAgIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLkRvZXNOb3RDb250YWluQW55T2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuVGV4dCwgbGFiZWw6ICdET0VTIE5PVCBDT05UQUlOIEFOWSBPRicsIGRlc2NyaXB0aW9uOiBcIkNoZWNrcyB3aGV0aGVyIHRoZSBVc2VyIE9iamVjdCdzIGNvbXBhcmlzb24gYXR0cmlidXRlIHBhc3NlZCB0byB0aGUgU0RLIGRvZXMgbm90IGNvbnRhaW4gYW55IGNvbXBhcmlzb24gdmFsdWVzIGFzIGEgc3Vic3RyaW5nXCIgfSxcblxuICAgIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLk51bWJlckVxdWFscywgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5OdW1iZXIsIGxhYmVsOiAnPSAoRVFVQUxTKScsIGRlc2NyaXB0aW9uOiBcIkNoZWNrcyB3aGV0aGVyIHRoZSBVc2VyIE9iamVjdCdzIGNvbXBhcmlzb24gYXR0cmlidXRlIHBhc3NlZCB0byB0aGUgU0RLIChpbnRlcnByZXRlZCBhcyBhIGRlY2ltYWwgbnVtYmVyKSBpcyBlcXVhbCB0byB0aGUgY29tcGFyaXNvbiB2YWx1ZVwiIH0sXG4gICAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuTnVtYmVyRG9lc05vdEVxdWFsLCBncm91cDogQ29tcGFyYXRvckdyb3VwLk51bWJlciwgbGFiZWw6ICchPSAoTk9UIEVRVUFMUyknLCBkZXNjcmlwdGlvbjogXCJDaGVja3Mgd2hldGhlciB0aGUgVXNlciBPYmplY3QncyBjb21wYXJpc29uIGF0dHJpYnV0ZSBwYXNzZWQgdG8gdGhlIFNESyAoaW50ZXJwcmV0ZWQgYXMgYSBkZWNpbWFsIG51bWJlcikgaXMgbm90IGVxdWFsIHRvIHRoZSBjb21wYXJpc29uIHZhbHVlXCIgfSxcbiAgICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5OdW1iZXJMZXNzLCBncm91cDogQ29tcGFyYXRvckdyb3VwLk51bWJlciwgbGFiZWw6ICc8IChMRVNTIFRIQU4pJywgZGVzY3JpcHRpb246IFwiQ2hlY2tzIHdoZXRoZXIgdGhlIFVzZXIgT2JqZWN0J3MgY29tcGFyaXNvbiBhdHRyaWJ1dGUgcGFzc2VkIHRvIHRoZSBTREsgKGludGVycHJldGVkIGFzIGEgZGVjaW1hbCBudW1iZXIpIGlzIGxlc3MgdGhhbiB0aGUgY29tcGFyaXNvbiB2YWx1ZVwiIH0sXG4gICAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuTnVtYmVyTGVzc09yRXF1YWxzLCBncm91cDogQ29tcGFyYXRvckdyb3VwLk51bWJlciwgbGFiZWw6ICc8PSAoTEVTUyBUSEFOIE9SIEVRVUFMKScsIGRlc2NyaXB0aW9uOiBcIkNoZWNrcyB3aGV0aGVyIHRoZSBVc2VyIE9iamVjdCdzIGNvbXBhcmlzb24gYXR0cmlidXRlIHBhc3NlZCB0byB0aGUgU0RLIChpbnRlcnByZXRlZCBhcyBhIGRlY2ltYWwgbnVtYmVyKSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGNvbXBhcmlzb24gdmFsdWVcIiB9LFxuICAgIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLk51bWJlckdyZWF0ZXIsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuTnVtYmVyLCBsYWJlbDogJz4gKEdSRUFURVIgVEhBTiknLCBkZXNjcmlwdGlvbjogXCJDaGVja3Mgd2hldGhlciB0aGUgVXNlciBPYmplY3QncyBjb21wYXJpc29uIGF0dHJpYnV0ZSBwYXNzZWQgdG8gdGhlIFNESyAoaW50ZXJwcmV0ZWQgYXMgYSBkZWNpbWFsIG51bWJlcikgaXMgZ3JlYXRlciB0aGFuIHRoZSBjb21wYXJpc29uIHZhbHVlXCIgfSxcbiAgICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5OdW1iZXJHcmVhdGVyT3JFcXVhbHMsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuTnVtYmVyLCBsYWJlbDogJz49IChHUkFURVIgVEhBTiBPUiBFUVVBTCknLCBkZXNjcmlwdGlvbjogXCJDaGVja3Mgd2hldGhlciB0aGUgVXNlciBPYmplY3QncyBjb21wYXJpc29uIGF0dHJpYnV0ZSBwYXNzZWQgdG8gdGhlIFNESyAoaW50ZXJwcmV0ZWQgYXMgYSBkZWNpbWFsIG51bWJlcikgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBjb21wYXJpc29uIHZhbHVlXCIgfSxcblxuICAgIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLlNlbVZlcklzT25lT2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuU2VtdmVyLCBsYWJlbDogJ0lTIE9ORSBPRicsIGRlc2NyaXB0aW9uOiBcIkNoZWNrcyB3aGV0aGVyIHRoZSBVc2VyIE9iamVjdCdzIGNvbXBhcmlzb24gYXR0cmlidXRlIHBhc3NlZCB0byB0aGUgU0RLIChpbnRlcnByZXRlZCBhcyBhIHNlbWFudGljIHZlcnNpb24pIGlzIGVxdWFsIHRvIGFueSBvZiB0aGUgY29tcGFyaXNvbiB2YWx1ZXNcIiB9LFxuICAgIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLlNlbVZlcklzTm90T25lT2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuU2VtdmVyLCBsYWJlbDogJ0lTIE5PVCBPTkUgT0YnLCBkZXNjcmlwdGlvbjogXCJDaGVja3Mgd2hldGhlciB0aGUgVXNlciBPYmplY3QncyBjb21wYXJpc29uIGF0dHJpYnV0ZSBwYXNzZWQgdG8gdGhlIFNESyAoaW50ZXJwcmV0ZWQgYXMgYSBzZW1hbnRpYyB2ZXJzaW9uKSBpcyBub3QgZXF1YWwgdG8gYW55IG9mIHRoZSBjb21wYXJpc29uIHZhbHVlc1wiIH0sXG4gICAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuU2VtVmVyTGVzcywgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5TZW12ZXIsIGxhYmVsOiAnPCAoTEVTUyBUSEFOKScsIGRlc2NyaXB0aW9uOiBcIkNoZWNrcyB3aGV0aGVyIHRoZSBVc2VyIE9iamVjdCdzIGNvbXBhcmlzb24gYXR0cmlidXRlIHBhc3NlZCB0byB0aGUgU0RLIChpbnRlcnByZXRlZCBhcyBhIHNlbWFudGljIHZlcnNpb24pIGlzIGxlc3MgdGhhbiB0aGUgY29tcGFyaXNvbiB2YWx1ZVwiIH0sXG4gICAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuU2VtVmVyTGVzc09yRXF1YWxzLCBncm91cDogQ29tcGFyYXRvckdyb3VwLlNlbXZlciwgbGFiZWw6ICc8PSAoTEVTUyBUSEFOIE9SIEVRVUFMKScsIGRlc2NyaXB0aW9uOiBcIkNoZWNrcyB3aGV0aGVyIHRoZSBVc2VyIE9iamVjdCdzIGNvbXBhcmlzb24gYXR0cmlidXRlIHBhc3NlZCB0byB0aGUgU0RLIChpbnRlcnByZXRlZCBhcyBhIHNlbWFudGljIHZlcnNpb24pIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgY29tcGFyaXNvbiB2YWx1ZVwiIH0sXG4gICAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuU2VtVmVyR3JlYXRlciwgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5TZW12ZXIsIGxhYmVsOiAnPiAoR1JFQVRFUiBUSEFOKScsIGRlc2NyaXB0aW9uOiBcIkNoZWNrcyB3aGV0aGVyIHRoZSBVc2VyIE9iamVjdCdzIGNvbXBhcmlzb24gYXR0cmlidXRlIHBhc3NlZCB0byB0aGUgU0RLIChpbnRlcnByZXRlZCBhcyBhIHNlbWFudGljIHZlcnNpb24pIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY29tcGFyaXNvbiB2YWx1ZVwiIH0sXG4gICAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuU2VtVmVyR3JlYXRlck9yRXF1YWxzLCBncm91cDogQ29tcGFyYXRvckdyb3VwLlNlbXZlciwgbGFiZWw6ICc+PSAoR1JBVEVSIFRIQU4gT1IgRVFVQUwpJywgZGVzY3JpcHRpb246IFwiQ2hlY2tzIHdoZXRoZXIgdGhlIFVzZXIgT2JqZWN0J3MgY29tcGFyaXNvbiBhdHRyaWJ1dGUgcGFzc2VkIHRvIHRoZSBTREsgKGludGVycHJldGVkIGFzIGEgc2VtYW50aWMgdmVyc2lvbikgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBjb21wYXJpc29uIHZhbHVlXCIgfSxcblxuICAgIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLkRhdGVUaW1lQmVmb3JlLCBncm91cDogQ29tcGFyYXRvckdyb3VwLkRhdGVUaW1lLCBsYWJlbDogJ0JFRk9SRSAoVVRDKScsIGRlc2NyaXB0aW9uOiBcIkNoZWNrcyB3aGV0aGVyIHRoZSBVc2VyIE9iamVjdCdzIGNvbXBhcmlzb24gYXR0cmlidXRlIHBhc3NlZCB0byB0aGUgU0RLIChpbnRlcnByZXRlZCBhcyB0aGUgc2Vjb25kcyBlbGFwc2VkIHNpbmNlIFVuaXggRXBvY2gpIGlzIGxlc3MgdGhhbiB0aGUgY29tcGFyaXNvbiB2YWx1ZVwiIH0sXG4gICAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuRGF0ZVRpbWVBZnRlciwgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5EYXRlVGltZSwgbGFiZWw6ICdBRlRFUiAoVVRDKScsIGRlc2NyaXB0aW9uOiBcIkNoZWNrcyB3aGV0aGVyIHRoZSBVc2VyIE9iamVjdCdzIGNvbXBhcmlzb24gYXR0cmlidXRlIHBhc3NlZCB0byB0aGUgU0RLIChpbnRlcnByZXRlZCBhcyB0aGUgc2Vjb25kcyBlbGFwc2VkIHNpbmNlIFVuaXggRXBvY2gpIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY29tcGFyaXNvbiB2YWx1ZS52YWx1ZVwiIH0sXG5cbiAgICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5BcnJheUNvbnRhaW5zQW55T2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuQXJyYXksIHNlbnNpdGl2ZVZhbHVlOiBVc2VyQ29tcGFyYXRvci5TZW5zaXRpdmVBcnJheUNvbnRhaW5zQW55T2YsIGxhYmVsOiAnQVJSQVkgQ09OVEFJTlMgQU5ZIE9GJywgZGVzY3JpcHRpb246IFwiQ2hlY2tzIHdoZXRoZXIgdGhlIFVzZXIgT2JqZWN0J3MgY29tcGFyaXNvbiBhdHRyaWJ1dGUgcGFzc2VkIHRvIHRoZSBTREsgKGludGVycHJldGVkIGFzIGEgc3RyaW5nIGxpc3QpIGNvbnRhaW5zIGFueSBvZiB0aGUgY29tcGFyaXNvbiB2YWx1ZXNcIiB9LFxuICAgIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLkFycmF5RG9lc05vdENvbnRhaW5BbnlPZiwgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5BcnJheSwgc2Vuc2l0aXZlVmFsdWU6IFVzZXJDb21wYXJhdG9yLlNlbnNpdGl2ZUFycmF5RG9lc05vdENvbnRhaW5BbnlPZiwgbGFiZWw6ICdBUlJBWSBOT1QgQ09OVEFJTlMgQU5ZIE9GJywgZGVzY3JpcHRpb246IFwiQ2hlY2tzIHdoZXRoZXIgdGhlIFVzZXIgT2JqZWN0J3MgY29tcGFyaXNvbiBhdHRyaWJ1dGUgcGFzc2VkIHRvIHRoZSBTREsgKGludGVycHJldGVkIGFzIGEgc3RyaW5nIGxpc3QpIGRvZXMgbm90IGNvbnRhaW4gYW55IG9mIHRoZSBjb21wYXJpc29uIHZhbHVlc1wiIH0sXG4gIF1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8Q29tcGFyYXRvckRpYWxvZ0NvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnkpIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5jb21wYXJhdG9ycy5maW5kKGMgPT4gYy52YWx1ZSA9PT0gdGhpcy5kYXRhLnNlbGVjdGVkQ29tcGFyYXRvciB8fCBjLnNlbnNpdGl2ZVZhbHVlID09PSB0aGlzLmRhdGEuc2VsZWN0ZWRDb21wYXJhdG9yKTtcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXAgPSBzZWxlY3RlZC5ncm91cDtcbiAgICB0aGlzLnNlbGVjdGVkQ29tcGFyYXRvciA9IHNlbGVjdGVkLnZhbHVlO1xuICAgIHRoaXMuaXNDb25maWRlbnRpYWwgPSB0aGlzLmRhdGEuc2VsZWN0ZWRDb21wYXJhdG9yID09PSBzZWxlY3RlZC5zZW5zaXRpdmVWYWx1ZTtcbiAgICB0aGlzLmxhc3RDb25maWRlbnRpYWxWYWx1ZSA9ICFzZWxlY3RlZC5zZW5zaXRpdmVWYWx1ZSA/IHRydWUgOiB0aGlzLmlzQ29uZmlkZW50aWFsO1xuICAgIHRoaXMuY29uZmlkZW50aWFsRW5hYmxlZCA9ICEhc2VsZWN0ZWQuc2Vuc2l0aXZlVmFsdWU7XG4gIH1cblxuICBsaXN0Q29tcGFyYXRvcnMoZ3JvdXA6IENvbXBhcmF0b3JHcm91cCk6IENvbXBhcmF0b3JJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmNvbXBhcmF0b3JzLmZpbHRlcihjID0+IGMuZ3JvdXAgPT09IGdyb3VwKTtcbiAgfVxuXG4gIGNoYW5nZUdyb3VwKGdyb3VwOiBDb21wYXJhdG9yR3JvdXApOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXAgPSBncm91cDtcbiAgfVxuXG4gIGNvbmZpZGVudGlhbENoYW5nZShjb25maWRlbnRpYWw6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29uZmlkZW50aWFsRW5hYmxlZCB8fCB0aGlzLmRhdGEucmVhZE9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pc0NvbmZpZGVudGlhbCA9IHRoaXMubGFzdENvbmZpZGVudGlhbFZhbHVlID0gY29uZmlkZW50aWFsO1xuICB9XG5cbiAgY29tcGFyYXRvckNoYW5nZShjb21wOiBVc2VyQ29tcGFyYXRvcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGEucmVhZE9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkQ29tcGFyYXRvciA9IGNvbXA7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmNvbXBhcmF0b3JzLmZpbmQoYyA9PiBjLnZhbHVlID09PSBjb21wIHx8IGMuc2Vuc2l0aXZlVmFsdWUgPT09IGNvbXApO1xuICAgIHRoaXMuY29uZmlkZW50aWFsRW5hYmxlZCA9ICEhc2VsZWN0ZWQuc2Vuc2l0aXZlVmFsdWU7XG4gICAgaWYgKCF0aGlzLmNvbmZpZGVudGlhbEVuYWJsZWQpIHtcbiAgICAgIHRoaXMuaXNDb25maWRlbnRpYWwgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0NvbmZpZGVudGlhbCA9IHRoaXMubGFzdENvbmZpZGVudGlhbFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHNldCgpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuY29tcGFyYXRvcnMuZmluZChjID0+IGMudmFsdWUgPT09IHRoaXMuc2VsZWN0ZWRDb21wYXJhdG9yIHx8IGMuc2Vuc2l0aXZlVmFsdWUgPT09IHRoaXMuc2VsZWN0ZWRDb21wYXJhdG9yKTtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmlzQ29uZmlkZW50aWFsICYmIHNlbGVjdGVkLnNlbnNpdGl2ZVZhbHVlID8gc2VsZWN0ZWQuc2Vuc2l0aXZlVmFsdWUgOiBzZWxlY3RlZC52YWx1ZTtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShyZXN1bHQpO1xuICB9XG59XG4iLCI8aDIgbWF0LWRpYWxvZy10aXRsZSBjZGtEcmFnIGNka0RyYWdSb290RWxlbWVudD1cIi5jZGstb3ZlcmxheS1wYW5lXCIgY2RrRHJhZ0hhbmRsZSBjbGFzcz1cImRyYWdnYWJsZVwiPkNvbXBhcmF0b3Igc2VsZWN0b3I8L2gyPlxuPGRpdiBjbGFzcz1cInRhYnNcIj5cbiAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgW25nTW9kZWxdPVwic2VsZWN0ZWRHcm91cFwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUdyb3VwKCRldmVudClcIj5cbiAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCJDb21wYXJhdG9yR3JvdXAuVGV4dFwiPlRleHQ8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cIkNvbXBhcmF0b3JHcm91cC5OdW1iZXJcIj5OdW1iZXI8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cIkNvbXBhcmF0b3JHcm91cC5TZW12ZXJcIj5TZW1hbnRpYyB2ZXJzaW9uPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCJDb21wYXJhdG9yR3JvdXAuRGF0ZVRpbWVcIj5EYXRldGltZTwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBbdmFsdWVdPVwiQ29tcGFyYXRvckdyb3VwLkFycmF5XCI+QXJyYXk8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XG48L2Rpdj5cblxuPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJjb250YWluZXJcIiBbbmdTd2l0Y2hdPVwic2VsZWN0ZWRHcm91cFwiPlxuICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIkNvbXBhcmF0b3JHcm91cC5UZXh0XCI+XG4gICAgICAgIDxwPlRoZSBmb2xsb3dpbmcgY29tcGFyYXRvcnMgYXNzdW1lIHRoYXQgdGhlIDxpPmNvbXBhcmlzb24gYXR0cmlidXRlJ3M8L2k+IHZhbHVlIChzZXQgb24gdGhlIFNESydzIDxhIGhyZWY9XCJodHRwczovL2NvbmZpZ2NhdC5jb20vZG9jcy90YXJnZXRpbmcvdXNlci1vYmplY3RcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+VXNlciBPYmplY3Q8L2E+KSBhbmQgdGhlIDxpPmNvbXBhcmlzb24gdmFsdWU8L2k+IGNvbnRhaW4gc3RyaW5nL3RleHQuPC9wPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbXBhcmF0b3JzXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntncm91cDpDb21wYXJhdG9yR3JvdXAuVGV4dH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb25maWRlbnRpYWxcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIkNvbXBhcmF0b3JHcm91cC5OdW1iZXJcIj5cbiAgICAgICAgPHA+VGhlIGZvbGxvd2luZyBjb21wYXJhdG9ycyBhc3N1bWUgdGhhdCB0aGUgPGk+Y29tcGFyaXNvbiBhdHRyaWJ1dGUnczwvaT4gdmFsdWUgKHNldCBvbiB0aGUgU0RLJ3MgPGEgaHJlZj1cImh0dHBzOi8vY29uZmlnY2F0LmNvbS9kb2NzL3RhcmdldGluZy91c2VyLW9iamVjdFwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5Vc2VyIE9iamVjdDwvYT4pIGFuZCB0aGUgPGk+Y29tcGFyaXNvbiB2YWx1ZTwvaT4gY29udGFpbiBudW1iZXJzLjwvcD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb21wYXJhdG9yc1wiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7Z3JvdXA6Q29tcGFyYXRvckdyb3VwLk51bWJlcn1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIkNvbXBhcmF0b3JHcm91cC5TZW12ZXJcIj5cbiAgICAgICAgPHA+VGhlIGZvbGxvd2luZyBjb21wYXJhdG9ycyBhc3N1bWUgdGhhdCB0aGUgPGk+Y29tcGFyaXNvbiBhdHRyaWJ1dGUnczwvaT4gdmFsdWUgKHNldCBvbiB0aGUgU0RLJ3MgPGEgaHJlZj1cImh0dHBzOi8vY29uZmlnY2F0LmNvbS9kb2NzL3RhcmdldGluZy91c2VyLW9iamVjdFwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5Vc2VyIE9iamVjdDwvYT4pIGFuZCB0aGUgPGk+Y29tcGFyaXNvbiB2YWx1ZTwvaT4gY29udGFpbiBzZW1hbnRpYyB2ZXJzaW9ucy48L3A+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29tcGFyYXRvcnNcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2dyb3VwOkNvbXBhcmF0b3JHcm91cC5TZW12ZXJ9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJDb21wYXJhdG9yR3JvdXAuRGF0ZVRpbWVcIj5cbiAgICAgICAgPHA+VGhlIGZvbGxvd2luZyBjb21wYXJhdG9ycyBhc3N1bWUgdGhhdCB0aGUgPGk+Y29tcGFyaXNvbiBhdHRyaWJ1dGUnczwvaT4gdmFsdWUgKHNldCBvbiB0aGUgU0RLJ3MgPGEgaHJlZj1cImh0dHBzOi8vY29uZmlnY2F0LmNvbS9kb2NzL3RhcmdldGluZy91c2VyLW9iamVjdFwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5Vc2VyIE9iamVjdDwvYT4pIGFuZCB0aGUgPGk+Y29tcGFyaXNvbiB2YWx1ZTwvaT4gY29udGFpbiBkYXRldGltZXMuPC9wPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbXBhcmF0b3JzXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntncm91cDpDb21wYXJhdG9yR3JvdXAuRGF0ZVRpbWV9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJDb21wYXJhdG9yR3JvdXAuQXJyYXlcIj5cbiAgICAgICAgPHA+VGhlIGZvbGxvd2luZyBjb21wYXJhdG9ycyBhc3N1bWUgdGhhdCB0aGUgPGk+Y29tcGFyaXNvbiBhdHRyaWJ1dGUnczwvaT4gdmFsdWUgKHNldCBvbiB0aGUgU0RLJ3MgPGEgaHJlZj1cImh0dHBzOi8vY29uZmlnY2F0LmNvbS9kb2NzL3RhcmdldGluZy91c2VyLW9iamVjdFwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5Vc2VyIE9iamVjdDwvYT4pIGFuZCB0aGUgPGk+Y29tcGFyaXNvbiB2YWx1ZTwvaT4gY29udGFpbiBpdGVtcyBvZiBhIHN0cmluZy90ZXh0IGxpc3QuPC9wPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbXBhcmF0b3JzXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntncm91cDpDb21wYXJhdG9yR3JvdXAuQXJyYXl9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29uZmlkZW50aWFsXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDxidXR0b24gKm5nSWY9XCIhZGF0YS5yZWFkT25seVwiIHR5cGU9XCJidXR0b25cIiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNldCgpXCI+U2V0PC9idXR0b24+XG4gICAgPGJ1dHRvbiAqbmdJZj1cIiFkYXRhLnJlYWRPbmx5XCIgdHlwZT1cImJ1dHRvblwiIG1hdC1zdHJva2VkLWJ1dHRvbiBtYXQtZGlhbG9nLWNsb3NlPkNhbmNlbDwvYnV0dG9uPlxuICAgIDxidXR0b24gKm5nSWY9XCJkYXRhLnJlYWRPbmx5XCIgdHlwZT1cImJ1dHRvblwiIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBtYXQtZGlhbG9nLWNsb3NlPkNsb3NlPC9idXR0b24+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNjb21wYXJhdG9ycyBsZXQtZ3JvdXA9XCJncm91cFwiPlxuICAgIDxkaXY+XG4gICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgKGNoYW5nZSk9XCJjb21wYXJhdG9yQ2hhbmdlKCRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wYXJhdG9yLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtXCIgW25nQ2xhc3NdPVwiJ2NvbC0nICsgaSAlIDJcIiBbY2xhc3Muc2VsZWN0ZWRdPVwiY29tcGFyYXRvci52YWx1ZSA9PT0gc2VsZWN0ZWRDb21wYXJhdG9yXCIgXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb21wYXJhdG9yIG9mIGxpc3RDb21wYXJhdG9ycyhncm91cCk7IGxldCBpID0gaW5kZXhcIiAoY2xpY2spPVwiY29tcGFyYXRvckNoYW5nZShjb21wYXJhdG9yLnZhbHVlKVwiPiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJjb21wYXJhdG9yLnZhbHVlXCIgW2Rpc2FibGVkXT1cImRhdGEucmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJjb21wYXJhdG9yLnZhbHVlID09PSBzZWxlY3RlZENvbXBhcmF0b3JcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJhdG9yLmRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXBhcmF0b3IubGFiZWx9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhhbXBsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbXBhcmF0b3IudmFsdWVcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRFWFQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlVzZXJDb21wYXJhdG9yLlRleHRFcXVhbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcC1hdHRyXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvbkF0dHJpYnV0ZVRvb2x0aXBcIj5ib2ImIzY0O2Zvby5jb208L3NwYW4+IEVRVUFMUyA8c3BhbiBjbGFzcz1cImNvbXAtdmFsIG1hdGNoLXZhbFwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25WYWx1ZVRvb2x0aXBcIj5ib2ImIzY0O2Zvby5jb208L3NwYW4+IDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7inpQ8L3NwYW4+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlVzZXJDb21wYXJhdG9yLlRleHREb2VzTm90RXF1YWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcC1hdHRyXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvbkF0dHJpYnV0ZVRvb2x0aXBcIj5hbGljZSYjNjQ7Zm9vLmNvbTwvc3Bhbj4gTk9UIEVRVUFMUyA8c3BhbiBjbGFzcz1cImNvbXAtdmFsXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvblZhbHVlVG9vbHRpcFwiPmJvYiYjNjQ7Zm9vLmNvbTwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJhcnJvd1wiPuKelDwvc3Bhbj4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiVXNlckNvbXBhcmF0b3IuSXNPbmVPZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wLWF0dHJcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uQXR0cmlidXRlVG9vbHRpcFwiPmlPUzwvc3Bhbj4gSVMgT05FIE9GIDxzcGFuIGNsYXNzPVwiY29tcC12YWxcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uVmFsdWVUb29sdGlwXCI+WyBBbmRyb2lkLCBtYWNPUywgPHNwYW4gY2xhc3M9XCJtYXRjaC12YWxcIj5pT1M8L3NwYW4+IF08L3NwYW4+IDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7inpQ8L3NwYW4+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlVzZXJDb21wYXJhdG9yLklzTm90T25lT2ZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcC1hdHRyXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvbkF0dHJpYnV0ZVRvb2x0aXBcIj5pT1M8L3NwYW4+IElTIE5PVCBPTkUgT0YgPHNwYW4gY2xhc3M9XCJjb21wLXZhbFwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25WYWx1ZVRvb2x0aXBcIj5bIEFuZHJvaWQsIG1hY09TLCBXaW5kb3dzIF08L3NwYW4+IDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7inpQ8L3NwYW4+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlVzZXJDb21wYXJhdG9yLlRleHRTdGFydHNXaXRoQW55T2ZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcC1hdHRyXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvbkF0dHJpYnV0ZVRvb2x0aXBcIj5ib2ImIzY0O2Zvby5jb208L3NwYW4+IFNUQVJUUyBXSVRIIEFOWSBPRiA8c3BhbiBjbGFzcz1cImNvbXAtdmFsXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvblZhbHVlVG9vbHRpcFwiPlsgPHNwYW4gY2xhc3M9XCJtYXRjaC12YWxcIj5ib2I8L3NwYW4+LCBqYW5lIF08L3NwYW4+IDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7inpQ8L3NwYW4+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlVzZXJDb21wYXJhdG9yLlRleHROb3RTdGFydHNXaXRoQW55T2ZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcC1hdHRyXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvbkF0dHJpYnV0ZVRvb2x0aXBcIj5hbGljZSYjNjQ7Zm9vLmNvbTwvc3Bhbj4gTk9UIFNUQVJUUyBXSVRIIEFOWSBPRiA8c3BhbiBjbGFzcz1cImNvbXAtdmFsXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvblZhbHVlVG9vbHRpcFwiPlsgYm9iLCBqYW5lIF08L3NwYW4+IDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7inpQ8L3NwYW4+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlVzZXJDb21wYXJhdG9yLlRleHRFbmRzV2l0aEFueU9mXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXAtYXR0clwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25BdHRyaWJ1dGVUb29sdGlwXCI+Ym9iJiM2NDtmb28uY29tPC9zcGFuPiBFTkRTIFdJVEggQU5ZIE9GIDxzcGFuIGNsYXNzPVwiY29tcC12YWxcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uVmFsdWVUb29sdGlwXCI+WyA8c3BhbiBjbGFzcz1cIm1hdGNoLXZhbFwiPiYjNjQ7Zm9vLmNvbTwvc3Bhbj4sICYjNjQ7YmFyLmNvbSBdPC9zcGFuPiA8c3BhbiBjbGFzcz1cImFycm93XCI+4p6UPC9zcGFuPiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJVc2VyQ29tcGFyYXRvci5UZXh0Tm90RW5kc1dpdGhBbnlPZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wLWF0dHJcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uQXR0cmlidXRlVG9vbHRpcFwiPmJvYiYjNjQ7ZXhhbXBsZS5jb208L3NwYW4+IE5PVCBFTkRTIFdJVEggQU5ZIE9GIDxzcGFuIGNsYXNzPVwiY29tcC12YWxcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uVmFsdWVUb29sdGlwXCI+WyAmIzY0O2Zvby5jb20sICYjNjQ7YmFyLmNvbSBdPC9zcGFuPiA8c3BhbiBjbGFzcz1cImFycm93XCI+4p6UPC9zcGFuPiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJVc2VyQ29tcGFyYXRvci5Db250YWluc0FueU9mXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXAtYXR0clwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25BdHRyaWJ1dGVUb29sdGlwXCI+aHR0cHM6Ly90ZXN0LWFwcC5mb28uY29tPC9zcGFuPiBDT05UQUlOUyBBTlkgT0YgPHNwYW4gY2xhc3M9XCJjb21wLXZhbFwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25WYWx1ZVRvb2x0aXBcIj5bIDxzcGFuIGNsYXNzPVwibWF0Y2gtdmFsXCI+dGVzdDwvc3Bhbj4sIGxvY2FsaG9zdCBdPC9zcGFuPiA8c3BhbiBjbGFzcz1cImFycm93XCI+4p6UPC9zcGFuPiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJVc2VyQ29tcGFyYXRvci5Eb2VzTm90Q29udGFpbkFueU9mXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXAtYXR0clwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25BdHRyaWJ1dGVUb29sdGlwXCI+aHR0cHM6Ly9hcHAuZm9vLmNvbTwvc3Bhbj4gTk9UIENPTlRBSU5TIEFOWSBPRiA8c3BhbiBjbGFzcz1cImNvbXAtdmFsXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvblZhbHVlVG9vbHRpcFwiPlsgdGVzdCwgbG9jYWxob3N0IF08L3NwYW4+IDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7inpQ8L3NwYW4+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBOVU1CRVIgLS0+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiVXNlckNvbXBhcmF0b3IuTnVtYmVyRXF1YWxzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXAtYXR0clwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25BdHRyaWJ1dGVUb29sdGlwXCI+NDI8L3NwYW4+ID0gPHNwYW4gY2xhc3M9XCJjb21wLXZhbCBtYXRjaC12YWxcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uVmFsdWVUb29sdGlwXCI+NDI8L3NwYW4+IDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7inpQ8L3NwYW4+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlVzZXJDb21wYXJhdG9yLk51bWJlckRvZXNOb3RFcXVhbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wLWF0dHJcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uQXR0cmlidXRlVG9vbHRpcFwiPjQyPC9zcGFuPiAhPSA8c3BhbiBjbGFzcz1cImNvbXAtdmFsIG1hdGNoLXZhbFwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25WYWx1ZVRvb2x0aXBcIj4zLjE0PC9zcGFuPiA8c3BhbiBjbGFzcz1cImFycm93XCI+4p6UPC9zcGFuPiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJVc2VyQ29tcGFyYXRvci5OdW1iZXJMZXNzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXAtYXR0clwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25BdHRyaWJ1dGVUb29sdGlwXCI+My4xNDwvc3Bhbj4gJmx0OyA8c3BhbiBjbGFzcz1cImNvbXAtdmFsIG1hdGNoLXZhbFwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25WYWx1ZVRvb2x0aXBcIj40Mjwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJhcnJvd1wiPuKelDwvc3Bhbj4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiVXNlckNvbXBhcmF0b3IuTnVtYmVyTGVzc09yRXF1YWxzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXAtYXR0clwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25BdHRyaWJ1dGVUb29sdGlwXCI+My4xNDwvc3Bhbj4gJmx0Oz0gPHNwYW4gY2xhc3M9XCJjb21wLXZhbCBtYXRjaC12YWxcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uVmFsdWVUb29sdGlwXCI+NDI8L3NwYW4+IDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7inpQ8L3NwYW4+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlVzZXJDb21wYXJhdG9yLk51bWJlckdyZWF0ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcC1hdHRyXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvbkF0dHJpYnV0ZVRvb2x0aXBcIj42OTwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz1cImNvbXAtdmFsIG1hdGNoLXZhbFwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25WYWx1ZVRvb2x0aXBcIj40Mjwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJhcnJvd1wiPuKelDwvc3Bhbj4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiVXNlckNvbXBhcmF0b3IuTnVtYmVyR3JlYXRlck9yRXF1YWxzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXAtYXR0clwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25BdHRyaWJ1dGVUb29sdGlwXCI+Njk8L3NwYW4+ICZndDs9IDxzcGFuIGNsYXNzPVwiY29tcC12YWwgbWF0Y2gtdmFsXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvblZhbHVlVG9vbHRpcFwiPjQyPC9zcGFuPiA8c3BhbiBjbGFzcz1cImFycm93XCI+4p6UPC9zcGFuPiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTRU1WRVIgLS0+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiVXNlckNvbXBhcmF0b3IuU2VtVmVySXNPbmVPZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wLWF0dHJcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uQXR0cmlidXRlVG9vbHRpcFwiPjEuMC4wPC9zcGFuPiBJUyBPTkUgT0YgPHNwYW4gY2xhc3M9XCJjb21wLXZhbFwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25WYWx1ZVRvb2x0aXBcIj5bIDxzcGFuIGNsYXNzPVwibWF0Y2gtdmFsXCI+MS4wLjA8L3NwYW4+LCA0LjMuNSBdPC9zcGFuPiA8c3BhbiBjbGFzcz1cImFycm93XCI+4p6UPC9zcGFuPiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJVc2VyQ29tcGFyYXRvci5TZW1WZXJJc05vdE9uZU9mXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXAtYXR0clwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25BdHRyaWJ1dGVUb29sdGlwXCI+Mi4xLjA8L3NwYW4+IElTIE5PVCBPTkUgT0YgPHNwYW4gY2xhc3M9XCJjb21wLXZhbFwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25WYWx1ZVRvb2x0aXBcIj5bIDEuMC4wLCA0LjMuNSBdPC9zcGFuPiA8c3BhbiBjbGFzcz1cImFycm93XCI+4p6UPC9zcGFuPiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJVc2VyQ29tcGFyYXRvci5TZW1WZXJMZXNzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXAtYXR0clwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25BdHRyaWJ1dGVUb29sdGlwXCI+MS4wLjA8L3NwYW4+ICZsdDsgPHNwYW4gY2xhc3M9XCJjb21wLXZhbCBtYXRjaC12YWxcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uVmFsdWVUb29sdGlwXCI+MS4yLjA8L3NwYW4+IDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7inpQ8L3NwYW4+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlVzZXJDb21wYXJhdG9yLlNlbVZlckxlc3NPckVxdWFsc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wLWF0dHJcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uQXR0cmlidXRlVG9vbHRpcFwiPjEuMC4wPC9zcGFuPiAmbHQ7PSA8c3BhbiBjbGFzcz1cImNvbXAtdmFsIG1hdGNoLXZhbFwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25WYWx1ZVRvb2x0aXBcIj4xLjIuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJhcnJvd1wiPuKelDwvc3Bhbj4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiVXNlckNvbXBhcmF0b3IuU2VtVmVyR3JlYXRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wLWF0dHJcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uQXR0cmlidXRlVG9vbHRpcFwiPjEuMC4wPC9zcGFuPiAmZ3Q7IDxzcGFuIGNsYXNzPVwiY29tcC12YWwgbWF0Y2gtdmFsXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvblZhbHVlVG9vbHRpcFwiPjEuMC4wLWFscGhhPC9zcGFuPiA8c3BhbiBjbGFzcz1cImFycm93XCI+4p6UPC9zcGFuPiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJVc2VyQ29tcGFyYXRvci5TZW1WZXJHcmVhdGVyT3JFcXVhbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcC1hdHRyXCIgW21hdFRvb2x0aXBdPVwiY29tcGFyaXNvbkF0dHJpYnV0ZVRvb2x0aXBcIj4xLjIuMDwvc3Bhbj4gJmd0Oz0gPHNwYW4gY2xhc3M9XCJjb21wLXZhbCBtYXRjaC12YWxcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uVmFsdWVUb29sdGlwXCI+MS4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7inpQ8L3NwYW4+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEQVRFVElNRSAtLT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJVc2VyQ29tcGFyYXRvci5EYXRlVGltZUJlZm9yZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wLWF0dHJcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uQXR0cmlidXRlVG9vbHRpcFwiPjIwMjAuMTEuMDUgMTA6MzY6MjQ8L3NwYW4+IEJFRk9SRSA8c3BhbiBjbGFzcz1cImNvbXAtdmFsIG1hdGNoLXZhbFwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25WYWx1ZVRvb2x0aXBcIj4yMDIwLjExLjA1IDEyOjAwOjAwPC9zcGFuPiA8c3BhbiBjbGFzcz1cImFycm93XCI+4p6UPC9zcGFuPiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJVc2VyQ29tcGFyYXRvci5EYXRlVGltZUFmdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXAtYXR0clwiIFttYXRUb29sdGlwXT1cImNvbXBhcmlzb25BdHRyaWJ1dGVUb29sdGlwXCI+MjAyMC4xMS4wNSAxNTo0MTowNjwvc3Bhbj4gQUZURVIgPHNwYW4gY2xhc3M9XCJjb21wLXZhbCBtYXRjaC12YWxcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uVmFsdWVUb29sdGlwXCI+MjAyMC4xMS4wNSAxMjowMDowMDwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJhcnJvd1wiPuKelDwvc3Bhbj4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFSUkFZIC0tPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlVzZXJDb21wYXJhdG9yLkFycmF5Q29udGFpbnNBbnlPZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wLWF0dHJcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uQXR0cmlidXRlVG9vbHRpcFwiPlsgV3JpdGVyLCBSZWFkZXIgXTwvc3Bhbj4gQVJSQVkgQ09OVEFJTlMgQU5ZIE9GIDxzcGFuIGNsYXNzPVwiY29tcC12YWxcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uVmFsdWVUb29sdGlwXCI+WyA8c3BhbiBjbGFzcz1cIm1hdGNoLXZhbFwiPldyaXRlcjwvc3Bhbj4sIEFkbWluIF08L3NwYW4+IDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7inpQ8L3NwYW4+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlVzZXJDb21wYXJhdG9yLkFycmF5RG9lc05vdENvbnRhaW5BbnlPZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wLWF0dHJcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uQXR0cmlidXRlVG9vbHRpcFwiPlsgR3Vlc3QsIFJlYWRlciBdPC9zcGFuPiBBUlJBWSBOT1QgQ09OVEFJTlMgQU5ZIE9GIDxzcGFuIGNsYXNzPVwiY29tcC12YWxcIiBbbWF0VG9vbHRpcF09XCJjb21wYXJpc29uVmFsdWVUb29sdGlwXCI+WyBXcml0ZXIsIEFkbWluIF08L3NwYW4+IDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7inpQ8L3NwYW4+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY29uZmlkZW50aWFsPlxuICAgIDxwPlNlbGVjdCBob3cgdGhlIDxpPmNvbXBhcmlzb24gdmFsdWVzPC9pPiBzaG91bGQgYmUgcGVyc2lzdGVkOjwvcD5cbiAgICA8ZGl2IG1hdFRvb2x0aXA9XCJUaGUgY3VycmVudGx5IHNlbGVjdGVkIGNvbXBhcmF0b3IgZG9lcyBub3Qgc3VwcG9ydCBoYXNoZWQgY29tcGFyaXNvbiB2YWx1ZXMsIHRoZXkgd2lsbCBiZSBwcmVzZW50ZWQgYXMgY2xlYXJ0ZXh0IGluIHRoZSBjb25maWcgSlNPTi5cIlxuICAgICAgICBbbWF0VG9vbHRpcERpc2FibGVkXT1cImNvbmZpZGVudGlhbEVuYWJsZWRcIj5cbiAgICAgICAgPG1hdC1yYWRpby1ncm91cCBjbGFzcz1cImNvbmZpZGVudGlhbC1jb250YWluZXJcIiAoY2hhbmdlKT1cImNvbmZpZGVudGlhbENoYW5nZSgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlkZW50aWFsIGl0ZW1cIiAoY2xpY2spPVwiY29uZmlkZW50aWFsQ2hhbmdlKHRydWUpXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgW3ZhbHVlXT1cInRydWVcIiBbY2hlY2tlZF09XCJpc0NvbmZpZGVudGlhbFwiIFtkaXNhYmxlZF09XCIhY29uZmlkZW50aWFsRW5hYmxlZCB8fCBkYXRhLnJlYWRPbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHRcIj5IYXNoZWQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uXCI+PG1hdC1pY29uPmxvY2s8L21hdC1pY29uPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIFdlIHJlY29tbWVuZCB1c2luZyB0aGlzIG9wdGlvbiBpbiBjYXNlIG9mIGZyb250ZW5kIGFwcGxpY2F0aW9ucyB0YXJnZXRpbmcgdXNlcnMgYmFzZWQgb24gc2Vuc2l0aXZlIGRhdGEgKGxpa2UgZW1haWwgYWRkcmVzc2VzLCBuYW1lcywgZXRjKS4gXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xlYXJ0ZXh0IGl0ZW1cIiAoY2xpY2spPVwiY29uZmlkZW50aWFsQ2hhbmdlKGZhbHNlKVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJmYWxzZVwiIFtjaGVja2VkXT1cIiFpc0NvbmZpZGVudGlhbFwiIFtkaXNhYmxlZF09XCIhY29uZmlkZW50aWFsRW5hYmxlZCB8fCBkYXRhLnJlYWRPbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHRcIj5DbGVhcnRleHQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uXCI+PG1hdC1pY29uPmxvY2tfb3Blbl9yaWdodDwvbWF0LWljb24+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhpcyBvcHRpb24gd2hlbiB5b3UgdGFyZ2V0IHVzZXJzIGJhc2VkIG9uIG5vbi1zZW5zaXRpdmUgZGF0YS4gQ29tcGFyaXNvbiB2YWx1ZXMgd2lsbCBiZSBwcmVzZW50ZWQgYXMgcGxhaW4gdGV4dCBpbiB0aGUgPGk+Y29uZmlnIEpTT048L2k+LlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT4iXX0=