@plumile/router 0.1.19 → 0.1.21
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/README.md +110 -180
- package/lib/esm/eslint-rules/no-direct-window-location-search.js +3 -3
- package/lib/esm/index.d.ts +0 -1
- package/lib/esm/index.d.ts.map +1 -1
- package/lib/esm/index.js +1 -2
- package/lib/esm/routing/Link.d.ts.map +1 -1
- package/lib/esm/routing/Link.js +14 -25
- package/lib/esm/routing/RouteComponentWrapper.js +2 -2
- package/lib/esm/routing/createRouter.d.ts.map +1 -1
- package/lib/esm/routing/createRouter.js +82 -108
- package/lib/esm/routing/index.d.ts +1 -1
- package/lib/esm/routing/index.d.ts.map +1 -1
- package/lib/esm/routing/index.js +2 -2
- package/lib/esm/routing/useAllQuery.js +1 -1
- package/lib/esm/routing/useFilters.js +10 -10
- package/lib/esm/routing/useQueryState.d.ts.map +1 -1
- package/lib/esm/routing/useQueryState.js +10 -45
- package/lib/esm/tools/buildCombinedSearch.d.ts +1 -5
- package/lib/esm/tools/buildCombinedSearch.d.ts.map +1 -1
- package/lib/esm/tools/buildCombinedSearch.js +6 -15
- package/lib/esm/tools.d.ts +2 -6
- package/lib/esm/tools.d.ts.map +1 -1
- package/lib/esm/tools.js +1 -1
- package/lib/esm/type-tests/query-infer.test-d.d.ts.map +1 -1
- package/lib/esm/type-tests/query-infer.test-d.js +2 -49
- package/lib/esm/type-tests/routes-inference.test-d.d.ts +0 -1
- package/lib/esm/type-tests/routes-inference.test-d.js +2 -49
- package/lib/esm/types.d.ts +2 -16
- package/lib/esm/types.d.ts.map +1 -1
- package/lib/esm/types.js +1 -1
- package/lib/tsconfig.esm.tsbuildinfo +1 -1
- package/lib/types/index.d.ts +0 -1
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/routing/Link.d.ts.map +1 -1
- package/lib/types/routing/createRouter.d.ts.map +1 -1
- package/lib/types/routing/index.d.ts +1 -1
- package/lib/types/routing/index.d.ts.map +1 -1
- package/lib/types/routing/useQueryState.d.ts.map +1 -1
- package/lib/types/tools/buildCombinedSearch.d.ts +1 -5
- package/lib/types/tools/buildCombinedSearch.d.ts.map +1 -1
- package/lib/types/tools.d.ts +2 -6
- package/lib/types/tools.d.ts.map +1 -1
- package/lib/types/type-tests/query-infer.test-d.d.ts.map +1 -1
- package/lib/types/type-tests/routes-inference.test-d.d.ts +0 -1
- package/lib/types/types.d.ts +2 -16
- package/lib/types/types.d.ts.map +1 -1
- package/package.json +4 -4
- package/lib/esm/routing/useTypedQuery.d.ts +0 -2
- package/lib/esm/routing/useTypedQuery.d.ts.map +0 -1
- package/lib/esm/routing/useTypedQuery.js +0 -36
- package/lib/esm/tools/buildSearch.d.ts +0 -6
- package/lib/esm/tools/buildSearch.d.ts.map +0 -1
- package/lib/esm/tools/buildSearch.js +0 -60
- package/lib/esm/tools/query-dsl.d.ts +0 -28
- package/lib/esm/tools/query-dsl.d.ts.map +0 -1
- package/lib/esm/tools/query-dsl.js +0 -250
- package/lib/types/routing/useTypedQuery.d.ts +0 -2
- package/lib/types/routing/useTypedQuery.d.ts.map +0 -1
- package/lib/types/tools/buildSearch.d.ts +0 -6
- package/lib/types/tools/buildSearch.d.ts.map +0 -1
- package/lib/types/tools/query-dsl.d.ts +0 -28
- package/lib/types/tools/query-dsl.d.ts.map +0 -1
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { buildRoutes } from '../builder.js';
|
|
2
2
|
import { BrowserHistory } from '../history/index.js';
|
|
3
3
|
import { getMatchedRoute, prepareMatch } from '../tools.js';
|
|
4
|
-
import { parseTypedQuery } from '../tools/query-dsl.js';
|
|
5
4
|
import { parseRawQuery } from '../tools/query.js';
|
|
6
|
-
import { buildSearch } from '../tools/buildSearch.js';
|
|
7
5
|
import buildCombinedSearch from '../tools/buildCombinedSearch.js';
|
|
8
6
|
import { parse as parseFilters } from '@plumile/filter-query';
|
|
9
7
|
export default function createRouter(routes, opts = {}) {
|
|
@@ -45,40 +43,25 @@ export default function createRouter(routes, opts = {}) {
|
|
|
45
43
|
const flatRoutes = buildRoutes(routes);
|
|
46
44
|
const route = getMatchedRoute(flatRoutes, history.location);
|
|
47
45
|
const initialRawQuery = parseRawQuery(history.location.search);
|
|
48
|
-
let
|
|
46
|
+
let initialUnifiedSchema;
|
|
49
47
|
if (route != null) {
|
|
50
48
|
const collected = [];
|
|
51
49
|
for (const r of route.route.routes) {
|
|
52
|
-
const maybe = r.
|
|
53
|
-
if (maybe != null) {
|
|
54
|
-
collected.push(maybe);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
if (collected.length > 0) {
|
|
58
|
-
initialSchema = collected.at(-1);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
const initialTypedQuery = parseTypedQuery(initialSchema, initialRawQuery);
|
|
62
|
-
let initialFilterSchema;
|
|
63
|
-
if (route != null) {
|
|
64
|
-
const collected = [];
|
|
65
|
-
for (const r of route.route.routes) {
|
|
66
|
-
const maybe = r
|
|
67
|
-
.filterSchema;
|
|
50
|
+
const maybe = r.querySchema;
|
|
68
51
|
if (maybe != null)
|
|
69
52
|
collected.push(maybe);
|
|
70
53
|
}
|
|
71
54
|
if (collected.length > 0)
|
|
72
|
-
|
|
55
|
+
initialUnifiedSchema = collected.at(-1);
|
|
73
56
|
}
|
|
74
57
|
let initialFilters;
|
|
75
58
|
let initialFilterDiagnostics;
|
|
76
|
-
if (
|
|
77
|
-
const parsed = parseFilters(history.location.search,
|
|
59
|
+
if (initialUnifiedSchema != null) {
|
|
60
|
+
const parsed = parseFilters(history.location.search, initialUnifiedSchema);
|
|
78
61
|
initialFilters = parsed.filters;
|
|
79
62
|
initialFilterDiagnostics = parsed.diagnostics;
|
|
80
63
|
}
|
|
81
|
-
const preparedMatch = prepareMatch(route,
|
|
64
|
+
const preparedMatch = prepareMatch(route, initialFilters);
|
|
82
65
|
let currentEntry = {
|
|
83
66
|
forceRerender: false,
|
|
84
67
|
location: history.location,
|
|
@@ -86,27 +69,45 @@ export default function createRouter(routes, opts = {}) {
|
|
|
86
69
|
preparedMatch,
|
|
87
70
|
rawSearch: history.location.search,
|
|
88
71
|
query: initialRawQuery,
|
|
89
|
-
typedQuery: initialTypedQuery,
|
|
90
72
|
filters: initialFilters,
|
|
91
73
|
filterDiagnostics: initialFilterDiagnostics,
|
|
74
|
+
activeQuerySchema: initialUnifiedSchema,
|
|
92
75
|
};
|
|
93
|
-
const initTyped = currentEntry.
|
|
94
|
-
let
|
|
76
|
+
const initTyped = currentEntry.filters;
|
|
77
|
+
let initPageNumeric;
|
|
95
78
|
if (initTyped != null) {
|
|
96
|
-
|
|
79
|
+
const rawPage = initTyped.page;
|
|
80
|
+
if (typeof rawPage === 'number')
|
|
81
|
+
initPageNumeric = rawPage;
|
|
82
|
+
else if (rawPage != null &&
|
|
83
|
+
typeof rawPage === 'object' &&
|
|
84
|
+
!Array.isArray(rawPage) &&
|
|
85
|
+
Object.prototype.hasOwnProperty.call(rawPage, 'eq') &&
|
|
86
|
+
typeof rawPage.eq === 'number') {
|
|
87
|
+
initPageNumeric = rawPage.eq;
|
|
88
|
+
}
|
|
97
89
|
}
|
|
98
|
-
if (typeof
|
|
99
|
-
|
|
100
|
-
|
|
90
|
+
if (typeof initPageNumeric === 'number' &&
|
|
91
|
+
initPageNumeric < 1 &&
|
|
92
|
+
initialUnifiedSchema != null &&
|
|
101
93
|
initTyped != null) {
|
|
102
|
-
const norm = { ...initTyped, page: 1 };
|
|
103
|
-
|
|
94
|
+
const norm = { ...initTyped, page: { eq: 1 } };
|
|
95
|
+
currentEntry.filters = norm;
|
|
96
|
+
const normalizedSearch = buildCombinedSearch({
|
|
97
|
+
filters: norm,
|
|
98
|
+
querySchema: initialUnifiedSchema,
|
|
99
|
+
});
|
|
104
100
|
if (normalizedSearch !== history.location.search) {
|
|
105
101
|
history.set({
|
|
106
102
|
pathname: history.location.pathname,
|
|
107
103
|
search: normalizedSearch,
|
|
108
104
|
hash: '',
|
|
109
105
|
});
|
|
106
|
+
currentEntry = {
|
|
107
|
+
...currentEntry,
|
|
108
|
+
location: { ...currentEntry.location, search: normalizedSearch },
|
|
109
|
+
rawSearch: normalizedSearch,
|
|
110
|
+
};
|
|
110
111
|
}
|
|
111
112
|
}
|
|
112
113
|
let nextId = 0;
|
|
@@ -123,48 +124,47 @@ export default function createRouter(routes, opts = {}) {
|
|
|
123
124
|
nextRoute = getMatchedRoute(flatRoutes, history.location);
|
|
124
125
|
}
|
|
125
126
|
const query = parseRawQuery(location.search);
|
|
126
|
-
let
|
|
127
|
-
let filterSchema;
|
|
127
|
+
let querySchema;
|
|
128
128
|
if (nextRoute != null) {
|
|
129
129
|
const collected = [];
|
|
130
|
-
const filterCollected = [];
|
|
131
130
|
for (const r of nextRoute.route.routes) {
|
|
132
|
-
const
|
|
133
|
-
if (maybe != null) {
|
|
134
|
-
collected.push(maybe);
|
|
135
|
-
}
|
|
136
|
-
const maybeF = r
|
|
137
|
-
.filterSchema;
|
|
131
|
+
const maybeF = r.querySchema;
|
|
138
132
|
if (maybeF != null)
|
|
139
|
-
|
|
133
|
+
collected.push(maybeF);
|
|
140
134
|
}
|
|
141
135
|
if (collected.length > 0) {
|
|
142
|
-
|
|
143
|
-
}
|
|
144
|
-
if (filterCollected.length > 0) {
|
|
145
|
-
filterSchema = filterCollected.at(-1);
|
|
136
|
+
querySchema = collected.at(-1);
|
|
146
137
|
}
|
|
147
138
|
}
|
|
148
|
-
let typedQuery = parseTypedQuery(schema, query);
|
|
149
139
|
let filters;
|
|
150
140
|
let filterDiagnostics;
|
|
151
|
-
if (
|
|
152
|
-
const parsedF = parseFilters(location.search,
|
|
141
|
+
if (querySchema != null) {
|
|
142
|
+
const parsedF = parseFilters(location.search, querySchema);
|
|
153
143
|
filters = parsedF.filters;
|
|
154
144
|
filterDiagnostics = parsedF.diagnostics;
|
|
155
145
|
}
|
|
156
146
|
let normalized = false;
|
|
157
|
-
|
|
147
|
+
let pg;
|
|
148
|
+
if (filters != null) {
|
|
149
|
+
const f = filters;
|
|
150
|
+
const maybe = f.page;
|
|
151
|
+
if (maybe != null &&
|
|
152
|
+
typeof maybe === 'object' &&
|
|
153
|
+
!Array.isArray(maybe) &&
|
|
154
|
+
Object.prototype.hasOwnProperty.call(maybe, 'eq')) {
|
|
155
|
+
pg = maybe.eq;
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
pg = maybe;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
158
161
|
if (typeof pg === 'number' && pg < 1) {
|
|
159
|
-
const clone = { ...
|
|
160
|
-
|
|
162
|
+
const clone = { ...filters, page: { eq: 1 } };
|
|
163
|
+
filters = clone;
|
|
161
164
|
normalized = true;
|
|
162
165
|
}
|
|
163
|
-
if (!samePathname) {
|
|
164
|
-
nextPreparedMatch = prepareMatch(nextRoute,
|
|
165
|
-
}
|
|
166
|
-
else if (!sameSearch) {
|
|
167
|
-
nextPreparedMatch = prepareMatch(nextRoute, typedQuery);
|
|
166
|
+
if (!samePathname || !sameSearch) {
|
|
167
|
+
nextPreparedMatch = prepareMatch(nextRoute, undefined);
|
|
168
168
|
}
|
|
169
169
|
const nextEntry = {
|
|
170
170
|
forceRerender: forceRerender || (samePathname && !sameSearch),
|
|
@@ -173,21 +173,26 @@ export default function createRouter(routes, opts = {}) {
|
|
|
173
173
|
preparedMatch: nextPreparedMatch,
|
|
174
174
|
rawSearch: location.search,
|
|
175
175
|
query,
|
|
176
|
-
typedQuery,
|
|
177
176
|
filters,
|
|
178
177
|
filterDiagnostics,
|
|
178
|
+
activeQuerySchema: querySchema,
|
|
179
179
|
};
|
|
180
|
-
if (normalized &&
|
|
180
|
+
if (normalized && querySchema != null) {
|
|
181
181
|
const normalizedSearch = buildCombinedSearch({
|
|
182
|
-
query: typedQuery,
|
|
183
|
-
querySchema: schema,
|
|
184
182
|
filters,
|
|
185
|
-
|
|
183
|
+
querySchema,
|
|
186
184
|
});
|
|
187
185
|
if (normalizedSearch !== location.search) {
|
|
186
|
+
let nextSearchStr = normalizedSearch;
|
|
187
|
+
if (!nextSearchStr.startsWith('?')) {
|
|
188
|
+
if (nextSearchStr === '')
|
|
189
|
+
nextSearchStr = '';
|
|
190
|
+
else
|
|
191
|
+
nextSearchStr = `?${nextSearchStr}`;
|
|
192
|
+
}
|
|
188
193
|
history.set({
|
|
189
194
|
pathname: location.pathname,
|
|
190
|
-
search:
|
|
195
|
+
search: nextSearchStr,
|
|
191
196
|
hash: '',
|
|
192
197
|
});
|
|
193
198
|
return;
|
|
@@ -237,47 +242,33 @@ export default function createRouter(routes, opts = {}) {
|
|
|
237
242
|
navigate({ pathname, query, filters: navFilters, replace }) {
|
|
238
243
|
const current = currentEntry;
|
|
239
244
|
const targetPathname = pathname ?? current.location.pathname;
|
|
240
|
-
let
|
|
241
|
-
let filterSchema;
|
|
245
|
+
let destSchema;
|
|
242
246
|
function collectSchema(routesArr) {
|
|
243
247
|
if (routesArr == null) {
|
|
244
248
|
return;
|
|
245
249
|
}
|
|
246
250
|
const collected = [];
|
|
247
|
-
const filterCollected = [];
|
|
248
251
|
for (const r of routesArr) {
|
|
249
|
-
const maybe = r.query;
|
|
250
|
-
if (maybe != null) {
|
|
251
|
-
collected.push(maybe);
|
|
252
|
-
}
|
|
253
252
|
const maybeF = r
|
|
254
|
-
.
|
|
253
|
+
.querySchema;
|
|
255
254
|
if (maybeF != null)
|
|
256
|
-
|
|
255
|
+
collected.push(maybeF);
|
|
257
256
|
}
|
|
258
257
|
if (collected.length > 0) {
|
|
259
|
-
|
|
260
|
-
}
|
|
261
|
-
if (filterCollected.length > 0) {
|
|
262
|
-
filterSchema = filterCollected.at(-1);
|
|
258
|
+
destSchema = collected.at(-1);
|
|
263
259
|
}
|
|
264
260
|
}
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
pathname: targetPathname,
|
|
272
|
-
});
|
|
273
|
-
collectSchema(destRoute?.route.routes);
|
|
274
|
-
}
|
|
261
|
+
const destRoute = getMatchedRoute(flatRoutes, {
|
|
262
|
+
...window.location,
|
|
263
|
+
pathname: targetPathname,
|
|
264
|
+
});
|
|
265
|
+
collectSchema(destRoute?.route.routes);
|
|
266
|
+
destSchema ??= current.activeQuerySchema;
|
|
275
267
|
const effectiveFilters = navFilters ?? current.filters;
|
|
268
|
+
const filtersInput = effectiveFilters ?? query;
|
|
276
269
|
const search = buildCombinedSearch({
|
|
277
|
-
|
|
278
|
-
querySchema:
|
|
279
|
-
filters: effectiveFilters,
|
|
280
|
-
filterSchema,
|
|
270
|
+
filters: filtersInput,
|
|
271
|
+
querySchema: destSchema,
|
|
281
272
|
});
|
|
282
273
|
const locationObj = { pathname: targetPathname, search, hash: '' };
|
|
283
274
|
if (replace === true) {
|
|
@@ -301,18 +292,6 @@ export default function createRouter(routes, opts = {}) {
|
|
|
301
292
|
return undefined;
|
|
302
293
|
}
|
|
303
294
|
},
|
|
304
|
-
getTypedQuery(path) {
|
|
305
|
-
try {
|
|
306
|
-
const entry = currentEntry;
|
|
307
|
-
if (entry.route?.path === path) {
|
|
308
|
-
return entry.typedQuery;
|
|
309
|
-
}
|
|
310
|
-
return undefined;
|
|
311
|
-
}
|
|
312
|
-
catch {
|
|
313
|
-
return undefined;
|
|
314
|
-
}
|
|
315
|
-
},
|
|
316
295
|
};
|
|
317
296
|
if (devtoolsGlobal) {
|
|
318
297
|
try {
|
|
@@ -394,7 +373,6 @@ export default function createRouter(routes, opts = {}) {
|
|
|
394
373
|
pathEl.style.whiteSpace = 'nowrap';
|
|
395
374
|
const varsEl = document.createElement('pre');
|
|
396
375
|
const queryEl = document.createElement('pre');
|
|
397
|
-
const typedEl = document.createElement('pre');
|
|
398
376
|
const filtersEl = document.createElement('pre');
|
|
399
377
|
const filterDiagEl = document.createElement('pre');
|
|
400
378
|
const timelineWrap = document.createElement('div');
|
|
@@ -421,7 +399,6 @@ export default function createRouter(routes, opts = {}) {
|
|
|
421
399
|
const pres = [
|
|
422
400
|
varsEl,
|
|
423
401
|
queryEl,
|
|
424
|
-
typedEl,
|
|
425
402
|
filtersEl,
|
|
426
403
|
filterDiagEl,
|
|
427
404
|
];
|
|
@@ -442,7 +419,6 @@ export default function createRouter(routes, opts = {}) {
|
|
|
442
419
|
panel.appendChild(pathEl);
|
|
443
420
|
panel.appendChild(varsEl);
|
|
444
421
|
panel.appendChild(queryEl);
|
|
445
|
-
panel.appendChild(typedEl);
|
|
446
422
|
panel.appendChild(timelineWrap);
|
|
447
423
|
panel.appendChild(filtersEl);
|
|
448
424
|
panel.appendChild(filterDiagEl);
|
|
@@ -521,8 +497,6 @@ export default function createRouter(routes, opts = {}) {
|
|
|
521
497
|
varsEl.textContent = `vars: ${varsJson}`;
|
|
522
498
|
const rawJson = JSON.stringify(entry.query, null, 2);
|
|
523
499
|
queryEl.textContent = `raw: ${rawJson}`;
|
|
524
|
-
const typedJson = JSON.stringify(entry.typedQuery, null, 2);
|
|
525
|
-
typedEl.textContent = `typed:${typedJson}`;
|
|
526
500
|
const filtersJson = JSON.stringify(entry.filters, null, 2);
|
|
527
501
|
filtersEl.textContent = `filters:${filtersJson}`;
|
|
528
502
|
const diag = entry.filterDiagnostics ?? [];
|
|
@@ -656,4 +630,4 @@ export default function createRouter(routes, opts = {}) {
|
|
|
656
630
|
}
|
|
657
631
|
return { cleanup, context };
|
|
658
632
|
}
|
|
659
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRpbmcvY3JlYXRlUm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sbUJBQW1CLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLEtBQUssSUFBSSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQXVEOUQsTUFBTSxDQUFDLE9BQU8sVUFBVSxZQUFZLENBQ2xDLE1BQTJCLEVBQzNCLE9BSUksRUFBRTtJQUdOLElBQUksY0FBdUIsQ0FBQztJQUM1QixJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDMUIsSUFBSSxnQkFBZ0IsR0FBRyxhQUFhLENBQUM7SUFDckMsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDdEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDeEIsSUFBSSxDQUFDO2dCQUNILE9BQU8sQ0FDTCxPQUFPLE9BQU8sS0FBSyxXQUFXO29CQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxZQUFZLENBQ3RDLENBQUM7WUFDSixDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7UUFD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LEVBQUUsQ0FBQztnQ0FDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDOzRCQUMvQixDQUFDO2lDQUFNLENBQUM7Z0NBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDOzRCQUM5QixDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQztvQkFBQyxNQUFNLENBQUM7b0JBRVQsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBQUMsTUFBTSxDQUFDO1FBRVQsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBNkIsQ0FBQztBQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYnVpbGRSb3V0ZXMgfSBmcm9tICcuLi9idWlsZGVyLmpzJztcbmltcG9ydCB7IEJyb3dzZXJIaXN0b3J5IH0gZnJvbSAnLi4vaGlzdG9yeS9pbmRleC5qcyc7XG5pbXBvcnQgeyBnZXRNYXRjaGVkUm91dGUsIHByZXBhcmVNYXRjaCB9IGZyb20gJy4uL3Rvb2xzLmpzJztcbmltcG9ydCB7IHBhcnNlVHlwZWRRdWVyeSB9IGZyb20gJy4uL3Rvb2xzL3F1ZXJ5LWRzbC5qcyc7XG5pbXBvcnQgeyBwYXJzZVJhd1F1ZXJ5IH0gZnJvbSAnLi4vdG9vbHMvcXVlcnkuanMnO1xuaW1wb3J0IHsgYnVpbGRTZWFyY2ggfSBmcm9tICcuLi90b29scy9idWlsZFNlYXJjaC5qcyc7XG5pbXBvcnQgYnVpbGRDb21iaW5lZFNlYXJjaCBmcm9tICcuLi90b29scy9idWlsZENvbWJpbmVkU2VhcmNoLmpzJztcbmltcG9ydCB7IHBhcnNlIGFzIHBhcnNlRmlsdGVycyB9IGZyb20gJ0BwbHVtaWxlL2ZpbHRlci1xdWVyeSc7XG5pbXBvcnQgdHlwZSB7XG4gIFJvdXRlRW50cnksXG4gIFJvdXRpbmdDb250ZXh0VHlwZSxcbiAgU3Vic2NyaWJlQ2FsbGJhY2ssXG4gIEFueVJvdXRlLFxuICBQcmVwYXJlZEFjY2VzcyxcbiAgTmF2aWdhdGVPdmVybG9hZHMsXG59IGZyb20gJy4uL3R5cGVzLmpzJztcblxuLyoqXG4gKiBSZXR1cm4gdHlwZSBmb3IgdGhlIGNyZWF0ZVJvdXRlciBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgQ3JlYXRlUm91dGVyUmV0dXJuPFIgZXh0ZW5kcyBBbnlSb3V0ZVtdPiA9IHtcbiAgLyoqIEZ1bmN0aW9uIHRvIGNsZWFuIHVwIHJvdXRlciBsaXN0ZW5lcnMgYW5kIHJlc291cmNlcyAqL1xuICBjbGVhbnVwOiAoKSA9PiB2b2lkO1xuICAvKiogUm91dGVyIGNvbnRleHQgb2JqZWN0IGZvciB0aGUgUmVhY3QgQ29udGV4dCBQcm92aWRlciAqL1xuICBjb250ZXh0OiBSb3V0aW5nQ29udGV4dFR5cGU8YW55PiAmIFByZXBhcmVkQWNjZXNzPFI+O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29tcGxldGUgcm91dGVyIHN5c3RlbSBmcm9tIHJvdXRlIGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIFRoaXMgcm91dGVyIGlzIGJ1aWx0IGZyb20gdGhlIHNhbWUgcHJpbWl0aXZlcyBhcyByZWFjdC1yb3V0ZXIgYnV0IHdpdGggYWRkaXRpb25hbFxuICogZmVhdHVyZXMgZm9yIGRhdGEgcHJlbG9hZGluZyBhbmQgY29kZSBzcGxpdHRpbmcuIEVhY2ggcm91dGUgY2FuIGNvbnRhaW4gYm90aCBhXG4gKiBDb21wb25lbnQgYW5kIGEgcHJlcGFyZSgpIGZ1bmN0aW9uIHRoYXQgY2FuIHByZWxvYWQgZGF0YSBmb3IgdGhlIGNvbXBvbmVudC5cbiAqXG4gKiBUaGUgcm91dGVyIHdhdGNoZXMgZm9yIGNoYW5nZXMgdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24gdmlhIHRoZSBIVE1MNSBIaXN0b3J5IEFQSSxcbiAqIG1hcHMgdGhlIGxvY2F0aW9uIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJvdXRlIGVudHJ5LCBhbmQgdGhlbiBwcmVsb2FkcyB0aGUgY29kZVxuICogYW5kIGRhdGEgZm9yIHRoZSByb3V0ZSBiZWZvcmUgcmVuZGVyaW5nLlxuICpcbiAqIEBwYXJhbSByb3V0ZXMgLSBBcnJheSBvZiByb3V0ZSBjb25maWd1cmF0aW9uc1xuICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJvdXRlciBjb250ZXh0IGFuZCBjbGVhbnVwIGZ1bmN0aW9uXG4gKlxuICBwcmVwYXJlZE1hdGNoOiBwcmVwYXJlTWF0Y2gocm91dGUsIHBhcnNlUmF3UXVlcnkoaGlzdG9yeS5sb2NhdGlvbi5zZWFyY2gpKSxcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJvdXRlcyA9IFtcbiAqICAge1xuICogICAgIHBhdGg6ICcvdXNlcnMvOmlkJyxcbiAqICAgICByZXNvdXJjZVBhZ2U6IGdldFJlc291cmNlUGFnZSgnVXNlclByb2ZpbGUnLCAoKSA9PiBpbXBvcnQoJy4vVXNlclByb2ZpbGUnKSksXG4gKiAgICAgcHJlcGFyZTogKHsgdmFyaWFibGVzIH0pID0+ICh7IHVzZXJJZDogdmFyaWFibGVzLmlkIH0pXG4gKiAgIH1cbiAqIF07XG4gKlxuICogY29uc3QgeyBjb250ZXh0LCBjbGVhbnVwIH0gPSBjcmVhdGVSb3V0ZXIocm91dGVzKTtcbiAqXG4gKiAvLyBVc2UgaW4gUmVhY3QgYXBwXG4gKiA8Um91dGluZ0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHR9PlxuICogICA8Um91dGVyUmVuZGVyZXIgLz5cbiAqIDwvUm91dGluZ0NvbnRleHQuUHJvdmlkZXI+XG4gKiBgYGBcbiAqL1xuLyoqXG4gKiBDcmVhdGUgYSByb3V0ZXIgKHR5cGVkIG92ZXJsb2FkKS4gV2hlbiBjYWxsZWQgd2l0aCBhIGNvbnN0IHR1cGxlIG9mIHJvdXRlcywgZ2VuZXJpY3MgYXJlIHByZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUm91dGVyPFIgZXh0ZW5kcyBBbnlSb3V0ZVtdPihcbiAgcm91dGVzOiBbLi4uUl0gfCBBbnlSb3V0ZVtdLFxuICBvcHRzOiB7XG4gICAgZGV2dG9vbHM/OlxuICAgICAgfCBib29sZWFuXG4gICAgICB8IHsgZ2xvYmFsPzogYm9vbGVhbjsgcGFuZWw/OiBib29sZWFuOyBzaG9ydGN1dD86IHN0cmluZyB9O1xuICB9ID0ge30sXG4pOiBDcmVhdGVSb3V0ZXJSZXR1cm48UiBleHRlbmRzIEFueVJvdXRlW10gPyBSIDogQW55Um91dGVbXT4ge1xuICAvLyBOb3JtYWxpemUgZGV2dG9vbHMgb3B0aW9ucyBtYWludGFpbmluZyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBsZXQgZGV2dG9vbHNHbG9iYWw6IGJvb2xlYW47XG4gIGxldCBkZXZ0b29sc1BhbmVsID0gZmFsc2U7XG4gIGxldCBkZXZ0b29sc1Nob3J0Y3V0ID0gJ0FsdCtTaGlmdCtSJztcbiAgaWYgKHR5cGVvZiBvcHRzLmRldnRvb2xzID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IGJhc2VFbmFibGVkID0gKCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJ1xuICAgICAgICApO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIGRldnRvb2xzR2xvYmFsID0gb3B0cy5kZXZ0b29scy5nbG9iYWwgPz8gYmFzZUVuYWJsZWQ7XG4gICAgZGV2dG9vbHNQYW5lbCA9ICEhb3B0cy5kZXZ0b29scy5wYW5lbDtcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygb3B0cy5kZXZ0b29scy5zaG9ydGN1dCA9PT0gJ3N0cmluZycgJiZcbiAgICAgIG9wdHMuZGV2dG9vbHMuc2hvcnRjdXQudHJpbSgpICE9PSAnJ1xuICAgICkge1xuICAgICAgZGV2dG9vbHNTaG9ydGN1dCA9IG9wdHMuZGV2dG9vbHMuc2hvcnRjdXQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGJvb2xlYW4gb3IgdW5kZWZpbmVkXG4gICAgY29uc3QgZW5hYmxlZCA9ICgoKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9wdHMuZGV2dG9vbHMgPT09ICdib29sZWFuJykgcmV0dXJuIG9wdHMuZGV2dG9vbHM7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbidcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICBkZXZ0b29sc0dsb2JhbCA9IGVuYWJsZWQ7XG4gIH1cbiAgLy8gSW5pdGlhbGl6ZSBicm93c2VyIGhpc3RvcnkgbWFuYWdlclxuICBjb25zdCBoaXN0b3J5ID0gbmV3IEJyb3dzZXJIaXN0b3J5KCk7XG5cbiAgLy8gQnVpbGQgYSBmbGF0IGxpc3Qgb2Ygcm91dGVzIGZvciBlZmZpY2llbnQgbWF0Y2hpbmdcbiAgY29uc3QgZmxhdFJvdXRlcyA9IGJ1aWxkUm91dGVzKHJvdXRlcyk7XG5cbiAgLy8gRmluZCB0aGUgaW5pdGlhbCByb3V0ZSBtYXRjaCBhbmQgcHJlcGFyZSBpdCBmb3IgcmVuZGVyaW5nXG4gIGNvbnN0IHJvdXRlID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIGhpc3RvcnkubG9jYXRpb24pO1xuICBjb25zdCBpbml0aWFsUmF3UXVlcnkgPSBwYXJzZVJhd1F1ZXJ5KGhpc3RvcnkubG9jYXRpb24uc2VhcmNoKTtcbiAgLy8gRGV0ZXJtaW5lIHNjaGVtYSBmcm9tIGRlZXBlc3Qgcm91dGUgZm9yIGluaXRpYWwgbG9hZFxuICBsZXQgaW5pdGlhbFNjaGVtYTogYW55O1xuICBpZiAocm91dGUgIT0gbnVsbCkge1xuICAgIGNvbnN0IGNvbGxlY3RlZDogYW55W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHIgb2Ygcm91dGUucm91dGUucm91dGVzKSB7XG4gICAgICBjb25zdCBtYXliZTogdW5rbm93biA9IChyIGFzIHVua25vd24gYXMgeyBxdWVyeT86IHVua25vd24gfSkucXVlcnk7XG4gICAgICBpZiAobWF5YmUgIT0gbnVsbCkge1xuICAgICAgICBjb2xsZWN0ZWQucHVzaChtYXliZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb2xsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgaW5pdGlhbFNjaGVtYSA9IGNvbGxlY3RlZC5hdCgtMSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGluaXRpYWxUeXBlZFF1ZXJ5ID0gcGFyc2VUeXBlZFF1ZXJ5KGluaXRpYWxTY2hlbWEsIGluaXRpYWxSYXdRdWVyeSk7XG4gIC8vIERldGVybWluZSBmaWx0ZXIgc2NoZW1hIGZyb20gZGVlcGVzdCByb3V0ZVxuICBsZXQgaW5pdGlhbEZpbHRlclNjaGVtYTogYW55O1xuICBpZiAocm91dGUgIT0gbnVsbCkge1xuICAgIGNvbnN0IGNvbGxlY3RlZDogYW55W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHIgb2Ygcm91dGUucm91dGUucm91dGVzKSB7XG4gICAgICBjb25zdCBtYXliZTogdW5rbm93biA9IChyIGFzIHVua25vd24gYXMgeyBmaWx0ZXJTY2hlbWE/OiB1bmtub3duIH0pXG4gICAgICAgIC5maWx0ZXJTY2hlbWE7XG4gICAgICBpZiAobWF5YmUgIT0gbnVsbCkgY29sbGVjdGVkLnB1c2gobWF5YmUpO1xuICAgIH1cbiAgICBpZiAoY29sbGVjdGVkLmxlbmd0aCA+IDApIGluaXRpYWxGaWx0ZXJTY2hlbWEgPSBjb2xsZWN0ZWQuYXQoLTEpO1xuICB9XG4gIGxldCBpbml0aWFsRmlsdGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gIGxldCBpbml0aWFsRmlsdGVyRGlhZ25vc3RpY3M6IGFueVtdIHwgdW5kZWZpbmVkO1xuICBpZiAoaW5pdGlhbEZpbHRlclNjaGVtYSAhPSBudWxsKSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VGaWx0ZXJzKGhpc3RvcnkubG9jYXRpb24uc2VhcmNoLCBpbml0aWFsRmlsdGVyU2NoZW1hKTtcbiAgICBpbml0aWFsRmlsdGVycyA9IHBhcnNlZC5maWx0ZXJzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaW5pdGlhbEZpbHRlckRpYWdub3N0aWNzID0gcGFyc2VkLmRpYWdub3N0aWNzIGFzIHVua25vd25bXTtcbiAgfVxuICBjb25zdCBwcmVwYXJlZE1hdGNoID0gcHJlcGFyZU1hdGNoKHJvdXRlLCBpbml0aWFsVHlwZWRRdWVyeSk7XG4gIC8vIEhlbHBlciB0byBidWlsZCB0aGUgcmF3IHF1ZXJ5IG9iamVjdCBmcm9tIGEgc2VhcmNoIHN0cmluZ1xuICBsZXQgY3VycmVudEVudHJ5OiBSb3V0ZUVudHJ5PGFueT4gPSB7XG4gICAgZm9yY2VSZXJlbmRlcjogZmFsc2UsXG4gICAgbG9jYXRpb246IGhpc3RvcnkubG9jYXRpb24sXG4gICAgcm91dGUsXG4gICAgcHJlcGFyZWRNYXRjaCxcbiAgICByYXdTZWFyY2g6IGhpc3RvcnkubG9jYXRpb24uc2VhcmNoLFxuICAgIHF1ZXJ5OiBpbml0aWFsUmF3UXVlcnksXG4gICAgdHlwZWRRdWVyeTogaW5pdGlhbFR5cGVkUXVlcnksXG4gICAgZmlsdGVyczogaW5pdGlhbEZpbHRlcnMsXG4gICAgZmlsdGVyRGlhZ25vc3RpY3M6IGluaXRpYWxGaWx0ZXJEaWFnbm9zdGljcyxcbiAgfTtcblxuICAvLyBJbml0aWFsIG5vcm1hbGl6YXRpb24gcGFzcyAoZS5nLiwgY2xhbXAgcGFnZSlcbiAgY29uc3QgaW5pdFR5cGVkID0gY3VycmVudEVudHJ5LnR5cGVkUXVlcnkgYXMgdW5rbm93biBhc1xuICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICB8IHVuZGVmaW5lZDtcbiAgbGV0IGluaXRQYWdlOiB1bmtub3duO1xuICBpZiAoaW5pdFR5cGVkICE9IG51bGwpIHtcbiAgICBpbml0UGFnZSA9IGluaXRUeXBlZC5wYWdlO1xuICB9XG4gIGlmIChcbiAgICB0eXBlb2YgaW5pdFBhZ2UgPT09ICdudW1iZXInICYmXG4gICAgaW5pdFBhZ2UgPCAxICYmXG4gICAgaW5pdGlhbFNjaGVtYSAhPSBudWxsICYmXG4gICAgaW5pdFR5cGVkICE9IG51bGxcbiAgKSB7XG4gICAgY29uc3Qgbm9ybSA9IHsgLi4uaW5pdFR5cGVkLCBwYWdlOiAxIH0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3Qgbm9ybWFsaXplZFNlYXJjaCA9IGJ1aWxkU2VhcmNoKG5vcm0sIGluaXRpYWxTY2hlbWEpO1xuICAgIGlmIChub3JtYWxpemVkU2VhcmNoICE9PSBoaXN0b3J5LmxvY2F0aW9uLnNlYXJjaCkge1xuICAgICAgaGlzdG9yeS5zZXQoe1xuICAgICAgICBwYXRobmFtZTogaGlzdG9yeS5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgc2VhcmNoOiBub3JtYWxpemVkU2VhcmNoLFxuICAgICAgICBoYXNoOiAnJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIE1haW50YWluIGEgc2V0IG9mIHN1YnNjcmliZXJzIHRvIHRoZSBhY3RpdmUgcm91dGUgZW50cnlcbiAgbGV0IG5leHRJZCA9IDA7XG4gIGNvbnN0IHN1YnNjcmliZXJzID0gbmV3IE1hcDxudW1iZXIsIFN1YnNjcmliZUNhbGxiYWNrPGFueT4+KCk7XG5cbiAgLy8gTGlzdGVuIGZvciBsb2NhdGlvbiBjaGFuZ2VzLCBtYXRjaCB0byB0aGUgcm91dGUgZW50cnksIHByZXBhcmUgdGhlIGVudHJ5LFxuICAvLyBhbmQgbm90aWZ5IHN1YnNjcmliZXJzLiBUaGlzIHBhdHRlcm4gZW5zdXJlcyB0aGF0IGRhdGEtbG9hZGluZ1xuICAvLyBvY2N1cnMgKm91dHNpZGUqIG9mIC0gYW5kICpiZWZvcmUqIC0gcmVuZGVyaW5nLlxuICBjb25zdCBjbGVhbnVwID0gaGlzdG9yeS5zdWJzY3JpYmUoKGxvY2F0aW9uLCBmb3JjZVJlcmVuZGVyKSA9PiB7XG4gICAgY29uc3Qgc2FtZVBhdGhuYW1lID0gbG9jYXRpb24ucGF0aG5hbWUgPT09IGN1cnJlbnRFbnRyeS5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICBjb25zdCBzYW1lU2VhcmNoID0gbG9jYXRpb24uc2VhcmNoID09PSBjdXJyZW50RW50cnkucmF3U2VhcmNoO1xuXG4gICAgaWYgKCFmb3JjZVJlcmVuZGVyICYmIHNhbWVQYXRobmFtZSAmJiBzYW1lU2VhcmNoKSB7XG4gICAgICAvLyBOb3RoaW5nIGNoYW5nZWQgdGhhdCB3ZSBjYXJlIGFib3V0XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgb25seSB0aGUgc2VhcmNoIGNoYW5nZWQgd2Ugc3RpbGwgd2FudCB0byBwcm9wYWdhdGUgdGhlIGNoYW5nZS5cbiAgICAvLyBLZWVwIHRoZSBleGlzdGluZyBwcmVwYXJlZE1hdGNoIHdoZW4gcGF0aG5hbWUgaXMgaWRlbnRpY2FsIHRvIGF2b2lkIHJlZHVuZGFudCB3b3JrLlxuICAgIGxldCBuZXh0UHJlcGFyZWRNYXRjaCA9IGN1cnJlbnRFbnRyeS5wcmVwYXJlZE1hdGNoO1xuICAgIGxldCBuZXh0Um91dGUgPSBjdXJyZW50RW50cnkucm91dGU7XG5cbiAgICBpZiAoIXNhbWVQYXRobmFtZSkge1xuICAgICAgLy8gUGF0aCBjaGFuZ2VkOiByZWNvbXB1dGUgbWF0Y2ggKyBwcmVwYXJlZCBkYXRhIGluY2x1ZGluZyBxdWVyeVxuICAgICAgbmV4dFJvdXRlID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIGhpc3RvcnkubG9jYXRpb24pO1xuICAgICAgLy8gd2Ugd2lsbCBzZXQgYmVsb3cgYWZ0ZXIgY29tcHV0aW5nIHR5cGVkIHF1ZXJ5XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgcmF3IHF1ZXJ5IG9iamVjdCAoYmFzaWMgYWdncmVnYXRpb24pIGZyb20gbG9jYXRpb24uc2VhcmNoXG4gICAgY29uc3QgcXVlcnkgPSBwYXJzZVJhd1F1ZXJ5KGxvY2F0aW9uLnNlYXJjaCk7XG4gICAgLy8gRGV0ZXJtaW5lIHNjaGVtYSBmcm9tIGRlZXBlc3QgbWF0Y2hlZCByb3V0ZVxuICAgIGxldCBzY2hlbWE6IGFueTtcbiAgICBsZXQgZmlsdGVyU2NoZW1hOiBhbnk7XG4gICAgaWYgKG5leHRSb3V0ZSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBjb2xsZWN0ZWQ6IGFueVtdID0gW107XG4gICAgICBjb25zdCBmaWx0ZXJDb2xsZWN0ZWQ6IGFueVtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IHIgb2YgbmV4dFJvdXRlLnJvdXRlLnJvdXRlcykge1xuICAgICAgICBjb25zdCBtYXliZTogdW5rbm93biA9IChyIGFzIHVua25vd24gYXMgeyBxdWVyeT86IHVua25vd24gfSkucXVlcnk7XG4gICAgICAgIGlmIChtYXliZSAhPSBudWxsKSB7XG4gICAgICAgICAgY29sbGVjdGVkLnB1c2gobWF5YmUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1heWJlRjogdW5rbm93biA9IChyIGFzIHVua25vd24gYXMgeyBmaWx0ZXJTY2hlbWE/OiB1bmtub3duIH0pXG4gICAgICAgICAgLmZpbHRlclNjaGVtYTtcbiAgICAgICAgaWYgKG1heWJlRiAhPSBudWxsKSBmaWx0ZXJDb2xsZWN0ZWQucHVzaChtYXliZUYpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbGxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNjaGVtYSA9IGNvbGxlY3RlZC5hdCgtMSk7XG4gICAgICB9XG4gICAgICBpZiAoZmlsdGVyQ29sbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZmlsdGVyU2NoZW1hID0gZmlsdGVyQ29sbGVjdGVkLmF0KC0xKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHR5cGVkUXVlcnkgPSBwYXJzZVR5cGVkUXVlcnkoc2NoZW1hLCBxdWVyeSk7XG4gICAgLy8gUGFyc2UgZmlsdGVycyB1c2luZyBmaWx0ZXIgc2NoZW1hIGlmIHByZXNlbnRcbiAgICBsZXQgZmlsdGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgbGV0IGZpbHRlckRpYWdub3N0aWNzOiBhbnlbXSB8IHVuZGVmaW5lZDtcbiAgICBpZiAoZmlsdGVyU2NoZW1hICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHBhcnNlZEYgPSBwYXJzZUZpbHRlcnMobG9jYXRpb24uc2VhcmNoLCBmaWx0ZXJTY2hlbWEpO1xuICAgICAgZmlsdGVycyA9IHBhcnNlZEYuZmlsdGVycyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgZmlsdGVyRGlhZ25vc3RpY3MgPSBwYXJzZWRGLmRpYWdub3N0aWNzIGFzIHVua25vd25bXTtcbiAgICB9XG4gICAgLy8gTm9ybWFsaXphdGlvbjogY2xhbXAgcGFnZSA+PSAxIGlmIG51bWVyaWMgcGFnZSBwcmVzZW50XG4gICAgbGV0IG5vcm1hbGl6ZWQgPSBmYWxzZTtcbiAgICBjb25zdCBwZyA9ICh0eXBlZFF1ZXJ5IGFzIFJlY29yZDxzdHJpbmcsIGFueT4pLnBhZ2U7XG4gICAgaWYgKHR5cGVvZiBwZyA9PT0gJ251bWJlcicgJiYgcGcgPCAxKSB7XG4gICAgICBjb25zdCBjbG9uZSA9IHsgLi4uKHR5cGVkUXVlcnkgYXMgUmVjb3JkPHN0cmluZywgYW55PiksIHBhZ2U6IDEgfTtcbiAgICAgIHR5cGVkUXVlcnkgPSBjbG9uZTtcbiAgICAgIG5vcm1hbGl6ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIElmIG9ubHkgdGhlIHNlYXJjaCBjaGFuZ2VkIChzYW1lIHBhdGhuYW1lKSB3ZSBzdGlsbCBuZWVkIHRvIHJlLXJ1biBwcmVwYXJlXG4gICAgaWYgKCFzYW1lUGF0aG5hbWUpIHtcbiAgICAgIG5leHRQcmVwYXJlZE1hdGNoID0gcHJlcGFyZU1hdGNoKG5leHRSb3V0ZSwgdHlwZWRRdWVyeSk7XG4gICAgfSBlbHNlIGlmICghc2FtZVNlYXJjaCkge1xuICAgICAgbmV4dFByZXBhcmVkTWF0Y2ggPSBwcmVwYXJlTWF0Y2gobmV4dFJvdXRlLCB0eXBlZFF1ZXJ5KTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0RW50cnk6IFJvdXRlRW50cnk8YW55PiA9IHtcbiAgICAgIGZvcmNlUmVyZW5kZXI6IGZvcmNlUmVyZW5kZXIgfHwgKHNhbWVQYXRobmFtZSAmJiAhc2FtZVNlYXJjaCksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJvdXRlOiBuZXh0Um91dGUsXG4gICAgICBwcmVwYXJlZE1hdGNoOiBuZXh0UHJlcGFyZWRNYXRjaCxcbiAgICAgIHJhd1NlYXJjaDogbG9jYXRpb24uc2VhcmNoLFxuICAgICAgcXVlcnksXG4gICAgICB0eXBlZFF1ZXJ5LFxuICAgICAgZmlsdGVycyxcbiAgICAgIGZpbHRlckRpYWdub3N0aWNzLFxuICAgIH07XG5cbiAgICAvLyBJZiBub3JtYWxpemF0aW9uIGNoYW5nZWQgdGhlIHR5cGVkIHF1ZXJ5IHdlIHRyaWdnZXIgYSByZXBsYWNlIHdpdGggbm9ybWFsaXplZCBzZWFyY2hcbiAgICBpZiAobm9ybWFsaXplZCAmJiBzY2hlbWEgIT0gbnVsbCkge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFNlYXJjaCA9IGJ1aWxkQ29tYmluZWRTZWFyY2goe1xuICAgICAgICBxdWVyeTogdHlwZWRRdWVyeSBhcyBhbnksXG4gICAgICAgIHF1ZXJ5U2NoZW1hOiBzY2hlbWEsXG4gICAgICAgIGZpbHRlcnMsXG4gICAgICAgIGZpbHRlclNjaGVtYSxcbiAgICAgIH0pO1xuICAgICAgaWYgKG5vcm1hbGl6ZWRTZWFyY2ggIT09IGxvY2F0aW9uLnNlYXJjaCkge1xuICAgICAgICBoaXN0b3J5LnNldCh7XG4gICAgICAgICAgcGF0aG5hbWU6IGxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgICAgIHNlYXJjaDogbm9ybWFsaXplZFNlYXJjaCxcbiAgICAgICAgICBoYXNoOiAnJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjsgLy8gZWFybHk6IHN1YnNlcXVlbnQgc2V0IHdpbGwgdHJpZ2dlciByZXJ1blxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBjdXJyZW50IGVudHJ5IGFuZCBub3RpZnkgYWxsIHN1YnNjcmliZXJzXG4gICAgY3VycmVudEVudHJ5ID0gbmV4dEVudHJ5O1xuICAgIHN1YnNjcmliZXJzLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG4gICAgICBjYWxsYmFjayhuZXh0RW50cnkpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBUaGUgcm91dGVyIGNvbnRleHQgb2JqZWN0IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gUmVhY3QgQ29udGV4dFxuICBjb25zdCBjb250ZXh0OiBSb3V0aW5nQ29udGV4dFR5cGU8YW55PiAmXG4gICAgUHJlcGFyZWRBY2Nlc3M8QW55Um91dGVbXT4gJiB7XG4gICAgICBuYXZpZ2F0ZTogTmF2aWdhdGVPdmVybG9hZHM8QW55Um91dGVbXT47XG4gICAgfSA9IHtcbiAgICBoaXN0b3J5LFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBjdXJyZW50RW50cnk7XG4gICAgfSxcbiAgICBwcmVsb2FkQ29kZShwYXRobmFtZSkge1xuICAgICAgLy8gUHJlbG9hZCBqdXN0IHRoZSBjb21wb25lbnQgY29kZSBmb3IgYSByb3V0ZSB3aXRob3V0IHN0b3JpbmcgdGhlIHJlc3VsdFxuICAgICAgY29uc3QgbWF0Y2hlcyA9IGdldE1hdGNoZWRSb3V0ZShmbGF0Um91dGVzLCB7XG4gICAgICAgIC4uLndpbmRvdy5sb2NhdGlvbixcbiAgICAgICAgcGF0aG5hbWUsXG4gICAgICB9KTtcblxuICAgICAgaWYgKG1hdGNoZXMgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIExvYWQgYWxsIHJlc291cmNlIHBhZ2VzIGZvciB0aGUgbWF0Y2hlZCByb3V0ZVxuICAgICAgbWF0Y2hlcy5yb3V0ZS5yb3V0ZXMuZm9yRWFjaCgoeyByZXNvdXJjZVBhZ2UgfSkgPT4ge1xuICAgICAgICBpZiAocmVzb3VyY2VQYWdlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgICAgICByZXNvdXJjZVBhZ2UubG9hZCgpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBwcmVsb2FkKHBhdGhuYW1lKSB7XG4gICAgICAvLyBQcmVsb2FkIGJvdGggdGhlIGNvbXBvbmVudCBjb2RlIGFuZCBwcmVwYXJlZCBkYXRhIGZvciBhIHJvdXRlXG4gICAgICBjb25zdCBtYXRjaGVzID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIHtcbiAgICAgICAgLi4ud2luZG93LmxvY2F0aW9uLFxuICAgICAgICBwYXRobmFtZSxcbiAgICAgIH0pO1xuICAgICAgcHJlcGFyZU1hdGNoKG1hdGNoZXMpO1xuICAgIH0sXG4gICAgc3Vic2NyaWJlKGNhbGxiYWNrKSB7XG4gICAgICAvLyBBZGQgYSBuZXcgc3Vic2NyaWJlciBhbmQgcmV0dXJuIHVuc3Vic2NyaWJlIGZ1bmN0aW9uXG4gICAgICBuZXh0SWQgKz0gMTtcbiAgICAgIGNvbnN0IGlkID0gbmV4dElkO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtc3R5bGVcbiAgICAgIGNvbnN0IGRpc3Bvc2UgPSAoKSA9PiB7XG4gICAgICAgIHN1YnNjcmliZXJzLmRlbGV0ZShpZCk7XG4gICAgICB9O1xuICAgICAgc3Vic2NyaWJlcnMuc2V0KGlkLCBjYWxsYmFjayk7XG4gICAgICByZXR1cm4gZGlzcG9zZTtcbiAgICB9LFxuICAgIG5hdmlnYXRlKHsgcGF0aG5hbWUsIHF1ZXJ5LCBmaWx0ZXJzOiBuYXZGaWx0ZXJzLCByZXBsYWNlIH06IGFueSkge1xuICAgICAgY29uc3QgY3VycmVudCA9IGN1cnJlbnRFbnRyeTtcbiAgICAgIGNvbnN0IHRhcmdldFBhdGhuYW1lID0gcGF0aG5hbWUgPz8gY3VycmVudC5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICAgIC8vIERldGVybWluZSBzY2hlbWEgb2YgZGVzdGluYXRpb24gKGlmIHNhbWUgcGF0aCBhbmQgd2UgaGF2ZSByb3V0ZSB3ZSBjYW4gcmV1c2UsIGVsc2UgcmVtYXRjaClcbiAgICAgIGxldCBzY2hlbWE6IGFueTtcbiAgICAgIGxldCBmaWx0ZXJTY2hlbWE6IGFueTtcbiAgICAgIC8qKiBDb2xsZWN0IGRlZXBlc3QgcXVlcnkgc2NoZW1hIGZyb20gcm91dGUgY2hhaW4gKi9cbiAgICAgIGZ1bmN0aW9uIGNvbGxlY3RTY2hlbWEocm91dGVzQXJyOiBhbnlbXSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgICAgICBpZiAocm91dGVzQXJyID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29sbGVjdGVkOiBhbnlbXSA9IFtdO1xuICAgICAgICBjb25zdCBmaWx0ZXJDb2xsZWN0ZWQ6IGFueVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgciBvZiByb3V0ZXNBcnIpIHtcbiAgICAgICAgICBjb25zdCBtYXliZTogdW5rbm93biA9IChyIGFzIHVua25vd24gYXMgeyBxdWVyeT86IHVua25vd24gfSkucXVlcnk7XG4gICAgICAgICAgaWYgKG1heWJlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbGxlY3RlZC5wdXNoKG1heWJlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgbWF5YmVGOiB1bmtub3duID0gKHIgYXMgdW5rbm93biBhcyB7IGZpbHRlclNjaGVtYT86IHVua25vd24gfSlcbiAgICAgICAgICAgIC5maWx0ZXJTY2hlbWE7XG4gICAgICAgICAgaWYgKG1heWJlRiAhPSBudWxsKSBmaWx0ZXJDb2xsZWN0ZWQucHVzaChtYXliZUYpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2xsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNjaGVtYSA9IGNvbGxlY3RlZC5hdCgtMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlckNvbGxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZmlsdGVyU2NoZW1hID0gZmlsdGVyQ29sbGVjdGVkLmF0KC0xKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBhdGhuYW1lID09IG51bGwgfHwgcGF0aG5hbWUgPT09IGN1cnJlbnQubG9jYXRpb24ucGF0aG5hbWUpIHtcbiAgICAgICAgY29sbGVjdFNjaGVtYShjdXJyZW50LnJvdXRlPy5yb3V0ZS5yb3V0ZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZGVzdFJvdXRlID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIHtcbiAgICAgICAgICAuLi53aW5kb3cubG9jYXRpb24sXG4gICAgICAgICAgcGF0aG5hbWU6IHRhcmdldFBhdGhuYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgY29sbGVjdFNjaGVtYShkZXN0Um91dGU/LnJvdXRlLnJvdXRlcyk7XG4gICAgICB9XG4gICAgICBjb25zdCBlZmZlY3RpdmVGaWx0ZXJzID0gbmF2RmlsdGVycyA/PyBjdXJyZW50LmZpbHRlcnM7XG4gICAgICBjb25zdCBzZWFyY2ggPSBidWlsZENvbWJpbmVkU2VhcmNoKHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIHF1ZXJ5U2NoZW1hOiBzY2hlbWEsXG4gICAgICAgIGZpbHRlcnM6IGVmZmVjdGl2ZUZpbHRlcnMsXG4gICAgICAgIGZpbHRlclNjaGVtYSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbG9jYXRpb25PYmogPSB7IHBhdGhuYW1lOiB0YXJnZXRQYXRobmFtZSwgc2VhcmNoLCBoYXNoOiAnJyB9O1xuICAgICAgaWYgKHJlcGxhY2UgPT09IHRydWUpIHtcbiAgICAgICAgaGlzdG9yeS5zZXQobG9jYXRpb25PYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlzdG9yeS5wdXNoKGxvY2F0aW9uT2JqKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldFByZXBhcmVkKHBhdGgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gY3VycmVudEVudHJ5O1xuICAgICAgICAvLyBGaW5kIGxhc3QgcHJlcGFyZWQgcm91dGUgd2l0aCBtYXRjaGluZyBwYXRoXG4gICAgICAgIGZvciAoY29uc3QgcHIgb2YgZW50cnkucHJlcGFyZWRNYXRjaC5yb3V0ZXMpIHtcbiAgICAgICAgICBpZiAocHIucGF0aCA9PT0gcGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHByLnByZXBhcmVkIGFzIGFueTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0VHlwZWRRdWVyeShwYXRoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBlbnRyeSA9IGN1cnJlbnRFbnRyeTtcbiAgICAgICAgaWYgKGVudHJ5LnJvdXRlPy5wYXRoID09PSBwYXRoKSB7XG4gICAgICAgICAgcmV0dXJuIGVudHJ5LnR5cGVkUXVlcnkgYXMgYW55O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuXG4gIC8vIFJldHVybiBib3RoIHRoZSBjb250ZXh0IG9iamVjdCBhbmQgYSBjbGVhbnVwIGZ1bmN0aW9uXG4gIC8vIERldnRvb2xzIGV4cG9zdXJlIChkZXZlbG9wbWVudCBvbmx5KVxuICBpZiAoZGV2dG9vbHNHbG9iYWwpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IF9fUExVTUlMRV9ST1VURVJfXz86IGFueSB9KS5fX1BMVU1JTEVfUk9VVEVSX18gPVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGdldDogY29udGV4dC5nZXQsXG4gICAgICAgICAgICBzdWJzY3JpYmU6IGNvbnRleHQuc3Vic2NyaWJlLFxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvKiBpZ25vcmUgKi9cbiAgICB9XG4gIH1cbiAgLy8gT3B0aW9uYWwgaW4tcGFnZSBkZXZ0b29scyBwYW5lbCAobGlnaHR3ZWlnaHQgb3ZlcmxheSlcbiAgaWYgKGRldnRvb2xzUGFuZWwpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXBsdW1pbGUtcm91dGVyLWRldnRvb2xzLXBhbmVsXScpID09IG51bGxcbiAgICAgICkge1xuICAgICAgICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGhvc3Quc2V0QXR0cmlidXRlKCdkYXRhLXBsdW1pbGUtcm91dGVyLWRldnRvb2xzLXBhbmVsJywgJycpO1xuICAgICAgICBob3N0LnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICAgICAgaG9zdC5zdHlsZS56SW5kZXggPSAnMjE0NzQ4MzY0Nic7XG4gICAgICAgIGhvc3Quc3R5bGUuYm90dG9tID0gJzhweCc7XG4gICAgICAgIGhvc3Quc3R5bGUucmlnaHQgPSAnOHB4JztcbiAgICAgICAgaG9zdC5zdHlsZS5mb250RmFtaWx5ID1cbiAgICAgICAgICAndWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiTGliZXJhdGlvbiBNb25vXCIsIG1vbm9zcGFjZSc7XG4gICAgICAgIGhvc3Quc3R5bGUuZm9udFNpemUgPSAnMTJweCc7XG4gICAgICAgIGhvc3Quc3R5bGUubGluZUhlaWdodCA9ICcxLjMnO1xuICAgICAgICBob3N0LnN0eWxlLmNvbG9yID0gJyMxMTEnO1xuICAgICAgICBob3N0LnN0eWxlLmJhY2tncm91bmQgPSAndHJhbnNwYXJlbnQnO1xuICAgICAgICBob3N0LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICAgIGNvbnN0IHNoYWRvdyA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogJ29wZW4nIH0pO1xuICAgICAgICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBwYW5lbC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xuICAgICAgICBwYW5lbC5zdHlsZS5taW5XaWR0aCA9ICcyNjBweCc7XG4gICAgICAgIHBhbmVsLnN0eWxlLm1heFdpZHRoID0gJzQyMHB4JztcbiAgICAgICAgcGFuZWwuc3R5bGUubWF4SGVpZ2h0ID0gJzUwdmgnO1xuICAgICAgICBwYW5lbC5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcbiAgICAgICAgcGFuZWwuc3R5bGUuYmFja2dyb3VuZCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpJztcbiAgICAgICAgcGFuZWwuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjY2NjJztcbiAgICAgICAgcGFuZWwuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzZweCc7XG4gICAgICAgIHBhbmVsLnN0eWxlLmJveFNoYWRvdyA9ICcwIDJweCA4cHggcmdiYSgwLDAsMCwwLjE1KSc7XG4gICAgICAgIHBhbmVsLnN0eWxlLnBhZGRpbmcgPSAnNnB4IDhweCA4cHgnO1xuICAgICAgICBwYW5lbC5zdHlsZS5iYWNrZHJvcEZpbHRlciA9ICdibHVyKDRweCknO1xuICAgICAgICBwYW5lbC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICBwYW5lbC5zdHlsZS5mbGV4RGlyZWN0aW9uID0gJ2NvbHVtbic7XG4gICAgICAgIHBhbmVsLnN0eWxlLnJvd0dhcCA9ICc0cHgnO1xuICAgICAgICBjb25zdCBoZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgaGVhZGVyLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIGhlYWRlci5zdHlsZS5hbGlnbkl0ZW1zID0gJ2NlbnRlcic7XG4gICAgICAgIGhlYWRlci5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdzcGFjZS1iZXR3ZWVuJztcbiAgICAgICAgaGVhZGVyLnN0eWxlLmdhcCA9ICc4cHgnO1xuICAgICAgICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgdGl0bGUudGV4dENvbnRlbnQgPSAnUGx1bWlsZSBSb3V0ZXInO1xuICAgICAgICB0aXRsZS5zdHlsZS5mb250V2VpZ2h0ID0gJzYwMCc7XG4gICAgICAgIGNvbnN0IGJ1dHRvbnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgYnV0dG9ucy5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICBidXR0b25zLnN0eWxlLmdhcCA9ICc0cHgnO1xuICAgICAgICBjb25zdCBjb2xsYXBzZUJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICBjb2xsYXBzZUJ0bi50ZXh0Q29udGVudCA9ICfiiJInO1xuICAgICAgICBjb25zdCBjbG9zZUJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICBjbG9zZUJ0bi50ZXh0Q29udGVudCA9ICfDlyc7XG4gICAgICAgIGNvbnN0IGJ0bnM6IEhUTUxCdXR0b25FbGVtZW50W10gPSBbY29sbGFwc2VCdG4sIGNsb3NlQnRuXTtcbiAgICAgICAgZm9yIChjb25zdCBiIG9mIGJ0bnMpIHtcbiAgICAgICAgICBiLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcbiAgICAgICAgICBiLnN0eWxlLmJhY2tncm91bmQgPSAnI2VlZSc7XG4gICAgICAgICAgYi5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICNjY2MnO1xuICAgICAgICAgIGIuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzRweCc7XG4gICAgICAgICAgYi5zdHlsZS5mb250U2l6ZSA9ICcxMXB4JztcbiAgICAgICAgICBiLnN0eWxlLmxpbmVIZWlnaHQgPSAnMSc7XG4gICAgICAgICAgYi5zdHlsZS5wYWRkaW5nID0gJzJweCA1cHgnO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZCh0aXRsZSk7XG4gICAgICAgIGJ1dHRvbnMuYXBwZW5kQ2hpbGQoY29sbGFwc2VCdG4pO1xuICAgICAgICBidXR0b25zLmFwcGVuZENoaWxkKGNsb3NlQnRuKTtcbiAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGJ1dHRvbnMpO1xuICAgICAgICBjb25zdCBwYXRoRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgcGF0aEVsLnN0eWxlLndoaXRlU3BhY2UgPSAnbm93cmFwJztcbiAgICAgICAgY29uc3QgdmFyc0VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncHJlJyk7XG4gICAgICAgIGNvbnN0IHF1ZXJ5RWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTtcbiAgICAgICAgY29uc3QgdHlwZWRFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ByZScpO1xuICAgICAgICBjb25zdCBmaWx0ZXJzRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTtcbiAgICAgICAgY29uc3QgZmlsdGVyRGlhZ0VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncHJlJyk7XG4gICAgICAgIC8vIFRpbWVsaW5lIGNvbnRhaW5lclxuICAgICAgICBjb25zdCB0aW1lbGluZVdyYXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGltZWxpbmVXcmFwLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIHRpbWVsaW5lV3JhcC5zdHlsZS5mbGV4RGlyZWN0aW9uID0gJ2NvbHVtbic7XG4gICAgICAgIHRpbWVsaW5lV3JhcC5zdHlsZS5nYXAgPSAnMnB4JztcbiAgICAgICAgdGltZWxpbmVXcmFwLnN0eWxlLm1hcmdpblRvcCA9ICc0cHgnO1xuICAgICAgICBjb25zdCB0aW1lbGluZUhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aW1lbGluZUhlYWRlci50ZXh0Q29udGVudCA9ICdUaW1lbGluZSAocXVlcnkgY2hhbmdlcyknO1xuICAgICAgICB0aW1lbGluZUhlYWRlci5zdHlsZS5mb250V2VpZ2h0ID0gJzYwMCc7XG4gICAgICAgIHRpbWVsaW5lSGVhZGVyLnN0eWxlLmZvbnRTaXplID0gJzExcHgnO1xuICAgICAgICBjb25zdCB0aW1lbGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aW1lbGluZS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICB0aW1lbGluZS5zdHlsZS5mbGV4RGlyZWN0aW9uID0gJ2NvbHVtbi1yZXZlcnNlJzsgLy8gbmV3ZXN0IG9uIHRvcCB2aXN1YWxseSB3aGlsZSBhcHBlbmRpbmcgYXQgZW5kIGZvciBjaGVhcGVyIG9wc1xuICAgICAgICB0aW1lbGluZS5zdHlsZS5tYXhIZWlnaHQgPSAnMTQwcHgnO1xuICAgICAgICB0aW1lbGluZS5zdHlsZS5vdmVyZmxvd1kgPSAnYXV0byc7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgI2UyZTJlMic7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLmJvcmRlclJhZGl1cyA9ICc0cHgnO1xuICAgICAgICB0aW1lbGluZS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmYWZiZmMnO1xuICAgICAgICB0aW1lbGluZS5zdHlsZS5mb250RmFtaWx5ID0gJ2luaGVyaXQnO1xuICAgICAgICB0aW1lbGluZS5zdHlsZS5mb250U2l6ZSA9ICcxMXB4JztcbiAgICAgICAgdGltZWxpbmVXcmFwLmFwcGVuZENoaWxkKHRpbWVsaW5lSGVhZGVyKTtcbiAgICAgICAgdGltZWxpbmVXcmFwLmFwcGVuZENoaWxkKHRpbWVsaW5lKTtcbiAgICAgICAgY29uc3QgcHJlczogSFRNTFByZUVsZW1lbnRbXSA9IFtcbiAgICAgICAgICB2YXJzRWwsXG4gICAgICAgICAgcXVlcnlFbCxcbiAgICAgICAgICB0eXBlZEVsLFxuICAgICAgICAgIGZpbHRlcnNFbCxcbiAgICAgICAgICBmaWx0ZXJEaWFnRWwsXG4gICAgICAgIF07XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBwcmVzKSB7XG4gICAgICAgICAgcC5zdHlsZS5tYXJnaW4gPSAnMCc7XG4gICAgICAgICAgcC5zdHlsZS5wYWRkaW5nID0gJzRweCc7XG4gICAgICAgICAgcC5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmNmY4ZmEnO1xuICAgICAgICAgIHAuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjZTJlMmUyJztcbiAgICAgICAgICBwLnN0eWxlLmJvcmRlclJhZGl1cyA9ICc0cHgnO1xuICAgICAgICAgIHAuc3R5bGUub3ZlcmZsb3dYID0gJ2F1dG8nO1xuICAgICAgICAgIHAuc3R5bGUubWF4SGVpZ2h0ID0gJzE2MHB4JztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzbWFsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzbWFsbC5zdHlsZS5mb250U2l6ZSA9ICcxMHB4JztcbiAgICAgICAgc21hbGwuc3R5bGUub3BhY2l0eSA9ICcwLjcnO1xuICAgICAgICBzbWFsbC50ZXh0Q29udGVudCA9IGBTaG9ydGN1dDogJHtkZXZ0b29sc1Nob3J0Y3V0fWA7XG4gICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKGhlYWRlcik7XG4gICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKHBhdGhFbCk7XG4gICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKHZhcnNFbCk7XG4gICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKHF1ZXJ5RWwpO1xuICAgICAgICBwYW5lbC5hcHBlbmRDaGlsZCh0eXBlZEVsKTtcbiAgICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQodGltZWxpbmVXcmFwKTtcbiAgICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQoZmlsdGVyc0VsKTtcbiAgICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQoZmlsdGVyRGlhZ0VsKTtcbiAgICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQoc21hbGwpO1xuICAgICAgICBzaGFkb3cuYXBwZW5kQ2hpbGQocGFuZWwpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhvc3QpO1xuICAgICAgICBsZXQgY29sbGFwc2VkID0gZmFsc2U7XG4gICAgICAgIGNvbGxhcHNlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgIGNvbGxhcHNlZCA9ICFjb2xsYXBzZWQ7XG4gICAgICAgICAgaWYgKGNvbGxhcHNlZCkge1xuICAgICAgICAgICAgcGFuZWwuc3R5bGUubWF4SGVpZ2h0ID0gJzI0cHgnO1xuICAgICAgICAgICAgcGFuZWwuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgICAgICAgIGNvbGxhcHNlQnRuLnRleHRDb250ZW50ID0gJysnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYW5lbC5zdHlsZS5tYXhIZWlnaHQgPSAnNTB2aCc7XG4gICAgICAgICAgICBwYW5lbC5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcbiAgICAgICAgICAgIGNvbGxhcHNlQnRuLnRleHRDb250ZW50ID0gJ+KIkic7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHVuc3ViOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNsb3NlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgIGhvc3QucmVtb3ZlKCk7XG4gICAgICAgICAgaWYgKHR5cGVvZiB1bnN1YiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdW5zdWIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvKiogVXBkYXRlIHBhbmVsIGNvbnRlbnQgZnJvbSBjdXJyZW50IHJvdXRlIGVudHJ5ICovXG4gICAgICAgIC8vIEtlZXAgbGFzdCBxdWVyeSBzbmFwc2hvdCBmb3IgZGlmZlxuICAgICAgICBsZXQgbGFzdFF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IGxhc3RTZWFyY2g6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbXB1dGUgZGlmZiBjbGFzc2lmaWNhdGlvbiBiZXR3ZWVuIHR3byBxdWVyeSBvYmplY3RzLlxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gZGlmZlF1ZXJpZXMoXG4gICAgICAgICAgcHJldjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQsXG4gICAgICAgICAgbmV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgICk6IHtcbiAgICAgICAgICBhZGRlZDogc3RyaW5nW107XG4gICAgICAgICAgcmVtb3ZlZDogc3RyaW5nW107XG4gICAgICAgICAgY2hhbmdlZDogc3RyaW5nW107XG4gICAgICAgICAgdW5jaGFuZ2VkOiBzdHJpbmdbXTtcbiAgICAgICAgfSB7XG4gICAgICAgICAgY29uc3QgYWRkZWQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgY29uc3QgcmVtb3ZlZDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICBjb25zdCBjaGFuZ2VkOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIGNvbnN0IHVuY2hhbmdlZDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICBjb25zdCBwcmV2S2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXMocHJldiA/PyB7fSkpO1xuICAgICAgICAgIGNvbnN0IG5leHRLZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyhuZXh0KSk7XG4gICAgICAgICAgbmV4dEtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgaWYgKCFwcmV2S2V5cy5oYXMoaykpIHtcbiAgICAgICAgICAgICAgYWRkZWQucHVzaChrKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHB2OiB1bmtub3duO1xuICAgICAgICAgICAgaWYgKHByZXYgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBwcmV2IGlzIGEgcGxhaW4gcmVjb3JkOyBkaXJlY3QgaW5kZXggKHJ1bnRpbWUgc2FmZSlcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICAgICAgICBwdiA9IChwcmV2IGFzIGFueSlba107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBudiA9IG5leHRba107XG4gICAgICAgICAgICBsZXQgc2FtZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHYpICYmIEFycmF5LmlzQXJyYXkobnYpKSB7XG4gICAgICAgICAgICAgIGlmIChwdi5sZW5ndGggPT09IChudiBhcyB1bmtub3duW10pLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHNhbWUgPSBwdi5ldmVyeSgodiwgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHYgPT09IChudiBhcyB1bmtub3duW10pW2ldO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzYW1lID0gcHYgPT09IG52O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNhbWUpIHtcbiAgICAgICAgICAgICAgdW5jaGFuZ2VkLnB1c2goayk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjaGFuZ2VkLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmV2S2V5cy5kZWxldGUoayk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJldktleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGspO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB7IGFkZGVkLCByZW1vdmVkLCBjaGFuZ2VkLCB1bmNoYW5nZWQgfTtcbiAgICAgICAgfVxuICAgICAgICAvKiogVXBkYXRlIHBhbmVsIGNvbnRlbnQgYW5kIG1heWJlIHB1c2ggdGltZWxpbmUgZW50cnkgKi9cbiAgICAgICAgZnVuY3Rpb24gcmVuZGVyKCk6IHZvaWQge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IGNvbnRleHQuZ2V0KCk7XG4gICAgICAgICAgICBwYXRoRWwudGV4dENvbnRlbnQgPSBgJHtlbnRyeS5sb2NhdGlvbi5wYXRobmFtZX0ke2VudHJ5LmxvY2F0aW9uLnNlYXJjaH1gO1xuICAgICAgICAgICAgY29uc3QgdmFyc0pzb24gPSBKU09OLnN0cmluZ2lmeShlbnRyeS5yb3V0ZT8ucGFyYW1zID8/IHt9LCBudWxsLCAyKTtcbiAgICAgICAgICAgIHZhcnNFbC50ZXh0Q29udGVudCA9IGB2YXJzOiAke3ZhcnNKc29ufWA7XG4gICAgICAgICAgICBjb25zdCByYXdKc29uID0gSlNPTi5zdHJpbmdpZnkoZW50cnkucXVlcnksIG51bGwsIDIpO1xuICAgICAgICAgICAgcXVlcnlFbC50ZXh0Q29udGVudCA9IGByYXc6ICAke3Jhd0pzb259YDtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVkSnNvbiA9IEpTT04uc3RyaW5naWZ5KGVudHJ5LnR5cGVkUXVlcnksIG51bGwsIDIpO1xuICAgICAgICAgICAgdHlwZWRFbC50ZXh0Q29udGVudCA9IGB0eXBlZDoke3R5cGVkSnNvbn1gO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyc0pzb24gPSBKU09OLnN0cmluZ2lmeShlbnRyeS5maWx0ZXJzLCBudWxsLCAyKTtcbiAgICAgICAgICAgIGZpbHRlcnNFbC50ZXh0Q29udGVudCA9IGBmaWx0ZXJzOiR7ZmlsdGVyc0pzb259YDtcbiAgICAgICAgICAgIGNvbnN0IGRpYWcgPSBlbnRyeS5maWx0ZXJEaWFnbm9zdGljcyA/PyBbXTtcbiAgICAgICAgICAgIGZpbHRlckRpYWdFbC50ZXh0Q29udGVudCA9IGBmaWx0ZXJEaWFnbm9zdGljczogJHtkaWFnLmxlbmd0aH1gO1xuICAgICAgICAgICAgLy8gVGltZWxpbmUgbG9nIGlmIHF1ZXJ5IHNlYXJjaCBjaGFuZ2VkXG4gICAgICAgICAgICBpZiAoZW50cnkucmF3U2VhcmNoICE9PSBsYXN0U2VhcmNoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vd1F1ZXJ5ID0gZW50cnkucXVlcnkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBkaWZmUXVlcmllcyhsYXN0UXVlcnksIG5vd1F1ZXJ5KTtcbiAgICAgICAgICAgICAgY29uc3Qgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgIHJvdy5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICAgICAgICByb3cuc3R5bGUuZmxleERpcmVjdGlvbiA9ICdjb2x1bW4nO1xuICAgICAgICAgICAgICByb3cuc3R5bGUuYm9yZGVyQm90dG9tID0gJzFweCBzb2xpZCAjZTllOWU5JztcbiAgICAgICAgICAgICAgcm93LnN0eWxlLnBhZGRpbmcgPSAnM3B4IDRweCc7XG4gICAgICAgICAgICAgIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgaGVhZC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICAgICAgICBoZWFkLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ3NwYWNlLWJldHdlZW4nO1xuICAgICAgICAgICAgICBjb25zdCB0cyA9IG5ldyBEYXRlKCkudG9Mb2NhbGVUaW1lU3RyaW5nKCk7XG4gICAgICAgICAgICAgIGxldCBzZWFyY2hEaXNwbGF5ID0gJyhlbXB0eSknO1xuICAgICAgICAgICAgICBpZiAoZW50cnkubG9jYXRpb24uc2VhcmNoICE9PSAnJykge1xuICAgICAgICAgICAgICAgIHNlYXJjaERpc3BsYXkgPSBlbnRyeS5sb2NhdGlvbi5zZWFyY2g7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaGVhZC5pbm5lckhUTUwgPSBgPHN0cm9uZz4ke3RzfTwvc3Ryb25nPiA8Y29kZSBzdHlsZT1cImJhY2tncm91bmQ6I2VlZTtwYWRkaW5nOjFweCAzcHg7Ym9yZGVyLXJhZGl1czozcHg7XCI+JHtzZWFyY2hEaXNwbGF5fTwvY29kZT5gO1xuICAgICAgICAgICAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgIGJvZHkuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgICAgICAgYm9keS5zdHlsZS5mbGV4V3JhcCA9ICd3cmFwJztcbiAgICAgICAgICAgICAgYm9keS5zdHlsZS5nYXAgPSAnNHB4JztcbiAgICAgICAgICAgICAgLyoqIENyZWF0ZSBhIGNvbG9yZWQgcGlsbCBlbGVtZW50ICovXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIHBpbGwoXG4gICAgICAgICAgICAgICAgbGFiZWw6IHN0cmluZyxcbiAgICAgICAgICAgICAgICBraW5kOiAnYWRkZWQnIHwgJ3JlbW92ZWQnIHwgJ2NoYW5nZWQnIHwgJ3VuY2hhbmdlZCcsXG4gICAgICAgICAgICAgICk6IEhUTUxTcGFuRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgICAgICBzcGFuLnRleHRDb250ZW50ID0gbGFiZWw7XG4gICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5wYWRkaW5nID0gJzFweCA0cHgnO1xuICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuYm9yZGVyUmFkaXVzID0gJzEwcHgnO1xuICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuZm9udFNpemUgPSAnMTBweCc7XG4gICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkJztcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ2FkZGVkJzpcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5iYWNrZ3JvdW5kID0gJyNlNmZmZWQnO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmJvcmRlckNvbG9yID0gJyMyY2JlNGUnO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmNvbG9yID0gJyMyMjg2M2EnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlbW92ZWQnOlxuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmZWVmMCc7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuYm9yZGVyQ29sb3IgPSAnI2Q3M2E0OSc7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuY29sb3IgPSAnI2NiMjQzMSc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSAnY2hhbmdlZCc6XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmZmNWIxJztcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5ib3JkZXJDb2xvciA9ICcjZmZkMzNkJztcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5jb2xvciA9ICcjNzM1YzBmJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlICd1bmNoYW5nZWQnOlxuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmJhY2tncm91bmQgPSAnI2YxZjhmZic7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuYm9yZGVyQ29sb3IgPSAnIzc5YjhmZic7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuY29sb3IgPSAnIzAzNjZkNic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIGV4aGF1c3RpdmVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNwYW47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGRpZmYuYWRkZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kKFxuICAgICAgICAgICAgICAgICAgLi4uZGlmZi5hZGRlZC5tYXAoKGspID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBpbGwoYCske2t9YCwgJ2FkZGVkJyk7XG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChkaWZmLmNoYW5nZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kKFxuICAgICAgICAgICAgICAgICAgLi4uZGlmZi5jaGFuZ2VkLm1hcCgoaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGlsbChgfiR7a31gLCAnY2hhbmdlZCcpO1xuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZGlmZi5yZW1vdmVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBib2R5LmFwcGVuZChcbiAgICAgICAgICAgICAgICAgIC4uLmRpZmYucmVtb3ZlZC5tYXAoKGspID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBpbGwoYC0ke2t9YCwgJ3JlbW92ZWQnKTtcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgbm9BZGRzID0gZGlmZi5hZGRlZC5sZW5ndGggPT09IDA7XG4gICAgICAgICAgICAgIGNvbnN0IG5vQ2hhbmdlcyA9IGRpZmYuY2hhbmdlZC5sZW5ndGggPT09IDA7XG4gICAgICAgICAgICAgIGNvbnN0IG5vUmVtb3ZhbHMgPSBkaWZmLnJlbW92ZWQubGVuZ3RoID09PSAwO1xuICAgICAgICAgICAgICBpZiAobm9BZGRzICYmIG5vQ2hhbmdlcyAmJiBub1JlbW92YWxzKSB7XG4gICAgICAgICAgICAgICAgYm9keS5hcHBlbmQocGlsbCgnbm8tY2hhbmdlJywgJ3VuY2hhbmdlZCcpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByb3cuYXBwZW5kQ2hpbGQoaGVhZCk7XG4gICAgICAgICAgICAgIHJvdy5hcHBlbmRDaGlsZChib2R5KTtcbiAgICAgICAgICAgICAgdGltZWxpbmUuYXBwZW5kQ2hpbGQocm93KTtcbiAgICAgICAgICAgICAgaWYgKHRpbWVsaW5lLmNoaWxkRWxlbWVudENvdW50ID4gNTApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdCA9IHRpbWVsaW5lLmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgICAgICAgICAgIGlmIChmaXJzdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICB0aW1lbGluZS5yZW1vdmVDaGlsZChmaXJzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxhc3RRdWVyeSA9IG5vd1F1ZXJ5O1xuICAgICAgICAgICAgICBsYXN0U2VhcmNoID0gZW50cnkucmF3U2VhcmNoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLyogaWdub3JlICovXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcigpO1xuICAgICAgICB1bnN1YiA9IGNvbnRleHQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICByZW5kZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2KSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgaWYgKGV2LmFsdEtleSkgcGFydHMucHVzaCgnQWx0Jyk7XG4gICAgICAgICAgICBpZiAoZXYuc2hpZnRLZXkpIHBhcnRzLnB1c2goJ1NoaWZ0Jyk7XG4gICAgICAgICAgICBpZiAoZXYuY3RybEtleSkgcGFydHMucHVzaCgnQ3RybCcpO1xuICAgICAgICAgICAgbGV0IGtleVBhcnQgPSBldi5rZXk7XG4gICAgICAgICAgICBpZiAoZXYua2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICBrZXlQYXJ0ID0gZXYua2V5LnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJ0cy5wdXNoKGtleVBhcnQpO1xuICAgICAgICAgICAgY29uc3QgY29tYm8gPSBwYXJ0cy5qb2luKCcrJyk7XG4gICAgICAgICAgICBpZiAoY29tYm8gPT09IGRldnRvb2xzU2hvcnRjdXQucmVwbGFjZSgvXFxzKy9nLCAnJykpIHtcbiAgICAgICAgICAgICAgaWYgKGhvc3Quc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgaG9zdC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBob3N0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8qIGlnbm9yZSAqL1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvKiBpZ25vcmUgKi9cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgY2xlYW51cCwgY29udGV4dCB9IGFzIENyZWF0ZVJvdXRlclJldHVybjxhbnk+O1xufVxuIl19
|
|
633
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRpbmcvY3JlYXRlUm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLG1CQUFtQixNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxLQUFLLElBQUksWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUF1RDlELE1BQU0sQ0FBQyxPQUFPLFVBQVUsWUFBWSxDQUNsQyxNQUEyQixFQUMzQixPQUlJLEVBQUU7SUFHTixJQUFJLGNBQXVCLENBQUM7SUFDNUIsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQzFCLElBQUksZ0JBQWdCLEdBQUcsYUFBYSxDQUFDO0lBQ3JDLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ3hCLElBQUksQ0FBQztnQkFDSCxPQUFPLENBQ0wsT0FBTyxPQUFPLEtBQUssV0FBVztvQkFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUN0QyxDQUFDO1lBQ0osQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ0wsY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLFdBQVcsQ0FBQztRQUNyRCxhQUFhLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ3RDLElBQ0UsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsS0FBSyxRQUFRO1lBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFDcEMsQ0FBQztZQUNELGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO1NBQU0sQ0FBQztRQUVOLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ3BCLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVM7Z0JBQUUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzdELElBQUksQ0FBQztnQkFDSCxPQUFPLENBQ0wsT0FBTyxPQUFPLEtBQUssV0FBVztvQkFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUN0QyxDQUFDO1lBQ0osQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ0wsY0FBYyxHQUFHLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztJQUdyQyxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFHdkMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUQsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFL0QsSUFBSSxvQkFBeUIsQ0FBQztJQUM5QixJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNsQixNQUFNLFNBQVMsR0FBVSxFQUFFLENBQUM7UUFDNUIsS0FBSyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25DLE1BQU0sS0FBSyxHQUFJLENBQTBDLENBQUMsV0FBVyxDQUFDO1lBQ3RFLElBQUksS0FBSyxJQUFJLElBQUk7Z0JBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7WUFBRSxvQkFBb0IsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNELElBQUksY0FBbUQsQ0FBQztJQUN4RCxJQUFJLHdCQUEyQyxDQUFDO0lBQ2hELElBQUksb0JBQW9CLElBQUksSUFBSSxFQUFFLENBQUM7UUFDakMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDM0UsY0FBYyxHQUFHLE1BQU0sQ0FBQyxPQUE2QyxDQUFDO1FBQ3RFLHdCQUF3QixHQUFHLE1BQU0sQ0FBQyxXQUF3QixDQUFDO0lBQzdELENBQUM7SUFDRCxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBRTFELElBQUksWUFBWSxHQUFvQjtRQUNsQyxhQUFhLEVBQUUsS0FBSztRQUNwQixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7UUFDMUIsS0FBSztRQUNMLGFBQWE7UUFDYixTQUFTLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNO1FBQ2xDLEtBQUssRUFBRSxlQUFlO1FBRXRCLE9BQU8sRUFBRSxjQUFjO1FBQ3ZCLGlCQUFpQixFQUFFLHdCQUF3QjtRQUMzQyxpQkFBaUIsRUFBRSxvQkFBb0I7S0FDeEMsQ0FBQztJQUdGLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxPQUVsQixDQUFDO0lBQ2QsSUFBSSxlQUFtQyxDQUFDO0lBQ3hDLElBQUksU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3RCLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDL0IsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRO1lBQUUsZUFBZSxHQUFHLE9BQU8sQ0FBQzthQUN0RCxJQUNILE9BQU8sSUFBSSxJQUFJO1lBQ2YsT0FBTyxPQUFPLEtBQUssUUFBUTtZQUMzQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDO1lBQ25ELE9BQVEsT0FBbUMsQ0FBQyxFQUFFLEtBQUssUUFBUSxFQUMzRCxDQUFDO1lBQ0QsZUFBZSxHQUFJLE9BQW1DLENBQUMsRUFBWSxDQUFDO1FBQ3RFLENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFDRSxPQUFPLGVBQWUsS0FBSyxRQUFRO1FBQ25DLGVBQWUsR0FBRyxDQUFDO1FBQ25CLG9CQUFvQixJQUFJLElBQUk7UUFDNUIsU0FBUyxJQUFJLElBQUksRUFDakIsQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLEVBQUUsR0FBRyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUE2QixDQUFDO1FBQzFFLFlBQVksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQzVCLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUM7WUFDM0MsT0FBTyxFQUFFLElBQUk7WUFDYixXQUFXLEVBQUUsb0JBQW9CO1NBQ2xDLENBQUMsQ0FBQztRQUNILElBQUksZ0JBQWdCLEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqRCxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUNWLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVE7Z0JBQ25DLE1BQU0sRUFBRSxnQkFBZ0I7Z0JBQ3hCLElBQUksRUFBRSxFQUFFO2FBQ1QsQ0FBQyxDQUFDO1lBRUgsWUFBWSxHQUFHO2dCQUNiLEdBQUcsWUFBWTtnQkFDZixRQUFRLEVBQUUsRUFBRSxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFO2dCQUNoRSxTQUFTLEVBQUUsZ0JBQWdCO2FBQzVCLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUdELElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNmLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFrQyxDQUFDO0lBSzlELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLEVBQUU7UUFDNUQsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFFBQVEsS0FBSyxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUMxRSxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFFOUQsSUFBSSxDQUFDLGFBQWEsSUFBSSxZQUFZLElBQUksVUFBVSxFQUFFLENBQUM7WUFFakQsT0FBTztRQUNULENBQUM7UUFJRCxJQUFJLGlCQUFpQixHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUM7UUFDbkQsSUFBSSxTQUFTLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUVuQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFbEIsU0FBUyxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTVELENBQUM7UUFHRCxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTdDLElBQUksV0FBZ0IsQ0FBQztRQUNyQixJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN0QixNQUFNLFNBQVMsR0FBVSxFQUFFLENBQUM7WUFDNUIsS0FBSyxNQUFNLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN2QyxNQUFNLE1BQU0sR0FBSSxDQUEwQyxDQUFDLFdBQVcsQ0FBQztnQkFDdkUsSUFBSSxNQUFNLElBQUksSUFBSTtvQkFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFDRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLFdBQVcsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLE9BQTRDLENBQUM7UUFDakQsSUFBSSxpQkFBb0MsQ0FBQztRQUN6QyxJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN4QixNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztZQUMzRCxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQTZDLENBQUM7WUFDaEUsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLFdBQXdCLENBQUM7UUFDdkQsQ0FBQztRQUVELElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLEVBQVcsQ0FBQztRQUNoQixJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNwQixNQUFNLENBQUMsR0FBNEIsT0FBTyxDQUFDO1lBQzNDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDckIsSUFDRSxLQUFLLElBQUksSUFBSTtnQkFDYixPQUFPLEtBQUssS0FBSyxRQUFRO2dCQUN6QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUNyQixNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUNqRCxDQUFDO2dCQUNELEVBQUUsR0FBSSxLQUFpQyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sRUFBRSxHQUFHLEtBQUssQ0FBQztZQUNiLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sS0FBSyxHQUFHLEVBQUUsR0FBSSxPQUErQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3ZFLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDaEIsVUFBVSxHQUFHLElBQUksQ0FBQztRQUNwQixDQUFDO1FBR0QsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2pDLGlCQUFpQixHQUFHLFlBQVksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFvQjtZQUNqQyxhQUFhLEVBQUUsYUFBYSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQzdELFFBQVE7WUFDUixLQUFLLEVBQUUsU0FBUztZQUNoQixhQUFhLEVBQUUsaUJBQWlCO1lBQ2hDLFNBQVMsRUFBRSxRQUFRLENBQUMsTUFBTTtZQUMxQixLQUFLO1lBQ0wsT0FBTztZQUNQLGlCQUFpQjtZQUNqQixpQkFBaUIsRUFBRSxXQUFXO1NBQy9CLENBQUM7UUFHRixJQUFJLFVBQVUsSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdEMsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQztnQkFDM0MsT0FBTztnQkFDUCxXQUFXO2FBQ1osQ0FBQyxDQUFDO1lBQ0gsSUFBSSxnQkFBZ0IsS0FBSyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3pDLElBQUksYUFBYSxHQUFHLGdCQUFnQixDQUFDO2dCQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNuQyxJQUFJLGFBQWEsS0FBSyxFQUFFO3dCQUFFLGFBQWEsR0FBRyxFQUFFLENBQUM7O3dCQUN4QyxhQUFhLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDM0MsQ0FBQztnQkFDRCxPQUFPLENBQUMsR0FBRyxDQUFDO29CQUNWLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtvQkFDM0IsTUFBTSxFQUFFLGFBQWE7b0JBQ3JCLElBQUksRUFBRSxFQUFFO2lCQUNULENBQUMsQ0FBQztnQkFDSCxPQUFPO1lBQ1QsQ0FBQztRQUNILENBQUM7UUFHRCxZQUFZLEdBQUcsU0FBUyxDQUFDO1FBQ3pCLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUMvQixRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUdILE1BQU0sT0FBTyxHQUdQO1FBQ0osT0FBTztRQUNQLEdBQUc7WUFDRCxPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO1FBQ0QsV0FBVyxDQUFDLFFBQVE7WUFFbEIsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLFVBQVUsRUFBRTtnQkFDMUMsR0FBRyxNQUFNLENBQUMsUUFBUTtnQkFDbEIsUUFBUTthQUNULENBQUMsQ0FBQztZQUVILElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNwQixPQUFPO1lBQ1QsQ0FBQztZQUdELE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRTtnQkFDaEQsSUFBSSxZQUFZLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ3pCLE9BQU87Z0JBQ1QsQ0FBQztnQkFFRCxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdEIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxDQUFDLFFBQVE7WUFFZCxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFO2dCQUMxQyxHQUFHLE1BQU0sQ0FBQyxRQUFRO2dCQUNsQixRQUFRO2FBQ1QsQ0FBQyxDQUFDO1lBQ0gsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hCLENBQUM7UUFDRCxTQUFTLENBQUMsUUFBUTtZQUVoQixNQUFNLElBQUksQ0FBQyxDQUFDO1lBQ1osTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDO1lBRWxCLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRTtnQkFDbkIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QixDQUFDLENBQUM7WUFDRixXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM5QixPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBQ0QsUUFBUSxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBTztZQUM3RCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUM7WUFDN0IsTUFBTSxjQUFjLEdBQUcsUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBRTdELElBQUksVUFBZSxDQUFDO1lBRXBCLFNBQVMsYUFBYSxDQUFDLFNBQTRCO2dCQUNqRCxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDdEIsT0FBTztnQkFDVCxDQUFDO2dCQUNELE1BQU0sU0FBUyxHQUFVLEVBQUUsQ0FBQztnQkFDNUIsS0FBSyxNQUFNLENBQUMsSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDMUIsTUFBTSxNQUFNLEdBQUksQ0FBMEM7eUJBQ3ZELFdBQVcsQ0FBQztvQkFDZixJQUFJLE1BQU0sSUFBSSxJQUFJO3dCQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzdDLENBQUM7Z0JBQ0QsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN6QixVQUFVLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxDQUFDO1lBQ0gsQ0FBQztZQUVELE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUU7Z0JBQzVDLEdBQUcsTUFBTSxDQUFDLFFBQVE7Z0JBQ2xCLFFBQVEsRUFBRSxjQUFjO2FBQ3pCLENBQUMsQ0FBQztZQUNILGFBQWEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXZDLFVBQVUsS0FBSyxPQUFPLENBQUMsaUJBQWlCLENBQUM7WUFDekMsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUV2RCxNQUFNLFlBQVksR0FDaEIsZ0JBQWdCLElBQUssS0FBNkMsQ0FBQztZQUNyRSxNQUFNLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQztnQkFDakMsT0FBTyxFQUFFLFlBQVk7Z0JBQ3JCLFdBQVcsRUFBRSxVQUFVO2FBQ3hCLENBQUMsQ0FBQztZQUNILE1BQU0sV0FBVyxHQUFHLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ25FLElBQUksT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDO1FBQ0QsV0FBVyxDQUFDLElBQUk7WUFDZCxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDO2dCQUUzQixLQUFLLE1BQU0sRUFBRSxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQzVDLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQzt3QkFDckIsT0FBTyxFQUFFLENBQUMsUUFBZSxDQUFDO29CQUM1QixDQUFDO2dCQUNILENBQUM7Z0JBQ0QsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1FBQ0gsQ0FBQztLQUVGLENBQUM7SUFJRixJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQztZQUNILElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFLENBQUM7Z0JBQ2pDLE1BQWtELENBQUMsa0JBQWtCO29CQUNwRTt3QkFDRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7d0JBQ2hCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztxQkFDN0IsQ0FBQztZQUNOLENBQUM7UUFDSCxDQUFDO1FBQUMsTUFBTSxDQUFDO1FBRVQsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQztZQUNILElBQ0UsT0FBTyxNQUFNLEtBQUssV0FBVztnQkFDN0IsT0FBTyxRQUFRLEtBQUssV0FBVztnQkFDL0IsUUFBUSxDQUFDLGFBQWEsQ0FBQyxzQ0FBc0MsQ0FBQyxJQUFJLElBQUksRUFDdEUsQ0FBQztnQkFDRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsWUFBWSxDQUFDLG9DQUFvQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQztnQkFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2dCQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVTtvQkFDbkIscUZBQXFGLENBQUM7Z0JBQ3hGLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztnQkFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLGFBQWEsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO2dCQUNsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQ25ELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVDLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztnQkFDbkMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO2dCQUMvQixLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7Z0JBQy9CLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztnQkFDL0IsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO2dCQUM5QixLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQztnQkFDbEQsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQ3RDLEtBQUssQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDakMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsNEJBQTRCLENBQUM7Z0JBQ3JELEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQztnQkFDcEMsS0FBSyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDO2dCQUN6QyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Z0JBQzdCLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQztnQkFDckMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM3QyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Z0JBQzlCLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQztnQkFDbkMsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsZUFBZSxDQUFDO2dCQUM5QyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzdDLEtBQUssQ0FBQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQ3JDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztnQkFDL0IsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO2dCQUMvQixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7Z0JBQzFCLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3JELFdBQVcsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO2dCQUM5QixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNsRCxRQUFRLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztnQkFDM0IsTUFBTSxJQUFJLEdBQXdCLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUMxRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO29CQUNyQixDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7b0JBQzNCLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztvQkFDNUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUM7b0JBQ2xDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztvQkFDN0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO29CQUMxQixDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7b0JBQ3pCLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztnQkFDOUIsQ0FBQztnQkFDRCxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMxQixPQUFPLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNqQyxPQUFPLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM5QixNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM1QixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM3QyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7Z0JBQ25DLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzdDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRTlDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRW5ELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25ELFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztnQkFDcEMsWUFBWSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDO2dCQUM1QyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7Z0JBQy9CLFlBQVksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDckMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckQsY0FBYyxDQUFDLFdBQVcsR0FBRywwQkFBMEIsQ0FBQztnQkFDeEQsY0FBYyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUN4QyxjQUFjLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7Z0JBQ3ZDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9DLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztnQkFDaEMsUUFBUSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQ2hELFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztnQkFDbkMsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO2dCQUNsQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQztnQkFDNUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2dCQUNwQyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7Z0JBQ3RDLFFBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztnQkFDdEMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO2dCQUNqQyxZQUFZLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUN6QyxZQUFZLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNuQyxNQUFNLElBQUksR0FBcUI7b0JBQzdCLE1BQU07b0JBQ04sT0FBTztvQkFDUCxTQUFTO29CQUNULFlBQVk7aUJBQ2IsQ0FBQztnQkFDRixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO29CQUNyQixDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7b0JBQ3JCLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztvQkFDeEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO29CQUMvQixDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQztvQkFDckMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO29CQUM3QixDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7b0JBQzNCLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztnQkFDOUIsQ0FBQztnQkFDRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1QyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7Z0JBQzlCLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDNUIsS0FBSyxDQUFDLFdBQVcsR0FBRyxhQUFhLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3BELEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzFCLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzFCLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzFCLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBRTNCLEtBQUssQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2hDLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzdCLEtBQUssQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2hDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3pCLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQ3RCLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO29CQUN6QyxTQUFTLEdBQUcsQ0FBQyxTQUFTLENBQUM7b0JBQ3ZCLElBQUksU0FBUyxFQUFFLENBQUM7d0JBQ2QsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO3dCQUMvQixLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7d0JBQ2hDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO29CQUNoQyxDQUFDO3lCQUFNLENBQUM7d0JBQ04sS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO3dCQUMvQixLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7d0JBQzlCLFdBQVcsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO29CQUNoQyxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksS0FBK0IsQ0FBQztnQkFDcEMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7b0JBQ3RDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDZCxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVUsRUFBRSxDQUFDO3dCQUNoQyxLQUFLLEVBQUUsQ0FBQztvQkFDVixDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUdILElBQUksU0FBOEMsQ0FBQztnQkFDbkQsSUFBSSxVQUE4QixDQUFDO2dCQUluQyxTQUFTLFdBQVcsQ0FDbEIsSUFBeUMsRUFDekMsSUFBNkI7b0JBTzdCLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztvQkFDM0IsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO29CQUM3QixNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7b0JBQzdCLE1BQU0sU0FBUyxHQUFhLEVBQUUsQ0FBQztvQkFDL0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDbEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUM1QyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7d0JBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQ3JCLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ2QsT0FBTzt3QkFDVCxDQUFDO3dCQUNELElBQUksRUFBVyxDQUFDO3dCQUNoQixJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQzs0QkFHakIsRUFBRSxHQUFJLElBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDeEIsQ0FBQzt3QkFDRCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ25CLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQzt3QkFDakIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQzs0QkFDM0MsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFNLEVBQWdCLENBQUMsTUFBTSxFQUFFLENBQUM7Z0NBQzNDLElBQUksR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO29DQUN2QixPQUFPLENBQUMsS0FBTSxFQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUNwQyxDQUFDLENBQUMsQ0FBQzs0QkFDTCxDQUFDO3dCQUNILENBQUM7NkJBQU0sQ0FBQzs0QkFDTixJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQzt3QkFDbkIsQ0FBQzt3QkFDRCxJQUFJLElBQUksRUFBRSxDQUFDOzRCQUNULFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3BCLENBQUM7NkJBQU0sQ0FBQzs0QkFDTixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNsQixDQUFDO3dCQUNELFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3JCLENBQUMsQ0FBQyxDQUFDO29CQUNILFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTt3QkFDckIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEIsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO2dCQUNoRCxDQUFDO2dCQUVELFNBQVMsTUFBTTtvQkFDYixJQUFJLENBQUM7d0JBQ0gsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUM1QixNQUFNLENBQUMsV0FBVyxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDMUUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNwRSxNQUFNLENBQUMsV0FBVyxHQUFHLFNBQVMsUUFBUSxFQUFFLENBQUM7d0JBQ3pDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ3JELE9BQU8sQ0FBQyxXQUFXLEdBQUcsU0FBUyxPQUFPLEVBQUUsQ0FBQzt3QkFFekMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDM0QsU0FBUyxDQUFDLFdBQVcsR0FBRyxXQUFXLFdBQVcsRUFBRSxDQUFDO3dCQUNqRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDO3dCQUMzQyxZQUFZLENBQUMsV0FBVyxHQUFHLHNCQUFzQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7d0JBRS9ELElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQzs0QkFDbkMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQWdDLENBQUM7NEJBQ3hELE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7NEJBQzlDLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQzFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQzs0QkFDM0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDOzRCQUNuQyxHQUFHLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxtQkFBbUIsQ0FBQzs0QkFDN0MsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDOzRCQUM5QixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7NEJBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLGVBQWUsQ0FBQzs0QkFDNUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDOzRCQUMzQyxJQUFJLGFBQWEsR0FBRyxTQUFTLENBQUM7NEJBQzlCLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUM7Z0NBQ2pDLGFBQWEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQzs0QkFDeEMsQ0FBQzs0QkFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsRUFBRSw4RUFBOEUsYUFBYSxTQUFTLENBQUM7NEJBQ25JLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQzNDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQzs0QkFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDOzRCQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7NEJBRXZCLFNBQVMsSUFBSSxDQUNYLEtBQWEsRUFDYixJQUFtRDtnQ0FFbkQsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQ0FDNUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0NBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztnQ0FDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO2dDQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7Z0NBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQztnQ0FDaEMsUUFBUSxJQUFJLEVBQUUsQ0FBQztvQ0FDYixLQUFLLE9BQU87d0NBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO3dDQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7d0NBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQzt3Q0FDN0IsTUFBTTtvQ0FDUixLQUFLLFNBQVM7d0NBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO3dDQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7d0NBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQzt3Q0FDN0IsTUFBTTtvQ0FDUixLQUFLLFNBQVM7d0NBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO3dDQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7d0NBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQzt3Q0FDN0IsTUFBTTtvQ0FDUixLQUFLLFdBQVc7d0NBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO3dDQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7d0NBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQzt3Q0FDN0IsTUFBTTtvQ0FDUjt3Q0FDRSxNQUFNO2dDQUNWLENBQUM7Z0NBQ0QsT0FBTyxJQUFJLENBQUM7NEJBQ2QsQ0FBQzs0QkFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dDQUMxQixJQUFJLENBQUMsTUFBTSxDQUNULEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQ0FDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztnQ0FDaEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQzs0QkFDSixDQUFDOzRCQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0NBQzVCLElBQUksQ0FBQyxNQUFNLENBQ1QsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29DQUN4QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dDQUNsQyxDQUFDLENBQUMsQ0FDSCxDQUFDOzRCQUNKLENBQUM7NEJBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQ0FDNUIsSUFBSSxDQUFDLE1BQU0sQ0FDVCxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0NBQ3hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0NBQ2xDLENBQUMsQ0FBQyxDQUNILENBQUM7NEJBQ0osQ0FBQzs0QkFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7NEJBQ3ZDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQzs0QkFDNUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDOzRCQUM3QyxJQUFJLE1BQU0sSUFBSSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7Z0NBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDOzRCQUM5QyxDQUFDOzRCQUNELEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ3RCLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ3RCLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQzFCLElBQUksUUFBUSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsRUFBRSxDQUFDO2dDQUNwQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUM7Z0NBQ3pDLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO29DQUNsQixRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dDQUM5QixDQUFDOzRCQUNILENBQUM7NEJBQ0QsU0FBUyxHQUFHLFFBQVEsQ0FBQzs0QkFDckIsVUFBVSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7d0JBQy9CLENBQUM7b0JBQ0gsQ0FBQztvQkFBQyxNQUFNLENBQUM7b0JBRVQsQ0FBQztnQkFDSCxDQUFDO2dCQUNELE1BQU0sRUFBRSxDQUFDO2dCQUNULEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDN0IsTUFBTSxFQUFFLENBQUM7Z0JBQ1gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO29CQUN4QyxJQUFJLENBQUM7d0JBQ0gsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO3dCQUMzQixJQUFJLEVBQUUsQ0FBQyxNQUFNOzRCQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ2pDLElBQUksRUFBRSxDQUFDLFFBQVE7NEJBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDckMsSUFBSSxFQUFFLENBQUMsT0FBTzs0QkFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUNuQyxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO3dCQUNyQixJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDOzRCQUN4QixPQUFPLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDakMsQ0FBQzt3QkFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUNwQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUM5QixJQUFJLEtBQUssS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7NEJBQ25ELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFLENBQUM7Z0NBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQzs0QkFDL0IsQ0FBQztpQ0FBTSxDQUFDO2dDQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQzs0QkFDOUIsQ0FBQzt3QkFDSCxDQUFDO29CQUNILENBQUM7b0JBQUMsTUFBTSxDQUFDO29CQUVULENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE1BQU0sQ0FBQztRQUVULENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQTZCLENBQUM7QUFDekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJ1aWxkUm91dGVzIH0gZnJvbSAnLi4vYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBCcm93c2VySGlzdG9yeSB9IGZyb20gJy4uL2hpc3RvcnkvaW5kZXguanMnO1xuaW1wb3J0IHsgZ2V0TWF0Y2hlZFJvdXRlLCBwcmVwYXJlTWF0Y2ggfSBmcm9tICcuLi90b29scy5qcyc7XG5pbXBvcnQgeyBwYXJzZVJhd1F1ZXJ5IH0gZnJvbSAnLi4vdG9vbHMvcXVlcnkuanMnO1xuaW1wb3J0IGJ1aWxkQ29tYmluZWRTZWFyY2ggZnJvbSAnLi4vdG9vbHMvYnVpbGRDb21iaW5lZFNlYXJjaC5qcyc7XG5pbXBvcnQgeyBwYXJzZSBhcyBwYXJzZUZpbHRlcnMgfSBmcm9tICdAcGx1bWlsZS9maWx0ZXItcXVlcnknO1xuaW1wb3J0IHR5cGUge1xuICBSb3V0ZUVudHJ5LFxuICBSb3V0aW5nQ29udGV4dFR5cGUsXG4gIFN1YnNjcmliZUNhbGxiYWNrLFxuICBBbnlSb3V0ZSxcbiAgUHJlcGFyZWRBY2Nlc3MsXG4gIE5hdmlnYXRlT3ZlcmxvYWRzLFxufSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbi8qKlxuICogUmV0dXJuIHR5cGUgZm9yIHRoZSBjcmVhdGVSb3V0ZXIgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZVJvdXRlclJldHVybjxSIGV4dGVuZHMgQW55Um91dGVbXT4gPSB7XG4gIC8qKiBGdW5jdGlvbiB0byBjbGVhbiB1cCByb3V0ZXIgbGlzdGVuZXJzIGFuZCByZXNvdXJjZXMgKi9cbiAgY2xlYW51cDogKCkgPT4gdm9pZDtcbiAgLyoqIFJvdXRlciBjb250ZXh0IG9iamVjdCBmb3IgdGhlIFJlYWN0IENvbnRleHQgUHJvdmlkZXIgKi9cbiAgY29udGV4dDogUm91dGluZ0NvbnRleHRUeXBlPGFueT4gJiBQcmVwYXJlZEFjY2VzczxSPjtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbXBsZXRlIHJvdXRlciBzeXN0ZW0gZnJvbSByb3V0ZSBjb25maWd1cmF0aW9ucy5cbiAqXG4gKiBUaGlzIHJvdXRlciBpcyBidWlsdCBmcm9tIHRoZSBzYW1lIHByaW1pdGl2ZXMgYXMgcmVhY3Qtcm91dGVyIGJ1dCB3aXRoIGFkZGl0aW9uYWxcbiAqIGZlYXR1cmVzIGZvciBkYXRhIHByZWxvYWRpbmcgYW5kIGNvZGUgc3BsaXR0aW5nLiBFYWNoIHJvdXRlIGNhbiBjb250YWluIGJvdGggYVxuICogQ29tcG9uZW50IGFuZCBhIHByZXBhcmUoKSBmdW5jdGlvbiB0aGF0IGNhbiBwcmVsb2FkIGRhdGEgZm9yIHRoZSBjb21wb25lbnQuXG4gKlxuICogVGhlIHJvdXRlciB3YXRjaGVzIGZvciBjaGFuZ2VzIHRvIHRoZSBjdXJyZW50IGxvY2F0aW9uIHZpYSB0aGUgSFRNTDUgSGlzdG9yeSBBUEksXG4gKiBtYXBzIHRoZSBsb2NhdGlvbiB0byB0aGUgY29ycmVzcG9uZGluZyByb3V0ZSBlbnRyeSwgYW5kIHRoZW4gcHJlbG9hZHMgdGhlIGNvZGVcbiAqIGFuZCBkYXRhIGZvciB0aGUgcm91dGUgYmVmb3JlIHJlbmRlcmluZy5cbiAqXG4gKiBAcGFyYW0gcm91dGVzIC0gQXJyYXkgb2Ygcm91dGUgY29uZmlndXJhdGlvbnNcbiAqIEByZXR1cm5zIE9iamVjdCBjb250YWluaW5nIHRoZSByb3V0ZXIgY29udGV4dCBhbmQgY2xlYW51cCBmdW5jdGlvblxuICpcbiAgcHJlcGFyZWRNYXRjaDogcHJlcGFyZU1hdGNoKHJvdXRlLCBwYXJzZVJhd1F1ZXJ5KGhpc3RvcnkubG9jYXRpb24uc2VhcmNoKSksXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByb3V0ZXMgPSBbXG4gKiAgIHtcbiAqICAgICBwYXRoOiAnL3VzZXJzLzppZCcsXG4gKiAgICAgcmVzb3VyY2VQYWdlOiBnZXRSZXNvdXJjZVBhZ2UoJ1VzZXJQcm9maWxlJywgKCkgPT4gaW1wb3J0KCcuL1VzZXJQcm9maWxlJykpLFxuICogICAgIHByZXBhcmU6ICh7IHZhcmlhYmxlcyB9KSA9PiAoeyB1c2VySWQ6IHZhcmlhYmxlcy5pZCB9KVxuICogICB9XG4gKiBdO1xuICpcbiAqIGNvbnN0IHsgY29udGV4dCwgY2xlYW51cCB9ID0gY3JlYXRlUm91dGVyKHJvdXRlcyk7XG4gKlxuICogLy8gVXNlIGluIFJlYWN0IGFwcFxuICogPFJvdXRpbmdDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0fT5cbiAqICAgPFJvdXRlclJlbmRlcmVyIC8+XG4gKiA8L1JvdXRpbmdDb250ZXh0LlByb3ZpZGVyPlxuICogYGBgXG4gKi9cbi8qKlxuICogQ3JlYXRlIGEgcm91dGVyICh0eXBlZCBvdmVybG9hZCkuIFdoZW4gY2FsbGVkIHdpdGggYSBjb25zdCB0dXBsZSBvZiByb3V0ZXMsIGdlbmVyaWNzIGFyZSBwcmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVJvdXRlcjxSIGV4dGVuZHMgQW55Um91dGVbXT4oXG4gIHJvdXRlczogWy4uLlJdIHwgQW55Um91dGVbXSxcbiAgb3B0czoge1xuICAgIGRldnRvb2xzPzpcbiAgICAgIHwgYm9vbGVhblxuICAgICAgfCB7IGdsb2JhbD86IGJvb2xlYW47IHBhbmVsPzogYm9vbGVhbjsgc2hvcnRjdXQ/OiBzdHJpbmcgfTtcbiAgfSA9IHt9LFxuKTogQ3JlYXRlUm91dGVyUmV0dXJuPFIgZXh0ZW5kcyBBbnlSb3V0ZVtdID8gUiA6IEFueVJvdXRlW10+IHtcbiAgLy8gTm9ybWFsaXplIGRldnRvb2xzIG9wdGlvbnMgbWFpbnRhaW5pbmcgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgbGV0IGRldnRvb2xzR2xvYmFsOiBib29sZWFuO1xuICBsZXQgZGV2dG9vbHNQYW5lbCA9IGZhbHNlO1xuICBsZXQgZGV2dG9vbHNTaG9ydGN1dCA9ICdBbHQrU2hpZnQrUic7XG4gIGlmICh0eXBlb2Ygb3B0cy5kZXZ0b29scyA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBiYXNlRW5hYmxlZCA9ICgoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbidcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICBkZXZ0b29sc0dsb2JhbCA9IG9wdHMuZGV2dG9vbHMuZ2xvYmFsID8/IGJhc2VFbmFibGVkO1xuICAgIGRldnRvb2xzUGFuZWwgPSAhIW9wdHMuZGV2dG9vbHMucGFuZWw7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG9wdHMuZGV2dG9vbHMuc2hvcnRjdXQgPT09ICdzdHJpbmcnICYmXG4gICAgICBvcHRzLmRldnRvb2xzLnNob3J0Y3V0LnRyaW0oKSAhPT0gJydcbiAgICApIHtcbiAgICAgIGRldnRvb2xzU2hvcnRjdXQgPSBvcHRzLmRldnRvb2xzLnNob3J0Y3V0O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBib29sZWFuIG9yIHVuZGVmaW5lZFxuICAgIGNvbnN0IGVuYWJsZWQgPSAoKCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvcHRzLmRldnRvb2xzID09PSAnYm9vbGVhbicpIHJldHVybiBvcHRzLmRldnRvb2xzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pKCk7XG4gICAgZGV2dG9vbHNHbG9iYWwgPSBlbmFibGVkO1xuICB9XG4gIC8vIEluaXRpYWxpemUgYnJvd3NlciBoaXN0b3J5IG1hbmFnZXJcbiAgY29uc3QgaGlzdG9yeSA9IG5ldyBCcm93c2VySGlzdG9yeSgpO1xuXG4gIC8vIEJ1aWxkIGEgZmxhdCBsaXN0IG9mIHJvdXRlcyBmb3IgZWZmaWNpZW50IG1hdGNoaW5nXG4gIGNvbnN0IGZsYXRSb3V0ZXMgPSBidWlsZFJvdXRlcyhyb3V0ZXMpO1xuXG4gIC8vIEZpbmQgdGhlIGluaXRpYWwgcm91dGUgbWF0Y2ggYW5kIHByZXBhcmUgaXQgZm9yIHJlbmRlcmluZ1xuICBjb25zdCByb3V0ZSA9IGdldE1hdGNoZWRSb3V0ZShmbGF0Um91dGVzLCBoaXN0b3J5LmxvY2F0aW9uKTtcbiAgY29uc3QgaW5pdGlhbFJhd1F1ZXJ5ID0gcGFyc2VSYXdRdWVyeShoaXN0b3J5LmxvY2F0aW9uLnNlYXJjaCk7XG4gIC8vIERldGVybWluZSB1bmlmaWVkIHNjaGVtYSAocXVlcnlTY2hlbWEpIGZyb20gZGVlcGVzdCByb3V0ZVxuICBsZXQgaW5pdGlhbFVuaWZpZWRTY2hlbWE6IGFueTtcbiAgaWYgKHJvdXRlICE9IG51bGwpIHtcbiAgICBjb25zdCBjb2xsZWN0ZWQ6IGFueVtdID0gW107XG4gICAgZm9yIChjb25zdCByIG9mIHJvdXRlLnJvdXRlLnJvdXRlcykge1xuICAgICAgY29uc3QgbWF5YmUgPSAociBhcyB1bmtub3duIGFzIHsgcXVlcnlTY2hlbWE/OiB1bmtub3duIH0pLnF1ZXJ5U2NoZW1hO1xuICAgICAgaWYgKG1heWJlICE9IG51bGwpIGNvbGxlY3RlZC5wdXNoKG1heWJlKTtcbiAgICB9XG4gICAgaWYgKGNvbGxlY3RlZC5sZW5ndGggPiAwKSBpbml0aWFsVW5pZmllZFNjaGVtYSA9IGNvbGxlY3RlZC5hdCgtMSk7XG4gIH1cbiAgbGV0IGluaXRpYWxGaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgbGV0IGluaXRpYWxGaWx0ZXJEaWFnbm9zdGljczogYW55W10gfCB1bmRlZmluZWQ7XG4gIGlmIChpbml0aWFsVW5pZmllZFNjaGVtYSAhPSBudWxsKSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VGaWx0ZXJzKGhpc3RvcnkubG9jYXRpb24uc2VhcmNoLCBpbml0aWFsVW5pZmllZFNjaGVtYSk7XG4gICAgaW5pdGlhbEZpbHRlcnMgPSBwYXJzZWQuZmlsdGVycyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGluaXRpYWxGaWx0ZXJEaWFnbm9zdGljcyA9IHBhcnNlZC5kaWFnbm9zdGljcyBhcyB1bmtub3duW107XG4gIH1cbiAgY29uc3QgcHJlcGFyZWRNYXRjaCA9IHByZXBhcmVNYXRjaChyb3V0ZSwgaW5pdGlhbEZpbHRlcnMpO1xuICAvLyBIZWxwZXIgdG8gYnVpbGQgdGhlIHJhdyBxdWVyeSBvYmplY3QgZnJvbSBhIHNlYXJjaCBzdHJpbmdcbiAgbGV0IGN1cnJlbnRFbnRyeTogUm91dGVFbnRyeTxhbnk+ID0ge1xuICAgIGZvcmNlUmVyZW5kZXI6IGZhbHNlLFxuICAgIGxvY2F0aW9uOiBoaXN0b3J5LmxvY2F0aW9uLFxuICAgIHJvdXRlLFxuICAgIHByZXBhcmVkTWF0Y2gsXG4gICAgcmF3U2VhcmNoOiBoaXN0b3J5LmxvY2F0aW9uLnNlYXJjaCxcbiAgICBxdWVyeTogaW5pdGlhbFJhd1F1ZXJ5LFxuICAgIC8vIHR5cGVkUXVlcnkgcmVtb3ZlZCAodW5pZmllZCBpbnRvIGZpbHRlcnMvcXVlcnkpXG4gICAgZmlsdGVyczogaW5pdGlhbEZpbHRlcnMsXG4gICAgZmlsdGVyRGlhZ25vc3RpY3M6IGluaXRpYWxGaWx0ZXJEaWFnbm9zdGljcyxcbiAgICBhY3RpdmVRdWVyeVNjaGVtYTogaW5pdGlhbFVuaWZpZWRTY2hlbWEsXG4gIH07XG5cbiAgLy8gSW5pdGlhbCBub3JtYWxpemF0aW9uIHBhc3MgKGUuZy4sIGNsYW1wIHBhZ2UpXG4gIGNvbnN0IGluaXRUeXBlZCA9IGN1cnJlbnRFbnRyeS5maWx0ZXJzIGFzIHVua25vd24gYXNcbiAgICB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgfCB1bmRlZmluZWQ7XG4gIGxldCBpbml0UGFnZU51bWVyaWM6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgaWYgKGluaXRUeXBlZCAhPSBudWxsKSB7XG4gICAgY29uc3QgcmF3UGFnZSA9IGluaXRUeXBlZC5wYWdlO1xuICAgIGlmICh0eXBlb2YgcmF3UGFnZSA9PT0gJ251bWJlcicpIGluaXRQYWdlTnVtZXJpYyA9IHJhd1BhZ2U7XG4gICAgZWxzZSBpZiAoXG4gICAgICByYXdQYWdlICE9IG51bGwgJiZcbiAgICAgIHR5cGVvZiByYXdQYWdlID09PSAnb2JqZWN0JyAmJlxuICAgICAgIUFycmF5LmlzQXJyYXkocmF3UGFnZSkgJiZcbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyYXdQYWdlLCAnZXEnKSAmJlxuICAgICAgdHlwZW9mIChyYXdQYWdlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5lcSA9PT0gJ251bWJlcidcbiAgICApIHtcbiAgICAgIGluaXRQYWdlTnVtZXJpYyA9IChyYXdQYWdlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5lcSBhcyBudW1iZXI7XG4gICAgfVxuICB9XG4gIGlmIChcbiAgICB0eXBlb2YgaW5pdFBhZ2VOdW1lcmljID09PSAnbnVtYmVyJyAmJlxuICAgIGluaXRQYWdlTnVtZXJpYyA8IDEgJiZcbiAgICBpbml0aWFsVW5pZmllZFNjaGVtYSAhPSBudWxsICYmXG4gICAgaW5pdFR5cGVkICE9IG51bGxcbiAgKSB7XG4gICAgY29uc3Qgbm9ybSA9IHsgLi4uaW5pdFR5cGVkLCBwYWdlOiB7IGVxOiAxIH0gfSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjdXJyZW50RW50cnkuZmlsdGVycyA9IG5vcm07IC8vIGltbWVkaWF0ZSB2aXNpYmlsaXR5XG4gICAgY29uc3Qgbm9ybWFsaXplZFNlYXJjaCA9IGJ1aWxkQ29tYmluZWRTZWFyY2goe1xuICAgICAgZmlsdGVyczogbm9ybSxcbiAgICAgIHF1ZXJ5U2NoZW1hOiBpbml0aWFsVW5pZmllZFNjaGVtYSxcbiAgICB9KTsgLy8gcmV0dXJucyAnJyBvciBzdHJpbmcgc3RhcnRpbmcgd2l0aCAnPydcbiAgICBpZiAobm9ybWFsaXplZFNlYXJjaCAhPT0gaGlzdG9yeS5sb2NhdGlvbi5zZWFyY2gpIHtcbiAgICAgIGhpc3Rvcnkuc2V0KHtcbiAgICAgICAgcGF0aG5hbWU6IGhpc3RvcnkubG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgIHNlYXJjaDogbm9ybWFsaXplZFNlYXJjaCxcbiAgICAgICAgaGFzaDogJycsXG4gICAgICB9KTtcbiAgICAgIC8vIFVwZGF0ZSBjdXJyZW50RW50cnkubG9jYXRpb24gdG8gcmVmbGVjdCBuZXcgc2VhcmNoIGRpcmVjdGx5IChoaXN0b3J5LnNldCB0cmlnZ2VycyBhc3luYyBzdWJzY3JpYmVyKVxuICAgICAgY3VycmVudEVudHJ5ID0ge1xuICAgICAgICAuLi5jdXJyZW50RW50cnksXG4gICAgICAgIGxvY2F0aW9uOiB7IC4uLmN1cnJlbnRFbnRyeS5sb2NhdGlvbiwgc2VhcmNoOiBub3JtYWxpemVkU2VhcmNoIH0sXG4gICAgICAgIHJhd1NlYXJjaDogbm9ybWFsaXplZFNlYXJjaCxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8gTWFpbnRhaW4gYSBzZXQgb2Ygc3Vic2NyaWJlcnMgdG8gdGhlIGFjdGl2ZSByb3V0ZSBlbnRyeVxuICBsZXQgbmV4dElkID0gMDtcbiAgY29uc3Qgc3Vic2NyaWJlcnMgPSBuZXcgTWFwPG51bWJlciwgU3Vic2NyaWJlQ2FsbGJhY2s8YW55Pj4oKTtcblxuICAvLyBMaXN0ZW4gZm9yIGxvY2F0aW9uIGNoYW5nZXMsIG1hdGNoIHRvIHRoZSByb3V0ZSBlbnRyeSwgcHJlcGFyZSB0aGUgZW50cnksXG4gIC8vIGFuZCBub3RpZnkgc3Vic2NyaWJlcnMuIFRoaXMgcGF0dGVybiBlbnN1cmVzIHRoYXQgZGF0YS1sb2FkaW5nXG4gIC8vIG9jY3VycyAqb3V0c2lkZSogb2YgLSBhbmQgKmJlZm9yZSogLSByZW5kZXJpbmcuXG4gIGNvbnN0IGNsZWFudXAgPSBoaXN0b3J5LnN1YnNjcmliZSgobG9jYXRpb24sIGZvcmNlUmVyZW5kZXIpID0+IHtcbiAgICBjb25zdCBzYW1lUGF0aG5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZSA9PT0gY3VycmVudEVudHJ5LmxvY2F0aW9uLnBhdGhuYW1lO1xuICAgIGNvbnN0IHNhbWVTZWFyY2ggPSBsb2NhdGlvbi5zZWFyY2ggPT09IGN1cnJlbnRFbnRyeS5yYXdTZWFyY2g7XG5cbiAgICBpZiAoIWZvcmNlUmVyZW5kZXIgJiYgc2FtZVBhdGhuYW1lICYmIHNhbWVTZWFyY2gpIHtcbiAgICAgIC8vIE5vdGhpbmcgY2hhbmdlZCB0aGF0IHdlIGNhcmUgYWJvdXRcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiBvbmx5IHRoZSBzZWFyY2ggY2hhbmdlZCB3ZSBzdGlsbCB3YW50IHRvIHByb3BhZ2F0ZSB0aGUgY2hhbmdlLlxuICAgIC8vIEtlZXAgdGhlIGV4aXN0aW5nIHByZXBhcmVkTWF0Y2ggd2hlbiBwYXRobmFtZSBpcyBpZGVudGljYWwgdG8gYXZvaWQgcmVkdW5kYW50IHdvcmsuXG4gICAgbGV0IG5leHRQcmVwYXJlZE1hdGNoID0gY3VycmVudEVudHJ5LnByZXBhcmVkTWF0Y2g7XG4gICAgbGV0IG5leHRSb3V0ZSA9IGN1cnJlbnRFbnRyeS5yb3V0ZTtcblxuICAgIGlmICghc2FtZVBhdGhuYW1lKSB7XG4gICAgICAvLyBQYXRoIGNoYW5nZWQ6IHJlY29tcHV0ZSBtYXRjaCArIHByZXBhcmVkIGRhdGEgaW5jbHVkaW5nIHF1ZXJ5XG4gICAgICBuZXh0Um91dGUgPSBnZXRNYXRjaGVkUm91dGUoZmxhdFJvdXRlcywgaGlzdG9yeS5sb2NhdGlvbik7XG4gICAgICAvLyB3ZSB3aWxsIHNldCBiZWxvdyBhZnRlciBjb21wdXRpbmcgdHlwZWQgcXVlcnlcbiAgICB9XG5cbiAgICAvLyBCdWlsZCByYXcgcXVlcnkgb2JqZWN0IChiYXNpYyBhZ2dyZWdhdGlvbikgZnJvbSBsb2NhdGlvbi5zZWFyY2hcbiAgICBjb25zdCBxdWVyeSA9IHBhcnNlUmF3UXVlcnkobG9jYXRpb24uc2VhcmNoKTtcbiAgICAvLyBEZXRlcm1pbmUgc2NoZW1hIGZyb20gZGVlcGVzdCBtYXRjaGVkIHJvdXRlXG4gICAgbGV0IHF1ZXJ5U2NoZW1hOiBhbnk7XG4gICAgaWYgKG5leHRSb3V0ZSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBjb2xsZWN0ZWQ6IGFueVtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IHIgb2YgbmV4dFJvdXRlLnJvdXRlLnJvdXRlcykge1xuICAgICAgICBjb25zdCBtYXliZUYgPSAociBhcyB1bmtub3duIGFzIHsgcXVlcnlTY2hlbWE/OiB1bmtub3duIH0pLnF1ZXJ5U2NoZW1hO1xuICAgICAgICBpZiAobWF5YmVGICE9IG51bGwpIGNvbGxlY3RlZC5wdXNoKG1heWJlRik7XG4gICAgICB9XG4gICAgICBpZiAoY29sbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcXVlcnlTY2hlbWEgPSBjb2xsZWN0ZWQuYXQoLTEpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBQYXJzZSB1bmlmaWVkIGZpbHRlcnNcbiAgICBsZXQgZmlsdGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgbGV0IGZpbHRlckRpYWdub3N0aWNzOiBhbnlbXSB8IHVuZGVmaW5lZDtcbiAgICBpZiAocXVlcnlTY2hlbWEgIT0gbnVsbCkge1xuICAgICAgY29uc3QgcGFyc2VkRiA9IHBhcnNlRmlsdGVycyhsb2NhdGlvbi5zZWFyY2gsIHF1ZXJ5U2NoZW1hKTtcbiAgICAgIGZpbHRlcnMgPSBwYXJzZWRGLmZpbHRlcnMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGZpbHRlckRpYWdub3N0aWNzID0gcGFyc2VkRi5kaWFnbm9zdGljcyBhcyB1bmtub3duW107XG4gICAgfVxuICAgIC8vIE5vcm1hbGl6YXRpb246IGNsYW1wIHBhZ2UgPj0gMSBpZiBudW1lcmljIHBhZ2UgcHJlc2VudFxuICAgIGxldCBub3JtYWxpemVkID0gZmFsc2U7XG4gICAgbGV0IHBnOiB1bmtub3duO1xuICAgIGlmIChmaWx0ZXJzICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gZmlsdGVycztcbiAgICAgIGNvbnN0IG1heWJlID0gZi5wYWdlO1xuICAgICAgaWYgKFxuICAgICAgICBtYXliZSAhPSBudWxsICYmXG4gICAgICAgIHR5cGVvZiBtYXliZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgIUFycmF5LmlzQXJyYXkobWF5YmUpICYmXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtYXliZSwgJ2VxJylcbiAgICAgICkge1xuICAgICAgICBwZyA9IChtYXliZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuZXE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZyA9IG1heWJlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHBnID09PSAnbnVtYmVyJyAmJiBwZyA8IDEpIHtcbiAgICAgIGNvbnN0IGNsb25lID0geyAuLi4oZmlsdGVycyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KSwgcGFnZTogeyBlcTogMSB9IH07XG4gICAgICBmaWx0ZXJzID0gY2xvbmU7XG4gICAgICBub3JtYWxpemVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBJZiBvbmx5IHRoZSBzZWFyY2ggY2hhbmdlZCAoc2FtZSBwYXRobmFtZSkgd2Ugc3RpbGwgbmVlZCB0byByZS1ydW4gcHJlcGFyZVxuICAgIGlmICghc2FtZVBhdGhuYW1lIHx8ICFzYW1lU2VhcmNoKSB7XG4gICAgICBuZXh0UHJlcGFyZWRNYXRjaCA9IHByZXBhcmVNYXRjaChuZXh0Um91dGUsIHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dEVudHJ5OiBSb3V0ZUVudHJ5PGFueT4gPSB7XG4gICAgICBmb3JjZVJlcmVuZGVyOiBmb3JjZVJlcmVuZGVyIHx8IChzYW1lUGF0aG5hbWUgJiYgIXNhbWVTZWFyY2gpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICByb3V0ZTogbmV4dFJvdXRlLFxuICAgICAgcHJlcGFyZWRNYXRjaDogbmV4dFByZXBhcmVkTWF0Y2gsXG4gICAgICByYXdTZWFyY2g6IGxvY2F0aW9uLnNlYXJjaCxcbiAgICAgIHF1ZXJ5LFxuICAgICAgZmlsdGVycyxcbiAgICAgIGZpbHRlckRpYWdub3N0aWNzLFxuICAgICAgYWN0aXZlUXVlcnlTY2hlbWE6IHF1ZXJ5U2NoZW1hLFxuICAgIH07XG5cbiAgICAvLyBJZiBub3JtYWxpemF0aW9uIGNoYW5nZWQgdGhlIHR5cGVkIHF1ZXJ5IHdlIHRyaWdnZXIgYSByZXBsYWNlIHdpdGggbm9ybWFsaXplZCBzZWFyY2hcbiAgICBpZiAobm9ybWFsaXplZCAmJiBxdWVyeVNjaGVtYSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkU2VhcmNoID0gYnVpbGRDb21iaW5lZFNlYXJjaCh7XG4gICAgICAgIGZpbHRlcnMsXG4gICAgICAgIHF1ZXJ5U2NoZW1hLFxuICAgICAgfSk7XG4gICAgICBpZiAobm9ybWFsaXplZFNlYXJjaCAhPT0gbG9jYXRpb24uc2VhcmNoKSB7XG4gICAgICAgIGxldCBuZXh0U2VhcmNoU3RyID0gbm9ybWFsaXplZFNlYXJjaDtcbiAgICAgICAgaWYgKCFuZXh0U2VhcmNoU3RyLnN0YXJ0c1dpdGgoJz8nKSkge1xuICAgICAgICAgIGlmIChuZXh0U2VhcmNoU3RyID09PSAnJykgbmV4dFNlYXJjaFN0ciA9ICcnO1xuICAgICAgICAgIGVsc2UgbmV4dFNlYXJjaFN0ciA9IGA/JHtuZXh0U2VhcmNoU3RyfWA7XG4gICAgICAgIH1cbiAgICAgICAgaGlzdG9yeS5zZXQoe1xuICAgICAgICAgIHBhdGhuYW1lOiBsb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgICBzZWFyY2g6IG5leHRTZWFyY2hTdHIsXG4gICAgICAgICAgaGFzaDogJycsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47IC8vIGVhcmx5OiBzdWJzZXF1ZW50IHNldCB3aWxsIHRyaWdnZXIgcmVydW5cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgY3VycmVudCBlbnRyeSBhbmQgbm90aWZ5IGFsbCBzdWJzY3JpYmVyc1xuICAgIGN1cnJlbnRFbnRyeSA9IG5leHRFbnRyeTtcbiAgICBzdWJzY3JpYmVycy5mb3JFYWNoKChjYWxsYmFjaykgPT4ge1xuICAgICAgY2FsbGJhY2sobmV4dEVudHJ5KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gVGhlIHJvdXRlciBjb250ZXh0IG9iamVjdCB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIFJlYWN0IENvbnRleHRcbiAgY29uc3QgY29udGV4dDogUm91dGluZ0NvbnRleHRUeXBlPGFueT4gJlxuICAgIFByZXBhcmVkQWNjZXNzPEFueVJvdXRlW10+ICYge1xuICAgICAgbmF2aWdhdGU6IE5hdmlnYXRlT3ZlcmxvYWRzPEFueVJvdXRlW10+O1xuICAgIH0gPSB7XG4gICAgaGlzdG9yeSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gY3VycmVudEVudHJ5O1xuICAgIH0sXG4gICAgcHJlbG9hZENvZGUocGF0aG5hbWUpIHtcbiAgICAgIC8vIFByZWxvYWQganVzdCB0aGUgY29tcG9uZW50IGNvZGUgZm9yIGEgcm91dGUgd2l0aG91dCBzdG9yaW5nIHRoZSByZXN1bHRcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBnZXRNYXRjaGVkUm91dGUoZmxhdFJvdXRlcywge1xuICAgICAgICAuLi53aW5kb3cubG9jYXRpb24sXG4gICAgICAgIHBhdGhuYW1lLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChtYXRjaGVzID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBMb2FkIGFsbCByZXNvdXJjZSBwYWdlcyBmb3IgdGhlIG1hdGNoZWQgcm91dGVcbiAgICAgIG1hdGNoZXMucm91dGUucm91dGVzLmZvckVhY2goKHsgcmVzb3VyY2VQYWdlIH0pID0+IHtcbiAgICAgICAgaWYgKHJlc291cmNlUGFnZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICAgICAgcmVzb3VyY2VQYWdlLmxvYWQoKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgcHJlbG9hZChwYXRobmFtZSkge1xuICAgICAgLy8gUHJlbG9hZCBib3RoIHRoZSBjb21wb25lbnQgY29kZSBhbmQgcHJlcGFyZWQgZGF0YSBmb3IgYSByb3V0ZVxuICAgICAgY29uc3QgbWF0Y2hlcyA9IGdldE1hdGNoZWRSb3V0ZShmbGF0Um91dGVzLCB7XG4gICAgICAgIC4uLndpbmRvdy5sb2NhdGlvbixcbiAgICAgICAgcGF0aG5hbWUsXG4gICAgICB9KTtcbiAgICAgIHByZXBhcmVNYXRjaChtYXRjaGVzKTtcbiAgICB9LFxuICAgIHN1YnNjcmliZShjYWxsYmFjaykge1xuICAgICAgLy8gQWRkIGEgbmV3IHN1YnNjcmliZXIgYW5kIHJldHVybiB1bnN1YnNjcmliZSBmdW5jdGlvblxuICAgICAgbmV4dElkICs9IDE7XG4gICAgICBjb25zdCBpZCA9IG5leHRJZDtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLXN0eWxlXG4gICAgICBjb25zdCBkaXNwb3NlID0gKCkgPT4ge1xuICAgICAgICBzdWJzY3JpYmVycy5kZWxldGUoaWQpO1xuICAgICAgfTtcbiAgICAgIHN1YnNjcmliZXJzLnNldChpZCwgY2FsbGJhY2spO1xuICAgICAgcmV0dXJuIGRpc3Bvc2U7XG4gICAgfSxcbiAgICBuYXZpZ2F0ZSh7IHBhdGhuYW1lLCBxdWVyeSwgZmlsdGVyczogbmF2RmlsdGVycywgcmVwbGFjZSB9OiBhbnkpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBjdXJyZW50RW50cnk7XG4gICAgICBjb25zdCB0YXJnZXRQYXRobmFtZSA9IHBhdGhuYW1lID8/IGN1cnJlbnQubG9jYXRpb24ucGF0aG5hbWU7XG4gICAgICAvLyBEZXRlcm1pbmUgc2NoZW1hIG9mIGRlc3RpbmF0aW9uIChpZiBzYW1lIHBhdGggYW5kIHdlIGhhdmUgcm91dGUgd2UgY2FuIHJldXNlLCBlbHNlIHJlbWF0Y2gpXG4gICAgICBsZXQgZGVzdFNjaGVtYTogYW55O1xuICAgICAgLyoqIENvbGxlY3QgZGVlcGVzdCBxdWVyeSBzY2hlbWEgZnJvbSByb3V0ZSBjaGFpbiAqL1xuICAgICAgZnVuY3Rpb24gY29sbGVjdFNjaGVtYShyb3V0ZXNBcnI6IGFueVtdIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGlmIChyb3V0ZXNBcnIgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2xsZWN0ZWQ6IGFueVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgciBvZiByb3V0ZXNBcnIpIHtcbiAgICAgICAgICBjb25zdCBtYXliZUYgPSAociBhcyB1bmtub3duIGFzIHsgcXVlcnlTY2hlbWE/OiB1bmtub3duIH0pXG4gICAgICAgICAgICAucXVlcnlTY2hlbWE7XG4gICAgICAgICAgaWYgKG1heWJlRiAhPSBudWxsKSBjb2xsZWN0ZWQucHVzaChtYXliZUYpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2xsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGRlc3RTY2hlbWEgPSBjb2xsZWN0ZWQuYXQoLTEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBBbHdheXMgYXR0ZW1wdCBmdWxsIG1hdGNoIGZvciBkZXN0aW5hdGlvbiB0byBlbnN1cmUgc2NoZW1hIHByZXNlbnQgZXZlbiBpZiBzYW1lIHBhdGhuYW1lXG4gICAgICBjb25zdCBkZXN0Um91dGUgPSBnZXRNYXRjaGVkUm91dGUoZmxhdFJvdXRlcywge1xuICAgICAgICAuLi53aW5kb3cubG9jYXRpb24sXG4gICAgICAgIHBhdGhuYW1lOiB0YXJnZXRQYXRobmFtZSxcbiAgICAgIH0pO1xuICAgICAgY29sbGVjdFNjaGVtYShkZXN0Um91dGU/LnJvdXRlLnJvdXRlcyk7XG4gICAgICAvLyBGYWxsYmFjayB0byBjdXJyZW50bHkgYWN0aXZlIHNjaGVtYSBpZiBkZXN0aW5hdGlvbiBzY2hlbWEgbm90IGZvdW5kIChlLmcuLCByYWNlIGNvbmRpdGlvbnMpXG4gICAgICBkZXN0U2NoZW1hID8/PSBjdXJyZW50LmFjdGl2ZVF1ZXJ5U2NoZW1hO1xuICAgICAgY29uc3QgZWZmZWN0aXZlRmlsdGVycyA9IG5hdkZpbHRlcnMgPz8gY3VycmVudC5maWx0ZXJzO1xuICAgICAgLy8gVHJlYXQgbGVnYWN5IG5hdmlnYXRlKHsgcXVlcnkgfSkgYXMgZmlsdGVycyBpbiB1bmlmaWVkIG1vZGVsIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICBjb25zdCBmaWx0ZXJzSW5wdXQgPVxuICAgICAgICBlZmZlY3RpdmVGaWx0ZXJzID8/IChxdWVyeSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCk7XG4gICAgICBjb25zdCBzZWFyY2ggPSBidWlsZENvbWJpbmVkU2VhcmNoKHtcbiAgICAgICAgZmlsdGVyczogZmlsdGVyc0lucHV0LFxuICAgICAgICBxdWVyeVNjaGVtYTogZGVzdFNjaGVtYSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbG9jYXRpb25PYmogPSB7IHBhdGhuYW1lOiB0YXJnZXRQYXRobmFtZSwgc2VhcmNoLCBoYXNoOiAnJyB9O1xuICAgICAgaWYgKHJlcGxhY2UgPT09IHRydWUpIHtcbiAgICAgICAgaGlzdG9yeS5zZXQobG9jYXRpb25PYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlzdG9yeS5wdXNoKGxvY2F0aW9uT2JqKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldFByZXBhcmVkKHBhdGgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gY3VycmVudEVudHJ5O1xuICAgICAgICAvLyBGaW5kIGxhc3QgcHJlcGFyZWQgcm91dGUgd2l0aCBtYXRjaGluZyBwYXRoXG4gICAgICAgIGZvciAoY29uc3QgcHIgb2YgZW50cnkucHJlcGFyZWRNYXRjaC5yb3V0ZXMpIHtcbiAgICAgICAgICBpZiAocHIucGF0aCA9PT0gcGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHByLnByZXBhcmVkIGFzIGFueTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0sXG4gICAgLy8gZ2V0VHlwZWRRdWVyeSByZW1vdmVkXG4gIH07XG5cbiAgLy8gUmV0dXJuIGJvdGggdGhlIGNvbnRleHQgb2JqZWN0IGFuZCBhIGNsZWFudXAgZnVuY3Rpb25cbiAgLy8gRGV2dG9vbHMgZXhwb3N1cmUgKGRldmVsb3BtZW50IG9ubHkpXG4gIGlmIChkZXZ0b29sc0dsb2JhbCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgKHdpbmRvdyBhcyB1bmtub3duIGFzIHsgX19QTFVNSUxFX1JPVVRFUl9fPzogYW55IH0pLl9fUExVTUlMRV9ST1VURVJfXyA9XG4gICAgICAgICAge1xuICAgICAgICAgICAgZ2V0OiBjb250ZXh0LmdldCxcbiAgICAgICAgICAgIHN1YnNjcmliZTogY29udGV4dC5zdWJzY3JpYmUsXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8qIGlnbm9yZSAqL1xuICAgIH1cbiAgfVxuICAvLyBPcHRpb25hbCBpbi1wYWdlIGRldnRvb2xzIHBhbmVsIChsaWdodHdlaWdodCBvdmVybGF5KVxuICBpZiAoZGV2dG9vbHNQYW5lbCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtcGx1bWlsZS1yb3V0ZXItZGV2dG9vbHMtcGFuZWxdJykgPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgaG9zdC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcGx1bWlsZS1yb3V0ZXItZGV2dG9vbHMtcGFuZWwnLCAnJyk7XG4gICAgICAgIGhvc3Quc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICAgICAgICBob3N0LnN0eWxlLnpJbmRleCA9ICcyMTQ3NDgzNjQ2JztcbiAgICAgICAgaG9zdC5zdHlsZS5ib3R0b20gPSAnOHB4JztcbiAgICAgICAgaG9zdC5zdHlsZS5yaWdodCA9ICc4cHgnO1xuICAgICAgICBob3N0LnN0eWxlLmZvbnRGYW1pbHkgPVxuICAgICAgICAgICd1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJMaWJlcmF0aW9uIE1vbm9cIiwgbW9ub3NwYWNlJztcbiAgICAgICAgaG9zdC5zdHlsZS5mb250U2l6ZSA9ICcxMnB4JztcbiAgICAgICAgaG9zdC5zdHlsZS5saW5lSGVpZ2h0ID0gJzEuMyc7XG4gICAgICAgIGhvc3Quc3R5bGUuY29sb3IgPSAnIzExMSc7XG4gICAgICAgIGhvc3Quc3R5bGUuYmFja2dyb3VuZCA9ICd0cmFuc3BhcmVudCc7XG4gICAgICAgIGhvc3Quc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcbiAgICAgICAgY29uc3Qgc2hhZG93ID0gaG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiAnb3BlbicgfSk7XG4gICAgICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHBhbmVsLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XG4gICAgICAgIHBhbmVsLnN0eWxlLm1pbldpZHRoID0gJzI2MHB4JztcbiAgICAgICAgcGFuZWwuc3R5bGUubWF4V2lkdGggPSAnNDIwcHgnO1xuICAgICAgICBwYW5lbC5zdHlsZS5tYXhIZWlnaHQgPSAnNTB2aCc7XG4gICAgICAgIHBhbmVsLnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nO1xuICAgICAgICBwYW5lbC5zdHlsZS5iYWNrZ3JvdW5kID0gJ3JnYmEoMjU1LDI1NSwyNTUsMC45NSknO1xuICAgICAgICBwYW5lbC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICNjY2MnO1xuICAgICAgICBwYW5lbC5zdHlsZS5ib3JkZXJSYWRpdXMgPSAnNnB4JztcbiAgICAgICAgcGFuZWwuc3R5bGUuYm94U2hhZG93ID0gJzAgMnB4IDhweCByZ2JhKDAsMCwwLDAuMTUpJztcbiAgICAgICAgcGFuZWwuc3R5bGUucGFkZGluZyA9ICc2cHggOHB4IDhweCc7XG4gICAgICAgIHBhbmVsLnN0eWxlLmJhY2tkcm9wRmlsdGVyID0gJ2JsdXIoNHB4KSc7XG4gICAgICAgIHBhbmVsLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIHBhbmVsLnN0eWxlLmZsZXhEaXJlY3Rpb24gPSAnY29sdW1uJztcbiAgICAgICAgcGFuZWwuc3R5bGUucm93R2FwID0gJzRweCc7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBoZWFkZXIuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgaGVhZGVyLnN0eWxlLmFsaWduSXRlbXMgPSAnY2VudGVyJztcbiAgICAgICAgaGVhZGVyLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ3NwYWNlLWJldHdlZW4nO1xuICAgICAgICBoZWFkZXIuc3R5bGUuZ2FwID0gJzhweCc7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICB0aXRsZS50ZXh0Q29udGVudCA9ICdQbHVtaWxlIFJvdXRlcic7XG4gICAgICAgIHRpdGxlLnN0eWxlLmZvbnRXZWlnaHQgPSAnNjAwJztcbiAgICAgICAgY29uc3QgYnV0dG9ucyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBidXR0b25zLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIGJ1dHRvbnMuc3R5bGUuZ2FwID0gJzRweCc7XG4gICAgICAgIGNvbnN0IGNvbGxhcHNlQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgIGNvbGxhcHNlQnRuLnRleHRDb250ZW50ID0gJ+KIkic7XG4gICAgICAgIGNvbnN0IGNsb3NlQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgIGNsb3NlQnRuLnRleHRDb250ZW50ID0gJ8OXJztcbiAgICAgICAgY29uc3QgYnRuczogSFRNTEJ1dHRvbkVsZW1lbnRbXSA9IFtjb2xsYXBzZUJ0biwgY2xvc2VCdG5dO1xuICAgICAgICBmb3IgKGNvbnN0IGIgb2YgYnRucykge1xuICAgICAgICAgIGIuc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xuICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9ICcjZWVlJztcbiAgICAgICAgICBiLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgI2NjYyc7XG4gICAgICAgICAgYi5zdHlsZS5ib3JkZXJSYWRpdXMgPSAnNHB4JztcbiAgICAgICAgICBiLnN0eWxlLmZvbnRTaXplID0gJzExcHgnO1xuICAgICAgICAgIGIuc3R5bGUubGluZUhlaWdodCA9ICcxJztcbiAgICAgICAgICBiLnN0eWxlLnBhZGRpbmcgPSAnMnB4IDVweCc7XG4gICAgICAgIH1cbiAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKHRpdGxlKTtcbiAgICAgICAgYnV0dG9ucy5hcHBlbmRDaGlsZChjb2xsYXBzZUJ0bik7XG4gICAgICAgIGJ1dHRvbnMuYXBwZW5kQ2hpbGQoY2xvc2VCdG4pO1xuICAgICAgICBoZWFkZXIuYXBwZW5kQ2hpbGQoYnV0dG9ucyk7XG4gICAgICAgIGNvbnN0IHBhdGhFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBwYXRoRWwuc3R5bGUud2hpdGVTcGFjZSA9ICdub3dyYXAnO1xuICAgICAgICBjb25zdCB2YXJzRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTtcbiAgICAgICAgY29uc3QgcXVlcnlFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ByZScpO1xuICAgICAgICAvLyB0eXBlZCBxdWVyeSBlbGVtZW50IHJlbW92ZWRcbiAgICAgICAgY29uc3QgZmlsdGVyc0VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncHJlJyk7XG4gICAgICAgIGNvbnN0IGZpbHRlckRpYWdFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ByZScpO1xuICAgICAgICAvLyBUaW1lbGluZSBjb250YWluZXJcbiAgICAgICAgY29uc3QgdGltZWxpbmVXcmFwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRpbWVsaW5lV3JhcC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICB0aW1lbGluZVdyYXAuc3R5bGUuZmxleERpcmVjdGlvbiA9ICdjb2x1bW4nO1xuICAgICAgICB0aW1lbGluZVdyYXAuc3R5bGUuZ2FwID0gJzJweCc7XG4gICAgICAgIHRpbWVsaW5lV3JhcC5zdHlsZS5tYXJnaW5Ub3AgPSAnNHB4JztcbiAgICAgICAgY29uc3QgdGltZWxpbmVIZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGltZWxpbmVIZWFkZXIudGV4dENvbnRlbnQgPSAnVGltZWxpbmUgKHF1ZXJ5IGNoYW5nZXMpJztcbiAgICAgICAgdGltZWxpbmVIZWFkZXIuc3R5bGUuZm9udFdlaWdodCA9ICc2MDAnO1xuICAgICAgICB0aW1lbGluZUhlYWRlci5zdHlsZS5mb250U2l6ZSA9ICcxMXB4JztcbiAgICAgICAgY29uc3QgdGltZWxpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGltZWxpbmUuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgdGltZWxpbmUuc3R5bGUuZmxleERpcmVjdGlvbiA9ICdjb2x1bW4tcmV2ZXJzZSc7IC8vIG5ld2VzdCBvbiB0b3AgdmlzdWFsbHkgd2hpbGUgYXBwZW5kaW5nIGF0IGVuZCBmb3IgY2hlYXBlciBvcHNcbiAgICAgICAgdGltZWxpbmUuc3R5bGUubWF4SGVpZ2h0ID0gJzE0MHB4JztcbiAgICAgICAgdGltZWxpbmUuc3R5bGUub3ZlcmZsb3dZID0gJ2F1dG8nO1xuICAgICAgICB0aW1lbGluZS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICNlMmUyZTInO1xuICAgICAgICB0aW1lbGluZS5zdHlsZS5ib3JkZXJSYWRpdXMgPSAnNHB4JztcbiAgICAgICAgdGltZWxpbmUuc3R5bGUuYmFja2dyb3VuZCA9ICcjZmFmYmZjJztcbiAgICAgICAgdGltZWxpbmUuc3R5bGUuZm9udEZhbWlseSA9ICdpbmhlcml0JztcbiAgICAgICAgdGltZWxpbmUuc3R5bGUuZm9udFNpemUgPSAnMTFweCc7XG4gICAgICAgIHRpbWVsaW5lV3JhcC5hcHBlbmRDaGlsZCh0aW1lbGluZUhlYWRlcik7XG4gICAgICAgIHRpbWVsaW5lV3JhcC5hcHBlbmRDaGlsZCh0aW1lbGluZSk7XG4gICAgICAgIGNvbnN0IHByZXM6IEhUTUxQcmVFbGVtZW50W10gPSBbXG4gICAgICAgICAgdmFyc0VsLFxuICAgICAgICAgIHF1ZXJ5RWwsXG4gICAgICAgICAgZmlsdGVyc0VsLFxuICAgICAgICAgIGZpbHRlckRpYWdFbCxcbiAgICAgICAgXTtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIHByZXMpIHtcbiAgICAgICAgICBwLnN0eWxlLm1hcmdpbiA9ICcwJztcbiAgICAgICAgICBwLnN0eWxlLnBhZGRpbmcgPSAnNHB4JztcbiAgICAgICAgICBwLnN0eWxlLmJhY2tncm91bmQgPSAnI2Y2ZjhmYSc7XG4gICAgICAgICAgcC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICNlMmUyZTInO1xuICAgICAgICAgIHAuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzRweCc7XG4gICAgICAgICAgcC5zdHlsZS5vdmVyZmxvd1ggPSAnYXV0byc7XG4gICAgICAgICAgcC5zdHlsZS5tYXhIZWlnaHQgPSAnMTYwcHgnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNtYWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHNtYWxsLnN0eWxlLmZvbnRTaXplID0gJzEwcHgnO1xuICAgICAgICBzbWFsbC5zdHlsZS5vcGFjaXR5ID0gJzAuNyc7XG4gICAgICAgIHNtYWxsLnRleHRDb250ZW50ID0gYFNob3J0Y3V0OiAke2RldnRvb2xzU2hvcnRjdXR9YDtcbiAgICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQoaGVhZGVyKTtcbiAgICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQocGF0aEVsKTtcbiAgICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQodmFyc0VsKTtcbiAgICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQocXVlcnlFbCk7XG4gICAgICAgIC8vIHR5cGVkRWwgcmVtb3ZlZFxuICAgICAgICBwYW5lbC5hcHBlbmRDaGlsZCh0aW1lbGluZVdyYXApO1xuICAgICAgICBwYW5lbC5hcHBlbmRDaGlsZChmaWx0ZXJzRWwpO1xuICAgICAgICBwYW5lbC5hcHBlbmRDaGlsZChmaWx0ZXJEaWFnRWwpO1xuICAgICAgICBwYW5lbC5hcHBlbmRDaGlsZChzbWFsbCk7XG4gICAgICAgIHNoYWRvdy5hcHBlbmRDaGlsZChwYW5lbCk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaG9zdCk7XG4gICAgICAgIGxldCBjb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgICAgY29sbGFwc2VCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgY29sbGFwc2VkID0gIWNvbGxhcHNlZDtcbiAgICAgICAgICBpZiAoY29sbGFwc2VkKSB7XG4gICAgICAgICAgICBwYW5lbC5zdHlsZS5tYXhIZWlnaHQgPSAnMjRweCc7XG4gICAgICAgICAgICBwYW5lbC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgY29sbGFwc2VCdG4udGV4dENvbnRlbnQgPSAnKyc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhbmVsLnN0eWxlLm1heEhlaWdodCA9ICc1MHZoJztcbiAgICAgICAgICAgIHBhbmVsLnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nO1xuICAgICAgICAgICAgY29sbGFwc2VCdG4udGV4dENvbnRlbnQgPSAn4oiSJztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdW5zdWI6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgICAgICAgY2xvc2VCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgaG9zdC5yZW1vdmUoKTtcbiAgICAgICAgICBpZiAodHlwZW9mIHVuc3ViID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB1bnN1YigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8qKiBVcGRhdGUgcGFuZWwgY29udGVudCBmcm9tIGN1cnJlbnQgcm91dGUgZW50cnkgKi9cbiAgICAgICAgLy8gS2VlcCBsYXN0IHF1ZXJ5IHNuYXBzaG90IGZvciBkaWZmXG4gICAgICAgIGxldCBsYXN0UXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgbGFzdFNlYXJjaDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvKipcbiAgICAgICAgICogQ29tcHV0ZSBkaWZmIGNsYXNzaWZpY2F0aW9uIGJldHdlZW4gdHdvIHF1ZXJ5IG9iamVjdHMuXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBkaWZmUXVlcmllcyhcbiAgICAgICAgICBwcmV2OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCxcbiAgICAgICAgICBuZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgKToge1xuICAgICAgICAgIGFkZGVkOiBzdHJpbmdbXTtcbiAgICAgICAgICByZW1vdmVkOiBzdHJpbmdbXTtcbiAgICAgICAgICBjaGFuZ2VkOiBzdHJpbmdbXTtcbiAgICAgICAgICB1bmNoYW5nZWQ6IHN0cmluZ1tdO1xuICAgICAgICB9IHtcbiAgICAgICAgICBjb25zdCBhZGRlZDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICBjb25zdCByZW1vdmVkOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIGNvbnN0IGNoYW5nZWQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgY29uc3QgdW5jaGFuZ2VkOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIGNvbnN0IHByZXZLZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyhwcmV2ID8/IHt9KSk7XG4gICAgICAgICAgY29uc3QgbmV4dEtleXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKG5leHQpKTtcbiAgICAgICAgICBuZXh0S2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXByZXZLZXlzLmhhcyhrKSkge1xuICAgICAgICAgICAgICBhZGRlZC5wdXNoKGspO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcHY6IHVua25vd247XG4gICAgICAgICAgICBpZiAocHJldiAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIHByZXYgaXMgYSBwbGFpbiByZWNvcmQ7IGRpcmVjdCBpbmRleCAocnVudGltZSBzYWZlKVxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgICAgICAgICAgIHB2ID0gKHByZXYgYXMgYW55KVtrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG52ID0gbmV4dFtrXTtcbiAgICAgICAgICAgIGxldCBzYW1lID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwdikgJiYgQXJyYXkuaXNBcnJheShudikpIHtcbiAgICAgICAgICAgICAgaWYgKHB2Lmxlbmd0aCA9PT0gKG52IGFzIHVua25vd25bXSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgc2FtZSA9IHB2LmV2ZXJ5KCh2LCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdiA9PT0gKG52IGFzIHVua25vd25bXSlbaV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNhbWUgPSBwdiA9PT0gbnY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2FtZSkge1xuICAgICAgICAgICAgICB1bmNoYW5nZWQucHVzaChrKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNoYW5nZWQucHVzaChrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZXZLZXlzLmRlbGV0ZShrKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwcmV2S2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgICAgICByZW1vdmVkLnB1c2goayk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHsgYWRkZWQsIHJlbW92ZWQsIGNoYW5nZWQsIHVuY2hhbmdlZCB9O1xuICAgICAgICB9XG4gICAgICAgIC8qKiBVcGRhdGUgcGFuZWwgY29udGVudCBhbmQgbWF5YmUgcHVzaCB0aW1lbGluZSBlbnRyeSAqL1xuICAgICAgICBmdW5jdGlvbiByZW5kZXIoKTogdm9pZCB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gY29udGV4dC5nZXQoKTtcbiAgICAgICAgICAgIHBhdGhFbC50ZXh0Q29udGVudCA9IGAke2VudHJ5LmxvY2F0aW9uLnBhdGhuYW1lfSR7ZW50cnkubG9jYXRpb24uc2VhcmNofWA7XG4gICAgICAgICAgICBjb25zdCB2YXJzSnNvbiA9IEpTT04uc3RyaW5naWZ5KGVudHJ5LnJvdXRlPy5wYXJhbXMgPz8ge30sIG51bGwsIDIpO1xuICAgICAgICAgICAgdmFyc0VsLnRleHRDb250ZW50ID0gYHZhcnM6ICR7dmFyc0pzb259YDtcbiAgICAgICAgICAgIGNvbnN0IHJhd0pzb24gPSBKU09OLnN0cmluZ2lmeShlbnRyeS5xdWVyeSwgbnVsbCwgMik7XG4gICAgICAgICAgICBxdWVyeUVsLnRleHRDb250ZW50ID0gYHJhdzogICR7cmF3SnNvbn1gO1xuICAgICAgICAgICAgLy8gdHlwZWQgcXVlcnkgcmVtb3ZlZFxuICAgICAgICAgICAgY29uc3QgZmlsdGVyc0pzb24gPSBKU09OLnN0cmluZ2lmeShlbnRyeS5maWx0ZXJzLCBudWxsLCAyKTtcbiAgICAgICAgICAgIGZpbHRlcnNFbC50ZXh0Q29udGVudCA9IGBmaWx0ZXJzOiR7ZmlsdGVyc0pzb259YDtcbiAgICAgICAgICAgIGNvbnN0IGRpYWcgPSBlbnRyeS5maWx0ZXJEaWFnbm9zdGljcyA/PyBbXTtcbiAgICAgICAgICAgIGZpbHRlckRpYWdFbC50ZXh0Q29udGVudCA9IGBmaWx0ZXJEaWFnbm9zdGljczogJHtkaWFnLmxlbmd0aH1gO1xuICAgICAgICAgICAgLy8gVGltZWxpbmUgbG9nIGlmIHF1ZXJ5IHNlYXJjaCBjaGFuZ2VkXG4gICAgICAgICAgICBpZiAoZW50cnkucmF3U2VhcmNoICE9PSBsYXN0U2VhcmNoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vd1F1ZXJ5ID0gZW50cnkucXVlcnkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBkaWZmUXVlcmllcyhsYXN0UXVlcnksIG5vd1F1ZXJ5KTtcbiAgICAgICAgICAgICAgY29uc3Qgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgIHJvdy5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICAgICAgICByb3cuc3R5bGUuZmxleERpcmVjdGlvbiA9ICdjb2x1bW4nO1xuICAgICAgICAgICAgICByb3cuc3R5bGUuYm9yZGVyQm90dG9tID0gJzFweCBzb2xpZCAjZTllOWU5JztcbiAgICAgICAgICAgICAgcm93LnN0eWxlLnBhZGRpbmcgPSAnM3B4IDRweCc7XG4gICAgICAgICAgICAgIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgaGVhZC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICAgICAgICBoZWFkLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ3NwYWNlLWJldHdlZW4nO1xuICAgICAgICAgICAgICBjb25zdCB0cyA9IG5ldyBEYXRlKCkudG9Mb2NhbGVUaW1lU3RyaW5nKCk7XG4gICAgICAgICAgICAgIGxldCBzZWFyY2hEaXNwbGF5ID0gJyhlbXB0eSknO1xuICAgICAgICAgICAgICBpZiAoZW50cnkubG9jYXRpb24uc2VhcmNoICE9PSAnJykge1xuICAgICAgICAgICAgICAgIHNlYXJjaERpc3BsYXkgPSBlbnRyeS5sb2NhdGlvbi5zZWFyY2g7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaGVhZC5pbm5lckhUTUwgPSBgPHN0cm9uZz4ke3RzfTwvc3Ryb25nPiA8Y29kZSBzdHlsZT1cImJhY2tncm91bmQ6I2VlZTtwYWRkaW5nOjFweCAzcHg7Ym9yZGVyLXJhZGl1czozcHg7XCI+JHtzZWFyY2hEaXNwbGF5fTwvY29kZT5gO1xuICAgICAgICAgICAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgIGJvZHkuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgICAgICAgYm9keS5zdHlsZS5mbGV4V3JhcCA9ICd3cmFwJztcbiAgICAgICAgICAgICAgYm9keS5zdHlsZS5nYXAgPSAnNHB4JztcbiAgICAgICAgICAgICAgLyoqIENyZWF0ZSBhIGNvbG9yZWQgcGlsbCBlbGVtZW50ICovXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIHBpbGwoXG4gICAgICAgICAgICAgICAgbGFiZWw6IHN0cmluZyxcbiAgICAgICAgICAgICAgICBraW5kOiAnYWRkZWQnIHwgJ3JlbW92ZWQnIHwgJ2NoYW5nZWQnIHwgJ3VuY2hhbmdlZCcsXG4gICAgICAgICAgICAgICk6IEhUTUxTcGFuRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgICAgICBzcGFuLnRleHRDb250ZW50ID0gbGFiZWw7XG4gICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5wYWRkaW5nID0gJzFweCA0cHgnO1xuICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuYm9yZGVyUmFkaXVzID0gJzEwcHgnO1xuICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuZm9udFNpemUgPSAnMTBweCc7XG4gICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkJztcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ2FkZGVkJzpcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5iYWNrZ3JvdW5kID0gJyNlNmZmZWQnO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmJvcmRlckNvbG9yID0gJyMyY2JlNGUnO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmNvbG9yID0gJyMyMjg2M2EnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlbW92ZWQnOlxuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmZWVmMCc7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuYm9yZGVyQ29sb3IgPSAnI2Q3M2E0OSc7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuY29sb3IgPSAnI2NiMjQzMSc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSAnY2hhbmdlZCc6XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmZmNWIxJztcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5ib3JkZXJDb2xvciA9ICcjZmZkMzNkJztcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5jb2xvciA9ICcjNzM1YzBmJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlICd1bmNoYW5nZWQnOlxuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmJhY2tncm91bmQgPSAnI2YxZjhmZic7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuYm9yZGVyQ29sb3IgPSAnIzc5YjhmZic7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuY29sb3IgPSAnIzAzNjZkNic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIGV4aGF1c3RpdmVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNwYW47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGRpZmYuYWRkZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kKFxuICAgICAgICAgICAgICAgICAgLi4uZGlmZi5hZGRlZC5tYXAoKGspID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBpbGwoYCske2t9YCwgJ2FkZGVkJyk7XG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChkaWZmLmNoYW5nZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kKFxuICAgICAgICAgICAgICAgICAgLi4uZGlmZi5jaGFuZ2VkLm1hcCgoaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGlsbChgfiR7a31gLCAnY2hhbmdlZCcpO1xuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZGlmZi5yZW1vdmVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBib2R5LmFwcGVuZChcbiAgICAgICAgICAgICAgICAgIC4uLmRpZmYucmVtb3ZlZC5tYXAoKGspID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBpbGwoYC0ke2t9YCwgJ3JlbW92ZWQnKTtcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgbm9BZGRzID0gZGlmZi5hZGRlZC5sZW5ndGggPT09IDA7XG4gICAgICAgICAgICAgIGNvbnN0IG5vQ2hhbmdlcyA9IGRpZmYuY2hhbmdlZC5sZW5ndGggPT09IDA7XG4gICAgICAgICAgICAgIGNvbnN0IG5vUmVtb3ZhbHMgPSBkaWZmLnJlbW92ZWQubGVuZ3RoID09PSAwO1xuICAgICAgICAgICAgICBpZiAobm9BZGRzICYmIG5vQ2hhbmdlcyAmJiBub1JlbW92YWxzKSB7XG4gICAgICAgICAgICAgICAgYm9keS5hcHBlbmQocGlsbCgnbm8tY2hhbmdlJywgJ3VuY2hhbmdlZCcpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByb3cuYXBwZW5kQ2hpbGQoaGVhZCk7XG4gICAgICAgICAgICAgIHJvdy5hcHBlbmRDaGlsZChib2R5KTtcbiAgICAgICAgICAgICAgdGltZWxpbmUuYXBwZW5kQ2hpbGQocm93KTtcbiAgICAgICAgICAgICAgaWYgKHRpbWVsaW5lLmNoaWxkRWxlbWVudENvdW50ID4gNTApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdCA9IHRpbWVsaW5lLmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgICAgICAgICAgIGlmIChmaXJzdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICB0aW1lbGluZS5yZW1vdmVDaGlsZChmaXJzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxhc3RRdWVyeSA9IG5vd1F1ZXJ5O1xuICAgICAgICAgICAgICBsYXN0U2VhcmNoID0gZW50cnkucmF3U2VhcmNoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLyogaWdub3JlICovXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcigpO1xuICAgICAgICB1bnN1YiA9IGNvbnRleHQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICByZW5kZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2KSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgaWYgKGV2LmFsdEtleSkgcGFydHMucHVzaCgnQWx0Jyk7XG4gICAgICAgICAgICBpZiAoZXYuc2hpZnRLZXkpIHBhcnRzLnB1c2goJ1NoaWZ0Jyk7XG4gICAgICAgICAgICBpZiAoZXYuY3RybEtleSkgcGFydHMucHVzaCgnQ3RybCcpO1xuICAgICAgICAgICAgbGV0IGtleVBhcnQgPSBldi5rZXk7XG4gICAgICAgICAgICBpZiAoZXYua2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICBrZXlQYXJ0ID0gZXYua2V5LnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJ0cy5wdXNoKGtleVBhcnQpO1xuICAgICAgICAgICAgY29uc3QgY29tYm8gPSBwYXJ0cy5qb2luKCcrJyk7XG4gICAgICAgICAgICBpZiAoY29tYm8gPT09IGRldnRvb2xzU2hvcnRjdXQucmVwbGFjZSgvXFxzKy9nLCAnJykpIHtcbiAgICAgICAgICAgICAgaWYgKGhvc3Quc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgaG9zdC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBob3N0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8qIGlnbm9yZSAqL1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvKiBpZ25vcmUgKi9cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgY2xlYW51cCwgY29udGV4dCB9IGFzIENyZWF0ZVJvdXRlclJldHVybjxhbnk+O1xufVxuIl19
|