@byuhbll/components 4.0.0-alpha.9 → 4.0.0
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.
- package/esm2022/lib/animations/animations.mjs +5 -5
- package/esm2022/lib/checkbox/checkbox.component.mjs +15 -0
- package/esm2022/lib/contact-utils.mjs +41 -0
- package/esm2022/lib/copy-tooltip/copy-tooltip.component.mjs +3 -3
- package/esm2022/lib/expand-collapse/expand-collapse.component.mjs +3 -3
- package/esm2022/lib/hbll-footer/hbll-footer.component.mjs +98 -0
- package/esm2022/lib/hbll-header/hbll-header.component.mjs +30 -25
- package/esm2022/lib/hbll-header/nav-bar/nav-bar.component.mjs +255 -229
- package/esm2022/lib/hbll-header/nav-bar-dropdown/nav-bar-dropdown.component.mjs +3 -3
- package/esm2022/lib/header-with-impersonation/header-with-impersonation.component.mjs +39 -0
- package/esm2022/lib/impersonate-modal/impersonate-modal.component.mjs +190 -0
- package/esm2022/lib/impersonation-banner/impersonation-banner.component.mjs +128 -0
- package/esm2022/lib/impersonation-banner/models/application-access.mjs +7 -0
- package/esm2022/lib/impersonation-banner/models/person-summary.mjs +15 -0
- package/esm2022/lib/models/token-payload.mjs +2 -0
- package/esm2022/lib/multi-select/multi-select.component.mjs +115 -0
- package/esm2022/lib/pipes/hbll-item-type-icon.pipe.mjs +128 -0
- package/esm2022/lib/ss-search-bar/advanced-search/advanced-search.component.mjs +5 -5
- package/esm2022/lib/ss-search-bar/date-range/date-range.component.mjs +3 -3
- package/esm2022/lib/ss-search-bar/ss-search-bar.component.mjs +3 -3
- package/esm2022/lib/utils.mjs +2 -3
- package/esm2022/public-api.mjs +7 -2
- package/fesm2022/byuhbll-components.mjs +794 -471
- package/fesm2022/byuhbll-components.mjs.map +1 -1
- package/lib/{hbll-checkbox/hbll-checkbox.component.d.ts → checkbox/checkbox.component.d.ts} +1 -1
- package/lib/contact-utils.d.ts +19 -0
- package/lib/hbll-footer/hbll-footer.component.d.ts +30 -0
- package/lib/hbll-header/hbll-header.component.d.ts +12 -16
- package/lib/hbll-header/nav-bar/nav-bar.component.d.ts +5 -3
- package/lib/header-with-impersonation/header-with-impersonation.component.d.ts +20 -0
- package/lib/{hbll-header/impersonate-modal → impersonate-modal}/impersonate-modal.component.d.ts +3 -1
- package/lib/{hbll-impersonation-banner/hbll-impersonation-banner.component.d.ts → impersonation-banner/impersonation-banner.component.d.ts} +8 -7
- package/lib/{hbll-multi-select/hbll-multi-select.component.d.ts → multi-select/multi-select.component.d.ts} +1 -1
- package/lib/pipes/hbll-item-type-icon.pipe.d.ts +17 -0
- package/lib/ss-search-bar/advanced-search/advanced-search.component.d.ts +4 -1
- package/package.json +1 -1
- package/public-api.d.ts +6 -1
- package/styles/scss/_mixins.scss +1 -1
- package/styles/scss/_vars.scss +1 -0
- package/styles/scss/base.scss +1 -2
- package/styles/scss/shared.scss +8 -0
- package/esm2022/lib/hbll-checkbox/hbll-checkbox.component.mjs +0 -15
- package/esm2022/lib/hbll-header/impersonate-modal/impersonate-modal.component.mjs +0 -188
- package/esm2022/lib/hbll-header/models/application-access.mjs +0 -7
- package/esm2022/lib/hbll-header/models/person-summary.mjs +0 -15
- package/esm2022/lib/hbll-header/models/token-payload.mjs +0 -2
- package/esm2022/lib/hbll-impersonation-banner/hbll-impersonation-banner.component.mjs +0 -129
- package/esm2022/lib/hbll-multi-select/hbll-multi-select.component.mjs +0 -115
- /package/lib/{hbll-header → impersonation-banner}/models/application-access.d.ts +0 -0
- /package/lib/{hbll-header → impersonation-banner}/models/person-summary.d.ts +0 -0
- /package/lib/{hbll-header/models → models}/token-payload.d.ts +0 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
const typeToIconMap = {
|
|
4
|
+
archive: 'inventory_2',
|
|
5
|
+
article: 'article',
|
|
6
|
+
audio: 'mic',
|
|
7
|
+
audiobook: 'mic',
|
|
8
|
+
'blu-ray': 'album',
|
|
9
|
+
book: 'book_4',
|
|
10
|
+
'book-chapter': 'book_6',
|
|
11
|
+
'book-review': 'reviews',
|
|
12
|
+
broadside: 'image',
|
|
13
|
+
calculator: 'calculate',
|
|
14
|
+
cassette: 'album',
|
|
15
|
+
cd: 'album',
|
|
16
|
+
'cd-rom': 'album',
|
|
17
|
+
clothing: 'album',
|
|
18
|
+
'clothing-pattern': 'album',
|
|
19
|
+
collection: 'library_books',
|
|
20
|
+
conference: 'podium',
|
|
21
|
+
'conference-proceeding': 'podium',
|
|
22
|
+
cuneiform: 'aod_tablet',
|
|
23
|
+
curricula: 'aod_tablet',
|
|
24
|
+
database: 'database',
|
|
25
|
+
dataset: 'dataset',
|
|
26
|
+
diary: 'book_2',
|
|
27
|
+
dissertation: 'school',
|
|
28
|
+
dvd: 'album',
|
|
29
|
+
ebook: 'two_pager',
|
|
30
|
+
ebookreader: 'chrome_reader_mode',
|
|
31
|
+
ejournal: 'two_pager',
|
|
32
|
+
'electronic-resource': 'description',
|
|
33
|
+
equipment: 'service_toolbox',
|
|
34
|
+
filmstrip: 'theaters',
|
|
35
|
+
'finding-aid': 'travel_explore',
|
|
36
|
+
'government-document': 'travel_explore',
|
|
37
|
+
'government-novel': 'book_4',
|
|
38
|
+
guide: 'travel_explore',
|
|
39
|
+
image: 'image',
|
|
40
|
+
index: 'list',
|
|
41
|
+
journal: 'book_2',
|
|
42
|
+
'juv-book': 'book_4',
|
|
43
|
+
kit: 'home_repair_service',
|
|
44
|
+
laserdisc: 'album',
|
|
45
|
+
'legal-document': 'gavel',
|
|
46
|
+
letter: 'mail',
|
|
47
|
+
magazine: 'newsmode',
|
|
48
|
+
manuscript: 'article',
|
|
49
|
+
'manuscript-archive': 'inventory_2',
|
|
50
|
+
map: 'map',
|
|
51
|
+
media: 'play_circle',
|
|
52
|
+
microfiche: 'theaters',
|
|
53
|
+
microfilm: 'theaters',
|
|
54
|
+
microform: 'theaters',
|
|
55
|
+
model: 'modeling',
|
|
56
|
+
movie: 'movie',
|
|
57
|
+
multimedia: 'play_circle',
|
|
58
|
+
'music-recording': 'album',
|
|
59
|
+
'musical-recording': 'play_circle',
|
|
60
|
+
newsletter: 'article',
|
|
61
|
+
newspaper: 'newspaper',
|
|
62
|
+
'newspaper-article': 'newspaper',
|
|
63
|
+
ostracon: 'description',
|
|
64
|
+
other: 'description',
|
|
65
|
+
painting: 'palette',
|
|
66
|
+
palmleaf: 'eco',
|
|
67
|
+
pamphlet: 'article',
|
|
68
|
+
papyrus: 'article',
|
|
69
|
+
performance: 'music_note',
|
|
70
|
+
periodical: 'article',
|
|
71
|
+
photograph: 'image',
|
|
72
|
+
picture: 'image',
|
|
73
|
+
poem: 'article',
|
|
74
|
+
poster: 'image',
|
|
75
|
+
presentation: 'slideshow',
|
|
76
|
+
'primary-source': 'inventory_2',
|
|
77
|
+
'primary-source-document': 'article',
|
|
78
|
+
record: 'album',
|
|
79
|
+
'reel-to-reel': 'video_camera_back',
|
|
80
|
+
'reference-entry': 'article',
|
|
81
|
+
report: 'summarize',
|
|
82
|
+
'research-data-set': 'dataset',
|
|
83
|
+
review: 'summarize',
|
|
84
|
+
score: 'music_note',
|
|
85
|
+
script: 'article',
|
|
86
|
+
serial: 'article',
|
|
87
|
+
slide: 'slideshow',
|
|
88
|
+
software: 'terminal',
|
|
89
|
+
'sound-recording': 'mic',
|
|
90
|
+
standards: 'article',
|
|
91
|
+
'statistical-data-set': 'dataset',
|
|
92
|
+
'streaming-audio': 'play_circle',
|
|
93
|
+
'streaming-media': 'play_circle',
|
|
94
|
+
'streaming-video': 'play_circle',
|
|
95
|
+
'student-project': 'article',
|
|
96
|
+
'technical-report': 'summarize',
|
|
97
|
+
'text-resource': 'summarize',
|
|
98
|
+
unknown: 'article',
|
|
99
|
+
vhs: 'theaters',
|
|
100
|
+
video: 'movie',
|
|
101
|
+
website: 'globe',
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* Converts an item type to an icon type to be used with Google Material Icons
|
|
105
|
+
*
|
|
106
|
+
* Intended to be used with an imported font, such as: `<link
|
|
107
|
+
rel="stylesheet"
|
|
108
|
+
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,1,0"
|
|
109
|
+
/>`
|
|
110
|
+
*
|
|
111
|
+
* Reference: https://fonts.google.com/icons?selected=Material+Symbols+Outlined:inventory_2:FILL@0;wght@400;GRAD@0;opsz@24&icon.query=invent&icon.size=24&icon.color=%235f6368
|
|
112
|
+
*/
|
|
113
|
+
export class HbllItemTypeIconPipe {
|
|
114
|
+
transform(itemType) {
|
|
115
|
+
const type = itemType.replace(/_/g, '-').toLowerCase();
|
|
116
|
+
return typeToIconMap[type] ?? 'article';
|
|
117
|
+
}
|
|
118
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: HbllItemTypeIconPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
119
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.1.0", ngImport: i0, type: HbllItemTypeIconPipe, isStandalone: true, name: "libByuItemTypeIcon" }); }
|
|
120
|
+
}
|
|
121
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: HbllItemTypeIconPipe, decorators: [{
|
|
122
|
+
type: Pipe,
|
|
123
|
+
args: [{
|
|
124
|
+
name: 'libByuItemTypeIcon',
|
|
125
|
+
standalone: true,
|
|
126
|
+
}]
|
|
127
|
+
}] });
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGJsbC1pdGVtLXR5cGUtaWNvbi5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL3BpcGVzL2hibGwtaXRlbS10eXBlLWljb24ucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFzQixNQUFNLGVBQWUsQ0FBQzs7QUFFekQsTUFBTSxhQUFhLEdBQUc7SUFDbEIsT0FBTyxFQUFFLGFBQWE7SUFDdEIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsS0FBSyxFQUFFLEtBQUs7SUFDWixTQUFTLEVBQUUsS0FBSztJQUNoQixTQUFTLEVBQUUsT0FBTztJQUNsQixJQUFJLEVBQUUsUUFBUTtJQUNkLGNBQWMsRUFBRSxRQUFRO0lBQ3hCLGFBQWEsRUFBRSxTQUFTO0lBQ3hCLFNBQVMsRUFBRSxPQUFPO0lBQ2xCLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLFFBQVEsRUFBRSxPQUFPO0lBQ2pCLEVBQUUsRUFBRSxPQUFPO0lBQ1gsUUFBUSxFQUFFLE9BQU87SUFDakIsUUFBUSxFQUFFLE9BQU87SUFDakIsa0JBQWtCLEVBQUUsT0FBTztJQUMzQixVQUFVLEVBQUUsZUFBZTtJQUMzQixVQUFVLEVBQUUsUUFBUTtJQUNwQix1QkFBdUIsRUFBRSxRQUFRO0lBQ2pDLFNBQVMsRUFBRSxZQUFZO0lBQ3ZCLFNBQVMsRUFBRSxZQUFZO0lBQ3ZCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLEtBQUssRUFBRSxRQUFRO0lBQ2YsWUFBWSxFQUFFLFFBQVE7SUFDdEIsR0FBRyxFQUFFLE9BQU87SUFDWixLQUFLLEVBQUUsV0FBVztJQUNsQixXQUFXLEVBQUUsb0JBQW9CO0lBQ2pDLFFBQVEsRUFBRSxXQUFXO0lBQ3JCLHFCQUFxQixFQUFFLGFBQWE7SUFDcEMsU0FBUyxFQUFFLGlCQUFpQjtJQUM1QixTQUFTLEVBQUUsVUFBVTtJ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eXBlIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuY29uc3QgdHlwZVRvSWNvbk1hcCA9IHtcbiAgICBhcmNoaXZlOiAnaW52ZW50b3J5XzInLFxuICAgIGFydGljbGU6ICdhcnRpY2xlJyxcbiAgICBhdWRpbzogJ21pYycsXG4gICAgYXVkaW9ib29rOiAnbWljJyxcbiAgICAnYmx1LXJheSc6ICdhbGJ1bScsXG4gICAgYm9vazogJ2Jvb2tfNCcsXG4gICAgJ2Jvb2stY2hhcHRlcic6ICdib29rXzYnLFxuICAgICdib29rLXJldmlldyc6ICdyZXZpZXdzJyxcbiAgICBicm9hZHNpZGU6ICdpbWFnZScsXG4gICAgY2FsY3VsYXRvcjogJ2NhbGN1bGF0ZScsXG4gICAgY2Fzc2V0dGU6ICdhbGJ1bScsXG4gICAgY2Q6ICdhbGJ1bScsXG4gICAgJ2NkLXJvbSc6ICdhbGJ1bScsXG4gICAgY2xvdGhpbmc6ICdhbGJ1bScsXG4gICAgJ2Nsb3RoaW5nLXBhdHRlcm4nOiAnYWxidW0nLFxuICAgIGNvbGxlY3Rpb246ICdsaWJyYXJ5X2Jvb2tzJyxcbiAgICBjb25mZXJlbmNlOiAncG9kaXVtJyxcbiAgICAnY29uZmVyZW5jZS1wcm9jZWVkaW5nJzogJ3BvZGl1bScsXG4gICAgY3VuZWlmb3JtOiAnYW9kX3RhYmxldCcsXG4gICAgY3VycmljdWxhOiAnYW9kX3RhYmxldCcsXG4gICAgZGF0YWJhc2U6ICdkYXRhYmFzZScsXG4gICAgZGF0YXNldDogJ2RhdGFzZXQnLFxuICAgIGRpYXJ5OiAnYm9va18yJyxcbiAgICBkaXNzZXJ0YXRpb246ICdzY2hvb2wnLFxuICAgIGR2ZDogJ2FsYnVtJyxcbiAgICBlYm9vazogJ3R3b19wYWdlcicsXG4gICAgZWJvb2tyZWFkZXI6ICdjaHJvbWVfcmVhZGVyX21vZGUnLFxuICAgIGVqb3VybmFsOiAndHdvX3BhZ2VyJyxcbiAgICAnZWxlY3Ryb25pYy1yZXNvdXJjZSc6ICdkZXNjcmlwdGlvbicsXG4gICAgZXF1aXBtZW50OiAnc2VydmljZV90b29sYm94JyxcbiAgICBmaWxtc3RyaXA6ICd0aGVhdGVycycsXG4gICAgJ2ZpbmRpbmctYWlkJzogJ3RyYXZlbF9leHBsb3JlJyxcbiAgICAnZ292ZXJubWVudC1kb2N1bWVudCc6ICd0cmF2ZWxfZXhwbG9yZScsXG4gICAgJ2dvdmVybm1lbnQtbm92ZWwnOiAnYm9va180JyxcbiAgICBndWlkZTogJ3RyYXZlbF9leHBsb3JlJyxcbiAgICBpbWFnZTogJ2ltYWdlJyxcbiAgICBpbmRleDogJ2xpc3QnLFxuICAgIGpvdXJuYWw6ICdib29rXzInLFxuICAgICdqdXYtYm9vayc6ICdib29rXzQnLFxuICAgIGtpdDogJ2hvbWVfcmVwYWlyX3NlcnZpY2UnLFxuICAgIGxhc2VyZGlzYzogJ2FsYnVtJyxcbiAgICAnbGVnYWwtZG9jdW1lbnQnOiAnZ2F2ZWwnLFxuICAgIGxldHRlcjogJ21haWwnLFxuICAgIG1hZ2F6aW5lOiAnbmV3c21vZGUnLFxuICAgIG1hbnVzY3JpcHQ6ICdhcnRpY2xlJyxcbiAgICAnbWFudXNjcmlwdC1hcmNoaXZlJzogJ2ludmVudG9yeV8yJyxcbiAgICBtYXA6ICdtYXAnLFxuICAgIG1lZGlhOiAncGxheV9jaXJjbGUnLFxuICAgIG1pY3JvZmljaGU6ICd0aGVhdGVycycsXG4gICAgbWljcm9maWxtOiAndGhlYXRlcnMnLFxuICAgIG1pY3JvZm9ybTogJ3RoZWF0ZXJzJyxcbiAgICBtb2RlbDogJ21vZGVsaW5nJyxcbiAgICBtb3ZpZTogJ21vdmllJyxcbiAgICBtdWx0aW1lZGlhOiAncGxheV9jaXJjbGUnLFxuICAgICdtdXNpYy1yZWNvcmRpbmcnOiAnYWxidW0nLFxuICAgICdtdXNpY2FsLXJlY29yZGluZyc6ICdwbGF5X2NpcmNsZScsXG4gICAgbmV3c2xldHRlcjogJ2FydGljbGUnLFxuICAgIG5ld3NwYXBlcjogJ25ld3NwYXBlcicsXG4gICAgJ25ld3NwYXBlci1hcnRpY2xlJzogJ25ld3NwYXBlcicsXG4gICAgb3N0cmFjb246ICdkZXNjcmlwdGlvbicsXG4gICAgb3RoZXI6ICdkZXNjcmlwdGlvbicsXG4gICAgcGFpbnRpbmc6ICdwYWxldHRlJyxcbiAgICBwYWxtbGVhZjogJ2VjbycsXG4gICAgcGFtcGhsZXQ6ICdhcnRpY2xlJyxcbiAgICBwYXB5cnVzOiAnYXJ0aWNsZScsXG4gICAgcGVyZm9ybWFuY2U6ICdtdXNpY19ub3RlJyxcbiAgICBwZXJpb2RpY2FsOiAnYXJ0aWNsZScsXG4gICAgcGhvdG9ncmFwaDogJ2ltYWdlJyxcbiAgICBwaWN0dXJlOiAnaW1hZ2UnLFxuICAgIHBvZW06ICdhcnRpY2xlJyxcbiAgICBwb3N0ZXI6ICdpbWFnZScsXG4gICAgcHJlc2VudGF0aW9uOiAnc2xpZGVzaG93JyxcbiAgICAncHJpbWFyeS1zb3VyY2UnOiAnaW52ZW50b3J5XzInLFxuICAgICdwcmltYXJ5LXNvdXJjZS1kb2N1bWVudCc6ICdhcnRpY2xlJyxcbiAgICByZWNvcmQ6ICdhbGJ1bScsXG4gICAgJ3JlZWwtdG8tcmVlbCc6ICd2aWRlb19jYW1lcmFfYmFjaycsXG4gICAgJ3JlZmVyZW5jZS1lbnRyeSc6ICdhcnRpY2xlJyxcbiAgICByZXBvcnQ6ICdzdW1tYXJpemUnLFxuICAgICdyZXNlYXJjaC1kYXRhLXNldCc6ICdkYXRhc2V0JyxcbiAgICByZXZpZXc6ICdzdW1tYXJpemUnLFxuICAgIHNjb3JlOiAnbXVzaWNfbm90ZScsXG4gICAgc2NyaXB0OiAnYXJ0aWNsZScsXG4gICAgc2VyaWFsOiAnYXJ0aWNsZScsXG4gICAgc2xpZGU6ICdzbGlkZXNob3cnLFxuICAgIHNvZnR3YXJlOiAndGVybWluYWwnLFxuICAgICdzb3VuZC1yZWNvcmRpbmcnOiAnbWljJyxcbiAgICBzdGFuZGFyZHM6ICdhcnRpY2xlJyxcbiAgICAnc3RhdGlzdGljYWwtZGF0YS1zZXQnOiAnZGF0YXNldCcsXG4gICAgJ3N0cmVhbWluZy1hdWRpbyc6ICdwbGF5X2NpcmNsZScsXG4gICAgJ3N0cmVhbWluZy1tZWRpYSc6ICdwbGF5X2NpcmNsZScsXG4gICAgJ3N0cmVhbWluZy12aWRlbyc6ICdwbGF5X2NpcmNsZScsXG4gICAgJ3N0dWRlbnQtcHJvamVjdCc6ICdhcnRpY2xlJyxcbiAgICAndGVjaG5pY2FsLXJlcG9ydCc6ICdzdW1tYXJpemUnLFxuICAgICd0ZXh0LXJlc291cmNlJzogJ3N1bW1hcml6ZScsXG4gICAgdW5rbm93bjogJ2FydGljbGUnLFxuICAgIHZoczogJ3RoZWF0ZXJzJyxcbiAgICB2aWRlbzogJ21vdmllJyxcbiAgICB3ZWJzaXRlOiAnZ2xvYmUnLFxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBpdGVtIHR5cGUgdG8gYW4gaWNvbiB0eXBlIHRvIGJlIHVzZWQgd2l0aCBHb29nbGUgTWF0ZXJpYWwgSWNvbnNcbiAqXG4gKiBJbnRlbmRlZCB0byBiZSB1c2VkIHdpdGggYW4gaW1wb3J0ZWQgZm9udCwgc3VjaCBhczogYDxsaW5rXG4gICAgICAgICAgICByZWw9XCJzdHlsZXNoZWV0XCJcbiAgICAgICAgICAgIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PU1hdGVyaWFsK1N5bWJvbHMrT3V0bGluZWQ6b3Bzeix3Z2h0LEZJTEwsR1JBREAyNCw0MDAsMSwwXCJcbiAgICAgICAgLz5gXG4gKlxuICogUmVmZXJlbmNlOiBodHRwczovL2ZvbnRzLmdvb2dsZS5jb20vaWNvbnM/c2VsZWN0ZWQ9TWF0ZXJpYWwrU3ltYm9scytPdXRsaW5lZDppbnZlbnRvcnlfMjpGSUxMQDA7d2dodEA0MDA7R1JBREAwO29wc3pAMjQmaWNvbi5xdWVyeT1pbnZlbnQmaWNvbi5zaXplPTI0Jmljb24uY29sb3I9JTIzNWY2MzY4XG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAnbGliQnl1SXRlbVR5cGVJY29uJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBIYmxsSXRlbVR5cGVJY29uUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybShpdGVtVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGl0ZW1UeXBlLnJlcGxhY2UoL18vZywgJy0nKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gdHlwZVRvSWNvbk1hcFt0eXBlIGFzIGtleW9mIHR5cGVvZiB0eXBlVG9JY29uTWFwXSA/PyAnYXJ0aWNsZSc7XG4gICAgfVxufVxuIl19
|
|
@@ -8,8 +8,8 @@ import { validateDateRangeFields } from '../utils';
|
|
|
8
8
|
import { CommonModule } from '@angular/common';
|
|
9
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
|
-
import { HbllMultiSelectComponent } from '../../
|
|
12
|
-
import { HbllCheckboxComponent } from '../../
|
|
11
|
+
import { HbllMultiSelectComponent } from '../../multi-select/multi-select.component';
|
|
12
|
+
import { HbllCheckboxComponent } from '../../checkbox/checkbox.component';
|
|
13
13
|
import { DateRangeComponent } from '../date-range/date-range.component';
|
|
14
14
|
import * as i0 from "@angular/core";
|
|
15
15
|
import * as i1 from "@angular/common";
|
|
@@ -245,7 +245,7 @@ export class AdvancedSearchComponent {
|
|
|
245
245
|
return this.advancedSearchForm.controls.expandResults.controls.applyEquivalentSubjects;
|
|
246
246
|
}
|
|
247
247
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AdvancedSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
248
|
-
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=\"ss-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=\"ss-adv-search-row\" [formGroup]=\"query\">\n <!-- Boolean operator -->\n <!-- Add boolean for each row except for first -->\n @if (!$first) {\n <div class=\"ss-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=\"ss-hidden\">Field {{ queryIndex }}</label>\n <div class=\"ss-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=\"ss-hidden\"\n >Match Criteria {{ queryIndex }}</label\n >\n <div class=\"ss-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=\"ss-hidden\">Query {{ queryIndex }}</label>\n <div class=\"ss-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=\"ss-row-cancel\"\n type=\"button\"\n (click)=\"removeQuery(queryIndex)\"\n [attr.data-testid]=\"'cancelRow' + queryIndex\"\n >\n <span class=\"material-symbols-outlined ss-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 ss-icon\"> add </span>\n Add a row\n </button>\n <!-- OTHER OPTIONS -->\n <div class=\"ss-other-options\">\n <!-- LOCAL -->\n @if (config.scope === 'local') {\n <!-- Type -->\n <div data-testid=\"resourceType\">\n <h4>Resource Type</h4>\n <div class=\"ss-multi-select-wrapper\">\n <lib-hbll-multi-select\n [label]=\"'Resource Type'\"\n [allOptions]=\"advancedSearchOptions.types[config.institution]\"\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=\"ss-multi-select-wrapper\">\n <lib-hbll-multi-select\n [label]=\"'Collection'\"\n [allOptions]=\"advancedSearchOptions.collections[config.institution]\"\n [selectedKeys]=\"collections.value\"\n (selectedKeysChange)=\"collections.setValue($event)\"\n ></lib-hbll-multi-select>\n </div>\n </div>\n <!-- Language -->\n <ng-container *ngTemplateOutlet=\"languageBlock\"></ng-container>\n <!-- Date -->\n <ng-container\n *ngTemplateOutlet=\"dateBlock; context: { header: 'Creation Date' }\"\n ></ng-container>\n }\n <!-- EXTERNAL -->\n @if (config.scope === 'external') {\n <div formGroupName=\"limitResults\" class=\"ss-checkbox-section\">\n <h4>For Fewer Results Try</h4>\n <!-- Peer reviewed -->\n <label class=\"ss-checkbox-label\" for=\"peerReviewed\" tabindex=\"0\">\n <input\n class=\"ss-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=\"ss-label-text\">Peer reviewed journal articles</span>\n </label>\n </div>\n <div formGroupName=\"expandResults\" class=\"ss-checkbox-section\">\n <h4>For More Results Try</h4>\n <!-- Apply equivalent subjects -->\n <label class=\"ss-checkbox-label\" for=\"applyEquivalentSubjects\" tabindex=\"0\">\n <input\n class=\"ss-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=\"ss-label-text\">Apply equivalent subjects</span>\n </label>\n <!-- Full text -->\n <label class=\"ss-checkbox-label\" for=\"fullText\" tabindex=\"0\">\n <input\n class=\"ss-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=\"ss-label-text\"\n >Include results the library doesn't have access to</span\n >\n </label>\n </div>\n <!-- Date -->\n <ng-container\n *ngTemplateOutlet=\"dateBlock; context: { header: 'Date Published' }\"\n ></ng-container>\n <!-- Language -->\n <ng-container *ngTemplateOutlet=\"languageBlock\"></ng-container>\n }\n </div>\n <div id=\"advSearchFooter\">\n <a [href]=\"'https://lib.byu.edu/browse/' + config.institution\">Alphabetic Browse</a>\n <button\n class=\"pill-btn--components\"\n [ngClass]=\"{\n ensign: config.institution === 'ensign',\n }\"\n type=\"submit\"\n data-testid=\"advSearchSubmitButton\"\n >\n Search\n </button>\n </div>\n</form>\n\n<ng-template #languageBlock>\n <div>\n <h4>Language</h4>\n <lib-hbll-multi-select\n [label]=\"'language'\"\n [allOptions]=\"advancedSearchOptions.languages\"\n [selectedKeys]=\"languages.value\"\n (selectedKeysChange)=\"languages.setValue($any($event))\"\n ></lib-hbll-multi-select>\n </div>\n</ng-template>\n<ng-template #dateBlock let-header=\"header\">\n <div id=\"dateOptions\" class=\"external\">\n <h4>{{ header }}</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</ng-template>\n", styles: ["button.ensign{background-color:#2b6042!important;border-color:#2a6142}button.ensign:hover{background-color:#357551!important}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}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}.ss-select-wrapper{position:relative}.ss-select-wrapper select{cursor:pointer;padding-right:2em}.ss-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%}.pill-btn--components{background-color:#4070b0;font-size:1em;transition:all .15s;color:#fff;cursor:pointer;font-weight:600;text-align:center}.pill-btn--components:disabled{color:#707070;background-color:#e6e6e6;pointer-events:none}.pill-btn--components:hover{background-color:#6892ca;color:#fff}.destructive.pill-btn--components{background-color:#b04940}.destructive.pill-btn--components:hover{background-color:#c7574d}.pill-btn--components{border-radius:100em;padding:.4em 1.3em}:host{box-sizing:border-box}:host *{box-sizing:inherit}.ss-select-wrapper{margin-right:.3em}.ss-row-cancel{color:#aaa;margin-left:.4em;margin-top:.4em}.ss-row-cancel:hover{color:#666}.ss-row-cancel .ss-icon{font-size:1em}.ss-hidden{display:none}#addQueryBtn{display:flex;align-items:center}#addQueryBtn:disabled{color:#999;pointer-events:none}#addQueryBtn .icon{font-size:1em}.ss-adv-search-wrapper{width:100%}h3{font-size:1.13em;font-weight:300;margin-bottom:.7em;margin-top:0}h4{margin-bottom:.3em;font-weight:600}#dateOptions h4{margin-bottom:.8em}.ss-adv-search-row{display:flex;flex-wrap:wrap;width:100%;margin-bottom:.6em}.ss-query-input{display:inline-block;width:100%;margin-top:.4rem}.ss-query-input input{width:100%}.ss-other-options{display:grid;grid-template-columns:repeat(1,1fr);gap:.6em 1.6em;grid-auto-rows:minmax(1em,auto);margin-top:1.4em}.ss-other-options label{margin-right:1rem}.ss-checkbox-label{display:inline-flex;align-items:flex-start;cursor:pointer}.ss-checkbox-label:not(:last-of-type){margin-bottom:.75em}.ss-checkbox-label .ss-label-text{margin-top:-.1em;margin-left:.45em}.ss-checkbox-section{margin-bottom:.8em}#advSearchFooter{margin-bottom:.5em;display:flex;justify-content:space-between;align-items:center;font-size:1.2em}#advSearchFooter a{font-size:.8em}@media screen and (min-width: 615px){.ss-adv-search-row{flex-wrap:nowrap}.ss-other-options{grid-template-columns:repeat(2,1fr)}.ss-query-input{margin-top:0}#dateOptions .external{grid-column:span 2}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.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: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.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: "component", type: DateRangeComponent, selector: "lib-date-range", inputs: ["from", "to"], outputs: ["validDateChange", "fromChange", "toChange"] }] }); }
|
|
248
|
+
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=\"ss-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=\"ss-adv-search-row\" [formGroup]=\"query\">\n <!-- Boolean operator -->\n <!-- Add boolean for each row except for first -->\n @if (!$first) {\n <div class=\"ss-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=\"ss-hidden\">Field {{ queryIndex }}</label>\n <div class=\"ss-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=\"ss-hidden\"\n >Match Criteria {{ queryIndex }}</label\n >\n <div class=\"ss-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=\"ss-hidden\">Query {{ queryIndex }}</label>\n <div class=\"ss-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=\"ss-row-cancel\"\n type=\"button\"\n (click)=\"removeQuery(queryIndex)\"\n [attr.data-testid]=\"'cancelRow' + queryIndex\"\n >\n <span class=\"material-symbols-outlined ss-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 ss-icon\"> add </span>\n Add a row\n </button>\n <!-- OTHER OPTIONS -->\n <div class=\"ss-other-options\">\n <!-- LOCAL -->\n @if (config.scope === 'local') {\n <!-- Type -->\n <div data-testid=\"resourceType\">\n <h4>Resource Type</h4>\n <div class=\"ss-multi-select-wrapper\">\n <lib-multi-select\n [label]=\"'Resource Type'\"\n [allOptions]=\"advancedSearchOptions.types[config.institution]\"\n [selectedKeys]=\"types.value\"\n (selectedKeysChange)=\"types.setValue($event)\"\n ></lib-multi-select>\n </div>\n </div>\n <!-- Collection -->\n <div data-testid=\"collection\">\n <h4>Collection</h4>\n <div class=\"ss-multi-select-wrapper\">\n <lib-multi-select\n [label]=\"'Collection'\"\n [allOptions]=\"advancedSearchOptions.collections[config.institution]\"\n [selectedKeys]=\"collections.value\"\n (selectedKeysChange)=\"collections.setValue($event)\"\n ></lib-multi-select>\n </div>\n </div>\n <!-- Language -->\n <ng-container *ngTemplateOutlet=\"languageBlock\"></ng-container>\n <!-- Date -->\n <ng-container\n *ngTemplateOutlet=\"dateBlock; context: { header: 'Creation Date' }\"\n ></ng-container>\n }\n <!-- EXTERNAL -->\n @if (config.scope === 'external') {\n <div formGroupName=\"limitResults\" class=\"ss-checkbox-section\">\n <h4>For Fewer Results Try</h4>\n <!-- Peer reviewed -->\n <label class=\"ss-checkbox-label\" for=\"peerReviewed\" tabindex=\"0\">\n <input\n class=\"ss-hidden\"\n id=\"peerReviewed\"\n type=\"checkbox\"\n [formControlName]=\"'peerReviewed'\"\n data-testid=\"peerReviewed\"\n />\n <lib-checkbox [isChecked]=\"peerReviewed.value\"></lib-checkbox>\n <span class=\"ss-label-text\">Peer reviewed journal articles</span>\n </label>\n </div>\n <div formGroupName=\"expandResults\" class=\"ss-checkbox-section\">\n <h4>For More Results Try</h4>\n <!-- Apply equivalent subjects -->\n <label class=\"ss-checkbox-label\" for=\"applyEquivalentSubjects\" tabindex=\"0\">\n <input\n class=\"ss-hidden\"\n id=\"applyEquivalentSubjects\"\n type=\"checkbox\"\n [formControlName]=\"'applyEquivalentSubjects'\"\n data-testid=\"applyEquivalentSubjects\"\n />\n <lib-checkbox [isChecked]=\"applyEquivalentSubjects.value\"></lib-checkbox>\n <span class=\"ss-label-text\">Apply equivalent subjects</span>\n </label>\n <!-- Full text -->\n <label class=\"ss-checkbox-label\" for=\"fullText\" tabindex=\"0\">\n <input\n class=\"ss-hidden\"\n id=\"fullText\"\n type=\"checkbox\"\n [formControlName]=\"'fullText'\"\n data-testid=\"fullText\"\n />\n <lib-checkbox [isChecked]=\"fullText.value\"></lib-checkbox>\n <span class=\"ss-label-text\"\n >Include results the library doesn't have access to</span\n >\n </label>\n </div>\n <!-- Date -->\n <ng-container\n *ngTemplateOutlet=\"dateBlock; context: { header: 'Date Published' }\"\n ></ng-container>\n <!-- Language -->\n <ng-container *ngTemplateOutlet=\"languageBlock\"></ng-container>\n }\n </div>\n <div id=\"advSearchFooter\">\n <a [href]=\"'https://lib.byu.edu/browse/' + config.institution\">Alphabetic Browse</a>\n <button\n class=\"pill-btn--components\"\n [ngClass]=\"{\n ensign: config.institution === 'ensign',\n }\"\n type=\"submit\"\n data-testid=\"advSearchSubmitButton\"\n >\n Search\n </button>\n </div>\n</form>\n\n<ng-template #languageBlock>\n <div>\n <h4>Language</h4>\n <lib-multi-select\n [label]=\"'language'\"\n [allOptions]=\"advancedSearchOptions.languages\"\n [selectedKeys]=\"languages.value\"\n (selectedKeysChange)=\"languages.setValue($any($event))\"\n ></lib-multi-select>\n </div>\n</ng-template>\n<ng-template #dateBlock let-header=\"header\">\n <div id=\"dateOptions\" class=\"external\">\n <h4>{{ header }}</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</ng-template>\n", styles: ["button.ensign{background-color:#2b6042!important;border-color:#2a6142}button.ensign:hover{background-color:#357551!important}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}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{outline-color:#3a6093}.ss-select-wrapper{position:relative}.ss-select-wrapper select{cursor:pointer;padding-right:2em}.ss-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%}.pill-btn--components{background-color:#4070b0;font-size:1em;transition:all .15s;color:#fff;cursor:pointer;font-weight:600;text-align:center}.pill-btn--components:disabled{color:#707070;background-color:#e6e6e6;pointer-events:none}.pill-btn--components:hover{background-color:#6892ca;color:#fff}.destructive.pill-btn--components{background-color:#b04940}.destructive.pill-btn--components:hover{background-color:#c7574d}.pill-btn--components{border-radius:100em;padding:.4em 1.3em}:host{box-sizing:border-box}:host *{box-sizing:inherit}.ss-select-wrapper{margin-right:.3em}.ss-row-cancel{color:#aaa;margin-left:.4em;margin-top:.4em}.ss-row-cancel:hover{color:#666}.ss-row-cancel .ss-icon{font-size:1em}.ss-hidden{display:none}#addQueryBtn{display:flex;align-items:center}#addQueryBtn:disabled{color:#999;pointer-events:none}#addQueryBtn .icon{font-size:1em}.ss-adv-search-wrapper{width:100%}h3{font-size:1.13em;font-weight:300;margin-bottom:.7em;margin-top:0}h4{margin-bottom:.3em;font-weight:600}#dateOptions h4{margin-bottom:.8em}.ss-adv-search-row{display:flex;flex-wrap:wrap;width:100%;margin-bottom:.6em}.ss-query-input{display:inline-block;width:100%;margin-top:.4rem}.ss-query-input input{width:100%}.ss-other-options{display:grid;grid-template-columns:repeat(1,1fr);gap:.6em 1.6em;grid-auto-rows:minmax(1em,auto);margin-top:1.4em}.ss-other-options label{margin-right:1rem}.ss-checkbox-label{display:inline-flex;align-items:flex-start;cursor:pointer}.ss-checkbox-label:not(:last-of-type){margin-bottom:.75em}.ss-checkbox-label .ss-label-text{margin-top:-.1em;margin-left:.45em}.ss-checkbox-section{margin-bottom:.8em}#advSearchFooter{margin-bottom:.5em;display:flex;justify-content:space-between;align-items:center;font-size:1.2em}#advSearchFooter a{font-size:.8em}@media screen and (min-width: 615px){.ss-adv-search-row{flex-wrap:nowrap}.ss-other-options{grid-template-columns:repeat(2,1fr)}.ss-query-input{margin-top:0}#dateOptions .external{grid-column:span 2}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.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: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: HbllMultiSelectComponent, selector: "lib-multi-select", inputs: ["allOptions", "label", "selectedKeys"], outputs: ["selectedKeysChange"] }, { kind: "component", type: HbllCheckboxComponent, selector: "lib-checkbox", inputs: ["isChecked"] }, { kind: "component", type: DateRangeComponent, selector: "lib-date-range", inputs: ["from", "to"], outputs: ["validDateChange", "fromChange", "toChange"] }] }); }
|
|
249
249
|
}
|
|
250
250
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AdvancedSearchComponent, decorators: [{
|
|
251
251
|
type: Component,
|
|
@@ -257,7 +257,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
|
|
|
257
257
|
HbllMultiSelectComponent,
|
|
258
258
|
HbllCheckboxComponent,
|
|
259
259
|
DateRangeComponent,
|
|
260
|
-
], template: "<form\n data-testid=\"advancedSearchForm\"\n (submit)=\"config.scope === 'local' ? doLocalAdvancedSearch() : doExternalAdvancedSearch()\"\n [formGroup]=\"advancedSearchForm\"\n class=\"ss-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=\"ss-adv-search-row\" [formGroup]=\"query\">\n <!-- Boolean operator -->\n <!-- Add boolean for each row except for first -->\n @if (!$first) {\n <div class=\"ss-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=\"ss-hidden\">Field {{ queryIndex }}</label>\n <div class=\"ss-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=\"ss-hidden\"\n >Match Criteria {{ queryIndex }}</label\n >\n <div class=\"ss-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=\"ss-hidden\">Query {{ queryIndex }}</label>\n <div class=\"ss-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=\"ss-row-cancel\"\n type=\"button\"\n (click)=\"removeQuery(queryIndex)\"\n [attr.data-testid]=\"'cancelRow' + queryIndex\"\n >\n <span class=\"material-symbols-outlined ss-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 ss-icon\"> add </span>\n Add a row\n </button>\n <!-- OTHER OPTIONS -->\n <div class=\"ss-other-options\">\n <!-- LOCAL -->\n @if (config.scope === 'local') {\n <!-- Type -->\n <div data-testid=\"resourceType\">\n <h4>Resource Type</h4>\n <div class=\"ss-multi-select-wrapper\">\n <lib-hbll-multi-select\n [label]=\"'Resource Type'\"\n [allOptions]=\"advancedSearchOptions.types[config.institution]\"\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=\"ss-multi-select-wrapper\">\n <lib-hbll-multi-select\n [label]=\"'Collection'\"\n [allOptions]=\"advancedSearchOptions.collections[config.institution]\"\n [selectedKeys]=\"collections.value\"\n (selectedKeysChange)=\"collections.setValue($event)\"\n ></lib-hbll-multi-select>\n </div>\n </div>\n <!-- Language -->\n <ng-container *ngTemplateOutlet=\"languageBlock\"></ng-container>\n <!-- Date -->\n <ng-container\n *ngTemplateOutlet=\"dateBlock; context: { header: 'Creation Date' }\"\n ></ng-container>\n }\n <!-- EXTERNAL -->\n @if (config.scope === 'external') {\n <div formGroupName=\"limitResults\" class=\"ss-checkbox-section\">\n <h4>For Fewer Results Try</h4>\n <!-- Peer reviewed -->\n <label class=\"ss-checkbox-label\" for=\"peerReviewed\" tabindex=\"0\">\n <input\n class=\"ss-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=\"ss-label-text\">Peer reviewed journal articles</span>\n </label>\n </div>\n <div formGroupName=\"expandResults\" class=\"ss-checkbox-section\">\n <h4>For More Results Try</h4>\n <!-- Apply equivalent subjects -->\n <label class=\"ss-checkbox-label\" for=\"applyEquivalentSubjects\" tabindex=\"0\">\n <input\n class=\"ss-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=\"ss-label-text\">Apply equivalent subjects</span>\n </label>\n <!-- Full text -->\n <label class=\"ss-checkbox-label\" for=\"fullText\" tabindex=\"0\">\n <input\n class=\"ss-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=\"ss-label-text\"\n >Include results the library doesn't have access to</span\n >\n </label>\n </div>\n <!-- Date -->\n <ng-container\n *ngTemplateOutlet=\"dateBlock; context: { header: 'Date Published' }\"\n ></ng-container>\n <!-- Language -->\n <ng-container *ngTemplateOutlet=\"languageBlock\"></ng-container>\n }\n </div>\n <div id=\"advSearchFooter\">\n <a [href]=\"'https://lib.byu.edu/browse/' + config.institution\">Alphabetic Browse</a>\n <button\n class=\"pill-btn--components\"\n [ngClass]=\"{\n ensign: config.institution === 'ensign',\n }\"\n type=\"submit\"\n data-testid=\"advSearchSubmitButton\"\n >\n Search\n </button>\n </div>\n</form>\n\n<ng-template #languageBlock>\n <div>\n <h4>Language</h4>\n <lib-hbll-multi-select\n [label]=\"'language'\"\n [allOptions]=\"advancedSearchOptions.languages\"\n [selectedKeys]=\"languages.value\"\n (selectedKeysChange)=\"languages.setValue($any($event))\"\n ></lib-hbll-multi-select>\n </div>\n</ng-template>\n<ng-template #dateBlock let-header=\"header\">\n <div id=\"dateOptions\" class=\"external\">\n <h4>{{ header }}</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</ng-template>\n", styles: ["button.ensign{background-color:#2b6042!important;border-color:#2a6142}button.ensign:hover{background-color:#357551!important}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}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}.ss-select-wrapper{position:relative}.ss-select-wrapper select{cursor:pointer;padding-right:2em}.ss-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%}.pill-btn--components{background-color:#4070b0;font-size:1em;transition:all .15s;color:#fff;cursor:pointer;font-weight:600;text-align:center}.pill-btn--components:disabled{color:#707070;background-color:#e6e6e6;pointer-events:none}.pill-btn--components:hover{background-color:#6892ca;color:#fff}.destructive.pill-btn--components{background-color:#b04940}.destructive.pill-btn--components:hover{background-color:#c7574d}.pill-btn--components{border-radius:100em;padding:.4em 1.3em}:host{box-sizing:border-box}:host *{box-sizing:inherit}.ss-select-wrapper{margin-right:.3em}.ss-row-cancel{color:#aaa;margin-left:.4em;margin-top:.4em}.ss-row-cancel:hover{color:#666}.ss-row-cancel .ss-icon{font-size:1em}.ss-hidden{display:none}#addQueryBtn{display:flex;align-items:center}#addQueryBtn:disabled{color:#999;pointer-events:none}#addQueryBtn .icon{font-size:1em}.ss-adv-search-wrapper{width:100%}h3{font-size:1.13em;font-weight:300;margin-bottom:.7em;margin-top:0}h4{margin-bottom:.3em;font-weight:600}#dateOptions h4{margin-bottom:.8em}.ss-adv-search-row{display:flex;flex-wrap:wrap;width:100%;margin-bottom:.6em}.ss-query-input{display:inline-block;width:100%;margin-top:.4rem}.ss-query-input input{width:100%}.ss-other-options{display:grid;grid-template-columns:repeat(1,1fr);gap:.6em 1.6em;grid-auto-rows:minmax(1em,auto);margin-top:1.4em}.ss-other-options label{margin-right:1rem}.ss-checkbox-label{display:inline-flex;align-items:flex-start;cursor:pointer}.ss-checkbox-label:not(:last-of-type){margin-bottom:.75em}.ss-checkbox-label .ss-label-text{margin-top:-.1em;margin-left:.45em}.ss-checkbox-section{margin-bottom:.8em}#advSearchFooter{margin-bottom:.5em;display:flex;justify-content:space-between;align-items:center;font-size:1.2em}#advSearchFooter a{font-size:.8em}@media screen and (min-width: 615px){.ss-adv-search-row{flex-wrap:nowrap}.ss-other-options{grid-template-columns:repeat(2,1fr)}.ss-query-input{margin-top:0}#dateOptions .external{grid-column:span 2}}\n"] }]
|
|
260
|
+
], template: "<form\n data-testid=\"advancedSearchForm\"\n (submit)=\"config.scope === 'local' ? doLocalAdvancedSearch() : doExternalAdvancedSearch()\"\n [formGroup]=\"advancedSearchForm\"\n class=\"ss-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=\"ss-adv-search-row\" [formGroup]=\"query\">\n <!-- Boolean operator -->\n <!-- Add boolean for each row except for first -->\n @if (!$first) {\n <div class=\"ss-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=\"ss-hidden\">Field {{ queryIndex }}</label>\n <div class=\"ss-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=\"ss-hidden\"\n >Match Criteria {{ queryIndex }}</label\n >\n <div class=\"ss-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=\"ss-hidden\">Query {{ queryIndex }}</label>\n <div class=\"ss-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=\"ss-row-cancel\"\n type=\"button\"\n (click)=\"removeQuery(queryIndex)\"\n [attr.data-testid]=\"'cancelRow' + queryIndex\"\n >\n <span class=\"material-symbols-outlined ss-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 ss-icon\"> add </span>\n Add a row\n </button>\n <!-- OTHER OPTIONS -->\n <div class=\"ss-other-options\">\n <!-- LOCAL -->\n @if (config.scope === 'local') {\n <!-- Type -->\n <div data-testid=\"resourceType\">\n <h4>Resource Type</h4>\n <div class=\"ss-multi-select-wrapper\">\n <lib-multi-select\n [label]=\"'Resource Type'\"\n [allOptions]=\"advancedSearchOptions.types[config.institution]\"\n [selectedKeys]=\"types.value\"\n (selectedKeysChange)=\"types.setValue($event)\"\n ></lib-multi-select>\n </div>\n </div>\n <!-- Collection -->\n <div data-testid=\"collection\">\n <h4>Collection</h4>\n <div class=\"ss-multi-select-wrapper\">\n <lib-multi-select\n [label]=\"'Collection'\"\n [allOptions]=\"advancedSearchOptions.collections[config.institution]\"\n [selectedKeys]=\"collections.value\"\n (selectedKeysChange)=\"collections.setValue($event)\"\n ></lib-multi-select>\n </div>\n </div>\n <!-- Language -->\n <ng-container *ngTemplateOutlet=\"languageBlock\"></ng-container>\n <!-- Date -->\n <ng-container\n *ngTemplateOutlet=\"dateBlock; context: { header: 'Creation Date' }\"\n ></ng-container>\n }\n <!-- EXTERNAL -->\n @if (config.scope === 'external') {\n <div formGroupName=\"limitResults\" class=\"ss-checkbox-section\">\n <h4>For Fewer Results Try</h4>\n <!-- Peer reviewed -->\n <label class=\"ss-checkbox-label\" for=\"peerReviewed\" tabindex=\"0\">\n <input\n class=\"ss-hidden\"\n id=\"peerReviewed\"\n type=\"checkbox\"\n [formControlName]=\"'peerReviewed'\"\n data-testid=\"peerReviewed\"\n />\n <lib-checkbox [isChecked]=\"peerReviewed.value\"></lib-checkbox>\n <span class=\"ss-label-text\">Peer reviewed journal articles</span>\n </label>\n </div>\n <div formGroupName=\"expandResults\" class=\"ss-checkbox-section\">\n <h4>For More Results Try</h4>\n <!-- Apply equivalent subjects -->\n <label class=\"ss-checkbox-label\" for=\"applyEquivalentSubjects\" tabindex=\"0\">\n <input\n class=\"ss-hidden\"\n id=\"applyEquivalentSubjects\"\n type=\"checkbox\"\n [formControlName]=\"'applyEquivalentSubjects'\"\n data-testid=\"applyEquivalentSubjects\"\n />\n <lib-checkbox [isChecked]=\"applyEquivalentSubjects.value\"></lib-checkbox>\n <span class=\"ss-label-text\">Apply equivalent subjects</span>\n </label>\n <!-- Full text -->\n <label class=\"ss-checkbox-label\" for=\"fullText\" tabindex=\"0\">\n <input\n class=\"ss-hidden\"\n id=\"fullText\"\n type=\"checkbox\"\n [formControlName]=\"'fullText'\"\n data-testid=\"fullText\"\n />\n <lib-checkbox [isChecked]=\"fullText.value\"></lib-checkbox>\n <span class=\"ss-label-text\"\n >Include results the library doesn't have access to</span\n >\n </label>\n </div>\n <!-- Date -->\n <ng-container\n *ngTemplateOutlet=\"dateBlock; context: { header: 'Date Published' }\"\n ></ng-container>\n <!-- Language -->\n <ng-container *ngTemplateOutlet=\"languageBlock\"></ng-container>\n }\n </div>\n <div id=\"advSearchFooter\">\n <a [href]=\"'https://lib.byu.edu/browse/' + config.institution\">Alphabetic Browse</a>\n <button\n class=\"pill-btn--components\"\n [ngClass]=\"{\n ensign: config.institution === 'ensign',\n }\"\n type=\"submit\"\n data-testid=\"advSearchSubmitButton\"\n >\n Search\n </button>\n </div>\n</form>\n\n<ng-template #languageBlock>\n <div>\n <h4>Language</h4>\n <lib-multi-select\n [label]=\"'language'\"\n [allOptions]=\"advancedSearchOptions.languages\"\n [selectedKeys]=\"languages.value\"\n (selectedKeysChange)=\"languages.setValue($any($event))\"\n ></lib-multi-select>\n </div>\n</ng-template>\n<ng-template #dateBlock let-header=\"header\">\n <div id=\"dateOptions\" class=\"external\">\n <h4>{{ header }}</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</ng-template>\n", styles: ["button.ensign{background-color:#2b6042!important;border-color:#2a6142}button.ensign:hover{background-color:#357551!important}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}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{outline-color:#3a6093}.ss-select-wrapper{position:relative}.ss-select-wrapper select{cursor:pointer;padding-right:2em}.ss-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%}.pill-btn--components{background-color:#4070b0;font-size:1em;transition:all .15s;color:#fff;cursor:pointer;font-weight:600;text-align:center}.pill-btn--components:disabled{color:#707070;background-color:#e6e6e6;pointer-events:none}.pill-btn--components:hover{background-color:#6892ca;color:#fff}.destructive.pill-btn--components{background-color:#b04940}.destructive.pill-btn--components:hover{background-color:#c7574d}.pill-btn--components{border-radius:100em;padding:.4em 1.3em}:host{box-sizing:border-box}:host *{box-sizing:inherit}.ss-select-wrapper{margin-right:.3em}.ss-row-cancel{color:#aaa;margin-left:.4em;margin-top:.4em}.ss-row-cancel:hover{color:#666}.ss-row-cancel .ss-icon{font-size:1em}.ss-hidden{display:none}#addQueryBtn{display:flex;align-items:center}#addQueryBtn:disabled{color:#999;pointer-events:none}#addQueryBtn .icon{font-size:1em}.ss-adv-search-wrapper{width:100%}h3{font-size:1.13em;font-weight:300;margin-bottom:.7em;margin-top:0}h4{margin-bottom:.3em;font-weight:600}#dateOptions h4{margin-bottom:.8em}.ss-adv-search-row{display:flex;flex-wrap:wrap;width:100%;margin-bottom:.6em}.ss-query-input{display:inline-block;width:100%;margin-top:.4rem}.ss-query-input input{width:100%}.ss-other-options{display:grid;grid-template-columns:repeat(1,1fr);gap:.6em 1.6em;grid-auto-rows:minmax(1em,auto);margin-top:1.4em}.ss-other-options label{margin-right:1rem}.ss-checkbox-label{display:inline-flex;align-items:flex-start;cursor:pointer}.ss-checkbox-label:not(:last-of-type){margin-bottom:.75em}.ss-checkbox-label .ss-label-text{margin-top:-.1em;margin-left:.45em}.ss-checkbox-section{margin-bottom:.8em}#advSearchFooter{margin-bottom:.5em;display:flex;justify-content:space-between;align-items:center;font-size:1.2em}#advSearchFooter a{font-size:.8em}@media screen and (min-width: 615px){.ss-adv-search-row{flex-wrap:nowrap}.ss-other-options{grid-template-columns:repeat(2,1fr)}.ss-query-input{margin-top:0}#dateOptions .external{grid-column:span 2}}\n"] }]
|
|
261
261
|
}], propDecorators: { config: [{
|
|
262
262
|
type: Input,
|
|
263
263
|
args: [{ required: true }]
|
|
@@ -270,4 +270,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
|
|
|
270
270
|
type: ViewChild,
|
|
271
271
|
args: [MatTooltip]
|
|
272
272
|
}] } });
|
|
273
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtc2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zcy1zZWFyY2gtYmFyL2FkdmFuY2VkLXNlYXJjaC9hZHZhbmNlZC1zZWFyY2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL3NzLXNlYXJjaC1iYXIvYWR2YW5jZWQtc2VhcmNoL2FkdmFuY2VkLXNlYXJjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxNQUFNLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdILHNCQUFzQixFQUN0QixtQkFBbUIsRUFDbkIsVUFBVSxHQUNiLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFTSCwyQkFBMkIsRUFDM0IsZ0NBQWdDLEVBQ2hDLG1DQUFtQyxHQUN0QyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0gseUJBQXlCLEVBQ3pCLHVCQUF1QixFQUN2Qiw2QkFBNkIsRUFDN0IsNkJBQTZCLEdBQ2hDLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxhQUFhLEVB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ZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEZvcm1Db250cm9sLFxuICAgIEZvcm1Hcm91cCxcbiAgICBOb25OdWxsYWJsZUZvcm1CdWlsZGVyLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcCwgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgZmlsdGVyLCBzdGFydFdpdGgsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gICAgQWR2YW5jZWRTZWFyY2hCb29sZWFuT3B0aW9uLFxuICAgIEFkdmFuY2VkU2VhcmNoTG9jYWxGaWVsZE9wdGlvbixcbiAgICBBZHZhbmNlZFNlYXJjaExhbmd1YWdlT3B0aW9uLFxuICAgIEFkdmFuY2VkU2VhcmNoUXVhbGlmaWVyT3B0aW9uLFxuICAgIEFkdmFuY2VkU2VhcmNoUXVhbGlmaWVyLFxuICAgIEFkdmFuY2VkU2VhcmNoRXh0ZXJuYWxGaWVsZE9wdGlvbixcbiAgICBBZHZhbmNlZFNlYXJjaFF1ZXJ5Um93LFxuICAgIEFkdmFuY2VkU2VhcmNoRmllbGRPcHRpb24sXG4gICAgaXNBZHZhbmNlZFNlYXJjaEZpZWxkT3B0aW9uLFxuICAgIGlzQWR2YW5jZWRTZWFyY2hMb2NhbEZpZWxkT3B0aW9uLFxuICAgIGlzQWR2YW5jZWRTZWFyY2hFeHRlcm5hbEZpZWxkT3B0aW9uLFxufSBmcm9tICcuLi9tb2RlbHMvYWR2YW5jZWQtc2VhcmNoLm1vZGVsJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdmFsaWRhdGVEYXRlUmFuZ2VGaWVsZHMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBRFZBTkNFRF9TRUFSQ0hfRklFTERfTUFQLFxuICAgIEFEVkFOQ0VEX1NFQVJDSF9PUFRJT05TLFxuICAgIEFEVkFOQ0VEX1NFQVJDSF9RVUFMSUZJRVJfTUFQLFxuICAgIEFEVkFOQ0VEX1NFQVJDSF9RVUVSSUVTX0xJTUlULFxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgSGJsbE11bHRpU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaGJsbC1tdWx0aS1zZWxlY3QvaGJsbC1tdWx0aS1zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IEhibGxDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2hibGwtY2hlY2tib3gvaGJsbC1jaGVja2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZVJhbmdlQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0ZS1yYW5nZS9kYXRlLXJhbmdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hDb25maWcgfSBmcm9tICcuLi9tb2RlbHMvc2VhcmNoLWNvbmZpZy5tb2RlbCc7XG5cbnR5cGUgUXVlcnlSb3cgPSB7XG4gICAgYm9vbGVhbjogRm9ybUNvbnRyb2w8QWR2YW5jZWRTZWFyY2hCb29sZWFuT3B0aW9uPjtcbiAgICBmaWVsZDogRm9ybUNvbnRyb2w8XG4gICAgICAgIHwgQWR2YW5jZWRTZWFyY2hGaWVsZE9wdGlvblxuICAgICAgICB8IEFkdmFuY2VkU2VhcmNoTG9jYWxGaWVsZE9wdGlvblxuICAgICAgICB8IEFkdmFuY2VkU2VhcmNoRXh0ZXJuYWxGaWVsZE9wdGlvblxuICAgID47XG4gICAgcXVhbGlmaWVyOiBGb3JtQ29udHJvbDxBZHZhbmNlZFNlYXJjaFF1YWxpZmllck9wdGlvbj47XG4gICAgcXVlcnk6IEZvcm1Db250cm9sPHN0cmluZz47XG59O1xuXG5jb25zdCBEQVRFX1ZBTElEQVRPUl9SRUdFWCA9ICdeWzAtOV17NH0kJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaWItc3MtYWR2YW5jZWQtc2VhcmNoJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC1zZWFyY2guY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2FkdmFuY2VkLXNlYXJjaC5jb21wb25lbnQuc2NzcyddLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBIYmxsTXVsdGlTZWxlY3RDb21wb25lbnQsXG4gICAgICAgIEhibGxDaGVja2JveENvbXBvbmVudCxcbiAgICAgICAgRGF0ZVJhbmdlQ29tcG9uZW50LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkU2VhcmNoQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZiID0gaW5qZWN0KE5vbk51bGxhYmxlRm9ybUJ1aWxkZXIpO1xuICAgIHByaXZhdGUgX2NvbmZpZyE6IFNlYXJjaENvbmZpZztcbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBzZXQgY29uZmlnKGNvbmZpZzogU2VhcmNoQ29uZmlnKSB7XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy5zZXR1cEZvcm0oKTtcbiAgICB9XG4gICAgZ2V0IGNvbmZpZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgICB9XG4gICAgQE91dHB1dCgpIGFkdmFuY2VkU2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjxTZWFyY2hDb25maWc+KCk7XG5cbiAgICAvLyBUaG91Z2ggbXVsdGlwbGUgaW5zdGFuY2VzIGV4aXN0cywgdGhpcyByZXByZXNlbnQgcXVlcnkgMS5cbiAgICBAVmlld0NoaWxkKCdzZWFyY2hJbnB1dCcpIHByaXZhdGUgc2VhcmNoSW5wdXQhOiBFbGVtZW50UmVmO1xuICAgIC8vIFRoZSB0b29sdGlwIGlzIGRpc2FibGVkIGluIHRoZSB0ZW1wbGF0ZS5cbiAgICAvLyBJdCBpcyBlbmFibGVkIGFuZCBkaXNwbGF5ZWQgaWYgYSB1c2VyIHNlYXJjaGVzIGFnYWluc3QgYW4gZW1wdHkgcXVlcnkgKHNpbXBsZSBvciBxMSkuXG4gICAgLy8gQW55IGNoYW5nZSB0byB0aGUgc2VhcmNoIGZpZWxkIGRpc2FibGVzIHRoZSB0b29sdGlwLlxuICAgIEBWaWV3Q2hpbGQoTWF0VG9vbHRpcCkgcHJpdmF0ZSBpbnB1dFRvb2x0aXAhOiBNYXRUb29sdGlwO1xuXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUYWtlcyBhIGBGb3JtR3JvdXBgIGFuZCBzeW5jcyB1cCB0aGUgYGZpZWxkYCBhbmQgYHF1YWxpZmllcmAgdmFsdWVzLlxuICAgICAqIEFmdGVyIHN5bmNpbmcsIHdoZW4gdGhlIGBmaWVsZGAgdmFsdWUgY2hhbmdlcywgdGhlIGBxdWFsaWZpZXJgIHZhbHVlIHdpbGwgdXBkYXRlIGFwcHJvcHJpYXRlbHkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzeW5jVXBGaWVsZEFuZFF1YWxpZmllciA9IChcbiAgICAgICAgZmc6IEZvcm1Hcm91cDx7XG4gICAgICAgICAgICBib29sZWFuOiBGb3JtQ29udHJvbDtcbiAgICAgICAgICAgIGZpZWxkOiBGb3JtQ29udHJvbDtcbiAgICAgICAgICAgIHF1YWxpZmllcjogRm9ybUNvbnRyb2w7XG4gICAgICAgICAgICBxdWVyeTogRm9ybUNvbnRyb2w7XG4gICAgICAgIH0+LFxuICAgICAgICBzY29wZTogU2VhcmNoQ29uZmlnWydzY29wZSddLFxuICAgICkgPT4ge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICBmZy5jb250cm9scy5maWVsZC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHNjb3BlID09PSAnbG9jYWwnKSxcbiAgICAgICAgICAgICAgICAgICAgdGFwKCh2YWw6IEFkdmFuY2VkU2VhcmNoUXVhbGlmaWVyKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZmcuY29udHJvbHMucXVhbGlmaWVyLnNldFZhbHVlKEFEVkFOQ0VEX1NFQVJDSF9PUFRJT05TLnF1YWxpZmllcnNbdmFsXVswXSksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKSxcbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIGFkdmFuY2VkU2VhcmNoRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBxdWVyaWVzOiB0aGlzLmZiLmFycmF5PEZvcm1Hcm91cDxRdWVyeVJvdz4+KFxuICAgICAgICAgICAgW10sXG4gICAgICAgICAgICBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoQURWQU5DRURfU0VBUkNIX1FVRVJJRVNfTElNSVQpXSxcbiAgICAgICAgKSxcbiAgICAgICAgdHlwZXM6IFtbXSBhcyBzdHJpbmdbXV0sXG4gICAgICAgIGNvbGxlY3Rpb25zOiBbW10gYXMgc3RyaW5nW11dLFxuICAgICAgICBsYW5ndWFnZXM6IFtbXSBhcyBBZHZhbmNlZFNlYXJjaExhbmd1YWdlT3B0aW9uW11dLFxuICAgICAgICBkYXRlOiB0aGlzLmZiLmdyb3VwKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZyb206IFsnJywgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDQpLCBWYWxpZGF0b3JzLnBhdHRlcm4oREFURV9WQUxJREFUT1JfUkVHRVgpXV0sXG4gICAgICAgICAgICAgICAgdG86IFsnJywgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDQpLCBWYWxpZGF0b3JzLnBhdHRlcm4oREFURV9WQUxJREFUT1JfUkVHRVgpXV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyB2YWxpZGF0b3JzOiB2YWxpZGF0ZURhdGVSYW5nZUZpZWxkcygpIH0sXG4gICAgICAgICksXG4gICAgICAgIGxpbWl0UmVzdWx0czogdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBwZWVyUmV2aWV3ZWQ6IFtmYWxzZV0sXG4gICAgICAgIH0pLFxuICAgICAgICBleHBhbmRSZXN1bHRzOiB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgIGFwcGx5RXF1aXZhbGVudFN1YmplY3RzOiBbZmFsc2VdLFxuICAgICAgICAgICAgZnVsbFRleHQ6IFtmYWxzZV0sXG4gICAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgcHJvdGVjdGVkIGlzU3VibWl0dGVkID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIGFkdmFuY2VkU2VhcmNoT3B0aW9ucyA9IEFEVkFOQ0VEX1NFQVJDSF9PUFRJT05TO1xuICAgIHByb3RlY3RlZCBhZHZhbmNlZFNlYXJjaEZpZWxkTWFwID0gQURWQU5DRURfU0VBUkNIX0ZJRUxEX01BUDtcbiAgICBwcm90ZWN0ZWQgYWR2YW5jZWRTZWFyY2hRdWFsaWZpZXJNYXAgPSBBRFZBTkNFRF9TRUFSQ0hfUVVBTElGSUVSX01BUDtcblxuICAgIGdldCBxdWVyaWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFNlYXJjaEZvcm0uY29udHJvbHMucXVlcmllcztcbiAgICB9XG4gICAgZ2V0IHR5cGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFNlYXJjaEZvcm0uY29udHJvbHMudHlwZXM7XG4gICAgfVxuICAgIGdldCBjb2xsZWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWR2YW5jZWRTZWFyY2hGb3JtLmNvbnRyb2xzLmNvbGxlY3Rpb25zO1xuICAgIH1cbiAgICBnZXQgbGFuZ3VhZ2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFNlYXJjaEZvcm0uY29udHJvbHMubGFuZ3VhZ2VzO1xuICAgIH1cbiAgICBnZXQgZnJvbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWR2YW5jZWRTZWFyY2hGb3JtLmNvbnRyb2xzLmRhdGUuY29udHJvbHMuZnJvbTtcbiAgICB9XG4gICAgZ2V0IHRvKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFNlYXJjaEZvcm0uY29udHJvbHMuZGF0ZS5jb250cm9scy50bztcbiAgICB9XG4gICAgZ2V0IHBlZXJSZXZpZXdlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWR2YW5jZWRTZWFyY2hGb3JtLmNvbnRyb2xzLmxpbWl0UmVzdWx0cy5jb250cm9scy5wZWVyUmV2aWV3ZWQ7XG4gICAgfVxuICAgIGdldCBmdWxsVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWR2YW5jZWRTZWFyY2hGb3JtLmNvbnRyb2xzLmV4cGFuZFJlc3VsdHMuY29udHJvbHMuZnVsbFRleHQ7XG4gICAgfVxuICAgIGdldCBhcHBseUVxdWl2YWxlbnRTdWJqZWN0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWR2YW5jZWRTZWFyY2hGb3JtLmNvbnRyb2xzLmV4cGFuZFJlc3VsdHMuY29udHJvbHMuYXBwbHlFcXVpdmFsZW50U3ViamVjdHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIGEgcXVlcnkgdG8gYHF1ZXJpZXNgIGBGb3JtQXJyYXlgLiBUaGlzIEZvcm1Hcm91cCBoYXMgYW4gYWRkaXRpb25hbCBgYm9vbGVhbmAgY29udHJvbC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYWRkUXVlcnkgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMucXVlcmllcy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICAgICAgYm9vbGVhbjogW0FEVkFOQ0VEX1NFQVJDSF9PUFRJT05TLmJvb2xlYW5bMF0gYXMgQWR2YW5jZWRTZWFyY2hCb29sZWFuT3B0aW9uXSxcbiAgICAgICAgICAgICAgICBmaWVsZDogW1xuICAgICAgICAgICAgICAgICAgICBBRFZBTkNFRF9TRUFSQ0hfT1BUSU9OUy5maWVsZHNbMF0gYXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHwgQWR2YW5jZWRTZWFyY2hGaWVsZE9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgfCBBZHZhbmNlZFNlYXJjaExvY2FsRmllbGRPcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIHwgQWR2YW5jZWRTZWFyY2hFeHRlcm5hbEZpZWxkT3B0aW9uLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcXVhbGlmaWVyOiBbXG4gICAgICAgICAgICAgICAgICAgIEFEVkFOQ0VEX1NFQVJDSF9PUFRJT05TLnF1YWxpZmllcnNbXG4gICAgICAgICAgICAgICAgICAgICAgICBBRFZBTkNFRF9TRUFSQ0hfT1BUSU9OUy5sb2NhbEZpZWxkc1swXVxuICAgICAgICAgICAgICAgICAgICBdWzBdIGFzIEFkdmFuY2VkU2VhcmNoUXVhbGlmaWVyT3B0aW9uLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcXVlcnk6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zeW5jVXBGaWVsZEFuZFF1YWxpZmllcih0aGlzLnF1ZXJpZXMuYXQoLTEpLCB0aGlzLmNvbmZpZy5zY29wZSk7XG4gICAgfTtcblxuICAgIHByb3RlY3RlZCByZW1vdmVRdWVyeSA9IChpOiBudW1iZXIpID0+IHtcbiAgICAgICAgdGhpcy5xdWVyaWVzLnJlbW92ZUF0KGkpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBQcmVwYXJlcyBhcHByb3ByaWF0ZSBxdWVyeSBwYXJhbXMgYmVmb3JlIHBlcmZvcm1pbmcgYSBsb2NhbCBhZHZhbmNlZCBzZWFyY2guXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGRvTG9jYWxBZHZhbmNlZFNlYXJjaCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5kb0FkdmFuY2VkU2VhcmNoKHtcbiAgICAgICAgICAgIGxvY2FsQWR2YW5jZWRTZWFyY2g6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmNvbmZpZy5sb2NhbEFkdmFuY2VkU2VhcmNoLFxuICAgICAgICAgICAgICAgIGNyZWF0aW9uRGF0ZTogdGhpcy5nYXRoZXJUb0FuZEZyb21WYWx1ZXMoKSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZExhbmd1YWdlczogdGhpcy5sYW5ndWFnZXMudmFsdWUsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRSZXNvdXJjZVR5cGVzOiB0aGlzLnR5cGVzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sbGVjdGlvbnM6IHRoaXMuY29sbGVjdGlvbnMudmFsdWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJlcGFyZXMgYXBwcm9wcmlhdGUgcXVlcnkgcGFyYW1zIGJlZm9yZSBwZXJmb3JtaW5nIGFuIGV4dGVybmFsIGFkdmFuY2VkIHNlYXJjaC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZG9FeHRlcm5hbEFkdmFuY2VkU2VhcmNoID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmRvQWR2YW5jZWRTZWFyY2goe1xuICAgICAgICAgICAgZXh0ZXJuYWxBZHZhbmNlZFNlYXJjaDoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuY29uZmlnLmV4dGVybmFsQWR2YW5jZWRTZWFyY2gsXG4gICAgICAgICAgICAgICAgZGF0ZVB1Ymxpc2hlZDogdGhpcy5nYXRoZXJUb0FuZEZyb21WYWx1ZXMoKSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZExhbmd1YWdlczogdGhpcy5sYW5ndWFnZXMudmFsdWUsXG4gICAgICAgICAgICAgICAgbGltaXRSZXN1bHRzOiB7XG4gICAgICAgICAgICAgICAgICAgIHBlZXJSZXZpZXdlZDogdGhpcy5wZWVyUmV2aWV3ZWQudmFsdWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBleHBhbmRSZXN1bHRzOiB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGx5RXF1aXZhbGVudFN1YmplY3RzOiB0aGlzLmFwcGx5RXF1aXZhbGVudFN1YmplY3RzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBmdWxsVGV4dDogdGhpcy5mdWxsVGV4dC52YWx1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICAgQ29tcGFyZXMgJ2Zyb20nIGFuZCAndG8nIHRvIGVuc3VyZSAndG8nIGlzID49IHRvICdmcm9tJywgZWxzZSBzd2FwcyB0aGVtLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2F0aGVyVG9BbmRGcm9tVmFsdWVzID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBmcm9tID0gdGhpcy5mcm9tLnZhbHVlXG4gICAgICAgICAgICA/IHBhcnNlSW50KHRoaXMuZnJvbS52YWx1ZSkgPD0gcGFyc2VJbnQodGhpcy50by52YWx1ZSlcbiAgICAgICAgICAgICAgICA/IHRoaXMuZnJvbS52YWx1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy50by52YWx1ZVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgY29uc3QgdG8gPSB0aGlzLnRvLnZhbHVlXG4gICAgICAgICAgICA/IHBhcnNlSW50KHRoaXMudG8udmFsdWUpID49IHBhcnNlSW50KHRoaXMuZnJvbS52YWx1ZSlcbiAgICAgICAgICAgICAgICA/IHRoaXMudG8udmFsdWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuZnJvbS52YWx1ZVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgcmV0dXJuIHsgZnJvbSwgdG8gfTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVmVyaWZpZXMgdGhhdCB0aGVyZSBpcyBhIHF1ZXJ5IHRvIHVzZSwgZ2F0aGVycyBhbGwgb3RoZXIgcXVlcnkgcGFyYW1ldGVycyBuZWVkZWQsIHRoZW4gcGVyZm9ybXMgYW4gYWR2YW5jZWQgc2VhcmNoIHZpYSBgcm91dGVyLm5hdmlnYXRlKClgLlxuICAgICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gcXVlcnlQYXJhbXMgYmFzZSBzZXQgb2YgcXVlcnkgcGFyYW1zIHRvIG5hdmlnYXRlIHdpdGhcbiAgICAgKi9cbiAgICBwcml2YXRlIGRvQWR2YW5jZWRTZWFyY2ggPSAodXBkYXRlZFByb3BzOiBQYXJ0aWFsPFNlYXJjaENvbmZpZz4pOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRlZCA9IHRydWU7XG4gICAgICAgIC8vIERvbid0IHBlcmZvcm0gYSBzZWFyY2ggdW5sZXNzIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBxdWVyeVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnF1ZXJpZXMuYXQoMCkuY29udHJvbHMucXVlcnkuaW52YWxpZCAmJlxuICAgICAgICAgICAgIXRoaXMucXVlcmllcy52YWx1ZS5zb21lKCh2KSA9PiAhIXYucXVlcnkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zaG93U2VhcmNoVmFsaWRhdGlvblRvb2xUaXAoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBEb24ndCBwZXJmb3JtIGEgc2VhcmNoIHVubGVzcyB0aGUgZGF0ZSBmb3JtIGlzIHZhbGlkXG4gICAgICAgIGlmICh0aGlzLmFkdmFuY2VkU2VhcmNoRm9ybS5jb250cm9scy5kYXRlLmludmFsaWQpIHJldHVybjtcblxuICAgICAgICB0aGlzLmFkdmFuY2VkU2VhcmNoLmVtaXQoe1xuICAgICAgICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgICAgICAgICAuLi51cGRhdGVkUHJvcHMsXG4gICAgICAgICAgICBhZHZhbmNlZFNlYXJjaFF1ZXJ5Um93czogdGhpcy5xdWVyaWVzLnZhbHVlIGFzIEFkdmFuY2VkU2VhcmNoUXVlcnlSb3dbXSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaXNTdWJtaXR0ZWQgPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBzaG93U2VhcmNoVmFsaWRhdGlvblRvb2xUaXAgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLmlucHV0VG9vbHRpcC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlucHV0VG9vbHRpcC5zaG93KCk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgc2V0dXBGb3JtID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnF1ZXJpZXMuY2xlYXIoKTtcbiAgICAgICAgLy8gQWx3YXlzIGtlZXAgYXQgbGVhc3QgdHdvIHF1ZXJpZXMgYXZhaWxhYmxlXG4gICAgICAgIHRoaXMuYWRkUXVlcnkoKTtcbiAgICAgICAgdGhpcy5hZGRRdWVyeSgpO1xuXG4gICAgICAgIC8vIEVuc3VyZSB2YWxpZGF0aW9uIHRvb2x0aXAgY2xvc2VzIHdoZW4gdXNlcyBlbnRlcnMgYSBxdWVyeVxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICB0aGlzLnF1ZXJpZXNcbiAgICAgICAgICAgICAgICAuYXQoMClcbiAgICAgICAgICAgICAgICAuY29udHJvbHMucXVlcnkudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKCcnKSlcbiAgICAgICAgICAgICAgICAucGlwZShmaWx0ZXIoKCkgPT4gISF0aGlzLmlucHV0VG9vbHRpcCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiAodGhpcy5pbnB1dFRvb2x0aXAuZGlzYWJsZWQgPSB0cnVlKSksXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gSWYgbm8gYHF7TlVNfWAgdXNlIGBxYCBmb3IgZmlyc3QgcXVlcnlcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5hZHZhbmNlZFNlYXJjaFF1ZXJ5Um93cy5sZW5ndGgpXG4gICAgICAgICAgICB0aGlzLnF1ZXJpZXMuYXQoMCkuY29udHJvbHMucXVlcnkuc2V0VmFsdWUodGhpcy5jb25maWcucSk7XG5cbiAgICAgICAgdGhpcy5jb25maWcuYWR2YW5jZWRTZWFyY2hRdWVyeVJvd3MuZm9yRWFjaCgocXVlcnlSb3csIGkpID0+IHtcbiAgICAgICAgICAgIC8vIEFkZCBhIHF1ZXJ5IGZvcm0gY29udHJvbCBmb3IgZXZlcnkgcXtudW19IGtleSBhZnRlciB0aGUgZmlyc3QuXG4gICAgICAgICAgICBsZXQgcXVlcnlDb250cm9sID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChpID09PSAwIHx8IGkgPT09IDEpIHtcbiAgICAgICAgICAgICAgICBxdWVyeUNvbnRyb2wgPSB0aGlzLnF1ZXJpZXMuYXQoaSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkUXVlcnkoKTtcbiAgICAgICAgICAgICAgICBxdWVyeUNvbnRyb2wgPSB0aGlzLnF1ZXJpZXMuYXQoLTEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBZGQgdGhlIHF1ZXJ5IHZhbHVlLlxuICAgICAgICAgICAgcXVlcnlDb250cm9sLmNvbnRyb2xzLnF1ZXJ5LnNldFZhbHVlKHF1ZXJ5Um93LnF1ZXJ5KTtcblxuICAgICAgICAgICAgLy8gQWRkIHRoZSBmaWVsZCB2YWx1ZSwgaWYgYXZhaWxhYmxlLlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHF1ZXJ5Um93LmZpZWxkICYmIC8vIE9ubHkgc2V0IHRoZSBmaWVsZCBpZiB0aGUgdmFsdWUgYmVsb25ncyB0byB0aGUgY3VycmVudCBzY29wZVxuICAgICAgICAgICAgICAgIChpc0FkdmFuY2VkU2VhcmNoRmllbGRPcHRpb24ocXVlcnlSb3cuZmllbGQpIHx8XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmNvbmZpZy5zY29wZSA9PT0gJ2xvY2FsJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBpc0FkdmFuY2VkU2VhcmNoTG9jYWxGaWVsZE9wdGlvbihxdWVyeVJvdy5maWVsZClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaXNBZHZhbmNlZFNlYXJjaEV4dGVybmFsRmllbGRPcHRpb24ocXVlcnlSb3cuZmllbGQpKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBxdWVyeUNvbnRyb2wuY29udHJvbHMuZmllbGQuc2V0VmFsdWUocXVlcnlSb3cuZmllbGQpO1xuICAgICAgICAgICAgZWxzZSBxdWVyeUNvbnRyb2wuY29udHJvbHMuZmllbGQuc2V0VmFsdWUodGhpcy5hZHZhbmNlZFNlYXJjaE9wdGlvbnMuZmllbGRzWzBdKTtcblxuICAgICAgICAgICAgLy8gQWRkIHRoZSBxdWFsaWZpZXIgdmFsdWUsIGlmIGF2YWlsYWJsZSBhbmQgYSBsb2NhbCBzZWFyY2guXG4gICAgICAgICAgICBpZiAodGhpcy5jb25maWcuc2NvcGUgPT09ICdsb2NhbCcgJiYgcXVlcnlSb3cucXVhbGlmaWVyKVxuICAgICAgICAgICAgICAgIHF1ZXJ5Q29udHJvbC5jb250cm9scy5xdWFsaWZpZXIuc2V0VmFsdWUoXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5Um93LnF1YWxpZmllciB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZHZhbmNlZFNlYXJjaE9wdGlvbnMucXVhbGlmaWVyc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeUNvbnRyb2wuY29udHJvbHMuZmllbGQudmFsdWUgYXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBZHZhbmNlZFNlYXJjaEZpZWxkT3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQWR2YW5jZWRTZWFyY2hMb2NhbEZpZWxkT3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIEFkZCB0aGUgYm9vbGVhbiwgaWYgYXZhaWxhYmxlIGFuZCBub3QgdGhlIGZpcnN0IHF1ZXJ5LlxuICAgICAgICAgICAgaWYgKGkgIT09IDAgJiYgcXVlcnlSb3cuYm9vbGVhbilcbiAgICAgICAgICAgICAgICBxdWVyeUNvbnRyb2wuY29udHJvbHMuYm9vbGVhbi5zZXRWYWx1ZShxdWVyeVJvdy5ib29sZWFuKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5zY29wZSA9PT0gJ2xvY2FsJykge1xuICAgICAgICAgICAgdGhpcy50eXBlcy5zZXRWYWx1ZSh0aGlzLmNvbmZpZy5sb2NhbEFkdmFuY2VkU2VhcmNoLnNlbGVjdGVkUmVzb3VyY2VUeXBlcyk7XG4gICAgICAgICAgICB0aGlzLmNvbGxlY3Rpb25zLnNldFZhbHVlKHRoaXMuY29uZmlnLmxvY2FsQWR2YW5jZWRTZWFyY2guc2VsZWN0ZWRDb2xsZWN0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLmxhbmd1YWdlcy5zZXRWYWx1ZShcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5sb2NhbEFkdmFuY2VkU2VhcmNoLnNlbGVjdGVkTGFuZ3VhZ2VzIGFzIEFkdmFuY2VkU2VhcmNoTGFuZ3VhZ2VPcHRpb25bXSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmZyb20uc2V0VmFsdWUodGhpcy5jb25maWcubG9jYWxBZHZhbmNlZFNlYXJjaC5jcmVhdGlvbkRhdGUuZnJvbSk7XG4gICAgICAgICAgICB0aGlzLnRvLnNldFZhbHVlKHRoaXMuY29uZmlnLmxvY2FsQWR2YW5jZWRTZWFyY2guY3JlYXRpb25EYXRlLnRvKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VzLnNldFZhbHVlKFxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmV4dGVybmFsQWR2YW5jZWRTZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgLnNlbGVjdGVkTGFuZ3VhZ2VzIGFzIEFkdmFuY2VkU2VhcmNoTGFuZ3VhZ2VPcHRpb25bXSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmZyb20uc2V0VmFsdWUodGhpcy5jb25maWcuZXh0ZXJuYWxBZHZhbmNlZFNlYXJjaC5kYXRlUHVibGlzaGVkLmZyb20pO1xuICAgICAgICAgICAgdGhpcy50by5zZXRWYWx1ZSh0aGlzLmNvbmZpZy5leHRlcm5hbEFkdmFuY2VkU2VhcmNoLmRhdGVQdWJsaXNoZWQudG8pO1xuICAgICAgICAgICAgdGhpcy5wZWVyUmV2aWV3ZWQuc2V0VmFsdWUoXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuZXh0ZXJuYWxBZHZhbmNlZFNlYXJjaC5saW1pdFJlc3VsdHMucGVlclJldmlld2VkLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlFcXVpdmFsZW50U3ViamVjdHMuc2V0VmFsdWUoXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuZXh0ZXJuYWxBZHZhbmNlZFNlYXJjaC5leHBhbmRSZXN1bHRzLmFwcGx5RXF1aXZhbGVudFN1YmplY3RzLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZnVsbFRleHQuc2V0VmFsdWUodGhpcy5jb25maWcuZXh0ZXJuYWxBZHZhbmNlZFNlYXJjaC5leHBhbmRSZXN1bHRzLmZ1bGxUZXh0KTtcbiAgICAgICAgfVxuICAgIH07XG59XG4iLCI8Zm9ybVxuICAgIGRhdGEtdGVzdGlkPVwiYWR2YW5jZWRTZWFyY2hGb3JtXCJcbiAgICAoc3VibWl0KT1cImNvbmZpZy5zY29wZSA9PT0gJ2xvY2FsJyA/IGRvTG9jYWxBZHZhbmNlZFNlYXJjaCgpIDogZG9FeHRlcm5hbEFkdmFuY2VkU2VhcmNoKClcIlxuICAgIFtmb3JtR3JvdXBdPVwiYWR2YW5jZWRTZWFyY2hGb3JtXCJcbiAgICBjbGFzcz1cInNzLWFkdi1zZWFyY2gtd3JhcHBlclwiXG4+XG4gICAgPGgzPkFkdmFuY2VkIFNlYXJjaDwvaDM+XG4gICAgPCEtLSBRdWVyaWVzIC0tPlxuICAgIEBmb3IgKHF1ZXJ5IG9mIHF1ZXJpZXMuY29udHJvbHM7IHRyYWNrICRpbmRleDsgbGV0IHF1ZXJ5SW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInNzLWFkdi1zZWFyY2gtcm93XCIgW2Zvcm1Hcm91cF09XCJxdWVyeVwiPlxuICAgICAgICAgICAgPCEtLSBCb29sZWFuIG9wZXJhdG9yIC0tPlxuICAgICAgICAgICAgPCEtLSBBZGQgYm9vbGVhbiBmb3IgZWFjaCByb3cgZXhjZXB0IGZvciBmaXJzdCAtLT5cbiAgICAgICAgICAgIEBpZiAoISRmaXJzdCkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcy1zZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2Jvb2xlYW4nICsgcXVlcnlJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIidib29sZWFuJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCInYm9vbGVhbicgKyBxdWVyeUluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYm9vbGVhbiBvZiBhZHZhbmNlZFNlYXJjaE9wdGlvbnMuYm9vbGVhbjsgdHJhY2sgYm9vbGVhbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiYm9vbGVhblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBib29sZWFuIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPCEtLSBGaWVsZCAtLT5cbiAgICAgICAgICAgIDxsYWJlbCBbZm9yXT1cIidmaWVsZCcgKyBxdWVyeUluZGV4XCIgY2xhc3M9XCJzcy1oaWRkZW5cIj5GaWVsZCB7eyBxdWVyeUluZGV4IH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcy1zZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidmaWVsZCcgKyBxdWVyeUluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCInZmllbGQnXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2ZpZWxkJyArIHF1ZXJ5SW5kZXhcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoZmllbGQgb2YgYWR2YW5jZWRTZWFyY2hPcHRpb25zLmZpZWxkczsgdHJhY2sgZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhZHZhbmNlZFNlYXJjaEZpZWxkTWFwW2ZpZWxkXSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPG9wdGdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiKGNvbmZpZy5zY29wZSA9PT0gJ2V4dGVybmFsJyA/ICdPbmxpbmUnIDogJ0xpYnJhcnknKSArICcgU3BlY2lmaWMnXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgb2YgY29uZmlnLnNjb3BlID09PSAnZXh0ZXJuYWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYWR2YW5jZWRTZWFyY2hPcHRpb25zLmV4dGVybmFsRmllbGRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYWR2YW5jZWRTZWFyY2hPcHRpb25zLmxvY2FsRmllbGRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrIGZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cImZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFkdmFuY2VkU2VhcmNoRmllbGRNYXBbZmllbGRdIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvb3B0Z3JvdXA+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gUXVhbGlmaWVycyBhcmUgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHNlYXJjaGVzIC0tPlxuICAgICAgICAgICAgQGlmIChjb25maWcuc2NvcGUgPT09ICdsb2NhbCcpIHtcbiAgICAgICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCIncXVhbGlmaWVyJyArIHF1ZXJ5SW5kZXhcIiBjbGFzcz1cInNzLWhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgID5NYXRjaCBDcml0ZXJpYSB7eyBxdWVyeUluZGV4IH19PC9sYWJlbFxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Mtc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidxdWFsaWZpZXInICsgcXVlcnlJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIidxdWFsaWZpZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIidxdWFsaWZpZXInICsgcXVlcnlJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gJGFueSBiZWNhdXNlIGEgZmllbGQgY2FuIHRlY2huaWNhbGx5IGJlIGxvY2FsIG9yIGV4dGVybmFsLCB0aG91Z2ggdGhpcyBibG9jayBpcyBzY29wZWQgc3RyaWN0bHkgdG8gbG9jYWwgZmllbGRzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbGlmaWVyIG9mICRhbnkoYWR2YW5jZWRTZWFyY2hPcHRpb25zLnF1YWxpZmllcnMpW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5jb250cm9scy5maWVsZC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2sgcXVhbGlmaWVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvcHRpb25JbmRleCA9ICRpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJxdWFsaWZpZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdxdWFsaWZpZXInICsgcXVlcnlJbmRleCArICctb3B0aW9uJyArIG9wdGlvbkluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAkYW55KGFkdmFuY2VkU2VhcmNoUXVhbGlmaWVyTWFwKVtxdWFsaWZpZXJdIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPCEtLSBRdWVyeSAtLT5cbiAgICAgICAgICAgIDxsYWJlbCBbZm9yXT1cIidxdWVyeScgKyBxdWVyeUluZGV4XCIgY2xhc3M9XCJzcy1oaWRkZW5cIj5RdWVyeSB7eyBxdWVyeUluZGV4IH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcy1xdWVyeS1pbnB1dFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAjc2VhcmNoSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidxdWVyeScgKyBxdWVyeUluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCIncXVlcnknXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ3F1ZXJ5JyArIHF1ZXJ5SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICBhcmlhLXJlcXVpcmVkPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJGaWxsIG91dCB0aGlzIGZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09XCInYWJvdmUnXCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImlzU3VibWl0dGVkICYmIHF1ZXJpZXMuYXQoMCkuY29udHJvbHMucXVlcnkuaW52YWxpZFwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJpbnZhbGlkSW5wdXREZXNjXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKCEkZmlyc3QpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3Mtcm93LWNhbmNlbFwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlUXVlcnkocXVlcnlJbmRleClcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCInY2FuY2VsUm93JyArIHF1ZXJ5SW5kZXhcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHNzLWljb25cIj4gY2FuY2VsIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJhZGRRdWVyeSgpXCJcbiAgICAgICAgaWQ9XCJhZGRRdWVyeUJ0blwiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwiYWRkUXVlcnlcIlxuICAgICAgICBbZGlzYWJsZWRdPVwicXVlcmllcy5sZW5ndGggPiAxMVwiXG4gICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgc3MtaWNvblwiPiBhZGQgPC9zcGFuPlxuICAgICAgICBBZGQgYSByb3dcbiAgICA8L2J1dHRvbj5cbiAgICA8IS0tIE9USEVSIE9QVElPTlMgLS0+XG4gICAgPGRpdiBjbGFzcz1cInNzLW90aGVyLW9wdGlvbnNcIj5cbiAgICAgICAgPCEtLSBMT0NBTCAtLT5cbiAgICAgICAgQGlmIChjb25maWcuc2NvcGUgPT09ICdsb2NhbCcpIHtcbiAgICAgICAgICAgIDwhLS0gVHlwZSAtLT5cbiAgICAgICAgICAgIDxkaXYgZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZVR5cGVcIj5cbiAgICAgICAgICAgICAgICA8aDQ+UmVzb3VyY2UgVHlwZTwvaDQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNzLW11bHRpLXNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItaGJsbC1tdWx0aS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInUmVzb3VyY2UgVHlwZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FsbE9wdGlvbnNdPVwiYWR2YW5jZWRTZWFyY2hPcHRpb25zLnR5cGVzW2NvbmZpZy5pbnN0aXR1dGlvbl1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkS2V5c109XCJ0eXBlcy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRLZXlzQ2hhbmdlKT1cInR5cGVzLnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9saWItaGJsbC1tdWx0aS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gQ29sbGVjdGlvbiAtLT5cbiAgICAgICAgICAgIDxkaXYgZGF0YS10ZXN0aWQ9XCJjb2xsZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGg0PkNvbGxlY3Rpb248L2g0PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcy1tdWx0aS1zZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bGliLWhibGwtbXVsdGktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0NvbGxlY3Rpb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthbGxPcHRpb25zXT1cImFkdmFuY2VkU2VhcmNoT3B0aW9ucy5jb2xsZWN0aW9uc1tjb25maWcuaW5zdGl0dXRpb25dXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZEtleXNdPVwiY29sbGVjdGlvbnMudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkS2V5c0NoYW5nZSk9XCJjb2xsZWN0aW9ucy5zZXRWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbGliLWhibGwtbXVsdGktc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIExhbmd1YWdlIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxhbmd1YWdlQmxvY2tcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwhLS0gRGF0ZSAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImRhdGVCbG9jazsgY29udGV4dDogeyBoZWFkZXI6ICdDcmVhdGlvbiBEYXRlJyB9XCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgICAgICA8IS0tIEVYVEVSTkFMIC0tPlxuICAgICAgICBAaWYgKGNvbmZpZy5zY29wZSA9PT0gJ2V4dGVybmFsJykge1xuICAgICAgICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwibGltaXRSZXN1bHRzXCIgY2xhc3M9XCJzcy1jaGVja2JveC1zZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGg0PkZvciBGZXdlciBSZXN1bHRzIFRyeTwvaDQ+XG4gICAgICAgICAgICAgICAgPCEtLSBQZWVyIHJldmlld2VkIC0tPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNzLWNoZWNrYm94LWxhYmVsXCIgZm9yPVwicGVlclJldmlld2VkXCIgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzcy1oaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJwZWVyUmV2aWV3ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiJ3BlZXJSZXZpZXdlZCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJwZWVyUmV2aWV3ZWRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8bGliLWhibGwtY2hlY2tib3ggW2lzQ2hlY2tlZF09XCJwZWVyUmV2aWV3ZWQudmFsdWVcIj48L2xpYi1oYmxsLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNzLWxhYmVsLXRleHRcIj5QZWVyIHJldmlld2VkIGpvdXJuYWwgYXJ0aWNsZXM8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwiZXhwYW5kUmVzdWx0c1wiIGNsYXNzPVwic3MtY2hlY2tib3gtc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxoND5Gb3IgTW9yZSBSZXN1bHRzIFRyeTwvaDQ+XG4gICAgICAgICAgICAgICAgPCEtLSBBcHBseSBlcXVpdmFsZW50IHN1YmplY3RzIC0tPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNzLWNoZWNrYm94LWxhYmVsXCIgZm9yPVwiYXBwbHlFcXVpdmFsZW50U3ViamVjdHNcIiB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNzLWhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImFwcGx5RXF1aXZhbGVudFN1YmplY3RzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIidhcHBseUVxdWl2YWxlbnRTdWJqZWN0cydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJhcHBseUVxdWl2YWxlbnRTdWJqZWN0c1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItaGJsbC1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgW2lzQ2hlY2tlZF09XCJhcHBseUVxdWl2YWxlbnRTdWJqZWN0cy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgID48L2xpYi1oYmxsLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNzLWxhYmVsLXRleHRcIj5BcHBseSBlcXVpdmFsZW50IHN1YmplY3RzPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPCEtLSBGdWxsIHRleHQgLS0+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3MtY2hlY2tib3gtbGFiZWxcIiBmb3I9XCJmdWxsVGV4dFwiIHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3MtaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZnVsbFRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiJ2Z1bGxUZXh0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImZ1bGxUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPGxpYi1oYmxsLWNoZWNrYm94IFtpc0NoZWNrZWRdPVwiZnVsbFRleHQudmFsdWVcIj48L2xpYi1oYmxsLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNzLWxhYmVsLXRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPkluY2x1ZGUgcmVzdWx0cyB0aGUgbGlicmFyeSBkb2Vzbid0IGhhdmUgYWNjZXNzIHRvPC9zcGFuXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIERhdGUgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkYXRlQmxvY2s7IGNvbnRleHQ6IHsgaGVhZGVyOiAnRGF0ZSBQdWJsaXNoZWQnIH1cIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPCEtLSBMYW5ndWFnZSAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsYW5ndWFnZUJsb2NrXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGlkPVwiYWR2U2VhcmNoRm9vdGVyXCI+XG4gICAgICAgIDxhIFtocmVmXT1cIidodHRwczovL2xpYi5ieXUuZWR1L2Jyb3dzZS8nICsgY29uZmlnLmluc3RpdHV0aW9uXCI+QWxwaGFiZXRpYyBCcm93c2U8L2E+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwicGlsbC1idG4tLWNvbXBvbmVudHNcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgIGVuc2lnbjogY29uZmlnLmluc3RpdHV0aW9uID09PSAnZW5zaWduJyxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cImFkdlNlYXJjaFN1Ym1pdEJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgICAgIFNlYXJjaFxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZm9ybT5cblxuPG5nLXRlbXBsYXRlICNsYW5ndWFnZUJsb2NrPlxuICAgIDxkaXY+XG4gICAgICAgIDxoND5MYW5ndWFnZTwvaDQ+XG4gICAgICAgIDxsaWItaGJsbC1tdWx0aS1zZWxlY3RcbiAgICAgICAgICAgIFtsYWJlbF09XCInbGFuZ3VhZ2UnXCJcbiAgICAgICAgICAgIFthbGxPcHRpb25zXT1cImFkdmFuY2VkU2VhcmNoT3B0aW9ucy5sYW5ndWFnZXNcIlxuICAgICAgICAgICAgW3NlbGVjdGVkS2V5c109XCJsYW5ndWFnZXMudmFsdWVcIlxuICAgICAgICAgICAgKHNlbGVjdGVkS2V5c0NoYW5nZSk9XCJsYW5ndWFnZXMuc2V0VmFsdWUoJGFueSgkZXZlbnQpKVwiXG4gICAgICAgID48L2xpYi1oYmxsLW11bHRpLXNlbGVjdD5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RhdGVCbG9jayBsZXQtaGVhZGVyPVwiaGVhZGVyXCI+XG4gICAgPGRpdiBpZD1cImRhdGVPcHRpb25zXCIgY2xhc3M9XCJleHRlcm5hbFwiPlxuICAgICAgICA8aDQ+e3sgaGVhZGVyIH19PC9oND5cbiAgICAgICAgPGxpYi1kYXRlLXJhbmdlXG4gICAgICAgICAgICBbZnJvbV09XCJmcm9tLnZhbHVlXCJcbiAgICAgICAgICAgIFt0b109XCJ0by52YWx1ZVwiXG4gICAgICAgICAgICAoZnJvbUNoYW5nZSk9XCJmcm9tLnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgKHRvQ2hhbmdlKT1cInRvLnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICA+PC9saWItZGF0ZS1yYW5nZT5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
273
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtc2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zcy1zZWFyY2gtYmFyL2FkdmFuY2VkLXNlYXJjaC9hZHZhbmNlZC1zZWFyY2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL3NzLXNlYXJjaC1iYXIvYWR2YW5jZWQtc2VhcmNoL2FkdmFuY2VkLXNlYXJjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxNQUFNLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdILHNCQUFzQixFQUN0QixtQkFBbUIsRUFDbkIsVUFBVSxHQUNiLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFTSCwyQkFBMkIsRUFDM0IsZ0NBQWdDLEVBQ2hDLG1DQUFtQyxHQUN0QyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0gseUJBQXlCLEVBQ3pCLHVCQUF1QixFQUN2Qiw2QkFBNkIsRUFDN0IsNkJBQTZCLEdBQ2hDLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxhQUFhLEVB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ZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEZvcm1Db250cm9sLFxuICAgIEZvcm1Hcm91cCxcbiAgICBOb25OdWxsYWJsZUZvcm1CdWlsZGVyLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcCwgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgZmlsdGVyLCBzdGFydFdpdGgsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gICAgQWR2YW5jZWRTZWFyY2hCb29sZWFuT3B0aW9uLFxuICAgIEFkdmFuY2VkU2VhcmNoTG9jYWxGaWVsZE9wdGlvbixcbiAgICBBZHZhbmNlZFNlYXJjaExhbmd1YWdlT3B0aW9uLFxuICAgIEFkdmFuY2VkU2VhcmNoUXVhbGlmaWVyT3B0aW9uLFxuICAgIEFkdmFuY2VkU2VhcmNoUXVhbGlmaWVyLFxuICAgIEFkdmFuY2VkU2VhcmNoRXh0ZXJuYWxGaWVsZE9wdGlvbixcbiAgICBBZHZhbmNlZFNlYXJjaFF1ZXJ5Um93LFxuICAgIEFkdmFuY2VkU2VhcmNoRmllbGRPcHRpb24sXG4gICAgaXNBZHZhbmNlZFNlYXJjaEZpZWxkT3B0aW9uLFxuICAgIGlzQWR2YW5jZWRTZWFyY2hMb2NhbEZpZWxkT3B0aW9uLFxuICAgIGlzQWR2YW5jZWRTZWFyY2hFeHRlcm5hbEZpZWxkT3B0aW9uLFxufSBmcm9tICcuLi9tb2RlbHMvYWR2YW5jZWQtc2VhcmNoLm1vZGVsJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdmFsaWRhdGVEYXRlUmFuZ2VGaWVsZHMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBRFZBTkNFRF9TRUFSQ0hfRklFTERfTUFQLFxuICAgIEFEVkFOQ0VEX1NFQVJDSF9PUFRJT05TLFxuICAgIEFEVkFOQ0VEX1NFQVJDSF9RVUFMSUZJRVJfTUFQLFxuICAgIEFEVkFOQ0VEX1NFQVJDSF9RVUVSSUVTX0xJTUlULFxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgSGJsbE11bHRpU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbXVsdGktc2VsZWN0L211bHRpLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSGJsbENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVSYW5nZUNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGUtcmFuZ2UvZGF0ZS1yYW5nZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VhcmNoQ29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzL3NlYXJjaC1jb25maWcubW9kZWwnO1xuXG50eXBlIFF1ZXJ5Um93ID0ge1xuICAgIGJvb2xlYW46IEZvcm1Db250cm9sPEFkdmFuY2VkU2VhcmNoQm9vbGVhbk9wdGlvbj47XG4gICAgZmllbGQ6IEZvcm1Db250cm9sPFxuICAgICAgICB8IEFkdmFuY2VkU2VhcmNoRmllbGRPcHRpb25cbiAgICAgICAgfCBBZHZhbmNlZFNlYXJjaExvY2FsRmllbGRPcHRpb25cbiAgICAgICAgfCBBZHZhbmNlZFNlYXJjaEV4dGVybmFsRmllbGRPcHRpb25cbiAgICA+O1xuICAgIHF1YWxpZmllcjogRm9ybUNvbnRyb2w8QWR2YW5jZWRTZWFyY2hRdWFsaWZpZXJPcHRpb24+O1xuICAgIHF1ZXJ5OiBGb3JtQ29udHJvbDxzdHJpbmc+O1xufTtcblxuY29uc3QgREFURV9WQUxJREFUT1JfUkVHRVggPSAnXlswLTldezR9JCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGliLXNzLWFkdmFuY2VkLXNlYXJjaCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWR2YW5jZWQtc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hZHZhbmNlZC1zZWFyY2guY29tcG9uZW50LnNjc3MnXSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgSGJsbE11bHRpU2VsZWN0Q29tcG9uZW50LFxuICAgICAgICBIYmxsQ2hlY2tib3hDb21wb25lbnQsXG4gICAgICAgIERhdGVSYW5nZUNvbXBvbmVudCxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFNlYXJjaENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmYiA9IGluamVjdChOb25OdWxsYWJsZUZvcm1CdWlsZGVyKTtcbiAgICBwcml2YXRlIF9jb25maWchOiBTZWFyY2hDb25maWc7XG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgc2V0IGNvbmZpZyhjb25maWc6IFNlYXJjaENvbmZpZykge1xuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgICAgIHRoaXMuc2V0dXBGb3JtKCk7XG4gICAgfVxuICAgIGdldCBjb25maWcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWc7XG4gICAgfVxuICAgIEBPdXRwdXQoKSBhZHZhbmNlZFNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8U2VhcmNoQ29uZmlnPigpO1xuXG4gICAgLy8gVGhvdWdoIG11bHRpcGxlIGluc3RhbmNlcyBleGlzdHMsIHRoaXMgcmVwcmVzZW50IHF1ZXJ5IDEuXG4gICAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnKSBwcml2YXRlIHNlYXJjaElucHV0ITogRWxlbWVudFJlZjtcbiAgICAvLyBUaGUgdG9vbHRpcCBpcyBkaXNhYmxlZCBpbiB0aGUgdGVtcGxhdGUuXG4gICAgLy8gSXQgaXMgZW5hYmxlZCBhbmQgZGlzcGxheWVkIGlmIGEgdXNlciBzZWFyY2hlcyBhZ2FpbnN0IGFuIGVtcHR5IHF1ZXJ5IChzaW1wbGUgb3IgcTEpLlxuICAgIC8vIEFueSBjaGFuZ2UgdG8gdGhlIHNlYXJjaCBmaWVsZCBkaXNhYmxlcyB0aGUgdG9vbHRpcC5cbiAgICBAVmlld0NoaWxkKE1hdFRvb2x0aXApIHByaXZhdGUgaW5wdXRUb29sdGlwITogTWF0VG9vbHRpcDtcblxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGFrZXMgYSBgRm9ybUdyb3VwYCBhbmQgc3luY3MgdXAgdGhlIGBmaWVsZGAgYW5kIGBxdWFsaWZpZXJgIHZhbHVlcy5cbiAgICAgKiBBZnRlciBzeW5jaW5nLCB3aGVuIHRoZSBgZmllbGRgIHZhbHVlIGNoYW5nZXMsIHRoZSBgcXVhbGlmaWVyYCB2YWx1ZSB3aWxsIHVwZGF0ZSBhcHByb3ByaWF0ZWx5LlxuICAgICAqL1xuICAgIHByaXZhdGUgc3luY1VwRmllbGRBbmRRdWFsaWZpZXIgPSAoXG4gICAgICAgIGZnOiBGb3JtR3JvdXA8e1xuICAgICAgICAgICAgYm9vbGVhbjogRm9ybUNvbnRyb2w7XG4gICAgICAgICAgICBmaWVsZDogRm9ybUNvbnRyb2w7XG4gICAgICAgICAgICBxdWFsaWZpZXI6IEZvcm1Db250cm9sO1xuICAgICAgICAgICAgcXVlcnk6IEZvcm1Db250cm9sO1xuICAgICAgICB9PixcbiAgICAgICAgc2NvcGU6IFNlYXJjaENvbmZpZ1snc2NvcGUnXSxcbiAgICApID0+IHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgZmcuY29udHJvbHMuZmllbGQudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiBzY29wZSA9PT0gJ2xvY2FsJyksXG4gICAgICAgICAgICAgICAgICAgIHRhcCgodmFsOiBBZHZhbmNlZFNlYXJjaFF1YWxpZmllcikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZnLmNvbnRyb2xzLnF1YWxpZmllci5zZXRWYWx1ZShBRFZBTkNFRF9TRUFSQ0hfT1BUSU9OUy5xdWFsaWZpZXJzW3ZhbF1bMF0pLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCksXG4gICAgICAgICk7XG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBhZHZhbmNlZFNlYXJjaEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgcXVlcmllczogdGhpcy5mYi5hcnJheTxGb3JtR3JvdXA8UXVlcnlSb3c+PihcbiAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKEFEVkFOQ0VEX1NFQVJDSF9RVUVSSUVTX0xJTUlUKV0sXG4gICAgICAgICksXG4gICAgICAgIHR5cGVzOiBbW10gYXMgc3RyaW5nW11dLFxuICAgICAgICBjb2xsZWN0aW9uczogW1tdIGFzIHN0cmluZ1tdXSxcbiAgICAgICAgbGFuZ3VhZ2VzOiBbW10gYXMgQWR2YW5jZWRTZWFyY2hMYW5ndWFnZU9wdGlvbltdXSxcbiAgICAgICAgZGF0ZTogdGhpcy5mYi5ncm91cChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmcm9tOiBbJycsIFtWYWxpZGF0b3JzLm1heExlbmd0aCg0KSwgVmFsaWRhdG9ycy5wYXR0ZXJuKERBVEVfVkFMSURBVE9SX1JFR0VYKV1dLFxuICAgICAgICAgICAgICAgIHRvOiBbJycsIFtWYWxpZGF0b3JzLm1heExlbmd0aCg0KSwgVmFsaWRhdG9ycy5wYXR0ZXJuKERBVEVfVkFMSURBVE9SX1JFR0VYKV1dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgdmFsaWRhdG9yczogdmFsaWRhdGVEYXRlUmFuZ2VGaWVsZHMoKSB9LFxuICAgICAgICApLFxuICAgICAgICBsaW1pdFJlc3VsdHM6IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgICAgcGVlclJldmlld2VkOiBbZmFsc2VdLFxuICAgICAgICB9KSxcbiAgICAgICAgZXhwYW5kUmVzdWx0czogdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBhcHBseUVxdWl2YWxlbnRTdWJqZWN0czogW2ZhbHNlXSxcbiAgICAgICAgICAgIGZ1bGxUZXh0OiBbZmFsc2VdLFxuICAgICAgICB9KSxcbiAgICB9KTtcblxuICAgIHByb3RlY3RlZCBpc1N1Ym1pdHRlZCA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBhZHZhbmNlZFNlYXJjaE9wdGlvbnMgPSBBRFZBTkNFRF9TRUFSQ0hfT1BUSU9OUztcbiAgICBwcm90ZWN0ZWQgYWR2YW5jZWRTZWFyY2hGaWVsZE1hcCA9IEFEVkFOQ0VEX1NFQVJDSF9GSUVMRF9NQVA7XG4gICAgcHJvdGVjdGVkIGFkdmFuY2VkU2VhcmNoUXVhbGlmaWVyTWFwID0gQURWQU5DRURfU0VBUkNIX1FVQUxJRklFUl9NQVA7XG5cbiAgICBnZXQgcXVlcmllcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWR2YW5jZWRTZWFyY2hGb3JtLmNvbnRyb2xzLnF1ZXJpZXM7XG4gICAgfVxuICAgIGdldCB0eXBlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWR2YW5jZWRTZWFyY2hGb3JtLmNvbnRyb2xzLnR5cGVzO1xuICAgIH1cbiAgICBnZXQgY29sbGVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkdmFuY2VkU2VhcmNoRm9ybS5jb250cm9scy5jb2xsZWN0aW9ucztcbiAgICB9XG4gICAgZ2V0IGxhbmd1YWdlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWR2YW5jZWRTZWFyY2hGb3JtLmNvbnRyb2xzLmxhbmd1YWdlcztcbiAgICB9XG4gICAgZ2V0IGZyb20oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkdmFuY2VkU2VhcmNoRm9ybS5jb250cm9scy5kYXRlLmNvbnRyb2xzLmZyb207XG4gICAgfVxuICAgIGdldCB0bygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWR2YW5jZWRTZWFyY2hGb3JtLmNvbnRyb2xzLmRhdGUuY29udHJvbHMudG87XG4gICAgfVxuICAgIGdldCBwZWVyUmV2aWV3ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkdmFuY2VkU2VhcmNoRm9ybS5jb250cm9scy5saW1pdFJlc3VsdHMuY29udHJvbHMucGVlclJldmlld2VkO1xuICAgIH1cbiAgICBnZXQgZnVsbFRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkdmFuY2VkU2VhcmNoRm9ybS5jb250cm9scy5leHBhbmRSZXN1bHRzLmNvbnRyb2xzLmZ1bGxUZXh0O1xuICAgIH1cbiAgICBnZXQgYXBwbHlFcXVpdmFsZW50U3ViamVjdHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkdmFuY2VkU2VhcmNoRm9ybS5jb250cm9scy5leHBhbmRSZXN1bHRzLmNvbnRyb2xzLmFwcGx5RXF1aXZhbGVudFN1YmplY3RzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBhIHF1ZXJ5IHRvIGBxdWVyaWVzYCBgRm9ybUFycmF5YC4gVGhpcyBGb3JtR3JvdXAgaGFzIGFuIGFkZGl0aW9uYWwgYGJvb2xlYW5gIGNvbnRyb2wuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFkZFF1ZXJ5ID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnF1ZXJpZXMucHVzaChcbiAgICAgICAgICAgIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgICAgICAgIGJvb2xlYW46IFtBRFZBTkNFRF9TRUFSQ0hfT1BUSU9OUy5ib29sZWFuWzBdIGFzIEFkdmFuY2VkU2VhcmNoQm9vbGVhbk9wdGlvbl0sXG4gICAgICAgICAgICAgICAgZmllbGQ6IFtcbiAgICAgICAgICAgICAgICAgICAgQURWQU5DRURfU0VBUkNIX09QVElPTlMuZmllbGRzWzBdIGFzXG4gICAgICAgICAgICAgICAgICAgICAgICB8IEFkdmFuY2VkU2VhcmNoRmllbGRPcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIHwgQWR2YW5jZWRTZWFyY2hMb2NhbEZpZWxkT3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICB8IEFkdmFuY2VkU2VhcmNoRXh0ZXJuYWxGaWVsZE9wdGlvbixcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHF1YWxpZmllcjogW1xuICAgICAgICAgICAgICAgICAgICBBRFZBTkNFRF9TRUFSQ0hfT1BUSU9OUy5xdWFsaWZpZXJzW1xuICAgICAgICAgICAgICAgICAgICAgICAgQURWQU5DRURfU0VBUkNIX09QVElPTlMubG9jYWxGaWVsZHNbMF1cbiAgICAgICAgICAgICAgICAgICAgXVswXSBhcyBBZHZhbmNlZFNlYXJjaFF1YWxpZmllck9wdGlvbixcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHF1ZXJ5OiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3luY1VwRmllbGRBbmRRdWFsaWZpZXIodGhpcy5xdWVyaWVzLmF0KC0xKSwgdGhpcy5jb25maWcuc2NvcGUpO1xuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgcmVtb3ZlUXVlcnkgPSAoaTogbnVtYmVyKSA9PiB7XG4gICAgICAgIHRoaXMucXVlcmllcy5yZW1vdmVBdChpKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJlcGFyZXMgYXBwcm9wcmlhdGUgcXVlcnkgcGFyYW1zIGJlZm9yZSBwZXJmb3JtaW5nIGEgbG9jYWwgYWR2YW5jZWQgc2VhcmNoLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBkb0xvY2FsQWR2YW5jZWRTZWFyY2ggPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZG9BZHZhbmNlZFNlYXJjaCh7XG4gICAgICAgICAgICBsb2NhbEFkdmFuY2VkU2VhcmNoOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5jb25maWcubG9jYWxBZHZhbmNlZFNlYXJjaCxcbiAgICAgICAgICAgICAgICBjcmVhdGlvbkRhdGU6IHRoaXMuZ2F0aGVyVG9BbmRGcm9tVmFsdWVzKCksXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRMYW5ndWFnZXM6IHRoaXMubGFuZ3VhZ2VzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkUmVzb3VyY2VUeXBlczogdGhpcy50eXBlcy52YWx1ZSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbGxlY3Rpb25zOiB0aGlzLmNvbGxlY3Rpb25zLnZhbHVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFByZXBhcmVzIGFwcHJvcHJpYXRlIHF1ZXJ5IHBhcmFtcyBiZWZvcmUgcGVyZm9ybWluZyBhbiBleHRlcm5hbCBhZHZhbmNlZCBzZWFyY2guXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGRvRXh0ZXJuYWxBZHZhbmNlZFNlYXJjaCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5kb0FkdmFuY2VkU2VhcmNoKHtcbiAgICAgICAgICAgIGV4dGVybmFsQWR2YW5jZWRTZWFyY2g6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmNvbmZpZy5leHRlcm5hbEFkdmFuY2VkU2VhcmNoLFxuICAgICAgICAgICAgICAgIGRhdGVQdWJsaXNoZWQ6IHRoaXMuZ2F0aGVyVG9BbmRGcm9tVmFsdWVzKCksXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRMYW5ndWFnZXM6IHRoaXMubGFuZ3VhZ2VzLnZhbHVlLFxuICAgICAgICAgICAgICAgIGxpbWl0UmVzdWx0czoge1xuICAgICAgICAgICAgICAgICAgICBwZWVyUmV2aWV3ZWQ6IHRoaXMucGVlclJldmlld2VkLnZhbHVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXhwYW5kUmVzdWx0czoge1xuICAgICAgICAgICAgICAgICAgICBhcHBseUVxdWl2YWxlbnRTdWJqZWN0czogdGhpcy5hcHBseUVxdWl2YWxlbnRTdWJqZWN0cy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZnVsbFRleHQ6IHRoaXMuZnVsbFRleHQudmFsdWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiAgIENvbXBhcmVzICdmcm9tJyBhbmQgJ3RvJyB0byBlbnN1cmUgJ3RvJyBpcyA+PSB0byAnZnJvbScsIGVsc2Ugc3dhcHMgdGhlbS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdhdGhlclRvQW5kRnJvbVZhbHVlcyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZnJvbSA9IHRoaXMuZnJvbS52YWx1ZVxuICAgICAgICAgICAgPyBwYXJzZUludCh0aGlzLmZyb20udmFsdWUpIDw9IHBhcnNlSW50KHRoaXMudG8udmFsdWUpXG4gICAgICAgICAgICAgICAgPyB0aGlzLmZyb20udmFsdWVcbiAgICAgICAgICAgICAgICA6IHRoaXMudG8udmFsdWVcbiAgICAgICAgICAgIDogJyc7XG4gICAgICAgIGNvbnN0IHRvID0gdGhpcy50by52YWx1ZVxuICAgICAgICAgICAgPyBwYXJzZUludCh0aGlzLnRvLnZhbHVlKSA+PSBwYXJzZUludCh0aGlzLmZyb20udmFsdWUpXG4gICAgICAgICAgICAgICAgPyB0aGlzLnRvLnZhbHVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLmZyb20udmFsdWVcbiAgICAgICAgICAgIDogJyc7XG4gICAgICAgIHJldHVybiB7IGZyb20sIHRvIH07XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFZlcmlmaWVzIHRoYXQgdGhlcmUgaXMgYSBxdWVyeSB0byB1c2UsIGdhdGhlcnMgYWxsIG90aGVyIHF1ZXJ5IHBhcmFtZXRlcnMgbmVlZGVkLCB0aGVuIHBlcmZvcm1zIGFuIGFkdmFuY2VkIHNlYXJjaCB2aWEgYHJvdXRlci5uYXZpZ2F0ZSgpYC5cbiAgICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IHF1ZXJ5UGFyYW1zIGJhc2Ugc2V0IG9mIHF1ZXJ5IHBhcmFtcyB0byBuYXZpZ2F0ZSB3aXRoXG4gICAgICovXG4gICAgcHJpdmF0ZSBkb0FkdmFuY2VkU2VhcmNoID0gKHVwZGF0ZWRQcm9wczogUGFydGlhbDxTZWFyY2hDb25maWc+KTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuaXNTdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgICAvLyBEb24ndCBwZXJmb3JtIGEgc2VhcmNoIHVubGVzcyB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgcXVlcnlcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5xdWVyaWVzLmF0KDApLmNvbnRyb2xzLnF1ZXJ5LmludmFsaWQgJiZcbiAgICAgICAgICAgICF0aGlzLnF1ZXJpZXMudmFsdWUuc29tZSgodikgPT4gISF2LnF1ZXJ5KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1NlYXJjaFZhbGlkYXRpb25Ub29sVGlwKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gRG9uJ3QgcGVyZm9ybSBhIHNlYXJjaCB1bmxlc3MgdGhlIGRhdGUgZm9ybSBpcyB2YWxpZFxuICAgICAgICBpZiAodGhpcy5hZHZhbmNlZFNlYXJjaEZvcm0uY29udHJvbHMuZGF0ZS5pbnZhbGlkKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5hZHZhbmNlZFNlYXJjaC5lbWl0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuY29uZmlnLFxuICAgICAgICAgICAgLi4udXBkYXRlZFByb3BzLFxuICAgICAgICAgICAgYWR2YW5jZWRTZWFyY2hRdWVyeVJvd3M6IHRoaXMucXVlcmllcy52YWx1ZSBhcyBBZHZhbmNlZFNlYXJjaFF1ZXJ5Um93W10sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmlzU3VibWl0dGVkID0gZmFsc2U7XG4gICAgfTtcblxuICAgIHByaXZhdGUgc2hvd1NlYXJjaFZhbGlkYXRpb25Ub29sVGlwID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5pbnB1dFRvb2x0aXAuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbnB1dFRvb2x0aXAuc2hvdygpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHNldHVwRm9ybSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5xdWVyaWVzLmNsZWFyKCk7XG4gICAgICAgIC8vIEFsd2F5cyBrZWVwIGF0IGxlYXN0IHR3byBxdWVyaWVzIGF2YWlsYWJsZVxuICAgICAgICB0aGlzLmFkZFF1ZXJ5KCk7XG4gICAgICAgIHRoaXMuYWRkUXVlcnkoKTtcblxuICAgICAgICAvLyBFbnN1cmUgdmFsaWRhdGlvbiB0b29sdGlwIGNsb3NlcyB3aGVuIHVzZXMgZW50ZXJzIGEgcXVlcnlcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgdGhpcy5xdWVyaWVzXG4gICAgICAgICAgICAgICAgLmF0KDApXG4gICAgICAgICAgICAgICAgLmNvbnRyb2xzLnF1ZXJ5LnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCgnJykpXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKCgpID0+ICEhdGhpcy5pbnB1dFRvb2x0aXApKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gKHRoaXMuaW5wdXRUb29sdGlwLmRpc2FibGVkID0gdHJ1ZSkpLFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIElmIG5vIGBxe05VTX1gIHVzZSBgcWAgZm9yIGZpcnN0IHF1ZXJ5XG4gICAgICAgIGlmICghdGhpcy5jb25maWcuYWR2YW5jZWRTZWFyY2hRdWVyeVJvd3MubGVuZ3RoKVxuICAgICAgICAgICAgdGhpcy5xdWVyaWVzLmF0KDApLmNvbnRyb2xzLnF1ZXJ5LnNldFZhbHVlKHRoaXMuY29uZmlnLnEpO1xuXG4gICAgICAgIHRoaXMuY29uZmlnLmFkdmFuY2VkU2VhcmNoUXVlcnlSb3dzLmZvckVhY2goKHF1ZXJ5Um93LCBpKSA9PiB7XG4gICAgICAgICAgICAvLyBBZGQgYSBxdWVyeSBmb3JtIGNvbnRyb2wgZm9yIGV2ZXJ5IHF7bnVtfSBrZXkgYWZ0ZXIgdGhlIGZpcnN0LlxuICAgICAgICAgICAgbGV0IHF1ZXJ5Q29udHJvbCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoaSA9PT0gMCB8fCBpID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcXVlcnlDb250cm9sID0gdGhpcy5xdWVyaWVzLmF0KGkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFF1ZXJ5KCk7XG4gICAgICAgICAgICAgICAgcXVlcnlDb250cm9sID0gdGhpcy5xdWVyaWVzLmF0KC0xKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWRkIHRoZSBxdWVyeSB2YWx1ZS5cbiAgICAgICAgICAgIHF1ZXJ5Q29udHJvbC5jb250cm9scy5xdWVyeS5zZXRWYWx1ZShxdWVyeVJvdy5xdWVyeSk7XG5cbiAgICAgICAgICAgIC8vIEFkZCB0aGUgZmllbGQgdmFsdWUsIGlmIGF2YWlsYWJsZS5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBxdWVyeVJvdy5maWVsZCAmJiAvLyBPbmx5IHNldCB0aGUgZmllbGQgaWYgdGhlIHZhbHVlIGJlbG9uZ3MgdG8gdGhlIGN1cnJlbnQgc2NvcGVcbiAgICAgICAgICAgICAgICAoaXNBZHZhbmNlZFNlYXJjaEZpZWxkT3B0aW9uKHF1ZXJ5Um93LmZpZWxkKSB8fFxuICAgICAgICAgICAgICAgICAgICAodGhpcy5jb25maWcuc2NvcGUgPT09ICdsb2NhbCdcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaXNBZHZhbmNlZFNlYXJjaExvY2FsRmllbGRPcHRpb24ocXVlcnlSb3cuZmllbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGlzQWR2YW5jZWRTZWFyY2hFeHRlcm5hbEZpZWxkT3B0aW9uKHF1ZXJ5Um93LmZpZWxkKSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgcXVlcnlDb250cm9sLmNvbnRyb2xzLmZpZWxkLnNldFZhbHVlKHF1ZXJ5Um93LmZpZWxkKTtcbiAgICAgICAgICAgIGVsc2UgcXVlcnlDb250cm9sLmNvbnRyb2xzLmZpZWxkLnNldFZhbHVlKHRoaXMuYWR2YW5jZWRTZWFyY2hPcHRpb25zLmZpZWxkc1swXSk7XG5cbiAgICAgICAgICAgIC8vIEFkZCB0aGUgcXVhbGlmaWVyIHZhbHVlLCBpZiBhdmFpbGFibGUgYW5kIGEgbG9jYWwgc2VhcmNoLlxuICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnNjb3BlID09PSAnbG9jYWwnICYmIHF1ZXJ5Um93LnF1YWxpZmllcilcbiAgICAgICAgICAgICAgICBxdWVyeUNvbnRyb2wuY29udHJvbHMucXVhbGlmaWVyLnNldFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICBxdWVyeVJvdy5xdWFsaWZpZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWR2YW5jZWRTZWFyY2hPcHRpb25zLnF1YWxpZmllcnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlDb250cm9sLmNvbnRyb2xzLmZpZWxkLnZhbHVlIGFzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQWR2YW5jZWRTZWFyY2hGaWVsZE9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFkdmFuY2VkU2VhcmNoTG9jYWxGaWVsZE9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBBZGQgdGhlIGJvb2xlYW4sIGlmIGF2YWlsYWJsZSBhbmQgbm90IHRoZSBmaXJzdCBxdWVyeS5cbiAgICAgICAgICAgIGlmIChpICE9PSAwICYmIHF1ZXJ5Um93LmJvb2xlYW4pXG4gICAgICAgICAgICAgICAgcXVlcnlDb250cm9sLmNvbnRyb2xzLmJvb2xlYW4uc2V0VmFsdWUocXVlcnlSb3cuYm9vbGVhbik7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5jb25maWcuc2NvcGUgPT09ICdsb2NhbCcpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZXMuc2V0VmFsdWUodGhpcy5jb25maWcubG9jYWxBZHZhbmNlZFNlYXJjaC5zZWxlY3RlZFJlc291cmNlVHlwZXMpO1xuICAgICAgICAgICAgdGhpcy5jb2xsZWN0aW9ucy5zZXRWYWx1ZSh0aGlzLmNvbmZpZy5sb2NhbEFkdmFuY2VkU2VhcmNoLnNlbGVjdGVkQ29sbGVjdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5sYW5ndWFnZXMuc2V0VmFsdWUoXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubG9jYWxBZHZhbmNlZFNlYXJjaC5zZWxlY3RlZExhbmd1YWdlcyBhcyBBZHZhbmNlZFNlYXJjaExhbmd1YWdlT3B0aW9uW10sXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5mcm9tLnNldFZhbHVlKHRoaXMuY29uZmlnLmxvY2FsQWR2YW5jZWRTZWFyY2guY3JlYXRpb25EYXRlLmZyb20pO1xuICAgICAgICAgICAgdGhpcy50by5zZXRWYWx1ZSh0aGlzLmNvbmZpZy5sb2NhbEFkdmFuY2VkU2VhcmNoLmNyZWF0aW9uRGF0ZS50byk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxhbmd1YWdlcy5zZXRWYWx1ZShcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5leHRlcm5hbEFkdmFuY2VkU2VhcmNoXG4gICAgICAgICAgICAgICAgICAgIC5zZWxlY3RlZExhbmd1YWdlcyBhcyBBZHZhbmNlZFNlYXJjaExhbmd1YWdlT3B0aW9uW10sXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5mcm9tLnNldFZhbHVlKHRoaXMuY29uZmlnLmV4dGVybmFsQWR2YW5jZWRTZWFyY2guZGF0ZVB1Ymxpc2hlZC5mcm9tKTtcbiAgICAgICAgICAgIHRoaXMudG8uc2V0VmFsdWUodGhpcy5jb25maWcuZXh0ZXJuYWxBZHZhbmNlZFNlYXJjaC5kYXRlUHVibGlzaGVkLnRvKTtcbiAgICAgICAgICAgIHRoaXMucGVlclJldmlld2VkLnNldFZhbHVlKFxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmV4dGVybmFsQWR2YW5jZWRTZWFyY2gubGltaXRSZXN1bHRzLnBlZXJSZXZpZXdlZCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmFwcGx5RXF1aXZhbGVudFN1YmplY3RzLnNldFZhbHVlKFxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmV4dGVybmFsQWR2YW5jZWRTZWFyY2guZXhwYW5kUmVzdWx0cy5hcHBseUVxdWl2YWxlbnRTdWJqZWN0cyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmZ1bGxUZXh0LnNldFZhbHVlKHRoaXMuY29uZmlnLmV4dGVybmFsQWR2YW5jZWRTZWFyY2guZXhwYW5kUmVzdWx0cy5mdWxsVGV4dCk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIiwiPGZvcm1cbiAgICBkYXRhLXRlc3RpZD1cImFkdmFuY2VkU2VhcmNoRm9ybVwiXG4gICAgKHN1Ym1pdCk9XCJjb25maWcuc2NvcGUgPT09ICdsb2NhbCcgPyBkb0xvY2FsQWR2YW5jZWRTZWFyY2goKSA6IGRvRXh0ZXJuYWxBZHZhbmNlZFNlYXJjaCgpXCJcbiAgICBbZm9ybUdyb3VwXT1cImFkdmFuY2VkU2VhcmNoRm9ybVwiXG4gICAgY2xhc3M9XCJzcy1hZHYtc2VhcmNoLXdyYXBwZXJcIlxuPlxuICAgIDxoMz5BZHZhbmNlZCBTZWFyY2g8L2gzPlxuICAgIDwhLS0gUXVlcmllcyAtLT5cbiAgICBAZm9yIChxdWVyeSBvZiBxdWVyaWVzLmNvbnRyb2xzOyB0cmFjayAkaW5kZXg7IGxldCBxdWVyeUluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzcy1hZHYtc2VhcmNoLXJvd1wiIFtmb3JtR3JvdXBdPVwicXVlcnlcIj5cbiAgICAgICAgICAgIDwhLS0gQm9vbGVhbiBvcGVyYXRvciAtLT5cbiAgICAgICAgICAgIDwhLS0gQWRkIGJvb2xlYW4gZm9yIGVhY2ggcm93IGV4Y2VwdCBmb3IgZmlyc3QgLS0+XG4gICAgICAgICAgICBAaWYgKCEkZmlyc3QpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Mtc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidib29sZWFuJyArIHF1ZXJ5SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCInYm9vbGVhbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2Jvb2xlYW4nICsgcXVlcnlJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGJvb2xlYW4gb2YgYWR2YW5jZWRTZWFyY2hPcHRpb25zLmJvb2xlYW47IHRyYWNrIGJvb2xlYW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cImJvb2xlYW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYm9vbGVhbiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwhLS0gRmllbGQgLS0+XG4gICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCInZmllbGQnICsgcXVlcnlJbmRleFwiIGNsYXNzPVwic3MtaGlkZGVuXCI+RmllbGQge3sgcXVlcnlJbmRleCB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Mtc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCInZmllbGQnICsgcXVlcnlJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiJ2ZpZWxkJ1wiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIidmaWVsZCcgKyBxdWVyeUluZGV4XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGZpZWxkIG9mIGFkdmFuY2VkU2VhcmNoT3B0aW9ucy5maWVsZHM7IHRyYWNrIGZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cImZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYWR2YW5jZWRTZWFyY2hGaWVsZE1hcFtmaWVsZF0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDxvcHRncm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIihjb25maWcuc2NvcGUgPT09ICdleHRlcm5hbCcgPyAnT25saW5lJyA6ICdMaWJyYXJ5JykgKyAnIFNwZWNpZmljJ1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkIG9mIGNvbmZpZy5zY29wZSA9PT0gJ2V4dGVybmFsJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFkdmFuY2VkU2VhcmNoT3B0aW9ucy5leHRlcm5hbEZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFkdmFuY2VkU2VhcmNoT3B0aW9ucy5sb2NhbEZpZWxkcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayBmaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJmaWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhZHZhbmNlZFNlYXJjaEZpZWxkTWFwW2ZpZWxkXSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L29wdGdyb3VwPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIFF1YWxpZmllcnMgYXJlIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCBzZWFyY2hlcyAtLT5cbiAgICAgICAgICAgIEBpZiAoY29uZmlnLnNjb3BlID09PSAnbG9jYWwnKSB7XG4gICAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiJ3F1YWxpZmllcicgKyBxdWVyeUluZGV4XCIgY2xhc3M9XCJzcy1oaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICA+TWF0Y2ggQ3JpdGVyaWEge3sgcXVlcnlJbmRleCB9fTwvbGFiZWxcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNzLXNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCIncXVhbGlmaWVyJyArIHF1ZXJ5SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCIncXVhbGlmaWVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCIncXVhbGlmaWVyJyArIHF1ZXJ5SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tICRhbnkgYmVjYXVzZSBhIGZpZWxkIGNhbiB0ZWNobmljYWxseSBiZSBsb2NhbCBvciBleHRlcm5hbCwgdGhvdWdoIHRoaXMgYmxvY2sgaXMgc2NvcGVkIHN0cmljdGx5IHRvIGxvY2FsIGZpZWxkcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWxpZmllciBvZiAkYW55KGFkdmFuY2VkU2VhcmNoT3B0aW9ucy5xdWFsaWZpZXJzKVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkuY29udHJvbHMuZmllbGQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrIHF1YWxpZmllcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uSW5kZXggPSAkaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVmFsdWVdPVwicXVhbGlmaWVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncXVhbGlmaWVyJyArIHF1ZXJ5SW5kZXggKyAnLW9wdGlvbicgKyBvcHRpb25JbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJGFueShhZHZhbmNlZFNlYXJjaFF1YWxpZmllck1hcClbcXVhbGlmaWVyXSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwhLS0gUXVlcnkgLS0+XG4gICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCIncXVlcnknICsgcXVlcnlJbmRleFwiIGNsYXNzPVwic3MtaGlkZGVuXCI+UXVlcnkge3sgcXVlcnlJbmRleCB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3MtcXVlcnktaW5wdXRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgI3NlYXJjaElucHV0XG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCIncXVlcnknICsgcXVlcnlJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiJ3F1ZXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIidxdWVyeScgKyBxdWVyeUluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1yZXF1aXJlZD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRmlsbCBvdXQgdGhpcyBmaWVsZFwiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25dPVwiJ2Fib3ZlJ1wiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJpc1N1Ym1pdHRlZCAmJiBxdWVyaWVzLmF0KDApLmNvbnRyb2xzLnF1ZXJ5LmludmFsaWRcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwiaW52YWxpZElucHV0RGVzY1wiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmICghJGZpcnN0KSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNzLXJvdy1jYW5jZWxcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVF1ZXJ5KHF1ZXJ5SW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2NhbmNlbFJvdycgKyBxdWVyeUluZGV4XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBzcy1pY29uXCI+IGNhbmNlbCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbiAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiYWRkUXVlcnkoKVwiXG4gICAgICAgIGlkPVwiYWRkUXVlcnlCdG5cIlxuICAgICAgICBkYXRhLXRlc3RpZD1cImFkZFF1ZXJ5XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInF1ZXJpZXMubGVuZ3RoID4gMTFcIlxuICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHNzLWljb25cIj4gYWRkIDwvc3Bhbj5cbiAgICAgICAgQWRkIGEgcm93XG4gICAgPC9idXR0b24+XG4gICAgPCEtLSBPVEhFUiBPUFRJT05TIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzcy1vdGhlci1vcHRpb25zXCI+XG4gICAgICAgIDwhLS0gTE9DQUwgLS0+XG4gICAgICAgIEBpZiAoY29uZmlnLnNjb3BlID09PSAnbG9jYWwnKSB7XG4gICAgICAgICAgICA8IS0tIFR5cGUgLS0+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtdGVzdGlkPVwicmVzb3VyY2VUeXBlXCI+XG4gICAgICAgICAgICAgICAgPGg0PlJlc291cmNlIFR5cGU8L2g0PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcy1tdWx0aS1zZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bGliLW11bHRpLXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidSZXNvdXJjZSBUeXBlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWxsT3B0aW9uc109XCJhZHZhbmNlZFNlYXJjaE9wdGlvbnMudHlwZXNbY29uZmlnLmluc3RpdHV0aW9uXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRLZXlzXT1cInR5cGVzLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZEtleXNDaGFuZ2UpPVwidHlwZXMuc2V0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID48L2xpYi1tdWx0aS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gQ29sbGVjdGlvbiAtLT5cbiAgICAgICAgICAgIDxkaXYgZGF0YS10ZXN0aWQ9XCJjb2xsZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGg0PkNvbGxlY3Rpb248L2g0PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcy1tdWx0aS1zZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bGliLW11bHRpLXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidDb2xsZWN0aW9uJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWxsT3B0aW9uc109XCJhZHZhbmNlZFNlYXJjaE9wdGlvbnMuY29sbGVjdGlvbnNbY29uZmlnLmluc3RpdHV0aW9uXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRLZXlzXT1cImNvbGxlY3Rpb25zLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZEtleXNDaGFuZ2UpPVwiY29sbGVjdGlvbnMuc2V0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID48L2xpYi1tdWx0aS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gTGFuZ3VhZ2UgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGFuZ3VhZ2VCbG9ja1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPCEtLSBEYXRlIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGF0ZUJsb2NrOyBjb250ZXh0OiB7IGhlYWRlcjogJ0NyZWF0aW9uIERhdGUnIH1cIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICB9XG4gICAgICAgIDwhLS0gRVhURVJOQUwgLS0+XG4gICAgICAgIEBpZiAoY29uZmlnLnNjb3BlID09PSAnZXh0ZXJuYWwnKSB7XG4gICAgICAgICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9XCJsaW1pdFJlc3VsdHNcIiBjbGFzcz1cInNzLWNoZWNrYm94LXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8aDQ+Rm9yIEZld2VyIFJlc3VsdHMgVHJ5PC9oND5cbiAgICAgICAgICAgICAgICA8IS0tIFBlZXIgcmV2aWV3ZWQgLS0+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3MtY2hlY2tib3gtbGFiZWxcIiBmb3I9XCJwZWVyUmV2aWV3ZWRcIiB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNzLWhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cInBlZXJSZXZpZXdlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCIncGVlclJldmlld2VkJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cInBlZXJSZXZpZXdlZFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItY2hlY2tib3ggW2lzQ2hlY2tlZF09XCJwZWVyUmV2aWV3ZWQudmFsdWVcIj48L2xpYi1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcy1sYWJlbC10ZXh0XCI+UGVlciByZXZpZXdlZCBqb3VybmFsIGFydGljbGVzPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT1cImV4cGFuZFJlc3VsdHNcIiBjbGFzcz1cInNzLWNoZWNrYm94LXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8aDQ+Rm9yIE1vcmUgUmVzdWx0cyBUcnk8L2g0PlxuICAgICAgICAgICAgICAgIDwhLS0gQXBwbHkgZXF1aXZhbGVudCBzdWJqZWN0cyAtLT5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzcy1jaGVja2JveC1sYWJlbFwiIGZvcj1cImFwcGx5RXF1aXZhbGVudFN1YmplY3RzXCIgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzcy1oaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhcHBseUVxdWl2YWxlbnRTdWJqZWN0c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCInYXBwbHlFcXVpdmFsZW50U3ViamVjdHMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiYXBwbHlFcXVpdmFsZW50U3ViamVjdHNcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8bGliLWNoZWNrYm94IFtpc0NoZWNrZWRdPVwiYXBwbHlFcXVpdmFsZW50U3ViamVjdHMudmFsdWVcIj48L2xpYi1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcy1sYWJlbC10ZXh0XCI+QXBwbHkgZXF1aXZhbGVudCBzdWJqZWN0czwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwhLS0gRnVsbCB0ZXh0IC0tPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNzLWNoZWNrYm94LWxhYmVsXCIgZm9yPVwiZnVsbFRleHRcIiB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNzLWhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImZ1bGxUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIidmdWxsVGV4dCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJmdWxsVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItY2hlY2tib3ggW2lzQ2hlY2tlZF09XCJmdWxsVGV4dC52YWx1ZVwiPjwvbGliLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNzLWxhYmVsLXRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPkluY2x1ZGUgcmVzdWx0cyB0aGUgbGlicmFyeSBkb2Vzbid0IGhhdmUgYWNjZXNzIHRvPC9zcGFuXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIERhdGUgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkYXRlQmxvY2s7IGNvbnRleHQ6IHsgaGVhZGVyOiAnRGF0ZSBQdWJsaXNoZWQnIH1cIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPCEtLSBMYW5ndWFnZSAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsYW5ndWFnZUJsb2NrXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGlkPVwiYWR2U2VhcmNoRm9vdGVyXCI+XG4gICAgICAgIDxhIFtocmVmXT1cIidodHRwczovL2xpYi5ieXUuZWR1L2Jyb3dzZS8nICsgY29uZmlnLmluc3RpdHV0aW9uXCI+QWxwaGFiZXRpYyBCcm93c2U8L2E+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwicGlsbC1idG4tLWNvbXBvbmVudHNcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgIGVuc2lnbjogY29uZmlnLmluc3RpdHV0aW9uID09PSAnZW5zaWduJyxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cImFkdlNlYXJjaFN1Ym1pdEJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgICAgIFNlYXJjaFxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZm9ybT5cblxuPG5nLXRlbXBsYXRlICNsYW5ndWFnZUJsb2NrPlxuICAgIDxkaXY+XG4gICAgICAgIDxoND5MYW5ndWFnZTwvaDQ+XG4gICAgICAgIDxsaWItbXVsdGktc2VsZWN0XG4gICAgICAgICAgICBbbGFiZWxdPVwiJ2xhbmd1YWdlJ1wiXG4gICAgICAgICAgICBbYWxsT3B0aW9uc109XCJhZHZhbmNlZFNlYXJjaE9wdGlvbnMubGFuZ3VhZ2VzXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZEtleXNdPVwibGFuZ3VhZ2VzLnZhbHVlXCJcbiAgICAgICAgICAgIChzZWxlY3RlZEtleXNDaGFuZ2UpPVwibGFuZ3VhZ2VzLnNldFZhbHVlKCRhbnkoJGV2ZW50KSlcIlxuICAgICAgICA+PC9saWItbXVsdGktc2VsZWN0PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGF0ZUJsb2NrIGxldC1oZWFkZXI9XCJoZWFkZXJcIj5cbiAgICA8ZGl2IGlkPVwiZGF0ZU9wdGlvbnNcIiBjbGFzcz1cImV4dGVybmFsXCI+XG4gICAgICAgIDxoND57eyBoZWFkZXIgfX08L2g0PlxuICAgICAgICA8bGliLWRhdGUtcmFuZ2VcbiAgICAgICAgICAgIFtmcm9tXT1cImZyb20udmFsdWVcIlxuICAgICAgICAgICAgW3RvXT1cInRvLnZhbHVlXCJcbiAgICAgICAgICAgIChmcm9tQ2hhbmdlKT1cImZyb20uc2V0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAodG9DaGFuZ2UpPVwidG8uc2V0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgID48L2xpYi1kYXRlLXJhbmdlPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|