@byuhbll/components 0.0.8 → 0.0.9

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.
@@ -2,11 +2,11 @@ import { Component, EventEmitter, Input, Output, ViewChild, inject, } from '@ang
2
2
  import { NonNullableFormBuilder, ReactiveFormsModule, Validators, } from '@angular/forms';
3
3
  import { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';
4
4
  import { filter, startWith, tap } from 'rxjs/operators';
5
- import { ADVANCED_SEARCH_OPTIONS, ADVANCED_SEARCH_QUERIES_LIMIT, } from '../ss-search-bar.component';
5
+ import { isAdvancedSearchFieldOption, isAdvancedSearchLocalFieldOption, isAdvancedSearchExternalFieldOption, } from '../models/advanced-search.model';
6
6
  import { Subscription } from 'rxjs';
7
7
  import { validateDateRangeFields } from '../utils';
8
8
  import { CommonModule } from '@angular/common';
9
- import { ADVANCED_SEARCH_FIELD_MAP, ADVANCED_SEARCH_QUALIFIER_MAP } from '../constants';
9
+ import { ADVANCED_SEARCH_FIELD_MAP, ADVANCED_SEARCH_OPTIONS, ADVANCED_SEARCH_QUALIFIER_MAP, ADVANCED_SEARCH_QUERIES_LIMIT, } from '../constants';
10
10
  import { MatIconModule } from '@angular/material/icon';
11
11
  import { HbllMultiSelectComponent } from '../../hbll-multi-select/hbll-multi-select.component';
12
12
  import { HbllCheckboxComponent } from '../../hbll-checkbox/hbll-checkbox.component';
@@ -59,9 +59,7 @@ export class AdvancedSearchComponent {
59
59
  this.queries.push(this.fb.group({
60
60
  boolean: [ADVANCED_SEARCH_OPTIONS.boolean[0]],
61
61
  field: [
62
- this.config.scope === 'external'
63
- ? ADVANCED_SEARCH_OPTIONS.externalFields[0]
64
- : ADVANCED_SEARCH_OPTIONS.localFields[0],
62
+ ADVANCED_SEARCH_OPTIONS.fields[0],
65
63
  ],
66
64
  qualifier: [
67
65
  ADVANCED_SEARCH_OPTIONS.qualifiers[ADVANCED_SEARCH_OPTIONS.localFields[0]][0],
@@ -171,15 +169,18 @@ export class AdvancedSearchComponent {
171
169
  // Add the query value.
172
170
  queryControl.controls.query.setValue(queryRow.query);
173
171
  // Add the field value, if available.
174
- if (queryRow.field)
172
+ if (queryRow.field && // Only set the field if the value belongs to the current scope
173
+ (isAdvancedSearchFieldOption(queryRow.field) ||
174
+ (this.config.scope === 'local'
175
+ ? isAdvancedSearchLocalFieldOption(queryRow.field)
176
+ : isAdvancedSearchExternalFieldOption(queryRow.field))))
175
177
  queryControl.controls.field.setValue(queryRow.field);
176
178
  else
177
- queryControl.controls.field.setValue(this.config.scope === 'external'
178
- ? this.advancedSearchOptions.externalFields[0]
179
- : this.advancedSearchOptions.localFields[0]);
179
+ queryControl.controls.field.setValue(this.advancedSearchOptions.fields[0]);
180
180
  // Add the qualifier value, if available and a local search.
181
181
  if (this.config.scope === 'local' && queryRow.qualifier)
182
- queryControl.controls.qualifier.setValue(queryRow.qualifier);
182
+ queryControl.controls.qualifier.setValue(queryRow.qualifier ||
183
+ this.advancedSearchOptions.qualifiers[queryControl.controls.field.value]);
183
184
  // Add the boolean, if available and not the first query.
184
185
  if (i !== 0 && queryRow.boolean)
185
186
  queryControl.controls.boolean.setValue(queryRow.boolean);
@@ -241,7 +242,7 @@ export class AdvancedSearchComponent {
241
242
  return this.advancedSearchForm.controls.expandResults.controls.applyEquivalentSubjects;
242
243
  }
243
244
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AdvancedSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
244
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: AdvancedSearchComponent, isStandalone: true, selector: "lib-ss-advanced-search", inputs: { config: "config" }, outputs: { advancedSearch: "advancedSearch" }, viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }, { propertyName: "inputTooltip", first: true, predicate: MatTooltip, descendants: true }], ngImport: i0, template: "<form\n data-testid=\"advancedSearchForm\"\n (submit)=\"config.scope === 'local' ? doLocalAdvancedSearch() : doExternalAdvancedSearch()\"\n [formGroup]=\"advancedSearchForm\"\n class=\"adv-search-wrapper\"\n>\n <h3>Advanced Search</h3>\n <!-- Queries -->\n @for (query of queries.controls; track $index; let queryIndex = $index) {\n <div class=\"adv-search-row\" [formGroup]=\"query\">\n <!-- Boolean operator -->\n <!-- Add boolean for each row except for first -->\n @if (!$first) {\n <div class=\"select-wrapper\">\n <select\n [id]=\"'boolean' + queryIndex\"\n [formControlName]=\"'boolean'\"\n [attr.data-testid]=\"'boolean' + queryIndex\"\n >\n @for (boolean of advancedSearchOptions.boolean; track boolean) {\n <option [ngValue]=\"boolean\">\n {{ boolean }}\n </option>\n }\n </select>\n </div>\n }\n <!-- Field -->\n <label [for]=\"'field' + queryIndex\" class=\"hidden\">Field {{ queryIndex }}</label>\n <div class=\"select-wrapper\">\n <select\n [id]=\"'field' + queryIndex\"\n [formControlName]=\"'field'\"\n [attr.data-testid]=\"'field' + queryIndex\"\n >\n @for (\n field of config.scope === 'external'\n ? advancedSearchOptions.externalFields\n : advancedSearchOptions.localFields;\n track field\n ) {\n <option [ngValue]=\"field\">\n {{ advancedSearchFieldMap[field] }}\n </option>\n }\n </select>\n </div>\n <!-- Qualifiers are only available for local searches -->\n @if (config.scope === 'local') {\n <label [for]=\"'qualifier' + queryIndex\" class=\"hidden\"\n >Match Criteria {{ queryIndex }}</label\n >\n <div class=\"select-wrapper\">\n <select\n [id]=\"'qualifier' + queryIndex\"\n [formControlName]=\"'qualifier'\"\n [attr.data-testid]=\"'qualifier' + queryIndex\"\n >\n <!-- $any because a field can technically be local or external, though this block is scoped strictly to local fields -->\n @for (\n qualifier of $any(advancedSearchOptions.qualifiers)[\n query.controls.field.value\n ];\n track qualifier;\n let optionIndex = $index\n ) {\n <option\n [ngValue]=\"qualifier\"\n [attr.data-testid]=\"\n 'qualifier' + queryIndex + '-option' + optionIndex\n \"\n >\n {{ $any(advancedSearchQualifierMap)[qualifier] }}\n </option>\n }\n </select>\n </div>\n }\n <!-- Query -->\n <label [for]=\"'query' + queryIndex\" class=\"hidden\">Query {{ queryIndex }}</label>\n <div class=\"query-input\">\n <input\n #searchInput\n [id]=\"'query' + queryIndex\"\n [formControlName]=\"'query'\"\n [attr.data-testid]=\"'query' + queryIndex\"\n required\n aria-required=\"true\"\n matTooltip=\"Fill out this field\"\n [matTooltipPosition]=\"'above'\"\n [matTooltipDisabled]=\"true\"\n [attr.aria-invalid]=\"isSubmitted && queries.at(0).controls.query.invalid\"\n aria-describedby=\"invalidInputDesc\"\n />\n </div>\n @if (!$first) {\n <button\n class=\"row-cancel\"\n type=\"button\"\n (click)=\"removeQuery(queryIndex)\"\n [attr.data-testid]=\"'cancelRow' + queryIndex\"\n >\n <span class=\"material-symbols-outlined icon\"> cancel </span>\n </button>\n }\n </div>\n }\n <button\n type=\"button\"\n (click)=\"addQuery()\"\n id=\"addQueryBtn\"\n data-testid=\"addQuery\"\n [disabled]=\"queries.length > 11\"\n >\n <span class=\"material-symbols-outlined icon\"> add </span>\n Add a row\n </button>\n <!-- OTHER OPTIONS -->\n <div class=\"other-options\">\n <!-- LOCAL -->\n @if (config.scope === 'local') {\n <!-- Type -->\n <div data-testid=\"resourceType\">\n <h4>Resource Type</h4>\n <div class=\"multi-select-wrapper\">\n <lib-hbll-multi-select\n [label]=\"'Resource Type'\"\n [allOptions]=\"config.localAdvancedSearch.availableResourceTypes\"\n [selectedKeys]=\"types.value\"\n (selectedKeysChange)=\"types.setValue($event)\"\n ></lib-hbll-multi-select>\n </div>\n </div>\n <!-- Collection -->\n <div data-testid=\"collection\">\n <h4>Collection</h4>\n <div class=\"multi-select-wrapper\">\n <lib-hbll-multi-select\n [label]=\"'Collection'\"\n [allOptions]=\"config.localAdvancedSearch.availableCollections\"\n [selectedKeys]=\"collections.value\"\n (selectedKeysChange)=\"collections.setValue($event)\"\n ></lib-hbll-multi-select>\n </div>\n </div>\n }\n <!-- EXTERNAL -->\n @if (config.scope === 'external') {\n <div formGroupName=\"limitResults\" class=\"checkbox-section\">\n <h4>For Fewer Results Try</h4>\n <!-- Peer reviewed -->\n <label class=\"checkbox-label\" for=\"peerReviewed\" tabindex=\"0\">\n <input\n class=\"hidden\"\n id=\"peerReviewed\"\n type=\"checkbox\"\n [formControlName]=\"'peerReviewed'\"\n data-testid=\"peerReviewed\"\n />\n <lib-hbll-checkbox [isChecked]=\"peerReviewed.value\"></lib-hbll-checkbox>\n <span class=\"label-text\">Peer reviewed journal articles</span>\n </label>\n </div>\n <div formGroupName=\"expandResults\" class=\"checkbox-section\">\n <h4>For More Results Try</h4>\n <!-- Apply related words -->\n <label class=\"checkbox-label\" for=\"applyRelatedWords\" tabindex=\"0\">\n <input\n class=\"hidden\"\n id=\"applyRelatedWords\"\n type=\"checkbox\"\n [formControlName]=\"'applyRelatedWords'\"\n data-testid=\"applyRelatedWords\"\n />\n <lib-hbll-checkbox [isChecked]=\"applyRelatedWords.value\"></lib-hbll-checkbox>\n <span class=\"label-text\">Apply related words</span>\n </label>\n <!-- Apply equivalent subjects -->\n <label class=\"checkbox-label\" for=\"applyEquivalentSubjects\" tabindex=\"0\">\n <input\n class=\"hidden\"\n id=\"applyEquivalentSubjects\"\n type=\"checkbox\"\n [formControlName]=\"'applyEquivalentSubjects'\"\n data-testid=\"applyEquivalentSubjects\"\n />\n <lib-hbll-checkbox\n [isChecked]=\"applyEquivalentSubjects.value\"\n ></lib-hbll-checkbox>\n <span class=\"label-text\">Apply equivalent subjects</span>\n </label>\n <!-- Full text -->\n <label class=\"checkbox-label\" for=\"fullText\" tabindex=\"0\">\n <input\n class=\"hidden\"\n id=\"fullText\"\n type=\"checkbox\"\n [formControlName]=\"'fullText'\"\n data-testid=\"fullText\"\n />\n <lib-hbll-checkbox [isChecked]=\"fullText.value\"></lib-hbll-checkbox>\n <span class=\"label-text\"\n >Include results the library doesn't have access to</span\n >\n </label>\n </div>\n <!-- Date -->\n <div id=\"dateOptions\">\n <h4>Date Published</h4>\n <lib-date-range\n [from]=\"from.value\"\n [to]=\"to.value\"\n (fromChange)=\"from.setValue($event)\"\n (toChange)=\"to.setValue($event)\"\n ></lib-date-range>\n </div>\n <!-- Language -->\n <div>\n <h4>Language</h4>\n <lib-hbll-multi-select\n [label]=\"'language'\"\n [allOptions]=\"config.externalAdvancedSearch.availableLanguages\"\n [selectedKeys]=\"languages.value\"\n (selectedKeysChange)=\"languages.setValue($any($event))\"\n ></lib-hbll-multi-select>\n </div>\n }\n </div>\n <div id=\"advSearchFooter\">\n <button libHbllPillBtn [color]=\"'blue'\" type=\"submit\" data-testid=\"advSearchSubmitButton\">\n Search\n </button>\n </div>\n</form>\n", styles: ["select,textarea,input{appearance:none;font-family:inherit;padding:.38em;border:solid 1px #707070;border-radius:4px;font-size:1em;background-color:#fff}select:focus,textarea:focus,input:focus{border-color:#3a6093}.select-wrapper{position:relative}.select-wrapper select{cursor:pointer;padding-right:2em}.select-wrapper:after{font-family:Material Symbols Outlined;content:\"arrow_drop_down\";pointer-events:none;top:0;font-size:1.5em;right:.2em;height:100%;position:absolute;display:flex;align-items:center;opacity:70%}a,button{border:none;background:none;font-family:inherit;padding:0;margin:0;font-size:inherit;color:#1c7ec9;text-decoration:none;cursor:pointer}a:hover,button:hover{color:#8ab6f0}:host{box-sizing:border-box}:host *{box-sizing:inherit}.select-wrapper{margin-right:.3em}.row-cancel{color:#aaa;margin-left:.4em;margin-top:.4em}.row-cancel:hover{color:#666}.row-cancel .icon{font-size:1em}.hidden{display:none}#addQueryBtn{display:flex;align-items:center}#addQueryBtn:disabled{color:#999;pointer-events:none}#addQueryBtn .icon{font-size:1em}.adv-search-wrapper{width:100%}h3{font-size:1.13em;font-weight:300;margin-bottom:.7em}h4{margin-bottom:.3em;font-weight:600}.adv-search-row{display:flex;flex-wrap:wrap;width:100%;margin-bottom:.6em}.query-input{display:inline-block;width:100%;margin-top:.4rem}.query-input input{width:100%}.other-options{display:grid;grid-template-columns:repeat(1,1fr);gap:.6em 1.6em;grid-auto-rows:minmax(1em,auto);margin-top:1.4em}.other-options label{margin-right:1rem}.checkbox-label{display:inline-flex;align-items:flex-start;cursor:pointer}.checkbox-label:not(:last-of-type){margin-bottom:.75em}.checkbox-label .label-text{margin-top:-.1em;margin-left:.45em}.checkbox-section{margin-bottom:.8em}#advSearchFooter{margin-bottom:.5em;display:flex;justify-content:flex-end;font-size:1.2em}@media screen and (min-width: 615px){.adv-search-row{flex-wrap:nowrap}.other-options{grid-template-columns:repeat(2,1fr)}.query-input{margin-top:0}#dateOptions{grid-column:span 2}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: HbllMultiSelectComponent, selector: "lib-hbll-multi-select", inputs: ["allOptions", "label", "selectedKeys"], outputs: ["selectedKeysChange"] }, { kind: "component", type: HbllCheckboxComponent, selector: "lib-hbll-checkbox", inputs: ["isChecked"] }, { kind: "directive", type: HbllPillBtnDirective, selector: "[libHbllPillBtn]", inputs: ["isDestructiveStyle", "isDisabled", "isFullWidth", "color"] }, { kind: "component", type: DateRangeComponent, selector: "lib-date-range", inputs: ["from", "to"], outputs: ["validDateChange", "fromChange", "toChange"] }] }); }
245
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: AdvancedSearchComponent, isStandalone: true, selector: "lib-ss-advanced-search", inputs: { config: "config" }, outputs: { advancedSearch: "advancedSearch" }, viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }, { propertyName: "inputTooltip", first: true, predicate: MatTooltip, descendants: true }], ngImport: i0, template: "<form\n data-testid=\"advancedSearchForm\"\n (submit)=\"config.scope === 'local' ? doLocalAdvancedSearch() : doExternalAdvancedSearch()\"\n [formGroup]=\"advancedSearchForm\"\n class=\"adv-search-wrapper\"\n>\n <h3>Advanced Search</h3>\n <!-- Queries -->\n @for (query of queries.controls; track $index; let queryIndex = $index) {\n <div class=\"adv-search-row\" [formGroup]=\"query\">\n <!-- Boolean operator -->\n <!-- Add boolean for each row except for first -->\n @if (!$first) {\n <div class=\"select-wrapper\">\n <select\n [id]=\"'boolean' + queryIndex\"\n [formControlName]=\"'boolean'\"\n [attr.data-testid]=\"'boolean' + queryIndex\"\n >\n @for (boolean of advancedSearchOptions.boolean; track boolean) {\n <option [ngValue]=\"boolean\">\n {{ boolean }}\n </option>\n }\n </select>\n </div>\n }\n <!-- Field -->\n <label [for]=\"'field' + queryIndex\" class=\"hidden\">Field {{ queryIndex }}</label>\n <div class=\"select-wrapper\">\n <select\n [id]=\"'field' + queryIndex\"\n [formControlName]=\"'field'\"\n [attr.data-testid]=\"'field' + queryIndex\"\n >\n @for (field of advancedSearchOptions.fields; track field) {\n <option [ngValue]=\"field\">\n {{ advancedSearchFieldMap[field] }}\n </option>\n }\n <optgroup\n [label]=\"(config.scope === 'external' ? 'Online' : 'Library') + ' Specific'\"\n >\n @for (\n field of config.scope === 'external'\n ? advancedSearchOptions.externalFields\n : advancedSearchOptions.localFields;\n track field\n ) {\n <option [ngValue]=\"field\">\n {{ advancedSearchFieldMap[field] }}\n </option>\n }\n </optgroup>\n </select>\n </div>\n <!-- Qualifiers are only available for local searches -->\n @if (config.scope === 'local') {\n <label [for]=\"'qualifier' + queryIndex\" class=\"hidden\"\n >Match Criteria {{ queryIndex }}</label\n >\n <div class=\"select-wrapper\">\n <select\n [id]=\"'qualifier' + queryIndex\"\n [formControlName]=\"'qualifier'\"\n [attr.data-testid]=\"'qualifier' + queryIndex\"\n >\n <!-- $any because a field can technically be local or external, though this block is scoped strictly to local fields -->\n @for (\n qualifier of $any(advancedSearchOptions.qualifiers)[\n query.controls.field.value\n ];\n track qualifier;\n let optionIndex = $index\n ) {\n <option\n [ngValue]=\"qualifier\"\n [attr.data-testid]=\"\n 'qualifier' + queryIndex + '-option' + optionIndex\n \"\n >\n {{ $any(advancedSearchQualifierMap)[qualifier] }}\n </option>\n }\n </select>\n </div>\n }\n <!-- Query -->\n <label [for]=\"'query' + queryIndex\" class=\"hidden\">Query {{ queryIndex }}</label>\n <div class=\"query-input\">\n <input\n #searchInput\n [id]=\"'query' + queryIndex\"\n [formControlName]=\"'query'\"\n [attr.data-testid]=\"'query' + queryIndex\"\n required\n aria-required=\"true\"\n matTooltip=\"Fill out this field\"\n [matTooltipPosition]=\"'above'\"\n [matTooltipDisabled]=\"true\"\n [attr.aria-invalid]=\"isSubmitted && queries.at(0).controls.query.invalid\"\n aria-describedby=\"invalidInputDesc\"\n />\n </div>\n @if (!$first) {\n <button\n class=\"row-cancel\"\n type=\"button\"\n (click)=\"removeQuery(queryIndex)\"\n [attr.data-testid]=\"'cancelRow' + queryIndex\"\n >\n <span class=\"material-symbols-outlined icon\"> cancel </span>\n </button>\n }\n </div>\n }\n <button\n type=\"button\"\n (click)=\"addQuery()\"\n id=\"addQueryBtn\"\n data-testid=\"addQuery\"\n [disabled]=\"queries.length > 11\"\n >\n <span class=\"material-symbols-outlined icon\"> add </span>\n Add a row\n </button>\n <!-- OTHER OPTIONS -->\n <div class=\"other-options\">\n <!-- LOCAL -->\n @if (config.scope === 'local') {\n <!-- Type -->\n <div data-testid=\"resourceType\">\n <h4>Resource Type</h4>\n <div class=\"multi-select-wrapper\">\n <lib-hbll-multi-select\n [label]=\"'Resource Type'\"\n [allOptions]=\"config.localAdvancedSearch.availableResourceTypes\"\n [selectedKeys]=\"types.value\"\n (selectedKeysChange)=\"types.setValue($event)\"\n ></lib-hbll-multi-select>\n </div>\n </div>\n <!-- Collection -->\n <div data-testid=\"collection\">\n <h4>Collection</h4>\n <div class=\"multi-select-wrapper\">\n <lib-hbll-multi-select\n [label]=\"'Collection'\"\n [allOptions]=\"config.localAdvancedSearch.availableCollections\"\n [selectedKeys]=\"collections.value\"\n (selectedKeysChange)=\"collections.setValue($event)\"\n ></lib-hbll-multi-select>\n </div>\n </div>\n }\n <!-- EXTERNAL -->\n @if (config.scope === 'external') {\n <div formGroupName=\"limitResults\" class=\"checkbox-section\">\n <h4>For Fewer Results Try</h4>\n <!-- Peer reviewed -->\n <label class=\"checkbox-label\" for=\"peerReviewed\" tabindex=\"0\">\n <input\n class=\"hidden\"\n id=\"peerReviewed\"\n type=\"checkbox\"\n [formControlName]=\"'peerReviewed'\"\n data-testid=\"peerReviewed\"\n />\n <lib-hbll-checkbox [isChecked]=\"peerReviewed.value\"></lib-hbll-checkbox>\n <span class=\"label-text\">Peer reviewed journal articles</span>\n </label>\n </div>\n <div formGroupName=\"expandResults\" class=\"checkbox-section\">\n <h4>For More Results Try</h4>\n <!-- Apply related words -->\n <label class=\"checkbox-label\" for=\"applyRelatedWords\" tabindex=\"0\">\n <input\n class=\"hidden\"\n id=\"applyRelatedWords\"\n type=\"checkbox\"\n [formControlName]=\"'applyRelatedWords'\"\n data-testid=\"applyRelatedWords\"\n />\n <lib-hbll-checkbox [isChecked]=\"applyRelatedWords.value\"></lib-hbll-checkbox>\n <span class=\"label-text\">Apply related words</span>\n </label>\n <!-- Apply equivalent subjects -->\n <label class=\"checkbox-label\" for=\"applyEquivalentSubjects\" tabindex=\"0\">\n <input\n class=\"hidden\"\n id=\"applyEquivalentSubjects\"\n type=\"checkbox\"\n [formControlName]=\"'applyEquivalentSubjects'\"\n data-testid=\"applyEquivalentSubjects\"\n />\n <lib-hbll-checkbox\n [isChecked]=\"applyEquivalentSubjects.value\"\n ></lib-hbll-checkbox>\n <span class=\"label-text\">Apply equivalent subjects</span>\n </label>\n <!-- Full text -->\n <label class=\"checkbox-label\" for=\"fullText\" tabindex=\"0\">\n <input\n class=\"hidden\"\n id=\"fullText\"\n type=\"checkbox\"\n [formControlName]=\"'fullText'\"\n data-testid=\"fullText\"\n />\n <lib-hbll-checkbox [isChecked]=\"fullText.value\"></lib-hbll-checkbox>\n <span class=\"label-text\"\n >Include results the library doesn't have access to</span\n >\n </label>\n </div>\n <!-- Date -->\n <div id=\"dateOptions\">\n <h4>Date Published</h4>\n <lib-date-range\n [from]=\"from.value\"\n [to]=\"to.value\"\n (fromChange)=\"from.setValue($event)\"\n (toChange)=\"to.setValue($event)\"\n ></lib-date-range>\n </div>\n <!-- Language -->\n <div>\n <h4>Language</h4>\n <lib-hbll-multi-select\n [label]=\"'language'\"\n [allOptions]=\"config.externalAdvancedSearch.availableLanguages\"\n [selectedKeys]=\"languages.value\"\n (selectedKeysChange)=\"languages.setValue($any($event))\"\n ></lib-hbll-multi-select>\n </div>\n }\n </div>\n <div id=\"advSearchFooter\">\n <button libHbllPillBtn [color]=\"'blue'\" type=\"submit\" data-testid=\"advSearchSubmitButton\">\n Search\n </button>\n </div>\n</form>\n", styles: ["select,textarea,input{appearance:none;font-family:inherit;padding:.38em;border:solid 1px #707070;border-radius:4px;font-size:1em;background-color:#fff}select:focus,textarea:focus,input:focus{border-color:#3a6093}.select-wrapper{position:relative}.select-wrapper select{cursor:pointer;padding-right:2em}.select-wrapper:after{font-family:Material Symbols Outlined;content:\"arrow_drop_down\";pointer-events:none;top:0;font-size:1.5em;right:.2em;height:100%;position:absolute;display:flex;align-items:center;opacity:70%}a,button{border:none;background:none;font-family:inherit;padding:0;margin:0;font-size:inherit;color:#1c7ec9;text-decoration:none;cursor:pointer}a:hover,button:hover{color:#8ab6f0}:host{box-sizing:border-box}:host *{box-sizing:inherit}.select-wrapper{margin-right:.3em}.row-cancel{color:#aaa;margin-left:.4em;margin-top:.4em}.row-cancel:hover{color:#666}.row-cancel .icon{font-size:1em}.hidden{display:none}#addQueryBtn{display:flex;align-items:center}#addQueryBtn:disabled{color:#999;pointer-events:none}#addQueryBtn .icon{font-size:1em}.adv-search-wrapper{width:100%}h3{font-size:1.13em;font-weight:300;margin-bottom:.7em}h4{margin-bottom:.3em;font-weight:600}.adv-search-row{display:flex;flex-wrap:wrap;width:100%;margin-bottom:.6em}.query-input{display:inline-block;width:100%;margin-top:.4rem}.query-input input{width:100%}.other-options{display:grid;grid-template-columns:repeat(1,1fr);gap:.6em 1.6em;grid-auto-rows:minmax(1em,auto);margin-top:1.4em}.other-options label{margin-right:1rem}.checkbox-label{display:inline-flex;align-items:flex-start;cursor:pointer}.checkbox-label:not(:last-of-type){margin-bottom:.75em}.checkbox-label .label-text{margin-top:-.1em;margin-left:.45em}.checkbox-section{margin-bottom:.8em}#advSearchFooter{margin-bottom:.5em;display:flex;justify-content:flex-end;font-size:1.2em}@media screen and (min-width: 615px){.adv-search-row{flex-wrap:nowrap}.other-options{grid-template-columns:repeat(2,1fr)}.query-input{margin-top:0}#dateOptions{grid-column:span 2}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: HbllMultiSelectComponent, selector: "lib-hbll-multi-select", inputs: ["allOptions", "label", "selectedKeys"], outputs: ["selectedKeysChange"] }, { kind: "component", type: HbllCheckboxComponent, selector: "lib-hbll-checkbox", inputs: ["isChecked"] }, { kind: "directive", type: HbllPillBtnDirective, selector: "[libHbllPillBtn]", inputs: ["isDestructiveStyle", "isDisabled", "isFullWidth", "color"] }, { kind: "component", type: DateRangeComponent, selector: "lib-date-range", inputs: ["from", "to"], outputs: ["validDateChange", "fromChange", "toChange"] }] }); }
245
246
  }
246
247
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AdvancedSearchComponent, decorators: [{
247
248
  type: Component,
@@ -254,7 +255,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
254
255
  HbllCheckboxComponent,
255
256
  HbllPillBtnDirective,
256
257
  DateRangeComponent,
257
- ], template: "<form\n data-testid=\"advancedSearchForm\"\n (submit)=\"config.scope === 'local' ? doLocalAdvancedSearch() : doExternalAdvancedSearch()\"\n [formGroup]=\"advancedSearchForm\"\n class=\"adv-search-wrapper\"\n>\n <h3>Advanced Search</h3>\n <!-- Queries -->\n @for (query of queries.controls; track $index; let queryIndex = $index) {\n <div class=\"adv-search-row\" [formGroup]=\"query\">\n <!-- Boolean operator -->\n <!-- Add boolean for each row except for first -->\n @if (!$first) {\n <div class=\"select-wrapper\">\n <select\n [id]=\"'boolean' + queryIndex\"\n [formControlName]=\"'boolean'\"\n [attr.data-testid]=\"'boolean' + queryIndex\"\n >\n @for (boolean of advancedSearchOptions.boolean; track boolean) {\n <option [ngValue]=\"boolean\">\n {{ boolean }}\n </option>\n }\n </select>\n </div>\n }\n <!-- Field -->\n <label [for]=\"'field' + queryIndex\" class=\"hidden\">Field {{ queryIndex }}</label>\n <div class=\"select-wrapper\">\n <select\n [id]=\"'field' + queryIndex\"\n [formControlName]=\"'field'\"\n [attr.data-testid]=\"'field' + queryIndex\"\n >\n @for (\n field of config.scope === 'external'\n ? advancedSearchOptions.externalFields\n : advancedSearchOptions.localFields;\n track field\n ) {\n <option [ngValue]=\"field\">\n {{ advancedSearchFieldMap[field] }}\n </option>\n }\n </select>\n </div>\n <!-- Qualifiers are only available for local searches -->\n @if (config.scope === 'local') {\n <label [for]=\"'qualifier' + queryIndex\" class=\"hidden\"\n >Match Criteria {{ queryIndex }}</label\n >\n <div class=\"select-wrapper\">\n <select\n [id]=\"'qualifier' + queryIndex\"\n [formControlName]=\"'qualifier'\"\n [attr.data-testid]=\"'qualifier' + queryIndex\"\n >\n <!-- $any because a field can technically be local or external, though this block is scoped strictly to local fields -->\n @for (\n qualifier of $any(advancedSearchOptions.qualifiers)[\n query.controls.field.value\n ];\n track qualifier;\n let optionIndex = $index\n ) {\n <option\n [ngValue]=\"qualifier\"\n [attr.data-testid]=\"\n 'qualifier' + queryIndex + '-option' + optionIndex\n \"\n >\n {{ $any(advancedSearchQualifierMap)[qualifier] }}\n </option>\n }\n </select>\n </div>\n }\n <!-- Query -->\n <label [for]=\"'query' + queryIndex\" class=\"hidden\">Query {{ queryIndex }}</label>\n <div class=\"query-input\">\n <input\n #searchInput\n [id]=\"'query' + queryIndex\"\n [formControlName]=\"'query'\"\n [attr.data-testid]=\"'query' + queryIndex\"\n required\n aria-required=\"true\"\n matTooltip=\"Fill out this field\"\n [matTooltipPosition]=\"'above'\"\n [matTooltipDisabled]=\"true\"\n [attr.aria-invalid]=\"isSubmitted && queries.at(0).controls.query.invalid\"\n aria-describedby=\"invalidInputDesc\"\n />\n </div>\n @if (!$first) {\n <button\n class=\"row-cancel\"\n type=\"button\"\n (click)=\"removeQuery(queryIndex)\"\n [attr.data-testid]=\"'cancelRow' + queryIndex\"\n >\n <span class=\"material-symbols-outlined icon\"> cancel </span>\n </button>\n }\n </div>\n }\n <button\n type=\"button\"\n (click)=\"addQuery()\"\n id=\"addQueryBtn\"\n data-testid=\"addQuery\"\n [disabled]=\"queries.length > 11\"\n >\n <span class=\"material-symbols-outlined icon\"> add </span>\n Add a row\n </button>\n <!-- OTHER OPTIONS -->\n <div class=\"other-options\">\n <!-- LOCAL -->\n @if (config.scope === 'local') {\n <!-- Type -->\n <div data-testid=\"resourceType\">\n <h4>Resource Type</h4>\n <div class=\"multi-select-wrapper\">\n <lib-hbll-multi-select\n [label]=\"'Resource Type'\"\n [allOptions]=\"config.localAdvancedSearch.availableResourceTypes\"\n [selectedKeys]=\"types.value\"\n (selectedKeysChange)=\"types.setValue($event)\"\n ></lib-hbll-multi-select>\n </div>\n </div>\n <!-- Collection -->\n <div data-testid=\"collection\">\n <h4>Collection</h4>\n <div class=\"multi-select-wrapper\">\n <lib-hbll-multi-select\n [label]=\"'Collection'\"\n [allOptions]=\"config.localAdvancedSearch.availableCollections\"\n [selectedKeys]=\"collections.value\"\n (selectedKeysChange)=\"collections.setValue($event)\"\n ></lib-hbll-multi-select>\n </div>\n </div>\n }\n <!-- EXTERNAL -->\n @if (config.scope === 'external') {\n <div formGroupName=\"limitResults\" class=\"checkbox-section\">\n <h4>For Fewer Results Try</h4>\n <!-- Peer reviewed -->\n <label class=\"checkbox-label\" for=\"peerReviewed\" tabindex=\"0\">\n <input\n class=\"hidden\"\n id=\"peerReviewed\"\n type=\"checkbox\"\n [formControlName]=\"'peerReviewed'\"\n data-testid=\"peerReviewed\"\n />\n <lib-hbll-checkbox [isChecked]=\"peerReviewed.value\"></lib-hbll-checkbox>\n <span class=\"label-text\">Peer reviewed journal articles</span>\n </label>\n </div>\n <div formGroupName=\"expandResults\" class=\"checkbox-section\">\n <h4>For More Results Try</h4>\n <!-- Apply related words -->\n <label class=\"checkbox-label\" for=\"applyRelatedWords\" tabindex=\"0\">\n <input\n class=\"hidden\"\n id=\"applyRelatedWords\"\n type=\"checkbox\"\n [formControlName]=\"'applyRelatedWords'\"\n data-testid=\"applyRelatedWords\"\n />\n <lib-hbll-checkbox [isChecked]=\"applyRelatedWords.value\"></lib-hbll-checkbox>\n <span class=\"label-text\">Apply related words</span>\n </label>\n <!-- Apply equivalent subjects -->\n <label class=\"checkbox-label\" for=\"applyEquivalentSubjects\" tabindex=\"0\">\n <input\n class=\"hidden\"\n id=\"applyEquivalentSubjects\"\n type=\"checkbox\"\n [formControlName]=\"'applyEquivalentSubjects'\"\n data-testid=\"applyEquivalentSubjects\"\n />\n <lib-hbll-checkbox\n [isChecked]=\"applyEquivalentSubjects.value\"\n ></lib-hbll-checkbox>\n <span class=\"label-text\">Apply equivalent subjects</span>\n </label>\n <!-- Full text -->\n <label class=\"checkbox-label\" for=\"fullText\" tabindex=\"0\">\n <input\n class=\"hidden\"\n id=\"fullText\"\n type=\"checkbox\"\n [formControlName]=\"'fullText'\"\n data-testid=\"fullText\"\n />\n <lib-hbll-checkbox [isChecked]=\"fullText.value\"></lib-hbll-checkbox>\n <span class=\"label-text\"\n >Include results the library doesn't have access to</span\n >\n </label>\n </div>\n <!-- Date -->\n <div id=\"dateOptions\">\n <h4>Date Published</h4>\n <lib-date-range\n [from]=\"from.value\"\n [to]=\"to.value\"\n (fromChange)=\"from.setValue($event)\"\n (toChange)=\"to.setValue($event)\"\n ></lib-date-range>\n </div>\n <!-- Language -->\n <div>\n <h4>Language</h4>\n <lib-hbll-multi-select\n [label]=\"'language'\"\n [allOptions]=\"config.externalAdvancedSearch.availableLanguages\"\n [selectedKeys]=\"languages.value\"\n (selectedKeysChange)=\"languages.setValue($any($event))\"\n ></lib-hbll-multi-select>\n </div>\n }\n </div>\n <div id=\"advSearchFooter\">\n <button libHbllPillBtn [color]=\"'blue'\" type=\"submit\" data-testid=\"advSearchSubmitButton\">\n Search\n </button>\n </div>\n</form>\n", styles: ["select,textarea,input{appearance:none;font-family:inherit;padding:.38em;border:solid 1px #707070;border-radius:4px;font-size:1em;background-color:#fff}select:focus,textarea:focus,input:focus{border-color:#3a6093}.select-wrapper{position:relative}.select-wrapper select{cursor:pointer;padding-right:2em}.select-wrapper:after{font-family:Material Symbols Outlined;content:\"arrow_drop_down\";pointer-events:none;top:0;font-size:1.5em;right:.2em;height:100%;position:absolute;display:flex;align-items:center;opacity:70%}a,button{border:none;background:none;font-family:inherit;padding:0;margin:0;font-size:inherit;color:#1c7ec9;text-decoration:none;cursor:pointer}a:hover,button:hover{color:#8ab6f0}:host{box-sizing:border-box}:host *{box-sizing:inherit}.select-wrapper{margin-right:.3em}.row-cancel{color:#aaa;margin-left:.4em;margin-top:.4em}.row-cancel:hover{color:#666}.row-cancel .icon{font-size:1em}.hidden{display:none}#addQueryBtn{display:flex;align-items:center}#addQueryBtn:disabled{color:#999;pointer-events:none}#addQueryBtn .icon{font-size:1em}.adv-search-wrapper{width:100%}h3{font-size:1.13em;font-weight:300;margin-bottom:.7em}h4{margin-bottom:.3em;font-weight:600}.adv-search-row{display:flex;flex-wrap:wrap;width:100%;margin-bottom:.6em}.query-input{display:inline-block;width:100%;margin-top:.4rem}.query-input input{width:100%}.other-options{display:grid;grid-template-columns:repeat(1,1fr);gap:.6em 1.6em;grid-auto-rows:minmax(1em,auto);margin-top:1.4em}.other-options label{margin-right:1rem}.checkbox-label{display:inline-flex;align-items:flex-start;cursor:pointer}.checkbox-label:not(:last-of-type){margin-bottom:.75em}.checkbox-label .label-text{margin-top:-.1em;margin-left:.45em}.checkbox-section{margin-bottom:.8em}#advSearchFooter{margin-bottom:.5em;display:flex;justify-content:flex-end;font-size:1.2em}@media screen and (min-width: 615px){.adv-search-row{flex-wrap:nowrap}.other-options{grid-template-columns:repeat(2,1fr)}.query-input{margin-top:0}#dateOptions{grid-column:span 2}}\n"] }]
258
+ ], template: "<form\n data-testid=\"advancedSearchForm\"\n (submit)=\"config.scope === 'local' ? doLocalAdvancedSearch() : doExternalAdvancedSearch()\"\n [formGroup]=\"advancedSearchForm\"\n class=\"adv-search-wrapper\"\n>\n <h3>Advanced Search</h3>\n <!-- Queries -->\n @for (query of queries.controls; track $index; let queryIndex = $index) {\n <div class=\"adv-search-row\" [formGroup]=\"query\">\n <!-- Boolean operator -->\n <!-- Add boolean for each row except for first -->\n @if (!$first) {\n <div class=\"select-wrapper\">\n <select\n [id]=\"'boolean' + queryIndex\"\n [formControlName]=\"'boolean'\"\n [attr.data-testid]=\"'boolean' + queryIndex\"\n >\n @for (boolean of advancedSearchOptions.boolean; track boolean) {\n <option [ngValue]=\"boolean\">\n {{ boolean }}\n </option>\n }\n </select>\n </div>\n }\n <!-- Field -->\n <label [for]=\"'field' + queryIndex\" class=\"hidden\">Field {{ queryIndex }}</label>\n <div class=\"select-wrapper\">\n <select\n [id]=\"'field' + queryIndex\"\n [formControlName]=\"'field'\"\n [attr.data-testid]=\"'field' + queryIndex\"\n >\n @for (field of advancedSearchOptions.fields; track field) {\n <option [ngValue]=\"field\">\n {{ advancedSearchFieldMap[field] }}\n </option>\n }\n <optgroup\n [label]=\"(config.scope === 'external' ? 'Online' : 'Library') + ' Specific'\"\n >\n @for (\n field of config.scope === 'external'\n ? advancedSearchOptions.externalFields\n : advancedSearchOptions.localFields;\n track field\n ) {\n <option [ngValue]=\"field\">\n {{ advancedSearchFieldMap[field] }}\n </option>\n }\n </optgroup>\n </select>\n </div>\n <!-- Qualifiers are only available for local searches -->\n @if (config.scope === 'local') {\n <label [for]=\"'qualifier' + queryIndex\" class=\"hidden\"\n >Match Criteria {{ queryIndex }}</label\n >\n <div class=\"select-wrapper\">\n <select\n [id]=\"'qualifier' + queryIndex\"\n [formControlName]=\"'qualifier'\"\n [attr.data-testid]=\"'qualifier' + queryIndex\"\n >\n <!-- $any because a field can technically be local or external, though this block is scoped strictly to local fields -->\n @for (\n qualifier of $any(advancedSearchOptions.qualifiers)[\n query.controls.field.value\n ];\n track qualifier;\n let optionIndex = $index\n ) {\n <option\n [ngValue]=\"qualifier\"\n [attr.data-testid]=\"\n 'qualifier' + queryIndex + '-option' + optionIndex\n \"\n >\n {{ $any(advancedSearchQualifierMap)[qualifier] }}\n </option>\n }\n </select>\n </div>\n }\n <!-- Query -->\n <label [for]=\"'query' + queryIndex\" class=\"hidden\">Query {{ queryIndex }}</label>\n <div class=\"query-input\">\n <input\n #searchInput\n [id]=\"'query' + queryIndex\"\n [formControlName]=\"'query'\"\n [attr.data-testid]=\"'query' + queryIndex\"\n required\n aria-required=\"true\"\n matTooltip=\"Fill out this field\"\n [matTooltipPosition]=\"'above'\"\n [matTooltipDisabled]=\"true\"\n [attr.aria-invalid]=\"isSubmitted && queries.at(0).controls.query.invalid\"\n aria-describedby=\"invalidInputDesc\"\n />\n </div>\n @if (!$first) {\n <button\n class=\"row-cancel\"\n type=\"button\"\n (click)=\"removeQuery(queryIndex)\"\n [attr.data-testid]=\"'cancelRow' + queryIndex\"\n >\n <span class=\"material-symbols-outlined icon\"> cancel </span>\n </button>\n }\n </div>\n }\n <button\n type=\"button\"\n (click)=\"addQuery()\"\n id=\"addQueryBtn\"\n data-testid=\"addQuery\"\n [disabled]=\"queries.length > 11\"\n >\n <span class=\"material-symbols-outlined icon\"> add </span>\n Add a row\n </button>\n <!-- OTHER OPTIONS -->\n <div class=\"other-options\">\n <!-- LOCAL -->\n @if (config.scope === 'local') {\n <!-- Type -->\n <div data-testid=\"resourceType\">\n <h4>Resource Type</h4>\n <div class=\"multi-select-wrapper\">\n <lib-hbll-multi-select\n [label]=\"'Resource Type'\"\n [allOptions]=\"config.localAdvancedSearch.availableResourceTypes\"\n [selectedKeys]=\"types.value\"\n (selectedKeysChange)=\"types.setValue($event)\"\n ></lib-hbll-multi-select>\n </div>\n </div>\n <!-- Collection -->\n <div data-testid=\"collection\">\n <h4>Collection</h4>\n <div class=\"multi-select-wrapper\">\n <lib-hbll-multi-select\n [label]=\"'Collection'\"\n [allOptions]=\"config.localAdvancedSearch.availableCollections\"\n [selectedKeys]=\"collections.value\"\n (selectedKeysChange)=\"collections.setValue($event)\"\n ></lib-hbll-multi-select>\n </div>\n </div>\n }\n <!-- EXTERNAL -->\n @if (config.scope === 'external') {\n <div formGroupName=\"limitResults\" class=\"checkbox-section\">\n <h4>For Fewer Results Try</h4>\n <!-- Peer reviewed -->\n <label class=\"checkbox-label\" for=\"peerReviewed\" tabindex=\"0\">\n <input\n class=\"hidden\"\n id=\"peerReviewed\"\n type=\"checkbox\"\n [formControlName]=\"'peerReviewed'\"\n data-testid=\"peerReviewed\"\n />\n <lib-hbll-checkbox [isChecked]=\"peerReviewed.value\"></lib-hbll-checkbox>\n <span class=\"label-text\">Peer reviewed journal articles</span>\n </label>\n </div>\n <div formGroupName=\"expandResults\" class=\"checkbox-section\">\n <h4>For More Results Try</h4>\n <!-- Apply related words -->\n <label class=\"checkbox-label\" for=\"applyRelatedWords\" tabindex=\"0\">\n <input\n class=\"hidden\"\n id=\"applyRelatedWords\"\n type=\"checkbox\"\n [formControlName]=\"'applyRelatedWords'\"\n data-testid=\"applyRelatedWords\"\n />\n <lib-hbll-checkbox [isChecked]=\"applyRelatedWords.value\"></lib-hbll-checkbox>\n <span class=\"label-text\">Apply related words</span>\n </label>\n <!-- Apply equivalent subjects -->\n <label class=\"checkbox-label\" for=\"applyEquivalentSubjects\" tabindex=\"0\">\n <input\n class=\"hidden\"\n id=\"applyEquivalentSubjects\"\n type=\"checkbox\"\n [formControlName]=\"'applyEquivalentSubjects'\"\n data-testid=\"applyEquivalentSubjects\"\n />\n <lib-hbll-checkbox\n [isChecked]=\"applyEquivalentSubjects.value\"\n ></lib-hbll-checkbox>\n <span class=\"label-text\">Apply equivalent subjects</span>\n </label>\n <!-- Full text -->\n <label class=\"checkbox-label\" for=\"fullText\" tabindex=\"0\">\n <input\n class=\"hidden\"\n id=\"fullText\"\n type=\"checkbox\"\n [formControlName]=\"'fullText'\"\n data-testid=\"fullText\"\n />\n <lib-hbll-checkbox [isChecked]=\"fullText.value\"></lib-hbll-checkbox>\n <span class=\"label-text\"\n >Include results the library doesn't have access to</span\n >\n </label>\n </div>\n <!-- Date -->\n <div id=\"dateOptions\">\n <h4>Date Published</h4>\n <lib-date-range\n [from]=\"from.value\"\n [to]=\"to.value\"\n (fromChange)=\"from.setValue($event)\"\n (toChange)=\"to.setValue($event)\"\n ></lib-date-range>\n </div>\n <!-- Language -->\n <div>\n <h4>Language</h4>\n <lib-hbll-multi-select\n [label]=\"'language'\"\n [allOptions]=\"config.externalAdvancedSearch.availableLanguages\"\n [selectedKeys]=\"languages.value\"\n (selectedKeysChange)=\"languages.setValue($any($event))\"\n ></lib-hbll-multi-select>\n </div>\n }\n </div>\n <div id=\"advSearchFooter\">\n <button libHbllPillBtn [color]=\"'blue'\" type=\"submit\" data-testid=\"advSearchSubmitButton\">\n Search\n </button>\n </div>\n</form>\n", styles: ["select,textarea,input{appearance:none;font-family:inherit;padding:.38em;border:solid 1px #707070;border-radius:4px;font-size:1em;background-color:#fff}select:focus,textarea:focus,input:focus{border-color:#3a6093}.select-wrapper{position:relative}.select-wrapper select{cursor:pointer;padding-right:2em}.select-wrapper:after{font-family:Material Symbols Outlined;content:\"arrow_drop_down\";pointer-events:none;top:0;font-size:1.5em;right:.2em;height:100%;position:absolute;display:flex;align-items:center;opacity:70%}a,button{border:none;background:none;font-family:inherit;padding:0;margin:0;font-size:inherit;color:#1c7ec9;text-decoration:none;cursor:pointer}a:hover,button:hover{color:#8ab6f0}:host{box-sizing:border-box}:host *{box-sizing:inherit}.select-wrapper{margin-right:.3em}.row-cancel{color:#aaa;margin-left:.4em;margin-top:.4em}.row-cancel:hover{color:#666}.row-cancel .icon{font-size:1em}.hidden{display:none}#addQueryBtn{display:flex;align-items:center}#addQueryBtn:disabled{color:#999;pointer-events:none}#addQueryBtn .icon{font-size:1em}.adv-search-wrapper{width:100%}h3{font-size:1.13em;font-weight:300;margin-bottom:.7em}h4{margin-bottom:.3em;font-weight:600}.adv-search-row{display:flex;flex-wrap:wrap;width:100%;margin-bottom:.6em}.query-input{display:inline-block;width:100%;margin-top:.4rem}.query-input input{width:100%}.other-options{display:grid;grid-template-columns:repeat(1,1fr);gap:.6em 1.6em;grid-auto-rows:minmax(1em,auto);margin-top:1.4em}.other-options label{margin-right:1rem}.checkbox-label{display:inline-flex;align-items:flex-start;cursor:pointer}.checkbox-label:not(:last-of-type){margin-bottom:.75em}.checkbox-label .label-text{margin-top:-.1em;margin-left:.45em}.checkbox-section{margin-bottom:.8em}#advSearchFooter{margin-bottom:.5em;display:flex;justify-content:flex-end;font-size:1.2em}@media screen and (min-width: 615px){.adv-search-row{flex-wrap:nowrap}.other-options{grid-template-columns:repeat(2,1fr)}.query-input{margin-top:0}#dateOptions{grid-column:span 2}}\n"] }]
258
259
  }], propDecorators: { config: [{
259
260
  type: Input,
260
261
  args: [{ required: true }]
@@ -267,4 +268,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
267
268
  type: ViewChild,
268
269
  args: [MatTooltip]
269
270
  }] } });
