@entake/particle 18.0.5 → 19.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/LICENSE +1 -1
- package/app/{modules → shared/components}/accordion/accordion.component.d.ts +3 -3
- package/app/{modules/date-picker → shared}/components/calendar/calendar.component.d.ts +7 -12
- package/app/{modules → shared/components}/checkbox/checkbox.component.d.ts +5 -7
- package/app/{modules → shared/components}/color-picker/color-picker.component.d.ts +3 -9
- package/app/{modules → shared/components}/date-picker/date-picker.component.d.ts +20 -26
- package/app/{modules/date-picker → shared}/components/date-range-picker/date-range-picker.component.d.ts +10 -11
- package/app/{modules → shared/components}/dialog/dialog.component.d.ts +14 -24
- package/app/{modules → shared/components}/dropdown/dropdown.component.d.ts +12 -14
- package/app/{modules/icons/components → shared/components/icon-select}/icon-select.component.d.ts +14 -17
- package/app/{modules → shared/components}/idle-timeout/idle-timeout.component.d.ts +3 -4
- package/app/{modules → shared/components}/input-mask/input-mask.component.d.ts +6 -7
- package/app/shared/components/layout-full-framing/layout-full-framing.component.d.ts +27 -0
- package/app/shared/components/layout-fullwidth-sidebar/layout-fullwidth-sidebar.component.d.ts +23 -0
- package/app/{modules/loader/components → shared/components/loader}/loader.component.d.ts +2 -2
- package/app/{modules → shared/components}/multi-select/multi-select.component.d.ts +18 -24
- package/app/{modules → shared/components}/notification/notification.component.d.ts +5 -13
- package/app/{modules → shared/components}/paginator/paginator.component.d.ts +12 -11
- package/app/{modules → shared/components}/popover/popover.component.d.ts +10 -15
- package/app/{modules → shared/components}/profile-pic/profile-pic.component.d.ts +1 -1
- package/app/shared/components/progress-bar/progress-bar.component.d.ts +15 -0
- package/app/{modules → shared/components}/rich-text/rich-text.component.d.ts +11 -12
- package/app/shared/components/scroll-to-top/scroll-to-top.component.d.ts +18 -0
- package/app/shared/components/slideover/slideover.component.d.ts +35 -0
- package/app/{modules → shared/components}/slider/slider.component.d.ts +8 -22
- package/app/{modules → shared/components}/toggle-switch/toggle-switch.component.d.ts +4 -6
- package/app/{modules → shared/components}/week-picker/week-picker.component.d.ts +21 -22
- package/app/{modules/accordion → shared}/directives/accordion-content.directive.d.ts +1 -2
- package/app/{modules/accordion → shared}/directives/accordion-header.directive.d.ts +1 -2
- package/app/{modules/accordion → shared}/directives/accordion-item.directive.d.ts +1 -1
- package/app/{modules/background-carousel → shared/directives}/background-carousel.directive.d.ts +4 -4
- package/app/{modules/keyfilter → shared/directives}/keyfilter.directive.d.ts +1 -7
- package/app/{modules/tooltip → shared/directives}/tooltip.directive.d.ts +3 -9
- package/app/shared/models/carousel-options.model.d.ts +21 -0
- package/app/shared/models/pagination-event.model.d.ts +8 -0
- package/app/shared/models/particle-component-text.model.d.ts +0 -24
- package/app/shared/modules/icons/particle-icons.module.d.ts +7 -0
- package/app/{modules/ordinal-number-pipe → shared/pipes}/ordinal-number.pipe.d.ts +1 -1
- package/app/shared/services/base-data.service.d.ts +2 -2
- package/app/shared/services/dialog.service.d.ts +1 -1
- package/app/{modules/notification → shared}/services/notification.service.d.ts +0 -4
- package/app/{modules/theming → shared}/services/theming.service.d.ts +0 -19
- package/fesm2022/entake-particle.mjs +3871 -5573
- package/fesm2022/entake-particle.mjs.map +1 -1
- package/package.json +16 -25
- package/public_api.d.ts +47 -82
- package/app/modules/accordion/accordion.module.d.ts +0 -11
- package/app/modules/background-carousel/carousel-options.model.d.ts +0 -30
- package/app/modules/background-carousel/particle-background-carousel.module.d.ts +0 -8
- package/app/modules/checkbox/checkbox.module.d.ts +0 -9
- package/app/modules/color-picker/color-picker.module.d.ts +0 -9
- package/app/modules/date-picker/date-picker.module.d.ts +0 -15
- package/app/modules/dialog/dialog.module.d.ts +0 -9
- package/app/modules/dropdown/dropdown.module.d.ts +0 -9
- package/app/modules/endpoint-state/components/endpoint-state.component.d.ts +0 -46
- package/app/modules/endpoint-state/endpoint-state.module.d.ts +0 -8
- package/app/modules/icons/particle-icons.module.d.ts +0 -13
- package/app/modules/idle-timeout/particle-idle-timeout.module.d.ts +0 -9
- package/app/modules/input-mask/input-mask.module.d.ts +0 -8
- package/app/modules/keyfilter/keyfilter.module.d.ts +0 -8
- package/app/modules/layout/components/layout-full-framing/layout-full-framing.component.d.ts +0 -27
- package/app/modules/layout/components/layout-fullwidth-sidebar/layout-fullwidth-sidebar.component.d.ts +0 -23
- package/app/modules/layout/layout.module.d.ts +0 -10
- package/app/modules/loader/loader.module.d.ts +0 -8
- package/app/modules/multi-select/multi-select.module.d.ts +0 -8
- package/app/modules/notification/notification.module.d.ts +0 -8
- package/app/modules/ordinal-number-pipe/ordinal-number-pipe.module.d.ts +0 -8
- package/app/modules/paginator/pagination-event.model.d.ts +0 -24
- package/app/modules/paginator/particle-paginator.module.d.ts +0 -13
- package/app/modules/popover/popover.module.d.ts +0 -9
- package/app/modules/profile-pic/particle-profile-pic.module.d.ts +0 -9
- package/app/modules/progress-bar/progress-bar.component.d.ts +0 -16
- package/app/modules/progress-bar/progress-bar.module.d.ts +0 -8
- package/app/modules/push-container/particle-push-container.module.d.ts +0 -9
- package/app/modules/push-container/push-container-state.model.d.ts +0 -7
- package/app/modules/push-container/push-container.component.d.ts +0 -137
- package/app/modules/rich-text/particle-rich-text.module.d.ts +0 -15
- package/app/modules/rich-text/render-rich-text.component.d.ts +0 -6
- package/app/modules/scroll-to-top/particle-scroll-to-top.module.d.ts +0 -8
- package/app/modules/scroll-to-top/scroll-to-top.component.d.ts +0 -19
- package/app/modules/slideover/particle-slideover.module.d.ts +0 -8
- package/app/modules/slideover/slideover.component.d.ts +0 -35
- package/app/modules/slider/slider.module.d.ts +0 -9
- package/app/modules/theming/components/theming.component.d.ts +0 -43
- package/app/modules/theming/theming.module.d.ts +0 -12
- package/app/modules/toggle-switch/toggle-switch.module.d.ts +0 -8
- package/app/modules/tooltip/tooltip.module.d.ts +0 -8
- package/app/modules/week-picker/week-picker.module.d.ts +0 -13
- package/app/shared/enums/endpoint-status.enum.d.ts +0 -9
- package/esm2022/app/modules/accordion/accordion.component.mjs +0 -101
- package/esm2022/app/modules/accordion/accordion.module.mjs +0 -37
- package/esm2022/app/modules/accordion/directives/accordion-content.directive.mjs +0 -17
- package/esm2022/app/modules/accordion/directives/accordion-header.directive.mjs +0 -17
- package/esm2022/app/modules/accordion/directives/accordion-item.directive.mjs +0 -36
- package/esm2022/app/modules/background-carousel/background-carousel.directive.mjs +0 -91
- package/esm2022/app/modules/background-carousel/carousel-options.model.mjs +0 -36
- package/esm2022/app/modules/background-carousel/particle-background-carousel.module.mjs +0 -24
- package/esm2022/app/modules/checkbox/checkbox.component.mjs +0 -108
- package/esm2022/app/modules/checkbox/checkbox.module.mjs +0 -28
- package/esm2022/app/modules/color-picker/color-picker.component.mjs +0 -306
- package/esm2022/app/modules/color-picker/color-picker.module.mjs +0 -19
- package/esm2022/app/modules/date-picker/components/calendar/calendar.component.mjs +0 -496
- package/esm2022/app/modules/date-picker/components/date-range-picker/date-range-picker.component.mjs +0 -250
- package/esm2022/app/modules/date-picker/date-picker.component.mjs +0 -538
- package/esm2022/app/modules/date-picker/date-picker.module.mjs +0 -56
- package/esm2022/app/modules/dialog/dialog.component.mjs +0 -177
- package/esm2022/app/modules/dialog/dialog.module.mjs +0 -28
- package/esm2022/app/modules/dropdown/dropdown.component.mjs +0 -682
- package/esm2022/app/modules/dropdown/dropdown.module.mjs +0 -28
- package/esm2022/app/modules/dropdown/models/dropdown-option-group.model.mjs +0 -2
- package/esm2022/app/modules/dropdown/models/dropdown-option.model.mjs +0 -2
- package/esm2022/app/modules/endpoint-state/components/endpoint-state.component.mjs +0 -75
- package/esm2022/app/modules/endpoint-state/endpoint-state.module.mjs +0 -22
- package/esm2022/app/modules/icons/components/icon-select.component.mjs +0 -376
- package/esm2022/app/modules/icons/models/fontawesome-icons-brands.model.mjs +0 -471
- package/esm2022/app/modules/icons/models/fontawesome-icons-regular.model.mjs +0 -166
- package/esm2022/app/modules/icons/models/fontawesome-icons-solid.model.mjs +0 -1016
- package/esm2022/app/modules/icons/models/particle-icons-brands.model.mjs +0 -24
- package/esm2022/app/modules/icons/models/particle-icons-regular.model.mjs +0 -50
- package/esm2022/app/modules/icons/models/particle-icons-solid.model.mjs +0 -89
- package/esm2022/app/modules/icons/particle-icons.module.mjs +0 -66
- package/esm2022/app/modules/icons/services/icons.service.mjs +0 -82
- package/esm2022/app/modules/idle-timeout/idle-timeout.component.mjs +0 -85
- package/esm2022/app/modules/idle-timeout/idle-timer.mjs +0 -66
- package/esm2022/app/modules/idle-timeout/particle-idle-timeout.module.mjs +0 -28
- package/esm2022/app/modules/input-mask/input-mask.component.mjs +0 -594
- package/esm2022/app/modules/input-mask/input-mask.module.mjs +0 -18
- package/esm2022/app/modules/keyfilter/keyfilter.directive.mjs +0 -174
- package/esm2022/app/modules/keyfilter/keyfilter.module.mjs +0 -18
- package/esm2022/app/modules/layout/components/layout-full-framing/layout-full-framing.component.mjs +0 -81
- package/esm2022/app/modules/layout/components/layout-fullwidth-sidebar/layout-fullwidth-sidebar.component.mjs +0 -67
- package/esm2022/app/modules/layout/layout.module.mjs +0 -33
- package/esm2022/app/modules/loader/components/loader.component.mjs +0 -30
- package/esm2022/app/modules/loader/loader.module.mjs +0 -24
- package/esm2022/app/modules/multi-select/models/multi-select-option-group.model.mjs +0 -2
- package/esm2022/app/modules/multi-select/models/multi-select-option.model.mjs +0 -2
- package/esm2022/app/modules/multi-select/multi-select.component.mjs +0 -665
- package/esm2022/app/modules/multi-select/multi-select.module.mjs +0 -18
- package/esm2022/app/modules/notification/models/notification.model.mjs +0 -2
- package/esm2022/app/modules/notification/notification.component.mjs +0 -122
- package/esm2022/app/modules/notification/notification.module.mjs +0 -18
- package/esm2022/app/modules/notification/services/notification.service.mjs +0 -84
- package/esm2022/app/modules/ordinal-number-pipe/ordinal-number-pipe.module.mjs +0 -20
- package/esm2022/app/modules/ordinal-number-pipe/ordinal-number.pipe.mjs +0 -49
- package/esm2022/app/modules/paginator/pagination-event.model.mjs +0 -29
- package/esm2022/app/modules/paginator/paginator.component.mjs +0 -207
- package/esm2022/app/modules/paginator/particle-paginator.module.mjs +0 -48
- package/esm2022/app/modules/popover/popover.component.mjs +0 -352
- package/esm2022/app/modules/popover/popover.module.mjs +0 -24
- package/esm2022/app/modules/profile-pic/particle-profile-pic.module.mjs +0 -28
- package/esm2022/app/modules/profile-pic/profile-pic.component.mjs +0 -75
- package/esm2022/app/modules/progress-bar/progress-bar.component.mjs +0 -43
- package/esm2022/app/modules/progress-bar/progress-bar.module.mjs +0 -24
- package/esm2022/app/modules/push-container/particle-push-container.module.mjs +0 -26
- package/esm2022/app/modules/push-container/push-container-state.model.mjs +0 -2
- package/esm2022/app/modules/push-container/push-container.component.mjs +0 -363
- package/esm2022/app/modules/rich-text/particle-rich-text.module.mjs +0 -64
- package/esm2022/app/modules/rich-text/render-rich-text.component.mjs +0 -18
- package/esm2022/app/modules/rich-text/rich-text-capabilities.model.mjs +0 -2
- package/esm2022/app/modules/rich-text/rich-text.component.mjs +0 -209
- package/esm2022/app/modules/scroll-to-top/particle-scroll-to-top.module.mjs +0 -24
- package/esm2022/app/modules/scroll-to-top/scroll-to-top.component.mjs +0 -49
- package/esm2022/app/modules/slideover/particle-slideover.module.mjs +0 -24
- package/esm2022/app/modules/slideover/slideover.component.mjs +0 -115
- package/esm2022/app/modules/slider/slider.component.mjs +0 -243
- package/esm2022/app/modules/slider/slider.module.mjs +0 -26
- package/esm2022/app/modules/theming/components/theming.component.mjs +0 -86
- package/esm2022/app/modules/theming/models/theme.model.mjs +0 -9
- package/esm2022/app/modules/theming/services/theme-change-detection.service.mjs +0 -38
- package/esm2022/app/modules/theming/services/theming.service.mjs +0 -510
- package/esm2022/app/modules/theming/theming.module.mjs +0 -55
- package/esm2022/app/modules/toggle-switch/models/toggle-options.model.mjs +0 -2
- package/esm2022/app/modules/toggle-switch/toggle-switch.component.mjs +0 -107
- package/esm2022/app/modules/toggle-switch/toggle-switch.module.mjs +0 -24
- package/esm2022/app/modules/tooltip/tooltip.directive.mjs +0 -381
- package/esm2022/app/modules/tooltip/tooltip.module.mjs +0 -18
- package/esm2022/app/modules/week-picker/week-picker.component.mjs +0 -511
- package/esm2022/app/modules/week-picker/week-picker.module.mjs +0 -40
- package/esm2022/app/shared/enums/endpoint-status.enum.mjs +0 -11
- package/esm2022/app/shared/interceptors/json.interceptor.mjs +0 -23
- package/esm2022/app/shared/models/auditable.model.mjs +0 -2
- package/esm2022/app/shared/models/data-list.model.mjs +0 -2
- package/esm2022/app/shared/models/id.model.mjs +0 -2
- package/esm2022/app/shared/models/observable-container.mjs +0 -15
- package/esm2022/app/shared/models/particle-component-text.model.mjs +0 -2
- package/esm2022/app/shared/services/base-data.service.mjs +0 -190
- package/esm2022/app/shared/services/dialog.service.mjs +0 -50
- package/esm2022/app/shared/services/local-storage.service.mjs +0 -60
- package/esm2022/entake-particle.mjs +0 -5
- package/esm2022/public_api.mjs +0 -98
- /package/app/{modules/dropdown → shared}/models/dropdown-option-group.model.d.ts +0 -0
- /package/app/{modules/dropdown → shared}/models/dropdown-option.model.d.ts +0 -0
- /package/app/{modules/icons → shared}/models/fontawesome-icons-brands.model.d.ts +0 -0
- /package/app/{modules/icons → shared}/models/fontawesome-icons-regular.model.d.ts +0 -0
- /package/app/{modules/icons → shared}/models/fontawesome-icons-solid.model.d.ts +0 -0
- /package/app/{modules/multi-select → shared}/models/multi-select-option-group.model.d.ts +0 -0
- /package/app/{modules/multi-select → shared}/models/multi-select-option.model.d.ts +0 -0
- /package/app/{modules/notification → shared}/models/notification.model.d.ts +0 -0
- /package/app/{modules/icons → shared}/models/particle-icons-brands.model.d.ts +0 -0
- /package/app/{modules/icons → shared}/models/particle-icons-regular.model.d.ts +0 -0
- /package/app/{modules/icons → shared}/models/particle-icons-solid.model.d.ts +0 -0
- /package/app/{modules/rich-text → shared/models}/rich-text-capabilities.model.d.ts +0 -0
- /package/app/{modules/theming → shared}/models/theme.model.d.ts +0 -0
- /package/app/{modules/toggle-switch → shared}/models/toggle-options.model.d.ts +0 -0
- /package/app/{modules/icons → shared}/services/icons.service.d.ts +0 -0
- /package/app/{modules/idle-timeout → shared/services}/idle-timer.d.ts +0 -0
- /package/app/{modules/theming → shared}/services/theme-change-detection.service.d.ts +0 -0
|
@@ -1,376 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
-
import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
|
|
4
|
-
import { map, tap, withLatestFrom } from 'rxjs/operators';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "../services/icons.service";
|
|
7
|
-
import * as i2 from "@angular/common";
|
|
8
|
-
import * as i3 from "@angular/forms";
|
|
9
|
-
import * as i4 from "../../tooltip/tooltip.directive";
|
|
10
|
-
import * as i5 from "../../dialog/dialog.component";
|
|
11
|
-
import * as i6 from "../../endpoint-state/components/endpoint-state.component";
|
|
12
|
-
/**
|
|
13
|
-
* Particle Icon Select component provides a button and an icon picker that includes all of the Particle Icons as well as the FAS icons.
|
|
14
|
-
*/
|
|
15
|
-
export class IconSelectComponent {
|
|
16
|
-
service;
|
|
17
|
-
changeDetectorRef;
|
|
18
|
-
/**
|
|
19
|
-
* The number of items to display per page
|
|
20
|
-
* @private
|
|
21
|
-
*/
|
|
22
|
-
static PAGE_SIZE = 48;
|
|
23
|
-
/**
|
|
24
|
-
* Set the value of the icon select
|
|
25
|
-
* @param value the value to set
|
|
26
|
-
*/
|
|
27
|
-
set value(value) {
|
|
28
|
-
this._value = value;
|
|
29
|
-
if (value) {
|
|
30
|
-
const [prefix, name] = value.split(' ');
|
|
31
|
-
this._internalValue.next({ prefix, name });
|
|
32
|
-
this.showIconSelectionPreview = true;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Set disabled
|
|
37
|
-
* @param disabled whether or not the icon picker should be disabled
|
|
38
|
-
*/
|
|
39
|
-
set disabled(disabled) {
|
|
40
|
-
this._disabled = disabled;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Color class of the button
|
|
44
|
-
*/
|
|
45
|
-
buttonColorClass = null;
|
|
46
|
-
/**
|
|
47
|
-
* The value to set to the button's width, min-width, height and min-height
|
|
48
|
-
*/
|
|
49
|
-
buttonSizing = '40px';
|
|
50
|
-
text = {
|
|
51
|
-
selectAnIcon: 'Select an Icon',
|
|
52
|
-
seeAllIcons: 'See All Icons',
|
|
53
|
-
fontAwesomeIcons: 'Font Awesome Icons',
|
|
54
|
-
all: 'All',
|
|
55
|
-
solid: 'Solid',
|
|
56
|
-
regular: 'Regular',
|
|
57
|
-
brands: 'Brands',
|
|
58
|
-
customIcons: 'Custom Icons',
|
|
59
|
-
previousPage: 'Previous Page',
|
|
60
|
-
nextPage: 'Next Page',
|
|
61
|
-
searchIcons: 'Search Icons',
|
|
62
|
-
submitSearch: 'Submit Search',
|
|
63
|
-
clearResults: 'Clear Results',
|
|
64
|
-
couldntFindAnything: 'We couldn\'t find anything',
|
|
65
|
-
modifySearchCriteria: 'Please try modifying your search criteria',
|
|
66
|
-
selection: 'Selection',
|
|
67
|
-
confirm: 'Confirm',
|
|
68
|
-
select: 'Select',
|
|
69
|
-
close: 'Close'
|
|
70
|
-
};
|
|
71
|
-
/**
|
|
72
|
-
* Icon select opened event emitter
|
|
73
|
-
*/
|
|
74
|
-
opened = new EventEmitter();
|
|
75
|
-
/**
|
|
76
|
-
* Icon selected event emitter
|
|
77
|
-
*/
|
|
78
|
-
selected = new EventEmitter();
|
|
79
|
-
/**
|
|
80
|
-
* Dialog closed event emitter
|
|
81
|
-
*/
|
|
82
|
-
closed = new EventEmitter();
|
|
83
|
-
/**
|
|
84
|
-
* The scrollable icon container
|
|
85
|
-
*/
|
|
86
|
-
iconScrollContainer = null;
|
|
87
|
-
/**
|
|
88
|
-
* BehaviorSubject tracking the input value destructed into its prefix and class name
|
|
89
|
-
*/
|
|
90
|
-
_internalValue = new BehaviorSubject(null);
|
|
91
|
-
/**
|
|
92
|
-
* BehaviorSubject tracking the current filter value selection for icons
|
|
93
|
-
*/
|
|
94
|
-
_filter = new BehaviorSubject({ style: 'all', type: 'all' });
|
|
95
|
-
/**
|
|
96
|
-
* BehaviorSubject tracking the current icon search text value
|
|
97
|
-
*/
|
|
98
|
-
_searchText = new BehaviorSubject('');
|
|
99
|
-
/**
|
|
100
|
-
* BehaviorSubject that emits when search button has been clicked
|
|
101
|
-
*/
|
|
102
|
-
_searchClick = new BehaviorSubject('');
|
|
103
|
-
/**
|
|
104
|
-
* BehaviorSubject tracking the active pagination page
|
|
105
|
-
*/
|
|
106
|
-
_activePage = new BehaviorSubject(0);
|
|
107
|
-
/**
|
|
108
|
-
* Subject that emits on search input enter keyup
|
|
109
|
-
*/
|
|
110
|
-
_searchInputEnterKeyup = new Subject();
|
|
111
|
-
/**
|
|
112
|
-
* An array of all icons (as strings) that meet the current filter/search criteria as an Observable
|
|
113
|
-
* @private
|
|
114
|
-
*/
|
|
115
|
-
icons$ = combineLatest([
|
|
116
|
-
this._filter,
|
|
117
|
-
this._searchClick
|
|
118
|
-
]).pipe(map(([filter, searchText]) => this.service.getIcons(filter.type, filter.style, searchText)));
|
|
119
|
-
/**
|
|
120
|
-
* The count of total paginator pages as an Observable
|
|
121
|
-
*/
|
|
122
|
-
totalPages$ = this.icons$.pipe(map(icons => icons.length
|
|
123
|
-
? Math.ceil(icons.length / IconSelectComponent.PAGE_SIZE)
|
|
124
|
-
: 0));
|
|
125
|
-
/**
|
|
126
|
-
* Observable boolean indicating whether or not the user can perform an icon text search
|
|
127
|
-
*/
|
|
128
|
-
canSearch$ = this._searchText.pipe(map(searchText => !!searchText.trim().length));
|
|
129
|
-
/**
|
|
130
|
-
* Observable boolean indicating whether or not the user can paginate to the previous page
|
|
131
|
-
*/
|
|
132
|
-
canPaginatePrevious$ = this._activePage.pipe(map(activePage => activePage > 0));
|
|
133
|
-
/**
|
|
134
|
-
* Observable boolean indicating whether or not the user can paginate to the next page
|
|
135
|
-
*/
|
|
136
|
-
canPaginateNext$ = this.totalPages$.pipe(withLatestFrom(this._activePage), map(([totalPages, activePage]) => activePage < (totalPages - 1)));
|
|
137
|
-
/**
|
|
138
|
-
* Paginated icons array as an Observable
|
|
139
|
-
*/
|
|
140
|
-
paginatedIcons$ = combineLatest([
|
|
141
|
-
this._activePage,
|
|
142
|
-
this.icons$
|
|
143
|
-
]).pipe(map(([activePage, icons]) => {
|
|
144
|
-
let paginatedIcons = null;
|
|
145
|
-
if (activePage >= 0 && icons.length) {
|
|
146
|
-
paginatedIcons = icons.slice(IconSelectComponent.PAGE_SIZE * activePage, IconSelectComponent.PAGE_SIZE * (activePage + 1));
|
|
147
|
-
}
|
|
148
|
-
return paginatedIcons;
|
|
149
|
-
}), tap(() => {
|
|
150
|
-
if (this.iconScrollContainer) {
|
|
151
|
-
this.iconScrollContainer.nativeElement.scrollTop = 0;
|
|
152
|
-
}
|
|
153
|
-
}));
|
|
154
|
-
/**
|
|
155
|
-
* Object that controls whether to show the dialog or not
|
|
156
|
-
*/
|
|
157
|
-
showDialog;
|
|
158
|
-
/**
|
|
159
|
-
* Whether or not to show the icon selection preview
|
|
160
|
-
*/
|
|
161
|
-
showIconSelectionPreview = false;
|
|
162
|
-
/**
|
|
163
|
-
* Subscription object to store search input enter keyup subscription
|
|
164
|
-
* @private
|
|
165
|
-
*/
|
|
166
|
-
subscription;
|
|
167
|
-
/**
|
|
168
|
-
* The value of the icon select
|
|
169
|
-
* @private
|
|
170
|
-
*/
|
|
171
|
-
_value = null;
|
|
172
|
-
/**
|
|
173
|
-
* Whether or not the icon picker is disabled
|
|
174
|
-
* @private
|
|
175
|
-
*/
|
|
176
|
-
_disabled = false;
|
|
177
|
-
/**
|
|
178
|
-
* Function to call on change
|
|
179
|
-
*/
|
|
180
|
-
onChange = () => { };
|
|
181
|
-
/**
|
|
182
|
-
* Function to call on touch
|
|
183
|
-
*/
|
|
184
|
-
onTouched = () => { };
|
|
185
|
-
/**
|
|
186
|
-
* Dependency injection site
|
|
187
|
-
* @param service the IconsService
|
|
188
|
-
* @param changeDetectorRef the Angular ChangeDetectorRef
|
|
189
|
-
*/
|
|
190
|
-
constructor(service, changeDetectorRef) {
|
|
191
|
-
this.service = service;
|
|
192
|
-
this.changeDetectorRef = changeDetectorRef;
|
|
193
|
-
this.subscription = this._searchInputEnterKeyup.pipe(withLatestFrom(this.canSearch$)).subscribe(([___, canSearch]) => {
|
|
194
|
-
if (canSearch) {
|
|
195
|
-
this._searchClick.next(this._searchText.getValue());
|
|
196
|
-
this._activePage.next(0);
|
|
197
|
-
}
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Get disabled
|
|
202
|
-
*/
|
|
203
|
-
get disabled() {
|
|
204
|
-
return this._disabled;
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Destroy component, unsubscribe from search input enter keyup subscription
|
|
208
|
-
*/
|
|
209
|
-
ngOnDestroy() {
|
|
210
|
-
this.subscription.unsubscribe();
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* Write the input value
|
|
214
|
-
* @param value the value to write
|
|
215
|
-
*/
|
|
216
|
-
writeValue(value) {
|
|
217
|
-
this.value = value;
|
|
218
|
-
this.changeDetectorRef.markForCheck();
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Register onChange function
|
|
222
|
-
* @param fn the function to register
|
|
223
|
-
*/
|
|
224
|
-
registerOnChange(fn) {
|
|
225
|
-
this.onChange = fn;
|
|
226
|
-
}
|
|
227
|
-
/**
|
|
228
|
-
* Register onTouched function
|
|
229
|
-
* @param fn the function to register
|
|
230
|
-
*/
|
|
231
|
-
registerOnTouched(fn) {
|
|
232
|
-
this.onTouched = fn;
|
|
233
|
-
}
|
|
234
|
-
/**
|
|
235
|
-
* Set disabled state
|
|
236
|
-
* @param isDisabled whether or not the icon picker should be disabled
|
|
237
|
-
*/
|
|
238
|
-
setDisabledState(isDisabled) {
|
|
239
|
-
this.disabled = isDisabled;
|
|
240
|
-
this.changeDetectorRef.markForCheck();
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Open the icon select dialog
|
|
244
|
-
*/
|
|
245
|
-
openDialog() {
|
|
246
|
-
if (!this.disabled) {
|
|
247
|
-
this.reset();
|
|
248
|
-
this.showDialog = {};
|
|
249
|
-
this.opened.emit();
|
|
250
|
-
if (this.value) {
|
|
251
|
-
this.showIconSelectionPreview = true;
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* Close the icon select dialog
|
|
257
|
-
*/
|
|
258
|
-
closeDialog() {
|
|
259
|
-
let internalValue = null;
|
|
260
|
-
if (this._value) {
|
|
261
|
-
const [prefix, name] = this._value.split(' ');
|
|
262
|
-
internalValue = { prefix, name };
|
|
263
|
-
}
|
|
264
|
-
this._internalValue.next(internalValue);
|
|
265
|
-
this.showDialog = null;
|
|
266
|
-
this.closed.emit();
|
|
267
|
-
}
|
|
268
|
-
/**
|
|
269
|
-
* Handle filter select
|
|
270
|
-
* @param filter the selected filter
|
|
271
|
-
*/
|
|
272
|
-
handleFilterSelect(filter) {
|
|
273
|
-
this._filter.next(filter);
|
|
274
|
-
this._activePage.next(0);
|
|
275
|
-
}
|
|
276
|
-
/**
|
|
277
|
-
* Update internal value on icon select
|
|
278
|
-
* @param icon the selected icon
|
|
279
|
-
*/
|
|
280
|
-
handleIconSelect(icon) {
|
|
281
|
-
this._internalValue.next(icon);
|
|
282
|
-
this.showIconSelectionPreview = false;
|
|
283
|
-
setTimeout(() => this.showIconSelectionPreview = true);
|
|
284
|
-
}
|
|
285
|
-
/**
|
|
286
|
-
* Write value on confirm
|
|
287
|
-
*/
|
|
288
|
-
handleIconSelectConfirm() {
|
|
289
|
-
const icon = this._internalValue.getValue();
|
|
290
|
-
this.updateModel(`${icon.prefix} ${icon.name}`);
|
|
291
|
-
this.closeDialog();
|
|
292
|
-
}
|
|
293
|
-
/**
|
|
294
|
-
* Go to the next pagination page
|
|
295
|
-
*/
|
|
296
|
-
paginateNext() {
|
|
297
|
-
this._activePage.next(this._activePage.getValue() + 1);
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* Go to the previous pagination page
|
|
301
|
-
*/
|
|
302
|
-
paginatePrevious() {
|
|
303
|
-
this._activePage.next(this._activePage.getValue() - 1);
|
|
304
|
-
}
|
|
305
|
-
/**
|
|
306
|
-
* Clear search text and reset paginator
|
|
307
|
-
*/
|
|
308
|
-
clearSearch() {
|
|
309
|
-
this._searchText.next('');
|
|
310
|
-
this._searchClick.next('');
|
|
311
|
-
this._activePage.next(0);
|
|
312
|
-
}
|
|
313
|
-
/**
|
|
314
|
-
* Update model
|
|
315
|
-
* @param value the new value of the model
|
|
316
|
-
* @private
|
|
317
|
-
*/
|
|
318
|
-
updateModel(value) {
|
|
319
|
-
const valueBeforeUpdate = this._value;
|
|
320
|
-
if (!this.disabled) {
|
|
321
|
-
this.value = value;
|
|
322
|
-
if (valueBeforeUpdate !== this._value) {
|
|
323
|
-
this.onChange(this._value);
|
|
324
|
-
}
|
|
325
|
-
this.selected.emit({ value: this._value });
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
/**
|
|
329
|
-
* Reset filtering/pagination BehaviorSubject values
|
|
330
|
-
* @private
|
|
331
|
-
*/
|
|
332
|
-
reset() {
|
|
333
|
-
this._filter.next({ style: 'all', type: 'all' });
|
|
334
|
-
this._searchText.next('');
|
|
335
|
-
this._searchClick.next('');
|
|
336
|
-
this._activePage.next(0);
|
|
337
|
-
}
|
|
338
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: IconSelectComponent, deps: [{ token: i1.IconsService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
339
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.1", type: IconSelectComponent, selector: "particle-icon-select", inputs: { value: "value", disabled: "disabled", buttonColorClass: "buttonColorClass", buttonSizing: "buttonSizing", text: "text" }, outputs: { opened: "opened", selected: "selected", closed: "closed" }, providers: [
|
|
340
|
-
{
|
|
341
|
-
provide: NG_VALUE_ACCESSOR,
|
|
342
|
-
useExisting: forwardRef(() => IconSelectComponent),
|
|
343
|
-
multi: true
|
|
344
|
-
}
|
|
345
|
-
], viewQueries: [{ propertyName: "iconScrollContainer", first: true, predicate: ["iconScrollContainer"], descendants: true }], ngImport: i0, template: "<!-- choose button -->\r\n<button [ngClass]=\"buttonColorClass ? buttonColorClass : 'content_color'\"\r\n [ngStyle]=\"{\r\n 'width': buttonSizing,\r\n 'min-width': buttonSizing,\r\n 'height': buttonSizing,\r\n 'min-height': buttonSizing\r\n }\"\r\n (click)=\"openDialog()\"\r\n [particleTooltip]=\"(_internalValue | async)?.prefix + ' ' + (_internalValue | async)?.name\"\r\n [tooltipDisabled]=\"(_internalValue | async) === undefined\"\r\n [disabled]=\"disabled\"\r\n class=\"access wis_button bg_overlay brdr brad_3\"\r\n [attr.aria-label]=\"text.selectAnIcon\">\r\n <ng-container *ngIf=\"!showDialog else placeholderIcon\">\r\n <div *ngIf=\"_internalValue | async as selectedIcon else noSelection\">\r\n <i class=\"{{selectedIcon.prefix}} {{selectedIcon.name}} wis_icon\"></i>\r\n </div>\r\n <ng-template #noSelection>\r\n <div><i class=\"fas fa-icons opacity_20\"></i></div>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template #placeholderIcon>\r\n <div><i class=\"fas fa-spinner fa-spin\"></i></div>\r\n </ng-template>\r\n</button>\r\n\r\n<!-- TODO: at some point, maybe implement infinite scroll to icons -->\r\n\r\n<!-- picker dialog -->\r\n<particle-dialog [title]=\"text.selectAnIcon\"\r\n [object]=\"showDialog\"\r\n [width]=\"'850px'\"\r\n [height]=\"'500px'\"\r\n (closed)=\"closeDialog()\">\r\n <div class=\"row height100\">\r\n\r\n <!-- FILTERS -->\r\n <div class=\"col min_w250 bg_overlay brdr border_right mobile_hide\">\r\n <div class=\"row_block width100\">\r\n <ng-container *ngIf=\"_filter | async as filter\">\r\n <!-- all icons -->\r\n <div class=\"mar_5 pad_5\">\r\n <button (click)=\"handleFilterSelect({ style: 'all', type: 'all' })\"\r\n [ngClass]=\"{ 'selected': filter.type === 'all' && filter.style === 'all' }\"\r\n class=\"access list_btn row space_between wis_filter_btn bg_overlay_rev brdr\"\r\n [attr.aria-label]=\"text.seeAllIcons\">\r\n <div class=\"v_center\">\r\n <div class=\"circle_16px bg_overlay_rev brdr mar_right10\">\r\n <div *ngIf=\"filter.type === 'all' && filter.style === 'all'\" class=\"circle_8px ok_button_color\"></div>\r\n </div>\r\n <div class=\"text md\">{{text.seeAllIcons}}</div>\r\n </div>\r\n <div class=\"go_icon\"><i class=\"fas fa-chevron-right fa-fw fa-sm opacity_60\"></i></div>\r\n </button>\r\n </div>\r\n <div class=\"bg_overlay brdr hr mar_10\"></div>\r\n <!-- fontawesome icons -->\r\n <div class=\"mar_5\">\r\n <div class=\"text md bolder\" style=\"padding:10px 10px 5px 15px;\">{{text.fontAwesomeIcons}}</div>\r\n <div class=\"mar_5\">\r\n <button (click)=\"handleFilterSelect({ style: 'all', type: 'fontawesome' })\"\r\n [ngClass]=\"{ 'selected': filter.type === 'fontawesome' && filter.style === 'all' }\"\r\n class=\"access list_btn row space_between wis_filter_btn bg_overlay_rev brdr\"\r\n [attr.aria-label]=\"text.filterBy + ' ' + text.fontAwesomeIcons\">\r\n <div class=\"v_center\">\r\n <div class=\"circle_16px bg_overlay_rev brdr mar_right10\">\r\n <div *ngIf=\"filter.type === 'fontawesome' && filter.style === 'all'\" class=\"circle_8px ok_button_color\"></div>\r\n </div>\r\n <div class=\"text md\">{{text.all}}</div>\r\n </div>\r\n <div class=\"go_icon\"><i class=\"fas fa-chevron-right fa-fw fa-sm opacity_60\"></i></div>\r\n </button>\r\n </div>\r\n <div class=\"mar_5\">\r\n <button (click)=\"handleFilterSelect({ style: 'solid', type: 'fontawesome' })\"\r\n [ngClass]=\"{ 'selected': filter.type === 'fontawesome' && filter.style === 'solid' }\"\r\n class=\"access list_btn row space_between wis_filter_btn bg_overlay_rev brdr\"\r\n [attr.aria-label]=\"text.filterBy + ' ' + text.solid + ' ' + text.fontAwesomeIcons\">\r\n <div class=\"v_center\">\r\n <div class=\"circle_16px bg_overlay_rev brdr mar_right10\">\r\n <div *ngIf=\"filter.type === 'fontawesome' && filter.style === 'solid'\" class=\"circle_8px ok_button_color\"></div>\r\n </div>\r\n <div class=\"text md\">{{text.solid}}</div>\r\n </div>\r\n <div class=\"go_icon\"><i class=\"fas fa-chevron-right fa-fw fa-sm opacity_60\"></i></div>\r\n </button>\r\n </div>\r\n <div class=\"mar_5\">\r\n <button (click)=\"handleFilterSelect({ style: 'regular', type: 'fontawesome' })\"\r\n [ngClass]=\"{ 'selected': filter.type === 'fontawesome' && filter.style === 'regular' }\"\r\n class=\"access list_btn row space_between wis_filter_btn bg_overlay_rev brdr\"\r\n [attr.aria-label]=\"text.filterBy + ' ' + text.regular + ' ' + text.fontAwesomeIcons\">\r\n <div class=\"v_center\">\r\n <div class=\"circle_16px bg_overlay_rev brdr mar_right10\">\r\n <div *ngIf=\"filter.type === 'fontawesome' && filter.style === 'regular'\" class=\"circle_8px ok_button_color\"></div>\r\n </div>\r\n <div class=\"text md\">{{text.regular}}</div>\r\n </div>\r\n <div class=\"go_icon\"><i class=\"fas fa-chevron-right fa-fw fa-sm opacity_60\"></i></div>\r\n </button>\r\n </div>\r\n <div class=\"mar_5\">\r\n <button (click)=\"handleFilterSelect({ style: 'brands', type: 'fontawesome' })\"\r\n [ngClass]=\"{ 'selected': filter.type === 'fontawesome' && filter.style === 'brands' }\"\r\n class=\"access list_btn row space_between wis_filter_btn bg_overlay_rev brdr\"\r\n [attr.aria-label]=\"text.filterBy + ' ' + text.brands + ' ' + text.fontAwesomeIcons\">\r\n <div class=\"v_center\">\r\n <div class=\"circle_16px bg_overlay_rev brdr mar_right10\">\r\n <div *ngIf=\"filter.type === 'fontawesome' && filter.style === 'brands'\" class=\"circle_8px ok_button_color\"></div>\r\n </div>\r\n <div class=\"text md\">{{text.brands}}</div>\r\n </div>\r\n <div class=\"go_icon\"><i class=\"fas fa-chevron-right fa-fw fa-sm opacity_60\"></i></div>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"bg_overlay brdr hr mar_10\"></div>\r\n <!-- custom icons -->\r\n <div class=\"mar_5\">\r\n <div class=\"text md bolder\" style=\"padding:10px 10px 5px 15px;\">{{text.customIcons}}</div>\r\n <div class=\"mar_5\">\r\n <button (click)=\"handleFilterSelect({ style: 'all', type: 'particle' })\"\r\n [ngClass]=\"{ 'selected': filter.type === 'particle' && filter.style === 'all' }\"\r\n class=\"access list_btn row space_between wis_filter_btn bg_overlay_rev brdr\"\r\n [attr.aria-label]=\"text.filterBy + ' ' + text.customIcons\">\r\n <div class=\"v_center\">\r\n <div class=\"circle_16px bg_overlay_rev brdr mar_right10\">\r\n <div *ngIf=\"filter.type === 'particle' && filter.style === 'all'\" class=\"circle_8px ok_button_color\"></div>\r\n </div>\r\n <div class=\"text md\">All</div>\r\n </div>\r\n <div class=\"go_icon\"><i class=\"fas fa-chevron-right fa-fw fa-sm opacity_60\"></i></div>\r\n </button>\r\n </div>\r\n <div class=\"mar_5\">\r\n <button (click)=\"handleFilterSelect({ style: 'solid', type: 'particle' })\"\r\n [ngClass]=\"{ 'selected': filter.type === 'particle' && filter.style === 'solid' }\"\r\n class=\"access list_btn row space_between wis_filter_btn bg_overlay_rev brdr\"\r\n [attr.aria-label]=\"text.filterBy + ' ' + text.solid + ' ' + text.customIcons\">\r\n <div class=\"v_center\">\r\n <div class=\"circle_16px bg_overlay_rev brdr mar_right10\">\r\n <div *ngIf=\"filter.type === 'particle' && filter.style === 'solid'\" class=\"circle_8px ok_button_color\"></div>\r\n </div>\r\n <div class=\"text md\">{{text.solid}}</div>\r\n </div>\r\n <div class=\"go_icon\"><i class=\"fas fa-chevron-right fa-fw fa-sm opacity_60\"></i></div>\r\n </button>\r\n </div>\r\n <div class=\"mar_5\">\r\n <button (click)=\"handleFilterSelect({ style: 'regular', type: 'particle' })\"\r\n [ngClass]=\"{ 'selected': filter.type === 'particle' && filter.style === 'regular' }\"\r\n class=\"access list_btn row space_between wis_filter_btn bg_overlay_rev brdr\"\r\n [attr.aria-label]=\"text.filterBy + ' ' + text.regular + ' ' + text.customIcons\">\r\n <div class=\"v_center\">\r\n <div class=\"circle_16px bg_overlay_rev brdr mar_right10\">\r\n <div *ngIf=\"filter.type === 'particle' && filter.style === 'regular'\" class=\"circle_8px ok_button_color\"></div>\r\n </div>\r\n <div class=\"text md\">{{text.regular}}</div>\r\n </div>\r\n <div class=\"go_icon\"><i class=\"fas fa-chevron-right fa-fw fa-sm opacity_60\"></i></div>\r\n </button>\r\n </div>\r\n <div class=\"mar_5\">\r\n <button (click)=\"handleFilterSelect({ style: 'brands', type: 'particle' })\"\r\n [ngClass]=\"{ 'selected': filter.type === 'particle' && filter.style === 'brands' }\"\r\n class=\"access list_btn row space_between wis_filter_btn bg_overlay_rev brdr\"\r\n [attr.aria-label]=\"text.filterBy + ' ' + text.brands + ' ' + text.customIcons\">\r\n <div class=\"v_center\">\r\n <div class=\"circle_16px bg_overlay_rev brdr mar_right10\">\r\n <div *ngIf=\"filter.type === 'particle' && filter.style === 'brands'\" class=\"circle_8px ok_button_color\"></div>\r\n </div>\r\n <div class=\"text md\">{{text.brands}}</div>\r\n </div>\r\n <div class=\"go_icon\"><i class=\"fas fa-chevron-right fa-fw fa-sm opacity_60\"></i></div>\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- ICONS -->\r\n <div class=\"col size_2 column\">\r\n <div class=\"col content_color_dark_1 pad_x5\">\r\n <!-- paginator -->\r\n <div *ngIf=\"totalPages$ | async as totalPages\"\r\n class=\"col v_center mar_10\">\r\n <button *ngIf=\"canPaginatePrevious$ | async else disabledPreviousButton\"\r\n (click)=\"paginatePrevious()\"\r\n class=\"access btn square_24px bg_overlay brdr ok_button_color\"\r\n [attr.aria-label]=\"text.previousPage\">\r\n <span class=\"icon slide_left\"><i class=\"fas fa-arrow-left\"></i></span>\r\n </button>\r\n <ng-template #disabledPreviousButton>\r\n <button disabled class=\"access btn square_24px bg_overlay brdr ok_button_color\"\r\n [attr.aria-label]=\"text.previousPage\">\r\n <span class=\"icon slide_left\"><i class=\"fas fa-arrow-left\"></i></span>\r\n </button>\r\n </ng-template>\r\n <div\r\n class=\"text sm bolder center\"\r\n style=\"min-width:65px;\">\r\n {{(_activePage | async)! + 1}} / {{totalPages}}\r\n </div>\r\n <button *ngIf=\"canPaginateNext$ | async else disabledNextButton\"\r\n (click)=\"paginateNext()\"\r\n class=\"access btn square_24px bg_overlay brdr ok_button_color\"\r\n [attr.aria-label]=\"text.nextPage\">\r\n <span class=\"icon slide_right\"><i class=\"fas fa-arrow-right\"></i></span>\r\n </button>\r\n <ng-template #disabledNextButton>\r\n <button disabled class=\"access btn square_24px bg_overlay brdr ok_button_color\"\r\n [attr.aria-label]=\"text.nextPage\">\r\n <span class=\"icon slide_right\"><i class=\"fas fa-arrow-right\"></i></span>\r\n </button>\r\n </ng-template>\r\n </div>\r\n <!-- search -->\r\n <div class=\"col size_1 wis_search mar_10\">\r\n <input #iconSearchInput\r\n [ngModel]=\"_searchText | async\"\r\n (input)=\"_searchText.next(iconSearchInput.value)\"\r\n (keyup.enter)=\"_searchInputEnterKeyup.next($any(null))\"\r\n class=\"access input md bg_overlay brdr content_color\"\r\n [attr.aria-label]=\"text.searchIcons\" [placeholder]=\"text.searchIcons + '...'\" />\r\n <button *ngIf=\"(canSearch$ | async) && (_searchClick | async)\"\r\n (click)=\"clearSearch()\" aria-label=\"Clear search\"\r\n class=\"access btn circle_18px overlay wis_clear_btn\">\r\n <span class=\"icon grow\"><i class=\"fas fa-times fa-sm\"></i></span>\r\n </button>\r\n <button *ngIf=\"canSearch$ | async else disabledSearchButton\"\r\n (click)=\"_searchClick.next(iconSearchInput.value); _activePage.next(0)\"\r\n class=\"access btn square_28px bg_overlay brdr ok_button_color brad_3 wis_search_btn\"\r\n [attr.aria-label]=\"text.submitSearch\" type=\"submit\">\r\n <span class=\"icon grow\"><i class=\"fas fa-search fa-sm\"></i></span>\r\n </button>\r\n <ng-template #disabledSearchButton>\r\n <button disabled\r\n class=\"access btn square_28px bg_overlay brdr ok_button_color brad_3 wis_search_btn\"\r\n [attr.aria-label]=\"text.submitSearch\" type=\"submit\">\r\n <span class=\"icon grow\"><i class=\"fas fa-search fa-sm\"></i></span>\r\n </button>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <!-- icons -->\r\n <div #iconScrollContainer class=\"col size_1 top_left scroll_y pad_5\" style=\"scroll-behavior: smooth\">\r\n <ng-container *ngIf=\"paginatedIcons$ | async as icons else noResults\">\r\n <div class=\"row wrap top_left\" style=\"align-items:stretch;\">\r\n <ng-container *ngFor=\"let icon of paginatedIcons$ | async\">\r\n <div class=\"col size_1 min_w75 mar_5\">\r\n <button class=\"access wis_icon_btn\" (click)=\"handleIconSelect(icon)\" [attr.aria-label]=\"text.select + ' ' + icon.name\">\r\n <div [ngClass]=\"((_internalValue | async)?.prefix === icon.prefix) && ((_internalValue | async)?.name === icon.name) ? 'ok_button_color' : 'content_color'\"\r\n class=\"wis_icon_btn_preview square_50px brad_3 bg_overlay brdr mar_bot5\">\r\n <i class=\"{{icon.prefix}} {{icon.name}}\"></i>\r\n </div>\r\n <div class=\"text sm center faded\">{{icon.name}}</div>\r\n </button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-template #noResults>\r\n <div class=\"row column min_h300 center_center\">\r\n <particle-endpoint-state\r\n [empty]=\"true\"\r\n [emptyIcon]=\"'fas fa-search fa-3x mar_bot5'\"\r\n [text]=\"{emptyText: text.couldntFindAnything, emptySubtext: text.modifySearchCriteria}\">\r\n </particle-endpoint-state>\r\n <button class=\"access btnset clear mar_10\"\r\n [attr.aria-label]=\"text.close\"\r\n (click)=\"clearSearch()\">\r\n <div class=\"circle_20px ptl_brdr_color ptl_brdr_size ptl_input_bg_color\">\r\n <i class=\"fas fa-times\"></i>\r\n </div>\r\n </button>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div *ngIf=\"_internalValue | async as selectedIcon\"\r\n class=\"col space_between bg_overlay brdr border_top pad_x5 wis_selection_bar\">\r\n <div class=\"col v_center mar_10\">\r\n <div class=\"text md faded mar_right10 mobile_hide\">{{text.selection}}:</div>\r\n <div class=\"v_center\" *ngIf=\"showIconSelectionPreview\">\r\n <i class=\"{{selectedIcon.prefix}} {{selectedIcon.name}} fa-fw mar_right5\" style=\"font-size:16px;\"></i>\r\n <div class=\"text md bold\">{{selectedIcon.prefix}} {{selectedIcon.name}}</div>\r\n </div>\r\n </div>\r\n <div class=\"col v_center mar_10\">\r\n <button\r\n type=\"button\"\r\n class=\"access btnset spaced md hov_glow save_button_color ptl_brdr_radius\"\r\n [attr.aria-label]=\"text.confirm\"\r\n (click)=\"handleIconSelectConfirm()\"\r\n >\r\n <div>{{text.confirm}}</div>\r\n <div class=\"brdr border_left mar_left10 pad_left10\"><i class=\"fas fa-check\"></i></div>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</particle-dialog>\r\n", styles: [".wis_button{width:40px;min-width:40px;height:40px;min-height:40px;cursor:pointer;transition:all .1s ease}.wis_button:disabled{cursor:default;opacity:1!important}.wis_button:hover:not(:disabled){filter:brightness(1.05)}.wis_button svg{transition:transform .1s ease}.wis_button:hover:not(:disabled) .wis_icon{transform:scale(1.15)}@supports not (-ms-high-contrast:none){.wis_button svg{width:75%;height:75%}}.wis_search{position:relative}.wis_search input{padding-right:40px!important}.wis_search .wis_search_btn{position:absolute;right:0;top:0;z-index:var(--z-frame);border-top-left-radius:0;border-bottom-left-radius:0;height:100%;width:32px}.wis_search .wis_clear_btn{position:absolute;right:40px;top:7px;z-index:var(--z-frame)}.wis_filter_btn{width:100%;padding:5px 10px;border-radius:3px}.wis_filter_btn:not(:hover):not(.selected){background-color:inherit;color:inherit}.wis_icon_btn{cursor:pointer;transition:all .1s ease;width:100%;height:100%;display:flex;flex-direction:column;align-items:center;border:none;border-radius:3px;padding:5px 2px;background-color:inherit;color:inherit}.wis_icon_btn:hover{background-color:#7878781a}.wis_icon_btn_preview{transition:all .1s ease}.wis_selection_bar{z-index:var(--z-frame);box-shadow:0 -6px 10px -8px #00000040;animation-name:slideUpSelectionBar;animation-duration:.2s;transform-origin:bottom center}@keyframes slideUpSelectionBar{0%{transform:scaleY(0);opacity:0}to{transform:scaleY(1);opacity:1}}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.TooltipDirective, selector: "[particleTooltip]", inputs: ["particleTooltip", "tooltipPosition", "tooltipDisabled"] }, { kind: "component", type: i5.DialogComponent, selector: "particle-dialog", inputs: ["object", "title", "titleClass", "showTitle", "allowClose", "bodyClass", "height", "width", "borderRadius", "text"], outputs: ["closed", "opened"] }, { kind: "component", type: i6.EndpointStateComponent, selector: "particle-endpoint-state", inputs: ["loading", "loadingIcon", "empty", "emptyIcon", "error", "errorIcon", "loadingOverlay", "loadingOverlayIcon", "text"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] });
|
|
346
|
-
}
|
|
347
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: IconSelectComponent, decorators: [{
|
|
348
|
-
type: Component,
|
|
349
|
-
args: [{ selector: 'particle-icon-select', providers: [
|
|
350
|
-
{
|
|
351
|
-
provide: NG_VALUE_ACCESSOR,
|
|
352
|
-
useExisting: forwardRef(() => IconSelectComponent),
|
|
353
|
-
multi: true
|
|
354
|
-
}
|
|
355
|
-
], template: "<!-- choose button -->\r\n<button [ngClass]=\"buttonColorClass ? buttonColorClass : 'content_color'\"\r\n [ngStyle]=\"{\r\n 'width': buttonSizing,\r\n 'min-width': buttonSizing,\r\n 'height': buttonSizing,\r\n 'min-height': buttonSizing\r\n }\"\r\n (click)=\"openDialog()\"\r\n [particleTooltip]=\"(_internalValue | async)?.prefix + ' ' + (_internalValue | async)?.name\"\r\n [tooltipDisabled]=\"(_internalValue | async) === undefined\"\r\n [disabled]=\"disabled\"\r\n class=\"access wis_button bg_overlay brdr brad_3\"\r\n [attr.aria-label]=\"text.selectAnIcon\">\r\n <ng-container *ngIf=\"!showDialog else placeholderIcon\">\r\n <div *ngIf=\"_internalValue | async as selectedIcon else noSelection\">\r\n <i class=\"{{selectedIcon.prefix}} {{selectedIcon.name}} wis_icon\"></i>\r\n </div>\r\n <ng-template #noSelection>\r\n <div><i class=\"fas fa-icons opacity_20\"></i></div>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template #placeholderIcon>\r\n <div><i class=\"fas fa-spinner fa-spin\"></i></div>\r\n </ng-template>\r\n</button>\r\n\r\n<!-- TODO: at some point, maybe implement infinite scroll to icons -->\r\n\r\n<!-- picker dialog -->\r\n<particle-dialog [title]=\"text.selectAnIcon\"\r\n [object]=\"showDialog\"\r\n [width]=\"'850px'\"\r\n [height]=\"'500px'\"\r\n (closed)=\"closeDialog()\">\r\n <div class=\"row height100\">\r\n\r\n <!-- FILTERS -->\r\n <div class=\"col min_w250 bg_overlay brdr border_right mobile_hide\">\r\n <div class=\"row_block width100\">\r\n <ng-container *ngIf=\"_filter | async as filter\">\r\n <!-- all icons -->\r\n <div class=\"mar_5 pad_5\">\r\n <button (click)=\"handleFilterSelect({ style: 'all', type: 'all' })\"\r\n [ngClass]=\"{ 'selected': filter.type === 'all' && filter.style === 'all' }\"\r\n class=\"access list_btn row space_between wis_filter_btn bg_overlay_rev brdr\"\r\n [attr.aria-label]=\"text.seeAllIcons\">\r\n <div class=\"v_center\">\r\n <div class=\"circle_16px bg_overlay_rev brdr mar_right10\">\r\n <div *ngIf=\"filter.type === 'all' && filter.style === 'all'\" class=\"circle_8px ok_button_color\"></div>\r\n </div>\r\n <div class=\"text md\">{{text.seeAllIcons}}</div>\r\n </div>\r\n <div class=\"go_icon\"><i class=\"fas fa-chevron-right fa-fw fa-sm opacity_60\"></i></div>\r\n </button>\r\n </div>\r\n <div class=\"bg_overlay brdr hr mar_10\"></div>\r\n <!-- fontawesome icons -->\r\n <div class=\"mar_5\">\r\n <div class=\"text md bolder\" style=\"padding:10px 10px 5px 15px;\">{{text.fontAwesomeIcons}}</div>\r\n <div class=\"mar_5\">\r\n <button (click)=\"handleFilterSelect({ style: 'all', type: 'fontawesome' })\"\r\n [ngClass]=\"{ 'selected': filter.type === 'fontawesome' && filter.style === 'all' }\"\r\n class=\"access list_btn row space_between wis_filter_btn bg_overlay_rev brdr\"\r\n [attr.aria-label]=\"text.filterBy + ' ' + text.fontAwesomeIcons\">\r\n <div class=\"v_center\">\r\n <div class=\"circle_16px bg_overlay_rev brdr mar_right10\">\r\n <div *ngIf=\"filter.type === 'fontawesome' && filter.style === 'all'\" class=\"circle_8px ok_button_color\"></div>\r\n </div>\r\n <div class=\"text md\">{{text.all}}</div>\r\n </div>\r\n <div class=\"go_icon\"><i class=\"fas fa-chevron-right fa-fw fa-sm opacity_60\"></i></div>\r\n </button>\r\n </div>\r\n <div class=\"mar_5\">\r\n <button (click)=\"handleFilterSelect({ style: 'solid', type: 'fontawesome' })\"\r\n [ngClass]=\"{ 'selected': filter.type === 'fontawesome' && filter.style === 'solid' }\"\r\n class=\"access list_btn row space_between wis_filter_btn bg_overlay_rev brdr\"\r\n [attr.aria-label]=\"text.filterBy + ' ' + text.solid + ' ' + text.fontAwesomeIcons\">\r\n <div class=\"v_center\">\r\n <div class=\"circle_16px bg_overlay_rev brdr mar_right10\">\r\n <div *ngIf=\"filter.type === 'fontawesome' && filter.style === 'solid'\" class=\"circle_8px ok_button_color\"></div>\r\n </div>\r\n <div class=\"text md\">{{text.solid}}</div>\r\n </div>\r\n <div class=\"go_icon\"><i class=\"fas fa-chevron-right fa-fw fa-sm opacity_60\"></i></div>\r\n </button>\r\n </div>\r\n <div class=\"mar_5\">\r\n <button (click)=\"handleFilterSelect({ style: 'regular', type: 'fontawesome' })\"\r\n [ngClass]=\"{ 'selected': filter.type === 'fontawesome' && filter.style === 'regular' }\"\r\n class=\"access list_btn row space_between wis_filter_btn bg_overlay_rev brdr\"\r\n [attr.aria-label]=\"text.filterBy + ' ' + text.regular + ' ' + text.fontAwesomeIcons\">\r\n <div class=\"v_center\">\r\n <div class=\"circle_16px bg_overlay_rev brdr mar_right10\">\r\n <div *ngIf=\"filter.type === 'fontawesome' && filter.style === 'regular'\" class=\"circle_8px ok_button_color\"></div>\r\n </div>\r\n <div class=\"text md\">{{text.regular}}</div>\r\n </div>\r\n <div class=\"go_icon\"><i class=\"fas fa-chevron-right fa-fw fa-sm opacity_60\"></i></div>\r\n </button>\r\n </div>\r\n <div class=\"mar_5\">\r\n <button (click)=\"handleFilterSelect({ style: 'brands', type: 'fontawesome' })\"\r\n [ngClass]=\"{ 'selected': filter.type === 'fontawesome' && filter.style === 'brands' }\"\r\n class=\"access list_btn row space_between wis_filter_btn bg_overlay_rev brdr\"\r\n [attr.aria-label]=\"text.filterBy + ' ' + text.brands + ' ' + text.fontAwesomeIcons\">\r\n <div class=\"v_center\">\r\n <div class=\"circle_16px bg_overlay_rev brdr mar_right10\">\r\n <div *ngIf=\"filter.type === 'fontawesome' && filter.style === 'brands'\" class=\"circle_8px ok_button_color\"></div>\r\n </div>\r\n <div class=\"text md\">{{text.brands}}</div>\r\n </div>\r\n <div class=\"go_icon\"><i class=\"fas fa-chevron-right fa-fw fa-sm opacity_60\"></i></div>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"bg_overlay brdr hr mar_10\"></div>\r\n <!-- custom icons -->\r\n <div class=\"mar_5\">\r\n <div class=\"text md bolder\" style=\"padding:10px 10px 5px 15px;\">{{text.customIcons}}</div>\r\n <div class=\"mar_5\">\r\n <button (click)=\"handleFilterSelect({ style: 'all', type: 'particle' })\"\r\n [ngClass]=\"{ 'selected': filter.type === 'particle' && filter.style === 'all' }\"\r\n class=\"access list_btn row space_between wis_filter_btn bg_overlay_rev brdr\"\r\n [attr.aria-label]=\"text.filterBy + ' ' + text.customIcons\">\r\n <div class=\"v_center\">\r\n <div class=\"circle_16px bg_overlay_rev brdr mar_right10\">\r\n <div *ngIf=\"filter.type === 'particle' && filter.style === 'all'\" class=\"circle_8px ok_button_color\"></div>\r\n </div>\r\n <div class=\"text md\">All</div>\r\n </div>\r\n <div class=\"go_icon\"><i class=\"fas fa-chevron-right fa-fw fa-sm opacity_60\"></i></div>\r\n </button>\r\n </div>\r\n <div class=\"mar_5\">\r\n <button (click)=\"handleFilterSelect({ style: 'solid', type: 'particle' })\"\r\n [ngClass]=\"{ 'selected': filter.type === 'particle' && filter.style === 'solid' }\"\r\n class=\"access list_btn row space_between wis_filter_btn bg_overlay_rev brdr\"\r\n [attr.aria-label]=\"text.filterBy + ' ' + text.solid + ' ' + text.customIcons\">\r\n <div class=\"v_center\">\r\n <div class=\"circle_16px bg_overlay_rev brdr mar_right10\">\r\n <div *ngIf=\"filter.type === 'particle' && filter.style === 'solid'\" class=\"circle_8px ok_button_color\"></div>\r\n </div>\r\n <div class=\"text md\">{{text.solid}}</div>\r\n </div>\r\n <div class=\"go_icon\"><i class=\"fas fa-chevron-right fa-fw fa-sm opacity_60\"></i></div>\r\n </button>\r\n </div>\r\n <div class=\"mar_5\">\r\n <button (click)=\"handleFilterSelect({ style: 'regular', type: 'particle' })\"\r\n [ngClass]=\"{ 'selected': filter.type === 'particle' && filter.style === 'regular' }\"\r\n class=\"access list_btn row space_between wis_filter_btn bg_overlay_rev brdr\"\r\n [attr.aria-label]=\"text.filterBy + ' ' + text.regular + ' ' + text.customIcons\">\r\n <div class=\"v_center\">\r\n <div class=\"circle_16px bg_overlay_rev brdr mar_right10\">\r\n <div *ngIf=\"filter.type === 'particle' && filter.style === 'regular'\" class=\"circle_8px ok_button_color\"></div>\r\n </div>\r\n <div class=\"text md\">{{text.regular}}</div>\r\n </div>\r\n <div class=\"go_icon\"><i class=\"fas fa-chevron-right fa-fw fa-sm opacity_60\"></i></div>\r\n </button>\r\n </div>\r\n <div class=\"mar_5\">\r\n <button (click)=\"handleFilterSelect({ style: 'brands', type: 'particle' })\"\r\n [ngClass]=\"{ 'selected': filter.type === 'particle' && filter.style === 'brands' }\"\r\n class=\"access list_btn row space_between wis_filter_btn bg_overlay_rev brdr\"\r\n [attr.aria-label]=\"text.filterBy + ' ' + text.brands + ' ' + text.customIcons\">\r\n <div class=\"v_center\">\r\n <div class=\"circle_16px bg_overlay_rev brdr mar_right10\">\r\n <div *ngIf=\"filter.type === 'particle' && filter.style === 'brands'\" class=\"circle_8px ok_button_color\"></div>\r\n </div>\r\n <div class=\"text md\">{{text.brands}}</div>\r\n </div>\r\n <div class=\"go_icon\"><i class=\"fas fa-chevron-right fa-fw fa-sm opacity_60\"></i></div>\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- ICONS -->\r\n <div class=\"col size_2 column\">\r\n <div class=\"col content_color_dark_1 pad_x5\">\r\n <!-- paginator -->\r\n <div *ngIf=\"totalPages$ | async as totalPages\"\r\n class=\"col v_center mar_10\">\r\n <button *ngIf=\"canPaginatePrevious$ | async else disabledPreviousButton\"\r\n (click)=\"paginatePrevious()\"\r\n class=\"access btn square_24px bg_overlay brdr ok_button_color\"\r\n [attr.aria-label]=\"text.previousPage\">\r\n <span class=\"icon slide_left\"><i class=\"fas fa-arrow-left\"></i></span>\r\n </button>\r\n <ng-template #disabledPreviousButton>\r\n <button disabled class=\"access btn square_24px bg_overlay brdr ok_button_color\"\r\n [attr.aria-label]=\"text.previousPage\">\r\n <span class=\"icon slide_left\"><i class=\"fas fa-arrow-left\"></i></span>\r\n </button>\r\n </ng-template>\r\n <div\r\n class=\"text sm bolder center\"\r\n style=\"min-width:65px;\">\r\n {{(_activePage | async)! + 1}} / {{totalPages}}\r\n </div>\r\n <button *ngIf=\"canPaginateNext$ | async else disabledNextButton\"\r\n (click)=\"paginateNext()\"\r\n class=\"access btn square_24px bg_overlay brdr ok_button_color\"\r\n [attr.aria-label]=\"text.nextPage\">\r\n <span class=\"icon slide_right\"><i class=\"fas fa-arrow-right\"></i></span>\r\n </button>\r\n <ng-template #disabledNextButton>\r\n <button disabled class=\"access btn square_24px bg_overlay brdr ok_button_color\"\r\n [attr.aria-label]=\"text.nextPage\">\r\n <span class=\"icon slide_right\"><i class=\"fas fa-arrow-right\"></i></span>\r\n </button>\r\n </ng-template>\r\n </div>\r\n <!-- search -->\r\n <div class=\"col size_1 wis_search mar_10\">\r\n <input #iconSearchInput\r\n [ngModel]=\"_searchText | async\"\r\n (input)=\"_searchText.next(iconSearchInput.value)\"\r\n (keyup.enter)=\"_searchInputEnterKeyup.next($any(null))\"\r\n class=\"access input md bg_overlay brdr content_color\"\r\n [attr.aria-label]=\"text.searchIcons\" [placeholder]=\"text.searchIcons + '...'\" />\r\n <button *ngIf=\"(canSearch$ | async) && (_searchClick | async)\"\r\n (click)=\"clearSearch()\" aria-label=\"Clear search\"\r\n class=\"access btn circle_18px overlay wis_clear_btn\">\r\n <span class=\"icon grow\"><i class=\"fas fa-times fa-sm\"></i></span>\r\n </button>\r\n <button *ngIf=\"canSearch$ | async else disabledSearchButton\"\r\n (click)=\"_searchClick.next(iconSearchInput.value); _activePage.next(0)\"\r\n class=\"access btn square_28px bg_overlay brdr ok_button_color brad_3 wis_search_btn\"\r\n [attr.aria-label]=\"text.submitSearch\" type=\"submit\">\r\n <span class=\"icon grow\"><i class=\"fas fa-search fa-sm\"></i></span>\r\n </button>\r\n <ng-template #disabledSearchButton>\r\n <button disabled\r\n class=\"access btn square_28px bg_overlay brdr ok_button_color brad_3 wis_search_btn\"\r\n [attr.aria-label]=\"text.submitSearch\" type=\"submit\">\r\n <span class=\"icon grow\"><i class=\"fas fa-search fa-sm\"></i></span>\r\n </button>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <!-- icons -->\r\n <div #iconScrollContainer class=\"col size_1 top_left scroll_y pad_5\" style=\"scroll-behavior: smooth\">\r\n <ng-container *ngIf=\"paginatedIcons$ | async as icons else noResults\">\r\n <div class=\"row wrap top_left\" style=\"align-items:stretch;\">\r\n <ng-container *ngFor=\"let icon of paginatedIcons$ | async\">\r\n <div class=\"col size_1 min_w75 mar_5\">\r\n <button class=\"access wis_icon_btn\" (click)=\"handleIconSelect(icon)\" [attr.aria-label]=\"text.select + ' ' + icon.name\">\r\n <div [ngClass]=\"((_internalValue | async)?.prefix === icon.prefix) && ((_internalValue | async)?.name === icon.name) ? 'ok_button_color' : 'content_color'\"\r\n class=\"wis_icon_btn_preview square_50px brad_3 bg_overlay brdr mar_bot5\">\r\n <i class=\"{{icon.prefix}} {{icon.name}}\"></i>\r\n </div>\r\n <div class=\"text sm center faded\">{{icon.name}}</div>\r\n </button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-template #noResults>\r\n <div class=\"row column min_h300 center_center\">\r\n <particle-endpoint-state\r\n [empty]=\"true\"\r\n [emptyIcon]=\"'fas fa-search fa-3x mar_bot5'\"\r\n [text]=\"{emptyText: text.couldntFindAnything, emptySubtext: text.modifySearchCriteria}\">\r\n </particle-endpoint-state>\r\n <button class=\"access btnset clear mar_10\"\r\n [attr.aria-label]=\"text.close\"\r\n (click)=\"clearSearch()\">\r\n <div class=\"circle_20px ptl_brdr_color ptl_brdr_size ptl_input_bg_color\">\r\n <i class=\"fas fa-times\"></i>\r\n </div>\r\n </button>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div *ngIf=\"_internalValue | async as selectedIcon\"\r\n class=\"col space_between bg_overlay brdr border_top pad_x5 wis_selection_bar\">\r\n <div class=\"col v_center mar_10\">\r\n <div class=\"text md faded mar_right10 mobile_hide\">{{text.selection}}:</div>\r\n <div class=\"v_center\" *ngIf=\"showIconSelectionPreview\">\r\n <i class=\"{{selectedIcon.prefix}} {{selectedIcon.name}} fa-fw mar_right5\" style=\"font-size:16px;\"></i>\r\n <div class=\"text md bold\">{{selectedIcon.prefix}} {{selectedIcon.name}}</div>\r\n </div>\r\n </div>\r\n <div class=\"col v_center mar_10\">\r\n <button\r\n type=\"button\"\r\n class=\"access btnset spaced md hov_glow save_button_color ptl_brdr_radius\"\r\n [attr.aria-label]=\"text.confirm\"\r\n (click)=\"handleIconSelectConfirm()\"\r\n >\r\n <div>{{text.confirm}}</div>\r\n <div class=\"brdr border_left mar_left10 pad_left10\"><i class=\"fas fa-check\"></i></div>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</particle-dialog>\r\n", styles: [".wis_button{width:40px;min-width:40px;height:40px;min-height:40px;cursor:pointer;transition:all .1s ease}.wis_button:disabled{cursor:default;opacity:1!important}.wis_button:hover:not(:disabled){filter:brightness(1.05)}.wis_button svg{transition:transform .1s ease}.wis_button:hover:not(:disabled) .wis_icon{transform:scale(1.15)}@supports not (-ms-high-contrast:none){.wis_button svg{width:75%;height:75%}}.wis_search{position:relative}.wis_search input{padding-right:40px!important}.wis_search .wis_search_btn{position:absolute;right:0;top:0;z-index:var(--z-frame);border-top-left-radius:0;border-bottom-left-radius:0;height:100%;width:32px}.wis_search .wis_clear_btn{position:absolute;right:40px;top:7px;z-index:var(--z-frame)}.wis_filter_btn{width:100%;padding:5px 10px;border-radius:3px}.wis_filter_btn:not(:hover):not(.selected){background-color:inherit;color:inherit}.wis_icon_btn{cursor:pointer;transition:all .1s ease;width:100%;height:100%;display:flex;flex-direction:column;align-items:center;border:none;border-radius:3px;padding:5px 2px;background-color:inherit;color:inherit}.wis_icon_btn:hover{background-color:#7878781a}.wis_icon_btn_preview{transition:all .1s ease}.wis_selection_bar{z-index:var(--z-frame);box-shadow:0 -6px 10px -8px #00000040;animation-name:slideUpSelectionBar;animation-duration:.2s;transform-origin:bottom center}@keyframes slideUpSelectionBar{0%{transform:scaleY(0);opacity:0}to{transform:scaleY(1);opacity:1}}\n"] }]
|
|
356
|
-
}], ctorParameters: () => [{ type: i1.IconsService }, { type: i0.ChangeDetectorRef }], propDecorators: { value: [{
|
|
357
|
-
type: Input
|
|
358
|
-
}], disabled: [{
|
|
359
|
-
type: Input
|
|
360
|
-
}], buttonColorClass: [{
|
|
361
|
-
type: Input
|
|
362
|
-
}], buttonSizing: [{
|
|
363
|
-
type: Input
|
|
364
|
-
}], text: [{
|
|
365
|
-
type: Input
|
|
366
|
-
}], opened: [{
|
|
367
|
-
type: Output
|
|
368
|
-
}], selected: [{
|
|
369
|
-
type: Output
|
|
370
|
-
}], closed: [{
|
|
371
|
-
type: Output
|
|
372
|
-
}], iconScrollContainer: [{
|
|
373
|
-
type: ViewChild,
|
|
374
|
-
args: ['iconScrollContainer']
|
|
375
|
-
}] } });
|
|
376
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2ljb25zL2NvbXBvbmVudHMvaWNvbi1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2ljb25zL2NvbXBvbmVudHMvaWNvbi1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQUkxRDs7R0FFRztBQWFILE1BQU0sT0FBTyxtQkFBbUI7SUFnUFY7SUFBK0I7SUE5T25EOzs7T0FHRztJQUNLLE1BQU0sQ0FBVSxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBRXZDOzs7T0FHRztJQUNILElBQ0ksS0FBSyxDQUFDLEtBQWE7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFFcEIsSUFBSSxLQUFLLEVBQUcsQ0FBQztZQUNYLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENB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VSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDO2dCQUNsRCxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0Ysc0pDOUJILDR0a0JBZ1RBOzsyRkRoUmEsbUJBQW1CO2tCQVovQixTQUFTOytCQUNFLHNCQUFzQixhQUdyQjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQzs0QkFDbEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUhBZUcsS0FBSztzQkFEUixLQUFLO2dCQWdCRixRQUFRO3NCQURYLEtBQUs7Z0JBU04sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBT04sWUFBWTtzQkFEWCxLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkEyQk4sTUFBTTtzQkFETCxNQUFNO2dCQU9QLFFBQVE7c0JBRFAsTUFBTTtnQkFPUCxNQUFNO3NCQURMLE1BQU07Z0JBT1AsbUJBQW1CO3NCQURsQixTQUFTO3VCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHRhcCwgd2l0aExhdGVzdEZyb20gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEljb25zU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ljb25zLnNlcnZpY2UnO1xyXG5pbXBvcnQge0ljb25TZWxlY3RUZXh0fSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbW9kZWxzL3BhcnRpY2xlLWNvbXBvbmVudC10ZXh0Lm1vZGVsJztcclxuXHJcbi8qKlxyXG4gKiBQYXJ0aWNsZSBJY29uIFNlbGVjdCBjb21wb25lbnQgcHJvdmlkZXMgYSBidXR0b24gYW5kIGFuIGljb24gcGlja2VyIHRoYXQgaW5jbHVkZXMgYWxsIG9mIHRoZSBQYXJ0aWNsZSBJY29ucyBhcyB3ZWxsIGFzIHRoZSBGQVMgaWNvbnMuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3BhcnRpY2xlLWljb24tc2VsZWN0JyxcclxuICB0ZW1wbGF0ZVVybDogJ2ljb24tc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pY29uLXNlbGVjdC5jb21wb25lbnQuY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJY29uU2VsZWN0Q29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJY29uU2VsZWN0Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uRGVzdHJveSB7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBudW1iZXIgb2YgaXRlbXMgdG8gZGlzcGxheSBwZXIgcGFnZVxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgUEFHRV9TSVpFID0gNDg7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgdmFsdWUgb2YgdGhlIGljb24gc2VsZWN0XHJcbiAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byBzZXRcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgIGlmICh2YWx1ZSkgIHtcclxuICAgICAgY29uc3QgW3ByZWZpeCwgbmFtZV0gPSB2YWx1ZS5zcGxpdCgnICcpO1xyXG4gICAgICB0aGlzLl9pbnRlcm5hbFZhbHVlLm5leHQoeyBwcmVmaXgsIG5hbWUgfSk7XHJcbiAgICAgIHRoaXMuc2hvd0ljb25TZWxlY3Rpb25QcmV2aWV3ID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBkaXNhYmxlZFxyXG4gICAqIEBwYXJhbSBkaXNhYmxlZCB3aGV0aGVyIG9yIG5vdCB0aGUgaWNvbiBwaWNrZXIgc2hvdWxkIGJlIGRpc2FibGVkXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgZGlzYWJsZWQoZGlzYWJsZWQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2Rpc2FibGVkID0gZGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb2xvciBjbGFzcyBvZiB0aGUgYnV0dG9uXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBidXR0b25Db2xvckNsYXNzOiBzdHJpbmcgPSBudWxsIGFzIGFueTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHZhbHVlIHRvIHNldCB0byB0aGUgYnV0dG9uJ3Mgd2lkdGgsIG1pbi13aWR0aCwgaGVpZ2h0IGFuZCBtaW4taGVpZ2h0XHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBidXR0b25TaXppbmcgPSAnNDBweCc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgdGV4dDogSWNvblNlbGVjdFRleHQgPSB7XHJcbiAgICBzZWxlY3RBbkljb246ICdTZWxlY3QgYW4gSWNvbicsXHJcbiAgICBzZWVBbGxJY29uczogJ1NlZSBBbGwgSWNvbnMnLFxyXG4gICAgZm9udEF3ZXNvbWVJY29uczogJ0ZvbnQgQXdlc29tZSBJY29ucycsXHJcbiAgICBhbGw6ICdBbGwnLFxyXG4gICAgc29saWQ6ICdTb2xpZCcsXHJcbiAgICByZWd1bGFyOiAnUmVndWxhcicsXHJcbiAgICBicmFuZHM6ICdCcmFuZHMnLFxyXG4gICAgY3VzdG9tSWNvbnM6ICdDdXN0b20gSWNvbnMnLFxyXG4gICAgcHJldmlvdXNQYWdlOiAnUHJldmlvdXMgUGFnZScsXHJcbiAgICBuZXh0UGFnZTogJ05leHQgUGFnZScsXHJcbiAgICBzZWFyY2hJY29uczogJ1NlYXJjaCBJY29ucycsXHJcbiAgICBzdWJtaXRTZWFyY2g6ICdTdWJtaXQgU2VhcmNoJyxcclxuICAgIGNsZWFyUmVzdWx0czogJ0NsZWFyIFJlc3VsdHMnLFxyXG4gICAgY291bGRudEZpbmRBbnl0aGluZzogJ1dlIGNvdWxkblxcJ3QgZmluZCBhbnl0aGluZycsXHJcbiAgICBtb2RpZnlTZWFyY2hDcml0ZXJpYTogJ1BsZWFzZSB0cnkgbW9kaWZ5aW5nIHlvdXIgc2VhcmNoIGNyaXRlcmlhJyxcclxuICAgIHNlbGVjdGlvbjogJ1NlbGVjdGlvbicsXHJcbiAgICBjb25maXJtOiAnQ29uZmlybScsXHJcbiAgICBzZWxlY3Q6ICdTZWxlY3QnLFxyXG4gICAgY2xvc2U6ICdDbG9zZSdcclxuICB9IGFzIEljb25TZWxlY3RUZXh0O1xyXG5cclxuICAvKipcclxuICAgKiBJY29uIHNlbGVjdCBvcGVuZWQgZXZlbnQgZW1pdHRlclxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWNvbiBzZWxlY3RlZCBldmVudCBlbWl0dGVyXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgc2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvKipcclxuICAgKiBEaWFsb2cgY2xvc2VkIGV2ZW50IGVtaXR0ZXJcclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHNjcm9sbGFibGUgaWNvbiBjb250YWluZXJcclxuICAgKi9cclxuICBAVmlld0NoaWxkKCdpY29uU2Nyb2xsQ29udGFpbmVyJylcclxuICBpY29uU2Nyb2xsQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiA9IG51bGwgYXMgYW55O1xyXG5cclxuICAvKipcclxuICAgKiBCZWhhdmlvclN1YmplY3QgdHJhY2tpbmcgdGhlIGlucHV0IHZhbHVlIGRlc3RydWN0ZWQgaW50byBpdHMgcHJlZml4IGFuZCBjbGFzcyBuYW1lXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgX2ludGVybmFsVmFsdWUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgcHJlZml4OiBzdHJpbmcsIG5hbWU6IHN0cmluZyB9PihudWxsIGFzIGFueSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEJlaGF2aW9yU3ViamVjdCB0cmFja2luZyB0aGUgY3VycmVudCBmaWx0ZXIgdmFsdWUgc2VsZWN0aW9uIGZvciBpY29uc1xyXG4gICAqL1xyXG4gIHJlYWRvbmx5IF9maWx0ZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PCB7XHJcbiAgICBzdHlsZTogJ2FsbCcgfCAnc29saWQnIHwgJ3JlZ3VsYXInIHwgJ2JyYW5kcycsXHJcbiAgICB0eXBlOiAnYWxsJyB8ICdwYXJ0aWNsZScgfCAnZm9udGF3ZXNvbWUnXHJcbiAgfT4oeyBzdHlsZTogJ2FsbCcsIHR5cGU6ICdhbGwnIH0pO1xyXG5cclxuICAvKipcclxuICAgKiBCZWhhdmlvclN1YmplY3QgdHJhY2tpbmcgdGhlIGN1cnJlbnQgaWNvbiBzZWFyY2ggdGV4dCB2YWx1ZVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IF9zZWFyY2hUZXh0ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEJlaGF2aW9yU3ViamVjdCB0aGF0IGVtaXRzIHdoZW4gc2VhcmNoIGJ1dHRvbiBoYXMgYmVlbiBjbGlja2VkXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgX3NlYXJjaENsaWNrID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEJlaGF2aW9yU3ViamVjdCB0cmFja2luZyB0aGUgYWN0aXZlIHBhZ2luYXRpb24gcGFnZVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IF9hY3RpdmVQYWdlID0gbmV3IEJlaGF2aW9yU3ViamVjdCgwKTtcclxuXHJcbiAgLyoqXHJcbiAgICogU3ViamVjdCB0aGF0IGVtaXRzIG9uIHNlYXJjaCBpbnB1dCBlbnRlciBrZXl1cFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IF9zZWFyY2hJbnB1dEVudGVyS2V5dXAgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICAvKipcclxuICAgKiBBbiBhcnJheSBvZiBhbGwgaWNvbnMgKGFzIHN0cmluZ3MpIHRoYXQgbWVldCB0aGUgY3VycmVudCBmaWx0ZXIvc2VhcmNoIGNyaXRlcmlhIGFzIGFuIE9ic2VydmFibGVcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaWNvbnMkOiBPYnNlcnZhYmxlPEFycmF5PHsgcHJlZml4OiBzdHJpbmcsIG5hbWU6IHN0cmluZyB9Pj4gPSBjb21iaW5lTGF0ZXN0KFtcclxuICAgIHRoaXMuX2ZpbHRlcixcclxuICAgIHRoaXMuX3NlYXJjaENsaWNrXHJcbiAgXSkucGlwZShcclxuICAgIG1hcCgoW2ZpbHRlciwgc2VhcmNoVGV4dF0pID0+IHRoaXMuc2VydmljZS5nZXRJY29ucyhcclxuICAgICAgZmlsdGVyLnR5cGUsXHJcbiAgICAgIGZpbHRlci5zdHlsZSxcclxuICAgICAgc2VhcmNoVGV4dFxyXG4gICAgKSlcclxuICApO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgY291bnQgb2YgdG90YWwgcGFnaW5hdG9yIHBhZ2VzIGFzIGFuIE9ic2VydmFibGVcclxuICAgKi9cclxuICByZWFkb25seSB0b3RhbFBhZ2VzJDogT2JzZXJ2YWJsZTxudW1iZXI+ID0gdGhpcy5pY29ucyQucGlwZShcclxuICAgIG1hcChpY29ucyA9PiBpY29ucy5sZW5ndGhcclxuICAgICAgPyBNYXRoLmNlaWwoaWNvbnMubGVuZ3RoIC8gSWNvblNlbGVjdENvbXBvbmVudC5QQUdFX1NJWkUpXHJcbiAgICAgIDogMFxyXG4gICAgKVxyXG4gICk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9ic2VydmFibGUgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRoZSB1c2VyIGNhbiBwZXJmb3JtIGFuIGljb24gdGV4dCBzZWFyY2hcclxuICAgKi9cclxuICByZWFkb25seSBjYW5TZWFyY2gkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5fc2VhcmNoVGV4dC5waXBlKFxyXG4gICAgbWFwKHNlYXJjaFRleHQgPT4gISFzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGgpXHJcbiAgKTtcclxuXHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2YWJsZSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdGhlIHVzZXIgY2FuIHBhZ2luYXRlIHRvIHRoZSBwcmV2aW91cyBwYWdlXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgY2FuUGFnaW5hdGVQcmV2aW91cyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl9hY3RpdmVQYWdlLnBpcGUoXHJcbiAgICBtYXAoYWN0aXZlUGFnZSA9PiBhY3RpdmVQYWdlID4gMClcclxuICApO1xyXG5cclxuICAvKipcclxuICAgKiBPYnNlcnZhYmxlIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0aGUgdXNlciBjYW4gcGFnaW5hdGUgdG8gdGhlIG5leHQgcGFnZVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGNhblBhZ2luYXRlTmV4dCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnRvdGFsUGFnZXMkLnBpcGUoXHJcbiAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLl9hY3RpdmVQYWdlKSxcclxuICAgIG1hcCgoW3RvdGFsUGFnZXMsIGFjdGl2ZVBhZ2VdKSA9PiBhY3RpdmVQYWdlIDwgKHRvdGFsUGFnZXMgLSAxKSlcclxuICApO1xyXG5cclxuICAvKipcclxuICAgKiBQYWdpbmF0ZWQgaWNvbnMgYXJyYXkgYXMgYW4gT2JzZXJ2YWJsZVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHBhZ2luYXRlZEljb25zJDogT2JzZXJ2YWJsZTxBcnJheTx7IHByZWZpeDogc3RyaW5nLCBuYW1lOiBzdHJpbmcgfT4+ID0gY29tYmluZUxhdGVzdChbXHJcbiAgICB0aGlzLl9hY3RpdmVQYWdlLFxyXG4gICAgdGhpcy5pY29ucyRcclxuICBdKS5waXBlKFxyXG4gICAgbWFwKChbYWN0aXZlUGFnZSwgaWNvbnNdKSA9PiB7XHJcbiAgICAgIGxldCBwYWdpbmF0ZWRJY29uczogQXJyYXk8eyBwcmVmaXg6IHN0cmluZywgbmFtZTogc3RyaW5nIH0+ID0gbnVsbCBhcyBhbnk7XHJcblxyXG4gICAgICBpZiAoYWN0aXZlUGFnZSA+PSAwICYmIGljb25zLmxlbmd0aCkge1xyXG4gICAgICAgIHBhZ2luYXRlZEljb25zID0gaWNvbnMuc2xpY2UoXHJcbiAgICAgICAgICBJY29uU2VsZWN0Q29tcG9uZW50LlBBR0VfU0laRSAqIGFjdGl2ZVBhZ2UsXHJcbiAgICAgICAgICBJY29uU2VsZWN0Q29tcG9uZW50LlBBR0VfU0laRSAqIChhY3RpdmVQYWdlICsgMSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gcGFnaW5hdGVkSWNvbnM7XHJcbiAgICB9KSxcclxuICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmljb25TY3JvbGxDb250YWluZXIpIHtcclxuICAgICAgICB0aGlzLmljb25TY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9iamVjdCB0aGF0IGNvbnRyb2xzIHdoZXRoZXIgdG8gc2hvdyB0aGUgZGlhbG9nIG9yIG5vdFxyXG4gICAqL1xyXG4gIHNob3dEaWFsb2c6IGFueTtcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBvciBub3QgdG8gc2hvdyB0aGUgaWNvbiBzZWxlY3Rpb24gcHJldmlld1xyXG4gICAqL1xyXG4gIHNob3dJY29uU2VsZWN0aW9uUHJldmlldyA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpcHRpb24gb2JqZWN0IHRvIHN0b3JlIHNlYXJjaCBpbnB1dCBlbnRlciBrZXl1cCBzdWJzY3JpcHRpb25cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgaWNvbiBzZWxlY3RcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3ZhbHVlOiBzdHJpbmcgPSBudWxsIGFzIGFueTtcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBvciBub3QgdGhlIGljb24gcGlja2VyIGlzIGRpc2FibGVkXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBGdW5jdGlvbiB0byBjYWxsIG9uIGNoYW5nZVxyXG4gICAqL1xyXG4gIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xyXG5cclxuICAvKipcclxuICAgKiBGdW5jdGlvbiB0byBjYWxsIG9uIHRvdWNoXHJcbiAgICovXHJcbiAgb25Ub3VjaGVkOiAoKSA9PiBhbnkgPSAoKSA9PiB7fTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGVwZW5kZW5jeSBpbmplY3Rpb24gc2l0ZVxyXG4gICAqIEBwYXJhbSBzZXJ2aWNlIHRoZSBJY29uc1NlcnZpY2VcclxuICAgKiBAcGFyYW0gY2hhbmdlRGV0ZWN0b3JSZWYgdGhlIEFuZ3VsYXIgQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlcnZpY2U6IEljb25zU2VydmljZSwgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5fc2VhcmNoSW5wdXRFbnRlcktleXVwLnBpcGUoXHJcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuY2FuU2VhcmNoJClcclxuICAgICkuc3Vic2NyaWJlKChbX19fLCBjYW5TZWFyY2hdKSA9PiB7XHJcbiAgICAgIGlmIChjYW5TZWFyY2gpIHtcclxuICAgICAgICB0aGlzLl9zZWFyY2hDbGljay5uZXh0KHRoaXMuX3NlYXJjaFRleHQuZ2V0VmFsdWUoKSk7XHJcbiAgICAgICAgdGhpcy5fYWN0aXZlUGFnZS5uZXh0KDApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBkaXNhYmxlZFxyXG4gICAqL1xyXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlc3Ryb3kgY29tcG9uZW50LCB1bnN1YnNjcmliZSBmcm9tIHNlYXJjaCBpbnB1dCBlbnRlciBrZXl1cCBzdWJzY3JpcHRpb25cclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXcml0ZSB0aGUgaW5wdXQgdmFsdWVcclxuICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIHdyaXRlXHJcbiAgICovXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVnaXN0ZXIgb25DaGFuZ2UgZnVuY3Rpb25cclxuICAgKiBAcGFyYW0gZm4gdGhlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyXHJcbiAgICovXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWdpc3RlciBvblRvdWNoZWQgZnVuY3Rpb25cclxuICAgKiBAcGFyYW0gZm4gdGhlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyXHJcbiAgICovXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBkaXNhYmxlZCBzdGF0ZVxyXG4gICAqIEBwYXJhbSBpc0Rpc2FibGVkIHdoZXRoZXIgb3Igbm90IHRoZSBpY29uIHBpY2tlciBzaG91bGQgYmUgZGlzYWJsZWRcclxuICAgKi9cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wZW4gdGhlIGljb24gc2VsZWN0IGRpYWxvZ1xyXG4gICAqL1xyXG4gIG9wZW5EaWFsb2coKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5yZXNldCgpO1xyXG4gICAgICB0aGlzLnNob3dEaWFsb2cgPSB7fTtcclxuICAgICAgdGhpcy5vcGVuZWQuZW1pdCgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMudmFsdWUpIHtcclxuICAgICAgICB0aGlzLnNob3dJY29uU2VsZWN0aW9uUHJldmlldyA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NlIHRoZSBpY29uIHNlbGVjdCBkaWFsb2dcclxuICAgKi9cclxuICBjbG9zZURpYWxvZygpOiB2b2lkIHtcclxuICAgIGxldCBpbnRlcm5hbFZhbHVlID0gbnVsbDtcclxuICAgIGlmICh0aGlzLl92YWx1ZSkge1xyXG4gICAgICBjb25zdCBbcHJlZml4LCBuYW1lXSA9IHRoaXMuX3ZhbHVlLnNwbGl0KCcgJyk7XHJcbiAgICAgIGludGVybmFsVmFsdWUgPSB7IHByZWZpeCwgbmFtZSB9O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2ludGVybmFsVmFsdWUubmV4dChpbnRlcm5hbFZhbHVlIGFzIGFueSk7XHJcbiAgICB0aGlzLnNob3dEaWFsb2cgPSBudWxsO1xyXG4gICAgdGhpcy5jbG9zZWQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIGZpbHRlciBzZWxlY3RcclxuICAgKiBAcGFyYW0gZmlsdGVyIHRoZSBzZWxlY3RlZCBmaWx0ZXJcclxuICAgKi9cclxuICBoYW5kbGVGaWx0ZXJTZWxlY3QoXHJcbiAgICBmaWx0ZXI6IHsgc3R5bGU6ICdhbGwnIHwgJ3NvbGlkJyB8ICdyZWd1bGFyJyB8ICdicmFuZHMnLFxyXG4gICAgdHlwZTogJ2FsbCcgfCAncGFydGljbGUnIHwgJ2ZvbnRhd2Vzb21lJyB9XHJcbiAgKTogdm9pZCB7XHJcbiAgICB0aGlzLl9maWx0ZXIubmV4dChmaWx0ZXIpO1xyXG4gICAgdGhpcy5fYWN0aXZlUGFnZS5uZXh0KDApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGludGVybmFsIHZhbHVlIG9uIGljb24gc2VsZWN0XHJcbiAgICogQHBhcmFtIGljb24gdGhlIHNlbGVjdGVkIGljb25cclxuICAgKi9cclxuICBoYW5kbGVJY29uU2VsZWN0KGljb246IHsgcHJlZml4OiBzdHJpbmcsIG5hbWU6IHN0cmluZyB9KTogdm9pZCB7XHJcbiAgICB0aGlzLl9pbnRlcm5hbFZhbHVlLm5leHQoaWNvbik7XHJcbiAgICB0aGlzLnNob3dJY29uU2VsZWN0aW9uUHJldmlldyA9IGZhbHNlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNob3dJY29uU2VsZWN0aW9uUHJldmlldyA9IHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV3JpdGUgdmFsdWUgb24gY29uZmlybVxyXG4gICAqL1xyXG4gIGhhbmRsZUljb25TZWxlY3RDb25maXJtKCk6IHZvaWQge1xyXG4gICAgY29uc3QgaWNvbiA9IHRoaXMuX2ludGVybmFsVmFsdWUuZ2V0VmFsdWUoKTtcclxuICAgIHRoaXMudXBkYXRlTW9kZWwoYCR7aWNvbi5wcmVmaXh9ICR7aWNvbi5uYW1lfWApO1xyXG4gICAgdGhpcy5jbG9zZURpYWxvZygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR28gdG8gdGhlIG5leHQgcGFnaW5hdGlvbiBwYWdlXHJcbiAgICovXHJcbiAgcGFnaW5hdGVOZXh0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fYWN0aXZlUGFnZS5uZXh0KHRoaXMuX2FjdGl2ZVBhZ2UuZ2V0VmFsdWUoKSArIDEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR28gdG8gdGhlIHByZXZpb3VzIHBhZ2luYXRpb24gcGFnZVxyXG4gICAqL1xyXG4gIHBhZ2luYXRlUHJldmlvdXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9hY3RpdmVQYWdlLm5leHQodGhpcy5fYWN0aXZlUGFnZS5nZXRWYWx1ZSgpIC0gMSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciBzZWFyY2ggdGV4dCBhbmQgcmVzZXQgcGFnaW5hdG9yXHJcbiAgICovXHJcbiAgY2xlYXJTZWFyY2goKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zZWFyY2hUZXh0Lm5leHQoJycpO1xyXG4gICAgdGhpcy5fc2VhcmNoQ2xpY2submV4dCgnJyk7XHJcbiAgICB0aGlzLl9hY3RpdmVQYWdlLm5leHQoMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgbW9kZWxcclxuICAgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgbW9kZWxcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgdXBkYXRlTW9kZWwodmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgdmFsdWVCZWZvcmVVcGRhdGUgPSB0aGlzLl92YWx1ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgICAgaWYgKHZhbHVlQmVmb3JlVXBkYXRlICE9PSB0aGlzLl92YWx1ZSkge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5fdmFsdWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkLmVtaXQoeyB2YWx1ZTogdGhpcy5fdmFsdWUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldCBmaWx0ZXJpbmcvcGFnaW5hdGlvbiBCZWhhdmlvclN1YmplY3QgdmFsdWVzXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIHJlc2V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZmlsdGVyLm5leHQoeyBzdHlsZTogJ2FsbCcsIHR5cGU6ICdhbGwnIH0pO1xyXG4gICAgdGhpcy5fc2VhcmNoVGV4dC5uZXh0KCcnKTtcclxuICAgIHRoaXMuX3NlYXJjaENsaWNrLm5leHQoJycpO1xyXG4gICAgdGhpcy5fYWN0aXZlUGFnZS5uZXh0KDApO1xyXG4gIH1cclxufVxyXG4iLCI8IS0tIGNob29zZSBidXR0b24gLS0+XHJcbjxidXR0b24gW25nQ2xhc3NdPVwiYnV0dG9uQ29sb3JDbGFzcyA/IGJ1dHRvbkNvbG9yQ2xhc3MgOiAnY29udGVudF9jb2xvcidcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgJ3dpZHRoJzogYnV0dG9uU2l6aW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAnbWluLXdpZHRoJzogYnV0dG9uU2l6aW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAnaGVpZ2h0JzogYnV0dG9uU2l6aW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAnbWluLWhlaWdodCc6IGJ1dHRvblNpemluZ1xyXG4gICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5EaWFsb2coKVwiXHJcbiAgICAgICAgW3BhcnRpY2xlVG9vbHRpcF09XCIoX2ludGVybmFsVmFsdWUgfCBhc3luYyk/LnByZWZpeCArICcgJyArIChfaW50ZXJuYWxWYWx1ZSB8IGFzeW5jKT8ubmFtZVwiXHJcbiAgICAgICAgW3Rvb2x0aXBEaXNhYmxlZF09XCIoX2ludGVybmFsVmFsdWUgfCBhc3luYykgPT09IHVuZGVmaW5lZFwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICBjbGFzcz1cImFjY2VzcyB3aXNfYnV0dG9uIGJnX292ZXJsYXkgYnJkciBicmFkXzNcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidGV4dC5zZWxlY3RBbkljb25cIj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNob3dEaWFsb2cgZWxzZSBwbGFjZWhvbGRlckljb25cIj5cclxuICAgIDxkaXYgKm5nSWY9XCJfaW50ZXJuYWxWYWx1ZSB8IGFzeW5jIGFzIHNlbGVjdGVkSWNvbiBlbHNlIG5vU2VsZWN0aW9uXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwie3tzZWxlY3RlZEljb24ucHJlZml4fX0ge3tzZWxlY3RlZEljb24ubmFtZX19IHdpc19pY29uXCI+PC9pPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctdGVtcGxhdGUgI25vU2VsZWN0aW9uPlxyXG4gICAgICA8ZGl2PjxpIGNsYXNzPVwiZmFzIGZhLWljb25zIG9wYWNpdHlfMjBcIj48L2k+PC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gIDxuZy10ZW1wbGF0ZSAjcGxhY2Vob2xkZXJJY29uPlxyXG4gICAgPGRpdj48aSBjbGFzcz1cImZhcyBmYS1zcGlubmVyIGZhLXNwaW5cIj48L2k+PC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9idXR0b24+XHJcblxyXG48IS0tIFRPRE86IGF0IHNvbWUgcG9pbnQsIG1heWJlIGltcGxlbWVudCBpbmZpbml0ZSBzY3JvbGwgdG8gaWNvbnMgLS0+XHJcblxyXG48IS0tIHBpY2tlciBkaWFsb2cgLS0+XHJcbjxwYXJ0aWNsZS1kaWFsb2cgW3RpdGxlXT1cInRleHQuc2VsZWN0QW5JY29uXCJcclxuICBbb2JqZWN0XT1cInNob3dEaWFsb2dcIlxyXG4gIFt3aWR0aF09XCInODUwcHgnXCJcclxuICBbaGVpZ2h0XT1cIic1MDBweCdcIlxyXG4gIChjbG9zZWQpPVwiY2xvc2VEaWFsb2coKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBoZWlnaHQxMDBcIj5cclxuXHJcbiAgICAgIDwhLS0gRklMVEVSUyAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBtaW5fdzI1MCBiZ19vdmVybGF5IGJyZHIgYm9yZGVyX3JpZ2h0IG1vYmlsZV9oaWRlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd19ibG9jayB3aWR0aDEwMFwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9maWx0ZXIgfCBhc3luYyBhcyBmaWx0ZXJcIj5cclxuICAgICAgICAgICAgPCEtLSBhbGwgaWNvbnMgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXJfNSBwYWRfNVwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImhhbmRsZUZpbHRlclNlbGVjdCh7IHN0eWxlOiAnYWxsJywgdHlwZTogJ2FsbCcgfSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnc2VsZWN0ZWQnOiBmaWx0ZXIudHlwZSA9PT0gJ2FsbCcgJiYgZmlsdGVyLnN0eWxlID09PSAnYWxsJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWNjZXNzIGxpc3RfYnRuIHJvdyBzcGFjZV9iZXR3ZWVuIHdpc19maWx0ZXJfYnRuIGJnX292ZXJsYXlfcmV2IGJyZHJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0ZXh0LnNlZUFsbEljb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidl9jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNpcmNsZV8xNnB4IGJnX292ZXJsYXlfcmV2IGJyZHIgbWFyX3JpZ2h0MTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmlsdGVyLnR5cGUgPT09ICdhbGwnICYmIGZpbHRlci5zdHlsZSA9PT0gJ2FsbCdcIiBjbGFzcz1cImNpcmNsZV84cHggb2tfYnV0dG9uX2NvbG9yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dCBtZFwiPnt7dGV4dC5zZWVBbGxJY29uc319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnb19pY29uXCI+PGkgY2xhc3M9XCJmYXMgZmEtY2hldnJvbi1yaWdodCBmYS1mdyBmYS1zbSBvcGFjaXR5XzYwXCI+PC9pPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnX292ZXJsYXkgYnJkciBociBtYXJfMTBcIj48L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBmb250YXdlc29tZSBpY29ucyAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1hcl81XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQgbWQgYm9sZGVyXCIgc3R5bGU9XCJwYWRkaW5nOjEwcHggMTBweCA1cHggMTVweDtcIj57e3RleHQuZm9udEF3ZXNvbWVJY29uc319PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1hcl81XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJoYW5kbGVGaWx0ZXJTZWxlY3QoeyBzdHlsZTogJ2FsbCcsIHR5cGU6ICdmb250YXdlc29tZScgfSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzZWxlY3RlZCc6IGZpbHRlci50eXBlID09PSAnZm9udGF3ZXNvbWUnICYmIGZpbHRlci5zdHlsZSA9PT0gJ2FsbCcgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWNjZXNzIGxpc3RfYnRuIHJvdyBzcGFjZV9iZXR3ZWVuIHdpc19maWx0ZXJfYnRuIGJnX292ZXJsYXlfcmV2IGJyZHJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInRleHQuZmlsdGVyQnkgKyAnICcgKyB0ZXh0LmZvbnRBd2Vzb21lSWNvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZfY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNpcmNsZV8xNnB4IGJnX292ZXJsYXlfcmV2IGJyZHIgbWFyX3JpZ2h0MTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJmaWx0ZXIudHlwZSA9PT0gJ2ZvbnRhd2Vzb21lJyAmJiBmaWx0ZXIuc3R5bGUgPT09ICdhbGwnXCIgY2xhc3M9XCJjaXJjbGVfOHB4IG9rX2J1dHRvbl9jb2xvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0IG1kXCI+e3t0ZXh0LmFsbH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ29faWNvblwiPjxpIGNsYXNzPVwiZmFzIGZhLWNoZXZyb24tcmlnaHQgZmEtZncgZmEtc20gb3BhY2l0eV82MFwiPjwvaT48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXJfNVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiaGFuZGxlRmlsdGVyU2VsZWN0KHsgc3R5bGU6ICdzb2xpZCcsIHR5cGU6ICdmb250YXdlc29tZScgfSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzZWxlY3RlZCc6IGZpbHRlci50eXBlID09PSAnZm9udGF3ZXNvbWUnICYmICBmaWx0ZXIuc3R5bGUgPT09ICdzb2xpZCcgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWNjZXNzIGxpc3RfYnRuIHJvdyBzcGFjZV9iZXR3ZWVuIHdpc19maWx0ZXJfYnRuIGJnX292ZXJsYXlfcmV2IGJyZHJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInRleHQuZmlsdGVyQnkgKyAnICcgKyB0ZXh0LnNvbGlkICsgJyAnICsgdGV4dC5mb250QXdlc29tZUljb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2X2NlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaXJjbGVfMTZweCBiZ19vdmVybGF5X3JldiBicmRyIG1hcl9yaWdodDEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmlsdGVyLnR5cGUgPT09ICdmb250YXdlc29tZScgJiYgIGZpbHRlci5zdHlsZSA9PT0gJ3NvbGlkJ1wiIGNsYXNzPVwiY2lyY2xlXzhweCBva19idXR0b25fY29sb3JcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dCBtZFwiPnt7dGV4dC5zb2xpZH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ29faWNvblwiPjxpIGNsYXNzPVwiZmFzIGZhLWNoZXZyb24tcmlnaHQgZmEtZncgZmEtc20gb3BhY2l0eV82MFwiPjwvaT48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXJfNVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiaGFuZGxlRmlsdGVyU2VsZWN0KHsgc3R5bGU6ICdyZWd1bGFyJywgdHlwZTogJ2ZvbnRhd2Vzb21lJyB9KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3NlbGVjdGVkJzogZmlsdGVyLnR5cGUgPT09ICdmb250YXdlc29tZScgJiYgIGZpbHRlci5zdHlsZSA9PT0gJ3JlZ3VsYXInIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFjY2VzcyBsaXN0X2J0biByb3cgc3BhY2VfYmV0d2VlbiB3aXNfZmlsdGVyX2J0biBiZ19vdmVybGF5X3JldiBicmRyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0ZXh0LmZpbHRlckJ5ICsgJyAnICsgdGV4dC5yZWd1bGFyICsgJyAnICsgdGV4dC5mb250QXdlc29tZUljb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2X2NlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaXJjbGVfMTZweCBiZ19vdmVybGF5X3JldiBicmRyIG1hcl9yaWdodDEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmlsdGVyLnR5cGUgPT09ICdmb250YXdlc29tZScgJiYgIGZpbHRlci5zdHlsZSA9PT0gJ3JlZ3VsYXInXCIgY2xhc3M9XCJjaXJjbGVfOHB4IG9rX2J1dHRvbl9jb2xvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0IG1kXCI+e3t0ZXh0LnJlZ3VsYXJ9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdvX2ljb25cIj48aSBjbGFzcz1cImZhcyBmYS1jaGV2cm9uLXJpZ2h0IGZhLWZ3IGZhLXNtIG9wYWNpdHlfNjBcIj48L2k+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFyXzVcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImhhbmRsZUZpbHRlclNlbGVjdCh7IHN0eWxlOiAnYnJhbmRzJywgdHlwZTogJ2ZvbnRhd2Vzb21lJyB9KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3NlbGVjdGVkJzogZmlsdGVyLnR5cGUgPT09ICdmb250YXdlc29tZScgJiYgIGZpbHRlci5zdHlsZSA9PT0gJ2JyYW5kcycgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWNjZXNzIGxpc3RfYnRuIHJvdyBzcGFjZV9iZXR3ZWVuIHdpc19maWx0ZXJfYnRuIGJnX292ZXJsYXlfcmV2IGJyZHJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInRleHQuZmlsdGVyQnkgKyAnICcgKyB0ZXh0LmJyYW5kcyArICcgJyArIHRleHQuZm9udEF3ZXNvbWVJY29uc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidl9jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2lyY2xlXzE2cHggYmdfb3ZlcmxheV9yZXYgYnJkciBtYXJfcmlnaHQxMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZpbHRlci50eXBlID09PSAnZm9udGF3ZXNvbWUnICYmICBmaWx0ZXIuc3R5bGUgPT09ICdicmFuZHMnXCIgY2xhc3M9XCJjaXJjbGVfOHB4IG9rX2J1dHRvbl9jb2xvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0IG1kXCI+e3t0ZXh0LmJyYW5kc319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ29faWNvblwiPjxpIGNsYXNzPVwiZmFzIGZhLWNoZXZyb24tcmlnaHQgZmEtZncgZmEtc20gb3BhY2l0eV82MFwiPjwvaT48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnX292ZXJsYXkgYnJkciBociBtYXJfMTBcIj48L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBjdXN0b20gaWNvbnMgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXJfNVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0IG1kIGJvbGRlclwiIHN0eWxlPVwicGFkZGluZzoxMHB4IDEwcHggNXB4IDE1cHg7XCI+e3t0ZXh0LmN1c3RvbUljb25zfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFyXzVcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImhhbmRsZUZpbHRlclNlbGVjdCh7IHN0eWxlOiAnYWxsJywgdHlwZTogJ3BhcnRpY2xlJyB9KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3NlbGVjdGVkJzogZmlsdGVyLnR5cGUgPT09ICdwYXJ0aWNsZScgJiYgZmlsdGVyLnN0eWxlID09PSAnYWxsJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY2Nlc3MgbGlzdF9idG4gcm93IHNwYWNlX2JldHdlZW4gd2lzX2ZpbHRlcl9idG4gYmdfb3ZlcmxheV9yZXYgYnJkclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidGV4dC5maWx0ZXJCeSArICcgJyArIHRleHQuY3VzdG9tSWNvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZfY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNpcmNsZV8xNnB4IGJnX292ZXJsYXlfcmV2IGJyZHIgbWFyX3JpZ2h0MTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJmaWx0ZXIudHlwZSA9PT0gJ3BhcnRpY2xlJyAmJiBmaWx0ZXIuc3R5bGUgPT09ICdhbGwnXCIgY2xhc3M9XCJjaXJjbGVfOHB4IG9rX2J1dHRvbl9jb2xvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0IG1kXCI+QWxsPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ29faWNvblwiPjxpIGNsYXNzPVwiZmFzIGZhLWNoZXZyb24tcmlnaHQgZmEtZncgZmEtc20gb3BhY2l0eV82MFwiPjwvaT48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXJfNVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiaGFuZGxlRmlsdGVyU2VsZWN0KHsgc3R5bGU6ICdzb2xpZCcsIHR5cGU6ICdwYXJ0aWNsZScgfSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzZWxlY3RlZCc6IGZpbHRlci50eXBlID09PSAncGFydGljbGUnICYmIGZpbHRlci5zdHlsZSA9PT0gJ3NvbGlkJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY2Nlc3MgbGlzdF9idG4gcm93IHNwYWNlX2JldHdlZW4gd2lzX2ZpbHRlcl9idG4gYmdfb3ZlcmxheV9yZXYgYnJkclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidGV4dC5maWx0ZXJCeSArICcgJyArIHRleHQuc29saWQgKyAnICcgKyB0ZXh0LmN1c3RvbUljb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2X2NlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaXJjbGVfMTZweCBiZ19vdmVybGF5X3JldiBicmRyIG1hcl9yaWdodDEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmlsdGVyLnR5cGUgPT09ICdwYXJ0aWNsZScgJiYgZmlsdGVyLnN0eWxlID09PSAnc29saWQnXCIgY2xhc3M9XCJjaXJjbGVfOHB4IG9rX2J1dHRvbl9jb2xvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0IG1kXCI+e3t0ZXh0LnNvbGlkfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnb19pY29uXCI+PGkgY2xhc3M9XCJmYXMgZmEtY2hldnJvbi1yaWdodCBmYS1mdyBmYS1zbSBvcGFjaXR5XzYwXCI+PC9pPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1hcl81XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJoYW5kbGVGaWx0ZXJTZWxlY3QoeyBzdHlsZTogJ3JlZ3VsYXInLCB0eXBlOiAncGFydGljbGUnIH0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnc2VsZWN0ZWQnOiBmaWx0ZXIudHlwZSA9PT0gJ3BhcnRpY2xlJyAmJiBmaWx0ZXIuc3R5bGUgPT09ICdyZWd1bGFyJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY2Nlc3MgbGlzdF9idG4gcm93IHNwYWNlX2JldHdlZW4gd2lzX2ZpbHRlcl9idG4gYmdfb3ZlcmxheV9yZXYgYnJkclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidGV4dC5maWx0ZXJCeSArICcgJyArIHRleHQucmVndWxhciArICcgJyArIHRleHQuY3VzdG9tSWNvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZfY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNpcmNsZV8xNnB4IGJnX292ZXJsYXlfcmV2IGJyZHIgbWFyX3JpZ2h0MTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJmaWx0ZXIudHlwZSA9PT0gJ3BhcnRpY2xlJyAmJiBmaWx0ZXIuc3R5bGUgPT09ICdyZWd1bGFyJ1wiIGNsYXNzPVwiY2lyY2xlXzhweCBva19idXR0b25fY29sb3JcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dCBtZFwiPnt7dGV4dC5yZWd1bGFyfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnb19pY29uXCI+PGkgY2xhc3M9XCJmYXMgZmEtY2hldnJvbi1yaWdodCBmYS1mdyBmYS1zbSBvcGFjaXR5XzYwXCI+PC9pPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1hcl81XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJoYW5kbGVGaWx0ZXJTZWxlY3QoeyBzdHlsZTogJ2JyYW5kcycsIHR5cGU6ICdwYXJ0aWNsZScgfSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzZWxlY3RlZCc6IGZpbHRlci50eXBlID09PSAncGFydGljbGUnICYmIGZpbHRlci5zdHlsZSA9PT0gJ2JyYW5kcycgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWNjZXNzIGxpc3RfYnRuIHJvdyBzcGFjZV9iZXR3ZWVuIHdpc19maWx0ZXJfYnRuIGJnX292ZXJsYXlfcmV2IGJyZHJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInRleHQuZmlsdGVyQnkgKyAnICcgKyB0ZXh0LmJyYW5kcyArICcgJyArIHRleHQuY3VzdG9tSWNvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZfY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNpcmNsZV8xNnB4IGJnX292ZXJsYXlfcmV2IGJyZHIgbWFyX3JpZ2h0MTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJmaWx0ZXIudHlwZSA9PT0gJ3BhcnRpY2xlJyAmJiBmaWx0ZXIuc3R5bGUgPT09ICdicmFuZHMnXCIgY2xhc3M9XCJjaXJjbGVfOHB4IG9rX2J1dHRvbl9jb2xvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0IG1kXCI+e3t0ZXh0LmJyYW5kc319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ29faWNvblwiPjxpIGNsYXNzPVwiZmFzIGZhLWNoZXZyb24tcmlnaHQgZmEtZncgZmEtc20gb3BhY2l0eV82MFwiPjwvaT48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gSUNPTlMgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgc2l6ZV8yIGNvbHVtblwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29udGVudF9jb2xvcl9kYXJrXzEgcGFkX3g1XCI+XHJcbiAgICAgICAgICA8IS0tIHBhZ2luYXRvciAtLT5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0b3RhbFBhZ2VzJCB8IGFzeW5jIGFzIHRvdGFsUGFnZXNcIlxyXG4gICAgICAgICAgICAgICBjbGFzcz1cImNvbCB2X2NlbnRlciBtYXJfMTBcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNhblBhZ2luYXRlUHJldmlvdXMkIHwgYXN5bmMgZWxzZSBkaXNhYmxlZFByZXZpb3VzQnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicGFnaW5hdGVQcmV2aW91cygpXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFjY2VzcyBidG4gc3F1YXJlXzI0cHggYmdfb3ZlcmxheSBicmRyIG9rX2J1dHRvbl9jb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0ZXh0LnByZXZpb3VzUGFnZVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBzbGlkZV9sZWZ0XCI+PGkgY2xhc3M9XCJmYXMgZmEtYXJyb3ctbGVmdFwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc2FibGVkUHJldmlvdXNCdXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBkaXNhYmxlZCBjbGFzcz1cImFjY2VzcyBidG4gc3F1YXJlXzI0cHggYmdfb3ZlcmxheSBicmRyIG9rX2J1dHRvbl9jb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInRleHQucHJldmlvdXNQYWdlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gc2xpZGVfbGVmdFwiPjxpIGNsYXNzPVwiZmFzIGZhLWFycm93LWxlZnRcIj48L2k+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0IHNtIGJvbGRlciBjZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgIHN0eWxlPVwibWluLXdpZHRoOjY1cHg7XCI+XHJcbiAgICAgICAgICAgICAge3soX2FjdGl2ZVBhZ2UgfCBhc3luYykhICsgMX19IC8ge3t0b3RhbFBhZ2VzfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjYW5QYWdpbmF0ZU5leHQkIHwgYXN5bmMgZWxzZSBkaXNhYmxlZE5leHRCdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwYWdpbmF0ZU5leHQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY2Nlc3MgYnRuIHNxdWFyZV8yNHB4IGJnX292ZXJsYXkgYnJkciBva19idXR0b25fY29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidGV4dC5uZXh0UGFnZVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBzbGlkZV9yaWdodFwiPjxpIGNsYXNzPVwiZmFzIGZhLWFycm93LXJpZ2h0XCI+PC9pPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzYWJsZWROZXh0QnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gZGlzYWJsZWQgY2xhc3M9XCJhY2Nlc3MgYnRuIHNxdWFyZV8yNHB4IGJnX292ZXJsYXkgYnJkciBva19idXR0b25fY29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0ZXh0Lm5leHRQYWdlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gc2xpZGVfcmlnaHRcIj48aSBjbGFzcz1cImZhcyBmYS1hcnJvdy1yaWdodFwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwhLS0gc2VhcmNoIC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBzaXplXzEgd2lzX3NlYXJjaCBtYXJfMTBcIj5cclxuICAgICAgICAgICAgPGlucHV0ICNpY29uU2VhcmNoSW5wdXRcclxuICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIl9zZWFyY2hUZXh0IHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIl9zZWFyY2hUZXh0Lm5leHQoaWNvblNlYXJjaElucHV0LnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiX3NlYXJjaElucHV0RW50ZXJLZXl1cC5uZXh0KCRhbnkobnVsbCkpXCJcclxuICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWNjZXNzIGlucHV0IG1kIGJnX292ZXJsYXkgYnJkciBjb250ZW50X2NvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidGV4dC5zZWFyY2hJY29uc1wiIFtwbGFjZWhvbGRlcl09XCJ0ZXh0LnNlYXJjaEljb25zICsgJy4uLidcIiAvPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiKGNhblNlYXJjaCQgfCBhc3luYykgJiYgKF9zZWFyY2hDbGljayB8IGFzeW5jKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyU2VhcmNoKClcIiBhcmlhLWxhYmVsPVwiQ2xlYXIgc2VhcmNoXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFjY2VzcyBidG4gY2lyY2xlXzE4cHggb3ZlcmxheSB3aXNfY2xlYXJfYnRuXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGdyb3dcIj48aSBjbGFzcz1cImZhcyBmYS10aW1lcyBmYS1zbVwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY2FuU2VhcmNoJCB8IGFzeW5jIGVsc2UgZGlzYWJsZWRTZWFyY2hCdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfc2VhcmNoQ2xpY2submV4dChpY29uU2VhcmNoSW5wdXQudmFsdWUpOyBfYWN0aXZlUGFnZS5uZXh0KDApXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFjY2VzcyBidG4gc3F1YXJlXzI4cHggYmdfb3ZlcmxheSBicmRyIG9rX2J1dHRvbl9jb2xvciBicmFkXzMgd2lzX3NlYXJjaF9idG5cIlxyXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidGV4dC5zdWJtaXRTZWFyY2hcIiB0eXBlPVwic3VibWl0XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGdyb3dcIj48aSBjbGFzcz1cImZhcyBmYS1zZWFyY2ggZmEtc21cIj48L2k+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNhYmxlZFNlYXJjaEJ1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIGRpc2FibGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFjY2VzcyBidG4gc3F1YXJlXzI4cHggYmdfb3ZlcmxheSBicmRyIG9rX2J1dHRvbl9jb2xvciBicmFkXzMgd2lzX3NlYXJjaF9idG5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0ZXh0LnN1Ym1pdFNlYXJjaFwiIHR5cGU9XCJzdWJtaXRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBncm93XCI+PGkgY2xhc3M9XCJmYXMgZmEtc2VhcmNoIGZhLXNtXCI+PC9pPjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gaWNvbnMgLS0+XHJcbiAgICAgICAgPGRpdiAjaWNvblNjcm9sbENvbnRhaW5lciBjbGFzcz1cImNvbCBzaXplXzEgdG9wX2xlZnQgc2Nyb2xsX3kgcGFkXzVcIiBzdHlsZT1cInNjcm9sbC1iZWhhdmlvcjogc21vb3RoXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFnaW5hdGVkSWNvbnMkIHwgYXN5bmMgYXMgaWNvbnMgZWxzZSBub1Jlc3VsdHNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyB3cmFwIHRvcF9sZWZ0XCIgc3R5bGU9XCJhbGlnbi1pdGVtczpzdHJldGNoO1wiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGljb24gb2YgcGFnaW5hdGVkSWNvbnMkIHwgYXN5bmNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgc2l6ZV8xIG1pbl93NzUgbWFyXzVcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjY2VzcyB3aXNfaWNvbl9idG5cIiAoY2xpY2spPVwiaGFuZGxlSWNvblNlbGVjdChpY29uKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwidGV4dC5zZWxlY3QgKyAnICcgKyBpY29uLm5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIigoX2ludGVybmFsVmFsdWUgfCBhc3luYyk/LnByZWZpeCA9PT0gaWNvbi5wcmVmaXgpICYmICgoX2ludGVybmFsVmFsdWUgfCBhc3luYyk/Lm5hbWUgPT09IGljb24ubmFtZSkgPyAnb2tfYnV0dG9uX2NvbG9yJyA6ICdjb250ZW50X2NvbG9yJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIndpc19pY29uX2J0bl9wcmV2aWV3IHNxdWFyZV81MHB4IGJyYWRfMyBiZ19vdmVybGF5IGJyZHIgbWFyX2JvdDVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwie3tpY29uLnByZWZpeH19IHt7aWNvbi5uYW1lfX1cIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQgc20gY2VudGVyIGZhZGVkXCI+e3tpY29uLm5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNub1Jlc3VsdHM+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29sdW1uIG1pbl9oMzAwIGNlbnRlcl9jZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8cGFydGljbGUtZW5kcG9pbnQtc3RhdGVcclxuICAgICAgICAgICAgICAgIFtlbXB0eV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtlbXB0eUljb25dPVwiJ2ZhcyBmYS1zZWFyY2ggZmEtM3ggbWFyX2JvdDUnXCJcclxuICAgICAgICAgICAgICAgIFt0ZXh0XT1cIntlbXB0eVRleHQ6IHRleHQuY291bGRudEZpbmRBbnl0aGluZywgZW1wdHlTdWJ0ZXh0OiB0ZXh0Lm1vZGlmeVNlYXJjaENyaXRlcmlhfVwiPlxyXG4gICAgICAgICAgICAgIDwvcGFydGljbGUtZW5kcG9pbnQtc3RhdGU+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjY2VzcyBidG5zZXQgY2xlYXIgbWFyXzEwXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidGV4dC5jbG9zZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJTZWFyY2goKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNpcmNsZV8yMHB4IHB0bF9icmRyX2NvbG9yIHB0bF9icmRyX3NpemUgcHRsX2lucHV0X2JnX2NvbG9yXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiX2ludGVybmFsVmFsdWUgfCBhc3luYyBhcyBzZWxlY3RlZEljb25cIlxyXG4gICAgICAgICAgICAgY2xhc3M9XCJjb2wgc3BhY2VfYmV0d2VlbiBiZ19vdmVybGF5IGJyZHIgYm9yZGVyX3RvcCBwYWRfeDUgd2lzX3NlbGVjdGlvbl9iYXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgdl9jZW50ZXIgbWFyXzEwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0IG1kIGZhZGVkIG1hcl9yaWdodDEwIG1vYmlsZV9oaWRlXCI+e3t0ZXh0LnNlbGVjdGlvbn19OjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidl9jZW50ZXJcIiAqbmdJZj1cInNob3dJY29uU2VsZWN0aW9uUHJldmlld1wiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwie3tzZWxlY3RlZEljb24ucHJlZml4fX0ge3tzZWxlY3RlZEljb24ubmFtZX19IGZhLWZ3IG1hcl9yaWdodDVcIiBzdHlsZT1cImZvbnQtc2l6ZToxNnB4O1wiPjwvaT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dCBtZCBib2xkXCI+e3tzZWxlY3RlZEljb24ucHJlZml4fX0ge3tzZWxlY3RlZEljb24ubmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHZfY2VudGVyIG1hcl8xMFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhY2Nlc3MgYnRuc2V0IHNwYWNlZCBtZCBob3ZfZ2xvdyBzYXZlX2J1dHRvbl9jb2xvciBwdGxfYnJkcl9yYWRpdXNcIlxyXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidGV4dC5jb25maXJtXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlSWNvblNlbGVjdENvbmZpcm0oKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8ZGl2Pnt7dGV4dC5jb25maXJtfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnJkciBib3JkZXJfbGVmdCBtYXJfbGVmdDEwIHBhZF9sZWZ0MTBcIj48aSBjbGFzcz1cImZhcyBmYS1jaGVja1wiPjwvaT48L2Rpdj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9wYXJ0aWNsZS1kaWFsb2c+XHJcbiJdfQ==
|