valtech-components 2.0.290 → 2.0.291
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/examples/comprehensive-link-test.component.mjs +208 -0
- package/esm2022/lib/examples/link-processing-example.component.mjs +26 -4
- package/esm2022/lib/services/link-processor.service.mjs +70 -27
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/valtech-components.mjs +300 -30
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/examples/comprehensive-link-test.component.d.ts +23 -0
- package/lib/examples/link-processing-example.component.d.ts +1 -0
- package/lib/services/link-processor.service.d.ts +6 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/src/lib/components/styles/overrides.scss +2 -2
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { TextComponent } from '../components/atoms/text/text.component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* ComprehensiveLinkTestComponent - Componente de prueba exhaustiva para el procesamiento de enlaces.
|
|
6
|
+
*
|
|
7
|
+
* Este componente demuestra todos los casos edge y escenarios complejos de procesamiento de enlaces,
|
|
8
|
+
* incluyendo puntuación, URLs complejas, y mezclas de formatos.
|
|
9
|
+
*
|
|
10
|
+
* @example Uso en template:
|
|
11
|
+
* ```html
|
|
12
|
+
* <val-comprehensive-link-test></val-comprehensive-link-test>
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export class ComprehensiveLinkTestComponent {
|
|
16
|
+
constructor() {
|
|
17
|
+
this.punctuationProps = {
|
|
18
|
+
content: 'Diferentes puntuaciones: https://angular.io, también https://github.com! ¿Conoces https://typescript.org? Final: https://rxjs.dev. Entre paréntesis (https://zone.js) y con comillas "https://ionic.io".',
|
|
19
|
+
size: 'medium',
|
|
20
|
+
color: 'dark',
|
|
21
|
+
bold: false,
|
|
22
|
+
processLinks: true,
|
|
23
|
+
linkConfig: {
|
|
24
|
+
openExternalInNewTab: true,
|
|
25
|
+
linkClass: 'test-punctuation',
|
|
26
|
+
externalLinkClass: 'test-external',
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
this.complexUrlProps = {
|
|
30
|
+
content: 'URLs complejas: https://api.github.com/repos/angular/angular/issues?state=open&sort=updated&per_page=50, búsqueda https://google.com/search?q=angular+ionic+components#results, y documentación https://angular.io/guide/getting-started#development-environment.',
|
|
31
|
+
size: 'medium',
|
|
32
|
+
color: 'dark',
|
|
33
|
+
bold: false,
|
|
34
|
+
processLinks: true,
|
|
35
|
+
linkConfig: {
|
|
36
|
+
openExternalInNewTab: true,
|
|
37
|
+
linkClass: 'test-complex',
|
|
38
|
+
externalLinkClass: 'test-external',
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
this.parenthesesProps = {
|
|
42
|
+
content: 'Paréntesis de contexto (ver https://docs.angular.io) vs URLs con paréntesis https://example.com/api/method(param) en el contenido. También funciona (https://ionic.io/docs).',
|
|
43
|
+
size: 'medium',
|
|
44
|
+
color: 'dark',
|
|
45
|
+
bold: false,
|
|
46
|
+
processLinks: true,
|
|
47
|
+
linkConfig: {
|
|
48
|
+
openExternalInNewTab: true,
|
|
49
|
+
linkClass: 'test-parentheses',
|
|
50
|
+
externalLinkClass: 'test-external',
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
this.mixedFormatsProps = {
|
|
54
|
+
content: 'Formatos mezclados: [Documentación oficial](https://angular.io/docs), enlace directo https://github.com/angular/angular, ruta interna /dashboard/settings, [guía de inicio](/getting-started), y API https://api.example.com/v1/users?active=true.',
|
|
55
|
+
size: 'medium',
|
|
56
|
+
color: 'dark',
|
|
57
|
+
bold: false,
|
|
58
|
+
processLinks: true,
|
|
59
|
+
linkConfig: {
|
|
60
|
+
openExternalInNewTab: true,
|
|
61
|
+
openInternalInNewTab: false,
|
|
62
|
+
processMarkdownLinks: true,
|
|
63
|
+
linkClass: 'test-mixed',
|
|
64
|
+
externalLinkClass: 'test-external',
|
|
65
|
+
internalLinkClass: 'test-internal',
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
this.edgeCasesProps = {
|
|
69
|
+
content: 'Casos extremos: "https://quoted-url.com", múltiple puntuación https://example.com?!!, URL al final de oración https://final-url.org. También consecutivos: https://first.com y https://second.com.',
|
|
70
|
+
size: 'medium',
|
|
71
|
+
color: 'dark',
|
|
72
|
+
bold: false,
|
|
73
|
+
processLinks: true,
|
|
74
|
+
linkConfig: {
|
|
75
|
+
openExternalInNewTab: true,
|
|
76
|
+
linkClass: 'test-edge',
|
|
77
|
+
externalLinkClass: 'test-external',
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
this.devUrlsProps = {
|
|
81
|
+
content: 'URLs de desarrollo: http://localhost:4200/dashboard, servidor local https://127.0.0.1:8080/api/status, desarrollo http://dev.example.com:3000/debug?verbose=true, y túnel https://abc123.ngrok.io/webhook.',
|
|
82
|
+
size: 'medium',
|
|
83
|
+
color: 'dark',
|
|
84
|
+
bold: false,
|
|
85
|
+
processLinks: true,
|
|
86
|
+
linkConfig: {
|
|
87
|
+
openExternalInNewTab: false, // Para desarrollo, puede ser útil no abrir en nueva pestaña
|
|
88
|
+
linkClass: 'test-dev',
|
|
89
|
+
externalLinkClass: 'test-dev-external',
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ComprehensiveLinkTestComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
94
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ComprehensiveLinkTestComponent, isStandalone: true, selector: "val-comprehensive-link-test", ngImport: i0, template: `
|
|
95
|
+
<div class="comprehensive-test">
|
|
96
|
+
<h2>Prueba Exhaustiva de Procesamiento de Enlaces</h2>
|
|
97
|
+
|
|
98
|
+
<div class="test-section">
|
|
99
|
+
<h3>✅ Puntuación Final - SOLUCIONADO</h3>
|
|
100
|
+
<val-text [props]="punctuationProps"></val-text>
|
|
101
|
+
<p class="note">
|
|
102
|
+
<strong>Esperado:</strong> Los enlaces no incluyen puntuación final (.,;!?), pero la puntuación se preserva
|
|
103
|
+
como texto después del enlace.
|
|
104
|
+
</p>
|
|
105
|
+
</div>
|
|
106
|
+
|
|
107
|
+
<div class="test-section">
|
|
108
|
+
<h3>✅ URLs Complejas con Parámetros - SOLUCIONADO</h3>
|
|
109
|
+
<val-text [props]="complexUrlProps"></val-text>
|
|
110
|
+
<p class="note">
|
|
111
|
+
<strong>Esperado:</strong> URLs con query params, fragmentos y rutas complejas se preservan completamente.
|
|
112
|
+
</p>
|
|
113
|
+
</div>
|
|
114
|
+
|
|
115
|
+
<div class="test-section">
|
|
116
|
+
<h3>✅ Paréntesis Inteligentes - SOLUCIONADO</h3>
|
|
117
|
+
<val-text [props]="parenthesesProps"></val-text>
|
|
118
|
+
<p class="note">
|
|
119
|
+
<strong>Esperado:</strong> Paréntesis de contexto (texto) vs paréntesis de URL se manejan correctamente.
|
|
120
|
+
</p>
|
|
121
|
+
</div>
|
|
122
|
+
|
|
123
|
+
<div class="test-section">
|
|
124
|
+
<h3>✅ Mezcla de Formatos - SOLUCIONADO</h3>
|
|
125
|
+
<val-text [props]="mixedFormatsProps"></val-text>
|
|
126
|
+
<p class="note">
|
|
127
|
+
<strong>Esperado:</strong> Enlaces Markdown, URLs directas y rutas internas coexisten sin conflictos.
|
|
128
|
+
</p>
|
|
129
|
+
</div>
|
|
130
|
+
|
|
131
|
+
<div class="test-section">
|
|
132
|
+
<h3>✅ Casos Extremos - SOLUCIONADO</h3>
|
|
133
|
+
<val-text [props]="edgeCasesProps"></val-text>
|
|
134
|
+
<p class="note">
|
|
135
|
+
<strong>Esperado:</strong> Comillas, múltiple puntuación, y URLs al final de oraciones se procesan
|
|
136
|
+
correctamente.
|
|
137
|
+
</p>
|
|
138
|
+
</div>
|
|
139
|
+
|
|
140
|
+
<div class="test-section">
|
|
141
|
+
<h3>✅ URLs de Desarrollo - SOLUCIONADO</h3>
|
|
142
|
+
<val-text [props]="devUrlsProps"></val-text>
|
|
143
|
+
<p class="note">
|
|
144
|
+
<strong>Esperado:</strong> URLs de localhost, puertos, y rutas de desarrollo se detectan correctamente.
|
|
145
|
+
</p>
|
|
146
|
+
</div>
|
|
147
|
+
</div>
|
|
148
|
+
`, isInline: true, styles: [".comprehensive-test{padding:20px;max-width:1000px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.test-section{margin-bottom:32px;padding:20px;border:2px solid var(--ion-color-success, #2dd36f);border-radius:12px;background:var(--ion-color-success-tint, #42d77d) 10}h2{color:var(--ion-color-primary, #3880ff);margin-bottom:24px;text-align:center}h3{color:var(--ion-color-success, #2dd36f);margin-bottom:16px;font-size:18px;display:flex;align-items:center;gap:8px}.note{margin-top:12px;padding:12px;background:var(--ion-color-light, #f4f5f8);border-radius:8px;font-size:14px;color:var(--ion-color-medium, #92949c);border-left:4px solid var(--ion-color-primary, #3880ff)}.note strong{color:var(--ion-color-dark, #222428)}\n"], dependencies: [{ kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }] }); }
|
|
149
|
+
}
|
|
150
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ComprehensiveLinkTestComponent, decorators: [{
|
|
151
|
+
type: Component,
|
|
152
|
+
args: [{ selector: 'val-comprehensive-link-test', standalone: true, imports: [TextComponent], template: `
|
|
153
|
+
<div class="comprehensive-test">
|
|
154
|
+
<h2>Prueba Exhaustiva de Procesamiento de Enlaces</h2>
|
|
155
|
+
|
|
156
|
+
<div class="test-section">
|
|
157
|
+
<h3>✅ Puntuación Final - SOLUCIONADO</h3>
|
|
158
|
+
<val-text [props]="punctuationProps"></val-text>
|
|
159
|
+
<p class="note">
|
|
160
|
+
<strong>Esperado:</strong> Los enlaces no incluyen puntuación final (.,;!?), pero la puntuación se preserva
|
|
161
|
+
como texto después del enlace.
|
|
162
|
+
</p>
|
|
163
|
+
</div>
|
|
164
|
+
|
|
165
|
+
<div class="test-section">
|
|
166
|
+
<h3>✅ URLs Complejas con Parámetros - SOLUCIONADO</h3>
|
|
167
|
+
<val-text [props]="complexUrlProps"></val-text>
|
|
168
|
+
<p class="note">
|
|
169
|
+
<strong>Esperado:</strong> URLs con query params, fragmentos y rutas complejas se preservan completamente.
|
|
170
|
+
</p>
|
|
171
|
+
</div>
|
|
172
|
+
|
|
173
|
+
<div class="test-section">
|
|
174
|
+
<h3>✅ Paréntesis Inteligentes - SOLUCIONADO</h3>
|
|
175
|
+
<val-text [props]="parenthesesProps"></val-text>
|
|
176
|
+
<p class="note">
|
|
177
|
+
<strong>Esperado:</strong> Paréntesis de contexto (texto) vs paréntesis de URL se manejan correctamente.
|
|
178
|
+
</p>
|
|
179
|
+
</div>
|
|
180
|
+
|
|
181
|
+
<div class="test-section">
|
|
182
|
+
<h3>✅ Mezcla de Formatos - SOLUCIONADO</h3>
|
|
183
|
+
<val-text [props]="mixedFormatsProps"></val-text>
|
|
184
|
+
<p class="note">
|
|
185
|
+
<strong>Esperado:</strong> Enlaces Markdown, URLs directas y rutas internas coexisten sin conflictos.
|
|
186
|
+
</p>
|
|
187
|
+
</div>
|
|
188
|
+
|
|
189
|
+
<div class="test-section">
|
|
190
|
+
<h3>✅ Casos Extremos - SOLUCIONADO</h3>
|
|
191
|
+
<val-text [props]="edgeCasesProps"></val-text>
|
|
192
|
+
<p class="note">
|
|
193
|
+
<strong>Esperado:</strong> Comillas, múltiple puntuación, y URLs al final de oraciones se procesan
|
|
194
|
+
correctamente.
|
|
195
|
+
</p>
|
|
196
|
+
</div>
|
|
197
|
+
|
|
198
|
+
<div class="test-section">
|
|
199
|
+
<h3>✅ URLs de Desarrollo - SOLUCIONADO</h3>
|
|
200
|
+
<val-text [props]="devUrlsProps"></val-text>
|
|
201
|
+
<p class="note">
|
|
202
|
+
<strong>Esperado:</strong> URLs de localhost, puertos, y rutas de desarrollo se detectan correctamente.
|
|
203
|
+
</p>
|
|
204
|
+
</div>
|
|
205
|
+
</div>
|
|
206
|
+
`, styles: [".comprehensive-test{padding:20px;max-width:1000px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.test-section{margin-bottom:32px;padding:20px;border:2px solid var(--ion-color-success, #2dd36f);border-radius:12px;background:var(--ion-color-success-tint, #42d77d) 10}h2{color:var(--ion-color-primary, #3880ff);margin-bottom:24px;text-align:center}h3{color:var(--ion-color-success, #2dd36f);margin-bottom:16px;font-size:18px;display:flex;align-items:center;gap:8px}.note{margin-top:12px;padding:12px;background:var(--ion-color-light, #f4f5f8);border-radius:8px;font-size:14px;color:var(--ion-color-medium, #92949c);border-left:4px solid var(--ion-color-primary, #3880ff)}.note strong{color:var(--ion-color-dark, #222428)}\n"] }]
|
|
207
|
+
}] });
|
|
208
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHJlaGVuc2l2ZS1saW5rLXRlc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGVjaC1jb21wb25lbnRzL3NyYy9saWIvZXhhbXBsZXMvY29tcHJlaGVuc2l2ZS1saW5rLXRlc3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOztBQUd4RTs7Ozs7Ozs7OztHQVVHO0FBMkdILE1BQU0sT0FBTyw4QkFBOEI7SUExRzNDO1FBMkdFLHFCQUFnQixHQUFpQjtZQUMvQixPQUFPLEVBQ0wsME1BQTBNO1lBQzVNLElBQUksRUFBRSxRQUFRO1lBQ2QsS0FBSyxFQUFFLE1BQU07WUFDYixJQUFJLEVBQUUsS0FBSztZQUNYLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFVBQVUsRUFBRTtnQkFDVixvQkFBb0IsRUFBRSxJQUFJO2dCQUMxQixTQUFTLEVBQUUsa0JBQWtCO2dCQUM3QixpQkFBaUIsRUFBRSxlQUFlO2FBQ25DO1NBQ0YsQ0FBQztRQUVGLG9CQUFlLEdBQWlCO1lBQzlCLE9BQU8sRUFDTCxtUUFBbVE7WUFDclEsSUFBSSxFQUFFLFFBQVE7WUFDZCxLQUFLLEVBQUUsTUFBTTtZQUNiLElBQUksRUFBRSxLQUFLO1lBQ1gsWUFBWSxFQUFFLElBQUk7WUFDbEIsVUFBVSxFQUFFO2dCQUNWLG9CQUFvQixFQUFFLElBQUk7Z0JBQzFCLFNBQVMsRUFBRSxjQUFjO2dCQUN6QixpQkFBaUIsRUFBRSxlQUFlO2FBQ25DO1NBQ0YsQ0FBQztRQUVGLHFCQUFnQixHQUFpQjtZQUMvQixPQUFPLEVBQ0wsOEtBQThLO1lBQ2hMLElBQUksRUFBRSxRQUFRO1lBQ2QsS0FBSyxFQUFFLE1BQU07WUFDYixJQUFJLEVBQUUsS0FBSztZQUNYLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFVBQVUsRUFBRTtnQkFDVixvQkFBb0IsRUFBRSxJQUFJO2dCQUMxQixTQUFTLEVBQUUsa0JBQWtCO2dCQUM3QixpQkFBaUIsRUFBRSxlQUFlO2FBQ25DO1NBQ0YsQ0FBQztRQUVGLHNCQUFpQixHQUFpQjtZQUNoQyxPQUFPLEVBQ0wsb1BBQW9QO1lBQ3RQLElBQUksRUFBRSxRQUFRO1lBQ2QsS0FBSyxFQUFFLE1BQU07WUFDYixJQUFJLEVBQUUsS0FBSztZQUNYLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFVBQVUsRUFBRTtnQkFDVixvQkFBb0IsRUFBRSxJQUFJO2dCQUMxQixvQkFBb0IsRUFBRSxLQUFLO2dCQUMzQixvQkFBb0IsRUFBRSxJQUFJO2dCQUMxQixTQUFTLEVBQUUsWUFBWTtnQkFDdkIsaUJBQWlCLEVBQUUsZUFBZTtnQkFDbEMsaUJBQWlCLEVBQUUsZUFBZTthQUNuQztTQUNGLENBQUM7UUFFRixtQkFBYyxHQUFpQjtZQUM3QixPQUFPLEVBQ0wsb01BQW9NO1lBQ3RNLElBQUksRUFBRSxRQUFRO1lBQ2QsS0FBSyxFQUFFLE1BQU07WUFDYixJQUFJLEVBQUUsS0FBSztZQUNYLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFVBQVUsRUFBRTtnQkFDVixvQkFBb0IsRUFBRSxJQUFJO2dCQUMxQixTQUFTLEVBQUUsV0FBVztnQkFDdEIsaUJBQWlCLEVBQUUsZUFBZTthQUNuQztTQUNGLENBQUM7UUFFRixpQkFBWSxHQUFpQjtZQUMzQixPQUFPLEVBQ0wsNE1BQTRNO1lBQzlNLElBQUksRUFBRSxRQUFRO1lBQ2QsS0FBSyxFQUFFLE1BQU07WUFDYixJQUFJLEVBQUUsS0FBSztZQUNYLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFVBQVUsRUFBRTtnQkFDVixvQkFBb0IsRUFBRSxLQUFLLEVBQUUsNERBQTREO2dCQUN6RixTQUFTLEVBQUUsVUFBVTtnQkFDckIsaUJBQWlCLEVBQUUsbUJBQW1CO2FBQ3ZDO1NBQ0YsQ0FBQztLQUNIOytHQXZGWSw4QkFBOEI7bUdBQTlCLDhCQUE4Qix1RkF0Ry9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzRFQsb3pCQXZEUyxhQUFhOzs0RkF1R1osOEJBQThCO2tCQTFHMUMsU0FBUzsrQkFDRSw2QkFBNkIsY0FDM0IsSUFBSSxXQUNQLENBQUMsYUFBYSxDQUFDLFlBQ2Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNEVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGV4dENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXRvbXMvdGV4dC90ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0TWV0YWRhdGEgfSBmcm9tICcuLi9jb21wb25lbnRzL2F0b21zL3RleHQvdHlwZXMnO1xuXG4vKipcbiAqIENvbXByZWhlbnNpdmVMaW5rVGVzdENvbXBvbmVudCAtIENvbXBvbmVudGUgZGUgcHJ1ZWJhIGV4aGF1c3RpdmEgcGFyYSBlbCBwcm9jZXNhbWllbnRvIGRlIGVubGFjZXMuXG4gKlxuICogRXN0ZSBjb21wb25lbnRlIGRlbXVlc3RyYSB0b2RvcyBsb3MgY2Fzb3MgZWRnZSB5IGVzY2VuYXJpb3MgY29tcGxlam9zIGRlIHByb2Nlc2FtaWVudG8gZGUgZW5sYWNlcyxcbiAqIGluY2x1eWVuZG8gcHVudHVhY2nDs24sIFVSTHMgY29tcGxlamFzLCB5IG1lemNsYXMgZGUgZm9ybWF0b3MuXG4gKlxuICogQGV4YW1wbGUgVXNvIGVuIHRlbXBsYXRlOlxuICogYGBgaHRtbFxuICogPHZhbC1jb21wcmVoZW5zaXZlLWxpbmstdGVzdD48L3ZhbC1jb21wcmVoZW5zaXZlLWxpbmstdGVzdD5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtY29tcHJlaGVuc2l2ZS1saW5rLXRlc3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbVGV4dENvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImNvbXByZWhlbnNpdmUtdGVzdFwiPlxuICAgICAgPGgyPlBydWViYSBFeGhhdXN0aXZhIGRlIFByb2Nlc2FtaWVudG8gZGUgRW5sYWNlczwvaDI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXN0LXNlY3Rpb25cIj5cbiAgICAgICAgPGgzPuKchSBQdW50dWFjacOzbiBGaW5hbCAtIFNPTFVDSU9OQURPPC9oMz5cbiAgICAgICAgPHZhbC10ZXh0IFtwcm9wc109XCJwdW5jdHVhdGlvblByb3BzXCI+PC92YWwtdGV4dD5cbiAgICAgICAgPHAgY2xhc3M9XCJub3RlXCI+XG4gICAgICAgICAgPHN0cm9uZz5Fc3BlcmFkbzo8L3N0cm9uZz4gTG9zIGVubGFjZXMgbm8gaW5jbHV5ZW4gcHVudHVhY2nDs24gZmluYWwgKC4sOyE/KSwgcGVybyBsYSBwdW50dWFjacOzbiBzZSBwcmVzZXJ2YVxuICAgICAgICAgIGNvbW8gdGV4dG8gZGVzcHXDqXMgZGVsIGVubGFjZS5cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXN0LXNlY3Rpb25cIj5cbiAgICAgICAgPGgzPuKchSBVUkxzIENvbXBsZWphcyBjb24gUGFyw6FtZXRyb3MgLSBTT0xVQ0lPTkFETzwvaDM+XG4gICAgICAgIDx2YWwtdGV4dCBbcHJvcHNdPVwiY29tcGxleFVybFByb3BzXCI+PC92YWwtdGV4dD5cbiAgICAgICAgPHAgY2xhc3M9XCJub3RlXCI+XG4gICAgICAgICAgPHN0cm9uZz5Fc3BlcmFkbzo8L3N0cm9uZz4gVVJMcyBjb24gcXVlcnkgcGFyYW1zLCBmcmFnbWVudG9zIHkgcnV0YXMgY29tcGxlamFzIHNlIHByZXNlcnZhbiBjb21wbGV0YW1lbnRlLlxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInRlc3Qtc2VjdGlvblwiPlxuICAgICAgICA8aDM+4pyFIFBhcsOpbnRlc2lzIEludGVsaWdlbnRlcyAtIFNPTFVDSU9OQURPPC9oMz5cbiAgICAgICAgPHZhbC10ZXh0IFtwcm9wc109XCJwYXJlbnRoZXNlc1Byb3BzXCI+PC92YWwtdGV4dD5cbiAgICAgICAgPHAgY2xhc3M9XCJub3RlXCI+XG4gICAgICAgICAgPHN0cm9uZz5Fc3BlcmFkbzo8L3N0cm9uZz4gUGFyw6ludGVzaXMgZGUgY29udGV4dG8gKHRleHRvKSB2cyBwYXLDqW50ZXNpcyBkZSBVUkwgc2UgbWFuZWphbiBjb3JyZWN0YW1lbnRlLlxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInRlc3Qtc2VjdGlvblwiPlxuICAgICAgICA8aDM+4pyFIE1lemNsYSBkZSBGb3JtYXRvcyAtIFNPTFVDSU9OQURPPC9oMz5cbiAgICAgICAgPHZhbC10ZXh0IFtwcm9wc109XCJtaXhlZEZvcm1hdHNQcm9wc1wiPjwvdmFsLXRleHQ+XG4gICAgICAgIDxwIGNsYXNzPVwibm90ZVwiPlxuICAgICAgICAgIDxzdHJvbmc+RXNwZXJhZG86PC9zdHJvbmc+IEVubGFjZXMgTWFya2Rvd24sIFVSTHMgZGlyZWN0YXMgeSBydXRhcyBpbnRlcm5hcyBjb2V4aXN0ZW4gc2luIGNvbmZsaWN0b3MuXG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidGVzdC1zZWN0aW9uXCI+XG4gICAgICAgIDxoMz7inIUgQ2Fzb3MgRXh0cmVtb3MgLSBTT0xVQ0lPTkFETzwvaDM+XG4gICAgICAgIDx2YWwtdGV4dCBbcHJvcHNdPVwiZWRnZUNhc2VzUHJvcHNcIj48L3ZhbC10ZXh0PlxuICAgICAgICA8cCBjbGFzcz1cIm5vdGVcIj5cbiAgICAgICAgICA8c3Ryb25nPkVzcGVyYWRvOjwvc3Ryb25nPiBDb21pbGxhcywgbcO6bHRpcGxlIHB1bnR1YWNpw7NuLCB5IFVSTHMgYWwgZmluYWwgZGUgb3JhY2lvbmVzIHNlIHByb2Nlc2FuXG4gICAgICAgICAgY29ycmVjdGFtZW50ZS5cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXN0LXNlY3Rpb25cIj5cbiAgICAgICAgPGgzPuKchSBVUkxzIGRlIERlc2Fycm9sbG8gLSBTT0xVQ0lPTkFETzwvaDM+XG4gICAgICAgIDx2YWwtdGV4dCBbcHJvcHNdPVwiZGV2VXJsc1Byb3BzXCI+PC92YWwtdGV4dD5cbiAgICAgICAgPHAgY2xhc3M9XCJub3RlXCI+XG4gICAgICAgICAgPHN0cm9uZz5Fc3BlcmFkbzo8L3N0cm9uZz4gVVJMcyBkZSBsb2NhbGhvc3QsIHB1ZXJ0b3MsIHkgcnV0YXMgZGUgZGVzYXJyb2xsbyBzZSBkZXRlY3RhbiBjb3JyZWN0YW1lbnRlLlxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLmNvbXByZWhlbnNpdmUtdGVzdCB7XG4gICAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICAgIG1heC13aWR0aDogMTAwMHB4O1xuICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7XG4gICAgICB9XG5cbiAgICAgIC50ZXN0LXNlY3Rpb24ge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAzMnB4O1xuICAgICAgICBwYWRkaW5nOiAyMHB4O1xuICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1pb24tY29sb3Itc3VjY2VzcywgIzJkZDM2Zik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1zdWNjZXNzLXRpbnQsICM0MmQ3N2QpIDEwO1xuICAgICAgfVxuXG4gICAgICBoMiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSwgIzM4ODBmZik7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgaDMge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXN1Y2Nlc3MsICMyZGQzNmYpO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgfVxuXG4gICAgICAubm90ZSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDEycHg7XG4gICAgICAgIHBhZGRpbmc6IDEycHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCwgI2Y0ZjVmOCk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdmFyKC0taW9uLWNvbG9yLXByaW1hcnksICMzODgwZmYpO1xuICAgICAgfVxuXG4gICAgICAubm90ZSBzdHJvbmcge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmssICMyMjI0MjgpO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIENvbXByZWhlbnNpdmVMaW5rVGVzdENvbXBvbmVudCB7XG4gIHB1bmN0dWF0aW9uUHJvcHM6IFRleHRNZXRhZGF0YSA9IHtcbiAgICBjb250ZW50OlxuICAgICAgJ0RpZmVyZW50ZXMgcHVudHVhY2lvbmVzOiBodHRwczovL2FuZ3VsYXIuaW8sIHRhbWJpw6luIGh0dHBzOi8vZ2l0aHViLmNvbSEgwr9Db25vY2VzIGh0dHBzOi8vdHlwZXNjcmlwdC5vcmc/IEZpbmFsOiBodHRwczovL3J4anMuZGV2LiBFbnRyZSBwYXLDqW50ZXNpcyAoaHR0cHM6Ly96b25lLmpzKSB5IGNvbiBjb21pbGxhcyBcImh0dHBzOi8vaW9uaWMuaW9cIi4nLFxuICAgIHNpemU6ICdtZWRpdW0nLFxuICAgIGNvbG9yOiAnZGFyaycsXG4gICAgYm9sZDogZmFsc2UsXG4gICAgcHJvY2Vzc0xpbmtzOiB0cnVlLFxuICAgIGxpbmtDb25maWc6IHtcbiAgICAgIG9wZW5FeHRlcm5hbEluTmV3VGFiOiB0cnVlLFxuICAgICAgbGlua0NsYXNzOiAndGVzdC1wdW5jdHVhdGlvbicsXG4gICAgICBleHRlcm5hbExpbmtDbGFzczogJ3Rlc3QtZXh0ZXJuYWwnLFxuICAgIH0sXG4gIH07XG5cbiAgY29tcGxleFVybFByb3BzOiBUZXh0TWV0YWRhdGEgPSB7XG4gICAgY29udGVudDpcbiAgICAgICdVUkxzIGNvbXBsZWphczogaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzP3N0YXRlPW9wZW4mc29ydD11cGRhdGVkJnBlcl9wYWdlPTUwLCBiw7pzcXVlZGEgaHR0cHM6Ly9nb29nbGUuY29tL3NlYXJjaD9xPWFuZ3VsYXIraW9uaWMrY29tcG9uZW50cyNyZXN1bHRzLCB5IGRvY3VtZW50YWNpw7NuIGh0dHBzOi8vYW5ndWxhci5pby9ndWlkZS9nZXR0aW5nLXN0YXJ0ZWQjZGV2ZWxvcG1lbnQtZW52aXJvbm1lbnQuJyxcbiAgICBzaXplOiAnbWVkaXVtJyxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGJvbGQ6IGZhbHNlLFxuICAgIHByb2Nlc3NMaW5rczogdHJ1ZSxcbiAgICBsaW5rQ29uZmlnOiB7XG4gICAgICBvcGVuRXh0ZXJuYWxJbk5ld1RhYjogdHJ1ZSxcbiAgICAgIGxpbmtDbGFzczogJ3Rlc3QtY29tcGxleCcsXG4gICAgICBleHRlcm5hbExpbmtDbGFzczogJ3Rlc3QtZXh0ZXJuYWwnLFxuICAgIH0sXG4gIH07XG5cbiAgcGFyZW50aGVzZXNQcm9wczogVGV4dE1ldGFkYXRhID0ge1xuICAgIGNvbnRlbnQ6XG4gICAgICAnUGFyw6ludGVzaXMgZGUgY29udGV4dG8gKHZlciBodHRwczovL2RvY3MuYW5ndWxhci5pbykgdnMgVVJMcyBjb24gcGFyw6ludGVzaXMgaHR0cHM6Ly9leGFtcGxlLmNvbS9hcGkvbWV0aG9kKHBhcmFtKSBlbiBlbCBjb250ZW5pZG8uIFRhbWJpw6luIGZ1bmNpb25hIChodHRwczovL2lvbmljLmlvL2RvY3MpLicsXG4gICAgc2l6ZTogJ21lZGl1bScsXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBib2xkOiBmYWxzZSxcbiAgICBwcm9jZXNzTGlua3M6IHRydWUsXG4gICAgbGlua0NvbmZpZzoge1xuICAgICAgb3BlbkV4dGVybmFsSW5OZXdUYWI6IHRydWUsXG4gICAgICBsaW5rQ2xhc3M6ICd0ZXN0LXBhcmVudGhlc2VzJyxcbiAgICAgIGV4dGVybmFsTGlua0NsYXNzOiAndGVzdC1leHRlcm5hbCcsXG4gICAgfSxcbiAgfTtcblxuICBtaXhlZEZvcm1hdHNQcm9wczogVGV4dE1ldGFkYXRhID0ge1xuICAgIGNvbnRlbnQ6XG4gICAgICAnRm9ybWF0b3MgbWV6Y2xhZG9zOiBbRG9jdW1lbnRhY2nDs24gb2ZpY2lhbF0oaHR0cHM6Ly9hbmd1bGFyLmlvL2RvY3MpLCBlbmxhY2UgZGlyZWN0byBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyLCBydXRhIGludGVybmEgL2Rhc2hib2FyZC9zZXR0aW5ncywgW2d1w61hIGRlIGluaWNpb10oL2dldHRpbmctc3RhcnRlZCksIHkgQVBJIGh0dHBzOi8vYXBpLmV4YW1wbGUuY29tL3YxL3VzZXJzP2FjdGl2ZT10cnVlLicsXG4gICAgc2l6ZTogJ21lZGl1bScsXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBib2xkOiBmYWxzZSxcbiAgICBwcm9jZXNzTGlua3M6IHRydWUsXG4gICAgbGlua0NvbmZpZzoge1xuICAgICAgb3BlbkV4dGVybmFsSW5OZXdUYWI6IHRydWUsXG4gICAgICBvcGVuSW50ZXJuYWxJbk5ld1RhYjogZmFsc2UsXG4gICAgICBwcm9jZXNzTWFya2Rvd25MaW5rczogdHJ1ZSxcbiAgICAgIGxpbmtDbGFzczogJ3Rlc3QtbWl4ZWQnLFxuICAgICAgZXh0ZXJuYWxMaW5rQ2xhc3M6ICd0ZXN0LWV4dGVybmFsJyxcbiAgICAgIGludGVybmFsTGlua0NsYXNzOiAndGVzdC1pbnRlcm5hbCcsXG4gICAgfSxcbiAgfTtcblxuICBlZGdlQ2FzZXNQcm9wczogVGV4dE1ldGFkYXRhID0ge1xuICAgIGNvbnRlbnQ6XG4gICAgICAnQ2Fzb3MgZXh0cmVtb3M6IFwiaHR0cHM6Ly9xdW90ZWQtdXJsLmNvbVwiLCBtw7psdGlwbGUgcHVudHVhY2nDs24gaHR0cHM6Ly9leGFtcGxlLmNvbT8hISwgVVJMIGFsIGZpbmFsIGRlIG9yYWNpw7NuIGh0dHBzOi8vZmluYWwtdXJsLm9yZy4gVGFtYmnDqW4gY29uc2VjdXRpdm9zOiBodHRwczovL2ZpcnN0LmNvbSB5IGh0dHBzOi8vc2Vjb25kLmNvbS4nLFxuICAgIHNpemU6ICdtZWRpdW0nLFxuICAgIGNvbG9yOiAnZGFyaycsXG4gICAgYm9sZDogZmFsc2UsXG4gICAgcHJvY2Vzc0xpbmtzOiB0cnVlLFxuICAgIGxpbmtDb25maWc6IHtcbiAgICAgIG9wZW5FeHRlcm5hbEluTmV3VGFiOiB0cnVlLFxuICAgICAgbGlua0NsYXNzOiAndGVzdC1lZGdlJyxcbiAgICAgIGV4dGVybmFsTGlua0NsYXNzOiAndGVzdC1leHRlcm5hbCcsXG4gICAgfSxcbiAgfTtcblxuICBkZXZVcmxzUHJvcHM6IFRleHRNZXRhZGF0YSA9IHtcbiAgICBjb250ZW50OlxuICAgICAgJ1VSTHMgZGUgZGVzYXJyb2xsbzogaHR0cDovL2xvY2FsaG9zdDo0MjAwL2Rhc2hib2FyZCwgc2Vydmlkb3IgbG9jYWwgaHR0cHM6Ly8xMjcuMC4wLjE6ODA4MC9hcGkvc3RhdHVzLCBkZXNhcnJvbGxvIGh0dHA6Ly9kZXYuZXhhbXBsZS5jb206MzAwMC9kZWJ1Zz92ZXJib3NlPXRydWUsIHkgdMO6bmVsIGh0dHBzOi8vYWJjMTIzLm5ncm9rLmlvL3dlYmhvb2suJyxcbiAgICBzaXplOiAnbWVkaXVtJyxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGJvbGQ6IGZhbHNlLFxuICAgIHByb2Nlc3NMaW5rczogdHJ1ZSxcbiAgICBsaW5rQ29uZmlnOiB7XG4gICAgICBvcGVuRXh0ZXJuYWxJbk5ld1RhYjogZmFsc2UsIC8vIFBhcmEgZGVzYXJyb2xsbywgcHVlZGUgc2VyIMO6dGlsIG5vIGFicmlyIGVuIG51ZXZhIHBlc3Rhw7FhXG4gICAgICBsaW5rQ2xhc3M6ICd0ZXN0LWRldicsXG4gICAgICBleHRlcm5hbExpbmtDbGFzczogJ3Rlc3QtZGV2LWV4dGVybmFsJyxcbiAgICB9LFxuICB9O1xufVxuIl19
|
|
@@ -101,7 +101,7 @@ export class LinkProcessingExampleComponent {
|
|
|
101
101
|
},
|
|
102
102
|
};
|
|
103
103
|
this.punctuationTestProps = {
|
|
104
|
-
content: 'URLs con puntuación: https://ionicframework.com/docs,
|
|
104
|
+
content: 'URLs con puntuación final: https://ionicframework.com/docs, también https://angular.io! Pregunta sobre https://github.com/angular? Y punto final: https://typescript.org. Paréntesis (https://rxjs.dev) y comillas "https://zone.js". ¡Todos funcionan!',
|
|
105
105
|
size: 'medium',
|
|
106
106
|
color: 'dark',
|
|
107
107
|
bold: false,
|
|
@@ -112,6 +112,18 @@ export class LinkProcessingExampleComponent {
|
|
|
112
112
|
externalLinkClass: 'external-punct',
|
|
113
113
|
},
|
|
114
114
|
};
|
|
115
|
+
this.complexUrlsProps = {
|
|
116
|
+
content: 'URLs complejas: https://example.com/path?param=value&other=123#section, búsqueda en https://google.com/search?q=angular+components, y API https://api.github.com/repos/owner/repo/issues?state=open. Todos con parámetros y fragmentos.',
|
|
117
|
+
size: 'medium',
|
|
118
|
+
color: 'dark',
|
|
119
|
+
bold: false,
|
|
120
|
+
processLinks: true,
|
|
121
|
+
linkConfig: {
|
|
122
|
+
openExternalInNewTab: true,
|
|
123
|
+
linkClass: 'complex-url',
|
|
124
|
+
externalLinkClass: 'complex-external',
|
|
125
|
+
},
|
|
126
|
+
};
|
|
115
127
|
}
|
|
116
128
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LinkProcessingExampleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
117
129
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: LinkProcessingExampleComponent, isStandalone: true, selector: "val-link-processing-example", ngImport: i0, template: `
|
|
@@ -157,8 +169,13 @@ export class LinkProcessingExampleComponent {
|
|
|
157
169
|
<h3>Corrección de puntuación en URLs:</h3>
|
|
158
170
|
<val-text [props]="punctuationTestProps"></val-text>
|
|
159
171
|
</div>
|
|
172
|
+
|
|
173
|
+
<div class="example-section">
|
|
174
|
+
<h3>URLs complejas con parámetros y fragmentos:</h3>
|
|
175
|
+
<val-text [props]="complexUrlsProps"></val-text>
|
|
176
|
+
</div>
|
|
160
177
|
</div>
|
|
161
|
-
`, isInline: true, styles: [".
|
|
178
|
+
`, isInline: true, styles: [".example-section{margin-bottom:24px;padding:16px;border:1px solid var(--ion-color-light, #f4f5f8);border-radius:8px;background:var(--ion-color-light-tint, #f5f6f9)}h2{color:var(--ion-color-primary, #3880ff);margin-bottom:20px}h3{color:var(--ion-color-dark, #222428);margin-bottom:10px;font-size:16px}\n"], dependencies: [{ kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }] }); }
|
|
162
179
|
}
|
|
163
180
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LinkProcessingExampleComponent, decorators: [{
|
|
164
181
|
type: Component,
|
|
@@ -205,7 +222,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
205
222
|
<h3>Corrección de puntuación en URLs:</h3>
|
|
206
223
|
<val-text [props]="punctuationTestProps"></val-text>
|
|
207
224
|
</div>
|
|
225
|
+
|
|
226
|
+
<div class="example-section">
|
|
227
|
+
<h3>URLs complejas con parámetros y fragmentos:</h3>
|
|
228
|
+
<val-text [props]="complexUrlsProps"></val-text>
|
|
229
|
+
</div>
|
|
208
230
|
</div>
|
|
209
|
-
`, styles: [".
|
|
231
|
+
`, styles: [".example-section{margin-bottom:24px;padding:16px;border:1px solid var(--ion-color-light, #f4f5f8);border-radius:8px;background:var(--ion-color-light-tint, #f5f6f9)}h2{color:var(--ion-color-primary, #3880ff);margin-bottom:20px}h3{color:var(--ion-color-dark, #222428);margin-bottom:10px;font-size:16px}\n"] }]
|
|
210
232
|
}] });
|
|
211
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1wcm9jZXNzaW5nLWV4YW1wbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGVjaC1jb21wb25lbnRzL3NyYy9saWIvZXhhbXBsZXMvbGluay1wcm9jZXNzaW5nLWV4YW1wbGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOztBQUV4RTs7Ozs7Ozs7OztHQVVHO0FBOEVILE1BQU0sT0FBTyw4QkFBOEI7SUE3RTNDO1FBOEVFLG1CQUFjLEdBQWlCO1lBQzdCLE9BQU8sRUFBRSx1RkFBdUY7WUFDaEcsSUFBSSxFQUFFLFFBQVE7WUFDZCxLQUFLLEVBQUUsTUFBTTtZQUNiLElBQUksRUFBRSxLQUFLO1lBQ1gsWUFBWSxFQUFFLEtBQUs7U0FDcEIsQ0FBQztRQUVGLG9CQUFlLEdBQWlCO1lBQzlCLE9BQU8sRUFBRSx5RkFBeUY7WUFDbEcsSUFBSSxFQUFFLFFBQVE7WUFDZCxLQUFLLEVBQUUsTUFBTTtZQUNiLElBQUksRUFBRSxLQUFLO1lBQ1gsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQztRQUVGLHFCQUFnQixHQUFpQjtZQUMvQixPQUFPLEVBQUUsZ0ZBQWdGO1lBQ3pGLElBQUksRUFBRSxRQUFRO1lBQ2QsS0FBSyxFQUFFLE1BQU07WUFDYixJQUFJLEVBQUUsS0FBSztZQUNYLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFVBQVUsRUFBRTtnQkFDVixvQkFBb0IsRUFBRSxJQUFJO2dCQUMxQixvQkFBb0IsRUFBRSxLQUFLO2dCQUMzQixTQUFTLEVBQUUsbUJBQW1CO2dCQUM5QixpQkFBaUIsRUFBRSxpQkFBaUI7Z0JBQ3BDLGlCQUFpQixFQUFFLGlCQUFpQjthQUNyQztTQUNGLENBQUM7UUFFRixvQkFBZSxHQUFpQjtZQUM5QixPQUFPLEVBQ0wseUxBQXlMO1lBQzNMLElBQUksRUFBRSxRQUFRO1lBQ2QsS0FBSyxFQUFFLE1BQU07WUFDYixJQUFJLEVBQUUsS0FBSztZQUNYLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFVBQVUsRUFBRTtnQkFDVixvQkFBb0IsRUFBRSxJQUFJO2dCQUMxQixvQkFBb0IsRUFBRSxLQUFLO2dCQUMzQixTQUFTLEVBQUUsZ0JBQWdCO2dCQUMzQixpQkFBaUIsRUFBRSxlQUFlO2dCQUNsQyxpQkFBaUIsRUFBRSxlQUFlO2FBQ25DO1NBQ0YsQ0FBQztRQUVGLHNCQUFpQixHQUFpQjtZQUNoQyxPQUFPLEVBQUUsc0VBQXNFO1lBQy9FLElBQUksRUFBRSxRQUFRO1lBQ2QsS0FBSyxFQUFFLE1BQU07WUFDYixJQUFJLEVBQUUsS0FBSztZQUNYLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFVBQVUsRUFBRTtnQkFDVixvQkFBb0IsRUFBRSxLQUFLO2dCQUMzQixvQkFBb0IsRUFBRSxLQUFLO2dCQUMzQixTQUFTLEVBQUUsZUFBZTtnQkFDMUIsaUJBQWlCLEVBQUUsbUJBQW1CO2dCQUN0QyxpQkFBaUIsRUFBRSxtQkFBbUI7YUFDdkM7U0FDRixDQUFDO1FBRUYsdUJBQWtCLEdBQWlCO1lBQ2pDLE9BQU8sRUFDTCx5SUFBeUk7WUFDM0ksSUFBSSxFQUFFLFFBQVE7WUFDZCxLQUFLLEVBQUUsTUFBTTtZQUNiLElBQUksRUFBRSxLQUFLO1lBQ1gsWUFBWSxFQUFFLElBQUk7WUFDbEIsVUFBVSxFQUFFO2dCQUNWLG9CQUFvQixFQUFFLElBQUk7Z0JBQzFCLG9CQUFvQixFQUFFLEtBQUs7Z0JBQzNCLG9CQUFvQixFQUFFLElBQUk7Z0JBQzFCLFNBQVMsRUFBRSxlQUFlO2dCQUMxQixpQkFBaUIsRUFBRSxtQkFBbUI7Z0JBQ3RDLGlCQUFpQixFQUFFLG1CQUFtQjthQUN2QztTQUNGLENBQUM7UUFFRixzQkFBaUIsR0FBaUI7WUFDaEMsT0FBTyxFQUNMLDZLQUE2SztZQUMvSyxJQUFJLEVBQUUsUUFBUTtZQUNkLEtBQUssRUFBRSxNQUFNO1lBQ2IsSUFBSSxFQUFFLEtBQUs7WUFDWCxZQUFZLEVBQUUsSUFBSTtZQUNsQixVQUFVLEVBQUU7Z0JBQ1Ysb0JBQW9CLEVBQUUsSUFBSTtnQkFDMUIsb0JBQW9CLEVBQUUsS0FBSztnQkFDM0Isb0JBQW9CLEVBQUUsSUFBSTtnQkFDMUIsU0FBUyxFQUFFLFlBQVk7Z0JBQ3ZCLGlCQUFpQixFQUFFLGdCQUFnQjtnQkFDbkMsaUJBQWlCLEVBQUUsZ0JBQWdCO2FBQ3BDO1NBQ0YsQ0FBQztRQUVGLHlCQUFvQixHQUFpQjtZQUNuQyxPQUFPLEVBQ0wsaU1BQWlNO1lBQ25NLElBQUksRUFBRSxRQUFRO1lBQ2QsS0FBSyxFQUFFLE1BQU07WUFDYixJQUFJLEVBQUUsS0FBSztZQUNYLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFVBQVUsRUFBRTtnQkFDVixvQkFBb0IsRUFBRSxJQUFJO2dCQUMxQixTQUFTLEVBQUUsa0JBQWtCO2dCQUM3QixpQkFBaUIsRUFBRSxnQkFBZ0I7YUFDcEM7U0FDRixDQUFDO0tBQ0g7K0dBOUdZLDhCQUE4QjttR0FBOUIsOEJBQThCLHVGQXpFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNENULG9hQTdDUyxhQUFhOzs0RkEwRVosOEJBQThCO2tCQTdFMUMsU0FBUzsrQkFDRSw2QkFBNkIsY0FDM0IsSUFBSSxXQUNQLENBQUMsYUFBYSxDQUFDLFlBQ2Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNENUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9hdG9tcy90ZXh0L3RleHQuY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRNZXRhZGF0YSB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXRvbXMvdGV4dC90eXBlcyc7XG4vKipcbiAqIExpbmtQcm9jZXNzaW5nRXhhbXBsZUNvbXBvbmVudCAtIENvbXBvbmVudGUgZGUgZWplbXBsbyBxdWUgZGVtdWVzdHJhIGVsIHByb2Nlc2FtaWVudG8gYXV0b23DoXRpY28gZGUgZW5sYWNlcy5cbiAqXG4gKiBFc3RlIGNvbXBvbmVudGUgbXVlc3RyYSBkaWZlcmVudGVzIGNhc29zIGRlIHVzbyBwYXJhIGVsIHByb2Nlc2FtaWVudG8gYXV0b23DoXRpY28gZGUgZW5sYWNlc1xuICogZW4gZWwgY29tcG9uZW50ZSB2YWwtdGV4dCwgaW5jbHV5ZW5kbyBlbmxhY2VzIGV4dGVybm9zLCBydXRhcyBpbnRlcm5hcyB5IGNvbmZpZ3VyYWNpb25lcyBwZXJzb25hbGl6YWRhcy5cbiAqXG4gKiBAZXhhbXBsZSBVc28gZW4gdGVtcGxhdGU6XG4gKiBgYGBodG1sXG4gKiA8dmFsLWxpbmstcHJvY2Vzc2luZy1leGFtcGxlPjwvdmFsLWxpbmstcHJvY2Vzc2luZy1leGFtcGxlPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1saW5rLXByb2Nlc3NpbmctZXhhbXBsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtUZXh0Q29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwibGluay1leGFtcGxlc1wiPlxuICAgICAgPGgyPkVqZW1wbG9zIGRlIFByb2Nlc2FtaWVudG8gZGUgRW5sYWNlczwvaDI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJleGFtcGxlLXNlY3Rpb25cIj5cbiAgICAgICAgPGgzPlRleHRvIHNpbiBwcm9jZXNhbWllbnRvIGRlIGVubGFjZXM6PC9oMz5cbiAgICAgICAgPHZhbC10ZXh0IFtwcm9wc109XCJiYXNpY1RleHRQcm9wc1wiPjwvdmFsLXRleHQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImV4YW1wbGUtc2VjdGlvblwiPlxuICAgICAgICA8aDM+VGV4dG8gY29uIHByb2Nlc2FtaWVudG8gYsOhc2ljbyBkZSBlbmxhY2VzOjwvaDM+XG4gICAgICAgIDx2YWwtdGV4dCBbcHJvcHNdPVwiYmFzaWNMaW5rc1Byb3BzXCI+PC92YWwtdGV4dD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZXhhbXBsZS1zZWN0aW9uXCI+XG4gICAgICAgIDxoMz5FbmxhY2VzIGNvbiBjb25maWd1cmFjacOzbiBwZXJzb25hbGl6YWRhOjwvaDM+XG4gICAgICAgIDx2YWwtdGV4dCBbcHJvcHNdPVwiY3VzdG9tTGlua3NQcm9wc1wiPjwvdmFsLXRleHQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImV4YW1wbGUtc2VjdGlvblwiPlxuICAgICAgICA8aDM+RW5sYWNlcyBpbnRlcm5vcyB5IGV4dGVybm9zIG1lemNsYWRvczo8L2gzPlxuICAgICAgICA8dmFsLXRleHQgW3Byb3BzXT1cIm1peGVkTGlua3NQcm9wc1wiPjwvdmFsLXRleHQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImV4YW1wbGUtc2VjdGlvblwiPlxuICAgICAgICA8aDM+RW5sYWNlcyBzaW4gYWJyaXIgZW4gbnVldmEgcGVzdGHDsWE6PC9oMz5cbiAgICAgICAgPHZhbC10ZXh0IFtwcm9wc109XCJzYW1lVGFiTGlua3NQcm9wc1wiPjwvdmFsLXRleHQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImV4YW1wbGUtc2VjdGlvblwiPlxuICAgICAgICA8aDM+RW5sYWNlcyBlc3RpbG8gTWFya2Rvd24gW3RleHRvXSh1cmwpOjwvaDM+XG4gICAgICAgIDx2YWwtdGV4dCBbcHJvcHNdPVwibWFya2Rvd25MaW5rc1Byb3BzXCI+PC92YWwtdGV4dD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZXhhbXBsZS1zZWN0aW9uXCI+XG4gICAgICAgIDxoMz5NZXpjbGEgZGUgZW5sYWNlcyBkaXJlY3RvcyB5IE1hcmtkb3duOjwvaDM+XG4gICAgICAgIDx2YWwtdGV4dCBbcHJvcHNdPVwibWl4ZWRGb3JtYXRzUHJvcHNcIj48L3ZhbC10ZXh0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJleGFtcGxlLXNlY3Rpb25cIj5cbiAgICAgICAgPGgzPkNvcnJlY2Npw7NuIGRlIHB1bnR1YWNpw7NuIGVuIFVSTHM6PC9oMz5cbiAgICAgICAgPHZhbC10ZXh0IFtwcm9wc109XCJwdW5jdHVhdGlvblRlc3RQcm9wc1wiPjwvdmFsLXRleHQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLmxpbmstZXhhbXBsZXMge1xuICAgICAgICBwYWRkaW5nOiAyMHB4O1xuICAgICAgICBtYXgtd2lkdGg6IDgwMHB4O1xuICAgICAgfVxuXG4gICAgICAuZXhhbXBsZS1zZWN0aW9uIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDtcbiAgICAgICAgcGFkZGluZzogMTZweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taW9uLWNvbG9yLWxpZ2h0LCAjZjRmNWY4KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItbGlnaHQtdGludCwgI2Y1ZjZmOSk7XG4gICAgICB9XG5cbiAgICAgIGgyIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LCAjMzg4MGZmKTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICAgIH1cblxuICAgICAgaDMge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmssICMyMjI0MjgpO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTGlua1Byb2Nlc3NpbmdFeGFtcGxlQ29tcG9uZW50IHtcbiAgYmFzaWNUZXh0UHJvcHM6IFRleHRNZXRhZGF0YSA9IHtcbiAgICBjb250ZW50OiAnRXN0ZSB0ZXh0byBjb250aWVuZSBodHRwczovL2FuZ3VsYXIuaW8geSAvZGFzaGJvYXJkIHBlcm8gbm8gc2UgcHJvY2VzYW4gY29tbyBlbmxhY2VzLicsXG4gICAgc2l6ZTogJ21lZGl1bScsXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBib2xkOiBmYWxzZSxcbiAgICBwcm9jZXNzTGlua3M6IGZhbHNlLFxuICB9O1xuXG4gIGJhc2ljTGlua3NQcm9wczogVGV4dE1ldGFkYXRhID0ge1xuICAgIGNvbnRlbnQ6ICdWaXNpdGEgaHR0cHM6Ly9hbmd1bGFyLmlvIHBhcmEgZG9jdW1lbnRhY2nDs24gbyB2ZSBhIC9kYXNoYm9hcmQgcGFyYSBlbCBwYW5lbCBwcmluY2lwYWwuJyxcbiAgICBzaXplOiAnbWVkaXVtJyxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGJvbGQ6IGZhbHNlLFxuICAgIHByb2Nlc3NMaW5rczogdHJ1ZSxcbiAgfTtcblxuICBjdXN0b21MaW5rc1Byb3BzOiBUZXh0TWV0YWRhdGEgPSB7XG4gICAgY29udGVudDogJ0VubGFjZXMgcGVyc29uYWxpemFkb3M6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIgeSAvcHJvZmlsZS9zZXR0aW5ncycsXG4gICAgc2l6ZTogJ21lZGl1bScsXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBib2xkOiBmYWxzZSxcbiAgICBwcm9jZXNzTGlua3M6IHRydWUsXG4gICAgbGlua0NvbmZpZzoge1xuICAgICAgb3BlbkV4dGVybmFsSW5OZXdUYWI6IHRydWUsXG4gICAgICBvcGVuSW50ZXJuYWxJbk5ld1RhYjogZmFsc2UsXG4gICAgICBsaW5rQ2xhc3M6ICdjdXN0b20tbGluay1zdHlsZScsXG4gICAgICBleHRlcm5hbExpbmtDbGFzczogJ2V4dGVybmFsLWN1c3RvbScsXG4gICAgICBpbnRlcm5hbExpbmtDbGFzczogJ2ludGVybmFsLWN1c3RvbScsXG4gICAgfSxcbiAgfTtcblxuICBtaXhlZExpbmtzUHJvcHM6IFRleHRNZXRhZGF0YSA9IHtcbiAgICBjb250ZW50OlxuICAgICAgJ0NvbnN1bHRhIGxhIGRvY3VtZW50YWNpw7NuIGVuIGh0dHBzOi8vaW9uaWNmcmFtZXdvcmsuY29tL2RvY3MsIHJldmlzYSBlbCBjw7NkaWdvIGVuIGh0dHBzOi8vZ2l0aHViLmNvbS9pb25pYy10ZWFtL2lvbmljLWZyYW1ld29yaywgbyBuYXZlZ2EgYSAvY29tcG9uZW50cy9idXR0b25zIHBhcmEgZWplbXBsb3MgaW50ZXJub3MuJyxcbiAgICBzaXplOiAnbWVkaXVtJyxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGJvbGQ6IGZhbHNlLFxuICAgIHByb2Nlc3NMaW5rczogdHJ1ZSxcbiAgICBsaW5rQ29uZmlnOiB7XG4gICAgICBvcGVuRXh0ZXJuYWxJbk5ld1RhYjogdHJ1ZSxcbiAgICAgIG9wZW5JbnRlcm5hbEluTmV3VGFiOiBmYWxzZSxcbiAgICAgIGxpbmtDbGFzczogJ3Byb2Nlc3NlZC1saW5rJyxcbiAgICAgIGV4dGVybmFsTGlua0NsYXNzOiAnZXh0ZXJuYWwtbGluaycsXG4gICAgICBpbnRlcm5hbExpbmtDbGFzczogJ2ludGVybmFsLWxpbmsnLFxuICAgIH0sXG4gIH07XG5cbiAgc2FtZVRhYkxpbmtzUHJvcHM6IFRleHRNZXRhZGF0YSA9IHtcbiAgICBjb250ZW50OiAnRXN0b3MgZW5sYWNlcyBubyBhYnJlbiBlbiBudWV2YSBwZXN0YcOxYTogaHR0cHM6Ly9leGFtcGxlLmNvbSB5IC9ob21lJyxcbiAgICBzaXplOiAnbWVkaXVtJyxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGJvbGQ6IGZhbHNlLFxuICAgIHByb2Nlc3NMaW5rczogdHJ1ZSxcbiAgICBsaW5rQ29uZmlnOiB7XG4gICAgICBvcGVuRXh0ZXJuYWxJbk5ld1RhYjogZmFsc2UsXG4gICAgICBvcGVuSW50ZXJuYWxJbk5ld1RhYjogZmFsc2UsXG4gICAgICBsaW5rQ2xhc3M6ICdzYW1lLXRhYi1saW5rJyxcbiAgICAgIGV4dGVybmFsTGlua0NsYXNzOiAnZXh0ZXJuYWwtc2FtZS10YWInLFxuICAgICAgaW50ZXJuYWxMaW5rQ2xhc3M6ICdpbnRlcm5hbC1zYW1lLXRhYicsXG4gICAgfSxcbiAgfTtcblxuICBtYXJrZG93bkxpbmtzUHJvcHM6IFRleHRNZXRhZGF0YSA9IHtcbiAgICBjb250ZW50OlxuICAgICAgJ0NvbnN1bHRhIFtsYSBkb2N1bWVudGFjacOzbiBkZSBBbmd1bGFyXShodHRwczovL2FuZ3VsYXIuaW8vZG9jcykgeSB2ZSBhIFtjb25maWd1cmFjacOzbiBkZWwgcGVyZmlsXSgvcHJvZmlsZS9zZXR0aW5ncykgcGFyYSBtw6FzIG9wY2lvbmVzLicsXG4gICAgc2l6ZTogJ21lZGl1bScsXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBib2xkOiBmYWxzZSxcbiAgICBwcm9jZXNzTGlua3M6IHRydWUsXG4gICAgbGlua0NvbmZpZzoge1xuICAgICAgb3BlbkV4dGVybmFsSW5OZXdUYWI6IHRydWUsXG4gICAgICBvcGVuSW50ZXJuYWxJbk5ld1RhYjogZmFsc2UsXG4gICAgICBwcm9jZXNzTWFya2Rvd25MaW5rczogdHJ1ZSxcbiAgICAgIGxpbmtDbGFzczogJ21hcmtkb3duLWxpbmsnLFxuICAgICAgZXh0ZXJuYWxMaW5rQ2xhc3M6ICdtYXJrZG93bi1leHRlcm5hbCcsXG4gICAgICBpbnRlcm5hbExpbmtDbGFzczogJ21hcmtkb3duLWludGVybmFsJyxcbiAgICB9LFxuICB9O1xuXG4gIG1peGVkRm9ybWF0c1Byb3BzOiBUZXh0TWV0YWRhdGEgPSB7XG4gICAgY29udGVudDpcbiAgICAgICdBcXXDrSBoYXkgW2RvY3VtZW50YWNpw7NuIG9maWNpYWxdKGh0dHBzOi8vYW5ndWxhci5pby9kb2NzKSwgdW4gZW5sYWNlIGRpcmVjdG8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhciwgeSB1bmEgcnV0YSBpbnRlcm5hIC9kYXNoYm9hcmQvYW5hbHl0aWNzLiDCoVRvZG9zIGZ1bmNpb25hbiEnLFxuICAgIHNpemU6ICdtZWRpdW0nLFxuICAgIGNvbG9yOiAnZGFyaycsXG4gICAgYm9sZDogZmFsc2UsXG4gICAgcHJvY2Vzc0xpbmtzOiB0cnVlLFxuICAgIGxpbmtDb25maWc6IHtcbiAgICAgIG9wZW5FeHRlcm5hbEluTmV3VGFiOiB0cnVlLFxuICAgICAgb3BlbkludGVybmFsSW5OZXdUYWI6IGZhbHNlLFxuICAgICAgcHJvY2Vzc01hcmtkb3duTGlua3M6IHRydWUsXG4gICAgICBsaW5rQ2xhc3M6ICdtaXhlZC1saW5rJyxcbiAgICAgIGV4dGVybmFsTGlua0NsYXNzOiAnbWl4ZWQtZXh0ZXJuYWwnLFxuICAgICAgaW50ZXJuYWxMaW5rQ2xhc3M6ICdtaXhlZC1pbnRlcm5hbCcsXG4gICAgfSxcbiAgfTtcblxuICBwdW5jdHVhdGlvblRlc3RQcm9wczogVGV4dE1ldGFkYXRhID0ge1xuICAgIGNvbnRlbnQ6XG4gICAgICAnVVJMcyBjb24gcHVudHVhY2nDs246IGh0dHBzOi8vaW9uaWNmcmFtZXdvcmsuY29tL2RvY3MsIHJldmlzYSBodHRwczovL2FuZ3VsYXIuaW8hIFRhbWJpw6luIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyPyBZIGZpbmFsbWVudGUgaHR0cHM6Ly90eXBlc2NyaXB0Lm9yZy4gwqFUb2RvcyBkZWJlbiBmdW5jaW9uYXIgY29ycmVjdGFtZW50ZSEnLFxuICAgIHNpemU6ICdtZWRpdW0nLFxuICAgIGNvbG9yOiAnZGFyaycsXG4gICAgYm9sZDogZmFsc2UsXG4gICAgcHJvY2Vzc0xpbmtzOiB0cnVlLFxuICAgIGxpbmtDb25maWc6IHtcbiAgICAgIG9wZW5FeHRlcm5hbEluTmV3VGFiOiB0cnVlLFxuICAgICAgbGlua0NsYXNzOiAncHVuY3R1YXRpb24tdGVzdCcsXG4gICAgICBleHRlcm5hbExpbmtDbGFzczogJ2V4dGVybmFsLXB1bmN0JyxcbiAgICB9LFxuICB9O1xufVxuIl19
|
|
233
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1wcm9jZXNzaW5nLWV4YW1wbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGVjaC1jb21wb25lbnRzL3NyYy9saWIvZXhhbXBsZXMvbGluay1wcm9jZXNzaW5nLWV4YW1wbGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOztBQUV4RTs7Ozs7Ozs7OztHQVVHO0FBOEVILE1BQU0sT0FBTyw4QkFBOEI7SUE3RTNDO1FBOEVFLG1CQUFjLEdBQWlCO1lBQzdCLE9BQU8sRUFBRSx1RkFBdUY7WUFDaEcsSUFBSSxFQUFFLFFBQVE7WUFDZCxLQUFLLEVBQUUsTUFBTTtZQUNiLElBQUksRUFBRSxLQUFLO1lBQ1gsWUFBWSxFQUFFLEtBQUs7U0FDcEIsQ0FBQztRQUVGLG9CQUFlLEdBQWlCO1lBQzlCLE9BQU8sRUFBRSx5RkFBeUY7WUFDbEcsSUFBSSxFQUFFLFFBQVE7WUFDZCxLQUFLLEVBQUUsTUFBTTtZQUNiLElBQUksRUFBRSxLQUFLO1lBQ1gsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQztRQUVGLHFCQUFnQixHQUFpQjtZQUMvQixPQUFPLEVBQUUsZ0ZBQWdGO1lBQ3pGLElBQUksRUFBRSxRQUFRO1lBQ2QsS0FBSyxFQUFFLE1BQU07WUFDYixJQUFJLEVBQUUsS0FBSztZQUNYLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFVBQVUsRUFBRTtnQkFDVixvQkFBb0IsRUFBRSxJQUFJO2dCQUMxQixvQkFBb0IsRUFBRSxLQUFLO2dCQUMzQixTQUFTLEVBQUUsbUJBQW1CO2dCQUM5QixpQkFBaUIsRUFBRSxpQkFBaUI7Z0JBQ3BDLGlCQUFpQixFQUFFLGlCQUFpQjthQUNyQztTQUNGLENBQUM7UUFFRixvQkFBZSxHQUFp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Ozs7Ozs7Ozs7Ozs7OztHQWlEVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGV4dENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXRvbXMvdGV4dC90ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0TWV0YWRhdGEgfSBmcm9tICcuLi9jb21wb25lbnRzL2F0b21zL3RleHQvdHlwZXMnO1xuLyoqXG4gKiBMaW5rUHJvY2Vzc2luZ0V4YW1wbGVDb21wb25lbnQgLSBDb21wb25lbnRlIGRlIGVqZW1wbG8gcXVlIGRlbXVlc3RyYSBlbCBwcm9jZXNhbWllbnRvIGF1dG9tw6F0aWNvIGRlIGVubGFjZXMuXG4gKlxuICogRXN0ZSBjb21wb25lbnRlIG11ZXN0cmEgZGlmZXJlbnRlcyBjYXNvcyBkZSB1c28gcGFyYSBlbCBwcm9jZXNhbWllbnRvIGF1dG9tw6F0aWNvIGRlIGVubGFjZXNcbiAqIGVuIGVsIGNvbXBvbmVudGUgdmFsLXRleHQsIGluY2x1eWVuZG8gZW5sYWNlcyBleHRlcm5vcywgcnV0YXMgaW50ZXJuYXMgeSBjb25maWd1cmFjaW9uZXMgcGVyc29uYWxpemFkYXMuXG4gKlxuICogQGV4YW1wbGUgVXNvIGVuIHRlbXBsYXRlOlxuICogYGBgaHRtbFxuICogPHZhbC1saW5rLXByb2Nlc3NpbmctZXhhbXBsZT48L3ZhbC1saW5rLXByb2Nlc3NpbmctZXhhbXBsZT5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtbGluay1wcm9jZXNzaW5nLWV4YW1wbGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbVGV4dENvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImxpbmstZXhhbXBsZXNcIj5cbiAgICAgIDxoMj5FamVtcGxvcyBkZSBQcm9jZXNhbWllbnRvIGRlIEVubGFjZXM8L2gyPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZXhhbXBsZS1zZWN0aW9uXCI+XG4gICAgICAgIDxoMz5UZXh0byBzaW4gcHJvY2VzYW1pZW50byBkZSBlbmxhY2VzOjwvaDM+XG4gICAgICAgIDx2YWwtdGV4dCBbcHJvcHNdPVwiYmFzaWNUZXh0UHJvcHNcIj48L3ZhbC10ZXh0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJleGFtcGxlLXNlY3Rpb25cIj5cbiAgICAgICAgPGgzPlRleHRvIGNvbiBwcm9jZXNhbWllbnRvIGLDoXNpY28gZGUgZW5sYWNlczo8L2gzPlxuICAgICAgICA8dmFsLXRleHQgW3Byb3BzXT1cImJhc2ljTGlua3NQcm9wc1wiPjwvdmFsLXRleHQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImV4YW1wbGUtc2VjdGlvblwiPlxuICAgICAgICA8aDM+RW5sYWNlcyBjb24gY29uZmlndXJhY2nDs24gcGVyc29uYWxpemFkYTo8L2gzPlxuICAgICAgICA8dmFsLXRleHQgW3Byb3BzXT1cImN1c3RvbUxpbmtzUHJvcHNcIj48L3ZhbC10ZXh0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJleGFtcGxlLXNlY3Rpb25cIj5cbiAgICAgICAgPGgzPkVubGFjZXMgaW50ZXJub3MgeSBleHRlcm5vcyBtZXpjbGFkb3M6PC9oMz5cbiAgICAgICAgPHZhbC10ZXh0IFtwcm9wc109XCJtaXhlZExpbmtzUHJvcHNcIj48L3ZhbC10ZXh0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJleGFtcGxlLXNlY3Rpb25cIj5cbiAgICAgICAgPGgzPkVubGFjZXMgc2luIGFicmlyIGVuIG51ZXZhIHBlc3Rhw7FhOjwvaDM+XG4gICAgICAgIDx2YWwtdGV4dCBbcHJvcHNdPVwic2FtZVRhYkxpbmtzUHJvcHNcIj48L3ZhbC10ZXh0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJleGFtcGxlLXNlY3Rpb25cIj5cbiAgICAgICAgPGgzPkVubGFjZXMgZXN0aWxvIE1hcmtkb3duIFt0ZXh0b10odXJsKTo8L2gzPlxuICAgICAgICA8dmFsLXRleHQgW3Byb3BzXT1cIm1hcmtkb3duTGlua3NQcm9wc1wiPjwvdmFsLXRleHQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImV4YW1wbGUtc2VjdGlvblwiPlxuICAgICAgICA8aDM+TWV6Y2xhIGRlIGVubGFjZXMgZGlyZWN0b3MgeSBNYXJrZG93bjo8L2gzPlxuICAgICAgICA8dmFsLXRleHQgW3Byb3BzXT1cIm1peGVkRm9ybWF0c1Byb3BzXCI+PC92YWwtdGV4dD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZXhhbXBsZS1zZWN0aW9uXCI+XG4gICAgICAgIDxoMz5Db3JyZWNjacOzbiBkZSBwdW50dWFjacOzbiBlbiBVUkxzOjwvaDM+XG4gICAgICAgIDx2YWwtdGV4dCBbcHJvcHNdPVwicHVuY3R1YXRpb25UZXN0UHJvcHNcIj48L3ZhbC10ZXh0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJleGFtcGxlLXNlY3Rpb25cIj5cbiAgICAgICAgPGgzPlVSTHMgY29tcGxlamFzIGNvbiBwYXLDoW1ldHJvcyB5IGZyYWdtZW50b3M6PC9oMz5cbiAgICAgICAgPHZhbC10ZXh0IFtwcm9wc109XCJjb21wbGV4VXJsc1Byb3BzXCI+PC92YWwtdGV4dD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAuZXhhbXBsZS1zZWN0aW9uIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDtcbiAgICAgICAgcGFkZGluZzogMTZweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taW9uLWNvbG9yLWxpZ2h0LCAjZjRmNWY4KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItbGlnaHQtdGludCwgI2Y1ZjZmOSk7XG4gICAgICB9XG5cbiAgICAgIGgyIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LCAjMzg4MGZmKTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICAgIH1cblxuICAgICAgaDMge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmssICMyMjI0MjgpO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTGlua1Byb2Nlc3NpbmdFeGFtcGxlQ29tcG9uZW50IHtcbiAgYmFzaWNUZXh0UHJvcHM6IFRleHRNZXRhZGF0YSA9IHtcbiAgICBjb250ZW50OiAnRXN0ZSB0ZXh0byBjb250aWVuZSBodHRwczovL2FuZ3VsYXIuaW8geSAvZGFzaGJvYXJkIHBlcm8gbm8gc2UgcHJvY2VzYW4gY29tbyBlbmxhY2VzLicsXG4gICAgc2l6ZTogJ21lZGl1bScsXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBib2xkOiBmYWxzZSxcbiAgICBwcm9jZXNzTGlua3M6IGZhbHNlLFxuICB9O1xuXG4gIGJhc2ljTGlua3NQcm9wczogVGV4dE1ldGFkYXRhID0ge1xuICAgIGNvbnRlbnQ6ICdWaXNpdGEgaHR0cHM6Ly9hbmd1bGFyLmlvIHBhcmEgZG9jdW1lbnRhY2nDs24gbyB2ZSBhIC9kYXNoYm9hcmQgcGFyYSBlbCBwYW5lbCBwcmluY2lwYWwuJyxcbiAgICBzaXplOiAnbWVkaXVtJyxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGJvbGQ6IGZhbHNlLFxuICAgIHByb2Nlc3NMaW5rczogdHJ1ZSxcbiAgfTtcblxuICBjdXN0b21MaW5rc1Byb3BzOiBUZXh0TWV0YWRhdGEgPSB7XG4gICAgY29udGVudDogJ0VubGFjZXMgcGVyc29uYWxpemFkb3M6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIgeSAvcHJvZmlsZS9zZXR0aW5ncycsXG4gICAgc2l6ZTogJ21lZGl1bScsXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBib2xkOiBmYWxzZSxcbiAgICBwcm9jZXNzTGlua3M6IHRydWUsXG4gICAgbGlua0NvbmZpZzoge1xuICAgICAgb3BlbkV4dGVybmFsSW5OZXdUYWI6IHRydWUsXG4gICAgICBvcGVuSW50ZXJuYWxJbk5ld1RhYjogZmFsc2UsXG4gICAgICBsaW5rQ2xhc3M6ICdjdXN0b20tbGluay1zdHlsZScsXG4gICAgICBleHRlcm5hbExpbmtDbGFzczogJ2V4dGVybmFsLWN1c3RvbScsXG4gICAgICBpbnRlcm5hbExpbmtDbGFzczogJ2ludGVybmFsLWN1c3RvbScsXG4gICAgfSxcbiAgfTtcblxuICBtaXhlZExpbmtzUHJvcHM6IFRleHRNZXRhZGF0YSA9IHtcbiAgICBjb250ZW50OlxuICAgICAgJ0NvbnN1bHRhIGxhIGRvY3VtZW50YWNpw7NuIGVuIGh0dHBzOi8vaW9uaWNmcmFtZXdvcmsuY29tL2RvY3MsIHJldmlzYSBlbCBjw7NkaWdvIGVuIGh0dHBzOi8vZ2l0aHViLmNvbS9pb25pYy10ZWFtL2lvbmljLWZyYW1ld29yaywgbyBuYXZlZ2EgYSAvY29tcG9uZW50cy9idXR0b25zIHBhcmEgZWplbXBsb3MgaW50ZXJub3MuJyxcbiAgICBzaXplOiAnbWVkaXVtJyxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGJvbGQ6IGZhbHNlLFxuICAgIHByb2Nlc3NMaW5rczogdHJ1ZSxcbiAgICBsaW5rQ29uZmlnOiB7XG4gICAgICBvcGVuRXh0ZXJuYWxJbk5ld1RhYjogdHJ1ZSxcbiAgICAgIG9wZW5JbnRlcm5hbEluTmV3VGFiOiBmYWxzZSxcbiAgICAgIGxpbmtDbGFzczogJ3Byb2Nlc3NlZC1saW5rJyxcbiAgICAgIGV4dGVybmFsTGlua0NsYXNzOiAnZXh0ZXJuYWwtbGluaycsXG4gICAgICBpbnRlcm5hbExpbmtDbGFzczogJ2ludGVybmFsLWxpbmsnLFxuICAgIH0sXG4gIH07XG5cbiAgc2FtZVRhYkxpbmtzUHJvcHM6IFRleHRNZXRhZGF0YSA9IHtcbiAgICBjb250ZW50OiAnRXN0b3MgZW5sYWNlcyBubyBhYnJlbiBlbiBudWV2YSBwZXN0YcOxYTogaHR0cHM6Ly9leGFtcGxlLmNvbSB5IC9ob21lJyxcbiAgICBzaXplOiAnbWVkaXVtJyxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGJvbGQ6IGZhbHNlLFxuICAgIHByb2Nlc3NMaW5rczogdHJ1ZSxcbiAgICBsaW5rQ29uZmlnOiB7XG4gICAgICBvcGVuRXh0ZXJuYWxJbk5ld1RhYjogZmFsc2UsXG4gICAgICBvcGVuSW50ZXJuYWxJbk5ld1RhYjogZmFsc2UsXG4gICAgICBsaW5rQ2xhc3M6ICdzYW1lLXRhYi1saW5rJyxcbiAgICAgIGV4dGVybmFsTGlua0NsYXNzOiAnZXh0ZXJuYWwtc2FtZS10YWInLFxuICAgICAgaW50ZXJuYWxMaW5rQ2xhc3M6ICdpbnRlcm5hbC1zYW1lLXRhYicsXG4gICAgfSxcbiAgfTtcblxuICBtYXJrZG93bkxpbmtzUHJvcHM6IFRleHRNZXRhZGF0YSA9IHtcbiAgICBjb250ZW50OlxuICAgICAgJ0NvbnN1bHRhIFtsYSBkb2N1bWVudGFjacOzbiBkZSBBbmd1bGFyXShodHRwczovL2FuZ3VsYXIuaW8vZG9jcykgeSB2ZSBhIFtjb25maWd1cmFjacOzbiBkZWwgcGVyZmlsXSgvcHJvZmlsZS9zZXR0aW5ncykgcGFyYSBtw6FzIG9wY2lvbmVzLicsXG4gICAgc2l6ZTogJ21lZGl1bScsXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBib2xkOiBmYWxzZSxcbiAgICBwcm9jZXNzTGlua3M6IHRydWUsXG4gICAgbGlua0NvbmZpZzoge1xuICAgICAgb3BlbkV4dGVybmFsSW5OZXdUYWI6IHRydWUsXG4gICAgICBvcGVuSW50ZXJuYWxJbk5ld1RhYjogZmFsc2UsXG4gICAgICBwcm9jZXNzTWFya2Rvd25MaW5rczogdHJ1ZSxcbiAgICAgIGxpbmtDbGFzczogJ21hcmtkb3duLWxpbmsnLFxuICAgICAgZXh0ZXJuYWxMaW5rQ2xhc3M6ICdtYXJrZG93bi1leHRlcm5hbCcsXG4gICAgICBpbnRlcm5hbExpbmtDbGFzczogJ21hcmtkb3duLWludGVybmFsJyxcbiAgICB9LFxuICB9O1xuXG4gIG1peGVkRm9ybWF0c1Byb3BzOiBUZXh0TWV0YWRhdGEgPSB7XG4gICAgY29udGVudDpcbiAgICAgICdBcXXDrSBoYXkgW2RvY3VtZW50YWNpw7NuIG9maWNpYWxdKGh0dHBzOi8vYW5ndWxhci5pby9kb2NzKSwgdW4gZW5sYWNlIGRpcmVjdG8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhciwgeSB1bmEgcnV0YSBpbnRlcm5hIC9kYXNoYm9hcmQvYW5hbHl0aWNzLiDCoVRvZG9zIGZ1bmNpb25hbiEnLFxuICAgIHNpemU6ICdtZWRpdW0nLFxuICAgIGNvbG9yOiAnZGFyaycsXG4gICAgYm9sZDogZmFsc2UsXG4gICAgcHJvY2Vzc0xpbmtzOiB0cnVlLFxuICAgIGxpbmtDb25maWc6IHtcbiAgICAgIG9wZW5FeHRlcm5hbEluTmV3VGFiOiB0cnVlLFxuICAgICAgb3BlbkludGVybmFsSW5OZXdUYWI6IGZhbHNlLFxuICAgICAgcHJvY2Vzc01hcmtkb3duTGlua3M6IHRydWUsXG4gICAgICBsaW5rQ2xhc3M6ICdtaXhlZC1saW5rJyxcbiAgICAgIGV4dGVybmFsTGlua0NsYXNzOiAnbWl4ZWQtZXh0ZXJuYWwnLFxuICAgICAgaW50ZXJuYWxMaW5rQ2xhc3M6ICdtaXhlZC1pbnRlcm5hbCcsXG4gICAgfSxcbiAgfTtcblxuICBwdW5jdHVhdGlvblRlc3RQcm9wczogVGV4dE1ldGFkYXRhID0ge1xuICAgIGNvbnRlbnQ6XG4gICAgICAnVVJMcyBjb24gcHVudHVhY2nDs24gZmluYWw6IGh0dHBzOi8vaW9uaWNmcmFtZXdvcmsuY29tL2RvY3MsIHRhbWJpw6luIGh0dHBzOi8vYW5ndWxhci5pbyEgUHJlZ3VudGEgc29icmUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXI/IFkgcHVudG8gZmluYWw6IGh0dHBzOi8vdHlwZXNjcmlwdC5vcmcuIFBhcsOpbnRlc2lzIChodHRwczovL3J4anMuZGV2KSB5IGNvbWlsbGFzIFwiaHR0cHM6Ly96b25lLmpzXCIuIMKhVG9kb3MgZnVuY2lvbmFuIScsXG4gICAgc2l6ZTogJ21lZGl1bScsXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBib2xkOiBmYWxzZSxcbiAgICBwcm9jZXNzTGlua3M6IHRydWUsXG4gICAgbGlua0NvbmZpZzoge1xuICAgICAgb3BlbkV4dGVybmFsSW5OZXdUYWI6IHRydWUsXG4gICAgICBsaW5rQ2xhc3M6ICdwdW5jdHVhdGlvbi10ZXN0JyxcbiAgICAgIGV4dGVybmFsTGlua0NsYXNzOiAnZXh0ZXJuYWwtcHVuY3QnLFxuICAgIH0sXG4gIH07XG5cbiAgY29tcGxleFVybHNQcm9wczogVGV4dE1ldGFkYXRhID0ge1xuICAgIGNvbnRlbnQ6XG4gICAgICAnVVJMcyBjb21wbGVqYXM6IGh0dHBzOi8vZXhhbXBsZS5jb20vcGF0aD9wYXJhbT12YWx1ZSZvdGhlcj0xMjMjc2VjdGlvbiwgYsO6c3F1ZWRhIGVuIGh0dHBzOi8vZ29vZ2xlLmNvbS9zZWFyY2g/cT1hbmd1bGFyK2NvbXBvbmVudHMsIHkgQVBJIGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvb3duZXIvcmVwby9pc3N1ZXM/c3RhdGU9b3Blbi4gVG9kb3MgY29uIHBhcsOhbWV0cm9zIHkgZnJhZ21lbnRvcy4nLFxuICAgIHNpemU6ICdtZWRpdW0nLFxuICAgIGNvbG9yOiAnZGFyaycsXG4gICAgYm9sZDogZmFsc2UsXG4gICAgcHJvY2Vzc0xpbmtzOiB0cnVlLFxuICAgIGxpbmtDb25maWc6IHtcbiAgICAgIG9wZW5FeHRlcm5hbEluTmV3VGFiOiB0cnVlLFxuICAgICAgbGlua0NsYXNzOiAnY29tcGxleC11cmwnLFxuICAgICAgZXh0ZXJuYWxMaW5rQ2xhc3M6ICdjb21wbGV4LWV4dGVybmFsJyxcbiAgICB9LFxuICB9O1xufVxuIl19
|
|
@@ -21,13 +21,32 @@ import * as i1 from "@angular/platform-browser";
|
|
|
21
21
|
export class LinkProcessorService {
|
|
22
22
|
constructor(sanitizer) {
|
|
23
23
|
this.sanitizer = sanitizer;
|
|
24
|
-
// Regex para detectar URLs completas (http/https) -
|
|
25
|
-
this.urlRegex = /(https?:\/\/[^\s]
|
|
26
|
-
// Regex para detectar rutas internas
|
|
27
|
-
this.internalRouteRegex = /(\s|^)(\/[^\s]
|
|
24
|
+
// Regex para detectar URLs completas (http/https) - captura toda la URL y luego limpiamos puntuación
|
|
25
|
+
this.urlRegex = /(https?:\/\/[^\s]+)/g;
|
|
26
|
+
// Regex para detectar rutas internas - captura toda la ruta y luego limpiamos puntuación
|
|
27
|
+
this.internalRouteRegex = /(\s|^)(\/[^\s]*)/g;
|
|
28
28
|
// Regex para detectar enlaces estilo Markdown [texto](url)
|
|
29
29
|
this.markdownLinkRegex = /\[([^\]]+)\]\(([^)]+)\)/g;
|
|
30
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Limpia la puntuación del final de una URL.
|
|
33
|
+
* Mantiene caracteres válidos de URL pero remueve signos de puntuación comunes al final.
|
|
34
|
+
* Preserva parámetros de consulta, fragmentos y caracteres válidos en URLs.
|
|
35
|
+
*/
|
|
36
|
+
cleanUrlPunctuation(url) {
|
|
37
|
+
// Caracteres que consideramos puntuación al final de oración, pero NO parte de URLs
|
|
38
|
+
// No incluimos & o = que son parte de query params, ni # que es parte de fragmentos
|
|
39
|
+
const trailingPunctuation = /[.,;!?)]+$/;
|
|
40
|
+
// Casos especiales: si la URL termina con paréntesis pero no tiene paréntesis de apertura
|
|
41
|
+
// probablemente el paréntesis no es parte de la URL
|
|
42
|
+
const hasOpeningParen = url.includes('(');
|
|
43
|
+
const endsWithClosingParen = url.endsWith(')');
|
|
44
|
+
if (endsWithClosingParen && !hasOpeningParen) {
|
|
45
|
+
// Remover el paréntesis de cierre si no hay uno de apertura
|
|
46
|
+
url = url.replace(/\)$/, '');
|
|
47
|
+
}
|
|
48
|
+
return url.replace(trailingPunctuation, '');
|
|
49
|
+
}
|
|
31
50
|
/**
|
|
32
51
|
* Procesa texto para convertir enlaces en elementos <a> clickeables.
|
|
33
52
|
* Detecta automáticamente URLs externas, rutas internas y enlaces estilo Markdown.
|
|
@@ -57,8 +76,13 @@ export class LinkProcessorService {
|
|
|
57
76
|
let processedText = text;
|
|
58
77
|
// 1. Procesar enlaces estilo Markdown [texto](url) primero
|
|
59
78
|
if (processMarkdownLinks) {
|
|
60
|
-
this.markdownLinkRegex
|
|
61
|
-
|
|
79
|
+
const markdownMatches = Array.from(processedText.matchAll(this.markdownLinkRegex));
|
|
80
|
+
// Procesar de atrás hacia adelante para mantener las posiciones
|
|
81
|
+
for (let i = markdownMatches.length - 1; i >= 0; i--) {
|
|
82
|
+
const match = markdownMatches[i];
|
|
83
|
+
const [fullMatch, linkText, url] = match;
|
|
84
|
+
const startIndex = match.index;
|
|
85
|
+
const endIndex = startIndex + fullMatch.length;
|
|
62
86
|
hasLinks = true;
|
|
63
87
|
const isExternal = /^https?:\/\//.test(url);
|
|
64
88
|
const target = (isExternal ? openExternalInNewTab : openInternalInNewTab)
|
|
@@ -68,45 +92,64 @@ export class LinkProcessorService {
|
|
|
68
92
|
: '';
|
|
69
93
|
const typeClass = isExternal ? externalLinkClass : internalLinkClass;
|
|
70
94
|
const classes = `${linkClass} ${typeClass}`.trim();
|
|
71
|
-
|
|
72
|
-
|
|
95
|
+
const linkHtml = `<a href="${url}"${target} class="${classes}">${linkText}</a>`;
|
|
96
|
+
processedText =
|
|
97
|
+
processedText.substring(0, startIndex) + linkHtml + processedText.substring(endIndex);
|
|
98
|
+
}
|
|
73
99
|
}
|
|
74
|
-
// 2. Procesar URLs externas directas
|
|
75
|
-
this.urlRegex
|
|
76
|
-
|
|
100
|
+
// 2. Procesar URLs externas directas
|
|
101
|
+
const urlMatches = Array.from(processedText.matchAll(this.urlRegex));
|
|
102
|
+
// Procesar de atrás hacia adelante para mantener las posiciones
|
|
103
|
+
for (let i = urlMatches.length - 1; i >= 0; i--) {
|
|
104
|
+
const match = urlMatches[i];
|
|
105
|
+
const [fullMatch, url] = match;
|
|
106
|
+
const startIndex = match.index;
|
|
107
|
+
const endIndex = startIndex + fullMatch.length;
|
|
77
108
|
// Verificar que no esté ya dentro de un enlace HTML existente
|
|
78
|
-
const
|
|
79
|
-
const textBefore = processedText.substring(0, urlPosition);
|
|
80
|
-
// Buscar la última apertura y cierre de enlace antes de esta posición
|
|
109
|
+
const textBefore = processedText.substring(0, startIndex);
|
|
81
110
|
const lastOpenTag = textBefore.lastIndexOf('<a ');
|
|
82
111
|
const lastCloseTag = textBefore.lastIndexOf('</a>');
|
|
83
112
|
// Si hay un tag <a abierto sin cerrar, no procesamos
|
|
84
113
|
if (lastOpenTag > lastCloseTag) {
|
|
85
|
-
|
|
114
|
+
continue;
|
|
86
115
|
}
|
|
116
|
+
// Limpiar puntuación del final de la URL
|
|
117
|
+
const cleanUrl = this.cleanUrlPunctuation(url);
|
|
118
|
+
const punctuationRemoved = url !== cleanUrl;
|
|
119
|
+
const punctuation = punctuationRemoved ? url.substring(cleanUrl.length) : '';
|
|
87
120
|
hasLinks = true;
|
|
88
121
|
const target = openExternalInNewTab ? ' target="_blank" rel="noopener noreferrer"' : '';
|
|
89
122
|
const classes = `${linkClass} ${externalLinkClass}`.trim();
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
123
|
+
const linkHtml = `<a href="${cleanUrl}"${target} class="${classes}">${cleanUrl}</a>`;
|
|
124
|
+
// Reemplazar el URL original con el enlace + puntuación si existía
|
|
125
|
+
const replacement = punctuationRemoved ? linkHtml + punctuation : linkHtml;
|
|
126
|
+
processedText =
|
|
127
|
+
processedText.substring(0, startIndex) + replacement + processedText.substring(endIndex);
|
|
128
|
+
}
|
|
129
|
+
// 3. Procesar rutas internas
|
|
130
|
+
const internalMatches = Array.from(processedText.matchAll(this.internalRouteRegex));
|
|
131
|
+
// Procesar de atrás hacia adelante para mantener las posiciones
|
|
132
|
+
for (let i = internalMatches.length - 1; i >= 0; i--) {
|
|
133
|
+
const match = internalMatches[i];
|
|
134
|
+
const [fullMatch, prefix, route] = match;
|
|
135
|
+
const startIndex = match.index;
|
|
136
|
+
const endIndex = startIndex + fullMatch.length;
|
|
95
137
|
// Verificar que no esté ya dentro de un enlace HTML existente
|
|
96
|
-
const
|
|
97
|
-
const textBefore = processedText.substring(0, matchPosition);
|
|
98
|
-
// Buscar la última apertura y cierre de enlace antes de esta posición
|
|
138
|
+
const textBefore = processedText.substring(0, startIndex);
|
|
99
139
|
const lastOpenTag = textBefore.lastIndexOf('<a ');
|
|
100
140
|
const lastCloseTag = textBefore.lastIndexOf('</a>');
|
|
101
141
|
// Si hay un tag <a abierto sin cerrar, no procesamos
|
|
102
142
|
if (lastOpenTag > lastCloseTag) {
|
|
103
|
-
|
|
143
|
+
continue;
|
|
104
144
|
}
|
|
105
145
|
hasLinks = true;
|
|
106
146
|
const target = openInternalInNewTab ? ' target="_blank"' : '';
|
|
107
147
|
const classes = `${linkClass} ${internalLinkClass}`.trim();
|
|
108
|
-
|
|
109
|
-
|
|
148
|
+
const linkHtml = `<a href="${route}"${target} class="${classes}">${route}</a>`;
|
|
149
|
+
const replacement = `${prefix}${linkHtml}`;
|
|
150
|
+
processedText =
|
|
151
|
+
processedText.substring(0, startIndex) + replacement + processedText.substring(endIndex);
|
|
152
|
+
}
|
|
110
153
|
// Si hay enlaces, sanitizar el HTML
|
|
111
154
|
if (hasLinks) {
|
|
112
155
|
return this.sanitizer.bypassSecurityTrustHtml(processedText);
|
|
@@ -195,4 +238,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
195
238
|
providedIn: 'root',
|
|
196
239
|
}]
|
|
197
240
|
}], ctorParameters: () => [{ type: i1.DomSanitizer }] });
|
|
198
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1wcm9jZXNzb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRlY2gtY29tcG9uZW50cy9zcmMvbGliL3NlcnZpY2VzL2xpbmstcHJvY2Vzc29yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBa0IzQzs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUlILE1BQU0sT0FBTyxvQkFBb0I7SUFVL0IsWUFBb0IsU0FBdUI7UUFBdkIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQVQzQyxnSEFBZ0g7UUFDL0YsYUFBUSxHQUFHLHdDQUF3QyxDQUFDO1FBRXJFLCtHQUErRztRQUM5Rix1QkFBa0IsR0FBRyxxQ0FBcUMsQ0FBQztRQUU1RSwyREFBMkQ7UUFDMUMsc0JBQWlCLEdBQUcsMEJBQTBCLENBQUM7SUFFbEIsQ0FBQztJQUUvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FvQkc7SUFDSCxZQUFZLENBQUMsSUFBWSxFQUFFLFNBQThCLEVBQUU7UUFDekQsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUVyQixNQUFNLEVBQ0osb0JBQW9CLEdBQUcsSUFBSSxFQUMzQixvQkFBb0IsR0FBRyxLQUFLLEVBQzVCLFNBQVMsR0FBRyxnQkFBZ0IsRUFDNUIsaUJBQWlCLEdBQUcsZUFBZSxFQUNuQyxpQkFBaUIsR0FBRyxlQUFlLEVBQ25DLG9CQUFvQixHQUFHLElBQUksR0FDNUIsR0FBRyxNQUFNLENBQUM7UUFFWCxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBRXpCLDJEQUEyRDtRQUMzRCxJQUFJLG9CQUFvQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjO1lBRXBELGFBQWEsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQ3JGLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ2hCLE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVDLE1BQU0sTUFBTSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUM7b0JBQ3ZFLENBQUMsQ0FBQyxVQUFVO3dCQUNWLENBQUMsQ0FBQyw0Q0FBNEM7d0JBQzlDLENBQUMsQ0FBQyxrQkFBa0I7b0JBQ3RCLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ1AsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7Z0JBQ3JFLE1BQU0sT0FBTyxHQUFHLEdBQUcsU0FBUyxJQUFJLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNuRCxPQUFPLFlBQVksR0FBRyxJQUFJLE1BQU0sV0FBVyxPQUFPLEtBQUssUUFBUSxNQUFNLENBQUM7WUFDeEUsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsNkVBQTZFO1FBQzdFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLGNBQWM7UUFFM0MsYUFBYSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUN0RSw4REFBOEQ7WUFDOUQsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNyRCxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUUzRCxzRUFBc0U7WUFDdEUsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsRCxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXBELHFEQUFxRDtZQUNyRCxJQUFJLFdBQVcsR0FBRyxZQUFZLEVBQUUsQ0FBQztnQkFDL0IsT0FBTyxTQUFTLENBQUMsQ0FBQyxvQkFBb0I7WUFDeEMsQ0FBQztZQUVELFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDaEIsTUFBTSxNQUFNLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLDRDQUE0QyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDeEYsTUFBTSxPQUFPLEdBQUcsR0FBRyxTQUFTLElBQUksaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzRCxPQUFPLFlBQVksR0FBRyxJQUFJLE1BQU0sV0FBVyxPQUFPLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDbkUsQ0FBQyxDQUFDLENBQUM7UUFFSCxxRUFBcUU7UUFDckUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjO1FBRXJELGFBQWEsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDdEYsOERBQThEO1lBQzlELE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkQsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFFN0Qsc0VBQXNFO1lBQ3RFLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEQsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVwRCxxREFBcUQ7WUFDckQsSUFBSSxXQUFXLEdBQUcsWUFBWSxFQUFFLENBQUM7Z0JBQy9CLE9BQU8sS0FBSyxDQUFDLENBQUMsb0JBQW9CO1lBQ3BDLENBQUM7WUFFRCxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlELE1BQU0sT0FBTyxHQUFHLEdBQUcsU0FBUyxJQUFJLGlCQUFpQixFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0QsT0FBTyxHQUFHLE1BQU0sWUFBWSxLQUFLLElBQUksTUFBTSxXQUFXLE9BQU8sS0FBSyxLQUFLLE1BQU0sQ0FBQztRQUNoRixDQUFDLENBQUMsQ0FBQztRQUVILG9DQUFvQztRQUNwQyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNILFFBQVEsQ0FBQyxJQUFZO1FBQ25CLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFeEIsc0JBQXNCO1FBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUVyQyxPQUFPLENBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ2xDLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7OztPQWVHO0lBQ0gsWUFBWSxDQUFDLElBQVk7UUFDdkIsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUVyQixNQUFNLEtBQUssR0FBd0UsRUFBRSxDQUFDO1FBRXRGLHNCQUFzQjtRQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFFckMsbUNBQW1DO1FBQ25DLElBQUksS0FBSyxDQUFDO1FBQ1YsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDNUQsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztZQUNoRSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBRUQsaUNBQWlDO1FBQ2pDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNuRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckIsd0RBQXdEO1lBQ3hELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDbkQsQ0FBQztRQUNILENBQUM7UUFFRCxrQ0FBa0M7UUFDbEMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDN0QsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLHdEQUF3RDtZQUN4RCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDMUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOytHQXpNVSxvQkFBb0I7bUhBQXBCLG9CQUFvQixjQUZuQixNQUFNOzs0RkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIExpbmtQcm9jZXNzb3JDb25maWcge1xuICAvKiogV2hldGhlciB0byBvcGVuIGV4dGVybmFsIGxpbmtzIGluIG5ldyB0YWIgKGRlZmF1bHQ6IHRydWUpICovXG4gIG9wZW5FeHRlcm5hbEluTmV3VGFiPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdG8gb3BlbiBpbnRlcm5hbCBsaW5rcyBpbiBuZXcgdGFiIChkZWZhdWx0OiBmYWxzZSkgKi9cbiAgb3BlbkludGVybmFsSW5OZXdUYWI/OiBib29sZWFuO1xuICAvKiogQ3VzdG9tIENTUyBjbGFzc2VzIGZvciBsaW5rcyAqL1xuICBsaW5rQ2xhc3M/OiBzdHJpbmc7XG4gIC8qKiBDdXN0b20gQ1NTIGNsYXNzZXMgZm9yIGV4dGVybmFsIGxpbmtzICovXG4gIGV4dGVybmFsTGlua0NsYXNzPzogc3RyaW5nO1xuICAvKiogQ3VzdG9tIENTUyBjbGFzc2VzIGZvciBpbnRlcm5hbCBsaW5rcyAqL1xuICBpbnRlcm5hbExpbmtDbGFzcz86IHN0cmluZztcbiAgLyoqIFdoZXRoZXIgdG8gcHJvY2VzcyBNYXJrZG93bi1zdHlsZSBsaW5rcyBbdGV4dF0odXJsKSAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgcHJvY2Vzc01hcmtkb3duTGlua3M/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIExpbmtQcm9jZXNzb3JTZXJ2aWNlIC0gU2VydmljZSBmb3IgcHJvY2Vzc2luZyB0ZXh0IGNvbnRlbnQgdG8gY29udmVydCBVUkxzIGFuZCBpbnRlcm5hbCByb3V0ZXMgaW50byBjbGlja2FibGUgbGlua3MuXG4gKlxuICogVGhpcyBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyBleHRlcm5hbCBVUkxzIChodHRwL2h0dHBzKSwgaW50ZXJuYWwgcm91dGVzIChzdGFydGluZyB3aXRoIC8pLFxuICogYW5kIE1hcmtkb3duLXN0eWxlIGxpbmtzIFt0ZXh0XSh1cmwpIGFuZCBjb252ZXJ0cyB0aGVtIGludG8gSFRNTCBhbmNob3IgZWxlbWVudHMgd2l0aCBhcHByb3ByaWF0ZSBhdHRyaWJ1dGVzLlxuICpcbiAqIEBleGFtcGxlIEJhc2ljIHVzYWdlOlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3RydWN0b3IocHJpdmF0ZSBsaW5rUHJvY2Vzc29yOiBMaW5rUHJvY2Vzc29yU2VydmljZSkge31cbiAqXG4gKiBwcm9jZXNzVGV4dCgpIHtcbiAqICAgY29uc3QgdGV4dCA9ICdWaXNpdCBodHRwczovL2V4YW1wbGUuY29tLCBnbyB0byAvcHJvZmlsZSwgb3IgW2NoZWNrIGRvY3NdKGh0dHBzOi8vZG9jcy5leGFtcGxlLmNvbSknO1xuICogICBjb25zdCBwcm9jZXNzZWQgPSB0aGlzLmxpbmtQcm9jZXNzb3IucHJvY2Vzc0xpbmtzKHRleHQpO1xuICogICAvLyBSZXR1cm5zIFNhZmVIdG1sIHdpdGggY2xpY2thYmxlIGxpbmtzXG4gKiB9XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIExpbmtQcm9jZXNzb3JTZXJ2aWNlIHtcbiAgLy8gUmVnZXggcGFyYSBkZXRlY3RhciBVUkxzIGNvbXBsZXRhcyAoaHR0cC9odHRwcykgLSBwZXJtaXRlIGNhcmFjdGVyZXMgdsOhbGlkb3MgcGVybyBleGNsdXllIHB1bnR1YWNpw7NuIGFsIGZpbmFsXG4gIHByaXZhdGUgcmVhZG9ubHkgdXJsUmVnZXggPSAvKGh0dHBzPzpcXC9cXC9bXlxcc10rPykoPz1bLiw7IT8oKVxcc118JCkvZztcblxuICAvLyBSZWdleCBwYXJhIGRldGVjdGFyIHJ1dGFzIGludGVybmFzIChlbXBpZXphbiBjb24gLyBwZXJvIG5vIHNvbiBVUkxzIGNvbXBsZXRhcykgLSBleGNsdXllIHB1bnR1YWNpw7NuIGFsIGZpbmFsXG4gIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJuYWxSb3V0ZVJlZ2V4ID0gLyhcXHN8XikoXFwvW15cXHNdKj8pKD89Wy4sOyE/KClcXHNdfCQpL2c7XG5cbiAgLy8gUmVnZXggcGFyYSBkZXRlY3RhciBlbmxhY2VzIGVzdGlsbyBNYXJrZG93biBbdGV4dG9dKHVybClcbiAgcHJpdmF0ZSByZWFkb25seSBtYXJrZG93bkxpbmtSZWdleCA9IC9cXFsoW15cXF1dKylcXF1cXCgoW14pXSspXFwpL2c7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikge31cblxuICAvKipcbiAgICogUHJvY2VzYSB0ZXh0byBwYXJhIGNvbnZlcnRpciBlbmxhY2VzIGVuIGVsZW1lbnRvcyA8YT4gY2xpY2tlYWJsZXMuXG4gICAqIERldGVjdGEgYXV0b23DoXRpY2FtZW50ZSBVUkxzIGV4dGVybmFzLCBydXRhcyBpbnRlcm5hcyB5IGVubGFjZXMgZXN0aWxvIE1hcmtkb3duLlxuICAgKlxuICAgKiBAcGFyYW0gdGV4dCAtIFRleHRvIGEgcHJvY2VzYXJcbiAgICogQHBhcmFtIGNvbmZpZyAtIENvbmZpZ3VyYWNpw7NuIGRlbCBwcm9jZXNhbWllbnRvXG4gICAqIEByZXR1cm5zIFNhZmVIdG1sIGNvbiBlbmxhY2VzIHByb2Nlc2Fkb3MgbyBzdHJpbmcgb3JpZ2luYWxcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByZXN1bHQgPSB0aGlzLmxpbmtQcm9jZXNzb3IucHJvY2Vzc0xpbmtzKFxuICAgKiAgICdWaXNpdCBodHRwczovL2V4YW1wbGUuY29tLCBnbyB0byAvcHJvZmlsZSwgb3IgW2NoZWNrIGRvY3NdKGh0dHBzOi8vZG9jcy5leGFtcGxlLmNvbSknLFxuICAgKiAgIHtcbiAgICogICAgIG9wZW5FeHRlcm5hbEluTmV3VGFiOiB0cnVlLFxuICAgKiAgICAgb3BlbkludGVybmFsSW5OZXdUYWI6IGZhbHNlLFxuICAgKiAgICAgcHJvY2Vzc01hcmtkb3duTGlua3M6IHRydWUsXG4gICAqICAgICBsaW5rQ2xhc3M6ICdjdXN0b20tbGluaydcbiAgICogICB9XG4gICAqICk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHJvY2Vzc0xpbmtzKHRleHQ6IHN0cmluZywgY29uZmlnOiBMaW5rUHJvY2Vzc29yQ29uZmlnID0ge30pOiBTYWZlSHRtbCB8IHN0cmluZyB7XG4gICAgaWYgKCF0ZXh0KSByZXR1cm4gJyc7XG5cbiAgICBjb25zdCB7XG4gICAgICBvcGVuRXh0ZXJuYWxJbk5ld1RhYiA9IHRydWUsXG4gICAgICBvcGVuSW50ZXJuYWxJbk5ld1RhYiA9IGZhbHNlLFxuICAgICAgbGlua0NsYXNzID0gJ3Byb2Nlc3NlZC1saW5rJyxcbiAgICAgIGV4dGVybmFsTGlua0NsYXNzID0gJ2V4dGVybmFsLWxpbmsnLFxuICAgICAgaW50ZXJuYWxMaW5rQ2xhc3MgPSAnaW50ZXJuYWwtbGluaycsXG4gICAgICBwcm9jZXNzTWFya2Rvd25MaW5rcyA9IHRydWUsXG4gICAgfSA9IGNvbmZpZztcblxuICAgIGxldCBoYXNMaW5rcyA9IGZhbHNlO1xuICAgIGxldCBwcm9jZXNzZWRUZXh0ID0gdGV4dDtcblxuICAgIC8vIDEuIFByb2Nlc2FyIGVubGFjZXMgZXN0aWxvIE1hcmtkb3duIFt0ZXh0b10odXJsKSBwcmltZXJvXG4gICAgaWYgKHByb2Nlc3NNYXJrZG93bkxpbmtzKSB7XG4gICAgICB0aGlzLm1hcmtkb3duTGlua1JlZ2V4Lmxhc3RJbmRleCA9IDA7IC8vIFJlc2V0IHJlZ2V4XG5cbiAgICAgIHByb2Nlc3NlZFRleHQgPSBwcm9jZXNzZWRUZXh0LnJlcGxhY2UodGhpcy5tYXJrZG93bkxpbmtSZWdleCwgKG1hdGNoLCBsaW5rVGV4dCwgdXJsKSA9PiB7XG4gICAgICAgIGhhc0xpbmtzID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgaXNFeHRlcm5hbCA9IC9eaHR0cHM/OlxcL1xcLy8udGVzdCh1cmwpO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSAoaXNFeHRlcm5hbCA/IG9wZW5FeHRlcm5hbEluTmV3VGFiIDogb3BlbkludGVybmFsSW5OZXdUYWIpXG4gICAgICAgICAgPyBpc0V4dGVybmFsXG4gICAgICAgICAgICA/ICcgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiJ1xuICAgICAgICAgICAgOiAnIHRhcmdldD1cIl9ibGFua1wiJ1xuICAgICAgICAgIDogJyc7XG4gICAgICAgIGNvbnN0IHR5cGVDbGFzcyA9IGlzRXh0ZXJuYWwgPyBleHRlcm5hbExpbmtDbGFzcyA6IGludGVybmFsTGlua0NsYXNzO1xuICAgICAgICBjb25zdCBjbGFzc2VzID0gYCR7bGlua0NsYXNzfSAke3R5cGVDbGFzc31gLnRyaW0oKTtcbiAgICAgICAgcmV0dXJuIGA8YSBocmVmPVwiJHt1cmx9XCIke3RhcmdldH0gY2xhc3M9XCIke2NsYXNzZXN9XCI+JHtsaW5rVGV4dH08L2E+YDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIDIuIFByb2Nlc2FyIFVSTHMgZXh0ZXJuYXMgZGlyZWN0YXMgKHNvbG8gc2kgbm8gZXN0w6FuIHlhIGVuIHVuIGVubGFjZSBIVE1MKVxuICAgIHRoaXMudXJsUmVnZXgubGFzdEluZGV4ID0gMDsgLy8gUmVzZXQgcmVnZXhcblxuICAgIHByb2Nlc3NlZFRleHQgPSBwcm9jZXNzZWRUZXh0LnJlcGxhY2UodGhpcy51cmxSZWdleCwgKGZ1bGxNYXRjaCwgdXJsKSA9PiB7XG4gICAgICAvLyBWZXJpZmljYXIgcXVlIG5vIGVzdMOpIHlhIGRlbnRybyBkZSB1biBlbmxhY2UgSFRNTCBleGlzdGVudGVcbiAgICAgIGNvbnN0IHVybFBvc2l0aW9uID0gcHJvY2Vzc2VkVGV4dC5pbmRleE9mKGZ1bGxNYXRjaCk7XG4gICAgICBjb25zdCB0ZXh0QmVmb3JlID0gcHJvY2Vzc2VkVGV4dC5zdWJzdHJpbmcoMCwgdXJsUG9zaXRpb24pO1xuXG4gICAgICAvLyBCdXNjYXIgbGEgw7psdGltYSBhcGVydHVyYSB5IGNpZXJyZSBkZSBlbmxhY2UgYW50ZXMgZGUgZXN0YSBwb3NpY2nDs25cbiAgICAgIGNvbnN0IGxhc3RPcGVuVGFnID0gdGV4dEJlZm9yZS5sYXN0SW5kZXhPZignPGEgJyk7XG4gICAgICBjb25zdCBsYXN0Q2xvc2VUYWcgPSB0ZXh0QmVmb3JlLmxhc3RJbmRleE9mKCc8L2E+Jyk7XG5cbiAgICAgIC8vIFNpIGhheSB1biB0YWcgPGEgYWJpZXJ0byBzaW4gY2VycmFyLCBubyBwcm9jZXNhbW9zXG4gICAgICBpZiAobGFzdE9wZW5UYWcgPiBsYXN0Q2xvc2VUYWcpIHtcbiAgICAgICAgcmV0dXJuIGZ1bGxNYXRjaDsgLy8gTWFudGVuZXIgb3JpZ2luYWxcbiAgICAgIH1cblxuICAgICAgaGFzTGlua3MgPSB0cnVlO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gb3BlbkV4dGVybmFsSW5OZXdUYWIgPyAnIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIicgOiAnJztcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSBgJHtsaW5rQ2xhc3N9ICR7ZXh0ZXJuYWxMaW5rQ2xhc3N9YC50cmltKCk7XG4gICAgICByZXR1cm4gYDxhIGhyZWY9XCIke3VybH1cIiR7dGFyZ2V0fSBjbGFzcz1cIiR7Y2xhc3Nlc31cIj4ke3VybH08L2E+YDtcbiAgICB9KTtcblxuICAgIC8vIDMuIFByb2Nlc2FyIHJ1dGFzIGludGVybmFzIChzb2xvIHNpIG5vIGVzdMOhbiB5YSBlbiB1biBlbmxhY2UgSFRNTClcbiAgICB0aGlzLmludGVybmFsUm91dGVSZWdleC5sYXN0SW5kZXggPSAwOyAvLyBSZXNldCByZWdleFxuXG4gICAgcHJvY2Vzc2VkVGV4dCA9IHByb2Nlc3NlZFRleHQucmVwbGFjZSh0aGlzLmludGVybmFsUm91dGVSZWdleCwgKG1hdGNoLCBwcmVmaXgsIHJvdXRlKSA9PiB7XG4gICAgICAvLyBWZXJpZmljYXIgcXVlIG5vIGVzdMOpIHlhIGRlbnRybyBkZSB1biBlbmxhY2UgSFRNTCBleGlzdGVudGVcbiAgICAgIGNvbnN0IG1hdGNoUG9zaXRpb24gPSBwcm9jZXNzZWRUZXh0LmluZGV4T2YobWF0Y2gpO1xuICAgICAgY29uc3QgdGV4dEJlZm9yZSA9IHByb2Nlc3NlZFRleHQuc3Vic3RyaW5nKDAsIG1hdGNoUG9zaXRpb24pO1xuXG4gICAgICAvLyBCdXNjYXIgbGEgw7psdGltYSBhcGVydHVyYSB5IGNpZXJyZSBkZSBlbmxhY2UgYW50ZXMgZGUgZXN0YSBwb3NpY2nDs25cbiAgICAgIGNvbnN0IGxhc3RPcGVuVGFnID0gdGV4dEJlZm9yZS5sYXN0SW5kZXhPZignPGEgJyk7XG4gICAgICBjb25zdCBsYXN0Q2xvc2VUYWcgPSB0ZXh0QmVmb3JlLmxhc3RJbmRleE9mKCc8L2E+Jyk7XG5cbiAgICAgIC8vIFNpIGhheSB1biB0YWcgPGEgYWJpZXJ0byBzaW4gY2VycmFyLCBubyBwcm9jZXNhbW9zXG4gICAgICBpZiAobGFzdE9wZW5UYWcgPiBsYXN0Q2xvc2VUYWcpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoOyAvLyBNYW50ZW5lciBvcmlnaW5hbFxuICAgICAgfVxuXG4gICAgICBoYXNMaW5rcyA9IHRydWU7XG4gICAgICBjb25zdCB0YXJnZXQgPSBvcGVuSW50ZXJuYWxJbk5ld1RhYiA/ICcgdGFyZ2V0PVwiX2JsYW5rXCInIDogJyc7XG4gICAgICBjb25zdCBjbGFzc2VzID0gYCR7bGlua0NsYXNzfSAke2ludGVybmFsTGlua0NsYXNzfWAudHJpbSgpO1xuICAgICAgcmV0dXJuIGAke3ByZWZpeH08YSBocmVmPVwiJHtyb3V0ZX1cIiR7dGFyZ2V0fSBjbGFzcz1cIiR7Y2xhc3Nlc31cIj4ke3JvdXRlfTwvYT5gO1xuICAgIH0pO1xuXG4gICAgLy8gU2kgaGF5IGVubGFjZXMsIHNhbml0aXphciBlbCBIVE1MXG4gICAgaWYgKGhhc0xpbmtzKSB7XG4gICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwocHJvY2Vzc2VkVGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0YSBzaSB1biB0ZXh0byBjb250aWVuZSBlbmxhY2VzIChVUkxzLCBydXRhcyBpbnRlcm5hcyBvIGVubGFjZXMgTWFya2Rvd24pLlxuICAgKlxuICAgKiBAcGFyYW0gdGV4dCAtIFRleHRvIGEgYW5hbGl6YXJcbiAgICogQHJldHVybnMgdHJ1ZSBzaSBjb250aWVuZSBlbmxhY2VzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgaGFzTGlua3MgPSB0aGlzLmxpbmtQcm9jZXNzb3IuaGFzTGlua3MoJ1Zpc2l0IGh0dHBzOi8vZXhhbXBsZS5jb20gb3IgW2RvY3NdKGh0dHBzOi8vZG9jcy5jb20pJyk7XG4gICAqIC8vIFJldHVybnM6IHRydWVcbiAgICogYGBgXG4gICAqL1xuICBoYXNMaW5rcyh0ZXh0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRleHQpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIFJlc2V0IHJlZ2V4IGluZGljZXNcbiAgICB0aGlzLnVybFJlZ2V4Lmxhc3RJbmRleCA9IDA7XG4gICAgdGhpcy5pbnRlcm5hbFJvdXRlUmVnZXgubGFzdEluZGV4ID0gMDtcbiAgICB0aGlzLm1hcmtkb3duTGlua1JlZ2V4Lmxhc3RJbmRleCA9IDA7XG5cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy51cmxSZWdleC50ZXN0KHRleHQpIHx8XG4gICAgICB0aGlzLmludGVybmFsUm91dGVSZWdleC50ZXN0KHRleHQpIHx8XG4gICAgICB0aGlzLm1hcmtkb3duTGlua1JlZ2V4LnRlc3QodGV4dClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhZSB0b2RvcyBsb3MgZW5sYWNlcyBkZSB1biB0ZXh0by5cbiAgICpcbiAgICogQHBhcmFtIHRleHQgLSBUZXh0byBhIGFuYWxpemFyXG4gICAqIEByZXR1cm5zIEFycmF5IGRlIGVubGFjZXMgZW5jb250cmFkb3MgY29uIHN1IHRpcG8geSB0ZXh0byAoc2kgZXMgTWFya2Rvd24pXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgbGlua3MgPSB0aGlzLmxpbmtQcm9jZXNzb3IuZXh0cmFjdExpbmtzKCdWaXNpdCBodHRwczovL2V4YW1wbGUuY29tLCAvcHJvZmlsZSwgb3IgW2RvY3NdKGh0dHBzOi8vZG9jcy5jb20pJyk7XG4gICAqIC8vIFJldHVybnM6IFtcbiAgICogLy8gICB7IHVybDogJ2h0dHBzOi8vZXhhbXBsZS5jb20nLCB0eXBlOiAnZXh0ZXJuYWwnLCB0ZXh0OiAnaHR0cHM6Ly9leGFtcGxlLmNvbScgfSxcbiAgICogLy8gICB7IHVybDogJy9wcm9maWxlJywgdHlwZTogJ2ludGVybmFsJywgdGV4dDogJy9wcm9maWxlJyB9LFxuICAgKiAvLyAgIHsgdXJsOiAnaHR0cHM6Ly9kb2NzLmNvbScsIHR5cGU6ICdleHRlcm5hbCcsIHRleHQ6ICdkb2NzJyB9XG4gICAqIC8vIF1cbiAgICogYGBgXG4gICAqL1xuICBleHRyYWN0TGlua3ModGV4dDogc3RyaW5nKTogQXJyYXk8eyB1cmw6IHN0cmluZzsgdHlwZTogJ2V4dGVybmFsJyB8ICdpbnRlcm5hbCc7IHRleHQ6IHN0cmluZyB9PiB7XG4gICAgaWYgKCF0ZXh0KSByZXR1cm4gW107XG5cbiAgICBjb25zdCBsaW5rczogQXJyYXk8eyB1cmw6IHN0cmluZzsgdHlwZTogJ2V4dGVybmFsJyB8ICdpbnRlcm5hbCc7IHRleHQ6IHN0cmluZyB9PiA9IFtdO1xuXG4gICAgLy8gUmVzZXQgcmVnZXggaW5kaWNlc1xuICAgIHRoaXMudXJsUmVnZXgubGFzdEluZGV4ID0gMDtcbiAgICB0aGlzLmludGVybmFsUm91dGVSZWdleC5sYXN0SW5kZXggPSAwO1xuICAgIHRoaXMubWFya2Rvd25MaW5rUmVnZXgubGFzdEluZGV4ID0gMDtcblxuICAgIC8vIEV4dHJhZXIgZW5sYWNlcyBNYXJrZG93biBwcmltZXJvXG4gICAgbGV0IG1hdGNoO1xuICAgIHdoaWxlICgobWF0Y2ggPSB0aGlzLm1hcmtkb3duTGlua1JlZ2V4LmV4ZWModGV4dCkpICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB1cmwgPSBtYXRjaFsyXTtcbiAgICAgIGNvbnN0IGxpbmtUZXh0ID0gbWF0Y2hbMV07XG4gICAgICBjb25zdCB0eXBlID0gL15odHRwcz86XFwvXFwvLy50ZXN0KHVybCkgPyAnZXh0ZXJuYWwnIDogJ2ludGVybmFsJztcbiAgICAgIGxpbmtzLnB1c2goeyB1cmwsIHR5cGUsIHRleHQ6IGxpbmtUZXh0IH0pO1xuICAgIH1cblxuICAgIC8vIEV4dHJhZXIgVVJMcyBleHRlcm5hcyBkaXJlY3Rhc1xuICAgIHdoaWxlICgobWF0Y2ggPSB0aGlzLnVybFJlZ2V4LmV4ZWModGV4dCkpICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB1cmwgPSBtYXRjaFsxXTtcbiAgICAgIC8vIFZlcmlmaWNhciBxdWUgbm8gZXN0w6kgeWEgY2FwdHVyYWRvIGNvbW8gTWFya2Rvd24gbGlua1xuICAgICAgaWYgKCFsaW5rcy5zb21lKGxpbmsgPT4gbGluay51cmwgPT09IHVybCkpIHtcbiAgICAgICAgbGlua3MucHVzaCh7IHVybCwgdHlwZTogJ2V4dGVybmFsJywgdGV4dDogdXJsIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEV4dHJhZXIgcnV0YXMgaW50ZXJuYXMgZGlyZWN0YXNcbiAgICB3aGlsZSAoKG1hdGNoID0gdGhpcy5pbnRlcm5hbFJvdXRlUmVnZXguZXhlYyh0ZXh0KSkgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHVybCA9IG1hdGNoWzJdO1xuICAgICAgLy8gVmVyaWZpY2FyIHF1ZSBubyBlc3TDqSB5YSBjYXB0dXJhZG8gY29tbyBNYXJrZG93biBsaW5rXG4gICAgICBpZiAoIWxpbmtzLnNvbWUobGluayA9PiBsaW5rLnVybCA9PT0gdXJsKSkge1xuICAgICAgICBsaW5rcy5wdXNoKHsgdXJsLCB0eXBlOiAnaW50ZXJuYWwnLCB0ZXh0OiB1cmwgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpbmtzO1xuICB9XG59XG4iXX0=
|
|
241
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1wcm9jZXNzb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRlY2gtY29tcG9uZW50cy9zcmMvbGliL3NlcnZpY2VzL2xpbmstcHJvY2Vzc29yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBa0IzQzs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUlILE1BQU0sT0FBTyxvQkFBb0I7SUFVL0IsWUFBb0IsU0FBdUI7UUFBdkIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQVQzQyxxR0FBcUc7UUFDcEYsYUFBUSxHQUFHLHNCQUFzQixDQUFDO1FBRW5ELHlGQUF5RjtRQUN4RSx1QkFBa0IsR0FBRyxtQkFBbUIsQ0FBQztRQUUxRCwyREFBMkQ7UUFDMUMsc0JBQWlCLEdBQUcsMEJBQTBCLENBQUM7SUFFbEIsQ0FBQztJQUUvQzs7OztPQUlHO0lBQ0ssbUJBQW1CLENBQUMsR0FBVztRQUNyQyxvRkFBb0Y7UUFDcEYsb0ZBQW9GO1FBQ3BGLE1BQU0sbUJBQW1CLEdBQUcsWUFBWSxDQUFDO1FBRXpDLDBGQUEwRjtRQUMxRixvREFBb0Q7UUFDcEQsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFL0MsSUFBSSxvQkFBb0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzdDLDREQUE0RDtZQUM1RCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7Ozs7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Q0FBa0M7UUFDbEMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDN0QsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLHdEQUF3RDtZQUN4RCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDMUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOytHQTdQVSxvQkFBb0I7bUhBQXBCLG9CQUFvQixjQUZuQixNQUFNOzs0RkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIExpbmtQcm9jZXNzb3JDb25maWcge1xuICAvKiogV2hldGhlciB0byBvcGVuIGV4dGVybmFsIGxpbmtzIGluIG5ldyB0YWIgKGRlZmF1bHQ6IHRydWUpICovXG4gIG9wZW5FeHRlcm5hbEluTmV3VGFiPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdG8gb3BlbiBpbnRlcm5hbCBsaW5rcyBpbiBuZXcgdGFiIChkZWZhdWx0OiBmYWxzZSkgKi9cbiAgb3BlbkludGVybmFsSW5OZXdUYWI/OiBib29sZWFuO1xuICAvKiogQ3VzdG9tIENTUyBjbGFzc2VzIGZvciBsaW5rcyAqL1xuICBsaW5rQ2xhc3M/OiBzdHJpbmc7XG4gIC8qKiBDdXN0b20gQ1NTIGNsYXNzZXMgZm9yIGV4dGVybmFsIGxpbmtzICovXG4gIGV4dGVybmFsTGlua0NsYXNzPzogc3RyaW5nO1xuICAvKiogQ3VzdG9tIENTUyBjbGFzc2VzIGZvciBpbnRlcm5hbCBsaW5rcyAqL1xuICBpbnRlcm5hbExpbmtDbGFzcz86IHN0cmluZztcbiAgLyoqIFdoZXRoZXIgdG8gcHJvY2VzcyBNYXJrZG93bi1zdHlsZSBsaW5rcyBbdGV4dF0odXJsKSAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgcHJvY2Vzc01hcmtkb3duTGlua3M/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIExpbmtQcm9jZXNzb3JTZXJ2aWNlIC0gU2VydmljZSBmb3IgcHJvY2Vzc2luZyB0ZXh0IGNvbnRlbnQgdG8gY29udmVydCBVUkxzIGFuZCBpbnRlcm5hbCByb3V0ZXMgaW50byBjbGlja2FibGUgbGlua3MuXG4gKlxuICogVGhpcyBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyBleHRlcm5hbCBVUkxzIChodHRwL2h0dHBzKSwgaW50ZXJuYWwgcm91dGVzIChzdGFydGluZyB3aXRoIC8pLFxuICogYW5kIE1hcmtkb3duLXN0eWxlIGxpbmtzIFt0ZXh0XSh1cmwpIGFuZCBjb252ZXJ0cyB0aGVtIGludG8gSFRNTCBhbmNob3IgZWxlbWVudHMgd2l0aCBhcHByb3ByaWF0ZSBhdHRyaWJ1dGVzLlxuICpcbiAqIEBleGFtcGxlIEJhc2ljIHVzYWdlOlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3RydWN0b3IocHJpdmF0ZSBsaW5rUHJvY2Vzc29yOiBMaW5rUHJvY2Vzc29yU2VydmljZSkge31cbiAqXG4gKiBwcm9jZXNzVGV4dCgpIHtcbiAqICAgY29uc3QgdGV4dCA9ICdWaXNpdCBodHRwczovL2V4YW1wbGUuY29tLCBnbyB0byAvcHJvZmlsZSwgb3IgW2NoZWNrIGRvY3NdKGh0dHBzOi8vZG9jcy5leGFtcGxlLmNvbSknO1xuICogICBjb25zdCBwcm9jZXNzZWQgPSB0aGlzLmxpbmtQcm9jZXNzb3IucHJvY2Vzc0xpbmtzKHRleHQpO1xuICogICAvLyBSZXR1cm5zIFNhZmVIdG1sIHdpdGggY2xpY2thYmxlIGxpbmtzXG4gKiB9XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIExpbmtQcm9jZXNzb3JTZXJ2aWNlIHtcbiAgLy8gUmVnZXggcGFyYSBkZXRlY3RhciBVUkxzIGNvbXBsZXRhcyAoaHR0cC9odHRwcykgLSBjYXB0dXJhIHRvZGEgbGEgVVJMIHkgbHVlZ28gbGltcGlhbW9zIHB1bnR1YWNpw7NuXG4gIHByaXZhdGUgcmVhZG9ubHkgdXJsUmVnZXggPSAvKGh0dHBzPzpcXC9cXC9bXlxcc10rKS9nO1xuXG4gIC8vIFJlZ2V4IHBhcmEgZGV0ZWN0YXIgcnV0YXMgaW50ZXJuYXMgLSBjYXB0dXJhIHRvZGEgbGEgcnV0YSB5IGx1ZWdvIGxpbXBpYW1vcyBwdW50dWFjacOzblxuICBwcml2YXRlIHJlYWRvbmx5IGludGVybmFsUm91dGVSZWdleCA9IC8oXFxzfF4pKFxcL1teXFxzXSopL2c7XG5cbiAgLy8gUmVnZXggcGFyYSBkZXRlY3RhciBlbmxhY2VzIGVzdGlsbyBNYXJrZG93biBbdGV4dG9dKHVybClcbiAgcHJpdmF0ZSByZWFkb25seSBtYXJrZG93bkxpbmtSZWdleCA9IC9cXFsoW15cXF1dKylcXF1cXCgoW14pXSspXFwpL2c7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikge31cblxuICAvKipcbiAgICogTGltcGlhIGxhIHB1bnR1YWNpw7NuIGRlbCBmaW5hbCBkZSB1bmEgVVJMLlxuICAgKiBNYW50aWVuZSBjYXJhY3RlcmVzIHbDoWxpZG9zIGRlIFVSTCBwZXJvIHJlbXVldmUgc2lnbm9zIGRlIHB1bnR1YWNpw7NuIGNvbXVuZXMgYWwgZmluYWwuXG4gICAqIFByZXNlcnZhIHBhcsOhbWV0cm9zIGRlIGNvbnN1bHRhLCBmcmFnbWVudG9zIHkgY2FyYWN0ZXJlcyB2w6FsaWRvcyBlbiBVUkxzLlxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhblVybFB1bmN0dWF0aW9uKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBDYXJhY3RlcmVzIHF1ZSBjb25zaWRlcmFtb3MgcHVudHVhY2nDs24gYWwgZmluYWwgZGUgb3JhY2nDs24sIHBlcm8gTk8gcGFydGUgZGUgVVJMc1xuICAgIC8vIE5vIGluY2x1aW1vcyAmIG8gPSBxdWUgc29uIHBhcnRlIGRlIHF1ZXJ5IHBhcmFtcywgbmkgIyBxdWUgZXMgcGFydGUgZGUgZnJhZ21lbnRvc1xuICAgIGNvbnN0IHRyYWlsaW5nUHVuY3R1YXRpb24gPSAvWy4sOyE/KV0rJC87XG5cbiAgICAvLyBDYXNvcyBlc3BlY2lhbGVzOiBzaSBsYSBVUkwgdGVybWluYSBjb24gcGFyw6ludGVzaXMgcGVybyBubyB0aWVuZSBwYXLDqW50ZXNpcyBkZSBhcGVydHVyYVxuICAgIC8vIHByb2JhYmxlbWVudGUgZWwgcGFyw6ludGVzaXMgbm8gZXMgcGFydGUgZGUgbGEgVVJMXG4gICAgY29uc3QgaGFzT3BlbmluZ1BhcmVuID0gdXJsLmluY2x1ZGVzKCcoJyk7XG4gICAgY29uc3QgZW5kc1dpdGhDbG9zaW5nUGFyZW4gPSB1cmwuZW5kc1dpdGgoJyknKTtcblxuICAgIGlmIChlbmRzV2l0aENsb3NpbmdQYXJlbiAmJiAhaGFzT3BlbmluZ1BhcmVuKSB7XG4gICAgICAvLyBSZW1vdmVyIGVsIHBhcsOpbnRlc2lzIGRlIGNpZXJyZSBzaSBubyBoYXkgdW5vIGRlIGFwZXJ0dXJhXG4gICAgICB1cmwgPSB1cmwucmVwbGFjZSgvXFwpJC8sICcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLnJlcGxhY2UodHJhaWxpbmdQdW5jdHVhdGlvbiwgJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc2EgdGV4dG8gcGFyYSBjb252ZXJ0aXIgZW5sYWNlcyBlbiBlbGVtZW50b3MgPGE+IGNsaWNrZWFibGVzLlxuICAgKiBEZXRlY3RhIGF1dG9tw6F0aWNhbWVudGUgVVJMcyBleHRlcm5hcywgcnV0YXMgaW50ZXJuYXMgeSBlbmxhY2VzIGVzdGlsbyBNYXJrZG93bi5cbiAgICpcbiAgICogQHBhcmFtIHRleHQgLSBUZXh0byBhIHByb2Nlc2FyXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmFjacOzbiBkZWwgcHJvY2VzYW1pZW50b1xuICAgKiBAcmV0dXJucyBTYWZlSHRtbCBjb24gZW5sYWNlcyBwcm9jZXNhZG9zIG8gc3RyaW5nIG9yaWdpbmFsXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcmVzdWx0ID0gdGhpcy5saW5rUHJvY2Vzc29yLnByb2Nlc3NMaW5rcyhcbiAgICogICAnVmlzaXQgaHR0cHM6Ly9leGFtcGxlLmNvbSwgZ28gdG8gL3Byb2ZpbGUsIG9yIFtjaGVjayBkb2NzXShodHRwczovL2RvY3MuZXhhbXBsZS5jb20pJyxcbiAgICogICB7XG4gICAqICAgICBvcGVuRXh0ZXJuYWxJbk5ld1RhYjogdHJ1ZSxcbiAgICogICAgIG9wZW5JbnRlcm5hbEluTmV3VGFiOiBmYWxzZSxcbiAgICogICAgIHByb2Nlc3NNYXJrZG93bkxpbmtzOiB0cnVlLFxuICAgKiAgICAgbGlua0NsYXNzOiAnY3VzdG9tLWxpbmsnXG4gICAqICAgfVxuICAgKiApO1xuICAgKiBgYGBcbiAgICovXG4gIHByb2Nlc3NMaW5rcyh0ZXh0OiBzdHJpbmcsIGNvbmZpZzogTGlua1Byb2Nlc3NvckNvbmZpZyA9IHt9KTogU2FmZUh0bWwgfCBzdHJpbmcge1xuICAgIGlmICghdGV4dCkgcmV0dXJuICcnO1xuXG4gICAgY29uc3Qge1xuICAgICAgb3BlbkV4dGVybmFsSW5OZXdUYWIgPSB0cnVlLFxuICAgICAgb3BlbkludGVybmFsSW5OZXdUYWIgPSBmYWxzZSxcbiAgICAgIGxpbmtDbGFzcyA9ICdwcm9jZXNzZWQtbGluaycsXG4gICAgICBleHRlcm5hbExpbmtDbGFzcyA9ICdleHRlcm5hbC1saW5rJyxcbiAgICAgIGludGVybmFsTGlua0NsYXNzID0gJ2ludGVybmFsLWxpbmsnLFxuICAgICAgcHJvY2Vzc01hcmtkb3duTGlua3MgPSB0cnVlLFxuICAgIH0gPSBjb25maWc7XG5cbiAgICBsZXQgaGFzTGlua3MgPSBmYWxzZTtcbiAgICBsZXQgcHJvY2Vzc2VkVGV4dCA9IHRleHQ7XG5cbiAgICAvLyAxLiBQcm9jZXNhciBlbmxhY2VzIGVzdGlsbyBNYXJrZG93biBbdGV4dG9dKHVybCkgcHJpbWVyb1xuICAgIGlmIChwcm9jZXNzTWFya2Rvd25MaW5rcykge1xuICAgICAgY29uc3QgbWFya2Rvd25NYXRjaGVzID0gQXJyYXkuZnJvbShwcm9jZXNzZWRUZXh0Lm1hdGNoQWxsKHRoaXMubWFya2Rvd25MaW5rUmVnZXgpKTtcblxuICAgICAgLy8gUHJvY2VzYXIgZGUgYXRyw6FzIGhhY2lhIGFkZWxhbnRlIHBhcmEgbWFudGVuZXIgbGFzIHBvc2ljaW9uZXNcbiAgICAgIGZvciAobGV0IGkgPSBtYXJrZG93bk1hdGNoZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBtYXJrZG93bk1hdGNoZXNbaV07XG4gICAgICAgIGNvbnN0IFtmdWxsTWF0Y2gsIGxpbmtUZXh0LCB1cmxdID0gbWF0Y2g7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBtYXRjaC5pbmRleCE7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gc3RhcnRJbmRleCArIGZ1bGxNYXRjaC5sZW5ndGg7XG5cbiAgICAgICAgaGFzTGlua3MgPSB0cnVlO1xuICAgICAgICBjb25zdCBpc0V4dGVybmFsID0gL15odHRwcz86XFwvXFwvLy50ZXN0KHVybCk7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IChpc0V4dGVybmFsID8gb3BlbkV4dGVybmFsSW5OZXdUYWIgOiBvcGVuSW50ZXJuYWxJbk5ld1RhYilcbiAgICAgICAgICA/IGlzRXh0ZXJuYWxcbiAgICAgICAgICAgID8gJyB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCInXG4gICAgICAgICAgICA6ICcgdGFyZ2V0PVwiX2JsYW5rXCInXG4gICAgICAgICAgOiAnJztcbiAgICAgICAgY29uc3QgdHlwZUNsYXNzID0gaXNFeHRlcm5hbCA/IGV4dGVybmFsTGlua0NsYXNzIDogaW50ZXJuYWxMaW5rQ2xhc3M7XG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBgJHtsaW5rQ2xhc3N9ICR7dHlwZUNsYXNzfWAudHJpbSgpO1xuICAgICAgICBjb25zdCBsaW5rSHRtbCA9IGA8YSBocmVmPVwiJHt1cmx9XCIke3RhcmdldH0gY2xhc3M9XCIke2NsYXNzZXN9XCI+JHtsaW5rVGV4dH08L2E+YDtcblxuICAgICAgICBwcm9jZXNzZWRUZXh0ID1cbiAgICAgICAgICBwcm9jZXNzZWRUZXh0LnN1YnN0cmluZygwLCBzdGFydEluZGV4KSArIGxpbmtIdG1sICsgcHJvY2Vzc2VkVGV4dC5zdWJzdHJpbmcoZW5kSW5kZXgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDIuIFByb2Nlc2FyIFVSTHMgZXh0ZXJuYXMgZGlyZWN0YXNcbiAgICBjb25zdCB1cmxNYXRjaGVzID0gQXJyYXkuZnJvbShwcm9jZXNzZWRUZXh0Lm1hdGNoQWxsKHRoaXMudXJsUmVnZXgpKTtcblxuICAgIC8vIFByb2Nlc2FyIGRlIGF0csOhcyBoYWNpYSBhZGVsYW50ZSBwYXJhIG1hbnRlbmVyIGxhcyBwb3NpY2lvbmVzXG4gICAgZm9yIChsZXQgaSA9IHVybE1hdGNoZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gdXJsTWF0Y2hlc1tpXTtcbiAgICAgIGNvbnN0IFtmdWxsTWF0Y2gsIHVybF0gPSBtYXRjaDtcbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBtYXRjaC5pbmRleCE7XG4gICAgICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBmdWxsTWF0Y2gubGVuZ3RoO1xuXG4gICAgICAvLyBWZXJpZmljYXIgcXVlIG5vIGVzdMOpIHlhIGRlbnRybyBkZSB1biBlbmxhY2UgSFRNTCBleGlzdGVudGVcbiAgICAgIGNvbnN0IHRleHRCZWZvcmUgPSBwcm9jZXNzZWRUZXh0LnN1YnN0cmluZygwLCBzdGFydEluZGV4KTtcbiAgICAgIGNvbnN0IGxhc3RPcGVuVGFnID0gdGV4dEJlZm9yZS5sYXN0SW5kZXhPZignPGEgJyk7XG4gICAgICBjb25zdCBsYXN0Q2xvc2VUYWcgPSB0ZXh0QmVmb3JlLmxhc3RJbmRleE9mKCc8L2E+Jyk7XG5cbiAgICAgIC8vIFNpIGhheSB1biB0YWcgPGEgYWJpZXJ0byBzaW4gY2VycmFyLCBubyBwcm9jZXNhbW9zXG4gICAgICBpZiAobGFzdE9wZW5UYWcgPiBsYXN0Q2xvc2VUYWcpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIExpbXBpYXIgcHVudHVhY2nDs24gZGVsIGZpbmFsIGRlIGxhIFVSTFxuICAgICAgY29uc3QgY2xlYW5VcmwgPSB0aGlzLmNsZWFuVXJsUHVuY3R1YXRpb24odXJsKTtcbiAgICAgIGNvbnN0IHB1bmN0dWF0aW9uUmVtb3ZlZCA9IHVybCAhPT0gY2xlYW5Vcmw7XG4gICAgICBjb25zdCBwdW5jdHVhdGlvbiA9IHB1bmN0dWF0aW9uUmVtb3ZlZCA/IHVybC5zdWJzdHJpbmcoY2xlYW5VcmwubGVuZ3RoKSA6ICcnO1xuXG4gICAgICBoYXNMaW5rcyA9IHRydWU7XG4gICAgICBjb25zdCB0YXJnZXQgPSBvcGVuRXh0ZXJuYWxJbk5ld1RhYiA/ICcgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiJyA6ICcnO1xuICAgICAgY29uc3QgY2xhc3NlcyA9IGAke2xpbmtDbGFzc30gJHtleHRlcm5hbExpbmtDbGFzc31gLnRyaW0oKTtcbiAgICAgIGNvbnN0IGxpbmtIdG1sID0gYDxhIGhyZWY9XCIke2NsZWFuVXJsfVwiJHt0YXJnZXR9IGNsYXNzPVwiJHtjbGFzc2VzfVwiPiR7Y2xlYW5Vcmx9PC9hPmA7XG5cbiAgICAgIC8vIFJlZW1wbGF6YXIgZWwgVVJMIG9yaWdpbmFsIGNvbiBlbCBlbmxhY2UgKyBwdW50dWFjacOzbiBzaSBleGlzdMOtYVxuICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSBwdW5jdHVhdGlvblJlbW92ZWQgPyBsaW5rSHRtbCArIHB1bmN0dWF0aW9uIDogbGlua0h0bWw7XG4gICAgICBwcm9jZXNzZWRUZXh0ID1cbiAgICAgICAgcHJvY2Vzc2VkVGV4dC5zdWJzdHJpbmcoMCwgc3RhcnRJbmRleCkgKyByZXBsYWNlbWVudCArIHByb2Nlc3NlZFRleHQuc3Vic3RyaW5nKGVuZEluZGV4KTtcbiAgICB9XG5cbiAgICAvLyAzLiBQcm9jZXNhciBydXRhcyBpbnRlcm5hc1xuICAgIGNvbnN0IGludGVybmFsTWF0Y2hlcyA9IEFycmF5LmZyb20ocHJvY2Vzc2VkVGV4dC5tYXRjaEFsbCh0aGlzLmludGVybmFsUm91dGVSZWdleCkpO1xuXG4gICAgLy8gUHJvY2VzYXIgZGUgYXRyw6FzIGhhY2lhIGFkZWxhbnRlIHBhcmEgbWFudGVuZXIgbGFzIHBvc2ljaW9uZXNcbiAgICBmb3IgKGxldCBpID0gaW50ZXJuYWxNYXRjaGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IGludGVybmFsTWF0Y2hlc1tpXTtcbiAgICAgIGNvbnN0IFtmdWxsTWF0Y2gsIHByZWZpeCwgcm91dGVdID0gbWF0Y2g7XG4gICAgICBjb25zdCBzdGFydEluZGV4ID0gbWF0Y2guaW5kZXghO1xuICAgICAgY29uc3QgZW5kSW5kZXggPSBzdGFydEluZGV4ICsgZnVsbE1hdGNoLmxlbmd0aDtcblxuICAgICAgLy8gVmVyaWZpY2FyIHF1ZSBubyBlc3TDqSB5YSBkZW50cm8gZGUgdW4gZW5sYWNlIEhUTUwgZXhpc3RlbnRlXG4gICAgICBjb25zdCB0ZXh0QmVmb3JlID0gcHJvY2Vzc2VkVGV4dC5zdWJzdHJpbmcoMCwgc3RhcnRJbmRleCk7XG4gICAgICBjb25zdCBsYXN0T3BlblRhZyA9IHRleHRCZWZvcmUubGFzdEluZGV4T2YoJzxhICcpO1xuICAgICAgY29uc3QgbGFzdENsb3NlVGFnID0gdGV4dEJlZm9yZS5sYXN0SW5kZXhPZignPC9hPicpO1xuXG4gICAgICAvLyBTaSBoYXkgdW4gdGFnIDxhIGFiaWVydG8gc2luIGNlcnJhciwgbm8gcHJvY2VzYW1vc1xuICAgICAgaWYgKGxhc3RPcGVuVGFnID4gbGFzdENsb3NlVGFnKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBoYXNMaW5rcyA9IHRydWU7XG4gICAgICBjb25zdCB0YXJnZXQgPSBvcGVuSW50ZXJuYWxJbk5ld1RhYiA/ICcgdGFyZ2V0PVwiX2JsYW5rXCInIDogJyc7XG4gICAgICBjb25zdCBjbGFzc2VzID0gYCR7bGlua0NsYXNzfSAke2ludGVybmFsTGlua0NsYXNzfWAudHJpbSgpO1xuICAgICAgY29uc3QgbGlua0h0bWwgPSBgPGEgaHJlZj1cIiR7cm91dGV9XCIke3RhcmdldH0gY2xhc3M9XCIke2NsYXNzZXN9XCI+JHtyb3V0ZX08L2E+YDtcblxuICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSBgJHtwcmVmaXh9JHtsaW5rSHRtbH1gO1xuICAgICAgcHJvY2Vzc2VkVGV4dCA9XG4gICAgICAgIHByb2Nlc3NlZFRleHQuc3Vic3RyaW5nKDAsIHN0YXJ0SW5kZXgpICsgcmVwbGFjZW1lbnQgKyBwcm9jZXNzZWRUZXh0LnN1YnN0cmluZyhlbmRJbmRleCk7XG4gICAgfVxuXG4gICAgLy8gU2kgaGF5IGVubGFjZXMsIHNhbml0aXphciBlbCBIVE1MXG4gICAgaWYgKGhhc0xpbmtzKSB7XG4gICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwocHJvY2Vzc2VkVGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0YSBzaSB1biB0ZXh0byBjb250aWVuZSBlbmxhY2VzIChVUkxzLCBydXRhcyBpbnRlcm5hcyBvIGVubGFjZXMgTWFya2Rvd24pLlxuICAgKlxuICAgKiBAcGFyYW0gdGV4dCAtIFRleHRvIGEgYW5hbGl6YXJcbiAgICogQHJldHVybnMgdHJ1ZSBzaSBjb250aWVuZSBlbmxhY2VzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgaGFzTGlua3MgPSB0aGlzLmxpbmtQcm9jZXNzb3IuaGFzTGlua3MoJ1Zpc2l0IGh0dHBzOi8vZXhhbXBsZS5jb20gb3IgW2RvY3NdKGh0dHBzOi8vZG9jcy5jb20pJyk7XG4gICAqIC8vIFJldHVybnM6IHRydWVcbiAgICogYGBgXG4gICAqL1xuICBoYXNMaW5rcyh0ZXh0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRleHQpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIFJlc2V0IHJlZ2V4IGluZGljZXNcbiAgICB0aGlzLnVybFJlZ2V4Lmxhc3RJbmRleCA9IDA7XG4gICAgdGhpcy5pbnRlcm5hbFJvdXRlUmVnZXgubGFzdEluZGV4ID0gMDtcbiAgICB0aGlzLm1hcmtkb3duTGlua1JlZ2V4Lmxhc3RJbmRleCA9IDA7XG5cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy51cmxSZWdleC50ZXN0KHRleHQpIHx8XG4gICAgICB0aGlzLmludGVybmFsUm91dGVSZWdleC50ZXN0KHRleHQpIHx8XG4gICAgICB0aGlzLm1hcmtkb3duTGlua1JlZ2V4LnRlc3QodGV4dClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhZSB0b2RvcyBsb3MgZW5sYWNlcyBkZSB1biB0ZXh0by5cbiAgICpcbiAgICogQHBhcmFtIHRleHQgLSBUZXh0byBhIGFuYWxpemFyXG4gICAqIEByZXR1cm5zIEFycmF5IGRlIGVubGFjZXMgZW5jb250cmFkb3MgY29uIHN1IHRpcG8geSB0ZXh0byAoc2kgZXMgTWFya2Rvd24pXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgbGlua3MgPSB0aGlzLmxpbmtQcm9jZXNzb3IuZXh0cmFjdExpbmtzKCdWaXNpdCBodHRwczovL2V4YW1wbGUuY29tLCAvcHJvZmlsZSwgb3IgW2RvY3NdKGh0dHBzOi8vZG9jcy5jb20pJyk7XG4gICAqIC8vIFJldHVybnM6IFtcbiAgICogLy8gICB7IHVybDogJ2h0dHBzOi8vZXhhbXBsZS5jb20nLCB0eXBlOiAnZXh0ZXJuYWwnLCB0ZXh0OiAnaHR0cHM6Ly9leGFtcGxlLmNvbScgfSxcbiAgICogLy8gICB7IHVybDogJy9wcm9maWxlJywgdHlwZTogJ2ludGVybmFsJywgdGV4dDogJy9wcm9maWxlJyB9LFxuICAgKiAvLyAgIHsgdXJsOiAnaHR0cHM6Ly9kb2NzLmNvbScsIHR5cGU6ICdleHRlcm5hbCcsIHRleHQ6ICdkb2NzJyB9XG4gICAqIC8vIF1cbiAgICogYGBgXG4gICAqL1xuICBleHRyYWN0TGlua3ModGV4dDogc3RyaW5nKTogQXJyYXk8eyB1cmw6IHN0cmluZzsgdHlwZTogJ2V4dGVybmFsJyB8ICdpbnRlcm5hbCc7IHRleHQ6IHN0cmluZyB9PiB7XG4gICAgaWYgKCF0ZXh0KSByZXR1cm4gW107XG5cbiAgICBjb25zdCBsaW5rczogQXJyYXk8eyB1cmw6IHN0cmluZzsgdHlwZTogJ2V4dGVybmFsJyB8ICdpbnRlcm5hbCc7IHRleHQ6IHN0cmluZyB9PiA9IFtdO1xuXG4gICAgLy8gUmVzZXQgcmVnZXggaW5kaWNlc1xuICAgIHRoaXMudXJsUmVnZXgubGFzdEluZGV4ID0gMDtcbiAgICB0aGlzLmludGVybmFsUm91dGVSZWdleC5sYXN0SW5kZXggPSAwO1xuICAgIHRoaXMubWFya2Rvd25MaW5rUmVnZXgubGFzdEluZGV4ID0gMDtcblxuICAgIC8vIEV4dHJhZXIgZW5sYWNlcyBNYXJrZG93biBwcmltZXJvXG4gICAgbGV0IG1hdGNoO1xuICAgIHdoaWxlICgobWF0Y2ggPSB0aGlzLm1hcmtkb3duTGlua1JlZ2V4LmV4ZWModGV4dCkpICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB1cmwgPSBtYXRjaFsyXTtcbiAgICAgIGNvbnN0IGxpbmtUZXh0ID0gbWF0Y2hbMV07XG4gICAgICBjb25zdCB0eXBlID0gL15odHRwcz86XFwvXFwvLy50ZXN0KHVybCkgPyAnZXh0ZXJuYWwnIDogJ2ludGVybmFsJztcbiAgICAgIGxpbmtzLnB1c2goeyB1cmwsIHR5cGUsIHRleHQ6IGxpbmtUZXh0IH0pO1xuICAgIH1cblxuICAgIC8vIEV4dHJhZXIgVVJMcyBleHRlcm5hcyBkaXJlY3Rhc1xuICAgIHdoaWxlICgobWF0Y2ggPSB0aGlzLnVybFJlZ2V4LmV4ZWModGV4dCkpICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB1cmwgPSBtYXRjaFsxXTtcbiAgICAgIC8vIFZlcmlmaWNhciBxdWUgbm8gZXN0w6kgeWEgY2FwdHVyYWRvIGNvbW8gTWFya2Rvd24gbGlua1xuICAgICAgaWYgKCFsaW5rcy5zb21lKGxpbmsgPT4gbGluay51cmwgPT09IHVybCkpIHtcbiAgICAgICAgbGlua3MucHVzaCh7IHVybCwgdHlwZTogJ2V4dGVybmFsJywgdGV4dDogdXJsIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEV4dHJhZXIgcnV0YXMgaW50ZXJuYXMgZGlyZWN0YXNcbiAgICB3aGlsZSAoKG1hdGNoID0gdGhpcy5pbnRlcm5hbFJvdXRlUmVnZXguZXhlYyh0ZXh0KSkgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHVybCA9IG1hdGNoWzJdO1xuICAgICAgLy8gVmVyaWZpY2FyIHF1ZSBubyBlc3TDqSB5YSBjYXB0dXJhZG8gY29tbyBNYXJrZG93biBsaW5rXG4gICAgICBpZiAoIWxpbmtzLnNvbWUobGluayA9PiBsaW5rLnVybCA9PT0gdXJsKSkge1xuICAgICAgICBsaW5rcy5wdXNoKHsgdXJsLCB0eXBlOiAnaW50ZXJuYWwnLCB0ZXh0OiB1cmwgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpbmtzO1xuICB9XG59XG4iXX0=
|