270
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtc2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zcy1zZWFyY2gtYmFyL2FkdmFuY2VkLXNlYXJjaC9hZHZhbmNlZC1zZWFyY2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL3NzLXNlYXJjaC1iYXIvYWR2YW5jZWQtc2VhcmNoL2FkdmFuY2VkLXNlYXJjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxNQUFNLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdILHNCQUFzQixFQUN0QixtQkFBbUIsRUFDbkIsVUFBVSxHQUNiLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFLSCx1QkFBdUIsRUFDdkIsNkJBQTZCLEdBSWhDLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN4RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHdCQUF3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QWlCO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO0lBQ3JGLENBQUM7SUFDRCxJQUFJLHVCQUF1QjtRQUN2QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQztJQUMzRixDQUFDOzhHQTdHUSx1QkFBdUI7a0dBQXZCLHVCQUF1QiwwU0FpQnJCLFVBQVUsZ0RDbkZ6Qix5MlVBME9BLHFoRURsTFEsWUFBWSw4QkFDWixtQkFBbUIsNDFEQUNuQixnQkFBZ0IsNFRBQ2hCLGFBQWEsK0JBQ2Isd0JBQXdCLG9KQUN4QixxQkFBcUIscUZBQ3JCLG9CQUFvQixtSUFDcEIsa0JBQWtCOzsyRkFHYix1QkFBdUI7a0JBaEJuQyxTQUFTOytCQUNJLHdCQUF3QixjQUN0QixJQUFJLFdBR1A7d0JBQ0wsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYix3QkFBd0I7d0JBQ3hCLHFCQUFxQjt3QkFDckIsb0JBQW9CO3dCQUNwQixrQkFBa0I7cUJBQ3JCOzhCQUs4QixNQUFNO3NCQUFwQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFPZixjQUFjO3NCQUF2QixNQUFNO2dCQUcyQixXQUFXO3NCQUE1QyxTQUFTO3VCQUFDLGFBQWE7Z0JBSU8sWUFBWTtzQkFBMUMsU0FBUzt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgRm9ybUNvbnRyb2wsXG4gICAgRm9ybUdyb3VwLFxuICAgIE5vbk51bGxhYmxlRm9ybUJ1aWxkZXIsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRUb29sdGlwLCBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBmaWx0ZXIsIHN0YXJ0V2l0aCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgICBBZHZhbmNlZFNlYXJjaEJvb2xlYW5PcHRpb24sXG4gICAgQWR2YW5jZWRTZWFyY2hMb2NhbEZpZWxkT3B0aW9uLFxuICAgIEFkdmFuY2VkU2VhcmNoTGFuZ3VhZ2VPcHRpb24sXG4gICAgQWR2YW5jZWRTZWFyY2hRdWFsaWZpZXJPcHRpb24sXG4gICAgQURWQU5DRURfU0VBUkNIX09QVElPTlMsXG4gICAgQURWQU5DRURfU0VBUkNIX1FVRVJJRVNfTElNSVQsXG4gICAgQWR2YW5jZWRTZWFyY2hRdWFsaWZpZXIsXG4gICAgQWR2YW5jZWRTZWFyY2hFeHRlcm5hbEZpZWxkT3B0aW9uLFxuICAgIEFkdmFuY2VkU2VhcmNoUXVlcnlSb3csXG59IGZyb20gJy4uL3NzLXNlYXJjaC1iYXIuY29tcG9uZW50JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU2VhcmNoQ29uZmlnIH0gZnJvbSAnLi4vc3Mtc2VhcmNoLWJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgdmFsaWRhdGVEYXRlUmFuZ2VGaWVsZHMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQURWQU5DRURfU0VBUkNIX0ZJRUxEX01BUCwgQURWQU5DRURfU0VBUkNIX1FVQUxJRklFUl9NQVAgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgSGJsbE11bHRpU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaGJsbC1tdWx0aS1zZWxlY3QvaGJsbC1tdWx0aS1zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IEhibGxDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2hibGwtY2hlY2tib3gvaGJsbC1jaGVja2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSGJsbFBpbGxCdG5EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2hibGwtcGlsbC1idG4vaGJsbC1waWxsLWJ0bi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGF0ZVJhbmdlQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0ZS1yYW5nZS9kYXRlLXJhbmdlLmNvbXBvbmVudCc7XG5cbnR5cGUgUXVlcnlSb3cgPSB7XG4gICAgYm9vbGVhbjogRm9ybUNvbnRyb2w8QWR2YW5jZWRTZWFyY2hCb29sZWFuT3B0aW9uPjtcbiAgICBmaWVsZDogRm9ybUNvbnRyb2w8QWR2YW5jZWRTZWFyY2hMb2NhbEZpZWxkT3B0aW9uIHwgQWR2YW5jZWRTZWFyY2hFeHRlcm5hbEZpZWxkT3B0aW9uPjtcbiAgICBxdWFsaWZpZXI6IEZvcm1Db250cm9sPEFkdmFuY2VkU2VhcmNoUXVhbGlmaWVyT3B0aW9uPjtcbiAgICBxdWVyeTogRm9ybUNvbnRyb2w8c3RyaW5nPjtcbn07XG5cbmNvbnN0IERBVEVfVkFMSURBVE9SX1JFR0VYID0gJ15bMC05XXs0fSQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1zcy1hZHZhbmNlZC1zZWFyY2gnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLXNlYXJjaC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYWR2YW5jZWQtc2VhcmNoLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIEhibGxNdWx0aVNlbGVjdENvbXBvbmVudCxcbiAgICAgICAgSGJsbENoZWNrYm94Q29tcG9uZW50LFxuICAgICAgICBIYmxsUGlsbEJ0bkRpcmVjdGl2ZSxcbiAgICAgICAgRGF0ZVJhbmdlQ29tcG9uZW50LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkU2VhcmNoQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZiID0gaW5qZWN0KE5vbk51bGxhYmxlRm9ybUJ1aWxkZXIpO1xuICAgIHByaXZhdGUgX2NvbmZpZyE6IFNlYXJjaENvbmZpZztcbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBzZXQgY29uZmlnKGNvbmZpZzogU2VhcmNoQ29uZmlnKSB7XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy5zZXR1cEZvcm0oKTtcbiAgICB9XG4gICAgZ2V0IGNvbmZpZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgICB9XG4gICAgQE91dHB1dCgpIGFkdmFuY2VkU2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjxTZWFyY2hDb25maWc+KCk7XG5cbiAgICAvLyBUaG91Z2ggbXVsdGlwbGUgaW5zdGFuY2VzIGV4aXN0cywgdGhpcyByZXByZXNlbnQgcXVlcnkgMS5cbiAgICBAVmlld0NoaWxkKCdzZWFyY2hJbnB1dCcpIHByaXZhdGUgc2VhcmNoSW5wdXQhOiBFbGVtZW50UmVmO1xuICAgIC8vIFRoZSB0b29sdGlwIGlzIGRpc2FibGVkIGluIHRoZSB0ZW1wbGF0ZS5cbiAgICAvLyBJdCBpcyBlbmFibGVkIGFuZCBkaXNwbGF5ZWQgaWYgYSB1c2VyIHNlYXJjaGVzIGFnYWluc3QgYW4gZW1wdHkgcXVlcnkgKHNpbXBsZSBvciBxMSkuXG4gICAgLy8gQW55IGNoYW5nZSB0byB0aGUgc2VhcmNoIGZpZWxkIGRpc2FibGVzIHRoZSB0b29sdGlwLlxuICAgIEBWaWV3Q2hpbGQoTWF0VG9vbHRpcCkgcHJpdmF0ZSBpbnB1dFRvb2x0aXAhOiBNYXRUb29sdGlwO1xuXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUYWtlcyBhIGBGb3JtR3JvdXBgIGFuZCBzeW5jcyB1cCB0aGUgYGZpZWxkYCBhbmQgYHF1YWxpZmllcmAgdmFsdWVzLlxuICAgICAqIEFmdGVyIHN5bmNpbmcsIHdoZW4gdGhlIGBmaWVsZGAgdmFsdWUgY2hhbmdlcywgdGhlIGBxdWFsaWZpZXJgIHZhbHVlIHdpbGwgdXBkYXRlIGFwcHJvcHJpYXRlbHkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzeW5jVXBGaWVsZEFuZFF1YWxpZmllciA9IChcbiAgICAgICAgZmc6IEZvcm1Hcm91cDx7XG4gICAgICAgICAgICBib29sZWFuOiBGb3JtQ29udHJvbDtcbiAgICAgICAgICAgIGZpZWxkOiBGb3JtQ29udHJvbDtcbiAgICAgICAgICAgIHF1YWxpZmllcjogRm9ybUNvbnRyb2w7XG4gICAgICAgICAgICBxdWVyeTogRm9ybUNvbnRyb2w7XG4gICAgICAgIH0+LFxuICAgICAgICBzY29wZTogU2VhcmNoQ29uZmlnWydzY29wZSddLFxuICAgICkgPT4ge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICBmZy5jb250cm9scy5maWVsZC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHNjb3BlID09PSAnbG9jYWwnKSxcbiAgICAgICAgICAgICAgICAgICAgdGFwKCh2YWw6IEFkdmFuY2VkU2VhcmNoUXVhbGlmaWVyKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZmcuY29udHJvbHMucXVhbGlmaWVyLnNldFZhbHVlKEFEVkFOQ0VEX1NFQVJDSF9PUFRJT05TLnF1YWxpZmllcnNbdmFsXVswXSksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKSxcbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIGFkdmFuY2VkU2VhcmNoRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBxdWVyaWVzOiB0aGlzLmZiLmFycmF5PEZvcm1Hcm91cDxRdWVyeVJvdz4+KFxuICAgICAgICAgICAgW10sXG4gICAgICAgICAgICBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoQURWQU5DRURfU0VBUkNIX1FVRVJJRVNfTElNSVQpXSxcbiAgICAgICAgKSxcbiAgICAgICAgdHlwZXM6IFtbXSBhcyBzdHJpbmdbXV0sXG4gICAgICAgIGNvbGxlY3Rpb25zOiBbW10gYXMgc3RyaW5nW11dLFxuICAgICAgICBsYW5ndWFnZXM6IFtbXSBhcyBBZHZhbmNlZFNlYXJjaExhbmd1YWdlT3B0aW9uW11dLFxuICAgICAgICBkYXRlUHVibGlzaGVkOiB0aGlzLmZiLmdyb3VwKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZyb206IFsnJywgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDQpLCBWYWxpZGF0b3JzLnBhdHRlcm4oREFURV9WQUxJREFUT1JfUkVHRVgpXV0sXG4gICAgICAgICAgICAgICAgdG86IFsnJywgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDQpLCBWYWxpZGF0b3JzLnBhdHRlcm4oREFURV9WQUxJREFUT1JfUkVHRVgpXV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyB2YWxpZGF0b3JzOiB2YWxpZGF0ZURhdGVSYW5nZUZpZWxkcygpIH0sXG4gICAgICAgICksXG4gICAgICAgIGxpbWl0UmVzdWx0czogdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBwZWVyUmV2aWV3ZWQ6IFtmYWxzZV0sXG4gICAgICAgIH0pLFxuICAgICAgICBleHBhbmRSZXN1bHRzOiB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgIGFwcGx5UmVsYXRlZFdvcmRzOiBbZmFsc2VdLFxuICAgICAgICAgICAgYXBwbHlFcXVpdmFsZW50U3ViamVjdHM6IFtmYWxzZV0sXG4gICAgICAgICAgICBmdWxsVGV4dDogW2ZhbHNlXSxcbiAgICAgICAgfSksXG4gICAgfSk7XG5cbiAgICBwcm90ZWN0ZWQgaXNTdWJtaXR0ZWQgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgYWR2YW5jZWRTZWFyY2hPcHRpb25zID0gQURWQU5DRURfU0VBUkNIX09QVElPTlM7XG4gICAgcHJvdGVjdGVkIGFkdmFuY2VkU2VhcmNoRmllbGRNYXAgPSBBRFZBTkNFRF9TRUFSQ0hfRklFTERfTUFQO1xuICAgIHByb3RlY3RlZCBhZHZhbmNlZFNlYXJjaFF1YWxpZmllck1hcCA9IEFEVkFOQ0VEX1NFQVJDSF9RVUFMSUZJRVJfTUFQO1xuXG4gICAgZ2V0IHF1ZXJpZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkdmFuY2VkU2VhcmNoRm9ybS5jb250cm9scy5xdWVyaWVzO1xuICAgIH1cbiAgICBnZXQgdHlwZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkdmFuY2VkU2VhcmNoRm9ybS5jb250cm9scy50eXBlcztcbiAgICB9XG4gICAgZ2V0IGNvbGxlY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFNlYXJjaEZvcm0uY29udHJvbHMuY29sbGVjdGlvbnM7XG4gICAgfVxuICAgIGdldCBsYW5ndWFnZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkdmFuY2VkU2VhcmNoRm9ybS5jb250cm9scy5sYW5ndWFnZXM7XG4gICAgfVxuICAgIGdldCBmcm9tKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFNlYXJjaEZvcm0uY29udHJvbHMuZGF0ZVB1Ymxpc2hlZC5jb250cm9scy5mcm9tO1xuICAgIH1cbiAgICBnZXQgdG8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkdmFuY2VkU2VhcmNoRm9ybS5jb250cm9scy5kYXRlUHVibGlzaGVkLmNvbnRyb2xzLnRvO1xuICAgIH1cbiAgICBnZXQgcGVlclJldmlld2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFNlYXJjaEZvcm0uY29udHJvbHMubGltaXRSZXN1bHRzLmNvbnRyb2xzLnBlZXJSZXZpZXdlZDtcbiAgICB9XG4gICAgZ2V0IGZ1bGxUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFNlYXJjaEZvcm0uY29udHJvbHMuZXhwYW5kUmVzdWx0cy5jb250cm9scy5mdWxsVGV4dDtcbiAgICB9XG4gICAgZ2V0IGFwcGx5UmVsYXRlZFdvcmRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFNlYXJjaEZvcm0uY29udHJvbHMuZXhwYW5kUmVzdWx0cy5jb250cm9scy5hcHBseVJlbGF0ZWRXb3JkcztcbiAgICB9XG4gICAgZ2V0IGFwcGx5RXF1aXZhbGVudFN1YmplY3RzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFNlYXJjaEZvcm0uY29udHJvbHMuZXhwYW5kUmVzdWx0cy5jb250cm9scy5hcHBseUVxdWl2YWxlbnRTdWJqZWN0cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYSBxdWVyeSB0byBgcXVlcmllc2AgYEZvcm1BcnJheWAuIFRoaXMgRm9ybUdyb3VwIGhhcyBhbiBhZGRpdGlvbmFsIGBib29sZWFuYCBjb250cm9sLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhZGRRdWVyeSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5xdWVyaWVzLnB1c2goXG4gICAgICAgICAgICB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgICAgICBib29sZWFuOiBbQURWQU5DRURfU0VBUkNIX09QVElPTlMuYm9vbGVhblswXSBhcyBBZHZhbmNlZFNlYXJjaEJvb2xlYW5PcHRpb25dLFxuICAgICAgICAgICAgICAgIGZpZWxkOiBbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLnNjb3BlID09PSAnZXh0ZXJuYWwnXG4gICAgICAgICAgICAgICAgICAgICAgICA/IEFEVkFOQ0VEX1NFQVJDSF9PUFRJT05TLmV4dGVybmFsRmllbGRzWzBdXG4gICAgICAgICAgICAgICAgICAgICAgICA6IChBRFZBTkNFRF9TRUFSQ0hfT1BUSU9OUy5sb2NhbEZpZWxkc1swXSBhc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBZHZhbmNlZFNlYXJjaExvY2FsRmllbGRPcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQWR2YW5jZWRTZWFyY2hFeHRlcm5hbEZpZWxkT3B0aW9uKSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHF1YWxpZmllcjogW1xuICAgICAgICAgICAgICAgICAgICBBRFZBTkNFRF9TRUFSQ0hfT1BUSU9OUy5xdWFsaWZpZXJzW1xuICAgICAgICAgICAgICAgICAgICAgICAgQURWQU5DRURfU0VBUkNIX09QVElPTlMubG9jYWxGaWVsZHNbMF1cbiAgICAgICAgICAgICAgICAgICAgXVswXSBhcyBBZHZhbmNlZFNlYXJjaFF1YWxpZmllck9wdGlvbixcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHF1ZXJ5OiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3luY1VwRmllbGRBbmRRdWFsaWZpZXIodGhpcy5xdWVyaWVzLmF0KC0xKSwgdGhpcy5jb25maWcuc2NvcGUpO1xuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgcmVtb3ZlUXVlcnkgPSAoaTogbnVtYmVyKSA9PiB7XG4gICAgICAgIHRoaXMucXVlcmllcy5yZW1vdmVBdChpKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJlcGFyZXMgYXBwcm9wcmlhdGUgcXVlcnkgcGFyYW1zIGJlZm9yZSBwZXJmb3JtaW5nIGEgbG9jYWwgYWR2YW5jZWQgc2VhcmNoLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBkb0xvY2FsQWR2YW5jZWRTZWFyY2ggPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZG9BZHZhbmNlZFNlYXJjaCh7XG4gICAgICAgICAgICBsb2NhbEFkdmFuY2VkU2VhcmNoOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5jb25maWcubG9jYWxBZHZhbmNlZFNlYXJjaCxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFJlc291cmNlVHlwZXM6IHRoaXMudHlwZXMudmFsdWUsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xsZWN0aW9uczogdGhpcy5jb2xsZWN0aW9ucy52YWx1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBQcmVwYXJlcyBhcHByb3ByaWF0ZSBxdWVyeSBwYXJhbXMgYmVmb3JlIHBlcmZvcm1pbmcgYW4gZXh0ZXJuYWwgYWR2YW5jZWQgc2VhcmNoLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBkb0V4dGVybmFsQWR2YW5jZWRTZWFyY2ggPSAoKSA9PiB7XG4gICAgICAgIC8vIENvbXBhcmVzICdmcm9tJyBhbmQgJ3RvJyB0byBlbnN1cmUgJ3RvJyBpcyBncmVhdGVyIHRoYW4gLyBlcXVhbCB0byAnZnJvbScsIHN3YXBzIHRoZW0gaWYgbm90XG4gICAgICAgIGNvbnN0IGZyb20gPSB0aGlzLmZyb20udmFsdWVcbiAgICAgICAgICAgID8gcGFyc2VJbnQodGhpcy5mcm9tLnZhbHVlKSA8PSBwYXJzZUludCh0aGlzLnRvLnZhbHVlKVxuICAgICAgICAgICAgICAgID8gdGhpcy5mcm9tLnZhbHVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnRvLnZhbHVlXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICAvLyBDb21wYXJlcyAnZnJvbScgYW5kICd0bycgdG8gZW5zdXJlICd0bycgaXMgZ3JlYXRlciB0aGFuIC8gZXF1YWwgdG8gJ2Zyb20nLCBzd2FwcyB0aGVtIGlmIG5vdFxuICAgICAgICBjb25zdCB0byA9IHRoaXMudG8udmFsdWVcbiAgICAgICAgICAgID8gcGFyc2VJbnQodGhpcy50by52YWx1ZSkgPj0gcGFyc2VJbnQodGhpcy5mcm9tLnZhbHVlKVxuICAgICAgICAgICAgICAgID8gdGhpcy50by52YWx1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5mcm9tLnZhbHVlXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICB0aGlzLmRvQWR2YW5jZWRTZWFyY2goe1xuICAgICAgICAgICAgZXh0ZXJuYWxBZHZhbmNlZFNlYXJjaDoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuY29uZmlnLmV4dGVybmFsQWR2YW5jZWRTZWFyY2gsXG4gICAgICAgICAgICAgICAgZGF0ZVB1Ymxpc2hlZDogeyBmcm9tLCB0byB9LFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkTGFuZ3VhZ2VzOiB0aGlzLmxhbmd1YWdlcy52YWx1ZSxcbiAgICAgICAgICAgICAgICBsaW1pdFJlc3VsdHM6IHtcbiAgICAgICAgICAgICAgICAgICAgcGVlclJldmlld2VkOiB0aGlzLnBlZXJSZXZpZXdlZC52YWx1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGV4cGFuZFJlc3VsdHM6IHtcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlSZWxhdGVkV29yZHM6IHRoaXMuYXBwbHlSZWxhdGVkV29yZHMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGFwcGx5RXF1aXZhbGVudFN1YmplY3RzOiB0aGlzLmFwcGx5RXF1aXZhbGVudFN1YmplY3RzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBmdWxsVGV4dDogdGhpcy5mdWxsVGV4dC52YWx1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFZlcmlmaWVzIHRoYXQgdGhlcmUgaXMgYSBxdWVyeSB0byB1c2UsIGdhdGhlcnMgYWxsIG90aGVyIHF1ZXJ5IHBhcmFtZXRlcnMgbmVlZGVkLCB0aGVuIHBlcmZvcm1zIGFuIGFkdmFuY2VkIHNlYXJjaCB2aWEgYHJvdXRlci5uYXZpZ2F0ZSgpYC5cbiAgICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IHF1ZXJ5UGFyYW1zIGJhc2Ugc2V0IG9mIHF1ZXJ5IHBhcmFtcyB0byBuYXZpZ2F0ZSB3aXRoXG4gICAgICovXG4gICAgcHJpdmF0ZSBkb0FkdmFuY2VkU2VhcmNoID0gKHVwZGF0ZWRQcm9wczogUGFydGlhbDxTZWFyY2hDb25maWc+KTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuaXNTdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgICAvLyBEb24ndCBwZXJmb3JtIGEgc2VhcmNoIHVubGVzcyB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgcXVlcnlcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5xdWVyaWVzLmF0KDApLmNvbnRyb2xzLnF1ZXJ5LmludmFsaWQgJiZcbiAgICAgICAgICAgICF0aGlzLnF1ZXJpZXMudmFsdWUuc29tZSgodikgPT4gISF2LnF1ZXJ5KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1NlYXJjaFZhbGlkYXRpb25Ub29sVGlwKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gRG9uJ3QgcGVyZm9ybSBhIHNlYXJjaCB1bmxlc3MgdGhlIGRhdGUgZm9ybSBpcyB2YWxpZFxuICAgICAgICBpZiAodGhpcy5hZHZhbmNlZFNlYXJjaEZvcm0uY29udHJvbHMuZGF0ZVB1Ymxpc2hlZC5pbnZhbGlkKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5hZHZhbmNlZFNlYXJjaC5lbWl0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuY29uZmlnLFxuICAgICAgICAgICAgLi4udXBkYXRlZFByb3BzLFxuICAgICAgICAgICAgYWR2YW5jZWRTZWFyY2hRdWVyeVJvd3M6IHRoaXMucXVlcmllcy52YWx1ZSBhcyBBZHZhbmNlZFNlYXJjaFF1ZXJ5Um93W10sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmlzU3VibWl0dGVkID0gZmFsc2U7XG4gICAgfTtcblxuICAgIHByaXZhdGUgc2hvd1NlYXJjaFZhbGlkYXRpb25Ub29sVGlwID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5pbnB1dFRvb2x0aXAuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbnB1dFRvb2x0aXAuc2hvdygpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHNldHVwRm9ybSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5xdWVyaWVzLmNsZWFyKCk7XG4gICAgICAgIC8vIEFsd2F5cyBrZWVwIGF0IGxlYXN0IHR3byBxdWVyaWVzIGF2YWlsYWJsZVxuICAgICAgICB0aGlzLmFkZFF1ZXJ5KCk7XG4gICAgICAgIHRoaXMuYWRkUXVlcnkoKTtcblxuICAgICAgICAvLyBFbnN1cmUgdmFsaWRhdGlvbiB0b29sdGlwIGNsb3NlcyB3aGVuIHVzZXMgZW50ZXJzIGEgcXVlcnlcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgdGhpcy5xdWVyaWVzXG4gICAgICAgICAgICAgICAgLmF0KDApXG4gICAgICAgICAgICAgICAgLmNvbnRyb2xzLnF1ZXJ5LnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCgnJykpXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKCgpID0+ICEhdGhpcy5pbnB1dFRvb2x0aXApKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gKHRoaXMuaW5wdXRUb29sdGlwLmRpc2FibGVkID0gdHJ1ZSkpLFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIElmIG5vIGBxe05VTX1gIHVzZSBgcWAgZm9yIGZpcnN0IHF1ZXJ5XG4gICAgICAgIGlmICghdGhpcy5jb25maWcuYWR2YW5jZWRTZWFyY2hRdWVyeVJvd3MubGVuZ3RoKVxuICAgICAgICAgICAgdGhpcy5xdWVyaWVzLmF0KDApLmNvbnRyb2xzLnF1ZXJ5LnNldFZhbHVlKHRoaXMuY29uZmlnLnEpO1xuXG4gICAgICAgIHRoaXMuY29uZmlnLmFkdmFuY2VkU2VhcmNoUXVlcnlSb3dzLmZvckVhY2goKHF1ZXJ5Um93LCBpKSA9PiB7XG4gICAgICAgICAgICAvLyBBZGQgYSBxdWVyeSBmb3JtIGNvbnRyb2wgZm9yIGV2ZXJ5IHF7bnVtfSBrZXkgYWZ0ZXIgdGhlIGZpcnN0LlxuICAgICAgICAgICAgbGV0IHF1ZXJ5Q29udHJvbCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoaSA9PT0gMCB8fCBpID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcXVlcnlDb250cm9sID0gdGhpcy5xdWVyaWVzLmF0KGkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFF1ZXJ5KCk7XG4gICAgICAgICAgICAgICAgcXVlcnlDb250cm9sID0gdGhpcy5xdWVyaWVzLmF0KC0xKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWRkIHRoZSBxdWVyeSB2YWx1ZS5cbiAgICAgICAgICAgIHF1ZXJ5Q29udHJvbC5jb250cm9scy5xdWVyeS5zZXRWYWx1ZShxdWVyeVJvdy5xdWVyeSk7XG5cbiAgICAgICAgICAgIC8vIEFkZCB0aGUgZmllbGQgdmFsdWUsIGlmIGF2YWlsYWJsZS5cbiAgICAgICAgICAgIGlmIChxdWVyeVJvdy5maWVsZCkgcXVlcnlDb250cm9sLmNvbnRyb2xzLmZpZWxkLnNldFZhbHVlKHF1ZXJ5Um93LmZpZWxkKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBxdWVyeUNvbnRyb2wuY29udHJvbHMuZmllbGQuc2V0VmFsdWUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLnNjb3BlID09PSAnZXh0ZXJuYWwnXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuYWR2YW5jZWRTZWFyY2hPcHRpb25zLmV4dGVybmFsRmllbGRzWzBdXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuYWR2YW5jZWRTZWFyY2hPcHRpb25zLmxvY2FsRmllbGRzWzBdLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIEFkZCB0aGUgcXVhbGlmaWVyIHZhbHVlLCBpZiBhdmFpbGFibGUgYW5kIGEgbG9jYWwgc2VhcmNoLlxuICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnNjb3BlID09PSAnbG9jYWwnICYmIHF1ZXJ5Um93LnF1YWxpZmllcilcbiAgICAgICAgICAgICAgICBxdWVyeUNvbnRyb2wuY29udHJvbHMucXVhbGlmaWVyLnNldFZhbHVlKHF1ZXJ5Um93LnF1YWxpZmllcik7XG5cbiAgICAgICAgICAgIC8vIEFkZCB0aGUgYm9vbGVhbiwgaWYgYXZhaWxhYmxlIGFuZCBub3QgdGhlIGZpcnN0IHF1ZXJ5LlxuICAgICAgICAgICAgaWYgKGkgIT09IDAgJiYgcXVlcnlSb3cuYm9vbGVhbilcbiAgICAgICAgICAgICAgICBxdWVyeUNvbnRyb2wuY29udHJvbHMuYm9vbGVhbi5zZXRWYWx1ZShxdWVyeVJvdy5ib29sZWFuKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5zY29wZSA9PT0gJ2xvY2FsJykge1xuICAgICAgICAgICAgdGhpcy50eXBlcy5zZXRWYWx1ZSh0aGlzLmNvbmZpZy5sb2NhbEFkdmFuY2VkU2VhcmNoLnNlbGVjdGVkUmVzb3VyY2VUeXBlcyk7XG4gICAgICAgICAgICB0aGlzLmNvbGxlY3Rpb25zLnNldFZhbHVlKHRoaXMuY29uZmlnLmxvY2FsQWR2YW5jZWRTZWFyY2guc2VsZWN0ZWRDb2xsZWN0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxhbmd1YWdlcy5zZXRWYWx1ZShcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5leHRlcm5hbEFkdmFuY2VkU2VhcmNoXG4gICAgICAgICAgICAgICAgICAgIC5zZWxlY3RlZExhbmd1YWdlcyBhcyBBZHZhbmNlZFNlYXJjaExhbmd1YWdlT3B0aW9uW10sXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5wZWVyUmV2aWV3ZWQuc2V0VmFsdWUoXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuZXh0ZXJuYWxBZHZhbmNlZFNlYXJjaC5saW1pdFJlc3VsdHMucGVlclJldmlld2VkLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlSZWxhdGVkV29yZHMuc2V0VmFsdWUoXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuZXh0ZXJuYWxBZHZhbmNlZFNlYXJjaC5leHBhbmRSZXN1bHRzLmFwcGx5UmVsYXRlZFdvcmRzLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlFcXVpdmFsZW50U3ViamVjdHMuc2V0VmFsdWUoXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuZXh0ZXJuYWxBZHZhbmNlZFNlYXJjaC5leHBhbmRSZXN1bHRzLmFwcGx5RXF1aXZhbGVudFN1YmplY3RzLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZnVsbFRleHQuc2V0VmFsdWUodGhpcy5jb25maWcuZXh0ZXJuYWxBZHZhbmNlZFNlYXJjaC5leHBhbmRSZXN1bHRzLmZ1bGxUZXh0KTtcbiAgICAgICAgICAgIHRoaXMuZnJvbS5zZXRWYWx1ZSh0aGlzLmNvbmZpZy5leHRlcm5hbEFkdmFuY2VkU2VhcmNoLmRhdGVQdWJsaXNoZWQuZnJvbSk7XG4gICAgICAgICAgICB0aGlzLnRvLnNldFZhbHVlKHRoaXMuY29uZmlnLmV4dGVybmFsQWR2YW5jZWRTZWFyY2guZGF0ZVB1Ymxpc2hlZC50byk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIiwiPGZvcm1cbiAgICBkYXRhLXRlc3RpZD1cImFkdmFuY2VkU2VhcmNoRm9ybVwiXG4gICAgKHN1Ym1pdCk9XCJjb25maWcuc2NvcGUgPT09ICdsb2NhbCcgPyBkb0xvY2FsQWR2YW5jZWRTZWFyY2goKSA6IGRvRXh0ZXJuYWxBZHZhbmNlZFNlYXJjaCgpXCJcbiAgICBbZm9ybUdyb3VwXT1cImFkdmFuY2VkU2VhcmNoRm9ybVwiXG4gICAgY2xhc3M9XCJhZHYtc2VhcmNoLXdyYXBwZXJcIlxuPlxuICAgIDxoMz5BZHZhbmNlZCBTZWFyY2g8L2gzPlxuICAgIDwhLS0gUXVlcmllcyAtLT5cbiAgICBAZm9yIChxdWVyeSBvZiBxdWVyaWVzLmNvbnRyb2xzOyB0cmFjayAkaW5kZXg7IGxldCBxdWVyeUluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZHYtc2VhcmNoLXJvd1wiIFtmb3JtR3JvdXBdPVwicXVlcnlcIj5cbiAgICAgICAgICAgIDwhLS0gQm9vbGVhbiBvcGVyYXRvciAtLT5cbiAgICAgICAgICAgIDwhLS0gQWRkIGJvb2xlYW4gZm9yIGVhY2ggcm93IGV4Y2VwdCBmb3IgZmlyc3QgLS0+XG4gICAgICAgICAgICBAaWYgKCEkZmlyc3QpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidib29sZWFuJyArIHF1ZXJ5SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCInYm9vbGVhbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2Jvb2xlYW4nICsgcXVlcnlJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGJvb2xlYW4gb2YgYWR2YW5jZWRTZWFyY2hPcHRpb25zLmJvb2xlYW47IHRyYWNrIGJvb2xlYW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cImJvb2xlYW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYm9vbGVhbiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwhLS0gRmllbGQgLS0+XG4gICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCInZmllbGQnICsgcXVlcnlJbmRleFwiIGNsYXNzPVwiaGlkZGVuXCI+RmllbGQge3sgcXVlcnlJbmRleCB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCInZmllbGQnICsgcXVlcnlJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiJ2ZpZWxkJ1wiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIidmaWVsZCcgKyBxdWVyeUluZGV4XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgb2YgY29uZmlnLnNjb3BlID09PSAnZXh0ZXJuYWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhZHZhbmNlZFNlYXJjaE9wdGlvbnMuZXh0ZXJuYWxGaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFkdmFuY2VkU2VhcmNoT3B0aW9ucy5sb2NhbEZpZWxkcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrIGZpZWxkXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJmaWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFkdmFuY2VkU2VhcmNoRmllbGRNYXBbZmllbGRdIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIFF1YWxpZmllcnMgYXJlIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCBzZWFyY2hlcyAtLT5cbiAgICAgICAgICAgIEBpZiAoY29uZmlnLnNjb3BlID09PSAnbG9jYWwnKSB7XG4gICAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiJ3F1YWxpZmllcicgKyBxdWVyeUluZGV4XCIgY2xhc3M9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICA+TWF0Y2ggQ3JpdGVyaWEge3sgcXVlcnlJbmRleCB9fTwvbGFiZWxcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCIncXVhbGlmaWVyJyArIHF1ZXJ5SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCIncXVhbGlmaWVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCIncXVhbGlmaWVyJyArIHF1ZXJ5SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tICRhbnkgYmVjYXVzZSBhIGZpZWxkIGNhbiB0ZWNobmljYWxseSBiZSBsb2NhbCBvciBleHRlcm5hbCwgdGhvdWdoIHRoaXMgYmxvY2sgaXMgc2NvcGVkIHN0cmljdGx5IHRvIGxvY2FsIGZpZWxkcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWxpZmllciBvZiAkYW55KGFkdmFuY2VkU2VhcmNoT3B0aW9ucy5xdWFsaWZpZXJzKVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkuY29udHJvbHMuZmllbGQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrIHF1YWxpZmllcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uSW5kZXggPSAkaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVmFsdWVdPVwicXVhbGlmaWVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncXVhbGlmaWVyJyArIHF1ZXJ5SW5kZXggKyAnLW9wdGlvbicgKyBvcHRpb25JbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJGFueShhZHZhbmNlZFNlYXJjaFF1YWxpZmllck1hcClbcXVhbGlmaWVyXSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwhLS0gUXVlcnkgLS0+XG4gICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCIncXVlcnknICsgcXVlcnlJbmRleFwiIGNsYXNzPVwiaGlkZGVuXCI+UXVlcnkge3sgcXVlcnlJbmRleCB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicXVlcnktaW5wdXRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgI3NlYXJjaElucHV0XG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCIncXVlcnknICsgcXVlcnlJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiJ3F1ZXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIidxdWVyeScgKyBxdWVyeUluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1yZXF1aXJlZD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRmlsbCBvdXQgdGhpcyBmaWVsZFwiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25dPVwiJ2Fib3ZlJ1wiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJpc1N1Ym1pdHRlZCAmJiBxdWVyaWVzLmF0KDApLmNvbnRyb2xzLnF1ZXJ5LmludmFsaWRcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwiaW52YWxpZElucHV0RGVzY1wiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmICghJGZpcnN0KSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1jYW5jZWxcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVF1ZXJ5KHF1ZXJ5SW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2NhbmNlbFJvdycgKyBxdWVyeUluZGV4XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uXCI+IGNhbmNlbCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbiAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiYWRkUXVlcnkoKVwiXG4gICAgICAgIGlkPVwiYWRkUXVlcnlCdG5cIlxuICAgICAgICBkYXRhLXRlc3RpZD1cImFkZFF1ZXJ5XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInF1ZXJpZXMubGVuZ3RoID4gMTFcIlxuICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb25cIj4gYWRkIDwvc3Bhbj5cbiAgICAgICAgQWRkIGEgcm93XG4gICAgPC9idXR0b24+XG4gICAgPCEtLSBPVEhFUiBPUFRJT05TIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJvdGhlci1vcHRpb25zXCI+XG4gICAgICAgIDwhLS0gTE9DQUwgLS0+XG4gICAgICAgIEBpZiAoY29uZmlnLnNjb3BlID09PSAnbG9jYWwnKSB7XG4gICAgICAgICAgICA8IS0tIFR5cGUgLS0+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtdGVzdGlkPVwicmVzb3VyY2VUeXBlXCI+XG4gICAgICAgICAgICAgICAgPGg0PlJlc291cmNlIFR5cGU8L2g0PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdWx0aS1zZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bGliLWhibGwtbXVsdGktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ1Jlc291cmNlIFR5cGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthbGxPcHRpb25zXT1cImNvbmZpZy5sb2NhbEFkdmFuY2VkU2VhcmNoLmF2YWlsYWJsZVJlc291cmNlVHlwZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkS2V5c109XCJ0eXBlcy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRLZXlzQ2hhbmdlKT1cInR5cGVzLnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9saWItaGJsbC1tdWx0aS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gQ29sbGVjdGlvbiAtLT5cbiAgICAgICAgICAgIDxkaXYgZGF0YS10ZXN0aWQ9XCJjb2xsZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGg0PkNvbGxlY3Rpb248L2g0PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdWx0aS1zZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bGliLWhibGwtbXVsdGktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0NvbGxlY3Rpb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthbGxPcHRpb25zXT1cImNvbmZpZy5sb2NhbEFkdmFuY2VkU2VhcmNoLmF2YWlsYWJsZUNvbGxlY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZEtleXNdPVwiY29sbGVjdGlvbnMudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkS2V5c0NoYW5nZSk9XCJjb2xsZWN0aW9ucy5zZXRWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbGliLWhibGwtbXVsdGktc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLSBFWFRFUk5BTCAtLT5cbiAgICAgICAgQGlmIChjb25maWcuc2NvcGUgPT09ICdleHRlcm5hbCcpIHtcbiAgICAgICAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT1cImxpbWl0UmVzdWx0c1wiIGNsYXNzPVwiY2hlY2tib3gtc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxoND5Gb3IgRmV3ZXIgUmVzdWx0cyBUcnk8L2g0PlxuICAgICAgICAgICAgICAgIDwhLS0gUGVlciByZXZpZXdlZCAtLT5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveC1sYWJlbFwiIGZvcj1cInBlZXJSZXZpZXdlZFwiIHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwicGVlclJldmlld2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIidwZWVyUmV2aWV3ZWQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicGVlclJldmlld2VkXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPGxpYi1oYmxsLWNoZWNrYm94IFtpc0NoZWNrZWRdPVwicGVlclJldmlld2VkLnZhbHVlXCI+PC9saWItaGJsbC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC10ZXh0XCI+UGVlciByZXZpZXdlZCBqb3VybmFsIGFydGljbGVzPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT1cImV4cGFuZFJlc3VsdHNcIiBjbGFzcz1cImNoZWNrYm94LXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8aDQ+Rm9yIE1vcmUgUmVzdWx0cyBUcnk8L2g0PlxuICAgICAgICAgICAgICAgIDwhLS0gQXBwbHkgcmVsYXRlZCB3b3JkcyAtLT5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveC1sYWJlbFwiIGZvcj1cImFwcGx5UmVsYXRlZFdvcmRzXCIgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhcHBseVJlbGF0ZWRXb3Jkc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCInYXBwbHlSZWxhdGVkV29yZHMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiYXBwbHlSZWxhdGVkV29yZHNcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8bGliLWhibGwtY2hlY2tib3ggW2lzQ2hlY2tlZF09XCJhcHBseVJlbGF0ZWRXb3Jkcy52YWx1ZVwiPjwvbGliLWhibGwtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwtdGV4dFwiPkFwcGx5IHJlbGF0ZWQgd29yZHM8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8IS0tIEFwcGx5IGVxdWl2YWxlbnQgc3ViamVjdHMgLS0+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2hlY2tib3gtbGFiZWxcIiBmb3I9XCJhcHBseUVxdWl2YWxlbnRTdWJqZWN0c1wiIHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYXBwbHlFcXVpdmFsZW50U3ViamVjdHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiJ2FwcGx5RXF1aXZhbGVudFN1YmplY3RzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImFwcGx5RXF1aXZhbGVudFN1YmplY3RzXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPGxpYi1oYmxsLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICBbaXNDaGVja2VkXT1cImFwcGx5RXF1aXZhbGVudFN1YmplY3RzLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbGliLWhibGwtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwtdGV4dFwiPkFwcGx5IGVxdWl2YWxlbnQgc3ViamVjdHM8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8IS0tIEZ1bGwgdGV4dCAtLT5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveC1sYWJlbFwiIGZvcj1cImZ1bGxUZXh0XCIgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJmdWxsVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCInZnVsbFRleHQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZnVsbFRleHRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8bGliLWhibGwtY2hlY2tib3ggW2lzQ2hlY2tlZF09XCJmdWxsVGV4dC52YWx1ZVwiPjwvbGliLWhibGwtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwtdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+SW5jbHVkZSByZXN1bHRzIHRoZSBsaWJyYXJ5IGRvZXNuJ3QgaGF2ZSBhY2Nlc3MgdG88L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gRGF0ZSAtLT5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJkYXRlT3B0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDxoND5EYXRlIFB1Ymxpc2hlZDwvaDQ+XG4gICAgICAgICAgICAgICAgPGxpYi1kYXRlLXJhbmdlXG4gICAgICAgICAgICAgICAgICAgIFtmcm9tXT1cImZyb20udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBbdG9dPVwidG8udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAoZnJvbUNoYW5nZSk9XCJmcm9tLnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAodG9DaGFuZ2UpPVwidG8uc2V0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgPjwvbGliLWRhdGUtcmFuZ2U+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gTGFuZ3VhZ2UgLS0+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxoND5MYW5ndWFnZTwvaDQ+XG4gICAgICAgICAgICAgICAgPGxpYi1oYmxsLW11bHRpLXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2xhbmd1YWdlJ1wiXG4gICAgICAgICAgICAgICAgICAgIFthbGxPcHRpb25zXT1cImNvbmZpZy5leHRlcm5hbEFkdmFuY2VkU2VhcmNoLmF2YWlsYWJsZUxhbmd1YWdlc1wiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZEtleXNdPVwibGFuZ3VhZ2VzLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkS2V5c0NoYW5nZSk9XCJsYW5ndWFnZXMuc2V0VmFsdWUoJGFueSgkZXZlbnQpKVwiXG4gICAgICAgICAgICAgICAgPjwvbGliLWhibGwtbXVsdGktc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGlkPVwiYWR2U2VhcmNoRm9vdGVyXCI+XG4gICAgICAgIDxidXR0b24gbGliSGJsbFBpbGxCdG4gW2NvbG9yXT1cIidibHVlJ1wiIHR5cGU9XCJzdWJtaXRcIiBkYXRhLXRlc3RpZD1cImFkdlNlYXJjaFN1Ym1pdEJ1dHRvblwiPlxuICAgICAgICAgICAgU2VhcmNoXG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9mb3JtPlxuIl19
271
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtc2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zcy1zZWFyY2gtYmFyL2FkdmFuY2VkLXNlYXJjaC9hZHZhbmNlZC1zZWFyY2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL3NzLXNlYXJjaC1iYXIvYWR2YW5jZWQtc2VhcmNoL2FkdmFuY2VkLXNlYXJjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxNQUFNLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdILHNCQUFzQixFQUN0QixtQkFBbUIsRUFDbkIsVUFBVSxHQUNiLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFTSCwyQkFBMkIsRUFDM0IsZ0NBQWdDLEVBQ2hDLG1DQUFtQyxHQUN0QyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0gseUJBQXlCLEVBQ3pCLHVCQUF1QixFQUN2Qiw2QkFBNkIsRUFDN0IsNkJBQTZCLEdBQ2hDLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxhQUFhLEVB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Qy9FLENBQUM7SUFDRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7SUFDNUUsQ0FBQztJQUNELElBQUksaUJBQWlCO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO0lBQ3JGLENBQUM7SUFDRCxJQUFJLHVCQUF1QjtRQUN2QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQztJQUMzRixDQUFDOzhHQTdHUSx1QkFBdUI7a0dBQXZCLHVCQUF1QiwwU0FpQnJCLFVBQVUsZ0RDOUZ6QixrMVZBbVBBLHFoRURoTFEsWUFBWSw4QkFDWixtQkFBbUIsNDFEQUNuQixnQkFBZ0IsNFRBQ2hCLGFBQWEsK0JBQ2Isd0JBQXdCLG9KQUN4QixxQkFBcUIscUZBQ3JCLG9CQUFvQixtSUFDcEIsa0JBQWtCOzsyRkFHYix1QkFBdUI7a0JBaEJuQyxTQUFTOytCQUNJLHdCQUF3QixjQUN0QixJQUFJLFdBR1A7d0JBQ0wsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYix3QkFBd0I7d0JBQ3hCLHFCQUFxQjt3QkFDckIsb0JBQW9CO3dCQUNwQixrQkFBa0I7cUJBQ3JCOzhCQUs4QixNQUFNO3NCQUFwQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFPZixjQUFjO3NCQUF2QixNQUFNO2dCQUcyQixXQUFXO3NCQUE1QyxTQUFTO3VCQUFDLGFBQWE7Z0JBSU8sWUFBWTtzQkFBMUMsU0FBUzt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgRm9ybUNvbnRyb2wsXG4gICAgRm9ybUdyb3VwLFxuICAgIE5vbk51bGxhYmxlRm9ybUJ1aWxkZXIsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRUb29sdGlwLCBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBmaWx0ZXIsIHN0YXJ0V2l0aCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgICBBZHZhbmNlZFNlYXJjaEJvb2xlYW5PcHRpb24sXG4gICAgQWR2YW5jZWRTZWFyY2hMb2NhbEZpZWxkT3B0aW9uLFxuICAgIEFkdmFuY2VkU2VhcmNoTGFuZ3VhZ2VPcHRpb24sXG4gICAgQWR2YW5jZWRTZWFyY2hRdWFsaWZpZXJPcHRpb24sXG4gICAgQWR2YW5jZWRTZWFyY2hRdWFsaWZpZXIsXG4gICAgQWR2YW5jZWRTZWFyY2hFeHRlcm5hbEZpZWxkT3B0aW9uLFxuICAgIEFkdmFuY2VkU2VhcmNoUXVlcnlSb3csXG4gICAgQWR2YW5jZWRTZWFyY2hGaWVsZE9wdGlvbixcbiAgICBpc0FkdmFuY2VkU2VhcmNoRmllbGRPcHRpb24sXG4gICAgaXNBZHZhbmNlZFNlYXJjaExvY2FsRmllbGRPcHRpb24sXG4gICAgaXNBZHZhbmNlZFNlYXJjaEV4dGVybmFsRmllbGRPcHRpb24sXG59IGZyb20gJy4uL21vZGVscy9hZHZhbmNlZC1zZWFyY2gubW9kZWwnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTZWFyY2hDb25maWcgfSBmcm9tICcuLi9zcy1zZWFyY2gtYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyB2YWxpZGF0ZURhdGVSYW5nZUZpZWxkcyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFEVkFOQ0VEX1NFQVJDSF9GSUVMRF9NQVAsXG4gICAgQURWQU5DRURfU0VBUkNIX09QVElPTlMsXG4gICAgQURWQU5DRURfU0VBUkNIX1FVQUxJRklFUl9NQVAsXG4gICAgQURWQU5DRURfU0VBUkNIX1FVRVJJRVNfTElNSVQsXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBIYmxsTXVsdGlTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9oYmxsLW11bHRpLXNlbGVjdC9oYmxsLW11bHRpLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSGJsbENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaGJsbC1jaGVja2JveC9oYmxsLWNoZWNrYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIYmxsUGlsbEJ0bkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvaGJsbC1waWxsLWJ0bi9oYmxsLXBpbGwtYnRuLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2VDb21wb25lbnQgfSBmcm9tICcuLi9kYXRlLXJhbmdlL2RhdGUtcmFuZ2UuY29tcG9uZW50JztcblxudHlwZSBRdWVyeVJvdyA9IHtcbiAgICBib29sZWFuOiBGb3JtQ29udHJvbDxBZHZhbmNlZFNlYXJjaEJvb2xlYW5PcHRpb24+O1xuICAgIGZpZWxkOiBGb3JtQ29udHJvbDxcbiAgICAgICAgfCBBZHZhbmNlZFNlYXJjaEZpZWxkT3B0aW9uXG4gICAgICAgIHwgQWR2YW5jZWRTZWFyY2hMb2NhbEZpZWxkT3B0aW9uXG4gICAgICAgIHwgQWR2YW5jZWRTZWFyY2hFeHRlcm5hbEZpZWxkT3B0aW9uXG4gICAgPjtcbiAgICBxdWFsaWZpZXI6IEZvcm1Db250cm9sPEFkdmFuY2VkU2VhcmNoUXVhbGlmaWVyT3B0aW9uPjtcbiAgICBxdWVyeTogRm9ybUNvbnRyb2w8c3RyaW5nPjtcbn07XG5cbmNvbnN0IERBVEVfVkFMSURBVE9SX1JFR0VYID0gJ15bMC05XXs0fSQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1zcy1hZHZhbmNlZC1zZWFyY2gnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLXNlYXJjaC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYWR2YW5jZWQtc2VhcmNoLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIEhibGxNdWx0aVNlbGVjdENvbXBvbmVudCxcbiAgICAgICAgSGJsbENoZWNrYm94Q29tcG9uZW50LFxuICAgICAgICBIYmxsUGlsbEJ0bkRpcmVjdGl2ZSxcbiAgICAgICAgRGF0ZVJhbmdlQ29tcG9uZW50LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkU2VhcmNoQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZiID0gaW5qZWN0KE5vbk51bGxhYmxlRm9ybUJ1aWxkZXIpO1xuICAgIHByaXZhdGUgX2NvbmZpZyE6IFNlYXJjaENvbmZpZztcbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBzZXQgY29uZmlnKGNvbmZpZzogU2VhcmNoQ29uZmlnKSB7XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy5zZXR1cEZvcm0oKTtcbiAgICB9XG4gICAgZ2V0IGNvbmZpZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgICB9XG4gICAgQE91dHB1dCgpIGFkdmFuY2VkU2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjxTZWFyY2hDb25maWc+KCk7XG5cbiAgICAvLyBUaG91Z2ggbXVsdGlwbGUgaW5zdGFuY2VzIGV4aXN0cywgdGhpcyByZXByZXNlbnQgcXVlcnkgMS5cbiAgICBAVmlld0NoaWxkKCdzZWFyY2hJbnB1dCcpIHByaXZhdGUgc2VhcmNoSW5wdXQhOiBFbGVtZW50UmVmO1xuICAgIC8vIFRoZSB0b29sdGlwIGlzIGRpc2FibGVkIGluIHRoZSB0ZW1wbGF0ZS5cbiAgICAvLyBJdCBpcyBlbmFibGVkIGFuZCBkaXNwbGF5ZWQgaWYgYSB1c2VyIHNlYXJjaGVzIGFnYWluc3QgYW4gZW1wdHkgcXVlcnkgKHNpbXBsZSBvciBxMSkuXG4gICAgLy8gQW55IGNoYW5nZSB0byB0aGUgc2VhcmNoIGZpZWxkIGRpc2FibGVzIHRoZSB0b29sdGlwLlxuICAgIEBWaWV3Q2hpbGQoTWF0VG9vbHRpcCkgcHJpdmF0ZSBpbnB1dFRvb2x0aXAhOiBNYXRUb29sdGlwO1xuXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUYWtlcyBhIGBGb3JtR3JvdXBgIGFuZCBzeW5jcyB1cCB0aGUgYGZpZWxkYCBhbmQgYHF1YWxpZmllcmAgdmFsdWVzLlxuICAgICAqIEFmdGVyIHN5bmNpbmcsIHdoZW4gdGhlIGBmaWVsZGAgdmFsdWUgY2hhbmdlcywgdGhlIGBxdWFsaWZpZXJgIHZhbHVlIHdpbGwgdXBkYXRlIGFwcHJvcHJpYXRlbHkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzeW5jVXBGaWVsZEFuZFF1YWxpZmllciA9IChcbiAgICAgICAgZmc6IEZvcm1Hcm91cDx7XG4gICAgICAgICAgICBib29sZWFuOiBGb3JtQ29udHJvbDtcbiAgICAgICAgICAgIGZpZWxkOiBGb3JtQ29udHJvbDtcbiAgICAgICAgICAgIHF1YWxpZmllcjogRm9ybUNvbnRyb2w7XG4gICAgICAgICAgICBxdWVyeTogRm9ybUNvbnRyb2w7XG4gICAgICAgIH0+LFxuICAgICAgICBzY29wZTogU2VhcmNoQ29uZmlnWydzY29wZSddLFxuICAgICkgPT4ge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICBmZy5jb250cm9scy5maWVsZC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHNjb3BlID09PSAnbG9jYWwnKSxcbiAgICAgICAgICAgICAgICAgICAgdGFwKCh2YWw6IEFkdmFuY2VkU2VhcmNoUXVhbGlmaWVyKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZmcuY29udHJvbHMucXVhbGlmaWVyLnNldFZhbHVlKEFEVkFOQ0VEX1NFQVJDSF9PUFRJT05TLnF1YWxpZmllcnNbdmFsXVswXSksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKSxcbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIGFkdmFuY2VkU2VhcmNoRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBxdWVyaWVzOiB0aGlzLmZiLmFycmF5PEZvcm1Hcm91cDxRdWVyeVJvdz4+KFxuICAgICAgICAgICAgW10sXG4gICAgICAgICAgICBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoQURWQU5DRURfU0VBUkNIX1FVRVJJRVNfTElNSVQpXSxcbiAgICAgICAgKSxcbiAgICAgICAgdHlwZXM6IFtbXSBhcyBzdHJpbmdbXV0sXG4gICAgICAgIGNvbGxlY3Rpb25zOiBbW10gYXMgc3RyaW5nW11dLFxuICAgICAgICBsYW5ndWFnZXM6IFtbXSBhcyBBZHZhbmNlZFNlYXJjaExhbmd1YWdlT3B0aW9uW11dLFxuICAgICAgICBkYXRlUHVibGlzaGVkOiB0aGlzLmZiLmdyb3VwKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZyb206IFsnJywgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDQpLCBWYWxpZGF0b3JzLnBhdHRlcm4oREFURV9WQUxJREFUT1JfUkVHRVgpXV0sXG4gICAgICAgICAgICAgICAgdG86IFsnJywgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDQpLCBWYWxpZGF0b3JzLnBhdHRlcm4oREFURV9WQUxJREFUT1JfUkVHRVgpXV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyB2YWxpZGF0b3JzOiB2YWxpZGF0ZURhdGVSYW5nZUZpZWxkcygpIH0sXG4gICAgICAgICksXG4gICAgICAgIGxpbWl0UmVzdWx0czogdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBwZWVyUmV2aWV3ZWQ6IFtmYWxzZV0sXG4gICAgICAgIH0pLFxuICAgICAgICBleHBhbmRSZXN1bHRzOiB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgIGFwcGx5UmVsYXRlZFdvcmRzOiBbZmFsc2VdLFxuICAgICAgICAgICAgYXBwbHlFcXVpdmFsZW50U3ViamVjdHM6IFtmYWxzZV0sXG4gICAgICAgICAgICBmdWxsVGV4dDogW2ZhbHNlXSxcbiAgICAgICAgfSksXG4gICAgfSk7XG5cbiAgICBwcm90ZWN0ZWQgaXNTdWJtaXR0ZWQgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgYWR2YW5jZWRTZWFyY2hPcHRpb25zID0gQURWQU5DRURfU0VBUkNIX09QVElPTlM7XG4gICAgcHJvdGVjdGVkIGFkdmFuY2VkU2VhcmNoRmllbGRNYXAgPSBBRFZBTkNFRF9TRUFSQ0hfRklFTERfTUFQO1xuICAgIHByb3RlY3RlZCBhZHZhbmNlZFNlYXJjaFF1YWxpZmllck1hcCA9IEFEVkFOQ0VEX1NFQVJDSF9RVUFMSUZJRVJfTUFQO1xuXG4gICAgZ2V0IHF1ZXJpZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkdmFuY2VkU2VhcmNoRm9ybS5jb250cm9scy5xdWVyaWVzO1xuICAgIH1cbiAgICBnZXQgdHlwZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkdmFuY2VkU2VhcmNoRm9ybS5jb250cm9scy50eXBlcztcbiAgICB9XG4gICAgZ2V0IGNvbGxlY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFNlYXJjaEZvcm0uY29udHJvbHMuY29sbGVjdGlvbnM7XG4gICAgfVxuICAgIGdldCBsYW5ndWFnZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkdmFuY2VkU2VhcmNoRm9ybS5jb250cm9scy5sYW5ndWFnZXM7XG4gICAgfVxuICAgIGdldCBmcm9tKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFNlYXJjaEZvcm0uY29udHJvbHMuZGF0ZVB1Ymxpc2hlZC5jb250cm9scy5mcm9tO1xuICAgIH1cbiAgICBnZXQgdG8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkdmFuY2VkU2VhcmNoRm9ybS5jb250cm9scy5kYXRlUHVibGlzaGVkLmNvbnRyb2xzLnRvO1xuICAgIH1cbiAgICBnZXQgcGVlclJldmlld2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFNlYXJjaEZvcm0uY29udHJvbHMubGltaXRSZXN1bHRzLmNvbnRyb2xzLnBlZXJSZXZpZXdlZDtcbiAgICB9XG4gICAgZ2V0IGZ1bGxUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFNlYXJjaEZvcm0uY29udHJvbHMuZXhwYW5kUmVzdWx0cy5jb250cm9scy5mdWxsVGV4dDtcbiAgICB9XG4gICAgZ2V0IGFwcGx5UmVsYXRlZFdvcmRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFNlYXJjaEZvcm0uY29udHJvbHMuZXhwYW5kUmVzdWx0cy5jb250cm9scy5hcHBseVJlbGF0ZWRXb3JkcztcbiAgICB9XG4gICAgZ2V0IGFwcGx5RXF1aXZhbGVudFN1YmplY3RzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFNlYXJjaEZvcm0uY29udHJvbHMuZXhwYW5kUmVzdWx0cy5jb250cm9scy5hcHBseUVxdWl2YWxlbnRTdWJqZWN0cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYSBxdWVyeSB0byBgcXVlcmllc2AgYEZvcm1BcnJheWAuIFRoaXMgRm9ybUdyb3VwIGhhcyBhbiBhZGRpdGlvbmFsIGBib29sZWFuYCBjb250cm9sLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhZGRRdWVyeSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5xdWVyaWVzLnB1c2goXG4gICAgICAgICAgICB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgICAgICBib29sZWFuOiBbQURWQU5DRURfU0VBUkNIX09QVElPTlMuYm9vbGVhblswXSBhcyBBZHZhbmNlZFNlYXJjaEJvb2xlYW5PcHRpb25dLFxuICAgICAgICAgICAgICAgIGZpZWxkOiBbXG4gICAgICAgICAgICAgICAgICAgIEFEVkFOQ0VEX1NFQVJDSF9PUFRJT05TLmZpZWxkc1swXSBhc1xuICAgICAgICAgICAgICAgICAgICAgICAgfCBBZHZhbmNlZFNlYXJjaEZpZWxkT3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICB8IEFkdmFuY2VkU2VhcmNoTG9jYWxGaWVsZE9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgfCBBZHZhbmNlZFNlYXJjaEV4dGVybmFsRmllbGRPcHRpb24sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBxdWFsaWZpZXI6IFtcbiAgICAgICAgICAgICAgICAgICAgQURWQU5DRURfU0VBUkNIX09QVElPTlMucXVhbGlmaWVyc1tcbiAgICAgICAgICAgICAgICAgICAgICAgIEFEVkFOQ0VEX1NFQVJDSF9PUFRJT05TLmxvY2FsRmllbGRzWzBdXG4gICAgICAgICAgICAgICAgICAgIF1bMF0gYXMgQWR2YW5jZWRTZWFyY2hRdWFsaWZpZXJPcHRpb24sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBxdWVyeTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN5bmNVcEZpZWxkQW5kUXVhbGlmaWVyKHRoaXMucXVlcmllcy5hdCgtMSksIHRoaXMuY29uZmlnLnNjb3BlKTtcbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIHJlbW92ZVF1ZXJ5ID0gKGk6IG51bWJlcikgPT4ge1xuICAgICAgICB0aGlzLnF1ZXJpZXMucmVtb3ZlQXQoaSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFByZXBhcmVzIGFwcHJvcHJpYXRlIHF1ZXJ5IHBhcmFtcyBiZWZvcmUgcGVyZm9ybWluZyBhIGxvY2FsIGFkdmFuY2VkIHNlYXJjaC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZG9Mb2NhbEFkdmFuY2VkU2VhcmNoID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmRvQWR2YW5jZWRTZWFyY2goe1xuICAgICAgICAgICAgbG9jYWxBZHZhbmNlZFNlYXJjaDoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuY29uZmlnLmxvY2FsQWR2YW5jZWRTZWFyY2gsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRSZXNvdXJjZVR5cGVzOiB0aGlzLnR5cGVzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sbGVjdGlvbnM6IHRoaXMuY29sbGVjdGlvbnMudmFsdWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJlcGFyZXMgYXBwcm9wcmlhdGUgcXVlcnkgcGFyYW1zIGJlZm9yZSBwZXJmb3JtaW5nIGFuIGV4dGVybmFsIGFkdmFuY2VkIHNlYXJjaC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZG9FeHRlcm5hbEFkdmFuY2VkU2VhcmNoID0gKCkgPT4ge1xuICAgICAgICAvLyBDb21wYXJlcyAnZnJvbScgYW5kICd0bycgdG8gZW5zdXJlICd0bycgaXMgZ3JlYXRlciB0aGFuIC8gZXF1YWwgdG8gJ2Zyb20nLCBzd2FwcyB0aGVtIGlmIG5vdFxuICAgICAgICBjb25zdCBmcm9tID0gdGhpcy5mcm9tLnZhbHVlXG4gICAgICAgICAgICA/IHBhcnNlSW50KHRoaXMuZnJvbS52YWx1ZSkgPD0gcGFyc2VJbnQodGhpcy50by52YWx1ZSlcbiAgICAgICAgICAgICAgICA/IHRoaXMuZnJvbS52YWx1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy50by52YWx1ZVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgLy8gQ29tcGFyZXMgJ2Zyb20nIGFuZCAndG8nIHRvIGVuc3VyZSAndG8nIGlzIGdyZWF0ZXIgdGhhbiAvIGVxdWFsIHRvICdmcm9tJywgc3dhcHMgdGhlbSBpZiBub3RcbiAgICAgICAgY29uc3QgdG8gPSB0aGlzLnRvLnZhbHVlXG4gICAgICAgICAgICA/IHBhcnNlSW50KHRoaXMudG8udmFsdWUpID49IHBhcnNlSW50KHRoaXMuZnJvbS52YWx1ZSlcbiAgICAgICAgICAgICAgICA/IHRoaXMudG8udmFsdWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuZnJvbS52YWx1ZVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgdGhpcy5kb0FkdmFuY2VkU2VhcmNoKHtcbiAgICAgICAgICAgIGV4dGVybmFsQWR2YW5jZWRTZWFyY2g6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmNvbmZpZy5leHRlcm5hbEFkdmFuY2VkU2VhcmNoLFxuICAgICAgICAgICAgICAgIGRhdGVQdWJsaXNoZWQ6IHsgZnJvbSwgdG8gfSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZExhbmd1YWdlczogdGhpcy5sYW5ndWFnZXMudmFsdWUsXG4gICAgICAgICAgICAgICAgbGltaXRSZXN1bHRzOiB7XG4gICAgICAgICAgICAgICAgICAgIHBlZXJSZXZpZXdlZDogdGhpcy5wZWVyUmV2aWV3ZWQudmFsdWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBleHBhbmRSZXN1bHRzOiB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGx5UmVsYXRlZFdvcmRzOiB0aGlzLmFwcGx5UmVsYXRlZFdvcmRzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBhcHBseUVxdWl2YWxlbnRTdWJqZWN0czogdGhpcy5hcHBseUVxdWl2YWxlbnRTdWJqZWN0cy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZnVsbFRleHQ6IHRoaXMuZnVsbFRleHQudmFsdWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBWZXJpZmllcyB0aGF0IHRoZXJlIGlzIGEgcXVlcnkgdG8gdXNlLCBnYXRoZXJzIGFsbCBvdGhlciBxdWVyeSBwYXJhbWV0ZXJzIG5lZWRlZCwgdGhlbiBwZXJmb3JtcyBhbiBhZHZhbmNlZCBzZWFyY2ggdmlhIGByb3V0ZXIubmF2aWdhdGUoKWAuXG4gICAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBxdWVyeVBhcmFtcyBiYXNlIHNldCBvZiBxdWVyeSBwYXJhbXMgdG8gbmF2aWdhdGUgd2l0aFxuICAgICAqL1xuICAgIHByaXZhdGUgZG9BZHZhbmNlZFNlYXJjaCA9ICh1cGRhdGVkUHJvcHM6IFBhcnRpYWw8U2VhcmNoQ29uZmlnPik6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLmlzU3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgLy8gRG9uJ3QgcGVyZm9ybSBhIHNlYXJjaCB1bmxlc3MgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHF1ZXJ5XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMucXVlcmllcy5hdCgwKS5jb250cm9scy5xdWVyeS5pbnZhbGlkICYmXG4gICAgICAgICAgICAhdGhpcy5xdWVyaWVzLnZhbHVlLnNvbWUoKHYpID0+ICEhdi5xdWVyeSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dTZWFyY2hWYWxpZGF0aW9uVG9vbFRpcCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIERvbid0IHBlcmZvcm0gYSBzZWFyY2ggdW5sZXNzIHRoZSBkYXRlIGZvcm0gaXMgdmFsaWRcbiAgICAgICAgaWYgKHRoaXMuYWR2YW5jZWRTZWFyY2hGb3JtLmNvbnRyb2xzLmRhdGVQdWJsaXNoZWQuaW52YWxpZCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuYWR2YW5jZWRTZWFyY2guZW1pdCh7XG4gICAgICAgICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgICAgICAgIC4uLnVwZGF0ZWRQcm9wcyxcbiAgICAgICAgICAgIGFkdmFuY2VkU2VhcmNoUXVlcnlSb3dzOiB0aGlzLnF1ZXJpZXMudmFsdWUgYXMgQWR2YW5jZWRTZWFyY2hRdWVyeVJvd1tdLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRlZCA9IGZhbHNlO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHNob3dTZWFyY2hWYWxpZGF0aW9uVG9vbFRpcCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIHRoaXMuaW5wdXRUb29sdGlwLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5wdXRUb29sdGlwLnNob3coKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBzZXR1cEZvcm0gPSAoKSA9PiB7XG4gICAgICAgIHRoaXMucXVlcmllcy5jbGVhcigpO1xuICAgICAgICAvLyBBbHdheXMga2VlcCBhdCBsZWFzdCB0d28gcXVlcmllcyBhdmFpbGFibGVcbiAgICAgICAgdGhpcy5hZGRRdWVyeSgpO1xuICAgICAgICB0aGlzLmFkZFF1ZXJ5KCk7XG5cbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkYXRpb24gdG9vbHRpcCBjbG9zZXMgd2hlbiB1c2VzIGVudGVycyBhIHF1ZXJ5XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgICAgIHRoaXMucXVlcmllc1xuICAgICAgICAgICAgICAgIC5hdCgwKVxuICAgICAgICAgICAgICAgIC5jb250cm9scy5xdWVyeS52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgoJycpKVxuICAgICAgICAgICAgICAgIC5waXBlKGZpbHRlcigoKSA9PiAhIXRoaXMuaW5wdXRUb29sdGlwKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+ICh0aGlzLmlucHV0VG9vbHRpcC5kaXNhYmxlZCA9IHRydWUpKSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBJZiBubyBgcXtOVU19YCB1c2UgYHFgIGZvciBmaXJzdCBxdWVyeVxuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmFkdmFuY2VkU2VhcmNoUXVlcnlSb3dzLmxlbmd0aClcbiAgICAgICAgICAgIHRoaXMucXVlcmllcy5hdCgwKS5jb250cm9scy5xdWVyeS5zZXRWYWx1ZSh0aGlzLmNvbmZpZy5xKTtcblxuICAgICAgICB0aGlzLmNvbmZpZy5hZHZhbmNlZFNlYXJjaFF1ZXJ5Um93cy5mb3JFYWNoKChxdWVyeVJvdywgaSkgPT4ge1xuICAgICAgICAgICAgLy8gQWRkIGEgcXVlcnkgZm9ybSBjb250cm9sIGZvciBldmVyeSBxe251bX0ga2V5IGFmdGVyIHRoZSBmaXJzdC5cbiAgICAgICAgICAgIGxldCBxdWVyeUNvbnRyb2wgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGkgPT09IDAgfHwgaSA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHF1ZXJ5Q29udHJvbCA9IHRoaXMucXVlcmllcy5hdChpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRRdWVyeSgpO1xuICAgICAgICAgICAgICAgIHF1ZXJ5Q29udHJvbCA9IHRoaXMucXVlcmllcy5hdCgtMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEFkZCB0aGUgcXVlcnkgdmFsdWUuXG4gICAgICAgICAgICBxdWVyeUNvbnRyb2wuY29udHJvbHMucXVlcnkuc2V0VmFsdWUocXVlcnlSb3cucXVlcnkpO1xuXG4gICAgICAgICAgICAvLyBBZGQgdGhlIGZpZWxkIHZhbHVlLCBpZiBhdmFpbGFibGUuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgcXVlcnlSb3cuZmllbGQgJiYgLy8gT25seSBzZXQgdGhlIGZpZWxkIGlmIHRoZSB2YWx1ZSBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IHNjb3BlXG4gICAgICAgICAgICAgICAgKGlzQWR2YW5jZWRTZWFyY2hGaWVsZE9wdGlvbihxdWVyeVJvdy5maWVsZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuY29uZmlnLnNjb3BlID09PSAnbG9jYWwnXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGlzQWR2YW5jZWRTZWFyY2hMb2NhbEZpZWxkT3B0aW9uKHF1ZXJ5Um93LmZpZWxkKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBpc0FkdmFuY2VkU2VhcmNoRXh0ZXJuYWxGaWVsZE9wdGlvbihxdWVyeVJvdy5maWVsZCkpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIHF1ZXJ5Q29udHJvbC5jb250cm9scy5maWVsZC5zZXRWYWx1ZShxdWVyeVJvdy5maWVsZCk7XG4gICAgICAgICAgICBlbHNlIHF1ZXJ5Q29udHJvbC5jb250cm9scy5maWVsZC5zZXRWYWx1ZSh0aGlzLmFkdmFuY2VkU2VhcmNoT3B0aW9ucy5maWVsZHNbMF0pO1xuXG4gICAgICAgICAgICAvLyBBZGQgdGhlIHF1YWxpZmllciB2YWx1ZSwgaWYgYXZhaWxhYmxlIGFuZCBhIGxvY2FsIHNlYXJjaC5cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5zY29wZSA9PT0gJ2xvY2FsJyAmJiBxdWVyeVJvdy5xdWFsaWZpZXIpXG4gICAgICAgICAgICAgICAgcXVlcnlDb250cm9sLmNvbnRyb2xzLnF1YWxpZmllci5zZXRWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlSb3cucXVhbGlmaWVyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkdmFuY2VkU2VhcmNoT3B0aW9ucy5xdWFsaWZpZXJzW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5Q29udHJvbC5jb250cm9scy5maWVsZC52YWx1ZSBhc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFkdmFuY2VkU2VhcmNoRmllbGRPcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBZHZhbmNlZFNlYXJjaExvY2FsRmllbGRPcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gQWRkIHRoZSBib29sZWFuLCBpZiBhdmFpbGFibGUgYW5kIG5vdCB0aGUgZmlyc3QgcXVlcnkuXG4gICAgICAgICAgICBpZiAoaSAhPT0gMCAmJiBxdWVyeVJvdy5ib29sZWFuKVxuICAgICAgICAgICAgICAgIHF1ZXJ5Q29udHJvbC5jb250cm9scy5ib29sZWFuLnNldFZhbHVlKHF1ZXJ5Um93LmJvb2xlYW4pO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLnNjb3BlID09PSAnbG9jYWwnKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGVzLnNldFZhbHVlKHRoaXMuY29uZmlnLmxvY2FsQWR2YW5jZWRTZWFyY2guc2VsZWN0ZWRSZXNvdXJjZVR5cGVzKTtcbiAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvbnMuc2V0VmFsdWUodGhpcy5jb25maWcubG9jYWxBZHZhbmNlZFNlYXJjaC5zZWxlY3RlZENvbGxlY3Rpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VzLnNldFZhbHVlKFxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmV4dGVybmFsQWR2YW5jZWRTZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgLnNlbGVjdGVkTGFuZ3VhZ2VzIGFzIEFkdmFuY2VkU2VhcmNoTGFuZ3VhZ2VPcHRpb25bXSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnBlZXJSZXZpZXdlZC5zZXRWYWx1ZShcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5leHRlcm5hbEFkdmFuY2VkU2VhcmNoLmxpbWl0UmVzdWx0cy5wZWVyUmV2aWV3ZWQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5hcHBseVJlbGF0ZWRXb3Jkcy5zZXRWYWx1ZShcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5leHRlcm5hbEFkdmFuY2VkU2VhcmNoLmV4cGFuZFJlc3VsdHMuYXBwbHlSZWxhdGVkV29yZHMsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5hcHBseUVxdWl2YWxlbnRTdWJqZWN0cy5zZXRWYWx1ZShcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5leHRlcm5hbEFkdmFuY2VkU2VhcmNoLmV4cGFuZFJlc3VsdHMuYXBwbHlFcXVpdmFsZW50U3ViamVjdHMsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5mdWxsVGV4dC5zZXRWYWx1ZSh0aGlzLmNvbmZpZy5leHRlcm5hbEFkdmFuY2VkU2VhcmNoLmV4cGFuZFJlc3VsdHMuZnVsbFRleHQpO1xuICAgICAgICAgICAgdGhpcy5mcm9tLnNldFZhbHVlKHRoaXMuY29uZmlnLmV4dGVybmFsQWR2YW5jZWRTZWFyY2guZGF0ZVB1Ymxpc2hlZC5mcm9tKTtcbiAgICAgICAgICAgIHRoaXMudG8uc2V0VmFsdWUodGhpcy5jb25maWcuZXh0ZXJuYWxBZHZhbmNlZFNlYXJjaC5kYXRlUHVibGlzaGVkLnRvKTtcbiAgICAgICAgfVxuICAgIH07XG59XG4iLCI8Zm9ybVxuICAgIGRhdGEtdGVzdGlkPVwiYWR2YW5jZWRTZWFyY2hGb3JtXCJcbiAgICAoc3VibWl0KT1cImNvbmZpZy5zY29wZSA9PT0gJ2xvY2FsJyA/IGRvTG9jYWxBZHZhbmNlZFNlYXJjaCgpIDogZG9FeHRlcm5hbEFkdmFuY2VkU2VhcmNoKClcIlxuICAgIFtmb3JtR3JvdXBdPVwiYWR2YW5jZWRTZWFyY2hGb3JtXCJcbiAgICBjbGFzcz1cImFkdi1zZWFyY2gtd3JhcHBlclwiXG4+XG4gICAgPGgzPkFkdmFuY2VkIFNlYXJjaDwvaDM+XG4gICAgPCEtLSBRdWVyaWVzIC0tPlxuICAgIEBmb3IgKHF1ZXJ5IG9mIHF1ZXJpZXMuY29udHJvbHM7IHRyYWNrICRpbmRleDsgbGV0IHF1ZXJ5SW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImFkdi1zZWFyY2gtcm93XCIgW2Zvcm1Hcm91cF09XCJxdWVyeVwiPlxuICAgICAgICAgICAgPCEtLSBCb29sZWFuIG9wZXJhdG9yIC0tPlxuICAgICAgICAgICAgPCEtLSBBZGQgYm9vbGVhbiBmb3IgZWFjaCByb3cgZXhjZXB0IGZvciBmaXJzdCAtLT5cbiAgICAgICAgICAgIEBpZiAoISRmaXJzdCkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2Jvb2xlYW4nICsgcXVlcnlJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIidib29sZWFuJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCInYm9vbGVhbicgKyBxdWVyeUluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYm9vbGVhbiBvZiBhZHZhbmNlZFNlYXJjaE9wdGlvbnMuYm9vbGVhbjsgdHJhY2sgYm9vbGVhbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiYm9vbGVhblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBib29sZWFuIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPCEtLSBGaWVsZCAtLT5cbiAgICAgICAgICAgIDxsYWJlbCBbZm9yXT1cIidmaWVsZCcgKyBxdWVyeUluZGV4XCIgY2xhc3M9XCJoaWRkZW5cIj5GaWVsZCB7eyBxdWVyeUluZGV4IH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidmaWVsZCcgKyBxdWVyeUluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCInZmllbGQnXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2ZpZWxkJyArIHF1ZXJ5SW5kZXhcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoZmllbGQgb2YgYWR2YW5jZWRTZWFyY2hPcHRpb25zLmZpZWxkczsgdHJhY2sgZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhZHZhbmNlZFNlYXJjaEZpZWxkTWFwW2ZpZWxkXSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPG9wdGdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiKGNvbmZpZy5zY29wZSA9PT0gJ2V4dGVybmFsJyA/ICdPbmxpbmUnIDogJ0xpYnJhcnknKSArICcgU3BlY2lmaWMnXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgb2YgY29uZmlnLnNjb3BlID09PSAnZXh0ZXJuYWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYWR2YW5jZWRTZWFyY2hPcHRpb25zLmV4dGVybmFsRmllbGRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYWR2YW5jZWRTZWFyY2hPcHRpb25zLmxvY2FsRmllbGRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrIGZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cImZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFkdmFuY2VkU2VhcmNoRmllbGRNYXBbZmllbGRdIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvb3B0Z3JvdXA+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gUXVhbGlmaWVycyBhcmUgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHNlYXJjaGVzIC0tPlxuICAgICAgICAgICAgQGlmIChjb25maWcuc2NvcGUgPT09ICdsb2NhbCcpIHtcbiAgICAgICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCIncXVhbGlmaWVyJyArIHF1ZXJ5SW5kZXhcIiBjbGFzcz1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgID5NYXRjaCBDcml0ZXJpYSB7eyBxdWVyeUluZGV4IH19PC9sYWJlbFxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidxdWFsaWZpZXInICsgcXVlcnlJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIidxdWFsaWZpZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIidxdWFsaWZpZXInICsgcXVlcnlJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gJGFueSBiZWNhdXNlIGEgZmllbGQgY2FuIHRlY2huaWNhbGx5IGJlIGxvY2FsIG9yIGV4dGVybmFsLCB0aG91Z2ggdGhpcyBibG9jayBpcyBzY29wZWQgc3RyaWN0bHkgdG8gbG9jYWwgZmllbGRzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbGlmaWVyIG9mICRhbnkoYWR2YW5jZWRTZWFyY2hPcHRpb25zLnF1YWxpZmllcnMpW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5jb250cm9scy5maWVsZC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2sgcXVhbGlmaWVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvcHRpb25JbmRleCA9ICRpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJxdWFsaWZpZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdxdWFsaWZpZXInICsgcXVlcnlJbmRleCArICctb3B0aW9uJyArIG9wdGlvbkluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAkYW55KGFkdmFuY2VkU2VhcmNoUXVhbGlmaWVyTWFwKVtxdWFsaWZpZXJdIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPCEtLSBRdWVyeSAtLT5cbiAgICAgICAgICAgIDxsYWJlbCBbZm9yXT1cIidxdWVyeScgKyBxdWVyeUluZGV4XCIgY2xhc3M9XCJoaWRkZW5cIj5RdWVyeSB7eyBxdWVyeUluZGV4IH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJxdWVyeS1pbnB1dFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAjc2VhcmNoSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidxdWVyeScgKyBxdWVyeUluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCIncXVlcnknXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ3F1ZXJ5JyArIHF1ZXJ5SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICBhcmlhLXJlcXVpcmVkPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJGaWxsIG91dCB0aGlzIGZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09XCInYWJvdmUnXCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImlzU3VibWl0dGVkICYmIHF1ZXJpZXMuYXQoMCkuY29udHJvbHMucXVlcnkuaW52YWxpZFwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJpbnZhbGlkSW5wdXREZXNjXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKCEkZmlyc3QpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LWNhbmNlbFwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlUXVlcnkocXVlcnlJbmRleClcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCInY2FuY2VsUm93JyArIHF1ZXJ5SW5kZXhcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb25cIj4gY2FuY2VsIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJhZGRRdWVyeSgpXCJcbiAgICAgICAgaWQ9XCJhZGRRdWVyeUJ0blwiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwiYWRkUXVlcnlcIlxuICAgICAgICBbZGlzYWJsZWRdPVwicXVlcmllcy5sZW5ndGggPiAxMVwiXG4gICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvblwiPiBhZGQgPC9zcGFuPlxuICAgICAgICBBZGQgYSByb3dcbiAgICA8L2J1dHRvbj5cbiAgICA8IS0tIE9USEVSIE9QVElPTlMgLS0+XG4gICAgPGRpdiBjbGFzcz1cIm90aGVyLW9wdGlvbnNcIj5cbiAgICAgICAgPCEtLSBMT0NBTCAtLT5cbiAgICAgICAgQGlmIChjb25maWcuc2NvcGUgPT09ICdsb2NhbCcpIHtcbiAgICAgICAgICAgIDwhLS0gVHlwZSAtLT5cbiAgICAgICAgICAgIDxkaXYgZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZVR5cGVcIj5cbiAgICAgICAgICAgICAgICA8aDQ+UmVzb3VyY2UgVHlwZTwvaDQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm11bHRpLXNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItaGJsbC1tdWx0aS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInUmVzb3VyY2UgVHlwZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FsbE9wdGlvbnNdPVwiY29uZmlnLmxvY2FsQWR2YW5jZWRTZWFyY2guYXZhaWxhYmxlUmVzb3VyY2VUeXBlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRLZXlzXT1cInR5cGVzLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZEtleXNDaGFuZ2UpPVwidHlwZXMuc2V0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID48L2xpYi1oYmxsLW11bHRpLXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSBDb2xsZWN0aW9uIC0tPlxuICAgICAgICAgICAgPGRpdiBkYXRhLXRlc3RpZD1cImNvbGxlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8aDQ+Q29sbGVjdGlvbjwvaDQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm11bHRpLXNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItaGJsbC1tdWx0aS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQ29sbGVjdGlvbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FsbE9wdGlvbnNdPVwiY29uZmlnLmxvY2FsQWR2YW5jZWRTZWFyY2guYXZhaWxhYmxlQ29sbGVjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkS2V5c109XCJjb2xsZWN0aW9ucy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRLZXlzQ2hhbmdlKT1cImNvbGxlY3Rpb25zLnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9saWItaGJsbC1tdWx0aS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8IS0tIEVYVEVSTkFMIC0tPlxuICAgICAgICBAaWYgKGNvbmZpZy5zY29wZSA9PT0gJ2V4dGVybmFsJykge1xuICAgICAgICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwibGltaXRSZXN1bHRzXCIgY2xhc3M9XCJjaGVja2JveC1zZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGg0PkZvciBGZXdlciBSZXN1bHRzIFRyeTwvaDQ+XG4gICAgICAgICAgICAgICAgPCEtLSBQZWVyIHJldmlld2VkIC0tPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCIgZm9yPVwicGVlclJldmlld2VkXCIgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJwZWVyUmV2aWV3ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiJ3BlZXJSZXZpZXdlZCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJwZWVyUmV2aWV3ZWRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8bGliLWhibGwtY2hlY2tib3ggW2lzQ2hlY2tlZF09XCJwZWVyUmV2aWV3ZWQudmFsdWVcIj48L2xpYi1oYmxsLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsLXRleHRcIj5QZWVyIHJldmlld2VkIGpvdXJuYWwgYXJ0aWNsZXM8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwiZXhwYW5kUmVzdWx0c1wiIGNsYXNzPVwiY2hlY2tib3gtc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxoND5Gb3IgTW9yZSBSZXN1bHRzIFRyeTwvaDQ+XG4gICAgICAgICAgICAgICAgPCEtLSBBcHBseSByZWxhdGVkIHdvcmRzIC0tPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCIgZm9yPVwiYXBwbHlSZWxhdGVkV29yZHNcIiB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImFwcGx5UmVsYXRlZFdvcmRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIidhcHBseVJlbGF0ZWRXb3JkcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJhcHBseVJlbGF0ZWRXb3Jkc1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItaGJsbC1jaGVja2JveCBbaXNDaGVja2VkXT1cImFwcGx5UmVsYXRlZFdvcmRzLnZhbHVlXCI+PC9saWItaGJsbC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC10ZXh0XCI+QXBwbHkgcmVsYXRlZCB3b3Jkczwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwhLS0gQXBwbHkgZXF1aXZhbGVudCBzdWJqZWN0cyAtLT5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveC1sYWJlbFwiIGZvcj1cImFwcGx5RXF1aXZhbGVudFN1YmplY3RzXCIgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhcHBseUVxdWl2YWxlbnRTdWJqZWN0c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCInYXBwbHlFcXVpdmFsZW50U3ViamVjdHMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiYXBwbHlFcXVpdmFsZW50U3ViamVjdHNcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8bGliLWhibGwtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpc0NoZWNrZWRdPVwiYXBwbHlFcXVpdmFsZW50U3ViamVjdHMudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9saWItaGJsbC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC10ZXh0XCI+QXBwbHkgZXF1aXZhbGVudCBzdWJqZWN0czwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwhLS0gRnVsbCB0ZXh0IC0tPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCIgZm9yPVwiZnVsbFRleHRcIiB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImZ1bGxUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIidmdWxsVGV4dCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJmdWxsVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItaGJsbC1jaGVja2JveCBbaXNDaGVja2VkXT1cImZ1bGxUZXh0LnZhbHVlXCI+PC9saWItaGJsbC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC10ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5JbmNsdWRlIHJlc3VsdHMgdGhlIGxpYnJhcnkgZG9lc24ndCBoYXZlIGFjY2VzcyB0bzwvc3BhblxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSBEYXRlIC0tPlxuICAgICAgICAgICAgPGRpdiBpZD1cImRhdGVPcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgPGg0PkRhdGUgUHVibGlzaGVkPC9oND5cbiAgICAgICAgICAgICAgICA8bGliLWRhdGUtcmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgW2Zyb21dPVwiZnJvbS52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt0b109XCJ0by52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIChmcm9tQ2hhbmdlKT1cImZyb20uc2V0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICh0b0NoYW5nZSk9XCJ0by5zZXRWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+PC9saWItZGF0ZS1yYW5nZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSBMYW5ndWFnZSAtLT5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGg0Pkxhbmd1YWdlPC9oND5cbiAgICAgICAgICAgICAgICA8bGliLWhibGwtbXVsdGktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInbGFuZ3VhZ2UnXCJcbiAgICAgICAgICAgICAgICAgICAgW2FsbE9wdGlvbnNdPVwiY29uZmlnLmV4dGVybmFsQWR2YW5jZWRTZWFyY2guYXZhaWxhYmxlTGFuZ3VhZ2VzXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkS2V5c109XCJsYW5ndWFnZXMudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRLZXlzQ2hhbmdlKT1cImxhbmd1YWdlcy5zZXRWYWx1ZSgkYW55KCRldmVudCkpXCJcbiAgICAgICAgICAgICAgICA+PC9saWItaGJsbC1tdWx0aS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuICAgIDxkaXYgaWQ9XCJhZHZTZWFyY2hGb290ZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBsaWJIYmxsUGlsbEJ0biBbY29sb3JdPVwiJ2JsdWUnXCIgdHlwZT1cInN1Ym1pdFwiIGRhdGEtdGVzdGlkPVwiYWR2U2VhcmNoU3VibWl0QnV0dG9uXCI+XG4gICAgICAgICAgICBTZWFyY2hcbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=
@@ -8,7 +8,6 @@ export const ADVANCED_SEARCH_QUALIFIER_MAP = {
8
8
  };
