@libs-ui/services-config-project 0.2.28 → 0.2.30-6.1

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.
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  import { Injectable, computed, effect, signal } from "@angular/core";
3
3
  import { colorStepContrastFromOrigin, get } from "@libs-ui/utils";
4
- import { configButtonColor, configButtonStatus, configButtonTab, configHeading, configLinkButton, fontConfig, styleButtonTab, weights } from "./config-project-data";
4
+ import { configButtonColor, configButtonStatus, configButtonTab, configHeading, configLinkButton, fontConfig, sizeButtonConfig, styleButtonTab, weights } from "./config-project-data";
5
5
  import * as i0 from "@angular/core";
6
6
  export class LibsUiConfigProjectService {
7
7
  themeColor = signal('#226ff5');
@@ -13,11 +13,19 @@ export class LibsUiConfigProjectService {
13
13
  textReadonlyColor = signal('#071631');
14
14
  textDisableColor = signal('#9ca2ad');
15
15
  backgroundReadonlyColor = signal('#f8f9fa');
16
+ backgroundUserSelection = signal('#00000040');
17
+ backgroundList = signal('#f8f9fa');
18
+ backgroundListHover = signal('#f8f9fa');
19
+ backgroundListHoverDanger = signal('#fef5f6');
16
20
  configFont = signal(fontConfig);
17
21
  configHead = signal(configHeading);
22
+ functionGetConfigButtonIncludes = signal(() => {
23
+ return {};
24
+ });
18
25
  configButton = computed(() => {
19
- return { ...configButtonColor(this.themeColor()), ...configLinkButton(this.themeColor()) };
26
+ return { ...configButtonColor(this.themeColor()), ...configLinkButton(this.themeColor()), ...this.functionGetConfigButtonIncludes()(this.themeColor()) };
20
27
  });
28
+ configButtonSize = signal(sizeButtonConfig());
21
29
  configButtonStatus = signal(configButtonStatus());
22
30
  configButtonTab = signal(configButtonTab());
23
31
  styleClassGlobalEl = document.createElement('style');
@@ -36,6 +44,9 @@ export class LibsUiConfigProjectService {
36
44
  effect(() => {
37
45
  this.setupButtonTab();
38
46
  });
47
+ effect(() => {
48
+ this.setupButtonSize();
49
+ });
39
50
  this.configString();
40
51
  this.setClassGlobal();
41
52
  }
@@ -60,6 +71,18 @@ export class LibsUiConfigProjectService {
60
71
  set TextReadonlyColor(color) {
61
72
  this.textReadonlyColor.set(color || '#071631');
62
73
  }
74
+ set BackgroundUserSelection(color) {
75
+ this.backgroundUserSelection.set(color || '#00000040');
76
+ }
77
+ set BackgroundList(color) {
78
+ this.backgroundList.set(color || '#f8f9fa');
79
+ }
80
+ set BackgroundListHover(color) {
81
+ this.backgroundListHover.set(color || '#f8f9fa');
82
+ }
83
+ set BackgroundListHoverDanger(color) {
84
+ this.backgroundListHover.set(color || '#fef5f6');
85
+ }
63
86
  set BackgroundDisableColor(color) {
64
87
  this.backgroundDisableColor.set(color || '#f8f9fa');
65
88
  }
@@ -75,6 +98,9 @@ export class LibsUiConfigProjectService {
75
98
  get ConfigButton() {
76
99
  return this.configButton;
77
100
  }
101
+ set FunctionGetConfigButtonIncludes(functionGetConfigButtonIncludes) {
102
+ this.functionGetConfigButtonIncludes.set(functionGetConfigButtonIncludes);
103
+ }
78
104
  get ConfigButtonStatus() {
79
105
  return this.configButtonStatus();
80
106
  }
@@ -86,24 +112,32 @@ export class LibsUiConfigProjectService {
86
112
  }
87
113
  // public hàm để sử dụng cho component input sử dụng tagInput = frameArea;
88
114
  setupFontFamily(currentDoc) {
89
- currentDoc = currentDoc || document;
90
- const doc = currentDoc.documentElement;
91
- doc.style.setProperty('--libs-ui-font-family-name', `${this.configFont().name},Arial, Helvetica, sans-serif`);
92
- Object.keys(weights).forEach(key => {
93
- const fontFace = new FontFace(this.configFont().name, `url(${get(this.configFont(), key)})`, { weight: get(weights, key) });
94
- fontFace.load().then(loadedFont => {
95
- if ('add' in currentDoc.fonts) {
96
- currentDoc.fonts.add(loadedFont);
115
+ try {
116
+ currentDoc = currentDoc || document;
117
+ const doc = currentDoc.documentElement;
118
+ doc.style.setProperty('--libs-ui-font-family-name', `${this.configFont().name},Arial, Helvetica, sans-serif`);
119
+ Object.keys(weights).forEach(key => {
120
+ if (!get(this.configFont(), key)) {
121
+ return;
97
122
  }
123
+ const fontFace = new FontFace(this.configFont().name, `url(${get(this.configFont(), key)})`, { weight: get(weights, key) });
124
+ fontFace.load().then(loadedFont => {
125
+ if (currentDoc && 'add' in currentDoc.fonts) {
126
+ currentDoc.fonts.add(loadedFont);
127
+ }
128
+ });
98
129
  });
99
- });
130
+ }
131
+ catch (error) {
132
+ console.log(error);
133
+ }
100
134
  }
101
135
  setupFontHead() {
102
- const configHeads = this.configHead();
136
+ const configHeadsData = this.configHead();
103
137
  let styles = '';
104
- Object.keys(configHeads).forEach(keyConfig => {
138
+ Object.keys(configHeadsData).forEach(keyConfig => {
105
139
  let style = `font-family:var(--libs-ui-font-family-name,'Arial');`;
106
- const config = get(configHeading, keyConfig);
140
+ const config = get(configHeadsData, keyConfig);
107
141
  Object.keys(config).forEach(key => {
108
142
  style = `${style}${key}:${get(config, key)};`;
109
143
  });
@@ -113,6 +147,17 @@ export class LibsUiConfigProjectService {
113
147
  this.styleClassHeadEl.innerHTML = styles;
114
148
  document.head.append(this.styleClassHeadEl);
115
149
  }
150
+ setupButtonSize() {
151
+ const configButtonSize = this.configButtonSize();
152
+ const doc = document.documentElement;
153
+ Object.keys(configButtonSize).forEach(keySize => {
154
+ const config = get(configButtonSize, keySize);
155
+ Object.keys(config).forEach(keyType => {
156
+ const name = `--libs-ui-button-size-${keySize}-${keyType.replace(/[_]/g, '-')}`;
157
+ doc.style.setProperty(name, get(config, keyType));
158
+ });
159
+ });
160
+ }
116
161
  setupButtonTab() {
117
162
  const configButtonTab = this.configButtonTab();
118
163
  let styles = '';
@@ -138,6 +183,10 @@ export class LibsUiConfigProjectService {
138
183
  light_5: colorStepContrastFromOrigin(this.themeColor(), 70)?.light,
139
184
  light_6: colorStepContrastFromOrigin(this.themeColor(), 80)?.light,
140
185
  dark: colorStepContrastFromOrigin(this.themeColor(), 20)?.dark,
186
+ background_list: this.backgroundList(),
187
+ background_list_hover: this.backgroundListHover(),
188
+ background_list_hover_danger: this.backgroundListHoverDanger(),
189
+ background_selection: this.backgroundUserSelection(),
141
190
  border: this.borderColor(),
142
191
  border_error: this.borderErrorColor(),
143
192
  text_error: this.textErrorColor(),
@@ -159,38 +208,61 @@ export class LibsUiConfigProjectService {
159
208
  }
160
209
  setClassGlobal() {
161
210
  this.styleClassGlobalEl.innerHTML = `
162
- .libs-ui-border-primary-general{border: 1px solid var(--libs-ui-color-default, #226FF5) !important;}
163
- .libs-ui-border-primary-focus-general{border: 1px solid var(--libs-ui-color-light-1, #4e8cf7) !important;}
164
- .libs-ui-border-primary-hover-general{border: 1px solid var(--libs-ui-color-light-3, #f4f8ff) !important;}
165
- .libs-ui-border-general{ border: 1px solid var(--libs-ui-color-border, #e6e7ea) !important;}
166
- .libs-ui-border-top-general{border-top: 1px solid var(--libs-ui-color-border, #e6e7ea) !important;}
167
- .libs-ui-border-right-general{border-right: 1px solid var(--libs-ui-color-border, #e6e7ea) !important;}
168
- .libs-ui-border-bottom-general{border-bottom: 1px solid var(--libs-ui-color-border, #e6e7ea) !important;}
169
- .libs-ui-border-dashed-bottom-general{border-bottom: dashed 1px var(--libs-ui-color-border, #e6e7ea) !important;}
170
- .libs-ui-border-left-general{border-left: 1px solid var(--libs-ui-color-border, #e6e7ea) !important;}
171
- .libs-ui-border-x-general{border-left: 1px solid var(--libs-ui-color-border, #e6e7ea) !important; border-right: 1px solid var(--libs-ui-color-border, #e6e7ea) !important;}
172
- .libs-ui-border-y-general{border-top: 1px solid var(--libs-ui-color-border, #e6e7ea) !important; border-bottom: 1px solid var(--libs-ui-color-border, #e6e7ea) !important;}
173
- .libs-ui-border-left-top-general{border-left: 1px solid var(--libs-ui-color-border, #e6e7ea) !important; border-top: 1px solid var(--libs-ui-color-border, #e6e7ea) !important;}
174
- .libs-ui-border-left-bottom-general{border-left: 1px solid var(--libs-ui-color-border, #e6e7ea) !important; border-bottom: 1px solid var(--libs-ui-color-border, #e6e7ea) !important;}
175
- .libs-ui-border-right-top-general{border-right: 1px solid var(--libs-ui-color-border, #e6e7ea) !important; border-top: 1px solid var(--libs-ui-color-border, #e6e7ea) !important;}
176
- .libs-ui-border-right-bottom-general{border-right: 1px solid var(--libs-ui-color-border, #e6e7ea) !important; border-bottom: 1px solid var(--libs-ui-color-border, #e6e7ea) !important;}
211
+ .libs-ui-border-primary-general{border: 1px solid var(--libs-ui-color-default, #226FF5);}
212
+ .libs-ui-border-primary-focus-general{border: 1px solid var(--libs-ui-color-light-1, #4e8cf7);}
213
+ .libs-ui-border-primary-hover-general{border: 1px solid var(--libs-ui-color-light-3, #f4f8ff);}
214
+ .libs-ui-border-general{ border: 1px solid var(--libs-ui-color-border, #e6e7ea);}
215
+ .libs-ui-border-top-general{border-top: 1px solid var(--libs-ui-color-border, #e6e7ea);}
216
+ .libs-ui-border-right-general{border-right: 1px solid var(--libs-ui-color-border, #e6e7ea);}
217
+ .libs-ui-border-bottom-general{border-bottom: 1px solid var(--libs-ui-color-border, #e6e7ea);}
218
+ .libs-ui-border-dashed-general{border: dashed 1px var(--libs-ui-color-border, #e6e7ea);}
219
+ .libs-ui-border-top-dashed-general{border-top: dashed 1px var(--libs-ui-color-border, #e6e7ea);}
220
+ .libs-ui-border-left-dashed-general{border-left: dashed 1px var(--libs-ui-color-border, #e6e7ea);}
221
+ .libs-ui-border-right-dashed-general{border-right: dashed 1px var(--libs-ui-color-border, #e6e7ea);}
222
+ .libs-ui-border-bottom-dashed-general{border-bottom: dashed 1px var(--libs-ui-color-border, #e6e7ea);}
223
+ .libs-ui-border-left-general{border-left: 1px solid var(--libs-ui-color-border, #e6e7ea);}
224
+ .libs-ui-border-x-general{border-left: 1px solid var(--libs-ui-color-border, #e6e7ea); border-right: 1px solid var(--libs-ui-color-border, #e6e7ea);}
225
+ .libs-ui-border-y-general{border-top: 1px solid var(--libs-ui-color-border, #e6e7ea); border-bottom: 1px solid var(--libs-ui-color-border, #e6e7ea);}
226
+ .libs-ui-border-left-top-general{border-left: 1px solid var(--libs-ui-color-border, #e6e7ea); border-top: 1px solid var(--libs-ui-color-border, #e6e7ea);}
227
+ .libs-ui-border-left-bottom-general{border-left: 1px solid var(--libs-ui-color-border, #e6e7ea); border-bottom: 1px solid var(--libs-ui-color-border, #e6e7ea);}
228
+ .libs-ui-border-right-top-general{border-right: 1px solid var(--libs-ui-color-border, #e6e7ea); border-top: 1px solid var(--libs-ui-color-border, #e6e7ea);}
229
+ .libs-ui-border-right-bottom-general{border-right: 1px solid var(--libs-ui-color-border, #e6e7ea); border-bottom: 1px solid var(--libs-ui-color-border, #e6e7ea);}
177
230
  .libs-ui-border-error-general{border: 1px solid var(--libs-ui-color-border-error, #ee2d41) !important;}
178
- .libs-ui-bg-list {background-color: #f8f9fa !important;}
179
- .libs-ui-bg-list-hover:hover {background-color: #f8f9fa !important;}
180
- .libs-ui-bg-list-active {background-color: var(--libs-ui-color-light-3, #f4f8ff) !important;}
181
- .libs-ui-bg-list-hover-active:hover {background-color: #f8f9fa !important;}
182
- .libs-ui-bg-list-hover-active:active {background-color: var(--libs-ui-color-light-3, #f4f8ff) !important;}
183
- .libs-ui-text-error {color: var(--libs-ui-color-text-error, #ff5454); !important}
231
+ .libs-ui-bg-list {background-color: var(--libs-ui-background-list, #f8f9fa);}
232
+ .libs-ui-bg-list-hover:hover {background-color: var(--libs-ui-background-list-hover, #f8f9fa);}
233
+ .libs-ui-bg-list-active {background-color: var(--libs-ui-color-light-3, #f4f8ff);}
234
+ .libs-ui-bg-list-hover-active:hover {background-color: #f8f9fa;}
235
+ .libs-ui-bg-list-hover-active:active {background-color: var(--libs-ui-color-light-3, #f4f8ff);}
236
+ .libs-ui-bg-list-hover-danger:hover {background-color: var(--libs-ui-background-list-hover-danger, #fef5f6); color: var(--libs-ui-color-icon-hover-danger, #f15767) !important; [class*="libs-ui-icon-"],[class*="icon-font-3rd"]{&:before,&:after{color: var(--libs-ui-color-icon-hover-danger, #f15767) !important;}}}
237
+ .libs-ui-text-error {color: var(--libs-ui-color-text-error, #ff5454) !important;}
184
238
  .libs-ui-text-error::before {color: var(--libs-ui-color-text-error, #ff5454) !important;}
185
- .libs-ui-disable {cursor: default !important;text-decoration: none;color:var(--libs-ui-color-text-disable, #cdd0d6) !important}
186
- .libs-ui-disable::before {color:var(--libs-ui-color-text-disable, #9ca2ad) !important}
239
+ .libs-ui-disable {cursor: not-allowed !important;text-decoration: none;color:var(--libs-ui-color-text-disable, #cdd0d6) !important;}
240
+ .libs-ui-disable::before {color:var(--libs-ui-color-text-disable, #9ca2ad) !important;}
187
241
  .libs-ui-disable-background{background: var(--libs-ui-color-background-disable, #f8f9fa) !important;}
188
- .libs-ui-disable-active {color:var(--libs-ui-color-light-4,#91b7fa) !important}
189
- .libs-ui-disable-active::before {color:var(--libs-ui-color-light-4,#91b7fa) !important}
190
- .libs-ui-readonly {cursor: default !important;color:var(--libs-ui-color-text-readonly, #071631) !important;}
242
+ .libs-ui-disable-active {color:var(--libs-ui-color-light-4,#91b7fa) !important;}
243
+ .libs-ui-disable-active::before {color:var(--libs-ui-color-light-4,#91b7fa) !important;}
244
+ .libs-ui-disable-active-background{background: var(--libs-ui-color-light-4,#91b7fa) !important;}
245
+ .libs-ui-readonly {cursor: not-allowed !important;color:var(--libs-ui-color-text-readonly, #071631) !important;}
191
246
  .libs-ui-readonly::before {color:var(--libs-ui-color-text-readonly, #071631) !important;}
192
247
  .libs-ui-readonly-background{background: var(--libs-ui-color-background-readonly, #f8f9fa) !important;}
193
- .libs-ui-icon-hover-danger:hover {color: var(--libs-ui-color-icon-hover-danger, #f15767) !important; [class*="libs-ui-icon-"]{&:before,&:after{color: var(--libs-ui-color-icon-hover-danger, #f15767) !important;}}}
248
+ .libs-ui-icon-hover-danger:hover {color: var(--libs-ui-color-icon-hover-danger, #f15767) !important; [class*="libs-ui-icon-"],[class*="icon-font-3rd"]{&:before,&:after{color: var(--libs-ui-color-icon-hover-danger, #f15767) !important;}}}
249
+ .break-word{word-break: break-word !important;}
250
+ .libs-ui-shadow {box-shadow: 0 2px 10px 1px rgba(51, 51, 51, 0.1);}
251
+ .libs-ui-shadow-md {box-shadow: 0 4px 8px 0 rgba(51, 51, 51, 0.1);}
252
+ .libs-ui-shadow-lg {box-shadow: 0 15px 30px 0 rgba(51, 51, 51, 0.1);}
253
+ .libs-ui-shadow-top {box-shadow: 0 -5px 5px -5px rgba(51, 51, 51, 0.1);}
254
+ .libs-ui-shadow-right {box-shadow: -5px 0 5px -5px rgba(51, 51, 51, 0.1);}
255
+ .libs-ui-shadow-bottom {box-shadow: 0 5px 5px -5px rgba(51, 51, 51, 0.1);}
256
+ .libs-ui-shadow-left {box-shadow: 5px 0 5px -5px rgba(51, 51, 51, 0.1);}
257
+ .libs-ui-shadow-sm {box-shadow: 0 1px 2px 0 rgba(51, 51, 51, 0.1);}
258
+ .libs-ui-shadow-popup {box-shadow: -2px 0 4px 0 rgba(51, 51, 51, 0.1);}
259
+ .libs-ui-shadow-none {box-shadow: none !important;}
260
+ .libs-ui-shadow-small {box-shadow: 0px 1px 2px 0px rgba(0,20,51,.04), 0px 1px 1px 0px rgba(0,20,51,.02);}
261
+ .libs-ui-shadow-medium {box-shadow: 0px 4px 8px 0px rgba(0, 20, 51, 0.04), 0px 1px 1px 0px rgba(0, 20, 51, 0.02);}
262
+ .libs-ui-shadow-large {box-shadow: 0px 4px 16px 0px rgba(0,20,51,.1), 0px 1px 1px 0px rgba(0,20,51,.02);}
263
+ .libs-ui-shadow-extra-large {box-shadow: 0px 8px 56px 0px rgba(0,20,51,.05), 0px 1px 1px 0px rgba(0,20,51,.02);}
264
+ ::-moz-selection {background: var(--libs-ui-color-background-selection, #00000040) !important;}
265
+ ::selection {background: var(--libs-ui-color-background-selection, #00000040) !important;}
194
266
  `.replace(/\n+/g, '');
195
267
  document.head.append(this.styleClassGlobalEl);
196
268
  }
@@ -254,4 +326,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
254
326
  providedIn: 'root'
255
327
  }]
256
328
  }], ctorParameters: () => [] });
257
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXByb2plY3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvc2VydmljZXMvY29uZmlnLXByb2plY3Qvc3JjL2NvbmZpZy1wcm9qZWN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBTXJLLE1BQU0sT0FBTywwQkFBMEI7SUFDcEIsVUFBVSxHQUFHLE1BQU0sQ0FBUyxTQUFTLENBQUMsQ0FBQztJQUN2QyxXQUFXLEdBQUcsTUFBTSxDQUFTLFNBQVMsQ0FBQyxDQUFDO0lBQ3hDLGNBQWMsR0FBRyxNQUFNLENBQVMsU0FBUyxDQUFDLENBQUM7SUFDM0Msb0JBQW9CLEdBQUcsTUFBTSxDQUFTLFNBQVMsQ0FBQyxDQUFDO0lBQ2pELGdCQUFnQixHQUFHLE1BQU0sQ0FBUyxTQUFTLENBQUMsQ0FBQztJQUM3QyxzQkFBc0IsR0FBRyxNQUFNLENBQVMsU0FBUyxDQUFDLENBQUM7SUFDbkQsaUJBQWlCLEdBQUcsTUFBTSxDQUFTLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLGdCQUFnQixHQUFHLE1BQU0sQ0FBUyxTQUFTLENBQUMsQ0FBQztJQUM3Qyx1QkFBdUIsR0FBRyxNQUFNLENBQVMsU0FBUyxDQUFDLENBQUM7SUFDcEQsVUFBVSxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7SUFDekQsVUFBVSxHQUFHLE1B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LENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBRWxDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDcEQsTUFBTTtvQkFDUixDQUFDO2dCQUNILENBQUM7Z0JBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzVCLENBQUM7WUFFRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUE7SUFDSCxDQUFDO3dHQW5TVSwwQkFBMEI7NEdBQTFCLDBCQUEwQixjQUh6QixNQUFNOzs0RkFHUCwwQkFBMEI7a0JBSnRDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgY29tcHV0ZWQsIGVmZmVjdCwgc2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IGNvbG9yU3RlcENvbnRyYXN0RnJvbU9yaWdpbiwgZ2V0IH0gZnJvbSBcIkBsaWJzLXVpL3V0aWxzXCI7XG5pbXBvcnQgeyBjb25maWdCdXR0b25Db2xvciwgY29uZmlnQnV0dG9uU3RhdHVzLCBjb25maWdCdXR0b25UYWIsIGNvbmZpZ0hlYWRpbmcsIGNvbmZpZ0xpbmtCdXR0b24sIGZvbnRDb25maWcsIHN0eWxlQnV0dG9uVGFiLCB3ZWlnaHRzIH0gZnJvbSBcIi4vY29uZmlnLXByb2plY3QtZGF0YVwiO1xuaW1wb3J0IHsgSUxpYnNVaUNvbmZpZ0J1dHRvblN0YXR1cywgSUxpYnNVaUNvbmZpZ0J1dHRvblRhYiwgSUxpYnNVaUNvbmZpZ0ZvbnRGYW1pbHksIElMaWJzVWlDb25maWdGb250SGVhZGluZyB9IGZyb20gXCIuL2NvbmZpZy1wcm9qZWN0LmludGVyZmFjZVwiO1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5cbmV4cG9ydCBjbGFzcyBMaWJzVWlDb25maWdQcm9qZWN0U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGhlbWVDb2xvciA9IHNpZ25hbDxzdHJpbmc+KCcjMjI2ZmY1Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYm9yZGVyQ29sb3IgPSBzaWduYWw8c3RyaW5nPignI2U2ZTdlYScpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRleHRFcnJvckNvbG9yID0gc2lnbmFsPHN0cmluZz4oJyNmZjU0NTQnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpY29uSG92ZXJEYW5nZXJDb2xvciA9IHNpZ25hbDxzdHJpbmc+KCcjZjE1NzY3Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYm9yZGVyRXJyb3JDb2xvciA9IHNpZ25hbDxzdHJpbmc+KCcjZWUyZDQxJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYmFja2dyb3VuZERpc2FibGVDb2xvciA9IHNpZ25hbDxzdHJpbmc+KCcjZjhmOWZhJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGV4dFJlYWRvbmx5Q29sb3IgPSBzaWduYWw8c3RyaW5nPignIzA3MTYzMScpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRleHREaXNhYmxlQ29sb3IgPSBzaWduYWw8c3RyaW5nPignIzljYTJhZCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IGJhY2tncm91bmRSZWFkb25seUNvbG9yID0gc2lnbmFsPHN0cmluZz4oJyNmOGY5ZmEnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWdGb250ID0gc2lnbmFsPElMaWJzVWlDb25maWdGb250RmFtaWx5Pihmb250Q29uZmlnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWdIZWFkID0gc2lnbmFsPElMaWJzVWlDb25maWdGb250SGVhZGluZz4oY29uZmlnSGVhZGluZyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnQnV0dG9uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB7IC4uLmNvbmZpZ0J1dHRvbkNvbG9yKHRoaXMudGhlbWVDb2xvcigpKSwgLi4uY29uZmlnTGlua0J1dHRvbih0aGlzLnRoZW1lQ29sb3IoKSkgfTtcbiAgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnQnV0dG9uU3RhdHVzID0gc2lnbmFsPElMaWJzVWlDb25maWdCdXR0b25TdGF0dXM+KGNvbmZpZ0J1dHRvblN0YXR1cygpKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWdCdXR0b25UYWIgPSBzaWduYWw8SUxpYnNVaUNvbmZpZ0J1dHRvblRhYj4oY29uZmlnQnV0dG9uVGFiKCkpO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0eWxlQ2xhc3NHbG9iYWxFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3R5bGVDbGFzc0hlYWRFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3R5bGVDbGFzc0J1dHRvblRhYkVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgdGhpcy5zZXRUaGVtZUNvbG9yKCk7XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgdGhpcy5zZXR1cEZvbnRGYW1pbHkoKTtcbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICB0aGlzLnNldHVwRm9udEhlYWQoKTtcbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICB0aGlzLnNldHVwQnV0dG9uVGFiKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbmZpZ1N0cmluZygpO1xuICAgIHRoaXMuc2V0Q2xhc3NHbG9iYWwoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgVGhlbWVDb2xvcihjb2xvcjogc3RyaW5nKSB7XG4gICAgdGhpcy50aGVtZUNvbG9yLnNldChjb2xvciB8fCAnIzIyNmZmNScpO1xuICB9XG5cbiAgcHVibGljIHNldCBCb3JkZXJDb2xvcihjb2xvcjogc3RyaW5nKSB7XG4gICAgdGhpcy5ib3JkZXJDb2xvci5zZXQoY29sb3IgfHwgJyNlNmU3ZWEnKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgQm9yZGVyRXJyb3JDb2xvcihjb2xvcjogc3RyaW5nKSB7XG4gICAgdGhpcy5ib3JkZXJFcnJvckNvbG9yLnNldChjb2xvciB8fCAnI2VlMmQ0MScpO1xuICB9XG5cbiAgcHVibGljIHNldCBUZXh0RXJyb3JDb2xvcihjb2xvcjogc3RyaW5nKSB7XG4gICAgdGhpcy50ZXh0RXJyb3JDb2xvci5zZXQoY29sb3IgfHwgJyNmZjU0NTQnKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgSWNvbkhvdmVyRGFuZ2VyQ29sb3IoY29sb3I6IHN0cmluZykge1xuICAgIHRoaXMuaWNvbkhvdmVyRGFuZ2VyQ29sb3Iuc2V0KGNvbG9yIHx8ICcjZmY1NDU0Jyk7XG4gIH1cblxuICBwdWJsaWMgc2V0IEJhY2tncm91bmRSZWFkb25seUNvbG9yKGNvbG9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLmJhY2tncm91bmRSZWFkb25seUNvbG9yLnNldChjb2xvciB8fCAnI2YxNTc2NycpO1xuICB9XG5cbiAgcHVibGljIHNldCBUZXh0UmVhZG9ubHlDb2xvcihjb2xvcjogc3RyaW5nKSB7XG4gICAgdGhpcy50ZXh0UmVhZG9ubHlDb2xvci5zZXQoY29sb3IgfHwgJyMwNzE2MzEnKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgQmFja2dyb3VuZERpc2FibGVDb2xvcihjb2xvcjogc3RyaW5nKSB7XG4gICAgdGhpcy5iYWNrZ3JvdW5kRGlzYWJsZUNvbG9yLnNldChjb2xvciB8fCAnI2Y4ZjlmYScpO1xuICB9XG5cbiAgcHVibGljIHNldCBUZXh0RGlzYWJsZUNvbG9yKGNvbG9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRleHREaXNhYmxlQ29sb3Iuc2V0KGNvbG9yIHx8ICcjOWNhMmFkJyk7XG4gIH1cblxuICBwdWJsaWMgc2V0IENvbmZpZ0ZvbnQoY29uZmlnRm9udDogSUxpYnNVaUNvbmZpZ0ZvbnRGYW1pbHkpIHtcbiAgICB0aGlzLmNvbmZpZ0ZvbnQuc2V0KHsgLi4uY29uZmlnRm9udCB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgQ29uZmlnRm9udEhlYWQoY29uZmlnSGVhZDogSUxpYnNVaUNvbmZpZ0ZvbnRIZWFkaW5nKSB7XG4gICAgdGhpcy5jb25maWdIZWFkLnNldCh7IC4uLmNvbmZpZ0hlYWQgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IENvbmZpZ0J1dHRvbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWdCdXR0b247XG4gIH1cblxuICBwdWJsaWMgZ2V0IENvbmZpZ0J1dHRvblN0YXR1cygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWdCdXR0b25TdGF0dXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgQ29uZmlnQnV0dG9uU3RhdHVzKGNvbmZpZzogSUxpYnNVaUNvbmZpZ0J1dHRvblN0YXR1cykge1xuICAgIHRoaXMuY29uZmlnQnV0dG9uU3RhdHVzLnNldChjb25maWcpO1xuICB9XG5cbiAgcHVibGljIHNldCBDb25maWdCdXR0b25UYWIoY29uZmlnOiBJTGlic1VpQ29uZmlnQnV0dG9uVGFiKSB7XG4gICAgdGhpcy5jb25maWdCdXR0b25UYWIuc2V0KGNvbmZpZyk7XG4gIH1cblxuICAvLyBwdWJsaWMgaMOgbSDEkeG7gyBz4butIGThu6VuZyBjaG8gY29tcG9uZW50IGlucHV0IHPhu60gZOG7pW5nIHRhZ0lucHV0ID0gZnJhbWVBcmVhO1xuICBwdWJsaWMgc2V0dXBGb250RmFtaWx5KGN1cnJlbnREb2M/OiBEb2N1bWVudCkge1xuICAgIGN1cnJlbnREb2MgPSBjdXJyZW50RG9jIHx8IGRvY3VtZW50O1xuICAgIGNvbnN0IGRvYyA9IGN1cnJlbnREb2MuZG9jdW1lbnRFbGVtZW50O1xuXG4gICAgZG9jLnN0eWxlLnNldFByb3BlcnR5KCctLWxpYnMtdWktZm9udC1mYW1pbHktbmFtZScsIGAke3RoaXMuY29uZmlnRm9udCgpLm5hbWV9LEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWZgKTtcbiAgICBPYmplY3Qua2V5cyh3ZWlnaHRzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb25zdCBmb250RmFjZSA9IG5ldyBGb250RmFjZSh0aGlzLmNvbmZpZ0ZvbnQoKS5uYW1lLCBgdXJsKCR7Z2V0KHRoaXMuY29uZmlnRm9udCgpLCBrZXkpfSlgLCB7IHdlaWdodDogZ2V0KHdlaWdodHMsIGtleSkgfSk7XG4gICAgICBmb250RmFjZS5sb2FkKCkudGhlbihsb2FkZWRGb250ID0+IHtcbiAgICAgICAgaWYgKCdhZGQnIGluIGN1cnJlbnREb2MuZm9udHMpIHtcbiAgICAgICAgICAoY3VycmVudERvYy5mb250cyBhcyBhbnkpLmFkZChsb2FkZWRGb250KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwRm9udEhlYWQoKSB7XG4gICAgY29uc3QgY29uZmlnSGVhZHMgPSB0aGlzLmNvbmZpZ0hlYWQoKTtcbiAgICBsZXQgc3R5bGVzID0gJyc7XG4gICAgT2JqZWN0LmtleXMoY29uZmlnSGVhZHMpLmZvckVhY2goa2V5Q29uZmlnID0+IHtcbiAgICAgIGxldCBzdHlsZSA9IGBmb250LWZhbWlseTp2YXIoLS1saWJzLXVpLWZvbnQtZmFtaWx5LW5hbWUsJ0FyaWFsJyk7YDtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGdldChjb25maWdIZWFkaW5nLCBrZXlDb25maWcpO1xuICAgICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHN0eWxlID0gYCR7c3R5bGV9JHtrZXl9OiR7Z2V0KGNvbmZpZywga2V5KX07YDtcbiAgICAgIH0pO1xuICAgICAgc3R5bGVzID0gYCR7c3R5bGVzfSAubGlicy11aS1mb250LSR7a2V5Q29uZmlnfXske3N0eWxlfX0ubGlicy11aS1mb250LSR7a2V5Q29uZmlnfWl7JHtzdHlsZS5yZXBsYWNlKC87L2csJyAhaW1wb3J0YW50OycpfX1gO1xuICAgIH0pO1xuXG4gICAgc3R5bGVzID0gYCp7Ym94LXNpemluZzogYm9yZGVyLWJveCAhaW1wb3J0YW50O30ke3N0eWxlc31gO1xuXG4gICAgdGhpcy5zdHlsZUNsYXNzSGVhZEVsLmlubmVySFRNTCA9IHN0eWxlcztcbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZCh0aGlzLnN0eWxlQ2xhc3NIZWFkRWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEJ1dHRvblRhYigpIHtcbiAgICBjb25zdCBjb25maWdCdXR0b25UYWIgPSB0aGlzLmNvbmZpZ0J1dHRvblRhYigpO1xuICAgIGxldCBzdHlsZXMgPSAnJztcblxuICAgIE9iamVjdC5rZXlzKGNvbmZpZ0J1dHRvblRhYikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gZ2V0KGNvbmZpZ0J1dHRvblRhYiwga2V5KTtcbiAgICAgIGNvbnN0IHN0eWxlID0gY29uZmlnID8gc3R5bGVCdXR0b25UYWIoa2V5LCBjb25maWcpIDogJyc7XG5cbiAgICAgIHN0eWxlcyA9IGAke3N0eWxlc30ke3N0eWxlfWA7XG4gICAgfSk7XG4gICAgdGhpcy5zdHlsZUNsYXNzQnV0dG9uVGFiRWwuaW5uZXJIVE1MID0gc3R5bGVzO1xuICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kKHRoaXMuc3R5bGVDbGFzc0J1dHRvblRhYkVsKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VGhlbWVDb2xvcigpIHtcbiAgICBjb25zdCBkb2MgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgW3tcbiAgICAgIGdyb3VwOiAnbGlicy11aScsXG4gICAgICB0eXBlOiAnY29sb3InLFxuICAgICAgcHJvcGVydHk6IHtcbiAgICAgICAgZGVmYXVsdDogY29sb3JTdGVwQ29udHJhc3RGcm9tT3JpZ2luKHRoaXMudGhlbWVDb2xvcigpLCAwKT8ubGlnaHQsXG4gICAgICAgIGxpZ2h0XzE6IGNvbG9yU3RlcENvbnRyYXN0RnJvbU9yaWdpbih0aGlzLnRoZW1lQ29sb3IoKSwgMjApPy5saWdodCxcbiAgICAgICAgbGlnaHRfMjogY29sb3JTdGVwQ29udHJhc3RGcm9tT3JpZ2luKHRoaXMudGhlbWVDb2xvcigpLCA5MCk/LmxpZ2h0LFxuICAgICAgICBsaWdodF8zOiBjb2xvclN0ZXBDb250cmFzdEZyb21PcmlnaW4odGhpcy50aGVtZUNvbG9yKCksIDk1KT8ubGlnaHQsXG4gICAgICAgIGxpZ2h0XzQ6IGNvbG9yU3RlcENvbnRyYXN0RnJvbU9yaWdpbih0aGlzLnRoZW1lQ29sb3IoKSwgNTApPy5saWdodCxcbiAgICAgICAgbGlnaHRfNTogY29sb3JTdGVwQ29udHJhc3RGcm9tT3JpZ2luKHRoaXMudGhlbWVDb2xvcigpLCA3MCk/LmxpZ2h0LFxuICAgICAgICBsaWdodF82OiBjb2xvclN0ZXBDb250cmFzdEZyb21PcmlnaW4odGhpcy50aGVtZUNvbG9yKCksIDgwKT8ubGlnaHQsXG4gICAgICAgIGRhcms6IGNvbG9yU3RlcENvbnRyYXN0RnJvbU9yaWdpbih0aGlzLnRoZW1lQ29sb3IoKSwgMjApPy5kYXJrLFxuICAgICAgICBib3JkZXI6IHRoaXMuYm9yZGVyQ29sb3IoKSxcbiAgICAgICAgYm9yZGVyX2Vycm9yOiB0aGlzLmJvcmRlckVycm9yQ29sb3IoKSxcbiAgICAgICAgdGV4dF9lcnJvcjogdGhpcy50ZXh0RXJyb3JDb2xvcigpLFxuICAgICAgICBpY29uX2hvdmVyX2RhbmdlcjogdGhpcy5pY29uSG92ZXJEYW5nZXJDb2xvcigpLFxuICAgICAgICBiYWNrZ3JvdW5kX3JlYWRvbmx5OiB0aGlzLmJhY2tncm91bmRSZWFkb25seUNvbG9yKCksXG4gICAgICAgIHRleHRfcmVhZG9ubHk6IHRoaXMudGV4dFJlYWRvbmx5Q29sb3IoKSxcbiAgICAgICAgYmFja2dyb3VuZF9kaXNhYmxlOiB0aGlzLmJhY2tncm91bmREaXNhYmxlQ29sb3IoKSxcbiAgICAgICAgdGV4dF9kaXNhYmxlOiB0aGlzLnRleHREaXNhYmxlQ29sb3IoKSxcbiAgICAgICAgZ3JhZGllbnRfZnJvbTogdGhpcy50aGVtZUNvbG9yKCkudG9Mb2NhbGVVcHBlckNhc2UoKSA9PT0gJyMyMjZGRjUnID8gY29sb3JTdGVwQ29udHJhc3RGcm9tT3JpZ2luKHRoaXMudGhlbWVDb2xvcigpLCAxMCk/LmxpZ2h0IDogY29sb3JTdGVwQ29udHJhc3RGcm9tT3JpZ2luKHRoaXMudGhlbWVDb2xvcigpLCAwKT8ubGlnaHQsXG4gICAgICAgIGdyYWRpZW50X3RvOiB0aGlzLnRoZW1lQ29sb3IoKS50b0xvY2FsZVVwcGVyQ2FzZSgpID09PSAnIzIyNkZGNScgPyBjb2xvclN0ZXBDb250cmFzdEZyb21PcmlnaW4oJyM1QjJFQkInLCAxMCk/LmxpZ2h0IDogY29sb3JTdGVwQ29udHJhc3RGcm9tT3JpZ2luKHRoaXMudGhlbWVDb2xvcigpLCAyMCk/LmRhcmssXG4gICAgICB9XG4gICAgfV0uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBgLS0ke2l0ZW0uZ3JvdXAucmVwbGFjZSgvW19dL2csICctJyl9LSR7aXRlbS50eXBlLnJlcGxhY2UoL1tfXS9nLCAnLScpfWA7XG4gICAgICBPYmplY3Qua2V5cyhpdGVtLnByb3BlcnR5KS5mb3JFYWNoKGtleSA9PiBkb2Muc3R5bGUuc2V0UHJvcGVydHkoYCR7bmFtZX0tJHtrZXkucmVwbGFjZSgvW19dL2csICctJyl9YCwgKGl0ZW0ucHJvcGVydHkgYXMgYW55KVtrZXldKSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY29sb3JTdGVwQ29udHJhc3RGcm9tT3JpZ2luKHN0ZXA6IG51bWJlciwgY29sb3I/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY29sb3JTdGVwQ29udHJhc3RGcm9tT3JpZ2luKGNvbG9yIHx8IHRoaXMudGhlbWVDb2xvcigpLCBzdGVwIHx8IDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDbGFzc0dsb2JhbCgpIHtcbiAgICB0aGlzLnN0eWxlQ2xhc3NHbG9iYWxFbC5pbm5lckhUTUwgPSBgXG4gICAgLmxpYnMtdWktYm9yZGVyLXByaW1hcnktZ2VuZXJhbHtib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1saWJzLXVpLWNvbG9yLWRlZmF1bHQsICMyMjZGRjUpICFpbXBvcnRhbnQ7fVxuICAgIC5saWJzLXVpLWJvcmRlci1wcmltYXJ5LWZvY3VzLWdlbmVyYWx7Ym9yZGVyOiAxcHggc29saWQgdmFyKC0tbGlicy11aS1jb2xvci1saWdodC0xLCAjNGU4Y2Y3KSAhaW1wb3J0YW50O31cbiAgICAubGlicy11aS1ib3JkZXItcHJpbWFyeS1ob3Zlci1nZW5lcmFse2JvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxpYnMtdWktY29sb3ItbGlnaHQtMywgI2Y0ZjhmZikgIWltcG9ydGFudDt9XG4gICAgLmxpYnMtdWktYm9yZGVyLWdlbmVyYWx7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxpYnMtdWktY29sb3ItYm9yZGVyLCAjZTZlN2VhKSAhaW1wb3J0YW50O31cbiAgICAubGlicy11aS1ib3JkZXItdG9wLWdlbmVyYWx7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWxpYnMtdWktY29sb3ItYm9yZGVyLCAjZTZlN2VhKSAhaW1wb3J0YW50O31cbiAgICAubGlicy11aS1ib3JkZXItcmlnaHQtZ2VuZXJhbHtib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1saWJzLXVpLWNvbG9yLWJvcmRlciwgI2U2ZTdlYSkgIWltcG9ydGFudDt9XG4gICAgLmxpYnMtdWktYm9yZGVyLWJvdHRvbS1nZW5lcmFse2JvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1saWJzLXVpLWNvbG9yLWJvcmRlciwgI2U2ZTdlYSkgIWltcG9ydGFudDt9XG4gICAgLmxpYnMtdWktYm9yZGVyLWRhc2hlZC1ib3R0b20tZ2VuZXJhbHtib3JkZXItYm90dG9tOiBkYXNoZWQgMXB4IHZhcigtLWxpYnMtdWktY29sb3ItYm9yZGVyLCAjZTZlN2VhKSAhaW1wb3J0YW50O31cbiAgICAubGlicy11aS1ib3JkZXItbGVmdC1nZW5lcmFse2JvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tbGlicy11aS1jb2xvci1ib3JkZXIsICNlNmU3ZWEpICFpbXBvcnRhbnQ7fVxuICAgIC5saWJzLXVpLWJvcmRlci14LWdlbmVyYWx7Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1saWJzLXVpLWNvbG9yLWJvcmRlciwgI2U2ZTdlYSkgIWltcG9ydGFudDsgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLWxpYnMtdWktY29sb3ItYm9yZGVyLCAjZTZlN2VhKSAhaW1wb3J0YW50O31cbiAgICAubGlicy11aS1ib3JkZXIteS1nZW5lcmFse2JvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1saWJzLXVpLWNvbG9yLWJvcmRlciwgI2U2ZTdlYSkgIWltcG9ydGFudDsgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1saWJzLXVpLWNvbG9yLWJvcmRlciwgI2U2ZTdlYSkgIWltcG9ydGFudDt9XG4gICAgLmxpYnMtdWktYm9yZGVyLWxlZnQtdG9wLWdlbmVyYWx7Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1saWJzLXVpLWNvbG9yLWJvcmRlciwgI2U2ZTdlYSkgIWltcG9ydGFudDsgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1saWJzLXVpLWNvbG9yLWJvcmRlciwgI2U2ZTdlYSkgIWltcG9ydGFudDt9XG4gICAgLmxpYnMtdWktYm9yZGVyLWxlZnQtYm90dG9tLWdlbmVyYWx7Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1saWJzLXVpLWNvbG9yLWJvcmRlciwgI2U2ZTdlYSkgIWltcG9ydGFudDsgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1saWJzLXVpLWNvbG9yLWJvcmRlciwgI2U2ZTdlYSkgIWltcG9ydGFudDt9XG4gICAgLmxpYnMtdWktYm9yZGVyLXJpZ2h0LXRvcC1nZW5lcmFse2JvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLWxpYnMtdWktY29sb3ItYm9yZGVyLCAjZTZlN2VhKSAhaW1wb3J0YW50OyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWxpYnMtdWktY29sb3ItYm9yZGVyLCAjZTZlN2VhKSAhaW1wb3J0YW50O31cbiAgICAubGlicy11aS1ib3JkZXItcmlnaHQtYm90dG9tLWdlbmVyYWx7Ym9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tbGlicy11aS1jb2xvci1ib3JkZXIsICNlNmU3ZWEpICFpbXBvcnRhbnQ7ICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbGlicy11aS1jb2xvci1ib3JkZXIsICNlNmU3ZWEpICFpbXBvcnRhbnQ7fVxuICAgIC5saWJzLXVpLWJvcmRlci1lcnJvci1nZW5lcmFse2JvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxpYnMtdWktY29sb3ItYm9yZGVyLWVycm9yLCAjZWUyZDQxKSAhaW1wb3J0YW50O31cbiAgICAubGlicy11aS1iZy1saXN0IHtiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOWZhICFpbXBvcnRhbnQ7fVxuICAgIC5saWJzLXVpLWJnLWxpc3QtaG92ZXI6aG92ZXIge2JhY2tncm91bmQtY29sb3I6ICNmOGY5ZmEgIWltcG9ydGFudDt9XG4gICAgLmxpYnMtdWktYmctbGlzdC1hY3RpdmUge2JhY2tncm91bmQtY29sb3I6ICB2YXIoLS1saWJzLXVpLWNvbG9yLWxpZ2h0LTMsICNmNGY4ZmYpICFpbXBvcnRhbnQ7fVxuICAgIC5saWJzLXVpLWJnLWxpc3QtaG92ZXItYWN0aXZlOmhvdmVyIHtiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOWZhICFpbXBvcnRhbnQ7fVxuICAgIC5saWJzLXVpLWJnLWxpc3QtaG92ZXItYWN0aXZlOmFjdGl2ZSB7YmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbGlicy11aS1jb2xvci1saWdodC0zLCAjZjRmOGZmKSAhaW1wb3J0YW50O31cbiAgICAubGlicy11aS10ZXh0LWVycm9yIHtjb2xvcjogdmFyKC0tbGlicy11aS1jb2xvci10ZXh0LWVycm9yLCAjZmY1NDU0KTsgIWltcG9ydGFudH1cbiAgICAubGlicy11aS10ZXh0LWVycm9yOjpiZWZvcmUge2NvbG9yOiB2YXIoLS1saWJzLXVpLWNvbG9yLXRleHQtZXJyb3IsICNmZjU0NTQpICFpbXBvcnRhbnQ7fVxuICAgIC5saWJzLXVpLWRpc2FibGUge2N1cnNvcjogZGVmYXVsdCAhaW1wb3J0YW50O3RleHQtZGVjb3JhdGlvbjogbm9uZTtjb2xvcjp2YXIoLS1saWJzLXVpLWNvbG9yLXRleHQtZGlzYWJsZSwgI2NkZDBkNikgIWltcG9ydGFudH1cbiAgICAubGlicy11aS1kaXNhYmxlOjpiZWZvcmUge2NvbG9yOnZhcigtLWxpYnMtdWktY29sb3ItdGV4dC1kaXNhYmxlLCAjOWNhMmFkKSAhaW1wb3J0YW50fVxuICAgIC5saWJzLXVpLWRpc2FibGUtYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiB2YXIoLS1saWJzLXVpLWNvbG9yLWJhY2tncm91bmQtZGlzYWJsZSwgI2Y4ZjlmYSkgIWltcG9ydGFudDt9XG4gICAgLmxpYnMtdWktZGlzYWJsZS1hY3RpdmUge2NvbG9yOnZhcigtLWxpYnMtdWktY29sb3ItbGlnaHQtNCwjOTFiN2ZhKSAhaW1wb3J0YW50fVxuICAgIC5saWJzLXVpLWRpc2FibGUtYWN0aXZlOjpiZWZvcmUge2NvbG9yOnZhcigtLWxpYnMtdWktY29sb3ItbGlnaHQtNCwjOTFiN2ZhKSAhaW1wb3J0YW50fVxuICAgIC5saWJzLXVpLXJlYWRvbmx5IHtjdXJzb3I6IGRlZmF1bHQgIWltcG9ydGFudDtjb2xvcjp2YXIoLS1saWJzLXVpLWNvbG9yLXRleHQtcmVhZG9ubHksICMwNzE2MzEpICFpbXBvcnRhbnQ7fVxuICAgIC5saWJzLXVpLXJlYWRvbmx5OjpiZWZvcmUge2NvbG9yOnZhcigtLWxpYnMtdWktY29sb3ItdGV4dC1yZWFkb25seSwgIzA3MTYzMSkgIWltcG9ydGFudDt9XG4gICAgLmxpYnMtdWktcmVhZG9ubHktYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiB2YXIoLS1saWJzLXVpLWNvbG9yLWJhY2tncm91bmQtcmVhZG9ubHksICNmOGY5ZmEpICFpbXBvcnRhbnQ7fVxuICAgIC5saWJzLXVpLWljb24taG92ZXItZGFuZ2VyOmhvdmVyIHtjb2xvcjogdmFyKC0tbGlicy11aS1jb2xvci1pY29uLWhvdmVyLWRhbmdlciwgI2YxNTc2NykgIWltcG9ydGFudDsgW2NsYXNzKj1cImxpYnMtdWktaWNvbi1cIl17JjpiZWZvcmUsJjphZnRlcntjb2xvcjogdmFyKC0tbGlicy11aS1jb2xvci1pY29uLWhvdmVyLWRhbmdlciwgI2YxNTc2NykgIWltcG9ydGFudDt9fX1cbiAgICBgLnJlcGxhY2UoL1xcbisvZywgJycpO1xuXG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmQodGhpcy5zdHlsZUNsYXNzR2xvYmFsRWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25maWdTdHJpbmcoKSB7XG4gICAgY29uc3QgcHJvdG90eXBlID0gU3RyaW5nLnByb3RvdHlwZSBhcyBhbnk7XG4gICAgcHJvdG90eXBlLnJlcGxhY2VBdCA9IGZ1bmN0aW9uIChpbmRleDogbnVtYmVyLCByZXBsYWNlbWVudDogc3RyaW5nKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnNwbGl0KCcnKTtcblxuICAgICAgdmFsdWVzW2luZGV4XSA9IHJlcGxhY2VtZW50O1xuXG4gICAgICByZXR1cm4gdmFsdWVzLmpvaW4oJycpO1xuICAgIH1cblxuICAgIHByb3RvdHlwZS5yZXBsYWNlQWxsID0gZnVuY3Rpb24gKGluZGV4OiBudW1iZXIsIHNlcGFyYXRvcjogc3RyaW5nLCByZXBsYWNlbWVudDogc3RyaW5nKSB7XG4gICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoc2VwYXJhdG9yLCAnZycpO1xuXG4gICAgICByZXR1cm4gYCR7dGhpcy5zdWJzdHIoMCwgaW5kZXgpfSR7dGhpcy5zdWJzdHIoaW5kZXggKyAxICsgKHJlcGxhY2VtZW50Py5sZW5ndGggfHwgMCkpLnJlcGxhY2UocmVnZXgsIHJlcGxhY2VtZW50KX1gO1xuICAgIH1cblxuICAgIHByb3RvdHlwZS5vY2N1cnJlbmNlc0J5Q2hhcmFjdGVyID0gZnVuY3Rpb24gKGNoYXJhY3Rlcjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuc3BsaXQoJycpO1xuXG4gICAgICBpZiAoIXZhbHVlcyB8fCAhdmFsdWVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlcy5maWx0ZXIoKGNoYXI6IHN0cmluZykgPT4gY2hhciA9PT0gY2hhcmFjdGVyKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJvdG90eXBlLmluZGV4ZXNPZkNoYXJhY3RlciA9IGZ1bmN0aW9uIChjaGFyYWN0ZXI6IHN0cmluZyk6IEFycmF5PG51bWJlcj4ge1xuICAgICAgY29uc3QgdmFsdWVzOiBBcnJheTxzdHJpbmc+ID0gdGhpcy5zcGxpdCgnJyk7XG4gICAgICBjb25zdCBpbmRleGVzOiBBcnJheTxudW1iZXI+ID0gW107XG5cbiAgICAgIGlmICghdmFsdWVzIHx8ICF2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBpbmRleGVzO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBpbmRleFZhbHVlIGluIHZhbHVlcykge1xuICAgICAgICBpZiAodmFsdWVzW2luZGV4VmFsdWVdID09PSBjaGFyYWN0ZXIpIHtcbiAgICAgICAgICBpbmRleGVzLnB1c2goK2luZGV4VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmRleGVzO1xuICAgIH1cblxuXG4gICAgcHJvdG90eXBlLmluZGV4ZXNCeVN0cmluZyA9IGZ1bmN0aW9uIChzdHI6IHN0cmluZyk6IEFycmF5PG51bWJlcj4ge1xuICAgICAgY29uc3QgdmFsdWVzOiBBcnJheTxzdHJpbmc+ID0gdGhpcyBhcyBhbnk7XG4gICAgICBjb25zdCBpbmRleGVzOiBBcnJheTxudW1iZXI+ID0gW107XG5cbiAgICAgIGlmICghdmFsdWVzIHx8ICF2YWx1ZXMubGVuZ3RoIHx8ICFzdHIgfHwgIXN0ci5sZW5ndGggfHwgdmFsdWVzLmxlbmd0aCA8IHN0ci5sZW5ndGgpIHtcblxuICAgICAgICByZXR1cm4gaW5kZXhlcztcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgaW5kZXhWYWx1ZSBpbiB2YWx1ZXMpIHtcbiAgICAgICAgaWYgKHZhbHVlc1tpbmRleFZhbHVlXSAhPT0gc3RyWzBdIHx8ICgoK2luZGV4VmFsdWUpICsgc3RyLmxlbmd0aCkgPiB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IGluIHN0ci5zcGxpdCgnJykpIHtcblxuICAgICAgICAgIGlmICh2YWx1ZXNbKCtpbmRleFZhbHVlKSArICgraW5kZXgpXSAhPT0gc3RyW2luZGV4XSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGluZGV4ZXMucHVzaCgraW5kZXhWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmRleGVzO1xuICAgIH1cbiAgfVxuXG59XG4iXX0=
329
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXByb2plY3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvc2VydmljZXMvY29uZmlnLXByb2plY3Qvc3JjL2NvbmZpZy1wcm9qZWN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBTXZMLE1BQU0sT0FBTywwQkFBMEI7SUFDcEIsVUFBVSxHQUFHLE1BQU0sQ0FBUyxTQUFTLENBQUMsQ0FBQztJQUN2QyxXQUFXLEdBQUcsTUFBTSxDQUFTLFNBQVMsQ0FBQyxDQUFDO0lBQ3hDLGNBQWMsR0FBRyxNQUFNLENBQVMsU0FBUyxDQUFDLENBQUM7SUFDM0Msb0JBQW9CLEdBQUcsTUFBTSxDQUFTLFNBQVMsQ0FBQyxDQUFDO0lBQ2pELGdCQUFnQixHQUFHLE1BQU0sQ0FBUyxTQUFTLENBQUMsQ0FBQztJQUM3QyxzQkFBc0IsR0FBRyxNQUFNLENBQVMsU0FBUyxDQUFDLENBQUM7SUFDbkQsaUJBQWlCLEdBQUcsTUFBTSxDQUFTLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLGdCQUFnQixHQUFHLE1BQU0sQ0FBUyxTQUFTLENBQUMsQ0FBQztJQUM3Qyx1QkFBdUIsR0FBRyxNQUFNLENBQVMsU0FBUyxDQUFDLENBQUM7SUFDcEQsdUJBQXVCLEdBQUcsTUFBTSxDQUFTLFdBQVcsQ0FBQyxDQUFDO0lBQ3RE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QUFFLENBQUM7b0JBQ2xGLFNBQVM7Z0JBQ1gsQ0FBQztnQkFFRCxLQUFLLE1BQU0sS0FBSyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFFbEMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUNwRCxNQUFNO29CQUNSLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDNUIsQ0FBQztZQUVELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQTtJQUNILENBQUM7d0dBaFhVLDBCQUEwQjs0R0FBMUIsMEJBQTBCLGNBSHpCLE1BQU07OzRGQUdQLDBCQUEwQjtrQkFKdEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBjb21wdXRlZCwgZWZmZWN0LCBzaWduYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgUGF0aHNUb1N0cmluZ1Byb3BzIH0gZnJvbSBcIkBsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXNcIjtcbmltcG9ydCB7IGNvbG9yU3RlcENvbnRyYXN0RnJvbU9yaWdpbiwgZ2V0IH0gZnJvbSBcIkBsaWJzLXVpL3V0aWxzXCI7XG5pbXBvcnQgeyBjb25maWdCdXR0b25Db2xvciwgY29uZmlnQnV0dG9uU3RhdHVzLCBjb25maWdCdXR0b25UYWIsIGNvbmZpZ0hlYWRpbmcsIGNvbmZpZ0xpbmtCdXR0b24sIGZvbnRDb25maWcsIHNpemVCdXR0b25Db25maWcsIHN0eWxlQnV0dG9uVGFiLCB3ZWlnaHRzIH0gZnJvbSBcIi4vY29uZmlnLXByb2plY3QtZGF0YVwiO1xuaW1wb3J0IHsgSUNvbG9yQnV0dG9uLCBJTGlic1VpQ29uZmlnQnV0dG9uU2l6ZSwgSUxpYnNVaUNvbmZpZ0J1dHRvblN0YXR1cywgSUxpYnNVaUNvbmZpZ0J1dHRvblRhYiwgSUxpYnNVaUNvbmZpZ0ZvbnRGYW1pbHksIElMaWJzVWlDb25maWdGb250SGVhZGluZywgSUxpYnNVaUNvbmZpZ0ZvbnRXZWlnaHQgfSBmcm9tIFwiLi9jb25maWctcHJvamVjdC5pbnRlcmZhY2VcIjtcbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuXG5leHBvcnQgY2xhc3MgTGlic1VpQ29uZmlnUHJvamVjdFNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHRoZW1lQ29sb3IgPSBzaWduYWw8c3RyaW5nPignIzIyNmZmNScpO1xuICBwcml2YXRlIHJlYWRvbmx5IGJvcmRlckNvbG9yID0gc2lnbmFsPHN0cmluZz4oJyNlNmU3ZWEnKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0ZXh0RXJyb3JDb2xvciA9IHNpZ25hbDxzdHJpbmc+KCcjZmY1NDU0Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaWNvbkhvdmVyRGFuZ2VyQ29sb3IgPSBzaWduYWw8c3RyaW5nPignI2YxNTc2NycpO1xuICBwcml2YXRlIHJlYWRvbmx5IGJvcmRlckVycm9yQ29sb3IgPSBzaWduYWw8c3RyaW5nPignI2VlMmQ0MScpO1xuICBwcml2YXRlIHJlYWRvbmx5IGJhY2tncm91bmREaXNhYmxlQ29sb3IgPSBzaWduYWw8c3RyaW5nPignI2Y4ZjlmYScpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRleHRSZWFkb25seUNvbG9yID0gc2lnbmFsPHN0cmluZz4oJyMwNzE2MzEnKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0ZXh0RGlzYWJsZUNvbG9yID0gc2lnbmFsPHN0cmluZz4oJyM5Y2EyYWQnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBiYWNrZ3JvdW5kUmVhZG9ubHlDb2xvciA9IHNpZ25hbDxzdHJpbmc+KCcjZjhmOWZhJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYmFja2dyb3VuZFVzZXJTZWxlY3Rpb24gPSBzaWduYWw8c3RyaW5nPignIzAwMDAwMDQwJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYmFja2dyb3VuZExpc3QgPSBzaWduYWw8c3RyaW5nPignI2Y4ZjlmYScpO1xuICBwcml2YXRlIHJlYWRvbmx5IGJhY2tncm91bmRMaXN0SG92ZXIgPSBzaWduYWw8c3RyaW5nPignI2Y4ZjlmYScpO1xuICBwcml2YXRlIHJlYWRvbmx5IGJhY2tncm91bmRMaXN0SG92ZXJEYW5nZXIgPSBzaWduYWw8c3RyaW5nPignI2ZlZjVmNicpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ0ZvbnQgPSBzaWduYWw8SUxpYnNVaUNvbmZpZ0ZvbnRGYW1pbHk+KGZvbnRDb25maWcpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ0hlYWQgPSBzaWduYWw8SUxpYnNVaUNvbmZpZ0ZvbnRIZWFkaW5nPihjb25maWdIZWFkaW5nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmdW5jdGlvbkdldENvbmZpZ0J1dHRvbkluY2x1ZGVzID0gc2lnbmFsPChyb290Q29sb3I6IHN0cmluZykgPT4geyBba2V5OiBzdHJpbmddOiBJQ29sb3JCdXR0b24gfT4oKCkgPT4ge1xuICAgIHJldHVybiB7fTtcbiAgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnQnV0dG9uID0gY29tcHV0ZWQ8eyBba2V5OiBzdHJpbmddOiBJQ29sb3JCdXR0b24gfT4oKCkgPT4ge1xuICAgIHJldHVybiB7IC4uLmNvbmZpZ0J1dHRvbkNvbG9yKHRoaXMudGhlbWVDb2xvcigpKSwgLi4uY29uZmlnTGlua0J1dHRvbih0aGlzLnRoZW1lQ29sb3IoKSksIC4uLnRoaXMuZnVuY3Rpb25HZXRDb25maWdCdXR0b25JbmNsdWRlcygpKHRoaXMudGhlbWVDb2xvcigpKSB9O1xuICB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWdCdXR0b25TaXplID0gc2lnbmFsPElMaWJzVWlDb25maWdCdXR0b25TaXplPihzaXplQnV0dG9uQ29uZmlnKCkpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ0J1dHRvblN0YXR1cyA9IHNpZ25hbDxJTGlic1VpQ29uZmlnQnV0dG9uU3RhdHVzPihjb25maWdCdXR0b25TdGF0dXMoKSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnQnV0dG9uVGFiID0gc2lnbmFsPElMaWJzVWlDb25maWdCdXR0b25UYWI+KGNvbmZpZ0J1dHRvblRhYigpKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdHlsZUNsYXNzR2xvYmFsRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0eWxlQ2xhc3NIZWFkRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0eWxlQ2xhc3NCdXR0b25UYWJFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICB0aGlzLnNldFRoZW1lQ29sb3IoKTtcbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICB0aGlzLnNldHVwRm9udEZhbWlseSgpO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIHRoaXMuc2V0dXBGb250SGVhZCgpO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIHRoaXMuc2V0dXBCdXR0b25UYWIoKTtcbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICB0aGlzLnNldHVwQnV0dG9uU2l6ZSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jb25maWdTdHJpbmcoKTtcbiAgICB0aGlzLnNldENsYXNzR2xvYmFsKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0IFRoZW1lQ29sb3IoY29sb3I6IHN0cmluZykge1xuICAgIHRoaXMudGhlbWVDb2xvci5zZXQoY29sb3IgfHwgJyMyMjZmZjUnKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgQm9yZGVyQ29sb3IoY29sb3I6IHN0cmluZykge1xuICAgIHRoaXMuYm9yZGVyQ29sb3Iuc2V0KGNvbG9yIHx8ICcjZTZlN2VhJyk7XG4gIH1cblxuICBwdWJsaWMgc2V0IEJvcmRlckVycm9yQ29sb3IoY29sb3I6IHN0cmluZykge1xuICAgIHRoaXMuYm9yZGVyRXJyb3JDb2xvci5zZXQoY29sb3IgfHwgJyNlZTJkNDEnKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgVGV4dEVycm9yQ29sb3IoY29sb3I6IHN0cmluZykge1xuICAgIHRoaXMudGV4dEVycm9yQ29sb3Iuc2V0KGNvbG9yIHx8ICcjZmY1NDU0Jyk7XG4gIH1cblxuICBwdWJsaWMgc2V0IEljb25Ib3ZlckRhbmdlckNvbG9yKGNvbG9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLmljb25Ib3ZlckRhbmdlckNvbG9yLnNldChjb2xvciB8fCAnI2ZmNTQ1NCcpO1xuICB9XG5cbiAgcHVibGljIHNldCBCYWNrZ3JvdW5kUmVhZG9ubHlDb2xvcihjb2xvcjogc3RyaW5nKSB7XG4gICAgdGhpcy5iYWNrZ3JvdW5kUmVhZG9ubHlDb2xvci5zZXQoY29sb3IgfHwgJyNmMTU3NjcnKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgVGV4dFJlYWRvbmx5Q29sb3IoY29sb3I6IHN0cmluZykge1xuICAgIHRoaXMudGV4dFJlYWRvbmx5Q29sb3Iuc2V0KGNvbG9yIHx8ICcjMDcxNjMxJyk7XG4gIH1cblxuICBwdWJsaWMgc2V0IEJhY2tncm91bmRVc2VyU2VsZWN0aW9uKGNvbG9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLmJhY2tncm91bmRVc2VyU2VsZWN0aW9uLnNldChjb2xvciB8fCAnIzAwMDAwMDQwJyk7XG4gIH1cblxuICBwdWJsaWMgc2V0IEJhY2tncm91bmRMaXN0KGNvbG9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLmJhY2tncm91bmRMaXN0LnNldChjb2xvciB8fCAnI2Y4ZjlmYScpO1xuICB9XG5cbiAgcHVibGljIHNldCBCYWNrZ3JvdW5kTGlzdEhvdmVyKGNvbG9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLmJhY2tncm91bmRMaXN0SG92ZXIuc2V0KGNvbG9yIHx8ICcjZjhmOWZhJyk7XG4gIH1cblxuICBwdWJsaWMgc2V0IEJhY2tncm91bmRMaXN0SG92ZXJEYW5nZXIoY29sb3I6IHN0cmluZykge1xuICAgIHRoaXMuYmFja2dyb3VuZExpc3RIb3Zlci5zZXQoY29sb3IgfHwgJyNmZWY1ZjYnKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgQmFja2dyb3VuZERpc2FibGVDb2xvcihjb2xvcjogc3RyaW5nKSB7XG4gICAgdGhpcy5iYWNrZ3JvdW5kRGlzYWJsZUNvbG9yLnNldChjb2xvciB8fCAnI2Y4ZjlmYScpO1xuICB9XG5cbiAgcHVibGljIHNldCBUZXh0RGlzYWJsZUNvbG9yKGNvbG9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRleHREaXNhYmxlQ29sb3Iuc2V0KGNvbG9yIHx8ICcjOWNhMmFkJyk7XG4gIH1cblxuICBwdWJsaWMgc2V0IENvbmZpZ0ZvbnQoY29uZmlnRm9udDogSUxpYnNVaUNvbmZpZ0ZvbnRGYW1pbHkpIHtcbiAgICB0aGlzLmNvbmZpZ0ZvbnQuc2V0KHsgLi4uY29uZmlnRm9udCB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgQ29uZmlnRm9udEhlYWQoY29uZmlnSGVhZDogSUxpYnNVaUNvbmZpZ0ZvbnRIZWFkaW5nKSB7XG4gICAgdGhpcy5jb25maWdIZWFkLnNldCh7IC4uLmNvbmZpZ0hlYWQgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IENvbmZpZ0J1dHRvbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWdCdXR0b247XG4gIH1cblxuICBwdWJsaWMgc2V0IEZ1bmN0aW9uR2V0Q29uZmlnQnV0dG9uSW5jbHVkZXMoZnVuY3Rpb25HZXRDb25maWdCdXR0b25JbmNsdWRlczogKHJvb3RDb2xvcjogc3RyaW5nKSA9PiB7IFtrZXk6IHN0cmluZ106IElDb2xvckJ1dHRvbiB9KSB7XG4gICAgdGhpcy5mdW5jdGlvbkdldENvbmZpZ0J1dHRvbkluY2x1ZGVzLnNldChmdW5jdGlvbkdldENvbmZpZ0J1dHRvbkluY2x1ZGVzKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgQ29uZmlnQnV0dG9uU3RhdHVzKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ0J1dHRvblN0YXR1cygpO1xuICB9XG5cbiAgcHVibGljIHNldCBDb25maWdCdXR0b25TdGF0dXMoY29uZmlnOiBJTGlic1VpQ29uZmlnQnV0dG9uU3RhdHVzKSB7XG4gICAgdGhpcy5jb25maWdCdXR0b25TdGF0dXMuc2V0KGNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgc2V0IENvbmZpZ0J1dHRvblRhYihjb25maWc6IElMaWJzVWlDb25maWdCdXR0b25UYWIpIHtcbiAgICB0aGlzLmNvbmZpZ0J1dHRvblRhYi5zZXQoY29uZmlnKTtcbiAgfVxuXG4gIC8vIHB1YmxpYyBow6BtIMSR4buDIHPhu60gZOG7pW5nIGNobyBjb21wb25lbnQgaW5wdXQgc+G7rSBk4bulbmcgdGFnSW5wdXQgPSBmcmFtZUFyZWE7XG4gIHB1YmxpYyBzZXR1cEZvbnRGYW1pbHkoY3VycmVudERvYz86IERvY3VtZW50KSB7XG4gICAgdHJ5IHtcbiAgICAgIGN1cnJlbnREb2MgPSBjdXJyZW50RG9jIHx8IGRvY3VtZW50O1xuICAgICAgY29uc3QgZG9jID0gY3VycmVudERvYy5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgICAgIGRvYy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1saWJzLXVpLWZvbnQtZmFtaWx5LW5hbWUnLCBgJHt0aGlzLmNvbmZpZ0ZvbnQoKS5uYW1lfSxBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmYCk7XG4gICAgICBPYmplY3Qua2V5cyh3ZWlnaHRzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmICghZ2V0KHRoaXMuY29uZmlnRm9udCgpLCBrZXkgYXMgUGF0aHNUb1N0cmluZ1Byb3BzPElMaWJzVWlDb25maWdGb250RmFtaWx5PikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9udEZhY2UgPSBuZXcgRm9udEZhY2UodGhpcy5jb25maWdGb250KCkubmFtZSwgYHVybCgke2dldCh0aGlzLmNvbmZpZ0ZvbnQoKSwga2V5IGFzIFBhdGhzVG9TdHJpbmdQcm9wczxJTGlic1VpQ29uZmlnRm9udEZhbWlseT4pfSlgLCB7IHdlaWdodDogZ2V0KHdlaWdodHMsIGtleSBhcyBQYXRoc1RvU3RyaW5nUHJvcHM8SUxpYnNVaUNvbmZpZ0ZvbnRXZWlnaHQ+KSB9KTtcbiAgICAgICAgZm9udEZhY2UubG9hZCgpLnRoZW4obG9hZGVkRm9udCA9PiB7XG4gICAgICAgICAgaWYgKGN1cnJlbnREb2MgJiYgJ2FkZCcgaW4gY3VycmVudERvYy5mb250cykge1xuICAgICAgICAgICAgKGN1cnJlbnREb2MuZm9udHMgYXMgYW55KS5hZGQobG9hZGVkRm9udCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEZvbnRIZWFkKCkge1xuICAgIGNvbnN0IGNvbmZpZ0hlYWRzRGF0YSA9IHRoaXMuY29uZmlnSGVhZCgpO1xuICAgIGxldCBzdHlsZXMgPSAnJztcbiAgICBPYmplY3Qua2V5cyhjb25maWdIZWFkc0RhdGEpLmZvckVhY2goa2V5Q29uZmlnID0+IHtcbiAgICAgIGxldCBzdHlsZSA9IGBmb250LWZhbWlseTp2YXIoLS1saWJzLXVpLWZvbnQtZmFtaWx5LW5hbWUsJ0FyaWFsJyk7YDtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGdldChjb25maWdIZWFkc0RhdGEsIGtleUNvbmZpZyBhcyBQYXRoc1RvU3RyaW5nUHJvcHM8SUxpYnNVaUNvbmZpZ0ZvbnRIZWFkaW5nPik7XG4gICAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgc3R5bGUgPSBgJHtzdHlsZX0ke2tleX06JHtnZXQoY29uZmlnLCBrZXkpfTtgO1xuICAgICAgfSk7XG4gICAgICBzdHlsZXMgPSBgJHtzdHlsZXN9IC5saWJzLXVpLWZvbnQtJHtrZXlDb25maWd9eyR7c3R5bGV9fS5saWJzLXVpLWZvbnQtJHtrZXlDb25maWd9aXske3N0eWxlLnJlcGxhY2UoLzsvZywgJyAhaW1wb3J0YW50OycpfX1gO1xuICAgIH0pO1xuXG4gICAgc3R5bGVzID0gYCp7Ym94LXNpemluZzogYm9yZGVyLWJveCAhaW1wb3J0YW50O30ke3N0eWxlc31gO1xuXG4gICAgdGhpcy5zdHlsZUNsYXNzSGVhZEVsLmlubmVySFRNTCA9IHN0eWxlcztcbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZCh0aGlzLnN0eWxlQ2xhc3NIZWFkRWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEJ1dHRvblNpemUoKSB7XG4gICAgY29uc3QgY29uZmlnQnV0dG9uU2l6ZSA9IHRoaXMuY29uZmlnQnV0dG9uU2l6ZSgpO1xuICAgIGNvbnN0IGRvYyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICBPYmplY3Qua2V5cyhjb25maWdCdXR0b25TaXplKS5mb3JFYWNoKGtleVNpemUgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gZ2V0KGNvbmZpZ0J1dHRvblNpemUsIGtleVNpemUgYXMgUGF0aHNUb1N0cmluZ1Byb3BzPElMaWJzVWlDb25maWdCdXR0b25TaXplPik7XG4gICAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goa2V5VHlwZSA9PiB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBgLS1saWJzLXVpLWJ1dHRvbi1zaXplLSR7a2V5U2l6ZX0tJHtrZXlUeXBlLnJlcGxhY2UoL1tfXS9nLCAnLScpfWA7XG4gICAgICAgIGRvYy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCBnZXQoY29uZmlnLCBrZXlUeXBlKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBCdXR0b25UYWIoKSB7XG4gICAgY29uc3QgY29uZmlnQnV0dG9uVGFiID0gdGhpcy5jb25maWdCdXR0b25UYWIoKTtcbiAgICBsZXQgc3R5bGVzID0gJyc7XG5cbiAgICBPYmplY3Qua2V5cyhjb25maWdCdXR0b25UYWIpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGdldChjb25maWdCdXR0b25UYWIsIGtleSk7XG4gICAgICBjb25zdCBzdHlsZSA9IGNvbmZpZyA/IHN0eWxlQnV0dG9uVGFiKGtleSwgY29uZmlnKSA6ICcnO1xuXG4gICAgICBzdHlsZXMgPSBgJHtzdHlsZXN9JHtzdHlsZX1gO1xuICAgIH0pO1xuICAgIHRoaXMuc3R5bGVDbGFzc0J1dHRvblRhYkVsLmlubmVySFRNTCA9IHN0eWxlcztcbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZCh0aGlzLnN0eWxlQ2xhc3NCdXR0b25UYWJFbCk7XG4gIH1cblxuICBwcml2YXRlIHNldFRoZW1lQ29sb3IoKSB7XG4gICAgY29uc3QgZG9jID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIFt7XG4gICAgICBncm91cDogJ2xpYnMtdWknLFxuICAgICAgdHlwZTogJ2NvbG9yJyxcbiAgICAgIHByb3BlcnR5OiB7XG4gICAgICAgIGRlZmF1bHQ6IGNvbG9yU3RlcENvbnRyYXN0RnJvbU9yaWdpbih0aGlzLnRoZW1lQ29sb3IoKSwgMCk/LmxpZ2h0LFxuICAgICAgICBsaWdodF8xOiBjb2xvclN0ZXBDb250cmFzdEZyb21PcmlnaW4odGhpcy50aGVtZUNvbG9yKCksIDIwKT8ubGlnaHQsXG4gICAgICAgIGxpZ2h0XzI6IGNvbG9yU3RlcENvbnRyYXN0RnJvbU9yaWdpbih0aGlzLnRoZW1lQ29sb3IoKSwgOTApPy5saWdodCxcbiAgICAgICAgbGlnaHRfMzogY29sb3JTdGVwQ29udHJhc3RGcm9tT3JpZ2luKHRoaXMudGhlbWVDb2xvcigpLCA5NSk/LmxpZ2h0LFxuICAgICAgICBsaWdodF80OiBjb2xvclN0ZXBDb250cmFzdEZyb21PcmlnaW4odGhpcy50aGVtZUNvbG9yKCksIDUwKT8ubGlnaHQsXG4gICAgICAgIGxpZ2h0XzU6IGNvbG9yU3RlcENvbnRyYXN0RnJvbU9yaWdpbih0aGlzLnRoZW1lQ29sb3IoKSwgNzApPy5saWdodCxcbiAgICAgICAgbGlnaHRfNjogY29sb3JTdGVwQ29udHJhc3RGcm9tT3JpZ2luKHRoaXMudGhlbWVDb2xvcigpLCA4MCk/LmxpZ2h0LFxuICAgICAgICBkYXJrOiBjb2xvclN0ZXBDb250cmFzdEZyb21PcmlnaW4odGhpcy50aGVtZUNvbG9yKCksIDIwKT8uZGFyayxcbiAgICAgICAgYmFja2dyb3VuZF9saXN0OiB0aGlzLmJhY2tncm91bmRMaXN0KCksXG4gICAgICAgIGJhY2tncm91bmRfbGlzdF9ob3ZlcjogdGhpcy5iYWNrZ3JvdW5kTGlzdEhvdmVyKCksXG4gICAgICAgIGJhY2tncm91bmRfbGlzdF9ob3Zlcl9kYW5nZXI6IHRoaXMuYmFja2dyb3VuZExpc3RIb3ZlckRhbmdlcigpLFxuICAgICAgICBiYWNrZ3JvdW5kX3NlbGVjdGlvbjogdGhpcy5iYWNrZ3JvdW5kVXNlclNlbGVjdGlvbigpLFxuICAgICAgICBib3JkZXI6IHRoaXMuYm9yZGVyQ29sb3IoKSxcbiAgICAgICAgYm9yZGVyX2Vycm9yOiB0aGlzLmJvcmRlckVycm9yQ29sb3IoKSxcbiAgICAgICAgdGV4dF9lcnJvcjogdGhpcy50ZXh0RXJyb3JDb2xvcigpLFxuICAgICAgICBpY29uX2hvdmVyX2RhbmdlcjogdGhpcy5pY29uSG92ZXJEYW5nZXJDb2xvcigpLFxuICAgICAgICBiYWNrZ3JvdW5kX3JlYWRvbmx5OiB0aGlzLmJhY2tncm91bmRSZWFkb25seUNvbG9yKCksXG4gICAgICAgIHRleHRfcmVhZG9ubHk6IHRoaXMudGV4dFJlYWRvbmx5Q29sb3IoKSxcbiAgICAgICAgYmFja2dyb3VuZF9kaXNhYmxlOiB0aGlzLmJhY2tncm91bmREaXNhYmxlQ29sb3IoKSxcbiAgICAgICAgdGV4dF9kaXNhYmxlOiB0aGlzLnRleHREaXNhYmxlQ29sb3IoKSxcbiAgICAgICAgZ3JhZGllbnRfZnJvbTogdGhpcy50aGVtZUNvbG9yKCkudG9Mb2NhbGVVcHBlckNhc2UoKSA9PT0gJyMyMjZGRjUnID8gY29sb3JTdGVwQ29udHJhc3RGcm9tT3JpZ2luKHRoaXMudGhlbWVDb2xvcigpLCAxMCk/LmxpZ2h0IDogY29sb3JTdGVwQ29udHJhc3RGcm9tT3JpZ2luKHRoaXMudGhlbWVDb2xvcigpLCAwKT8ubGlnaHQsXG4gICAgICAgIGdyYWRpZW50X3RvOiB0aGlzLnRoZW1lQ29sb3IoKS50b0xvY2FsZVVwcGVyQ2FzZSgpID09PSAnIzIyNkZGNScgPyBjb2xvclN0ZXBDb250cmFzdEZyb21PcmlnaW4oJyM1QjJFQkInLCAxMCk/LmxpZ2h0IDogY29sb3JTdGVwQ29udHJhc3RGcm9tT3JpZ2luKHRoaXMudGhlbWVDb2xvcigpLCAyMCk/LmRhcmssXG4gICAgICB9XG4gICAgfV0uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBgLS0ke2l0ZW0uZ3JvdXAucmVwbGFjZSgvW19dL2csICctJyl9LSR7aXRlbS50eXBlLnJlcGxhY2UoL1tfXS9nLCAnLScpfWA7XG4gICAgICBPYmplY3Qua2V5cyhpdGVtLnByb3BlcnR5KS5mb3JFYWNoKGtleSA9PiBkb2Muc3R5bGUuc2V0UHJvcGVydHkoYCR7bmFtZX0tJHtrZXkucmVwbGFjZSgvW19dL2csICctJyl9YCwgKGl0ZW0ucHJvcGVydHkgYXMgYW55KVtrZXldKSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY29sb3JTdGVwQ29udHJhc3RGcm9tT3JpZ2luKHN0ZXA6IG51bWJlciwgY29sb3I/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY29sb3JTdGVwQ29udHJhc3RGcm9tT3JpZ2luKGNvbG9yIHx8IHRoaXMudGhlbWVDb2xvcigpLCBzdGVwIHx8IDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDbGFzc0dsb2JhbCgpIHtcbiAgICB0aGlzLnN0eWxlQ2xhc3NHbG9iYWxFbC5pbm5lckhUTUwgPSBgXG4gICAgLmxpYnMtdWktYm9yZGVyLXByaW1hcnktZ2VuZXJhbHtib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1saWJzLXVpLWNvbG9yLWRlZmF1bHQsICMyMjZGRjUpO31cbiAgICAubGlicy11aS1ib3JkZXItcHJpbWFyeS1mb2N1cy1nZW5lcmFse2JvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxpYnMtdWktY29sb3ItbGlnaHQtMSwgIzRlOGNmNyk7fVxuICAgIC5saWJzLXVpLWJvcmRlci1wcmltYXJ5LWhvdmVyLWdlbmVyYWx7Ym9yZGVyOiAxcHggc29saWQgdmFyKC0tbGlicy11aS1jb2xvci1saWdodC0zLCAjZjRmOGZmKTt9XG4gICAgLmxpYnMtdWktYm9yZGVyLWdlbmVyYWx7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxpYnMtdWktY29sb3ItYm9yZGVyLCAjZTZlN2VhKTt9XG4gICAgLmxpYnMtdWktYm9yZGVyLXRvcC1nZW5lcmFse2JvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1saWJzLXVpLWNvbG9yLWJvcmRlciwgI2U2ZTdlYSk7fVxuICAgIC5saWJzLXVpLWJvcmRlci1yaWdodC1nZW5lcmFse2JvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLWxpYnMtdWktY29sb3ItYm9yZGVyLCAjZTZlN2VhKTt9XG4gICAgLmxpYnMtdWktYm9yZGVyLWJvdHRvbS1nZW5lcmFse2JvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1saWJzLXVpLWNvbG9yLWJvcmRlciwgI2U2ZTdlYSk7fVxuICAgIC5saWJzLXVpLWJvcmRlci1kYXNoZWQtZ2VuZXJhbHtib3JkZXI6IGRhc2hlZCAxcHggdmFyKC0tbGlicy11aS1jb2xvci1ib3JkZXIsICNlNmU3ZWEpO31cbiAgICAubGlicy11aS1ib3JkZXItdG9wLWRhc2hlZC1nZW5lcmFse2JvcmRlci10b3A6IGRhc2hlZCAxcHggdmFyKC0tbGlicy11aS1jb2xvci1ib3JkZXIsICNlNmU3ZWEpO31cbiAgICAubGlicy11aS1ib3JkZXItbGVmdC1kYXNoZWQtZ2VuZXJhbHtib3JkZXItbGVmdDogZGFzaGVkIDFweCB2YXIoLS1saWJzLXVpLWNvbG9yLWJvcmRlciwgI2U2ZTdlYSk7fVxuICAgIC5saWJzLXVpLWJvcmRlci1yaWdodC1kYXNoZWQtZ2VuZXJhbHtib3JkZXItcmlnaHQ6IGRhc2hlZCAxcHggdmFyKC0tbGlicy11aS1jb2xvci1ib3JkZXIsICNlNmU3ZWEpO31cbiAgICAubGlicy11aS1ib3JkZXItYm90dG9tLWRhc2hlZC1nZW5lcmFse2JvcmRlci1ib3R0b206IGRhc2hlZCAxcHggdmFyKC0tbGlicy11aS1jb2xvci1ib3JkZXIsICNlNmU3ZWEpO31cbiAgICAubGlicy11aS1ib3JkZXItbGVmdC1nZW5lcmFse2JvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tbGlicy11aS1jb2xvci1ib3JkZXIsICNlNmU3ZWEpO31cbiAgICAubGlicy11aS1ib3JkZXIteC1nZW5lcmFse2JvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tbGlicy11aS1jb2xvci1ib3JkZXIsICNlNmU3ZWEpOyAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tbGlicy11aS1jb2xvci1ib3JkZXIsICNlNmU3ZWEpO31cbiAgICAubGlicy11aS1ib3JkZXIteS1nZW5lcmFse2JvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1saWJzLXVpLWNvbG9yLWJvcmRlciwgI2U2ZTdlYSk7ICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbGlicy11aS1jb2xvci1ib3JkZXIsICNlNmU3ZWEpO31cbiAgICAubGlicy11aS1ib3JkZXItbGVmdC10b3AtZ2VuZXJhbHtib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLWxpYnMtdWktY29sb3ItYm9yZGVyLCAjZTZlN2VhKTsgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1saWJzLXVpLWNvbG9yLWJvcmRlciwgI2U2ZTdlYSk7fVxuICAgIC5saWJzLXVpLWJvcmRlci1sZWZ0LWJvdHRvbS1nZW5lcmFse2JvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tbGlicy11aS1jb2xvci1ib3JkZXIsICNlNmU3ZWEpOyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWxpYnMtdWktY29sb3ItYm9yZGVyLCAjZTZlN2VhKTt9XG4gICAgLmxpYnMtdWktYm9yZGVyLXJpZ2h0LXRvcC1nZW5lcmFse2JvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLWxpYnMtdWktY29sb3ItYm9yZGVyLCAjZTZlN2VhKTsgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1saWJzLXVpLWNvbG9yLWJvcmRlciwgI2U2ZTdlYSk7fVxuICAgIC5saWJzLXVpLWJvcmRlci1yaWdodC1ib3R0b20tZ2VuZXJhbHtib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1saWJzLXVpLWNvbG9yLWJvcmRlciwgI2U2ZTdlYSk7ICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbGlicy11aS1jb2xvci1ib3JkZXIsICNlNmU3ZWEpO31cbiAgICAubGlicy11aS1ib3JkZXItZXJyb3ItZ2VuZXJhbHtib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1saWJzLXVpLWNvbG9yLWJvcmRlci1lcnJvciwgI2VlMmQ0MSkgIWltcG9ydGFudDt9XG4gICAgLmxpYnMtdWktYmctbGlzdCB7YmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbGlicy11aS1iYWNrZ3JvdW5kLWxpc3QsICNmOGY5ZmEpO31cbiAgICAubGlicy11aS1iZy1saXN0LWhvdmVyOmhvdmVyIHtiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1saWJzLXVpLWJhY2tncm91bmQtbGlzdC1ob3ZlciwgI2Y4ZjlmYSk7fVxuICAgIC5saWJzLXVpLWJnLWxpc3QtYWN0aXZlIHtiYWNrZ3JvdW5kLWNvbG9yOiAgdmFyKC0tbGlicy11aS1jb2xvci1saWdodC0zLCAjZjRmOGZmKTt9XG4gICAgLmxpYnMtdWktYmctbGlzdC1ob3Zlci1hY3RpdmU6aG92ZXIge2JhY2tncm91bmQtY29sb3I6ICNmOGY5ZmE7fVxuICAgIC5saWJzLXVpLWJnLWxpc3QtaG92ZXItYWN0aXZlOmFjdGl2ZSB7YmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbGlicy11aS1jb2xvci1saWdodC0zLCAjZjRmOGZmKTt9XG4gICAgLmxpYnMtdWktYmctbGlzdC1ob3Zlci1kYW5nZXI6aG92ZXIge2JhY2tncm91bmQtY29sb3I6IHZhcigtLWxpYnMtdWktYmFja2dyb3VuZC1saXN0LWhvdmVyLWRhbmdlciwgI2ZlZjVmNik7IGNvbG9yOiB2YXIoLS1saWJzLXVpLWNvbG9yLWljb24taG92ZXItZGFuZ2VyLCAjZjE1NzY3KSAhaW1wb3J0YW50OyBbY2xhc3MqPVwibGlicy11aS1pY29uLVwiXSxbY2xhc3MqPVwiaWNvbi1mb250LTNyZFwiXXsmOmJlZm9yZSwmOmFmdGVye2NvbG9yOiB2YXIoLS1saWJzLXVpLWNvbG9yLWljb24taG92ZXItZGFuZ2VyLCAjZjE1NzY3KSAhaW1wb3J0YW50O319fVxuICAgIC5saWJzLXVpLXRleHQtZXJyb3Ige2NvbG9yOiB2YXIoLS1saWJzLXVpLWNvbG9yLXRleHQtZXJyb3IsICNmZjU0NTQpICFpbXBvcnRhbnQ7fVxuICAgIC5saWJzLXVpLXRleHQtZXJyb3I6OmJlZm9yZSB7Y29sb3I6IHZhcigtLWxpYnMtdWktY29sb3ItdGV4dC1lcnJvciwgI2ZmNTQ1NCkgIWltcG9ydGFudDt9XG4gICAgLmxpYnMtdWktZGlzYWJsZSB7Y3Vyc29yOiBub3QtYWxsb3dlZCAhaW1wb3J0YW50O3RleHQtZGVjb3JhdGlvbjogbm9uZTtjb2xvcjp2YXIoLS1saWJzLXVpLWNvbG9yLXRleHQtZGlzYWJsZSwgI2NkZDBkNikgIWltcG9ydGFudDt9XG4gICAgLmxpYnMtdWktZGlzYWJsZTo6YmVmb3JlIHtjb2xvcjp2YXIoLS1saWJzLXVpLWNvbG9yLXRleHQtZGlzYWJsZSwgIzljYTJhZCkgIWltcG9ydGFudDt9XG4gICAgLmxpYnMtdWktZGlzYWJsZS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IHZhcigtLWxpYnMtdWktY29sb3ItYmFja2dyb3VuZC1kaXNhYmxlLCAjZjhmOWZhKSAhaW1wb3J0YW50O31cbiAgICAubGlicy11aS1kaXNhYmxlLWFjdGl2ZSB7Y29sb3I6dmFyKC0tbGlicy11aS1jb2xvci1saWdodC00LCM5MWI3ZmEpICFpbXBvcnRhbnQ7fVxuICAgIC5saWJzLXVpLWRpc2FibGUtYWN0aXZlOjpiZWZvcmUge2NvbG9yOnZhcigtLWxpYnMtdWktY29sb3ItbGlnaHQtNCwjOTFiN2ZhKSAhaW1wb3J0YW50O31cbiAgICAubGlicy11aS1kaXNhYmxlLWFjdGl2ZS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IHZhcigtLWxpYnMtdWktY29sb3ItbGlnaHQtNCwjOTFiN2ZhKSAhaW1wb3J0YW50O31cbiAgICAubGlicy11aS1yZWFkb25seSB7Y3Vyc29yOiBub3QtYWxsb3dlZCAhaW1wb3J0YW50O2NvbG9yOnZhcigtLWxpYnMtdWktY29sb3ItdGV4dC1yZWFkb25seSwgIzA3MTYzMSkgIWltcG9ydGFudDt9XG4gICAgLmxpYnMtdWktcmVhZG9ubHk6OmJlZm9yZSB7Y29sb3I6dmFyKC0tbGlicy11aS1jb2xvci10ZXh0LXJlYWRvbmx5LCAjMDcxNjMxKSAhaW1wb3J0YW50O31cbiAgICAubGlicy11aS1yZWFkb25seS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IHZhcigtLWxpYnMtdWktY29sb3ItYmFja2dyb3VuZC1yZWFkb25seSwgI2Y4ZjlmYSkgIWltcG9ydGFudDt9XG4gICAgLmxpYnMtdWktaWNvbi1ob3Zlci1kYW5nZXI6aG92ZXIge2NvbG9yOiB2YXIoLS1saWJzLXVpLWNvbG9yLWljb24taG92ZXItZGFuZ2VyLCAjZjE1NzY3KSAhaW1wb3J0YW50OyBbY2xhc3MqPVwibGlicy11aS1pY29uLVwiXSxbY2xhc3MqPVwiaWNvbi1mb250LTNyZFwiXXsmOmJlZm9yZSwmOmFmdGVye2NvbG9yOiB2YXIoLS1saWJzLXVpLWNvbG9yLWljb24taG92ZXItZGFuZ2VyLCAjZjE1NzY3KSAhaW1wb3J0YW50O319fVxuICAgIC5icmVhay13b3Jke3dvcmQtYnJlYWs6IGJyZWFrLXdvcmQgIWltcG9ydGFudDt9XG4gICAgLmxpYnMtdWktc2hhZG93IHtib3gtc2hhZG93OiAwIDJweCAxMHB4IDFweCByZ2JhKDUxLCA1MSwgNTEsIDAuMSk7fVxuICAgIC5saWJzLXVpLXNoYWRvdy1tZCB7Ym94LXNoYWRvdzogMCA0cHggOHB4IDAgcmdiYSg1MSwgNTEsIDUxLCAwLjEpO31cbiAgICAubGlicy11aS1zaGFkb3ctbGcge2JveC1zaGFkb3c6IDAgMTVweCAzMHB4IDAgcmdiYSg1MSwgNTEsIDUxLCAwLjEpO31cbiAgICAubGlicy11aS1zaGFkb3ctdG9wIHtib3gtc2hhZG93OiAwIC01cHggNXB4IC01cHggcmdiYSg1MSwgNTEsIDUxLCAwLjEpO31cbiAgICAubGlicy11aS1zaGFkb3ctcmlnaHQge2JveC1zaGFkb3c6IC01cHggMCA1cHggLTVweCByZ2JhKDUxLCA1MSwgNTEsIDAuMSk7fVxuICAgIC5saWJzLXVpLXNoYWRvdy1ib3R0b20ge2JveC1zaGFkb3c6IDAgNXB4IDVweCAtNXB4IHJnYmEoNTEsIDUxLCA1MSwgMC4xKTt9XG4gICAgLmxpYnMtdWktc2hhZG93LWxlZnQge2JveC1zaGFkb3c6IDVweCAwIDVweCAtNXB4IHJnYmEoNTEsIDUxLCA1MSwgMC4xKTt9XG4gICAgLmxpYnMtdWktc2hhZG93LXNtIHtib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2JhKDUxLCA1MSwgNTEsIDAuMSk7fVxuICAgIC5saWJzLXVpLXNoYWRvdy1wb3B1cCB7Ym94LXNoYWRvdzogLTJweCAwIDRweCAwIHJnYmEoNTEsIDUxLCA1MSwgMC4xKTt9XG4gICAgLmxpYnMtdWktc2hhZG93LW5vbmUge2JveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDt9XG4gICAgLmxpYnMtdWktc2hhZG93LXNtYWxsIHtib3gtc2hhZG93OiAwcHggMXB4IDJweCAwcHggcmdiYSgwLDIwLDUxLC4wNCksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsMjAsNTEsLjAyKTt9XG4gICAgLmxpYnMtdWktc2hhZG93LW1lZGl1bSB7Ym94LXNoYWRvdzogMHB4IDRweCA4cHggMHB4IHJnYmEoMCwgMjAsIDUxLCAwLjA0KSwgMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMjAsIDUxLCAwLjAyKTt9XG4gICAgLmxpYnMtdWktc2hhZG93LWxhcmdlIHtib3gtc2hhZG93OiAwcHggNHB4IDE2cHggMHB4IHJnYmEoMCwyMCw1MSwuMSksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsMjAsNTEsLjAyKTt9XG4gICAgLmxpYnMtdWktc2hhZG93LWV4dHJhLWxhcmdlIHtib3gtc2hhZG93OiAwcHggOHB4IDU2cHggMHB4IHJnYmEoMCwyMCw1MSwuMDUpLCAwcHggMXB4IDFweCAwcHggcmdiYSgwLDIwLDUxLC4wMik7fVxuICAgIDo6LW1vei1zZWxlY3Rpb24ge2JhY2tncm91bmQ6IHZhcigtLWxpYnMtdWktY29sb3ItYmFja2dyb3VuZC1zZWxlY3Rpb24sICMwMDAwMDA0MCkgIWltcG9ydGFudDt9XG4gICAgOjpzZWxlY3Rpb24ge2JhY2tncm91bmQ6IHZhcigtLWxpYnMtdWktY29sb3ItYmFja2dyb3VuZC1zZWxlY3Rpb24sICMwMDAwMDA0MCkgIWltcG9ydGFudDt9XG4gICAgYC5yZXBsYWNlKC9cXG4rL2csICcnKTtcblxuICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kKHRoaXMuc3R5bGVDbGFzc0dsb2JhbEVsKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uZmlnU3RyaW5nKCkge1xuICAgIGNvbnN0IHByb3RvdHlwZSA9IFN0cmluZy5wcm90b3R5cGUgYXMgYW55O1xuICAgIHByb3RvdHlwZS5yZXBsYWNlQXQgPSBmdW5jdGlvbiAoaW5kZXg6IG51bWJlciwgcmVwbGFjZW1lbnQ6IHN0cmluZykge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5zcGxpdCgnJyk7XG5cbiAgICAgIHZhbHVlc1tpbmRleF0gPSByZXBsYWNlbWVudDtcblxuICAgICAgcmV0dXJuIHZhbHVlcy5qb2luKCcnKTtcbiAgICB9XG5cbiAgICBwcm90b3R5cGUucmVwbGFjZUFsbCA9IGZ1bmN0aW9uIChpbmRleDogbnVtYmVyLCBzZXBhcmF0b3I6IHN0cmluZywgcmVwbGFjZW1lbnQ6IHN0cmluZykge1xuICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHNlcGFyYXRvciwgJ2cnKTtcblxuICAgICAgcmV0dXJuIGAke3RoaXMuc3Vic3RyKDAsIGluZGV4KX0ke3RoaXMuc3Vic3RyKGluZGV4ICsgMSArIChyZXBsYWNlbWVudD8ubGVuZ3RoIHx8IDApKS5yZXBsYWNlKHJlZ2V4LCByZXBsYWNlbWVudCl9YDtcbiAgICB9XG5cbiAgICBwcm90b3R5cGUub2NjdXJyZW5jZXNCeUNoYXJhY3RlciA9IGZ1bmN0aW9uIChjaGFyYWN0ZXI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnNwbGl0KCcnKTtcblxuICAgICAgaWYgKCF2YWx1ZXMgfHwgIXZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZXMuZmlsdGVyKChjaGFyOiBzdHJpbmcpID0+IGNoYXIgPT09IGNoYXJhY3RlcikubGVuZ3RoO1xuICAgIH1cblxuICAgIHByb3RvdHlwZS5pbmRleGVzT2ZDaGFyYWN0ZXIgPSBmdW5jdGlvbiAoY2hhcmFjdGVyOiBzdHJpbmcpOiBBcnJheTxudW1iZXI+IHtcbiAgICAgIGNvbnN0IHZhbHVlczogQXJyYXk8c3RyaW5nPiA9IHRoaXMuc3BsaXQoJycpO1xuICAgICAgY29uc3QgaW5kZXhlczogQXJyYXk8bnVtYmVyPiA9IFtdO1xuXG4gICAgICBpZiAoIXZhbHVlcyB8fCAhdmFsdWVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gaW5kZXhlcztcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgaW5kZXhWYWx1ZSBpbiB2YWx1ZXMpIHtcbiAgICAgICAgaWYgKHZhbHVlc1tpbmRleFZhbHVlXSA9PT0gY2hhcmFjdGVyKSB7XG4gICAgICAgICAgaW5kZXhlcy5wdXNoKCtpbmRleFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5kZXhlcztcbiAgICB9XG5cblxuICAgIHByb3RvdHlwZS5pbmRleGVzQnlTdHJpbmcgPSBmdW5jdGlvbiAoc3RyOiBzdHJpbmcpOiBBcnJheTxudW1iZXI+IHtcbiAgICAgIGNvbnN0IHZhbHVlczogQXJyYXk8c3RyaW5nPiA9IHRoaXMgYXMgYW55O1xuICAgICAgY29uc3QgaW5kZXhlczogQXJyYXk8bnVtYmVyPiA9IFtdO1xuXG4gICAgICBpZiAoIXZhbHVlcyB8fCAhdmFsdWVzLmxlbmd0aCB8fCAhc3RyIHx8ICFzdHIubGVuZ3RoIHx8IHZhbHVlcy5sZW5ndGggPCBzdHIubGVuZ3RoKSB7XG5cbiAgICAgICAgcmV0dXJuIGluZGV4ZXM7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGluZGV4VmFsdWUgaW4gdmFsdWVzKSB7XG4gICAgICAgIGlmICh2YWx1ZXNbaW5kZXhWYWx1ZV0gIT09IHN0clswXSB8fCAoKCtpbmRleFZhbHVlKSArIHN0ci5sZW5ndGgpID4gdmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBpbiBzdHIuc3BsaXQoJycpKSB7XG5cbiAgICAgICAgICBpZiAodmFsdWVzWygraW5kZXhWYWx1ZSkgKyAoK2luZGV4KV0gIT09IHN0cltpbmRleF0pIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpbmRleGVzLnB1c2goK2luZGV4VmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5kZXhlcztcbiAgICB9XG4gIH1cblxufVxuIl19
package/esm2022/index.mjs CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './config-project.service';
2
2
  export * from './config-project.interface';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2NvbmZpZy1wcm9qZWN0L3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsNEJBQTRCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NvbmZpZy1wcm9qZWN0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25maWctcHJvamVjdC5pbnRlcmZhY2UnO1xuIl19
3
+ export * from './config-project-data';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2NvbmZpZy1wcm9qZWN0L3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29uZmlnLXByb2plY3Quc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZy1wcm9qZWN0LmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZy1wcm9qZWN0LWRhdGEnOyJdfQ==