vitest 0.2.5 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +5 -5
- package/dist/cli.js +1088 -23
- package/dist/client-ab3f363e.js +9442 -0
- package/dist/constants-259a41c8.js +81 -0
- package/dist/create-d3b904b2.js +9177 -0
- package/dist/{diff-6be0541d.js → diff-e2ede84f.js} +3 -4
- package/dist/entry.js +132 -98
- package/dist/{globals-19399ded.js → globals-a1c78816.js} +8 -9
- package/dist/index-648e7ab2.js +331 -0
- package/dist/index-6e709f57.js +782 -0
- package/dist/{index-bffba653.js → index-afc85128.js} +5 -3
- package/dist/index-ce49e384.js +1644 -0
- package/dist/index-f55e7b59.js +406 -0
- package/dist/index.d.ts +113 -92
- package/dist/index.js +9 -6
- package/dist/jest-mock.js +99 -0
- package/dist/node.d.ts +61 -56
- package/dist/node.js +10 -11
- package/dist/{setup-d961d28c.js → setup-7939a7aa.js} +48 -7
- package/dist/{source-map-1132e742.js → source-map-0ecca7b8.js} +2 -2
- package/dist/{vi-ed2bce6b.js → vi-93df942a.js} +46 -25
- package/dist/worker.js +29 -35
- package/package.json +10 -10
- package/dist/client-f15310bf.js +0 -9442
- package/dist/constants-de5287a6.js +0 -34
- package/dist/create-48243480.js +0 -9169
- package/dist/index-043440ae.js +0 -222
- package/dist/index-1964368a.js +0 -187
- package/dist/index-61c8686f.js +0 -331
- package/dist/index-9f4b9905.js +0 -2411
- package/dist/jest-mock-113430de.js +0 -99
package/dist/entry.js
CHANGED
|
@@ -4,19 +4,17 @@ import { Writable } from 'stream';
|
|
|
4
4
|
import { importModule } from 'local-pkg';
|
|
5
5
|
import chai$1, { expect, util } from 'chai';
|
|
6
6
|
import { a as commonjsRequire, c as commonjsGlobal } from './_commonjsHelpers-c9e3b764.js';
|
|
7
|
-
import {
|
|
7
|
+
import { i as isObject, v as index, p as getCallLastIndex, s as slash, w as getNames, c, t as toArray, d as relative, x as partitionSuiteChildren, y as hasTests, j as hasFailed, h as getFullName } from './index-f55e7b59.js';
|
|
8
8
|
import { r as rpc } from './rpc-8c7cc374.js';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { u as unifiedDiff } from './diff-6be0541d.js';
|
|
9
|
+
import { f as format_1, h as getSerializers, j as equals, k as iterableEquality, l as subsetEquality, p as plugins_1, b as getState, m as isA, J as JestChaiExpect, n as clearContext, o as defaultSuite, q as setHooks, r as getHooks, u as context, s as setState, x as getFn, e as vi } from './vi-93df942a.js';
|
|
10
|
+
import { g as getOriginalPos, a as posToNumber, n as numberToPos, l as lineSplitRE, p as parseStacktrace } from './source-map-0ecca7b8.js';
|
|
11
|
+
import { u as unifiedDiff } from './diff-e2ede84f.js';
|
|
13
12
|
import { performance as performance$1 } from 'perf_hooks';
|
|
14
|
-
import inspector from 'inspector';
|
|
15
13
|
import { createHash } from 'crypto';
|
|
16
14
|
import { format } from 'util';
|
|
17
15
|
import 'path';
|
|
18
16
|
import 'tty';
|
|
19
|
-
import './jest-mock
|
|
17
|
+
import './jest-mock.js';
|
|
20
18
|
import 'tinyspy';
|
|
21
19
|
|
|
22
20
|
var node = {
|
|
@@ -245,30 +243,30 @@ const OTHER_KEYS = [
|
|
|
245
243
|
];
|
|
246
244
|
const KEYS = LIVING_KEYS.concat(OTHER_KEYS);
|
|
247
245
|
|
|
248
|
-
var __defProp$
|
|
249
|
-
var __getOwnPropSymbols$
|
|
250
|
-
var __hasOwnProp$
|
|
251
|
-
var __propIsEnum$
|
|
252
|
-
var __defNormalProp$
|
|
253
|
-
var __spreadValues$
|
|
246
|
+
var __defProp$4 = Object.defineProperty;
|
|
247
|
+
var __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;
|
|
248
|
+
var __hasOwnProp$4 = Object.prototype.hasOwnProperty;
|
|
249
|
+
var __propIsEnum$4 = Object.prototype.propertyIsEnumerable;
|
|
250
|
+
var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
251
|
+
var __spreadValues$4 = (a, b) => {
|
|
254
252
|
for (var prop in b || (b = {}))
|
|
255
|
-
if (__hasOwnProp$
|
|
256
|
-
__defNormalProp$
|
|
257
|
-
if (__getOwnPropSymbols$
|
|
258
|
-
for (var prop of __getOwnPropSymbols$
|
|
259
|
-
if (__propIsEnum$
|
|
260
|
-
__defNormalProp$
|
|
253
|
+
if (__hasOwnProp$4.call(b, prop))
|
|
254
|
+
__defNormalProp$4(a, prop, b[prop]);
|
|
255
|
+
if (__getOwnPropSymbols$4)
|
|
256
|
+
for (var prop of __getOwnPropSymbols$4(b)) {
|
|
257
|
+
if (__propIsEnum$4.call(b, prop))
|
|
258
|
+
__defNormalProp$4(a, prop, b[prop]);
|
|
261
259
|
}
|
|
262
260
|
return a;
|
|
263
261
|
};
|
|
264
262
|
var __objRest = (source, exclude) => {
|
|
265
263
|
var target = {};
|
|
266
264
|
for (var prop in source)
|
|
267
|
-
if (__hasOwnProp$
|
|
265
|
+
if (__hasOwnProp$4.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
268
266
|
target[prop] = source[prop];
|
|
269
|
-
if (source != null && __getOwnPropSymbols$
|
|
270
|
-
for (var prop of __getOwnPropSymbols$
|
|
271
|
-
if (exclude.indexOf(prop) < 0 && __propIsEnum$
|
|
267
|
+
if (source != null && __getOwnPropSymbols$4)
|
|
268
|
+
for (var prop of __getOwnPropSymbols$4(source)) {
|
|
269
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum$4.call(source, prop))
|
|
272
270
|
target[prop] = source[prop];
|
|
273
271
|
}
|
|
274
272
|
return target;
|
|
@@ -305,7 +303,7 @@ var jsdom = {
|
|
|
305
303
|
"console",
|
|
306
304
|
"cookieJar"
|
|
307
305
|
]);
|
|
308
|
-
const dom = new JSDOM(html, __spreadValues$
|
|
306
|
+
const dom = new JSDOM(html, __spreadValues$4({
|
|
309
307
|
pretendToBeVisual,
|
|
310
308
|
resources: resources ?? (userAgent ? new ResourceLoader({ userAgent }) : void 0),
|
|
311
309
|
runScripts,
|
|
@@ -518,19 +516,19 @@ try {
|
|
|
518
516
|
|
|
519
517
|
var naturalCompare$1 = naturalCompare$2.exports;
|
|
520
518
|
|
|
521
|
-
var __defProp$
|
|
522
|
-
var __getOwnPropSymbols$
|
|
523
|
-
var __hasOwnProp$
|
|
524
|
-
var __propIsEnum$
|
|
525
|
-
var __defNormalProp$
|
|
526
|
-
var __spreadValues$
|
|
519
|
+
var __defProp$3 = Object.defineProperty;
|
|
520
|
+
var __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;
|
|
521
|
+
var __hasOwnProp$3 = Object.prototype.hasOwnProperty;
|
|
522
|
+
var __propIsEnum$3 = Object.prototype.propertyIsEnumerable;
|
|
523
|
+
var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
524
|
+
var __spreadValues$3 = (a, b) => {
|
|
527
525
|
for (var prop in b || (b = {}))
|
|
528
|
-
if (__hasOwnProp$
|
|
529
|
-
__defNormalProp$
|
|
530
|
-
if (__getOwnPropSymbols$
|
|
531
|
-
for (var prop of __getOwnPropSymbols$
|
|
532
|
-
if (__propIsEnum$
|
|
533
|
-
__defNormalProp$
|
|
526
|
+
if (__hasOwnProp$3.call(b, prop))
|
|
527
|
+
__defNormalProp$3(a, prop, b[prop]);
|
|
528
|
+
if (__getOwnPropSymbols$3)
|
|
529
|
+
for (var prop of __getOwnPropSymbols$3(b)) {
|
|
530
|
+
if (__propIsEnum$3.call(b, prop))
|
|
531
|
+
__defNormalProp$3(a, prop, b[prop]);
|
|
534
532
|
}
|
|
535
533
|
return a;
|
|
536
534
|
};
|
|
@@ -566,7 +564,7 @@ const removeExtraLineBreaks = (string) => string.length > 2 && string.startsWith
|
|
|
566
564
|
const escapeRegex = true;
|
|
567
565
|
const printFunctionName = false;
|
|
568
566
|
function serialize(val, indent = 2, formatOverrides = {}) {
|
|
569
|
-
return normalizeNewlines(format_1(val, __spreadValues$
|
|
567
|
+
return normalizeNewlines(format_1(val, __spreadValues$3({
|
|
570
568
|
escapeRegex,
|
|
571
569
|
indent,
|
|
572
570
|
plugins: getSerializers(),
|
|
@@ -625,7 +623,7 @@ function deepMergeArray(target = [], source = []) {
|
|
|
625
623
|
}
|
|
626
624
|
function deepMergeSnapshot(target, source) {
|
|
627
625
|
if (isObject(target) && isObject(source)) {
|
|
628
|
-
const mergedOutput = __spreadValues$
|
|
626
|
+
const mergedOutput = __spreadValues$3({}, target);
|
|
629
627
|
Object.keys(source).forEach((key) => {
|
|
630
628
|
if (isObject(source[key]) && !source[key].$$typeof) {
|
|
631
629
|
if (!(key in target))
|
|
@@ -735,19 +733,19 @@ function stripSnapshotIndentation(inlineSnapshot) {
|
|
|
735
733
|
return inlineSnapshot;
|
|
736
734
|
}
|
|
737
735
|
|
|
738
|
-
var __defProp$
|
|
739
|
-
var __getOwnPropSymbols$
|
|
740
|
-
var __hasOwnProp$
|
|
741
|
-
var __propIsEnum$
|
|
742
|
-
var __defNormalProp$
|
|
743
|
-
var __spreadValues$
|
|
736
|
+
var __defProp$2 = Object.defineProperty;
|
|
737
|
+
var __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;
|
|
738
|
+
var __hasOwnProp$2 = Object.prototype.hasOwnProperty;
|
|
739
|
+
var __propIsEnum$2 = Object.prototype.propertyIsEnumerable;
|
|
740
|
+
var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
741
|
+
var __spreadValues$2 = (a, b) => {
|
|
744
742
|
for (var prop in b || (b = {}))
|
|
745
|
-
if (__hasOwnProp$
|
|
746
|
-
__defNormalProp$
|
|
747
|
-
if (__getOwnPropSymbols$
|
|
748
|
-
for (var prop of __getOwnPropSymbols$
|
|
749
|
-
if (__propIsEnum$
|
|
750
|
-
__defNormalProp$
|
|
743
|
+
if (__hasOwnProp$2.call(b, prop))
|
|
744
|
+
__defNormalProp$2(a, prop, b[prop]);
|
|
745
|
+
if (__getOwnPropSymbols$2)
|
|
746
|
+
for (var prop of __getOwnPropSymbols$2(b)) {
|
|
747
|
+
if (__propIsEnum$2.call(b, prop))
|
|
748
|
+
__defNormalProp$2(a, prop, b[prop]);
|
|
751
749
|
}
|
|
752
750
|
return a;
|
|
753
751
|
};
|
|
@@ -767,7 +765,7 @@ class SnapshotState {
|
|
|
767
765
|
this.unmatched = 0;
|
|
768
766
|
this._updateSnapshot = options.updateSnapshot;
|
|
769
767
|
this.updated = 0;
|
|
770
|
-
this._snapshotFormat = __spreadValues$
|
|
768
|
+
this._snapshotFormat = __spreadValues$2({
|
|
771
769
|
printBasicPrototype: false
|
|
772
770
|
}, options.snapshotFormat);
|
|
773
771
|
}
|
|
@@ -789,7 +787,7 @@ class SnapshotState {
|
|
|
789
787
|
throw new Error(`Vitest: Couldn't infer stack frame for inline snapshot.
|
|
790
788
|
${JSON.stringify(stacks)}`);
|
|
791
789
|
}
|
|
792
|
-
this._inlineSnapshots.push(__spreadValues$
|
|
790
|
+
this._inlineSnapshots.push(__spreadValues$2({
|
|
793
791
|
snapshot: receivedSerialized
|
|
794
792
|
}, stack));
|
|
795
793
|
} else {
|
|
@@ -855,7 +853,7 @@ ${JSON.stringify(stacks)}`);
|
|
|
855
853
|
const receivedSerialized = addExtraLineBreaks(serialize(received, void 0, this._snapshotFormat));
|
|
856
854
|
const expected = isInline ? inlineSnapshot : this._snapshotData[key];
|
|
857
855
|
const expectedTrimmed = prepareExpected(expected);
|
|
858
|
-
const pass = expectedTrimmed === (receivedSerialized
|
|
856
|
+
const pass = expectedTrimmed === prepareExpected(receivedSerialized);
|
|
859
857
|
const hasSnapshot = expected !== void 0;
|
|
860
858
|
const snapshotIsPersisted = isInline || fs.existsSync(this._snapshotPath);
|
|
861
859
|
if (pass && !isInline) {
|
|
@@ -1148,35 +1146,35 @@ var matcherUtils = /*#__PURE__*/Object.freeze({
|
|
|
1148
1146
|
diff: diff
|
|
1149
1147
|
});
|
|
1150
1148
|
|
|
1151
|
-
var __defProp = Object.defineProperty;
|
|
1152
|
-
var __defProps = Object.defineProperties;
|
|
1153
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
1154
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
1155
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
1156
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
1157
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
1158
|
-
var __spreadValues = (a, b) => {
|
|
1149
|
+
var __defProp$1 = Object.defineProperty;
|
|
1150
|
+
var __defProps$1 = Object.defineProperties;
|
|
1151
|
+
var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
|
|
1152
|
+
var __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;
|
|
1153
|
+
var __hasOwnProp$1 = Object.prototype.hasOwnProperty;
|
|
1154
|
+
var __propIsEnum$1 = Object.prototype.propertyIsEnumerable;
|
|
1155
|
+
var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
1156
|
+
var __spreadValues$1 = (a, b) => {
|
|
1159
1157
|
for (var prop in b || (b = {}))
|
|
1160
|
-
if (__hasOwnProp.call(b, prop))
|
|
1161
|
-
__defNormalProp(a, prop, b[prop]);
|
|
1162
|
-
if (__getOwnPropSymbols)
|
|
1163
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
1164
|
-
if (__propIsEnum.call(b, prop))
|
|
1165
|
-
__defNormalProp(a, prop, b[prop]);
|
|
1158
|
+
if (__hasOwnProp$1.call(b, prop))
|
|
1159
|
+
__defNormalProp$1(a, prop, b[prop]);
|
|
1160
|
+
if (__getOwnPropSymbols$1)
|
|
1161
|
+
for (var prop of __getOwnPropSymbols$1(b)) {
|
|
1162
|
+
if (__propIsEnum$1.call(b, prop))
|
|
1163
|
+
__defNormalProp$1(a, prop, b[prop]);
|
|
1166
1164
|
}
|
|
1167
1165
|
return a;
|
|
1168
1166
|
};
|
|
1169
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
1167
|
+
var __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));
|
|
1170
1168
|
const isAsyncFunction = (fn) => typeof fn === "function" && fn[Symbol.toStringTag] === "AsyncFunction";
|
|
1171
1169
|
const getMatcherState = (assertion) => {
|
|
1172
1170
|
const obj = assertion._obj;
|
|
1173
1171
|
const isNot = util.flag(assertion, "negate");
|
|
1174
1172
|
const promise = util.flag(assertion, "promise") || "";
|
|
1175
|
-
const jestUtils = __spreadProps(__spreadValues({}, matcherUtils), {
|
|
1173
|
+
const jestUtils = __spreadProps$1(__spreadValues$1({}, matcherUtils), {
|
|
1176
1174
|
iterableEquality,
|
|
1177
1175
|
subsetEquality
|
|
1178
1176
|
});
|
|
1179
|
-
const matcherState = __spreadProps(__spreadValues({}, getState()), {
|
|
1177
|
+
const matcherState = __spreadProps$1(__spreadValues$1({}, getState()), {
|
|
1180
1178
|
isNot,
|
|
1181
1179
|
utils: jestUtils,
|
|
1182
1180
|
promise,
|
|
@@ -1423,7 +1421,7 @@ async function setupGlobalEnv(config) {
|
|
|
1423
1421
|
setupConsoleLogSpy();
|
|
1424
1422
|
await setupChai();
|
|
1425
1423
|
if (config.globals)
|
|
1426
|
-
(await import('./globals-
|
|
1424
|
+
(await import('./globals-a1c78816.js')).registerApiGlobally();
|
|
1427
1425
|
}
|
|
1428
1426
|
function setupConsoleLogSpy() {
|
|
1429
1427
|
const stdout = new Writable({
|
|
@@ -1521,7 +1519,12 @@ function processError(err) {
|
|
|
1521
1519
|
err.expected = stringify(err.expected);
|
|
1522
1520
|
if (typeof err.actual !== "string")
|
|
1523
1521
|
err.actual = stringify(err.actual);
|
|
1524
|
-
|
|
1522
|
+
try {
|
|
1523
|
+
return serializeError(err);
|
|
1524
|
+
} catch (e) {
|
|
1525
|
+
return serializeError(new Error(`Failed to fully serialize error: ${e == null ? void 0 : e.message}.
|
|
1526
|
+
Inner error message: ${err == null ? void 0 : err.message}`));
|
|
1527
|
+
}
|
|
1525
1528
|
}
|
|
1526
1529
|
|
|
1527
1530
|
function hash(str, length = 10) {
|
|
@@ -1566,25 +1569,26 @@ async function collectTests(paths, config) {
|
|
|
1566
1569
|
process.stdout.write("\0");
|
|
1567
1570
|
}
|
|
1568
1571
|
calculateHash(file);
|
|
1569
|
-
|
|
1572
|
+
const hasOnlyTasks = someTasksAreOnly(file);
|
|
1573
|
+
interpretTaskModes(file, config.testNamePattern, hasOnlyTasks, false, config.allowOnly);
|
|
1570
1574
|
files.push(file);
|
|
1571
1575
|
}
|
|
1572
1576
|
return files;
|
|
1573
1577
|
}
|
|
1574
|
-
function interpretTaskModes(suite, namePattern, onlyMode,
|
|
1575
|
-
|
|
1576
|
-
onlyMode = someTasksAreOnly(suite);
|
|
1577
|
-
isIncluded || (isIncluded = suite.mode === "only");
|
|
1578
|
-
}
|
|
1578
|
+
function interpretTaskModes(suite, namePattern, onlyMode, parentIsOnly, allowOnly) {
|
|
1579
|
+
const suiteIsOnly = parentIsOnly || suite.mode === "only";
|
|
1579
1580
|
suite.tasks.forEach((t) => {
|
|
1580
|
-
const includeTask =
|
|
1581
|
+
const includeTask = suiteIsOnly || t.mode === "only";
|
|
1581
1582
|
if (onlyMode) {
|
|
1582
1583
|
if (t.type === "suite" && (includeTask || someTasksAreOnly(t))) {
|
|
1583
|
-
if (t.mode === "only")
|
|
1584
|
+
if (t.mode === "only") {
|
|
1585
|
+
checkAllowOnly(t, allowOnly);
|
|
1584
1586
|
t.mode = "run";
|
|
1587
|
+
}
|
|
1585
1588
|
} else if (t.mode === "run" && !includeTask) {
|
|
1586
1589
|
t.mode = "skip";
|
|
1587
1590
|
} else if (t.mode === "only") {
|
|
1591
|
+
checkAllowOnly(t, allowOnly);
|
|
1588
1592
|
t.mode = "run";
|
|
1589
1593
|
}
|
|
1590
1594
|
}
|
|
@@ -1595,7 +1599,7 @@ function interpretTaskModes(suite, namePattern, onlyMode, isIncluded) {
|
|
|
1595
1599
|
if (t.mode === "skip")
|
|
1596
1600
|
skipAllTasks(t);
|
|
1597
1601
|
else
|
|
1598
|
-
interpretTaskModes(t, namePattern, onlyMode, includeTask);
|
|
1602
|
+
interpretTaskModes(t, namePattern, onlyMode, includeTask, allowOnly);
|
|
1599
1603
|
}
|
|
1600
1604
|
});
|
|
1601
1605
|
if (suite.mode === "run") {
|
|
@@ -1615,6 +1619,14 @@ function skipAllTasks(suite) {
|
|
|
1615
1619
|
}
|
|
1616
1620
|
});
|
|
1617
1621
|
}
|
|
1622
|
+
function checkAllowOnly(task, allowOnly) {
|
|
1623
|
+
if (allowOnly)
|
|
1624
|
+
return;
|
|
1625
|
+
task.result = {
|
|
1626
|
+
state: "fail",
|
|
1627
|
+
error: processError(new Error("[Vitest] Unexpected .only modifier. Remove it or pass --allowOnly arguement to bypass this error"))
|
|
1628
|
+
};
|
|
1629
|
+
}
|
|
1618
1630
|
function calculateHash(parent) {
|
|
1619
1631
|
parent.tasks.forEach((t, idx) => {
|
|
1620
1632
|
t.id = `${parent.id}_${idx}`;
|
|
@@ -1623,6 +1635,25 @@ function calculateHash(parent) {
|
|
|
1623
1635
|
});
|
|
1624
1636
|
}
|
|
1625
1637
|
|
|
1638
|
+
var __defProp = Object.defineProperty;
|
|
1639
|
+
var __defProps = Object.defineProperties;
|
|
1640
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
1641
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
1642
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
1643
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
1644
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
1645
|
+
var __spreadValues = (a, b) => {
|
|
1646
|
+
for (var prop in b || (b = {}))
|
|
1647
|
+
if (__hasOwnProp.call(b, prop))
|
|
1648
|
+
__defNormalProp(a, prop, b[prop]);
|
|
1649
|
+
if (__getOwnPropSymbols)
|
|
1650
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
1651
|
+
if (__propIsEnum.call(b, prop))
|
|
1652
|
+
__defNormalProp(a, prop, b[prop]);
|
|
1653
|
+
}
|
|
1654
|
+
return a;
|
|
1655
|
+
};
|
|
1656
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
1626
1657
|
async function callSuiteHook(suite, name, args) {
|
|
1627
1658
|
if (name === "beforeEach" && suite.suite)
|
|
1628
1659
|
await callSuiteHook(suite.suite, name, args);
|
|
@@ -1650,9 +1681,13 @@ async function sendTasksUpdate() {
|
|
|
1650
1681
|
}
|
|
1651
1682
|
}
|
|
1652
1683
|
async function runTest(test) {
|
|
1653
|
-
var _a;
|
|
1684
|
+
var _a, _b;
|
|
1654
1685
|
if (test.mode !== "run")
|
|
1655
1686
|
return;
|
|
1687
|
+
if (((_a = test.result) == null ? void 0 : _a.state) === "fail") {
|
|
1688
|
+
updateTask(test);
|
|
1689
|
+
return;
|
|
1690
|
+
}
|
|
1656
1691
|
const start = performance$1.now();
|
|
1657
1692
|
test.result = {
|
|
1658
1693
|
state: "run"
|
|
@@ -1669,7 +1704,7 @@ async function runTest(test) {
|
|
|
1669
1704
|
isExpectingAssertionsError: null,
|
|
1670
1705
|
expectedAssertionsNumber: null,
|
|
1671
1706
|
expectedAssertionsNumberError: null,
|
|
1672
|
-
testPath: (
|
|
1707
|
+
testPath: (_b = test.suite.file) == null ? void 0 : _b.filepath,
|
|
1673
1708
|
currentTestName: getFullName(test)
|
|
1674
1709
|
});
|
|
1675
1710
|
await getFn(test)();
|
|
@@ -1703,10 +1738,22 @@ async function runTest(test) {
|
|
|
1703
1738
|
process.__vitest_worker__.current = void 0;
|
|
1704
1739
|
updateTask(test);
|
|
1705
1740
|
}
|
|
1741
|
+
function markTasksAsSkipped(suite) {
|
|
1742
|
+
suite.tasks.forEach((t) => {
|
|
1743
|
+
t.mode = "skip";
|
|
1744
|
+
t.result = __spreadProps(__spreadValues({}, t.result), { state: "skip" });
|
|
1745
|
+
updateTask(t);
|
|
1746
|
+
if (t.type === "suite")
|
|
1747
|
+
markTasksAsSkipped(t);
|
|
1748
|
+
});
|
|
1749
|
+
}
|
|
1706
1750
|
async function runSuite(suite) {
|
|
1707
1751
|
var _a;
|
|
1708
|
-
if (((_a = suite.result) == null ? void 0 : _a.state) === "fail")
|
|
1752
|
+
if (((_a = suite.result) == null ? void 0 : _a.state) === "fail") {
|
|
1753
|
+
markTasksAsSkipped(suite);
|
|
1754
|
+
updateTask(suite);
|
|
1709
1755
|
return;
|
|
1756
|
+
}
|
|
1710
1757
|
const start = performance$1.now();
|
|
1711
1758
|
suite.result = {
|
|
1712
1759
|
state: "run"
|
|
@@ -1757,20 +1804,7 @@ async function runSuites(suites) {
|
|
|
1757
1804
|
async function startTests(paths, config) {
|
|
1758
1805
|
const files = await collectTests(paths, config);
|
|
1759
1806
|
rpc().onCollected(files);
|
|
1760
|
-
let session;
|
|
1761
|
-
if (config.coverage.enabled) {
|
|
1762
|
-
session = new inspector.Session();
|
|
1763
|
-
session.connect();
|
|
1764
|
-
session.post("Profiler.enable");
|
|
1765
|
-
session.post("Profiler.startPreciseCoverage", { detailed: true });
|
|
1766
|
-
}
|
|
1767
1807
|
await runSuites(files);
|
|
1768
|
-
if (config.coverage.enabled) {
|
|
1769
|
-
session.post("Profiler.takePreciseCoverage", (_, coverage) => {
|
|
1770
|
-
rpc().coverageCollected(coverage);
|
|
1771
|
-
});
|
|
1772
|
-
session.disconnect();
|
|
1773
|
-
}
|
|
1774
1808
|
await getSnapshotClient().saveSnap();
|
|
1775
1809
|
await sendTasksUpdate();
|
|
1776
1810
|
}
|
|
@@ -1801,4 +1835,4 @@ async function run(files, config) {
|
|
|
1801
1835
|
}
|
|
1802
1836
|
|
|
1803
1837
|
export { run };
|
|
1804
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnkuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbnRlZ3JhdGlvbnMvZW52L25vZGUudHMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL2Vudi9qc2RvbS1rZXlzLnRzIiwiLi4vc3JjL2ludGVncmF0aW9ucy9lbnYvanNkb20udHMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL2Vudi9oYXBweS1kb20udHMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL2Vudi9pbmRleC50cyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpLXN1YnNldEAxLjYuMC9ub2RlX21vZHVsZXMvY2hhaS1zdWJzZXQvbGliL2NoYWktc3Vic2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL25hdHVyYWwtY29tcGFyZUAxLjQuMC9ub2RlX21vZHVsZXMvbmF0dXJhbC1jb21wYXJlL2luZGV4LmpzIiwiLi4vc3JjL2ludGVncmF0aW9ucy9zbmFwc2hvdC9wb3J0L3V0aWxzLnRzIiwiLi4vc3JjL2ludGVncmF0aW9ucy9zbmFwc2hvdC9wb3J0L2lubGluZVNuYXBzaG90LnRzIiwiLi4vc3JjL2ludGVncmF0aW9ucy9zbmFwc2hvdC9wb3J0L3N0YXRlLnRzIiwiLi4vc3JjL2ludGVncmF0aW9ucy9zbmFwc2hvdC9jbGllbnQudHMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL3NuYXBzaG90L2NoYWkudHMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL2NoYWkvamVzdC1tYXRjaGVyLXV0aWxzLnRzIiwiLi4vc3JjL2ludGVncmF0aW9ucy9jaGFpL2plc3QtZXh0ZW5kLnRzIiwiLi4vc3JjL2ludGVncmF0aW9ucy9jaGFpL2plc3QtYXN5bW1ldHJpYy1tYXRjaGVycy50cyIsIi4uL3NyYy9pbnRlZ3JhdGlvbnMvY2hhaS9zZXR1cC50cyIsIi4uL3NyYy9ydW50aW1lL3NldHVwLnRzIiwiLi4vc3JjL3J1bnRpbWUvZXJyb3IudHMiLCIuLi9zcmMvcnVudGltZS9jb2xsZWN0LnRzIiwiLi4vc3JjL3J1bnRpbWUvcnVuLnRzIiwiLi4vc3JjL3J1bnRpbWUvZW50cnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG5leHBvcnQgZGVmYXVsdCA8RW52aXJvbm1lbnQ+KHtcbiAgbmFtZTogJ25vZGUnLFxuICBhc3luYyBzZXR1cCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGVhcmRvd24oKSB7XG4gICAgICB9LFxuICAgIH1cbiAgfSxcbn0pXG4iLCIvLyBTRUUgaHR0cHM6Ly9naXRodWIuY29tL2pzZG9tL2pzZG9tL2Jsb2IvbWFzdGVyL2xpYi9qc2RvbS9saXZpbmcvaW50ZXJmYWNlcy5qc1xuXG5jb25zdCBMSVZJTkdfS0VZUyA9IFtcbiAgJ0RPTUV4Y2VwdGlvbicsXG4gICdVUkwnLFxuICAnVVJMU2VhcmNoUGFyYW1zJyxcbiAgJ0V2ZW50VGFyZ2V0JyxcbiAgJ05hbWVkTm9kZU1hcCcsXG4gICdOb2RlJyxcbiAgJ0F0dHInLFxuICAnRWxlbWVudCcsXG4gICdEb2N1bWVudEZyYWdtZW50JyxcbiAgJ0RPTUltcGxlbWVudGF0aW9uJyxcbiAgJ0RvY3VtZW50JyxcbiAgJ1hNTERvY3VtZW50JyxcbiAgJ0NoYXJhY3RlckRhdGEnLFxuICAnVGV4dCcsXG4gICdDREFUQVNlY3Rpb24nLFxuICAnUHJvY2Vzc2luZ0luc3RydWN0aW9uJyxcbiAgJ0NvbW1lbnQnLFxuICAnRG9jdW1lbnRUeXBlJyxcbiAgJ05vZGVMaXN0JyxcbiAgJ0hUTUxDb2xsZWN0aW9uJyxcbiAgJ0hUTUxPcHRpb25zQ29sbGVjdGlvbicsXG4gICdET01TdHJpbmdNYXAnLFxuICAnRE9NVG9rZW5MaXN0JyxcbiAgJ1N0eWxlU2hlZXRMaXN0JyxcbiAgJ0hUTUxFbGVtZW50JyxcbiAgJ0hUTUxIZWFkRWxlbWVudCcsXG4gICdIVE1MVGl0bGVFbGVtZW50JyxcbiAgJ0hUTUxCYXNlRWxlbWVudCcsXG4gICdIVE1MTGlua0VsZW1lbnQnLFxuICAnSFRNTE1ldGFFbGVtZW50JyxcbiAgJ0hUTUxTdHlsZUVsZW1lbnQnLFxuICAnSFRNTEJvZHlFbGVtZW50JyxcbiAgJ0hUTUxIZWFkaW5nRWxlbWVudCcsXG4gICdIVE1MUGFyYWdyYXBoRWxlbWVudCcsXG4gICdIVE1MSFJFbGVtZW50JyxcbiAgJ0hUTUxQcmVFbGVtZW50JyxcbiAgJ0hUTUxVTGlzdEVsZW1lbnQnLFxuICAnSFRNTE9MaXN0RWxlbWVudCcsXG4gICdIVE1MTElFbGVtZW50JyxcbiAgJ0hUTUxNZW51RWxlbWVudCcsXG4gICdIVE1MRExpc3RFbGVtZW50JyxcbiAgJ0hUTUxEaXZFbGVtZW50JyxcbiAgJ0hUTUxBbmNob3JFbGVtZW50JyxcbiAgJ0hUTUxBcmVhRWxlbWVudCcsXG4gICdIVE1MQlJFbGVtZW50JyxcbiAgJ0hUTUxCdXR0b25FbGVtZW50JyxcbiAgJ0hUTUxDYW52YXNFbGVtZW50JyxcbiAgJ0hUTUxEYXRhRWxlbWVudCcsXG4gICdIVE1MRGF0YUxpc3RFbGVtZW50JyxcbiAgJ0hUTUxEZXRhaWxzRWxlbWVudCcsXG4gICdIVE1MRGlhbG9nRWxlbWVudCcsXG4gICdIVE1MRGlyZWN0b3J5RWxlbWVudCcsXG4gICdIVE1MRmllbGRTZXRFbGVtZW50JyxcbiAgJ0hUTUxGb250RWxlbWVudCcsXG4gICdIVE1MRm9ybUVsZW1lbnQnLFxuICAnSFRNTEh0bWxFbGVtZW50JyxcbiAgJ0hUTUxJbWFnZUVsZW1lbnQnLFxuICAnSFRNTElucHV0RWxlbWVudCcsXG4gICdIVE1MTGFiZWxFbGVtZW50JyxcbiAgJ0hUTUxMZWdlbmRFbGVtZW50JyxcbiAgJ0hUTUxNYXBFbGVtZW50JyxcbiAgJ0hUTUxNYXJxdWVlRWxlbWVudCcsXG4gICdIVE1MTWVkaWFFbGVtZW50JyxcbiAgJ0hUTUxNZXRlckVsZW1lbnQnLFxuICAnSFRNTE1vZEVsZW1lbnQnLFxuICAnSFRNTE9wdEdyb3VwRWxlbWVudCcsXG4gICdIVE1MT3B0aW9uRWxlbWVudCcsXG4gICdIVE1MT3V0cHV0RWxlbWVudCcsXG4gICdIVE1MUGljdHVyZUVsZW1lbnQnLFxuICAnSFRNTFByb2dyZXNzRWxlbWVudCcsXG4gICdIVE1MUXVvdGVFbGVtZW50JyxcbiAgJ0hUTUxTY3JpcHRFbGVtZW50JyxcbiAgJ0hUTUxTZWxlY3RFbGVtZW50JyxcbiAgJ0hUTUxTbG90RWxlbWVudCcsXG4gICdIVE1MU291cmNlRWxlbWVudCcsXG4gICdIVE1MU3BhbkVsZW1lbnQnLFxuICAnSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQnLFxuICAnSFRNTFRhYmxlQ2VsbEVsZW1lbnQnLFxuICAnSFRNTFRhYmxlQ29sRWxlbWVudCcsXG4gICdIVE1MVGFibGVFbGVtZW50JyxcbiAgJ0hUTUxUaW1lRWxlbWVudCcsXG4gICdIVE1MVGFibGVSb3dFbGVtZW50JyxcbiAgJ0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50JyxcbiAgJ0hUTUxUZW1wbGF0ZUVsZW1lbnQnLFxuICAnSFRNTFRleHRBcmVhRWxlbWVudCcsXG4gICdIVE1MVW5rbm93bkVsZW1lbnQnLFxuICAnSFRNTEZyYW1lRWxlbWVudCcsXG4gICdIVE1MRnJhbWVTZXRFbGVtZW50JyxcbiAgJ0hUTUxJRnJhbWVFbGVtZW50JyxcbiAgJ0hUTUxFbWJlZEVsZW1lbnQnLFxuICAnSFRNTE9iamVjdEVsZW1lbnQnLFxuICAnSFRNTFBhcmFtRWxlbWVudCcsXG4gICdIVE1MVmlkZW9FbGVtZW50JyxcbiAgJ0hUTUxBdWRpb0VsZW1lbnQnLFxuICAnSFRNTFRyYWNrRWxlbWVudCcsXG4gICdTVkdFbGVtZW50JyxcbiAgJ1NWR0dyYXBoaWNzRWxlbWVudCcsXG4gICdTVkdTVkdFbGVtZW50JyxcbiAgJ1NWR1RpdGxlRWxlbWVudCcsXG4gICdTVkdBbmltYXRlZFN0cmluZycsXG4gICdTVkdOdW1iZXInLFxuICAnU1ZHU3RyaW5nTGlzdCcsXG4gICdFdmVudCcsXG4gICdDbG9zZUV2ZW50JyxcbiAgJ0N1c3RvbUV2ZW50JyxcbiAgJ01lc3NhZ2VFdmVudCcsXG4gICdFcnJvckV2ZW50JyxcbiAgJ0hhc2hDaGFuZ2VFdmVudCcsXG4gICdQb3BTdGF0ZUV2ZW50JyxcbiAgJ1N0b3JhZ2VFdmVudCcsXG4gICdQcm9ncmVzc0V2ZW50JyxcbiAgJ1BhZ2VUcmFuc2l0aW9uRXZlbnQnLFxuICAnVUlFdmVudCcsXG4gICdGb2N1c0V2ZW50JyxcbiAgJ0lucHV0RXZlbnQnLFxuICAnTW91c2VFdmVudCcsXG4gICdLZXlib2FyZEV2ZW50JyxcbiAgJ1RvdWNoRXZlbnQnLFxuICAnQ29tcG9zaXRpb25FdmVudCcsXG4gICdXaGVlbEV2ZW50JyxcbiAgJ0JhclByb3AnLFxuICAnRXh0ZXJuYWwnLFxuICAnTG9jYXRpb24nLFxuICAnSGlzdG9yeScsXG4gICdTY3JlZW4nLFxuICAnUGVyZm9ybWFuY2UnLFxuICAnTmF2aWdhdG9yJyxcbiAgJ1BsdWdpbkFycmF5JyxcbiAgJ01pbWVUeXBlQXJyYXknLFxuICAnUGx1Z2luJyxcbiAgJ01pbWVUeXBlJyxcbiAgJ0ZpbGVSZWFkZXInLFxuICAnQmxvYicsXG4gICdGaWxlJyxcbiAgJ0ZpbGVMaXN0JyxcbiAgJ1ZhbGlkaXR5U3RhdGUnLFxuICAnRE9NUGFyc2VyJyxcbiAgJ1hNTFNlcmlhbGl6ZXInLFxuICAnRm9ybURhdGEnLFxuICAnWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCcsXG4gICdYTUxIdHRwUmVxdWVzdFVwbG9hZCcsXG4gICdYTUxIdHRwUmVxdWVzdCcsXG4gICdXZWJTb2NrZXQnLFxuICAnTm9kZUZpbHRlcicsXG4gICdOb2RlSXRlcmF0b3InLFxuICAnVHJlZVdhbGtlcicsXG4gICdBYnN0cmFjdFJhbmdlJyxcbiAgJ1JhbmdlJyxcbiAgJ1N0YXRpY1JhbmdlJyxcbiAgJ1NlbGVjdGlvbicsXG4gICdTdG9yYWdlJyxcbiAgJ0N1c3RvbUVsZW1lbnRSZWdpc3RyeScsXG4gICdTaGFkb3dSb290JyxcbiAgJ011dGF0aW9uT2JzZXJ2ZXInLFxuICAnTXV0YXRpb25SZWNvcmQnLFxuICAnSGVhZGVycycsXG4gICdBYm9ydENvbnRyb2xsZXInLFxuICAnQWJvcnRTaWduYWwnLFxuXG4gIC8vIG5vdCBzcGVjaWZpZWQgaW4gZG9jcywgYnV0IGlzIGF2YWlsYWJsZVxuICAnSW1hZ2UnLFxuXVxuXG5jb25zdCBPVEhFUl9LRVlTID0gW1xuICAnYWRkRXZlbnRMaXN0ZW5lcicsXG4gICdhbGVydCcsXG4gICdhdG9iJyxcbiAgJ2JsdXInLFxuICAnYnRvYScsXG4gIC8qICdjbGVhckludGVydmFsJywgKi9cbiAgLyogJ2NsZWFyVGltZW91dCcsICovXG4gICdjbG9zZScsXG4gICdjb25maXJtJyxcbiAgLyogJ2NvbnNvbGUnLCAqL1xuICAnY3JlYXRlUG9wdXAnLFxuICAnZGlzcGF0Y2hFdmVudCcsXG4gICdkb2N1bWVudCcsXG4gICdmb2N1cycsXG4gICdmcmFtZXMnLFxuICAnZ2V0Q29tcHV0ZWRTdHlsZScsXG4gICdoaXN0b3J5JyxcbiAgJ2lubmVySGVpZ2h0JyxcbiAgJ2lubmVyV2lkdGgnLFxuICAnbGVuZ3RoJyxcbiAgJ2xvY2F0aW9uJyxcbiAgJ21hdGNoTWVkaWEnLFxuICAnbW92ZUJ5JyxcbiAgJ21vdmVUbycsXG4gICduYW1lJyxcbiAgJ25hdmlnYXRvcicsXG4gICdvcGVuJyxcbiAgJ291dGVySGVpZ2h0JyxcbiAgJ291dGVyV2lkdGgnLFxuICAncGFnZVhPZmZzZXQnLFxuICAncGFnZVlPZmZzZXQnLFxuICAncGFyZW50JyxcbiAgJ3Bvc3RNZXNzYWdlJyxcbiAgJ3ByaW50JyxcbiAgJ3Byb21wdCcsXG4gICdyZW1vdmVFdmVudExpc3RlbmVyJyxcbiAgJ3Jlc2l6ZUJ5JyxcbiAgJ3Jlc2l6ZVRvJyxcbiAgJ3NjcmVlbicsXG4gICdzY3JlZW5MZWZ0JyxcbiAgJ3NjcmVlblRvcCcsXG4gICdzY3JlZW5YJyxcbiAgJ3NjcmVlblknLFxuICAnc2Nyb2xsJyxcbiAgJ3Njcm9sbEJ5JyxcbiAgJ3Njcm9sbExlZnQnLFxuICAnc2Nyb2xsVG8nLFxuICAnc2Nyb2xsVG9wJyxcbiAgJ3Njcm9sbFgnLFxuICAnc2Nyb2xsWScsXG4gICdzZWxmJyxcbiAgLyogJ3NldEludGVydmFsJywgKi9cbiAgLyogJ3NldFRpbWVvdXQnLCAqL1xuICAnc3RvcCcsXG4gIC8qICd0b1N0cmluZycsICovXG4gICd0b3AnLFxuICAnd2luZG93Jyxcbl1cblxuZXhwb3J0IGNvbnN0IEtFWVMgPSBMSVZJTkdfS0VZUy5jb25jYXQoT1RIRVJfS0VZUylcbiIsImltcG9ydCB7IGltcG9ydE1vZHVsZSB9IGZyb20gJ2xvY2FsLXBrZydcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnQsIEpTRE9NT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgS0VZUyB9IGZyb20gJy4vanNkb20ta2V5cydcblxuZXhwb3J0IGRlZmF1bHQgPEVudmlyb25tZW50Pih7XG4gIG5hbWU6ICdqc2RvbScsXG4gIGFzeW5jIHNldHVwKGdsb2JhbCwgeyBqc2RvbSA9IHt9IH0pIHtcbiAgICBjb25zdCB7XG4gICAgICBDb29raWVKYXIsXG4gICAgICBKU0RPTSxcbiAgICAgIFJlc291cmNlTG9hZGVyLFxuICAgICAgVmlydHVhbENvbnNvbGUsXG4gICAgfSA9IGF3YWl0IGltcG9ydE1vZHVsZSgnanNkb20nKSBhcyB0eXBlb2YgaW1wb3J0KCdqc2RvbScpXG4gICAgY29uc3Qge1xuICAgICAgaHRtbCA9ICc8IURPQ1RZUEUgaHRtbD4nLFxuICAgICAgdXNlckFnZW50LFxuICAgICAgdXJsID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCcsXG4gICAgICBjb250ZW50VHlwZSA9ICd0ZXh0L2h0bWwnLFxuICAgICAgcHJldGVuZFRvQmVWaXN1YWwgPSB0cnVlLFxuICAgICAgaW5jbHVkZU5vZGVMb2NhdGlvbnMgPSBmYWxzZSxcbiAgICAgIHJ1blNjcmlwdHMgPSAnZGFuZ2Vyb3VzbHknLFxuICAgICAgcmVzb3VyY2VzLFxuICAgICAgY29uc29sZSA9IGZhbHNlLFxuICAgICAgY29va2llSmFyID0gZmFsc2UsXG4gICAgICAuLi5yZXN0T3B0aW9uc1xuICAgIH0gPSBqc2RvbSBhcyBKU0RPTU9wdGlvbnNcbiAgICBjb25zdCBkb20gPSBuZXcgSlNET00oXG4gICAgICBodG1sLFxuICAgICAge1xuICAgICAgICBwcmV0ZW5kVG9CZVZpc3VhbCxcbiAgICAgICAgcmVzb3VyY2VzOiByZXNvdXJjZXMgPz8gKHVzZXJBZ2VudCA/IG5ldyBSZXNvdXJjZUxvYWRlcih7IHVzZXJBZ2VudCB9KSA6IHVuZGVmaW5lZCksXG4gICAgICAgIHJ1blNjcmlwdHMsXG4gICAgICAgIHVybCxcbiAgICAgICAgdmlydHVhbENvbnNvbGU6IGNvbnNvbGUgJiYgZ2xvYmFsLmNvbnNvbGUgPyBuZXcgVmlydHVhbENvbnNvbGUoKS5zZW5kVG8oZ2xvYmFsLmNvbnNvbGUpIDogdW5kZWZpbmVkLFxuICAgICAgICBjb29raWVKYXI6IGNvb2tpZUphciA/IG5ldyBDb29raWVKYXIoKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgaW5jbHVkZU5vZGVMb2NhdGlvbnMsXG4gICAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAgICB1c2VyQWdlbnQsXG4gICAgICAgIC4uLnJlc3RPcHRpb25zLFxuICAgICAgfSxcbiAgICApXG5cbiAgICBjb25zdCBrZXlzID0gbmV3IFNldChLRVlTLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhkb20ud2luZG93KSlcbiAgICAgIC5maWx0ZXIoayA9PiAhay5zdGFydHNXaXRoKCdfJykgJiYgIShrIGluIGdsb2JhbCkpKVxuXG4gICAgY29uc3Qgb3ZlcnJpZGVPYmplY3QgPSBuZXcgTWFwPHN0cmluZywgYW55PigpXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbCwga2V5LCB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICBpZiAob3ZlcnJpZGVPYmplY3QuaGFzKGtleSkpXG4gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVPYmplY3QuZ2V0KGtleSlcbiAgICAgICAgICByZXR1cm4gZG9tLndpbmRvd1trZXldXG4gICAgICAgIH0sXG4gICAgICAgIHNldCh2KSB7XG4gICAgICAgICAgb3ZlcnJpZGVPYmplY3Quc2V0KGtleSwgdilcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGVhcmRvd24oZ2xvYmFsKSB7XG4gICAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4gZGVsZXRlIGdsb2JhbFtrZXldKVxuICAgICAgfSxcbiAgICB9XG4gIH0sXG59KVxuIiwiaW1wb3J0IHsgaW1wb3J0TW9kdWxlIH0gZnJvbSAnbG9jYWwtcGtnJ1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgS0VZUyB9IGZyb20gJy4vanNkb20ta2V5cydcblxuZXhwb3J0IGRlZmF1bHQgPEVudmlyb25tZW50Pih7XG4gIG5hbWU6ICdoYXBweS1kb20nLFxuICBhc3luYyBzZXR1cChnbG9iYWwpIHtcbiAgICBjb25zdCB7IFdpbmRvdyB9ID0gYXdhaXQgaW1wb3J0TW9kdWxlKCdoYXBweS1kb20nKSBhcyB0eXBlb2YgaW1wb3J0KCdoYXBweS1kb20nKVxuICAgIGNvbnN0IHdpbjogYW55ID0gbmV3IFdpbmRvdygpXG5cbiAgICBjb25zdCBrZXlzID0gbmV3IFNldChLRVlTLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW4pKVxuICAgICAgLmZpbHRlcihrID0+ICFrLnN0YXJ0c1dpdGgoJ18nKSAmJiAhKGsgaW4gZ2xvYmFsKSkpXG5cbiAgICBjb25zdCBvdmVycmlkZU9iamVjdCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KClcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsLCBrZXksIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIGlmIChvdmVycmlkZU9iamVjdC5oYXMoa2V5KSlcbiAgICAgICAgICAgIHJldHVybiBvdmVycmlkZU9iamVjdC5nZXQoa2V5KVxuICAgICAgICAgIHJldHVybiB3aW5ba2V5XVxuICAgICAgICB9LFxuICAgICAgICBzZXQodikge1xuICAgICAgICAgIG92ZXJyaWRlT2JqZWN0LnNldChrZXksIHYpXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRlYXJkb3duKGdsb2JhbCkge1xuICAgICAgICB3aW4uaGFwcHlET00uY2FuY2VsQXN5bmMoKVxuICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IGRlbGV0ZSBnbG9iYWxba2V5XSlcbiAgICAgIH0sXG4gICAgfVxuICB9LFxufSlcbiIsImltcG9ydCBub2RlIGZyb20gJy4vbm9kZSdcbmltcG9ydCBqc2RvbSBmcm9tICcuL2pzZG9tJ1xuaW1wb3J0IGhhcHB5IGZyb20gJy4vaGFwcHktZG9tJ1xuXG5leHBvcnQgY29uc3QgZW52aXJvbm1lbnRzID0ge1xuICBub2RlLFxuICBqc2RvbSxcbiAgJ2hhcHB5LWRvbSc6IGhhcHB5LFxufVxuIiwiKGZ1bmN0aW9uKCkge1xuXHQoZnVuY3Rpb24oY2hhaVN1YnNldCkge1xuXHRcdGlmICh0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cyA9IGNoYWlTdWJzZXQ7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcblx0XHRcdHJldHVybiBkZWZpbmUoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBjaGFpU3Vic2V0O1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjaGFpLnVzZShjaGFpU3Vic2V0KTtcblx0XHR9XG5cdH0pKGZ1bmN0aW9uKGNoYWksIHV0aWxzKSB7XG5cdFx0dmFyIEFzc2VydGlvbiA9IGNoYWkuQXNzZXJ0aW9uO1xuXHRcdHZhciBhc3NlcnRpb25Qcm90b3R5cGUgPSBBc3NlcnRpb24ucHJvdG90eXBlO1xuXG5cdFx0QXNzZXJ0aW9uLmFkZE1ldGhvZCgnY29udGFpblN1YnNldCcsIGZ1bmN0aW9uIChleHBlY3RlZCkge1xuXHRcdFx0dmFyIGFjdHVhbCA9IHV0aWxzLmZsYWcodGhpcywgJ29iamVjdCcpO1xuXHRcdFx0dmFyIHNob3dEaWZmID0gY2hhaS5jb25maWcuc2hvd0RpZmY7XG5cblx0XHRcdGFzc2VydGlvblByb3RvdHlwZS5hc3NlcnQuY2FsbCh0aGlzLFxuXHRcdFx0XHRjb21wYXJlKGV4cGVjdGVkLCBhY3R1YWwpLFxuXHRcdFx0XHQnZXhwZWN0ZWQgI3thY3R9IHRvIGNvbnRhaW4gc3Vic2V0ICN7ZXhwfScsXG5cdFx0XHRcdCdleHBlY3RlZCAje2FjdH0gdG8gbm90IGNvbnRhaW4gc3Vic2V0ICN7ZXhwfScsXG5cdFx0XHRcdGV4cGVjdGVkLFxuXHRcdFx0XHRhY3R1YWwsXG5cdFx0XHRcdHNob3dEaWZmXG5cdFx0XHQpO1xuXHRcdH0pO1xuXG5cdFx0Y2hhaS5hc3NlcnQuY29udGFpblN1YnNldCA9IGZ1bmN0aW9uKHZhbCwgZXhwLCBtc2cpIHtcblx0XHRcdG5ldyBjaGFpLkFzc2VydGlvbih2YWwsIG1zZykudG8uYmUuY29udGFpblN1YnNldChleHApO1xuXHRcdH07XG5cblx0XHRmdW5jdGlvbiBjb21wYXJlKGV4cGVjdGVkLCBhY3R1YWwpIHtcblx0XHRcdGlmIChleHBlY3RlZCA9PT0gYWN0dWFsKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGVvZihhY3R1YWwpICE9PSB0eXBlb2YoZXhwZWN0ZWQpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YoZXhwZWN0ZWQpICE9PSAnb2JqZWN0JyB8fCBleHBlY3RlZCA9PT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm4gZXhwZWN0ZWQgPT09IGFjdHVhbDtcblx0XHRcdH1cblx0XHRcdGlmICghIWV4cGVjdGVkICYmICFhY3R1YWwpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShleHBlY3RlZCkpIHtcblx0XHRcdFx0aWYgKHR5cGVvZihhY3R1YWwubGVuZ3RoKSAhPT0gJ251bWJlcicpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGFhID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYWN0dWFsKTtcblx0XHRcdFx0cmV0dXJuIGV4cGVjdGVkLmV2ZXJ5KGZ1bmN0aW9uIChleHApIHtcblx0XHRcdFx0XHRyZXR1cm4gYWEuc29tZShmdW5jdGlvbiAoYWN0KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY29tcGFyZShleHAsIGFjdCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZXhwZWN0ZWQgaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0XHRcdGlmIChhY3R1YWwgaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGV4cGVjdGVkLmdldFRpbWUoKSA9PT0gYWN0dWFsLmdldFRpbWUoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIE9iamVjdC5rZXlzKGV4cGVjdGVkKS5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRcdHZhciBlbyA9IGV4cGVjdGVkW2tleV07XG5cdFx0XHRcdHZhciBhbyA9IGFjdHVhbFtrZXldO1xuXHRcdFx0XHRpZiAodHlwZW9mKGVvKSA9PT0gJ29iamVjdCcgJiYgZW8gIT09IG51bGwgJiYgYW8gIT09IG51bGwpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29tcGFyZShlbywgYW8pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0eXBlb2YoZW8pID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVvKGFvKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gYW8gPT09IGVvO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblxufSkuY2FsbCh0aGlzKTtcblxuIiwiXG5cblxuLypcbiAqIEB2ZXJzaW9uICAgIDEuNC4wXG4gKiBAZGF0ZSAgICAgICAyMDE1LTEwLTI2XG4gKiBAc3RhYmlsaXR5ICAzIC0gU3RhYmxlXG4gKiBAYXV0aG9yICAgICBMYXVyaSBSb29kZW4gKGh0dHBzOi8vZ2l0aHViLmNvbS9saXRlanMvbmF0dXJhbC1jb21wYXJlLWxpdGUpXG4gKiBAbGljZW5zZSAgICBNSVQgTGljZW5zZVxuICovXG5cblxudmFyIG5hdHVyYWxDb21wYXJlID0gZnVuY3Rpb24oYSwgYikge1xuXHR2YXIgaSwgY29kZUFcblx0LCBjb2RlQiA9IDFcblx0LCBwb3NBID0gMFxuXHQsIHBvc0IgPSAwXG5cdCwgYWxwaGFiZXQgPSBTdHJpbmcuYWxwaGFiZXRcblxuXHRmdW5jdGlvbiBnZXRDb2RlKHN0ciwgcG9zLCBjb2RlKSB7XG5cdFx0aWYgKGNvZGUpIHtcblx0XHRcdGZvciAoaSA9IHBvczsgY29kZSA9IGdldENvZGUoc3RyLCBpKSwgY29kZSA8IDc2ICYmIGNvZGUgPiA2NTspICsraTtcblx0XHRcdHJldHVybiArc3RyLnNsaWNlKHBvcyAtIDEsIGkpXG5cdFx0fVxuXHRcdGNvZGUgPSBhbHBoYWJldCAmJiBhbHBoYWJldC5pbmRleE9mKHN0ci5jaGFyQXQocG9zKSlcblx0XHRyZXR1cm4gY29kZSA+IC0xID8gY29kZSArIDc2IDogKChjb2RlID0gc3RyLmNoYXJDb2RlQXQocG9zKSB8fCAwKSwgY29kZSA8IDQ1IHx8IGNvZGUgPiAxMjcpID8gY29kZVxuXHRcdFx0OiBjb2RlIDwgNDYgPyA2NSAgICAgICAgICAgICAgIC8vIC1cblx0XHRcdDogY29kZSA8IDQ4ID8gY29kZSAtIDFcblx0XHRcdDogY29kZSA8IDU4ID8gY29kZSArIDE4ICAgICAgICAvLyAwLTlcblx0XHRcdDogY29kZSA8IDY1ID8gY29kZSAtIDExXG5cdFx0XHQ6IGNvZGUgPCA5MSA/IGNvZGUgKyAxMSAgICAgICAgLy8gQS1aXG5cdFx0XHQ6IGNvZGUgPCA5NyA/IGNvZGUgLSAzN1xuXHRcdFx0OiBjb2RlIDwgMTIzID8gY29kZSArIDUgICAgICAgIC8vIGEtelxuXHRcdFx0OiBjb2RlIC0gNjNcblx0fVxuXG5cblx0aWYgKChhKz1cIlwiKSAhPSAoYis9XCJcIikpIGZvciAoO2NvZGVCOykge1xuXHRcdGNvZGVBID0gZ2V0Q29kZShhLCBwb3NBKyspXG5cdFx0Y29kZUIgPSBnZXRDb2RlKGIsIHBvc0IrKylcblxuXHRcdGlmIChjb2RlQSA8IDc2ICYmIGNvZGVCIDwgNzYgJiYgY29kZUEgPiA2NiAmJiBjb2RlQiA+IDY2KSB7XG5cdFx0XHRjb2RlQSA9IGdldENvZGUoYSwgcG9zQSwgcG9zQSlcblx0XHRcdGNvZGVCID0gZ2V0Q29kZShiLCBwb3NCLCBwb3NBID0gaSlcblx0XHRcdHBvc0IgPSBpXG5cdFx0fVxuXG5cdFx0aWYgKGNvZGVBICE9IGNvZGVCKSByZXR1cm4gKGNvZGVBIDwgY29kZUIpID8gLTEgOiAxXG5cdH1cblx0cmV0dXJuIDBcbn1cblxudHJ5IHtcblx0bW9kdWxlLmV4cG9ydHMgPSBuYXR1cmFsQ29tcGFyZTtcbn0gY2F0Y2ggKGUpIHtcblx0U3RyaW5nLm5hdHVyYWxDb21wYXJlID0gbmF0dXJhbENvbXBhcmU7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmltcG9ydCBmcywgeyBwcm9taXNlcyBhcyBmc3AgfSBmcm9tICdmcydcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGhlJ1xuaW1wb3J0IG5hdHVyYWxDb21wYXJlIGZyb20gJ25hdHVyYWwtY29tcGFyZSdcbmltcG9ydCB0eXBlIHsgT3B0aW9uc1JlY2VpdmVkIGFzIFByZXR0eUZvcm1hdE9wdGlvbnMgfSBmcm9tICdwcmV0dHktZm9ybWF0J1xuaW1wb3J0IHtcbiAgZm9ybWF0IGFzIHByZXR0eUZvcm1hdCxcbn0gZnJvbSAncHJldHR5LWZvcm1hdCdcbmltcG9ydCB0eXBlIHsgU25hcHNob3REYXRhLCBTbmFwc2hvdFVwZGF0ZVN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0U2VyaWFsaXplcnMgfSBmcm9tICcuL3BsdWdpbnMnXG5cbi8vIFRPRE86IHJld3JpdGUgYW5kIGNsZWFuIHVwXG5cbmV4cG9ydCBjb25zdCBTTkFQU0hPVF9WRVJTSU9OID0gJzEnXG5cbmNvbnN0IHdyaXRlU25hcHNob3RWZXJzaW9uID0gKCkgPT4gYC8vIFZpdGVzdCBTbmFwc2hvdCB2JHtTTkFQU0hPVF9WRVJTSU9OfWBcblxuZXhwb3J0IGNvbnN0IHRlc3ROYW1lVG9LZXkgPSAodGVzdE5hbWU6IHN0cmluZywgY291bnQ6IG51bWJlcik6IHN0cmluZyA9PlxuICBgJHt0ZXN0TmFtZX0gJHtjb3VudH1gXG5cbmV4cG9ydCBjb25zdCBrZXlUb1Rlc3ROYW1lID0gKGtleTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgaWYgKCEvIFxcZCskLy50ZXN0KGtleSkpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdTbmFwc2hvdCBrZXlzIG11c3QgZW5kIHdpdGggYSBudW1iZXIuJylcblxuICByZXR1cm4ga2V5LnJlcGxhY2UoLyBcXGQrJC8sICcnKVxufVxuXG5leHBvcnQgY29uc3QgZ2V0U25hcHNob3REYXRhID0gKFxuICBzbmFwc2hvdFBhdGg6IHN0cmluZyxcbiAgdXBkYXRlOiBTbmFwc2hvdFVwZGF0ZVN0YXRlLFxuKToge1xuICBkYXRhOiBTbmFwc2hvdERhdGFcbiAgZGlydHk6IGJvb2xlYW5cbn0gPT4ge1xuICBjb25zdCBkYXRhID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuICBsZXQgc25hcHNob3RDb250ZW50cyA9ICcnXG4gIGxldCBkaXJ0eSA9IGZhbHNlXG5cbiAgaWYgKGZzLmV4aXN0c1N5bmMoc25hcHNob3RQYXRoKSkge1xuICAgIHRyeSB7XG4gICAgICBzbmFwc2hvdENvbnRlbnRzID0gZnMucmVhZEZpbGVTeW5jKHNuYXBzaG90UGF0aCwgJ3V0ZjgnKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBjb25zdCBwb3B1bGF0ZSA9IG5ldyBGdW5jdGlvbignZXhwb3J0cycsIHNuYXBzaG90Q29udGVudHMpXG4gICAgICBwb3B1bGF0ZShkYXRhKVxuICAgIH1cbiAgICBjYXRjaCB7fVxuICB9XG5cbiAgLy8gY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHZhbGlkYXRlU25hcHNob3RWZXJzaW9uKHNuYXBzaG90Q29udGVudHMpXG4gIGNvbnN0IGlzSW52YWxpZCA9IHNuYXBzaG90Q29udGVudHMgLy8gJiYgdmFsaWRhdGlvblJlc3VsdFxuXG4gIC8vIGlmICh1cGRhdGUgPT09ICdub25lJyAmJiBpc0ludmFsaWQpXG4gIC8vICAgdGhyb3cgdmFsaWRhdGlvblJlc3VsdFxuXG4gIGlmICgodXBkYXRlID09PSAnYWxsJyB8fCB1cGRhdGUgPT09ICduZXcnKSAmJiBpc0ludmFsaWQpXG4gICAgZGlydHkgPSB0cnVlXG5cbiAgcmV0dXJuIHsgZGF0YSwgZGlydHkgfVxufVxuXG4vLyBBZGQgZXh0cmEgbGluZSBicmVha3MgYXQgYmVnaW5uaW5nIGFuZCBlbmQgb2YgbXVsdGlsaW5lIHNuYXBzaG90XG4vLyB0byBtYWtlIHRoZSBjb250ZW50IGVhc2llciB0byByZWFkLlxuZXhwb3J0IGNvbnN0IGFkZEV4dHJhTGluZUJyZWFrcyA9IChzdHJpbmc6IHN0cmluZyk6IHN0cmluZyA9PlxuICBzdHJpbmcuaW5jbHVkZXMoJ1xcbicpID8gYFxcbiR7c3RyaW5nfVxcbmAgOiBzdHJpbmdcblxuLy8gUmVtb3ZlIGV4dHJhIGxpbmUgYnJlYWtzIGF0IGJlZ2lubmluZyBhbmQgZW5kIG9mIG11bHRpbGluZSBzbmFwc2hvdC5cbi8vIEluc3RlYWQgb2YgdHJpbSwgd2hpY2ggY2FuIHJlbW92ZSBhZGRpdGlvbmFsIG5ld2xpbmVzIG9yIHNwYWNlc1xuLy8gYXQgYmVnaW5uaW5nIG9yIGVuZCBvZiB0aGUgY29udGVudCBmcm9tIGEgY3VzdG9tIHNlcmlhbGl6ZXIuXG5leHBvcnQgY29uc3QgcmVtb3ZlRXh0cmFMaW5lQnJlYWtzID0gKHN0cmluZzogc3RyaW5nKTogc3RyaW5nID0+XG4gIHN0cmluZy5sZW5ndGggPiAyICYmIHN0cmluZy5zdGFydHNXaXRoKCdcXG4nKSAmJiBzdHJpbmcuZW5kc1dpdGgoJ1xcbicpXG4gICAgPyBzdHJpbmcuc2xpY2UoMSwgLTEpXG4gICAgOiBzdHJpbmdcblxuLy8gZXhwb3J0IGNvbnN0IHJlbW92ZUxpbmVzQmVmb3JlRXh0ZXJuYWxNYXRjaGVyVHJhcCA9IChzdGFjazogc3RyaW5nKTogc3RyaW5nID0+IHtcbi8vICAgY29uc3QgbGluZXMgPSBzdGFjay5zcGxpdCgnXFxuJylcblxuLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSArPSAxKSB7XG4vLyAgICAgLy8gSXQncyBhIGZ1bmN0aW9uIG5hbWUgc3BlY2lmaWVkIGluIGBwYWNrYWdlcy9leHBlY3Qvc3JjL2luZGV4LnRzYFxuLy8gICAgIC8vIGZvciBleHRlcm5hbCBjdXN0b20gbWF0Y2hlcnMuXG4vLyAgICAgaWYgKGxpbmVzW2ldLmluY2x1ZGVzKCdfX0VYVEVSTkFMX01BVENIRVJfVFJBUF9fJykpXG4vLyAgICAgICByZXR1cm4gbGluZXMuc2xpY2UoaSArIDEpLmpvaW4oJ1xcbicpXG4vLyAgIH1cblxuLy8gICByZXR1cm4gc3RhY2tcbi8vIH1cblxuY29uc3QgZXNjYXBlUmVnZXggPSB0cnVlXG5jb25zdCBwcmludEZ1bmN0aW9uTmFtZSA9IGZhbHNlXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemUodmFsOiB1bmtub3duLFxuICBpbmRlbnQgPSAyLFxuICBmb3JtYXRPdmVycmlkZXM6IFByZXR0eUZvcm1hdE9wdGlvbnMgPSB7fSk6IHN0cmluZyB7XG4gIHJldHVybiBub3JtYWxpemVOZXdsaW5lcyhcbiAgICBwcmV0dHlGb3JtYXQodmFsLCB7XG4gICAgICBlc2NhcGVSZWdleCxcbiAgICAgIGluZGVudCxcbiAgICAgIHBsdWdpbnM6IGdldFNlcmlhbGl6ZXJzKCksXG4gICAgICBwcmludEZ1bmN0aW9uTmFtZSxcbiAgICAgIC4uLmZvcm1hdE92ZXJyaWRlcyxcbiAgICB9KSxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWluaWZ5KHZhbDogdW5rbm93bik6IHN0cmluZyB7XG4gIHJldHVybiBwcmV0dHlGb3JtYXQodmFsLCB7XG4gICAgZXNjYXBlUmVnZXgsXG4gICAgbWluOiB0cnVlLFxuICAgIHBsdWdpbnM6IGdldFNlcmlhbGl6ZXJzKCksXG4gICAgcHJpbnRGdW5jdGlvbk5hbWUsXG4gIH0pXG59XG5cbi8vIFJlbW92ZSBkb3VibGUgcXVvdGUgbWFya3MgYW5kIHVuZXNjYXBlIGRvdWJsZSBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzLlxuZXhwb3J0IGZ1bmN0aW9uIGRlc2VyaWFsaXplU3RyaW5nKHN0cmluZ2lmaWVkOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5naWZpZWQuc2xpY2UoMSwgLTEpLnJlcGxhY2UoL1xcXFwoXCJ8XFxcXCkvZywgJyQxJylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUJhY2t0aWNrU3RyaW5nKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9gfFxcXFx8XFwkey9nLCAnXFxcXCQmJylcbn1cblxuZnVuY3Rpb24gcHJpbnRCYWNrdGlja1N0cmluZyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgXFxgJHtlc2NhcGVCYWNrdGlja1N0cmluZyhzdHIpfVxcYGBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZURpcmVjdG9yeUV4aXN0cyhmaWxlUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgZnMubWtkaXJTeW5jKHBhdGguam9pbihwYXRoLmRpcm5hbWUoZmlsZVBhdGgpKSwgeyByZWN1cnNpdmU6IHRydWUgfSlcbiAgfVxuICBjYXRjaCB7IH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTmV3bGluZXMoc3RyaW5nOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXHJcXG58XFxyL2csICdcXG4nKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2F2ZVNuYXBzaG90RmlsZShcbiAgc25hcHNob3REYXRhOiBTbmFwc2hvdERhdGEsXG4gIHNuYXBzaG90UGF0aDogc3RyaW5nLFxuKSB7XG4gIGNvbnN0IHNuYXBzaG90cyA9IE9iamVjdC5rZXlzKHNuYXBzaG90RGF0YSlcbiAgICAuc29ydChuYXR1cmFsQ29tcGFyZSlcbiAgICAubWFwKFxuICAgICAga2V5ID0+IGBleHBvcnRzWyR7cHJpbnRCYWNrdGlja1N0cmluZyhrZXkpfV0gPSAke3ByaW50QmFja3RpY2tTdHJpbmcobm9ybWFsaXplTmV3bGluZXMoc25hcHNob3REYXRhW2tleV0pKX07YCxcbiAgICApXG5cbiAgZW5zdXJlRGlyZWN0b3J5RXhpc3RzKHNuYXBzaG90UGF0aClcbiAgYXdhaXQgZnNwLndyaXRlRmlsZShcbiAgICBzbmFwc2hvdFBhdGgsXG4gICAgYCR7d3JpdGVTbmFwc2hvdFZlcnNpb24oKX1cXG5cXG4ke3NuYXBzaG90cy5qb2luKCdcXG5cXG4nKX1cXG5gLFxuICAgICd1dGYtOCcsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVFeHBlY3RlZChleHBlY3RlZD86IHN0cmluZykge1xuICBmdW5jdGlvbiBmaW5kU3RhcnRJbmRlbnQoKSB7XG4gICAgY29uc3QgbWF0Y2ggPSAvXiggKyl9XFxzKyQvbS5leGVjKGV4cGVjdGVkIHx8ICcnKVxuICAgIHJldHVybiBtYXRjaD8uWzFdPy5sZW5ndGggfHwgMFxuICB9XG5cbiAgY29uc3Qgc3RhcnRJZGVudCA9IGZpbmRTdGFydEluZGVudCgpXG5cbiAgbGV0IGV4cGVjdGVkVHJpbW1lZCA9IGV4cGVjdGVkPy50cmltKClcblxuICBpZiAoc3RhcnRJZGVudCkge1xuICAgIGV4cGVjdGVkVHJpbW1lZCA9IGV4cGVjdGVkVHJpbW1lZFxuICAgICAgPy5yZXBsYWNlKG5ldyBSZWdFeHAoYF4keycgJy5yZXBlYXQoc3RhcnRJZGVudCl9YCwgJ2dtJyksICcnKS5yZXBsYWNlKC8gK30kLywgJ30nKVxuICB9XG5cbiAgcmV0dXJuIGV4cGVjdGVkVHJpbW1lZFxufVxuXG5mdW5jdGlvbiBkZWVwTWVyZ2VBcnJheSh0YXJnZXQ6IGFueVtdID0gW10sIHNvdXJjZTogYW55W10gPSBbXSkge1xuICBjb25zdCBtZXJnZWRPdXRwdXQgPSBBcnJheS5mcm9tKHRhcmdldClcblxuICBzb3VyY2UuZm9yRWFjaCgoc291cmNlRWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gbWVyZ2VkT3V0cHV0W2luZGV4XVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0W2luZGV4XSkpIHtcbiAgICAgIG1lcmdlZE91dHB1dFtpbmRleF0gPSBkZWVwTWVyZ2VBcnJheSh0YXJnZXRbaW5kZXhdLCBzb3VyY2VFbGVtZW50KVxuICAgIH1cbiAgICBlbHNlIGlmIChpc09iamVjdCh0YXJnZXRFbGVtZW50KSkge1xuICAgICAgbWVyZ2VkT3V0cHV0W2luZGV4XSA9IGRlZXBNZXJnZVNuYXBzaG90KHRhcmdldFtpbmRleF0sIHNvdXJjZUVsZW1lbnQpXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy8gU291cmNlIGRvZXMgbm90IGV4aXN0IGluIHRhcmdldCBvciB0YXJnZXQgaXMgcHJpbWl0aXZlIGFuZCBjYW5ub3QgYmUgZGVlcCBtZXJnZWRcbiAgICAgIG1lcmdlZE91dHB1dFtpbmRleF0gPSBzb3VyY2VFbGVtZW50XG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBtZXJnZWRPdXRwdXRcbn1cblxuLyoqXG4gKiBEZWVwIG1lcmdlLCBidXQgY29uc2lkZXJzIGFzeW1tZXRyaWMgbWF0Y2hlcnMuIFVubGlrZSBiYXNlIHV0aWwncyBkZWVwIG1lcmdlLFxuICogd2lsbCBtZXJnZSBhbnkgb2JqZWN0LWxpa2UgaW5zdGFuY2UuXG4gKiBDb21wYXRpYmxlIHdpdGggSmVzdCdzIHNuYXBzaG90IG1hdGNoZXIuIFNob3VsZCBub3QgYmUgdXNlZCBvdXRzaWRlIG9mIHNuYXBzaG90LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogdG9NYXRjaFNuYXBzaG90KHtcbiAqICAgbmFtZTogZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ3RleHQnKVxuICogfSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVlcE1lcmdlU25hcHNob3QodGFyZ2V0OiBhbnksIHNvdXJjZTogYW55KTogYW55IHtcbiAgaWYgKGlzT2JqZWN0KHRhcmdldCkgJiYgaXNPYmplY3Qoc291cmNlKSkge1xuICAgIGNvbnN0IG1lcmdlZE91dHB1dCA9IHsgLi4udGFyZ2V0IH1cbiAgICBPYmplY3Qua2V5cyhzb3VyY2UpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGlzT2JqZWN0KHNvdXJjZVtrZXldKSAmJiAhc291cmNlW2tleV0uJCR0eXBlb2YpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIHRhcmdldCkpIE9iamVjdC5hc3NpZ24obWVyZ2VkT3V0cHV0LCB7IFtrZXldOiBzb3VyY2Vba2V5XSB9KVxuICAgICAgICBlbHNlIG1lcmdlZE91dHB1dFtrZXldID0gZGVlcE1lcmdlU25hcHNob3QodGFyZ2V0W2tleV0sIHNvdXJjZVtrZXldKVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2Vba2V5XSkpIHtcbiAgICAgICAgbWVyZ2VkT3V0cHV0W2tleV0gPSBkZWVwTWVyZ2VBcnJheSh0YXJnZXRba2V5XSwgc291cmNlW2tleV0pXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihtZXJnZWRPdXRwdXQsIHsgW2tleV06IHNvdXJjZVtrZXldIH0pXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBtZXJnZWRPdXRwdXRcbiAgfVxuICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkgJiYgQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgcmV0dXJuIGRlZXBNZXJnZUFycmF5KHRhcmdldCwgc291cmNlKVxuICB9XG4gIHJldHVybiB0YXJnZXRcbn1cbiIsImltcG9ydCB7IHByb21pc2VzIGFzIGZzIH0gZnJvbSAnZnMnXG5pbXBvcnQgdHlwZSBNYWdpY1N0cmluZyBmcm9tICdtYWdpYy1zdHJpbmcnXG5pbXBvcnQgeyBycGMgfSBmcm9tICcuLi8uLi8uLi9ydW50aW1lL3JwYydcbmltcG9ydCB7IGdldE9yaWdpbmFsUG9zLCBsaW5lU3BsaXRSRSwgbnVtYmVyVG9Qb3MsIHBvc1RvTnVtYmVyIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvc291cmNlLW1hcCdcbmltcG9ydCB7IGdldENhbGxMYXN0SW5kZXggfSBmcm9tICcuLi8uLi8uLi91dGlscydcblxuZXhwb3J0IGludGVyZmFjZSBJbmxpbmVTbmFwc2hvdCB7XG4gIHNuYXBzaG90OiBzdHJpbmdcbiAgZmlsZTogc3RyaW5nXG4gIGxpbmU6IG51bWJlclxuICBjb2x1bW46IG51bWJlclxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2F2ZUlubGluZVNuYXBzaG90cyhcbiAgc25hcHNob3RzOiBBcnJheTxJbmxpbmVTbmFwc2hvdD4sXG4pIHtcbiAgY29uc3QgTWFnaWNTdHJpbmcgPSAoYXdhaXQgaW1wb3J0KCdtYWdpYy1zdHJpbmcnKSkuZGVmYXVsdFxuICBjb25zdCBmaWxlcyA9IG5ldyBTZXQoc25hcHNob3RzLm1hcChpID0+IGkuZmlsZSkpXG4gIGF3YWl0IFByb21pc2UuYWxsKEFycmF5LmZyb20oZmlsZXMpLm1hcChhc3luYyhmaWxlKSA9PiB7XG4gICAgY29uc3QgbWFwID0gYXdhaXQgcnBjKCkuZ2V0U291cmNlTWFwKGZpbGUpXG4gICAgY29uc3Qgc25hcHMgPSBzbmFwc2hvdHMuZmlsdGVyKGkgPT4gaS5maWxlID09PSBmaWxlKVxuICAgIGNvbnN0IGNvZGUgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlLCAndXRmOCcpXG4gICAgY29uc3QgcyA9IG5ldyBNYWdpY1N0cmluZyhjb2RlKVxuXG4gICAgZm9yIChjb25zdCBzbmFwIG9mIHNuYXBzKSB7XG4gICAgICBjb25zdCBwb3MgPSBhd2FpdCBnZXRPcmlnaW5hbFBvcyhtYXAsIHNuYXApXG4gICAgICBjb25zdCBpbmRleCA9IHBvc1RvTnVtYmVyKGNvZGUsIHBvcyEpXG4gICAgICByZXBsYWNlSW5saW5lU25hcChjb2RlLCBzLCBpbmRleCwgc25hcC5zbmFwc2hvdClcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1lZCA9IHMudG9TdHJpbmcoKVxuICAgIGlmICh0cmFuc2Zvcm1lZCAhPT0gY29kZSlcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlLCB0cmFuc2Zvcm1lZCwgJ3V0Zi04JylcbiAgfSkpXG59XG5cbmNvbnN0IHN0YXJ0T2JqZWN0UmVnZXggPSAvKD86dG9NYXRjaElubGluZVNuYXBzaG90fHRvVGhyb3dFcnJvck1hdGNoaW5nSW5saW5lU25hcHNob3QpXFxzKlxcKFxccyooeykvbVxuXG5mdW5jdGlvbiByZXBsYWNlT2JqZWN0U25hcChjb2RlOiBzdHJpbmcsIHM6IE1hZ2ljU3RyaW5nLCBpbmRleDogbnVtYmVyLCBuZXdTbmFwOiBzdHJpbmcpIHtcbiAgY29kZSA9IGNvZGUuc2xpY2UoaW5kZXgpXG4gIGNvbnN0IHN0YXJ0TWF0Y2ggPSBzdGFydE9iamVjdFJlZ2V4LmV4ZWMoY29kZSlcbiAgaWYgKCFzdGFydE1hdGNoKVxuICAgIHJldHVybiBmYWxzZVxuXG4gIGNvZGUgPSBjb2RlLnNsaWNlKHN0YXJ0TWF0Y2guaW5kZXgpXG4gIGNvbnN0IGNoYXJJbmRleCA9IGdldENhbGxMYXN0SW5kZXgoY29kZSlcbiAgaWYgKGNoYXJJbmRleCA9PT0gbnVsbClcbiAgICByZXR1cm4gZmFsc2VcblxuICBzLmFwcGVuZExlZnQoaW5kZXggKyBzdGFydE1hdGNoLmluZGV4ICsgY2hhckluZGV4LCBgLCAke3ByZXBhcmVTbmFwU3RyaW5nKG5ld1NuYXAsIGNvZGUsIGluZGV4KX1gKVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHByZXBhcmVTbmFwU3RyaW5nKHNuYXA6IHN0cmluZywgc291cmNlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcbiAgY29uc3QgbGluZUluZGV4ID0gbnVtYmVyVG9Qb3Moc291cmNlLCBpbmRleCkubGluZVxuICBjb25zdCBsaW5lID0gc291cmNlLnNwbGl0KGxpbmVTcGxpdFJFKVtsaW5lSW5kZXggLSAxXVxuICBjb25zdCBpbmRlbnQgPSBsaW5lLm1hdGNoKC9eXFxzKi8pIVswXSB8fCAnJ1xuICBjb25zdCBpbmRlbnROZXh0ID0gaW5kZW50LmluY2x1ZGVzKCdcXHQnKSA/IGAke2luZGVudH1cXHRgIDogYCR7aW5kZW50fSAgYFxuXG4gIGNvbnN0IGxpbmVzID0gc25hcFxuICAgIC50cmltKClcbiAgICAucmVwbGFjZSgvXFxcXC9nLCAnXFxcXFxcXFwnKVxuICAgIC5yZXBsYWNlKC9cXCQvZywgJ1xcXFwkJylcbiAgICAuc3BsaXQoL1xcbi9nKVxuICAgIC5tYXAoaSA9PiBpLnRyaW1FbmQoKSlcblxuICBjb25zdCBpc09uZWxpbmUgPSBsaW5lcy5sZW5ndGggPD0gMVxuICBjb25zdCBxdW90ZSA9IGlzT25lbGluZSA/ICdcXCcnIDogJ2AnXG4gIHJldHVybiBpc09uZWxpbmVcbiAgICA/IGAnJHtsaW5lcy5qb2luKCdcXG4nKS5yZXBsYWNlKC8nL2csICdcXFxcXFwnJyl9J2BcbiAgICA6IGAke3F1b3RlfVxcbiR7bGluZXMubWFwKGkgPT4gaW5kZW50TmV4dCArIGkpLmpvaW4oJ1xcbicpLnJlcGxhY2UoL2AvZywgJ1xcXFxgJyl9XFxuJHtpbmRlbnR9JHtxdW90ZX1gXG59XG5cbmNvbnN0IHN0YXJ0UmVnZXggPSAvKD86dG9NYXRjaElubGluZVNuYXBzaG90fHRvVGhyb3dFcnJvck1hdGNoaW5nSW5saW5lU25hcHNob3QpXFxzKlxcKFxccyooWydcImBcXCldKS9tXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUlubGluZVNuYXAoY29kZTogc3RyaW5nLCBzOiBNYWdpY1N0cmluZywgaW5kZXg6IG51bWJlciwgbmV3U25hcDogc3RyaW5nKSB7XG4gIGNvbnN0IHN0YXJ0TWF0Y2ggPSBzdGFydFJlZ2V4LmV4ZWMoY29kZS5zbGljZShpbmRleCkpXG4gIGlmICghc3RhcnRNYXRjaClcbiAgICByZXR1cm4gcmVwbGFjZU9iamVjdFNuYXAoY29kZSwgcywgaW5kZXgsIG5ld1NuYXApXG5cbiAgY29uc3QgcXVvdGUgPSBzdGFydE1hdGNoWzFdXG4gIGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCArIHN0YXJ0TWF0Y2guaW5kZXghICsgc3RhcnRNYXRjaFswXS5sZW5ndGhcbiAgY29uc3Qgc25hcFN0cmluZyA9IHByZXBhcmVTbmFwU3RyaW5nKG5ld1NuYXAsIGNvZGUsIGluZGV4KVxuXG4gIGlmIChxdW90ZSA9PT0gJyknKSB7XG4gICAgcy5hcHBlbmRSaWdodChzdGFydEluZGV4IC0gMSwgc25hcFN0cmluZylcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgY29uc3QgcXVvdGVFbmRSRSA9IG5ldyBSZWdFeHAoYCg/Ol58W15cXFxcXFxcXF0pJHtxdW90ZX1gKVxuICBjb25zdCBlbmRNYXRjaCA9IHF1b3RlRW5kUkUuZXhlYyhjb2RlLnNsaWNlKHN0YXJ0SW5kZXgpKVxuICBpZiAoIWVuZE1hdGNoKVxuICAgIHJldHVybiBmYWxzZVxuICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBlbmRNYXRjaC5pbmRleCEgKyBlbmRNYXRjaFswXS5sZW5ndGhcbiAgcy5vdmVyd3JpdGUoc3RhcnRJbmRleCAtIDEsIGVuZEluZGV4LCBzbmFwU3RyaW5nKVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmNvbnN0IElOREVOVEFUSU9OX1JFR0VYID0gL14oW15cXFNcXG5dKilcXFMvbVxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwU25hcHNob3RJbmRlbnRhdGlvbihpbmxpbmVTbmFwc2hvdDogc3RyaW5nKSB7XG4gIC8vIEZpbmQgaW5kZW50YXRpb24gaWYgZXhpc3RzLlxuICBjb25zdCBtYXRjaCA9IGlubGluZVNuYXBzaG90Lm1hdGNoKElOREVOVEFUSU9OX1JFR0VYKVxuICBpZiAoIW1hdGNoIHx8ICFtYXRjaFsxXSkge1xuICAgIC8vIE5vIGluZGVudGF0aW9uLlxuICAgIHJldHVybiBpbmxpbmVTbmFwc2hvdFxuICB9XG5cbiAgY29uc3QgaW5kZW50YXRpb24gPSBtYXRjaFsxXVxuICBjb25zdCBsaW5lcyA9IGlubGluZVNuYXBzaG90LnNwbGl0KC9cXG4vZylcbiAgaWYgKGxpbmVzLmxlbmd0aCA8PSAyKSB7XG4gICAgLy8gTXVzdCBiZSBhdCBsZWFzdCAzIGxpbmVzLlxuICAgIHJldHVybiBpbmxpbmVTbmFwc2hvdFxuICB9XG5cbiAgaWYgKGxpbmVzWzBdLnRyaW0oKSAhPT0gJycgfHwgbGluZXNbbGluZXMubGVuZ3RoIC0gMV0udHJpbSgpICE9PSAnJykge1xuICAgIC8vIElmIG5vdCBibGFuayBmaXJzdCBhbmQgbGFzdCBsaW5lcywgYWJvcnQuXG4gICAgcmV0dXJuIGlubGluZVNuYXBzaG90XG4gIH1cblxuICBmb3IgKGxldCBpID0gMTsgaSA8IGxpbmVzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIGlmIChsaW5lc1tpXSAhPT0gJycpIHtcbiAgICAgIGlmIChsaW5lc1tpXS5pbmRleE9mKGluZGVudGF0aW9uKSAhPT0gMCkge1xuICAgICAgICAvLyBBbGwgbGluZXMgZXhjZXB0IGZpcnN0IGFuZCBsYXN0IHNob3VsZCBlaXRoZXIgYmUgYmxhbmsgb3IgaGF2ZSB0aGUgc2FtZVxuICAgICAgICAvLyBpbmRlbnQgYXMgdGhlIGZpcnN0IGxpbmUgKG9yIG1vcmUpLiBJZiB0aGlzIGlzbid0IHRoZSBjYXNlIHdlIGRvbid0XG4gICAgICAgIC8vIHdhbnQgdG8gdG91Y2ggdGhlIHNuYXBzaG90IGF0IGFsbC5cbiAgICAgICAgcmV0dXJuIGlubGluZVNuYXBzaG90XG4gICAgICB9XG5cbiAgICAgIGxpbmVzW2ldID0gbGluZXNbaV0uc3Vic3RyaW5nKGluZGVudGF0aW9uLmxlbmd0aClcbiAgICB9XG4gIH1cblxuICAvLyBMYXN0IGxpbmUgaXMgYSBzcGVjaWFsIGNhc2UgYmVjYXVzZSBpdCB3b24ndCBoYXZlIHRoZSBzYW1lIGluZGVudCBhcyBvdGhlcnNcbiAgLy8gYnV0IG1heSBzdGlsbCBoYXZlIGJlZW4gZ2l2ZW4gc29tZSBpbmRlbnQgdG8gbGluZSB1cC5cbiAgbGluZXNbbGluZXMubGVuZ3RoIC0gMV0gPSAnJ1xuXG4gIC8vIFJldHVybiBpbmxpbmUgc25hcHNob3QsIG5vdyBhdCBpbmRlbnQgMC5cbiAgaW5saW5lU25hcHNob3QgPSBsaW5lcy5qb2luKCdcXG4nKVxuICByZXR1cm4gaW5saW5lU25hcHNob3Rcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuaW1wb3J0IGZzIGZyb20gJ2ZzJ1xuaW1wb3J0IHR5cGUgeyBDb25maWcgfSBmcm9tICdAamVzdC90eXBlcydcbi8vIGltcG9ydCB7IGdldFN0YWNrVHJhY2VMaW5lcywgZ2V0VG9wRnJhbWUgfSBmcm9tICdqZXN0LW1lc3NhZ2UtdXRpbCdcbmltcG9ydCB0eXBlIHsgT3B0aW9uc1JlY2VpdmVkIGFzIFByZXR0eUZvcm1hdE9wdGlvbnMgfSBmcm9tICdwcmV0dHktZm9ybWF0J1xuaW1wb3J0IHR5cGUgeyBTbmFwc2hvdERhdGEsIFNuYXBzaG90TWF0Y2hPcHRpb25zLCBTbmFwc2hvdFN0YXRlT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgc2xhc2ggfSBmcm9tICcuLi8uLi8uLi91dGlscydcbmltcG9ydCB7IHBhcnNlU3RhY2t0cmFjZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3NvdXJjZS1tYXAnXG5pbXBvcnQgdHlwZSB7IElubGluZVNuYXBzaG90IH0gZnJvbSAnLi9pbmxpbmVTbmFwc2hvdCdcbmltcG9ydCB7IHNhdmVJbmxpbmVTbmFwc2hvdHMgfSBmcm9tICcuL2lubGluZVNuYXBzaG90J1xuXG5pbXBvcnQge1xuICBhZGRFeHRyYUxpbmVCcmVha3MsXG4gIGdldFNuYXBzaG90RGF0YSxcbiAga2V5VG9UZXN0TmFtZSxcbiAgcHJlcGFyZUV4cGVjdGVkLFxuICByZW1vdmVFeHRyYUxpbmVCcmVha3MsXG4gIHNhdmVTbmFwc2hvdEZpbGUsXG4gIHNlcmlhbGl6ZSxcbiAgdGVzdE5hbWVUb0tleSxcbn0gZnJvbSAnLi91dGlscydcblxuaW50ZXJmYWNlIFNuYXBzaG90UmV0dXJuT3B0aW9ucyB7XG4gIGFjdHVhbDogc3RyaW5nXG4gIGNvdW50OiBudW1iZXJcbiAgZXhwZWN0ZWQ/OiBzdHJpbmdcbiAga2V5OiBzdHJpbmdcbiAgcGFzczogYm9vbGVhblxufVxuXG5pbnRlcmZhY2UgU2F2ZVN0YXR1cyB7XG4gIGRlbGV0ZWQ6IGJvb2xlYW5cbiAgc2F2ZWQ6IGJvb2xlYW5cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU25hcHNob3RTdGF0ZSB7XG4gIHByaXZhdGUgX2NvdW50ZXJzOiBNYXA8c3RyaW5nLCBudW1iZXI+XG4gIHByaXZhdGUgX2RpcnR5OiBib29sZWFuXG4gIHByaXZhdGUgX3VwZGF0ZVNuYXBzaG90OiBDb25maWcuU25hcHNob3RVcGRhdGVTdGF0ZVxuICBwcml2YXRlIF9zbmFwc2hvdERhdGE6IFNuYXBzaG90RGF0YVxuICBwcml2YXRlIF9pbml0aWFsRGF0YTogU25hcHNob3REYXRhXG4gIHByaXZhdGUgX3NuYXBzaG90UGF0aDogc3RyaW5nXG4gIHByaXZhdGUgX2lubGluZVNuYXBzaG90czogQXJyYXk8SW5saW5lU25hcHNob3Q+XG4gIHByaXZhdGUgX3VuY2hlY2tlZEtleXM6IFNldDxzdHJpbmc+XG4gIHByaXZhdGUgX3NuYXBzaG90Rm9ybWF0OiBQcmV0dHlGb3JtYXRPcHRpb25zXG5cbiAgYWRkZWQ6IG51bWJlclxuICBleHBhbmQ6IGJvb2xlYW5cbiAgbWF0Y2hlZDogbnVtYmVyXG4gIHVubWF0Y2hlZDogbnVtYmVyXG4gIHVwZGF0ZWQ6IG51bWJlclxuXG4gIGNvbnN0cnVjdG9yKHNuYXBzaG90UGF0aDogc3RyaW5nLCBvcHRpb25zOiBTbmFwc2hvdFN0YXRlT3B0aW9ucykge1xuICAgIHRoaXMuX3NuYXBzaG90UGF0aCA9IHNuYXBzaG90UGF0aFxuICAgIGNvbnN0IHsgZGF0YSwgZGlydHkgfSA9IGdldFNuYXBzaG90RGF0YShcbiAgICAgIHRoaXMuX3NuYXBzaG90UGF0aCxcbiAgICAgIG9wdGlvbnMudXBkYXRlU25hcHNob3QsXG4gICAgKVxuICAgIHRoaXMuX2luaXRpYWxEYXRhID0gZGF0YVxuICAgIHRoaXMuX3NuYXBzaG90RGF0YSA9IGRhdGFcbiAgICB0aGlzLl9kaXJ0eSA9IGRpcnR5XG4gICAgdGhpcy5faW5saW5lU25hcHNob3RzID0gW11cbiAgICB0aGlzLl91bmNoZWNrZWRLZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyh0aGlzLl9zbmFwc2hvdERhdGEpKVxuICAgIHRoaXMuX2NvdW50ZXJzID0gbmV3IE1hcCgpXG4gICAgdGhpcy5leHBhbmQgPSBvcHRpb25zLmV4cGFuZCB8fCBmYWxzZVxuICAgIHRoaXMuYWRkZWQgPSAwXG4gICAgdGhpcy5tYXRjaGVkID0gMFxuICAgIHRoaXMudW5tYXRjaGVkID0gMFxuICAgIHRoaXMuX3VwZGF0ZVNuYXBzaG90ID0gb3B0aW9ucy51cGRhdGVTbmFwc2hvdFxuICAgIHRoaXMudXBkYXRlZCA9IDBcbiAgICB0aGlzLl9zbmFwc2hvdEZvcm1hdCA9IHtcbiAgICAgIHByaW50QmFzaWNQcm90b3R5cGU6IGZhbHNlLFxuICAgICAgLi4ub3B0aW9ucy5zbmFwc2hvdEZvcm1hdCxcbiAgICB9XG4gIH1cblxuICBtYXJrU25hcHNob3RzQXNDaGVja2VkRm9yVGVzdCh0ZXN0TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fdW5jaGVja2VkS2V5cy5mb3JFYWNoKCh1bmNoZWNrZWRLZXkpID0+IHtcbiAgICAgIGlmIChrZXlUb1Rlc3ROYW1lKHVuY2hlY2tlZEtleSkgPT09IHRlc3ROYW1lKVxuICAgICAgICB0aGlzLl91bmNoZWNrZWRLZXlzLmRlbGV0ZSh1bmNoZWNrZWRLZXkpXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgX2FkZFNuYXBzaG90KFxuICAgIGtleTogc3RyaW5nLFxuICAgIHJlY2VpdmVkU2VyaWFsaXplZDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgaXNJbmxpbmU6IGJvb2xlYW47IGVycm9yPzogRXJyb3IgfSxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5fZGlydHkgPSB0cnVlXG4gICAgaWYgKG9wdGlvbnMuaXNJbmxpbmUpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gb3B0aW9ucy5lcnJvciB8fCBuZXcgRXJyb3IoJ1Vua25vd24gZXJyb3InKVxuICAgICAgY29uc3Qgc3RhY2tzID0gcGFyc2VTdGFja3RyYWNlKGVycm9yLCB0cnVlKVxuICAgICAgc3RhY2tzLmZvckVhY2goaSA9PiBpLmZpbGUgPSBzbGFzaChpLmZpbGUpKVxuICAgICAgLy8gaW5saW5lIHNuYXBzaG90IGZ1bmN0aW9uIGlzIGNhbGxlZCBfX1ZJVEVTVF9JTkxJTkVfU05BUFNIT1RfX1xuICAgICAgLy8gaW4gaW50ZWdyYXRpb25zL3NuYXBzaG90L2NoYWkudHNcbiAgICAgIGNvbnN0IHN0YWNrSW5kZXggPSBzdGFja3MuZmluZEluZGV4KGkgPT4gaS5tZXRob2QuaW5jbHVkZXMoJ19fVklURVNUX0lOTElORV9TTkFQU0hPVF9fJykpXG4gICAgICBjb25zdCBzdGFjayA9IHN0YWNrSW5kZXggIT09IC0xID8gc3RhY2tzW3N0YWNrSW5kZXggKyAyXSA6IG51bGxcbiAgICAgIGlmICghc3RhY2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBWaXRlc3Q6IENvdWxkbid0IGluZmVyIHN0YWNrIGZyYW1lIGZvciBpbmxpbmUgc25hcHNob3QuXFxuJHtKU09OLnN0cmluZ2lmeShzdGFja3MpfWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lubGluZVNuYXBzaG90cy5wdXNoKHtcbiAgICAgICAgc25hcHNob3Q6IHJlY2VpdmVkU2VyaWFsaXplZCxcbiAgICAgICAgLi4uc3RhY2ssXG4gICAgICB9KVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuX3NuYXBzaG90RGF0YVtrZXldID0gcmVjZWl2ZWRTZXJpYWxpemVkXG4gICAgfVxuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5fc25hcHNob3REYXRhID0gdGhpcy5faW5pdGlhbERhdGFcbiAgICAvLyB0aGlzLl9pbmxpbmVTbmFwc2hvdHMgPSBbXVxuICAgIHRoaXMuX2NvdW50ZXJzID0gbmV3IE1hcCgpXG4gICAgdGhpcy5hZGRlZCA9IDBcbiAgICB0aGlzLm1hdGNoZWQgPSAwXG4gICAgdGhpcy51bm1hdGNoZWQgPSAwXG4gICAgdGhpcy51cGRhdGVkID0gMFxuICB9XG5cbiAgYXN5bmMgc2F2ZSgpOiBQcm9taXNlPFNhdmVTdGF0dXM+IHtcbiAgICBjb25zdCBoYXNFeHRlcm5hbFNuYXBzaG90cyA9IE9iamVjdC5rZXlzKHRoaXMuX3NuYXBzaG90RGF0YSkubGVuZ3RoXG4gICAgY29uc3QgaGFzSW5saW5lU25hcHNob3RzID0gdGhpcy5faW5saW5lU25hcHNob3RzLmxlbmd0aFxuICAgIGNvbnN0IGlzRW1wdHkgPSAhaGFzRXh0ZXJuYWxTbmFwc2hvdHMgJiYgIWhhc0lubGluZVNuYXBzaG90c1xuXG4gICAgY29uc3Qgc3RhdHVzOiBTYXZlU3RhdHVzID0ge1xuICAgICAgZGVsZXRlZDogZmFsc2UsXG4gICAgICBzYXZlZDogZmFsc2UsXG4gICAgfVxuXG4gICAgaWYgKCh0aGlzLl9kaXJ0eSB8fCB0aGlzLl91bmNoZWNrZWRLZXlzLnNpemUpICYmICFpc0VtcHR5KSB7XG4gICAgICBpZiAoaGFzRXh0ZXJuYWxTbmFwc2hvdHMpXG4gICAgICAgIGF3YWl0IHNhdmVTbmFwc2hvdEZpbGUodGhpcy5fc25hcHNob3REYXRhLCB0aGlzLl9zbmFwc2hvdFBhdGgpXG4gICAgICBpZiAoaGFzSW5saW5lU25hcHNob3RzKVxuICAgICAgICBhd2FpdCBzYXZlSW5saW5lU25hcHNob3RzKHRoaXMuX2lubGluZVNuYXBzaG90cylcblxuICAgICAgc3RhdHVzLnNhdmVkID0gdHJ1ZVxuICAgIH1cbiAgICBlbHNlIGlmICghaGFzRXh0ZXJuYWxTbmFwc2hvdHMgJiYgZnMuZXhpc3RzU3luYyh0aGlzLl9zbmFwc2hvdFBhdGgpKSB7XG4gICAgICBpZiAodGhpcy5fdXBkYXRlU25hcHNob3QgPT09ICdhbGwnKVxuICAgICAgICBmcy51bmxpbmtTeW5jKHRoaXMuX3NuYXBzaG90UGF0aClcblxuICAgICAgc3RhdHVzLmRlbGV0ZWQgPSB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXR1c1xuICB9XG5cbiAgZ2V0VW5jaGVja2VkQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdW5jaGVja2VkS2V5cy5zaXplIHx8IDBcbiAgfVxuXG4gIGdldFVuY2hlY2tlZEtleXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fdW5jaGVja2VkS2V5cylcbiAgfVxuXG4gIHJlbW92ZVVuY2hlY2tlZEtleXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3VwZGF0ZVNuYXBzaG90ID09PSAnYWxsJyAmJiB0aGlzLl91bmNoZWNrZWRLZXlzLnNpemUpIHtcbiAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZVxuICAgICAgdGhpcy5fdW5jaGVja2VkS2V5cy5mb3JFYWNoKGtleSA9PiBkZWxldGUgdGhpcy5fc25hcHNob3REYXRhW2tleV0pXG4gICAgICB0aGlzLl91bmNoZWNrZWRLZXlzLmNsZWFyKClcbiAgICB9XG4gIH1cblxuICBtYXRjaCh7XG4gICAgdGVzdE5hbWUsXG4gICAgcmVjZWl2ZWQsXG4gICAga2V5LFxuICAgIGlubGluZVNuYXBzaG90LFxuICAgIGlzSW5saW5lLFxuICAgIGVycm9yLFxuICB9OiBTbmFwc2hvdE1hdGNoT3B0aW9ucyk6IFNuYXBzaG90UmV0dXJuT3B0aW9ucyB7XG4gICAgdGhpcy5fY291bnRlcnMuc2V0KHRlc3ROYW1lLCAodGhpcy5fY291bnRlcnMuZ2V0KHRlc3ROYW1lKSB8fCAwKSArIDEpXG4gICAgY29uc3QgY291bnQgPSBOdW1iZXIodGhpcy5fY291bnRlcnMuZ2V0KHRlc3ROYW1lKSlcblxuICAgIGlmICgha2V5KVxuICAgICAga2V5ID0gdGVzdE5hbWVUb0tleSh0ZXN0TmFtZSwgY291bnQpXG5cbiAgICAvLyBEbyBub3QgbWFyayB0aGUgc25hcHNob3QgYXMgXCJjaGVja2VkXCIgaWYgdGhlIHNuYXBzaG90IGlzIGlubGluZSBhbmRcbiAgICAvLyB0aGVyZSdzIGFuIGV4dGVybmFsIHNuYXBzaG90LiBUaGlzIHdheSB0aGUgZXh0ZXJuYWwgc25hcHNob3QgY2FuIGJlXG4gICAgLy8gcmVtb3ZlZCB3aXRoIGAtLXVwZGF0ZVNuYXBzaG90YC5cbiAgICBpZiAoIShpc0lubGluZSAmJiB0aGlzLl9zbmFwc2hvdERhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSlcbiAgICAgIHRoaXMuX3VuY2hlY2tlZEtleXMuZGVsZXRlKGtleSlcblxuICAgIGNvbnN0IHJlY2VpdmVkU2VyaWFsaXplZCA9IGFkZEV4dHJhTGluZUJyZWFrcyhzZXJpYWxpemUocmVjZWl2ZWQsIHVuZGVmaW5lZCwgdGhpcy5fc25hcHNob3RGb3JtYXQpKVxuICAgIGNvbnN0IGV4cGVjdGVkID0gaXNJbmxpbmUgPyBpbmxpbmVTbmFwc2hvdCA6IHRoaXMuX3NuYXBzaG90RGF0YVtrZXldXG4gICAgY29uc3QgZXhwZWN0ZWRUcmltbWVkID0gcHJlcGFyZUV4cGVjdGVkKGV4cGVjdGVkKVxuICAgIGNvbnN0IHBhc3MgPSBleHBlY3RlZFRyaW1tZWQgPT09IHJlY2VpdmVkU2VyaWFsaXplZD8udHJpbSgpXG4gICAgY29uc3QgaGFzU25hcHNob3QgPSBleHBlY3RlZCAhPT0gdW5kZWZpbmVkXG4gICAgY29uc3Qgc25hcHNob3RJc1BlcnNpc3RlZCA9IGlzSW5saW5lIHx8IGZzLmV4aXN0c1N5bmModGhpcy5fc25hcHNob3RQYXRoKVxuXG4gICAgaWYgKHBhc3MgJiYgIWlzSW5saW5lKSB7XG4gICAgICAvLyBFeGVjdXRpbmcgYSBzbmFwc2hvdCBmaWxlIGFzIEphdmFTY3JpcHQgYW5kIHdyaXRpbmcgdGhlIHN0cmluZ3MgYmFja1xuICAgICAgLy8gd2hlbiBvdGhlciBzbmFwc2hvdHMgaGF2ZSBjaGFuZ2VkIGxvc2VzIHRoZSBwcm9wZXIgZXNjYXBpbmcgZm9yIHNvbWVcbiAgICAgIC8vIGNoYXJhY3RlcnMuIFNpbmNlIHdlIGNoZWNrIGV2ZXJ5IHNuYXBzaG90IGluIGV2ZXJ5IHRlc3QsIHVzZSB0aGUgbmV3bHlcbiAgICAgIC8vIGdlbmVyYXRlZCBmb3JtYXR0ZWQgc3RyaW5nLlxuICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgb25seSByZWxldmFudCB3aGVuIGEgc25hcHNob3QgaXMgYWRkZWQgYW5kIHRoZSBkaXJ0eVxuICAgICAgLy8gZmxhZyBpcyBzZXQuXG4gICAgICB0aGlzLl9zbmFwc2hvdERhdGFba2V5XSA9IHJlY2VpdmVkU2VyaWFsaXplZFxuICAgIH1cblxuICAgIC8vIFRoZXNlIGFyZSB0aGUgY29uZGl0aW9ucyBvbiB3aGVuIHRvIHdyaXRlIHNuYXBzaG90czpcbiAgICAvLyAgKiBUaGVyZSdzIG5vIHNuYXBzaG90IGZpbGUgaW4gYSBub24tQ0kgZW52aXJvbm1lbnQuXG4gICAgLy8gICogVGhlcmUgaXMgYSBzbmFwc2hvdCBmaWxlIGFuZCB3ZSBkZWNpZGVkIHRvIHVwZGF0ZSB0aGUgc25hcHNob3QuXG4gICAgLy8gICogVGhlcmUgaXMgYSBzbmFwc2hvdCBmaWxlLCBidXQgaXQgZG9lc24ndCBoYXZlIHRoaXMgc25hcHNob3QuXG4gICAgLy8gVGhlc2UgYXJlIHRoZSBjb25kaXRpb25zIG9uIHdoZW4gbm90IHRvIHdyaXRlIHNuYXBzaG90czpcbiAgICAvLyAgKiBUaGUgdXBkYXRlIGZsYWcgaXMgc2V0IHRvICdub25lJy5cbiAgICAvLyAgKiBUaGVyZSdzIG5vIHNuYXBzaG90IGZpbGUgb3IgYSBmaWxlIHdpdGhvdXQgdGhpcyBzbmFwc2hvdCBvbiBhIENJIGVudmlyb25tZW50LlxuICAgIGlmIChcbiAgICAgIChoYXNTbmFwc2hvdCAmJiB0aGlzLl91cGRhdGVTbmFwc2hvdCA9PT0gJ2FsbCcpXG4gICAgICAgfHwgKCghaGFzU25hcHNob3QgfHwgIXNuYXBzaG90SXNQZXJzaXN0ZWQpXG4gICAgICAgICAmJiAodGhpcy5fdXBkYXRlU25hcHNob3QgPT09ICduZXcnIHx8IHRoaXMuX3VwZGF0ZVNuYXBzaG90ID09PSAnYWxsJykpXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5fdXBkYXRlU25hcHNob3QgPT09ICdhbGwnKSB7XG4gICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgIGlmIChoYXNTbmFwc2hvdClcbiAgICAgICAgICAgIHRoaXMudXBkYXRlZCsrXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5hZGRlZCsrXG5cbiAgICAgICAgICB0aGlzLl9hZGRTbmFwc2hvdChrZXksIHJlY2VpdmVkU2VyaWFsaXplZCwgeyBlcnJvciwgaXNJbmxpbmUgfSlcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1hdGNoZWQrK1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5fYWRkU25hcHNob3Qoa2V5LCByZWNlaXZlZFNlcmlhbGl6ZWQsIHsgZXJyb3IsIGlzSW5saW5lIH0pXG4gICAgICAgIHRoaXMuYWRkZWQrK1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhY3R1YWw6ICcnLFxuICAgICAgICBjb3VudCxcbiAgICAgICAgZXhwZWN0ZWQ6ICcnLFxuICAgICAgICBrZXksXG4gICAgICAgIHBhc3M6IHRydWUsXG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKCFwYXNzKSB7XG4gICAgICAgIHRoaXMudW5tYXRjaGVkKytcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhY3R1YWw6IHJlbW92ZUV4dHJhTGluZUJyZWFrcyhyZWNlaXZlZFNlcmlhbGl6ZWQpLFxuICAgICAgICAgIGNvdW50LFxuICAgICAgICAgIGV4cGVjdGVkOlxuICAgICAgICAgIGV4cGVjdGVkVHJpbW1lZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHJlbW92ZUV4dHJhTGluZUJyZWFrcyhleHBlY3RlZFRyaW1tZWQpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgcGFzczogZmFsc2UsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLm1hdGNoZWQrK1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFjdHVhbDogJycsXG4gICAgICAgICAgY291bnQsXG4gICAgICAgICAgZXhwZWN0ZWQ6ICcnLFxuICAgICAgICAgIGtleSxcbiAgICAgICAgICBwYXNzOiB0cnVlLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgcGF0aCBmcm9tICdwYXRoZSdcbmltcG9ydCB7IGV4cGVjdCB9IGZyb20gJ2NoYWknXG5pbXBvcnQgdHlwZSB7IFNuYXBzaG90UmVzdWx0LCBUZXN0IH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBycGMgfSBmcm9tICcuLi8uLi9ydW50aW1lL3JwYydcbmltcG9ydCB7IGdldE5hbWVzIH0gZnJvbSAnLi4vLi4vdXRpbHMnXG5pbXBvcnQgeyBlcXVhbHMsIGl0ZXJhYmxlRXF1YWxpdHksIHN1YnNldEVxdWFsaXR5IH0gZnJvbSAnLi4vY2hhaS9qZXN0LXV0aWxzJ1xuaW1wb3J0IHsgZGVlcE1lcmdlU25hcHNob3QgfSBmcm9tICcuL3BvcnQvdXRpbHMnXG5pbXBvcnQgU25hcHNob3RTdGF0ZSBmcm9tICcuL3BvcnQvc3RhdGUnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGV4dCB7XG4gIGZpbGU6IHN0cmluZ1xuICB0aXRsZT86IHN0cmluZ1xuICBmdWxsVGl0bGU/OiBzdHJpbmdcbn1cblxuY29uc3QgcmVzb2x2ZVNuYXBzaG90UGF0aCA9ICh0ZXN0UGF0aDogc3RyaW5nKSA9PlxuICBwYXRoLmpvaW4oXG4gICAgcGF0aC5qb2luKHBhdGguZGlybmFtZSh0ZXN0UGF0aCksICdfX3NuYXBzaG90c19fJyksXG4gICAgYCR7cGF0aC5iYXNlbmFtZSh0ZXN0UGF0aCl9LnNuYXBgLFxuICApXG5cbmV4cG9ydCBjbGFzcyBTbmFwc2hvdENsaWVudCB7XG4gIHRlc3Q6IFRlc3QgfCB1bmRlZmluZWRcbiAgdGVzdEZpbGUgPSAnJ1xuICBzbmFwc2hvdFN0YXRlOiBTbmFwc2hvdFN0YXRlIHwgdW5kZWZpbmVkXG5cbiAgc2V0VGVzdCh0ZXN0OiBUZXN0KSB7XG4gICAgdGhpcy50ZXN0ID0gdGVzdFxuXG4gICAgaWYgKHRoaXMudGVzdEZpbGUgIT09IHRoaXMudGVzdC5maWxlIS5maWxlcGF0aCkge1xuICAgICAgaWYgKHRoaXMuc25hcHNob3RTdGF0ZSlcbiAgICAgICAgdGhpcy5zYXZlU25hcCgpXG5cbiAgICAgIHRoaXMudGVzdEZpbGUgPSB0aGlzLnRlc3QhLmZpbGUhLmZpbGVwYXRoXG4gICAgICB0aGlzLnNuYXBzaG90U3RhdGUgPSBuZXcgU25hcHNob3RTdGF0ZShcbiAgICAgICAgcmVzb2x2ZVNuYXBzaG90UGF0aCh0aGlzLnRlc3RGaWxlKSxcbiAgICAgICAgcHJvY2Vzcy5fX3ZpdGVzdF93b3JrZXJfXyEuY29uZmlnLnNuYXBzaG90T3B0aW9ucyxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBjbGVhclRlc3QoKSB7XG4gICAgdGhpcy50ZXN0ID0gdW5kZWZpbmVkXG4gIH1cblxuICBhc3NlcnQocmVjZWl2ZWQ6IHVua25vd24sIG1lc3NhZ2U/OiBzdHJpbmcsIGlzSW5saW5lID0gZmFsc2UsIHByb3BlcnRpZXM/OiBvYmplY3QsIGlubGluZVNuYXBzaG90Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRlc3QpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NuYXBzaG90IGNhbm5vdCBiZSB1c2VkIG91dHNpZGUgb2YgdGVzdCcpXG5cbiAgICBpZiAodHlwZW9mIHByb3BlcnRpZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAodHlwZW9mIHJlY2VpdmVkICE9PSAnb2JqZWN0JyB8fCAhcmVjZWl2ZWQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVjZWl2ZWQgdmFsdWUgbXVzdCBiZSBhbiBvYmplY3Qgd2hlbiB0aGUgbWF0Y2hlciBoYXMgcHJvcGVydGllcycpXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhc3MgPSBlcXVhbHMocmVjZWl2ZWQsIHByb3BlcnRpZXMsIFtpdGVyYWJsZUVxdWFsaXR5LCBzdWJzZXRFcXVhbGl0eV0pXG4gICAgICAgIGlmICghcGFzcylcbiAgICAgICAgICBleHBlY3QocmVjZWl2ZWQpLmVxdWFscyhwcm9wZXJ0aWVzKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgcmVjZWl2ZWQgPSBkZWVwTWVyZ2VTbmFwc2hvdChyZWNlaXZlZCwgcHJvcGVydGllcylcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBlcnIubWVzc2FnZSA9ICdTbmFwc2hvdCBtaXNtYXRjaGVkJ1xuICAgICAgICB0aHJvdyBlcnJcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB0ZXN0TmFtZSA9IFtcbiAgICAgIC4uLmdldE5hbWVzKHRoaXMudGVzdCkuc2xpY2UoMSksXG4gICAgICAuLi4obWVzc2FnZSA/IFttZXNzYWdlXSA6IFtdKSxcbiAgICBdLmpvaW4oJyA+ICcpXG5cbiAgICBjb25zdCB7IGFjdHVhbCwgZXhwZWN0ZWQsIGtleSwgcGFzcyB9ID0gdGhpcy5zbmFwc2hvdFN0YXRlIS5tYXRjaCh7XG4gICAgICB0ZXN0TmFtZSxcbiAgICAgIHJlY2VpdmVkLFxuICAgICAgaXNJbmxpbmUsXG4gICAgICBpbmxpbmVTbmFwc2hvdCxcbiAgICB9KVxuXG4gICAgaWYgKCFwYXNzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBleHBlY3QoYWN0dWFsLnRyaW0oKSkuZXF1YWxzKGV4cGVjdGVkID8gZXhwZWN0ZWQudHJpbSgpIDogJycpXG4gICAgICB9XG4gICAgICBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICBlcnJvci5tZXNzYWdlID0gYFNuYXBzaG90IFxcYCR7a2V5IHx8ICd1bmtub3duJ31cXGAgbWlzbWF0Y2hlZGBcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlU25hcCgpIHtcbiAgICBpZiAoIXRoaXMudGVzdEZpbGUgfHwgIXRoaXMuc25hcHNob3RTdGF0ZSkgcmV0dXJuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGFja1NuYXBzaG90U3RhdGUodGhpcy50ZXN0RmlsZSwgdGhpcy5zbmFwc2hvdFN0YXRlKVxuICAgIGF3YWl0IHJwYygpLnNuYXBzaG90U2F2ZWQocmVzdWx0KVxuXG4gICAgdGhpcy50ZXN0RmlsZSA9ICcnXG4gICAgdGhpcy5zbmFwc2hvdFN0YXRlID0gdW5kZWZpbmVkXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhY2tTbmFwc2hvdFN0YXRlKGZpbGVwYXRoOiBzdHJpbmcsIHN0YXRlOiBTbmFwc2hvdFN0YXRlKTogUHJvbWlzZTxTbmFwc2hvdFJlc3VsdD4ge1xuICBjb25zdCBzbmFwc2hvdDogU25hcHNob3RSZXN1bHQgPSB7XG4gICAgZmlsZXBhdGgsXG4gICAgYWRkZWQ6IDAsXG4gICAgZmlsZURlbGV0ZWQ6IGZhbHNlLFxuICAgIG1hdGNoZWQ6IDAsXG4gICAgdW5jaGVja2VkOiAwLFxuICAgIHVuY2hlY2tlZEtleXM6IFtdLFxuICAgIHVubWF0Y2hlZDogMCxcbiAgICB1cGRhdGVkOiAwLFxuICB9XG4gIGNvbnN0IHVuY2hlY2tlZENvdW50ID0gc3RhdGUuZ2V0VW5jaGVja2VkQ291bnQoKVxuICBjb25zdCB1bmNoZWNrZWRLZXlzID0gc3RhdGUuZ2V0VW5jaGVja2VkS2V5cygpXG4gIGlmICh1bmNoZWNrZWRDb3VudClcbiAgICBzdGF0ZS5yZW1vdmVVbmNoZWNrZWRLZXlzKClcblxuICBjb25zdCBzdGF0dXMgPSBhd2FpdCBzdGF0ZS5zYXZlKClcbiAgc25hcHNob3QuZmlsZURlbGV0ZWQgPSBzdGF0dXMuZGVsZXRlZFxuICBzbmFwc2hvdC5hZGRlZCA9IHN0YXRlLmFkZGVkXG4gIHNuYXBzaG90Lm1hdGNoZWQgPSBzdGF0ZS5tYXRjaGVkXG4gIHNuYXBzaG90LnVubWF0Y2hlZCA9IHN0YXRlLnVubWF0Y2hlZFxuICBzbmFwc2hvdC51cGRhdGVkID0gc3RhdGUudXBkYXRlZFxuICBzbmFwc2hvdC51bmNoZWNrZWQgPSAhc3RhdHVzLmRlbGV0ZWQgPyB1bmNoZWNrZWRDb3VudCA6IDBcbiAgc25hcHNob3QudW5jaGVja2VkS2V5cyA9IEFycmF5LmZyb20odW5jaGVja2VkS2V5cylcblxuICByZXR1cm4gc25hcHNob3Rcbn1cbiIsImltcG9ydCB0eXBlIHsgQ2hhaVBsdWdpbiB9IGZyb20gJy4uL2NoYWkvdHlwZXMnXG5pbXBvcnQgeyBTbmFwc2hvdENsaWVudCB9IGZyb20gJy4vY2xpZW50J1xuaW1wb3J0IHsgc3RyaXBTbmFwc2hvdEluZGVudGF0aW9uIH0gZnJvbSAnLi9wb3J0L2lubGluZVNuYXBzaG90J1xuXG5sZXQgX2NsaWVudDogU25hcHNob3RDbGllbnRcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNuYXBzaG90Q2xpZW50KCk6IFNuYXBzaG90Q2xpZW50IHtcbiAgaWYgKCFfY2xpZW50KVxuICAgIF9jbGllbnQgPSBuZXcgU25hcHNob3RDbGllbnQoKVxuICByZXR1cm4gX2NsaWVudFxufVxuXG5jb25zdCBnZXRFcnJvclN0cmluZyA9IChleHBlY3RlZDogKCkgPT4gdm9pZCkgPT4ge1xuICB0cnkge1xuICAgIGV4cGVjdGVkKClcbiAgfVxuICBjYXRjaCAoZSkge1xuICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpXG4gICAgICByZXR1cm4gZS5tZXNzYWdlXG5cbiAgICByZXR1cm4gZVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdzbmFwc2hvdCBmdW5jdGlvbiBkaWRuXFwndCB0aHJldycpXG59XG5cbmV4cG9ydCBjb25zdCBTbmFwc2hvdFBsdWdpbjogQ2hhaVBsdWdpbiA9IChjaGFpLCB1dGlscykgPT4ge1xuICBmb3IgKGNvbnN0IGtleSBvZiBbJ21hdGNoU25hcHNob3QnLCAndG9NYXRjaFNuYXBzaG90J10pIHtcbiAgICB1dGlscy5hZGRNZXRob2QoXG4gICAgICBjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUsXG4gICAgICBrZXksXG4gICAgICBmdW5jdGlvbih0aGlzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcHJvcGVydGllcz86IG9iamVjdCwgbWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9IHV0aWxzLmZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAgIGlmICh0eXBlb2YgcHJvcGVydGllcyA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIG1lc3NhZ2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgbWVzc2FnZSA9IHByb3BlcnRpZXNcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgICAgZ2V0U25hcHNob3RDbGllbnQoKS5hc3NlcnQoZXhwZWN0ZWQsIG1lc3NhZ2UsIGZhbHNlLCBwcm9wZXJ0aWVzKVxuICAgICAgfSxcbiAgICApXG4gIH1cbiAgdXRpbHMuYWRkTWV0aG9kKFxuICAgIGNoYWkuQXNzZXJ0aW9uLnByb3RvdHlwZSxcbiAgICAndG9NYXRjaElubGluZVNuYXBzaG90JyxcbiAgICBmdW5jdGlvbiBfX1ZJVEVTVF9JTkxJTkVfU05BUFNIT1RfXyh0aGlzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcHJvcGVydGllcz86IG9iamVjdCwgaW5saW5lU25hcHNob3Q/OiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0gdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgIGlmICh0eXBlb2YgcHJvcGVydGllcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbWVzc2FnZSA9IGlubGluZVNuYXBzaG90XG4gICAgICAgIGlubGluZVNuYXBzaG90ID0gcHJvcGVydGllc1xuICAgICAgICBwcm9wZXJ0aWVzID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICBpZiAoaW5saW5lU25hcHNob3QpXG4gICAgICAgIGlubGluZVNuYXBzaG90ID0gc3RyaXBTbmFwc2hvdEluZGVudGF0aW9uKGlubGluZVNuYXBzaG90KVxuICAgICAgZ2V0U25hcHNob3RDbGllbnQoKS5hc3NlcnQoZXhwZWN0ZWQsIG1lc3NhZ2UsIHRydWUsIHByb3BlcnRpZXMsIGlubGluZVNuYXBzaG90KVxuICAgIH0sXG4gIClcbiAgdXRpbHMuYWRkTWV0aG9kKFxuICAgIGNoYWkuQXNzZXJ0aW9uLnByb3RvdHlwZSxcbiAgICAndG9UaHJvd0Vycm9yTWF0Y2hpbmdTbmFwc2hvdCcsXG4gICAgZnVuY3Rpb24odGhpczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0gdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgIGdldFNuYXBzaG90Q2xpZW50KCkuYXNzZXJ0KGdldEVycm9yU3RyaW5nKGV4cGVjdGVkKSwgbWVzc2FnZSlcbiAgICB9LFxuICApXG4gIHV0aWxzLmFkZE1ldGhvZChcbiAgICBjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUsXG4gICAgJ3RvVGhyb3dFcnJvck1hdGNoaW5nSW5saW5lU25hcHNob3QnLFxuICAgIGZ1bmN0aW9uIF9fVklURVNUX0lOTElORV9TTkFQU0hPVF9fKHRoaXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBpbmxpbmVTbmFwc2hvdDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0gdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgIGdldFNuYXBzaG90Q2xpZW50KCkuYXNzZXJ0KGdldEVycm9yU3RyaW5nKGV4cGVjdGVkKSwgbWVzc2FnZSwgdHJ1ZSwgdW5kZWZpbmVkLCBpbmxpbmVTbmFwc2hvdClcbiAgICB9LFxuICApXG59XG4iLCIvLyB3ZSBhcmUgdXNpbmcgb25seSB0aGUgb25lcyBuZWVkZWQgYnkgQHRlc3RpbmctbGlicmFyeS9qZXN0LWRvbVxuLy8gaWYgeW91IG5lZWQgbW9yZSwganVzdCBhc2tcblxuaW1wb3J0IGMgZnJvbSAncGljb2NvbG9ycydcbmltcG9ydCB0eXBlIHsgRm9ybWF0dGVyIH0gZnJvbSAncGljb2NvbG9ycy90eXBlcydcbmltcG9ydCB7IGZvcm1hdCBhcyBwcmV0dHlGb3JtYXQsIHBsdWdpbnMgYXMgcHJldHR5Rm9ybWF0UGx1Z2lucyB9IGZyb20gJ3ByZXR0eS1mb3JtYXQnXG5pbXBvcnQgeyB1bmlmaWVkRGlmZiB9IGZyb20gJy4uLy4uL25vZGUvcmVwb3J0ZXJzL3JlbmRlcmVycy9kaWZmJ1xuXG5leHBvcnQgY29uc3QgRVhQRUNURURfQ09MT1IgPSBjLmdyZWVuXG5leHBvcnQgY29uc3QgUkVDRUlWRURfQ09MT1IgPSBjLnJlZFxuZXhwb3J0IGNvbnN0IElOVkVSVEVEX0NPTE9SID0gYy5pbnZlcnNlXG5leHBvcnQgY29uc3QgQk9MRF9XRUlHSFQgPSBjLmJvbGRcbmV4cG9ydCBjb25zdCBESU1fQ09MT1IgPSBjLmRpbVxuXG5jb25zdCB7XG4gIEFzeW1tZXRyaWNNYXRjaGVyLFxuICBET01Db2xsZWN0aW9uLFxuICBET01FbGVtZW50LFxuICBJbW11dGFibGUsXG4gIFJlYWN0RWxlbWVudCxcbiAgUmVhY3RUZXN0Q29tcG9uZW50LFxufSA9IHByZXR0eUZvcm1hdFBsdWdpbnNcblxuY29uc3QgUExVR0lOUyA9IFtcbiAgUmVhY3RUZXN0Q29tcG9uZW50LFxuICBSZWFjdEVsZW1lbnQsXG4gIERPTUVsZW1lbnQsXG4gIERPTUNvbGxlY3Rpb24sXG4gIEltbXV0YWJsZSxcbiAgQXN5bW1ldHJpY01hdGNoZXIsXG5dXG5cbmV4cG9ydCBpbnRlcmZhY2UgTWF0Y2hlckhpbnRPcHRpb25zIHtcbiAgY29tbWVudD86IHN0cmluZ1xuICBleHBlY3RlZENvbG9yPzogRm9ybWF0dGVyXG4gIGlzRGlyZWN0RXhwZWN0Q2FsbD86IGJvb2xlYW5cbiAgaXNOb3Q/OiBib29sZWFuXG4gIHByb21pc2U/OiBzdHJpbmdcbiAgcmVjZWl2ZWRDb2xvcj86IEZvcm1hdHRlclxuICBzZWNvbmRBcmd1bWVudD86IHN0cmluZ1xuICBzZWNvbmRBcmd1bWVudENvbG9yPzogRm9ybWF0dGVyXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaGVySGludChcbiAgbWF0Y2hlck5hbWU6IHN0cmluZyxcbiAgcmVjZWl2ZWQgPSAncmVjZWl2ZWQnLFxuICBleHBlY3RlZCA9ICdleHBlY3RlZCcsXG4gIG9wdGlvbnM6IE1hdGNoZXJIaW50T3B0aW9ucyA9IHt9LFxuKSB7XG4gIGNvbnN0IHtcbiAgICBjb21tZW50ID0gJycsXG4gICAgZXhwZWN0ZWRDb2xvciA9IEVYUEVDVEVEX0NPTE9SLFxuICAgIGlzRGlyZWN0RXhwZWN0Q2FsbCA9IGZhbHNlLCAvLyBzZWVtcyByZWR1bmRhbnQgd2l0aCByZWNlaXZlZCA9PT0gJydcbiAgICBpc05vdCA9IGZhbHNlLFxuICAgIHByb21pc2UgPSAnJyxcbiAgICByZWNlaXZlZENvbG9yID0gUkVDRUlWRURfQ09MT1IsXG4gICAgc2Vjb25kQXJndW1lbnQgPSAnJyxcbiAgICBzZWNvbmRBcmd1bWVudENvbG9yID0gRVhQRUNURURfQ09MT1IsXG4gIH0gPSBvcHRpb25zXG4gIGxldCBoaW50ID0gJydcbiAgbGV0IGRpbVN0cmluZyA9ICdleHBlY3QnIC8vIGNvbmNhdGVuYXRlIGFkamFjZW50IGRpbSBzdWJzdHJpbmdzXG5cbiAgaWYgKCFpc0RpcmVjdEV4cGVjdENhbGwgJiYgcmVjZWl2ZWQgIT09ICcnKSB7XG4gICAgaGludCArPSBESU1fQ09MT1IoYCR7ZGltU3RyaW5nfShgKSArIHJlY2VpdmVkQ29sb3IocmVjZWl2ZWQpXG4gICAgZGltU3RyaW5nID0gJyknXG4gIH1cblxuICBpZiAocHJvbWlzZSAhPT0gJycpIHtcbiAgICBoaW50ICs9IERJTV9DT0xPUihgJHtkaW1TdHJpbmd9LmApICsgcHJvbWlzZVxuICAgIGRpbVN0cmluZyA9ICcnXG4gIH1cblxuICBpZiAoaXNOb3QpIHtcbiAgICBoaW50ICs9IGAke0RJTV9DT0xPUihgJHtkaW1TdHJpbmd9LmApfW5vdGBcbiAgICBkaW1TdHJpbmcgPSAnJ1xuICB9XG5cbiAgaWYgKG1hdGNoZXJOYW1lLmluY2x1ZGVzKCcuJykpIHtcbiAgICAvLyBPbGQgZm9ybWF0OiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSxcbiAgICAvLyBlc3BlY2lhbGx5IHdpdGhvdXQgcHJvbWlzZSBvciBpc05vdCBvcHRpb25zXG4gICAgZGltU3RyaW5nICs9IG1hdGNoZXJOYW1lXG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gTmV3IGZvcm1hdDogb21pdCBwZXJpb2QgZnJvbSBtYXRjaGVyTmFtZSBhcmdcbiAgICBoaW50ICs9IERJTV9DT0xPUihgJHtkaW1TdHJpbmd9LmApICsgbWF0Y2hlck5hbWVcbiAgICBkaW1TdHJpbmcgPSAnJ1xuICB9XG5cbiAgaWYgKGV4cGVjdGVkID09PSAnJykge1xuICAgIGRpbVN0cmluZyArPSAnKCknXG4gIH1cbiAgZWxzZSB7XG4gICAgaGludCArPSBESU1fQ09MT1IoYCR7ZGltU3RyaW5nfShgKSArIGV4cGVjdGVkQ29sb3IoZXhwZWN0ZWQpXG4gICAgaWYgKHNlY29uZEFyZ3VtZW50KVxuICAgICAgaGludCArPSBESU1fQ09MT1IoJywgJykgKyBzZWNvbmRBcmd1bWVudENvbG9yKHNlY29uZEFyZ3VtZW50KVxuICAgIGRpbVN0cmluZyA9ICcpJ1xuICB9XG5cbiAgaWYgKGNvbW1lbnQgIT09ICcnKVxuICAgIGRpbVN0cmluZyArPSBgIC8vICR7Y29tbWVudH1gXG5cbiAgaWYgKGRpbVN0cmluZyAhPT0gJycpXG4gICAgaGludCArPSBESU1fQ09MT1IoZGltU3RyaW5nKVxuXG4gIHJldHVybiBoaW50XG59XG5cbmNvbnN0IFNQQUNFX1NZTUJPTCA9ICdcXHV7MDBCN30nIC8vIG1pZGRsZSBkb3RcblxuLy8gSW5zdGVhZCBvZiBpbnZlcnNlIGhpZ2hsaWdodCB3aGljaCBub3cgaW1wbGllcyBhIGNoYW5nZSxcbi8vIHJlcGxhY2UgY29tbW9uIHNwYWNlcyB3aXRoIG1pZGRsZSBkb3QgYXQgdGhlIGVuZCBvZiBhbnkgbGluZS5cbmNvbnN0IHJlcGxhY2VUcmFpbGluZ1NwYWNlcyA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgdGV4dC5yZXBsYWNlKC9cXHMrJC9nbSwgc3BhY2VzID0+IFNQQUNFX1NZTUJPTC5yZXBlYXQoc3BhY2VzLmxlbmd0aCkpXG5cbmV4cG9ydCBjb25zdCBzdHJpbmdpZnkgPSAob2JqZWN0OiB1bmtub3duLCBtYXhEZXB0aCA9IDEwKTogc3RyaW5nID0+IHtcbiAgY29uc3QgTUFYX0xFTkdUSCA9IDEwMDAwXG4gIGxldCByZXN1bHRcblxuICB0cnkge1xuICAgIHJlc3VsdCA9IHByZXR0eUZvcm1hdChvYmplY3QsIHtcbiAgICAgIG1heERlcHRoLFxuICAgICAgLy8gbWluOiB0cnVlLFxuICAgICAgcGx1Z2luczogUExVR0lOUyxcbiAgICB9KVxuICB9XG4gIGNhdGNoIHtcbiAgICByZXN1bHQgPSBwcmV0dHlGb3JtYXQob2JqZWN0LCB7XG4gICAgICBjYWxsVG9KU09OOiBmYWxzZSxcbiAgICAgIG1heERlcHRoLFxuICAgICAgLy8gbWluOiB0cnVlLFxuICAgICAgcGx1Z2luczogUExVR0lOUyxcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPj0gTUFYX0xFTkdUSCAmJiBtYXhEZXB0aCA+IDFcbiAgICA/IHN0cmluZ2lmeShvYmplY3QsIE1hdGguZmxvb3IobWF4RGVwdGggLyAyKSlcbiAgICA6IHJlc3VsdFxufVxuXG5leHBvcnQgY29uc3QgcHJpbnRSZWNlaXZlZCA9IChvYmplY3Q6IHVua25vd24pOiBzdHJpbmcgPT5cbiAgUkVDRUlWRURfQ09MT1IocmVwbGFjZVRyYWlsaW5nU3BhY2VzKHN0cmluZ2lmeShvYmplY3QpKSlcbmV4cG9ydCBjb25zdCBwcmludEV4cGVjdGVkID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+XG4gIEVYUEVDVEVEX0NPTE9SKHJlcGxhY2VUcmFpbGluZ1NwYWNlcyhzdHJpbmdpZnkodmFsdWUpKSlcblxuZXhwb3J0IGludGVyZmFjZSBEaWZmT3B0aW9ucyB7XG4gIGFBbm5vdGF0aW9uPzogc3RyaW5nXG4gIGFDb2xvcj86IEZvcm1hdHRlclxuICBhSW5kaWNhdG9yPzogc3RyaW5nXG4gIGJBbm5vdGF0aW9uPzogc3RyaW5nXG4gIGJDb2xvcj86IEZvcm1hdHRlclxuICBiSW5kaWNhdG9yPzogc3RyaW5nXG4gIGNoYW5nZUNvbG9yPzogRm9ybWF0dGVyXG4gIGNoYW5nZUxpbmVUcmFpbGluZ1NwYWNlQ29sb3I/OiBGb3JtYXR0ZXJcbiAgY29tbW9uQ29sb3I/OiBGb3JtYXR0ZXJcbiAgY29tbW9uSW5kaWNhdG9yPzogc3RyaW5nXG4gIGNvbW1vbkxpbmVUcmFpbGluZ1NwYWNlQ29sb3I/OiBGb3JtYXR0ZXJcbiAgY29udGV4dExpbmVzPzogbnVtYmVyXG4gIGVtcHR5Rmlyc3RPckxhc3RMaW5lUGxhY2Vob2xkZXI/OiBzdHJpbmdcbiAgZXhwYW5kPzogYm9vbGVhblxuICBpbmNsdWRlQ2hhbmdlQ291bnRzPzogYm9vbGVhblxuICBvbWl0QW5ub3RhdGlvbkxpbmVzPzogYm9vbGVhblxuICBwYXRjaENvbG9yPzogRm9ybWF0dGVyXG4gIC8vIHByZXR0eS1mb3JtYXQgdHlwZVxuICBjb21wYXJlS2V5cz86IGFueVxufVxuXG4vLyBUT0RPOiBkbyBzb21ldGhpbmcgd2l0aCBvcHRpb25zXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5leHBvcnQgZnVuY3Rpb24gZGlmZihhOiBhbnksIGI6IGFueSwgb3B0aW9ucz86IERpZmZPcHRpb25zKSB7XG4gIHJldHVybiB1bmlmaWVkRGlmZihzdHJpbmdpZnkoYSksIHN0cmluZ2lmeShiKSlcbn1cbiIsImltcG9ydCBjaGFpLCB7IHV0aWwgfSBmcm9tICdjaGFpJ1xuaW1wb3J0IHsgZ2V0U3RhdGUgfSBmcm9tICcuL2plc3QtZXhwZWN0J1xuXG5pbXBvcnQgKiBhcyBtYXRjaGVyVXRpbHMgZnJvbSAnLi9qZXN0LW1hdGNoZXItdXRpbHMnXG5cbmltcG9ydCB7XG4gIGVxdWFscyxcbiAgaXRlcmFibGVFcXVhbGl0eSxcbiAgc3Vic2V0RXF1YWxpdHksXG59IGZyb20gJy4vamVzdC11dGlscydcbmltcG9ydCB0eXBlIHtcbiAgQ2hhaVBsdWdpbixcbiAgTWF0Y2hlclN0YXRlLFxuICBNYXRjaGVyc09iamVjdCxcbiAgU3luY0V4cGVjdGF0aW9uUmVzdWx0LFxufSBmcm9tICcuL3R5cGVzJ1xuXG5jb25zdCBpc0FzeW5jRnVuY3Rpb24gPSAoZm46IHVua25vd24pID0+XG4gIHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyAmJiAoZm4gYXMgYW55KVtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnQXN5bmNGdW5jdGlvbidcblxuY29uc3QgZ2V0TWF0Y2hlclN0YXRlID0gKGFzc2VydGlvbjogQ2hhaS5Bc3NlcnRpb25TdGF0aWMgJiBDaGFpLkFzc2VydGlvbikgPT4ge1xuICBjb25zdCBvYmogPSBhc3NlcnRpb24uX29ialxuICBjb25zdCBpc05vdCA9IHV0aWwuZmxhZyhhc3NlcnRpb24sICduZWdhdGUnKSBhcyBib29sZWFuXG4gIGNvbnN0IHByb21pc2UgPSB1dGlsLmZsYWcoYXNzZXJ0aW9uLCAncHJvbWlzZScpIHx8ICcnXG4gIGNvbnN0IGplc3RVdGlscyA9IHtcbiAgICAuLi5tYXRjaGVyVXRpbHMsXG4gICAgaXRlcmFibGVFcXVhbGl0eSxcbiAgICBzdWJzZXRFcXVhbGl0eSxcbiAgfVxuXG4gIGNvbnN0IG1hdGNoZXJTdGF0ZTogTWF0Y2hlclN0YXRlID0ge1xuICAgIC4uLmdldFN0YXRlKCksXG4gICAgaXNOb3QsXG4gICAgdXRpbHM6IGplc3RVdGlscyxcbiAgICBwcm9taXNlLFxuICAgIGVxdWFscyxcbiAgICAvLyBuZWVkZWQgZm9yIGJ1aWx0LWluIGplc3Qtc25hcHNob3RzLCBidXQgd2UgZG9uJ3QgdXNlIGl0XG4gICAgc3VwcHJlc3NlZEVycm9yczogW10sXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXRlOiBtYXRjaGVyU3RhdGUsXG4gICAgaXNOb3QsXG4gICAgb2JqLFxuICB9XG59XG5cbmNsYXNzIEplc3RFeHRlbmRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBwdWJsaWMgYWN0dWFsPzogYW55LCBwdWJsaWMgZXhwZWN0ZWQ/OiBhbnkpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICB9XG59XG5cbmZ1bmN0aW9uIEplc3RFeHRlbmRQbHVnaW4oZXhwZWN0czogTWF0Y2hlcnNPYmplY3QpOiBDaGFpUGx1Z2luIHtcbiAgcmV0dXJuIChjLCB1dGlscykgPT4ge1xuICAgIE9iamVjdC5lbnRyaWVzKGV4cGVjdHMpLmZvckVhY2goKFtleHBlY3RBc3NlcnRpb25OYW1lLCBleHBlY3RBc3NlcnRpb25dKSA9PiB7XG4gICAgICBmdW5jdGlvbiBleHBlY3RTeW5jV3JhcHBlcih0aGlzOiBDaGFpLkFzc2VydGlvblN0YXRpYyAmIENoYWkuQXNzZXJ0aW9uLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgICAgICBjb25zdCB7IHN0YXRlLCBpc05vdCwgb2JqIH0gPSBnZXRNYXRjaGVyU3RhdGUodGhpcylcblxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGFyZ3Mgd2FudGluZyB0dXBsZVxuICAgICAgICBjb25zdCB7IHBhc3MsIG1lc3NhZ2UsIGFjdHVhbCwgZXhwZWN0ZWQgfSA9IGV4cGVjdEFzc2VydGlvbi5jYWxsKHN0YXRlLCBvYmosIC4uLmFyZ3MpIGFzIFN5bmNFeHBlY3RhdGlvblJlc3VsdFxuXG4gICAgICAgIGlmICgocGFzcyAmJiBpc05vdCkgfHwgKCFwYXNzICYmICFpc05vdCkpXG4gICAgICAgICAgdGhyb3cgbmV3IEplc3RFeHRlbmRFcnJvcihtZXNzYWdlKCksIGFjdHVhbCwgZXhwZWN0ZWQpXG4gICAgICB9XG5cbiAgICAgIGFzeW5jIGZ1bmN0aW9uIGV4cGVjdEFzeW5jV3JhcHBlcih0aGlzOiBDaGFpLkFzc2VydGlvblN0YXRpYyAmIENoYWkuQXNzZXJ0aW9uLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgICAgICBjb25zdCB7IHN0YXRlLCBpc05vdCwgb2JqIH0gPSBnZXRNYXRjaGVyU3RhdGUodGhpcylcblxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGFyZ3Mgd2FudGluZyB0dXBsZVxuICAgICAgICBjb25zdCB7IHBhc3MsIG1lc3NhZ2UsIGFjdHVhbCwgZXhwZWN0ZWQgfSA9IGF3YWl0IGV4cGVjdEFzc2VydGlvbi5jYWxsKHN0YXRlLCBvYmosIC4uLmFyZ3MpIGFzIFN5bmNFeHBlY3RhdGlvblJlc3VsdFxuXG4gICAgICAgIGlmICgocGFzcyAmJiBpc05vdCkgfHwgKCFwYXNzICYmICFpc05vdCkpXG4gICAgICAgICAgdGhyb3cgbmV3IEplc3RFeHRlbmRFcnJvcihtZXNzYWdlKCksIGFjdHVhbCwgZXhwZWN0ZWQpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV4cGVjdEFzc2VydGlvbldyYXBwZXIgPSBpc0FzeW5jRnVuY3Rpb24oZXhwZWN0QXNzZXJ0aW9uKSA/IGV4cGVjdEFzeW5jV3JhcHBlciA6IGV4cGVjdFN5bmNXcmFwcGVyXG5cbiAgICAgIHV0aWxzLmFkZE1ldGhvZChjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUsIGV4cGVjdEFzc2VydGlvbk5hbWUsIGV4cGVjdEFzc2VydGlvbldyYXBwZXIpXG4gICAgfSlcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgSmVzdEV4dGVuZDogQ2hhaVBsdWdpbiA9IChjaGFpLCB1dGlscykgPT4ge1xuICB1dGlscy5hZGRNZXRob2QoY2hhaS5leHBlY3QsICdleHRlbmQnLCAoZXhwZWN0czogTWF0Y2hlcnNPYmplY3QpID0+IHtcbiAgICBjaGFpLnVzZShKZXN0RXh0ZW5kUGx1Z2luKGV4cGVjdHMpKVxuICB9KVxufVxuIiwiaW1wb3J0ICogYXMgbWF0Y2hlclV0aWxzIGZyb20gJy4vamVzdC1tYXRjaGVyLXV0aWxzJ1xuXG5pbXBvcnQgeyBlcXVhbHMsIGlzQSB9IGZyb20gJy4vamVzdC11dGlscydcbmltcG9ydCB0eXBlIHsgQ2hhaVBsdWdpbiwgTWF0Y2hlclN0YXRlIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGludGVyZmFjZSBBc3ltbWV0cmljTWF0Y2hlckludGVyZmFjZSB7XG4gIGFzeW1tZXRyaWNNYXRjaChvdGhlcjogdW5rbm93bik6IGJvb2xlYW5cbiAgdG9TdHJpbmcoKTogc3RyaW5nXG4gIGdldEV4cGVjdGVkVHlwZT8oKTogc3RyaW5nXG4gIHRvQXN5bW1ldHJpY01hdGNoZXI/KCk6IHN0cmluZ1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXN5bW1ldHJpY01hdGNoZXI8XG4gIFQsXG4gIFN0YXRlIGV4dGVuZHMgTWF0Y2hlclN0YXRlID0gTWF0Y2hlclN0YXRlLFxuPiBpbXBsZW1lbnRzIEFzeW1tZXRyaWNNYXRjaGVySW50ZXJmYWNlIHtcbiAgJCR0eXBlb2YgPSBTeW1ib2wuZm9yKCdqZXN0LmFzeW1tZXRyaWNNYXRjaGVyJylcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgc2FtcGxlOiBULCBwcm90ZWN0ZWQgaW52ZXJzZSA9IGZhbHNlKSB7fVxuXG4gIHByb3RlY3RlZCBnZXRNYXRjaGVyQ29udGV4dCgpOiBTdGF0ZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVxdWFscyxcbiAgICAgIGlzTm90OiB0aGlzLmludmVyc2UsXG4gICAgICB1dGlsczogbWF0Y2hlclV0aWxzLFxuICAgIH0gYXMgYW55XG4gIH1cblxuICBhYnN0cmFjdCBhc3ltbWV0cmljTWF0Y2gob3RoZXI6IHVua25vd24pOiBib29sZWFuXG4gIGFic3RyYWN0IHRvU3RyaW5nKCk6IHN0cmluZ1xuICBnZXRFeHBlY3RlZFR5cGU/KCk6IHN0cmluZ1xuICB0b0FzeW1tZXRyaWNNYXRjaGVyPygpOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIFN0cmluZ0NvbnRhaW5pbmcgZXh0ZW5kcyBBc3ltbWV0cmljTWF0Y2hlcjxzdHJpbmc+IHtcbiAgY29uc3RydWN0b3Ioc2FtcGxlOiBzdHJpbmcsIGludmVyc2UgPSBmYWxzZSkge1xuICAgIGlmICghaXNBKCdTdHJpbmcnLCBzYW1wbGUpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBpcyBub3QgYSBzdHJpbmcnKVxuXG4gICAgc3VwZXIoc2FtcGxlLCBpbnZlcnNlKVxuICB9XG5cbiAgYXN5bW1ldHJpY01hdGNoKG90aGVyOiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXN1bHQgPSBpc0EoJ1N0cmluZycsIG90aGVyKSAmJiBvdGhlci5pbmNsdWRlcyh0aGlzLnNhbXBsZSlcblxuICAgIHJldHVybiB0aGlzLmludmVyc2UgPyAhcmVzdWx0IDogcmVzdWx0XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYFN0cmluZyR7dGhpcy5pbnZlcnNlID8gJ05vdCcgOiAnJ31Db250YWluaW5nYFxuICB9XG5cbiAgZ2V0RXhwZWN0ZWRUeXBlKCkge1xuICAgIHJldHVybiAnc3RyaW5nJ1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBbnl0aGluZyBleHRlbmRzIEFzeW1tZXRyaWNNYXRjaGVyPHZvaWQ+IHtcbiAgYXN5bW1ldHJpY01hdGNoKG90aGVyOiB1bmtub3duKSB7XG4gICAgcmV0dXJuIG90aGVyICE9IG51bGxcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnQW55dGhpbmcnXG4gIH1cblxuICB0b0FzeW1tZXRyaWNNYXRjaGVyKCkge1xuICAgIHJldHVybiAnQW55dGhpbmcnXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9iamVjdENvbnRhaW5pbmcgZXh0ZW5kcyBBc3ltbWV0cmljTWF0Y2hlcjxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBjb25zdHJ1Y3RvcihzYW1wbGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBpbnZlcnNlID0gZmFsc2UpIHtcbiAgICBzdXBlcihzYW1wbGUsIGludmVyc2UpXG4gIH1cblxuICBnZXRQcm90b3R5cGUob2JqOiBvYmplY3QpIHtcbiAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKVxuICAgICAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopXG5cbiAgICBpZiAob2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSA9PT0gb2JqKVxuICAgICAgcmV0dXJuIG51bGxcblxuICAgIHJldHVybiBvYmouY29uc3RydWN0b3IucHJvdG90eXBlXG4gIH1cblxuICBoYXNQcm9wZXJ0eShvYmo6IG9iamVjdCB8IG51bGwsIHByb3BlcnR5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIW9iailcbiAgICAgIHJldHVybiBmYWxzZVxuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3BlcnR5KSlcbiAgICAgIHJldHVybiB0cnVlXG5cbiAgICByZXR1cm4gdGhpcy5oYXNQcm9wZXJ0eSh0aGlzLmdldFByb3RvdHlwZShvYmopLCBwcm9wZXJ0eSlcbiAgfVxuXG4gIGFzeW1tZXRyaWNNYXRjaChvdGhlcjogYW55KSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnNhbXBsZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIGBZb3UgbXVzdCBwcm92aWRlIGFuIG9iamVjdCB0byAke3RoaXMudG9TdHJpbmcoKX0sIG5vdCAnJHtcbiAgICAgICAgICB0eXBlb2YgdGhpcy5zYW1wbGVcbiAgICAgICAgfScuYCxcbiAgICAgIClcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gdHJ1ZVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiB0aGlzLnNhbXBsZSkge1xuICAgICAgaWYgKCF0aGlzLmhhc1Byb3BlcnR5KG90aGVyLCBwcm9wZXJ0eSkgfHwgIWVxdWFscyh0aGlzLnNhbXBsZVtwcm9wZXJ0eV0sIG90aGVyW3Byb3BlcnR5XSkpIHtcbiAgICAgICAgcmVzdWx0ID0gZmFsc2VcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pbnZlcnNlID8gIXJlc3VsdCA6IHJlc3VsdFxuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGBPYmplY3Qke3RoaXMuaW52ZXJzZSA/ICdOb3QnIDogJyd9Q29udGFpbmluZ2BcbiAgfVxuXG4gIGdldEV4cGVjdGVkVHlwZSgpIHtcbiAgICByZXR1cm4gJ29iamVjdCdcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXJyYXlDb250YWluaW5nIGV4dGVuZHMgQXN5bW1ldHJpY01hdGNoZXI8QXJyYXk8dW5rbm93bj4+IHtcbiAgY29uc3RydWN0b3Ioc2FtcGxlOiBBcnJheTx1bmtub3duPiwgaW52ZXJzZSA9IGZhbHNlKSB7XG4gICAgc3VwZXIoc2FtcGxlLCBpbnZlcnNlKVxuICB9XG5cbiAgYXN5bW1ldHJpY01hdGNoKG90aGVyOiBBcnJheTx1bmtub3duPikge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnNhbXBsZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIGBZb3UgbXVzdCBwcm92aWRlIGFuIGFycmF5IHRvICR7dGhpcy50b1N0cmluZygpfSwgbm90ICcke1xuICAgICAgICAgIHR5cGVvZiB0aGlzLnNhbXBsZVxuICAgICAgICB9Jy5gLFxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdFxuICAgICAgPSB0aGlzLnNhbXBsZS5sZW5ndGggPT09IDBcbiAgICAgIHx8IChBcnJheS5pc0FycmF5KG90aGVyKVxuICAgICAgICAmJiB0aGlzLnNhbXBsZS5ldmVyeShpdGVtID0+XG4gICAgICAgICAgb3RoZXIuc29tZShhbm90aGVyID0+IGVxdWFscyhpdGVtLCBhbm90aGVyKSksXG4gICAgICAgICkpXG5cbiAgICByZXR1cm4gdGhpcy5pbnZlcnNlID8gIXJlc3VsdCA6IHJlc3VsdFxuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGBBcnJheSR7dGhpcy5pbnZlcnNlID8gJ05vdCcgOiAnJ31Db250YWluaW5nYFxuICB9XG5cbiAgZ2V0RXhwZWN0ZWRUeXBlKCkge1xuICAgIHJldHVybiAnYXJyYXknXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFueSBleHRlbmRzIEFzeW1tZXRyaWNNYXRjaGVyPGFueT4ge1xuICBjb25zdHJ1Y3RvcihzYW1wbGU6IHVua25vd24pIHtcbiAgICBpZiAodHlwZW9mIHNhbXBsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdhbnkoKSBleHBlY3RzIHRvIGJlIHBhc3NlZCBhIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLiAnXG4gICAgICAgICAgKyAnUGxlYXNlIHBhc3Mgb25lIG9yIHVzZSBhbnl0aGluZygpIHRvIG1hdGNoIGFueSBvYmplY3QuJyxcbiAgICAgIClcbiAgICB9XG4gICAgc3VwZXIoc2FtcGxlKVxuICB9XG5cbiAgZm5OYW1lRm9yKGZ1bmM6IEZ1bmN0aW9uKSB7XG4gICAgaWYgKGZ1bmMubmFtZSlcbiAgICAgIHJldHVybiBmdW5jLm5hbWVcblxuICAgIGNvbnN0IGZ1bmN0aW9uVG9TdHJpbmcgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmdcblxuICAgIGNvbnN0IG1hdGNoZXMgPSBmdW5jdGlvblRvU3RyaW5nXG4gICAgICAuY2FsbChmdW5jKVxuICAgICAgLm1hdGNoKC9eKD86YXN5bmMpP1xccypmdW5jdGlvblxccypcXCo/XFxzKihbXFx3JF0rKVxccypcXCgvKVxuICAgIHJldHVybiBtYXRjaGVzID8gbWF0Y2hlc1sxXSA6ICc8YW5vbnltb3VzPidcbiAgfVxuXG4gIGFzeW1tZXRyaWNNYXRjaChvdGhlcjogdW5rbm93bikge1xuICAgIGlmICh0aGlzLnNhbXBsZSA9PT0gU3RyaW5nKVxuICAgICAgcmV0dXJuIHR5cGVvZiBvdGhlciA9PSAnc3RyaW5nJyB8fCBvdGhlciBpbnN0YW5jZW9mIFN0cmluZ1xuXG4gICAgaWYgKHRoaXMuc2FtcGxlID09PSBOdW1iZXIpXG4gICAgICByZXR1cm4gdHlwZW9mIG90aGVyID09ICdudW1iZXInIHx8IG90aGVyIGluc3RhbmNlb2YgTnVtYmVyXG5cbiAgICBpZiAodGhpcy5zYW1wbGUgPT09IEZ1bmN0aW9uKVxuICAgICAgcmV0dXJuIHR5cGVvZiBvdGhlciA9PSAnZnVuY3Rpb24nIHx8IG90aGVyIGluc3RhbmNlb2YgRnVuY3Rpb25cblxuICAgIGlmICh0aGlzLnNhbXBsZSA9PT0gQm9vbGVhbilcbiAgICAgIHJldHVybiB0eXBlb2Ygb3RoZXIgPT0gJ2Jvb2xlYW4nIHx8IG90aGVyIGluc3RhbmNlb2YgQm9vbGVhblxuXG4gICAgaWYgKHRoaXMuc2FtcGxlID09PSBCaWdJbnQpXG4gICAgICByZXR1cm4gdHlwZW9mIG90aGVyID09ICdiaWdpbnQnIHx8IG90aGVyIGluc3RhbmNlb2YgQmlnSW50XG5cbiAgICBpZiAodGhpcy5zYW1wbGUgPT09IFN5bWJvbClcbiAgICAgIHJldHVybiB0eXBlb2Ygb3RoZXIgPT0gJ3N5bWJvbCcgfHwgb3RoZXIgaW5zdGFuY2VvZiBTeW1ib2xcblxuICAgIGlmICh0aGlzLnNhbXBsZSA9PT0gT2JqZWN0KVxuICAgICAgcmV0dXJuIHR5cGVvZiBvdGhlciA9PSAnb2JqZWN0J1xuXG4gICAgcmV0dXJuIG90aGVyIGluc3RhbmNlb2YgdGhpcy5zYW1wbGVcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnQW55J1xuICB9XG5cbiAgZ2V0RXhwZWN0ZWRUeXBlKCkge1xuICAgIGlmICh0aGlzLnNhbXBsZSA9PT0gU3RyaW5nKVxuICAgICAgcmV0dXJuICdzdHJpbmcnXG5cbiAgICBpZiAodGhpcy5zYW1wbGUgPT09IE51bWJlcilcbiAgICAgIHJldHVybiAnbnVtYmVyJ1xuXG4gICAgaWYgKHRoaXMuc2FtcGxlID09PSBGdW5jdGlvbilcbiAgICAgIHJldHVybiAnZnVuY3Rpb24nXG5cbiAgICBpZiAodGhpcy5zYW1wbGUgPT09IE9iamVjdClcbiAgICAgIHJldHVybiAnb2JqZWN0J1xuXG4gICAgaWYgKHRoaXMuc2FtcGxlID09PSBCb29sZWFuKVxuICAgICAgcmV0dXJuICdib29sZWFuJ1xuXG4gICAgcmV0dXJuIHRoaXMuZm5OYW1lRm9yKHRoaXMuc2FtcGxlKVxuICB9XG5cbiAgdG9Bc3ltbWV0cmljTWF0Y2hlcigpIHtcbiAgICByZXR1cm4gYEFueTwke3RoaXMuZm5OYW1lRm9yKHRoaXMuc2FtcGxlKX0+YFxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdHJpbmdNYXRjaGluZyBleHRlbmRzIEFzeW1tZXRyaWNNYXRjaGVyPFJlZ0V4cD4ge1xuICBjb25zdHJ1Y3RvcihzYW1wbGU6IHN0cmluZyB8IFJlZ0V4cCwgaW52ZXJzZSA9IGZhbHNlKSB7XG4gICAgaWYgKCFpc0EoJ1N0cmluZycsIHNhbXBsZSkgJiYgIWlzQSgnUmVnRXhwJywgc2FtcGxlKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgaXMgbm90IGEgU3RyaW5nIG9yIGEgUmVnRXhwJylcblxuICAgIHN1cGVyKG5ldyBSZWdFeHAoc2FtcGxlKSwgaW52ZXJzZSlcbiAgfVxuXG4gIGFzeW1tZXRyaWNNYXRjaChvdGhlcjogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gaXNBKCdTdHJpbmcnLCBvdGhlcikgJiYgdGhpcy5zYW1wbGUudGVzdChvdGhlcilcblxuICAgIHJldHVybiB0aGlzLmludmVyc2UgPyAhcmVzdWx0IDogcmVzdWx0XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYFN0cmluZyR7dGhpcy5pbnZlcnNlID8gJ05vdCcgOiAnJ31NYXRjaGluZ2BcbiAgfVxuXG4gIGdldEV4cGVjdGVkVHlwZSgpIHtcbiAgICByZXR1cm4gJ3N0cmluZydcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgSmVzdEFzeW1tZXRyaWNNYXRjaGVyczogQ2hhaVBsdWdpbiA9IChjaGFpLCB1dGlscykgPT4ge1xuICB1dGlscy5hZGRNZXRob2QoXG4gICAgY2hhaS5leHBlY3QsXG4gICAgJ2FueXRoaW5nJyxcbiAgICAoKSA9PiBuZXcgQW55dGhpbmcoKSxcbiAgKVxuXG4gIHV0aWxzLmFkZE1ldGhvZChcbiAgICBjaGFpLmV4cGVjdCxcbiAgICAnYW55JyxcbiAgICAoZXhwZWN0ZWQ6IHVua25vd24pID0+IG5ldyBBbnkoZXhwZWN0ZWQpLFxuICApXG5cbiAgdXRpbHMuYWRkTWV0aG9kKFxuICAgIGNoYWkuZXhwZWN0LFxuICAgICdzdHJpbmdDb250YWluaW5nJyxcbiAgICAoZXhwZWN0ZWQ6IHN0cmluZykgPT4gbmV3IFN0cmluZ0NvbnRhaW5pbmcoZXhwZWN0ZWQpLFxuICApXG5cbiAgdXRpbHMuYWRkTWV0aG9kKFxuICAgIGNoYWkuZXhwZWN0LFxuICAgICdvYmplY3RDb250YWluaW5nJyxcbiAgICAoZXhwZWN0ZWQ6IGFueSkgPT4gbmV3IE9iamVjdENvbnRhaW5pbmcoZXhwZWN0ZWQpLFxuICApXG5cbiAgdXRpbHMuYWRkTWV0aG9kKFxuICAgIGNoYWkuZXhwZWN0LFxuICAgICdhcnJheUNvbnRhaW5pbmcnLFxuICAgIChleHBlY3RlZDogYW55KSA9PiBuZXcgQXJyYXlDb250YWluaW5nKGV4cGVjdGVkKSxcbiAgKVxuXG4gIHV0aWxzLmFkZE1ldGhvZChcbiAgICBjaGFpLmV4cGVjdCxcbiAgICAnc3RyaW5nTWF0Y2hpbmcnLFxuICAgIChleHBlY3RlZDogYW55KSA9PiBuZXcgU3RyaW5nTWF0Y2hpbmcoZXhwZWN0ZWQpLFxuICApXG5cbiAgLy8gZGVmaW5lUHJvcGVydHkgZG9lcyBub3Qgd29ya1xuICA7KGNoYWkuZXhwZWN0IGFzIGFueSkubm90ID0ge1xuICAgIHN0cmluZ0NvbnRhaW5pbmc6IChleHBlY3RlZDogc3RyaW5nKSA9PiBuZXcgU3RyaW5nQ29udGFpbmluZyhleHBlY3RlZCwgdHJ1ZSksXG4gICAgb2JqZWN0Q29udGFpbmluZzogKGV4cGVjdGVkOiBhbnkpID0+IG5ldyBPYmplY3RDb250YWluaW5nKGV4cGVjdGVkLCB0cnVlKSxcbiAgICBhcnJheUNvbnRhaW5pbmc6IChleHBlY3RlZDogdW5rbm93bltdKSA9PiBuZXcgQXJyYXlDb250YWluaW5nKGV4cGVjdGVkLCB0cnVlKSxcbiAgICBzdHJpbmdNYXRjaGluZzogKGV4cGVjdGVkOiBzdHJpbmcgfCBSZWdFeHApID0+IG5ldyBTdHJpbmdNYXRjaGluZyhleHBlY3RlZCwgdHJ1ZSksXG4gIH1cbn1cbiIsImltcG9ydCBjaGFpIGZyb20gJ2NoYWknXG5pbXBvcnQgU3Vic2V0IGZyb20gJ2NoYWktc3Vic2V0J1xuaW1wb3J0IHsgU25hcHNob3RQbHVnaW4gfSBmcm9tICcuLi9zbmFwc2hvdC9jaGFpJ1xuaW1wb3J0IHsgSmVzdEV4dGVuZCB9IGZyb20gJy4vamVzdC1leHRlbmQnXG5pbXBvcnQgeyBKZXN0Q2hhaUV4cGVjdCB9IGZyb20gJy4vamVzdC1leHBlY3QnXG5pbXBvcnQgeyBKZXN0QXN5bW1ldHJpY01hdGNoZXJzIH0gZnJvbSAnLi9qZXN0LWFzeW1tZXRyaWMtbWF0Y2hlcnMnXG5cbmxldCBpbnN0YWxsZWQgPSBmYWxzZVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwQ2hhaSgpIHtcbiAgaWYgKGluc3RhbGxlZClcbiAgICByZXR1cm5cblxuICBjaGFpLnVzZShKZXN0RXh0ZW5kKVxuICBjaGFpLnVzZShKZXN0Q2hhaUV4cGVjdClcbiAgY2hhaS51c2UoU3Vic2V0KVxuICBjaGFpLnVzZShTbmFwc2hvdFBsdWdpbilcbiAgY2hhaS51c2UoSmVzdEFzeW1tZXRyaWNNYXRjaGVycylcbiAgaW5zdGFsbGVkID0gdHJ1ZVxufVxuIiwiaW1wb3J0IHsgQ29uc29sZSB9IGZyb20gJ2NvbnNvbGUnXG5pbXBvcnQgeyBXcml0YWJsZSB9IGZyb20gJ3N0cmVhbSdcbmltcG9ydCB7IGVudmlyb25tZW50cyB9IGZyb20gJy4uL2ludGVncmF0aW9ucy9lbnYnXG5pbXBvcnQgeyBzZXR1cENoYWkgfSBmcm9tICcuLi9pbnRlZ3JhdGlvbnMvY2hhaS9zZXR1cCdcbmltcG9ydCB0eXBlIHsgUmVzb2x2ZWRDb25maWcgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuLi91dGlscydcbmltcG9ydCB7IHJwYyB9IGZyb20gJy4vcnBjJ1xuXG5sZXQgZ2xvYmFsU2V0dXAgPSBmYWxzZVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwR2xvYmFsRW52KGNvbmZpZzogUmVzb2x2ZWRDb25maWcpIHtcbiAgaWYgKGdsb2JhbFNldHVwKVxuICAgIHJldHVyblxuXG4gIGdsb2JhbFNldHVwID0gdHJ1ZVxuXG4gIHNldHVwQ29uc29sZUxvZ1NweSgpXG4gIGF3YWl0IHNldHVwQ2hhaSgpXG5cbiAgaWYgKGNvbmZpZy5nbG9iYWxzKVxuICAgIChhd2FpdCBpbXBvcnQoJy4uL2ludGVncmF0aW9ucy9nbG9iYWxzJykpLnJlZ2lzdGVyQXBpR2xvYmFsbHkoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBDb25zb2xlTG9nU3B5KCkge1xuICBjb25zdCBzdGRvdXQgPSBuZXcgV3JpdGFibGUoe1xuICAgIHdyaXRlKGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAgICAgcnBjKCkub25Vc2VyQ29uc29sZUxvZyh7XG4gICAgICAgIHR5cGU6ICdzdGRvdXQnLFxuICAgICAgICBjb250ZW50OiBTdHJpbmcoZGF0YSksXG4gICAgICAgIHRhc2tJZDogcHJvY2Vzcy5fX3ZpdGVzdF93b3JrZXJfXy5jdXJyZW50Py5pZCxcbiAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgIH0pXG4gICAgICBjYWxsYmFjaygpXG4gICAgfSxcbiAgfSlcbiAgY29uc3Qgc3RkZXJyID0gbmV3IFdyaXRhYmxlKHtcbiAgICB3cml0ZShkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICAgIHJwYygpLm9uVXNlckNvbnNvbGVMb2coe1xuICAgICAgICB0eXBlOiAnc3RkZXJyJyxcbiAgICAgICAgY29udGVudDogU3RyaW5nKGRhdGEpLFxuICAgICAgICB0YXNrSWQ6IHByb2Nlc3MuX192aXRlc3Rfd29ya2VyX18uY3VycmVudD8uaWQsXG4gICAgICAgIHRpbWU6IERhdGUubm93KCksXG4gICAgICB9KVxuICAgICAgY2FsbGJhY2soKVxuICAgIH0sXG4gIH0pXG4gIGdsb2JhbFRoaXMuY29uc29sZSA9IG5ldyBDb25zb2xlKHtcbiAgICBzdGRvdXQsXG4gICAgc3RkZXJyLFxuICAgIGNvbG9yTW9kZTogdHJ1ZSxcbiAgICBncm91cEluZGVudGF0aW9uOiAyLFxuICB9KVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aEVudihcbiAgbmFtZTogUmVzb2x2ZWRDb25maWdbJ2Vudmlyb25tZW50J10sXG4gIG9wdGlvbnM6IFJlc29sdmVkQ29uZmlnWydlbnZpcm9ubWVudE9wdGlvbnMnXSxcbiAgZm46ICgpID0+IFByb21pc2U8dm9pZD4sXG4pIHtcbiAgY29uc3QgZW52ID0gYXdhaXQgZW52aXJvbm1lbnRzW25hbWVdLnNldHVwKGdsb2JhbFRoaXMsIG9wdGlvbnMpXG4gIHRyeSB7XG4gICAgYXdhaXQgZm4oKVxuICB9XG4gIGZpbmFsbHkge1xuICAgIGF3YWl0IGVudi50ZWFyZG93bihnbG9iYWxUaGlzKVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5TZXR1cEZpbGVzKGNvbmZpZzogUmVzb2x2ZWRDb25maWcpIHtcbiAgY29uc3QgZmlsZXMgPSB0b0FycmF5KGNvbmZpZy5zZXR1cEZpbGVzKVxuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBmaWxlcy5tYXAoYXN5bmMoZmlsZSkgPT4ge1xuICAgICAgcHJvY2Vzcy5fX3ZpdGVzdF93b3JrZXJfXy5tb2R1bGVDYWNoZS5kZWxldGUoZmlsZSlcbiAgICAgIGF3YWl0IGltcG9ydChmaWxlKVxuICAgIH0pLFxuICApXG59XG4iLCJpbXBvcnQgeyBmb3JtYXQgfSBmcm9tICd1dGlsJ1xuaW1wb3J0IHsgc3RyaW5naWZ5IH0gZnJvbSAnLi4vaW50ZWdyYXRpb25zL2NoYWkvamVzdC1tYXRjaGVyLXV0aWxzJ1xuXG5jb25zdCBPQkpFQ1RfUFJPVE8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoe30pXG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XZWJfV29ya2Vyc19BUEkvU3RydWN0dXJlZF9jbG9uZV9hbGdvcml0aG1cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVFcnJvcih2YWw6IGFueSwgc2VlbiA9IG5ldyBXZWFrTWFwKCkpOiBhbnkge1xuICBpZiAoIXZhbCB8fCB0eXBlb2YgdmFsID09PSAnc3RyaW5nJylcbiAgICByZXR1cm4gdmFsXG4gIGlmICh0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKVxuICAgIHJldHVybiBgRnVuY3Rpb248JHt2YWwubmFtZX0+YFxuICBpZiAodHlwZW9mIHZhbCAhPT0gJ29iamVjdCcpXG4gICAgcmV0dXJuIHZhbFxuICBpZiAodmFsIGluc3RhbmNlb2YgUHJvbWlzZSB8fCAndGhlbicgaW4gdmFsIHx8ICh2YWwuY29uc3RydWN0b3IgJiYgdmFsLmNvbnN0cnVjdG9yLnByb3RvdHlwZSA9PT0gJ0FzeW5jRnVuY3Rpb24nKSlcbiAgICByZXR1cm4gJ1Byb21pc2UnXG4gIGlmICh0eXBlb2YgRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsIGluc3RhbmNlb2YgRWxlbWVudClcbiAgICByZXR1cm4gdmFsLnRhZ05hbWVcbiAgaWYgKHR5cGVvZiB2YWwuYXN5bW1ldHJpY01hdGNoID09PSAnZnVuY3Rpb24nKVxuICAgIHJldHVybiBgJHt2YWwudG9TdHJpbmcoKX0gJHtmb3JtYXQodmFsLnNhbXBsZSl9YFxuXG4gIGlmIChzZWVuLmhhcyh2YWwpKVxuICAgIHJldHVybiBzZWVuLmdldCh2YWwpXG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgIGNvbnN0IGNsb25lOiBhbnlbXSA9IG5ldyBBcnJheSh2YWwubGVuZ3RoKVxuICAgIHNlZW4uc2V0KHZhbCwgY2xvbmUpXG4gICAgdmFsLmZvckVhY2goKGUsIGkpID0+IHtcbiAgICAgIGNsb25lW2ldID0gc2VyaWFsaXplRXJyb3IoZSwgc2VlbilcbiAgICB9KVxuICAgIHJldHVybiBjbG9uZVxuICB9XG4gIGVsc2Uge1xuICAgIC8vIE9iamVjdHMgd2l0aCBgRXJyb3JgIGNvbnN0cnVjdG9ycyBhcHBlYXIgdG8gY2F1c2UgcHJvYmxlbXMgZHVyaW5nIHdvcmtlciBjb21tdW5pY2F0aW9uXG4gICAgLy8gdXNpbmcgYE1lc3NhZ2VQb3J0YCwgc28gdGhlIHNlcmlhbGl6ZWQgZXJyb3Igb2JqZWN0IGlzIGJlaW5nIHJlY3JlYXRlZCBhcyBwbGFpbiBvYmplY3QuXG4gICAgY29uc3QgY2xvbmUgPSBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgc2Vlbi5zZXQodmFsLCBjbG9uZSlcblxuICAgIGxldCBvYmogPSB2YWxcbiAgICB3aGlsZSAob2JqICYmIG9iaiAhPT0gT0JKRUNUX1BST1RPKSB7XG4gICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAoIShrZXkgaW4gY2xvbmUpKVxuICAgICAgICAgIGNsb25lW2tleV0gPSBzZXJpYWxpemVFcnJvcihvYmpba2V5XSwgc2VlbilcbiAgICAgIH0pXG4gICAgICBvYmogPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKVxuICAgIH1cbiAgICByZXR1cm4gY2xvbmVcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0Vycm9yKGVycjogYW55KSB7XG4gIGlmICghZXJyKVxuICAgIHJldHVybiBlcnJcbiAgLy8gc3RhY2sgaXMgbm90IHNlcmlhbGl6ZWQgaW4gd29ya2VyIGNvbW11bmljYXRpb25cbiAgLy8gd2Ugc3RyaW5naWZ5IGl0IGZpcnN0XG4gIGlmIChlcnIuc3RhY2spXG4gICAgZXJyLnN0YWNrU3RyID0gU3RyaW5nKGVyci5zdGFjaylcbiAgaWYgKGVyci5uYW1lKVxuICAgIGVyci5uYW1lU3RyID0gU3RyaW5nKGVyci5uYW1lKVxuXG4gIGlmICh0eXBlb2YgZXJyLmV4cGVjdGVkICE9PSAnc3RyaW5nJylcbiAgICBlcnIuZXhwZWN0ZWQgPSBzdHJpbmdpZnkoZXJyLmV4cGVjdGVkKVxuICBpZiAodHlwZW9mIGVyci5hY3R1YWwgIT09ICdzdHJpbmcnKVxuICAgIGVyci5hY3R1YWwgPSBzdHJpbmdpZnkoZXJyLmFjdHVhbClcblxuICByZXR1cm4gc2VyaWFsaXplRXJyb3IoZXJyKVxufVxuIiwiaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0bydcbmltcG9ydCB7IHJlbGF0aXZlIH0gZnJvbSAncGF0aGUnXG5pbXBvcnQgdHlwZSB7IEZpbGUsIFJlc29sdmVkQ29uZmlnLCBTdWl0ZSB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgY2xlYXJDb250ZXh0LCBkZWZhdWx0U3VpdGUgfSBmcm9tICcuL3N1aXRlJ1xuaW1wb3J0IHsgZ2V0SG9va3MsIHNldEhvb2tzIH0gZnJvbSAnLi9tYXAnXG5pbXBvcnQgeyBwcm9jZXNzRXJyb3IgfSBmcm9tICcuL2Vycm9yJ1xuaW1wb3J0IHsgY29udGV4dCB9IGZyb20gJy4vY29udGV4dCdcbmltcG9ydCB7IHJ1blNldHVwRmlsZXMgfSBmcm9tICcuL3NldHVwJ1xuXG5mdW5jdGlvbiBoYXNoKHN0cjogc3RyaW5nLCBsZW5ndGggPSAxMCkge1xuICByZXR1cm4gY3JlYXRlSGFzaCgnbWQ1JylcbiAgICAudXBkYXRlKHN0cilcbiAgICAuZGlnZXN0KCdoZXgnKVxuICAgIC5zbGljZSgwLCBsZW5ndGgpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb2xsZWN0VGVzdHMocGF0aHM6IHN0cmluZ1tdLCBjb25maWc6IFJlc29sdmVkQ29uZmlnKSB7XG4gIGNvbnN0IGZpbGVzOiBGaWxlW10gPSBbXVxuXG4gIGZvciAoY29uc3QgZmlsZXBhdGggb2YgcGF0aHMpIHtcbiAgICBjb25zdCBwYXRoID0gcmVsYXRpdmUoY29uZmlnLnJvb3QsIGZpbGVwYXRoKVxuICAgIGNvbnN0IGZpbGU6IEZpbGUgPSB7XG4gICAgICBpZDogaGFzaChwYXRoKSxcbiAgICAgIG5hbWU6IHBhdGgsXG4gICAgICB0eXBlOiAnc3VpdGUnLFxuICAgICAgbW9kZTogJ3J1bicsXG4gICAgICBmaWxlcGF0aCxcbiAgICAgIHRhc2tzOiBbXSxcbiAgICB9XG5cbiAgICBjbGVhckNvbnRleHQoKVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBydW5TZXR1cEZpbGVzKGNvbmZpZylcbiAgICAgIGF3YWl0IGltcG9ydChmaWxlcGF0aClcblxuICAgICAgY29uc3QgZGVmYXVsdFRhc2tzID0gYXdhaXQgZGVmYXVsdFN1aXRlLmNvbGxlY3QoZmlsZSlcblxuICAgICAgc2V0SG9va3MoZmlsZSwgZ2V0SG9va3MoZGVmYXVsdFRhc2tzKSlcblxuICAgICAgZm9yIChjb25zdCBjIG9mIFsuLi5kZWZhdWx0VGFza3MudGFza3MsIC4uLmNvbnRleHQudGFza3NdKSB7XG4gICAgICAgIGlmIChjLnR5cGUgPT09ICd0ZXN0Jykge1xuICAgICAgICAgIGZpbGUudGFza3MucHVzaChjKVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGMudHlwZSA9PT0gJ3N1aXRlJykge1xuICAgICAgICAgIGZpbGUudGFza3MucHVzaChjKVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KClcbiAgICAgICAgICBjb25zdCBzdWl0ZSA9IGF3YWl0IGMuY29sbGVjdChmaWxlKVxuICAgICAgICAgIGZpbGUuY29sbGVjdER1cmF0aW9uID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFxuICAgICAgICAgIGlmIChzdWl0ZS5uYW1lIHx8IHN1aXRlLnRhc2tzLmxlbmd0aClcbiAgICAgICAgICAgIGZpbGUudGFza3MucHVzaChzdWl0ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgZmlsZS5yZXN1bHQgPSB7XG4gICAgICAgIHN0YXRlOiAnZmFpbCcsXG4gICAgICAgIGVycm9yOiBwcm9jZXNzRXJyb3IoZSksXG4gICAgICB9XG4gICAgICAvLyBub3Qgc3VyZSB0aHksIHRoaXMgdGhpcyBsaW5lIGlzIG5lZWRlZCB0byB0cmlnZ2VyIHRoZSBlcnJvclxuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJ1xcMCcpXG4gICAgfVxuXG4gICAgY2FsY3VsYXRlSGFzaChmaWxlKVxuXG4gICAgaW50ZXJwcmV0VGFza01vZGVzKGZpbGUsIGNvbmZpZy50ZXN0TmFtZVBhdHRlcm4pXG5cbiAgICBmaWxlcy5wdXNoKGZpbGUpXG4gIH1cblxuICByZXR1cm4gZmlsZXNcbn1cblxuLyoqXG4gKiBJZiBhbnkgdGFza3MgYmVlbiBtYXJrZWQgYXMgYG9ubHlgLCBtYXJrIGFsbCBvdGhlciB0YXNrcyBhcyBgc2tpcGAuXG4gKi9cbmZ1bmN0aW9uIGludGVycHJldFRhc2tNb2RlcyhzdWl0ZTogU3VpdGUsIG5hbWVQYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwLCBvbmx5TW9kZT86IGJvb2xlYW4sIGlzSW5jbHVkZWQ/OiBib29sZWFuKSB7XG4gIGlmIChvbmx5TW9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgb25seU1vZGUgPSBzb21lVGFza3NBcmVPbmx5KHN1aXRlKVxuICAgIGlzSW5jbHVkZWQgfHw9IHN1aXRlLm1vZGUgPT09ICdvbmx5J1xuICB9XG5cbiAgc3VpdGUudGFza3MuZm9yRWFjaCgodCkgPT4ge1xuICAgIC8vIENoZWNrIGlmIGVpdGhlciB0aGUgcGFyZW50IHN1aXRlIG9yIHRoZSB0YXNrIGl0c2VsZiBhcmUgbWFya2VkIGFzIGluY2x1ZGVkXG4gICAgY29uc3QgaW5jbHVkZVRhc2sgPSBpc0luY2x1ZGVkIHx8IHQubW9kZSA9PT0gJ29ubHknXG4gICAgaWYgKG9ubHlNb2RlKSB7XG4gICAgICBpZiAodC50eXBlID09PSAnc3VpdGUnICYmIChpbmNsdWRlVGFzayB8fCBzb21lVGFza3NBcmVPbmx5KHQpKSkge1xuICAgICAgICAvLyBEb24ndCBza2lwIHRoaXMgc3VpdGVcbiAgICAgICAgaWYgKHQubW9kZSA9PT0gJ29ubHknKVxuICAgICAgICAgIHQubW9kZSA9ICdydW4nXG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0Lm1vZGUgPT09ICdydW4nICYmICFpbmNsdWRlVGFzaykgeyB0Lm1vZGUgPSAnc2tpcCcgfVxuICAgICAgZWxzZSBpZiAodC5tb2RlID09PSAnb25seScpIHsgdC5tb2RlID0gJ3J1bicgfVxuICAgIH1cbiAgICBpZiAodC50eXBlID09PSAndGVzdCcpIHtcbiAgICAgIGlmIChuYW1lUGF0dGVybiAmJiAhdC5uYW1lLm1hdGNoKG5hbWVQYXR0ZXJuKSlcbiAgICAgICAgdC5tb2RlID0gJ3NraXAnXG4gICAgfVxuICAgIGVsc2UgaWYgKHQudHlwZSA9PT0gJ3N1aXRlJykge1xuICAgICAgaWYgKHQubW9kZSA9PT0gJ3NraXAnKVxuICAgICAgICBza2lwQWxsVGFza3ModClcbiAgICAgIGVsc2VcbiAgICAgICAgaW50ZXJwcmV0VGFza01vZGVzKHQsIG5hbWVQYXR0ZXJuLCBvbmx5TW9kZSwgaW5jbHVkZVRhc2spXG4gICAgfVxuICB9KVxuXG4gIC8vIGlmIGFsbCBzdWJ0YXNrcyBhcmUgc2tpcHBlZCwgbWFyayBhcyBza2lwXG4gIGlmIChzdWl0ZS5tb2RlID09PSAncnVuJykge1xuICAgIGlmIChzdWl0ZS50YXNrcy5ldmVyeShpID0+IGkubW9kZSAhPT0gJ3J1bicpKVxuICAgICAgc3VpdGUubW9kZSA9ICdza2lwJ1xuICB9XG59XG5cbmZ1bmN0aW9uIHNvbWVUYXNrc0FyZU9ubHkoc3VpdGU6IFN1aXRlKTogYm9vbGVhbiB7XG4gIHJldHVybiBzdWl0ZS50YXNrcy5zb21lKHQgPT4gdC5tb2RlID09PSAnb25seScgfHwgKHQudHlwZSA9PT0gJ3N1aXRlJyAmJiBzb21lVGFza3NBcmVPbmx5KHQpKSlcbn1cblxuZnVuY3Rpb24gc2tpcEFsbFRhc2tzKHN1aXRlOiBTdWl0ZSkge1xuICBzdWl0ZS50YXNrcy5mb3JFYWNoKCh0KSA9PiB7XG4gICAgaWYgKHQubW9kZSA9PT0gJ3J1bicpIHtcbiAgICAgIHQubW9kZSA9ICdza2lwJ1xuICAgICAgaWYgKHQudHlwZSA9PT0gJ3N1aXRlJylcbiAgICAgICAgc2tpcEFsbFRhc2tzKHQpXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVIYXNoKHBhcmVudDogU3VpdGUpIHtcbiAgcGFyZW50LnRhc2tzLmZvckVhY2goKHQsIGlkeCkgPT4ge1xuICAgIHQuaWQgPSBgJHtwYXJlbnQuaWR9XyR7aWR4fWBcbiAgICBpZiAodC50eXBlID09PSAnc3VpdGUnKVxuICAgICAgY2FsY3VsYXRlSGFzaCh0KVxuICB9KVxufVxuIiwiaW1wb3J0IHsgcGVyZm9ybWFuY2UgfSBmcm9tICdwZXJmX2hvb2tzJ1xuaW1wb3J0IGluc3BlY3RvciBmcm9tICdpbnNwZWN0b3InXG5pbXBvcnQgdHlwZSB7IEhvb2tMaXN0ZW5lciwgUmVzb2x2ZWRDb25maWcsIFN1aXRlLCBTdWl0ZUhvb2tzLCBUYXNrLCBUYXNrUmVzdWx0LCBUZXN0IH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyB2aSB9IGZyb20gJy4uL2ludGVncmF0aW9ucy92aSdcbmltcG9ydCB7IGdldFNuYXBzaG90Q2xpZW50IH0gZnJvbSAnLi4vaW50ZWdyYXRpb25zL3NuYXBzaG90L2NoYWknXG5pbXBvcnQgeyBnZXRGdWxsTmFtZSwgaGFzRmFpbGVkLCBoYXNUZXN0cywgcGFydGl0aW9uU3VpdGVDaGlsZHJlbiB9IGZyb20gJy4uL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0U3RhdGUsIHNldFN0YXRlIH0gZnJvbSAnLi4vaW50ZWdyYXRpb25zL2NoYWkvamVzdC1leHBlY3QnXG5pbXBvcnQgeyBnZXRGbiwgZ2V0SG9va3MgfSBmcm9tICcuL21hcCdcbmltcG9ydCB7IHJwYyB9IGZyb20gJy4vcnBjJ1xuaW1wb3J0IHsgY29sbGVjdFRlc3RzIH0gZnJvbSAnLi9jb2xsZWN0J1xuaW1wb3J0IHsgcHJvY2Vzc0Vycm9yIH0gZnJvbSAnLi9lcnJvcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhbGxTdWl0ZUhvb2s8VCBleHRlbmRzIGtleW9mIFN1aXRlSG9va3M+KHN1aXRlOiBTdWl0ZSwgbmFtZTogVCwgYXJnczogU3VpdGVIb29rc1tUXVswXSBleHRlbmRzIEhvb2tMaXN0ZW5lcjxpbmZlciBBPiA/IEEgOiBuZXZlcikge1xuICBpZiAobmFtZSA9PT0gJ2JlZm9yZUVhY2gnICYmIHN1aXRlLnN1aXRlKVxuICAgIGF3YWl0IGNhbGxTdWl0ZUhvb2soc3VpdGUuc3VpdGUsIG5hbWUsIGFyZ3MpXG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwoZ2V0SG9va3Moc3VpdGUpW25hbWVdLm1hcChmbiA9PiBmbiguLi4oYXJncyBhcyBhbnkpKSkpXG5cbiAgaWYgKG5hbWUgPT09ICdhZnRlckVhY2gnICYmIHN1aXRlLnN1aXRlKVxuICAgIGF3YWl0IGNhbGxTdWl0ZUhvb2soc3VpdGUuc3VpdGUsIG5hbWUsIGFyZ3MpXG59XG5cbmNvbnN0IHBhY2tzID0gbmV3IE1hcDxzdHJpbmcsIFRhc2tSZXN1bHR8dW5kZWZpbmVkPigpXG5sZXQgdXBkYXRlVGltZXI6IGFueVxubGV0IHByZXZpb3VzVXBkYXRlOiBQcm9taXNlPHZvaWQ+fHVuZGVmaW5lZFxuXG5mdW5jdGlvbiB1cGRhdGVUYXNrKHRhc2s6IFRhc2spIHtcbiAgcGFja3Muc2V0KHRhc2suaWQsIHRhc2sucmVzdWx0KVxuXG4gIGNsZWFyVGltZW91dCh1cGRhdGVUaW1lcilcbiAgdXBkYXRlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBwcmV2aW91c1VwZGF0ZSA9IHNlbmRUYXNrc1VwZGF0ZSgpXG4gIH0sIDEwKVxufVxuXG5hc3luYyBmdW5jdGlvbiBzZW5kVGFza3NVcGRhdGUoKSB7XG4gIGNsZWFyVGltZW91dCh1cGRhdGVUaW1lcilcbiAgYXdhaXQgcHJldmlvdXNVcGRhdGVcblxuICBpZiAocGFja3Muc2l6ZSkge1xuICAgIGNvbnN0IHAgPSBycGMoKS5vblRhc2tVcGRhdGUoQXJyYXkuZnJvbShwYWNrcykpXG4gICAgcGFja3MuY2xlYXIoKVxuICAgIHJldHVybiBwXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blRlc3QodGVzdDogVGVzdCkge1xuICBpZiAodGVzdC5tb2RlICE9PSAncnVuJylcbiAgICByZXR1cm5cblxuICBjb25zdCBzdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpXG5cbiAgdGVzdC5yZXN1bHQgPSB7XG4gICAgc3RhdGU6ICdydW4nLFxuICB9XG4gIHVwZGF0ZVRhc2sodGVzdClcblxuICBjbGVhck1vZHVsZU1vY2tzKClcblxuICBnZXRTbmFwc2hvdENsaWVudCgpLnNldFRlc3QodGVzdClcblxuICBwcm9jZXNzLl9fdml0ZXN0X3dvcmtlcl9fLmN1cnJlbnQgPSB0ZXN0XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBjYWxsU3VpdGVIb29rKHRlc3Quc3VpdGUsICdiZWZvcmVFYWNoJywgW3Rlc3QsIHRlc3Quc3VpdGVdKVxuICAgIHNldFN0YXRlKHtcbiAgICAgIGFzc2VydGlvbkNhbGxzOiAwLFxuICAgICAgaXNFeHBlY3RpbmdBc3NlcnRpb25zOiBmYWxzZSxcbiAgICAgIGlzRXhwZWN0aW5nQXNzZXJ0aW9uc0Vycm9yOiBudWxsLFxuICAgICAgZXhwZWN0ZWRBc3NlcnRpb25zTnVtYmVyOiBudWxsLFxuICAgICAgZXhwZWN0ZWRBc3NlcnRpb25zTnVtYmVyRXJyb3I6IG51bGwsXG4gICAgICB0ZXN0UGF0aDogdGVzdC5zdWl0ZS5maWxlPy5maWxlcGF0aCxcbiAgICAgIGN1cnJlbnRUZXN0TmFtZTogZ2V0RnVsbE5hbWUodGVzdCksXG4gICAgfSlcbiAgICBhd2FpdCBnZXRGbih0ZXN0KSgpXG4gICAgY29uc3QgeyBhc3NlcnRpb25DYWxscywgZXhwZWN0ZWRBc3NlcnRpb25zTnVtYmVyLCBleHBlY3RlZEFzc2VydGlvbnNOdW1iZXJFcnJvciwgaXNFeHBlY3RpbmdBc3NlcnRpb25zLCBpc0V4cGVjdGluZ0Fzc2VydGlvbnNFcnJvciB9ID0gZ2V0U3RhdGUoKVxuICAgIGlmIChleHBlY3RlZEFzc2VydGlvbnNOdW1iZXIgIT09IG51bGwgJiYgYXNzZXJ0aW9uQ2FsbHMgIT09IGV4cGVjdGVkQXNzZXJ0aW9uc051bWJlcilcbiAgICAgIHRocm93IGV4cGVjdGVkQXNzZXJ0aW9uc051bWJlckVycm9yXG4gICAgaWYgKGlzRXhwZWN0aW5nQXNzZXJ0aW9ucyA9PT0gdHJ1ZSAmJiBhc3NlcnRpb25DYWxscyA9PT0gMClcbiAgICAgIHRocm93IGlzRXhwZWN0aW5nQXNzZXJ0aW9uc0Vycm9yXG5cbiAgICB0ZXN0LnJlc3VsdC5zdGF0ZSA9ICdwYXNzJ1xuICB9XG4gIGNhdGNoIChlKSB7XG4gICAgdGVzdC5yZXN1bHQuc3RhdGUgPSAnZmFpbCdcbiAgICB0ZXN0LnJlc3VsdC5lcnJvciA9IHByb2Nlc3NFcnJvcihlKVxuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBjYWxsU3VpdGVIb29rKHRlc3Quc3VpdGUsICdhZnRlckVhY2gnLCBbdGVzdCwgdGVzdC5zdWl0ZV0pXG4gIH1cbiAgY2F0Y2ggKGUpIHtcbiAgICB0ZXN0LnJlc3VsdC5zdGF0ZSA9ICdmYWlsJ1xuICAgIHRlc3QucmVzdWx0LmVycm9yID0gcHJvY2Vzc0Vycm9yKGUpXG4gIH1cblxuICAvLyBpZiB0ZXN0IGlzIG1hcmtlZCB0byBiZSBmYWlsZWQsIGZsaXAgdGhlIHJlc3VsdFxuICBpZiAodGVzdC5mYWlscykge1xuICAgIGlmICh0ZXN0LnJlc3VsdC5zdGF0ZSA9PT0gJ3Bhc3MnKSB7XG4gICAgICB0ZXN0LnJlc3VsdC5zdGF0ZSA9ICdmYWlsJ1xuICAgICAgdGVzdC5yZXN1bHQuZXJyb3IgPSBwcm9jZXNzRXJyb3IobmV3IEVycm9yKCdFeHBlY3QgdGVzdCB0byBmYWlsJykpXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGVzdC5yZXN1bHQuc3RhdGUgPSAncGFzcydcbiAgICAgIHRlc3QucmVzdWx0LmVycm9yID0gdW5kZWZpbmVkXG4gICAgfVxuICB9XG5cbiAgZ2V0U25hcHNob3RDbGllbnQoKS5jbGVhclRlc3QoKVxuXG4gIHRlc3QucmVzdWx0LmR1cmF0aW9uID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFxuXG4gIHByb2Nlc3MuX192aXRlc3Rfd29ya2VyX18uY3VycmVudCA9IHVuZGVmaW5lZFxuXG4gIHVwZGF0ZVRhc2sodGVzdClcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blN1aXRlKHN1aXRlOiBTdWl0ZSkge1xuICBpZiAoc3VpdGUucmVzdWx0Py5zdGF0ZSA9PT0gJ2ZhaWwnKVxuICAgIHJldHVyblxuXG4gIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KClcblxuICBzdWl0ZS5yZXN1bHQgPSB7XG4gICAgc3RhdGU6ICdydW4nLFxuICB9XG5cbiAgdXBkYXRlVGFzayhzdWl0ZSlcblxuICBpZiAoc3VpdGUubW9kZSA9PT0gJ3NraXAnKSB7XG4gICAgc3VpdGUucmVzdWx0LnN0YXRlID0gJ3NraXAnXG4gIH1cbiAgZWxzZSBpZiAoc3VpdGUubW9kZSA9PT0gJ3RvZG8nKSB7XG4gICAgc3VpdGUucmVzdWx0LnN0YXRlID0gJ3RvZG8nXG4gIH1cbiAgZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNhbGxTdWl0ZUhvb2soc3VpdGUsICdiZWZvcmVBbGwnLCBbc3VpdGVdKVxuXG4gICAgICBmb3IgKGNvbnN0IHRhc2tzR3JvdXAgb2YgcGFydGl0aW9uU3VpdGVDaGlsZHJlbihzdWl0ZSkpIHtcbiAgICAgICAgaWYgKHRhc2tzR3JvdXBbMF0uY29uY3VycmVudCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRhc2tzR3JvdXAubWFwKGMgPT4gcnVuU3VpdGVDaGlsZChjKSkpXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjIG9mIHRhc2tzR3JvdXApXG4gICAgICAgICAgICBhd2FpdCBydW5TdWl0ZUNoaWxkKGMpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXdhaXQgY2FsbFN1aXRlSG9vayhzdWl0ZSwgJ2FmdGVyQWxsJywgW3N1aXRlXSlcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgIHN1aXRlLnJlc3VsdC5zdGF0ZSA9ICdmYWlsJ1xuICAgICAgc3VpdGUucmVzdWx0LmVycm9yID0gcHJvY2Vzc0Vycm9yKGUpXG4gICAgfVxuICB9XG4gIHN1aXRlLnJlc3VsdC5kdXJhdGlvbiA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRcblxuICBpZiAoc3VpdGUubW9kZSA9PT0gJ3J1bicpIHtcbiAgICBpZiAoIWhhc1Rlc3RzKHN1aXRlKSkge1xuICAgICAgc3VpdGUucmVzdWx0LnN0YXRlID0gJ2ZhaWwnXG4gICAgICBpZiAoIXN1aXRlLnJlc3VsdC5lcnJvcilcbiAgICAgICAgc3VpdGUucmVzdWx0LmVycm9yID0gbmV3IEVycm9yKGBObyB0ZXN0cyBmb3VuZCBpbiBzdWl0ZSAke3N1aXRlLm5hbWV9YClcbiAgICB9XG4gICAgZWxzZSBpZiAoaGFzRmFpbGVkKHN1aXRlKSkge1xuICAgICAgc3VpdGUucmVzdWx0LnN0YXRlID0gJ2ZhaWwnXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgc3VpdGUucmVzdWx0LnN0YXRlID0gJ3Bhc3MnXG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVGFzayhzdWl0ZSlcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuU3VpdGVDaGlsZChjOiBUYXNrKSB7XG4gIHJldHVybiBjLnR5cGUgPT09ICd0ZXN0J1xuICAgID8gcnVuVGVzdChjKVxuICAgIDogcnVuU3VpdGUoYylcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blN1aXRlcyhzdWl0ZXM6IFN1aXRlW10pIHtcbiAgZm9yIChjb25zdCBzdWl0ZSBvZiBzdWl0ZXMpXG4gICAgYXdhaXQgcnVuU3VpdGUoc3VpdGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydFRlc3RzKHBhdGhzOiBzdHJpbmdbXSwgY29uZmlnOiBSZXNvbHZlZENvbmZpZykge1xuICBjb25zdCBmaWxlcyA9IGF3YWl0IGNvbGxlY3RUZXN0cyhwYXRocywgY29uZmlnKVxuXG4gIHJwYygpLm9uQ29sbGVjdGVkKGZpbGVzKVxuXG4gIGxldCBzZXNzaW9uITogaW5zcGVjdG9yLlNlc3Npb25cbiAgaWYgKGNvbmZpZy5jb3ZlcmFnZS5lbmFibGVkKSB7XG4gICAgc2Vzc2lvbiA9IG5ldyBpbnNwZWN0b3IuU2Vzc2lvbigpXG4gICAgc2Vzc2lvbi5jb25uZWN0KClcblxuICAgIHNlc3Npb24ucG9zdCgnUHJvZmlsZXIuZW5hYmxlJylcbiAgICBzZXNzaW9uLnBvc3QoJ1Byb2ZpbGVyLnN0YXJ0UHJlY2lzZUNvdmVyYWdlJywgeyBkZXRhaWxlZDogdHJ1ZSB9KVxuICB9XG5cbiAgYXdhaXQgcnVuU3VpdGVzKGZpbGVzKVxuXG4gIGlmIChjb25maWcuY292ZXJhZ2UuZW5hYmxlZCkge1xuICAgIHNlc3Npb24ucG9zdCgnUHJvZmlsZXIudGFrZVByZWNpc2VDb3ZlcmFnZScsIChfLCBjb3ZlcmFnZSkgPT4ge1xuICAgICAgcnBjKCkuY292ZXJhZ2VDb2xsZWN0ZWQoY292ZXJhZ2UpXG4gICAgfSlcblxuICAgIHNlc3Npb24uZGlzY29ubmVjdCgpXG4gIH1cblxuICBhd2FpdCBnZXRTbmFwc2hvdENsaWVudCgpLnNhdmVTbmFwKClcblxuICBhd2FpdCBzZW5kVGFza3NVcGRhdGUoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJNb2R1bGVNb2NrcygpIHtcbiAgY29uc3QgeyBjbGVhck1vY2tzLCBtb2NrUmVzZXQsIHJlc3RvcmVNb2NrcyB9ID0gcHJvY2Vzcy5fX3ZpdGVzdF93b3JrZXJfXy5jb25maWdcblxuICAvLyBzaW5jZSBlYWNoIGZ1bmN0aW9uIGNhbGxzIGFub3RoZXIsIHdlIGNhbiBqdXN0IGNhbGwgb25lXG4gIGlmIChyZXN0b3JlTW9ja3MpXG4gICAgdmkucmVzdG9yZUFsbE1vY2tzKClcbiAgZWxzZSBpZiAobW9ja1Jlc2V0KVxuICAgIHZpLnJlc2V0QWxsTW9ja3MoKVxuICBlbHNlIGlmIChjbGVhck1vY2tzKVxuICAgIHZpLmNsZWFyQWxsTW9ja3MoKVxufVxuIiwiaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdmcydcbmltcG9ydCB0eXBlIHsgQnVpbHRpbkVudmlyb25tZW50LCBSZXNvbHZlZENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgc2V0dXBHbG9iYWxFbnYsIHdpdGhFbnYgfSBmcm9tICcuL3NldHVwJ1xuaW1wb3J0IHsgc3RhcnRUZXN0cyB9IGZyb20gJy4vcnVuJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuKGZpbGVzOiBzdHJpbmdbXSwgY29uZmlnOiBSZXNvbHZlZENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzZXR1cEdsb2JhbEVudihjb25maWcpXG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgY29uc3QgY29kZSA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGUsICd1dGYtOCcpXG5cbiAgICBjb25zdCBlbnYgPSBjb2RlLm1hdGNoKC9AKD86dml0ZXN0fGplc3QpLWVudmlyb25tZW50XFxzKz8oW1xcdy1dKylcXGIvKT8uWzFdIHx8IGNvbmZpZy5lbnZpcm9ubWVudCB8fCAnbm9kZSdcblxuICAgIGlmICghWydub2RlJywgJ2pzZG9tJywgJ2hhcHB5LWRvbSddLmluY2x1ZGVzKGVudikpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGVudmlyb25tZW50OiAke2Vudn1gKVxuXG4gICAgcHJvY2Vzcy5fX3ZpdGVzdF93b3JrZXJfXy5maWxlcGF0aCA9IGZpbGVcblxuICAgIGF3YWl0IHdpdGhFbnYoZW52IGFzIEJ1aWx0aW5FbnZpcm9ubWVudCwgY29uZmlnLmVudmlyb25tZW50T3B0aW9ucyB8fCB7fSwgYXN5bmMoKSA9PiB7XG4gICAgICBhd2FpdCBzdGFydFRlc3RzKFtmaWxlXSwgY29uZmlnKVxuICAgIH0pXG5cbiAgICBwcm9jZXNzLl9fdml0ZXN0X3dvcmtlcl9fLmZpbGVwYXRoID0gdW5kZWZpbmVkXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJfX2RlZlByb3AiLCJfX2dldE93blByb3BTeW1ib2xzIiwiX19oYXNPd25Qcm9wIiwiX19wcm9wSXNFbnVtIiwiX19kZWZOb3JtYWxQcm9wIiwiX19zcHJlYWRWYWx1ZXMiLCJyZXF1aXJlIiwidGhpcyIsIm5hdHVyYWxDb21wYXJlTW9kdWxlIiwicHJldHR5Rm9ybWF0IiwicGF0aCIsIm5hdHVyYWxDb21wYXJlIiwiZnNwIiwiZnMiLCJBc3ltbWV0cmljTWF0Y2hlciIsInByZXR0eUZvcm1hdFBsdWdpbnMiLCJjaGFpIiwicGVyZm9ybWFuY2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLFdBQWU7QUFDZixFQUFFLElBQUksRUFBRSxNQUFNO0FBQ2QsRUFBRSxNQUFNLEtBQUssR0FBRztBQUNoQixJQUFJLE9BQU87QUFDWCxNQUFNLFFBQVEsR0FBRztBQUNqQixPQUFPO0FBQ1AsS0FBSyxDQUFDO0FBQ04sR0FBRztBQUNILENBQUM7O0FDUkQsTUFBTSxXQUFXLEdBQUc7QUFDcEIsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsS0FBSztBQUNQLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsYUFBYTtBQUNmLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLGtCQUFrQjtBQUNwQixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLFVBQVU7QUFDWixFQUFFLGFBQWE7QUFDZixFQUFFLGVBQWU7QUFDakIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsU0FBUztBQUNYLEVBQUUsY0FBYztBQUNoQixFQUFFLFVBQVU7QUFDWixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLHVCQUF1QjtBQUN6QixFQUFFLGNBQWM7QUFDaEIsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsYUFBYTtBQUNmLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsZUFBZTtBQUNqQixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLGVBQWU7QUFDakIsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxtQkFBbUI7QUFDckIsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUseUJBQXlCO0FBQzNCLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUseUJBQXlCO0FBQzNCLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsWUFBWTtBQUNkLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsZUFBZTtBQUNqQixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLFdBQVc7QUFDYixFQUFFLGVBQWU7QUFDakIsRUFBRSxPQUFPO0FBQ1QsRUFBRSxZQUFZO0FBQ2QsRUFBRSxhQUFhO0FBQ2YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsWUFBWTtBQUNkLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsZUFBZTtBQUNqQixFQUFFLGNBQWM7QUFDaEIsRUFBRSxlQUFlO0FBQ2pCLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsU0FBUztBQUNYLEVBQUUsWUFBWTtBQUNkLEVBQUUsWUFBWTtBQUNkLEVBQUUsWUFBWTtBQUNkLEVBQUUsZUFBZTtBQUNqQixFQUFFLFlBQVk7QUFDZCxFQUFFLGtCQUFrQjtBQUNwQixFQUFFLFlBQVk7QUFDZCxFQUFFLFNBQVM7QUFDWCxFQUFFLFVBQVU7QUFDWixFQUFFLFVBQVU7QUFDWixFQUFFLFNBQVM7QUFDWCxFQUFFLFFBQVE7QUFDVixFQUFFLGFBQWE7QUFDZixFQUFFLFdBQVc7QUFDYixFQUFFLGFBQWE7QUFDZixFQUFFLGVBQWU7QUFDakIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxVQUFVO0FBQ1osRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxlQUFlO0FBQ2pCLEVBQUUsV0FBVztBQUNiLEVBQUUsZUFBZTtBQUNqQixFQUFFLFVBQVU7QUFDWixFQUFFLDJCQUEyQjtBQUM3QixFQUFFLHNCQUFzQjtBQUN4QixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLFdBQVc7QUFDYixFQUFFLFlBQVk7QUFDZCxFQUFFLGNBQWM7QUFDaEIsRUFBRSxZQUFZO0FBQ2QsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsT0FBTztBQUNULEVBQUUsYUFBYTtBQUNmLEVBQUUsV0FBVztBQUNiLEVBQUUsU0FBUztBQUNYLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsWUFBWTtBQUNkLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsU0FBUztBQUNYLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsYUFBYTtBQUNmLEVBQUUsT0FBTztBQUNULENBQUMsQ0FBQztBQUNGLE1BQU0sVUFBVSxHQUFHO0FBQ25CLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsU0FBUztBQUNYLEVBQUUsYUFBYTtBQUNmLEVBQUUsZUFBZTtBQUNqQixFQUFFLFVBQVU7QUFDWixFQUFFLE9BQU87QUFDVCxFQUFFLFFBQVE7QUFDVixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLFNBQVM7QUFDWCxFQUFFLGFBQWE7QUFDZixFQUFFLFlBQVk7QUFDZCxFQUFFLFFBQVE7QUFDVixFQUFFLFVBQVU7QUFDWixFQUFFLFlBQVk7QUFDZCxFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLFlBQVk7QUFDZCxFQUFFLGFBQWE7QUFDZixFQUFFLGFBQWE7QUFDZixFQUFFLFFBQVE7QUFDVixFQUFFLGFBQWE7QUFDZixFQUFFLE9BQU87QUFDVCxFQUFFLFFBQVE7QUFDVixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLFVBQVU7QUFDWixFQUFFLFVBQVU7QUFDWixFQUFFLFFBQVE7QUFDVixFQUFFLFlBQVk7QUFDZCxFQUFFLFdBQVc7QUFDYixFQUFFLFNBQVM7QUFDWCxFQUFFLFNBQVM7QUFDWCxFQUFFLFFBQVE7QUFDVixFQUFFLFVBQVU7QUFDWixFQUFFLFlBQVk7QUFDZCxFQUFFLFVBQVU7QUFDWixFQUFFLFdBQVc7QUFDYixFQUFFLFNBQVM7QUFDWCxFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLFFBQVE7QUFDVixDQUFDLENBQUM7QUFDSyxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQzs7QUN0TmxELElBQUlBLFdBQVMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO0FBQ3RDLElBQUlDLHFCQUFtQixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztBQUN2RCxJQUFJQyxjQUFZLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7QUFDbkQsSUFBSUMsY0FBWSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUM7QUFDekQsSUFBSUMsaUJBQWUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUdKLFdBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2hLLElBQUlLLGdCQUFjLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLO0FBQy9CLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxJQUFJLElBQUlILGNBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUNsQyxNQUFNRSxpQkFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDeEMsRUFBRSxJQUFJSCxxQkFBbUI7QUFDekIsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJQSxxQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM3QyxNQUFNLElBQUlFLGNBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUNwQyxRQUFRQyxpQkFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUMsS0FBSztBQUNMLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDLENBQUM7QUFDRixJQUFJLFNBQVMsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLEtBQUs7QUFDckMsRUFBRSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLE1BQU07QUFDekIsSUFBSSxJQUFJRixjQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDcEUsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xDLEVBQUUsSUFBSSxNQUFNLElBQUksSUFBSSxJQUFJRCxxQkFBbUI7QUFDM0MsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJQSxxQkFBbUIsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNsRCxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUlFLGNBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztBQUN0RSxRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEMsS0FBSztBQUNMLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBR0YsWUFBZTtBQUNmLEVBQUUsSUFBSSxFQUFFLE9BQU87QUFDZixFQUFFLE1BQU0sS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsRUFBRTtBQUN0QyxJQUFJLE1BQU07QUFDVixNQUFNLFNBQVM7QUFDZixNQUFNLEtBQUs7QUFDWCxNQUFNLGNBQWM7QUFDcEIsTUFBTSxjQUFjO0FBQ3BCLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNwQyxJQUFJLE1BQU0sRUFBRSxHQUFHLEtBQUssRUFBRTtBQUN0QixNQUFNLElBQUksR0FBRyxpQkFBaUI7QUFDOUIsTUFBTSxTQUFTO0FBQ2YsTUFBTSxHQUFHLEdBQUcsdUJBQXVCO0FBQ25DLE1BQU0sV0FBVyxHQUFHLFdBQVc7QUFDL0IsTUFBTSxpQkFBaUIsR0FBRyxJQUFJO0FBQzlCLE1BQU0sb0JBQW9CLEdBQUcsS0FBSztBQUNsQyxNQUFNLFVBQVUsR0FBRyxhQUFhO0FBQ2hDLE1BQU0sU0FBUztBQUNmLE1BQU0sT0FBTyxHQUFHLEtBQUs7QUFDckIsTUFBTSxTQUFTLEdBQUcsS0FBSztBQUN2QixLQUFLLEdBQUcsRUFBRSxFQUFFLFdBQVcsR0FBRyxTQUFTLENBQUMsRUFBRSxFQUFFO0FBQ3hDLE1BQU0sTUFBTTtBQUNaLE1BQU0sV0FBVztBQUNqQixNQUFNLEtBQUs7QUFDWCxNQUFNLGFBQWE7QUFDbkIsTUFBTSxtQkFBbUI7QUFDekIsTUFBTSxzQkFBc0I7QUFDNUIsTUFBTSxZQUFZO0FBQ2xCLE1BQU0sV0FBVztBQUNqQixNQUFNLFNBQVM7QUFDZixNQUFNLFdBQVc7QUFDakIsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksRUFBRUUsZ0JBQWMsQ0FBQztBQUMvQyxNQUFNLGlCQUFpQjtBQUN2QixNQUFNLFNBQVMsRUFBRSxTQUFTLEtBQUssU0FBUyxHQUFHLElBQUksY0FBYyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUN0RixNQUFNLFVBQVU7QUFDaEIsTUFBTSxHQUFHO0FBQ1QsTUFBTSxjQUFjLEVBQUUsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUN0RyxNQUFNLFNBQVMsRUFBRSxTQUFTLEdBQUcsSUFBSSxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDckQsTUFBTSxvQkFBb0I7QUFDMUIsTUFBTSxXQUFXO0FBQ2pCLE1BQU0sU0FBUztBQUNmLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEksSUFBSSxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLElBQUksS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7QUFDNUIsTUFBTSxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7QUFDekMsUUFBUSxHQUFHLEdBQUc7QUFDZCxVQUFVLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDckMsWUFBWSxPQUFPLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0MsVUFBVSxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakMsU0FBUztBQUNULFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUNmLFVBQVUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckMsU0FBUztBQUNULFFBQVEsWUFBWSxFQUFFLElBQUk7QUFDMUIsT0FBTyxDQUFDLENBQUM7QUFDVCxLQUFLO0FBQ0wsSUFBSSxPQUFPO0FBQ1gsTUFBTSxRQUFRLENBQUMsT0FBTyxFQUFFO0FBQ3hCLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25ELE9BQU87QUFDUCxLQUFLLENBQUM7QUFDTixHQUFHO0FBQ0gsQ0FBQzs7QUM1RkQsWUFBZTtBQUNmLEVBQUUsSUFBSSxFQUFFLFdBQVc7QUFDbkIsRUFBRSxNQUFNLEtBQUssQ0FBQyxNQUFNLEVBQUU7QUFDdEIsSUFBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDdkQsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQzdCLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzSCxJQUFJLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDckMsSUFBSSxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtBQUM1QixNQUFNLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtBQUN6QyxRQUFRLEdBQUcsR0FBRztBQUNkLFVBQVUsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUNyQyxZQUFZLE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQyxVQUFVLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFNBQVM7QUFDVCxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDZixVQUFVLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFNBQVM7QUFDVCxRQUFRLFlBQVksRUFBRSxJQUFJO0FBQzFCLE9BQU8sQ0FBQyxDQUFDO0FBQ1QsS0FBSztBQUNMLElBQUksT0FBTztBQUNYLE1BQU0sUUFBUSxDQUFDLE9BQU8sRUFBRTtBQUN4QixRQUFRLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFLLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkQsT0FBTztBQUNQLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSCxDQUFDOztBQzFCTSxNQUFNLFlBQVksR0FBRztBQUM1QixFQUFFLElBQUk7QUFDTixFQUFFLEtBQUs7QUFDUCxFQUFFLFdBQVcsRUFBRSxLQUFLO0FBQ3BCLENBQUM7Ozs7O0FDUEQsQ0FBQyxXQUFXO0FBQ1osQ0FBQyxDQUFDLFNBQVMsVUFBVSxFQUFFO0FBQ3ZCLEVBQUUsSUFBSSxPQUFPQyxlQUFPLEtBQUssVUFBVSxJQUFJLFFBQWMsS0FBSyxRQUFRLElBQUksUUFBYSxLQUFLLFFBQVEsRUFBRTtBQUNsRyxHQUFHLE9BQU8saUJBQWlCLFVBQVUsQ0FBQztBQUN0QyxHQUFHLE1BSU07QUFDVCxHQUFHLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMvQixHQUFHO0FBQ0gsRUFBRSxFQUFFLFNBQVMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUMxQixFQUFFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDakMsRUFBRSxJQUFJLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7QUFDL0M7QUFDQSxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLFVBQVUsUUFBUSxFQUFFO0FBQzNELEdBQUcsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDM0MsR0FBRyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUN2QztBQUNBLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJO0FBQ3RDLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7QUFDN0IsSUFBSSwwQ0FBMEM7QUFDOUMsSUFBSSw4Q0FBOEM7QUFDbEQsSUFBSSxRQUFRO0FBQ1osSUFBSSxNQUFNO0FBQ1YsSUFBSSxRQUFRO0FBQ1osSUFBSSxDQUFDO0FBQ0wsR0FBRyxDQUFDLENBQUM7QUFDTDtBQUNBLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUN0RCxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekQsR0FBRyxDQUFDO0FBQ0o7QUFDQSxFQUFFLFNBQVMsT0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUU7QUFDckMsR0FBRyxJQUFJLFFBQVEsS0FBSyxNQUFNLEVBQUU7QUFDNUIsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixJQUFJO0FBQ0osR0FBRyxJQUFJLE9BQU8sTUFBTSxDQUFDLEtBQUssT0FBTyxRQUFRLENBQUMsRUFBRTtBQUM1QyxJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLElBQUk7QUFDSixHQUFHLElBQUksT0FBTyxRQUFRLENBQUMsS0FBSyxRQUFRLElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtBQUMzRCxJQUFJLE9BQU8sUUFBUSxLQUFLLE1BQU0sQ0FBQztBQUMvQixJQUFJO0FBQ0osR0FBRyxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDOUIsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixJQUFJO0FBQ0o7QUFDQSxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUNoQyxJQUFJLElBQUksT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQzVDLEtBQUssT0FBTyxLQUFLLENBQUM7QUFDbEIsS0FBSztBQUNMLElBQUksSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hELElBQUksT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFO0FBQ3pDLEtBQUssT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFO0FBQ25DLE1BQU0sT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sQ0FBQyxDQUFDO0FBQ1IsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJO0FBQ0o7QUFDQSxHQUFHLElBQUksUUFBUSxZQUFZLElBQUksRUFBRTtBQUNqQyxJQUFJLElBQUksTUFBTSxZQUFZLElBQUksRUFBRTtBQUNoQyxLQUFLLE9BQU8sUUFBUSxDQUFDLE9BQU8sRUFBRSxLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNwRCxLQUFLLE1BQU07QUFDWCxLQUFLLE9BQU8sS0FBSyxDQUFDO0FBQ2xCLEtBQUs7QUFDTCxJQUFJO0FBQ0o7QUFDQSxHQUFHLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUU7QUFDckQsSUFBSSxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsSUFBSSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekIsSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDLEtBQUssUUFBUSxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtBQUMvRCxLQUFLLE9BQU8sT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QixLQUFLO0FBQ0wsSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ25DLEtBQUssT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkIsS0FBSztBQUNMLElBQUksT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3JCLElBQUksQ0FBQyxDQUFDO0FBQ04sR0FBRztBQUNILEVBQUUsQ0FBQyxDQUFDO0FBQ0o7QUFDQSxDQUFDLEVBQUUsSUFBSSxDQUFDQyxjQUFJLENBQUM7Ozs7Ozs7QUM5RWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxjQUFjLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3BDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSztBQUNiLEdBQUcsS0FBSyxHQUFHLENBQUM7QUFDWixHQUFHLElBQUksR0FBRyxDQUFDO0FBQ1gsR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUNYLEdBQUcsUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFRO0FBQzdCO0FBQ0EsQ0FBQyxTQUFTLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtBQUNsQyxFQUFFLElBQUksSUFBSSxFQUFFO0FBQ1osR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEMsR0FBRztBQUNILEVBQUUsSUFBSSxHQUFHLFFBQVEsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUM7QUFDdEQsRUFBRSxPQUFPLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsR0FBRyxJQUFJLElBQUk7QUFDcEcsS0FBSyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDbkIsS0FBSyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3pCLEtBQUssSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRTtBQUMxQixLQUFLLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUU7QUFDMUIsS0FBSyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFO0FBQzFCLEtBQUssSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRTtBQUMxQixLQUFLLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDMUIsS0FBSyxJQUFJLEdBQUcsRUFBRTtBQUNkLEVBQUU7QUFDRjtBQUNBO0FBQ0EsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLEdBQUc7QUFDdkMsRUFBRSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBQztBQUM1QixFQUFFLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFDO0FBQzVCO0FBQ0EsRUFBRSxJQUFJLEtBQUssR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLEVBQUUsSUFBSSxLQUFLLEdBQUcsRUFBRSxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUU7QUFDNUQsR0FBRyxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFDO0FBQ2pDLEdBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUM7QUFDckMsR0FBRyxJQUFJLEdBQUcsRUFBQztBQUNYLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxLQUFLLElBQUksS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDckQsRUFBRTtBQUNGLENBQUMsT0FBTyxDQUFDO0FBQ1QsRUFBQztBQUNEO0FBQ0EsSUFBSTtBQUNKLENBQUNDLHdCQUFjLEdBQUcsY0FBYyxDQUFDO0FBQ2pDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNaLENBQUMsTUFBTSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDeEM7Ozs7QUN4REEsSUFBSVIsV0FBUyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUM7QUFDdEMsSUFBSUMscUJBQW1CLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDO0FBQ3ZELElBQUlDLGNBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztBQUNuRCxJQUFJQyxjQUFZLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQztBQUN6RCxJQUFJQyxpQkFBZSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBR0osV0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDaEssSUFBSUssZ0JBQWMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUs7QUFDL0IsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLElBQUksSUFBSUgsY0FBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQ2xDLE1BQU1FLGlCQUFlLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN4QyxFQUFFLElBQUlILHFCQUFtQjtBQUN6QixJQUFJLEtBQUssSUFBSSxJQUFJLElBQUlBLHFCQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzdDLE1BQU0sSUFBSUUsY0FBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQ3BDLFFBQVFDLGlCQUFlLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxQyxLQUFLO0FBQ0wsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUMsQ0FBQztBQVNLLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO0FBQ3BDLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztBQUN0RSxNQUFNLGFBQWEsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsRSxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsS0FBSztBQUN0QyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN4QixJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztBQUM3RCxFQUFFLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbEMsQ0FBQyxDQUFDO0FBQ0ssTUFBTSxlQUFlLEdBQUcsQ0FBQyxZQUFZLEVBQUUsTUFBTSxLQUFLO0FBQ3pELEVBQUUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQyxFQUFFLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBQzVCLEVBQUUsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3BCLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFO0FBQ25DLElBQUksSUFBSTtBQUNSLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0QsTUFBTSxNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUNqRSxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQixLQUFLLENBQUMsTUFBTTtBQUNaLEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQztBQUNyQyxFQUFFLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLE1BQU0sS0FBSyxLQUFLLEtBQUssU0FBUztBQUN6RCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3pCLENBQUMsQ0FBQztBQUNLLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3ZFLEVBQUUsTUFBTSxDQUFDO0FBQ1QsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNKLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RKLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztBQUN6QixNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQztBQUN6QixTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxlQUFlLEdBQUcsRUFBRSxFQUFFO0FBQ2pFLEVBQUUsT0FBTyxpQkFBaUIsQ0FBQ0ssUUFBWSxDQUFDLEdBQUcsRUFBRUosZ0JBQWMsQ0FBQztBQUM1RCxJQUFJLFdBQVc7QUFDZixJQUFJLE1BQU07QUFDVixJQUFJLE9BQU8sRUFBRSxjQUFjLEVBQUU7QUFDN0IsSUFBSSxpQkFBaUI7QUFDckIsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixDQUFDO0FBWU0sU0FBUyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUU7QUFDMUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFDRCxTQUFTLG1CQUFtQixDQUFDLEdBQUcsRUFBRTtBQUNsQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQUNNLFNBQVMscUJBQXFCLENBQUMsUUFBUSxFQUFFO0FBQ2hELEVBQUUsSUFBSTtBQUNOLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQ0ssS0FBSSxDQUFDLElBQUksQ0FBQ0EsS0FBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDekUsR0FBRyxDQUFDLE1BQU07QUFDVixHQUFHO0FBQ0gsQ0FBQztBQUNELFNBQVMsaUJBQWlCLENBQUMsTUFBTSxFQUFFO0FBQ25DLEVBQUUsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBQ00sZUFBZSxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFO0FBQ25FLEVBQUUsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUNDLGdCQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4TCxFQUFFLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3RDLEVBQUUsTUFBTUMsUUFBRyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLG9CQUFvQixFQUFFLENBQUM7QUFDOUQ7QUFDQSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekIsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ1osQ0FBQztBQUNNLFNBQVMsZUFBZSxDQUFDLFFBQVEsRUFBRTtBQUMxQyxFQUFFLFNBQVMsZUFBZSxHQUFHO0FBQzdCLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxJQUFJLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztBQUN4RixHQUFHO0FBQ0gsRUFBRSxNQUFNLFVBQVUsR0FBRyxlQUFlLEVBQUUsQ0FBQztBQUN2QyxFQUFFLElBQUksZUFBZSxHQUFHLFFBQVEsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BFLEVBQUUsSUFBSSxVQUFVLEVBQUU7QUFDbEIsSUFBSSxlQUFlLEdBQUcsZUFBZSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUosR0FBRztBQUNILEVBQUUsT0FBTyxlQUFlLENBQUM7QUFDekIsQ0FBQztBQUNELFNBQVMsY0FBYyxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRTtBQUNsRCxFQUFFLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxFQUFFLEtBQUssS0FBSztBQUMzQyxJQUFJLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QyxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUN0QyxNQUFNLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQ3pFLEtBQUssTUFBTSxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRTtBQUN4QyxNQUFNLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDNUUsS0FBSyxNQUFNO0FBQ1gsTUFBTSxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsYUFBYSxDQUFDO0FBQzFDLEtBQUs7QUFDTCxHQUFHLENBQUMsQ0FBQztBQUNMLEVBQUUsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQUNNLFNBQVMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRTtBQUNsRCxFQUFFLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUM1QyxJQUFJLE1BQU0sWUFBWSxHQUFHUCxnQkFBYyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNwRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFLO0FBQ3pDLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFO0FBQzFELFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUM7QUFDNUIsVUFBVSxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUQ7QUFDQSxVQUFVLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUUsT0FBTyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUM3QyxRQUFRLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLE9BQU8sTUFBTTtBQUNiLFFBQVEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVELE9BQU87QUFDUCxLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksT0FBTyxZQUFZLENBQUM7QUFDeEIsR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQzdELElBQUksT0FBTyxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzFDLEdBQUc7QUFDSCxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQ2hCOztBQzVJTyxlQUFlLG1CQUFtQixDQUFDLFNBQVMsRUFBRTtBQUNyRCxFQUFFLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxPQUFPLCtCQUFjLENBQUMsRUFBRSxPQUFPLENBQUM7QUFDN0QsRUFBRSxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RELEVBQUUsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxLQUFLO0FBQzFELElBQUksTUFBTSxHQUFHLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsSUFBSSxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDM0QsSUFBSSxNQUFNLElBQUksR0FBRyxNQUFNUSxRQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNqRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BDLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7QUFDOUIsTUFBTSxNQUFNLEdBQUcsR0FBRyxNQUFNLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbEQsTUFBTSxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLE1BQU0saUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZELEtBQUs7QUFDTCxJQUFJLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNyQyxJQUFJLElBQUksV0FBVyxLQUFLLElBQUk7QUFDNUIsTUFBTSxNQUFNQSxRQUFFLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckQsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNOLENBQUM7QUFDRCxNQUFNLGdCQUFnQixHQUFHLDBFQUEwRSxDQUFDO0FBQ3BHLFNBQVMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3BELEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0IsRUFBRSxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakQsRUFBRSxJQUFJLENBQUMsVUFBVTtBQUNqQixJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLEVBQUUsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsRUFBRSxJQUFJLFNBQVMsS0FBSyxJQUFJO0FBQ3hCLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JHLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBQ0QsU0FBUyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUNoRCxFQUFFLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3BELEVBQUUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEQsRUFBRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QyxFQUFFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLEVBQUUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzlHLEVBQUUsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDdEMsRUFBRSxNQUFNLEtBQUssR0FBRyxTQUFTLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN0QyxFQUFFLE9BQU8sU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQzdFLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkUsRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ25CLENBQUM7QUFDRCxNQUFNLFVBQVUsR0FBRyxnRkFBZ0YsQ0FBQztBQUM3RixTQUFTLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxFQUFFLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3hELEVBQUUsSUFBSSxDQUFDLFVBQVU7QUFDakIsSUFBSSxPQUFPLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3RELEVBQUUsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLEVBQUUsTUFBTSxVQUFVLEdBQUcsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNyRSxFQUFFLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0QsRUFBRSxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUU7QUFDckIsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0gsRUFBRSxNQUFNLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekQsRUFBRSxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUMzRCxFQUFFLElBQUksQ0FBQyxRQUFRO0FBQ2YsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixFQUFFLE1BQU0sUUFBUSxHQUFHLFVBQVUsR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDcEUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BELEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBQ0QsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztBQUNwQyxTQUFTLHdCQUF3QixDQUFDLGNBQWMsRUFBRTtBQUN6RCxFQUFFLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUN4RCxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDM0IsSUFBSSxPQUFPLGNBQWMsQ0FBQztBQUMxQixHQUFHO0FBQ0gsRUFBRSxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsRUFBRSxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVDLEVBQUUsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtBQUN6QixJQUFJLE9BQU8sY0FBYyxDQUFDO0FBQzFCLEdBQUc7QUFDSCxFQUFFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDdkUsSUFBSSxPQUFPLGNBQWMsQ0FBQztBQUMxQixHQUFHO0FBQ0gsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7QUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQy9DLFFBQVEsT0FBTyxjQUFjLENBQUM7QUFDOUIsT0FBTztBQUNQLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hELEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0IsRUFBRSxjQUFjLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQyxFQUFFLE9BQU8sY0FBYyxDQUFDO0FBQ3hCOztBQzVGQSxJQUFJYixXQUFTLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztBQUN0QyxJQUFJQyxxQkFBbUIsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUM7QUFDdkQsSUFBSUMsY0FBWSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDO0FBQ25ELElBQUlDLGNBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDO0FBQ3pELElBQUlDLGlCQUFlLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHSixXQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNoSyxJQUFJSyxnQkFBYyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSztBQUMvQixFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEMsSUFBSSxJQUFJSCxjQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDbEMsTUFBTUUsaUJBQWUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLEVBQUUsSUFBSUgscUJBQW1CO0FBQ3pCLElBQUksS0FBSyxJQUFJLElBQUksSUFBSUEscUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDN0MsTUFBTSxJQUFJRSxjQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDcEMsUUFBUUMsaUJBQWUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFDLEtBQUs7QUFDTCxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQyxDQUFDO0FBZWEsTUFBTSxhQUFhLENBQUM7QUFDbkMsRUFBRSxXQUFXLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRTtBQUNyQyxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO0FBQ3RDLElBQUksTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDeEYsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUM3QixJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQzlCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBQy9CLElBQUksSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ25FLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQy9CLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUMxQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUN2QixJQUFJLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUNsRCxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLGVBQWUsR0FBR0MsZ0JBQWMsQ0FBQztBQUMxQyxNQUFNLG1CQUFtQixFQUFFLEtBQUs7QUFDaEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUMvQixHQUFHO0FBQ0gsRUFBRSw2QkFBNkIsQ0FBQyxRQUFRLEVBQUU7QUFDMUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksS0FBSztBQUNsRCxNQUFNLElBQUksYUFBYSxDQUFDLFlBQVksQ0FBQyxLQUFLLFFBQVE7QUFDbEQsUUFBUSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNqRCxLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSCxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFFO0FBQ2pELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdkIsSUFBSSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7QUFDMUIsTUFBTSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ2hFLE1BQU0sTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsRCxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEQsTUFBTSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQztBQUNsRyxNQUFNLE1BQU0sS0FBSyxHQUFHLFVBQVUsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN0RSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDbEIsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLENBQUM7QUFDekIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLE9BQU87QUFDUCxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUNBLGdCQUFjLENBQUM7QUFDaEQsUUFBUSxRQUFRLEVBQUUsa0JBQWtCO0FBQ3BDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztBQUNuRCxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsS0FBSyxHQUFHO0FBQ1YsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDM0MsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDL0IsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNuQixJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDdkIsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNyQixHQUFHO0FBQ0gsRUFBRSxNQUFNLElBQUksR0FBRztBQUNmLElBQUksTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDeEUsSUFBSSxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7QUFDNUQsSUFBSSxNQUFNLE9BQU8sR0FBRyxDQUFDLG9CQUFvQixJQUFJLENBQUMsa0JBQWtCLENBQUM7QUFDakUsSUFBSSxNQUFNLE1BQU0sR0FBRztBQUNuQixNQUFNLE9BQU8sRUFBRSxLQUFLO0FBQ3BCLE1BQU0sS0FBSyxFQUFFLEtBQUs7QUFDbEIsS0FBSyxDQUFDO0FBQ04sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtBQUMvRCxNQUFNLElBQUksb0JBQW9CO0FBQzlCLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN2RSxNQUFNLElBQUksa0JBQWtCO0FBQzVCLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUN6RCxNQUFNLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzFCLEtBQUssTUFBTSxJQUFJLENBQUMsb0JBQW9CLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUU7QUFDM0UsTUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssS0FBSztBQUN4QyxRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzFDLE1BQU0sTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDNUIsS0FBSztBQUNMLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsR0FBRztBQUNILEVBQUUsaUJBQWlCLEdBQUc7QUFDdEIsSUFBSSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUN6QyxHQUFHO0FBQ0gsRUFBRSxnQkFBZ0IsR0FBRztBQUNyQixJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDM0MsR0FBRztBQUNILEVBQUUsbUJBQW1CLEdBQUc7QUFDeEIsSUFBSSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFO0FBQ3BFLE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDekIsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRSxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEMsS0FBSztBQUNMLEdBQUc7QUFDSCxFQUFFLEtBQUssQ0FBQztBQUNSLElBQUksUUFBUTtBQUNaLElBQUksUUFBUTtBQUNaLElBQUksR0FBRztBQUNQLElBQUksY0FBYztBQUNsQixJQUFJLFFBQVE7QUFDWixJQUFJLEtBQUs7QUFDVCxHQUFHLEVBQUU7QUFDTCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxRSxJQUFJLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWixNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNDLElBQUksSUFBSSxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3pELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsSUFBSSxNQUFNLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7QUFDckcsSUFBSSxNQUFNLFFBQVEsR0FBRyxRQUFRLEdBQUcsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekUsSUFBSSxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdEQsSUFBSSxNQUFNLElBQUksR0FBRyxlQUFlLE1BQU0sa0JBQWtCLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7QUFDdkcsSUFBSSxNQUFNLFdBQVcsR0FBRyxRQUFRLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDNUMsSUFBSSxNQUFNLG1CQUFtQixHQUFHLFFBQVEsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM5RSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQzNCLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztBQUNuRCxLQUFLO0FBQ0wsSUFBSSxJQUFJLFdBQVcsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsbUJBQW1CLE1BQU0sSUFBSSxDQUFDLGVBQWUsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxLQUFLLENBQUMsRUFBRTtBQUN2SyxNQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxLQUFLLEVBQUU7QUFDMUMsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ25CLFVBQVUsSUFBSSxXQUFXO0FBQ3pCLFlBQVksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzNCO0FBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDekIsVUFBVSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQzFFLFNBQVMsTUFBTTtBQUNmLFVBQVUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3pCLFNBQVM7QUFDVCxPQUFPLE1BQU07QUFDYixRQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLGtCQUFrQixFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDeEUsUUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckIsT0FBTztBQUNQLE1BQU0sT0FBTztBQUNiLFFBQVEsTUFBTSxFQUFFLEVBQUU7QUFDbEIsUUFBUSxLQUFLO0FBQ2IsUUFBUSxRQUFRLEVBQUUsRUFBRTtBQUNwQixRQUFRLEdBQUc7QUFDWCxRQUFRLElBQUksRUFBRSxJQUFJO0FBQ2xCLE9BQU8sQ0FBQztBQUNSLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRTtBQUNqQixRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QixRQUFRLE9BQU87QUFDZixVQUFVLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQztBQUMzRCxVQUFVLEtBQUs7QUFDZixVQUFVLFFBQVEsRUFBRSxlQUFlLEtBQUssS0FBSyxDQUFDLEdBQUcscUJBQXFCLENBQUMsZUFBZSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2hHLFVBQVUsR0FBRztBQUNiLFVBQVUsSUFBSSxFQUFFLEtBQUs7QUFDckIsU0FBUyxDQUFDO0FBQ1YsT0FBTyxNQUFNO0FBQ2IsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDdkIsUUFBUSxPQUFPO0FBQ2YsVUFBVSxNQUFNLEVBQUUsRUFBRTtBQUNwQixVQUFVLEtBQUs7QUFDZixVQUFVLFFBQVEsRUFBRSxFQUFFO0FBQ3RCLFVBQVUsR0FBRztBQUNiLFVBQVUsSUFBSSxFQUFFLElBQUk7QUFDcEIsU0FBUyxDQUFDO0FBQ1YsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7O0FDakxBLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxRQUFRLEtBQUtLLEtBQUksQ0FBQyxJQUFJLENBQUNBLEtBQUksQ0FBQyxJQUFJLENBQUNBLEtBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFQSxLQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEksTUFBTSxjQUFjLENBQUM7QUFDNUIsRUFBRSxXQUFXLEdBQUc7QUFDaEIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUN2QixHQUFHO0FBQ0gsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ2hCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDckIsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ25ELE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYTtBQUM1QixRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN4QixNQUFNLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzlDLE1BQU0sSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUNuSSxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsU0FBUyxHQUFHO0FBQ2QsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3ZCLEdBQUc7QUFDSCxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsR0FBRyxLQUFLLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRTtBQUMxRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtBQUNsQixNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztBQUNqRSxJQUFJLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxFQUFFO0FBQ3hDLE1BQU0sSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksQ0FBQyxRQUFRO0FBQ25ELFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO0FBQzVGLE1BQU0sSUFBSTtBQUNWLFFBQVEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQ3ZGLFFBQVEsSUFBSSxDQUFDLEtBQUs7QUFDbEIsVUFBVSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzlDO0FBQ0EsVUFBVSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzdELE9BQU8sQ0FBQyxPQUFPLEdBQUcsRUFBRTtBQUNwQixRQUFRLEdBQUcsQ0FBQyxPQUFPLEdBQUcscUJBQXFCLENBQUM7QUFDNUMsUUFBUSxNQUFNLEdBQUcsQ0FBQztBQUNsQixPQUFPO0FBQ1AsS0FBSztBQUNMLElBQUksTUFBTSxRQUFRLEdBQUc7QUFDckIsTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNyQyxNQUFNLEdBQUcsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNqQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xCLElBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO0FBQ3JFLE1BQU0sUUFBUTtBQUNkLE1BQU0sUUFBUTtBQUNkLE1BQU0sUUFBUTtBQUNkLE1BQU0sY0FBYztBQUNwQixLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtBQUNmLE1BQU0sSUFBSTtBQUNWLFFBQVEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLE9BQU8sQ0FBQyxPQUFPLEtBQUssRUFBRTtBQUN0QixRQUFRLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN0RSxRQUFRLE1BQU0sS0FBSyxDQUFDO0FBQ3BCLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsTUFBTSxRQUFRLEdBQUc7QUFDbkIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO0FBQzdDLE1BQU0sT0FBTztBQUNiLElBQUksTUFBTSxNQUFNLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM5RSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDdkIsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLEdBQUc7QUFDSCxDQUFDO0FBQ00sZUFBZSxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFO0FBQ3pELEVBQUUsTUFBTSxRQUFRLEdBQUc7QUFDbkIsSUFBSSxRQUFRO0FBQ1osSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksV0FBVyxFQUFFLEtBQUs7QUFDdEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEIsSUFBSSxhQUFhLEVBQUUsRUFBRTtBQUNyQixJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxHQUFHLENBQUM7QUFDSixFQUFFLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0FBQ25ELEVBQUUsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7QUFDakQsRUFBRSxJQUFJLGNBQWM7QUFDcEIsSUFBSSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztBQUNoQyxFQUFFLE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BDLEVBQUUsUUFBUSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO0FBQ3hDLEVBQUUsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQy9CLEVBQUUsUUFBUSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ25DLEVBQUUsUUFBUSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO0FBQ3ZDLEVBQUUsUUFBUSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ25DLEVBQUUsUUFBUSxDQUFDLFNBQVMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsY0FBYyxHQUFHLENBQUMsQ0FBQztBQUM1RCxFQUFFLFFBQVEsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNyRCxFQUFFLE9BQU8sUUFBUSxDQUFDO0FBQ2xCOztBQzNGQSxJQUFJLE9BQU8sQ0FBQztBQUNMLFNBQVMsaUJBQWlCLEdBQUc7QUFDcEMsRUFBRSxJQUFJLENBQUMsT0FBTztBQUNkLElBQUksT0FBTyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7QUFDbkMsRUFBRSxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBQ0QsTUFBTSxjQUFjLEdBQUcsQ0FBQyxRQUFRLEtBQUs7QUFDckMsRUFBRSxJQUFJO0FBQ04sSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNkLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSztBQUMxQixNQUFNLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUN2QixJQUFJLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsR0FBRztBQUNILEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0FBQ3BELENBQUMsQ0FBQztBQUNLLE1BQU0sY0FBYyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssS0FBSztBQUMvQyxFQUFFLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsaUJBQWlCLENBQUMsRUFBRTtBQUMxRCxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsVUFBVSxFQUFFLE9BQU8sRUFBRTtBQUNqRixNQUFNLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2xELE1BQU0sSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLElBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxFQUFFO0FBQzVFLFFBQVEsT0FBTyxHQUFHLFVBQVUsQ0FBQztBQUM3QixRQUFRLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUM1QixPQUFPO0FBQ1AsTUFBTSxpQkFBaUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN2RSxLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSCxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsU0FBUywwQkFBMEIsQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRTtBQUM5SSxJQUFJLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2hELElBQUksSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUU7QUFDeEMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDO0FBQy9CLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQztBQUNsQyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUMxQixLQUFLO0FBQ0wsSUFBSSxJQUFJLGNBQWM7QUFDdEIsTUFBTSxjQUFjLEdBQUcsd0JBQXdCLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDaEUsSUFBSSxpQkFBaUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDcEYsR0FBRyxDQUFDLENBQUM7QUFDTCxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsOEJBQThCLEVBQUUsU0FBUyxPQUFPLEVBQUU7QUFDOUYsSUFBSSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNoRCxJQUFJLGlCQUFpQixFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRSxHQUFHLENBQUMsQ0FBQztBQUNMLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxvQ0FBb0MsRUFBRSxTQUFTLDBCQUEwQixDQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUU7QUFDL0ksSUFBSSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNoRCxJQUFJLGlCQUFpQixFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQ2hHLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsQ0FBQzs7QUM3Q00sTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMvQixNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzdCLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDakMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUMzQixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQy9CLE1BQU07QUFDTixxQkFBRUksbUJBQWlCO0FBQ25CLEVBQUUsYUFBYTtBQUNmLEVBQUUsVUFBVTtBQUNaLEVBQUUsU0FBUztBQUNYLEVBQUUsWUFBWTtBQUNkLEVBQUUsa0JBQWtCO0FBQ3BCLENBQUMsR0FBR0MsU0FBbUIsQ0FBQztBQUN4QixNQUFNLE9BQU8sR0FBRztBQUNoQixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLFlBQVk7QUFDZCxFQUFFLFVBQVU7QUFDWixFQUFFLGFBQWE7QUFDZixFQUFFLFNBQVM7QUFDWCxFQUFFRCxtQkFBaUI7QUFDbkIsQ0FBQyxDQUFDO0FBQ0ssU0FBUyxXQUFXLENBQUMsV0FBVyxFQUFFLFFBQVEsR0FBRyxVQUFVLEVBQUUsUUFBUSxHQUFHLFVBQVUsRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFO0FBQ3JHLEVBQUUsTUFBTTtBQUNSLElBQUksT0FBTyxHQUFHLEVBQUU7QUFDaEIsSUFBSSxhQUFhLEdBQUcsY0FBYztBQUNsQyxJQUFJLGtCQUFrQixHQUFHLEtBQUs7QUFDOUIsSUFBSSxLQUFLLEdBQUcsS0FBSztBQUNqQixJQUFJLE9BQU8sR0FBRyxFQUFFO0FBQ2hCLElBQUksYUFBYSxHQUFHLGNBQWM7QUFDbEMsSUFBSSxjQUFjLEdBQUcsRUFBRTtBQUN2QixJQUFJLG1CQUFtQixHQUFHLGNBQWM7QUFDeEMsR0FBRyxHQUFHLE9BQU8sQ0FBQztBQUNkLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLEVBQUUsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDO0FBQzNCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixJQUFJLFFBQVEsS0FBSyxFQUFFLEVBQUU7QUFDOUMsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakUsSUFBSSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLEdBQUc7QUFDSCxFQUFFLElBQUksT0FBTyxLQUFLLEVBQUUsRUFBRTtBQUN0QixJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUNqRCxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDbkIsR0FBRztBQUNILEVBQUUsSUFBSSxLQUFLLEVBQUU7QUFDYixJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQyxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDbkIsR0FBRztBQUNILEVBQUUsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ2pDLElBQUksU0FBUyxJQUFJLFdBQVcsQ0FBQztBQUM3QixHQUFHLE1BQU07QUFDVCxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUNyRCxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDbkIsR0FBRztBQUNILEVBQUUsSUFBSSxRQUFRLEtBQUssRUFBRSxFQUFFO0FBQ3ZCLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQztBQUN0QixHQUFHLE1BQU07QUFDVCxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNqRSxJQUFJLElBQUksY0FBYztBQUN0QixNQUFNLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsbUJBQW1CLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDcEUsSUFBSSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLEdBQUc7QUFDSCxFQUFFLElBQUksT0FBTyxLQUFLLEVBQUU7QUFDcEIsSUFBSSxTQUFTLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNsQyxFQUFFLElBQUksU0FBUyxLQUFLLEVBQUU7QUFDdEIsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2pDLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBQ0QsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDO0FBQzVCLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEtBQUssWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4RyxNQUFNLFNBQVMsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLEdBQUcsRUFBRSxLQUFLO0FBQ3BELEVBQUUsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLEVBQUUsSUFBSSxNQUFNLENBQUM7QUFDYixFQUFFLElBQUk7QUFDTixJQUFJLE1BQU0sR0FBR0wsUUFBWSxDQUFDLE1BQU0sRUFBRTtBQUNsQyxNQUFNLFFBQVE7QUFDZCxNQUFNLE9BQU8sRUFBRSxPQUFPO0FBQ3RCLEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRyxDQUFDLE1BQU07QUFDVixJQUFJLE1BQU0sR0FBR0EsUUFBWSxDQUFDLE1BQU0sRUFBRTtBQUNsQyxNQUFNLFVBQVUsRUFBRSxLQUFLO0FBQ3ZCLE1BQU0sUUFBUTtBQUNkLE1BQU0sT0FBTyxFQUFFLE9BQU87QUFDdEIsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0gsRUFBRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLElBQUksVUFBVSxJQUFJLFFBQVEsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1RyxDQUFDLENBQUM7QUFDSyxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQU0sS0FBSyxjQUFjLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRixNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQUssS0FBSyxjQUFjLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RixTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRTtBQUNwQyxFQUFFLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRDs7Ozs7Ozs7Ozs7Ozs7OztBQzVGQSxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO0FBQ3RDLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztBQUN6QyxJQUFJLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQztBQUN6RCxJQUFJLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztBQUN2RCxJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztBQUNuRCxJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDO0FBQ3pELElBQUksZUFBZSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNoSyxJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUs7QUFDL0IsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLElBQUksSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDbEMsTUFBTSxlQUFlLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN4QyxFQUFFLElBQUksbUJBQW1CO0FBQ3pCLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM3QyxNQUFNLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQ3BDLFFBQVEsZUFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUMsS0FBSztBQUNMLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDLENBQUM7QUFDRixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBU2xFLE1BQU0sZUFBZSxHQUFHLENBQUMsRUFBRSxLQUFLLE9BQU8sRUFBRSxLQUFLLFVBQVUsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLGVBQWUsQ0FBQztBQUN2RyxNQUFNLGVBQWUsR0FBRyxDQUFDLFNBQVMsS0FBSztBQUN2QyxFQUFFLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7QUFDN0IsRUFBRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMvQyxFQUFFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN4RCxFQUFFLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxFQUFFO0FBQ3BFLElBQUksZ0JBQWdCO0FBQ3BCLElBQUksY0FBYztBQUNsQixHQUFHLENBQUMsQ0FBQztBQUNMLEVBQUUsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRTtBQUNyRSxJQUFJLEtBQUs7QUFDVCxJQUFJLEtBQUssRUFBRSxTQUFTO0FBQ3BCLElBQUksT0FBTztBQUNYLElBQUksTUFBTTtBQUNWLElBQUksZ0JBQWdCLEVBQUUsRUFBRTtBQUN4QixHQUFHLENBQUMsQ0FBQztBQUNMLEVBQUUsT0FBTztBQUNULElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkIsSUFBSSxLQUFLO0FBQ1QsSUFBSSxHQUFHO0FBQ1AsR0FBRyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBQ0YsTUFBTSxlQUFlLFNBQVMsS0FBSyxDQUFDO0FBQ3BDLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO0FBQ3pDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25CLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDekIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM3QixHQUFHO0FBQ0gsQ0FBQztBQUNELFNBQVMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO0FBQ25DLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLEtBQUs7QUFDdkIsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsZUFBZSxDQUFDLEtBQUs7QUFDaEYsTUFBTSxTQUFTLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxFQUFFO0FBQzFDLFFBQVEsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVELFFBQVEsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzlGLFFBQVEsSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSztBQUM1QyxVQUFVLE1BQU0sSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2pFLE9BQU87QUFDUCxNQUFNLGVBQWUsa0JBQWtCLENBQUMsR0FBRyxJQUFJLEVBQUU7QUFDakQsUUFBUSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUQsUUFBUSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNwRyxRQUFRLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUs7QUFDNUMsVUFBVSxNQUFNLElBQUksZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNqRSxPQUFPO0FBQ1AsTUFBTSxNQUFNLHNCQUFzQixHQUFHLGVBQWUsQ0FBQyxlQUFlLENBQUMsR0FBRyxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQztBQUMvRyxNQUFNLEtBQUssQ0FBQyxTQUFTLENBQUNPLE1BQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLG1CQUFtQixFQUFFLHNCQUFzQixDQUFDLENBQUM7QUFDN0YsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHLENBQUM7QUFDSixDQUFDO0FBQ00sTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxLQUFLO0FBQzVDLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLE9BQU8sS0FBSztBQUN2RCxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN6QyxHQUFHLENBQUMsQ0FBQztBQUNMLENBQUM7O0FDOUVNLE1BQU0saUJBQWlCLENBQUM7QUFDL0IsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sR0FBRyxLQUFLLEVBQUU7QUFDdkMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN6QixJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQzNCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFDekQsR0FBRztBQUNILEVBQUUsaUJBQWlCLEdBQUc7QUFDdEIsSUFBSSxPQUFPO0FBQ1gsTUFBTSxNQUFNO0FBQ1osTUFBTSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU87QUFDekIsTUFBTSxLQUFLLEVBQUUsWUFBWTtBQUN6QixLQUFLLENBQUM7QUFDTixHQUFHO0FBQ0gsQ0FBQztBQUNNLE1BQU0sZ0JBQWdCLFNBQVMsaUJBQWlCLENBQUM7QUFDeEQsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sR0FBRyxLQUFLLEVBQUU7QUFDdkMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7QUFDOUIsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDbEQsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzNCLEdBQUc7QUFDSCxFQUFFLGVBQWUsQ0FBQyxLQUFLLEVBQUU7QUFDekIsSUFBSSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZFLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUMzQyxHQUFHO0FBQ0gsRUFBRSxRQUFRLEdBQUc7QUFDYixJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzFELEdBQUc7QUFDSCxFQUFFLGVBQWUsR0FBRztBQUNwQixJQUFJLE9BQU8sUUFBUSxDQUFDO0FBQ3BCLEdBQUc7QUFDSCxDQUFDO0FBQ00sTUFBTSxRQUFRLFNBQVMsaUJBQWlCLENBQUM7QUFDaEQsRUFBRSxlQUFlLENBQUMsS0FBSyxFQUFFO0FBQ3pCLElBQUksT0FBTyxLQUFLLElBQUksSUFBSSxDQUFDO0FBQ3pCLEdBQUc7QUFDSCxFQUFFLFFBQVEsR0FBRztBQUNiLElBQUksT0FBTyxVQUFVLENBQUM7QUFDdEIsR0FBRztBQUNILEVBQUUsbUJBQW1CLEdBQUc7QUFDeEIsSUFBSSxPQUFPLFVBQVUsQ0FBQztBQUN0QixHQUFHO0FBQ0gsQ0FBQztBQUNNLE1BQU0sZ0JBQWdCLFNBQVMsaUJBQWlCLENBQUM7QUFDeEQsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sR0FBRyxLQUFLLEVBQUU7QUFDdkMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzNCLEdBQUc7QUFDSCxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUU7QUFDcEIsSUFBSSxJQUFJLE1BQU0sQ0FBQyxjQUFjO0FBQzdCLE1BQU0sT0FBTyxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLElBQUksSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLFNBQVMsS0FBSyxHQUFHO0FBQ3pDLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO0FBQ3JDLEdBQUc7QUFDSCxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFO0FBQzdCLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWixNQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ25CLElBQUksSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQztBQUMzRCxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLElBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDOUQsR0FBRztBQUNILEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRTtBQUN6QixJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRTtBQUN6QyxNQUFNLE1BQU0sSUFBSSxTQUFTLENBQUMsQ0FBQyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVHLEtBQUs7QUFDTCxJQUFJLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztBQUN0QixJQUFJLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUN4QyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ2pHLFFBQVEsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN2QixRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1AsS0FBSztBQUNMLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUMzQyxHQUFHO0FBQ0gsRUFBRSxRQUFRLEdBQUc7QUFDYixJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzFELEdBQUc7QUFDSCxFQUFFLGVBQWUsR0FBRztBQUNwQixJQUFJLE9BQU8sUUFBUSxDQUFDO0FBQ3BCLEdBQUc7QUFDSCxDQUFDO0FBQ00sTUFBTSxlQUFlLFNBQVMsaUJBQWlCLENBQUM7QUFDdkQsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sR0FBRyxLQUFLLEVBQUU7QUFDdkMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzNCLEdBQUc7QUFDSCxFQUFFLGVBQWUsQ0FBQyxLQUFLLEVBQUU7QUFDekIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDckMsTUFBTSxNQUFNLElBQUksU0FBUyxDQUFDLENBQUMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRyxLQUFLO0FBQ0wsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25KLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUMzQyxHQUFHO0FBQ0gsRUFBRSxRQUFRLEdBQUc7QUFDYixJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3pELEdBQUc7QUFDSCxFQUFFLGVBQWUsR0FBRztBQUNwQixJQUFJLE9BQU8sT0FBTyxDQUFDO0FBQ25CLEdBQUc7QUFDSCxDQUFDO0FBQ00sTUFBTSxHQUFHLFNBQVMsaUJBQWlCLENBQUM7QUFDM0MsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ3RCLElBQUksSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUU7QUFDdkMsTUFBTSxNQUFNLElBQUksU0FBUyxDQUFDLDJHQUEyRyxDQUFDLENBQUM7QUFDdkksS0FBSztBQUNMLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xCLEdBQUc7QUFDSCxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUU7QUFDbEIsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJO0FBQ2pCLE1BQU0sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3ZCLElBQUksTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztBQUN6RCxJQUFJLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztBQUN0RyxJQUFJLE9BQU8sT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUM7QUFDaEQsR0FBRztBQUNILEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRTtBQUN6QixJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNO0FBQzlCLE1BQU0sT0FBTyxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksS0FBSyxZQUFZLE1BQU0sQ0FBQztBQUNqRSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNO0FBQzlCLE1BQU0sT0FBTyxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksS0FBSyxZQUFZLE1BQU0sQ0FBQztBQUNqRSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRO0FBQ2hDLE1BQU0sT0FBTyxPQUFPLEtBQUssSUFBSSxVQUFVLElBQUksS0FBSyxZQUFZLFFBQVEsQ0FBQztBQUNyRSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPO0FBQy9CLE1BQU0sT0FBTyxPQUFPLEtBQUssSUFBSSxTQUFTLElBQUksS0FBSyxZQUFZLE9BQU8sQ0FBQztBQUNuRSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNO0FBQzlCLE1BQU0sT0FBTyxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksS0FBSyxZQUFZLE1BQU0sQ0FBQztBQUNqRSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNO0FBQzlCLE1BQU0sT0FBTyxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksS0FBSyxZQUFZLE1BQU0sQ0FBQztBQUNqRSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNO0FBQzlCLE1BQU0sT0FBTyxPQUFPLEtBQUssSUFBSSxRQUFRLENBQUM7QUFDdEMsSUFBSSxPQUFPLEtBQUssWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3hDLEdBQUc7QUFDSCxFQUFFLFFBQVEsR0FBRztBQUNiLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNILEVBQUUsZUFBZSxHQUFHO0FBQ3BCLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU07QUFDOUIsTUFBTSxPQUFPLFFBQVEsQ0FBQztBQUN0QixJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNO0FBQzlCLE1BQU0sT0FBTyxRQUFRLENBQUM7QUFDdEIsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssUUFBUTtBQUNoQyxNQUFNLE9BQU8sVUFBVSxDQUFDO0FBQ3hCLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU07QUFDOUIsTUFBTSxPQUFPLFFBQVEsQ0FBQztBQUN0QixJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPO0FBQy9CLE1BQU0sT0FBTyxTQUFTLENBQUM7QUFDdkIsSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZDLEdBQUc7QUFDSCxFQUFFLG1CQUFtQixHQUFHO0FBQ3hCLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxHQUFHO0FBQ0gsQ0FBQztBQUNNLE1BQU0sY0FBYyxTQUFTLGlCQUFpQixDQUFDO0FBQ3RELEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLEdBQUcsS0FBSyxFQUFFO0FBQ3ZDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztBQUN4RCxNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztBQUM5RCxJQUFJLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN2QyxHQUFHO0FBQ0gsRUFBRSxlQUFlLENBQUMsS0FBSyxFQUFFO0FBQ3pCLElBQUksTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuRSxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDM0MsR0FBRztBQUNILEVBQUUsUUFBUSxHQUFHO0FBQ2IsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4RCxHQUFHO0FBQ0gsRUFBRSxlQUFlLEdBQUc7QUFDcEIsSUFBSSxPQUFPLFFBQVEsQ0FBQztBQUNwQixHQUFHO0FBQ0gsQ0FBQztBQUNNLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxLQUFLO0FBQ3ZELEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQztBQUNqRSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxRQUFRLEtBQUssSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUN2RSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsS0FBSyxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDakcsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLEtBQUssSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ2pHLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLENBQUMsUUFBUSxLQUFLLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDL0YsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLEtBQUssSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUM3RixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHO0FBQ3BCLElBQUksZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLEtBQUssSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO0FBQ3hFLElBQUksZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLEtBQUssSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO0FBQ3hFLElBQUksZUFBZSxFQUFFLENBQUMsUUFBUSxLQUFLLElBQUksZUFBZSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7QUFDdEUsSUFBSSxjQUFjLEVBQUUsQ0FBQyxRQUFRLEtBQUssSUFBSSxjQUFjLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQztBQUNwRSxHQUFHLENBQUM7QUFDSixDQUFDOztBQy9LRCxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDZixlQUFlLFNBQVMsR0FBRztBQUNsQyxFQUFFLElBQUksU0FBUztBQUNmLElBQUksT0FBTztBQUNYLEVBQUVBLE1BQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdkIsRUFBRUEsTUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUMzQixFQUFFQSxNQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25CLEVBQUVBLE1BQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDM0IsRUFBRUEsTUFBSSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBQ25DLEVBQUUsU0FBUyxHQUFHLElBQUksQ0FBQztBQUNuQjs7QUNWQSxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDakIsZUFBZSxjQUFjLENBQUMsTUFBTSxFQUFFO0FBQzdDLEVBQUUsSUFBSSxXQUFXO0FBQ2pCLElBQUksT0FBTztBQUNYLEVBQUUsV0FBVyxHQUFHLElBQUksQ0FBQztBQUNyQixFQUFFLGtCQUFrQixFQUFFLENBQUM7QUFDdkIsRUFBRSxNQUFNLFNBQVMsRUFBRSxDQUFDO0FBQ3BCLEVBQUUsSUFBSSxNQUFNLENBQUMsT0FBTztBQUNwQixJQUFJLENBQUMsTUFBTSxPQUFPLHVCQUF5QixDQUFDLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQztBQUNwRSxDQUFDO0FBQ00sU0FBUyxrQkFBa0IsR0FBRztBQUNyQyxFQUFFLE1BQU0sTUFBTSxHQUFHLElBQUksUUFBUSxDQUFDO0FBQzlCLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO0FBQ3BDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDYixNQUFNLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDO0FBQzdCLFFBQVEsSUFBSSxFQUFFLFFBQVE7QUFDdEIsUUFBUSxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQztBQUM3QixRQUFRLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsT0FBTyxLQUFLLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNqRixRQUFRLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ3hCLE9BQU8sQ0FBQyxDQUFDO0FBQ1QsTUFBTSxRQUFRLEVBQUUsQ0FBQztBQUNqQixLQUFLO0FBQ0wsR0FBRyxDQUFDLENBQUM7QUFDTCxFQUFFLE1BQU0sTUFBTSxHQUFHLElBQUksUUFBUSxDQUFDO0FBQzlCLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO0FBQ3BDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDYixNQUFNLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDO0FBQzdCLFFBQVEsSUFBSSxFQUFFLFFBQVE7QUFDdEIsUUFBUSxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQztBQUM3QixRQUFRLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsT0FBTyxLQUFLLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNqRixRQUFRLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ3hCLE9BQU8sQ0FBQyxDQUFDO0FBQ1QsTUFBTSxRQUFRLEVBQUUsQ0FBQztBQUNqQixLQUFLO0FBQ0wsR0FBRyxDQUFDLENBQUM7QUFDTCxFQUFFLFVBQVUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUM7QUFDbkMsSUFBSSxNQUFNO0FBQ1YsSUFBSSxNQUFNO0FBQ1YsSUFBSSxTQUFTLEVBQUUsSUFBSTtBQUNuQixJQUFJLGdCQUFnQixFQUFFLENBQUM7QUFDdkIsR0FBRyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBQ00sZUFBZSxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7QUFDakQsRUFBRSxNQUFNLEdBQUcsR0FBRyxNQUFNLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xFLEVBQUUsSUFBSTtBQUNOLElBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQztBQUNmLEdBQUcsU0FBUztBQUNaLElBQUksTUFBTSxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ25DLEdBQUc7QUFDSCxDQUFDO0FBQ00sZUFBZSxhQUFhLENBQUMsTUFBTSxFQUFFO0FBQzVDLEVBQUUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMzQyxFQUFFLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxLQUFLO0FBQzlDLElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkQsSUFBSSxNQUFNLE9BQU8sSUFBSSxDQUFDLENBQUM7QUFDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNOOztBQzVEQSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLFNBQVMsY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUUsRUFBRTtBQUMxRCxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtBQUNyQyxJQUFJLE9BQU8sR0FBRyxDQUFDO0FBQ2YsRUFBRSxJQUFJLE9BQU8sR0FBRyxLQUFLLFVBQVU7QUFDL0IsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsRUFBRSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7QUFDN0IsSUFBSSxPQUFPLEdBQUcsQ0FBQztBQUNmLEVBQUUsSUFBSSxHQUFHLFlBQVksT0FBTyxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLFNBQVMsS0FBSyxlQUFlO0FBQ2pILElBQUksT0FBTyxTQUFTLENBQUM7QUFDckIsRUFBRSxJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxHQUFHLFlBQVksT0FBTztBQUM5RCxJQUFJLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQztBQUN2QixFQUFFLElBQUksT0FBTyxHQUFHLENBQUMsZUFBZSxLQUFLLFVBQVU7QUFDL0MsSUFBSSxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JELEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUNuQixJQUFJLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QixFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUMxQixJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4QyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUs7QUFDMUIsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6QyxLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRyxNQUFNO0FBQ1QsSUFBSSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDekIsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxPQUFPLEdBQUcsSUFBSSxHQUFHLEtBQUssWUFBWSxFQUFFO0FBQ3hDLE1BQU0sTUFBTSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSztBQUN2RCxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksS0FBSyxDQUFDO0FBQzNCLFVBQVUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEQsT0FBTyxDQUFDLENBQUM7QUFDVCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLEtBQUs7QUFDTCxJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLEdBQUc7QUFDSCxDQUFDO0FBQ00sU0FBUyxZQUFZLENBQUMsR0FBRyxFQUFFO0FBQ2xDLEVBQUUsSUFBSSxDQUFDLEdBQUc7QUFDVixJQUFJLE9BQU8sR0FBRyxDQUFDO0FBQ2YsRUFBRSxJQUFJLEdBQUcsQ0FBQyxLQUFLO0FBQ2YsSUFBSSxHQUFHLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxJQUFJO0FBQ2QsSUFBSSxHQUFHLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsRUFBRSxJQUFJLE9BQU8sR0FBRyxDQUFDLFFBQVEsS0FBSyxRQUFRO0FBQ3RDLElBQUksR0FBRyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzNDLEVBQUUsSUFBSSxPQUFPLEdBQUcsQ0FBQyxNQUFNLEtBQUssUUFBUTtBQUNwQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2QyxFQUFFLE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCOztBQzVDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRTtBQUNoQyxFQUFFLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBQ00sZUFBZSxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtBQUNsRCxFQUFFLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNuQixFQUFFLEtBQUssTUFBTSxRQUFRLElBQUksS0FBSyxFQUFFO0FBQ2hDLElBQUksTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDakQsSUFBSSxNQUFNLElBQUksR0FBRztBQUNqQixNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3BCLE1BQU0sSUFBSSxFQUFFLElBQUk7QUFDaEIsTUFBTSxJQUFJLEVBQUUsT0FBTztBQUNuQixNQUFNLElBQUksRUFBRSxLQUFLO0FBQ2pCLE1BQU0sUUFBUTtBQUNkLE1BQU0sS0FBSyxFQUFFLEVBQUU7QUFDZixLQUFLLENBQUM7QUFDTixJQUFJLFlBQVksRUFBRSxDQUFDO0FBQ25CLElBQUksSUFBSTtBQUNSLE1BQU0sTUFBTSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEMsTUFBTSxNQUFNLE9BQU8sUUFBUSxDQUFDLENBQUM7QUFDN0IsTUFBTSxNQUFNLFlBQVksR0FBRyxNQUFNLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUQsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQzdDLE1BQU0sS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNqRSxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7QUFDL0IsVUFBVSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixTQUFTLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtBQUN2QyxVQUFVLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFNBQVMsTUFBTTtBQUNmLFVBQVUsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFDLFVBQVUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLFVBQVUsSUFBSSxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBQzNELFVBQVUsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUM5QyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ2hCLE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRztBQUNwQixRQUFRLEtBQUssRUFBRSxNQUFNO0FBQ3JCLFFBQVEsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDOUIsT0FBTyxDQUFDO0FBQ1IsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQyxLQUFLO0FBQ0wsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEIsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3JELElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQixHQUFHO0FBQ0gsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFDRCxTQUFTLGtCQUFrQixDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRTtBQUN0RSxFQUFFLElBQUksUUFBUSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQzNCLElBQUksUUFBUSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLElBQUksVUFBVSxLQUFLLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZELEdBQUc7QUFDSCxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLO0FBQzdCLElBQUksTUFBTSxXQUFXLEdBQUcsVUFBVSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDO0FBQ3hELElBQUksSUFBSSxRQUFRLEVBQUU7QUFDbEIsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxLQUFLLFdBQVcsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3RFLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU07QUFDN0IsVUFBVSxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN6QixPQUFPLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUNuRCxRQUFRLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ3hCLE9BQU8sTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO0FBQ3BDLFFBQVEsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdkIsT0FBTztBQUNQLEtBQUs7QUFDTCxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7QUFDM0IsTUFBTSxJQUFJLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUNuRCxRQUFRLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ3hCLEtBQUssTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO0FBQ25DLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU07QUFDM0IsUUFBUSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEI7QUFDQSxRQUFRLGtCQUFrQixDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ2xFLEtBQUs7QUFDTCxHQUFHLENBQUMsQ0FBQztBQUNMLEVBQUUsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtBQUM1QixJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUM7QUFDbEQsTUFBTSxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUMxQixHQUFHO0FBQ0gsQ0FBQztBQUNELFNBQVMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFO0FBQ2pDLEVBQUUsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pHLENBQUM7QUFDRCxTQUFTLFlBQVksQ0FBQyxLQUFLLEVBQUU7QUFDN0IsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSztBQUM3QixJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7QUFDMUIsTUFBTSxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUN0QixNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPO0FBQzVCLFFBQVEsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLEtBQUs7QUFDTCxHQUFHLENBQUMsQ0FBQztBQUNMLENBQUM7QUFDRCxTQUFTLGFBQWEsQ0FBQyxNQUFNLEVBQUU7QUFDL0IsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUs7QUFDbkMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU87QUFDMUIsTUFBTSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsR0FBRyxDQUFDLENBQUM7QUFDTDs7QUM5Rk8sZUFBZSxhQUFhLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDdkQsRUFBRSxJQUFJLElBQUksS0FBSyxZQUFZLElBQUksS0FBSyxDQUFDLEtBQUs7QUFDMUMsSUFBSSxNQUFNLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNqRCxFQUFFLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRSxFQUFFLElBQUksSUFBSSxLQUFLLFdBQVcsSUFBSSxLQUFLLENBQUMsS0FBSztBQUN6QyxJQUFJLE1BQU0sYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLElBQUksV0FBVyxDQUFDO0FBQ2hCLElBQUksY0FBYyxDQUFDO0FBQ25CLFNBQVMsVUFBVSxDQUFDLElBQUksRUFBRTtBQUMxQixFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEMsRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDNUIsRUFBRSxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU07QUFDakMsSUFBSSxjQUFjLEdBQUcsZUFBZSxFQUFFLENBQUM7QUFDdkMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsQ0FBQztBQUNELGVBQWUsZUFBZSxHQUFHO0FBQ2pDLEVBQUUsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzVCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkIsRUFBRSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUU7QUFDbEIsSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BELElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2xCLElBQUksT0FBTyxDQUFDLENBQUM7QUFDYixHQUFHO0FBQ0gsQ0FBQztBQUNNLGVBQWUsT0FBTyxDQUFDLElBQUksRUFBRTtBQUNwQyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ1QsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSztBQUN6QixJQUFJLE9BQU87QUFDWCxFQUFFLE1BQU0sS0FBSyxHQUFHQyxhQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHO0FBQ2hCLElBQUksS0FBSyxFQUFFLEtBQUs7QUFDaEIsR0FBRyxDQUFDO0FBQ0osRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkIsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0FBQ3JCLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEMsRUFBRSxPQUFPLENBQUMsaUJBQWlCLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUMzQyxFQUFFLElBQUk7QUFDTixJQUFJLE1BQU0sYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLElBQUksUUFBUSxDQUFDO0FBQ2IsTUFBTSxjQUFjLEVBQUUsQ0FBQztBQUN2QixNQUFNLHFCQUFxQixFQUFFLEtBQUs7QUFDbEMsTUFBTSwwQkFBMEIsRUFBRSxJQUFJO0FBQ3RDLE1BQU0sd0JBQXdCLEVBQUUsSUFBSTtBQUNwQyxNQUFNLDZCQUE2QixFQUFFLElBQUk7QUFDekMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRO0FBQ3JFLE1BQU0sZUFBZSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUM7QUFDeEMsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEIsSUFBSSxNQUFNLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixFQUFFLDZCQUE2QixFQUFFLHFCQUFxQixFQUFFLDBCQUEwQixFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUM7QUFDdEosSUFBSSxJQUFJLHdCQUF3QixLQUFLLElBQUksSUFBSSxjQUFjLEtBQUssd0JBQXdCO0FBQ3hGLE1BQU0sTUFBTSw2QkFBNkIsQ0FBQztBQUMxQyxJQUFJLElBQUkscUJBQXFCLEtBQUssSUFBSSxJQUFJLGNBQWMsS0FBSyxDQUFDO0FBQzlELE1BQU0sTUFBTSwwQkFBMEIsQ0FBQztBQUN2QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUMvQixHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDZCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUMvQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QyxHQUFHO0FBQ0gsRUFBRSxJQUFJO0FBQ04sSUFBSSxNQUFNLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNyRSxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDZCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUMvQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QyxHQUFHO0FBQ0gsRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDbEIsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLE1BQU0sRUFBRTtBQUN0QyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNqQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7QUFDekUsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDakMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNqQyxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNsQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHQSxhQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBQ25ELEVBQUUsT0FBTyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQztBQUM3QyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQixDQUFDO0FBQ00sZUFBZSxRQUFRLENBQUMsS0FBSyxFQUFFO0FBQ3RDLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDVCxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxNQUFNLE1BQU07QUFDbEUsSUFBSSxPQUFPO0FBQ1gsRUFBRSxNQUFNLEtBQUssR0FBR0EsYUFBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRztBQUNqQixJQUFJLEtBQUssRUFBRSxLQUFLO0FBQ2hCLEdBQUcsQ0FBQztBQUNKLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtBQUM3QixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNoQyxHQUFHLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtBQUNwQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNoQyxHQUFHLE1BQU07QUFDVCxJQUFJLElBQUk7QUFDUixNQUFNLE1BQU0sYUFBYSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELE1BQU0sS0FBSyxNQUFNLFVBQVUsSUFBSSxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUM5RCxRQUFRLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUU7QUFDL0MsVUFBVSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLFNBQVMsTUFBTTtBQUNmLFVBQVUsS0FBSyxNQUFNLENBQUMsSUFBSSxVQUFVO0FBQ3BDLFlBQVksTUFBTSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsU0FBUztBQUNULE9BQU87QUFDUCxNQUFNLE1BQU0sYUFBYSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3RELEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNoQixNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNsQyxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUdBLGFBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDcEQsRUFBRSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO0FBQzVCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUMxQixNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNsQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUs7QUFDN0IsUUFBUSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEYsS0FBSyxNQUFNLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2pDLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ2xDLEtBQUssTUFBTTtBQUNYLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ2xDLEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEIsQ0FBQztBQUNELGVBQWUsYUFBYSxDQUFDLENBQUMsRUFBRTtBQUNoQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBQ00sZUFBZSxTQUFTLENBQUMsTUFBTSxFQUFFO0FBQ3hDLEVBQUUsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNO0FBQzVCLElBQUksTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUNNLGVBQWUsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7QUFDaEQsRUFBRSxNQUFNLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEQsRUFBRSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0IsRUFBRSxJQUFJLE9BQU8sQ0FBQztBQUNkLEVBQUUsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtBQUMvQixJQUFJLE9BQU8sR0FBRyxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN0QyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN0QixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUNwQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN0RSxHQUFHO0FBQ0gsRUFBRSxNQUFNLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6QixFQUFFLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7QUFDL0IsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsS0FBSztBQUNsRSxNQUFNLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hDLEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDekIsR0FBRztBQUNILEVBQUUsTUFBTSxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3ZDLEVBQUUsTUFBTSxlQUFlLEVBQUUsQ0FBQztBQUMxQixDQUFDO0FBQ00sU0FBUyxnQkFBZ0IsR0FBRztBQUNuQyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7QUFDbkYsRUFBRSxJQUFJLFlBQVk7QUFDbEIsSUFBSSxFQUFFLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDekIsT0FBTyxJQUFJLFNBQVM7QUFDcEIsSUFBSSxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDdkIsT0FBTyxJQUFJLFVBQVU7QUFDckIsSUFBSSxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDdkI7O0FDdEtPLGVBQWUsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7QUFDekMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNULEVBQUUsTUFBTSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0IsRUFBRSxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtBQUM1QixJQUFJLE1BQU0sSUFBSSxHQUFHLE1BQU1KLFFBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xELElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxDQUFDLEtBQUssSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQztBQUMzSSxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztBQUNyRCxNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyx5QkFBeUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekQsSUFBSSxPQUFPLENBQUMsaUJBQWlCLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUM5QyxJQUFJLE1BQU0sT0FBTyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsa0JBQWtCLElBQUksRUFBRSxFQUFFLFlBQVk7QUFDcEUsTUFBTSxNQUFNLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZDLEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxPQUFPLENBQUMsaUJBQWlCLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ2hELEdBQUc7QUFDSDs7In0=
|
|
1838
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnkuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbnRlZ3JhdGlvbnMvZW52L25vZGUudHMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL2Vudi9qc2RvbS1rZXlzLnRzIiwiLi4vc3JjL2ludGVncmF0aW9ucy9lbnYvanNkb20udHMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL2Vudi9oYXBweS1kb20udHMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL2Vudi9pbmRleC50cyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpLXN1YnNldEAxLjYuMC9ub2RlX21vZHVsZXMvY2hhaS1zdWJzZXQvbGliL2NoYWktc3Vic2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL25hdHVyYWwtY29tcGFyZUAxLjQuMC9ub2RlX21vZHVsZXMvbmF0dXJhbC1jb21wYXJlL2luZGV4LmpzIiwiLi4vc3JjL2ludGVncmF0aW9ucy9zbmFwc2hvdC9wb3J0L3V0aWxzLnRzIiwiLi4vc3JjL2ludGVncmF0aW9ucy9zbmFwc2hvdC9wb3J0L2lubGluZVNuYXBzaG90LnRzIiwiLi4vc3JjL2ludGVncmF0aW9ucy9zbmFwc2hvdC9wb3J0L3N0YXRlLnRzIiwiLi4vc3JjL2ludGVncmF0aW9ucy9zbmFwc2hvdC9jbGllbnQudHMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL3NuYXBzaG90L2NoYWkudHMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL2NoYWkvamVzdC1tYXRjaGVyLXV0aWxzLnRzIiwiLi4vc3JjL2ludGVncmF0aW9ucy9jaGFpL2plc3QtZXh0ZW5kLnRzIiwiLi4vc3JjL2ludGVncmF0aW9ucy9jaGFpL2plc3QtYXN5bW1ldHJpYy1tYXRjaGVycy50cyIsIi4uL3NyYy9pbnRlZ3JhdGlvbnMvY2hhaS9zZXR1cC50cyIsIi4uL3NyYy9ydW50aW1lL3NldHVwLnRzIiwiLi4vc3JjL3J1bnRpbWUvZXJyb3IudHMiLCIuLi9zcmMvcnVudGltZS9jb2xsZWN0LnRzIiwiLi4vc3JjL3J1bnRpbWUvcnVuLnRzIiwiLi4vc3JjL3J1bnRpbWUvZW50cnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG5leHBvcnQgZGVmYXVsdCA8RW52aXJvbm1lbnQ+KHtcbiAgbmFtZTogJ25vZGUnLFxuICBhc3luYyBzZXR1cCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGVhcmRvd24oKSB7XG4gICAgICB9LFxuICAgIH1cbiAgfSxcbn0pXG4iLCIvLyBTRUUgaHR0cHM6Ly9naXRodWIuY29tL2pzZG9tL2pzZG9tL2Jsb2IvbWFzdGVyL2xpYi9qc2RvbS9saXZpbmcvaW50ZXJmYWNlcy5qc1xuXG5jb25zdCBMSVZJTkdfS0VZUyA9IFtcbiAgJ0RPTUV4Y2VwdGlvbicsXG4gICdVUkwnLFxuICAnVVJMU2VhcmNoUGFyYW1zJyxcbiAgJ0V2ZW50VGFyZ2V0JyxcbiAgJ05hbWVkTm9kZU1hcCcsXG4gICdOb2RlJyxcbiAgJ0F0dHInLFxuICAnRWxlbWVudCcsXG4gICdEb2N1bWVudEZyYWdtZW50JyxcbiAgJ0RPTUltcGxlbWVudGF0aW9uJyxcbiAgJ0RvY3VtZW50JyxcbiAgJ1hNTERvY3VtZW50JyxcbiAgJ0NoYXJhY3RlckRhdGEnLFxuICAnVGV4dCcsXG4gICdDREFUQVNlY3Rpb24nLFxuICAnUHJvY2Vzc2luZ0luc3RydWN0aW9uJyxcbiAgJ0NvbW1lbnQnLFxuICAnRG9jdW1lbnRUeXBlJyxcbiAgJ05vZGVMaXN0JyxcbiAgJ0hUTUxDb2xsZWN0aW9uJyxcbiAgJ0hUTUxPcHRpb25zQ29sbGVjdGlvbicsXG4gICdET01TdHJpbmdNYXAnLFxuICAnRE9NVG9rZW5MaXN0JyxcbiAgJ1N0eWxlU2hlZXRMaXN0JyxcbiAgJ0hUTUxFbGVtZW50JyxcbiAgJ0hUTUxIZWFkRWxlbWVudCcsXG4gICdIVE1MVGl0bGVFbGVtZW50JyxcbiAgJ0hUTUxCYXNlRWxlbWVudCcsXG4gICdIVE1MTGlua0VsZW1lbnQnLFxuICAnSFRNTE1ldGFFbGVtZW50JyxcbiAgJ0hUTUxTdHlsZUVsZW1lbnQnLFxuICAnSFRNTEJvZHlFbGVtZW50JyxcbiAgJ0hUTUxIZWFkaW5nRWxlbWVudCcsXG4gICdIVE1MUGFyYWdyYXBoRWxlbWVudCcsXG4gICdIVE1MSFJFbGVtZW50JyxcbiAgJ0hUTUxQcmVFbGVtZW50JyxcbiAgJ0hUTUxVTGlzdEVsZW1lbnQnLFxuICAnSFRNTE9MaXN0RWxlbWVudCcsXG4gICdIVE1MTElFbGVtZW50JyxcbiAgJ0hUTUxNZW51RWxlbWVudCcsXG4gICdIVE1MRExpc3RFbGVtZW50JyxcbiAgJ0hUTUxEaXZFbGVtZW50JyxcbiAgJ0hUTUxBbmNob3JFbGVtZW50JyxcbiAgJ0hUTUxBcmVhRWxlbWVudCcsXG4gICdIVE1MQlJFbGVtZW50JyxcbiAgJ0hUTUxCdXR0b25FbGVtZW50JyxcbiAgJ0hUTUxDYW52YXNFbGVtZW50JyxcbiAgJ0hUTUxEYXRhRWxlbWVudCcsXG4gICdIVE1MRGF0YUxpc3RFbGVtZW50JyxcbiAgJ0hUTUxEZXRhaWxzRWxlbWVudCcsXG4gICdIVE1MRGlhbG9nRWxlbWVudCcsXG4gICdIVE1MRGlyZWN0b3J5RWxlbWVudCcsXG4gICdIVE1MRmllbGRTZXRFbGVtZW50JyxcbiAgJ0hUTUxGb250RWxlbWVudCcsXG4gICdIVE1MRm9ybUVsZW1lbnQnLFxuICAnSFRNTEh0bWxFbGVtZW50JyxcbiAgJ0hUTUxJbWFnZUVsZW1lbnQnLFxuICAnSFRNTElucHV0RWxlbWVudCcsXG4gICdIVE1MTGFiZWxFbGVtZW50JyxcbiAgJ0hUTUxMZWdlbmRFbGVtZW50JyxcbiAgJ0hUTUxNYXBFbGVtZW50JyxcbiAgJ0hUTUxNYXJxdWVlRWxlbWVudCcsXG4gICdIVE1MTWVkaWFFbGVtZW50JyxcbiAgJ0hUTUxNZXRlckVsZW1lbnQnLFxuICAnSFRNTE1vZEVsZW1lbnQnLFxuICAnSFRNTE9wdEdyb3VwRWxlbWVudCcsXG4gICdIVE1MT3B0aW9uRWxlbWVudCcsXG4gICdIVE1MT3V0cHV0RWxlbWVudCcsXG4gICdIVE1MUGljdHVyZUVsZW1lbnQnLFxuICAnSFRNTFByb2dyZXNzRWxlbWVudCcsXG4gICdIVE1MUXVvdGVFbGVtZW50JyxcbiAgJ0hUTUxTY3JpcHRFbGVtZW50JyxcbiAgJ0hUTUxTZWxlY3RFbGVtZW50JyxcbiAgJ0hUTUxTbG90RWxlbWVudCcsXG4gICdIVE1MU291cmNlRWxlbWVudCcsXG4gICdIVE1MU3BhbkVsZW1lbnQnLFxuICAnSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQnLFxuICAnSFRNTFRhYmxlQ2VsbEVsZW1lbnQnLFxuICAnSFRNTFRhYmxlQ29sRWxlbWVudCcsXG4gICdIVE1MVGFibGVFbGVtZW50JyxcbiAgJ0hUTUxUaW1lRWxlbWVudCcsXG4gICdIVE1MVGFibGVSb3dFbGVtZW50JyxcbiAgJ0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50JyxcbiAgJ0hUTUxUZW1wbGF0ZUVsZW1lbnQnLFxuICAnSFRNTFRleHRBcmVhRWxlbWVudCcsXG4gICdIVE1MVW5rbm93bkVsZW1lbnQnLFxuICAnSFRNTEZyYW1lRWxlbWVudCcsXG4gICdIVE1MRnJhbWVTZXRFbGVtZW50JyxcbiAgJ0hUTUxJRnJhbWVFbGVtZW50JyxcbiAgJ0hUTUxFbWJlZEVsZW1lbnQnLFxuICAnSFRNTE9iamVjdEVsZW1lbnQnLFxuICAnSFRNTFBhcmFtRWxlbWVudCcsXG4gICdIVE1MVmlkZW9FbGVtZW50JyxcbiAgJ0hUTUxBdWRpb0VsZW1lbnQnLFxuICAnSFRNTFRyYWNrRWxlbWVudCcsXG4gICdTVkdFbGVtZW50JyxcbiAgJ1NWR0dyYXBoaWNzRWxlbWVudCcsXG4gICdTVkdTVkdFbGVtZW50JyxcbiAgJ1NWR1RpdGxlRWxlbWVudCcsXG4gICdTVkdBbmltYXRlZFN0cmluZycsXG4gICdTVkdOdW1iZXInLFxuICAnU1ZHU3RyaW5nTGlzdCcsXG4gICdFdmVudCcsXG4gICdDbG9zZUV2ZW50JyxcbiAgJ0N1c3RvbUV2ZW50JyxcbiAgJ01lc3NhZ2VFdmVudCcsXG4gICdFcnJvckV2ZW50JyxcbiAgJ0hhc2hDaGFuZ2VFdmVudCcsXG4gICdQb3BTdGF0ZUV2ZW50JyxcbiAgJ1N0b3JhZ2VFdmVudCcsXG4gICdQcm9ncmVzc0V2ZW50JyxcbiAgJ1BhZ2VUcmFuc2l0aW9uRXZlbnQnLFxuICAnVUlFdmVudCcsXG4gICdGb2N1c0V2ZW50JyxcbiAgJ0lucHV0RXZlbnQnLFxuICAnTW91c2VFdmVudCcsXG4gICdLZXlib2FyZEV2ZW50JyxcbiAgJ1RvdWNoRXZlbnQnLFxuICAnQ29tcG9zaXRpb25FdmVudCcsXG4gICdXaGVlbEV2ZW50JyxcbiAgJ0JhclByb3AnLFxuICAnRXh0ZXJuYWwnLFxuICAnTG9jYXRpb24nLFxuICAnSGlzdG9yeScsXG4gICdTY3JlZW4nLFxuICAnUGVyZm9ybWFuY2UnLFxuICAnTmF2aWdhdG9yJyxcbiAgJ1BsdWdpbkFycmF5JyxcbiAgJ01pbWVUeXBlQXJyYXknLFxuICAnUGx1Z2luJyxcbiAgJ01pbWVUeXBlJyxcbiAgJ0ZpbGVSZWFkZXInLFxuICAnQmxvYicsXG4gICdGaWxlJyxcbiAgJ0ZpbGVMaXN0JyxcbiAgJ1ZhbGlkaXR5U3RhdGUnLFxuICAnRE9NUGFyc2VyJyxcbiAgJ1hNTFNlcmlhbGl6ZXInLFxuICAnRm9ybURhdGEnLFxuICAnWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCcsXG4gICdYTUxIdHRwUmVxdWVzdFVwbG9hZCcsXG4gICdYTUxIdHRwUmVxdWVzdCcsXG4gICdXZWJTb2NrZXQnLFxuICAnTm9kZUZpbHRlcicsXG4gICdOb2RlSXRlcmF0b3InLFxuICAnVHJlZVdhbGtlcicsXG4gICdBYnN0cmFjdFJhbmdlJyxcbiAgJ1JhbmdlJyxcbiAgJ1N0YXRpY1JhbmdlJyxcbiAgJ1NlbGVjdGlvbicsXG4gICdTdG9yYWdlJyxcbiAgJ0N1c3RvbUVsZW1lbnRSZWdpc3RyeScsXG4gICdTaGFkb3dSb290JyxcbiAgJ011dGF0aW9uT2JzZXJ2ZXInLFxuICAnTXV0YXRpb25SZWNvcmQnLFxuICAnSGVhZGVycycsXG4gICdBYm9ydENvbnRyb2xsZXInLFxuICAnQWJvcnRTaWduYWwnLFxuXG4gIC8vIG5vdCBzcGVjaWZpZWQgaW4gZG9jcywgYnV0IGlzIGF2YWlsYWJsZVxuICAnSW1hZ2UnLFxuXVxuXG5jb25zdCBPVEhFUl9LRVlTID0gW1xuICAnYWRkRXZlbnRMaXN0ZW5lcicsXG4gICdhbGVydCcsXG4gICdhdG9iJyxcbiAgJ2JsdXInLFxuICAnYnRvYScsXG4gIC8qICdjbGVhckludGVydmFsJywgKi9cbiAgLyogJ2NsZWFyVGltZW91dCcsICovXG4gICdjbG9zZScsXG4gICdjb25maXJtJyxcbiAgLyogJ2NvbnNvbGUnLCAqL1xuICAnY3JlYXRlUG9wdXAnLFxuICAnZGlzcGF0Y2hFdmVudCcsXG4gICdkb2N1bWVudCcsXG4gICdmb2N1cycsXG4gICdmcmFtZXMnLFxuICAnZ2V0Q29tcHV0ZWRTdHlsZScsXG4gICdoaXN0b3J5JyxcbiAgJ2lubmVySGVpZ2h0JyxcbiAgJ2lubmVyV2lkdGgnLFxuICAnbGVuZ3RoJyxcbiAgJ2xvY2F0aW9uJyxcbiAgJ21hdGNoTWVkaWEnLFxuICAnbW92ZUJ5JyxcbiAgJ21vdmVUbycsXG4gICduYW1lJyxcbiAgJ25hdmlnYXRvcicsXG4gICdvcGVuJyxcbiAgJ291dGVySGVpZ2h0JyxcbiAgJ291dGVyV2lkdGgnLFxuICAncGFnZVhPZmZzZXQnLFxuICAncGFnZVlPZmZzZXQnLFxuICAncGFyZW50JyxcbiAgJ3Bvc3RNZXNzYWdlJyxcbiAgJ3ByaW50JyxcbiAgJ3Byb21wdCcsXG4gICdyZW1vdmVFdmVudExpc3RlbmVyJyxcbiAgJ3Jlc2l6ZUJ5JyxcbiAgJ3Jlc2l6ZVRvJyxcbiAgJ3NjcmVlbicsXG4gICdzY3JlZW5MZWZ0JyxcbiAgJ3NjcmVlblRvcCcsXG4gICdzY3JlZW5YJyxcbiAgJ3NjcmVlblknLFxuICAnc2Nyb2xsJyxcbiAgJ3Njcm9sbEJ5JyxcbiAgJ3Njcm9sbExlZnQnLFxuICAnc2Nyb2xsVG8nLFxuICAnc2Nyb2xsVG9wJyxcbiAgJ3Njcm9sbFgnLFxuICAnc2Nyb2xsWScsXG4gICdzZWxmJyxcbiAgLyogJ3NldEludGVydmFsJywgKi9cbiAgLyogJ3NldFRpbWVvdXQnLCAqL1xuICAnc3RvcCcsXG4gIC8qICd0b1N0cmluZycsICovXG4gICd0b3AnLFxuICAnd2luZG93Jyxcbl1cblxuZXhwb3J0IGNvbnN0IEtFWVMgPSBMSVZJTkdfS0VZUy5jb25jYXQoT1RIRVJfS0VZUylcbiIsImltcG9ydCB7IGltcG9ydE1vZHVsZSB9IGZyb20gJ2xvY2FsLXBrZydcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnQsIEpTRE9NT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgS0VZUyB9IGZyb20gJy4vanNkb20ta2V5cydcblxuZXhwb3J0IGRlZmF1bHQgPEVudmlyb25tZW50Pih7XG4gIG5hbWU6ICdqc2RvbScsXG4gIGFzeW5jIHNldHVwKGdsb2JhbCwgeyBqc2RvbSA9IHt9IH0pIHtcbiAgICBjb25zdCB7XG4gICAgICBDb29raWVKYXIsXG4gICAgICBKU0RPTSxcbiAgICAgIFJlc291cmNlTG9hZGVyLFxuICAgICAgVmlydHVhbENvbnNvbGUsXG4gICAgfSA9IGF3YWl0IGltcG9ydE1vZHVsZSgnanNkb20nKSBhcyB0eXBlb2YgaW1wb3J0KCdqc2RvbScpXG4gICAgY29uc3Qge1xuICAgICAgaHRtbCA9ICc8IURPQ1RZUEUgaHRtbD4nLFxuICAgICAgdXNlckFnZW50LFxuICAgICAgdXJsID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCcsXG4gICAgICBjb250ZW50VHlwZSA9ICd0ZXh0L2h0bWwnLFxuICAgICAgcHJldGVuZFRvQmVWaXN1YWwgPSB0cnVlLFxuICAgICAgaW5jbHVkZU5vZGVMb2NhdGlvbnMgPSBmYWxzZSxcbiAgICAgIHJ1blNjcmlwdHMgPSAnZGFuZ2Vyb3VzbHknLFxuICAgICAgcmVzb3VyY2VzLFxuICAgICAgY29uc29sZSA9IGZhbHNlLFxuICAgICAgY29va2llSmFyID0gZmFsc2UsXG4gICAgICAuLi5yZXN0T3B0aW9uc1xuICAgIH0gPSBqc2RvbSBhcyBKU0RPTU9wdGlvbnNcbiAgICBjb25zdCBkb20gPSBuZXcgSlNET00oXG4gICAgICBodG1sLFxuICAgICAge1xuICAgICAgICBwcmV0ZW5kVG9CZVZpc3VhbCxcbiAgICAgICAgcmVzb3VyY2VzOiByZXNvdXJjZXMgPz8gKHVzZXJBZ2VudCA/IG5ldyBSZXNvdXJjZUxvYWRlcih7IHVzZXJBZ2VudCB9KSA6IHVuZGVmaW5lZCksXG4gICAgICAgIHJ1blNjcmlwdHMsXG4gICAgICAgIHVybCxcbiAgICAgICAgdmlydHVhbENvbnNvbGU6IGNvbnNvbGUgJiYgZ2xvYmFsLmNvbnNvbGUgPyBuZXcgVmlydHVhbENvbnNvbGUoKS5zZW5kVG8oZ2xvYmFsLmNvbnNvbGUpIDogdW5kZWZpbmVkLFxuICAgICAgICBjb29raWVKYXI6IGNvb2tpZUphciA/IG5ldyBDb29raWVKYXIoKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgaW5jbHVkZU5vZGVMb2NhdGlvbnMsXG4gICAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAgICB1c2VyQWdlbnQsXG4gICAgICAgIC4uLnJlc3RPcHRpb25zLFxuICAgICAgfSxcbiAgICApXG5cbiAgICBjb25zdCBrZXlzID0gbmV3IFNldChLRVlTLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhkb20ud2luZG93KSlcbiAgICAgIC5maWx0ZXIoayA9PiAhay5zdGFydHNXaXRoKCdfJykgJiYgIShrIGluIGdsb2JhbCkpKVxuXG4gICAgY29uc3Qgb3ZlcnJpZGVPYmplY3QgPSBuZXcgTWFwPHN0cmluZywgYW55PigpXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbCwga2V5LCB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICBpZiAob3ZlcnJpZGVPYmplY3QuaGFzKGtleSkpXG4gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVPYmplY3QuZ2V0KGtleSlcbiAgICAgICAgICByZXR1cm4gZG9tLndpbmRvd1trZXldXG4gICAgICAgIH0sXG4gICAgICAgIHNldCh2KSB7XG4gICAgICAgICAgb3ZlcnJpZGVPYmplY3Quc2V0KGtleSwgdilcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGVhcmRvd24oZ2xvYmFsKSB7XG4gICAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4gZGVsZXRlIGdsb2JhbFtrZXldKVxuICAgICAgfSxcbiAgICB9XG4gIH0sXG59KVxuIiwiaW1wb3J0IHsgaW1wb3J0TW9kdWxlIH0gZnJvbSAnbG9jYWwtcGtnJ1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgS0VZUyB9IGZyb20gJy4vanNkb20ta2V5cydcblxuZXhwb3J0IGRlZmF1bHQgPEVudmlyb25tZW50Pih7XG4gIG5hbWU6ICdoYXBweS1kb20nLFxuICBhc3luYyBzZXR1cChnbG9iYWwpIHtcbiAgICBjb25zdCB7IFdpbmRvdyB9ID0gYXdhaXQgaW1wb3J0TW9kdWxlKCdoYXBweS1kb20nKSBhcyB0eXBlb2YgaW1wb3J0KCdoYXBweS1kb20nKVxuICAgIGNvbnN0IHdpbjogYW55ID0gbmV3IFdpbmRvdygpXG5cbiAgICBjb25zdCBrZXlzID0gbmV3IFNldChLRVlTLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW4pKVxuICAgICAgLmZpbHRlcihrID0+ICFrLnN0YXJ0c1dpdGgoJ18nKSAmJiAhKGsgaW4gZ2xvYmFsKSkpXG5cbiAgICBjb25zdCBvdmVycmlkZU9iamVjdCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KClcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsLCBrZXksIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIGlmIChvdmVycmlkZU9iamVjdC5oYXMoa2V5KSlcbiAgICAgICAgICAgIHJldHVybiBvdmVycmlkZU9iamVjdC5nZXQoa2V5KVxuICAgICAgICAgIHJldHVybiB3aW5ba2V5XVxuICAgICAgICB9LFxuICAgICAgICBzZXQodikge1xuICAgICAgICAgIG92ZXJyaWRlT2JqZWN0LnNldChrZXksIHYpXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRlYXJkb3duKGdsb2JhbCkge1xuICAgICAgICB3aW4uaGFwcHlET00uY2FuY2VsQXN5bmMoKVxuICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IGRlbGV0ZSBnbG9iYWxba2V5XSlcbiAgICAgIH0sXG4gICAgfVxuICB9LFxufSlcbiIsImltcG9ydCBub2RlIGZyb20gJy4vbm9kZSdcbmltcG9ydCBqc2RvbSBmcm9tICcuL2pzZG9tJ1xuaW1wb3J0IGhhcHB5IGZyb20gJy4vaGFwcHktZG9tJ1xuXG5leHBvcnQgY29uc3QgZW52aXJvbm1lbnRzID0ge1xuICBub2RlLFxuICBqc2RvbSxcbiAgJ2hhcHB5LWRvbSc6IGhhcHB5LFxufVxuIiwiKGZ1bmN0aW9uKCkge1xuXHQoZnVuY3Rpb24oY2hhaVN1YnNldCkge1xuXHRcdGlmICh0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cyA9IGNoYWlTdWJzZXQ7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcblx0XHRcdHJldHVybiBkZWZpbmUoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBjaGFpU3Vic2V0O1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjaGFpLnVzZShjaGFpU3Vic2V0KTtcblx0XHR9XG5cdH0pKGZ1bmN0aW9uKGNoYWksIHV0aWxzKSB7XG5cdFx0dmFyIEFzc2VydGlvbiA9IGNoYWkuQXNzZXJ0aW9uO1xuXHRcdHZhciBhc3NlcnRpb25Qcm90b3R5cGUgPSBBc3NlcnRpb24ucHJvdG90eXBlO1xuXG5cdFx0QXNzZXJ0aW9uLmFkZE1ldGhvZCgnY29udGFpblN1YnNldCcsIGZ1bmN0aW9uIChleHBlY3RlZCkge1xuXHRcdFx0dmFyIGFjdHVhbCA9IHV0aWxzLmZsYWcodGhpcywgJ29iamVjdCcpO1xuXHRcdFx0dmFyIHNob3dEaWZmID0gY2hhaS5jb25maWcuc2hvd0RpZmY7XG5cblx0XHRcdGFzc2VydGlvblByb3RvdHlwZS5hc3NlcnQuY2FsbCh0aGlzLFxuXHRcdFx0XHRjb21wYXJlKGV4cGVjdGVkLCBhY3R1YWwpLFxuXHRcdFx0XHQnZXhwZWN0ZWQgI3thY3R9IHRvIGNvbnRhaW4gc3Vic2V0ICN7ZXhwfScsXG5cdFx0XHRcdCdleHBlY3RlZCAje2FjdH0gdG8gbm90IGNvbnRhaW4gc3Vic2V0ICN7ZXhwfScsXG5cdFx0XHRcdGV4cGVjdGVkLFxuXHRcdFx0XHRhY3R1YWwsXG5cdFx0XHRcdHNob3dEaWZmXG5cdFx0XHQpO1xuXHRcdH0pO1xuXG5cdFx0Y2hhaS5hc3NlcnQuY29udGFpblN1YnNldCA9IGZ1bmN0aW9uKHZhbCwgZXhwLCBtc2cpIHtcblx0XHRcdG5ldyBjaGFpLkFzc2VydGlvbih2YWwsIG1zZykudG8uYmUuY29udGFpblN1YnNldChleHApO1xuXHRcdH07XG5cblx0XHRmdW5jdGlvbiBjb21wYXJlKGV4cGVjdGVkLCBhY3R1YWwpIHtcblx0XHRcdGlmIChleHBlY3RlZCA9PT0gYWN0dWFsKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGVvZihhY3R1YWwpICE9PSB0eXBlb2YoZXhwZWN0ZWQpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YoZXhwZWN0ZWQpICE9PSAnb2JqZWN0JyB8fCBleHBlY3RlZCA9PT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm4gZXhwZWN0ZWQgPT09IGFjdHVhbDtcblx0XHRcdH1cblx0XHRcdGlmICghIWV4cGVjdGVkICYmICFhY3R1YWwpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShleHBlY3RlZCkpIHtcblx0XHRcdFx0aWYgKHR5cGVvZihhY3R1YWwubGVuZ3RoKSAhPT0gJ251bWJlcicpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGFhID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYWN0dWFsKTtcblx0XHRcdFx0cmV0dXJuIGV4cGVjdGVkLmV2ZXJ5KGZ1bmN0aW9uIChleHApIHtcblx0XHRcdFx0XHRyZXR1cm4gYWEuc29tZShmdW5jdGlvbiAoYWN0KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY29tcGFyZShleHAsIGFjdCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZXhwZWN0ZWQgaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0XHRcdGlmIChhY3R1YWwgaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGV4cGVjdGVkLmdldFRpbWUoKSA9PT0gYWN0dWFsLmdldFRpbWUoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIE9iamVjdC5rZXlzKGV4cGVjdGVkKS5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRcdHZhciBlbyA9IGV4cGVjdGVkW2tleV07XG5cdFx0XHRcdHZhciBhbyA9IGFjdHVhbFtrZXldO1xuXHRcdFx0XHRpZiAodHlwZW9mKGVvKSA9PT0gJ29iamVjdCcgJiYgZW8gIT09IG51bGwgJiYgYW8gIT09IG51bGwpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29tcGFyZShlbywgYW8pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0eXBlb2YoZW8pID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVvKGFvKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gYW8gPT09IGVvO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblxufSkuY2FsbCh0aGlzKTtcblxuIiwiXG5cblxuLypcbiAqIEB2ZXJzaW9uICAgIDEuNC4wXG4gKiBAZGF0ZSAgICAgICAyMDE1LTEwLTI2XG4gKiBAc3RhYmlsaXR5ICAzIC0gU3RhYmxlXG4gKiBAYXV0aG9yICAgICBMYXVyaSBSb29kZW4gKGh0dHBzOi8vZ2l0aHViLmNvbS9saXRlanMvbmF0dXJhbC1jb21wYXJlLWxpdGUpXG4gKiBAbGljZW5zZSAgICBNSVQgTGljZW5zZVxuICovXG5cblxudmFyIG5hdHVyYWxDb21wYXJlID0gZnVuY3Rpb24oYSwgYikge1xuXHR2YXIgaSwgY29kZUFcblx0LCBjb2RlQiA9IDFcblx0LCBwb3NBID0gMFxuXHQsIHBvc0IgPSAwXG5cdCwgYWxwaGFiZXQgPSBTdHJpbmcuYWxwaGFiZXRcblxuXHRmdW5jdGlvbiBnZXRDb2RlKHN0ciwgcG9zLCBjb2RlKSB7XG5cdFx0aWYgKGNvZGUpIHtcblx0XHRcdGZvciAoaSA9IHBvczsgY29kZSA9IGdldENvZGUoc3RyLCBpKSwgY29kZSA8IDc2ICYmIGNvZGUgPiA2NTspICsraTtcblx0XHRcdHJldHVybiArc3RyLnNsaWNlKHBvcyAtIDEsIGkpXG5cdFx0fVxuXHRcdGNvZGUgPSBhbHBoYWJldCAmJiBhbHBoYWJldC5pbmRleE9mKHN0ci5jaGFyQXQocG9zKSlcblx0XHRyZXR1cm4gY29kZSA+IC0xID8gY29kZSArIDc2IDogKChjb2RlID0gc3RyLmNoYXJDb2RlQXQocG9zKSB8fCAwKSwgY29kZSA8IDQ1IHx8IGNvZGUgPiAxMjcpID8gY29kZVxuXHRcdFx0OiBjb2RlIDwgNDYgPyA2NSAgICAgICAgICAgICAgIC8vIC1cblx0XHRcdDogY29kZSA8IDQ4ID8gY29kZSAtIDFcblx0XHRcdDogY29kZSA8IDU4ID8gY29kZSArIDE4ICAgICAgICAvLyAwLTlcblx0XHRcdDogY29kZSA8IDY1ID8gY29kZSAtIDExXG5cdFx0XHQ6IGNvZGUgPCA5MSA/IGNvZGUgKyAxMSAgICAgICAgLy8gQS1aXG5cdFx0XHQ6IGNvZGUgPCA5NyA/IGNvZGUgLSAzN1xuXHRcdFx0OiBjb2RlIDwgMTIzID8gY29kZSArIDUgICAgICAgIC8vIGEtelxuXHRcdFx0OiBjb2RlIC0gNjNcblx0fVxuXG5cblx0aWYgKChhKz1cIlwiKSAhPSAoYis9XCJcIikpIGZvciAoO2NvZGVCOykge1xuXHRcdGNvZGVBID0gZ2V0Q29kZShhLCBwb3NBKyspXG5cdFx0Y29kZUIgPSBnZXRDb2RlKGIsIHBvc0IrKylcblxuXHRcdGlmIChjb2RlQSA8IDc2ICYmIGNvZGVCIDwgNzYgJiYgY29kZUEgPiA2NiAmJiBjb2RlQiA+IDY2KSB7XG5cdFx0XHRjb2RlQSA9IGdldENvZGUoYSwgcG9zQSwgcG9zQSlcblx0XHRcdGNvZGVCID0gZ2V0Q29kZShiLCBwb3NCLCBwb3NBID0gaSlcblx0XHRcdHBvc0IgPSBpXG5cdFx0fVxuXG5cdFx0aWYgKGNvZGVBICE9IGNvZGVCKSByZXR1cm4gKGNvZGVBIDwgY29kZUIpID8gLTEgOiAxXG5cdH1cblx0cmV0dXJuIDBcbn1cblxudHJ5IHtcblx0bW9kdWxlLmV4cG9ydHMgPSBuYXR1cmFsQ29tcGFyZTtcbn0gY2F0Y2ggKGUpIHtcblx0U3RyaW5nLm5hdHVyYWxDb21wYXJlID0gbmF0dXJhbENvbXBhcmU7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmltcG9ydCBmcywgeyBwcm9taXNlcyBhcyBmc3AgfSBmcm9tICdmcydcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGhlJ1xuaW1wb3J0IG5hdHVyYWxDb21wYXJlIGZyb20gJ25hdHVyYWwtY29tcGFyZSdcbmltcG9ydCB0eXBlIHsgT3B0aW9uc1JlY2VpdmVkIGFzIFByZXR0eUZvcm1hdE9wdGlvbnMgfSBmcm9tICdwcmV0dHktZm9ybWF0J1xuaW1wb3J0IHtcbiAgZm9ybWF0IGFzIHByZXR0eUZvcm1hdCxcbn0gZnJvbSAncHJldHR5LWZvcm1hdCdcbmltcG9ydCB0eXBlIHsgU25hcHNob3REYXRhLCBTbmFwc2hvdFVwZGF0ZVN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0U2VyaWFsaXplcnMgfSBmcm9tICcuL3BsdWdpbnMnXG5cbi8vIFRPRE86IHJld3JpdGUgYW5kIGNsZWFuIHVwXG5cbmV4cG9ydCBjb25zdCBTTkFQU0hPVF9WRVJTSU9OID0gJzEnXG5cbmNvbnN0IHdyaXRlU25hcHNob3RWZXJzaW9uID0gKCkgPT4gYC8vIFZpdGVzdCBTbmFwc2hvdCB2JHtTTkFQU0hPVF9WRVJTSU9OfWBcblxuZXhwb3J0IGNvbnN0IHRlc3ROYW1lVG9LZXkgPSAodGVzdE5hbWU6IHN0cmluZywgY291bnQ6IG51bWJlcik6IHN0cmluZyA9PlxuICBgJHt0ZXN0TmFtZX0gJHtjb3VudH1gXG5cbmV4cG9ydCBjb25zdCBrZXlUb1Rlc3ROYW1lID0gKGtleTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgaWYgKCEvIFxcZCskLy50ZXN0KGtleSkpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdTbmFwc2hvdCBrZXlzIG11c3QgZW5kIHdpdGggYSBudW1iZXIuJylcblxuICByZXR1cm4ga2V5LnJlcGxhY2UoLyBcXGQrJC8sICcnKVxufVxuXG5leHBvcnQgY29uc3QgZ2V0U25hcHNob3REYXRhID0gKFxuICBzbmFwc2hvdFBhdGg6IHN0cmluZyxcbiAgdXBkYXRlOiBTbmFwc2hvdFVwZGF0ZVN0YXRlLFxuKToge1xuICBkYXRhOiBTbmFwc2hvdERhdGFcbiAgZGlydHk6IGJvb2xlYW5cbn0gPT4ge1xuICBjb25zdCBkYXRhID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuICBsZXQgc25hcHNob3RDb250ZW50cyA9ICcnXG4gIGxldCBkaXJ0eSA9IGZhbHNlXG5cbiAgaWYgKGZzLmV4aXN0c1N5bmMoc25hcHNob3RQYXRoKSkge1xuICAgIHRyeSB7XG4gICAgICBzbmFwc2hvdENvbnRlbnRzID0gZnMucmVhZEZpbGVTeW5jKHNuYXBzaG90UGF0aCwgJ3V0ZjgnKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBjb25zdCBwb3B1bGF0ZSA9IG5ldyBGdW5jdGlvbignZXhwb3J0cycsIHNuYXBzaG90Q29udGVudHMpXG4gICAgICBwb3B1bGF0ZShkYXRhKVxuICAgIH1cbiAgICBjYXRjaCB7fVxuICB9XG5cbiAgLy8gY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHZhbGlkYXRlU25hcHNob3RWZXJzaW9uKHNuYXBzaG90Q29udGVudHMpXG4gIGNvbnN0IGlzSW52YWxpZCA9IHNuYXBzaG90Q29udGVudHMgLy8gJiYgdmFsaWRhdGlvblJlc3VsdFxuXG4gIC8vIGlmICh1cGRhdGUgPT09ICdub25lJyAmJiBpc0ludmFsaWQpXG4gIC8vICAgdGhyb3cgdmFsaWRhdGlvblJlc3VsdFxuXG4gIGlmICgodXBkYXRlID09PSAnYWxsJyB8fCB1cGRhdGUgPT09ICduZXcnKSAmJiBpc0ludmFsaWQpXG4gICAgZGlydHkgPSB0cnVlXG5cbiAgcmV0dXJuIHsgZGF0YSwgZGlydHkgfVxufVxuXG4vLyBBZGQgZXh0cmEgbGluZSBicmVha3MgYXQgYmVnaW5uaW5nIGFuZCBlbmQgb2YgbXVsdGlsaW5lIHNuYXBzaG90XG4vLyB0byBtYWtlIHRoZSBjb250ZW50IGVhc2llciB0byByZWFkLlxuZXhwb3J0IGNvbnN0IGFkZEV4dHJhTGluZUJyZWFrcyA9IChzdHJpbmc6IHN0cmluZyk6IHN0cmluZyA9PlxuICBzdHJpbmcuaW5jbHVkZXMoJ1xcbicpID8gYFxcbiR7c3RyaW5nfVxcbmAgOiBzdHJpbmdcblxuLy8gUmVtb3ZlIGV4dHJhIGxpbmUgYnJlYWtzIGF0IGJlZ2lubmluZyBhbmQgZW5kIG9mIG11bHRpbGluZSBzbmFwc2hvdC5cbi8vIEluc3RlYWQgb2YgdHJpbSwgd2hpY2ggY2FuIHJlbW92ZSBhZGRpdGlvbmFsIG5ld2xpbmVzIG9yIHNwYWNlc1xuLy8gYXQgYmVnaW5uaW5nIG9yIGVuZCBvZiB0aGUgY29udGVudCBmcm9tIGEgY3VzdG9tIHNlcmlhbGl6ZXIuXG5leHBvcnQgY29uc3QgcmVtb3ZlRXh0cmFMaW5lQnJlYWtzID0gKHN0cmluZzogc3RyaW5nKTogc3RyaW5nID0+XG4gIHN0cmluZy5sZW5ndGggPiAyICYmIHN0cmluZy5zdGFydHNXaXRoKCdcXG4nKSAmJiBzdHJpbmcuZW5kc1dpdGgoJ1xcbicpXG4gICAgPyBzdHJpbmcuc2xpY2UoMSwgLTEpXG4gICAgOiBzdHJpbmdcblxuLy8gZXhwb3J0IGNvbnN0IHJlbW92ZUxpbmVzQmVmb3JlRXh0ZXJuYWxNYXRjaGVyVHJhcCA9IChzdGFjazogc3RyaW5nKTogc3RyaW5nID0+IHtcbi8vICAgY29uc3QgbGluZXMgPSBzdGFjay5zcGxpdCgnXFxuJylcblxuLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSArPSAxKSB7XG4vLyAgICAgLy8gSXQncyBhIGZ1bmN0aW9uIG5hbWUgc3BlY2lmaWVkIGluIGBwYWNrYWdlcy9leHBlY3Qvc3JjL2luZGV4LnRzYFxuLy8gICAgIC8vIGZvciBleHRlcm5hbCBjdXN0b20gbWF0Y2hlcnMuXG4vLyAgICAgaWYgKGxpbmVzW2ldLmluY2x1ZGVzKCdfX0VYVEVSTkFMX01BVENIRVJfVFJBUF9fJykpXG4vLyAgICAgICByZXR1cm4gbGluZXMuc2xpY2UoaSArIDEpLmpvaW4oJ1xcbicpXG4vLyAgIH1cblxuLy8gICByZXR1cm4gc3RhY2tcbi8vIH1cblxuY29uc3QgZXNjYXBlUmVnZXggPSB0cnVlXG5jb25zdCBwcmludEZ1bmN0aW9uTmFtZSA9IGZhbHNlXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemUodmFsOiB1bmtub3duLFxuICBpbmRlbnQgPSAyLFxuICBmb3JtYXRPdmVycmlkZXM6IFByZXR0eUZvcm1hdE9wdGlvbnMgPSB7fSk6IHN0cmluZyB7XG4gIHJldHVybiBub3JtYWxpemVOZXdsaW5lcyhcbiAgICBwcmV0dHlGb3JtYXQodmFsLCB7XG4gICAgICBlc2NhcGVSZWdleCxcbiAgICAgIGluZGVudCxcbiAgICAgIHBsdWdpbnM6IGdldFNlcmlhbGl6ZXJzKCksXG4gICAgICBwcmludEZ1bmN0aW9uTmFtZSxcbiAgICAgIC4uLmZvcm1hdE92ZXJyaWRlcyxcbiAgICB9KSxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWluaWZ5KHZhbDogdW5rbm93bik6IHN0cmluZyB7XG4gIHJldHVybiBwcmV0dHlGb3JtYXQodmFsLCB7XG4gICAgZXNjYXBlUmVnZXgsXG4gICAgbWluOiB0cnVlLFxuICAgIHBsdWdpbnM6IGdldFNlcmlhbGl6ZXJzKCksXG4gICAgcHJpbnRGdW5jdGlvbk5hbWUsXG4gIH0pXG59XG5cbi8vIFJlbW92ZSBkb3VibGUgcXVvdGUgbWFya3MgYW5kIHVuZXNjYXBlIGRvdWJsZSBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzLlxuZXhwb3J0IGZ1bmN0aW9uIGRlc2VyaWFsaXplU3RyaW5nKHN0cmluZ2lmaWVkOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5naWZpZWQuc2xpY2UoMSwgLTEpLnJlcGxhY2UoL1xcXFwoXCJ8XFxcXCkvZywgJyQxJylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUJhY2t0aWNrU3RyaW5nKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9gfFxcXFx8XFwkey9nLCAnXFxcXCQmJylcbn1cblxuZnVuY3Rpb24gcHJpbnRCYWNrdGlja1N0cmluZyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgXFxgJHtlc2NhcGVCYWNrdGlja1N0cmluZyhzdHIpfVxcYGBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZURpcmVjdG9yeUV4aXN0cyhmaWxlUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgZnMubWtkaXJTeW5jKHBhdGguam9pbihwYXRoLmRpcm5hbWUoZmlsZVBhdGgpKSwgeyByZWN1cnNpdmU6IHRydWUgfSlcbiAgfVxuICBjYXRjaCB7IH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTmV3bGluZXMoc3RyaW5nOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXHJcXG58XFxyL2csICdcXG4nKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2F2ZVNuYXBzaG90RmlsZShcbiAgc25hcHNob3REYXRhOiBTbmFwc2hvdERhdGEsXG4gIHNuYXBzaG90UGF0aDogc3RyaW5nLFxuKSB7XG4gIGNvbnN0IHNuYXBzaG90cyA9IE9iamVjdC5rZXlzKHNuYXBzaG90RGF0YSlcbiAgICAuc29ydChuYXR1cmFsQ29tcGFyZSlcbiAgICAubWFwKFxuICAgICAga2V5ID0+IGBleHBvcnRzWyR7cHJpbnRCYWNrdGlja1N0cmluZyhrZXkpfV0gPSAke3ByaW50QmFja3RpY2tTdHJpbmcobm9ybWFsaXplTmV3bGluZXMoc25hcHNob3REYXRhW2tleV0pKX07YCxcbiAgICApXG5cbiAgZW5zdXJlRGlyZWN0b3J5RXhpc3RzKHNuYXBzaG90UGF0aClcbiAgYXdhaXQgZnNwLndyaXRlRmlsZShcbiAgICBzbmFwc2hvdFBhdGgsXG4gICAgYCR7d3JpdGVTbmFwc2hvdFZlcnNpb24oKX1cXG5cXG4ke3NuYXBzaG90cy5qb2luKCdcXG5cXG4nKX1cXG5gLFxuICAgICd1dGYtOCcsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVFeHBlY3RlZChleHBlY3RlZD86IHN0cmluZykge1xuICBmdW5jdGlvbiBmaW5kU3RhcnRJbmRlbnQoKSB7XG4gICAgY29uc3QgbWF0Y2ggPSAvXiggKyl9XFxzKyQvbS5leGVjKGV4cGVjdGVkIHx8ICcnKVxuICAgIHJldHVybiBtYXRjaD8uWzFdPy5sZW5ndGggfHwgMFxuICB9XG5cbiAgY29uc3Qgc3RhcnRJZGVudCA9IGZpbmRTdGFydEluZGVudCgpXG5cbiAgbGV0IGV4cGVjdGVkVHJpbW1lZCA9IGV4cGVjdGVkPy50cmltKClcblxuICBpZiAoc3RhcnRJZGVudCkge1xuICAgIGV4cGVjdGVkVHJpbW1lZCA9IGV4cGVjdGVkVHJpbW1lZFxuICAgICAgPy5yZXBsYWNlKG5ldyBSZWdFeHAoYF4keycgJy5yZXBlYXQoc3RhcnRJZGVudCl9YCwgJ2dtJyksICcnKS5yZXBsYWNlKC8gK30kLywgJ30nKVxuICB9XG5cbiAgcmV0dXJuIGV4cGVjdGVkVHJpbW1lZFxufVxuXG5mdW5jdGlvbiBkZWVwTWVyZ2VBcnJheSh0YXJnZXQ6IGFueVtdID0gW10sIHNvdXJjZTogYW55W10gPSBbXSkge1xuICBjb25zdCBtZXJnZWRPdXRwdXQgPSBBcnJheS5mcm9tKHRhcmdldClcblxuICBzb3VyY2UuZm9yRWFjaCgoc291cmNlRWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gbWVyZ2VkT3V0cHV0W2luZGV4XVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0W2luZGV4XSkpIHtcbiAgICAgIG1lcmdlZE91dHB1dFtpbmRleF0gPSBkZWVwTWVyZ2VBcnJheSh0YXJnZXRbaW5kZXhdLCBzb3VyY2VFbGVtZW50KVxuICAgIH1cbiAgICBlbHNlIGlmIChpc09iamVjdCh0YXJnZXRFbGVtZW50KSkge1xuICAgICAgbWVyZ2VkT3V0cHV0W2luZGV4XSA9IGRlZXBNZXJnZVNuYXBzaG90KHRhcmdldFtpbmRleF0sIHNvdXJjZUVsZW1lbnQpXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy8gU291cmNlIGRvZXMgbm90IGV4aXN0IGluIHRhcmdldCBvciB0YXJnZXQgaXMgcHJpbWl0aXZlIGFuZCBjYW5ub3QgYmUgZGVlcCBtZXJnZWRcbiAgICAgIG1lcmdlZE91dHB1dFtpbmRleF0gPSBzb3VyY2VFbGVtZW50XG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBtZXJnZWRPdXRwdXRcbn1cblxuLyoqXG4gKiBEZWVwIG1lcmdlLCBidXQgY29uc2lkZXJzIGFzeW1tZXRyaWMgbWF0Y2hlcnMuIFVubGlrZSBiYXNlIHV0aWwncyBkZWVwIG1lcmdlLFxuICogd2lsbCBtZXJnZSBhbnkgb2JqZWN0LWxpa2UgaW5zdGFuY2UuXG4gKiBDb21wYXRpYmxlIHdpdGggSmVzdCdzIHNuYXBzaG90IG1hdGNoZXIuIFNob3VsZCBub3QgYmUgdXNlZCBvdXRzaWRlIG9mIHNuYXBzaG90LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogdG9NYXRjaFNuYXBzaG90KHtcbiAqICAgbmFtZTogZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ3RleHQnKVxuICogfSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVlcE1lcmdlU25hcHNob3QodGFyZ2V0OiBhbnksIHNvdXJjZTogYW55KTogYW55IHtcbiAgaWYgKGlzT2JqZWN0KHRhcmdldCkgJiYgaXNPYmplY3Qoc291cmNlKSkge1xuICAgIGNvbnN0IG1lcmdlZE91dHB1dCA9IHsgLi4udGFyZ2V0IH1cbiAgICBPYmplY3Qua2V5cyhzb3VyY2UpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGlzT2JqZWN0KHNvdXJjZVtrZXldKSAmJiAhc291cmNlW2tleV0uJCR0eXBlb2YpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIHRhcmdldCkpIE9iamVjdC5hc3NpZ24obWVyZ2VkT3V0cHV0LCB7IFtrZXldOiBzb3VyY2Vba2V5XSB9KVxuICAgICAgICBlbHNlIG1lcmdlZE91dHB1dFtrZXldID0gZGVlcE1lcmdlU25hcHNob3QodGFyZ2V0W2tleV0sIHNvdXJjZVtrZXldKVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2Vba2V5XSkpIHtcbiAgICAgICAgbWVyZ2VkT3V0cHV0W2tleV0gPSBkZWVwTWVyZ2VBcnJheSh0YXJnZXRba2V5XSwgc291cmNlW2tleV0pXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihtZXJnZWRPdXRwdXQsIHsgW2tleV06IHNvdXJjZVtrZXldIH0pXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBtZXJnZWRPdXRwdXRcbiAgfVxuICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkgJiYgQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgcmV0dXJuIGRlZXBNZXJnZUFycmF5KHRhcmdldCwgc291cmNlKVxuICB9XG4gIHJldHVybiB0YXJnZXRcbn1cbiIsImltcG9ydCB7IHByb21pc2VzIGFzIGZzIH0gZnJvbSAnZnMnXG5pbXBvcnQgdHlwZSBNYWdpY1N0cmluZyBmcm9tICdtYWdpYy1zdHJpbmcnXG5pbXBvcnQgeyBycGMgfSBmcm9tICcuLi8uLi8uLi9ydW50aW1lL3JwYydcbmltcG9ydCB7IGdldE9yaWdpbmFsUG9zLCBsaW5lU3BsaXRSRSwgbnVtYmVyVG9Qb3MsIHBvc1RvTnVtYmVyIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvc291cmNlLW1hcCdcbmltcG9ydCB7IGdldENhbGxMYXN0SW5kZXggfSBmcm9tICcuLi8uLi8uLi91dGlscydcblxuZXhwb3J0IGludGVyZmFjZSBJbmxpbmVTbmFwc2hvdCB7XG4gIHNuYXBzaG90OiBzdHJpbmdcbiAgZmlsZTogc3RyaW5nXG4gIGxpbmU6IG51bWJlclxuICBjb2x1bW46IG51bWJlclxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2F2ZUlubGluZVNuYXBzaG90cyhcbiAgc25hcHNob3RzOiBBcnJheTxJbmxpbmVTbmFwc2hvdD4sXG4pIHtcbiAgY29uc3QgTWFnaWNTdHJpbmcgPSAoYXdhaXQgaW1wb3J0KCdtYWdpYy1zdHJpbmcnKSkuZGVmYXVsdFxuICBjb25zdCBmaWxlcyA9IG5ldyBTZXQoc25hcHNob3RzLm1hcChpID0+IGkuZmlsZSkpXG4gIGF3YWl0IFByb21pc2UuYWxsKEFycmF5LmZyb20oZmlsZXMpLm1hcChhc3luYyhmaWxlKSA9PiB7XG4gICAgY29uc3QgbWFwID0gYXdhaXQgcnBjKCkuZ2V0U291cmNlTWFwKGZpbGUpXG4gICAgY29uc3Qgc25hcHMgPSBzbmFwc2hvdHMuZmlsdGVyKGkgPT4gaS5maWxlID09PSBmaWxlKVxuICAgIGNvbnN0IGNvZGUgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlLCAndXRmOCcpXG4gICAgY29uc3QgcyA9IG5ldyBNYWdpY1N0cmluZyhjb2RlKVxuXG4gICAgZm9yIChjb25zdCBzbmFwIG9mIHNuYXBzKSB7XG4gICAgICBjb25zdCBwb3MgPSBhd2FpdCBnZXRPcmlnaW5hbFBvcyhtYXAsIHNuYXApXG4gICAgICBjb25zdCBpbmRleCA9IHBvc1RvTnVtYmVyKGNvZGUsIHBvcyEpXG4gICAgICByZXBsYWNlSW5saW5lU25hcChjb2RlLCBzLCBpbmRleCwgc25hcC5zbmFwc2hvdClcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1lZCA9IHMudG9TdHJpbmcoKVxuICAgIGlmICh0cmFuc2Zvcm1lZCAhPT0gY29kZSlcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlLCB0cmFuc2Zvcm1lZCwgJ3V0Zi04JylcbiAgfSkpXG59XG5cbmNvbnN0IHN0YXJ0T2JqZWN0UmVnZXggPSAvKD86dG9NYXRjaElubGluZVNuYXBzaG90fHRvVGhyb3dFcnJvck1hdGNoaW5nSW5saW5lU25hcHNob3QpXFxzKlxcKFxccyooeykvbVxuXG5mdW5jdGlvbiByZXBsYWNlT2JqZWN0U25hcChjb2RlOiBzdHJpbmcsIHM6IE1hZ2ljU3RyaW5nLCBpbmRleDogbnVtYmVyLCBuZXdTbmFwOiBzdHJpbmcpIHtcbiAgY29kZSA9IGNvZGUuc2xpY2UoaW5kZXgpXG4gIGNvbnN0IHN0YXJ0TWF0Y2ggPSBzdGFydE9iamVjdFJlZ2V4LmV4ZWMoY29kZSlcbiAgaWYgKCFzdGFydE1hdGNoKVxuICAgIHJldHVybiBmYWxzZVxuXG4gIGNvZGUgPSBjb2RlLnNsaWNlKHN0YXJ0TWF0Y2guaW5kZXgpXG4gIGNvbnN0IGNoYXJJbmRleCA9IGdldENhbGxMYXN0SW5kZXgoY29kZSlcbiAgaWYgKGNoYXJJbmRleCA9PT0gbnVsbClcbiAgICByZXR1cm4gZmFsc2VcblxuICBzLmFwcGVuZExlZnQoaW5kZXggKyBzdGFydE1hdGNoLmluZGV4ICsgY2hhckluZGV4LCBgLCAke3ByZXBhcmVTbmFwU3RyaW5nKG5ld1NuYXAsIGNvZGUsIGluZGV4KX1gKVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHByZXBhcmVTbmFwU3RyaW5nKHNuYXA6IHN0cmluZywgc291cmNlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcbiAgY29uc3QgbGluZUluZGV4ID0gbnVtYmVyVG9Qb3Moc291cmNlLCBpbmRleCkubGluZVxuICBjb25zdCBsaW5lID0gc291cmNlLnNwbGl0KGxpbmVTcGxpdFJFKVtsaW5lSW5kZXggLSAxXVxuICBjb25zdCBpbmRlbnQgPSBsaW5lLm1hdGNoKC9eXFxzKi8pIVswXSB8fCAnJ1xuICBjb25zdCBpbmRlbnROZXh0ID0gaW5kZW50LmluY2x1ZGVzKCdcXHQnKSA/IGAke2luZGVudH1cXHRgIDogYCR7aW5kZW50fSAgYFxuXG4gIGNvbnN0IGxpbmVzID0gc25hcFxuICAgIC50cmltKClcbiAgICAucmVwbGFjZSgvXFxcXC9nLCAnXFxcXFxcXFwnKVxuICAgIC5yZXBsYWNlKC9cXCQvZywgJ1xcXFwkJylcbiAgICAuc3BsaXQoL1xcbi9nKVxuICAgIC5tYXAoaSA9PiBpLnRyaW1FbmQoKSlcblxuICBjb25zdCBpc09uZWxpbmUgPSBsaW5lcy5sZW5ndGggPD0gMVxuICBjb25zdCBxdW90ZSA9IGlzT25lbGluZSA/ICdcXCcnIDogJ2AnXG4gIHJldHVybiBpc09uZWxpbmVcbiAgICA/IGAnJHtsaW5lcy5qb2luKCdcXG4nKS5yZXBsYWNlKC8nL2csICdcXFxcXFwnJyl9J2BcbiAgICA6IGAke3F1b3RlfVxcbiR7bGluZXMubWFwKGkgPT4gaW5kZW50TmV4dCArIGkpLmpvaW4oJ1xcbicpLnJlcGxhY2UoL2AvZywgJ1xcXFxgJyl9XFxuJHtpbmRlbnR9JHtxdW90ZX1gXG59XG5cbmNvbnN0IHN0YXJ0UmVnZXggPSAvKD86dG9NYXRjaElubGluZVNuYXBzaG90fHRvVGhyb3dFcnJvck1hdGNoaW5nSW5saW5lU25hcHNob3QpXFxzKlxcKFxccyooWydcImBcXCldKS9tXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUlubGluZVNuYXAoY29kZTogc3RyaW5nLCBzOiBNYWdpY1N0cmluZywgaW5kZXg6IG51bWJlciwgbmV3U25hcDogc3RyaW5nKSB7XG4gIGNvbnN0IHN0YXJ0TWF0Y2ggPSBzdGFydFJlZ2V4LmV4ZWMoY29kZS5zbGljZShpbmRleCkpXG4gIGlmICghc3RhcnRNYXRjaClcbiAgICByZXR1cm4gcmVwbGFjZU9iamVjdFNuYXAoY29kZSwgcywgaW5kZXgsIG5ld1NuYXApXG5cbiAgY29uc3QgcXVvdGUgPSBzdGFydE1hdGNoWzFdXG4gIGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCArIHN0YXJ0TWF0Y2guaW5kZXghICsgc3RhcnRNYXRjaFswXS5sZW5ndGhcbiAgY29uc3Qgc25hcFN0cmluZyA9IHByZXBhcmVTbmFwU3RyaW5nKG5ld1NuYXAsIGNvZGUsIGluZGV4KVxuXG4gIGlmIChxdW90ZSA9PT0gJyknKSB7XG4gICAgcy5hcHBlbmRSaWdodChzdGFydEluZGV4IC0gMSwgc25hcFN0cmluZylcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgY29uc3QgcXVvdGVFbmRSRSA9IG5ldyBSZWdFeHAoYCg/Ol58W15cXFxcXFxcXF0pJHtxdW90ZX1gKVxuICBjb25zdCBlbmRNYXRjaCA9IHF1b3RlRW5kUkUuZXhlYyhjb2RlLnNsaWNlKHN0YXJ0SW5kZXgpKVxuICBpZiAoIWVuZE1hdGNoKVxuICAgIHJldHVybiBmYWxzZVxuICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBlbmRNYXRjaC5pbmRleCEgKyBlbmRNYXRjaFswXS5sZW5ndGhcbiAgcy5vdmVyd3JpdGUoc3RhcnRJbmRleCAtIDEsIGVuZEluZGV4LCBzbmFwU3RyaW5nKVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmNvbnN0IElOREVOVEFUSU9OX1JFR0VYID0gL14oW15cXFNcXG5dKilcXFMvbVxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwU25hcHNob3RJbmRlbnRhdGlvbihpbmxpbmVTbmFwc2hvdDogc3RyaW5nKSB7XG4gIC8vIEZpbmQgaW5kZW50YXRpb24gaWYgZXhpc3RzLlxuICBjb25zdCBtYXRjaCA9IGlubGluZVNuYXBzaG90Lm1hdGNoKElOREVOVEFUSU9OX1JFR0VYKVxuICBpZiAoIW1hdGNoIHx8ICFtYXRjaFsxXSkge1xuICAgIC8vIE5vIGluZGVudGF0aW9uLlxuICAgIHJldHVybiBpbmxpbmVTbmFwc2hvdFxuICB9XG5cbiAgY29uc3QgaW5kZW50YXRpb24gPSBtYXRjaFsxXVxuICBjb25zdCBsaW5lcyA9IGlubGluZVNuYXBzaG90LnNwbGl0KC9cXG4vZylcbiAgaWYgKGxpbmVzLmxlbmd0aCA8PSAyKSB7XG4gICAgLy8gTXVzdCBiZSBhdCBsZWFzdCAzIGxpbmVzLlxuICAgIHJldHVybiBpbmxpbmVTbmFwc2hvdFxuICB9XG5cbiAgaWYgKGxpbmVzWzBdLnRyaW0oKSAhPT0gJycgfHwgbGluZXNbbGluZXMubGVuZ3RoIC0gMV0udHJpbSgpICE9PSAnJykge1xuICAgIC8vIElmIG5vdCBibGFuayBmaXJzdCBhbmQgbGFzdCBsaW5lcywgYWJvcnQuXG4gICAgcmV0dXJuIGlubGluZVNuYXBzaG90XG4gIH1cblxuICBmb3IgKGxldCBpID0gMTsgaSA8IGxpbmVzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIGlmIChsaW5lc1tpXSAhPT0gJycpIHtcbiAgICAgIGlmIChsaW5lc1tpXS5pbmRleE9mKGluZGVudGF0aW9uKSAhPT0gMCkge1xuICAgICAgICAvLyBBbGwgbGluZXMgZXhjZXB0IGZpcnN0IGFuZCBsYXN0IHNob3VsZCBlaXRoZXIgYmUgYmxhbmsgb3IgaGF2ZSB0aGUgc2FtZVxuICAgICAgICAvLyBpbmRlbnQgYXMgdGhlIGZpcnN0IGxpbmUgKG9yIG1vcmUpLiBJZiB0aGlzIGlzbid0IHRoZSBjYXNlIHdlIGRvbid0XG4gICAgICAgIC8vIHdhbnQgdG8gdG91Y2ggdGhlIHNuYXBzaG90IGF0IGFsbC5cbiAgICAgICAgcmV0dXJuIGlubGluZVNuYXBzaG90XG4gICAgICB9XG5cbiAgICAgIGxpbmVzW2ldID0gbGluZXNbaV0uc3Vic3RyaW5nKGluZGVudGF0aW9uLmxlbmd0aClcbiAgICB9XG4gIH1cblxuICAvLyBMYXN0IGxpbmUgaXMgYSBzcGVjaWFsIGNhc2UgYmVjYXVzZSBpdCB3b24ndCBoYXZlIHRoZSBzYW1lIGluZGVudCBhcyBvdGhlcnNcbiAgLy8gYnV0IG1heSBzdGlsbCBoYXZlIGJlZW4gZ2l2ZW4gc29tZSBpbmRlbnQgdG8gbGluZSB1cC5cbiAgbGluZXNbbGluZXMubGVuZ3RoIC0gMV0gPSAnJ1xuXG4gIC8vIFJldHVybiBpbmxpbmUgc25hcHNob3QsIG5vdyBhdCBpbmRlbnQgMC5cbiAgaW5saW5lU25hcHNob3QgPSBsaW5lcy5qb2luKCdcXG4nKVxuICByZXR1cm4gaW5saW5lU25hcHNob3Rcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuaW1wb3J0IGZzIGZyb20gJ2ZzJ1xuaW1wb3J0IHR5cGUgeyBDb25maWcgfSBmcm9tICdAamVzdC90eXBlcydcbi8vIGltcG9ydCB7IGdldFN0YWNrVHJhY2VMaW5lcywgZ2V0VG9wRnJhbWUgfSBmcm9tICdqZXN0LW1lc3NhZ2UtdXRpbCdcbmltcG9ydCB0eXBlIHsgT3B0aW9uc1JlY2VpdmVkIGFzIFByZXR0eUZvcm1hdE9wdGlvbnMgfSBmcm9tICdwcmV0dHktZm9ybWF0J1xuaW1wb3J0IHR5cGUgeyBTbmFwc2hvdERhdGEsIFNuYXBzaG90TWF0Y2hPcHRpb25zLCBTbmFwc2hvdFN0YXRlT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgc2xhc2ggfSBmcm9tICcuLi8uLi8uLi91dGlscydcbmltcG9ydCB7IHBhcnNlU3RhY2t0cmFjZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3NvdXJjZS1tYXAnXG5pbXBvcnQgdHlwZSB7IElubGluZVNuYXBzaG90IH0gZnJvbSAnLi9pbmxpbmVTbmFwc2hvdCdcbmltcG9ydCB7IHNhdmVJbmxpbmVTbmFwc2hvdHMgfSBmcm9tICcuL2lubGluZVNuYXBzaG90J1xuXG5pbXBvcnQge1xuICBhZGRFeHRyYUxpbmVCcmVha3MsXG4gIGdldFNuYXBzaG90RGF0YSxcbiAga2V5VG9UZXN0TmFtZSxcbiAgcHJlcGFyZUV4cGVjdGVkLFxuICByZW1vdmVFeHRyYUxpbmVCcmVha3MsXG4gIHNhdmVTbmFwc2hvdEZpbGUsXG4gIHNlcmlhbGl6ZSxcbiAgdGVzdE5hbWVUb0tleSxcbn0gZnJvbSAnLi91dGlscydcblxuaW50ZXJmYWNlIFNuYXBzaG90UmV0dXJuT3B0aW9ucyB7XG4gIGFjdHVhbDogc3RyaW5nXG4gIGNvdW50OiBudW1iZXJcbiAgZXhwZWN0ZWQ/OiBzdHJpbmdcbiAga2V5OiBzdHJpbmdcbiAgcGFzczogYm9vbGVhblxufVxuXG5pbnRlcmZhY2UgU2F2ZVN0YXR1cyB7XG4gIGRlbGV0ZWQ6IGJvb2xlYW5cbiAgc2F2ZWQ6IGJvb2xlYW5cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU25hcHNob3RTdGF0ZSB7XG4gIHByaXZhdGUgX2NvdW50ZXJzOiBNYXA8c3RyaW5nLCBudW1iZXI+XG4gIHByaXZhdGUgX2RpcnR5OiBib29sZWFuXG4gIHByaXZhdGUgX3VwZGF0ZVNuYXBzaG90OiBDb25maWcuU25hcHNob3RVcGRhdGVTdGF0ZVxuICBwcml2YXRlIF9zbmFwc2hvdERhdGE6IFNuYXBzaG90RGF0YVxuICBwcml2YXRlIF9pbml0aWFsRGF0YTogU25hcHNob3REYXRhXG4gIHByaXZhdGUgX3NuYXBzaG90UGF0aDogc3RyaW5nXG4gIHByaXZhdGUgX2lubGluZVNuYXBzaG90czogQXJyYXk8SW5saW5lU25hcHNob3Q+XG4gIHByaXZhdGUgX3VuY2hlY2tlZEtleXM6IFNldDxzdHJpbmc+XG4gIHByaXZhdGUgX3NuYXBzaG90Rm9ybWF0OiBQcmV0dHlGb3JtYXRPcHRpb25zXG5cbiAgYWRkZWQ6IG51bWJlclxuICBleHBhbmQ6IGJvb2xlYW5cbiAgbWF0Y2hlZDogbnVtYmVyXG4gIHVubWF0Y2hlZDogbnVtYmVyXG4gIHVwZGF0ZWQ6IG51bWJlclxuXG4gIGNvbnN0cnVjdG9yKHNuYXBzaG90UGF0aDogc3RyaW5nLCBvcHRpb25zOiBTbmFwc2hvdFN0YXRlT3B0aW9ucykge1xuICAgIHRoaXMuX3NuYXBzaG90UGF0aCA9IHNuYXBzaG90UGF0aFxuICAgIGNvbnN0IHsgZGF0YSwgZGlydHkgfSA9IGdldFNuYXBzaG90RGF0YShcbiAgICAgIHRoaXMuX3NuYXBzaG90UGF0aCxcbiAgICAgIG9wdGlvbnMudXBkYXRlU25hcHNob3QsXG4gICAgKVxuICAgIHRoaXMuX2luaXRpYWxEYXRhID0gZGF0YVxuICAgIHRoaXMuX3NuYXBzaG90RGF0YSA9IGRhdGFcbiAgICB0aGlzLl9kaXJ0eSA9IGRpcnR5XG4gICAgdGhpcy5faW5saW5lU25hcHNob3RzID0gW11cbiAgICB0aGlzLl91bmNoZWNrZWRLZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyh0aGlzLl9zbmFwc2hvdERhdGEpKVxuICAgIHRoaXMuX2NvdW50ZXJzID0gbmV3IE1hcCgpXG4gICAgdGhpcy5leHBhbmQgPSBvcHRpb25zLmV4cGFuZCB8fCBmYWxzZVxuICAgIHRoaXMuYWRkZWQgPSAwXG4gICAgdGhpcy5tYXRjaGVkID0gMFxuICAgIHRoaXMudW5tYXRjaGVkID0gMFxuICAgIHRoaXMuX3VwZGF0ZVNuYXBzaG90ID0gb3B0aW9ucy51cGRhdGVTbmFwc2hvdFxuICAgIHRoaXMudXBkYXRlZCA9IDBcbiAgICB0aGlzLl9zbmFwc2hvdEZvcm1hdCA9IHtcbiAgICAgIHByaW50QmFzaWNQcm90b3R5cGU6IGZhbHNlLFxuICAgICAgLi4ub3B0aW9ucy5zbmFwc2hvdEZvcm1hdCxcbiAgICB9XG4gIH1cblxuICBtYXJrU25hcHNob3RzQXNDaGVja2VkRm9yVGVzdCh0ZXN0TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fdW5jaGVja2VkS2V5cy5mb3JFYWNoKCh1bmNoZWNrZWRLZXkpID0+IHtcbiAgICAgIGlmIChrZXlUb1Rlc3ROYW1lKHVuY2hlY2tlZEtleSkgPT09IHRlc3ROYW1lKVxuICAgICAgICB0aGlzLl91bmNoZWNrZWRLZXlzLmRlbGV0ZSh1bmNoZWNrZWRLZXkpXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgX2FkZFNuYXBzaG90KFxuICAgIGtleTogc3RyaW5nLFxuICAgIHJlY2VpdmVkU2VyaWFsaXplZDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgaXNJbmxpbmU6IGJvb2xlYW47IGVycm9yPzogRXJyb3IgfSxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5fZGlydHkgPSB0cnVlXG4gICAgaWYgKG9wdGlvbnMuaXNJbmxpbmUpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gb3B0aW9ucy5lcnJvciB8fCBuZXcgRXJyb3IoJ1Vua25vd24gZXJyb3InKVxuICAgICAgY29uc3Qgc3RhY2tzID0gcGFyc2VTdGFja3RyYWNlKGVycm9yLCB0cnVlKVxuICAgICAgc3RhY2tzLmZvckVhY2goaSA9PiBpLmZpbGUgPSBzbGFzaChpLmZpbGUpKVxuICAgICAgLy8gaW5saW5lIHNuYXBzaG90IGZ1bmN0aW9uIGlzIGNhbGxlZCBfX1ZJVEVTVF9JTkxJTkVfU05BUFNIT1RfX1xuICAgICAgLy8gaW4gaW50ZWdyYXRpb25zL3NuYXBzaG90L2NoYWkudHNcbiAgICAgIGNvbnN0IHN0YWNrSW5kZXggPSBzdGFja3MuZmluZEluZGV4KGkgPT4gaS5tZXRob2QuaW5jbHVkZXMoJ19fVklURVNUX0lOTElORV9TTkFQU0hPVF9fJykpXG4gICAgICBjb25zdCBzdGFjayA9IHN0YWNrSW5kZXggIT09IC0xID8gc3RhY2tzW3N0YWNrSW5kZXggKyAyXSA6IG51bGxcbiAgICAgIGlmICghc3RhY2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBWaXRlc3Q6IENvdWxkbid0IGluZmVyIHN0YWNrIGZyYW1lIGZvciBpbmxpbmUgc25hcHNob3QuXFxuJHtKU09OLnN0cmluZ2lmeShzdGFja3MpfWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lubGluZVNuYXBzaG90cy5wdXNoKHtcbiAgICAgICAgc25hcHNob3Q6IHJlY2VpdmVkU2VyaWFsaXplZCxcbiAgICAgICAgLi4uc3RhY2ssXG4gICAgICB9KVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuX3NuYXBzaG90RGF0YVtrZXldID0gcmVjZWl2ZWRTZXJpYWxpemVkXG4gICAgfVxuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5fc25hcHNob3REYXRhID0gdGhpcy5faW5pdGlhbERhdGFcbiAgICAvLyB0aGlzLl9pbmxpbmVTbmFwc2hvdHMgPSBbXVxuICAgIHRoaXMuX2NvdW50ZXJzID0gbmV3IE1hcCgpXG4gICAgdGhpcy5hZGRlZCA9IDBcbiAgICB0aGlzLm1hdGNoZWQgPSAwXG4gICAgdGhpcy51bm1hdGNoZWQgPSAwXG4gICAgdGhpcy51cGRhdGVkID0gMFxuICB9XG5cbiAgYXN5bmMgc2F2ZSgpOiBQcm9taXNlPFNhdmVTdGF0dXM+IHtcbiAgICBjb25zdCBoYXNFeHRlcm5hbFNuYXBzaG90cyA9IE9iamVjdC5rZXlzKHRoaXMuX3NuYXBzaG90RGF0YSkubGVuZ3RoXG4gICAgY29uc3QgaGFzSW5saW5lU25hcHNob3RzID0gdGhpcy5faW5saW5lU25hcHNob3RzLmxlbmd0aFxuICAgIGNvbnN0IGlzRW1wdHkgPSAhaGFzRXh0ZXJuYWxTbmFwc2hvdHMgJiYgIWhhc0lubGluZVNuYXBzaG90c1xuXG4gICAgY29uc3Qgc3RhdHVzOiBTYXZlU3RhdHVzID0ge1xuICAgICAgZGVsZXRlZDogZmFsc2UsXG4gICAgICBzYXZlZDogZmFsc2UsXG4gICAgfVxuXG4gICAgaWYgKCh0aGlzLl9kaXJ0eSB8fCB0aGlzLl91bmNoZWNrZWRLZXlzLnNpemUpICYmICFpc0VtcHR5KSB7XG4gICAgICBpZiAoaGFzRXh0ZXJuYWxTbmFwc2hvdHMpXG4gICAgICAgIGF3YWl0IHNhdmVTbmFwc2hvdEZpbGUodGhpcy5fc25hcHNob3REYXRhLCB0aGlzLl9zbmFwc2hvdFBhdGgpXG4gICAgICBpZiAoaGFzSW5saW5lU25hcHNob3RzKVxuICAgICAgICBhd2FpdCBzYXZlSW5saW5lU25hcHNob3RzKHRoaXMuX2lubGluZVNuYXBzaG90cylcblxuICAgICAgc3RhdHVzLnNhdmVkID0gdHJ1ZVxuICAgIH1cbiAgICBlbHNlIGlmICghaGFzRXh0ZXJuYWxTbmFwc2hvdHMgJiYgZnMuZXhpc3RzU3luYyh0aGlzLl9zbmFwc2hvdFBhdGgpKSB7XG4gICAgICBpZiAodGhpcy5fdXBkYXRlU25hcHNob3QgPT09ICdhbGwnKVxuICAgICAgICBmcy51bmxpbmtTeW5jKHRoaXMuX3NuYXBzaG90UGF0aClcblxuICAgICAgc3RhdHVzLmRlbGV0ZWQgPSB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXR1c1xuICB9XG5cbiAgZ2V0VW5jaGVja2VkQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdW5jaGVja2VkS2V5cy5zaXplIHx8IDBcbiAgfVxuXG4gIGdldFVuY2hlY2tlZEtleXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fdW5jaGVja2VkS2V5cylcbiAgfVxuXG4gIHJlbW92ZVVuY2hlY2tlZEtleXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3VwZGF0ZVNuYXBzaG90ID09PSAnYWxsJyAmJiB0aGlzLl91bmNoZWNrZWRLZXlzLnNpemUpIHtcbiAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZVxuICAgICAgdGhpcy5fdW5jaGVja2VkS2V5cy5mb3JFYWNoKGtleSA9PiBkZWxldGUgdGhpcy5fc25hcHNob3REYXRhW2tleV0pXG4gICAgICB0aGlzLl91bmNoZWNrZWRLZXlzLmNsZWFyKClcbiAgICB9XG4gIH1cblxuICBtYXRjaCh7XG4gICAgdGVzdE5hbWUsXG4gICAgcmVjZWl2ZWQsXG4gICAga2V5LFxuICAgIGlubGluZVNuYXBzaG90LFxuICAgIGlzSW5saW5lLFxuICAgIGVycm9yLFxuICB9OiBTbmFwc2hvdE1hdGNoT3B0aW9ucyk6IFNuYXBzaG90UmV0dXJuT3B0aW9ucyB7XG4gICAgdGhpcy5fY291bnRlcnMuc2V0KHRlc3ROYW1lLCAodGhpcy5fY291bnRlcnMuZ2V0KHRlc3ROYW1lKSB8fCAwKSArIDEpXG4gICAgY29uc3QgY291bnQgPSBOdW1iZXIodGhpcy5fY291bnRlcnMuZ2V0KHRlc3ROYW1lKSlcblxuICAgIGlmICgha2V5KVxuICAgICAga2V5ID0gdGVzdE5hbWVUb0tleSh0ZXN0TmFtZSwgY291bnQpXG5cbiAgICAvLyBEbyBub3QgbWFyayB0aGUgc25hcHNob3QgYXMgXCJjaGVja2VkXCIgaWYgdGhlIHNuYXBzaG90IGlzIGlubGluZSBhbmRcbiAgICAvLyB0aGVyZSdzIGFuIGV4dGVybmFsIHNuYXBzaG90LiBUaGlzIHdheSB0aGUgZXh0ZXJuYWwgc25hcHNob3QgY2FuIGJlXG4gICAgLy8gcmVtb3ZlZCB3aXRoIGAtLXVwZGF0ZVNuYXBzaG90YC5cbiAgICBpZiAoIShpc0lubGluZSAmJiB0aGlzLl9zbmFwc2hvdERhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSlcbiAgICAgIHRoaXMuX3VuY2hlY2tlZEtleXMuZGVsZXRlKGtleSlcblxuICAgIGNvbnN0IHJlY2VpdmVkU2VyaWFsaXplZCA9IGFkZEV4dHJhTGluZUJyZWFrcyhzZXJpYWxpemUocmVjZWl2ZWQsIHVuZGVmaW5lZCwgdGhpcy5fc25hcHNob3RGb3JtYXQpKVxuICAgIGNvbnN0IGV4cGVjdGVkID0gaXNJbmxpbmUgPyBpbmxpbmVTbmFwc2hvdCA6IHRoaXMuX3NuYXBzaG90RGF0YVtrZXldXG4gICAgY29uc3QgZXhwZWN0ZWRUcmltbWVkID0gcHJlcGFyZUV4cGVjdGVkKGV4cGVjdGVkKVxuICAgIGNvbnN0IHBhc3MgPSBleHBlY3RlZFRyaW1tZWQgPT09IHByZXBhcmVFeHBlY3RlZChyZWNlaXZlZFNlcmlhbGl6ZWQpXG4gICAgY29uc3QgaGFzU25hcHNob3QgPSBleHBlY3RlZCAhPT0gdW5kZWZpbmVkXG4gICAgY29uc3Qgc25hcHNob3RJc1BlcnNpc3RlZCA9IGlzSW5saW5lIHx8IGZzLmV4aXN0c1N5bmModGhpcy5fc25hcHNob3RQYXRoKVxuXG4gICAgaWYgKHBhc3MgJiYgIWlzSW5saW5lKSB7XG4gICAgICAvLyBFeGVjdXRpbmcgYSBzbmFwc2hvdCBmaWxlIGFzIEphdmFTY3JpcHQgYW5kIHdyaXRpbmcgdGhlIHN0cmluZ3MgYmFja1xuICAgICAgLy8gd2hlbiBvdGhlciBzbmFwc2hvdHMgaGF2ZSBjaGFuZ2VkIGxvc2VzIHRoZSBwcm9wZXIgZXNjYXBpbmcgZm9yIHNvbWVcbiAgICAgIC8vIGNoYXJhY3RlcnMuIFNpbmNlIHdlIGNoZWNrIGV2ZXJ5IHNuYXBzaG90IGluIGV2ZXJ5IHRlc3QsIHVzZSB0aGUgbmV3bHlcbiAgICAgIC8vIGdlbmVyYXRlZCBmb3JtYXR0ZWQgc3RyaW5nLlxuICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgb25seSByZWxldmFudCB3aGVuIGEgc25hcHNob3QgaXMgYWRkZWQgYW5kIHRoZSBkaXJ0eVxuICAgICAgLy8gZmxhZyBpcyBzZXQuXG4gICAgICB0aGlzLl9zbmFwc2hvdERhdGFba2V5XSA9IHJlY2VpdmVkU2VyaWFsaXplZFxuICAgIH1cblxuICAgIC8vIFRoZXNlIGFyZSB0aGUgY29uZGl0aW9ucyBvbiB3aGVuIHRvIHdyaXRlIHNuYXBzaG90czpcbiAgICAvLyAgKiBUaGVyZSdzIG5vIHNuYXBzaG90IGZpbGUgaW4gYSBub24tQ0kgZW52aXJvbm1lbnQuXG4gICAgLy8gICogVGhlcmUgaXMgYSBzbmFwc2hvdCBmaWxlIGFuZCB3ZSBkZWNpZGVkIHRvIHVwZGF0ZSB0aGUgc25hcHNob3QuXG4gICAgLy8gICogVGhlcmUgaXMgYSBzbmFwc2hvdCBmaWxlLCBidXQgaXQgZG9lc24ndCBoYXZlIHRoaXMgc25hcHNob3QuXG4gICAgLy8gVGhlc2UgYXJlIHRoZSBjb25kaXRpb25zIG9uIHdoZW4gbm90IHRvIHdyaXRlIHNuYXBzaG90czpcbiAgICAvLyAgKiBUaGUgdXBkYXRlIGZsYWcgaXMgc2V0IHRvICdub25lJy5cbiAgICAvLyAgKiBUaGVyZSdzIG5vIHNuYXBzaG90IGZpbGUgb3IgYSBmaWxlIHdpdGhvdXQgdGhpcyBzbmFwc2hvdCBvbiBhIENJIGVudmlyb25tZW50LlxuICAgIGlmIChcbiAgICAgIChoYXNTbmFwc2hvdCAmJiB0aGlzLl91cGRhdGVTbmFwc2hvdCA9PT0gJ2FsbCcpXG4gICAgICAgfHwgKCghaGFzU25hcHNob3QgfHwgIXNuYXBzaG90SXNQZXJzaXN0ZWQpXG4gICAgICAgICAmJiAodGhpcy5fdXBkYXRlU25hcHNob3QgPT09ICduZXcnIHx8IHRoaXMuX3VwZGF0ZVNuYXBzaG90ID09PSAnYWxsJykpXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5fdXBkYXRlU25hcHNob3QgPT09ICdhbGwnKSB7XG4gICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgIGlmIChoYXNTbmFwc2hvdClcbiAgICAgICAgICAgIHRoaXMudXBkYXRlZCsrXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5hZGRlZCsrXG5cbiAgICAgICAgICB0aGlzLl9hZGRTbmFwc2hvdChrZXksIHJlY2VpdmVkU2VyaWFsaXplZCwgeyBlcnJvciwgaXNJbmxpbmUgfSlcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1hdGNoZWQrK1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5fYWRkU25hcHNob3Qoa2V5LCByZWNlaXZlZFNlcmlhbGl6ZWQsIHsgZXJyb3IsIGlzSW5saW5lIH0pXG4gICAgICAgIHRoaXMuYWRkZWQrK1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhY3R1YWw6ICcnLFxuICAgICAgICBjb3VudCxcbiAgICAgICAgZXhwZWN0ZWQ6ICcnLFxuICAgICAgICBrZXksXG4gICAgICAgIHBhc3M6IHRydWUsXG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKCFwYXNzKSB7XG4gICAgICAgIHRoaXMudW5tYXRjaGVkKytcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhY3R1YWw6IHJlbW92ZUV4dHJhTGluZUJyZWFrcyhyZWNlaXZlZFNlcmlhbGl6ZWQpLFxuICAgICAgICAgIGNvdW50LFxuICAgICAgICAgIGV4cGVjdGVkOlxuICAgICAgICAgIGV4cGVjdGVkVHJpbW1lZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHJlbW92ZUV4dHJhTGluZUJyZWFrcyhleHBlY3RlZFRyaW1tZWQpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgcGFzczogZmFsc2UsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLm1hdGNoZWQrK1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFjdHVhbDogJycsXG4gICAgICAgICAgY291bnQsXG4gICAgICAgICAgZXhwZWN0ZWQ6ICcnLFxuICAgICAgICAgIGtleSxcbiAgICAgICAgICBwYXNzOiB0cnVlLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgcGF0aCBmcm9tICdwYXRoZSdcbmltcG9ydCB7IGV4cGVjdCB9IGZyb20gJ2NoYWknXG5pbXBvcnQgdHlwZSB7IFNuYXBzaG90UmVzdWx0LCBUZXN0IH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBycGMgfSBmcm9tICcuLi8uLi9ydW50aW1lL3JwYydcbmltcG9ydCB7IGdldE5hbWVzIH0gZnJvbSAnLi4vLi4vdXRpbHMnXG5pbXBvcnQgeyBlcXVhbHMsIGl0ZXJhYmxlRXF1YWxpdHksIHN1YnNldEVxdWFsaXR5IH0gZnJvbSAnLi4vY2hhaS9qZXN0LXV0aWxzJ1xuaW1wb3J0IHsgZGVlcE1lcmdlU25hcHNob3QgfSBmcm9tICcuL3BvcnQvdXRpbHMnXG5pbXBvcnQgU25hcHNob3RTdGF0ZSBmcm9tICcuL3BvcnQvc3RhdGUnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGV4dCB7XG4gIGZpbGU6IHN0cmluZ1xuICB0aXRsZT86IHN0cmluZ1xuICBmdWxsVGl0bGU/OiBzdHJpbmdcbn1cblxuY29uc3QgcmVzb2x2ZVNuYXBzaG90UGF0aCA9ICh0ZXN0UGF0aDogc3RyaW5nKSA9PlxuICBwYXRoLmpvaW4oXG4gICAgcGF0aC5qb2luKHBhdGguZGlybmFtZSh0ZXN0UGF0aCksICdfX3NuYXBzaG90c19fJyksXG4gICAgYCR7cGF0aC5iYXNlbmFtZSh0ZXN0UGF0aCl9LnNuYXBgLFxuICApXG5cbmV4cG9ydCBjbGFzcyBTbmFwc2hvdENsaWVudCB7XG4gIHRlc3Q6IFRlc3QgfCB1bmRlZmluZWRcbiAgdGVzdEZpbGUgPSAnJ1xuICBzbmFwc2hvdFN0YXRlOiBTbmFwc2hvdFN0YXRlIHwgdW5kZWZpbmVkXG5cbiAgc2V0VGVzdCh0ZXN0OiBUZXN0KSB7XG4gICAgdGhpcy50ZXN0ID0gdGVzdFxuXG4gICAgaWYgKHRoaXMudGVzdEZpbGUgIT09IHRoaXMudGVzdC5maWxlIS5maWxlcGF0aCkge1xuICAgICAgaWYgKHRoaXMuc25hcHNob3RTdGF0ZSlcbiAgICAgICAgdGhpcy5zYXZlU25hcCgpXG5cbiAgICAgIHRoaXMudGVzdEZpbGUgPSB0aGlzLnRlc3QhLmZpbGUhLmZpbGVwYXRoXG4gICAgICB0aGlzLnNuYXBzaG90U3RhdGUgPSBuZXcgU25hcHNob3RTdGF0ZShcbiAgICAgICAgcmVzb2x2ZVNuYXBzaG90UGF0aCh0aGlzLnRlc3RGaWxlKSxcbiAgICAgICAgcHJvY2Vzcy5fX3ZpdGVzdF93b3JrZXJfXyEuY29uZmlnLnNuYXBzaG90T3B0aW9ucyxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBjbGVhclRlc3QoKSB7XG4gICAgdGhpcy50ZXN0ID0gdW5kZWZpbmVkXG4gIH1cblxuICBhc3NlcnQocmVjZWl2ZWQ6IHVua25vd24sIG1lc3NhZ2U/OiBzdHJpbmcsIGlzSW5saW5lID0gZmFsc2UsIHByb3BlcnRpZXM/OiBvYmplY3QsIGlubGluZVNuYXBzaG90Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRlc3QpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NuYXBzaG90IGNhbm5vdCBiZSB1c2VkIG91dHNpZGUgb2YgdGVzdCcpXG5cbiAgICBpZiAodHlwZW9mIHByb3BlcnRpZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAodHlwZW9mIHJlY2VpdmVkICE9PSAnb2JqZWN0JyB8fCAhcmVjZWl2ZWQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVjZWl2ZWQgdmFsdWUgbXVzdCBiZSBhbiBvYmplY3Qgd2hlbiB0aGUgbWF0Y2hlciBoYXMgcHJvcGVydGllcycpXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhc3MgPSBlcXVhbHMocmVjZWl2ZWQsIHByb3BlcnRpZXMsIFtpdGVyYWJsZUVxdWFsaXR5LCBzdWJzZXRFcXVhbGl0eV0pXG4gICAgICAgIGlmICghcGFzcylcbiAgICAgICAgICBleHBlY3QocmVjZWl2ZWQpLmVxdWFscyhwcm9wZXJ0aWVzKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgcmVjZWl2ZWQgPSBkZWVwTWVyZ2VTbmFwc2hvdChyZWNlaXZlZCwgcHJvcGVydGllcylcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBlcnIubWVzc2FnZSA9ICdTbmFwc2hvdCBtaXNtYXRjaGVkJ1xuICAgICAgICB0aHJvdyBlcnJcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB0ZXN0TmFtZSA9IFtcbiAgICAgIC4uLmdldE5hbWVzKHRoaXMudGVzdCkuc2xpY2UoMSksXG4gICAgICAuLi4obWVzc2FnZSA/IFttZXNzYWdlXSA6IFtdKSxcbiAgICBdLmpvaW4oJyA+ICcpXG5cbiAgICBjb25zdCB7IGFjdHVhbCwgZXhwZWN0ZWQsIGtleSwgcGFzcyB9ID0gdGhpcy5zbmFwc2hvdFN0YXRlIS5tYXRjaCh7XG4gICAgICB0ZXN0TmFtZSxcbiAgICAgIHJlY2VpdmVkLFxuICAgICAgaXNJbmxpbmUsXG4gICAgICBpbmxpbmVTbmFwc2hvdCxcbiAgICB9KVxuXG4gICAgaWYgKCFwYXNzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBleHBlY3QoYWN0dWFsLnRyaW0oKSkuZXF1YWxzKGV4cGVjdGVkID8gZXhwZWN0ZWQudHJpbSgpIDogJycpXG4gICAgICB9XG4gICAgICBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICBlcnJvci5tZXNzYWdlID0gYFNuYXBzaG90IFxcYCR7a2V5IHx8ICd1bmtub3duJ31cXGAgbWlzbWF0Y2hlZGBcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlU25hcCgpIHtcbiAgICBpZiAoIXRoaXMudGVzdEZpbGUgfHwgIXRoaXMuc25hcHNob3RTdGF0ZSkgcmV0dXJuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGFja1NuYXBzaG90U3RhdGUodGhpcy50ZXN0RmlsZSwgdGhpcy5zbmFwc2hvdFN0YXRlKVxuICAgIGF3YWl0IHJwYygpLnNuYXBzaG90U2F2ZWQocmVzdWx0KVxuXG4gICAgdGhpcy50ZXN0RmlsZSA9ICcnXG4gICAgdGhpcy5zbmFwc2hvdFN0YXRlID0gdW5kZWZpbmVkXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhY2tTbmFwc2hvdFN0YXRlKGZpbGVwYXRoOiBzdHJpbmcsIHN0YXRlOiBTbmFwc2hvdFN0YXRlKTogUHJvbWlzZTxTbmFwc2hvdFJlc3VsdD4ge1xuICBjb25zdCBzbmFwc2hvdDogU25hcHNob3RSZXN1bHQgPSB7XG4gICAgZmlsZXBhdGgsXG4gICAgYWRkZWQ6IDAsXG4gICAgZmlsZURlbGV0ZWQ6IGZhbHNlLFxuICAgIG1hdGNoZWQ6IDAsXG4gICAgdW5jaGVja2VkOiAwLFxuICAgIHVuY2hlY2tlZEtleXM6IFtdLFxuICAgIHVubWF0Y2hlZDogMCxcbiAgICB1cGRhdGVkOiAwLFxuICB9XG4gIGNvbnN0IHVuY2hlY2tlZENvdW50ID0gc3RhdGUuZ2V0VW5jaGVja2VkQ291bnQoKVxuICBjb25zdCB1bmNoZWNrZWRLZXlzID0gc3RhdGUuZ2V0VW5jaGVja2VkS2V5cygpXG4gIGlmICh1bmNoZWNrZWRDb3VudClcbiAgICBzdGF0ZS5yZW1vdmVVbmNoZWNrZWRLZXlzKClcblxuICBjb25zdCBzdGF0dXMgPSBhd2FpdCBzdGF0ZS5zYXZlKClcbiAgc25hcHNob3QuZmlsZURlbGV0ZWQgPSBzdGF0dXMuZGVsZXRlZFxuICBzbmFwc2hvdC5hZGRlZCA9IHN0YXRlLmFkZGVkXG4gIHNuYXBzaG90Lm1hdGNoZWQgPSBzdGF0ZS5tYXRjaGVkXG4gIHNuYXBzaG90LnVubWF0Y2hlZCA9IHN0YXRlLnVubWF0Y2hlZFxuICBzbmFwc2hvdC51cGRhdGVkID0gc3RhdGUudXBkYXRlZFxuICBzbmFwc2hvdC51bmNoZWNrZWQgPSAhc3RhdHVzLmRlbGV0ZWQgPyB1bmNoZWNrZWRDb3VudCA6IDBcbiAgc25hcHNob3QudW5jaGVja2VkS2V5cyA9IEFycmF5LmZyb20odW5jaGVja2VkS2V5cylcblxuICByZXR1cm4gc25hcHNob3Rcbn1cbiIsImltcG9ydCB0eXBlIHsgQ2hhaVBsdWdpbiB9IGZyb20gJy4uL2NoYWkvdHlwZXMnXG5pbXBvcnQgeyBTbmFwc2hvdENsaWVudCB9IGZyb20gJy4vY2xpZW50J1xuaW1wb3J0IHsgc3RyaXBTbmFwc2hvdEluZGVudGF0aW9uIH0gZnJvbSAnLi9wb3J0L2lubGluZVNuYXBzaG90J1xuXG5sZXQgX2NsaWVudDogU25hcHNob3RDbGllbnRcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNuYXBzaG90Q2xpZW50KCk6IFNuYXBzaG90Q2xpZW50IHtcbiAgaWYgKCFfY2xpZW50KVxuICAgIF9jbGllbnQgPSBuZXcgU25hcHNob3RDbGllbnQoKVxuICByZXR1cm4gX2NsaWVudFxufVxuXG5jb25zdCBnZXRFcnJvclN0cmluZyA9IChleHBlY3RlZDogKCkgPT4gdm9pZCkgPT4ge1xuICB0cnkge1xuICAgIGV4cGVjdGVkKClcbiAgfVxuICBjYXRjaCAoZSkge1xuICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpXG4gICAgICByZXR1cm4gZS5tZXNzYWdlXG5cbiAgICByZXR1cm4gZVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdzbmFwc2hvdCBmdW5jdGlvbiBkaWRuXFwndCB0aHJldycpXG59XG5cbmV4cG9ydCBjb25zdCBTbmFwc2hvdFBsdWdpbjogQ2hhaVBsdWdpbiA9IChjaGFpLCB1dGlscykgPT4ge1xuICBmb3IgKGNvbnN0IGtleSBvZiBbJ21hdGNoU25hcHNob3QnLCAndG9NYXRjaFNuYXBzaG90J10pIHtcbiAgICB1dGlscy5hZGRNZXRob2QoXG4gICAgICBjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUsXG4gICAgICBrZXksXG4gICAgICBmdW5jdGlvbih0aGlzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcHJvcGVydGllcz86IG9iamVjdCwgbWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9IHV0aWxzLmZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAgIGlmICh0eXBlb2YgcHJvcGVydGllcyA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIG1lc3NhZ2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgbWVzc2FnZSA9IHByb3BlcnRpZXNcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgICAgZ2V0U25hcHNob3RDbGllbnQoKS5hc3NlcnQoZXhwZWN0ZWQsIG1lc3NhZ2UsIGZhbHNlLCBwcm9wZXJ0aWVzKVxuICAgICAgfSxcbiAgICApXG4gIH1cbiAgdXRpbHMuYWRkTWV0aG9kKFxuICAgIGNoYWkuQXNzZXJ0aW9uLnByb3RvdHlwZSxcbiAgICAndG9NYXRjaElubGluZVNuYXBzaG90JyxcbiAgICBmdW5jdGlvbiBfX1ZJVEVTVF9JTkxJTkVfU05BUFNIT1RfXyh0aGlzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcHJvcGVydGllcz86IG9iamVjdCwgaW5saW5lU25hcHNob3Q/OiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0gdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgIGlmICh0eXBlb2YgcHJvcGVydGllcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbWVzc2FnZSA9IGlubGluZVNuYXBzaG90XG4gICAgICAgIGlubGluZVNuYXBzaG90ID0gcHJvcGVydGllc1xuICAgICAgICBwcm9wZXJ0aWVzID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICBpZiAoaW5saW5lU25hcHNob3QpXG4gICAgICAgIGlubGluZVNuYXBzaG90ID0gc3RyaXBTbmFwc2hvdEluZGVudGF0aW9uKGlubGluZVNuYXBzaG90KVxuICAgICAgZ2V0U25hcHNob3RDbGllbnQoKS5hc3NlcnQoZXhwZWN0ZWQsIG1lc3NhZ2UsIHRydWUsIHByb3BlcnRpZXMsIGlubGluZVNuYXBzaG90KVxuICAgIH0sXG4gIClcbiAgdXRpbHMuYWRkTWV0aG9kKFxuICAgIGNoYWkuQXNzZXJ0aW9uLnByb3RvdHlwZSxcbiAgICAndG9UaHJvd0Vycm9yTWF0Y2hpbmdTbmFwc2hvdCcsXG4gICAgZnVuY3Rpb24odGhpczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0gdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgIGdldFNuYXBzaG90Q2xpZW50KCkuYXNzZXJ0KGdldEVycm9yU3RyaW5nKGV4cGVjdGVkKSwgbWVzc2FnZSlcbiAgICB9LFxuICApXG4gIHV0aWxzLmFkZE1ldGhvZChcbiAgICBjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUsXG4gICAgJ3RvVGhyb3dFcnJvck1hdGNoaW5nSW5saW5lU25hcHNob3QnLFxuICAgIGZ1bmN0aW9uIF9fVklURVNUX0lOTElORV9TTkFQU0hPVF9fKHRoaXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBpbmxpbmVTbmFwc2hvdDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0gdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgIGdldFNuYXBzaG90Q2xpZW50KCkuYXNzZXJ0KGdldEVycm9yU3RyaW5nKGV4cGVjdGVkKSwgbWVzc2FnZSwgdHJ1ZSwgdW5kZWZpbmVkLCBpbmxpbmVTbmFwc2hvdClcbiAgICB9LFxuICApXG59XG4iLCIvLyB3ZSBhcmUgdXNpbmcgb25seSB0aGUgb25lcyBuZWVkZWQgYnkgQHRlc3RpbmctbGlicmFyeS9qZXN0LWRvbVxuLy8gaWYgeW91IG5lZWQgbW9yZSwganVzdCBhc2tcblxuaW1wb3J0IGMgZnJvbSAncGljb2NvbG9ycydcbmltcG9ydCB0eXBlIHsgRm9ybWF0dGVyIH0gZnJvbSAncGljb2NvbG9ycy90eXBlcydcbmltcG9ydCB7IGZvcm1hdCBhcyBwcmV0dHlGb3JtYXQsIHBsdWdpbnMgYXMgcHJldHR5Rm9ybWF0UGx1Z2lucyB9IGZyb20gJ3ByZXR0eS1mb3JtYXQnXG5pbXBvcnQgeyB1bmlmaWVkRGlmZiB9IGZyb20gJy4uLy4uL25vZGUvcmVwb3J0ZXJzL3JlbmRlcmVycy9kaWZmJ1xuXG5leHBvcnQgY29uc3QgRVhQRUNURURfQ09MT1IgPSBjLmdyZWVuXG5leHBvcnQgY29uc3QgUkVDRUlWRURfQ09MT1IgPSBjLnJlZFxuZXhwb3J0IGNvbnN0IElOVkVSVEVEX0NPTE9SID0gYy5pbnZlcnNlXG5leHBvcnQgY29uc3QgQk9MRF9XRUlHSFQgPSBjLmJvbGRcbmV4cG9ydCBjb25zdCBESU1fQ09MT1IgPSBjLmRpbVxuXG5jb25zdCB7XG4gIEFzeW1tZXRyaWNNYXRjaGVyLFxuICBET01Db2xsZWN0aW9uLFxuICBET01FbGVtZW50LFxuICBJbW11dGFibGUsXG4gIFJlYWN0RWxlbWVudCxcbiAgUmVhY3RUZXN0Q29tcG9uZW50LFxufSA9IHByZXR0eUZvcm1hdFBsdWdpbnNcblxuY29uc3QgUExVR0lOUyA9IFtcbiAgUmVhY3RUZXN0Q29tcG9uZW50LFxuICBSZWFjdEVsZW1lbnQsXG4gIERPTUVsZW1lbnQsXG4gIERPTUNvbGxlY3Rpb24sXG4gIEltbXV0YWJsZSxcbiAgQXN5bW1ldHJpY01hdGNoZXIsXG5dXG5cbmV4cG9ydCBpbnRlcmZhY2UgTWF0Y2hlckhpbnRPcHRpb25zIHtcbiAgY29tbWVudD86IHN0cmluZ1xuICBleHBlY3RlZENvbG9yPzogRm9ybWF0dGVyXG4gIGlzRGlyZWN0RXhwZWN0Q2FsbD86IGJvb2xlYW5cbiAgaXNOb3Q/OiBib29sZWFuXG4gIHByb21pc2U/OiBzdHJpbmdcbiAgcmVjZWl2ZWRDb2xvcj86IEZvcm1hdHRlclxuICBzZWNvbmRBcmd1bWVudD86IHN0cmluZ1xuICBzZWNvbmRBcmd1bWVudENvbG9yPzogRm9ybWF0dGVyXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaGVySGludChcbiAgbWF0Y2hlck5hbWU6IHN0cmluZyxcbiAgcmVjZWl2ZWQgPSAncmVjZWl2ZWQnLFxuICBleHBlY3RlZCA9ICdleHBlY3RlZCcsXG4gIG9wdGlvbnM6IE1hdGNoZXJIaW50T3B0aW9ucyA9IHt9LFxuKSB7XG4gIGNvbnN0IHtcbiAgICBjb21tZW50ID0gJycsXG4gICAgZXhwZWN0ZWRDb2xvciA9IEVYUEVDVEVEX0NPTE9SLFxuICAgIGlzRGlyZWN0RXhwZWN0Q2FsbCA9IGZhbHNlLCAvLyBzZWVtcyByZWR1bmRhbnQgd2l0aCByZWNlaXZlZCA9PT0gJydcbiAgICBpc05vdCA9IGZhbHNlLFxuICAgIHByb21pc2UgPSAnJyxcbiAgICByZWNlaXZlZENvbG9yID0gUkVDRUlWRURfQ09MT1IsXG4gICAgc2Vjb25kQXJndW1lbnQgPSAnJyxcbiAgICBzZWNvbmRBcmd1bWVudENvbG9yID0gRVhQRUNURURfQ09MT1IsXG4gIH0gPSBvcHRpb25zXG4gIGxldCBoaW50ID0gJydcbiAgbGV0IGRpbVN0cmluZyA9ICdleHBlY3QnIC8vIGNvbmNhdGVuYXRlIGFkamFjZW50IGRpbSBzdWJzdHJpbmdzXG5cbiAgaWYgKCFpc0RpcmVjdEV4cGVjdENhbGwgJiYgcmVjZWl2ZWQgIT09ICcnKSB7XG4gICAgaGludCArPSBESU1fQ09MT1IoYCR7ZGltU3RyaW5nfShgKSArIHJlY2VpdmVkQ29sb3IocmVjZWl2ZWQpXG4gICAgZGltU3RyaW5nID0gJyknXG4gIH1cblxuICBpZiAocHJvbWlzZSAhPT0gJycpIHtcbiAgICBoaW50ICs9IERJTV9DT0xPUihgJHtkaW1TdHJpbmd9LmApICsgcHJvbWlzZVxuICAgIGRpbVN0cmluZyA9ICcnXG4gIH1cblxuICBpZiAoaXNOb3QpIHtcbiAgICBoaW50ICs9IGAke0RJTV9DT0xPUihgJHtkaW1TdHJpbmd9LmApfW5vdGBcbiAgICBkaW1TdHJpbmcgPSAnJ1xuICB9XG5cbiAgaWYgKG1hdGNoZXJOYW1lLmluY2x1ZGVzKCcuJykpIHtcbiAgICAvLyBPbGQgZm9ybWF0OiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSxcbiAgICAvLyBlc3BlY2lhbGx5IHdpdGhvdXQgcHJvbWlzZSBvciBpc05vdCBvcHRpb25zXG4gICAgZGltU3RyaW5nICs9IG1hdGNoZXJOYW1lXG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gTmV3IGZvcm1hdDogb21pdCBwZXJpb2QgZnJvbSBtYXRjaGVyTmFtZSBhcmdcbiAgICBoaW50ICs9IERJTV9DT0xPUihgJHtkaW1TdHJpbmd9LmApICsgbWF0Y2hlck5hbWVcbiAgICBkaW1TdHJpbmcgPSAnJ1xuICB9XG5cbiAgaWYgKGV4cGVjdGVkID09PSAnJykge1xuICAgIGRpbVN0cmluZyArPSAnKCknXG4gIH1cbiAgZWxzZSB7XG4gICAgaGludCArPSBESU1fQ09MT1IoYCR7ZGltU3RyaW5nfShgKSArIGV4cGVjdGVkQ29sb3IoZXhwZWN0ZWQpXG4gICAgaWYgKHNlY29uZEFyZ3VtZW50KVxuICAgICAgaGludCArPSBESU1fQ09MT1IoJywgJykgKyBzZWNvbmRBcmd1bWVudENvbG9yKHNlY29uZEFyZ3VtZW50KVxuICAgIGRpbVN0cmluZyA9ICcpJ1xuICB9XG5cbiAgaWYgKGNvbW1lbnQgIT09ICcnKVxuICAgIGRpbVN0cmluZyArPSBgIC8vICR7Y29tbWVudH1gXG5cbiAgaWYgKGRpbVN0cmluZyAhPT0gJycpXG4gICAgaGludCArPSBESU1fQ09MT1IoZGltU3RyaW5nKVxuXG4gIHJldHVybiBoaW50XG59XG5cbmNvbnN0IFNQQUNFX1NZTUJPTCA9ICdcXHV7MDBCN30nIC8vIG1pZGRsZSBkb3RcblxuLy8gSW5zdGVhZCBvZiBpbnZlcnNlIGhpZ2hsaWdodCB3aGljaCBub3cgaW1wbGllcyBhIGNoYW5nZSxcbi8vIHJlcGxhY2UgY29tbW9uIHNwYWNlcyB3aXRoIG1pZGRsZSBkb3QgYXQgdGhlIGVuZCBvZiBhbnkgbGluZS5cbmNvbnN0IHJlcGxhY2VUcmFpbGluZ1NwYWNlcyA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgdGV4dC5yZXBsYWNlKC9cXHMrJC9nbSwgc3BhY2VzID0+IFNQQUNFX1NZTUJPTC5yZXBlYXQoc3BhY2VzLmxlbmd0aCkpXG5cbmV4cG9ydCBjb25zdCBzdHJpbmdpZnkgPSAob2JqZWN0OiB1bmtub3duLCBtYXhEZXB0aCA9IDEwKTogc3RyaW5nID0+IHtcbiAgY29uc3QgTUFYX0xFTkdUSCA9IDEwMDAwXG4gIGxldCByZXN1bHRcblxuICB0cnkge1xuICAgIHJlc3VsdCA9IHByZXR0eUZvcm1hdChvYmplY3QsIHtcbiAgICAgIG1heERlcHRoLFxuICAgICAgLy8gbWluOiB0cnVlLFxuICAgICAgcGx1Z2luczogUExVR0lOUyxcbiAgICB9KVxuICB9XG4gIGNhdGNoIHtcbiAgICByZXN1bHQgPSBwcmV0dHlGb3JtYXQob2JqZWN0LCB7XG4gICAgICBjYWxsVG9KU09OOiBmYWxzZSxcbiAgICAgIG1heERlcHRoLFxuICAgICAgLy8gbWluOiB0cnVlLFxuICAgICAgcGx1Z2luczogUExVR0lOUyxcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPj0gTUFYX0xFTkdUSCAmJiBtYXhEZXB0aCA+IDFcbiAgICA/IHN0cmluZ2lmeShvYmplY3QsIE1hdGguZmxvb3IobWF4RGVwdGggLyAyKSlcbiAgICA6IHJlc3VsdFxufVxuXG5leHBvcnQgY29uc3QgcHJpbnRSZWNlaXZlZCA9IChvYmplY3Q6IHVua25vd24pOiBzdHJpbmcgPT5cbiAgUkVDRUlWRURfQ09MT1IocmVwbGFjZVRyYWlsaW5nU3BhY2VzKHN0cmluZ2lmeShvYmplY3QpKSlcbmV4cG9ydCBjb25zdCBwcmludEV4cGVjdGVkID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+XG4gIEVYUEVDVEVEX0NPTE9SKHJlcGxhY2VUcmFpbGluZ1NwYWNlcyhzdHJpbmdpZnkodmFsdWUpKSlcblxuZXhwb3J0IGludGVyZmFjZSBEaWZmT3B0aW9ucyB7XG4gIGFBbm5vdGF0aW9uPzogc3RyaW5nXG4gIGFDb2xvcj86IEZvcm1hdHRlclxuICBhSW5kaWNhdG9yPzogc3RyaW5nXG4gIGJBbm5vdGF0aW9uPzogc3RyaW5nXG4gIGJDb2xvcj86IEZvcm1hdHRlclxuICBiSW5kaWNhdG9yPzogc3RyaW5nXG4gIGNoYW5nZUNvbG9yPzogRm9ybWF0dGVyXG4gIGNoYW5nZUxpbmVUcmFpbGluZ1NwYWNlQ29sb3I/OiBGb3JtYXR0ZXJcbiAgY29tbW9uQ29sb3I/OiBGb3JtYXR0ZXJcbiAgY29tbW9uSW5kaWNhdG9yPzogc3RyaW5nXG4gIGNvbW1vbkxpbmVUcmFpbGluZ1NwYWNlQ29sb3I/OiBGb3JtYXR0ZXJcbiAgY29udGV4dExpbmVzPzogbnVtYmVyXG4gIGVtcHR5Rmlyc3RPckxhc3RMaW5lUGxhY2Vob2xkZXI/OiBzdHJpbmdcbiAgZXhwYW5kPzogYm9vbGVhblxuICBpbmNsdWRlQ2hhbmdlQ291bnRzPzogYm9vbGVhblxuICBvbWl0QW5ub3RhdGlvbkxpbmVzPzogYm9vbGVhblxuICBwYXRjaENvbG9yPzogRm9ybWF0dGVyXG4gIC8vIHByZXR0eS1mb3JtYXQgdHlwZVxuICBjb21wYXJlS2V5cz86IGFueVxufVxuXG4vLyBUT0RPOiBkbyBzb21ldGhpbmcgd2l0aCBvcHRpb25zXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5leHBvcnQgZnVuY3Rpb24gZGlmZihhOiBhbnksIGI6IGFueSwgb3B0aW9ucz86IERpZmZPcHRpb25zKSB7XG4gIHJldHVybiB1bmlmaWVkRGlmZihzdHJpbmdpZnkoYSksIHN0cmluZ2lmeShiKSlcbn1cbiIsImltcG9ydCBjaGFpLCB7IHV0aWwgfSBmcm9tICdjaGFpJ1xuaW1wb3J0IHsgZ2V0U3RhdGUgfSBmcm9tICcuL2plc3QtZXhwZWN0J1xuXG5pbXBvcnQgKiBhcyBtYXRjaGVyVXRpbHMgZnJvbSAnLi9qZXN0LW1hdGNoZXItdXRpbHMnXG5cbmltcG9ydCB7XG4gIGVxdWFscyxcbiAgaXRlcmFibGVFcXVhbGl0eSxcbiAgc3Vic2V0RXF1YWxpdHksXG59IGZyb20gJy4vamVzdC11dGlscydcbmltcG9ydCB0eXBlIHtcbiAgQ2hhaVBsdWdpbixcbiAgTWF0Y2hlclN0YXRlLFxuICBNYXRjaGVyc09iamVjdCxcbiAgU3luY0V4cGVjdGF0aW9uUmVzdWx0LFxufSBmcm9tICcuL3R5cGVzJ1xuXG5jb25zdCBpc0FzeW5jRnVuY3Rpb24gPSAoZm46IHVua25vd24pID0+XG4gIHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyAmJiAoZm4gYXMgYW55KVtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnQXN5bmNGdW5jdGlvbidcblxuY29uc3QgZ2V0TWF0Y2hlclN0YXRlID0gKGFzc2VydGlvbjogQ2hhaS5Bc3NlcnRpb25TdGF0aWMgJiBDaGFpLkFzc2VydGlvbikgPT4ge1xuICBjb25zdCBvYmogPSBhc3NlcnRpb24uX29ialxuICBjb25zdCBpc05vdCA9IHV0aWwuZmxhZyhhc3NlcnRpb24sICduZWdhdGUnKSBhcyBib29sZWFuXG4gIGNvbnN0IHByb21pc2UgPSB1dGlsLmZsYWcoYXNzZXJ0aW9uLCAncHJvbWlzZScpIHx8ICcnXG4gIGNvbnN0IGplc3RVdGlscyA9IHtcbiAgICAuLi5tYXRjaGVyVXRpbHMsXG4gICAgaXRlcmFibGVFcXVhbGl0eSxcbiAgICBzdWJzZXRFcXVhbGl0eSxcbiAgfVxuXG4gIGNvbnN0IG1hdGNoZXJTdGF0ZTogTWF0Y2hlclN0YXRlID0ge1xuICAgIC4uLmdldFN0YXRlKCksXG4gICAgaXNOb3QsXG4gICAgdXRpbHM6IGplc3RVdGlscyxcbiAgICBwcm9taXNlLFxuICAgIGVxdWFscyxcbiAgICAvLyBuZWVkZWQgZm9yIGJ1aWx0LWluIGplc3Qtc25hcHNob3RzLCBidXQgd2UgZG9uJ3QgdXNlIGl0XG4gICAgc3VwcHJlc3NlZEVycm9yczogW10sXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXRlOiBtYXRjaGVyU3RhdGUsXG4gICAgaXNOb3QsXG4gICAgb2JqLFxuICB9XG59XG5cbmNsYXNzIEplc3RFeHRlbmRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBwdWJsaWMgYWN0dWFsPzogYW55LCBwdWJsaWMgZXhwZWN0ZWQ/OiBhbnkpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICB9XG59XG5cbmZ1bmN0aW9uIEplc3RFeHRlbmRQbHVnaW4oZXhwZWN0czogTWF0Y2hlcnNPYmplY3QpOiBDaGFpUGx1Z2luIHtcbiAgcmV0dXJuIChjLCB1dGlscykgPT4ge1xuICAgIE9iamVjdC5lbnRyaWVzKGV4cGVjdHMpLmZvckVhY2goKFtleHBlY3RBc3NlcnRpb25OYW1lLCBleHBlY3RBc3NlcnRpb25dKSA9PiB7XG4gICAgICBmdW5jdGlvbiBleHBlY3RTeW5jV3JhcHBlcih0aGlzOiBDaGFpLkFzc2VydGlvblN0YXRpYyAmIENoYWkuQXNzZXJ0aW9uLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgICAgICBjb25zdCB7IHN0YXRlLCBpc05vdCwgb2JqIH0gPSBnZXRNYXRjaGVyU3RhdGUodGhpcylcblxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGFyZ3Mgd2FudGluZyB0dXBsZVxuICAgICAgICBjb25zdCB7IHBhc3MsIG1lc3NhZ2UsIGFjdHVhbCwgZXhwZWN0ZWQgfSA9IGV4cGVjdEFzc2VydGlvbi5jYWxsKHN0YXRlLCBvYmosIC4uLmFyZ3MpIGFzIFN5bmNFeHBlY3RhdGlvblJlc3VsdFxuXG4gICAgICAgIGlmICgocGFzcyAmJiBpc05vdCkgfHwgKCFwYXNzICYmICFpc05vdCkpXG4gICAgICAgICAgdGhyb3cgbmV3IEplc3RFeHRlbmRFcnJvcihtZXNzYWdlKCksIGFjdHVhbCwgZXhwZWN0ZWQpXG4gICAgICB9XG5cbiAgICAgIGFzeW5jIGZ1bmN0aW9uIGV4cGVjdEFzeW5jV3JhcHBlcih0aGlzOiBDaGFpLkFzc2VydGlvblN0YXRpYyAmIENoYWkuQXNzZXJ0aW9uLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgICAgICBjb25zdCB7IHN0YXRlLCBpc05vdCwgb2JqIH0gPSBnZXRNYXRjaGVyU3RhdGUodGhpcylcblxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGFyZ3Mgd2FudGluZyB0dXBsZVxuICAgICAgICBjb25zdCB7IHBhc3MsIG1lc3NhZ2UsIGFjdHVhbCwgZXhwZWN0ZWQgfSA9IGF3YWl0IGV4cGVjdEFzc2VydGlvbi5jYWxsKHN0YXRlLCBvYmosIC4uLmFyZ3MpIGFzIFN5bmNFeHBlY3RhdGlvblJlc3VsdFxuXG4gICAgICAgIGlmICgocGFzcyAmJiBpc05vdCkgfHwgKCFwYXNzICYmICFpc05vdCkpXG4gICAgICAgICAgdGhyb3cgbmV3IEplc3RFeHRlbmRFcnJvcihtZXNzYWdlKCksIGFjdHVhbCwgZXhwZWN0ZWQpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV4cGVjdEFzc2VydGlvbldyYXBwZXIgPSBpc0FzeW5jRnVuY3Rpb24oZXhwZWN0QXNzZXJ0aW9uKSA/IGV4cGVjdEFzeW5jV3JhcHBlciA6IGV4cGVjdFN5bmNXcmFwcGVyXG5cbiAgICAgIHV0aWxzLmFkZE1ldGhvZChjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUsIGV4cGVjdEFzc2VydGlvbk5hbWUsIGV4cGVjdEFzc2VydGlvbldyYXBwZXIpXG4gICAgfSlcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgSmVzdEV4dGVuZDogQ2hhaVBsdWdpbiA9IChjaGFpLCB1dGlscykgPT4ge1xuICB1dGlscy5hZGRNZXRob2QoY2hhaS5leHBlY3QsICdleHRlbmQnLCAoZXhwZWN0czogTWF0Y2hlcnNPYmplY3QpID0+IHtcbiAgICBjaGFpLnVzZShKZXN0RXh0ZW5kUGx1Z2luKGV4cGVjdHMpKVxuICB9KVxufVxuIiwiaW1wb3J0ICogYXMgbWF0Y2hlclV0aWxzIGZyb20gJy4vamVzdC1tYXRjaGVyLXV0aWxzJ1xuXG5pbXBvcnQgeyBlcXVhbHMsIGlzQSB9IGZyb20gJy4vamVzdC11dGlscydcbmltcG9ydCB0eXBlIHsgQ2hhaVBsdWdpbiwgTWF0Y2hlclN0YXRlIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGludGVyZmFjZSBBc3ltbWV0cmljTWF0Y2hlckludGVyZmFjZSB7XG4gIGFzeW1tZXRyaWNNYXRjaChvdGhlcjogdW5rbm93bik6IGJvb2xlYW5cbiAgdG9TdHJpbmcoKTogc3RyaW5nXG4gIGdldEV4cGVjdGVkVHlwZT8oKTogc3RyaW5nXG4gIHRvQXN5bW1ldHJpY01hdGNoZXI/KCk6IHN0cmluZ1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXN5bW1ldHJpY01hdGNoZXI8XG4gIFQsXG4gIFN0YXRlIGV4dGVuZHMgTWF0Y2hlclN0YXRlID0gTWF0Y2hlclN0YXRlLFxuPiBpbXBsZW1lbnRzIEFzeW1tZXRyaWNNYXRjaGVySW50ZXJmYWNlIHtcbiAgJCR0eXBlb2YgPSBTeW1ib2wuZm9yKCdqZXN0LmFzeW1tZXRyaWNNYXRjaGVyJylcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgc2FtcGxlOiBULCBwcm90ZWN0ZWQgaW52ZXJzZSA9IGZhbHNlKSB7fVxuXG4gIHByb3RlY3RlZCBnZXRNYXRjaGVyQ29udGV4dCgpOiBTdGF0ZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVxdWFscyxcbiAgICAgIGlzTm90OiB0aGlzLmludmVyc2UsXG4gICAgICB1dGlsczogbWF0Y2hlclV0aWxzLFxuICAgIH0gYXMgYW55XG4gIH1cblxuICBhYnN0cmFjdCBhc3ltbWV0cmljTWF0Y2gob3RoZXI6IHVua25vd24pOiBib29sZWFuXG4gIGFic3RyYWN0IHRvU3RyaW5nKCk6IHN0cmluZ1xuICBnZXRFeHBlY3RlZFR5cGU/KCk6IHN0cmluZ1xuICB0b0FzeW1tZXRyaWNNYXRjaGVyPygpOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIFN0cmluZ0NvbnRhaW5pbmcgZXh0ZW5kcyBBc3ltbWV0cmljTWF0Y2hlcjxzdHJpbmc+IHtcbiAgY29uc3RydWN0b3Ioc2FtcGxlOiBzdHJpbmcsIGludmVyc2UgPSBmYWxzZSkge1xuICAgIGlmICghaXNBKCdTdHJpbmcnLCBzYW1wbGUpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBpcyBub3QgYSBzdHJpbmcnKVxuXG4gICAgc3VwZXIoc2FtcGxlLCBpbnZlcnNlKVxuICB9XG5cbiAgYXN5bW1ldHJpY01hdGNoKG90aGVyOiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXN1bHQgPSBpc0EoJ1N0cmluZycsIG90aGVyKSAmJiBvdGhlci5pbmNsdWRlcyh0aGlzLnNhbXBsZSlcblxuICAgIHJldHVybiB0aGlzLmludmVyc2UgPyAhcmVzdWx0IDogcmVzdWx0XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYFN0cmluZyR7dGhpcy5pbnZlcnNlID8gJ05vdCcgOiAnJ31Db250YWluaW5nYFxuICB9XG5cbiAgZ2V0RXhwZWN0ZWRUeXBlKCkge1xuICAgIHJldHVybiAnc3RyaW5nJ1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBbnl0aGluZyBleHRlbmRzIEFzeW1tZXRyaWNNYXRjaGVyPHZvaWQ+IHtcbiAgYXN5bW1ldHJpY01hdGNoKG90aGVyOiB1bmtub3duKSB7XG4gICAgcmV0dXJuIG90aGVyICE9IG51bGxcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnQW55dGhpbmcnXG4gIH1cblxuICB0b0FzeW1tZXRyaWNNYXRjaGVyKCkge1xuICAgIHJldHVybiAnQW55dGhpbmcnXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9iamVjdENvbnRhaW5pbmcgZXh0ZW5kcyBBc3ltbWV0cmljTWF0Y2hlcjxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBjb25zdHJ1Y3RvcihzYW1wbGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBpbnZlcnNlID0gZmFsc2UpIHtcbiAgICBzdXBlcihzYW1wbGUsIGludmVyc2UpXG4gIH1cblxuICBnZXRQcm90b3R5cGUob2JqOiBvYmplY3QpIHtcbiAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKVxuICAgICAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopXG5cbiAgICBpZiAob2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSA9PT0gb2JqKVxuICAgICAgcmV0dXJuIG51bGxcblxuICAgIHJldHVybiBvYmouY29uc3RydWN0b3IucHJvdG90eXBlXG4gIH1cblxuICBoYXNQcm9wZXJ0eShvYmo6IG9iamVjdCB8IG51bGwsIHByb3BlcnR5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIW9iailcbiAgICAgIHJldHVybiBmYWxzZVxuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3BlcnR5KSlcbiAgICAgIHJldHVybiB0cnVlXG5cbiAgICByZXR1cm4gdGhpcy5oYXNQcm9wZXJ0eSh0aGlzLmdldFByb3RvdHlwZShvYmopLCBwcm9wZXJ0eSlcbiAgfVxuXG4gIGFzeW1tZXRyaWNNYXRjaChvdGhlcjogYW55KSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnNhbXBsZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIGBZb3UgbXVzdCBwcm92aWRlIGFuIG9iamVjdCB0byAke3RoaXMudG9TdHJpbmcoKX0sIG5vdCAnJHtcbiAgICAgICAgICB0eXBlb2YgdGhpcy5zYW1wbGVcbiAgICAgICAgfScuYCxcbiAgICAgIClcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gdHJ1ZVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiB0aGlzLnNhbXBsZSkge1xuICAgICAgaWYgKCF0aGlzLmhhc1Byb3BlcnR5KG90aGVyLCBwcm9wZXJ0eSkgfHwgIWVxdWFscyh0aGlzLnNhbXBsZVtwcm9wZXJ0eV0sIG90aGVyW3Byb3BlcnR5XSkpIHtcbiAgICAgICAgcmVzdWx0ID0gZmFsc2VcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pbnZlcnNlID8gIXJlc3VsdCA6IHJlc3VsdFxuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGBPYmplY3Qke3RoaXMuaW52ZXJzZSA/ICdOb3QnIDogJyd9Q29udGFpbmluZ2BcbiAgfVxuXG4gIGdldEV4cGVjdGVkVHlwZSgpIHtcbiAgICByZXR1cm4gJ29iamVjdCdcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXJyYXlDb250YWluaW5nIGV4dGVuZHMgQXN5bW1ldHJpY01hdGNoZXI8QXJyYXk8dW5rbm93bj4+IHtcbiAgY29uc3RydWN0b3Ioc2FtcGxlOiBBcnJheTx1bmtub3duPiwgaW52ZXJzZSA9IGZhbHNlKSB7XG4gICAgc3VwZXIoc2FtcGxlLCBpbnZlcnNlKVxuICB9XG5cbiAgYXN5bW1ldHJpY01hdGNoKG90aGVyOiBBcnJheTx1bmtub3duPikge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnNhbXBsZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIGBZb3UgbXVzdCBwcm92aWRlIGFuIGFycmF5IHRvICR7dGhpcy50b1N0cmluZygpfSwgbm90ICcke1xuICAgICAgICAgIHR5cGVvZiB0aGlzLnNhbXBsZVxuICAgICAgICB9Jy5gLFxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdFxuICAgICAgPSB0aGlzLnNhbXBsZS5sZW5ndGggPT09IDBcbiAgICAgIHx8IChBcnJheS5pc0FycmF5KG90aGVyKVxuICAgICAgICAmJiB0aGlzLnNhbXBsZS5ldmVyeShpdGVtID0+XG4gICAgICAgICAgb3RoZXIuc29tZShhbm90aGVyID0+IGVxdWFscyhpdGVtLCBhbm90aGVyKSksXG4gICAgICAgICkpXG5cbiAgICByZXR1cm4gdGhpcy5pbnZlcnNlID8gIXJlc3VsdCA6IHJlc3VsdFxuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGBBcnJheSR7dGhpcy5pbnZlcnNlID8gJ05vdCcgOiAnJ31Db250YWluaW5nYFxuICB9XG5cbiAgZ2V0RXhwZWN0ZWRUeXBlKCkge1xuICAgIHJldHVybiAnYXJyYXknXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFueSBleHRlbmRzIEFzeW1tZXRyaWNNYXRjaGVyPGFueT4ge1xuICBjb25zdHJ1Y3RvcihzYW1wbGU6IHVua25vd24pIHtcbiAgICBpZiAodHlwZW9mIHNhbXBsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdhbnkoKSBleHBlY3RzIHRvIGJlIHBhc3NlZCBhIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLiAnXG4gICAgICAgICAgKyAnUGxlYXNlIHBhc3Mgb25lIG9yIHVzZSBhbnl0aGluZygpIHRvIG1hdGNoIGFueSBvYmplY3QuJyxcbiAgICAgIClcbiAgICB9XG4gICAgc3VwZXIoc2FtcGxlKVxuICB9XG5cbiAgZm5OYW1lRm9yKGZ1bmM6IEZ1bmN0aW9uKSB7XG4gICAgaWYgKGZ1bmMubmFtZSlcbiAgICAgIHJldHVybiBmdW5jLm5hbWVcblxuICAgIGNvbnN0IGZ1bmN0aW9uVG9TdHJpbmcgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmdcblxuICAgIGNvbnN0IG1hdGNoZXMgPSBmdW5jdGlvblRvU3RyaW5nXG4gICAgICAuY2FsbChmdW5jKVxuICAgICAgLm1hdGNoKC9eKD86YXN5bmMpP1xccypmdW5jdGlvblxccypcXCo/XFxzKihbXFx3JF0rKVxccypcXCgvKVxuICAgIHJldHVybiBtYXRjaGVzID8gbWF0Y2hlc1sxXSA6ICc8YW5vbnltb3VzPidcbiAgfVxuXG4gIGFzeW1tZXRyaWNNYXRjaChvdGhlcjogdW5rbm93bikge1xuICAgIGlmICh0aGlzLnNhbXBsZSA9PT0gU3RyaW5nKVxuICAgICAgcmV0dXJuIHR5cGVvZiBvdGhlciA9PSAnc3RyaW5nJyB8fCBvdGhlciBpbnN0YW5jZW9mIFN0cmluZ1xuXG4gICAgaWYgKHRoaXMuc2FtcGxlID09PSBOdW1iZXIpXG4gICAgICByZXR1cm4gdHlwZW9mIG90aGVyID09ICdudW1iZXInIHx8IG90aGVyIGluc3RhbmNlb2YgTnVtYmVyXG5cbiAgICBpZiAodGhpcy5zYW1wbGUgPT09IEZ1bmN0aW9uKVxuICAgICAgcmV0dXJuIHR5cGVvZiBvdGhlciA9PSAnZnVuY3Rpb24nIHx8IG90aGVyIGluc3RhbmNlb2YgRnVuY3Rpb25cblxuICAgIGlmICh0aGlzLnNhbXBsZSA9PT0gQm9vbGVhbilcbiAgICAgIHJldHVybiB0eXBlb2Ygb3RoZXIgPT0gJ2Jvb2xlYW4nIHx8IG90aGVyIGluc3RhbmNlb2YgQm9vbGVhblxuXG4gICAgaWYgKHRoaXMuc2FtcGxlID09PSBCaWdJbnQpXG4gICAgICByZXR1cm4gdHlwZW9mIG90aGVyID09ICdiaWdpbnQnIHx8IG90aGVyIGluc3RhbmNlb2YgQmlnSW50XG5cbiAgICBpZiAodGhpcy5zYW1wbGUgPT09IFN5bWJvbClcbiAgICAgIHJldHVybiB0eXBlb2Ygb3RoZXIgPT0gJ3N5bWJvbCcgfHwgb3RoZXIgaW5zdGFuY2VvZiBTeW1ib2xcblxuICAgIGlmICh0aGlzLnNhbXBsZSA9PT0gT2JqZWN0KVxuICAgICAgcmV0dXJuIHR5cGVvZiBvdGhlciA9PSAnb2JqZWN0J1xuXG4gICAgcmV0dXJuIG90aGVyIGluc3RhbmNlb2YgdGhpcy5zYW1wbGVcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnQW55J1xuICB9XG5cbiAgZ2V0RXhwZWN0ZWRUeXBlKCkge1xuICAgIGlmICh0aGlzLnNhbXBsZSA9PT0gU3RyaW5nKVxuICAgICAgcmV0dXJuICdzdHJpbmcnXG5cbiAgICBpZiAodGhpcy5zYW1wbGUgPT09IE51bWJlcilcbiAgICAgIHJldHVybiAnbnVtYmVyJ1xuXG4gICAgaWYgKHRoaXMuc2FtcGxlID09PSBGdW5jdGlvbilcbiAgICAgIHJldHVybiAnZnVuY3Rpb24nXG5cbiAgICBpZiAodGhpcy5zYW1wbGUgPT09IE9iamVjdClcbiAgICAgIHJldHVybiAnb2JqZWN0J1xuXG4gICAgaWYgKHRoaXMuc2FtcGxlID09PSBCb29sZWFuKVxuICAgICAgcmV0dXJuICdib29sZWFuJ1xuXG4gICAgcmV0dXJuIHRoaXMuZm5OYW1lRm9yKHRoaXMuc2FtcGxlKVxuICB9XG5cbiAgdG9Bc3ltbWV0cmljTWF0Y2hlcigpIHtcbiAgICByZXR1cm4gYEFueTwke3RoaXMuZm5OYW1lRm9yKHRoaXMuc2FtcGxlKX0+YFxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdHJpbmdNYXRjaGluZyBleHRlbmRzIEFzeW1tZXRyaWNNYXRjaGVyPFJlZ0V4cD4ge1xuICBjb25zdHJ1Y3RvcihzYW1wbGU6IHN0cmluZyB8IFJlZ0V4cCwgaW52ZXJzZSA9IGZhbHNlKSB7XG4gICAgaWYgKCFpc0EoJ1N0cmluZycsIHNhbXBsZSkgJiYgIWlzQSgnUmVnRXhwJywgc2FtcGxlKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgaXMgbm90IGEgU3RyaW5nIG9yIGEgUmVnRXhwJylcblxuICAgIHN1cGVyKG5ldyBSZWdFeHAoc2FtcGxlKSwgaW52ZXJzZSlcbiAgfVxuXG4gIGFzeW1tZXRyaWNNYXRjaChvdGhlcjogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gaXNBKCdTdHJpbmcnLCBvdGhlcikgJiYgdGhpcy5zYW1wbGUudGVzdChvdGhlcilcblxuICAgIHJldHVybiB0aGlzLmludmVyc2UgPyAhcmVzdWx0IDogcmVzdWx0XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYFN0cmluZyR7dGhpcy5pbnZlcnNlID8gJ05vdCcgOiAnJ31NYXRjaGluZ2BcbiAgfVxuXG4gIGdldEV4cGVjdGVkVHlwZSgpIHtcbiAgICByZXR1cm4gJ3N0cmluZydcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgSmVzdEFzeW1tZXRyaWNNYXRjaGVyczogQ2hhaVBsdWdpbiA9IChjaGFpLCB1dGlscykgPT4ge1xuICB1dGlscy5hZGRNZXRob2QoXG4gICAgY2hhaS5leHBlY3QsXG4gICAgJ2FueXRoaW5nJyxcbiAgICAoKSA9PiBuZXcgQW55dGhpbmcoKSxcbiAgKVxuXG4gIHV0aWxzLmFkZE1ldGhvZChcbiAgICBjaGFpLmV4cGVjdCxcbiAgICAnYW55JyxcbiAgICAoZXhwZWN0ZWQ6IHVua25vd24pID0+IG5ldyBBbnkoZXhwZWN0ZWQpLFxuICApXG5cbiAgdXRpbHMuYWRkTWV0aG9kKFxuICAgIGNoYWkuZXhwZWN0LFxuICAgICdzdHJpbmdDb250YWluaW5nJyxcbiAgICAoZXhwZWN0ZWQ6IHN0cmluZykgPT4gbmV3IFN0cmluZ0NvbnRhaW5pbmcoZXhwZWN0ZWQpLFxuICApXG5cbiAgdXRpbHMuYWRkTWV0aG9kKFxuICAgIGNoYWkuZXhwZWN0LFxuICAgICdvYmplY3RDb250YWluaW5nJyxcbiAgICAoZXhwZWN0ZWQ6IGFueSkgPT4gbmV3IE9iamVjdENvbnRhaW5pbmcoZXhwZWN0ZWQpLFxuICApXG5cbiAgdXRpbHMuYWRkTWV0aG9kKFxuICAgIGNoYWkuZXhwZWN0LFxuICAgICdhcnJheUNvbnRhaW5pbmcnLFxuICAgIChleHBlY3RlZDogYW55KSA9PiBuZXcgQXJyYXlDb250YWluaW5nKGV4cGVjdGVkKSxcbiAgKVxuXG4gIHV0aWxzLmFkZE1ldGhvZChcbiAgICBjaGFpLmV4cGVjdCxcbiAgICAnc3RyaW5nTWF0Y2hpbmcnLFxuICAgIChleHBlY3RlZDogYW55KSA9PiBuZXcgU3RyaW5nTWF0Y2hpbmcoZXhwZWN0ZWQpLFxuICApXG5cbiAgLy8gZGVmaW5lUHJvcGVydHkgZG9lcyBub3Qgd29ya1xuICA7KGNoYWkuZXhwZWN0IGFzIGFueSkubm90ID0ge1xuICAgIHN0cmluZ0NvbnRhaW5pbmc6IChleHBlY3RlZDogc3RyaW5nKSA9PiBuZXcgU3RyaW5nQ29udGFpbmluZyhleHBlY3RlZCwgdHJ1ZSksXG4gICAgb2JqZWN0Q29udGFpbmluZzogKGV4cGVjdGVkOiBhbnkpID0+IG5ldyBPYmplY3RDb250YWluaW5nKGV4cGVjdGVkLCB0cnVlKSxcbiAgICBhcnJheUNvbnRhaW5pbmc6IChleHBlY3RlZDogdW5rbm93bltdKSA9PiBuZXcgQXJyYXlDb250YWluaW5nKGV4cGVjdGVkLCB0cnVlKSxcbiAgICBzdHJpbmdNYXRjaGluZzogKGV4cGVjdGVkOiBzdHJpbmcgfCBSZWdFeHApID0+IG5ldyBTdHJpbmdNYXRjaGluZyhleHBlY3RlZCwgdHJ1ZSksXG4gIH1cbn1cbiIsImltcG9ydCBjaGFpIGZyb20gJ2NoYWknXG5pbXBvcnQgU3Vic2V0IGZyb20gJ2NoYWktc3Vic2V0J1xuaW1wb3J0IHsgU25hcHNob3RQbHVnaW4gfSBmcm9tICcuLi9zbmFwc2hvdC9jaGFpJ1xuaW1wb3J0IHsgSmVzdEV4dGVuZCB9IGZyb20gJy4vamVzdC1leHRlbmQnXG5pbXBvcnQgeyBKZXN0Q2hhaUV4cGVjdCB9IGZyb20gJy4vamVzdC1leHBlY3QnXG5pbXBvcnQgeyBKZXN0QXN5bW1ldHJpY01hdGNoZXJzIH0gZnJvbSAnLi9qZXN0LWFzeW1tZXRyaWMtbWF0Y2hlcnMnXG5cbmxldCBpbnN0YWxsZWQgPSBmYWxzZVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwQ2hhaSgpIHtcbiAgaWYgKGluc3RhbGxlZClcbiAgICByZXR1cm5cblxuICBjaGFpLnVzZShKZXN0RXh0ZW5kKVxuICBjaGFpLnVzZShKZXN0Q2hhaUV4cGVjdClcbiAgY2hhaS51c2UoU3Vic2V0KVxuICBjaGFpLnVzZShTbmFwc2hvdFBsdWdpbilcbiAgY2hhaS51c2UoSmVzdEFzeW1tZXRyaWNNYXRjaGVycylcbiAgaW5zdGFsbGVkID0gdHJ1ZVxufVxuIiwiaW1wb3J0IHsgQ29uc29sZSB9IGZyb20gJ2NvbnNvbGUnXG5pbXBvcnQgeyBXcml0YWJsZSB9IGZyb20gJ3N0cmVhbSdcbmltcG9ydCB7IGVudmlyb25tZW50cyB9IGZyb20gJy4uL2ludGVncmF0aW9ucy9lbnYnXG5pbXBvcnQgeyBzZXR1cENoYWkgfSBmcm9tICcuLi9pbnRlZ3JhdGlvbnMvY2hhaS9zZXR1cCdcbmltcG9ydCB0eXBlIHsgUmVzb2x2ZWRDb25maWcgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuLi91dGlscydcbmltcG9ydCB7IHJwYyB9IGZyb20gJy4vcnBjJ1xuXG5sZXQgZ2xvYmFsU2V0dXAgPSBmYWxzZVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwR2xvYmFsRW52KGNvbmZpZzogUmVzb2x2ZWRDb25maWcpIHtcbiAgaWYgKGdsb2JhbFNldHVwKVxuICAgIHJldHVyblxuXG4gIGdsb2JhbFNldHVwID0gdHJ1ZVxuXG4gIHNldHVwQ29uc29sZUxvZ1NweSgpXG4gIGF3YWl0IHNldHVwQ2hhaSgpXG5cbiAgaWYgKGNvbmZpZy5nbG9iYWxzKVxuICAgIChhd2FpdCBpbXBvcnQoJy4uL2ludGVncmF0aW9ucy9nbG9iYWxzJykpLnJlZ2lzdGVyQXBpR2xvYmFsbHkoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBDb25zb2xlTG9nU3B5KCkge1xuICBjb25zdCBzdGRvdXQgPSBuZXcgV3JpdGFibGUoe1xuICAgIHdyaXRlKGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAgICAgcnBjKCkub25Vc2VyQ29uc29sZUxvZyh7XG4gICAgICAgIHR5cGU6ICdzdGRvdXQnLFxuICAgICAgICBjb250ZW50OiBTdHJpbmcoZGF0YSksXG4gICAgICAgIHRhc2tJZDogcHJvY2Vzcy5fX3ZpdGVzdF93b3JrZXJfXy5jdXJyZW50Py5pZCxcbiAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgIH0pXG4gICAgICBjYWxsYmFjaygpXG4gICAgfSxcbiAgfSlcbiAgY29uc3Qgc3RkZXJyID0gbmV3IFdyaXRhYmxlKHtcbiAgICB3cml0ZShkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICAgIHJwYygpLm9uVXNlckNvbnNvbGVMb2coe1xuICAgICAgICB0eXBlOiAnc3RkZXJyJyxcbiAgICAgICAgY29udGVudDogU3RyaW5nKGRhdGEpLFxuICAgICAgICB0YXNrSWQ6IHByb2Nlc3MuX192aXRlc3Rfd29ya2VyX18uY3VycmVudD8uaWQsXG4gICAgICAgIHRpbWU6IERhdGUubm93KCksXG4gICAgICB9KVxuICAgICAgY2FsbGJhY2soKVxuICAgIH0sXG4gIH0pXG4gIGdsb2JhbFRoaXMuY29uc29sZSA9IG5ldyBDb25zb2xlKHtcbiAgICBzdGRvdXQsXG4gICAgc3RkZXJyLFxuICAgIGNvbG9yTW9kZTogdHJ1ZSxcbiAgICBncm91cEluZGVudGF0aW9uOiAyLFxuICB9KVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aEVudihcbiAgbmFtZTogUmVzb2x2ZWRDb25maWdbJ2Vudmlyb25tZW50J10sXG4gIG9wdGlvbnM6IFJlc29sdmVkQ29uZmlnWydlbnZpcm9ubWVudE9wdGlvbnMnXSxcbiAgZm46ICgpID0+IFByb21pc2U8dm9pZD4sXG4pIHtcbiAgY29uc3QgZW52ID0gYXdhaXQgZW52aXJvbm1lbnRzW25hbWVdLnNldHVwKGdsb2JhbFRoaXMsIG9wdGlvbnMpXG4gIHRyeSB7XG4gICAgYXdhaXQgZm4oKVxuICB9XG4gIGZpbmFsbHkge1xuICAgIGF3YWl0IGVudi50ZWFyZG93bihnbG9iYWxUaGlzKVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5TZXR1cEZpbGVzKGNvbmZpZzogUmVzb2x2ZWRDb25maWcpIHtcbiAgY29uc3QgZmlsZXMgPSB0b0FycmF5KGNvbmZpZy5zZXR1cEZpbGVzKVxuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBmaWxlcy5tYXAoYXN5bmMoZmlsZSkgPT4ge1xuICAgICAgcHJvY2Vzcy5fX3ZpdGVzdF93b3JrZXJfXy5tb2R1bGVDYWNoZS5kZWxldGUoZmlsZSlcbiAgICAgIGF3YWl0IGltcG9ydChmaWxlKVxuICAgIH0pLFxuICApXG59XG4iLCJpbXBvcnQgeyBmb3JtYXQgfSBmcm9tICd1dGlsJ1xuaW1wb3J0IHsgc3RyaW5naWZ5IH0gZnJvbSAnLi4vaW50ZWdyYXRpb25zL2NoYWkvamVzdC1tYXRjaGVyLXV0aWxzJ1xuXG5jb25zdCBPQkpFQ1RfUFJPVE8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoe30pXG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XZWJfV29ya2Vyc19BUEkvU3RydWN0dXJlZF9jbG9uZV9hbGdvcml0aG1cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVFcnJvcih2YWw6IGFueSwgc2VlbiA9IG5ldyBXZWFrTWFwKCkpOiBhbnkge1xuICBpZiAoIXZhbCB8fCB0eXBlb2YgdmFsID09PSAnc3RyaW5nJylcbiAgICByZXR1cm4gdmFsXG4gIGlmICh0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKVxuICAgIHJldHVybiBgRnVuY3Rpb248JHt2YWwubmFtZX0+YFxuICBpZiAodHlwZW9mIHZhbCAhPT0gJ29iamVjdCcpXG4gICAgcmV0dXJuIHZhbFxuICBpZiAodmFsIGluc3RhbmNlb2YgUHJvbWlzZSB8fCAndGhlbicgaW4gdmFsIHx8ICh2YWwuY29uc3RydWN0b3IgJiYgdmFsLmNvbnN0cnVjdG9yLnByb3RvdHlwZSA9PT0gJ0FzeW5jRnVuY3Rpb24nKSlcbiAgICByZXR1cm4gJ1Byb21pc2UnXG4gIGlmICh0eXBlb2YgRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsIGluc3RhbmNlb2YgRWxlbWVudClcbiAgICByZXR1cm4gdmFsLnRhZ05hbWVcbiAgaWYgKHR5cGVvZiB2YWwuYXN5bW1ldHJpY01hdGNoID09PSAnZnVuY3Rpb24nKVxuICAgIHJldHVybiBgJHt2YWwudG9TdHJpbmcoKX0gJHtmb3JtYXQodmFsLnNhbXBsZSl9YFxuXG4gIGlmIChzZWVuLmhhcyh2YWwpKVxuICAgIHJldHVybiBzZWVuLmdldCh2YWwpXG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgIGNvbnN0IGNsb25lOiBhbnlbXSA9IG5ldyBBcnJheSh2YWwubGVuZ3RoKVxuICAgIHNlZW4uc2V0KHZhbCwgY2xvbmUpXG4gICAgdmFsLmZvckVhY2goKGUsIGkpID0+IHtcbiAgICAgIGNsb25lW2ldID0gc2VyaWFsaXplRXJyb3IoZSwgc2VlbilcbiAgICB9KVxuICAgIHJldHVybiBjbG9uZVxuICB9XG4gIGVsc2Uge1xuICAgIC8vIE9iamVjdHMgd2l0aCBgRXJyb3JgIGNvbnN0cnVjdG9ycyBhcHBlYXIgdG8gY2F1c2UgcHJvYmxlbXMgZHVyaW5nIHdvcmtlciBjb21tdW5pY2F0aW9uXG4gICAgLy8gdXNpbmcgYE1lc3NhZ2VQb3J0YCwgc28gdGhlIHNlcmlhbGl6ZWQgZXJyb3Igb2JqZWN0IGlzIGJlaW5nIHJlY3JlYXRlZCBhcyBwbGFpbiBvYmplY3QuXG4gICAgY29uc3QgY2xvbmUgPSBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgc2Vlbi5zZXQodmFsLCBjbG9uZSlcblxuICAgIGxldCBvYmogPSB2YWxcbiAgICB3aGlsZSAob2JqICYmIG9iaiAhPT0gT0JKRUNUX1BST1RPKSB7XG4gICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAoIShrZXkgaW4gY2xvbmUpKVxuICAgICAgICAgIGNsb25lW2tleV0gPSBzZXJpYWxpemVFcnJvcihvYmpba2V5XSwgc2VlbilcbiAgICAgIH0pXG4gICAgICBvYmogPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKVxuICAgIH1cbiAgICByZXR1cm4gY2xvbmVcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0Vycm9yKGVycjogYW55KSB7XG4gIGlmICghZXJyKVxuICAgIHJldHVybiBlcnJcbiAgLy8gc3RhY2sgaXMgbm90IHNlcmlhbGl6ZWQgaW4gd29ya2VyIGNvbW11bmljYXRpb25cbiAgLy8gd2Ugc3RyaW5naWZ5IGl0IGZpcnN0XG4gIGlmIChlcnIuc3RhY2spXG4gICAgZXJyLnN0YWNrU3RyID0gU3RyaW5nKGVyci5zdGFjaylcbiAgaWYgKGVyci5uYW1lKVxuICAgIGVyci5uYW1lU3RyID0gU3RyaW5nKGVyci5uYW1lKVxuXG4gIGlmICh0eXBlb2YgZXJyLmV4cGVjdGVkICE9PSAnc3RyaW5nJylcbiAgICBlcnIuZXhwZWN0ZWQgPSBzdHJpbmdpZnkoZXJyLmV4cGVjdGVkKVxuICBpZiAodHlwZW9mIGVyci5hY3R1YWwgIT09ICdzdHJpbmcnKVxuICAgIGVyci5hY3R1YWwgPSBzdHJpbmdpZnkoZXJyLmFjdHVhbClcblxuICB0cnkge1xuICAgIHJldHVybiBzZXJpYWxpemVFcnJvcihlcnIpXG4gIH1cbiAgY2F0Y2ggKGU6IGFueSkge1xuICAgIHJldHVybiBzZXJpYWxpemVFcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBmdWxseSBzZXJpYWxpemUgZXJyb3I6ICR7ZT8ubWVzc2FnZX0uXFxuSW5uZXIgZXJyb3IgbWVzc2FnZTogJHtlcnI/Lm1lc3NhZ2V9YCkpXG4gIH1cbn1cbiIsImltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nXG5pbXBvcnQgeyByZWxhdGl2ZSB9IGZyb20gJ3BhdGhlJ1xuaW1wb3J0IHR5cGUgeyBGaWxlLCBSZXNvbHZlZENvbmZpZywgU3VpdGUsIFRhc2tCYXNlIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBjbGVhckNvbnRleHQsIGRlZmF1bHRTdWl0ZSB9IGZyb20gJy4vc3VpdGUnXG5pbXBvcnQgeyBnZXRIb29rcywgc2V0SG9va3MgfSBmcm9tICcuL21hcCdcbmltcG9ydCB7IHByb2Nlc3NFcnJvciB9IGZyb20gJy4vZXJyb3InXG5pbXBvcnQgeyBjb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0J1xuaW1wb3J0IHsgcnVuU2V0dXBGaWxlcyB9IGZyb20gJy4vc2V0dXAnXG5cbmZ1bmN0aW9uIGhhc2goc3RyOiBzdHJpbmcsIGxlbmd0aCA9IDEwKSB7XG4gIHJldHVybiBjcmVhdGVIYXNoKCdtZDUnKVxuICAgIC51cGRhdGUoc3RyKVxuICAgIC5kaWdlc3QoJ2hleCcpXG4gICAgLnNsaWNlKDAsIGxlbmd0aClcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbGxlY3RUZXN0cyhwYXRoczogc3RyaW5nW10sIGNvbmZpZzogUmVzb2x2ZWRDb25maWcpIHtcbiAgY29uc3QgZmlsZXM6IEZpbGVbXSA9IFtdXG5cbiAgZm9yIChjb25zdCBmaWxlcGF0aCBvZiBwYXRocykge1xuICAgIGNvbnN0IHBhdGggPSByZWxhdGl2ZShjb25maWcucm9vdCwgZmlsZXBhdGgpXG4gICAgY29uc3QgZmlsZTogRmlsZSA9IHtcbiAgICAgIGlkOiBoYXNoKHBhdGgpLFxuICAgICAgbmFtZTogcGF0aCxcbiAgICAgIHR5cGU6ICdzdWl0ZScsXG4gICAgICBtb2RlOiAncnVuJyxcbiAgICAgIGZpbGVwYXRoLFxuICAgICAgdGFza3M6IFtdLFxuICAgIH1cblxuICAgIGNsZWFyQ29udGV4dCgpXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJ1blNldHVwRmlsZXMoY29uZmlnKVxuICAgICAgYXdhaXQgaW1wb3J0KGZpbGVwYXRoKVxuXG4gICAgICBjb25zdCBkZWZhdWx0VGFza3MgPSBhd2FpdCBkZWZhdWx0U3VpdGUuY29sbGVjdChmaWxlKVxuXG4gICAgICBzZXRIb29rcyhmaWxlLCBnZXRIb29rcyhkZWZhdWx0VGFza3MpKVxuXG4gICAgICBmb3IgKGNvbnN0IGMgb2YgWy4uLmRlZmF1bHRUYXNrcy50YXNrcywgLi4uY29udGV4dC50YXNrc10pIHtcbiAgICAgICAgaWYgKGMudHlwZSA9PT0gJ3Rlc3QnKSB7XG4gICAgICAgICAgZmlsZS50YXNrcy5wdXNoKGMpXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYy50eXBlID09PSAnc3VpdGUnKSB7XG4gICAgICAgICAgZmlsZS50YXNrcy5wdXNoKGMpXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKVxuICAgICAgICAgIGNvbnN0IHN1aXRlID0gYXdhaXQgYy5jb2xsZWN0KGZpbGUpXG4gICAgICAgICAgZmlsZS5jb2xsZWN0RHVyYXRpb24gPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0XG4gICAgICAgICAgaWYgKHN1aXRlLm5hbWUgfHwgc3VpdGUudGFza3MubGVuZ3RoKVxuICAgICAgICAgICAgZmlsZS50YXNrcy5wdXNoKHN1aXRlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICBmaWxlLnJlc3VsdCA9IHtcbiAgICAgICAgc3RhdGU6ICdmYWlsJyxcbiAgICAgICAgZXJyb3I6IHByb2Nlc3NFcnJvcihlKSxcbiAgICAgIH1cbiAgICAgIC8vIG5vdCBzdXJlIHRoeSwgdGhpcyB0aGlzIGxpbmUgaXMgbmVlZGVkIHRvIHRyaWdnZXIgdGhlIGVycm9yXG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnXFwwJylcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVIYXNoKGZpbGUpXG5cbiAgICBjb25zdCBoYXNPbmx5VGFza3MgPSBzb21lVGFza3NBcmVPbmx5KGZpbGUpXG4gICAgaW50ZXJwcmV0VGFza01vZGVzKGZpbGUsIGNvbmZpZy50ZXN0TmFtZVBhdHRlcm4sIGhhc09ubHlUYXNrcywgZmFsc2UsIGNvbmZpZy5hbGxvd09ubHkpXG5cbiAgICBmaWxlcy5wdXNoKGZpbGUpXG4gIH1cblxuICByZXR1cm4gZmlsZXNcbn1cblxuLyoqXG4gKiBJZiBhbnkgdGFza3MgYmVlbiBtYXJrZWQgYXMgYG9ubHlgLCBtYXJrIGFsbCBvdGhlciB0YXNrcyBhcyBgc2tpcGAuXG4gKi9cbmZ1bmN0aW9uIGludGVycHJldFRhc2tNb2RlcyhzdWl0ZTogU3VpdGUsIG5hbWVQYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwLCBvbmx5TW9kZT86IGJvb2xlYW4sIHBhcmVudElzT25seT86IGJvb2xlYW4sIGFsbG93T25seT86IGJvb2xlYW4pIHtcbiAgY29uc3Qgc3VpdGVJc09ubHkgPSBwYXJlbnRJc09ubHkgfHwgc3VpdGUubW9kZSA9PT0gJ29ubHknXG5cbiAgc3VpdGUudGFza3MuZm9yRWFjaCgodCkgPT4ge1xuICAgIC8vIENoZWNrIGlmIGVpdGhlciB0aGUgcGFyZW50IHN1aXRlIG9yIHRoZSB0YXNrIGl0c2VsZiBhcmUgbWFya2VkIGFzIGluY2x1ZGVkXG4gICAgY29uc3QgaW5jbHVkZVRhc2sgPSBzdWl0ZUlzT25seSB8fCB0Lm1vZGUgPT09ICdvbmx5J1xuICAgIGlmIChvbmx5TW9kZSkge1xuICAgICAgaWYgKHQudHlwZSA9PT0gJ3N1aXRlJyAmJiAoaW5jbHVkZVRhc2sgfHwgc29tZVRhc2tzQXJlT25seSh0KSkpIHtcbiAgICAgICAgLy8gRG9uJ3Qgc2tpcCB0aGlzIHN1aXRlXG4gICAgICAgIGlmICh0Lm1vZGUgPT09ICdvbmx5Jykge1xuICAgICAgICAgIGNoZWNrQWxsb3dPbmx5KHQsIGFsbG93T25seSlcbiAgICAgICAgICB0Lm1vZGUgPSAncnVuJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0Lm1vZGUgPT09ICdydW4nICYmICFpbmNsdWRlVGFzaykgeyB0Lm1vZGUgPSAnc2tpcCcgfVxuICAgICAgZWxzZSBpZiAodC5tb2RlID09PSAnb25seScpIHtcbiAgICAgICAgY2hlY2tBbGxvd09ubHkodCwgYWxsb3dPbmx5KVxuICAgICAgICB0Lm1vZGUgPSAncnVuJ1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodC50eXBlID09PSAndGVzdCcpIHtcbiAgICAgIGlmIChuYW1lUGF0dGVybiAmJiAhdC5uYW1lLm1hdGNoKG5hbWVQYXR0ZXJuKSlcbiAgICAgICAgdC5tb2RlID0gJ3NraXAnXG4gICAgfVxuICAgIGVsc2UgaWYgKHQudHlwZSA9PT0gJ3N1aXRlJykge1xuICAgICAgaWYgKHQubW9kZSA9PT0gJ3NraXAnKVxuICAgICAgICBza2lwQWxsVGFza3ModClcbiAgICAgIGVsc2VcbiAgICAgICAgaW50ZXJwcmV0VGFza01vZGVzKHQsIG5hbWVQYXR0ZXJuLCBvbmx5TW9kZSwgaW5jbHVkZVRhc2ssIGFsbG93T25seSlcbiAgICB9XG4gIH0pXG5cbiAgLy8gaWYgYWxsIHN1YnRhc2tzIGFyZSBza2lwcGVkLCBtYXJrIGFzIHNraXBcbiAgaWYgKHN1aXRlLm1vZGUgPT09ICdydW4nKSB7XG4gICAgaWYgKHN1aXRlLnRhc2tzLmV2ZXJ5KGkgPT4gaS5tb2RlICE9PSAncnVuJykpXG4gICAgICBzdWl0ZS5tb2RlID0gJ3NraXAnXG4gIH1cbn1cblxuZnVuY3Rpb24gc29tZVRhc2tzQXJlT25seShzdWl0ZTogU3VpdGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHN1aXRlLnRhc2tzLnNvbWUodCA9PiB0Lm1vZGUgPT09ICdvbmx5JyB8fCAodC50eXBlID09PSAnc3VpdGUnICYmIHNvbWVUYXNrc0FyZU9ubHkodCkpKVxufVxuXG5mdW5jdGlvbiBza2lwQWxsVGFza3Moc3VpdGU6IFN1aXRlKSB7XG4gIHN1aXRlLnRhc2tzLmZvckVhY2goKHQpID0+IHtcbiAgICBpZiAodC5tb2RlID09PSAncnVuJykge1xuICAgICAgdC5tb2RlID0gJ3NraXAnXG4gICAgICBpZiAodC50eXBlID09PSAnc3VpdGUnKVxuICAgICAgICBza2lwQWxsVGFza3ModClcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNoZWNrQWxsb3dPbmx5KHRhc2s6IFRhc2tCYXNlLCBhbGxvd09ubHk/OiBib29sZWFuKSB7XG4gIGlmIChhbGxvd09ubHkpIHJldHVyblxuICB0YXNrLnJlc3VsdCA9IHtcbiAgICBzdGF0ZTogJ2ZhaWwnLFxuICAgIGVycm9yOiBwcm9jZXNzRXJyb3IobmV3IEVycm9yKCdbVml0ZXN0XSBVbmV4cGVjdGVkIC5vbmx5IG1vZGlmaWVyLiBSZW1vdmUgaXQgb3IgcGFzcyAtLWFsbG93T25seSBhcmd1ZW1lbnQgdG8gYnlwYXNzIHRoaXMgZXJyb3InKSksXG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsY3VsYXRlSGFzaChwYXJlbnQ6IFN1aXRlKSB7XG4gIHBhcmVudC50YXNrcy5mb3JFYWNoKCh0LCBpZHgpID0+IHtcbiAgICB0LmlkID0gYCR7cGFyZW50LmlkfV8ke2lkeH1gXG4gICAgaWYgKHQudHlwZSA9PT0gJ3N1aXRlJylcbiAgICAgIGNhbGN1bGF0ZUhhc2godClcbiAgfSlcbn1cbiIsImltcG9ydCB7IHBlcmZvcm1hbmNlIH0gZnJvbSAncGVyZl9ob29rcydcbmltcG9ydCB0eXBlIHsgSG9va0xpc3RlbmVyLCBSZXNvbHZlZENvbmZpZywgU3VpdGUsIFN1aXRlSG9va3MsIFRhc2ssIFRhc2tSZXN1bHQsIFRlc3QgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IHZpIH0gZnJvbSAnLi4vaW50ZWdyYXRpb25zL3ZpJ1xuaW1wb3J0IHsgZ2V0U25hcHNob3RDbGllbnQgfSBmcm9tICcuLi9pbnRlZ3JhdGlvbnMvc25hcHNob3QvY2hhaSdcbmltcG9ydCB7IGdldEZ1bGxOYW1lLCBoYXNGYWlsZWQsIGhhc1Rlc3RzLCBwYXJ0aXRpb25TdWl0ZUNoaWxkcmVuIH0gZnJvbSAnLi4vdXRpbHMnXG5pbXBvcnQgeyBnZXRTdGF0ZSwgc2V0U3RhdGUgfSBmcm9tICcuLi9pbnRlZ3JhdGlvbnMvY2hhaS9qZXN0LWV4cGVjdCdcbmltcG9ydCB7IGdldEZuLCBnZXRIb29rcyB9IGZyb20gJy4vbWFwJ1xuaW1wb3J0IHsgcnBjIH0gZnJvbSAnLi9ycGMnXG5pbXBvcnQgeyBjb2xsZWN0VGVzdHMgfSBmcm9tICcuL2NvbGxlY3QnXG5pbXBvcnQgeyBwcm9jZXNzRXJyb3IgfSBmcm9tICcuL2Vycm9yJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2FsbFN1aXRlSG9vazxUIGV4dGVuZHMga2V5b2YgU3VpdGVIb29rcz4oc3VpdGU6IFN1aXRlLCBuYW1lOiBULCBhcmdzOiBTdWl0ZUhvb2tzW1RdWzBdIGV4dGVuZHMgSG9va0xpc3RlbmVyPGluZmVyIEE+ID8gQSA6IG5ldmVyKSB7XG4gIGlmIChuYW1lID09PSAnYmVmb3JlRWFjaCcgJiYgc3VpdGUuc3VpdGUpXG4gICAgYXdhaXQgY2FsbFN1aXRlSG9vayhzdWl0ZS5zdWl0ZSwgbmFtZSwgYXJncylcblxuICBhd2FpdCBQcm9taXNlLmFsbChnZXRIb29rcyhzdWl0ZSlbbmFtZV0ubWFwKGZuID0+IGZuKC4uLihhcmdzIGFzIGFueSkpKSlcblxuICBpZiAobmFtZSA9PT0gJ2FmdGVyRWFjaCcgJiYgc3VpdGUuc3VpdGUpXG4gICAgYXdhaXQgY2FsbFN1aXRlSG9vayhzdWl0ZS5zdWl0ZSwgbmFtZSwgYXJncylcbn1cblxuY29uc3QgcGFja3MgPSBuZXcgTWFwPHN0cmluZywgVGFza1Jlc3VsdHx1bmRlZmluZWQ+KClcbmxldCB1cGRhdGVUaW1lcjogYW55XG5sZXQgcHJldmlvdXNVcGRhdGU6IFByb21pc2U8dm9pZD58dW5kZWZpbmVkXG5cbmZ1bmN0aW9uIHVwZGF0ZVRhc2sodGFzazogVGFzaykge1xuICBwYWNrcy5zZXQodGFzay5pZCwgdGFzay5yZXN1bHQpXG5cbiAgY2xlYXJUaW1lb3V0KHVwZGF0ZVRpbWVyKVxuICB1cGRhdGVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHByZXZpb3VzVXBkYXRlID0gc2VuZFRhc2tzVXBkYXRlKClcbiAgfSwgMTApXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNlbmRUYXNrc1VwZGF0ZSgpIHtcbiAgY2xlYXJUaW1lb3V0KHVwZGF0ZVRpbWVyKVxuICBhd2FpdCBwcmV2aW91c1VwZGF0ZVxuXG4gIGlmIChwYWNrcy5zaXplKSB7XG4gICAgY29uc3QgcCA9IHJwYygpLm9uVGFza1VwZGF0ZShBcnJheS5mcm9tKHBhY2tzKSlcbiAgICBwYWNrcy5jbGVhcigpXG4gICAgcmV0dXJuIHBcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuVGVzdCh0ZXN0OiBUZXN0KSB7XG4gIGlmICh0ZXN0Lm1vZGUgIT09ICdydW4nKVxuICAgIHJldHVyblxuXG4gIGlmICh0ZXN0LnJlc3VsdD8uc3RhdGUgPT09ICdmYWlsJykge1xuICAgIHVwZGF0ZVRhc2sodGVzdClcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KClcblxuICB0ZXN0LnJlc3VsdCA9IHtcbiAgICBzdGF0ZTogJ3J1bicsXG4gIH1cbiAgdXBkYXRlVGFzayh0ZXN0KVxuXG4gIGNsZWFyTW9kdWxlTW9ja3MoKVxuXG4gIGdldFNuYXBzaG90Q2xpZW50KCkuc2V0VGVzdCh0ZXN0KVxuXG4gIHByb2Nlc3MuX192aXRlc3Rfd29ya2VyX18uY3VycmVudCA9IHRlc3RcblxuICB0cnkge1xuICAgIGF3YWl0IGNhbGxTdWl0ZUhvb2sodGVzdC5zdWl0ZSwgJ2JlZm9yZUVhY2gnLCBbdGVzdCwgdGVzdC5zdWl0ZV0pXG4gICAgc2V0U3RhdGUoe1xuICAgICAgYXNzZXJ0aW9uQ2FsbHM6IDAsXG4gICAgICBpc0V4cGVjdGluZ0Fzc2VydGlvbnM6IGZhbHNlLFxuICAgICAgaXNFeHBlY3RpbmdBc3NlcnRpb25zRXJyb3I6IG51bGwsXG4gICAgICBleHBlY3RlZEFzc2VydGlvbnNOdW1iZXI6IG51bGwsXG4gICAgICBleHBlY3RlZEFzc2VydGlvbnNOdW1iZXJFcnJvcjogbnVsbCxcbiAgICAgIHRlc3RQYXRoOiB0ZXN0LnN1aXRlLmZpbGU/LmZpbGVwYXRoLFxuICAgICAgY3VycmVudFRlc3ROYW1lOiBnZXRGdWxsTmFtZSh0ZXN0KSxcbiAgICB9KVxuICAgIGF3YWl0IGdldEZuKHRlc3QpKClcbiAgICBjb25zdCB7IGFzc2VydGlvbkNhbGxzLCBleHBlY3RlZEFzc2VydGlvbnNOdW1iZXIsIGV4cGVjdGVkQXNzZXJ0aW9uc051bWJlckVycm9yLCBpc0V4cGVjdGluZ0Fzc2VydGlvbnMsIGlzRXhwZWN0aW5nQXNzZXJ0aW9uc0Vycm9yIH0gPSBnZXRTdGF0ZSgpXG4gICAgaWYgKGV4cGVjdGVkQXNzZXJ0aW9uc051bWJlciAhPT0gbnVsbCAmJiBhc3NlcnRpb25DYWxscyAhPT0gZXhwZWN0ZWRBc3NlcnRpb25zTnVtYmVyKVxuICAgICAgdGhyb3cgZXhwZWN0ZWRBc3NlcnRpb25zTnVtYmVyRXJyb3JcbiAgICBpZiAoaXNFeHBlY3RpbmdBc3NlcnRpb25zID09PSB0cnVlICYmIGFzc2VydGlvbkNhbGxzID09PSAwKVxuICAgICAgdGhyb3cgaXNFeHBlY3RpbmdBc3NlcnRpb25zRXJyb3JcblxuICAgIHRlc3QucmVzdWx0LnN0YXRlID0gJ3Bhc3MnXG4gIH1cbiAgY2F0Y2ggKGUpIHtcbiAgICB0ZXN0LnJlc3VsdC5zdGF0ZSA9ICdmYWlsJ1xuICAgIHRlc3QucmVzdWx0LmVycm9yID0gcHJvY2Vzc0Vycm9yKGUpXG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IGNhbGxTdWl0ZUhvb2sodGVzdC5zdWl0ZSwgJ2FmdGVyRWFjaCcsIFt0ZXN0LCB0ZXN0LnN1aXRlXSlcbiAgfVxuICBjYXRjaCAoZSkge1xuICAgIHRlc3QucmVzdWx0LnN0YXRlID0gJ2ZhaWwnXG4gICAgdGVzdC5yZXN1bHQuZXJyb3IgPSBwcm9jZXNzRXJyb3IoZSlcbiAgfVxuXG4gIC8vIGlmIHRlc3QgaXMgbWFya2VkIHRvIGJlIGZhaWxlZCwgZmxpcCB0aGUgcmVzdWx0XG4gIGlmICh0ZXN0LmZhaWxzKSB7XG4gICAgaWYgKHRlc3QucmVzdWx0LnN0YXRlID09PSAncGFzcycpIHtcbiAgICAgIHRlc3QucmVzdWx0LnN0YXRlID0gJ2ZhaWwnXG4gICAgICB0ZXN0LnJlc3VsdC5lcnJvciA9IHByb2Nlc3NFcnJvcihuZXcgRXJyb3IoJ0V4cGVjdCB0ZXN0IHRvIGZhaWwnKSlcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0ZXN0LnJlc3VsdC5zdGF0ZSA9ICdwYXNzJ1xuICAgICAgdGVzdC5yZXN1bHQuZXJyb3IgPSB1bmRlZmluZWRcbiAgICB9XG4gIH1cblxuICBnZXRTbmFwc2hvdENsaWVudCgpLmNsZWFyVGVzdCgpXG5cbiAgdGVzdC5yZXN1bHQuZHVyYXRpb24gPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0XG5cbiAgcHJvY2Vzcy5fX3ZpdGVzdF93b3JrZXJfXy5jdXJyZW50ID0gdW5kZWZpbmVkXG5cbiAgdXBkYXRlVGFzayh0ZXN0KVxufVxuXG5mdW5jdGlvbiBtYXJrVGFza3NBc1NraXBwZWQoc3VpdGU6IFN1aXRlKSB7XG4gIHN1aXRlLnRhc2tzLmZvckVhY2goKHQpID0+IHtcbiAgICB0Lm1vZGUgPSAnc2tpcCdcbiAgICB0LnJlc3VsdCA9IHsgLi4udC5yZXN1bHQsIHN0YXRlOiAnc2tpcCcgfVxuICAgIHVwZGF0ZVRhc2sodClcbiAgICBpZiAodC50eXBlID09PSAnc3VpdGUnKSBtYXJrVGFza3NBc1NraXBwZWQodClcbiAgfSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blN1aXRlKHN1aXRlOiBTdWl0ZSkge1xuICBpZiAoc3VpdGUucmVzdWx0Py5zdGF0ZSA9PT0gJ2ZhaWwnKSB7XG4gICAgbWFya1Rhc2tzQXNTa2lwcGVkKHN1aXRlKVxuICAgIHVwZGF0ZVRhc2soc3VpdGUpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBzdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpXG5cbiAgc3VpdGUucmVzdWx0ID0ge1xuICAgIHN0YXRlOiAncnVuJyxcbiAgfVxuXG4gIHVwZGF0ZVRhc2soc3VpdGUpXG5cbiAgaWYgKHN1aXRlLm1vZGUgPT09ICdza2lwJykge1xuICAgIHN1aXRlLnJlc3VsdC5zdGF0ZSA9ICdza2lwJ1xuICB9XG4gIGVsc2UgaWYgKHN1aXRlLm1vZGUgPT09ICd0b2RvJykge1xuICAgIHN1aXRlLnJlc3VsdC5zdGF0ZSA9ICd0b2RvJ1xuICB9XG4gIGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjYWxsU3VpdGVIb29rKHN1aXRlLCAnYmVmb3JlQWxsJywgW3N1aXRlXSlcblxuICAgICAgZm9yIChjb25zdCB0YXNrc0dyb3VwIG9mIHBhcnRpdGlvblN1aXRlQ2hpbGRyZW4oc3VpdGUpKSB7XG4gICAgICAgIGlmICh0YXNrc0dyb3VwWzBdLmNvbmN1cnJlbnQgPT09IHRydWUpIHtcbiAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0YXNrc0dyb3VwLm1hcChjID0+IHJ1blN1aXRlQ2hpbGQoYykpKVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGZvciAoY29uc3QgYyBvZiB0YXNrc0dyb3VwKVxuICAgICAgICAgICAgYXdhaXQgcnVuU3VpdGVDaGlsZChjKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGNhbGxTdWl0ZUhvb2soc3VpdGUsICdhZnRlckFsbCcsIFtzdWl0ZV0pXG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICBzdWl0ZS5yZXN1bHQuc3RhdGUgPSAnZmFpbCdcbiAgICAgIHN1aXRlLnJlc3VsdC5lcnJvciA9IHByb2Nlc3NFcnJvcihlKVxuICAgIH1cbiAgfVxuICBzdWl0ZS5yZXN1bHQuZHVyYXRpb24gPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0XG5cbiAgaWYgKHN1aXRlLm1vZGUgPT09ICdydW4nKSB7XG4gICAgaWYgKCFoYXNUZXN0cyhzdWl0ZSkpIHtcbiAgICAgIHN1aXRlLnJlc3VsdC5zdGF0ZSA9ICdmYWlsJ1xuICAgICAgaWYgKCFzdWl0ZS5yZXN1bHQuZXJyb3IpXG4gICAgICAgIHN1aXRlLnJlc3VsdC5lcnJvciA9IG5ldyBFcnJvcihgTm8gdGVzdHMgZm91bmQgaW4gc3VpdGUgJHtzdWl0ZS5uYW1lfWApXG4gICAgfVxuICAgIGVsc2UgaWYgKGhhc0ZhaWxlZChzdWl0ZSkpIHtcbiAgICAgIHN1aXRlLnJlc3VsdC5zdGF0ZSA9ICdmYWlsJ1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHN1aXRlLnJlc3VsdC5zdGF0ZSA9ICdwYXNzJ1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVRhc2soc3VpdGUpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1blN1aXRlQ2hpbGQoYzogVGFzaykge1xuICByZXR1cm4gYy50eXBlID09PSAndGVzdCdcbiAgICA/IHJ1blRlc3QoYylcbiAgICA6IHJ1blN1aXRlKGMpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5TdWl0ZXMoc3VpdGVzOiBTdWl0ZVtdKSB7XG4gIGZvciAoY29uc3Qgc3VpdGUgb2Ygc3VpdGVzKVxuICAgIGF3YWl0IHJ1blN1aXRlKHN1aXRlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRUZXN0cyhwYXRoczogc3RyaW5nW10sIGNvbmZpZzogUmVzb2x2ZWRDb25maWcpIHtcbiAgY29uc3QgZmlsZXMgPSBhd2FpdCBjb2xsZWN0VGVzdHMocGF0aHMsIGNvbmZpZylcblxuICBycGMoKS5vbkNvbGxlY3RlZChmaWxlcylcblxuICBhd2FpdCBydW5TdWl0ZXMoZmlsZXMpXG5cbiAgYXdhaXQgZ2V0U25hcHNob3RDbGllbnQoKS5zYXZlU25hcCgpXG5cbiAgYXdhaXQgc2VuZFRhc2tzVXBkYXRlKClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyTW9kdWxlTW9ja3MoKSB7XG4gIGNvbnN0IHsgY2xlYXJNb2NrcywgbW9ja1Jlc2V0LCByZXN0b3JlTW9ja3MgfSA9IHByb2Nlc3MuX192aXRlc3Rfd29ya2VyX18uY29uZmlnXG5cbiAgLy8gc2luY2UgZWFjaCBmdW5jdGlvbiBjYWxscyBhbm90aGVyLCB3ZSBjYW4ganVzdCBjYWxsIG9uZVxuICBpZiAocmVzdG9yZU1vY2tzKVxuICAgIHZpLnJlc3RvcmVBbGxNb2NrcygpXG4gIGVsc2UgaWYgKG1vY2tSZXNldClcbiAgICB2aS5yZXNldEFsbE1vY2tzKClcbiAgZWxzZSBpZiAoY2xlYXJNb2NrcylcbiAgICB2aS5jbGVhckFsbE1vY2tzKClcbn1cbiIsImltcG9ydCB7IHByb21pc2VzIGFzIGZzIH0gZnJvbSAnZnMnXG5pbXBvcnQgdHlwZSB7IEJ1aWx0aW5FbnZpcm9ubWVudCwgUmVzb2x2ZWRDb25maWcgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IHNldHVwR2xvYmFsRW52LCB3aXRoRW52IH0gZnJvbSAnLi9zZXR1cCdcbmltcG9ydCB7IHN0YXJ0VGVzdHMgfSBmcm9tICcuL3J1bidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bihmaWxlczogc3RyaW5nW10sIGNvbmZpZzogUmVzb2x2ZWRDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgc2V0dXBHbG9iYWxFbnYoY29uZmlnKVxuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgIGNvbnN0IGNvZGUgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlLCAndXRmLTgnKVxuXG4gICAgY29uc3QgZW52ID0gY29kZS5tYXRjaCgvQCg/OnZpdGVzdHxqZXN0KS1lbnZpcm9ubWVudFxccys/KFtcXHctXSspXFxiLyk/LlsxXSB8fCBjb25maWcuZW52aXJvbm1lbnQgfHwgJ25vZGUnXG5cbiAgICBpZiAoIVsnbm9kZScsICdqc2RvbScsICdoYXBweS1kb20nXS5pbmNsdWRlcyhlbnYpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBlbnZpcm9ubWVudDogJHtlbnZ9YClcblxuICAgIHByb2Nlc3MuX192aXRlc3Rfd29ya2VyX18uZmlsZXBhdGggPSBmaWxlXG5cbiAgICBhd2FpdCB3aXRoRW52KGVudiBhcyBCdWlsdGluRW52aXJvbm1lbnQsIGNvbmZpZy5lbnZpcm9ubWVudE9wdGlvbnMgfHwge30sIGFzeW5jKCkgPT4ge1xuICAgICAgYXdhaXQgc3RhcnRUZXN0cyhbZmlsZV0sIGNvbmZpZylcbiAgICB9KVxuXG4gICAgcHJvY2Vzcy5fX3ZpdGVzdF93b3JrZXJfXy5maWxlcGF0aCA9IHVuZGVmaW5lZFxuICB9XG59XG4iXSwibmFtZXMiOlsiX19kZWZQcm9wIiwiX19nZXRPd25Qcm9wU3ltYm9scyIsIl9faGFzT3duUHJvcCIsIl9fcHJvcElzRW51bSIsIl9fZGVmTm9ybWFsUHJvcCIsIl9fc3ByZWFkVmFsdWVzIiwicmVxdWlyZSIsInRoaXMiLCJuYXR1cmFsQ29tcGFyZU1vZHVsZSIsInByZXR0eUZvcm1hdCIsInBhdGgiLCJuYXR1cmFsQ29tcGFyZSIsImZzcCIsImZzIiwiQXN5bW1ldHJpY01hdGNoZXIiLCJwcmV0dHlGb3JtYXRQbHVnaW5zIiwiX19kZWZQcm9wcyIsIl9fZ2V0T3duUHJvcERlc2NzIiwiX19zcHJlYWRQcm9wcyIsImNoYWkiLCJwZXJmb3JtYW5jZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLFdBQWU7QUFDZixFQUFFLElBQUksRUFBRSxNQUFNO0FBQ2QsRUFBRSxNQUFNLEtBQUssR0FBRztBQUNoQixJQUFJLE9BQU87QUFDWCxNQUFNLFFBQVEsR0FBRztBQUNqQixPQUFPO0FBQ1AsS0FBSyxDQUFDO0FBQ04sR0FBRztBQUNILENBQUM7O0FDUkQsTUFBTSxXQUFXLEdBQUc7QUFDcEIsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsS0FBSztBQUNQLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsYUFBYTtBQUNmLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLGtCQUFrQjtBQUNwQixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLFVBQVU7QUFDWixFQUFFLGFBQWE7QUFDZixFQUFFLGVBQWU7QUFDakIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsU0FBUztBQUNYLEVBQUUsY0FBYztBQUNoQixFQUFFLFVBQVU7QUFDWixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLHVCQUF1QjtBQUN6QixFQUFFLGNBQWM7QUFDaEIsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsYUFBYTtBQUNmLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsZUFBZTtBQUNqQixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLGVBQWU7QUFDakIsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxtQkFBbUI7QUFDckIsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUseUJBQXlCO0FBQzNCLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUseUJBQXlCO0FBQzNCLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsa0JBQWtCO0FBQ3BCLEVB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R0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsR0FBRyxJQUFJLElBQUk7QUFDcEcsS0FBSyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDbkIsS0FBSyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3pCLEtBQUssSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRTtBQUMxQixLQUFLLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUU7QUFDMUIsS0FBSyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFO0FBQzFCLEtBQUssSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRTtBQUMxQixLQUFLLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDMUIsS0FBSyxJQUFJLEdBQUcsRUFBRTtBQUNkLEVBQUU7QUFDRjtBQUNBO0FBQ0EsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLEdBQUc7QUFDdkMsRUFBRSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBQztBQUM1QixFQUFFLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFDO0FBQzVCO0FBQ0EsRUFBRSxJQUFJLEtBQUssR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLEVBQUUsSUFBSSxLQUFLLEdBQUcsRUFBRSxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUU7QUFDNUQsR0FBRyxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFDO0FBQ2pDLEdBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUM7QUFDckMsR0FBRyxJQUFJLEdBQUcsRUFBQztBQUNYLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxLQUFLLElBQUksS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDckQsRUFBRTtBQUNGLENBQUMsT0FBTyxDQUFDO0FBQ1QsRUFBQztBQUNEO0FBQ0EsSUFBSTtBQUNKLENBQUNDLHdCQUFjLEdBQUcsY0FBYyxDQUFDO0FBQ2pDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNaLENBQUMsTUFBTSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDeEM7Ozs7QUN4REEsSUFBSVIsV0FBUyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUM7QUFDdEMsSUFBSUMscUJBQW1CLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDO0FBQ3ZELElBQUlDLGNBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztBQUNuRCxJQUFJQyxjQUFZLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQztBQUN6RCxJQUFJQyxpQkFBZSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBR0osV0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDaEssSUFBSUssZ0JBQWMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUs7QUFDL0IsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLElBQUksSUFBSUgsY0FBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQ2xDLE1BQU1FLGlCQUFlLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN4QyxFQUFFLElBQUlILHFCQUFtQjtBQUN6QixJQUFJLEtBQUssSUFBSSxJQUFJLElBQUlBLHFCQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzdDLE1BQU0sSUFBSUUsY0FBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQ3BDLFFBQVFDLGlCQUFlLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxQyxLQUFLO0FBQ0wsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUMsQ0FBQztBQVNLLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO0FBQ3BDLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztBQUN0RSxNQUFNLGFBQWEsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsRSxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsS0FBSztBQUN0QyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN4QixJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztBQUM3RCxFQUFFLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbEMsQ0FBQyxDQUFDO0FBQ0ssTUFBTSxlQUFlLEdBQUcsQ0FBQyxZQUFZLEVBQUUsTUFBTSxLQUFLO0FBQ3pELEVBQUUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQyxFQUFFLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBQzVCLEVBQUUsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3BCLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFO0FBQ25DLElBQUksSUFBSTtBQUNSLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0QsTUFBTSxNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUNqRSxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQixLQUFLLENBQUMsTUFBTTtBQUNaLEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQztBQUNyQyxFQUFFLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLE1BQU0sS0FBSyxLQUFLLEtBQUssU0FBUztBQUN6RCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3pCLENBQUMsQ0FBQztBQUNLLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3ZFLEVBQUUsTUFBTSxDQUFDO0FBQ1QsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNKLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RKLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztBQUN6QixNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQztBQUN6QixTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxlQUFlLEdBQUcsRUFBRSxFQUFFO0FBQ2pFLEVBQUUsT0FBTyxpQkFBaUIsQ0FBQ0ssUUFBWSxDQUFDLEdBQUcsRUFBRUosZ0JBQWMsQ0FBQztBQUM1RCxJQUFJLFdBQVc7QUFDZixJQUFJLE1BQU07QUFDVixJQUFJLE9BQU8sRUFBRSxjQUFjLEVBQUU7QUFDN0IsSUFBSSxpQkFBaUI7QUFDckIsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixDQUFDO0FBWU0sU0FBUyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUU7QUFDMUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFDRCxTQUFTLG1CQUFtQixDQUFDLEdBQUcsRUFBRTtBQUNsQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQUNNLFNBQVMscUJBQXFCLENBQUMsUUFBUSxFQUFFO0FBQ2hELEVBQUUsSUFBSTtBQUNOLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQ0ssS0FBSSxDQUFDLElBQUksQ0FBQ0EsS0FBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDekUsR0FBRyxDQUFDLE1BQU07QUFDVixHQUFHO0FBQ0gsQ0FBQztBQUNELFNBQVMsaUJBQWlCLENBQUMsTUFBTSxFQUFFO0FBQ25DLEVBQUUsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBQ00sZUFBZSxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFO0FBQ25FLEVBQUUsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUNDLGdCQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4TCxFQUFFLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3RDLEVBQUUsTUFBTUMsUUFBRyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLG9CQUFvQixFQUFFLENBQUM7QUFDOUQ7QUFDQSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekIsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ1osQ0FBQztBQUNNLFNBQVMsZUFBZSxDQUFDLFFBQVEsRUFBRTtBQUMxQyxFQUFFLFNBQVMsZUFBZSxHQUFHO0FBQzdCLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxJQUFJLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztBQUN4RixHQUFHO0FBQ0gsRUFBRSxNQUFNLFVBQVUsR0FBRyxlQUFlLEVBQUUsQ0FBQztBQUN2QyxFQUFFLElBQUksZUFBZSxHQUFHLFFBQVEsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BFLEVBQUUsSUFBSSxVQUFVLEVBQUU7QUFDbEIsSUFBSSxlQUFlLEdBQUcsZUFBZSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUosR0FBRztBQUNILEVBQUUsT0FBTyxlQUFlLENBQUM7QUFDekIsQ0FBQztBQUNELFNBQVMsY0FBYyxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRTtBQUNsRCxFQUFFLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxFQUFFLEtBQUssS0FBSztBQUMzQyxJQUFJLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QyxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUN0QyxNQUFNLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQ3pFLEtBQUssTUFBTSxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRTtBQUN4QyxNQUFNLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDNUUsS0FBSyxNQUFNO0FBQ1gsTUFBTSxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsYUFBYSxDQUFDO0FBQzFDLEtBQUs7QUFDTCxHQUFHLENBQUMsQ0FBQztBQUNMLEVBQUUsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQUNNLFNBQVMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRTtBQUNsRCxFQUFFLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUM1QyxJQUFJLE1BQU0sWUFBWSxHQUFHUCxnQkFBYyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNwRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFLO0FBQ3pDLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFO0FBQzFELFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUM7QUFDNUIsVUFBVSxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUQ7QUFDQSxVQUFVLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUUsT0FBTyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUM3QyxRQUFRLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLE9BQU8sTUFBTTtBQUNiLFFBQVEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVELE9BQU87QUFDUCxLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksT0FBTyxZQUFZLENBQUM7QUFDeEIsR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQzdELElBQUksT0FBTyxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzFDLEdBQUc7QUFDSCxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQ2hCOztBQzVJTyxlQUFlLG1CQUFtQixDQUFDLFNBQVMsRUFBRTtBQUNyRCxFQUFFLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxPQUFPLCtCQUFjLENBQUMsRUFBRSxPQUFPLENBQUM7QUFDN0QsRUFBRSxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RELEVBQUUsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxLQUFLO0FBQzFELElBQUksTUFBTSxHQUFHLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsSUFBSSxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDM0QsSUFBSSxNQUFNLElBQUksR0FBRyxNQUFNUSxRQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNqRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BDLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7QUFDOUIsTUFBTSxNQUFNLEdBQUcsR0FBRyxNQUFNLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbEQsTUFBTSxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLE1BQU0saUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZELEtBQUs7QUFDTCxJQUFJLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNyQyxJQUFJLElBQUksV0FBVyxLQUFLLElBQUk7QUFDNUIsTUFBTSxNQUFNQSxRQUFFLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckQsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNOLENBQUM7QUFDRCxNQUFNLGdCQUFnQixHQUFHLDBFQUEwRSxDQUFDO0FBQ3BHLFNBQVMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3BELEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0IsRUFBRSxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakQsRUFBRSxJQUFJLENBQUMsVUFBVTtBQUNqQixJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLEVBQUUsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsRUFBRSxJQUFJLFNBQVMsS0FBSyxJQUFJO0FBQ3hCLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JHLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBQ0QsU0FBUyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUNoRCxFQUFFLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3BELEVBQUUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEQsRUFBRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QyxFQUFFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLEVBQUUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzlHLEVBQUUsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDdEMsRUFBRSxNQUFNLEtBQUssR0FBRyxTQUFTLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN0QyxFQUFFLE9BQU8sU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQzdFLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkUsRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ25CLENBQUM7QUFDRCxNQUFNLFVBQVUsR0FBRyxnRkFBZ0YsQ0FBQztBQUM3RixTQUFTLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxFQUFFLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3hELEVBQUUsSUFBSSxDQUFDLFVBQVU7QUFDakIsSUFBSSxPQUFPLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3RELEVBQUUsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLEVBQUUsTUFBTSxVQUFVLEdBQUcsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNyRSxFQUFFLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0QsRUFBRSxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUU7QUFDckIsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0gsRUFBRSxNQUFNLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekQsRUFBRSxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUMzRCxFQUFFLElBQUksQ0FBQyxRQUFRO0FBQ2YsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixFQUFFLE1BQU0sUUFBUSxHQUFHLFVBQVUsR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDcEUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BELEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBQ0QsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztBQUNwQyxTQUFTLHdCQUF3QixDQUFDLGNBQWMsRUFBRTtBQUN6RCxFQUFFLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUN4RCxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDM0IsSUFBSSxPQUFPLGNBQWMsQ0FBQztBQUMxQixHQUFHO0FBQ0gsRUFBRSxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsRUFBRSxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVDLEVBQUUsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtBQUN6QixJQUFJLE9BQU8sY0FBYyxDQUFDO0FBQzFCLEdBQUc7QUFDSCxFQUFFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDdkUsSUFBSSxPQUFPLGNBQWMsQ0FBQztBQUMxQixHQUFHO0FBQ0gsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7QUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQy9DLFFBQVEsT0FBTyxjQUFjLENBQUM7QUFDOUIsT0FBTztBQUNQLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hELEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0IsRUFBRSxjQUFjLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQyxFQUFFLE9BQU8sY0FBYyxDQUFDO0FBQ3hCOztBQzVGQSxJQUFJYixXQUFTLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztBQUN0QyxJQUFJQyxxQkFBbUIsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUM7QUFDdkQsSUFBSUMsY0FBWSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDO0FBQ25ELElBQUlDLGNBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDO0FBQ3pELElBQUlDLGlCQUFlLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHSixXQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNoSyxJQUFJSyxnQkFBYyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSztBQUMvQixFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEMsSUFBSSxJQUFJSCxjQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDbEMsTUFBTUUsaUJBQWUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLEVBQUUsSUFBSUgscUJBQW1CO0FBQ3pCLElBQUksS0FBSyxJQUFJLElBQUksSUFBSUEscUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDN0MsTUFBTSxJQUFJRSxjQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDcEMsUUFBUUMsaUJBQWUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFDLEtBQUs7QUFDTCxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQyxDQUFDO0FBZWEsTUFBTSxhQUFhLENBQUM7QUFDbkMsRUFBRSxXQUFXLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRTtBQUNyQyxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO0FBQ3RDLElBQUksTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDeEYsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUM3QixJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQzlCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBQy9CLElBQUksSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ25FLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQy9CLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUMxQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUN2QixJQUFJLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUNsRCxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLGVBQWUsR0FBR0MsZ0JBQWMsQ0FBQztBQUMxQyxNQUFNLG1CQUFtQixFQUFFLEtBQUs7QUFDaEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUMvQixHQUFHO0FBQ0gsRUFBRSw2QkFBNkIsQ0FBQyxRQUFRLEVBQUU7QUFDMUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksS0FBSztBQUNsRCxNQUFNLElBQUksYUFBYSxDQUFDLFlBQVksQ0FBQyxLQUFLLFFBQVE7QUFDbEQsUUFBUSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNqRCxLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSCxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFFO0FBQ2pELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdkIsSUFBSSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7QUFDMUIsTUFBTSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ2hFLE1BQU0sTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsRCxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEQsTUFBTSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQztBQUNsRyxNQUFNLE1BQU0sS0FBSyxHQUFHLFVBQVUsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN0RSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDbEIsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLENBQUM7QUFDekIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLE9BQU87QUFDUCxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUNBLGdCQUFjLENBQUM7QUFDaEQsUUFBUSxRQUFRLEVBQUUsa0JBQWtCO0FBQ3BDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztBQUNuRCxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsS0FBSyxHQUFHO0FBQ1YsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDM0MsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDL0IsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNuQixJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDdkIsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNyQixHQUFHO0FBQ0gsRUFBRSxNQUFNLElBQUksR0FBRztBQUNmLElBQUksTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDeEUsSUFBSSxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7QUFDNUQsSUFBSSxNQUFNLE9BQU8sR0FBRyxDQUFDLG9CQUFvQixJQUFJLENBQUMsa0JBQWtCLENBQUM7QUFDakUsSUFBSSxNQUFNLE1BQU0sR0FBRztBQUNuQixNQUFNLE9BQU8sRUFBRSxLQUFLO0FBQ3BCLE1BQU0sS0FBSyxFQUFFLEtBQUs7QUFDbEIsS0FBSyxDQUFDO0FBQ04sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtBQUMvRCxNQUFNLElBQUksb0JBQW9CO0FBQzlCLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN2RSxNQUFNLElBQUksa0JBQWtCO0FBQzVCLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUN6RCxNQUFNLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzFCLEtBQUssTUFBTSxJQUFJLENBQUMsb0JBQW9CLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUU7QUFDM0UsTUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssS0FBSztBQUN4QyxRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzFDLE1BQU0sTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDNUIsS0FBSztBQUNMLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsR0FBRztBQUNILEVBQUUsaUJBQWlCLEdBQUc7QUFDdEIsSUFBSSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUN6QyxHQUFHO0FBQ0gsRUFBRSxnQkFBZ0IsR0FBRztBQUNyQixJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDM0MsR0FBRztBQUNILEVBQUUsbUJBQW1CLEdBQUc7QUFDeEIsSUFBSSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFO0FBQ3BFLE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDekIsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRSxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEMsS0FBSztBQUNMLEdBQUc7QUFDSCxFQUFFLEtBQUssQ0FBQztBQUNSLElBQUksUUFBUTtBQUNaLElBQUksUUFBUTtBQUNaLElBQUksR0FBRztBQUNQLElBQUksY0FBYztBQUNsQixJQUFJLFFBQVE7QUFDWixJQUFJLEtBQUs7QUFDVCxHQUFHLEVBQUU7QUFDTCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxRSxJQUFJLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWixNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNDLElBQUksSUFBSSxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3pELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsSUFBSSxNQUFNLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7QUFDckcsSUFBSSxNQUFNLFFBQVEsR0FBRyxRQUFRLEdBQUcsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekUsSUFBSSxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdEQsSUFBSSxNQUFNLElBQUksR0FBRyxlQUFlLEtBQUssZUFBZSxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDekUsSUFBSSxNQUFNLFdBQVcsR0FBRyxRQUFRLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDNUMsSUFBSSxNQUFNLG1CQUFtQixHQUFHLFFBQVEsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM5RSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQzNCLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztBQUNuRCxLQUFLO0FBQ0wsSUFBSSxJQUFJLFdBQVcsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsbUJBQW1CLE1BQU0sSUFBSSxDQUFDLGVBQWUsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxLQUFLLENBQUMsRUFBRTtBQUN2SyxNQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxLQUFLLEVBQUU7QUFDMUMsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ25CLFVBQVUsSUFBSSxXQUFXO0FBQ3pCLFlBQVksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzNCO0FBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDekIsVUFBVSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQzFFLFNBQVMsTUFBTTtBQUNmLFVBQVUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3pCLFNBQVM7QUFDVCxPQUFPLE1BQU07QUFDYixRQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLGtCQUFrQixFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDeEUsUUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckIsT0FBTztBQUNQLE1BQU0sT0FBTztBQUNiLFFBQVEsTUFBTSxFQUFFLEVBQUU7QUFDbEIsUUFBUSxLQUFLO0FBQ2IsUUFBUSxRQUFRLEVBQUUsRUFBRTtBQUNwQixRQUFRLEdBQUc7QUFDWCxRQUFRLElBQUksRUFBRSxJQUFJO0FBQ2xCLE9BQU8sQ0FBQztBQUNSLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRTtBQUNqQixRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QixRQUFRLE9BQU87QUFDZixVQUFVLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQztBQUMzRCxVQUFVLEtBQUs7QUFDZixVQUFVLFFBQVEsRUFBRSxlQUFlLEtBQUssS0FBSyxDQUFDLEdBQUcscUJBQXFCLENBQUMsZUFBZSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2hHLFVBQVUsR0FBRztBQUNiLFVBQVUsSUFBSSxFQUFFLEtBQUs7QUFDckIsU0FBUyxDQUFDO0FBQ1YsT0FBTyxNQUFNO0FBQ2IsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDdkIsUUFBUSxPQUFPO0FBQ2YsVUFBVSxNQUFNLEVBQUUsRUFBRTtBQUNwQixVQUFVLEtBQUs7QUFDZixVQUFVLFFBQVEsRUFBRSxFQUFFO0FBQ3RCLFVBQVUsR0FBRztBQUNiLFVBQVUsSUFBSSxFQUFFLElBQUk7QUFDcEIsU0FBUyxDQUFDO0FBQ1YsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7O0FDakxBLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxRQUFRLEtBQUtLLEtBQUksQ0FBQyxJQUFJLENBQUNBLEtBQUksQ0FBQyxJQUFJLENBQUNBLEtBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFQSxLQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEksTUFBTSxjQUFjLENBQUM7QUFDNUIsRUFBRSxXQUFXLEdBQUc7QUFDaEIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUN2QixHQUFHO0FBQ0gsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ2hCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDckIsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ25ELE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYTtBQUM1QixRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN4QixNQUFNLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzlDLE1BQU0sSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUNuSSxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsU0FBUyxHQUFHO0FBQ2QsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3ZCLEdBQUc7QUFDSCxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsR0FBRyxLQUFLLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRTtBQUMxRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtBQUNsQixNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztBQUNqRSxJQUFJLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxFQUFFO0FBQ3hDLE1BQU0sSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksQ0FBQyxRQUFRO0FBQ25ELFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO0FBQzVGLE1BQU0sSUFBSTtBQUNWLFFBQVEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQ3ZGLFFBQVEsSUFBSSxDQUFDLEtBQUs7QUFDbEIsVUFBVSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzlDO0FBQ0EsVUFBVSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzdELE9BQU8sQ0FBQyxPQUFPLEdBQUcsRUFBRTtBQUNwQixRQUFRLEdBQUcsQ0FBQyxPQUFPLEdBQUcscUJBQXFCLENBQUM7QUFDNUMsUUFBUSxNQUFNLEdBQUcsQ0FBQztBQUNsQixPQUFPO0FBQ1AsS0FBSztBQUNMLElBQUksTUFBTSxRQUFRLEdBQUc7QUFDckIsTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNyQyxNQUFNLEdBQUcsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNqQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xCLElBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO0FBQ3JFLE1BQU0sUUFBUTtBQUNkLE1BQU0sUUFBUTtBQUNkLE1BQU0sUUFBUTtBQUNkLE1BQU0sY0FBYztBQUNwQixLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtBQUNmLE1BQU0sSUFBSTtBQUNWLFFBQVEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLE9BQU8sQ0FBQyxPQUFPLEtBQUssRUFBRTtBQUN0QixRQUFRLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN0RSxRQUFRLE1BQU0sS0FBSyxDQUFDO0FBQ3BCLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsTUFBTSxRQUFRLEdBQUc7QUFDbkIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO0FBQzdDLE1BQU0sT0FBTztBQUNiLElBQUksTUFBTSxNQUFNLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM5RSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDdkIsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLEdBQUc7QUFDSCxDQUFDO0FBQ00sZUFBZSxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFO0FBQ3pELEVBQUUsTUFBTSxRQUFRLEdBQUc7QUFDbkIsSUFBSSxRQUFRO0FBQ1osSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksV0FBVyxFQUFFLEtBQUs7QUFDdEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEIsSUFBSSxhQUFhLEVBQUUsRUFBRTtBQUNyQixJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxHQUFHLENBQUM7QUFDSixFQUFFLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0FBQ25ELEVBQUUsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7QUFDakQsRUFBRSxJQUFJLGNBQWM7QUFDcEIsSUFBSSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztBQUNoQyxFQUFFLE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BDLEVBQUUsUUFBUSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO0FBQ3hDLEVBQUUsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQy9CLEVBQUUsUUFBUSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ25DLEVBQUUsUUFBUSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO0FBQ3ZDLEVBQUUsUUFBUSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ25DLEVBQUUsUUFBUSxDQUFDLFNBQVMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsY0FBYyxHQUFHLENBQUMsQ0FBQztBQUM1RCxFQUFFLFFBQVEsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNyRCxFQUFFLE9BQU8sUUFBUSxDQUFDO0FBQ2xCOztBQzNGQSxJQUFJLE9BQU8sQ0FBQztBQUNMLFNBQVMsaUJBQWlCLEdBQUc7QUFDcEMsRUFBRSxJQUFJLENBQUMsT0FBTztBQUNkLElBQUksT0FBTyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7QUFDbkMsRUFBRSxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBQ0QsTUFBTSxjQUFjLEdBQUcsQ0FBQyxRQUFRLEtBQUs7QUFDckMsRUFBRSxJQUFJO0FBQ04sSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNkLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSztBQUMxQixNQUFNLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUN2QixJQUFJLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsR0FBRztBQUNILEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0FBQ3BELENBQUMsQ0FBQztBQUNLLE1BQU0sY0FBYyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssS0FBSztBQUMvQyxFQUFFLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsaUJBQWlCLENBQUMsRUFBRTtBQUMxRCxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsVUFBVSxFQUFFLE9BQU8sRUFBRTtBQUNqRixNQUFNLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2xELE1BQU0sSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLElBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxFQUFFO0FBQzVFLFFBQVEsT0FBTyxHQUFHLFVBQVUsQ0FBQztBQUM3QixRQUFRLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUM1QixPQUFPO0FBQ1AsTUFBTSxpQkFBaUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN2RSxLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSCxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsU0FBUywwQkFBMEIsQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRTtBQUM5SSxJQUFJLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2hELElBQUksSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUU7QUFDeEMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDO0FBQy9CLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQztBQUNsQyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUMxQixLQUFLO0FBQ0wsSUFBSSxJQUFJLGNBQWM7QUFDdEIsTUFBTSxjQUFjLEdBQUcsd0JBQXdCLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDaEUsSUFBSSxpQkFBaUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDcEYsR0FBRyxDQUFDLENBQUM7QUFDTCxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsOEJBQThCLEVBQUUsU0FBUyxPQUFPLEVBQUU7QUFDOUYsSUFBSSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNoRCxJQUFJLGlCQUFpQixFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRSxHQUFHLENBQUMsQ0FBQztBQUNMLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxvQ0FBb0MsRUFBRSxTQUFTLDBCQUEwQixDQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUU7QUFDL0ksSUFBSSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNoRCxJQUFJLGlCQUFpQixFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQ2hHLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsQ0FBQzs7QUM3Q00sTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMvQixNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzdCLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDakMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUMzQixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQy9CLE1BQU07QUFDTixxQkFBRUksbUJBQWlCO0FBQ25CLEVBQUUsYUFBYTtBQUNmLEVBQUUsVUFBVTtBQUNaLEVBQUUsU0FBUztBQUNYLEVBQUUsWUFBWTtBQUNkLEVBQUUsa0JBQWtCO0FBQ3BCLENBQUMsR0FBR0MsU0FBbUIsQ0FBQztBQUN4QixNQUFNLE9BQU8sR0FBRztBQUNoQixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLFlBQVk7QUFDZCxFQUFFLFVBQVU7QUFDWixFQUFFLGFBQWE7QUFDZixFQUFFLFNBQVM7QUFDWCxFQUFFRCxtQkFBaUI7QUFDbkIsQ0FBQyxDQUFDO0FBQ0ssU0FBUyxXQUFXLENBQUMsV0FBVyxFQUFFLFFBQVEsR0FBRyxVQUFVLEVBQUUsUUFBUSxHQUFHLFVBQVUsRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFO0FBQ3JHLEVBQUUsTUFBTTtBQUNSLElBQUksT0FBTyxHQUFHLEVBQUU7QUFDaEIsSUFBSSxhQUFhLEdBQUcsY0FBYztBQUNsQyxJQUFJLGtCQUFrQixHQUFHLEtBQUs7QUFDOUIsSUFBSSxLQUFLLEdBQUcsS0FBSztBQUNqQixJQUFJLE9BQU8sR0FBRyxFQUFFO0FBQ2hCLElBQUksYUFBYSxHQUFHLGNBQWM7QUFDbEMsSUFBSSxjQUFjLEdBQUcsRUFBRTtBQUN2QixJQUFJLG1CQUFtQixHQUFHLGNBQWM7QUFDeEMsR0FBRyxHQUFHLE9BQU8sQ0FBQztBQUNkLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLEVBQUUsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDO0FBQzNCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixJQUFJLFFBQVEsS0FBSyxFQUFFLEVBQUU7QUFDOUMsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakUsSUFBSSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLEdBQUc7QUFDSCxFQUFFLElBQUksT0FBTyxLQUFLLEVBQUUsRUFBRTtBQUN0QixJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUNqRCxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDbkIsR0FBRztBQUNILEVBQUUsSUFBSSxLQUFLLEVBQUU7QUFDYixJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQyxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDbkIsR0FBRztBQUNILEVBQUUsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ2pDLElBQUksU0FBUyxJQUFJLFdBQVcsQ0FBQztBQUM3QixHQUFHLE1BQU07QUFDVCxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUNyRCxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDbkIsR0FBRztBQUNILEVBQUUsSUFBSSxRQUFRLEtBQUssRUFBRSxFQUFFO0FBQ3ZCLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQztBQUN0QixHQUFHLE1BQU07QUFDVCxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNqRSxJQUFJLElBQUksY0FBYztBQUN0QixNQUFNLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsbUJBQW1CLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDcEUsSUFBSSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLEdBQUc7QUFDSCxFQUFFLElBQUksT0FBTyxLQUFLLEVBQUU7QUFDcEIsSUFBSSxTQUFTLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNsQyxFQUFFLElBQUksU0FBUyxLQUFLLEVBQUU7QUFDdEIsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2pDLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBQ0QsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDO0FBQzVCLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEtBQUssWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4RyxNQUFNLFNBQVMsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLEdBQUcsRUFBRSxLQUFLO0FBQ3BELEVBQUUsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLEVBQUUsSUFBSSxNQUFNLENBQUM7QUFDYixFQUFFLElBQUk7QUFDTixJQUFJLE1BQU0sR0FBR0wsUUFBWSxDQUFDLE1BQU0sRUFBRTtBQUNsQyxNQUFNLFFBQVE7QUFDZCxNQUFNLE9BQU8sRUFBRSxPQUFPO0FBQ3RCLEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRyxDQUFDLE1BQU07QUFDVixJQUFJLE1BQU0sR0FBR0EsUUFBWSxDQUFDLE1BQU0sRUFBRTtBQUNsQyxNQUFNLFVBQVUsRUFBRSxLQUFLO0FBQ3ZCLE1BQU0sUUFBUTtBQUNkLE1BQU0sT0FBTyxFQUFFLE9BQU87QUFDdEIsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0gsRUFBRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLElBQUksVUFBVSxJQUFJLFFBQVEsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1RyxDQUFDLENBQUM7QUFDSyxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQU0sS0FBSyxjQUFjLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRixNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQUssS0FBSyxjQUFjLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RixTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRTtBQUNwQyxFQUFFLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRDs7Ozs7Ozs7Ozs7Ozs7OztBQzVGQSxJQUFJVCxXQUFTLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztBQUN0QyxJQUFJZ0IsWUFBVSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztBQUN6QyxJQUFJQyxtQkFBaUIsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUM7QUFDekQsSUFBSWhCLHFCQUFtQixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztBQUN2RCxJQUFJQyxjQUFZLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7QUFDbkQsSUFBSUMsY0FBWSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUM7QUFDekQsSUFBSUMsaUJBQWUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUdKLFdBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2hLLElBQUlLLGdCQUFjLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLO0FBQy9CLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxJQUFJLElBQUlILGNBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUNsQyxNQUFNRSxpQkFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDeEMsRUFBRSxJQUFJSCxxQkFBbUI7QUFDekIsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJQSxxQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM3QyxNQUFNLElBQUlFLGNBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUNwQyxRQUFRQyxpQkFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUMsS0FBSztBQUNMLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDLENBQUM7QUFDRixJQUFJYyxlQUFhLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLRixZQUFVLENBQUMsQ0FBQyxFQUFFQyxtQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBU2xFLE1BQU0sZUFBZSxHQUFHLENBQUMsRUFBRSxLQUFLLE9BQU8sRUFBRSxLQUFLLFVBQVUsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLGVBQWUsQ0FBQztBQUN2RyxNQUFNLGVBQWUsR0FBRyxDQUFDLFNBQVMsS0FBSztBQUN2QyxFQUFFLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7QUFDN0IsRUFBRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMvQyxFQUFFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN4RCxFQUFFLE1BQU0sU0FBUyxHQUFHQyxlQUFhLENBQUNiLGdCQUFjLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxFQUFFO0FBQ3BFLElBQUksZ0JBQWdCO0FBQ3BCLElBQUksY0FBYztBQUNsQixHQUFHLENBQUMsQ0FBQztBQUNMLEVBQUUsTUFBTSxZQUFZLEdBQUdhLGVBQWEsQ0FBQ2IsZ0JBQWMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRTtBQUNyRSxJQUFJLEtBQUs7QUFDVCxJQUFJLEtBQUssRUFBRSxTQUFTO0FBQ3BCLElBQUksT0FBTztBQUNYLElBQUksTUFBTTtBQUNWLElBQUksZ0JBQWdCLEVBQUUsRUFBRTtBQUN4QixHQUFHLENBQUMsQ0FBQztBQUNMLEVBQUUsT0FBTztBQUNULElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkIsSUFBSSxLQUFLO0FBQ1QsSUFBSSxHQUFHO0FBQ1AsR0FBRyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBQ0YsTUFBTSxlQUFlLFNBQVMsS0FBSyxDQUFDO0FBQ3BDLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO0FBQ3pDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25CLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDekIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM3QixHQUFHO0FBQ0gsQ0FBQztBQUNELFNBQVMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO0FBQ25DLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLEtBQUs7QUFDdkIsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsZUFBZSxDQUFDLEtBQUs7QUFDaEYsTUFBTSxTQUFTLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxFQUFFO0FBQzFDLFFBQVEsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVELFFBQVEsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzlGLFFBQVEsSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSztBQUM1QyxVQUFVLE1BQU0sSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2pFLE9BQU87QUFDUCxNQUFNLGVBQWUsa0JBQWtCLENBQUMsR0FBRyxJQUFJLEVBQUU7QUFDakQsUUFBUSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUQsUUFBUSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNwRyxRQUFRLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUs7QUFDNUMsVUFBVSxNQUFNLElBQUksZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNqRSxPQUFPO0FBQ1AsTUFBTSxNQUFNLHNCQUFzQixHQUFHLGVBQWUsQ0FBQyxlQUFlLENBQUMsR0FBRyxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQztBQUMvRyxNQUFNLEtBQUssQ0FBQyxTQUFTLENBQUNjLE1BQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLG1CQUFtQixFQUFFLHNCQUFzQixDQUFDLENBQUM7QUFDN0YsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHLENBQUM7QUFDSixDQUFDO0FBQ00sTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxLQUFLO0FBQzVDLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLE9BQU8sS0FBSztBQUN2RCxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN6QyxHQUFHLENBQUMsQ0FBQztBQUNMLENBQUM7O0FDOUVNLE1BQU0saUJBQWlCLENBQUM7QUFDL0IsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sR0FBRyxLQUFLLEVBQUU7QUFDdkMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN6QixJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQzNCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFDekQsR0FBRztBQUNILEVBQUUsaUJBQWlCLEdBQUc7QUFDdEIsSUFBSSxPQUFPO0FBQ1gsTUFBTSxNQUFNO0FBQ1osTUFBTSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU87QUFDekIsTUFBTSxLQUFLLEVBQUUsWUFBWTtBQUN6QixLQUFLLENBQUM7QUFDTixHQUFHO0FBQ0gsQ0FBQztBQUNNLE1BQU0sZ0JBQWdCLFNBQVMsaUJBQWlCLENBQUM7QUFDeEQsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sR0FBRyxLQUFLLEVBQUU7QUFDdkMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7QUFDOUIsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDbEQsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzNCLEdBQUc7QUFDSCxFQUFFLGVBQWUsQ0FBQyxLQUFLLEVBQUU7QUFDekIsSUFBSSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZFLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUMzQyxHQUFHO0FBQ0gsRUFBRSxRQUFRLEdBQUc7QUFDYixJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzFELEdBQUc7QUFDSCxFQUFFLGVBQWUsR0FBRztBQUNwQixJQUFJLE9BQU8sUUFBUSxDQUFDO0FBQ3BCLEdBQUc7QUFDSCxDQUFDO0FBQ00sTUFBTSxRQUFRLFNBQVMsaUJBQWlCLENBQUM7QUFDaEQsRUFBRSxlQUFlLENBQUMsS0FBSyxFQUFFO0FBQ3pCLElBQUksT0FBTyxLQUFLLElBQUksSUFBSSxDQUFDO0FBQ3pCLEdBQUc7QUFDSCxFQUFFLFFBQVEsR0FBRztBQUNiLElBQUksT0FBTyxVQUFVLENBQUM7QUFDdEIsR0FBRztBQUNILEVBQUUsbUJBQW1CLEdBQUc7QUFDeEIsSUFBSSxPQUFPLFVBQVUsQ0FBQztBQUN0QixHQUFHO0FBQ0gsQ0FBQztBQUNNLE1BQU0sZ0JBQWdCLFNBQVMsaUJBQWlCLENBQUM7QUFDeEQsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sR0FBRyxLQUFLLEVBQUU7QUFDdkMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzNCLEdBQUc7QUFDSCxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUU7QUFDcEIsSUFBSSxJQUFJLE1BQU0sQ0FBQyxjQUFjO0FBQzdCLE1BQU0sT0FBTyxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLElBQUksSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLFNBQVMsS0FBSyxHQUFHO0FBQ3pDLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO0FBQ3JDLEdBQUc7QUFDSCxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFO0FBQzdCLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDWixNQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ25CLElBQUksSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQztBQUMzRCxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLElBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDOUQsR0FBRztBQUNILEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRTtBQUN6QixJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRTtBQUN6QyxNQUFNLE1BQU0sSUFBSSxTQUFTLENBQUMsQ0FBQyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVHLEtBQUs7QUFDTCxJQUFJLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztBQUN0QixJQUFJLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUN4QyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ2pHLFFBQVEsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN2QixRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1AsS0FBSztBQUNMLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUMzQyxHQUFHO0FBQ0gsRUFBRSxRQUFRLEdBQUc7QUFDYixJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzFELEdBQUc7QUFDSCxFQUFFLGVBQWUsR0FBRztBQUNwQixJQUFJLE9BQU8sUUFBUSxDQUFDO0FBQ3BCLEdBQUc7QUFDSCxDQUFDO0FBQ00sTUFBTSxlQUFlLFNBQVMsaUJBQWlCLENBQUM7QUFDdkQsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sR0FBRyxLQUFLLEVBQUU7QUFDdkMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzNCLEdBQUc7QUFDSCxFQUFFLGVBQWUsQ0FBQyxLQUFLLEVBQUU7QUFDekIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDckMsTUFBTSxNQUFNLElBQUksU0FBUyxDQUFDLENBQUMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRyxLQUFLO0FBQ0wsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25KLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUMzQyxHQUFHO0FBQ0gsRUFBRSxRQUFRLEdBQUc7QUFDYixJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3pELEdBQUc7QUFDSCxFQUFFLGVBQWUsR0FBRztBQUNwQixJQUFJLE9BQU8sT0FBTyxDQUFDO0FBQ25CLEdBQUc7QUFDSCxDQUFDO0FBQ00sTUFBTSxHQUFHLFNBQVMsaUJBQWlCLENBQUM7QUFDM0MsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ3RCLElBQUksSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUU7QUFDdkMsTUFBTSxNQUFNLElBQUksU0FBUyxDQUFDLDJHQUEyRyxDQUFDLENBQUM7QUFDdkksS0FBSztBQUNMLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xCLEdBQUc7QUFDSCxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUU7QUFDbEIsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJO0FBQ2pCLE1BQU0sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3ZCLElBQUksTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztBQUN6RCxJQUFJLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztBQUN0RyxJQUFJLE9BQU8sT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUM7QUFDaEQsR0FBRztBQUNILEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRTtBQUN6QixJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNO0FBQzlCLE1BQU0sT0FBTyxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksS0FBSyxZQUFZLE1BQU0sQ0FBQztBQUNqRSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNO0FBQzlCLE1BQU0sT0FBTyxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksS0FBSyxZQUFZLE1BQU0sQ0FBQztBQUNqRSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRO0FBQ2hDLE1BQU0sT0FBTyxPQUFPLEtBQUssSUFBSSxVQUFVLElBQUksS0FBSyxZQUFZLFFBQVEsQ0FBQztBQUNyRSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPO0FBQy9CLE1BQU0sT0FBTyxPQUFPLEtBQUssSUFBSSxTQUFTLElBQUksS0FBSyxZQUFZLE9BQU8sQ0FBQztBQUNuRSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNO0FBQzlCLE1BQU0sT0FBTyxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksS0FBSyxZQUFZLE1BQU0sQ0FBQztBQUNqRSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNO0FBQzlCLE1BQU0sT0FBTyxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksS0FBSyxZQUFZLE1BQU0sQ0FBQztBQUNqRSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNO0FBQzlCLE1BQU0sT0FBTyxPQUFPLEtBQUssSUFBSSxRQUFRLENBQUM7QUFDdEMsSUFBSSxPQUFPLEtBQUssWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3hDLEdBQUc7QUFDSCxFQUFFLFFBQVEsR0FBRztBQUNiLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNILEVBQUUsZUFBZSxHQUFHO0FBQ3BCLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU07QUFDOUIsTUFBTSxPQUFPLFFBQVEsQ0FBQztBQUN0QixJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNO0FBQzlCLE1BQU0sT0FBTyxRQUFRLENBQUM7QUFDdEIsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssUUFBUTtBQUNoQyxNQUFNLE9BQU8sVUFBVSxDQUFDO0FBQ3hCLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU07QUFDOUIsTUFBTSxPQUFPLFFBQVEsQ0FBQztBQUN0QixJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPO0FBQy9CLE1BQU0sT0FBTyxTQUFTLENBQUM7QUFDdkIsSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZDLEdBQUc7QUFDSCxFQUFFLG1CQUFtQixHQUFHO0FBQ3hCLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxHQUFHO0FBQ0gsQ0FBQztBQUNNLE1BQU0sY0FBYyxTQUFTLGlCQUFpQixDQUFDO0FBQ3RELEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLEdBQUcsS0FBSyxFQUFFO0FBQ3ZDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztBQUN4RCxNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztBQUM5RCxJQUFJLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN2QyxHQUFHO0FBQ0gsRUFBRSxlQUFlLENBQUMsS0FBSyxFQUFFO0FBQ3pCLElBQUksTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuRSxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDM0MsR0FBRztBQUNILEVBQUUsUUFBUSxHQUFHO0FBQ2IsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4RCxHQUFHO0FBQ0gsRUFBRSxlQUFlLEdBQUc7QUFDcEIsSUFBSSxPQUFPLFFBQVEsQ0FBQztBQUNwQixHQUFHO0FBQ0gsQ0FBQztBQUNNLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxLQUFLO0FBQ3ZELEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQztBQUNqRSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxRQUFRLEtBQUssSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUN2RSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsS0FBSyxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDakcsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLEtBQUssSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ2pHLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLENBQUMsUUFBUSxLQUFLLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDL0YsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLEtBQUssSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUM3RixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHO0FBQ3BCLElBQUksZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLEtBQUssSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO0FBQ3hFLElBQUksZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLEtBQUssSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO0FBQ3hFLElBQUksZUFBZSxFQUFFLENBQUMsUUFBUSxLQUFLLElBQUksZUFBZSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7QUFDdEUsSUFBSSxjQUFjLEVBQUUsQ0FBQyxRQUFRLEtBQUssSUFBSSxjQUFjLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQztBQUNwRSxHQUFHLENBQUM7QUFDSixDQUFDOztBQy9LRCxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDZixlQUFlLFNBQVMsR0FBRztBQUNsQyxFQUFFLElBQUksU0FBUztBQUNmLElBQUksT0FBTztBQUNYLEVBQUVBLE1BQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdkIsRUFBRUEsTUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUMzQixFQUFFQSxNQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25CLEVBQUVBLE1BQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDM0IsRUFBRUEsTUFBSSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBQ25DLEVBQUUsU0FBUyxHQUFHLElBQUksQ0FBQztBQUNuQjs7QUNWQSxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDakIsZUFBZSxjQUFjLENBQUMsTUFBTSxFQUFFO0FBQzdDLEVBQUUsSUFBSSxXQUFXO0FBQ2pCLElBQUksT0FBTztBQUNYLEVBQUUsV0FBVyxHQUFHLElBQUksQ0FBQztBQUNyQixFQUFFLGtCQUFrQixFQUFFLENBQUM7QUFDdkIsRUFBRSxNQUFNLFNBQVMsRUFBRSxDQUFDO0FBQ3BCLEVBQUUsSUFBSSxNQUFNLENBQUMsT0FBTztBQUNwQixJQUFJLENBQUMsTUFBTSxPQUFPLHVCQUF5QixDQUFDLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQztBQUNwRSxDQUFDO0FBQ00sU0FBUyxrQkFBa0IsR0FBRztBQUNyQyxFQUFFLE1BQU0sTUFBTSxHQUFHLElBQUksUUFBUSxDQUFDO0FBQzlCLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO0FBQ3BDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDYixNQUFNLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDO0FBQzdCLFFBQVEsSUFBSSxFQUFFLFFBQVE7QUFDdEIsUUFBUSxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQztBQUM3QixRQUFRLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsT0FBTyxLQUFLLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNqRixRQUFRLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ3hCLE9BQU8sQ0FBQyxDQUFDO0FBQ1QsTUFBTSxRQUFRLEVBQUUsQ0FBQztBQUNqQixLQUFLO0FBQ0wsR0FBRyxDQUFDLENBQUM7QUFDTCxFQUFFLE1BQU0sTUFBTSxHQUFHLElBQUksUUFBUSxDQUFDO0FBQzlCLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO0FBQ3BDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDYixNQUFNLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDO0FBQzdCLFFBQVEsSUFBSSxFQUFFLFFBQVE7QUFDdEIsUUFBUSxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQztBQUM3QixRQUFRLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsT0FBTyxLQUFLLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNqRixRQUFRLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ3hCLE9BQU8sQ0FBQyxDQUFDO0FBQ1QsTUFBTSxRQUFRLEVBQUUsQ0FBQztBQUNqQixLQUFLO0FBQ0wsR0FBRyxDQUFDLENBQUM7QUFDTCxFQUFFLFVBQVUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUM7QUFDbkMsSUFBSSxNQUFNO0FBQ1YsSUFBSSxNQUFNO0FBQ1YsSUFBSSxTQUFTLEVBQUUsSUFBSTtBQUNuQixJQUFJLGdCQUFnQixFQUFFLENBQUM7QUFDdkIsR0FBRyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBQ00sZUFBZSxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7QUFDakQsRUFBRSxNQUFNLEdBQUcsR0FBRyxNQUFNLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xFLEVBQUUsSUFBSTtBQUNOLElBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQztBQUNmLEdBQUcsU0FBUztBQUNaLElBQUksTUFBTSxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ25DLEdBQUc7QUFDSCxDQUFDO0FBQ00sZUFBZSxhQUFhLENBQUMsTUFBTSxFQUFFO0FBQzVDLEVBQUUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMzQyxFQUFFLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxLQUFLO0FBQzlDLElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkQsSUFBSSxNQUFNLE9BQU8sSUFBSSxDQUFDLENBQUM7QUFDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNOOztBQzVEQSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLFNBQVMsY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUUsRUFBRTtBQUMxRCxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtBQUNyQyxJQUFJLE9BQU8sR0FBRyxDQUFDO0FBQ2YsRUFBRSxJQUFJLE9BQU8sR0FBRyxLQUFLLFVBQVU7QUFDL0IsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsRUFBRSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7QUFDN0IsSUFBSSxPQUFPLEdBQUcsQ0FBQztBQUNmLEVBQUUsSUFBSSxHQUFHLFlBQVksT0FBTyxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLFNBQVMsS0FBSyxlQUFlO0FBQ2pILElBQUksT0FBTyxTQUFTLENBQUM7QUFDckIsRUFBRSxJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxHQUFHLFlBQVksT0FBTztBQUM5RCxJQUFJLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQztBQUN2QixFQUFFLElBQUksT0FBTyxHQUFHLENBQUMsZUFBZSxLQUFLLFVBQVU7QUFDL0MsSUFBSSxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JELEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUNuQixJQUFJLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QixFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUMxQixJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4QyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUs7QUFDMUIsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6QyxLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRyxNQUFNO0FBQ1QsSUFBSSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDekIsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxPQUFPLEdBQUcsSUFBSSxHQUFHLEtBQUssWUFBWSxFQUFFO0FBQ3hDLE1BQU0sTUFBTSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSztBQUN2RCxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksS0FBSyxDQUFDO0FBQzNCLFVBQVUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEQsT0FBTyxDQUFDLENBQUM7QUFDVCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLEtBQUs7QUFDTCxJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLEdBQUc7QUFDSCxDQUFDO0FBQ00sU0FBUyxZQUFZLENBQUMsR0FBRyxFQUFFO0FBQ2xDLEVBQUUsSUFBSSxDQUFDLEdBQUc7QUFDVixJQUFJLE9BQU8sR0FBRyxDQUFDO0FBQ2YsRUFBRSxJQUFJLEdBQUcsQ0FBQyxLQUFLO0FBQ2YsSUFBSSxHQUFHLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxJQUFJO0FBQ2QsSUFBSSxHQUFHLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsRUFBRSxJQUFJLE9BQU8sR0FBRyxDQUFDLFFBQVEsS0FBSyxRQUFRO0FBQ3RDLElBQUksR0FBRyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzNDLEVBQUUsSUFBSSxPQUFPLEdBQUcsQ0FBQyxNQUFNLEtBQUssUUFBUTtBQUNwQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2QyxFQUFFLElBQUk7QUFDTixJQUFJLE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNkLElBQUksT0FBTyxjQUFjLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDdkcscUJBQXFCLEVBQUUsR0FBRyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUQsR0FBRztBQUNIOztBQ2pEQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRTtBQUNoQyxFQUFFLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBQ00sZUFBZSxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtBQUNsRCxFQUFFLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNuQixFQUFFLEtBQUssTUFBTSxRQUFRLElBQUksS0FBSyxFQUFFO0FBQ2hDLElBQUksTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDakQsSUFBSSxNQUFNLElBQUksR0FBRztBQUNqQixNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3BCLE1BQU0sSUFBSSxFQUFFLElBQUk7QUFDaEIsTUFBTSxJQUFJLEVBQUUsT0FBTztBQUNuQixNQUFNLElBQUksRUFBRSxLQUFLO0FBQ2pCLE1BQU0sUUFBUTtBQUNkLE1BQU0sS0FBSyxFQUFFLEVBQUU7QUFDZixLQUFLLENBQUM7QUFDTixJQUFJLFlBQVksRUFBRSxDQUFDO0FBQ25CLElBQUksSUFBSTtBQUNSLE1BQU0sTUFBTSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEMsTUFBTSxNQUFNLE9BQU8sUUFBUSxDQUFDLENBQUM7QUFDN0IsTUFBTSxNQUFNLFlBQVksR0FBRyxNQUFNLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUQsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQzdDLE1BQU0sS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNqRSxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7QUFDL0IsVUFBVSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixTQUFTLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtBQUN2QyxVQUFVLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFNBQVMsTUFBTTtBQUNmLFVBQVUsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFDLFVBQVUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLFVBQVUsSUFBSSxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBQzNELFVBQVUsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUM5QyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ2hCLE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRztBQUNwQixRQUFRLEtBQUssRUFBRSxNQUFNO0FBQ3JCLFFBQVEsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDOUIsT0FBTyxDQUFDO0FBQ1IsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQyxLQUFLO0FBQ0wsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEIsSUFBSSxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRCxJQUFJLGtCQUFrQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsZUFBZSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVGLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQixHQUFHO0FBQ0gsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFDRCxTQUFTLGtCQUFrQixDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUU7QUFDbkYsRUFBRSxNQUFNLFdBQVcsR0FBRyxZQUFZLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUM7QUFDNUQsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSztBQUM3QixJQUFJLE1BQU0sV0FBVyxHQUFHLFdBQVcsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQztBQUN6RCxJQUFJLElBQUksUUFBUSxFQUFFO0FBQ2xCLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sS0FBSyxXQUFXLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN0RSxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7QUFDL0IsVUFBVSxjQUFjLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZDLFVBQVUsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDekIsU0FBUztBQUNULE9BQU8sTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQ25ELFFBQVEsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDeEIsT0FBTyxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7QUFDcEMsUUFBUSxjQUFjLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3JDLFFBQVEsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdkIsT0FBTztBQUNQLEtBQUs7QUFDTCxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7QUFDM0IsTUFBTSxJQUFJLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUNuRCxRQUFRLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ3hCLEtBQUssTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO0FBQ25DLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU07QUFDM0IsUUFBUSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEI7QUFDQSxRQUFRLGtCQUFrQixDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM3RSxLQUFLO0FBQ0wsR0FBRyxDQUFDLENBQUM7QUFDTCxFQUFFLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7QUFDNUIsSUFBSSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDO0FBQ2xELE1BQU0sS0FBSyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDMUIsR0FBRztBQUNILENBQUM7QUFDRCxTQUFTLGdCQUFnQixDQUFDLEtBQUssRUFBRTtBQUNqQyxFQUFFLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRyxDQUFDO0FBQ0QsU0FBUyxZQUFZLENBQUMsS0FBSyxFQUFFO0FBQzdCLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUs7QUFDN0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO0FBQzFCLE1BQU0sQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDdEIsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTztBQUM1QixRQUFRLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixLQUFLO0FBQ0wsR0FBRyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBQ0QsU0FBUyxjQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtBQUN6QyxFQUFFLElBQUksU0FBUztBQUNmLElBQUksT0FBTztBQUNYLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRztBQUNoQixJQUFJLEtBQUssRUFBRSxNQUFNO0FBQ2pCLElBQUksS0FBSyxFQUFFLFlBQVksQ0FBQyxJQUFJLEtBQUssQ0FBQyxrR0FBa0csQ0FBQyxDQUFDO0FBQ3RJLEdBQUcsQ0FBQztBQUNKLENBQUM7QUFDRCxTQUFTLGFBQWEsQ0FBQyxNQUFNLEVBQUU7QUFDL0IsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUs7QUFDbkMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU87QUFDMUIsTUFBTSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsR0FBRyxDQUFDLENBQUM7QUFDTDs7QUNqSEEsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztBQUN0QyxJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7QUFDekMsSUFBSSxpQkFBaUIsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUM7QUFDekQsSUFBSSxtQkFBbUIsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUM7QUFDdkQsSUFBSSxZQUFZLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7QUFDbkQsSUFBSSxZQUFZLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQztBQUN6RCxJQUFJLGVBQWUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDaEssSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLO0FBQy9CLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxJQUFJLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQ2xDLE1BQU0sZUFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDeEMsRUFBRSxJQUFJLG1CQUFtQjtBQUN6QixJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDN0MsTUFBTSxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUNwQyxRQUFRLGVBQWUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFDLEtBQUs7QUFDTCxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQyxDQUFDO0FBQ0YsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQVUzRCxlQUFlLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtBQUN2RCxFQUFFLElBQUksSUFBSSxLQUFLLFlBQVksSUFBSSxLQUFLLENBQUMsS0FBSztBQUMxQyxJQUFJLE1BQU0sYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2pELEVBQUUsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLEVBQUUsSUFBSSxJQUFJLEtBQUssV0FBVyxJQUFJLEtBQUssQ0FBQyxLQUFLO0FBQ3pDLElBQUksTUFBTSxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUNELE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDeEIsSUFBSSxXQUFXLENBQUM7QUFDaEIsSUFBSSxjQUFjLENBQUM7QUFDbkIsU0FBUyxVQUFVLENBQUMsSUFBSSxFQUFFO0FBQzFCLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsQyxFQUFFLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM1QixFQUFFLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTTtBQUNqQyxJQUFJLGNBQWMsR0FBRyxlQUFlLEVBQUUsQ0FBQztBQUN2QyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDVCxDQUFDO0FBQ0QsZUFBZSxlQUFlLEdBQUc7QUFDakMsRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDNUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN2QixFQUFFLElBQUksS0FBSyxDQUFDLElBQUksRUFBRTtBQUNsQixJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEQsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEIsSUFBSSxPQUFPLENBQUMsQ0FBQztBQUNiLEdBQUc7QUFDSCxDQUFDO0FBQ00sZUFBZSxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ3BDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2IsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSztBQUN6QixJQUFJLE9BQU87QUFDWCxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxNQUFNLE1BQU0sRUFBRTtBQUNuRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQixJQUFJLE9BQU87QUFDWCxHQUFHO0FBQ0gsRUFBRSxNQUFNLEtBQUssR0FBR0MsYUFBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRztBQUNoQixJQUFJLEtBQUssRUFBRSxLQUFLO0FBQ2hCLEdBQUcsQ0FBQztBQUNKLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25CLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztBQUNyQixFQUFFLGlCQUFpQixFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BDLEVBQUUsT0FBTyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDM0MsRUFBRSxJQUFJO0FBQ04sSUFBSSxNQUFNLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN0RSxJQUFJLFFBQVEsQ0FBQztBQUNiLE1BQU0sY0FBYyxFQUFFLENBQUM7QUFDdkIsTUFBTSxxQkFBcUIsRUFBRSxLQUFLO0FBQ2xDLE1BQU0sMEJBQTBCLEVBQUUsSUFBSTtBQUN0QyxNQUFNLHdCQUF3QixFQUFFLElBQUk7QUFDcEMsTUFBTSw2QkFBNkIsRUFBRSxJQUFJO0FBQ3pDLE1BQU0sUUFBUSxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUTtBQUNyRSxNQUFNLGVBQWUsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDO0FBQ3hDLEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCLElBQUksTUFBTSxFQUFFLGNBQWMsRUFBRSx3QkFBd0IsRUFBRSw2QkFBNkIsRUFBRSxxQkFBcUIsRUFBRSwwQkFBMEIsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDO0FBQ3RKLElBQUksSUFBSSx3QkFBd0IsS0FBSyxJQUFJLElBQUksY0FBYyxLQUFLLHdCQUF3QjtBQUN4RixNQUFNLE1BQU0sNkJBQTZCLENBQUM7QUFDMUMsSUFBSSxJQUFJLHFCQUFxQixLQUFLLElBQUksSUFBSSxjQUFjLEtBQUssQ0FBQztBQUM5RCxNQUFNLE1BQU0sMEJBQTBCLENBQUM7QUFDdkMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDL0IsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ2QsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDL0IsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsR0FBRztBQUNILEVBQUUsSUFBSTtBQUNOLElBQUksTUFBTSxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDckUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ2QsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDL0IsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsR0FBRztBQUNILEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2xCLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxNQUFNLEVBQUU7QUFDdEMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDakMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ2pDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDakMsS0FBSztBQUNMLEdBQUc7QUFDSCxFQUFFLGlCQUFpQixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDbEMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBR0EsYUFBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQztBQUNuRCxFQUFFLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDN0MsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkIsQ0FBQztBQUNELFNBQVMsa0JBQWtCLENBQUMsS0FBSyxFQUFFO0FBQ25DLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUs7QUFDN0IsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNwQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDOUUsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTztBQUMxQixNQUFNLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUNNLGVBQWUsUUFBUSxDQUFDLEtBQUssRUFBRTtBQUN0QyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ1QsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sS0FBSyxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssTUFBTSxNQUFNLEVBQUU7QUFDcEUsSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QixJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QixJQUFJLE9BQU87QUFDWCxHQUFHO0FBQ0gsRUFBRSxNQUFNLEtBQUssR0FBR0EsYUFBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRztBQUNqQixJQUFJLEtBQUssRUFBRSxLQUFLO0FBQ2hCLEdBQUcsQ0FBQztBQUNKLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtBQUM3QixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNoQyxHQUFHLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtBQUNwQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNoQyxHQUFHLE1BQU07QUFDVCxJQUFJLElBQUk7QUFDUixNQUFNLE1BQU0sYUFBYSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELE1BQU0sS0FBSyxNQUFNLFVBQVUsSUFBSSxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUM5RCxRQUFRLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUU7QUFDL0MsVUFBVSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLFNBQVMsTUFBTTtBQUNmLFVBQVUsS0FBSyxNQUFNLENBQUMsSUFBSSxVQUFVO0FBQ3BDLFlBQVksTUFBTSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsU0FBUztBQUNULE9BQU87QUFDUCxNQUFNLE1BQU0sYUFBYSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3RELEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNoQixNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNsQyxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUdBLGFBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDcEQsRUFBRSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO0FBQzVCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUMxQixNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNsQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUs7QUFDN0IsUUFBUSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEYsS0FBSyxNQUFNLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2pDLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ2xDLEtBQUssTUFBTTtBQUNYLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ2xDLEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEIsQ0FBQztBQUNELGVBQWUsYUFBYSxDQUFDLENBQUMsRUFBRTtBQUNoQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBQ00sZUFBZSxTQUFTLENBQUMsTUFBTSxFQUFFO0FBQ3hDLEVBQUUsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNO0FBQzVCLElBQUksTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUNNLGVBQWUsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7QUFDaEQsRUFBRSxNQUFNLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEQsRUFBRSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0IsRUFBRSxNQUFNLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6QixFQUFFLE1BQU0saUJBQWlCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN2QyxFQUFFLE1BQU0sZUFBZSxFQUFFLENBQUM7QUFDMUIsQ0FBQztBQUNNLFNBQVMsZ0JBQWdCLEdBQUc7QUFDbkMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDO0FBQ25GLEVBQUUsSUFBSSxZQUFZO0FBQ2xCLElBQUksRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQ3pCLE9BQU8sSUFBSSxTQUFTO0FBQ3BCLElBQUksRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQ3ZCLE9BQU8sSUFBSSxVQUFVO0FBQ3JCLElBQUksRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQ3ZCOztBQzNMTyxlQUFlLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO0FBQ3pDLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDVCxFQUFFLE1BQU0sY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9CLEVBQUUsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7QUFDNUIsSUFBSSxNQUFNLElBQUksR0FBRyxNQUFNUCxRQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRCxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxLQUFLLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUM7QUFDM0ksSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7QUFDckQsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMseUJBQXlCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pELElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDOUMsSUFBSSxNQUFNLE9BQU8sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixJQUFJLEVBQUUsRUFBRSxZQUFZO0FBQ3BFLE1BQU0sTUFBTSxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN2QyxLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNoRCxHQUFHO0FBQ0g7OyJ9
|