9
9
  export const ADVANCED_SEARCH_FIELD_MAP = {
10
10
  abstract: 'Abstract',
11
- allText: 'All Text',
12
11
  any: 'Any Field',
13
12
  callNumber: 'Call Number',
14
13
  contributor: 'Contributor',
@@ -21,6 +20,59 @@ export const ADVANCED_SEARCH_FIELD_MAP = {
21
20
  subject: 'Subject',
22
21
  title: 'Title',
23
22
  };
23
+ export const ADVANCED_SEARCH_QUERIES_LIMIT = 12;
24
+ export const PERIOD_OPTIONS = ['', '1', '2', '5', '10', 'custom'];
25
+ export const ADVANCED_SEARCH_OPTIONS = {
26
+ boolean: ['AND', 'OR', 'NOT'],
27
+ // In SS-api, the EDS key for all fields is `allText`, however this is the default and is never used in the URL, so we omit it here.
28
+ fields: ['any', 'title', 'creator', 'subject', 'issn', 'isbn'],
29
+ localFields: ['callNumber', 'contributor', 'genre', 'series'],
30
+ externalFields: ['source', 'abstract'],
31
+ qualifiers: {
32
+ any: ['contains'],
33
+ title: ['contains', 'exact', 'begins_with', 'index'],
34
+ callNumber: ['contains', 'exact', 'begins_with', 'index'],
35
+ creator: ['contains', 'exact', 'begins_with', 'index'],
36
+ contributor: ['contains', 'exact'],
37
+ isbn: ['contains', 'exact'],
38
+ issn: ['contains', 'exact'],
39
+ genre: ['contains', 'exact'],
40
+ subject: ['contains', 'exact', 'subject_lc', 'subject_expanded'],
41
+ series: ['contains', 'exact'],
42
+ },
43
+ resultsPerPage: ['10', '20', '50', '100'],
44
+ period: PERIOD_OPTIONS,
45
+ languages: [
46
+ 'eng',
47
+ 'ara',
48
+ 'chi',
49
+ 'ces',
50
+ 'dan',
51
+ 'dut',
52
+ 'fin',
53
+ 'fre',
54
+ 'ger',
55
+ 'gre',
56
+ 'heb',
57
+ 'hin',
58
+ 'hun',
59
+ 'ice',
60
+ 'ita',
61
+ 'jpn',
62
+ 'kor',
63
+ 'lat',
64
+ 'nor',
65
+ 'pol',
66
+ 'por',
67
+ 'pan',
68
+ 'rum',
69
+ 'rus',
70
+ 'spa',
71
+ 'swe',
72
+ 'wel',
73
+ 'yid',
74
+ ],
75
+ };
24
76
  export const PRIMARY_BLUE = 'rgba(63, 112, 176, 1)';
25
77
  export const PRIMARY_BLUE_HOVER = 'hsl(214, 48%, 60%, 1)';
26
78
  export const PRIMARY_LIGHT_BLUE = 'rgba(223, 233, 247, 1)';
@@ -38,4 +90,4 @@ export const LINE_HEIGHT_STD = '1.4';
38
90
  export const CONTEXTUAL_SELECTOR_HEIGHT = '4.5rem';
39
91
  export const CONTENT_MAX_WIDTH = '75rem';
40
92
  export const CONTENT_PADDING = '5.4rem';
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL3NzLXNlYXJjaC1iYXIvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHO0lBQ3pDLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFdBQVcsRUFBRSxhQUFhO0lBQzFCLEtBQUssRUFBRSxZQUFZO0lBQ25CLEtBQUssRUFBRSxjQUFjO0lBQ3JCLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLGdCQUFnQixFQUFFLGlCQUFpQjtDQUN0QyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUc7SUFDckMsUUFBUSxFQUFFLFVBQVU7SUFDcEIsT0FBTyxFQUFFLFVBQVU7SUFDbkIsR0FBRyxFQUFFLFdBQVc7SUFDaEIsVUFBVSxFQUFFLGFBQWE7SUFDekIsV0FBVyxFQUFFLGFBQWE7SUFDMUIsT0FBTyxFQUFFLGdCQUFnQjtJQUN6QixLQUFLLEVBQUUsT0FBTztJQUNkLElBQUksRUFBRSxNQUFNO0lBQ1osSUFBSSxFQUFFLE1BQU07SUFDWixNQUFNLEVBQUUsUUFBUTtJQUNoQixNQUFNLEVBQUUsUUFBUTtJQUNoQixPQUFPLEVBQUUsU0FBUztJQUNsQixLQUFLLEVBQUUsT0FBTztDQUNqQixDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLHVCQUF1QixDQUFDO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLHVCQUF1QixDQUFDO0FBQzFELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLHdCQUF3QixDQUFDO0FBQzNELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUM7QUFDeEMsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsU0FBUyxDQUFDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxxQkFBcUIsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxxQkFBcUIsQ0FBQztBQUMzRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyx3QkFBd0IsQ0FBQztBQUM1RCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsd0JBQXdCLENBQUM7QUFDbkQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsd0JBQXdCLENBQUM7QUFDOUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQztBQUNuQyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQztBQUM1QyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLFFBQVEsQ0FBQztBQUNuRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUM7QUFDekMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBBRFZBTkNFRF9TRUFSQ0hfUVVBTElGSUVSX01BUCA9IHtcbiAgICBjb250YWluczogJ2NvbnRhaW5zJyxcbiAgICBiZWdpbnNfd2l0aDogJ2JlZ2lucyB3aXRoJyxcbiAgICBleGFjdDogJ2lzIChleGFjdCknLFxuICAgIGluZGV4OiAnYnJvd3NlIHZhbHVlJyxcbiAgICBzdWJqZWN0X2xjOiAnTEMgYnJvd3NlJyxcbiAgICBzdWJqZWN0X2V4cGFuZGVkOiAnZXhwYW5kZWQgYnJvd3NlJyxcbn07XG5cbmV4cG9ydCBjb25zdCBBRFZBTkNFRF9TRUFSQ0hfRklFTERfTUFQID0ge1xuICAgIGFic3RyYWN0OiAnQWJzdHJhY3QnLFxuICAgIGFsbFRleHQ6ICdBbGwgVGV4dCcsXG4gICAgYW55OiAnQW55IEZpZWxkJyxcbiAgICBjYWxsTnVtYmVyOiAnQ2FsbCBOdW1iZXInLFxuICAgIGNvbnRyaWJ1dG9yOiAnQ29udHJpYnV0b3InLFxuICAgIGNyZWF0b3I6ICdBdXRob3IvQ3JlYXRvcicsXG4gICAgZ2VucmU6ICdHZW5yZScsXG4gICAgaXNibjogJ0lTQk4nLFxuICAgIGlzc246ICdJU1NOJyxcbiAgICBzZXJpZXM6ICdTZXJpZXMnLFxuICAgIHNvdXJjZTogJ1NvdXJjZScsXG4gICAgc3ViamVjdDogJ1N1YmplY3QnLFxuICAgIHRpdGxlOiAnVGl0bGUnLFxufTtcbmV4cG9ydCBjb25zdCBQUklNQVJZX0JMVUUgPSAncmdiYSg2MywgMTEyLCAxNzYsIDEpJztcbmV4cG9ydCBjb25zdCBQUklNQVJZX0JMVUVfSE9WRVIgPSAnaHNsKDIxNCwgNDglLCA2MCUsIDEpJztcbmV4cG9ydCBjb25zdCBQUklNQVJZX0xJR0hUX0JMVUUgPSAncmdiYSgyMjMsIDIzMywgMjQ3LCAxKSc7XG5leHBvcnQgY29uc3QgUFJJTUFSWV9QVVJQTEUgPSAnIzg3NzJBNic7XG5leHBvcnQgY29uc3QgUFJJTUFSWV9QVVJQTEVfSE9WRVIgPSAnIzdDNjU5Ric7XG5leHBvcnQgY29uc3QgREVTVFJVQ1RJVkVfUkVEID0gJ2hzbCg1LCA0NyUsIDQ3JSwgMSknO1xuZXhwb3J0IGNvbnN0IERFU1RSVUNUSVZFX1JFRF9IT1ZFUiA9ICdoc2woNSwgNDclLCA1MCUsIDEpJztcbmV4cG9ydCBjb25zdCBTRUNPTkRBUllfVEVYVF9HUkFZID0gJ3JnYmEoMTEyLCAxMTIsIDExMiwgMSknO1xuZXhwb3J0IGNvbnN0IExJR0hUX0dSQVkgPSAncmdiYSgyMzAsIDIzMCwgMjMwLCAxKSc7XG5leHBvcnQgY29uc3QgRFJPUF9TSEFET1dfREFSS19CTFVFID0gJ3JnYmEoNTEsIDYyLCA3NywgMC4xNiknO1xuZXhwb3J0IGNvbnN0IFRFWFRfU0VNSUJPTEQgPSAnNjAwJztcbmV4cG9ydCBjb25zdCBURVhUX0JPTEQgPSAnNzAwJztcbmV4cG9ydCBjb25zdCBBTklNQVRJT05fTEVOR1RIX1NURCA9ICcwLjE1cyc7XG5leHBvcnQgY29uc3QgTElORV9IRUlHSFRfU1REID0gJzEuNCc7XG5leHBvcnQgY29uc3QgQ09OVEVYVFVBTF9TRUxFQ1RPUl9IRUlHSFQgPSAnNC41cmVtJztcbmV4cG9ydCBjb25zdCBDT05URU5UX01BWF9XSURUSCA9ICc3NXJlbSc7XG5leHBvcnQgY29uc3QgQ09OVEVOVF9QQURESU5HID0gJzUuNHJlbSc7XG4iXX0=
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL3NzLXNlYXJjaC1iYXIvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHO0lBQ3pDLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFdBQVcsRUFBRSxhQUFhO0lBQzFCLEtBQUssRUFBRSxZQUFZO0lBQ25CLEtBQUssRUFBRSxjQUFjO0lBQ3JCLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLGdCQUFnQixFQUFFLGlCQUFpQjtDQUN0QyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUc7SUFDckMsUUFBUSxFQUFFLFVBQVU7SUFDcEIsR0FBRyxFQUFFLFdBQVc7SUFDaEIsVUFBVSxFQUFFLGFBQWE7SUFDekIsV0FBVyxFQUFFLGFBQWE7SUFDMUIsT0FBTyxFQUFFLGdCQUFnQjtJQUN6QixLQUFLLEVBQUUsT0FBTztJQUNkLElBQUksRUFBRSxNQUFNO0lBQ1osSUFBSSxFQUFFLE1BQU07SUFDWixNQUFNLEVBQUUsUUFBUTtJQUNoQixNQUFNLEVBQUUsUUFBUTtJQUNoQixPQUFPLEVBQUUsU0FBUztJQUNsQixLQUFLLEVBQUUsT0FBTztDQUNqQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsRUFBRSxDQUFDO0FBRWhELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFVLENBQUM7QUFFM0UsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUc7SUFDbkMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUM7SUFDN0Isb0lBQW9JO0lBQ3BJLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFP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Y29uc3QgQURWQU5DRURfU0VBUkNIX1FVQUxJRklFUl9NQVAgPSB7XG4gICAgY29udGFpbnM6ICdjb250YWlucycsXG4gICAgYmVnaW5zX3dpdGg6ICdiZWdpbnMgd2l0aCcsXG4gICAgZXhhY3Q6ICdpcyAoZXhhY3QpJyxcbiAgICBpbmRleDogJ2Jyb3dzZSB2YWx1ZScsXG4gICAgc3ViamVjdF9sYzogJ0xDIGJyb3dzZScsXG4gICAgc3ViamVjdF9leHBhbmRlZDogJ2V4cGFuZGVkIGJyb3dzZScsXG59O1xuXG5leHBvcnQgY29uc3QgQURWQU5DRURfU0VBUkNIX0ZJRUxEX01BUCA9IHtcbiAgICBhYnN0cmFjdDogJ0Fic3RyYWN0JyxcbiAgICBhbnk6ICdBbnkgRmllbGQnLFxuICAgIGNhbGxOdW1iZXI6ICdDYWxsIE51bWJlcicsXG4gICAgY29udHJpYnV0b3I6ICdDb250cmlidXRvcicsXG4gICAgY3JlYXRvcjogJ0F1dGhvci9DcmVhdG9yJyxcbiAgICBnZW5yZTogJ0dlbnJlJyxcbiAgICBpc2JuOiAnSVNCTicsXG4gICAgaXNzbjogJ0lTU04nLFxuICAgIHNlcmllczogJ1NlcmllcycsXG4gICAgc291cmNlOiAnU291cmNlJyxcbiAgICBzdWJqZWN0OiAnU3ViamVjdCcsXG4gICAgdGl0bGU6ICdUaXRsZScsXG59O1xuXG5leHBvcnQgY29uc3QgQURWQU5DRURfU0VBUkNIX1FVRVJJRVNfTElNSVQgPSAxMjtcblxuZXhwb3J0IGNvbnN0IFBFUklPRF9PUFRJT05TID0gWycnLCAnMScsICcyJywgJzUnLCAnMTAnLCAnY3VzdG9tJ10gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBBRFZBTkNFRF9TRUFSQ0hfT1BUSU9OUyA9IHtcbiAgICBib29sZWFuOiBbJ0FORCcsICdPUicsICdOT1QnXSxcbiAgICAvLyBJbiBTUy1hcGksIHRoZSBFRFMga2V5IGZvciBhbGwgZmllbGRzIGlzIGBhbGxUZXh0YCwgaG93ZXZlciB0aGlzIGlzIHRoZSBkZWZhdWx0IGFuZCBpcyBuZXZlciB1c2VkIGluIHRoZSBVUkwsIHNvIHdlIG9taXQgaXQgaGVyZS5cbiAgICBmaWVsZHM6IFsnYW55JywgJ3RpdGxlJywgJ2NyZWF0b3InLCAnc3ViamVjdCcsICdpc3NuJywgJ2lzYm4nXSxcbiAgICBsb2NhbEZpZWxkczogWydjYWxsTnVtYmVyJywgJ2NvbnRyaWJ1dG9yJywgJ2dlbnJlJywgJ3NlcmllcyddLFxuICAgIGV4dGVybmFsRmllbGRzOiBbJ3NvdXJjZScsICdhYnN0cmFjdCddLFxuICAgIHF1YWxpZmllcnM6IHtcbiAgICAgICAgYW55OiBbJ2NvbnRhaW5zJ10sXG4gICAgICAgIHRpdGxlOiBbJ2NvbnRhaW5zJywgJ2V4YWN0JywgJ2JlZ2luc193aXRoJywgJ2luZGV4J10sXG4gICAgICAgIGNhbGxOdW1iZXI6IFsnY29udGFpbnMnLCAnZXhhY3QnLCAnYmVnaW5zX3dpdGgnLCAnaW5kZXgnXSxcbiAgICAgICAgY3JlYXRvcjogWydjb250YWlucycsICdleGFjdCcsICdiZWdpbnNfd2l0aCcsICdpbmRleCddLFxuICAgICAgICBjb250cmlidXRvcjogWydjb250YWlucycsICdleGFjdCddLFxuICAgICAgICBpc2JuOiBbJ2NvbnRhaW5zJywgJ2V4YWN0J10sXG4gICAgICAgIGlzc246IFsnY29udGFpbnMnLCAnZXhhY3QnXSxcbiAgICAgICAgZ2VucmU6IFsnY29udGFpbnMnLCAnZXhhY3QnXSxcbiAgICAgICAgc3ViamVjdDogWydjb250YWlucycsICdleGFjdCcsICdzdWJqZWN0X2xjJywgJ3N1YmplY3RfZXhwYW5kZWQnXSxcbiAgICAgICAgc2VyaWVzOiBbJ2NvbnRhaW5zJywgJ2V4YWN0J10sXG4gICAgfSxcbiAgICByZXN1bHRzUGVyUGFnZTogWycxMCcsICcyMCcsICc1MCcsICcxMDAnXSxcbiAgICBwZXJpb2Q6IFBFUklPRF9PUFRJT05TLFxuICAgIGxhbmd1YWdlczogW1xuICAgICAgICAnZW5nJyxcbiAgICAgICAgJ2FyYScsXG4gICAgICAgICdjaGknLFxuICAgICAgICAnY2VzJyxcbiAgICAgICAgJ2RhbicsXG4gICAgICAgICdkdXQnLFxuICAgICAgICAnZmluJyxcbiAgICAgICAgJ2ZyZScsXG4gICAgICAgICdnZXInLFxuICAgICAgICAnZ3JlJyxcbiAgICAgICAgJ2hlYicsXG4gICAgICAgICdoaW4nLFxuICAgICAgICAnaHVuJyxcbiAgICAgICAgJ2ljZScsXG4gICAgICAgICdpdGEnLFxuICAgICAgICAnanBuJyxcbiAgICAgICAgJ2tvcicsXG4gICAgICAgICdsYXQnLFxuICAgICAgICAnbm9yJyxcbiAgICAgICAgJ3BvbCcsXG4gICAgICAgICdwb3InLFxuICAgICAgICAncGFuJyxcbiAgICAgICAgJ3J1bScsXG4gICAgICAgICdydXMnLFxuICAgICAgICAnc3BhJyxcbiAgICAgICAgJ3N3ZScsXG4gICAgICAgICd3ZWwnLFxuICAgICAgICAneWlkJyxcbiAgICBdLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IFBSSU1BUllfQkxVRSA9ICdyZ2JhKDYzLCAxMTIsIDE3NiwgMSknO1xuZXhwb3J0IGNvbnN0IFBSSU1BUllfQkxVRV9IT1ZFUiA9ICdoc2woMjE0LCA0OCUsIDYwJSwgMSknO1xuZXhwb3J0IGNvbnN0IFBSSU1BUllfTElHSFRfQkxVRSA9ICdyZ2JhKDIyMywgMjMzLCAyNDcsIDEpJztcbmV4cG9ydCBjb25zdCBQUklNQVJZX1BVUlBMRSA9ICcjODc3MkE2JztcbmV4cG9ydCBjb25zdCBQUklNQVJZX1BVUlBMRV9IT1ZFUiA9ICcjN0M2NTlGJztcbmV4cG9ydCBjb25zdCBERVNUUlVDVElWRV9SRUQgPSAnaHNsKDUsIDQ3JSwgNDclLCAxKSc7XG5leHBvcnQgY29uc3QgREVTVFJVQ1RJVkVfUkVEX0hPVkVSID0gJ2hzbCg1LCA0NyUsIDUwJSwgMSknO1xuZXhwb3J0IGNvbnN0IFNFQ09OREFSWV9URVhUX0dSQVkgPSAncmdiYSgxMTIsIDExMiwgMTEyLCAxKSc7XG5leHBvcnQgY29uc3QgTElHSFRfR1JBWSA9ICdyZ2JhKDIzMCwgMjMwLCAyMzAsIDEpJztcbmV4cG9ydCBjb25zdCBEUk9QX1NIQURPV19EQVJLX0JMVUUgPSAncmdiYSg1MSwgNjIsIDc3LCAwLjE2KSc7XG5leHBvcnQgY29uc3QgVEVYVF9TRU1JQk9MRCA9ICc2MDAnO1xuZXhwb3J0IGNvbnN0IFRFWFRfQk9MRCA9ICc3MDAnO1xuZXhwb3J0IGNvbnN0IEFOSU1BVElPTl9MRU5HVEhfU1REID0gJzAuMTVzJztcbmV4cG9ydCBjb25zdCBMSU5FX0hFSUdIVF9TVEQgPSAnMS40JztcbmV4cG9ydCBjb25zdCBDT05URVhUVUFMX1NFTEVDVE9SX0hFSUdIVCA9ICc0LjVyZW0nO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfTUFYX1dJRFRIID0gJzc1cmVtJztcbmV4cG9ydCBjb25zdCBDT05URU5UX1BBRERJTkcgPSAnNS40cmVtJztcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ import { ADVANCED_SEARCH_OPTIONS } from '../constants';
2
+ export const isAdvancedSearchFieldOption = (field) => [...ADVANCED_SEARCH_OPTIONS.fields].includes(field);
3
+ export const isAdvancedSearchLocalFieldOption = (field) => ADVANCED_SEARCH_OPTIONS.localFields.includes(field);
4
+ export const isAdvancedSearchExternalFieldOption = (field) => ADVANCED_SEARCH_OPTIONS.externalFields.includes(field);
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtc2VhcmNoLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL3NzLXNlYXJjaC1iYXIvbW9kZWxzL2FkdmFuY2VkLXNlYXJjaC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFNdkQsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FDdkMsS0FBYSxFQUMwQixFQUFFLENBQ3pDLENBQUMsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBa0MsQ0FBQyxDQUFDO0FBSXJGLE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLENBQzVDLEtBQWEsRUFDMEIsRUFBRSxDQUN6Qyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQXVDLENBQUMsQ0FBQztBQUsxRixNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRyxDQUMvQyxLQUFhLEVBQzZCLEVBQUUsQ0FDNUMsdUJBQXVCLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUEwQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBRFZBTkNFRF9TRUFSQ0hfT1BUSU9OUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCB0eXBlIEFkdmFuY2VkU2VhcmNoQm9vbGVhbk9wdGlvbiA9ICh0eXBlb2YgQURWQU5DRURfU0VBUkNIX09QVElPTlMuYm9vbGVhbilbbnVtYmVyXTtcblxuZXhwb3J0IHR5cGUgQWR2YW5jZWRTZWFyY2hGaWVsZE9wdGlvbiA9ICh0eXBlb2YgQURWQU5DRURfU0VBUkNIX09QVElPTlMuZmllbGRzKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgaXNBZHZhbmNlZFNlYXJjaEZpZWxkT3B0aW9uID0gKFxuICAgIGZpZWxkOiBzdHJpbmcsXG4pOiBmaWVsZCBpcyBBZHZhbmNlZFNlYXJjaExvY2FsRmllbGRPcHRpb24gPT5cbiAgICBbLi4uQURWQU5DRURfU0VBUkNIX09QVElPTlMuZmllbGRzXS5pbmNsdWRlcyhmaWVsZCBhcyBBZHZhbmNlZFNlYXJjaEZpZWxkT3B0aW9uKTtcblxuZXhwb3J0IHR5cGUgQWR2YW5jZWRTZWFyY2hMb2NhbEZpZWxkT3B0aW9uID0gKHR5cGVvZiBBRFZBTkNFRF9TRUFSQ0hfT1BUSU9OUy5sb2NhbEZpZWxkcylbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IGlzQWR2YW5jZWRTZWFyY2hMb2NhbEZpZWxkT3B0aW9uID0gKFxuICAgIGZpZWxkOiBzdHJpbmcsXG4pOiBmaWVsZCBpcyBBZHZhbmNlZFNlYXJjaExvY2FsRmllbGRPcHRpb24gPT5cbiAgICBBRFZBTkNFRF9TRUFSQ0hfT1BUSU9OUy5sb2NhbEZpZWxkcy5pbmNsdWRlcyhmaWVsZCBhcyBBZHZhbmNlZFNlYXJjaExvY2FsRmllbGRPcHRpb24pO1xuXG5leHBvcnQgdHlwZSBBZHZhbmNlZFNlYXJjaEV4dGVybmFsRmllbGRPcHRpb24gPVxuICAgICh0eXBlb2YgQURWQU5DRURfU0VBUkNIX09QVElPTlMuZXh0ZXJuYWxGaWVsZHMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBpc0FkdmFuY2VkU2VhcmNoRXh0ZXJuYWxGaWVsZE9wdGlvbiA9IChcbiAgICBmaWVsZDogc3RyaW5nLFxuKTogZmllbGQgaXMgQWR2YW5jZWRTZWFyY2hFeHRlcm5hbEZpZWxkT3B0aW9uID0+XG4gICAgQURWQU5DRURfU0VBUkNIX09QVElPTlMuZXh0ZXJuYWxGaWVsZHMuaW5jbHVkZXMoZmllbGQgYXMgQWR2YW5jZWRTZWFyY2hFeHRlcm5hbEZpZWxkT3B0aW9uKTtcblxuZXhwb3J0IHR5cGUgQWR2YW5jZWRTZWFyY2hRdWFsaWZpZXJPcHRpb24gPVxuICAgICh0eXBlb2YgQURWQU5DRURfU0VBUkNIX09QVElPTlMucXVhbGlmaWVycylba2V5b2YgdHlwZW9mIEFEVkFOQ0VEX1NFQVJDSF9PUFRJT05TLnF1YWxpZmllcnNdW251bWJlcl07XG5cbmV4cG9ydCB0eXBlIEFkdmFuY2VkU2VhcmNoUmVzdWx0c1BlclBhZ2VPcHRpb24gPVxuICAgICh0eXBlb2YgQURWQU5DRURfU0VBUkNIX09QVElPTlMucmVzdWx0c1BlclBhZ2UpW251bWJlcl07XG5cbmV4cG9ydCB0eXBlIEFkdmFuY2VkU2VhcmNoTGFuZ3VhZ2VPcHRpb24gPSAodHlwZW9mIEFEVkFOQ0VEX1NFQVJDSF9PUFRJT05TLmxhbmd1YWdlcylbbnVtYmVyXTtcblxuZXhwb3J0IHR5cGUgQWR2YW5jZWRTZWFyY2hRdWFsaWZpZXIgPSBrZXlvZiB0eXBlb2YgQURWQU5DRURfU0VBUkNIX09QVElPTlMucXVhbGlmaWVycztcblxuZXhwb3J0IGludGVyZmFjZSBBZHZhbmNlZFNlYXJjaFF1ZXJ5Um93IHtcbiAgICBib29sZWFuPzogQWR2YW5jZWRTZWFyY2hCb29sZWFuT3B0aW9uO1xuICAgIGZpZWxkPzpcbiAgICAgICAgfCBBZHZhbmNlZFNlYXJjaEZpZWxkT3B0aW9uXG4gICAgICAgIHwgQWR2YW5jZWRTZWFyY2hMb2NhbEZpZWxkT3B0aW9uXG4gICAgICAgIHwgQWR2YW5jZWRTZWFyY2hFeHRlcm5hbEZpZWxkT3B0aW9uO1xuICAgIHF1YWxpZmllcj86IEFkdmFuY2VkU2VhcmNoUXVhbGlmaWVyT3B0aW9uO1xuICAgIHF1ZXJ5OiBzdHJpbmc7XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLXNjb3BlLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL3NzLXNlYXJjaC1iYXIvbW9kZWxzL3NlYXJjaC1zY29wZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgU2VhcmNoU2NvcGUgPSAnbG9jYWwnIHwgJ2V4dGVybmFsJztcbiJdfQ==
@@ -0,0 +1,34 @@
1
+ import { Pipe } from '@angular/core';
2
+ import { ADVANCED_SEARCH_FIELD_MAP } from '../constants';
3
+ import { isAdvancedSearchExternalFieldOption, isAdvancedSearchFieldOption, isAdvancedSearchLocalFieldOption, } from '../models/advanced-search.model';
4
+ import * as i0 from "@angular/core";
5
+ export class AdvancedFieldWarningPipe {
6
+ transform(queryRows, scope) {
7
+ let warning = '';
8
+ queryRows.forEach((row) => {
9
+ if (row.field &&
10
+ !isAdvancedSearchFieldOption(row.field) &&
11
+ (scope === 'local'
12
+ ? !isAdvancedSearchLocalFieldOption(row.field)
13
+ : !isAdvancedSearchExternalFieldOption(row.field))) {
14
+ if (!warning)
15
+ warning = `Searching by <b>${ADVANCED_SEARCH_FIELD_MAP[row.field]}</b> is not an option for this tab. <b>${ADVANCED_SEARCH_FIELD_MAP['any']}</b> has replaced it.`;
16
+ else {
17
+ warning += '<br />All other unavailable options have also been replaced.';
18
+ return;
19
+ }
20
+ }
21
+ });
22
+ return warning;
23
+ }
24
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AdvancedFieldWarningPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
25
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.1.0", ngImport: i0, type: AdvancedFieldWarningPipe, isStandalone: true, name: "advancedFieldWarning" }); }
26
+ }
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AdvancedFieldWarningPipe, decorators: [{
28
+ type: Pipe,
29
+ args: [{
30
+ name: 'advancedFieldWarning',
31
+ standalone: true,
32
+ }]
33
+ }] });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtZmllbGQtd2FybmluZy5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL3NzLXNlYXJjaC1iYXIvcGlwZXMvYWR2YW5jZWQtZmllbGQtd2FybmluZy5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6RCxPQUFPLEVBRUgsbUNBQW1DLEVBQ25DLDJCQUEyQixFQUMzQixnQ0FBZ0MsR0FDbkMsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFPekMsTUFBTSxPQUFPLHdCQUF3QjtJQUNqQyxTQUFTLENBQUMsU0FBbUMsRUFBRSxLQUFrQjtRQUM3RCxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDakIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3RCLElBQ0ksR0FBRyxDQUFDLEtBQUs7Z0JBQ1QsQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsS0FBZSxDQUFDO2dCQUNqRCxDQUFDLEtBQUssS0FBSyxPQUFPO29CQUNkLENBQUMsQ0FBQyxDQUFDLGdDQUFnQyxDQUFDLEdBQUcsQ0FBQyxLQUFlLENBQUM7b0JBQ3hELENBQUMsQ0FBQyxDQUFDLG1DQUFtQyxDQUFDLEdBQUcsQ0FBQyxLQUFlLENBQUMsQ0FBQyxFQUNsRSxDQUFDO2dCQUNDLElBQUksQ0FBQyxPQUFPO29CQUNSLE9BQU8sR0FBRyxtQkFDTix5QkFBeUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUN2QywwQ0FDSSx5QkFBeUIsQ0FBQyxLQUFLLENBQ25DLHVCQUF1QixDQUFDO3FCQUN2QixDQUFDO29CQUNGLE9BQU8sSUFBSSw4REFBOEQsQ0FBQztvQkFDMUUsT0FBTztnQkFDWCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQzs4R0F4QlEsd0JBQXdCOzRHQUF4Qix3QkFBd0I7OzJGQUF4Qix3QkFBd0I7a0JBSnBDLElBQUk7bUJBQUM7b0JBQ0YsSUFBSSxFQUFFLHNCQUFzQjtvQkFDNUIsVUFBVSxFQUFFLElBQUk7aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQURWQU5DRURfU0VBUkNIX0ZJRUxEX01BUCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIEFkdmFuY2VkU2VhcmNoUXVlcnlSb3csXG4gICAgaXNBZHZhbmNlZFNlYXJjaEV4dGVybmFsRmllbGRPcHRpb24sXG4gICAgaXNBZHZhbmNlZFNlYXJjaEZpZWxkT3B0aW9uLFxuICAgIGlzQWR2YW5jZWRTZWFyY2hMb2NhbEZpZWxkT3B0aW9uLFxufSBmcm9tICcuLi9tb2RlbHMvYWR2YW5jZWQtc2VhcmNoLm1vZGVsJztcbmltcG9ydCB7IFNlYXJjaFNjb3BlIH0gZnJvbSAnLi4vbW9kZWxzL3NlYXJjaC1zY29wZS5tb2RlbCc7XG5cbkBQaXBlKHtcbiAgICBuYW1lOiAnYWR2YW5jZWRGaWVsZFdhcm5pbmcnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkRmllbGRXYXJuaW5nUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybShxdWVyeVJvd3M6IEFkdmFuY2VkU2VhcmNoUXVlcnlSb3dbXSwgc2NvcGU6IFNlYXJjaFNjb3BlKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHdhcm5pbmcgPSAnJztcbiAgICAgICAgcXVlcnlSb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHJvdy5maWVsZCAmJlxuICAgICAgICAgICAgICAgICFpc0FkdmFuY2VkU2VhcmNoRmllbGRPcHRpb24ocm93LmZpZWxkIGFzIHN0cmluZykgJiZcbiAgICAgICAgICAgICAgICAoc2NvcGUgPT09ICdsb2NhbCdcbiAgICAgICAgICAgICAgICAgICAgPyAhaXNBZHZhbmNlZFNlYXJjaExvY2FsRmllbGRPcHRpb24ocm93LmZpZWxkIGFzIHN0cmluZylcbiAgICAgICAgICAgICAgICAgICAgOiAhaXNBZHZhbmNlZFNlYXJjaEV4dGVybmFsRmllbGRPcHRpb24ocm93LmZpZWxkIGFzIHN0cmluZykpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAoIXdhcm5pbmcpXG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgPSBgU2VhcmNoaW5nIGJ5IDxiPiR7XG4gICAgICAgICAgICAgICAgICAgICAgICBBRFZBTkNFRF9TRUFSQ0hfRklFTERfTUFQW3Jvdy5maWVsZF1cbiAgICAgICAgICAgICAgICAgICAgfTwvYj4gaXMgbm90IGFuIG9wdGlvbiBmb3IgdGhpcyB0YWIuIDxiPiR7XG4gICAgICAgICAgICAgICAgICAgICAgICBBRFZBTkNFRF9TRUFSQ0hfRklFTERfTUFQWydhbnknXVxuICAgICAgICAgICAgICAgICAgICB9PC9iPiBoYXMgcmVwbGFjZWQgaXQuYDtcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgd2FybmluZyArPSAnPGJyIC8+QWxsIG90aGVyIHVuYXZhaWxhYmxlIG9wdGlvbnMgaGF2ZSBhbHNvIGJlZW4gcmVwbGFjZWQuJztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB3YXJuaW5nO1xuICAgIH1cbn1cbiJdfQ==