@po-ui/ng-components 18.19.0 → 18.19.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.
- package/esm2022/lib/components/po-field/po-combo/po-combo.component.mjs +41 -41
- package/esm2022/lib/components/po-field/po-datepicker-range/po-datepicker-range.component.mjs +23 -23
- package/esm2022/lib/components/po-field/po-lookup/po-lookup.component.mjs +38 -47
- package/esm2022/lib/po.module.mjs +3 -12
- package/esm2022/lib/services/po-theme/enum/po-theme-type.enum.mjs +1 -4
- package/esm2022/lib/services/po-theme/helpers/po-theme-dark-defaults.constant.mjs +203 -0
- package/esm2022/lib/services/po-theme/helpers/po-theme-light-defaults.constant.mjs +134 -0
- package/esm2022/lib/services/po-theme/helpers/po-theme-poui.constant.mjs +13 -29
- package/esm2022/lib/services/po-theme/index.mjs +4 -7
- package/esm2022/lib/services/po-theme/interfaces/po-theme.interface.mjs +1 -1
- package/esm2022/lib/services/po-theme/po-theme.service.mjs +32 -216
- package/fesm2022/po-ui-ng-components.mjs +555 -816
- package/fesm2022/po-ui-ng-components.mjs.map +1 -1
- package/lib/po.module.d.ts +0 -3
- package/lib/services/po-theme/enum/po-theme-type.enum.d.ts +0 -3
- package/lib/services/po-theme/helpers/{types/po-theme-dark-defaults.constant.d.ts → po-theme-dark-defaults.constant.d.ts} +11 -4
- package/lib/services/po-theme/helpers/po-theme-light-defaults.constant.d.ts +41 -0
- package/lib/services/po-theme/helpers/po-theme-poui.constant.d.ts +1 -5
- package/lib/services/po-theme/index.d.ts +3 -6
- package/lib/services/po-theme/interfaces/po-theme.interface.d.ts +5 -18
- package/lib/services/po-theme/po-theme.service.d.ts +10 -90
- package/package.json +4 -4
- package/po-ui-ng-components-18.19.1.tgz +0 -0
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-update/v14/index.js +1 -1
- package/schematics/ng-update/v15/index.js +1 -1
- package/schematics/ng-update/v16/index.js +1 -1
- package/schematics/ng-update/v17/index.js +1 -1
- package/schematics/ng-update/v18/index.js +2 -2
- package/schematics/ng-update/v2/index.js +1 -1
- package/schematics/ng-update/v3/index.js +1 -1
- package/schematics/ng-update/v4/index.js +1 -1
- package/schematics/ng-update/v5/index.js +1 -1
- package/schematics/ng-update/v6/index.js +1 -1
- package/esm2022/lib/services/po-theme/enum/po-theme-a11y.enum.mjs +0 -30
- package/esm2022/lib/services/po-theme/helpers/accessibilities/po-theme-default-aa.constant.mjs +0 -14
- package/esm2022/lib/services/po-theme/helpers/accessibilities/po-theme-default-aaa.constant.mjs +0 -18
- package/esm2022/lib/services/po-theme/helpers/types/po-theme-dark-defaults.constant.mjs +0 -210
- package/esm2022/lib/services/po-theme/helpers/types/po-theme-light-defaults.constant.mjs +0 -114
- package/lib/services/po-theme/enum/po-theme-a11y.enum.d.ts +0 -28
- package/lib/services/po-theme/helpers/accessibilities/po-theme-default-aa.constant.d.ts +0 -10
- package/lib/services/po-theme/helpers/accessibilities/po-theme-default-aaa.constant.d.ts +0 -14
- package/lib/services/po-theme/helpers/types/po-theme-light-defaults.constant.d.ts +0 -25
- package/po-ui-ng-components-18.19.0.tgz +0 -0
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
import { DOCUMENT } from '@angular/common';
|
|
2
2
|
import { Inject, Injectable, Optional } from '@angular/core';
|
|
3
3
|
import { ICONS_DICTIONARY, PhosphorIconDictionary } from '../../components/po-icon/index';
|
|
4
|
-
import { PoThemeA11yEnum } from './enum/po-theme-a11y.enum';
|
|
5
4
|
import { PoThemeTypeEnum } from './enum/po-theme-type.enum';
|
|
6
|
-
import { poThemeDefaultAA } from './helpers/accessibilities/po-theme-default-aa.constant';
|
|
7
|
-
import { poThemeDefaultAAA } from './helpers/accessibilities/po-theme-default-aaa.constant';
|
|
8
|
-
import { poThemeDefaultLightValues } from './helpers/types/po-theme-light-defaults.constant';
|
|
9
|
-
import { poThemeDefaultDarkValues } from './helpers/types/po-theme-dark-defaults.constant';
|
|
10
5
|
import { poThemeDefault } from './helpers/po-theme-poui.constant';
|
|
11
6
|
import * as i0 from "@angular/core";
|
|
12
7
|
/**
|
|
@@ -31,7 +26,7 @@ export class PoThemeService {
|
|
|
31
26
|
window;
|
|
32
27
|
document;
|
|
33
28
|
renderer;
|
|
34
|
-
theme;
|
|
29
|
+
theme = poThemeDefault;
|
|
35
30
|
_iconToken;
|
|
36
31
|
get iconNameLib() {
|
|
37
32
|
return this._iconToken.NAME_LIB;
|
|
@@ -41,37 +36,24 @@ export class PoThemeService {
|
|
|
41
36
|
this.document = document;
|
|
42
37
|
this.renderer = rendererFactory.createRenderer(null, null);
|
|
43
38
|
this._iconToken = value ?? PhosphorIconDictionary;
|
|
44
|
-
// set triple A for all themes (its the base theme)
|
|
45
|
-
// result: html:root
|
|
46
|
-
this.setPerComponentAndOnRoot(undefined, poThemeDefaultAAA.perComponent, poThemeDefaultAAA.onRoot);
|
|
47
|
-
// set double A
|
|
48
|
-
// result: html[class*="-AA"]:root
|
|
49
|
-
this.setPerComponentAndOnRoot({ a11y: PoThemeA11yEnum.AA }, poThemeDefaultAA.perComponent, poThemeDefaultAA.onRoot);
|
|
50
|
-
// set Light mode values
|
|
51
|
-
// result: html[class*="-light"]:root
|
|
52
|
-
this.setPerComponentAndOnRoot({ type: PoThemeTypeEnum.light }, poThemeDefaultLightValues.perComponent, poThemeDefaultLightValues.onRoot);
|
|
53
|
-
// set Dark mode values
|
|
54
|
-
// result: html[class*="-dark"]:root
|
|
55
|
-
this.setPerComponentAndOnRoot({ type: PoThemeTypeEnum.dark }, poThemeDefaultDarkValues.perComponent, poThemeDefaultDarkValues.onRoot);
|
|
56
39
|
}
|
|
57
40
|
/**
|
|
58
|
-
*
|
|
41
|
+
* Define o tema a ser aplicado no componente, de acordo com o tipo de tema especificado.
|
|
59
42
|
*
|
|
60
|
-
* Este método
|
|
61
|
-
*
|
|
43
|
+
* Este método define o tema a ser aplicado no componente com base no objeto `theme` fornecido e no tipo de tema especificado.
|
|
44
|
+
* Ele atualiza as propriedades do componente para refletir o tema selecionado, como cores, estilos e comportamentos.
|
|
62
45
|
*
|
|
63
|
-
* @param {PoTheme}
|
|
64
|
-
* @param {PoThemeTypeEnum} [themeType=PoThemeTypeEnum.light] - (Opcional) Tipo de tema, podendo ser 'light' (claro) ou 'dark' (escuro).
|
|
65
|
-
* @param {PoThemeA11yEnum} [a11yLevel=PoThemeA11yEnum.AAA] - (Opcional) Nível de acessibilidade do tema, podendo ser AA ou AAA. Padrão é AAA.
|
|
66
|
-
* @param {boolean} [persistPreference=true] - (Opcional) Define se a preferência de tema deve ser salva no localStorage para persistência. `true` para salvar, `false` para não salvar.
|
|
46
|
+
* @param {PoTheme} theme - Objeto contendo as definições de tema a serem aplicadas no componente.
|
|
47
|
+
* @param {PoThemeTypeEnum} [themeType=PoThemeTypeEnum.light] - (Opcional) Tipo de tema a ser aplicado, podendo ser 'light' (claro) ou 'dark' (escuro). Por padrão, o tema claro é aplicado.
|
|
67
48
|
*/
|
|
68
|
-
setTheme(
|
|
49
|
+
setTheme(theme, themeType = PoThemeTypeEnum.light) {
|
|
69
50
|
// Change theme name, remove special characteres and number, replace space with dash
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
51
|
+
theme.name = theme.name
|
|
52
|
+
.toLowerCase()
|
|
53
|
+
.replace(/[^a-zA-Z ]/g, '')
|
|
54
|
+
.replace(/\s+/g, '-');
|
|
55
|
+
theme.active = themeType;
|
|
56
|
+
const _themeType = theme.type[PoThemeTypeEnum[themeType]];
|
|
75
57
|
if (!_themeType) {
|
|
76
58
|
return;
|
|
77
59
|
}
|
|
@@ -80,91 +62,14 @@ export class PoThemeService {
|
|
|
80
62
|
const onRootStyles = _themeType.onRoot ? this.generateAdditionalStyles(_themeType.onRoot) : '';
|
|
81
63
|
const additionalStyles = this.generateAdditionalStyles(_themeType);
|
|
82
64
|
const combinedStyles = `
|
|
83
|
-
|
|
65
|
+
.${theme.name}-${PoThemeTypeEnum[themeType]}:root {
|
|
84
66
|
${colorStyles}
|
|
85
67
|
${perComponentStyles}
|
|
86
68
|
${onRootStyles}
|
|
87
69
|
${additionalStyles}
|
|
88
70
|
}`;
|
|
89
71
|
this.applyThemeStyles(combinedStyles);
|
|
90
|
-
this.changeThemeType(
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* @docsPrivate
|
|
94
|
-
*
|
|
95
|
-
* Aplica estilos customizados para o componente e para o root HTML, utilizando os tokens definidos.
|
|
96
|
-
*
|
|
97
|
-
* Esse método é chamado para inserir ou atualizar estilos no DOM, aplicando tanto tokens de `onRoot` (ex: `--font-family: 'Roboto'`)
|
|
98
|
-
* quanto estilos específicos de componentes (`perComponent`, como `po-listbox [hidden]: { display: 'flex !important' }`).
|
|
99
|
-
*
|
|
100
|
-
* O seletor CSS gerado leva em consideração o tema (`type`) e as configurações de acessibilidade (`a11y`) do tema ativo.
|
|
101
|
-
* A classe do tema é aplicada no HTML e pode ser formatada como `html[class*="-light-AA"]` para personalizações
|
|
102
|
-
* em temas específicos.
|
|
103
|
-
*
|
|
104
|
-
* @param {PoThemeActive} active - Objeto que define o tema ativo, com `type` e `a11y`.
|
|
105
|
-
* @param {any} perComponent - Objeto contendo os estilos específicos para componentes a serem aplicados.
|
|
106
|
-
* @param {any} onRoot - Objeto contendo tokens de estilo que serão aplicados diretamente no seletor `:root` do HTML.
|
|
107
|
-
*
|
|
108
|
-
* @example
|
|
109
|
-
*
|
|
110
|
-
* // Exemplo de utilização com um tema ativo e tokens de estilo
|
|
111
|
-
* const themeActive = { type: 'light', a11y: 'AA' };
|
|
112
|
-
* const perComponentStyles = {
|
|
113
|
-
* 'po-listbox [hidden]': {
|
|
114
|
-
* 'display': 'flex !important'
|
|
115
|
-
* }
|
|
116
|
-
* };
|
|
117
|
-
* const onRootStyles = {
|
|
118
|
-
* '--font-family': 'Roboto',
|
|
119
|
-
* '--background-color': '#fff'
|
|
120
|
-
* };
|
|
121
|
-
*
|
|
122
|
-
* this.setPerComponentAndOnRoot(themeActive, perComponentStyles, onRootStyles);
|
|
123
|
-
*
|
|
124
|
-
* // Resultado:
|
|
125
|
-
* // Gera e aplica os seguintes estilos no DOM
|
|
126
|
-
* // html[class*="-light-AA"]:root {
|
|
127
|
-
* // --font-family: 'Roboto';
|
|
128
|
-
* // --background-color: '#fff';
|
|
129
|
-
* // po-listbox [hidden] {
|
|
130
|
-
* // display: flex !important;
|
|
131
|
-
* // }
|
|
132
|
-
* // }
|
|
133
|
-
*
|
|
134
|
-
*/
|
|
135
|
-
setPerComponentAndOnRoot(active, perComponent, onRoot) {
|
|
136
|
-
const perComponentStyles = perComponent ? this.generatePerComponentStyles(perComponent) : '';
|
|
137
|
-
const onRootStyles = onRoot ? this.generateAdditionalStyles(onRoot) : '';
|
|
138
|
-
let selector = 'html';
|
|
139
|
-
const typeSelector = active?.type !== undefined ? `-${PoThemeTypeEnum[active.type]}` : '';
|
|
140
|
-
const accessibilitySelector = active?.a11y !== undefined ? `-${PoThemeA11yEnum[active.a11y]}` : '';
|
|
141
|
-
if (typeSelector && accessibilitySelector) {
|
|
142
|
-
selector += `[class*="${typeSelector}${accessibilitySelector}"]`;
|
|
143
|
-
}
|
|
144
|
-
else if (!typeSelector && accessibilitySelector) {
|
|
145
|
-
selector += `[class$="${accessibilitySelector}"]`;
|
|
146
|
-
}
|
|
147
|
-
else if (typeSelector) {
|
|
148
|
-
selector += `[class*="${typeSelector}"]`;
|
|
149
|
-
}
|
|
150
|
-
const styleCss = `
|
|
151
|
-
${selector}:root {
|
|
152
|
-
${perComponentStyles}
|
|
153
|
-
${onRootStyles}
|
|
154
|
-
}
|
|
155
|
-
`;
|
|
156
|
-
let styleElement = this.document.head.querySelector('#baseStyle');
|
|
157
|
-
if (!styleElement) {
|
|
158
|
-
styleElement = this.renderer.createElement('style');
|
|
159
|
-
styleElement.id = 'baseStyle';
|
|
160
|
-
this.renderer.appendChild(styleElement, this.renderer.createText(styleCss));
|
|
161
|
-
this.renderer.appendChild(this.document.head, styleElement);
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
if (!styleElement.textContent.includes(styleCss.trim())) {
|
|
165
|
-
this.renderer.appendChild(styleElement, this.renderer.createText(styleCss));
|
|
166
|
-
}
|
|
167
|
-
}
|
|
72
|
+
this.changeThemeType(theme);
|
|
168
73
|
}
|
|
169
74
|
/**
|
|
170
75
|
* @docsPrivate
|
|
@@ -186,23 +91,17 @@ export class PoThemeService {
|
|
|
186
91
|
* @param styleCss Os estilos CSS a serem aplicados.
|
|
187
92
|
*/
|
|
188
93
|
applyThemeStyles(styleCss) {
|
|
189
|
-
const styleElement = this.createStyleElement(styleCss
|
|
190
|
-
const existingStyleElement = document.head.querySelector('#
|
|
94
|
+
const styleElement = this.createStyleElement(styleCss);
|
|
95
|
+
const existingStyleElement = document.head.querySelector('#pouiTheme');
|
|
191
96
|
if (existingStyleElement) {
|
|
192
97
|
this.renderer.removeChild(document.head, existingStyleElement);
|
|
193
98
|
}
|
|
194
99
|
this.renderer.appendChild(document.head, styleElement);
|
|
195
100
|
}
|
|
196
|
-
changeThemeType(theme
|
|
197
|
-
this.cleanThemeActive(
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
}
|
|
201
|
-
document
|
|
202
|
-
.getElementsByTagName('html')[0]
|
|
203
|
-
.classList.add(...[
|
|
204
|
-
`${theme.name}-${PoThemeTypeEnum[this.getActiveTypeFromTheme(theme.active)]}-${PoThemeA11yEnum[this.getActiveA11yFromTheme(theme.active)]}`
|
|
205
|
-
]);
|
|
101
|
+
changeThemeType(theme) {
|
|
102
|
+
this.cleanThemeActive();
|
|
103
|
+
this.setThemeActive(theme);
|
|
104
|
+
document.getElementsByTagName('html')[0].classList.add(...[`${theme.name}-${PoThemeTypeEnum[theme.active]}`]);
|
|
206
105
|
}
|
|
207
106
|
/**
|
|
208
107
|
* Persiste e define o tema do aplicativo com base nos dados armazenados.
|
|
@@ -213,35 +112,9 @@ export class PoThemeService {
|
|
|
213
112
|
*/
|
|
214
113
|
persistThemeActive() {
|
|
215
114
|
const _theme = this.getThemeActive();
|
|
216
|
-
this.setTheme(_theme,
|
|
115
|
+
this.setTheme(_theme, _theme.active);
|
|
217
116
|
return _theme;
|
|
218
117
|
}
|
|
219
|
-
formatTheme(themeConfig, themeType, a11yLevel) {
|
|
220
|
-
themeConfig.name = themeConfig.name
|
|
221
|
-
.toLowerCase()
|
|
222
|
-
.replace(/[^a-zA-Z ]/g, '')
|
|
223
|
-
.replace(/\s+/g, '-');
|
|
224
|
-
themeConfig.active = { type: themeType, a11y: a11yLevel };
|
|
225
|
-
}
|
|
226
|
-
applyTheme(theme) {
|
|
227
|
-
const _localTheme = this.getThemeActive();
|
|
228
|
-
if (!theme) {
|
|
229
|
-
if (_localTheme) {
|
|
230
|
-
this.persistThemeActive();
|
|
231
|
-
return _localTheme;
|
|
232
|
-
}
|
|
233
|
-
return undefined;
|
|
234
|
-
}
|
|
235
|
-
const _type = this.getActiveTypeFromTheme(theme.active);
|
|
236
|
-
const _accessibility = this.getActiveA11yFromTheme(theme.active);
|
|
237
|
-
if (_localTheme && JSON.stringify(_localTheme) === JSON.stringify(theme)) {
|
|
238
|
-
this.persistThemeActive();
|
|
239
|
-
return _localTheme;
|
|
240
|
-
}
|
|
241
|
-
this.formatTheme(theme, _type, _accessibility);
|
|
242
|
-
this.setTheme(theme, _type, _accessibility);
|
|
243
|
-
return theme;
|
|
244
|
-
}
|
|
245
118
|
/**
|
|
246
119
|
* Altera o tipo do tema armazenado e aplica os novos estilos ao documento.
|
|
247
120
|
*
|
|
@@ -251,35 +124,17 @@ export class PoThemeService {
|
|
|
251
124
|
*/
|
|
252
125
|
changeCurrentThemeType(type) {
|
|
253
126
|
const _theme = this.getThemeActive();
|
|
254
|
-
|
|
127
|
+
_theme.active = type;
|
|
255
128
|
this.changeThemeType(_theme);
|
|
256
129
|
}
|
|
257
130
|
/**
|
|
258
131
|
* Método remove o tema armazenado e limpa todos os estilos de tema
|
|
259
132
|
* aplicados ao documento.
|
|
260
|
-
*
|
|
261
|
-
* @param {boolean} [persistPreference=true] - (Opcional) Define se a preferência de tema não deve ser mantida no localStorage para persistência. `true` para remover, `false` para manter.
|
|
262
133
|
*/
|
|
263
|
-
cleanThemeActive(
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
// Converte `classList` em um array e remove as classes que terminam com os sufixos especificados
|
|
268
|
-
Array.from(htmlElement.classList).forEach(className => {
|
|
269
|
-
if (themeSuffixes.some(suffix => className.includes(suffix))) {
|
|
270
|
-
htmlElement.classList.remove(className);
|
|
271
|
-
}
|
|
272
|
-
});
|
|
273
|
-
// Remove o tema ativo do localStorage
|
|
274
|
-
if (persistPreference) {
|
|
275
|
-
localStorage.removeItem('totvs-theme');
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
getActiveTypeFromTheme(active) {
|
|
279
|
-
return typeof active === 'object' ? active.type : active;
|
|
280
|
-
}
|
|
281
|
-
getActiveA11yFromTheme(active) {
|
|
282
|
-
return typeof active === 'object' ? active.a11y : PoThemeA11yEnum.AAA;
|
|
134
|
+
cleanThemeActive() {
|
|
135
|
+
const _theme = this.getThemeActive();
|
|
136
|
+
document.getElementsByTagName('html')[0].classList.remove(`${_theme.name}-${PoThemeTypeEnum[_theme.active]}`);
|
|
137
|
+
localStorage.removeItem('totvs-theme');
|
|
283
138
|
}
|
|
284
139
|
/**
|
|
285
140
|
* @docsPrivate
|
|
@@ -287,7 +142,7 @@ export class PoThemeService {
|
|
|
287
142
|
* Este método define um dados do tema e o armazena.
|
|
288
143
|
* @param theme Os tokens de tema contendo os estilos adicionais a serem gerados.
|
|
289
144
|
*/
|
|
290
|
-
|
|
145
|
+
setThemeActive(theme) {
|
|
291
146
|
if (theme) {
|
|
292
147
|
localStorage.setItem('totvs-theme', JSON.stringify(theme));
|
|
293
148
|
this.theme = theme;
|
|
@@ -313,13 +168,12 @@ export class PoThemeService {
|
|
|
313
168
|
* @docsPrivate
|
|
314
169
|
*
|
|
315
170
|
* Gera estilos CSS com base nos tokens de cores fornecidos.
|
|
316
|
-
* @param
|
|
317
|
-
* @param id id do style a ser aplicado.
|
|
171
|
+
* @param themeColor Os tokens de cor a serem usados para gerar os estilos.
|
|
318
172
|
* @returns Uma string contendo os estilos CSS gerados.
|
|
319
173
|
*/
|
|
320
|
-
createStyleElement(css
|
|
174
|
+
createStyleElement(css) {
|
|
321
175
|
const styleElement = this.renderer.createElement('style');
|
|
322
|
-
styleElement.id =
|
|
176
|
+
styleElement.id = 'pouiTheme';
|
|
323
177
|
this.renderer.appendChild(styleElement, this.renderer.createText(css));
|
|
324
178
|
return styleElement;
|
|
325
179
|
}
|
|
@@ -424,44 +278,6 @@ export class PoThemeService {
|
|
|
424
278
|
svg = svg.concat(`%3E%3C/path%3E%3C/svg%3E");`);
|
|
425
279
|
return svg;
|
|
426
280
|
}
|
|
427
|
-
/**
|
|
428
|
-
* Define o tipo (light/dark) quando um tema está sendo aplicado.
|
|
429
|
-
*
|
|
430
|
-
* @param {PoTheme} theme - Objeto contendo as definições de tema a serem aplicadas no componente.
|
|
431
|
-
* @param {PoThemeTypeEnum} [themeType=PoThemeTypeEnum.light] - (Opcional) Tipo de tema a ser aplicado, podendo ser 'light' (claro) ou 'dark' (escuro). Por padrão, o tema claro é aplicado.
|
|
432
|
-
*/
|
|
433
|
-
setThemeType(theme, themeType = PoThemeTypeEnum.light) {
|
|
434
|
-
const _accessibility = typeof theme.active === 'object' ? theme.active.a11y : PoThemeA11yEnum.AAA;
|
|
435
|
-
this.setTheme(theme, themeType, _accessibility);
|
|
436
|
-
}
|
|
437
|
-
/**
|
|
438
|
-
* Define o tipo (light/dark) para um tema já ativo.
|
|
439
|
-
*
|
|
440
|
-
* @param {PoThemeTypeEnum} [themeType=PoThemeTypeEnum.light] - (Opcional) Tipo de tema a ser aplicado, podendo ser 'light' (claro) ou 'dark' (escuro). Por padrão, o tema claro é aplicado.
|
|
441
|
-
*/
|
|
442
|
-
setCurrentThemeType(themeType = PoThemeTypeEnum.light) {
|
|
443
|
-
const _theme = this.getThemeActive();
|
|
444
|
-
this.setThemeType(_theme, themeType);
|
|
445
|
-
}
|
|
446
|
-
/**
|
|
447
|
-
* Define o nivel de acessibilidade quando um tema está sendo aplicado.
|
|
448
|
-
*
|
|
449
|
-
* @param {PoTheme} theme - Objeto contendo as definições de tema a serem aplicadas no componente.
|
|
450
|
-
* @param {PoThemeA11yEnum} [a11y=PoThemeA11yEnum.AAA] - (Opcional) Nível de acessibilidade a ser aplicado ao tema, como AA ou AAA. Se não for informado, por padrão a acessibilidade será AAA.
|
|
451
|
-
*/
|
|
452
|
-
setThemeA11y(theme, a11y = PoThemeA11yEnum.AAA) {
|
|
453
|
-
const _type = (typeof theme.active === 'object' ? theme.active.type : theme.active) || 0;
|
|
454
|
-
this.setTheme(theme, _type, a11y);
|
|
455
|
-
}
|
|
456
|
-
/**
|
|
457
|
-
* Define o nivel de acessibilidade para um tema já ativo.
|
|
458
|
-
*
|
|
459
|
-
* @param {PoThemeA11yEnum} [a11y=PoThemeA11yEnum.AAA] - (Opcional) Nível de acessibilidade a ser aplicado ao tema, como AA ou AAA. Se não for informado, por padrão a acessibilidade será AAA.
|
|
460
|
-
*/
|
|
461
|
-
setCurrentThemeA11y(a11y = PoThemeA11yEnum.AAA) {
|
|
462
|
-
const _theme = this.getThemeActive();
|
|
463
|
-
this.setThemeA11y(_theme, a11y);
|
|
464
|
-
}
|
|
465
281
|
static ɵfac = function PoThemeService_Factory(t) { return new (t || PoThemeService)(i0.ɵɵinject('Window'), i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(i0.RendererFactory2), i0.ɵɵinject(ICONS_DICTIONARY, 8)); };
|
|
466
282
|
static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: PoThemeService, factory: PoThemeService.ɵfac, providedIn: 'root' });
|
|
467
283
|
}
|
|
@@ -482,4 +298,4 @@ export class PoThemeService {
|
|
|
482
298
|
type: Inject,
|
|
483
299
|
args: [ICONS_DICTIONARY]
|
|
484
300
|
}] }], null); })();
|
|
485
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tdGhlbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvc2VydmljZXMvcG8tdGhlbWUvcG8tdGhlbWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUErQixNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUsxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQzVGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7QUFFbEU7Ozs7Ozs7O0dBUUc7QUFFSDs7Ozs7Ozs7R0FRRztBQUlILE1BQU0sT0FBTyxjQUFjO0lBVUc7SUFDQTtJQVZwQixRQUFRLENBQVk7SUFDcEIsS0FBSyxDQUFVO0lBQ2YsVUFBVSxDQUE0QjtJQUU5QyxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxZQUM0QixNQUFjLEVBQ2QsUUFBa0IsRUFDNUMsZUFBaUMsRUFDSyxLQUFnQztRQUg1QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FB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Q2YsTUFBTTt1QkFBQyxRQUFROztzQkFFZixRQUFROztzQkFBSSxNQUFNO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwsIFJlbmRlcmVyMiwgUmVuZGVyZXJGYWN0b3J5MiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUNPTlNfRElDVElPTkFSWSwgUGhvc3Bob3JJY29uRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcG8taWNvbi9pbmRleCc7XG5cbmltcG9ydCB7IFBvVGhlbWVDb2xvciB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby10aGVtZS1jb2xvci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9UaGVtZVRva2VucyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby10aGVtZS10b2tlbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvVGhlbWUsIFBvVGhlbWVBY3RpdmUgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tdGhlbWUuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvVGhlbWVBMTF5RW51bSB9IGZyb20gJy4vZW51bS9wby10aGVtZS1hMTF5LmVudW0nO1xuaW1wb3J0IHsgUG9UaGVtZVR5cGVFbnVtIH0gZnJvbSAnLi9lbnVtL3BvLXRoZW1lLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBwb1RoZW1lRGVmYXVsdEFBIH0gZnJvbSAnLi9oZWxwZXJzL2FjY2Vzc2liaWxpdGllcy9wby10aGVtZS1kZWZhdWx0LWFhLmNvbnN0YW50JztcbmltcG9ydCB7IHBvVGhlbWVEZWZhdWx0QUFBIH0gZnJvbSAnLi9oZWxwZXJzL2FjY2Vzc2liaWxpdGllcy9wby10aGVtZS1kZWZhdWx0LWFhYS5jb25zdGFudCc7XG5pbXBvcnQgeyBwb1RoZW1lRGVmYXVsdExpZ2h0VmFsdWVzIH0gZnJvbSAnLi9oZWxwZXJzL3R5cGVzL3BvLXRoZW1lLWxpZ2h0LWRlZmF1bHRzLmNvbnN0YW50JztcbmltcG9ydCB7IHBvVGhlbWVEZWZhdWx0RGFya1ZhbHVlcyB9IGZyb20gJy4vaGVscGVycy90eXBlcy9wby10aGVtZS1kYXJrLWRlZmF1bHRzLmNvbnN0YW50JztcbmltcG9ydCB7IHBvVGhlbWVEZWZhdWx0IH0gZnJvbSAnLi9oZWxwZXJzL3BvLXRoZW1lLXBvdWkuY29uc3RhbnQnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIE8gYFBvVGhlbWVTZXJ2aWNlYCBwb3NzaWJpbGl0YSBhIHBlcnNvbmFsaXphw6fDo28gZGFzIGNvcmVzIGRvIHRlbWEgcGFkcsOjbyBkbyBgUE8tVUlgLCBwZXJtaXRpbmRvIGEgYWx0ZXJhw6fDo28gZG9zIHZhbG9yZXMgZGFzIHZhcmnDoXZlaXMgZGUgZXN0aWxvIHVzYWRhcyBubyBDU1MgcGFkcsOjby5cbiAqXG4gKiA+IFBhcmEgc2FiZXIgbWFpcyBzb2JyZSBjb21vIGN1c3RvbWl6YXIgYXMgY29yZXMgZG8gdGVtYSBwYWRyw6NvIHZlcmlmaXF1ZSBvIGl0ZW0gW0N1c3RvbWl6YW5kbyBjb3JlcyBkbyB0ZW1hIHBhZHLDo29dKGh0dHBzOi8vcG8tdWkuaW8vZ3VpZGVzL2NvbG9ycy1jdXN0b21pemF0aW9uKSBuYSBhYmEgYEd1aWFzYC5cbiAqXG4gKiA+IE9icy46IE7Do28gZXN0w6EgZG9jdW1lbnRhZG8gYXF1aSBlIG7Do28gaW5kaWNhbW9zIGEgY3VzdG9taXphw6fDo28gZGFzIGNvcmVzIGRlICdmZWVkYmFjaycgcG9yIG1vdGl2b3MgZGUgYWNlc3NpYmlsaWRhZGUgZSB1c2FiaWxpZGFkZS5cbiAqL1xuXG4vKipcbiAqIEBleGFtcGxlXG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXRoZW1lLWxhYnNcIiB0aXRsZT1cIlBPIFRoZW1lIExhYnNcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXRoZW1lLWxhYnMvc2FtcGxlLXBvLXRoZW1lLWxhYnMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGhlbWUtbGFicy9zYW1wbGUtcG8tdGhlbWUtbGFicy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUG9UaGVtZVNlcnZpY2Uge1xuICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjI7XG4gIHByaXZhdGUgdGhlbWU6IFBvVGhlbWU7XG4gIHByaXZhdGUgX2ljb25Ub2tlbjogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICBnZXQgaWNvbk5hbWVMaWIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ljb25Ub2tlbi5OQU1FX0xJQjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoJ1dpbmRvdycpIHByaXZhdGUgd2luZG93OiBXaW5kb3csXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgcmVuZGVyZXJGYWN0b3J5OiBSZW5kZXJlckZhY3RvcnkyLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSUNPTlNfRElDVElPTkFSWSkgdmFsdWU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1cbiAgKSB7XG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyRmFjdG9yeS5jcmVhdGVSZW5kZXJlcihudWxsLCBudWxsKTtcbiAgICB0aGlzLl9pY29uVG9rZW4gPSB2YWx1ZSA/PyBQaG9zcGhvckljb25EaWN0aW9uYXJ5O1xuXG4gICAgLy8gc2V0IHRyaXBsZSBBIGZvciBhbGwgdGhlbWVzIChpdHMgdGhlIGJhc2UgdGhlbWUpXG4gICAgLy8gcmVzdWx0OiBodG1sOnJvb3RcbiAgICB0aGlzLnNldFBlckNvbXBvbmVudEFuZE9uUm9vdCh1bmRlZmluZWQsIHBvVGhlbWVEZWZhdWx0QUFBLnBlckNvbXBvbmVudCwgcG9UaGVtZURlZmF1bHRBQUEub25Sb290KTtcblxuICAgIC8vIHNldCBkb3VibGUgQVxuICAgIC8vIHJlc3VsdDogaHRtbFtjbGFzcyo9XCItQUFcIl06cm9vdFxuICAgIHRoaXMuc2V0UGVyQ29tcG9uZW50QW5kT25Sb290KHsgYTExeTogUG9UaGVtZUExMXlFbnVtLkFBIH0sIHBvVGhlbWVEZWZhdWx0QUEucGVyQ29tcG9uZW50LCBwb1RoZW1lRGVmYXVsdEFBLm9uUm9vdCk7XG5cbiAgICAvLyBzZXQgTGlnaHQgbW9kZSB2YWx1ZXNcbiAgICAvLyByZXN1bHQ6IGh0bWxbY2xhc3MqPVwiLWxpZ2h0XCJdOnJvb3RcbiAgICB0aGlzLnNldFBlckNvbXBvbmVudEFuZE9uUm9vdChcbiAgICAgIHsgdHlwZTogUG9UaGVtZVR5cGVFbnVtLmxpZ2h0IH0sXG4gICAgICBwb1RoZW1lRGVmYXVsdExpZ2h0VmFsdWVzLnBlckNvbXBvbmVudCxcbiAgICAgIHBvVGhlbWVEZWZhdWx0TGlnaHRWYWx1ZXMub25Sb290XG4gICAgKTtcblxuICAgIC8vIHNldCBEYXJrIG1vZGUgdmFsdWVzXG4gICAgLy8gcmVzdWx0OiBodG1sW2NsYXNzKj1cIi1kYXJrXCJdOnJvb3RcbiAgICB0aGlzLnNldFBlckNvbXBvbmVudEFuZE9uUm9vdChcbiAgICAgIHsgdHlwZTogUG9UaGVtZVR5cGVFbnVtLmRhcmsgfSxcbiAgICAgIHBvVGhlbWVEZWZhdWx0RGFya1ZhbHVlcy5wZXJDb21wb25lbnQsXG4gICAgICBwb1RoZW1lRGVmYXVsdERhcmtWYWx1ZXMub25Sb290XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcGxpY2EgdW0gdGVtYSBhbyBjb21wb25lbnRlIGRlIGFjb3JkbyBjb20gbyB0aXBvIGRlIHRlbWEgZSBvIG7DrXZlbCBkZSBhY2Vzc2liaWxpZGFkZSBlc3BlY2lmaWNhZG9zLlxuICAgKlxuICAgKiBFc3RlIG3DqXRvZG8gY29uZmlndXJhIG8gdGVtYSBkbyBjb21wb25lbnRlIGNvbSBiYXNlIG5vIG9iamV0byBgdGhlbWVDb25maWdgIGZvcm5lY2lkbywgbm8gYHRoZW1lVHlwZWAgZSBubyBgYTExeUxldmVsYC5cbiAgICogQWzDqW0gZGlzc28sIGVsZSBwb2RlIG9wY2lvbmFsbWVudGUgc2FsdmFyIGEgcHJlZmVyw6puY2lhIGRlIHRlbWEgbm8gbG9jYWxTdG9yYWdlLCBzZSBzb2xpY2l0YWRvLlxuICAgKlxuICAgKiBAcGFyYW0ge1BvVGhlbWV9IHRoZW1lQ29uZmlnIC0gQ29uZmlndXJhw6fDo28gZGUgdGVtYSBhIHNlciBhcGxpY2FkYSBhbyBjb21wb25lbnRlLlxuICAgKiBAcGFyYW0ge1BvVGhlbWVUeXBlRW51bX0gW3RoZW1lVHlwZT1Qb1RoZW1lVHlwZUVudW0ubGlnaHRdIC0gKE9wY2lvbmFsKSBUaXBvIGRlIHRlbWEsIHBvZGVuZG8gc2VyICdsaWdodCcgKGNsYXJvKSBvdSAnZGFyaycgKGVzY3VybykuIE8gdGVtYSBjbGFybyDDqSBvIHBhZHLDo28uXG4gICAqIEBwYXJhbSB7UG9UaGVtZUExMXlFbnVtfSBbYTExeUxldmVsPVBvVGhlbWVBMTF5RW51bS5BQUFdIC0gKE9wY2lvbmFsKSBOw612ZWwgZGUgYWNlc3NpYmlsaWRhZGUgZG8gdGVtYSwgcG9kZW5kbyBzZXIgQUEgb3UgQUFBLiBQYWRyw6NvIMOpIEFBQS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbcGVyc2lzdFByZWZlcmVuY2U9dHJ1ZV0gLSAoT3BjaW9uYWwpIERlZmluZSBzZSBhIHByZWZlcsOqbmNpYSBkZSB0ZW1hIGRldmUgc2VyIHNhbHZhIG5vIGxvY2FsU3RvcmFnZSBwYXJhIHBlcnNpc3TDqm5jaWEuIGB0cnVlYCBwYXJhIHNhbHZhciwgYGZhbHNlYCBwYXJhIG7Do28gc2FsdmFyLlxuICAgKi9cbiAgc2V0VGhlbWUoXG4gICAgdGhlbWVDb25maWc6IFBvVGhlbWUsXG4gICAgdGhlbWVUeXBlOiBQb1RoZW1lVHlwZUVudW0gPSBQb1RoZW1lVHlwZUVudW0ubGlnaHQsXG4gICAgYTExeUxldmVsOiBQb1RoZW1lQTExeUVudW0gPSBQb1RoZW1lQTExeUVudW0uQUFBLFxuICAgIHBlcnNpc3RQcmVmZXJlbmNlOiBib29sZWFuID0gdHJ1ZVxuICApOiB2b2lkIHtcbiAgICAvLyBDaGFuZ2UgdGhlbWUgbmFtZSwgcmVtb3ZlIHNwZWNpYWwgY2hhcmFjdGVyZXMgYW5kIG51bWJlciwgcmVwbGFjZSBzcGFjZSB3aXRoIGRhc2hcbiAgICB0aGlzLmZvcm1hdFRoZW1lKHRoZW1lQ29uZmlnLCB0aGVtZVR5cGUsIGExMXlMZXZlbCk7XG5cbiAgICBjb25zdCBfdGhlbWVBY3RpdmUgPVxuICAgICAgQXJyYXkuaXNBcnJheSh0aGVtZUNvbmZpZy50eXBlKSAmJiB0aGVtZUNvbmZpZy50eXBlLmxlbmd0aCA+PSAxXG4gICAgICAgID8gdGhlbWVDb25maWcudHlwZS5maW5kKGUgPT4gZS5hMTF5ID09PSBhMTF5TGV2ZWwpXG4gICAgICAgIDogdGhlbWVDb25maWcudHlwZTtcblxuICAgIGNvbnN0IF90aGVtZVR5cGUgPSBfdGhlbWVBY3RpdmVbUG9UaGVtZVR5cGVFbnVtW3RoZW1lVHlwZV1dO1xuICAgIGlmICghX3RoZW1lVHlwZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbG9yU3R5bGVzID0gX3RoZW1lVHlwZS5jb2xvciA/IHRoaXMuZ2VuZXJhdGVUaGVtZVN0eWxlcyhfdGhlbWVUeXBlLmNvbG9yKSA6ICcnO1xuICAgIGNvbnN0IHBlckNvbXBvbmVudFN0eWxlcyA9IF90aGVtZVR5cGUucGVyQ29tcG9uZW50ID8gdGhpcy5nZW5lcmF0ZVBlckNvbXBvbmVudFN0eWxlcyhfdGhlbWVUeXBlLnBlckNvbXBvbmVudCkgOiAnJztcbiAgICBjb25zdCBvblJvb3RTdHlsZXMgPSBfdGhlbWVUeXBlLm9uUm9vdCA/IHRoaXMuZ2VuZXJhdGVBZGRpdGlvbmFsU3R5bGVzKF90aGVtZVR5cGUub25Sb290KSA6ICcnO1xuICAgIGNvbnN0IGFkZGl0aW9uYWxTdHlsZXMgPSB0aGlzLmdlbmVyYXRlQWRkaXRpb25hbFN0eWxlcyhfdGhlbWVUeXBlKTtcblxuICAgIGNvbnN0IGNvbWJpbmVkU3R5bGVzID0gYFxuICAgICAgaHRtbC4ke3RoZW1lQ29uZmlnLm5hbWV9LSR7UG9UaGVtZVR5cGVFbnVtW3RoZW1lVHlwZV19LSR7YTExeUxldmVsfTpyb290IHtcbiAgICAgICAgJHtjb2xvclN0eWxlc31cbiAgICAgICAgJHtwZXJDb21wb25lbnRTdHlsZXN9XG4gICAgICAgICR7b25Sb290U3R5bGVzfVxuICAgICAgICAke2FkZGl0aW9uYWxTdHlsZXN9XG4gICAgICB9YDtcblxuICAgIHRoaXMuYXBwbHlUaGVtZVN0eWxlcyhjb21iaW5lZFN0eWxlcyk7XG4gICAgdGhpcy5jaGFuZ2VUaGVtZVR5cGUodGhlbWVDb25maWcsIHBlcnNpc3RQcmVmZXJlbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZG9jc1ByaXZhdGVcbiAgICpcbiAgICogQXBsaWNhIGVzdGlsb3MgY3VzdG9taXphZG9zIHBhcmEgbyBjb21wb25lbnRlIGUgcGFyYSBvIHJvb3QgSFRNTCwgdXRpbGl6YW5kbyBvcyB0b2tlbnMgZGVmaW5pZG9zLlxuICAgKlxuICAgKiBFc3NlIG3DqXRvZG8gw6kgY2hhbWFkbyBwYXJhIGluc2VyaXIgb3UgYXR1YWxpemFyIGVzdGlsb3Mgbm8gRE9NLCBhcGxpY2FuZG8gdGFudG8gdG9rZW5zIGRlIGBvblJvb3RgIChleDogYC0tZm9udC1mYW1pbHk6ICdSb2JvdG8nYClcbiAgICogcXVhbnRvIGVzdGlsb3MgZXNwZWPDrWZpY29zIGRlIGNvbXBvbmVudGVzIChgcGVyQ29tcG9uZW50YCwgY29tbyBgcG8tbGlzdGJveCBbaGlkZGVuXTogeyBkaXNwbGF5OiAnZmxleCAhaW1wb3J0YW50JyB9YCkuXG4gICAqXG4gICAqIE8gc2VsZXRvciBDU1MgZ2VyYWRvIGxldmEgZW0gY29uc2lkZXJhw6fDo28gbyB0ZW1hIChgdHlwZWApIGUgYXMgY29uZmlndXJhw6fDtWVzIGRlIGFjZXNzaWJpbGlkYWRlIChgYTExeWApIGRvIHRlbWEgYXRpdm8uXG4gICAqIEEgY2xhc3NlIGRvIHRlbWEgw6kgYXBsaWNhZGEgbm8gSFRNTCBlIHBvZGUgc2VyIGZvcm1hdGFkYSBjb21vIGBodG1sW2NsYXNzKj1cIi1saWdodC1BQVwiXWAgcGFyYSBwZXJzb25hbGl6YcOnw7Vlc1xuICAgKiBlbSB0ZW1hcyBlc3BlY8OtZmljb3MuXG4gICAqXG4gICAqIEBwYXJhbSB7UG9UaGVtZUFjdGl2ZX0gYWN0aXZlIC0gT2JqZXRvIHF1ZSBkZWZpbmUgbyB0ZW1hIGF0aXZvLCBjb20gYHR5cGVgIGUgYGExMXlgLlxuICAgKiBAcGFyYW0ge2FueX0gcGVyQ29tcG9uZW50IC0gT2JqZXRvIGNvbnRlbmRvIG9zIGVzdGlsb3MgZXNwZWPDrWZpY29zIHBhcmEgY29tcG9uZW50ZXMgYSBzZXJlbSBhcGxpY2Fkb3MuXG4gICAqIEBwYXJhbSB7YW55fSBvblJvb3QgLSBPYmpldG8gY29udGVuZG8gdG9rZW5zIGRlIGVzdGlsbyBxdWUgc2Vyw6NvIGFwbGljYWRvcyBkaXJldGFtZW50ZSBubyBzZWxldG9yIGA6cm9vdGAgZG8gSFRNTC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogLy8gRXhlbXBsbyBkZSB1dGlsaXphw6fDo28gY29tIHVtIHRlbWEgYXRpdm8gZSB0b2tlbnMgZGUgZXN0aWxvXG4gICAqIGNvbnN0IHRoZW1lQWN0aXZlID0geyB0eXBlOiAnbGlnaHQnLCBhMTF5OiAnQUEnIH07XG4gICAqIGNvbnN0IHBlckNvbXBvbmVudFN0eWxlcyA9IHtcbiAgICogICAncG8tbGlzdGJveCBbaGlkZGVuXSc6IHtcbiAgICogICAgICdkaXNwbGF5JzogJ2ZsZXggIWltcG9ydGFudCdcbiAgICogICB9XG4gICAqIH07XG4gICAqIGNvbnN0IG9uUm9vdFN0eWxlcyA9IHtcbiAgICogICAnLS1mb250LWZhbWlseSc6ICdSb2JvdG8nLFxuICAgKiAgICctLWJhY2tncm91bmQtY29sb3InOiAnI2ZmZidcbiAgICogfTtcbiAgICpcbiAgICogdGhpcy5zZXRQZXJDb21wb25lbnRBbmRPblJvb3QodGhlbWVBY3RpdmUsIHBlckNvbXBvbmVudFN0eWxlcywgb25Sb290U3R5bGVzKTtcbiAgICpcbiAgICogLy8gUmVzdWx0YWRvOlxuICAgKiAvLyBHZXJhIGUgYXBsaWNhIG9zIHNlZ3VpbnRlcyBlc3RpbG9zIG5vIERPTVxuICAgKiAvLyBodG1sW2NsYXNzKj1cIi1saWdodC1BQVwiXTpyb290IHtcbiAgICogLy8gICAtLWZvbnQtZmFtaWx5OiAnUm9ib3RvJztcbiAgICogLy8gICAtLWJhY2tncm91bmQtY29sb3I6ICcjZmZmJztcbiAgICogLy8gICBwby1saXN0Ym94IFtoaWRkZW5dIHtcbiAgICogLy8gICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcbiAgICogLy8gICB9XG4gICAqIC8vIH1cbiAgICpcbiAgICovXG4gIHB1YmxpYyBzZXRQZXJDb21wb25lbnRBbmRPblJvb3QoYWN0aXZlOiBQb1RoZW1lQWN0aXZlLCBwZXJDb21wb25lbnQ6IGFueSwgb25Sb290OiBhbnkpIHtcbiAgICBjb25zdCBwZXJDb21wb25lbnRTdHlsZXMgPSBwZXJDb21wb25lbnQgPyB0aGlzLmdlbmVyYXRlUGVyQ29tcG9uZW50U3R5bGVzKHBlckNvbXBvbmVudCkgOiAnJztcbiAgICBjb25zdCBvblJvb3RTdHlsZXMgPSBvblJvb3QgPyB0aGlzLmdlbmVyYXRlQWRkaXRpb25hbFN0eWxlcyhvblJvb3QpIDogJyc7XG5cbiAgICBsZXQgc2VsZWN0b3IgPSAnaHRtbCc7XG4gICAgY29uc3QgdHlwZVNlbGVjdG9yID0gYWN0aXZlPy50eXBlICE9PSB1bmRlZmluZWQgPyBgLSR7UG9UaGVtZVR5cGVFbnVtW2FjdGl2ZS50eXBlXX1gIDogJyc7XG4gICAgY29uc3QgYWNjZXNzaWJpbGl0eVNlbGVjdG9yID0gYWN0aXZlPy5hMTF5ICE9PSB1bmRlZmluZWQgPyBgLSR7UG9UaGVtZUExMXlFbnVtW2FjdGl2ZS5hMTF5XX1gIDogJyc7XG5cbiAgICBpZiAodHlwZVNlbGVjdG9yICYmIGFjY2Vzc2liaWxpdHlTZWxlY3Rvcikge1xuICAgICAgc2VsZWN0b3IgKz0gYFtjbGFzcyo9XCIke3R5cGVTZWxlY3Rvcn0ke2FjY2Vzc2liaWxpdHlTZWxlY3Rvcn1cIl1gO1xuICAgIH0gZWxzZSBpZiAoIXR5cGVTZWxlY3RvciAmJiBhY2Nlc3NpYmlsaXR5U2VsZWN0b3IpIHtcbiAgICAgIHNlbGVjdG9yICs9IGBbY2xhc3MkPVwiJHthY2Nlc3NpYmlsaXR5U2VsZWN0b3J9XCJdYDtcbiAgICB9IGVsc2UgaWYgKHR5cGVTZWxlY3Rvcikge1xuICAgICAgc2VsZWN0b3IgKz0gYFtjbGFzcyo9XCIke3R5cGVTZWxlY3Rvcn1cIl1gO1xuICAgIH1cblxuICAgIGNvbnN0IHN0eWxlQ3NzID0gYFxuICAgICAgJHtzZWxlY3Rvcn06cm9vdCB7XG4gICAgICAgICR7cGVyQ29tcG9uZW50U3R5bGVzfVxuICAgICAgICAke29uUm9vdFN0eWxlc31cbiAgICAgIH1cbiAgICBgO1xuXG4gICAgbGV0IHN0eWxlRWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuaGVhZC5xdWVyeVNlbGVjdG9yKCcjYmFzZVN0eWxlJyk7XG4gICAgaWYgKCFzdHlsZUVsZW1lbnQpIHtcbiAgICAgIHN0eWxlRWxlbWVudCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgIHN0eWxlRWxlbWVudC5pZCA9ICdiYXNlU3R5bGUnO1xuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQsIHRoaXMucmVuZGVyZXIuY3JlYXRlVGV4dChzdHlsZUNzcykpO1xuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmRvY3VtZW50LmhlYWQsIHN0eWxlRWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghc3R5bGVFbGVtZW50LnRleHRDb250ZW50LmluY2x1ZGVzKHN0eWxlQ3NzLnRyaW0oKSkpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQsIHRoaXMucmVuZGVyZXIuY3JlYXRlVGV4dChzdHlsZUNzcykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZG9jc1ByaXZhdGVcbiAgICpcbiAgICogR2VyYSBlc3RpbG9zIGFkaWNpb25haXMgY29tIGJhc2Ugbm9zIHRva2VucyBkZSB0ZW1hIGZvcm5lY2lkb3MsIGV4Y2x1aW5kbyBvcyB0b2tlbnMgZGUgY29yLlxuICAgKiBAcGFyYW0gdGhlbWUgT3MgdG9rZW5zIGRlIHRlbWEgY29udGVuZG8gb3MgZXN0aWxvcyBhZGljaW9uYWlzIGEgc2VyZW0gZ2VyYWRvcy5cbiAgICogQHJldHVybnMgVW1hIHN0cmluZyBjb250ZW5kbyBvcyBlc3RpbG9zIGFkaWNpb25haXMgZm9ybWF0YWRvcy5cbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVBZGRpdGlvbmFsU3R5bGVzKHRoZW1lOiBQb1RoZW1lVG9rZW5zKTogc3RyaW5nIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhlbWUpXG4gICAgICAuZmlsdGVyKChba2V5XSkgPT4gIVsnY29sb3InLCAncGVyQ29tcG9uZW50JywgJ29uUm9vdCddLmluY2x1ZGVzKGtleSkpXG4gICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IGAke2tleX06ICR7dmFsdWV9O2ApXG4gICAgICAuam9pbignICcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkb2NzUHJpdmF0ZVxuICAgKlxuICAgKiBBcGxpY2Egb3MgZXN0aWxvcyBkZSB0ZW1hIGFvIGRvY3VtZW50by5cbiAgICogQHBhcmFtIHN0eWxlQ3NzIE9zIGVzdGlsb3MgQ1NTIGEgc2VyZW0gYXBsaWNhZG9zLlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseVRoZW1lU3R5bGVzKHN0eWxlQ3NzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzdHlsZUVsZW1lbnQgPSB0aGlzLmNyZWF0ZVN0eWxlRWxlbWVudChzdHlsZUNzcywgJ3RoZW1lJyk7XG4gICAgY29uc3QgZXhpc3RpbmdTdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5oZWFkLnF1ZXJ5U2VsZWN0b3IoJyN0aGVtZScpO1xuXG4gICAgaWYgKGV4aXN0aW5nU3R5bGVFbGVtZW50KSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKGRvY3VtZW50LmhlYWQsIGV4aXN0aW5nU3R5bGVFbGVtZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmhlYWQsIHN0eWxlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZVRoZW1lVHlwZSh0aGVtZTogUG9UaGVtZSwgcGVyc2lzdFByZWZlcmVuY2U6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgdGhpcy5jbGVhblRoZW1lQWN0aXZlKHBlcnNpc3RQcmVmZXJlbmNlKTtcblxuICAgIGlmIChwZXJzaXN0UHJlZmVyZW5jZSkge1xuICAgICAgdGhpcy5zZXRUaGVtZUxvY2FsKHRoZW1lKTtcbiAgICB9XG5cbiAgICBkb2N1bWVudFxuICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdodG1sJylbMF1cbiAgICAgIC5jbGFzc0xpc3QuYWRkKFxuICAgICAgICAuLi5bXG4gICAgICAgICAgYCR7dGhlbWUubmFtZX0tJHtQb1RoZW1lVHlwZUVudW1bdGhpcy5nZXRBY3RpdmVUeXBlRnJvbVRoZW1lKHRoZW1lLmFjdGl2ZSldfS0ke1BvVGhlbWVBMTF5RW51bVt0aGlzLmdldEFjdGl2ZUExMXlGcm9tVGhlbWUodGhlbWUuYWN0aXZlKV19YFxuICAgICAgICBdXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcnNpc3RlIGUgZGVmaW5lIG8gdGVtYSBkbyBhcGxpY2F0aXZvIGNvbSBiYXNlIG5vcyBkYWRvcyBhcm1hemVuYWRvcy5cbiAgICpcbiAgICogRXN0ZSBtw6l0b2RvIHJlY3VwZXJhIG9zIGRhZG9zIGRvIHRlbWEgYXJtYXplbmFkb3MgZSBvcyBhcGxpY2EgYW8gYXBsaWNhdGl2by5cbiAgICpcbiAgICogQHJldHVybnMge1BvVGhlbWV9IFJlY3VwZXJhIG8gdGVtYSBhcm1hemVuYWRvLlxuICAgKi9cbiAgcGVyc2lzdFRoZW1lQWN0aXZlKCkge1xuICAgIGNvbnN0IF90aGVtZSA9IHRoaXMuZ2V0VGhlbWVBY3RpdmUoKTtcbiAgICB0aGlzLnNldFRoZW1lKF90aGVtZSwgdGhpcy5nZXRBY3RpdmVUeXBlRnJvbVRoZW1lKF90aGVtZS5hY3RpdmUpLCB0aGlzLmdldEFjdGl2ZUExMXlGcm9tVGhlbWUoX3RoZW1lLmFjdGl2ZSkpO1xuICAgIHJldHVybiBfdGhlbWU7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFRoZW1lKHRoZW1lQ29uZmlnLCB0aGVtZVR5cGUsIGExMXlMZXZlbCkge1xuICAgIHRoZW1lQ29uZmlnLm5hbWUgPSB0aGVtZUNvbmZpZy5uYW1lXG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLnJlcGxhY2UoL1teYS16QS1aIF0vZywgJycpXG4gICAgICAucmVwbGFjZSgvXFxzKy9nLCAnLScpO1xuICAgIHRoZW1lQ29uZmlnLmFjdGl2ZSA9IHsgdHlwZTogdGhlbWVUeXBlLCBhMTF5OiBhMTF5TGV2ZWwgfTtcbiAgfVxuXG4gIGFwcGx5VGhlbWUodGhlbWU/OiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IF9sb2NhbFRoZW1lID0gdGhpcy5nZXRUaGVtZUFjdGl2ZSgpO1xuXG4gICAgaWYgKCF0aGVtZSkge1xuICAgICAgaWYgKF9sb2NhbFRoZW1lKSB7XG4gICAgICAgIHRoaXMucGVyc2lzdFRoZW1lQWN0aXZlKCk7XG4gICAgICAgIHJldHVybiBfbG9jYWxUaGVtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgX3R5cGUgPSB0aGlzLmdldEFjdGl2ZVR5cGVGcm9tVGhlbWUodGhlbWUuYWN0aXZlKTtcbiAgICBjb25zdCBfYWNjZXNzaWJpbGl0eSA9IHRoaXMuZ2V0QWN0aXZlQTExeUZyb21UaGVtZSh0aGVtZS5hY3RpdmUpO1xuXG4gICAgaWYgKF9sb2NhbFRoZW1lICYmIEpTT04uc3RyaW5naWZ5KF9sb2NhbFRoZW1lKSA9PT0gSlNPTi5zdHJpbmdpZnkodGhlbWUpKSB7XG4gICAgICB0aGlzLnBlcnNpc3RUaGVtZUFjdGl2ZSgpO1xuICAgICAgcmV0dXJuIF9sb2NhbFRoZW1lO1xuICAgIH1cblxuICAgIHRoaXMuZm9ybWF0VGhlbWUodGhlbWUsIF90eXBlLCBfYWNjZXNzaWJpbGl0eSk7XG4gICAgdGhpcy5zZXRUaGVtZSh0aGVtZSwgX3R5cGUsIF9hY2Nlc3NpYmlsaXR5KTtcbiAgICByZXR1cm4gdGhlbWU7XG4gIH1cblxuICAvKipcbiAgICogQWx0ZXJhIG8gdGlwbyBkbyB0ZW1hIGFybWF6ZW5hZG8gZSBhcGxpY2Egb3Mgbm92b3MgZXN0aWxvcyBhbyBkb2N1bWVudG8uXG4gICAqXG4gICAqIEVzdGUgbcOpdG9kbyBhbHRlcmEgbyB0aXBvIGRvIHRlbWEgYXJtYXplbmFkbyBhdGl2byAobGlnaHQvZGFyaylcbiAgICpcbiAgICogQHBhcmFtIHtQb1RoZW1lVHlwZUVudW19IHRoZW1lVHlwZSBPIHRpcG8gZGUgdGVtYSBhIHNlciBhcGxpY2FkbywgbGlnaHQgb3UgZGFyay5cbiAgICovXG4gIGNoYW5nZUN1cnJlbnRUaGVtZVR5cGUodHlwZTogUG9UaGVtZVR5cGVFbnVtKTogdm9pZCB7XG4gICAgY29uc3QgX3RoZW1lID0gdGhpcy5nZXRUaGVtZUFjdGl2ZSgpO1xuICAgIHR5cGVvZiBfdGhlbWUuYWN0aXZlID09PSAnb2JqZWN0JyA/IChfdGhlbWUuYWN0aXZlLnR5cGUgPSB0eXBlKSA6IChfdGhlbWUuYWN0aXZlID0gdHlwZSk7XG4gICAgdGhpcy5jaGFuZ2VUaGVtZVR5cGUoX3RoZW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNw6l0b2RvIHJlbW92ZSBvIHRlbWEgYXJtYXplbmFkbyBlIGxpbXBhIHRvZG9zIG9zIGVzdGlsb3MgZGUgdGVtYVxuICAgKiBhcGxpY2Fkb3MgYW8gZG9jdW1lbnRvLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtwZXJzaXN0UHJlZmVyZW5jZT10cnVlXSAtIChPcGNpb25hbCkgRGVmaW5lIHNlIGEgcHJlZmVyw6puY2lhIGRlIHRlbWEgbsOjbyBkZXZlIHNlciBtYW50aWRhIG5vIGxvY2FsU3RvcmFnZSBwYXJhIHBlcnNpc3TDqm5jaWEuIGB0cnVlYCBwYXJhIHJlbW92ZXIsIGBmYWxzZWAgcGFyYSBtYW50ZXIuXG4gICAqL1xuICBjbGVhblRoZW1lQWN0aXZlKHBlcnNpc3RQcmVmZXJlbmNlOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgIC8vIFN1Zml4byBleGlzdGVudGVzIGhvamVcbiAgICBjb25zdCB0aGVtZVN1ZmZpeGVzID0gWyctbGlnaHQtJywgJy1kYXJrLSddO1xuICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2h0bWwnKVswXTtcblxuICAgIC8vIENvbnZlcnRlIGBjbGFzc0xpc3RgIGVtIHVtIGFycmF5IGUgcmVtb3ZlIGFzIGNsYXNzZXMgcXVlIHRlcm1pbmFtIGNvbSBvcyBzdWZpeG9zIGVzcGVjaWZpY2Fkb3NcbiAgICBBcnJheS5mcm9tKGh0bWxFbGVtZW50LmNsYXNzTGlzdCkuZm9yRWFjaChjbGFzc05hbWUgPT4ge1xuICAgICAgaWYgKHRoZW1lU3VmZml4ZXMuc29tZShzdWZmaXggPT4gY2xhc3NOYW1lLmluY2x1ZGVzKHN1ZmZpeCkpKSB7XG4gICAgICAgIGh0bWxFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFJlbW92ZSBvIHRlbWEgYXRpdm8gZG8gbG9jYWxTdG9yYWdlXG4gICAgaWYgKHBlcnNpc3RQcmVmZXJlbmNlKSB7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgndG90dnMtdGhlbWUnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEFjdGl2ZVR5cGVGcm9tVGhlbWUoYWN0aXZlKTogUG9UaGVtZVR5cGVFbnVtIHtcbiAgICByZXR1cm4gdHlwZW9mIGFjdGl2ZSA9PT0gJ29iamVjdCcgPyBhY3RpdmUudHlwZSA6IGFjdGl2ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWN0aXZlQTExeUZyb21UaGVtZShhY3RpdmUpOiBQb1RoZW1lQTExeUVudW0ge1xuICAgIHJldHVybiB0eXBlb2YgYWN0aXZlID09PSAnb2JqZWN0JyA/IGFjdGl2ZS5hMTF5IDogUG9UaGVtZUExMXlFbnVtLkFBQTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZG9jc1ByaXZhdGVcbiAgICpcbiAgICogRXN0ZSBtw6l0b2RvIGRlZmluZSB1bSBkYWRvcyBkbyB0ZW1hIGUgbyBhcm1hemVuYS5cbiAgICogQHBhcmFtIHRoZW1lIE9zIHRva2VucyBkZSB0ZW1hIGNvbnRlbmRvIG9zIGVzdGlsb3MgYWRpY2lvbmFpcyBhIHNlcmVtIGdlcmFkb3MuXG4gICAqL1xuICBwcml2YXRlIHNldFRoZW1lTG9jYWwodGhlbWU6IFBvVGhlbWUpOiB2b2lkIHtcbiAgICBpZiAodGhlbWUpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0b3R2cy10aGVtZScsIEpTT04uc3RyaW5naWZ5KHRoZW1lKSk7XG4gICAgICB0aGlzLnRoZW1lID0gdGhlbWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldG9ybmEgbyB0ZW1hIGF0aXZvIGNvbW8gdW0gb2JzZXJ2YWJsZS5cbiAgICogQHJldHVybnMge1BvVGhlbWV9IFRlbWEgYXRpdm8uXG4gICAqL1xuICBnZXRUaGVtZUFjdGl2ZSgpOiBQb1RoZW1lIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdGhlbWVEYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndG90dnMtdGhlbWUnKSk7XG4gICAgICBpZiAodGhlbWVEYXRhICYmIEpTT04uc3RyaW5naWZ5KHRoZW1lRGF0YSkgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMudGhlbWUpKSB7XG4gICAgICAgIHRoaXMudGhlbWUgPSB0aGVtZURhdGE7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm8gYW8gb2J0ZXIgbyB0ZW1hIGRvIGFybWF6ZW5hbWVudG8gbG9jYWw6JywgZXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50aGVtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZG9jc1ByaXZhdGVcbiAgICpcbiAgICogR2VyYSBlc3RpbG9zIENTUyBjb20gYmFzZSBub3MgdG9rZW5zIGRlIGNvcmVzIGZvcm5lY2lkb3MuXG4gICAqIEBwYXJhbSBjc3MgT3MgdG9rZW5zIGRlIGNvciBhIHNlcmVtIHVzYWRvcyBwYXJhIGdlcmFyIG9zIGVzdGlsb3MuXG4gICAqIEBwYXJhbSBpZCBpZCBkbyBzdHlsZSBhIHNlciBhcGxpY2Fkby5cbiAgICogQHJldHVybnMgVW1hIHN0cmluZyBjb250ZW5kbyBvcyBlc3RpbG9zIENTUyBnZXJhZG9zLlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVTdHlsZUVsZW1lbnQoY3NzOiBzdHJpbmcsIGlkOiBzdHJpbmcpOiBIVE1MU3R5bGVFbGVtZW50IHtcbiAgICBjb25zdCBzdHlsZUVsZW1lbnQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgc3R5bGVFbGVtZW50LmlkID0gaWQ7XG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQsIHRoaXMucmVuZGVyZXIuY3JlYXRlVGV4dChjc3MpKTtcbiAgICByZXR1cm4gc3R5bGVFbGVtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkb2NzUHJpdmF0ZVxuICAgKlxuICAgKiBHZXJhIGVzdGlsb3MgQ1NTIGNvbSBiYXNlIG5vcyB0b2tlbnMgZGUgY29yZXMgZm9ybmVjaWRvcy5cbiAgICogQHBhcmFtIHRoZW1lQ29sb3IgT3MgdG9rZW5zIGRlIGNvciBhIHNlcmVtIHVzYWRvcyBwYXJhIGdlcmFyIG9zIGVzdGlsb3MuXG4gICAqIEByZXR1cm5zIFVtYSBzdHJpbmcgY29udGVuZG8gb3MgZXN0aWxvcyBDU1MgZ2VyYWRvcy5cbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVUaGVtZVN0eWxlcyh0aGVtZUNvbG9yOiBQb1RoZW1lQ29sb3IpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNlbGVjdEJnSWNvblN0eWxlID0gdGhpcy5nZXRTZWxlY3RCZ0ljb25zU3R5bGUodGhlbWVDb2xvcik7XG5cbiAgICByZXR1cm4gW1xuICAgICAgT2JqZWN0LmVudHJpZXModGhlbWVDb2xvcilcbiAgICAgICAgLmZsYXRNYXAoKFt0eXBlLCB2YWx1ZXNdKSA9PlxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHZhbHVlcykuZmxhdE1hcCgoW3RvbmFsaXR5LCB0b25hbGl0eVZhbHVlc10pID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnYWN0aW9uJykge1xuICAgICAgICAgICAgICByZXR1cm4gW2AtLWNvbG9yLSR7dHlwZX0tJHt0b25hbGl0eX06ICR7dG9uYWxpdHlWYWx1ZXN9O2BdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRvbmFsaXR5VmFsdWVzKS5tYXAoXG4gICAgICAgICAgICAgICAgKFtsZXZlbCwgY29sb3JWYWx1ZV0pID0+IGAtLWNvbG9yLSR7dHlwZX0tJHt0b25hbGl0eX0tJHtsZXZlbH06ICR7Y29sb3JWYWx1ZX07YFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLmpvaW4oJycpLFxuICAgICAgc2VsZWN0QmdJY29uU3R5bGVcbiAgICBdLmpvaW4oJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkb2NzUHJpdmF0ZVxuICAgKlxuICAgKiBHZXJhIGVzdGlsb3MgQ1NTIGNvbSBiYXNlIG5vcyB0b2tlbnMgcGVyIENvbXBvbmVudCBmb3JuZWNpZG9zLlxuICAgKiBAcGFyYW0gdGhlbWVQZXJDb21wb25lbnQgT3MgdG9rZW5zIGRlIGNvciBhIHNlcmVtIHVzYWRvcyBwYXJhIGdlcmFyIG9zIGVzdGlsb3MuXG4gICAqIEByZXR1cm5zIFVtYSBzdHJpbmcgY29udGVuZG8gb3MgZXN0aWxvcyBDU1MgZ2VyYWRvcy5cbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVQZXJDb21wb25lbnRTdHlsZXModGhlbWVQZXJDb21wb25lbnQ6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoZW1lUGVyQ29tcG9uZW50KVxuICAgICAgLmZsYXRNYXAoKFt0eXBlLCB2YWx1ZXNdKSA9PlxuICAgICAgICBPYmplY3QuZW50cmllcyh2YWx1ZXMpLmZsYXRNYXAoKFtsZXZlbCwgY29sb3JWYWx1ZV0pID0+IFtgJHt0eXBlfSB7JHtsZXZlbH06ICR7Y29sb3JWYWx1ZX07fTtgXSlcbiAgICAgIClcbiAgICAgIC5qb2luKCcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgbyB0ZW1hIGF0dWFsIGNvbW8gbyB0ZW1hIFwiUG9VSSBQYWRyw6NvXCIuXG4gICAqXG4gICAqIEBwYXJhbSB7UG9UaGVtZVR5cGVFbnVtfSB0eXBlIE8gdGlwbyBkZSBUZW1hIGEgc2VyIGFwbGljYWRvLCBsaWdodCAvIGRhcmsuXG4gICAqL1xuICBzZXREZWZhdWx0VGhlbWUodHlwZTogUG9UaGVtZVR5cGVFbnVtKTogdm9pZCB7XG4gICAgdGhpcy5zZXRUaGVtZShwb1RoZW1lRGVmYXVsdCwgdHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogQGRvY3NQcml2YXRlXG4gICAqXG4gICAqIFJldG9ybmEgbyBlc3RpbG8gQ1NTIHBhcmEgbyBmdW5kbyBkb3Mgw61jb25lcyBkbyBjb21wb25lbnRlIHBvLXNlbGVjdCwgY29tIGJhc2UgbmFzIGNvcmVzIGRvIHRlbWEuXG4gICAqXG4gICAqIEBwYXJhbSB7UG9UaGVtZUNvbG9yfSB0aGVtZUNvbG9yIC0gT2JqZXRvIGNvbnRlbmRvIGFzIGNvcmVzIGRvIHRlbWEuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gRXN0aWxvIENTUyBwYXJhIG8gZnVuZG8gZG9zIMOtY29uZXMgZG8gcG8tc2VsZWN0LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTZWxlY3RCZ0ljb25zU3R5bGUodGhlbWVDb2xvcjogUG9UaGVtZUNvbG9yKTogc3RyaW5nIHtcbiAgICBsZXQgc2VsZWN0QmdJY29uID0gJyc7XG5cbiAgICBpZiAodGhlbWVDb2xvcj8uYnJhbmQ/LlsnMDEnXT8uZGFyaykge1xuICAgICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLmljb25OYW1lTGliID09PSAnUGhvc3Bob3JJY29uJyA/ICdwby1zZWxlY3QgLnBvLXNlbGVjdC1waG9zcGhvcicgOiAncG8tc2VsZWN0JztcbiAgICAgIHNlbGVjdEJnSWNvbiArPSBgJHtzZWxlY3Rvcn0geyAtLWJhY2tncm91bmQtaW1hZ2U6IHVybCgke3RoaXMuZ2V0U2VsZWN0QmdJY29uKHRoZW1lQ29sb3IubmV1dHJhbC5kYXJrWzcwXSl9KTsgfTtgO1xuICAgIH1cblxuICAgIGlmICh0aGVtZUNvbG9yPy5mZWVkYmFjaz8ubmVnYXRpdmU/LmJhc2UpIHtcbiAgICAgIGlmICh0aGlzLmljb25OYW1lTGliID09PSAnUG9JY29uJykge1xuICAgICAgICBzZWxlY3RCZ0ljb24gKz0gYHBvLXNlbGVjdC5uZy1kaXJ0eS5uZy1pbnZhbGlkIHNlbGVjdCB7IC0tYmFja2dyb3VuZC1pbWFnZTogdXJsKCR7dGhpcy5nZXRTZWxlY3RCZ0ljb24odGhlbWVDb2xvci5mZWVkYmFjay5uZWdhdGl2ZS5iYXNlKX0pOyB9O2A7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmljb25OYW1lTGliID09PSAnUGhvc3Bob3JJY29uJykge1xuICAgICAgICBzZWxlY3RCZ0ljb24gKz0gYHBvLXNlbGVjdC5uZy1kaXJ0eS5uZy1pbnZhbGlkIHNlbGVjdC5wby1zZWxlY3QtcGhvc3Bob3IgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJHt0aGlzLmdldFNlbGVjdEJnSWNvbih0aGVtZUNvbG9yLmZlZWRiYWNrLm5lZ2F0aXZlLmJhc2UpfSk7IH07YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhlbWVDb2xvcj8ubmV1dHJhbD8ubGlnaHQ/LlsnMzAnXSkge1xuICAgICAgaWYgKHRoaXMuaWNvbk5hbWVMaWIgPT09ICdQb0ljb24nKSB7XG4gICAgICAgIHNlbGVjdEJnSWNvbiArPSBgc2VsZWN0OmRpc2FibGVkIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKCR7dGhpcy5nZXRTZWxlY3RCZ0ljb24odGhlbWVDb2xvci5uZXV0cmFsLmxpZ2h0WyczMCddKX0pOyB9O2A7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmljb25OYW1lTGliID09PSAnUGhvc3Bob3JJY29uJykge1xuICAgICAgICBzZWxlY3RCZ0ljb24gKz0gYHBvLXNlbGVjdCBzZWxlY3QucG8tc2VsZWN0LXBob3NwaG9yOmRpc2FibGVkIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKCR7dGhpcy5nZXRTZWxlY3RCZ0ljb24odGhlbWVDb2xvci5uZXV0cmFsLmxpZ2h0WyczMCddKX0pOyB9O2A7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbGVjdEJnSWNvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZG9jc1ByaXZhdGVcbiAgICpcbiAgICogUmV0b3JuYSBhIGltYWdlbSBTVkcgdXRpbGl6YWRhIGNvbW8gZnVuZG8gZG8gcG8tc2VsZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgQ29yIGRhIEltYWdlbSAtIFV0aWxpemFkYSBubyBhdHJpYnV0byAnZmlsbCcuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IEltYWdlbSBTVkcgdXRpbGl6YWRhIG5vIHBvLXNlbGVjdC5cbiAgICovXG4gIHByaXZhdGUgZ2V0U2VsZWN0QmdJY29uKGNvbG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBzdmc6IHN0cmluZztcblxuICAgIGlmICh0aGlzLmljb25OYW1lTGliID09PSAnUG9JY29uJykge1xuICAgICAgc3ZnID0gYFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgYDtcblxuICAgICAgc3ZnID0gc3ZnLmNvbmNhdChgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGApO1xuICAgICAgc3ZnID0gc3ZnLmNvbmNhdChgZD0nTTE4LjcwNyA4LjI5MzAxQzE4LjMxNiA3LjkwMjAxIDE3LjY4NCA3LjkwMjAxIDE3LjI5MyA4LjI5MzAxTDEyIDEzLjU4Nkw2LjcwNzAxIGApO1xuICAgICAgc3ZnID0gc3ZnLmNvbmNhdChgOC4yOTMwMUM2LjMxNjAxIDcuOTAyMDEgNS42ODQwMSA3LjkwMjAxIDUuMjkzMDEgOC4yOTMwMUM0LjkwMjAxIDguNjg0MDEgNC45MDIwMSBgKTtcbiAgICAgIHN2ZyA9IHN2Zy5jb25jYXQoYDkuMzE2MDEgNS4yOTMwMSA5LjcwNzAxTDExLjI5MyAxNS43MDdDMTEuNDg4IDE1LjkwMiAxMS43NDQgMTYgMTIgMTZDMTIuMjU2IDE2IDEyLjUxMiBgKTtcbiAgICAgIHN2ZyA9IHN2Zy5jb25jYXQoYDE1LjkwMiAxMi43MDcgMTUuNzA3TDE4LjcwNyA5LjcwNzAxQzE5LjA5OCA5LjMxNjAxIDE5LjA5OCA4LjY4NDAxIDE4LjcwNyA4LjI5MzAxWicgYCk7XG4gICAgICBzdmcgPSBzdmcuY29uY2F0KGBmaWxsPScke2NvbG9yLnJlcGxhY2UoJyMnLCAnJTIzJyl9Jy8lM0UlM0Mvc3ZnJTNFJTBBXCIpO2ApO1xuXG4gICAgICByZXR1cm4gc3ZnO1xuICAgIH1cblxuICAgIHN2ZyA9IGBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjU2IDI1NicgZmlsbD0nJHtjb2xvci5yZXBsYWNlKCcjJywgJyUyMycpfScgYDtcbiAgICBzdmcgPSBzdmcuY29uY2F0KGB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBgKTtcbiAgICBzdmcgPSBzdmcuY29uY2F0KFxuICAgICAgYGQ9J00yMTMuNjYsMTAxLjY2bC04MCw4MGE4LDgsMCwwLDEtMTEuMzIsMGwtODAtODBBOCw4LDAsMCwxLDUzLjY2LDkwLjM0TDEyOCwxNjQuNjlsNzQuMzQtNzQuMzVhOCw4LDAsMCwxLDExLjMyLDExLjMyWidgXG4gICAgKTtcbiAgICBzdmcgPSBzdmcuY29uY2F0KGAlM0UlM0MvcGF0aCUzRSUzQy9zdmclM0VcIik7YCk7XG5cbiAgICByZXR1cm4gc3ZnO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBvIHRpcG8gKGxpZ2h0L2RhcmspIHF1YW5kbyB1bSB0ZW1hIGVzdMOhIHNlbmRvIGFwbGljYWRvLlxuICAgKlxuICAgKiBAcGFyYW0ge1BvVGhlbWV9IHRoZW1lIC0gT2JqZXRvIGNvbnRlbmRvIGFzIGRlZmluacOnw7VlcyBkZSB0ZW1hIGEgc2VyZW0gYXBsaWNhZGFzIG5vIGNvbXBvbmVudGUuXG4gICAqIEBwYXJhbSB7UG9UaGVtZVR5cGVFbnVtfSBbdGhlbWVUeXBlPVBvVGhlbWVUeXBlRW51bS5saWdodF0gLSAoT3BjaW9uYWwpIFRpcG8gZGUgdGVtYSBhIHNlciBhcGxpY2FkbywgcG9kZW5kbyBzZXIgJ2xpZ2h0JyAoY2xhcm8pIG91ICdkYXJrJyAoZXNjdXJvKS4gUG9yIHBhZHLDo28sIG8gdGVtYSBjbGFybyDDqSBhcGxpY2Fkby5cbiAgICovXG4gIHNldFRoZW1lVHlwZSh0aGVtZTogUG9UaGVtZSwgdGhlbWVUeXBlOiBQb1RoZW1lVHlwZUVudW0gPSBQb1RoZW1lVHlwZUVudW0ubGlnaHQpIHtcbiAgICBjb25zdCBfYWNjZXNzaWJpbGl0eSA9IHR5cGVvZiB0aGVtZS5hY3RpdmUgPT09ICdvYmplY3QnID8gdGhlbWUuYWN0aXZlLmExMXkgOiBQb1RoZW1lQTExeUVudW0uQUFBO1xuICAgIHRoaXMuc2V0VGhlbWUodGhlbWUsIHRoZW1lVHlwZSwgX2FjY2Vzc2liaWxpdHkpO1xuICB9XG5cbiAgLyoqXG4gICAqICBEZWZpbmUgbyB0aXBvIChsaWdodC9kYXJrKSBwYXJhIHVtIHRlbWEgasOhIGF0aXZvLlxuICAgKlxuICAgKiBAcGFyYW0ge1BvVGhlbWVUeXBlRW51bX0gW3RoZW1lVHlwZT1Qb1RoZW1lVHlwZUVudW0ubGlnaHRdIC0gKE9wY2lvbmFsKSBUaXBvIGRlIHRlbWEgYSBzZXIgYXBsaWNhZG8sIHBvZGVuZG8gc2VyICdsaWdodCcgKGNsYXJvKSBvdSAnZGFyaycgKGVzY3VybykuIFBvciBwYWRyw6NvLCBvIHRlbWEgY2xhcm8gw6kgYXBsaWNhZG8uXG4gICAqL1xuICBzZXRDdXJyZW50VGhlbWVUeXBlKHRoZW1lVHlwZTogUG9UaGVtZVR5cGVFbnVtID0gUG9UaGVtZVR5cGVFbnVtLmxpZ2h0KSB7XG4gICAgY29uc3QgX3RoZW1lID0gdGhpcy5nZXRUaGVtZUFjdGl2ZSgpO1xuICAgIHRoaXMuc2V0VGhlbWVUeXBlKF90aGVtZSwgdGhlbWVUeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgbyBuaXZlbCBkZSBhY2Vzc2liaWxpZGFkZSBxdWFuZG8gdW0gdGVtYSBlc3TDoSBzZW5kbyBhcGxpY2Fkby5cbiAgICpcbiAgICogQHBhcmFtIHtQb1RoZW1lfSB0aGVtZSAtIE9iamV0byBjb250ZW5kbyBhcyBkZWZpbmnDp8O1ZXMgZGUgdGVtYSBhIHNlcmVtIGFwbGljYWRhcyBubyBjb21wb25lbnRlLlxuICAgKiBAcGFyYW0ge1BvVGhlbWVBMTF5RW51bX0gW2ExMXk9UG9UaGVtZUExMXlFbnVtLkFBQV0gLSAoT3BjaW9uYWwpIE7DrXZlbCBkZSBhY2Vzc2liaWxpZGFkZSBhIHNlciBhcGxpY2FkbyBhbyB0ZW1hLCBjb21vIEFBIG91IEFBQS4gU2UgbsOjbyBmb3IgaW5mb3JtYWRvLCBwb3IgcGFkcsOjbyBhIGFjZXNzaWJpbGlkYWRlIHNlcsOhIEFBQS5cbiAgICovXG4gIHNldFRoZW1lQTExeSh0aGVtZTogUG9UaGVtZSwgYTExeTogUG9UaGVtZUExMXlFbnVtID0gUG9UaGVtZUExMXlFbnVtLkFBQSkge1xuICAgIGNvbnN0IF90eXBlID0gKHR5cGVvZiB0aGVtZS5hY3RpdmUgPT09ICdvYmplY3QnID8gdGhlbWUuYWN0aXZlLnR5cGUgOiB0aGVtZS5hY3RpdmUpIHx8IDA7XG4gICAgdGhpcy5zZXRUaGVtZSh0aGVtZSwgX3R5cGUsIGExMXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBvIG5pdmVsIGRlIGFjZXNzaWJpbGlkYWRlIHBhcmEgdW0gdGVtYSBqw6EgYXRpdm8uXG4gICAqXG4gICAqIEBwYXJhbSB7UG9UaGVtZUExMXlFbnVtfSBbYTExeT1Qb1RoZW1lQTExeUVudW0uQUFBXSAtIChPcGNpb25hbCkgTsOtdmVsIGRlIGFjZXNzaWJpbGlkYWRlIGEgc2VyIGFwbGljYWRvIGFvIHRlbWEsIGNvbW8gQUEgb3UgQUFBLiBTZSBuw6NvIGZvciBpbmZvcm1hZG8sIHBvciBwYWRyw6NvIGEgYWNlc3NpYmlsaWRhZGUgc2Vyw6EgQUFBLlxuICAgKi9cbiAgc2V0Q3VycmVudFRoZW1lQTExeShhMTF5OiBQb1RoZW1lQTExeUVudW0gPSBQb1RoZW1lQTExeUVudW0uQUFBKSB7XG4gICAgY29uc3QgX3RoZW1lID0gdGhpcy5nZXRUaGVtZUFjdGl2ZSgpO1xuICAgIHRoaXMuc2V0VGhlbWVBMTF5KF90aGVtZSwgYTExeSk7XG4gIH1cbn1cbiJdfQ==
|
|
301
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tdGhlbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvc2VydmljZXMvcG8tdGhlbWUvcG8tdGhlbWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUErQixNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQUtsRTs7Ozs7Ozs7R0FRRztBQUVIOzs7Ozs7OztHQVFHO0FBSUgsTUFBTSxPQUFPLGNBQWM7SUFVRztJQUNBO0lBVnBCLFFBQVEsQ0FBWTtJQUNwQixLQUFLLEdBQVksY0FBYyxDQUFDO0lBQ2hDLFVBQVUsQ0FBNEI7SUFFOUMsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztJQUNsQyxDQUFDO0lBRUQsWUFDNEIsTUFBYyxFQUNkLFFBQWtCLEVBQzVDLGVBQWlDLEVBQ0ssS0FBZ0M7UUFINUMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQVU7UUFJNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUzRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssSUFBSSxzQkFBc0IsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxRQUFRLENBQUMsS0FBYyxFQUFFLFlBQTZCLGVBQWUsQ0FBQyxL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QUNkLHdIQUF3SCxDQUN6SCxDQUFDO1FBQ0YsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUVoRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7d0VBMVNVLGNBQWMsY0FVZixRQUFRLGVBQ1IsUUFBUSxpREFFSSxnQkFBZ0I7Z0VBYjNCLGNBQWMsV0FBZCxjQUFjLG1CQUZiLE1BQU07O2lGQUVQLGNBQWM7Y0FIMUIsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COztzQkFXSSxNQUFNO3VCQUFDLFFBQVE7O3NCQUNmLE1BQU07dUJBQUMsUUFBUTs7c0JBRWYsUUFBUTs7c0JBQUksTUFBTTt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsLCBSZW5kZXJlcjIsIFJlbmRlcmVyRmFjdG9yeTIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElDT05TX0RJQ1RJT05BUlksIFBob3NwaG9ySWNvbkRpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3BvLWljb24vaW5kZXgnO1xuaW1wb3J0IHsgUG9UaGVtZVR5cGVFbnVtIH0gZnJvbSAnLi9lbnVtL3BvLXRoZW1lLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBwb1RoZW1lRGVmYXVsdCB9IGZyb20gJy4vaGVscGVycy9wby10aGVtZS1wb3VpLmNvbnN0YW50JztcbmltcG9ydCB7IFBvVGhlbWVDb2xvciB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby10aGVtZS1jb2xvci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9UaGVtZVRva2VucyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby10aGVtZS10b2tlbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvVGhlbWUgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tdGhlbWUuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBPIGBQb1RoZW1lU2VydmljZWAgcG9zc2liaWxpdGEgYSBwZXJzb25hbGl6YcOnw6NvIGRhcyBjb3JlcyBkbyB0ZW1hIHBhZHLDo28gZG8gYFBPLVVJYCwgcGVybWl0aW5kbyBhIGFsdGVyYcOnw6NvIGRvcyB2YWxvcmVzIGRhcyB2YXJpw6F2ZWlzIGRlIGVzdGlsbyB1c2FkYXMgbm8gQ1NTIHBhZHLDo28uXG4gKlxuICogPiBQYXJhIHNhYmVyIG1haXMgc29icmUgY29tbyBjdXN0b21pemFyIGFzIGNvcmVzIGRvIHRlbWEgcGFkcsOjbyB2ZXJpZmlxdWUgbyBpdGVtIFtDdXN0b21pemFuZG8gY29yZXMgZG8gdGVtYSBwYWRyw6NvXShodHRwczovL3BvLXVpLmlvL2d1aWRlcy9jb2xvcnMtY3VzdG9taXphdGlvbikgbmEgYWJhIGBHdWlhc2AuXG4gKlxuICogPiBPYnMuOiBOw6NvIGVzdMOhIGRvY3VtZW50YWRvIGFxdWkgZSBuw6NvIGluZGljYW1vcyBhIGN1c3RvbWl6YcOnw6NvIGRhcyBjb3JlcyBkZSAnZmVlZGJhY2snIHBvciBtb3Rpdm9zIGRlIGFjZXNzaWJpbGlkYWRlIGUgdXNhYmlsaWRhZGUuXG4gKi9cblxuLyoqXG4gKiBAZXhhbXBsZVxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby10aGVtZS1sYWJzXCIgdGl0bGU9XCJQTyBUaGVtZSBMYWJzXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby10aGVtZS1sYWJzL3NhbXBsZS1wby10aGVtZS1sYWJzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXRoZW1lLWxhYnMvc2FtcGxlLXBvLXRoZW1lLWxhYnMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFBvVGhlbWVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyO1xuICBwcml2YXRlIHRoZW1lOiBQb1RoZW1lID0gcG9UaGVtZURlZmF1bHQ7XG4gIHByaXZhdGUgX2ljb25Ub2tlbjogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICBnZXQgaWNvbk5hbWVMaWIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ljb25Ub2tlbi5OQU1FX0xJQjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoJ1dpbmRvdycpIHByaXZhdGUgd2luZG93OiBXaW5kb3csXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgcmVuZGVyZXJGYWN0b3J5OiBSZW5kZXJlckZhY3RvcnkyLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSUNPTlNfRElDVElPTkFSWSkgdmFsdWU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1cbiAgKSB7XG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyRmFjdG9yeS5jcmVhdGVSZW5kZXJlcihudWxsLCBudWxsKTtcblxuICAgIHRoaXMuX2ljb25Ub2tlbiA9IHZhbHVlID8/IFBob3NwaG9ySWNvbkRpY3Rpb25hcnk7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIG8gdGVtYSBhIHNlciBhcGxpY2FkbyBubyBjb21wb25lbnRlLCBkZSBhY29yZG8gY29tIG8gdGlwbyBkZSB0ZW1hIGVzcGVjaWZpY2Fkby5cbiAgICpcbiAgICogRXN0ZSBtw6l0b2RvIGRlZmluZSBvIHRlbWEgYSBzZXIgYXBsaWNhZG8gbm8gY29tcG9uZW50ZSBjb20gYmFzZSBubyBvYmpldG8gYHRoZW1lYCBmb3JuZWNpZG8gZSBubyB0aXBvIGRlIHRlbWEgZXNwZWNpZmljYWRvLlxuICAgKiBFbGUgYXR1YWxpemEgYXMgcHJvcHJpZWRhZGVzIGRvIGNvbXBvbmVudGUgcGFyYSByZWZsZXRpciBvIHRlbWEgc2VsZWNpb25hZG8sIGNvbW8gY29yZXMsIGVzdGlsb3MgZSBjb21wb3J0YW1lbnRvcy5cbiAgICpcbiAgICogQHBhcmFtIHtQb1RoZW1lfSB0aGVtZSAtIE9iamV0byBjb250ZW5kbyBhcyBkZWZpbmnDp8O1ZXMgZGUgdGVtYSBhIHNlcmVtIGFwbGljYWRhcyBubyBjb21wb25lbnRlLlxuICAgKiBAcGFyYW0ge1BvVGhlbWVUeXBlRW51bX0gW3RoZW1lVHlwZT1Qb1RoZW1lVHlwZUVudW0ubGlnaHRdIC0gKE9wY2lvbmFsKSBUaXBvIGRlIHRlbWEgYSBzZXIgYXBsaWNhZG8sIHBvZGVuZG8gc2VyICdsaWdodCcgKGNsYXJvKSBvdSAnZGFyaycgKGVzY3VybykuIFBvciBwYWRyw6NvLCBvIHRlbWEgY2xhcm8gw6kgYXBsaWNhZG8uXG4gICAqL1xuICBzZXRUaGVtZSh0aGVtZTogUG9UaGVtZSwgdGhlbWVUeXBlOiBQb1RoZW1lVHlwZUVudW0gPSBQb1RoZW1lVHlwZUVudW0ubGlnaHQpOiB2b2lkIHtcbiAgICAvLyBDaGFuZ2UgdGhlbWUgbmFtZSwgcmVtb3ZlIHNwZWNpYWwgY2hhcmFjdGVyZXMgYW5kIG51bWJlciwgcmVwbGFjZSBzcGFjZSB3aXRoIGRhc2hcbiAgICB0aGVtZS5uYW1lID0gdGhlbWUubmFtZVxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC5yZXBsYWNlKC9bXmEtekEtWiBdL2csICcnKVxuICAgICAgLnJlcGxhY2UoL1xccysvZywgJy0nKTtcbiAgICB0aGVtZS5hY3RpdmUgPSB0aGVtZVR5cGU7XG5cbiAgICBjb25zdCBfdGhlbWVUeXBlID0gdGhlbWUudHlwZVtQb1RoZW1lVHlwZUVudW1bdGhlbWVUeXBlXV07XG4gICAgaWYgKCFfdGhlbWVUeXBlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29sb3JTdHlsZXMgPSBfdGhlbWVUeXBlLmNvbG9yID8gdGhpcy5nZW5lcmF0ZVRoZW1lU3R5bGVzKF90aGVtZVR5cGUuY29sb3IpIDogJyc7XG4gICAgY29uc3QgcGVyQ29tcG9uZW50U3R5bGVzID0gX3RoZW1lVHlwZS5wZXJDb21wb25lbnQgPyB0aGlzLmdlbmVyYXRlUGVyQ29tcG9uZW50U3R5bGVzKF90aGVtZVR5cGUucGVyQ29tcG9uZW50KSA6ICcnO1xuICAgIGNvbnN0IG9uUm9vdFN0eWxlcyA9IF90aGVtZVR5cGUub25Sb290ID8gdGhpcy5nZW5lcmF0ZUFkZGl0aW9uYWxTdHlsZXMoX3RoZW1lVHlwZS5vblJvb3QpIDogJyc7XG4gICAgY29uc3QgYWRkaXRpb25hbFN0eWxlcyA9IHRoaXMuZ2VuZXJhdGVBZGRpdGlvbmFsU3R5bGVzKF90aGVtZVR5cGUpO1xuXG4gICAgY29uc3QgY29tYmluZWRTdHlsZXMgPSBgXG4gICAgICAuJHt0aGVtZS5uYW1lfS0ke1BvVGhlbWVUeXBlRW51bVt0aGVtZVR5cGVdfTpyb290IHtcbiAgICAgICAgJHtjb2xvclN0eWxlc31cbiAgICAgICAgJHtwZXJDb21wb25lbnRTdHlsZXN9XG4gICAgICAgICR7b25Sb290U3R5bGVzfVxuICAgICAgICAke2FkZGl0aW9uYWxTdHlsZXN9XG4gICAgICB9YDtcblxuICAgIHRoaXMuYXBwbHlUaGVtZVN0eWxlcyhjb21iaW5lZFN0eWxlcyk7XG4gICAgdGhpcy5jaGFuZ2VUaGVtZVR5cGUodGhlbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkb2NzUHJpdmF0ZVxuICAgKlxuICAgKiBHZXJhIGVzdGlsb3MgYWRpY2lvbmFpcyBjb20gYmFzZSBub3MgdG9rZW5zIGRlIHRlbWEgZm9ybmVjaWRvcywgZXhjbHVpbmRvIG9zIHRva2VucyBkZSBjb3IuXG4gICAqIEBwYXJhbSB0aGVtZSBPcyB0b2tlbnMgZGUgdGVtYSBjb250ZW5kbyBvcyBlc3RpbG9zIGFkaWNpb25haXMgYSBzZXJlbSBnZXJhZG9zLlxuICAgKiBAcmV0dXJucyBVbWEgc3RyaW5nIGNvbnRlbmRvIG9zIGVzdGlsb3MgYWRpY2lvbmFpcyBmb3JtYXRhZG9zLlxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUFkZGl0aW9uYWxTdHlsZXModGhlbWU6IFBvVGhlbWVUb2tlbnMpOiBzdHJpbmcge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGVtZSlcbiAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiAhWydjb2xvcicsICdwZXJDb21wb25lbnQnLCAnb25Sb290J10uaW5jbHVkZXMoa2V5KSlcbiAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fTogJHt2YWx1ZX07YClcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cblxuICAvKipcbiAgICogQGRvY3NQcml2YXRlXG4gICAqXG4gICAqIEFwbGljYSBvcyBlc3RpbG9zIGRlIHRlbWEgYW8gZG9jdW1lbnRvLlxuICAgKiBAcGFyYW0gc3R5bGVDc3MgT3MgZXN0aWxvcyBDU1MgYSBzZXJlbSBhcGxpY2Fkb3MuXG4gICAqL1xuICBwcml2YXRlIGFwcGx5VGhlbWVTdHlsZXMoc3R5bGVDc3M6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHN0eWxlRWxlbWVudCA9IHRoaXMuY3JlYXRlU3R5bGVFbGVtZW50KHN0eWxlQ3NzKTtcbiAgICBjb25zdCBleGlzdGluZ1N0eWxlRWxlbWVudCA9IGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvcignI3BvdWlUaGVtZScpO1xuXG4gICAgaWYgKGV4aXN0aW5nU3R5bGVFbGVtZW50KSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKGRvY3VtZW50LmhlYWQsIGV4aXN0aW5nU3R5bGVFbGVtZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmhlYWQsIHN0eWxlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZVRoZW1lVHlwZSh0aGVtZTogUG9UaGVtZSkge1xuICAgIHRoaXMuY2xlYW5UaGVtZUFjdGl2ZSgpO1xuICAgIHRoaXMuc2V0VGhlbWVBY3RpdmUodGhlbWUpO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdodG1sJylbMF0uY2xhc3NMaXN0LmFkZCguLi5bYCR7dGhlbWUubmFtZX0tJHtQb1RoZW1lVHlwZUVudW1bdGhlbWUuYWN0aXZlXX1gXSk7XG4gIH1cblxuICAvKipcbiAgICogUGVyc2lzdGUgZSBkZWZpbmUgbyB0ZW1hIGRvIGFwbGljYXRpdm8gY29tIGJhc2Ugbm9zIGRhZG9zIGFybWF6ZW5hZG9zLlxuICAgKlxuICAgKiBFc3RlIG3DqXRvZG8gcmVjdXBlcmEgb3MgZGFkb3MgZG8gdGVtYSBhcm1hemVuYWRvcyBlIG9zIGFwbGljYSBhbyBhcGxpY2F0aXZvLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UG9UaGVtZX0gUmVjdXBlcmEgbyB0ZW1hIGFybWF6ZW5hZG8uXG4gICAqL1xuICBwZXJzaXN0VGhlbWVBY3RpdmUoKSB7XG4gICAgY29uc3QgX3RoZW1lID0gdGhpcy5nZXRUaGVtZUFjdGl2ZSgpO1xuICAgIHRoaXMuc2V0VGhlbWUoX3RoZW1lLCBfdGhlbWUuYWN0aXZlKTtcbiAgICByZXR1cm4gX3RoZW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsdGVyYSBvIHRpcG8gZG8gdGVtYSBhcm1hemVuYWRvIGUgYXBsaWNhIG9zIG5vdm9zIGVzdGlsb3MgYW8gZG9jdW1lbnRvLlxuICAgKlxuICAgKiBFc3RlIG3DqXRvZG8gYWx0ZXJhIG8gdGlwbyBkbyB0ZW1hIGFybWF6ZW5hZG8gYXRpdm8gKGxpZ2h0L2RhcmspXG4gICAqXG4gICAqIEBwYXJhbSB7UG9UaGVtZVR5cGVFbnVtfSB0aGVtZVR5cGUgTyB0aXBvIGRlIHRlbWEgYSBzZXIgYXBsaWNhZG8sIGxpZ2h0IG91IGRhcmsuXG4gICAqL1xuICBjaGFuZ2VDdXJyZW50VGhlbWVUeXBlKHR5cGU6IFBvVGhlbWVUeXBlRW51bSk6IHZvaWQge1xuICAgIGNvbnN0IF90aGVtZSA9IHRoaXMuZ2V0VGhlbWVBY3RpdmUoKTtcbiAgICBfdGhlbWUuYWN0aXZlID0gdHlwZTtcbiAgICB0aGlzLmNoYW5nZVRoZW1lVHlwZShfdGhlbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE3DqXRvZG8gcmVtb3ZlIG8gdGVtYSBhcm1hemVuYWRvIGUgbGltcGEgdG9kb3Mgb3MgZXN0aWxvcyBkZSB0ZW1hXG4gICAqIGFwbGljYWRvcyBhbyBkb2N1bWVudG8uXG4gICAqL1xuICBjbGVhblRoZW1lQWN0aXZlKCk6IHZvaWQge1xuICAgIGNvbnN0IF90aGVtZSA9IHRoaXMuZ2V0VGhlbWVBY3RpdmUoKTtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaHRtbCcpWzBdLmNsYXNzTGlzdC5yZW1vdmUoYCR7X3RoZW1lLm5hbWV9LSR7UG9UaGVtZVR5cGVFbnVtW190aGVtZS5hY3RpdmVdfWApO1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCd0b3R2cy10aGVtZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkb2NzUHJpdmF0ZVxuICAgKlxuICAgKiBFc3RlIG3DqXRvZG8gZGVmaW5lIHVtIGRhZG9zIGRvIHRlbWEgZSBvIGFybWF6ZW5hLlxuICAgKiBAcGFyYW0gdGhlbWUgT3MgdG9rZW5zIGRlIHRlbWEgY29udGVuZG8gb3MgZXN0aWxvcyBhZGljaW9uYWlzIGEgc2VyZW0gZ2VyYWRvcy5cbiAgICovXG4gIHByaXZhdGUgc2V0VGhlbWVBY3RpdmUodGhlbWU6IFBvVGhlbWUpOiB2b2lkIHtcbiAgICBpZiAodGhlbWUpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0b3R2cy10aGVtZScsIEpTT04uc3RyaW5naWZ5KHRoZW1lKSk7XG4gICAgICB0aGlzLnRoZW1lID0gdGhlbWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldG9ybmEgbyB0ZW1hIGF0aXZvIGNvbW8gdW0gb2JzZXJ2YWJsZS5cbiAgICogQHJldHVybnMge1BvVGhlbWV9IFRlbWEgYXRpdm8uXG4gICAqL1xuICBnZXRUaGVtZUFjdGl2ZSgpOiBQb1RoZW1lIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdGhlbWVEYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndG90dnMtdGhlbWUnKSk7XG4gICAgICBpZiAodGhlbWVEYXRhICYmIEpTT04uc3RyaW5naWZ5KHRoZW1lRGF0YSkgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMudGhlbWUpKSB7XG4gICAgICAgIHRoaXMudGhlbWUgPSB0aGVtZURhdGE7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm8gYW8gb2J0ZXIgbyB0ZW1hIGRvIGFybWF6ZW5hbWVudG8gbG9jYWw6JywgZXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50aGVtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZG9jc1ByaXZhdGVcbiAgICpcbiAgICogR2VyYSBlc3RpbG9zIENTUyBjb20gYmFzZSBub3MgdG9rZW5zIGRlIGNvcmVzIGZvcm5lY2lkb3MuXG4gICAqIEBwYXJhbSB0aGVtZUNvbG9yIE9zIHRva2VucyBkZSBjb3IgYSBzZXJlbSB1c2Fkb3MgcGFyYSBnZXJhciBvcyBlc3RpbG9zLlxuICAgKiBAcmV0dXJucyBVbWEgc3RyaW5nIGNvbnRlbmRvIG9zIGVzdGlsb3MgQ1NTIGdlcmFkb3MuXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZVN0eWxlRWxlbWVudChjc3M6IHN0cmluZyk6IEhUTUxTdHlsZUVsZW1lbnQge1xuICAgIGNvbnN0IHN0eWxlRWxlbWVudCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICBzdHlsZUVsZW1lbnQuaWQgPSAncG91aVRoZW1lJztcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCwgdGhpcy5yZW5kZXJlci5jcmVhdGVUZXh0KGNzcykpO1xuICAgIHJldHVybiBzdHlsZUVsZW1lbnQ7XG4gIH1cblxuICAvKipcbiAgICogQGRvY3NQcml2YXRlXG4gICAqXG4gICAqIEdlcmEgZXN0aWxvcyBDU1MgY29tIGJhc2Ugbm9zIHRva2VucyBkZSBjb3JlcyBmb3JuZWNpZG9zLlxuICAgKiBAcGFyYW0gdGhlbWVDb2xvciBPcyB0b2tlbnMgZGUgY29yIGEgc2VyZW0gdXNhZG9zIHBhcmEgZ2VyYXIgb3MgZXN0aWxvcy5cbiAgICogQHJldHVybnMgVW1hIHN0cmluZyBjb250ZW5kbyBvcyBlc3RpbG9zIENTUyBnZXJhZG9zLlxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZVRoZW1lU3R5bGVzKHRoZW1lQ29sb3I6IFBvVGhlbWVDb2xvcik6IHN0cmluZyB7XG4gICAgY29uc3Qgc2VsZWN0QmdJY29uU3R5bGUgPSB0aGlzLmdldFNlbGVjdEJnSWNvbnNTdHlsZSh0aGVtZUNvbG9yKTtcblxuICAgIHJldHVybiBbXG4gICAgICBPYmplY3QuZW50cmllcyh0aGVtZUNvbG9yKVxuICAgICAgICAuZmxhdE1hcCgoW3R5cGUsIHZhbHVlc10pID0+XG4gICAgICAgICAgT2JqZWN0LmVudHJpZXModmFsdWVzKS5mbGF0TWFwKChbdG9uYWxpdHksIHRvbmFsaXR5VmFsdWVzXSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdhY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHJldHVybiBbYC0tY29sb3ItJHt0eXBlfS0ke3RvbmFsaXR5fTogJHt0b25hbGl0eVZhbHVlc307YF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModG9uYWxpdHlWYWx1ZXMpLm1hcChcbiAgICAgICAgICAgICAgICAoW2xldmVsLCBjb2xvclZhbHVlXSkgPT4gYC0tY29sb3ItJHt0eXBlfS0ke3RvbmFsaXR5fS0ke2xldmVsfTogJHtjb2xvclZhbHVlfTtgXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuam9pbignJyksXG4gICAgICBzZWxlY3RCZ0ljb25TdHlsZVxuICAgIF0uam9pbignJyk7XG4gIH1cblxuICAvKipcbiAgICogQGRvY3NQcml2YXRlXG4gICAqXG4gICAqIEdlcmEgZXN0aWxvcyBDU1MgY29tIGJhc2Ugbm9zIHRva2VucyBwZXIgQ29tcG9uZW50IGZvcm5lY2lkb3MuXG4gICAqIEBwYXJhbSB0aGVtZVBlckNvbXBvbmVudCBPcyB0b2tlbnMgZGUgY29yIGEgc2VyZW0gdXNhZG9zIHBhcmEgZ2VyYXIgb3MgZXN0aWxvcy5cbiAgICogQHJldHVybnMgVW1hIHN0cmluZyBjb250ZW5kbyBvcyBlc3RpbG9zIENTUyBnZXJhZG9zLlxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZVBlckNvbXBvbmVudFN0eWxlcyh0aGVtZVBlckNvbXBvbmVudDogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhlbWVQZXJDb21wb25lbnQpXG4gICAgICAuZmxhdE1hcCgoW3R5cGUsIHZhbHVlc10pID0+XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHZhbHVlcykuZmxhdE1hcCgoW2xldmVsLCBjb2xvclZhbHVlXSkgPT4gW2Ake3R5cGV9IHske2xldmVsfTogJHtjb2xvclZhbHVlfTt9O2BdKVxuICAgICAgKVxuICAgICAgLmpvaW4oJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBvIHRlbWEgYXR1YWwgY29tbyBvIHRlbWEgXCJQb1VJIFBhZHLDo29cIi5cbiAgICpcbiAgICogQHBhcmFtIHtQb1RoZW1lVHlwZUVudW19IHR5cGUgTyB0aXBvIGRlIFRlbWEgYSBzZXIgYXBsaWNhZG8sIGxpZ2h0IC8gZGFyay5cbiAgICovXG4gIHNldERlZmF1bHRUaGVtZSh0eXBlOiBQb1RoZW1lVHlwZUVudW0pOiB2b2lkIHtcbiAgICB0aGlzLnNldFRoZW1lKHBvVGhlbWVEZWZhdWx0LCB0eXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZG9jc1ByaXZhdGVcbiAgICpcbiAgICogUmV0b3JuYSBvIGVzdGlsbyBDU1MgcGFyYSBvIGZ1bmRvIGRvcyDDrWNvbmVzIGRvIGNvbXBvbmVudGUgcG8tc2VsZWN0LCBjb20gYmFzZSBuYXMgY29yZXMgZG8gdGVtYS5cbiAgICpcbiAgICogQHBhcmFtIHtQb1RoZW1lQ29sb3J9IHRoZW1lQ29sb3IgLSBPYmpldG8gY29udGVuZG8gYXMgY29yZXMgZG8gdGVtYS5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBFc3RpbG8gQ1NTIHBhcmEgbyBmdW5kbyBkb3Mgw61jb25lcyBkbyBwby1zZWxlY3QuXG4gICAqL1xuICBwcml2YXRlIGdldFNlbGVjdEJnSWNvbnNTdHlsZSh0aGVtZUNvbG9yOiBQb1RoZW1lQ29sb3IpOiBzdHJpbmcge1xuICAgIGxldCBzZWxlY3RCZ0ljb24gPSAnJztcblxuICAgIGlmICh0aGVtZUNvbG9yPy5icmFuZD8uWycwMSddPy5kYXJrKSB7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuaWNvbk5hbWVMaWIgPT09ICdQaG9zcGhvckljb24nID8gJ3BvLXNlbGVjdCAucG8tc2VsZWN0LXBob3NwaG9yJyA6ICdwby1zZWxlY3QnO1xuICAgICAgc2VsZWN0QmdJY29uICs9IGAke3NlbGVjdG9yfSB7IC0tYmFja2dyb3VuZC1pbWFnZTogdXJsKCR7dGhpcy5nZXRTZWxlY3RCZ0ljb24odGhlbWVDb2xvci5uZXV0cmFsLmRhcmtbNzBdKX0pOyB9O2A7XG4gICAgfVxuXG4gICAgaWYgKHRoZW1lQ29sb3I/LmZlZWRiYWNrPy5uZWdhdGl2ZT8uYmFzZSkge1xuICAgICAgaWYgKHRoaXMuaWNvbk5hbWVMaWIgPT09ICdQb0ljb24nKSB7XG4gICAgICAgIHNlbGVjdEJnSWNvbiArPSBgcG8tc2VsZWN0Lm5nLWRpcnR5Lm5nLWludmFsaWQgc2VsZWN0IHsgLS1iYWNrZ3JvdW5kLWltYWdlOiB1cmwoJHt0aGlzLmdldFNlbGVjdEJnSWNvbih0aGVtZUNvbG9yLmZlZWRiYWNrLm5lZ2F0aXZlLmJhc2UpfSk7IH07YDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaWNvbk5hbWVMaWIgPT09ICdQaG9zcGhvckljb24nKSB7XG4gICAgICAgIHNlbGVjdEJnSWNvbiArPSBgcG8tc2VsZWN0Lm5nLWRpcnR5Lm5nLWludmFsaWQgc2VsZWN0LnBvLXNlbGVjdC1waG9zcGhvciB7IGJhY2tncm91bmQtaW1hZ2U6IHVybCgke3RoaXMuZ2V0U2VsZWN0QmdJY29uKHRoZW1lQ29sb3IuZmVlZGJhY2submVnYXRpdmUuYmFzZSl9KTsgfTtgO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGVtZUNvbG9yPy5uZXV0cmFsPy5saWdodD8uWyczMCddKSB7XG4gICAgICBpZiAodGhpcy5pY29uTmFtZUxpYiA9PT0gJ1BvSWNvbicpIHtcbiAgICAgICAgc2VsZWN0QmdJY29uICs9IGBzZWxlY3Q6ZGlzYWJsZWQgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJHt0aGlzLmdldFNlbGVjdEJnSWNvbih0aGVtZUNvbG9yLm5ldXRyYWwubGlnaHRbJzMwJ10pfSk7IH07YDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaWNvbk5hbWVMaWIgPT09ICdQaG9zcGhvckljb24nKSB7XG4gICAgICAgIHNlbGVjdEJnSWNvbiArPSBgcG8tc2VsZWN0IHNlbGVjdC5wby1zZWxlY3QtcGhvc3Bob3I6ZGlzYWJsZWQgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJHt0aGlzLmdldFNlbGVjdEJnSWNvbih0aGVtZUNvbG9yLm5ldXRyYWwubGlnaHRbJzMwJ10pfSk7IH07YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZWN0QmdJY29uO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkb2NzUHJpdmF0ZVxuICAgKlxuICAgKiBSZXRvcm5hIGEgaW1hZ2VtIFNWRyB1dGlsaXphZGEgY29tbyBmdW5kbyBkbyBwby1zZWxlY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciBDb3IgZGEgSW1hZ2VtIC0gVXRpbGl6YWRhIG5vIGF0cmlidXRvICdmaWxsJy5cbiAgICogQHJldHVybnMge3N0cmluZ30gSW1hZ2VtIFNWRyB1dGlsaXphZGEgbm8gcG8tc2VsZWN0LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTZWxlY3RCZ0ljb24oY29sb3I6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHN2Zzogc3RyaW5nO1xuXG4gICAgaWYgKHRoaXMuaWNvbk5hbWVMaWIgPT09ICdQb0ljb24nKSB7XG4gICAgICBzdmcgPSBgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBgO1xuXG4gICAgICBzdmcgPSBzdmcuY29uY2F0KGB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgYCk7XG4gICAgICBzdmcgPSBzdmcuY29uY2F0KGBkPSdNMTguNzA3IDguMjkzMDFDMTguMzE2IDcuOTAyMDEgMTcuNjg0IDcuOTAyMDEgMTcuMjkzIDguMjkzMDFMMTIgMTMuNTg2TDYuNzA3MDEgYCk7XG4gICAgICBzdmcgPSBzdmcuY29uY2F0KGA4LjI5MzAxQzYuMzE2MDEgNy45MDIwMSA1LjY4NDAxIDcuOTAyMDEgNS4yOTMwMSA4LjI5MzAxQzQuOTAyMDEgOC42ODQwMSA0LjkwMjAxIGApO1xuICAgICAgc3ZnID0gc3ZnLmNvbmNhdChgOS4zMTYwMSA1LjI5MzAxIDkuNzA3MDFMMTEuMjkzIDE1LjcwN0MxMS40ODggMTUuOTAyIDExLjc0NCAxNiAxMiAxNkMxMi4yNTYgMTYgMTIuNTEyIGApO1xuICAgICAgc3ZnID0gc3ZnLmNvbmNhdChgMTUuOTAyIDEyLjcwNyAxNS43MDdMMTguNzA3IDkuNzA3MDFDMTkuMDk4IDkuMzE2MDEgMTkuMDk4IDguNjg0MDEgMTguNzA3IDguMjkzMDFaJyBgKTtcbiAgICAgIHN2ZyA9IHN2Zy5jb25jYXQoYGZpbGw9JyR7Y29sb3IucmVwbGFjZSgnIycsICclMjMnKX0nLyUzRSUzQy9zdmclM0UlMEFcIik7YCk7XG5cbiAgICAgIHJldHVybiBzdmc7XG4gICAgfVxuXG4gICAgc3ZnID0gYFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNTYgMjU2JyBmaWxsPScke2NvbG9yLnJlcGxhY2UoJyMnLCAnJTIzJyl9JyBgO1xuICAgIHN2ZyA9IHN2Zy5jb25jYXQoYHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGApO1xuICAgIHN2ZyA9IHN2Zy5jb25jYXQoXG4gICAgICBgZD0nTTIxMy42NiwxMDEuNjZsLTgwLDgwYTgsOCwwLDAsMS0xMS4zMiwwbC04MC04MEE4LDgsMCwwLDEsNTMuNjYsOTAuMzRMMTI4LDE2NC42OWw3NC4zNC03NC4zNWE4LDgsMCwwLDEsMTEuMzIsMTEuMzJaJ2BcbiAgICApO1xuICAgIHN2ZyA9IHN2Zy5jb25jYXQoYCUzRSUzQy9wYXRoJTNFJTNDL3N2ZyUzRVwiKTtgKTtcblxuICAgIHJldHVybiBzdmc7XG4gIH1cbn1cbiJdfQ==
|