@ditojs/admin 1.12.0 → 1.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dito-admin.es.js +192 -180
- package/dist/dito-admin.umd.js +4 -4
- package/package.json +12 -7
- package/src/DitoAdmin.js +44 -20
- package/src/mixins/DitoMixin.js +5 -13
- package/src/types/TypeColor.vue +2 -0
- package/src/types/TypeMultiselect.vue +2 -2
- package/src/types/TypeSlider.vue +1 -0
- package/types/index.d.ts +1224 -0
package/dist/dito-admin.es.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
var Fs = Object.defineProperty;
|
|
2
2
|
var Rs = (t, e, s) => e in t ? Fs(t, e, { enumerable: !0, configurable: !0, writable: !0, value: s }) : t[e] = s;
|
|
3
3
|
var lt = (t, e, s) => (Rs(t, typeof e != "symbol" ? e + "" : e, s), s);
|
|
4
|
-
import
|
|
4
|
+
import M from "vue";
|
|
5
5
|
import Ts from "vue-js-modal";
|
|
6
6
|
import Qe from "vue-router";
|
|
7
|
-
import
|
|
8
|
-
import { normalizeDataPath as A, getValueAtDataPath as W, isInteger as J, parseDataPath as
|
|
7
|
+
import Is from "vue-notification";
|
|
8
|
+
import { normalizeDataPath as A, getValueAtDataPath as W, isInteger as J, parseDataPath as q, isFunction as v, isArray as x, isPlainObject as Mt, isBoolean as Ms, isNumber as Y, isString as E, isDate as Ct, isObject as C, isRegExp as wt, asArray as L, pickBy as Ge, labelize as I, equals as Pt, format as qs, hyphenate as Q, isCreditCard as As, isEmail as Ns, isHostname as Us, isDomain as zs, isUrl as Hs, isPromise as xt, isModule as Ks, clone as at, camelize as Xe, getCommonPrefix as Ws, stripTags as Js, capitalize as z, deindent as Qs, merge as ft, escapeHtml as Ye, debounceAsync as Gs, debounce as Xs, underscore as Ys, defaultFormats as Zs, isAbsoluteUrl as Ze } from "@ditojs/utils";
|
|
9
9
|
import { nanoid as tn } from "nanoid";
|
|
10
10
|
import { addEvents as ts, TransitionHeight as en, Pagination as sn, Trigger as nn, DatePicker as an, TimePicker as rn, DateTimePicker as on, Icon as ln, InputField as Dt, SwitchButton as un } from "@ditojs/ui";
|
|
11
11
|
import St from "vuedraggable";
|
|
@@ -19,7 +19,7 @@ import kn from "vue-multiselect";
|
|
|
19
19
|
import Ln from "vue-upload-component";
|
|
20
20
|
import Bn from "filesize-parser";
|
|
21
21
|
import { filesize as Fn } from "filesize";
|
|
22
|
-
const
|
|
22
|
+
const qt = {
|
|
23
23
|
title: "",
|
|
24
24
|
routeComponents: [],
|
|
25
25
|
user: null,
|
|
@@ -31,11 +31,11 @@ function k(t, e) {
|
|
|
31
31
|
return t ? `${t}/${e}` : e;
|
|
32
32
|
}
|
|
33
33
|
function Rn(t) {
|
|
34
|
-
const e =
|
|
34
|
+
const e = q(t);
|
|
35
35
|
return e == null || e.pop(), e;
|
|
36
36
|
}
|
|
37
37
|
function Ot(t, e = !1) {
|
|
38
|
-
return e ? Rn(t) :
|
|
38
|
+
return e ? Rn(t) : q(t);
|
|
39
39
|
}
|
|
40
40
|
function Tn(t, e = !1) {
|
|
41
41
|
return A(Ot(t, e));
|
|
@@ -52,7 +52,7 @@ function es(t, e = !1) {
|
|
|
52
52
|
}
|
|
53
53
|
return null;
|
|
54
54
|
}
|
|
55
|
-
function
|
|
55
|
+
function In(t, e = !1) {
|
|
56
56
|
return A(es(t, e));
|
|
57
57
|
}
|
|
58
58
|
function _t(t, e, s = !1) {
|
|
@@ -64,10 +64,10 @@ function Et(t, e, s = !1) {
|
|
|
64
64
|
return n ? W(t, n) : null;
|
|
65
65
|
}
|
|
66
66
|
function ss(t) {
|
|
67
|
-
const e =
|
|
67
|
+
const e = q(t);
|
|
68
68
|
return e[e.length - 1];
|
|
69
69
|
}
|
|
70
|
-
function
|
|
70
|
+
function Mn(t) {
|
|
71
71
|
const e = ss(t);
|
|
72
72
|
return e == null || J(+e) ? null : e;
|
|
73
73
|
}
|
|
@@ -75,9 +75,9 @@ function ct(t) {
|
|
|
75
75
|
const e = ss(t), s = e == null ? null : +e;
|
|
76
76
|
return J(s) ? s : null;
|
|
77
77
|
}
|
|
78
|
-
let
|
|
78
|
+
let qn = 0;
|
|
79
79
|
function An(t, e = "id") {
|
|
80
|
-
t[e] = `@${++
|
|
80
|
+
t[e] = `@${++qn}`;
|
|
81
81
|
}
|
|
82
82
|
function Z(t) {
|
|
83
83
|
return /^@/.test(t);
|
|
@@ -113,7 +113,7 @@ class D {
|
|
|
113
113
|
return $(this, "dataPath", "");
|
|
114
114
|
}
|
|
115
115
|
get name() {
|
|
116
|
-
return $(this, "name", () =>
|
|
116
|
+
return $(this, "name", () => Mn(this.dataPath));
|
|
117
117
|
}
|
|
118
118
|
get index() {
|
|
119
119
|
return $(this, "index", () => ct(this.dataPath));
|
|
@@ -122,7 +122,7 @@ class D {
|
|
|
122
122
|
return Tn(this.dataPath, this.nested);
|
|
123
123
|
}
|
|
124
124
|
get parentItemDataPath() {
|
|
125
|
-
return
|
|
125
|
+
return In(this.dataPath, this.nested);
|
|
126
126
|
}
|
|
127
127
|
get itemIndex() {
|
|
128
128
|
return ct(this.itemDataPath);
|
|
@@ -236,7 +236,7 @@ const zn = {
|
|
|
236
236
|
if (x(t))
|
|
237
237
|
for (const s of t)
|
|
238
238
|
this.on(s, e);
|
|
239
|
-
else if (
|
|
239
|
+
else if (Mt(t))
|
|
240
240
|
for (const s in t)
|
|
241
241
|
this.on(s, t[s]);
|
|
242
242
|
else {
|
|
@@ -259,7 +259,7 @@ const zn = {
|
|
|
259
259
|
else if (x(t))
|
|
260
260
|
for (const n of t)
|
|
261
261
|
this.off(n, e);
|
|
262
|
-
else if (
|
|
262
|
+
else if (Mt(t))
|
|
263
263
|
for (const n in t)
|
|
264
264
|
this.off(n, t[n]);
|
|
265
265
|
else {
|
|
@@ -288,12 +288,12 @@ const zn = {
|
|
|
288
288
|
let u;
|
|
289
289
|
for (const c of i)
|
|
290
290
|
try {
|
|
291
|
-
const
|
|
292
|
-
|
|
293
|
-
} catch (
|
|
291
|
+
const f = await c.apply(this, l.args);
|
|
292
|
+
f !== void 0 && (u = f);
|
|
293
|
+
} catch (f) {
|
|
294
294
|
console.error(
|
|
295
295
|
`Error during event handler for '${t}':`,
|
|
296
|
-
|
|
296
|
+
f
|
|
297
297
|
);
|
|
298
298
|
}
|
|
299
299
|
l.resolve(u), o();
|
|
@@ -324,7 +324,7 @@ const zn = {
|
|
|
324
324
|
}
|
|
325
325
|
}
|
|
326
326
|
}, dt = {
|
|
327
|
-
Boolean:
|
|
327
|
+
Boolean: Ms,
|
|
328
328
|
Number: Y,
|
|
329
329
|
String: E,
|
|
330
330
|
Date: Ct,
|
|
@@ -393,7 +393,7 @@ const pt = {
|
|
|
393
393
|
},
|
|
394
394
|
data() {
|
|
395
395
|
return {
|
|
396
|
-
appState:
|
|
396
|
+
appState: qt,
|
|
397
397
|
overrides: null
|
|
398
398
|
};
|
|
399
399
|
},
|
|
@@ -403,7 +403,7 @@ const pt = {
|
|
|
403
403
|
return (t = this.meta) == null ? void 0 : t.schema;
|
|
404
404
|
},
|
|
405
405
|
user() {
|
|
406
|
-
return
|
|
406
|
+
return qt.user;
|
|
407
407
|
},
|
|
408
408
|
verbs() {
|
|
409
409
|
return this.$verbs();
|
|
@@ -502,14 +502,14 @@ const pt = {
|
|
|
502
502
|
return r;
|
|
503
503
|
},
|
|
504
504
|
getLabel(t, e) {
|
|
505
|
-
return t ? this.getSchemaValue("label", { type: String, schema: t }) ||
|
|
505
|
+
return t ? this.getSchemaValue("label", { type: String, schema: t }) || I(e || t.name) : I(e) || "";
|
|
506
506
|
},
|
|
507
|
-
labelize:
|
|
507
|
+
labelize: I,
|
|
508
508
|
getButtonAttributes(t, e) {
|
|
509
509
|
const s = this.verbs[t] || t;
|
|
510
510
|
return {
|
|
511
511
|
class: `dito-button-${s}`,
|
|
512
|
-
title: (e == null ? void 0 : e.text) ||
|
|
512
|
+
title: (e == null ? void 0 : e.text) || I(s)
|
|
513
513
|
};
|
|
514
514
|
},
|
|
515
515
|
getDragOptions(t, e = !1) {
|
|
@@ -562,14 +562,11 @@ const pt = {
|
|
|
562
562
|
},
|
|
563
563
|
getResourceUrl(t) {
|
|
564
564
|
const e = this.getResourcePath(t);
|
|
565
|
-
|
|
566
|
-
return null;
|
|
567
|
-
const s = this.api.getApiUrl(e), { query: n } = t, a = n && new URLSearchParams(n).toString();
|
|
568
|
-
return a ? `${s}?${a}` : s;
|
|
565
|
+
return e ? this.api.getApiUrl({ url: e, query: t.query }) : null;
|
|
569
566
|
},
|
|
570
567
|
async sendRequest({ method: t, url: e, resource: s, query: n, data: a, internal: i }) {
|
|
571
568
|
e || (e = this.getResourcePath(s)), t || (t = s == null ? void 0 : s.method);
|
|
572
|
-
const r = !i && this.api.
|
|
569
|
+
const r = !i && this.api.isApiUrl(e);
|
|
573
570
|
r && await this.rootComponent.ensureUser();
|
|
574
571
|
const o = await this.api.request({ method: t, url: e, data: a, query: n });
|
|
575
572
|
return r && t === "patch" && Pt(s, Vt(this.user.id, this.api.users)) && await this.rootComponent.fetchUser(), o;
|
|
@@ -593,7 +590,7 @@ const pt = {
|
|
|
593
590
|
defaults: s = this.api.formats,
|
|
594
591
|
...n
|
|
595
592
|
} = {}) {
|
|
596
|
-
return
|
|
593
|
+
return qs(t, {
|
|
597
594
|
locale: e,
|
|
598
595
|
defaults: s,
|
|
599
596
|
...n
|
|
@@ -609,11 +606,12 @@ const pt = {
|
|
|
609
606
|
});
|
|
610
607
|
},
|
|
611
608
|
download(t = {}) {
|
|
609
|
+
var n;
|
|
612
610
|
E(t) && (t = { url: t });
|
|
613
|
-
const
|
|
614
|
-
|
|
615
|
-
const { body:
|
|
616
|
-
|
|
611
|
+
const e = document.createElement("a");
|
|
612
|
+
e.href = this.api.getApiUrl(t), e.download = (n = t.filename) != null ? n : null;
|
|
613
|
+
const { body: s } = document;
|
|
614
|
+
s.appendChild(e), e.click(), s.removeChild(e);
|
|
617
615
|
},
|
|
618
616
|
notify(t) {
|
|
619
617
|
this.rootComponent.notify(t);
|
|
@@ -804,7 +802,7 @@ const ea = {
|
|
|
804
802
|
}
|
|
805
803
|
};
|
|
806
804
|
function d(t, { type: e, default: s, get: n, set: a, callback: i = !0 } = {}) {
|
|
807
|
-
E(t) && t.includes(".") && (t =
|
|
805
|
+
E(t) && t.includes(".") && (t = q(t));
|
|
808
806
|
const r = A(t);
|
|
809
807
|
return {
|
|
810
808
|
get() {
|
|
@@ -840,7 +838,7 @@ class ga {
|
|
|
840
838
|
}
|
|
841
839
|
set(e, s, n) {
|
|
842
840
|
var i;
|
|
843
|
-
e =
|
|
841
|
+
e = q(e);
|
|
844
842
|
let a = this.graph;
|
|
845
843
|
for (const r of e) {
|
|
846
844
|
const o = J(+r) ? "*" : r;
|
|
@@ -889,15 +887,15 @@ class ga {
|
|
|
889
887
|
const a = n === "clipboard";
|
|
890
888
|
a && delete s[e.idKey || "id"];
|
|
891
889
|
for (const [i, r] of this.flatten()) {
|
|
892
|
-
const { type: o, schema: l, internal: u, related: c, reference:
|
|
893
|
-
if (
|
|
894
|
-
const p = W(s, i, () => null), w = a &&
|
|
890
|
+
const { type: o, schema: l, internal: u, related: c, reference: f } = r, m = o === "source", b = o === "relation";
|
|
891
|
+
if (m || b && u) {
|
|
892
|
+
const p = W(s, i, () => null), w = a && m && !c, O = a && (b && u || m && c);
|
|
895
893
|
for (const P of L(p).flat()) {
|
|
896
|
-
const g =
|
|
894
|
+
const g = m && l.idKey || b && l.relateBy || "id";
|
|
897
895
|
let S = P == null ? void 0 : P[g];
|
|
898
896
|
if (S != null && (w && delete P[g], O || Z(S))) {
|
|
899
897
|
Z(S) && (S = S.slice(1));
|
|
900
|
-
const V = a ? g :
|
|
898
|
+
const V = a ? g : m ? "#id" : "#ref", j = a ? `@${S}` : f ? `${f}-${S}` : S;
|
|
901
899
|
P[V] = j, V !== g && delete P[g];
|
|
902
900
|
}
|
|
903
901
|
}
|
|
@@ -1121,9 +1119,9 @@ function gs(t, e, s, n, {
|
|
|
1121
1119
|
dataPath: n,
|
|
1122
1120
|
rootData: i
|
|
1123
1121
|
}));
|
|
1124
|
-
o !== void 0 &&
|
|
1122
|
+
o !== void 0 && M.set(e, s, o);
|
|
1125
1123
|
}
|
|
1126
|
-
return !(s in e) && !fs(t) &&
|
|
1124
|
+
return !(s in e) && !fs(t) && M.set(e, s, ms(t)), e[s];
|
|
1127
1125
|
}
|
|
1128
1126
|
function vs(t, e, s) {
|
|
1129
1127
|
if (s.schemaOnly) {
|
|
@@ -1143,10 +1141,10 @@ function Sa(t, e, s, n, {
|
|
|
1143
1141
|
s,
|
|
1144
1142
|
n,
|
|
1145
1143
|
l,
|
|
1146
|
-
(
|
|
1147
|
-
let P = gs(
|
|
1144
|
+
(m, b, p, w, O) => {
|
|
1145
|
+
let P = gs(m, b, p, w, o);
|
|
1148
1146
|
if (x(P)) {
|
|
1149
|
-
const { wrapPrimitives: g, orderKey: S, idKey: V = "id" } =
|
|
1147
|
+
const { wrapPrimitives: g, orderKey: S, idKey: V = "id" } = m;
|
|
1150
1148
|
g ? P = P.map((j) => ({
|
|
1151
1149
|
[g]: j
|
|
1152
1150
|
})) : P = [...P], S && r === "clipboard" && P.sort((j, T) => {
|
|
@@ -1156,10 +1154,10 @@ function Sa(t, e, s, n, {
|
|
|
1156
1154
|
}
|
|
1157
1155
|
O[p] = P;
|
|
1158
1156
|
},
|
|
1159
|
-
(
|
|
1160
|
-
const { wrapPrimitives: P, exclude: g, process: S } =
|
|
1157
|
+
(m, b, p, w, O) => {
|
|
1158
|
+
const { wrapPrimitives: P, exclude: g, process: S } = m;
|
|
1161
1159
|
let V = O[p];
|
|
1162
|
-
const j = R(
|
|
1160
|
+
const j = R(m), T = () => D.get(a, {
|
|
1163
1161
|
value: V,
|
|
1164
1162
|
name: p,
|
|
1165
1163
|
data: b,
|
|
@@ -1171,7 +1169,7 @@ function Sa(t, e, s, n, {
|
|
|
1171
1169
|
delete O[p];
|
|
1172
1170
|
else {
|
|
1173
1171
|
const B = j == null ? void 0 : j.processValue;
|
|
1174
|
-
B && (V = B(
|
|
1172
|
+
B && (V = B(m, V, w, u)), O[p] = V;
|
|
1175
1173
|
}
|
|
1176
1174
|
},
|
|
1177
1175
|
o
|
|
@@ -1179,12 +1177,12 @@ function Sa(t, e, s, n, {
|
|
|
1179
1177
|
}
|
|
1180
1178
|
function tt(t, e, s, n, a, i, r) {
|
|
1181
1179
|
const o = (l) => {
|
|
1182
|
-
const u = (c,
|
|
1180
|
+
const u = (c, f) => c != null ? k(c, f) : null;
|
|
1183
1181
|
if (l)
|
|
1184
|
-
for (const [c,
|
|
1185
|
-
if (!ps(
|
|
1182
|
+
for (const [c, f] of Object.entries(l))
|
|
1183
|
+
if (!ps(f))
|
|
1186
1184
|
tt(
|
|
1187
|
-
|
|
1185
|
+
f,
|
|
1188
1186
|
e,
|
|
1189
1187
|
s,
|
|
1190
1188
|
n,
|
|
@@ -1193,17 +1191,17 @@ function tt(t, e, s, n, a, i, r) {
|
|
|
1193
1191
|
r
|
|
1194
1192
|
);
|
|
1195
1193
|
else {
|
|
1196
|
-
const
|
|
1194
|
+
const m = u(s, c), b = (w, O = null) => {
|
|
1197
1195
|
var T;
|
|
1198
|
-
const P = O !== null ? u(
|
|
1196
|
+
const P = O !== null ? u(m, O) : m, g = D.get(r.component, {
|
|
1199
1197
|
data: e,
|
|
1200
1198
|
value: w,
|
|
1201
1199
|
dataPath: P,
|
|
1202
1200
|
index: O,
|
|
1203
1201
|
rootData: r.rootData
|
|
1204
|
-
}), V = (((T = R(
|
|
1202
|
+
}), V = (((T = R(f)) == null ? void 0 : T.getFormSchemasForProcessing) || G)(f, g), j = ds(V, w);
|
|
1205
1203
|
if (j) {
|
|
1206
|
-
const B = n ? vs(
|
|
1204
|
+
const B = n ? vs(f, w, r) : null;
|
|
1207
1205
|
return tt(
|
|
1208
1206
|
j,
|
|
1209
1207
|
w,
|
|
@@ -1217,18 +1215,18 @@ function tt(t, e, s, n, a, i, r) {
|
|
|
1217
1215
|
return { ...w };
|
|
1218
1216
|
};
|
|
1219
1217
|
a == null || a(
|
|
1220
|
-
|
|
1218
|
+
f,
|
|
1221
1219
|
e,
|
|
1222
1220
|
c,
|
|
1223
|
-
|
|
1221
|
+
m,
|
|
1224
1222
|
n
|
|
1225
1223
|
);
|
|
1226
1224
|
let p = n ? n[c] : e[c];
|
|
1227
|
-
p != null && N(
|
|
1228
|
-
|
|
1225
|
+
p != null && N(f) && (x(p) ? p = n ? p.map(b) : p.forEach(b) : p = b(p), n && (n[c] = p)), i == null || i(
|
|
1226
|
+
f,
|
|
1229
1227
|
e,
|
|
1230
1228
|
c,
|
|
1231
|
-
|
|
1229
|
+
m,
|
|
1232
1230
|
n
|
|
1233
1231
|
);
|
|
1234
1232
|
}
|
|
@@ -1503,7 +1501,7 @@ const et = {
|
|
|
1503
1501
|
});
|
|
1504
1502
|
}
|
|
1505
1503
|
}
|
|
1506
|
-
}, st = {}, _ =
|
|
1504
|
+
}, st = {}, _ = M.extend({
|
|
1507
1505
|
components: st,
|
|
1508
1506
|
mixins: [pt],
|
|
1509
1507
|
methods: {
|
|
@@ -1531,7 +1529,7 @@ _.component = function(t, e) {
|
|
|
1531
1529
|
const s = this.extend(e);
|
|
1532
1530
|
return st[t] = s, s;
|
|
1533
1531
|
} else
|
|
1534
|
-
return st[t] ||
|
|
1532
|
+
return st[t] || M.component(t);
|
|
1535
1533
|
};
|
|
1536
1534
|
class Ea {
|
|
1537
1535
|
hasRole(...e) {
|
|
@@ -1723,8 +1721,8 @@ function h(t, e, s, n, a, i, r, o) {
|
|
|
1723
1721
|
var l = typeof t == "function" ? t.options : t;
|
|
1724
1722
|
e && (l.render = e, l.staticRenderFns = s, l._compiled = !0), n && (l.functional = !0), i && (l._scopeId = "data-v-" + i);
|
|
1725
1723
|
var u;
|
|
1726
|
-
if (r ? (u = function(
|
|
1727
|
-
|
|
1724
|
+
if (r ? (u = function(m) {
|
|
1725
|
+
m = m || this.$vnode && this.$vnode.ssrContext || this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext, !m && typeof __VUE_SSR_CONTEXT__ < "u" && (m = __VUE_SSR_CONTEXT__), a && a.call(this, m), m && m._registeredComponents && m._registeredComponents.add(r);
|
|
1728
1726
|
}, l._ssrRegister = u) : a && (u = o ? function() {
|
|
1729
1727
|
a.call(
|
|
1730
1728
|
this,
|
|
@@ -1738,8 +1736,8 @@ function h(t, e, s, n, a, i, r, o) {
|
|
|
1738
1736
|
return u.call(p), c(b, p);
|
|
1739
1737
|
};
|
|
1740
1738
|
} else {
|
|
1741
|
-
var
|
|
1742
|
-
l.beforeCreate =
|
|
1739
|
+
var f = l.beforeCreate;
|
|
1740
|
+
l.beforeCreate = f ? [].concat(f, u) : [u];
|
|
1743
1741
|
}
|
|
1744
1742
|
return {
|
|
1745
1743
|
exports: t,
|
|
@@ -2041,24 +2039,24 @@ const Ta = _.component("dito-root", {
|
|
|
2041
2039
|
}
|
|
2042
2040
|
}
|
|
2043
2041
|
}), Ht = {};
|
|
2044
|
-
var
|
|
2042
|
+
var Ia = /* @__PURE__ */ h(
|
|
2045
2043
|
Ta,
|
|
2046
2044
|
Fa,
|
|
2047
2045
|
Ra,
|
|
2048
2046
|
!1,
|
|
2049
|
-
|
|
2047
|
+
Ma,
|
|
2050
2048
|
null,
|
|
2051
2049
|
null,
|
|
2052
2050
|
null
|
|
2053
2051
|
);
|
|
2054
|
-
function
|
|
2052
|
+
function Ma(t) {
|
|
2055
2053
|
for (let e in Ht)
|
|
2056
2054
|
this[e] = Ht[e];
|
|
2057
2055
|
}
|
|
2058
2056
|
const $t = /* @__PURE__ */ function() {
|
|
2059
|
-
return
|
|
2057
|
+
return Ia.exports;
|
|
2060
2058
|
}();
|
|
2061
|
-
var
|
|
2059
|
+
var qa = function() {
|
|
2062
2060
|
var t = this, e = t.$createElement, s = t._self._c || e;
|
|
2063
2061
|
return s("nav", {
|
|
2064
2062
|
staticClass: "dito-menu dito-scroll-parent"
|
|
@@ -2077,7 +2075,7 @@ var Ma = function() {
|
|
|
2077
2075
|
const Na = _.component("dito-menu", {}), Kt = {};
|
|
2078
2076
|
var Ua = /* @__PURE__ */ h(
|
|
2079
2077
|
Na,
|
|
2080
|
-
|
|
2078
|
+
qa,
|
|
2081
2079
|
Aa,
|
|
2082
2080
|
!1,
|
|
2083
2081
|
za,
|
|
@@ -2655,7 +2653,7 @@ const Si = /* @__PURE__ */ function() {
|
|
|
2655
2653
|
const u = () => l || (l = this.getLabel(
|
|
2656
2654
|
bt(t, e, this.context)
|
|
2657
2655
|
));
|
|
2658
|
-
let c,
|
|
2656
|
+
let c, f, m;
|
|
2659
2657
|
if (v(i)) {
|
|
2660
2658
|
const p = i.call(
|
|
2661
2659
|
this,
|
|
@@ -2672,7 +2670,7 @@ const Si = /* @__PURE__ */ function() {
|
|
|
2672
2670
|
}
|
|
2673
2671
|
})
|
|
2674
2672
|
);
|
|
2675
|
-
C(p) ? { text: c, prefix:
|
|
2673
|
+
C(p) ? { text: c, prefix: f, suffix: m } = p : c = p, n = !1;
|
|
2676
2674
|
} else {
|
|
2677
2675
|
const { columns: p } = t, w = E(i) && i || K(t) && p && Object.keys(p)[0] || "name";
|
|
2678
2676
|
c = e[w];
|
|
@@ -2682,7 +2680,7 @@ const Si = /* @__PURE__ */ function() {
|
|
|
2682
2680
|
const p = u();
|
|
2683
2681
|
p && (c = `${p} ${b ? `'${c}'` : c}`);
|
|
2684
2682
|
}
|
|
2685
|
-
return a ? { text: c, prefix:
|
|
2683
|
+
return a ? { text: c, prefix: f, suffix: m } : c;
|
|
2686
2684
|
}
|
|
2687
2685
|
}
|
|
2688
2686
|
};
|
|
@@ -3014,13 +3012,13 @@ const ji = _.component("dito-schema", {
|
|
|
3014
3012
|
let s = !0;
|
|
3015
3013
|
const n = [];
|
|
3016
3014
|
for (const [i, r] of Object.entries(t)) {
|
|
3017
|
-
const o = this.hasOwnData ? k(this.dataPath, i) : i, l =
|
|
3015
|
+
const o = this.hasOwnData ? k(this.dataPath, i) : i, l = q(o);
|
|
3018
3016
|
let u = !1;
|
|
3019
3017
|
const c = this.getComponentsByDataPath(l);
|
|
3020
|
-
for (const
|
|
3021
|
-
|
|
3018
|
+
for (const f of c)
|
|
3019
|
+
f.showValidationErrors(r, s && e) && (u = !0, s = !1);
|
|
3022
3020
|
if (!u) {
|
|
3023
|
-
const
|
|
3021
|
+
const f = l.pop();
|
|
3024
3022
|
for (; l.length > 0; ) {
|
|
3025
3023
|
const b = this.getComponentsByDataPath(l);
|
|
3026
3024
|
for (const p of b)
|
|
@@ -3039,9 +3037,9 @@ const ji = _.component("dito-schema", {
|
|
|
3039
3037
|
return;
|
|
3040
3038
|
l.pop();
|
|
3041
3039
|
}
|
|
3042
|
-
const
|
|
3040
|
+
const m = I(f);
|
|
3043
3041
|
for (const b of r) {
|
|
3044
|
-
const p =
|
|
3042
|
+
const p = m ? `The field ${m}` : `The ${this.formLabel}`;
|
|
3045
3043
|
n.push(`${p} ${b.message}`);
|
|
3046
3044
|
}
|
|
3047
3045
|
}
|
|
@@ -3223,19 +3221,19 @@ var Ti = /* @__PURE__ */ h(
|
|
|
3223
3221
|
Bi,
|
|
3224
3222
|
Fi,
|
|
3225
3223
|
!1,
|
|
3226
|
-
|
|
3224
|
+
Ii,
|
|
3227
3225
|
null,
|
|
3228
3226
|
null,
|
|
3229
3227
|
null
|
|
3230
3228
|
);
|
|
3231
|
-
function
|
|
3229
|
+
function Ii(t) {
|
|
3232
3230
|
for (let e in se)
|
|
3233
3231
|
this[e] = se[e];
|
|
3234
3232
|
}
|
|
3235
|
-
const
|
|
3233
|
+
const Mi = /* @__PURE__ */ function() {
|
|
3236
3234
|
return Ti.exports;
|
|
3237
3235
|
}();
|
|
3238
|
-
var
|
|
3236
|
+
var qi = function() {
|
|
3239
3237
|
var t = this, e = t.$createElement, s = t._self._c || e;
|
|
3240
3238
|
return t.isPopulated && t.componentSchemas.length > 0 ? s("div", {
|
|
3241
3239
|
directives: [{
|
|
@@ -3337,7 +3335,7 @@ const Ni = _.component("dito-pane", {
|
|
|
3337
3335
|
}), ne = {};
|
|
3338
3336
|
var Ui = /* @__PURE__ */ h(
|
|
3339
3337
|
Ni,
|
|
3340
|
-
|
|
3338
|
+
qi,
|
|
3341
3339
|
Ai,
|
|
3342
3340
|
!1,
|
|
3343
3341
|
zi,
|
|
@@ -4122,22 +4120,22 @@ const Tr = _.component("dito-clipboard", {
|
|
|
4122
4120
|
}
|
|
4123
4121
|
}
|
|
4124
4122
|
}), de = {};
|
|
4125
|
-
var
|
|
4123
|
+
var Ir = /* @__PURE__ */ h(
|
|
4126
4124
|
Tr,
|
|
4127
4125
|
Fr,
|
|
4128
4126
|
Rr,
|
|
4129
4127
|
!1,
|
|
4130
|
-
|
|
4128
|
+
Mr,
|
|
4131
4129
|
null,
|
|
4132
4130
|
null,
|
|
4133
4131
|
null
|
|
4134
4132
|
);
|
|
4135
|
-
function
|
|
4133
|
+
function Mr(t) {
|
|
4136
4134
|
for (let e in de)
|
|
4137
4135
|
this[e] = de[e];
|
|
4138
4136
|
}
|
|
4139
|
-
const
|
|
4140
|
-
return
|
|
4137
|
+
const qr = /* @__PURE__ */ function() {
|
|
4138
|
+
return Ir.exports;
|
|
4141
4139
|
}(), js = {
|
|
4142
4140
|
data() {
|
|
4143
4141
|
return {
|
|
@@ -4296,7 +4294,7 @@ const Mr = /* @__PURE__ */ function() {
|
|
|
4296
4294
|
const u = l == null ? void 0 : l.data;
|
|
4297
4295
|
u && E(u.type) ? this.notify({
|
|
4298
4296
|
type: "error",
|
|
4299
|
-
title:
|
|
4297
|
+
title: I(u.type),
|
|
4300
4298
|
text: u.message || o
|
|
4301
4299
|
}) : this.notify({
|
|
4302
4300
|
type: "error",
|
|
@@ -4341,14 +4339,14 @@ const Mr = /* @__PURE__ */ function() {
|
|
|
4341
4339
|
return new Promise((u) => {
|
|
4342
4340
|
this.handleRequest(
|
|
4343
4341
|
{ method: s, resource: e, data: n },
|
|
4344
|
-
async (c,
|
|
4345
|
-
const
|
|
4342
|
+
async (c, f) => {
|
|
4343
|
+
const m = f == null ? void 0 : f.data;
|
|
4346
4344
|
if (c) {
|
|
4347
|
-
const b = this.isValidationError(
|
|
4345
|
+
const b = this.isValidationError(f) && m.errors;
|
|
4348
4346
|
if (b)
|
|
4349
4347
|
await this.showValidationErrors(b, !0);
|
|
4350
4348
|
else {
|
|
4351
|
-
const p = C(
|
|
4349
|
+
const p = C(m) ? m : c;
|
|
4352
4350
|
r == null || r(p), await this.emitButtonEvent(t, "error", {
|
|
4353
4351
|
notify: l,
|
|
4354
4352
|
error: p
|
|
@@ -4356,7 +4354,7 @@ const Mr = /* @__PURE__ */ function() {
|
|
|
4356
4354
|
}
|
|
4357
4355
|
u(!1);
|
|
4358
4356
|
} else
|
|
4359
|
-
a &&
|
|
4357
|
+
a && m && this.setData(m), i == null || i(), await this.emitButtonEvent(t, "success", {
|
|
4360
4358
|
notify: o
|
|
4361
4359
|
}), u(!0);
|
|
4362
4360
|
}
|
|
@@ -4534,7 +4532,7 @@ const Ur = _.component("dito-form", {
|
|
|
4534
4532
|
sourceData() {
|
|
4535
4533
|
let { data: t } = this.parentRouteComponent;
|
|
4536
4534
|
if (t) {
|
|
4537
|
-
const e =
|
|
4535
|
+
const e = q(
|
|
4538
4536
|
this.getDataPathFrom(this.parentRouteComponent)
|
|
4539
4537
|
), s = this.routeRecord.path.split("/"), n = s.slice(s.length - e.length);
|
|
4540
4538
|
this.sourceKey = null;
|
|
@@ -5322,22 +5320,22 @@ const Bo = /* @__PURE__ */ function() {
|
|
|
5322
5320
|
});
|
|
5323
5321
|
let Ro, To;
|
|
5324
5322
|
const ye = {};
|
|
5325
|
-
var
|
|
5323
|
+
var Io = /* @__PURE__ */ h(
|
|
5326
5324
|
Fo,
|
|
5327
5325
|
Ro,
|
|
5328
5326
|
To,
|
|
5329
5327
|
!1,
|
|
5330
|
-
|
|
5328
|
+
Mo,
|
|
5331
5329
|
null,
|
|
5332
5330
|
null,
|
|
5333
5331
|
null
|
|
5334
5332
|
);
|
|
5335
|
-
function
|
|
5333
|
+
function Mo(t) {
|
|
5336
5334
|
for (let e in ye)
|
|
5337
5335
|
this[e] = ye[e];
|
|
5338
5336
|
}
|
|
5339
|
-
const
|
|
5340
|
-
return
|
|
5337
|
+
const qo = /* @__PURE__ */ function() {
|
|
5338
|
+
return Io.exports;
|
|
5341
5339
|
}(), Ao = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
5342
5340
|
__proto__: null,
|
|
5343
5341
|
DitoRoot: $t,
|
|
@@ -5348,7 +5346,7 @@ const Mo = /* @__PURE__ */ function() {
|
|
|
5348
5346
|
DitoElement: $i,
|
|
5349
5347
|
DitoLabel: Si,
|
|
5350
5348
|
DitoSchema: Li,
|
|
5351
|
-
DitoSchemaInlined:
|
|
5349
|
+
DitoSchemaInlined: Mi,
|
|
5352
5350
|
DitoPane: Hi,
|
|
5353
5351
|
DitoContainer: Yi,
|
|
5354
5352
|
DitoTabs: ar,
|
|
@@ -5357,7 +5355,7 @@ const Mo = /* @__PURE__ */ function() {
|
|
|
5357
5355
|
DitoButtons: Cr,
|
|
5358
5356
|
DitoEditButtons: Or,
|
|
5359
5357
|
DitoCreateButton: Br,
|
|
5360
|
-
DitoClipboard:
|
|
5358
|
+
DitoClipboard: qr,
|
|
5361
5359
|
DitoView: Os,
|
|
5362
5360
|
DitoForm: ks,
|
|
5363
5361
|
DitoFormNested: Xr,
|
|
@@ -5367,7 +5365,7 @@ const Mo = /* @__PURE__ */ function() {
|
|
|
5367
5365
|
DitoTreeItem: Co,
|
|
5368
5366
|
DitoTableHead: Oo,
|
|
5369
5367
|
DitoTableCell: Bo,
|
|
5370
|
-
DitoVNode:
|
|
5368
|
+
DitoVNode: qo
|
|
5371
5369
|
}, Symbol.toStringTag, { value: "Module" })), y = _.extend({
|
|
5372
5370
|
mixins: [et],
|
|
5373
5371
|
nativeField: !1,
|
|
@@ -5418,7 +5416,7 @@ const zo = y.register(
|
|
|
5418
5416
|
text: d("text", {
|
|
5419
5417
|
type: String,
|
|
5420
5418
|
get(t) {
|
|
5421
|
-
return t ||
|
|
5419
|
+
return t || I(this.verb);
|
|
5422
5420
|
}
|
|
5423
5421
|
}),
|
|
5424
5422
|
closeForm: d("closeForm", {
|
|
@@ -5687,7 +5685,7 @@ const Zo = /* @__PURE__ */ function() {
|
|
|
5687
5685
|
},
|
|
5688
5686
|
getLabelForOption(t) {
|
|
5689
5687
|
const { optionLabel: e } = this;
|
|
5690
|
-
return E(e) ? t == null ? void 0 : t[e] : v(e) ? e.call(this, new D(this, { option: t })) :
|
|
5688
|
+
return E(e) ? t == null ? void 0 : t[e] : v(e) ? e.call(this, new D(this, { option: t })) : I(`${t}`);
|
|
5691
5689
|
}
|
|
5692
5690
|
},
|
|
5693
5691
|
processValue(t, e, s, n) {
|
|
@@ -6451,7 +6449,7 @@ const Fl = /* @__PURE__ */ function() {
|
|
|
6451
6449
|
async navigateToComponent(t, e) {
|
|
6452
6450
|
var s, n;
|
|
6453
6451
|
if (this.collapsible) {
|
|
6454
|
-
const a = t.startsWith(this.dataPath) ? this.isListSource ? (s =
|
|
6452
|
+
const a = t.startsWith(this.dataPath) ? this.isListSource ? (s = q(t.slice(this.dataPath.length + 1))[0]) != null ? s : null : 0 : null;
|
|
6455
6453
|
if (a !== null && Y(+a)) {
|
|
6456
6454
|
const i = this.getSchemaComponent(+a);
|
|
6457
6455
|
if (i) {
|
|
@@ -6472,7 +6470,7 @@ const Fl = /* @__PURE__ */ function() {
|
|
|
6472
6470
|
var l;
|
|
6473
6471
|
const { routeComponents: r } = this.appState, o = r[r.length - 1];
|
|
6474
6472
|
s((l = e == null ? void 0 : e([o])) != null ? l : !0);
|
|
6475
|
-
}, i =
|
|
6473
|
+
}, i = q(t);
|
|
6476
6474
|
for (; i.length > 0; ) {
|
|
6477
6475
|
const r = this.routeComponent.getChildPath(
|
|
6478
6476
|
this.api.normalizePath(A(i))
|
|
@@ -6499,19 +6497,19 @@ const Fl = /* @__PURE__ */ function() {
|
|
|
6499
6497
|
const u = `id${a + 1}`, c = {
|
|
6500
6498
|
api: t,
|
|
6501
6499
|
schema: e
|
|
6502
|
-
},
|
|
6500
|
+
}, f = {
|
|
6503
6501
|
...c,
|
|
6504
6502
|
flatten: r,
|
|
6505
6503
|
nested: i,
|
|
6506
6504
|
param: u
|
|
6507
|
-
},
|
|
6508
|
-
if (o && await o(
|
|
6505
|
+
}, m = await $a(t, e, a);
|
|
6506
|
+
if (o && await o(m, a + 1), N(e) && !l) {
|
|
6509
6507
|
const b = (g, S) => S ? g ? `${g}/:${S}` : `:${S}` : g, p = a === 0 ? "" : e.path, w = {
|
|
6510
6508
|
path: b(p, K(e) && u),
|
|
6511
6509
|
component: _.component(
|
|
6512
6510
|
i ? "dito-form-nested" : "dito-form"
|
|
6513
6511
|
),
|
|
6514
|
-
meta:
|
|
6512
|
+
meta: f
|
|
6515
6513
|
};
|
|
6516
6514
|
H(e) && n.push({
|
|
6517
6515
|
...w,
|
|
@@ -6521,7 +6519,7 @@ const Fl = /* @__PURE__ */ function() {
|
|
|
6521
6519
|
redirect: ".",
|
|
6522
6520
|
meta: c
|
|
6523
6521
|
});
|
|
6524
|
-
const [O, P] =
|
|
6522
|
+
const [O, P] = m.reduce(
|
|
6525
6523
|
(g, S) => (g[S.meta.flatten ? 0 : 1].push(S), g),
|
|
6526
6524
|
[[], []]
|
|
6527
6525
|
);
|
|
@@ -6601,7 +6599,7 @@ function Rl(t, e, s) {
|
|
|
6601
6599
|
target: e,
|
|
6602
6600
|
disabled: !1,
|
|
6603
6601
|
data() {
|
|
6604
|
-
return
|
|
6602
|
+
return Ml(
|
|
6605
6603
|
n,
|
|
6606
6604
|
s.query
|
|
6607
6605
|
);
|
|
@@ -6630,7 +6628,7 @@ function Rl(t, e, s) {
|
|
|
6630
6628
|
applyFilters() {
|
|
6631
6629
|
s.query = {
|
|
6632
6630
|
...s.query,
|
|
6633
|
-
filter:
|
|
6631
|
+
filter: Il(this.schema, this.data),
|
|
6634
6632
|
page: void 0
|
|
6635
6633
|
};
|
|
6636
6634
|
}
|
|
@@ -6647,7 +6645,7 @@ function Tl(t) {
|
|
|
6647
6645
|
i.components = {};
|
|
6648
6646
|
for (const [o, l] of Object.entries(r))
|
|
6649
6647
|
if (l) {
|
|
6650
|
-
const u = l.label ||
|
|
6648
|
+
const u = l.label || I(l.name || o);
|
|
6651
6649
|
i.components[o] = {
|
|
6652
6650
|
...l,
|
|
6653
6651
|
label: !1,
|
|
@@ -6673,7 +6671,7 @@ function Bs(t, e) {
|
|
|
6673
6671
|
const s = t.components[e];
|
|
6674
6672
|
return (n = s == null ? void 0 : s.form) == null ? void 0 : n.components;
|
|
6675
6673
|
}
|
|
6676
|
-
function
|
|
6674
|
+
function Il(t, e) {
|
|
6677
6675
|
const s = [];
|
|
6678
6676
|
for (const n in e) {
|
|
6679
6677
|
const a = e[n];
|
|
@@ -6689,7 +6687,7 @@ function ql(t, e) {
|
|
|
6689
6687
|
}
|
|
6690
6688
|
return s.length ? s : void 0;
|
|
6691
6689
|
}
|
|
6692
|
-
function
|
|
6690
|
+
function Ml(t, e) {
|
|
6693
6691
|
const s = {};
|
|
6694
6692
|
if (e)
|
|
6695
6693
|
for (const a of L(e.filter)) {
|
|
@@ -6714,7 +6712,7 @@ function Il(t, e) {
|
|
|
6714
6712
|
}
|
|
6715
6713
|
return n;
|
|
6716
6714
|
}
|
|
6717
|
-
var
|
|
6715
|
+
var ql = function() {
|
|
6718
6716
|
var t = this, e = t.$createElement, s = t._self._c || e;
|
|
6719
6717
|
return t.isReady ? s("div", {
|
|
6720
6718
|
staticClass: "dito-list",
|
|
@@ -6954,7 +6952,7 @@ const Nl = y.register("list", {
|
|
|
6954
6952
|
}), Ee = {};
|
|
6955
6953
|
var Ul = /* @__PURE__ */ h(
|
|
6956
6954
|
Nl,
|
|
6957
|
-
|
|
6955
|
+
ql,
|
|
6958
6956
|
Al,
|
|
6959
6957
|
!1,
|
|
6960
6958
|
zl,
|
|
@@ -7275,12 +7273,12 @@ const tu = y.register("markup", {
|
|
|
7275
7273
|
},
|
|
7276
7274
|
getButtons(t, e) {
|
|
7277
7275
|
const s = [], n = ({ name: i, icon: r, attrs: o, ignoreActive: l, onClick: u }) => {
|
|
7278
|
-
const c = this.editor.isActive[i],
|
|
7276
|
+
const c = this.editor.isActive[i], f = this.editor.commands[i];
|
|
7279
7277
|
s.push({
|
|
7280
7278
|
name: i,
|
|
7281
7279
|
icon: r,
|
|
7282
7280
|
isActive: (c == null ? void 0 : c(o)) && (l == null || !l()),
|
|
7283
|
-
onClick: () => u ? u(
|
|
7281
|
+
onClick: () => u ? u(f, o) : f(o)
|
|
7284
7282
|
});
|
|
7285
7283
|
}, a = this.schema[t];
|
|
7286
7284
|
if (a)
|
|
@@ -7290,14 +7288,14 @@ const tu = y.register("markup", {
|
|
|
7290
7288
|
if (r === !0)
|
|
7291
7289
|
n({ name: u, icon: c });
|
|
7292
7290
|
else if (C(r)) {
|
|
7293
|
-
const { attr:
|
|
7294
|
-
if (
|
|
7295
|
-
if (x(
|
|
7296
|
-
for (const w of
|
|
7291
|
+
const { attr: f, values: m, ignoreActive: b, onClick: p } = r;
|
|
7292
|
+
if (f) {
|
|
7293
|
+
if (x(m) && x(l))
|
|
7294
|
+
for (const w of m)
|
|
7297
7295
|
l.includes(w) && n({
|
|
7298
7296
|
name: u,
|
|
7299
7297
|
icon: `${c}-${w}`,
|
|
7300
|
-
attrs: { [
|
|
7298
|
+
attrs: { [f]: w },
|
|
7301
7299
|
ignoreActive: b,
|
|
7302
7300
|
onClick: p
|
|
7303
7301
|
});
|
|
@@ -7465,7 +7463,7 @@ const lu = y.register("multiselect", {
|
|
|
7465
7463
|
}),
|
|
7466
7464
|
placeholder() {
|
|
7467
7465
|
const { placeholder: t, searchable: e, taggable: s } = this.schema;
|
|
7468
|
-
return t || (e && s ?
|
|
7466
|
+
return t || (e && s ? `Search or add a ${this.label}` : e ? `Select or search ${this.label}` : void 0);
|
|
7469
7467
|
}
|
|
7470
7468
|
},
|
|
7471
7469
|
mounted() {
|
|
@@ -7518,7 +7516,7 @@ function cu(t) {
|
|
|
7518
7516
|
}
|
|
7519
7517
|
const du = /* @__PURE__ */ function() {
|
|
7520
7518
|
return uu.exports;
|
|
7521
|
-
}(),
|
|
7519
|
+
}(), It = {
|
|
7522
7520
|
computed: {
|
|
7523
7521
|
inputValue: {
|
|
7524
7522
|
get() {
|
|
@@ -7609,7 +7607,7 @@ const mu = y.register(
|
|
|
7609
7607
|
],
|
|
7610
7608
|
{
|
|
7611
7609
|
components: { InputField: Dt },
|
|
7612
|
-
mixins: [
|
|
7610
|
+
mixins: [It],
|
|
7613
7611
|
nativeField: !0,
|
|
7614
7612
|
textField: !0,
|
|
7615
7613
|
computed: {
|
|
@@ -7767,7 +7765,7 @@ var ju = function() {
|
|
|
7767
7765
|
}, "progress", t.attributes, !1), t.listeners));
|
|
7768
7766
|
}, Vu = [];
|
|
7769
7767
|
const ku = y.register("progress", {
|
|
7770
|
-
mixins: [
|
|
7768
|
+
mixins: [It],
|
|
7771
7769
|
computed: {
|
|
7772
7770
|
progressValue() {
|
|
7773
7771
|
let { value: t, range: e, step: s } = this;
|
|
@@ -7831,26 +7829,26 @@ var Ru = function() {
|
|
|
7831
7829
|
}, "input", t.attributes, !1), t.listeners)), t._v(t._s(t.getLabelForOption(n)))])]);
|
|
7832
7830
|
}), 0);
|
|
7833
7831
|
}, Tu = [];
|
|
7834
|
-
const
|
|
7832
|
+
const Iu = y.register("radio", {
|
|
7835
7833
|
mixins: [rt],
|
|
7836
7834
|
nativeField: !0
|
|
7837
7835
|
}), Te = {};
|
|
7838
|
-
var
|
|
7839
|
-
|
|
7836
|
+
var Mu = /* @__PURE__ */ h(
|
|
7837
|
+
Iu,
|
|
7840
7838
|
Ru,
|
|
7841
7839
|
Tu,
|
|
7842
7840
|
!1,
|
|
7843
|
-
|
|
7841
|
+
qu,
|
|
7844
7842
|
null,
|
|
7845
7843
|
null,
|
|
7846
7844
|
null
|
|
7847
7845
|
);
|
|
7848
|
-
function
|
|
7846
|
+
function qu(t) {
|
|
7849
7847
|
for (let e in Te)
|
|
7850
7848
|
this[e] = Te[e];
|
|
7851
7849
|
}
|
|
7852
7850
|
const Au = /* @__PURE__ */ function() {
|
|
7853
|
-
return
|
|
7851
|
+
return Mu.exports;
|
|
7854
7852
|
}();
|
|
7855
7853
|
var Nu = function() {
|
|
7856
7854
|
var t = this, e = t.$createElement, s = t._self._c || e;
|
|
@@ -7889,7 +7887,7 @@ const zu = y.register("section", {
|
|
|
7889
7887
|
async processSchema(t, e, s, n, a) {
|
|
7890
7888
|
await Bt(t, e, n, a);
|
|
7891
7889
|
}
|
|
7892
|
-
}),
|
|
7890
|
+
}), Ie = {};
|
|
7893
7891
|
var Hu = /* @__PURE__ */ h(
|
|
7894
7892
|
zu,
|
|
7895
7893
|
Nu,
|
|
@@ -7901,8 +7899,8 @@ var Hu = /* @__PURE__ */ h(
|
|
|
7901
7899
|
null
|
|
7902
7900
|
);
|
|
7903
7901
|
function Ku(t) {
|
|
7904
|
-
for (let e in
|
|
7905
|
-
this[e] =
|
|
7902
|
+
for (let e in Ie)
|
|
7903
|
+
this[e] = Ie[e];
|
|
7906
7904
|
}
|
|
7907
7905
|
const Wu = /* @__PURE__ */ function() {
|
|
7908
7906
|
return Hu.exports;
|
|
@@ -7977,7 +7975,7 @@ const Gu = y.register("select", {
|
|
|
7977
7975
|
populate: !0
|
|
7978
7976
|
};
|
|
7979
7977
|
}
|
|
7980
|
-
}),
|
|
7978
|
+
}), Me = {};
|
|
7981
7979
|
var Xu = /* @__PURE__ */ h(
|
|
7982
7980
|
Gu,
|
|
7983
7981
|
Ju,
|
|
@@ -7989,8 +7987,8 @@ var Xu = /* @__PURE__ */ h(
|
|
|
7989
7987
|
null
|
|
7990
7988
|
);
|
|
7991
7989
|
function Yu(t) {
|
|
7992
|
-
for (let e in
|
|
7993
|
-
this[e] =
|
|
7990
|
+
for (let e in Me)
|
|
7991
|
+
this[e] = Me[e];
|
|
7994
7992
|
}
|
|
7995
7993
|
const Zu = /* @__PURE__ */ function() {
|
|
7996
7994
|
return Xu.exports;
|
|
@@ -8042,7 +8040,7 @@ var tc = function() {
|
|
|
8042
8040
|
}, ec = [];
|
|
8043
8041
|
const sc = y.register("slider", {
|
|
8044
8042
|
components: { InputField: Dt },
|
|
8045
|
-
mixins: [
|
|
8043
|
+
mixins: [It],
|
|
8046
8044
|
nativeField: !0,
|
|
8047
8045
|
computed: {
|
|
8048
8046
|
input: d("input", {
|
|
@@ -8050,7 +8048,7 @@ const sc = y.register("slider", {
|
|
|
8050
8048
|
default: !0
|
|
8051
8049
|
})
|
|
8052
8050
|
}
|
|
8053
|
-
}),
|
|
8051
|
+
}), qe = {};
|
|
8054
8052
|
var nc = /* @__PURE__ */ h(
|
|
8055
8053
|
sc,
|
|
8056
8054
|
tc,
|
|
@@ -8062,8 +8060,8 @@ var nc = /* @__PURE__ */ h(
|
|
|
8062
8060
|
null
|
|
8063
8061
|
);
|
|
8064
8062
|
function ac(t) {
|
|
8065
|
-
for (let e in
|
|
8066
|
-
this[e] =
|
|
8063
|
+
for (let e in qe)
|
|
8064
|
+
this[e] = qe[e];
|
|
8067
8065
|
}
|
|
8068
8066
|
const ic = /* @__PURE__ */ function() {
|
|
8069
8067
|
return nc.exports;
|
|
@@ -8685,10 +8683,10 @@ const Rc = /* @__PURE__ */ function() {
|
|
|
8685
8683
|
TypeTreeList: jc,
|
|
8686
8684
|
TypeUpload: Rc
|
|
8687
8685
|
}, Symbol.toStringTag, { value: "Module" })), Je = /* @__PURE__ */ new Set();
|
|
8688
|
-
function
|
|
8686
|
+
function Ic(t) {
|
|
8689
8687
|
Je.has(t) || (Je.add(t), console.warn(t));
|
|
8690
8688
|
}
|
|
8691
|
-
const
|
|
8689
|
+
const Mc = [
|
|
8692
8690
|
"create",
|
|
8693
8691
|
"created",
|
|
8694
8692
|
"save",
|
|
@@ -8706,18 +8704,18 @@ const Ic = [
|
|
|
8706
8704
|
"drag",
|
|
8707
8705
|
"dragged"
|
|
8708
8706
|
].reduce((t, e) => (t[e] = e, t), {});
|
|
8709
|
-
|
|
8710
|
-
|
|
8711
|
-
|
|
8712
|
-
|
|
8713
|
-
class
|
|
8707
|
+
M.config.productionTip = !1;
|
|
8708
|
+
M.use(Qe);
|
|
8709
|
+
M.use(Ts, { dynamic: !0 });
|
|
8710
|
+
M.use(Is);
|
|
8711
|
+
class dd {
|
|
8714
8712
|
constructor(e, {
|
|
8715
8713
|
dito: s = {},
|
|
8716
8714
|
api: n,
|
|
8717
8715
|
views: a = {},
|
|
8718
8716
|
...i
|
|
8719
8717
|
} = {}) {
|
|
8720
|
-
this.el = e, this.api = n = ft({ base: "/" }, s.api, n), this.options = i, n.locale || (n.locale = "en-US"), n.formats = ft({}, Zs, n.formats), n.request || (n.request = (o) => Ac(n, o)), n.getApiUrl || (n.getApiUrl = (o) =>
|
|
8718
|
+
this.el = e, this.api = n = ft({ base: "/" }, s.api, n), this.options = i, n.locale || (n.locale = "en-US"), n.formats = ft({}, Zs, n.formats), n.request || (n.request = (o) => Ac(n, o)), n.getApiUrl || (n.getApiUrl = (o) => Uc(n, o)), n.isApiUrl || (n.isApiUrl = (o) => Nc(n, o)), n.normalizePath || (n.normalizePath = n.normalizePaths ? Q : (o) => o), n.denormalizePath || (n.denormalizePath = n.normalizePaths ? Xe : (o) => o);
|
|
8721
8719
|
const r = n.users = F(n.users, {
|
|
8722
8720
|
type: "collection"
|
|
8723
8721
|
}) || {};
|
|
@@ -8752,7 +8750,7 @@ class ud {
|
|
|
8752
8750
|
}, n.headers = {
|
|
8753
8751
|
"Content-Type": "application/json",
|
|
8754
8752
|
...n.headers
|
|
8755
|
-
}, E(e) && (e = document.querySelector(e)), this.root = new
|
|
8753
|
+
}, E(e) && (e = document.querySelector(e)), this.root = new M({
|
|
8756
8754
|
el: e,
|
|
8757
8755
|
router: new Qe({
|
|
8758
8756
|
mode: "history",
|
|
@@ -8763,7 +8761,7 @@ class ud {
|
|
|
8763
8761
|
components: { DitoRoot: $t },
|
|
8764
8762
|
provide: {
|
|
8765
8763
|
api: n,
|
|
8766
|
-
$verbs: () =>
|
|
8764
|
+
$verbs: () => Mc,
|
|
8767
8765
|
$views: () => {
|
|
8768
8766
|
},
|
|
8769
8767
|
$isPopulated: () => !0,
|
|
@@ -8796,7 +8794,7 @@ class ud {
|
|
|
8796
8794
|
return y.register(e, s);
|
|
8797
8795
|
}
|
|
8798
8796
|
}
|
|
8799
|
-
class
|
|
8797
|
+
class qc extends Error {
|
|
8800
8798
|
constructor(e) {
|
|
8801
8799
|
super(`Request failed with status code: ${e.status} (${e.statusText})`), this.response = e;
|
|
8802
8800
|
}
|
|
@@ -8809,32 +8807,46 @@ async function Ac(t, {
|
|
|
8809
8807
|
headers: i = null,
|
|
8810
8808
|
data: r = null
|
|
8811
8809
|
}) {
|
|
8812
|
-
var
|
|
8813
|
-
n &&
|
|
8814
|
-
const o = t.
|
|
8815
|
-
o && !Ze(e) && (e = t.getApiUrl(e));
|
|
8816
|
-
const l = a && new URLSearchParams(a).toString();
|
|
8817
|
-
l && (e = `${e}?${l}`);
|
|
8818
|
-
const u = await fetch(e, {
|
|
8810
|
+
var u, c;
|
|
8811
|
+
n && Ic("request.params is deprecated. Use action.method and action.path instead.");
|
|
8812
|
+
const o = t.isApiUrl(e), l = await fetch(t.getApiUrl({ url: e, query: a }), {
|
|
8819
8813
|
method: s.toUpperCase(),
|
|
8820
8814
|
...r && { body: JSON.stringify(r) },
|
|
8821
8815
|
headers: {
|
|
8822
8816
|
...o && t.headers,
|
|
8823
8817
|
...i
|
|
8824
8818
|
},
|
|
8825
|
-
credentials: o && ((
|
|
8819
|
+
credentials: o && ((u = t.cors) == null ? void 0 : u.credentials) ? "include" : "same-origin"
|
|
8826
8820
|
});
|
|
8827
|
-
if ((
|
|
8828
|
-
throw new
|
|
8829
|
-
return
|
|
8821
|
+
if ((c = l.headers.get("Content-Type")) != null && c.includes("application/json") && (l.data = await l.json()), !l.ok)
|
|
8822
|
+
throw new qc(l);
|
|
8823
|
+
return l;
|
|
8830
8824
|
}
|
|
8831
8825
|
function Nc(t, e) {
|
|
8832
|
-
return `${t.url.replace(/\/+$/, "")}/${e.replace(/^\/+/, "")}`;
|
|
8833
|
-
}
|
|
8834
|
-
function Uc(t, e) {
|
|
8835
8826
|
return !Ze(e) || e.startsWith(t.url);
|
|
8836
8827
|
}
|
|
8828
|
+
function Uc(t, { url: e, query: s }) {
|
|
8829
|
+
Ze(e) || (e = zc(t.url, e));
|
|
8830
|
+
const n = Hc(s);
|
|
8831
|
+
return n ? `${e}?${n}` : e;
|
|
8832
|
+
}
|
|
8833
|
+
function zc(t, e) {
|
|
8834
|
+
return `${t.replace(/\/+$/, "")}/${e.replace(/^\/+/, "")}`;
|
|
8835
|
+
}
|
|
8836
|
+
function Hc(t) {
|
|
8837
|
+
const e = t ? x(t) ? t : Object.entries(t) : [];
|
|
8838
|
+
return new URLSearchParams(
|
|
8839
|
+
e.reduce(
|
|
8840
|
+
(s, [n, a]) => {
|
|
8841
|
+
for (const i of L(a))
|
|
8842
|
+
s.push([n, i]);
|
|
8843
|
+
return s;
|
|
8844
|
+
},
|
|
8845
|
+
[]
|
|
8846
|
+
)
|
|
8847
|
+
).toString();
|
|
8848
|
+
}
|
|
8837
8849
|
export {
|
|
8838
|
-
|
|
8850
|
+
dd as default
|
|
8839
8851
|
};
|
|
8840
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcFN0YXRlLmpzIiwiLi4vc3JjL3V0aWxzL2RhdGEuanMiLCIuLi9zcmMvRGl0b0NvbnRleHQuanMiLCIuLi9zcmMvbWl4aW5zL0VtaXR0ZXJNaXhpbi5qcyIsIi4uL3NyYy91dGlscy90eXBlLmpzIiwiLi4vc3JjL3V0aWxzL3Jlc291cmNlLmpzIiwiLi4vc3JjL21peGlucy9EaXRvTWl4aW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2NyZWRpdGNhcmQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RlY2ltYWxzLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19lbWFpbC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faG9zdG5hbWUuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RvbWFpbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faW50ZWdlci5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWF4LmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19taW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3Bhc3N3b3JkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19yYW5nZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmVxdWlyZWQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3VybC5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdGlvbk1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2FjY2Vzc29yLmpzIiwiLi4vc3JjL3V0aWxzL3VpZC5qcyIsIi4uL3NyYy91dGlscy9TY2hlbWFHcmFwaC5qcyIsIi4uL3NyYy91dGlscy9zY2hlbWEuanMiLCIuLi9zcmMvbWl4aW5zL1R5cGVNaXhpbi5qcyIsIi4uL3NyYy9EaXRvQ29tcG9uZW50LmpzIiwiLi4vc3JjL0RpdG9Vc2VyLmpzIiwiLi4vc3JjL21peGlucy9TY2hlbWFQYXJlbnRNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1JvdXRlTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVmlldy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSIsIi4uL3NyYy9taXhpbnMvRG9tTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUm9vdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Sb290LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9NZW51LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b01lbnUudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zcGlubmVyL3NyYy9QdWxzZUxvYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3Bpbm5lci9zcmMvUHVsc2VMb2FkZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0hlYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9IZWFkZXIudnVlIiwiLi4vc3JjL21peGlucy9QdWxsZG93bk1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0FjY291bnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQWNjb3VudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRGlhbG9nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FbGVtZW50LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9MYWJlbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9MYWJlbC52dWUiLCIuLi9zcmMvbWl4aW5zL0l0ZW1NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWEudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYUlubGluZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZS52dWUiLCIuLi9zcmMvdXRpbHMvbWF0aC5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Db250YWluZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ29udGFpbmVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbHMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWxzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9CdXR0b25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0J1dHRvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DcmVhdGVCdXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ3JlYXRlQnV0dG9uLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DbGlwYm9hcmQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ2xpcGJvYXJkLnZ1ZSIsIi4uL3NyYy9taXhpbnMvTG9hZGluZ01peGluLmpzIiwiLi4vc3JjL21peGlucy9SZXNvdXJjZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybU5lc3RlZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRXJyb3JzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NvcGVzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Njb3Blcy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYWdpbmF0aW9uLnZ1ZSIsIi4uL3NyYy9taXhpbnMvT3JkZXJlZE1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RyZWVJdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RyZWVJdGVtLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUhlYWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUNlbGwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVDZWxsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WTm9kZS52dWUiLCIuLi9zcmMvVHlwZUNvbXBvbmVudC5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVCdXR0b24udnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDaGVja2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3gudnVlIiwiLi4vc3JjL21peGlucy9EYXRhTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL09wdGlvbnNNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3hlcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3hlcy52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUNvZGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvZGUudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2xvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ29sb3IudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbXBvbmVudC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbXB1dGVkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wdXRlZC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZURhdGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZURhdGUudnVlIiwiLi4vc3JjL21peGlucy9Tb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy91dGlscy9maWx0ZXIuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxpc3QudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVMYWJlbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTGFiZWwudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVNYXJrdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU1hcmt1cC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZU11bHRpc2VsZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVNdWx0aXNlbGVjdC52dWUiLCIuLi9zcmMvbWl4aW5zL051bWJlck1peGluLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVOdW1iZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU51bWJlci52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZU9iamVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlT2JqZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUGFuZWwudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVQcm9ncmVzcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlUHJvZ3Jlc3MudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVSYWRpby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlUmFkaW8udnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWN0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWN0aW9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2VsZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWxlY3QudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTbGlkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVNsaWRlci52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVN3aXRjaC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU3dpdGNoLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHRhcmVhLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVUZXh0YXJlYS52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRyZWVMaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVUcmVlTGlzdC52dWUiLCIuLi9zcmMvdXRpbHMvdW5pdHMuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVVwbG9hZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVXBsb2FkLnZ1ZSIsIi4uL3NyYy91dGlscy9kZXByZWNhdGUuanMiLCIuLi9zcmMvdmVyYnMuanMiLCIuLi9zcmMvRGl0b0FkbWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcbiAgdGl0bGU6ICcnLFxuICByb3V0ZUNvbXBvbmVudHM6IFtdLFxuICB1c2VyOiBudWxsLFxuICBsb2FkQ2FjaGU6IHt9LCAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICBhY3RpdmVMYWJlbDogbnVsbCxcbiAgY2xpcGJvYXJkRGF0YTogbnVsbFxufVxuIiwiaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLCBwYXJzZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pIHtcbiAgcmV0dXJuIGRhdGFQYXRoXG4gICAgPyBgJHtkYXRhUGF0aH0vJHt0b2tlbn1gXG4gICAgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcGF0aD8ucG9wKClcbiAgcmV0dXJuIHBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbmVzdGVkID8gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkgOiBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIGlmIChwYXRoKSB7XG4gICAgLy8gUmVtb3ZlIHRoZSBwYXJlbnQgdG9rZW4uIElmIGl0J3MgYSBudW1iZXIsIHRoZW4gd2UncmUgZGVhbGluZyB3aXRoIGFuXG4gICAgLy8gYXJyYXkgYW5kIG5lZWQgdG8gcmVtb3ZlIG1vcmUgdG9rZW5zIHVudGlsIHdlIG1lZXQgdGhlIGFjdHVhbCBwYXJlbnQ6XG4gICAgbGV0IHRva2VuXG4gICAgZG8ge1xuICAgICAgdG9rZW4gPSBwYXRoLnBvcCgpXG4gICAgfSB3aGlsZSAodG9rZW4gIT0gbnVsbCAmJiBpc0ludGVnZXIoK3Rva2VuKSlcbiAgICAvLyBJZiB0aGUgcmVtb3ZlZCB0b2tlbiBpcyB2YWxpZCwgd2UgY2FuIGdldCB0aGUgcGFyZW50IGRhdGE6XG4gICAgaWYgKHRva2VuICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwYXRoXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbShyb290SXRlbSwgZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICByZXR1cm4gcGF0aCA/IGdldFZhbHVlQXREYXRhUGF0aChyb290SXRlbSwgcGF0aCkgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcmV0dXJuIHBhdGhbcGF0aC5sZW5ndGggLSAxXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoTmFtZShkYXRhUGF0aCkge1xuICBjb25zdCB0b2tlbiA9IGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKVxuICByZXR1cm4gdG9rZW4gPT0gbnVsbCB8fCBpc0ludGVnZXIoK3Rva2VuKSA/IG51bGwgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoSW5kZXgoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgY29uc3QgaW5kZXggPSB0b2tlbiA9PSBudWxsID8gbnVsbCA6ICt0b2tlblxuICByZXR1cm4gaXNJbnRlZ2VyKGluZGV4KSA/IGluZGV4IDogbnVsbFxufVxuXG5sZXQgdGVtcG9yYXJ5SWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gc2V0VGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFRlbXBvcmFyeSBpZHMgYXJlIG1hcmtlZCB3aXRoIGEgJ0AnIGF0IHRoZSBiZWdpbm5pbmcuXG4gIGRhdGFbaWRLZXldID0gYEAkeysrdGVtcG9yYXJ5SWR9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wb3JhcnlJZChpZCkge1xuICByZXR1cm4gL15ALy50ZXN0KGlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzVGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIHJldHVybiBpc1RlbXBvcmFyeUlkKGRhdGE/LltpZEtleV0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZmVyZW5jZShkYXRhLCBpZEtleSA9ICdpZCcpIHtcbiAgLy8gUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIG9iamVjdCB0aGF0IGhvbGRzIG5vdGhpbmcgbW9yZSB0aGFuIGFuIGlkLlxuICByZXR1cm4gZGF0YT8uW2lkS2V5XSAhPSBudWxsICYmIE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMVxufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQge1xuICBnZXRJdGVtRGF0YVBhdGgsIGdldFBhcmVudEl0ZW1EYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSwgZ2V0SXRlbSxcbiAgZ2V0TGFzdERhdGFQYXRoTmFtZSwgZ2V0TGFzdERhdGFQYXRoSW5kZXhcbn0gZnJvbSAnLi91dGlscy9kYXRhLmpzJ1xuXG4vLyBgRGl0b0NvbnRleHRgIGluc3RhbmNlcyBhcmUgYSB0aGluIHdyYXBwZXIgYXJvdW5kIHJhdyBgY29udGV4dGAgb2JqZWN0cyxcbi8vIHdoaWNoIHRoZW1zZWx2ZXMgYWN0dWFsbHkgaW5oZXJpdCBmcm9tIHRoZSBsaW5rZWQgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvXG4vLyB0aGF0IHRoZXkgb25seSBuZWVkIHRvIHByb3ZpZGUgdGhlIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBkaWZmZXJlbnQgdGhhblxuLy8gaW4gdGhlIHVuZGVybHlpbmcgY29tcG9uZW50LiBJbiBvcmRlciB0byBub3QgZXhwb3NlIGFsbCBmaWVsZHMgZnJvbSB0aGVcbi8vIGNvbXBvbmVudCwgdGhlIHdyYXBwZXIgaXMgaW50cm9kdWNlZDpcbi8vIFVzZSBXZWFrTWFwIGZvciB0aGUgcmF3IGBjb250ZXh0YCBvYmplY3RzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBvbGx1dGUgdGhlXG4vLyBhY3R1YWwgYERpdG9Db250ZXh0YCBpbnN0YW5jZSB3aXRoIGl0LlxuY29uc3QgY29udGV4dHMgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIGdldChjb250ZXh0LCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICBjb25zdCBvYmplY3QgPSBjb250ZXh0cy5nZXQoY29udGV4dClcbiAgY29uc3QgdmFsdWUgPSBvYmplY3Rba2V5XVxuICAvLyBJZiBgb2JqZWN0YCBleHBsaWNpdGx5IHNldHMgdGhlIGtleSB0byBgdW5kZWZpbmVkYCwgcmV0dXJuIGl0LlxuICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCB8fCBvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KVxuICAgID8gdmFsdWVcbiAgICA6IGlzRnVuY3Rpb24oZGVmYXVsdFZhbHVlKVxuICAgICAgPyBkZWZhdWx0VmFsdWUoKVxuICAgICAgOiBkZWZhdWx0VmFsdWVcbn1cblxuZnVuY3Rpb24gc2V0KGNvbnRleHQsIGtleSwgdmFsdWUpIHtcbiAgY29udGV4dHMuZ2V0KGNvbnRleHQpW2tleV0gPSB2YWx1ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYW1zIG9iamVjdCAvIGZ1bmN0aW9uLCBvciBjcmVhdGUgYSBuZXcgb25lOlxuICAgIGNvbnRleHQgPSBjb250ZXh0XG4gICAgICA/IChpc0Z1bmN0aW9uKGNvbnRleHQpID8gY29udGV4dCgpIDogeyAuLi5jb250ZXh0IH0pXG4gICAgICA6IHt9XG4gICAgLy8gSWYgbm90IGV4cGxpY2l0bHkgc2V0ICh0byBmYWxzZSksIGRlZmF1bHQgdG8gdHJ1ZSBzbyB3ZSBkb24ndCBmYWxsIGJhY2tcbiAgICAvLyB0byBgY29tcG9uZW50YCBmb3IgaXRzIHZhbHVlLlxuICAgIGNvbnRleHQubmVzdGVkID8/PSB0cnVlXG4gICAgY29udGV4dC5jb21wb25lbnQgPSBjb21wb25lbnRcbiAgICAvLyBIYXZlIGBvYmplY3RgIGluaGVyaXQgZnJvbSB0aGUgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvIGl0IGNhbiBvdmVycmlkZVxuICAgIC8vIGl0cyB2YWx1ZXMgYW5kIHN0aWxsIHJldHJpZXZlIGZyb20gaXQsIGFuZCBhc3NvY2lhdGUgaXQgd2l0aCBgdGhpc2BcbiAgICAvLyB0aHJvdWdoIGBjb250ZXh0c2AgbWFwOlxuICAgIGNvbnN0IG9iamVjdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZihjb250ZXh0LCBjb21wb25lbnQpXG4gICAgY29udGV4dHMuc2V0KHRoaXMsIG9iamVjdClcbiAgfVxuXG4gIHN0YXRpYyBnZXQoY29tcG9uZW50LCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQgaW5zdGFuY2VvZiBEaXRvQ29udGV4dFxuICAgICAgPyBjb250ZXh0XG4gICAgICA6IG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIGNvbnRleHQpXG4gIH1cblxuICAvLyBgbmVzdGVkYCBpcyBgdHJ1ZWAgd2hlbiB0aGUgZGF0YS1wYXRoIHBvaW50cyBhIHZhbHVlIGluc2lkZSBhbiBpdGVtLCBhbmRcbiAgLy8gYGZhbHNlYCB3aGVuIGl0IHBvaW50cyB0byB0aGUgaXRlbSBpdHNlbGYuXG4gIGdldCBuZXN0ZWQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmVzdGVkJywgdHJ1ZSlcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2YWx1ZScsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBkYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkYXRhUGF0aCcsICcnKVxuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmFtZScsICgpID0+IGdldExhc3REYXRhUGF0aE5hbWUodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnaW5kZXgnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldFBhcmVudEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBpdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuaXRlbURhdGFQYXRoKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5wYXJlbnRJdGVtRGF0YVBhdGgpXG4gIH1cblxuICBnZXQgaXRlbSgpIHtcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzOlxuICAgIC8vIElmIGBkYXRhYCBpc24ndCBwcm92aWRlZCwgd2UgY2FuIGRldGVybWluZSBpdCBmcm9tIHJvb3REYXRhICYgZGF0YVBhdGg6XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YScsICgpID0+XG4gICAgICBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIClcbiAgfVxuXG4gIC8vIE5PVEU6IGBwYXJlbnRJdGVtYCBpc24ndCB0aGUgY2xvc2VzdCBkYXRhIHBhcmVudCB0byBgaXRlbWAsIGl0J3MgdGhlXG4gIC8vIGNsb3Nlc3QgcGFyZW50IHRoYXQgaXNuJ3QgYW4gYXJyYXksIGUuZy4gZm9yIHJlbGF0aW9ucyBvciBuZXN0ZWQgSlNPTlxuICAvLyBkYXRhLiAgVGhpcyBpcyB3aHkgdGhlIHRlcm0gYGl0ZW1gIHdhcyBjaG9zZW4gb3ZlciBgZGF0YWAsIGUuZy4gVlMgdGhlXG4gIC8vIHVzZSBvZiBgcGFyZW50RGF0YWAgaW4gc2VydmVyLXNpZGVkIHZhbGlkYXRpb24sIHdoaWNoIGlzIHRoZSBjbG9zZXN0XG4gIC8vIHBhcmVudC4gSWYgbmVlZGVkLCB3ZSBjb3VsZCBleHBvc2UgdGhpcyBkYXRhIGhlcmUgdG9vLCBhcyB3ZSBjYW4gZG8gYWxsXG4gIC8vIHNvcnRzIG9mIGRhdGEgcHJvY2Vzc2luZyB3aXRoIGByb290RGF0YWAgYW5kIGBkYXRhUGF0aGAuXG4gIGdldCBwYXJlbnRJdGVtKCkge1xuICAgIGNvbnN0IHBhcmVudEl0ZW0gPVxuICAgICAgZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZCkgfHwgbnVsbFxuICAgIHJldHVybiBwYXJlbnRJdGVtICE9PSB0aGlzLml0ZW0gPyBwYXJlbnRJdGVtIDogbnVsbFxuICB9XG5cbiAgZ2V0IHJvb3RJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jvb3REYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBwcm9jZXNzZWRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Byb2Nlc3NlZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY2xpcGJvYXJkRGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgdXNlcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd1c2VyJywgbnVsbClcbiAgfVxuXG4gIGdldCBhcGkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnYXBpJywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBSZW1vdmUgZXhwb3N1cmUgc2luY2UgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LFxuICAvLyBlLmcuIG5lc3RlZCBmb3JtcyBpbiBgcHJvY2Vzc0RhdGEoKWAuIEluc3RlYWQsIGJpbmQgY29tcG9uZW50IHRvIGB0aGlzYFxuICAvLyBvbmx5IHdoZXJlIGF2YWlsYWJsZS5cbiAgZ2V0IGNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gVE9ETzogQWRkIGBjb21wb25lbnRTY2hlbWFgIGdldHRlciBmb3IgdGhlIHNjaGVtYSBvZiB0aGUgY3VycmVudCBjb21wb25lbnQsXG4gIC8vIGV2ZW4gd2hlbiB0aGUgY29tcG9uZW50IGlzbid0IGFjdHVhbGx5IGluc3RhbnRpYXRlZC4gQ29uc2lkZXIgYWRkaW5nXG4gIC8vIGBzb3VyY2VTY2hlbWFgIGFzIHdlbGw/XG5cbiAgLy8gVE9ETzogRml4IHVuY2xlYXIgbmFtaW5nOiBXaGljaCBzY2hlbWEgaXMgdGhpcywgdGhhdCBvZiB0aGUgY29tcG9uZW50IG9yIG9mXG4gIC8vIGl0cyBwYXJlbnQ/IElzbid0IGV4cG9zaW5nIGBmb3JtQ29tcG9uZW50YCBhbmQgYHZpZXdDb21wb25lbnRgIGVub3VnaCwgb25jZVxuICAvLyB3ZSBvZmZlciBhY2Nlc3MgdG8gdGhlaXIgY29tcG9uZW50cyB0aGVyZSB0aHJvdWdoIGBnZXRDb21wb25lbnQoKWAgJiBjby4gb25cbiAgLy8gYERpdG9NaXhpbmAgcGVyaGFwcz8gIEFsc28sIHRoZXJlIGNvdWxkIGJlIGEgYHRhYkNvbXBvbmVudGAgZ2V0dGVyIGZvclxuICAvLyBzY2hlbWFzIGluIHRhYnM/XG4gIGdldCBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc2NoZW1hQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBmb3JtQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1Db21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RpYWxvZ0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncGFuZWxDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jlc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFdoZW4gdXNlZCBpbiBPcHRpb25zTWl4aW4gZm9yIGBzY2hlbWEub3B0aW9ucy52YWx1ZSgpYCxcbiAgLy8gYHNjaGVtYS5vcHRpb25zLmxhYmVsKClgIGFuZCAgYHNjaGVtYS5zZWFyY2guZmlsdGVyKClgIGNhbGxiYWNrczpcbiAgZ2V0IG9wdGlvbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb24nLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb25zJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGV2ZW50czogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gQXN5bmMgdmVyc2lvbnMgb2YgVnVlJ3MgJG9uKCkgYW5kICRvZmYoKSBtZXRob2RzIHRoYXQga2VlcCB0cmFjayBvZiB0aGVcbiAgICAvLyBldmVudHMgYWRkZWQgLyByZW1vdmVkLCBhbmQgcHJvdmlkZSBhIGhhc0xpc3RlbmVycygpIG1ldGhvZCB0aGF0IGNoZWNrc1xuICAgIC8vIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudC5cblxuICAgIC8vIEFsc28gYWRkcyBwcm9wZXIgaGFuZGxpbmcgb2YgYXN5bmMgZXZlbnRzLCBpbmNsdWRpbmcgYSBhc3luYyBlbWl0KCkgdGhhdFxuICAgIC8vIGRlYWxzIHdpdGggcHJvcGVyIGV2ZW50IHF1ZXVlaW5nLlxuICAgIG9uKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGV2LCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMub24oa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLiRldmVudHMgfHwgKHRoaXMuJGV2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCkpXG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBldmVudHNbZXZlbnRdIHx8IChldmVudHNbZXZlbnRdID0ge1xuICAgICAgICAgIGNhbGxiYWNrczogW10sXG4gICAgICAgICAgcXVldWU6IFtdXG4gICAgICAgIH0pXG4gICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgb25jZShldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IG9uID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgdGhpcy5vZmYoZXZlbnQsIG9uKVxuICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcbiAgICAgIH1cbiAgICAgIG9uLmNhbGxiYWNrID0gY2FsbGJhY2sgLy8gTmVlZGVkIGZvciBgb2ZmKClgLCBzZWUgYmVsb3cuXG4gICAgICByZXR1cm4gdGhpcy5vbihldmVudCwgb24pXG4gICAgfSxcblxuICAgIG9mZihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAvLyBSZW1vdmUgYWxsIGV2ZW50c1xuICAgICAgICBkZWxldGUgdGhpcy4kZXZlbnRzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuJGV2ZW50cz8uW2V2ZW50XVxuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYWxsIGhhbmRsZXJzIGZvciB0aGlzIGV2ZW50XG4gICAgICAgICAgICBkZWxldGUgdGhpcy4kZXZlbnRzW2V2ZW50XVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYSBzcGVjaWZpYyBoYW5kbGVyOiBmaW5kIHRoZSBpbmRleCBpbiBjYWxsYmFja3NcbiAgICAgICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBlbnRyeVxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjYWxsYmFja3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAvLyBNYXRjaCBgY2IuY2FsbGJhY2tgIGFsc28sIGFzIHVzZWQgYnkgYG9uY2UoKWAsIHNlZSAgYWJvdmU6XG4gICAgICAgICAgICAgIGNiID0+IGNiID09PSBjYWxsYmFjayB8fCBjYi5jYWxsYmFjayA9PT0gY2FsbGJhY2tcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICAgIC8vIE9ubHkgcXVldWUgZXZlbnQgaWYgdGhlcmUgYWN0dWFsbHkgYXJlIGxpc3RlbmVycyBmb3IgaXQuXG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMuJGV2ZW50cz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLCBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCB0eXBlOlxuICAgIGhhc0xpc3RlbmVycyhldmVudCkge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKGV2KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5sZW5ndGggPiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISF0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZWdhdGUoZXZlbnQsIHRhcmdldCkge1xuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlKGV2LCB0YXJnZXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub24oZXZlbnQsICguLi5hcmdzKSA9PiB0YXJnZXQuZW1pdChldmVudCwgLi4uYXJncykpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc0FycmF5LCBpc09iamVjdCwgaXNTdHJpbmcsIGlzQm9vbGVhbiwgaXNOdW1iZXIsIGlzRnVuY3Rpb24sIGlzRGF0ZSxcbiAgaXNSZWdFeHAsIGFzQXJyYXlcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgdHlwZUNoZWNrZXJzID0ge1xuICBCb29sZWFuOiBpc0Jvb2xlYW4sXG4gIE51bWJlcjogaXNOdW1iZXIsXG4gIFN0cmluZzogaXNTdHJpbmcsXG4gIERhdGU6IGlzRGF0ZSxcbiAgQXJyYXk6IGlzQXJyYXksXG4gIE9iamVjdDogaXNPYmplY3QsXG4gIFJlZ0V4cDogaXNSZWdFeHAsXG4gIEZ1bmN0aW9uOiBpc0Z1bmN0aW9uXG59XG5cbi8vIERlY2xhcmUgdGhlc2Ugc2VwYXJhdGVseSBmcm9tIHRoZSBgdHlwZUNvbnZlcnRlcnNgIG9iamVjdCwgdG8gcHJldmVudFxuLy8gQmFiZWwgaXNzdWVzIHdpdGggYE9iamVjdGAgb3ZlcnJpZGluZyB0aGUgZ2xvYmFsIGBPYmplY3RgOlxuY29uc3QgdG9Cb29sZWFuID0gdmFsdWUgPT4gISF2YWx1ZVxuY29uc3QgdG9OdW1iZXIgPSB2YWx1ZSA9PiArdmFsdWVcbmNvbnN0IHRvU3RyaW5nID0gdmFsdWUgPT4gU3RyaW5nKHZhbHVlKVxuXG5jb25zdCB0b0RhdGUgPSB2YWx1ZSA9PiBpc0RhdGUodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBuZXcgRGF0ZSh2YWx1ZSlcblxuY29uc3QgdG9BcnJheSA9IHZhbHVlID0+IGlzQXJyYXkodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBpc1N0cmluZyh2YWx1ZSlcbiAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICA6IGFzQXJyYXkodmFsdWUpXG5cbmNvbnN0IHRvT2JqZWN0ID0gdmFsdWUgPT4gaXNPYmplY3QodmFsdWUpXG4gID8gdmFsdWVcbiAgLy8gSWYgYSBPYmplY3QgaXMgZXhwZWN0ZWQgYnV0IGEgQm9vbGVhbiBwcm92aWRlLCBjb252ZXJ0IHRvIGFuIGVtcHR5XG4gIC8vIG9iamVjdC4gVXNlZCBieSBgY3JlYXRhYmxlYCAmIGNvLCB0aGF0IGNhbiBiZSBib3RoLlxuICA6IHZhbHVlID09PSB0cnVlXG4gICAgPyB7fVxuICAgIDogbnVsbFxuXG5jb25zdCB0b1JlZ0V4cCA9IHZhbHVlID0+IGlzUmVnRXhwKHZhbHVlKVxuICA/IHZhbHVlXG4gIDogbmV3IFJlZ0V4cCh2YWx1ZSlcblxuY29uc3QgdHlwZUNvbnZlcnRlcnMgPSB7XG4gIEJvb2xlYW46IHRvQm9vbGVhbixcbiAgTnVtYmVyOiB0b051bWJlcixcbiAgU3RyaW5nOiB0b1N0cmluZyxcbiAgRGF0ZTogdG9EYXRlLFxuICBBcnJheTogdG9BcnJheSxcbiAgT2JqZWN0OiB0b09iamVjdCxcbiAgUmVnRXhwOiB0b1JlZ0V4cFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSB7XG4gIC8vIFNlZSBpZiBhbnkgb2YgdGhlIGV4cGVjdCB0eXBlcyBtYXRjaCwgcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHRoZXkgZG86XG4gIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBpZiAodHlwZUNoZWNrZXJzW3R5cGUubmFtZV0/Lih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSkge1xuICBjb25zdCBjb252ZXJ0ZXIgPSB0eXBlICYmIHR5cGVDb252ZXJ0ZXJzW3R5cGUubmFtZSB8fCB0eXBlXVxuICByZXR1cm4gY29udmVydGVyID8gY29udmVydGVyKHZhbHVlKSA6IHZhbHVlXG59XG4iLCJpbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIHBpY2tCeSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSZXNvdXJjZShzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0UmVzb3VyY2Uoc2NoZW1hLnJlc291cmNlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzb3VyY2UocmVzb3VyY2UsIGRlZmF1bHRzID0ge30pIHtcbiAgY29uc3QgeyBwYXJlbnQsIC4uLmRlZnMgfSA9IGRlZmF1bHRzXG4gIHJlc291cmNlID0gaXNPYmplY3QocmVzb3VyY2UpID8geyAuLi5kZWZzLCAuLi5yZXNvdXJjZSB9XG4gICAgOiBpc1N0cmluZyhyZXNvdXJjZSkgPyB7IC4uLmRlZnMsIHBhdGg6IHJlc291cmNlIH1cbiAgICA6IG51bGxcbiAgLy8gT25seSBzZXQgcGFyZW50IGlmIHBhdGggZG9lc24ndCBzdGFydCB3aXRoICcvJywgc28gcmVsYXRpdmUgVVJMcyBhcmVcbiAgLy8gZGVhbHQgd2l0aCBjb3JyZWN0bHkuXG4gIGlmIChcbiAgICByZXNvdXJjZSAmJlxuICAgIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgcmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQgJiZcbiAgICAhcmVzb3VyY2UucGF0aD8uc3RhcnRzV2l0aCgnLycpXG4gICkge1xuICAgIHJlc291cmNlLnBhcmVudCA9IHBhcmVudFxuICAgIGlmICghcmVzb3VyY2UucGF0aCkge1xuICAgICAgcmVzb3VyY2UucGF0aCA9ICcuJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzb3VyY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbWJlclJlc291cmNlKGlkLCByZXNvdXJjZSkge1xuICByZXR1cm4gaWQgIT0gbnVsbCAmJiByZXNvdXJjZT8udHlwZSA9PT0gJ2NvbGxlY3Rpb24nXG4gICAgPyB7XG4gICAgICB0eXBlOiAnbWVtYmVyJyxcbiAgICAgIC4uLnBpY2tCeShcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICh2YWx1ZSwga2V5KSA9PiBbJ21ldGhvZCcsICdwYXRoJywgJ3BhcmVudCddLmluY2x1ZGVzKGtleSlcbiAgICAgICksXG4gICAgICBpZDogYCR7aWR9YFxuICAgIH1cbiAgICA6IG51bGxcbn1cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0FycmF5LCBpc1N0cmluZywgaXNGdW5jdGlvbiwgYXNBcnJheSwgZXF1YWxzLFxuICBnZXRWYWx1ZUF0RGF0YVBhdGgsIGxhYmVsaXplLCBoeXBoZW5hdGUsIGZvcm1hdFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IGFwcFN0YXRlIGZyb20gJy4uL2FwcFN0YXRlLmpzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBFbWl0dGVyTWl4aW4gZnJvbSAnLi9FbWl0dGVyTWl4aW4uanMnXG5pbXBvcnQgeyBpc01hdGNoaW5nVHlwZSwgY29udmVydFR5cGUgfSBmcm9tICcuLi91dGlscy90eXBlLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0VtaXR0ZXJNaXhpbl0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJ2FwaScsXG4gICAgJyR2ZXJicycsXG4gICAgJyR2aWV3cycsXG4gICAgJyRpc1BvcHVsYXRlZCcsXG4gICAgJyRzY2hlbWFDb21wb25lbnQnLFxuICAgICckcm91dGVDb21wb25lbnQnLFxuICAgICckZGF0YUNvbXBvbmVudCcsXG4gICAgJyRzb3VyY2VDb21wb25lbnQnLFxuICAgICckcmVzb3VyY2VDb21wb25lbnQnLFxuICAgICckZGlhbG9nQ29tcG9uZW50JyxcbiAgICAnJHBhbmVsQ29tcG9uZW50JyxcbiAgICAnJHRhYkNvbXBvbmVudCdcbiAgXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVzRGF0YVxuICAgICAgPyB7ICRkYXRhQ29tcG9uZW50OiAoKSA9PiB0aGlzIH1cbiAgICAgIDoge31cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhcHBTdGF0ZSxcbiAgICAgIG92ZXJyaWRlczogbnVsbCAvLyBTZWUgYWNjZXNzb3IuanNcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3VyY2VTY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhPy5zY2hlbWFcbiAgICB9LFxuXG4gICAgdXNlcigpIHtcbiAgICAgIHJldHVybiBhcHBTdGF0ZS51c2VyXG4gICAgfSxcblxuICAgIC8vICR2ZXJicywgJHZlcmJzIGFuZCAkaXNQb3B1bGF0ZWQgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZVxuICAgIC8vIHJlYWN0aXZlbmVzcyBhY3Jvc3MgcHJvdmlkZS9pbmplY3QuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICB2ZXJicygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2ZXJicygpXG4gICAgfSxcblxuICAgIHZpZXdzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHZpZXdzKClcbiAgICB9LFxuXG4gICAgaXNQb3B1bGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kaXNQb3B1bGF0ZWQoKVxuICAgIH0sXG5cbiAgICBsb2NhbGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcGkubG9jYWxlXG4gICAgfSxcblxuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiBmYWxzZSB9KVxuICAgIH0sXG5cbiAgICByb290Q29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvb3QuJGNoaWxkcmVuWzBdXG4gICAgfSxcblxuICAgIHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIFVzZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGFzIGxpbmtzIHRvIGluamVjdHMsIHNvIERpdG9TY2hlbWEgY2FuXG4gICAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgICAgcmV0dXJuIHRoaXMuJHNjaGVtYUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgLy8gVXNlIGNvbXB1dGVkIHByb3BlcnRpZXMgYXMgbGlua3MgdG8gaW5qZWN0cywgc28gUm91dGVNaXhpbiBjYW5cbiAgICAgIC8vIG92ZXJyaWRlIHRoZSBwcm9wZXJ0eSBhbmQgcmV0dXJuIGB0aGlzYCBpbnN0ZWFkIG9mIHRoZSBwYXJlbnQuXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBmb3JtQ29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNGb3JtID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICB2aWV3Q29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNWaWV3ID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHMsIGluY2x1ZGluZ1xuICAgIC8vIHRoaXMgY3VycmVudCBjb21wb25lbnQsIHRoYXQgaXMgbGlua2VkIHRvIGEgcmVzb3VyY2UgKGFuZCB0aHVzIGxvYWRzIGl0c1xuICAgIC8vIG93biBkYXRhIGFuZCBkb2Vzbid0IGhvbGQgbmVzdGVkIGRhdGEpLlxuICAgIGRhdGFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGEgPyB0aGlzIDogdGhpcy4kZGF0YUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZXNvdXJjZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRkaWFsb2dDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYW5lbENvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQ/LiRwYXJlbnQuc2NoZW1hQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudFJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVDb21wb25lbnQ/LiRwYXJlbnQucm91dGVDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFyZW50Rm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LiRwYXJlbnQuZm9ybUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBkYXRhIG9mIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHNcbiAgICAvLyB0aGF0IGxvYWRzIGl0cyBvd24gZGF0YSBmcm9tIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlLlxuICAgIHJvb3REYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YUNvbXBvbmVudD8uZGF0YVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVDcmVhdGUoKSB7XG4gICAgdGhpcy4kdWlkID0gKyt1aWRcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhlIHN0YXRlIG9mIGNvbXBvbmVudHMgaXMgb25seSBhdmFpbGFibGUgZHVyaW5nIHRoZSBsaWZlLWN5Y2xlIG9mIGFcbiAgICAvLyBjb21wb25lbnQuIFNvbWUgaW5mb3JtYXRpb24gd2UgbmVlZCBhdmFpbGFibGUgbG9uZ2VyIHRoYW4gdGhhdCwgZS5nLlxuICAgIC8vIGBxdWVyeWAgJiBgdG90YWxgIG9uIFR5cGVMaXN0LCBzbyB0aGF0IHdoZW4gdGhlIHVzZXIgbmF2aWdhdGVzIGJhY2sgZnJvbVxuICAgIC8vIGVkaXRpbmcgYW4gaXRlbSBpbiB0aGUgbGlzdCwgdGhlIHN0YXRlIG9mIHRoZSBsaXN0IGlzIHN0aWxsIHRoZSBzYW1lLlxuICAgIC8vIFdlIGNhbid0IHN0b3JlIHRoaXMgaW4gYGRhdGFgLCBhcyB0aGlzIGlzIGFscmVhZHkgdGhlIHB1cmUgZGF0YSBmcm9tIHRoZVxuICAgIC8vIEFQSSBzZXJ2ZXIuIFRoYXQncyB3aGF0IHRoZSBgc3RvcmVgIGlzIGZvcjogTWVtb3J5IHRoYXQncyBhdmFpbGFibGUgYXNcbiAgICAvLyBsb25nIGFzIHRoZSBjdXJyZW50IGVkaXRpbmcgcGF0aCBpcyBzdGlsbCB2YWxpZC4gRm9yIHR5cGUgY29tcG9uZW50cyxcbiAgICAvLyB0aGlzIG1lbW9yeSBpcyBwcm92aWRlZCBieSB0aGUgcGFyZW50LCBzZWUgUm91dGVNaXhpbiBhbmQgRGl0b1BhbmUuXG4gICAgZ2V0U3RvcmUoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZVtrZXldXG4gICAgfSxcblxuICAgIHNldFN0b3JlKGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzZXQodGhpcy5zdG9yZSwga2V5LCB2YWx1ZSlcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRTdG9yZShrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN0b3JlKGtleSkgfHwgdGhpcy5zZXRTdG9yZShrZXksIHt9KVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFWYWx1ZShcbiAgICAgIGtleU9yRGF0YVBhdGgsXG4gICAgICB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgc2NoZW1hID0gdGhpcy5zY2hlbWEsIGNhbGxiYWNrID0gdHJ1ZSB9ID0ge31cbiAgICApIHtcbiAgICAgIGNvbnN0IHR5cGVzID0gdHlwZSAmJiBhc0FycmF5KHR5cGUpXG4gICAgICAvLyBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgZGF0YS1wYXRocyBpbiBga2V5T3JEYXRhUGF0aGAgY2FuIG9ubHkgYmVcbiAgICAgIC8vIHByb3ZpZGVkIGluIGluIGFycmF5IGZvcm1hdCBoZXJlOlxuICAgICAgbGV0IHZhbHVlID0gc2NoZW1hXG4gICAgICAgID8gaXNBcnJheShrZXlPckRhdGFQYXRoKVxuICAgICAgICAgID8gZ2V0VmFsdWVBdERhdGFQYXRoKHNjaGVtYSwga2V5T3JEYXRhUGF0aCwgKCkgPT4gdW5kZWZpbmVkKVxuICAgICAgICAgIDogc2NoZW1hW2tleU9yRGF0YVBhdGhdXG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGRlZikgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCBkZWYpKSB7XG4gICAgICAgICAgLy8gU3VwcG9ydCBgZGVmYXVsdCgpYCBmdW5jdGlvbnMgZm9yIGFueSB0eXBlIGV4Y2VwdCBgRnVuY3Rpb25gOlxuICAgICAgICAgIGRlZiA9IGRlZi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmXG4gICAgICB9XG5cbiAgICAgIGlmIChpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfVxuICAgICAgLy8gQW55IHNjaGVtYSB2YWx1ZSBoYW5kbGVkIHRocm91Z2ggYGdldFNjaGVtYVZhbHVlKClgIGNhbiBwcm92aWRlXG4gICAgICAvLyBhIGZ1bmN0aW9uIHRoYXQncyByZXNvbHZlZCB3aGVuIHRoZSB2YWx1ZSBpcyBldmFsdWF0ZWQ6XG4gICAgICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIE5vdyBmaW5hbGx5IHNlZSBpZiB3ZSBjYW4gY29udmVydCB0byB0aGUgZXhwZWN0IHR5cGVzLlxuICAgICAgaWYgKHR5cGVzICYmIHZhbHVlICE9IG51bGwgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICAgICAgY29uc3QgY29udmVydGVkID0gY29udmVydFR5cGUodHlwZSwgdmFsdWUpXG4gICAgICAgICAgaWYgKGNvbnZlcnRlZCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG5cbiAgICBnZXRMYWJlbChzY2hlbWEsIG5hbWUpIHtcbiAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdsYWJlbCcsIHsgdHlwZTogU3RyaW5nLCBzY2hlbWEgfSkgfHxcbiAgICAgICAgICBsYWJlbGl6ZShuYW1lIHx8IHNjaGVtYS5uYW1lKVxuICAgICAgICA6IGxhYmVsaXplKG5hbWUpIHx8ICcnXG4gICAgfSxcblxuICAgIGxhYmVsaXplLFxuXG4gICAgZ2V0QnV0dG9uQXR0cmlidXRlcyhuYW1lLCBidXR0b24pIHtcbiAgICAgIGNvbnN0IHZlcmIgPSB0aGlzLnZlcmJzW25hbWVdIHx8IG5hbWVcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsYXNzOiBgZGl0by1idXR0b24tJHt2ZXJifWAsXG4gICAgICAgIHRpdGxlOiBidXR0b24/LnRleHQgfHwgbGFiZWxpemUodmVyYilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlLCBmYWxsYmFjayA9IGZhbHNlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbmltYXRpb246IDE1MCxcbiAgICAgICAgZGlzYWJsZWQ6ICFkcmFnZ2FibGUsXG4gICAgICAgIGhhbmRsZTogJy5kaXRvLWJ1dHRvbi1kcmFnJyxcbiAgICAgICAgZHJhZ0NsYXNzOiAnZGl0by1kcmFnLWFjdGl2ZScsXG4gICAgICAgIGNob3NlbkNsYXNzOiAnZGl0by1kcmFnLWNob3NlbicsXG4gICAgICAgIGdob3N0Q2xhc3M6ICdkaXRvLWRyYWctZ2hvc3QnLFxuICAgICAgICBmYWxsYmFja0NsYXNzOiAnZGl0by1kcmFnLWZhbGxiYWNrJyxcbiAgICAgICAgZm9yY2VGYWxsYmFjazogZmFsbGJhY2tcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0UXVlcnlMaW5rKHF1ZXJ5KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgLy8gUHJlc2VydmUgaGFzaCBmb3IgdGFiczpcbiAgICAgICAgaGFzaDogdGhpcy4kcm91dGUuaGFzaFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG91bGRSZW5kZXIoc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuICEhc2NoZW1hICYmIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2lmJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNob3dEaWFsb2coe1xuICAgICAgY29tcG9uZW50cyxcbiAgICAgIGJ1dHRvbnMsXG4gICAgICBkYXRhLFxuICAgICAgc2V0dGluZ3MgPSB7XG4gICAgICAgIHdpZHRoOiA0ODAsXG4gICAgICAgIGhlaWdodDogJ2F1dG8nLFxuICAgICAgICBjbGlja1RvQ2xvc2U6IGZhbHNlXG4gICAgICB9XG4gICAgfSkge1xuICAgICAgLy8gU2hvd3MgYSBkaXRvLWRpYWxvZyBjb21wb25lbnQgdGhyb3VnaCB2dWUtanMtbW9kYWwsIGFuZCB3cmFwcyBpdCBpbiBhXG4gICAgICAvLyBwcm9taXNlIHNvIHRoYXQgdGhlIGJ1dHRvbnMgaW4gdGhlIGRpYWxvZyBjYW4gdXNlIGBkaWFsb2cucmVzb2x2ZSgpYFxuICAgICAgLy8gYW5kIGBkaWFsb2cucmVqZWN0KClgIHRvIGNsb3NlIHRoZSBtb2RhbCBkaWFsb2cgYW5kIHJlc29sdmUgLyByZWplY3RcbiAgICAgIC8vIHRoZSBwcm9taXNlIGF0IG9uY2UuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLiRtb2RhbC5zaG93KERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWRpYWxvZycpLCB7XG4gICAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgICBidXR0b25zLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgcHJvbWlzZTogeyByZXNvbHZlLCByZWplY3QgfVxuICAgICAgICB9LCBzZXR0aW5ncylcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlUGF0aChyZXNvdXJjZSkge1xuICAgICAgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShyZXNvdXJjZSlcbiAgICAgIC8vIFJlc291cmNlcyB3aXRob3V0IGEgcGFyZW50IGluaGVyaXQgdGhlIG9uZSBmcm9tIGBkYXRhQ29tcG9uZW50YFxuICAgICAgLy8gYXV0b21hdGljYWxseS5cbiAgICAgIGlmIChyZXNvdXJjZS5wYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXNvdXJjZS5wYXJlbnQgPSB0aGlzLmRhdGFDb21wb25lbnQ/LnJlc291cmNlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hcGkucmVzb3VyY2VzLmFueShnZXRSZXNvdXJjZShyZXNvdXJjZSkpXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlVXJsKHJlc291cmNlKSB7XG4gICAgICBjb25zdCBwYXRoID0gdGhpcy5nZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpXG4gICAgICBpZiAoIXBhdGgpIHJldHVybiBudWxsXG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmFwaS5nZXRBcGlVcmwocGF0aClcbiAgICAgIC8vIFN1cHBvcnQgb3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVycywgdG8gYmUgYXJlIGFkZGVkIHRvIHRoZSBVUkwuXG4gICAgICBjb25zdCB7IHF1ZXJ5IH0gPSByZXNvdXJjZVxuICAgICAgY29uc3Qgc2VhcmNoID0gcXVlcnkgJiYgbmV3IFVSTFNlYXJjaFBhcmFtcyhxdWVyeSkudG9TdHJpbmcoKVxuICAgICAgcmV0dXJuIHNlYXJjaCA/IGAke3VybH0/JHtzZWFyY2h9YCA6IHVybFxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kUmVxdWVzdCh7IG1ldGhvZCwgdXJsLCByZXNvdXJjZSwgcXVlcnksIGRhdGEsIGludGVybmFsIH0pIHtcbiAgICAgIHVybCB8fD0gdGhpcy5nZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpXG4gICAgICBtZXRob2QgfHw9IHJlc291cmNlPy5tZXRob2RcbiAgICAgIGNvbnN0IGNoZWNrVXNlciA9ICFpbnRlcm5hbCAmJiB0aGlzLmFwaS5pc0FwaVJlcXVlc3QodXJsKVxuICAgICAgaWYgKGNoZWNrVXNlcikge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZW5zdXJlVXNlcigpXG4gICAgICB9XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYXBpLnJlcXVlc3QoeyBtZXRob2QsIHVybCwgZGF0YSwgcXVlcnkgfSlcbiAgICAgIC8vIERldGVjdCBjaGFuZ2Ugb2YgdGhlIG93biB1c2VyLCBhbmQgZmV0Y2ggaXQgYWdhaW4gaWYgaXQgd2FzIGNoYW5nZWQuXG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrVXNlciAmJlxuICAgICAgICBtZXRob2QgPT09ICdwYXRjaCcgJiZcbiAgICAgICAgZXF1YWxzKHJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLnVzZXIuaWQsIHRoaXMuYXBpLnVzZXJzKSlcbiAgICAgICkge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZmV0Y2hVc2VyKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH0sXG5cbiAgICByZXF1ZXN0KHsgY2FjaGUsIC4uLm9wdGlvbnMgfSkge1xuICAgICAgLy8gQWxsb3cgY2FjaGluZyBvZiBsb2FkZWQgZGF0YSBvbiB0d28gbGV2ZWxzOlxuICAgICAgLy8gLSAnZ2xvYmFsJzogY2FjaGUgZ2xvYmFsbHksIGZvciB0aGUgZW50aXJlIGFkbWluIHNlc3Npb25cbiAgICAgIC8vIC0gJ2xvY2FsJzogY2FjaGUgbG9jYWxseSB3aXRoaW4gdGhlIGNsb3Nlc3Qgcm91dGUgY29tcG9uZW50IHRoYXQgaXNcbiAgICAgIC8vICAgIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlIGFuZCBsb2FkcyBpdHMgb3duIGRhdGEuXG4gICAgICBjb25zdCBjYWNoZVBhcmVudCA9IGNhY2hlICYmIHtcbiAgICAgICAgZ2xvYmFsOiB0aGlzLmFwcFN0YXRlLFxuICAgICAgICBsb2NhbDogdGhpcy5kYXRhQ29tcG9uZW50XG4gICAgICB9W2NhY2hlXVxuICAgICAgY29uc3QgbG9hZENhY2hlID0gY2FjaGVQYXJlbnQ/LmxvYWRDYWNoZVxuICAgICAgLy8gQnVpbGQgYSBjYWNoZSBrZXkgZnJvbSB0aGUgY29uZmlnOlxuICAgICAgY29uc3QgY2FjaGVLZXkgPSBsb2FkQ2FjaGUgJiYgYCR7XG4gICAgICAgIG9wdGlvbnMubWV0aG9kIHx8ICdnZXQnfSAke1xuICAgICAgICBvcHRpb25zLnVybH0gJHtcbiAgICAgICAgLy8gVE9ETzogYHJlcXVlc3QucGFyYW1zYCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgcXVlcnlgIG9uXG4gICAgICAgIC8vIDIwMjItMTEtMDEsIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55bW9yZS5cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5xdWVyeSB8fCBvcHRpb25zLnBhcmFtcyB8fCAnJyl9ICR7XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSB8fCAnJylcbiAgICAgIH1gXG4gICAgICBpZiAobG9hZENhY2hlICYmIChjYWNoZUtleSBpbiBsb2FkQ2FjaGUpKSB7XG4gICAgICAgIHJldHVybiBsb2FkQ2FjaGVbY2FjaGVLZXldXG4gICAgICB9XG4gICAgICAvLyBOT1RFOiBObyBhd2FpdCBoZXJlLCByZXMgaXMgYSBwcm9taXNlIHRoYXQgd2UgY2FuIGVhc2lseSBjYWNoZS5cbiAgICAgIC8vIFRoYXQncyBmaW5lIGJlY2F1c2UgcHJvbWlzZXMgY2FuIGJlIHJlc29sdmVkIG92ZXIgYW5kIG92ZXIgYWdhaW4uXG4gICAgICBjb25zdCByZXMgPSB0aGlzLnNlbmRSZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEpXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgLy8gQ29udmVydCBheGlvcyBlcnJvcnMgdG8gbm9ybWFsIGVycm9yc1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBlcnJvci5yZXNwb25zZT8uZGF0YVxuICAgICAgICAgIHRocm93IGRhdGFcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoZGF0YS5tZXNzYWdlKSwgZGF0YSlcbiAgICAgICAgICAgIDogZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIGlmIChsb2FkQ2FjaGUpIHtcbiAgICAgICAgbG9hZENhY2hlW2NhY2hlS2V5XSA9IHJlc1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0sXG5cbiAgICBmb3JtYXQodmFsdWUsIHtcbiAgICAgIGxvY2FsZSA9IHRoaXMuYXBpLmxvY2FsZSxcbiAgICAgIGRlZmF1bHRzID0gdGhpcy5hcGkuZm9ybWF0cyxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBmb3JtYXQodmFsdWUsIHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGUobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgKCkgPT4gcmVzb2x2ZSh0cnVlKSxcbiAgICAgICAgICAoKSA9PiByZXNvbHZlKGZhbHNlKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBkb3dubG9hZChvcHRpb25zID0ge30pIHtcbiAgICAgIGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfVxuICAgICAgfVxuICAgICAgY29uc3QgeyB1cmwsIGZpbGVuYW1lIH0gPSBvcHRpb25zXG4gICAgICAvLyBTZWU6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80OTkxNzA2Ni8xMTYzNzA4XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gICAgICBhLmhyZWYgPSB1cmxcbiAgICAgIGlmIChmaWxlbmFtZSkge1xuICAgICAgICBhLmRvd25sb2FkID0gZmlsZW5hbWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgYm9keSB9ID0gZG9jdW1lbnRcbiAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSlcbiAgICAgIGEuY2xpY2soKVxuICAgICAgYm9keS5yZW1vdmVDaGlsZChhKVxuICAgIH0sXG5cbiAgICBub3RpZnkob3B0aW9ucykge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgIH0sXG5cbiAgICBjbG9zZU5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnQuY2xvc2VOb3RpZmljYXRpb25zKClcbiAgICB9LFxuXG4gICAgc2V0dXBTY2hlbWFGaWVsZHMoKSB7XG4gICAgICB0aGlzLnNldHVwTWV0aG9kcygpXG4gICAgICB0aGlzLnNldHVwQ29tcHV0ZWQoKVxuICAgICAgdGhpcy5zZXR1cEV2ZW50cygpXG4gICAgfSxcblxuICAgIHNldHVwTWV0aG9kcygpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLm1ldGhvZHMgfHwge30pKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICAgIHRoaXNba2V5XSA9IHZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBtZXRob2QgZGVmaW5pdGlvbjogJHtrZXl9OiAke3ZhbHVlfWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBDb21wdXRlZCgpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLmNvbXB1dGVkIHx8IHt9KSkge1xuICAgICAgICBjb25zdCBhY2Nlc3NvciA9IGlzRnVuY3Rpb24odmFsdWUpXG4gICAgICAgICAgPyB7IGdldDogdmFsdWUgfVxuICAgICAgICAgIDogaXNPYmplY3QodmFsdWUpICYmIGlzRnVuY3Rpb24odmFsdWUuZ2V0KVxuICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChhY2Nlc3Nvcikge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIGFjY2Vzc29yKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgSW52YWxpZCBjb21wdXRlZCBwcm9wZXJ0eSBkZWZpbml0aW9uOiAke2tleX06ICR7dmFsdWV9YFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cEV2ZW50cygpIHtcbiAgICAgIGNvbnN0IHsgd2F0Y2gsIGV2ZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGlmICh3YXRjaCkge1xuICAgICAgICBjb25zdCBoYW5kbGVycyA9IGlzRnVuY3Rpb24od2F0Y2gpID8gd2F0Y2guY2FsbCh0aGlzKSA6IHdhdGNoXG4gICAgICAgIGlmIChpc09iamVjdChoYW5kbGVycykpIHtcbiAgICAgICAgICAvLyBJbnN0YWxsIHRoZSB3YXRjaCBoYW5kbGVycyBpbiB0aGUgbmV4dCB0aWNrLCBzbyBhbGwgY29tcG9uZW50cyBhcmVcbiAgICAgICAgICAvLyBpbml0aWFsaXplZCBhbmQgd2UgY2FuIGNoZWNrIGFnYWluc3QgdGhlaXIgbmFtZXMuXG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgICAgIC8vIEV4cGFuZCBwcm9wZXJ0eSBuYW1lcyB0byAnZGF0YS5wcm9wZXJ0eSc6XG4gICAgICAgICAgICAgIGNvbnN0IGV4cHIgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeU5hbWUoa2V5KVxuICAgICAgICAgICAgICAgID8gYGRhdGEuJHtrZXl9YFxuICAgICAgICAgICAgICAgIDoga2V5XG4gICAgICAgICAgICAgIHRoaXMuJHdhdGNoKGV4cHIsIGNhbGxiYWNrKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgYWRkRXZlbnQgPSAoa2V5LCBldmVudCwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgICAgdGhpcy5vbihoeXBoZW5hdGUoZXZlbnQpLCBjYWxsYmFjaylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIGV2ZW50IGRlZmluaXRpb246ICR7a2V5fTogJHtjYWxsYmFja31gKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQWxzbyBzY2FuIHNjaGVtYSBmb3IgYG9uW0EtWl1gLXN0eWxlIGNhbGxiYWNrcyBhbmQgYWRkIHRoZW1cbiAgICAgIC8vIFRPRE86IERlcGVyZWNhdGUgb25lIGZvcm1hdCBvciB0aGUgb3RoZXIsIGluIGZhdm91ciBvZiBvbmx5IG9uZSB3YXkgb2ZcbiAgICAgIC8vIGRvaW5nIHRoaW5ncy4gRGVjaWRlIHdoaWNoIG9uZSB0byByZW1vdmUuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYSkpIHtcbiAgICAgICAgaWYgKC9eb25bQS1aXS8udGVzdChrZXkpKSB7XG4gICAgICAgICAgYWRkRXZlbnQoa2V5LCBrZXkuc2xpY2UoMiksIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGVtaXRFdmVudChldmVudCwge1xuICAgICAgY29udGV4dCA9IG51bGwsXG4gICAgICBwYXJlbnQgPSBudWxsXG4gICAgfSA9IHt9KSB7XG4gICAgICBjb25zdCBoYXNMaXN0ZW5lcnMgPSB0aGlzLmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGNvbnN0IHBhcmVudEhhc0xpc3RlbmVycyA9IHBhcmVudD8uaGFzTGlzdGVuZXJzKGV2ZW50KVxuICAgICAgaWYgKGhhc0xpc3RlbmVycyB8fCBwYXJlbnRIYXNMaXN0ZW5lcnMpIHtcbiAgICAgICAgLy8gVGhlIGVmZmVjdHMgb2Ygc29tZSBldmVudHMgbmVlZCBzb21lIHRpbWUgdG8gcHJvcGFnYXRlIHRocm91Z2ggVnVlLlxuICAgICAgICAvLyBVc2UgJG5leHRUaWNrKCkgdG8gbWFrZSBzdXJlIG91ciBoYW5kbGVycyBzZWUgdGhlc2UgY2hhbmdlcy5cbiAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGBwcm9jZXNzZWRJdGVtYCBpcyBvbmx5IGNvcnJlY3QgYWZ0ZXIgY29tcG9uZW50cyB0aGF0XG4gICAgICAgIC8vIGFyZSBuZXdseSByZW5kZXJlZCBkdWUgdG8gZGF0YSBjaGFuZ2VzIGhhdmUgcmVnaXN0ZXJlZCB0aGVtc2VsdmVzLlxuICAgICAgICBpZiAoWydsb2FkJywgJ2NoYW5nZSddLmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdldENvbnRleHQgPSAoKSA9PiAoY29udGV4dCA9IERpdG9Db250ZXh0LmdldCh0aGlzLCBjb250ZXh0KSlcbiAgICAgICAgY29uc3QgcmVzID0gaGFzTGlzdGVuZXJzXG4gICAgICAgICAgPyBhd2FpdCB0aGlzLmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAvLyBEb24ndCBidWJibGUgdG8gcGFyZW50IGlmIGhhbmRsZWQgZXZlbnQgcmV0dXJuZWQgYGZhbHNlYFxuICAgICAgICBpZiAocGFyZW50SGFzTGlzdGVuZXJzICYmIHJlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBwYXJlbnQuZW1pdChldmVudCwgZ2V0Q29udGV4dCgpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZW1pdFNjaGVtYUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudC5lbWl0RXZlbnQoZXZlbnQsIHBhcmFtcylcbiAgICB9XG4gIH1cbn1cblxubGV0IHVpZCA9IDBcbiIsImltcG9ydCB7IGlzQ3JlZGl0Q2FyZCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBjcmVkaXRjYXJkID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNDcmVkaXRDYXJkKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIGludmFsaWQnXG59XG4iLCJleHBvcnQgY29uc3QgZGVjaW1hbHMgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIGRlY2ltYWxzKSA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSBkZWNpbWFscyA9PT0gJyonID8gJysnIDogYHsxLCR7ZGVjaW1hbHN9fWBcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXlstK10/XFxcXGQqKFxcXFwuXFxcXGQke21hdGNofSk/JGApLnRlc3QodmFsdWUpXG4gIH0sXG5cbiAgbWVzc2FnZTogKHZhbHVlLCBkZWNpbWFscykgPT4gKFxuICAgIGBtdXN0IGJlIG51bWVyaWMgYW5kIG1heSBjb250YWluICR7XG4gICAgICAhZGVjaW1hbHMgfHwgZGVjaW1hbHMgPT09ICcqJyA/ICcnIDogZGVjaW1hbHNcbiAgICB9IGRlY2ltYWwgcG9pbnRzYFxuICApXG59XG4iLCJpbXBvcnQgeyBpc0VtYWlsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGVtYWlsID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNFbWFpbCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdtdXN0IGJlIGEgdmFsaWQgZW1haWwnXG59XG4iLCJpbXBvcnQgeyBpc0hvc3RuYW1lIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGhvc3RuYW1lID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNIb3N0bmFtZSh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSBob3N0IG5hbWUnXG59XG4iLCJpbXBvcnQgeyBpc0RvbWFpbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBkb21haW4gPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0RvbWFpbih2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSBkb21haW4nXG59XG4iLCJpbXBvcnQgeyBpc0ludGVnZXIgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgaW50ZWdlciA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSW50ZWdlcih2YWx1ZSksXG4gIG1lc3NhZ2U6ICdtdXN0IGJlIHdob2xlIG51bWJlcidcbn1cbiIsImV4cG9ydCBjb25zdCBtYXggPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIG1heCkgPT4gdmFsdWUgPD0gbWF4LFxuICBtZXNzYWdlKHZhbHVlLCBtYXgpIHtcbiAgICByZXR1cm4gYG11c3QgYmUgJHttYXh9IG9yIGxlc3NgXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBtaW4gPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIG1pbikgPT4gdmFsdWUgPj0gbWluLFxuICBtZXNzYWdlKHZhbHVlLCBtaW4pIHtcbiAgICByZXR1cm4gYG11c3QgYmUgJHttaW59IG9yIG1vcmVgXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBwYXNzd29yZCA9IHtcbiAgLy8gQWxsb3cgYW55IHZhbHVlLiBGb3Igbm93IHRoaXMgaXMgb25seSB1c2VkIGFzIGEgbWFya2VyLCB0byBhbGxvdyB0aGVcbiAgLy8gcmVxdWlyZWQgdmFsaWRhdGlvbiB0byBoYW5kbGUgdW5jaGFuZ2VkIHBhc3N3b3JkcyBzZXBhcmF0ZWx5LlxuICB2YWxpZGF0ZTogKCkgPT4gdHJ1ZVxufVxuIiwiZXhwb3J0IGNvbnN0IHJhbmdlID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBbbWluLCBtYXhdKSA9PiB2YWx1ZSA+PSBtaW4gJiYgdmFsdWUgPD0gbWF4LFxuICBtZXNzYWdlKHZhbHVlLCBbbWluLCBtYXhdKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlIGJldHdlZW4gJHttaW59IGFuZCAke21heH1gXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCByZXF1aXJlZCA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgc2V0dGluZ3MsIHsgcGFzc3dvcmQgfSkgPT4gKFxuICAgICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSAnJykgfHxcbiAgICAvLyBQYXNzd29yZCBmaWVsZHMgdXNlIGB1bmRlZmluZWRgIGFzIG9wcG9zZWQgdG8gYG51bGxgIHdoZW4gdGhleSdyZSBzZXRcbiAgICAvLyBidXQgdW5jaGFuZ2VkLCBhbGxvdyB0aGlzIHRvIHBhc3MgdGhyb3VnaDpcbiAgICAocGFzc3dvcmQgJiYgdmFsdWUgPT09IHVuZGVmaW5lZClcbiAgKSxcbiAgbWVzc2FnZTogJ2lzIHJlcXVpcmVkJyxcbiAgbnVsbGlzaDogdHJ1ZVxufVxuIiwiaW1wb3J0IHsgaXNVcmwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgdXJsID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNVcmwodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgdmFsaWQgVVJMJ1xufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgKiBhcyB2YWxpZGF0aW9ucyBmcm9tICcuLi92YWxpZGF0aW9ucy9pbmRleC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNUb3VjaGVkOiBmYWxzZSxcbiAgICAgIGlzRGlydHk6IGZhbHNlLFxuICAgICAgaXNWYWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICBlcnJvcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBldmVudHMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNUb3VjaGVkID0gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZSgpXG4gICAgICAgIH0sXG4gICAgICAgIGNoYW5nZTogKCkgPT4ge1xuICAgICAgICAgIHRoaXMubWFya0RpcnR5KClcbiAgICAgICAgfSxcbiAgICAgICAgaW5wdXQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuaXNUb3VjaGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWRhdGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgdmFsaWRhdGUobm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgLy8gY29uc29sZS5sb2coJ3ZhbGlkYXRlJywgdGhpcy5kYXRhUGF0aCwgdmFsdWUsIHRoaXMudmFsaWRhdGlvbnMpXG4gICAgICBmb3IgKGNvbnN0IFtydWxlLCBzZXR0aW5nXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSB2YWxpZGF0aW9uc1tydWxlXVxuICAgICAgICBpZiAodmFsaWRhdG9yICYmICh2YWxpZGF0b3IubnVsbGlzaCB8fCB2YWx1ZSAhPSBudWxsKSkge1xuICAgICAgICAgIGNvbnN0IHsgdmFsaWRhdGUsIG1lc3NhZ2UgfSA9IHZhbGlkYXRvclxuICAgICAgICAgIGlmICghdmFsaWRhdGUodmFsdWUsIHNldHRpbmcsIHRoaXMudmFsaWRhdGlvbnMpKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2VcbiAgICAgICAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBpc0Z1bmN0aW9uKG1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgPyBtZXNzYWdlKHZhbHVlLCBzZXR0aW5nLCB0aGlzKVxuICAgICAgICAgICAgICAgIDogbWVzc2FnZVxuICAgICAgICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLCB0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmlzVmFsaWRhdGVkID0gdHJ1ZVxuICAgICAgICB0aGlzLmlzVmFsaWQgPSBpc1ZhbGlkXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNWYWxpZFxuICAgIH0sXG5cbiAgICB2ZXJpZnkoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZShmYWxzZSlcbiAgICB9LFxuXG4gICAgbWFya0RpcnR5KCkge1xuICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgLy8gQ2xlYXIgY3VycmVudGx5IGRpc3BsYXllZCBlcnJvcnMgb24gbmV3IGlucHV0LlxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIGFkZEVycm9yKGVycm9yLCBhZGRMYWJlbCA9IGZhbHNlKSB7XG4gICAgICB0aGlzLmVycm9ycyB8fD0gW11cbiAgICAgIGlmIChhZGRMYWJlbCkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMubGFiZWwgfHwgdGhpcy5wbGFjZWhvbGRlciB8fCB0aGlzLm5hbWVcbiAgICAgICAgZXJyb3IgPSBgVGhlICR7bGFiZWx9IGZpZWxkICR7ZXJyb3J9LmBcbiAgICAgIH1cbiAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9LFxuXG4gICAgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgLy8gQ29udmVydCBmcm9tIEFKViBlcnJvcnMgb2JqZWN0cyB0byBhbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlc1xuICAgICAgdGhpcy5lcnJvcnMgPSBbXVxuICAgICAgZm9yIChjb25zdCB7IG1lc3NhZ2UgfSBvZiBlcnJvcnMpIHtcbiAgICAgICAgdGhpcy5hZGRFcnJvcihtZXNzYWdlLCB0cnVlKVxuICAgICAgfVxuICAgICAgaWYgKGZvY3VzKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9LFxuXG4gICAgZ2V0RXJyb3JzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXJyb3JzID8gWy4uLnRoaXMuZXJyb3JzXSA6IG51bGxcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IG51bGxcbiAgICAgIHRoaXMuJGVtaXQoJ2Vycm9ycycsIHRoaXMuZXJyb3JzKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaXNGdW5jdGlvbiwgaXNTdHJpbmcsIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFBY2Nlc3NvcihcbiAga2V5T3JEYXRhUGF0aCxcbiAgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIGdldCwgc2V0LCBjYWxsYmFjayA9IHRydWUgfSA9IHt9XG4pIHtcbiAgLy8gYGtleU9yRGF0YVBhdGhgIGNhbiBiZSBhIHNpbXBsZSBwcm9wZXJ0eSBrZXksXG4gIC8vIG9yIGEgZGF0YS1wYXRoIGludG8gc3ViLXByb3BlcnRpZXMsIGJvdGggaW4gYXJyYXkgb3Igc3RyaW5nIGZvcm1hdC5cbiAgaWYgKGlzU3RyaW5nKGtleU9yRGF0YVBhdGgpICYmIGtleU9yRGF0YVBhdGguaW5jbHVkZXMoJy4nKSkge1xuICAgIGtleU9yRGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIH1cbiAgLy8gVXNlIHRoZSBub3JtYWxpemVkIGRhdGEgcGF0aCBmb3IgdGhlIGhhbmRsaW5nIG92ZXJyaWRlc1xuICBjb25zdCBuYW1lID0gbm9ybWFsaXplRGF0YVBhdGgoa2V5T3JEYXRhUGF0aClcbiAgcmV0dXJuIHtcbiAgICBnZXQoKSB7XG4gICAgICAvLyBPbmx5IGRldGVybWluZSBzY2hlbWEgdmFsdWUgaWYgd2UgaGF2ZSBubyBnZXR0ZXIsIG9yIHRoZSBnZXR0ZXJcbiAgICAgIC8vIHdhbnRzIHRvIHJlY2VpdmUgdGhlIHZhbHVlIGFuZCBwcm9jZXNzIGl0IGZ1cnRoZXI6XG4gICAgICBjb25zdCB2YWx1ZSA9ICFnZXQgfHwgZ2V0Lmxlbmd0aCA+IDBcbiAgICAgICAgLy8gTk9URTogQmVjYXVzZSBgc2NoZW1hYCBvYmplY3RzIGFyZSByZXRyaWV2ZWQgZnJvbSBgbWV0YWAgb2JqZWN0LCB0aGV5XG4gICAgICAgIC8vIGRvbid0IHNlZW0gdG8gYmUgcmVhY3RpdmUuIFRvIGFsbG93IGNoYW5nZWQgaW4gYHNjaGVtYWAgdmFsdWVzLFxuICAgICAgICAvLyBgc2V0KClgIHN0b3JlcyBjaGFuZ2VkIHZhbHVlcyBpbiB0aGUgc2VwYXJhdGUgYG92ZXJyaWRlc2Agb2JqZWN0LlxuICAgICAgICA/IHRoaXMub3ZlcnJpZGVzICYmIG5hbWUgaW4gdGhpcy5vdmVycmlkZXNcbiAgICAgICAgICA/IHRoaXMub3ZlcnJpZGVzW25hbWVdXG4gICAgICAgICAgOiB0aGlzLmdldFNjaGVtYVZhbHVlKGtleU9yRGF0YVBhdGgsIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBjYWxsYmFjayB9KVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgcmV0dXJuIGdldCA/IGdldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHZhbHVlXG4gICAgfSxcblxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgaWYgKHNldCkge1xuICAgICAgICBzZXQuY2FsbCh0aGlzLCB2YWx1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzIHx8PSB7fVxuICAgICAgICB0aGlzLiRzZXQodGhpcy5vdmVycmlkZXMsIG5hbWUsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RvcmVBY2Nlc3NvcihuYW1lLCB7IGRlZmF1bHQ6IGRlZiwgZ2V0LCBzZXQgfSA9IHt9KSB7XG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRTdG9yZShuYW1lKVxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgZGVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gU3VwcG9ydCBgZGVmYXVsdCgpYCBmdW5jdGlvbnM6XG4gICAgICAgIHZhbHVlID0gaXNGdW5jdGlvbihkZWYpID8gZGVmLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KSA6IGRlZlxuICAgICAgICAvLyBUcmlnZ2VyIHNldHRlciBieSBzZXR0aW5nIHZhbHVlIGFuZCBhY2Nlc3NvciB0byBkZWZhdWx0OlxuICAgICAgICB0aGlzW25hbWVdID0gdmFsdWVcbiAgICAgICAgLy8gTm93IGFjY2VzcyBzdG9yZSBhZ2FpbiwgZm9yIHJlYWN0aXZpdHkgdHJhY2tpbmdcbiAgICAgICAgdGhpcy5nZXRTdG9yZShuYW1lKVxuICAgICAgfVxuICAgICAgLy8gQWxsb3cgdGhlIHByb3ZpZGVkIGdldHRlciB0byBmdXJ0aGVyIGNoYW5nZSBvciBwcm9jZXNzIHRoZSB2YWx1ZVxuICAgICAgLy8gcmV0cmlldmVkIGZyb20gdGhlIHN0b3JlOlxuICAgICAgcmV0dXJuIGdldCA/IGdldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHZhbHVlXG4gICAgfSxcblxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgLy8gQWxsb3cgdGhlIHByb3ZpZGVkIHNldHRlciB0byByZXR1cm4gYSBuZXcgdmFsdWUgdG8gc2V0LCBvciBkbyB0aGVcbiAgICAgIC8vIHNldHRpbmcgaXRzZWxmLCBhbmQgdGhlbiByZXR1cm4gYHVuZGVmaW5lZGA6XG4gICAgICBpZiAoIXNldCB8fCAodmFsdWUgPSBzZXQuY2FsbCh0aGlzLCB2YWx1ZSkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5zZXRTdG9yZShuYW1lLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImNvbnN0IHVpZE1hcCA9IG5ldyBXZWFrTWFwKClcblxuLy8gR2VuZXJhdGVkIGFuZCByZW1lbWJlcnMgdW5pcXVlIGlkcyBwZXIgcGFzc2VkIG9iamVjdCB1c2luZyBhIHdlYWsgbWFwLlxubGV0IHVpZCA9IDBcbmV4cG9ydCBmdW5jdGlvbiBnZXRVaWQob2JqZWN0LCBpdGVtSWQpIHtcbiAgbGV0IGlkID0gdWlkTWFwLmdldChvYmplY3QpXG4gIGlmICghaWQpIHtcbiAgICBpZCA9IGl0ZW1JZCB8fCBgQCR7Kyt1aWR9YFxuICAgIHVpZE1hcC5zZXQob2JqZWN0LCBpZClcbiAgfVxuICByZXR1cm4gaWRcbn1cbiIsImltcG9ydCB7IGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc0ludGVnZXIsIGFzQXJyYXksIHBhcnNlRGF0YVBhdGgsIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJ1xuXG4vLyBTY2hlbWFHcmFwaCBpcyBhIGNsYXNzIHRvIGNvbGxlY3Qgc2NoZW1hIGdyYXBoIG1ldGEgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG9cbi8vIHByb2Nlc3Mgc291cmNlcyBhbmQgcmVsYXRpb25zIGZvciB0aGUgZ2l2ZW4gdGFyZ2V0cyAnc2VydmVyJyBhbmQgJ2NsaXBib2FyZCcsXG4vLyBhY2Njb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgdGFibGU6XG4vL1xuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcbi8vIHwgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlcnZlciAgICB8IGNsaXBib2FyZCB8XG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogZmFsc2UgICAgICAgICAgIHwga2VlcCBpZCAgIHwga2VlcCBpZCAgIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IHRydWUgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlZiwgI3JlZiB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiB0cnVlLCB0ZW1wb3JhcnkgfCByZWYsICNyZWYgfCByZWYsICNyZWYgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogZmFsc2UgICAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVtb3ZlIGlkIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IGZhbHNlLCB0ZW1wb3JhcnkgICB8IHJlZiwgI2lkICB8IHJlbW92ZSBpZCB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiB0cnVlICAgICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZWYsICNpZCAgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogdHJ1ZSwgdGVtcG9yYXJ5ICAgIHwgcmVmLCAjaWQgIHwgcmVmLCAjaWQgIHxcbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG5cbmV4cG9ydCBjbGFzcyBTY2hlbWFHcmFwaCB7XG4gIGdyYXBoID0ge31cbiAgcmVmZXJlbmNlcyA9IHt9XG5cbiAgc2V0KGRhdGFQYXRoLCBzZXR0aW5ncywgZGVmYXVsdHMpIHtcbiAgICBkYXRhUGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgbGV0IHN1YkdyYXBoID0gdGhpcy5ncmFwaFxuICAgIGZvciAoY29uc3QgcGFydCBvZiBkYXRhUGF0aCkge1xuICAgICAgY29uc3Qga2V5ID0gaXNJbnRlZ2VyKCtwYXJ0KSA/ICcqJyA6IHBhcnRcbiAgICAgIHN1YkdyYXBoID0gKHN1YkdyYXBoW2tleV0gPz89IHt9KVxuICAgIH1cbiAgICBzdWJHcmFwaC4kc2V0dGluZ3MgPSB7XG4gICAgICAuLi5kZWZhdWx0cywgLy8gU2VlIGBhZGRTb3VyY2UoZGF0YVBhdGgpYFxuICAgICAgLi4uc3ViR3JhcGguJHNldHRpbmdzLFxuICAgICAgLi4uc2V0dGluZ3NcbiAgICB9XG4gIH1cblxuICBhZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIC8vIE9ubHkgc2V0IGByZWxhdGVkOiBmYWxzZWAgdGhyb3VnaCB0aGUgZGVmYXVsdHMsIGFzIGBzZXRTb3VyY2VSZWxhdGVkKClgXG4gICAgLy8gbWF5IGJlIGNhbGxlZCBiZWZvcmUgYGFkZFNvdXJjZSgpYCwgZGVwZW5kaW5nIG9uIHRoZSBncmFwaCBzdHJ1Y3R1cmUuXG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHsgdHlwZTogJ3NvdXJjZScsIHNjaGVtYSB9LCB7IHJlbGF0ZWQ6IGZhbHNlIH0pXG4gIH1cblxuICBzZXRTb3VyY2VSZWxhdGVkKGRhdGFQYXRoKSB7XG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHtcbiAgICAgIHJlbGF0ZWQ6IHRydWUsXG4gICAgICByZWZlcmVuY2U6IHRoaXMuZ2V0UmVmZXJlbmNlUHJlZml4KGRhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBhZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgdHlwZTogJ3JlbGF0aW9uJyxcbiAgICAgIHNjaGVtYSxcbiAgICAgIGludGVybmFsOiAhIXJlbGF0ZWREYXRhUGF0aCxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgocmVsYXRlZERhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBnZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpIHtcbiAgICByZXR1cm4gZGF0YVBhdGhcbiAgICAgID8gKHRoaXMucmVmZXJlbmNlc1tkYXRhUGF0aF0gPz89IG5hbm9pZCg2KSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgZmxhdHRlbigpIHtcbiAgICBjb25zdCBmbGF0dGVuID0gZ3JhcGggPT4ge1xuICAgICAgY29uc3QgZW50cmllcyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHsgJHNldHRpbmdzLCAuLi5zdWJHcmFwaCB9XSBvZiBPYmplY3QuZW50cmllcyhncmFwaCkpIHtcbiAgICAgICAgaWYgKCRzZXR0aW5ncykge1xuICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCAkc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3N1YktleSwgc2V0dGluZ3NdIG9mIGZsYXR0ZW4oc3ViR3JhcGgpKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtgJHtrZXl9LyR7c3ViS2V5fWAsIHNldHRpbmdzXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdHRlbih0aGlzLmdyYXBoKVxuICB9XG5cbiAgcHJvY2Vzcyhzb3VyY2VTY2hlbWEsIGRhdGEsIHsgdGFyZ2V0IH0pIHtcbiAgICBjb25zdCBjbGlwYm9hcmQgPSB0YXJnZXQgPT09ICdjbGlwYm9hcmQnXG4gICAgaWYgKGNsaXBib2FyZCkge1xuICAgICAgZGVsZXRlIGRhdGFbc291cmNlU2NoZW1hLmlkS2V5IHx8ICdpZCddXG4gICAgfVxuICAgIGZvciAoY29uc3QgW2RhdGFQYXRoLCBzZXR0aW5nc10gb2YgdGhpcy5mbGF0dGVuKCkpIHtcbiAgICAgIGNvbnN0IHsgdHlwZSwgc2NoZW1hLCBpbnRlcm5hbCwgcmVsYXRlZCwgcmVmZXJlbmNlIH0gPSBzZXR0aW5nc1xuICAgICAgY29uc3Qgc291cmNlID0gdHlwZSA9PT0gJ3NvdXJjZSdcbiAgICAgIGNvbnN0IHJlbGF0aW9uID0gdHlwZSA9PT0gJ3JlbGF0aW9uJ1xuICAgICAgaWYgKHNvdXJjZSB8fCByZWxhdGlvbiAmJiBpbnRlcm5hbCkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBnZXRWYWx1ZUF0RGF0YVBhdGgoZGF0YSwgZGF0YVBhdGgsICgpID0+IG51bGwpXG4gICAgICAgIGNvbnN0IHJlbW92ZUlkID0gY2xpcGJvYXJkICYmIHNvdXJjZSAmJiAhcmVsYXRlZFxuICAgICAgICBjb25zdCByZWZlcmVuY2VJZCA9IGNsaXBib2FyZCAmJiAoXG4gICAgICAgICAgcmVsYXRpb24gJiYgaW50ZXJuYWwgfHxcbiAgICAgICAgICBzb3VyY2UgJiYgcmVsYXRlZFxuICAgICAgICApXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgYXNBcnJheSh2YWx1ZXMpLmZsYXQoKSkge1xuICAgICAgICAgIGNvbnN0IGlkS2V5ID0gKFxuICAgICAgICAgICAgc291cmNlICYmIHNjaGVtYS5pZEtleSB8fFxuICAgICAgICAgICAgcmVsYXRpb24gJiYgc2NoZW1hLnJlbGF0ZUJ5IHx8XG4gICAgICAgICAgICAnaWQnXG4gICAgICAgICAgKVxuICAgICAgICAgIGxldCBpZCA9IHZhbHVlPy5baWRLZXldXG4gICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChyZW1vdmVJZCkge1xuICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICB9IGlmIChyZWZlcmVuY2VJZCB8fCBpc1RlbXBvcmFyeUlkKGlkKSkge1xuICAgICAgICAgICAgICBpZiAoaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgICBpZCA9IGlkLnNsaWNlKDEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmVmS2V5ID0gY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgLy8gQ2xpcGJvYXJkIGp1c3QgbmVlZHMgdGVtcG9yYXJ5IGlkcyB1bmRlciB0aGUgYWN0dWFsIGBpZEtleWAuXG4gICAgICAgICAgICAgICAgPyBpZEtleVxuICAgICAgICAgICAgICAgIC8vIFNlcnZlciB3YW50cyBPYmplY3Rpb24tc3R5bGUgJyNpZCcgLyAnI3JlZicgcGFpcnMuXG4gICAgICAgICAgICAgICAgOiBzb3VyY2UgPyAnI2lkJyA6ICcjcmVmJ1xuICAgICAgICAgICAgICBjb25zdCByZXZWYWx1ZSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgID8gYEAke2lkfWBcbiAgICAgICAgICAgICAgICAvLyBLZWVwIHRoZSBpZHMgdW5pcXVlIGluIHJlZmVyZW5jZSBncm91cHMsIHNpbmNlIHRoZXkgcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgLy8gYWNjcm9zcyB0aGUgZnVsbCBncmFwaC5cbiAgICAgICAgICAgICAgICA6IHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgICAgPyBgJHtyZWZlcmVuY2V9LSR7aWR9YFxuICAgICAgICAgICAgICAgICAgOiBpZCAvLyBBIHRlbXBvcmFyeSBpZCB3aXRob3V0IGEgcmVsYXRlZCwganVzdCBwcmVzZXJ2ZSBpdC5cbiAgICAgICAgICAgICAgdmFsdWVbcmVmS2V5XSA9IHJldlZhbHVlXG4gICAgICAgICAgICAgIGlmIChyZWZLZXkgIT09IGlkS2V5KSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2lkS2V5XVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhXG4gIH1cbn1cbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgZ2V0VWlkIH0gZnJvbSAnLi91aWQuanMnXG5pbXBvcnQgeyBTY2hlbWFHcmFwaCB9IGZyb20gJy4vU2NoZW1hR3JhcGguanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc1N0cmluZywgaXNBcnJheSwgaXNGdW5jdGlvbiwgaXNQcm9taXNlLCBjbG9uZSwgY2FtZWxpemUsIGlzTW9kdWxlXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IHR5cGVDb21wb25lbnRzID0ge31cbmNvbnN0IHVua25vd25UeXBlUmVwb3J0ZWQgPSB7fVxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUeXBlQ29tcG9uZW50KHR5cGUsIGNvbXBvbmVudCkge1xuICB0eXBlQ29tcG9uZW50c1t0eXBlXSA9IGNvbXBvbmVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZUNvbXBvbmVudCh0eXBlLCBhbGxvd051bGwgPSBmYWxzZSkge1xuICBjb25zdCBjb21wb25lbnQgPSB0eXBlQ29tcG9uZW50c1t0eXBlXSB8fCBudWxsXG4gIGlmICghY29tcG9uZW50ICYmICFhbGxvd051bGwgJiYgIXVua25vd25UeXBlUmVwb3J0ZWRbdHlwZV0pIHtcbiAgICAvLyBSZXBvcnQgZWFjaCBtaXNzaW5nIHR5cGUgb25seSBvbmNlLCB0byBhdm9pZCBmbG9vZGluZyB0aGUgY29uc29sZTpcbiAgICB1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdID0gdHJ1ZVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBEaXRvIGNvbXBvbmVudCB0eXBlOiAnJHt0eXBlfSdgKVxuICB9XG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2hTY2hlbWEoc2NoZW1hLCBjYWxsYmFjaykge1xuICBjb25zdCBzY2hlbWFzID0gW1xuICAgIC4uLk9iamVjdC52YWx1ZXMoc2NoZW1hPy50YWJzIHx8IHt9KSxcbiAgICBzY2hlbWFcbiAgXVxuICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgaWYgKHNjaGVtYSkge1xuICAgICAgY29uc3QgcmVzID0gY2FsbGJhY2soc2NoZW1hKVxuICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2hTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gZm9yRWFjaFNjaGVtYShzY2hlbWEsIHNjaGVtYSA9PiB7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyhzY2hlbWEuY29tcG9uZW50cyB8fCB7fSkpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSlcbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KFxuICAgIHNjaGVtYSxcbiAgICAoY29tcG9uZW50LCBuYW1lKSA9PiBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpID8gY29tcG9uZW50IDogdW5kZWZpbmVkXG4gICkgfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZVNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KFxuICAgIHNjaGVtYSxcbiAgICAoY29tcG9uZW50LCBuYW1lKSA9PiBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpID8gdHJ1ZSA6IHVuZGVmaW5lZFxuICApID09PSB0cnVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeVNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KFxuICAgIHNjaGVtYSxcbiAgICAoY29tcG9uZW50LCBuYW1lKSA9PiAhY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKSA/IGZhbHNlIDogdW5kZWZpbmVkXG4gICkgIT09IGZhbHNlXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdW53cmFwTW9kdWxlID0gZmFsc2UpIHtcbiAgaWYgKGlzRnVuY3Rpb24oc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IHNjaGVtYSgpXG4gIH1cbiAgaWYgKGlzUHJvbWlzZShzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gYXdhaXQgc2NoZW1hXG4gIH1cbiAgaWYgKGlzTW9kdWxlKHNjaGVtYSkpIHtcbiAgICAvLyBDb3B5IHRvIGNvbnZlcnQgZnJvbSBtb2R1bGUgdG8gb2JqZWN0OlxuICAgIHNjaGVtYSA9IHsgLi4uc2NoZW1hIH1cbiAgICAvLyBVbndyYXAgZGVmYXVsdCBvciBuYW1lZCBzY2hlbWFcbiAgICBpZiAoIXNjaGVtYS5uYW1lICYmICh1bndyYXBNb2R1bGUgfHwgc2NoZW1hLmRlZmF1bHQpKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hKVxuICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBrZXlzWzBdXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVtuYW1lXVxuICAgICAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYXMoXG4gIHVucmVzb2x2ZWRTY2hlbWFzLFxuICByZXNvbHZlSXRlbSA9IHJlc29sdmVTY2hlbWFcbikge1xuICBsZXQgc2NoZW1hcyA9IGlzRnVuY3Rpb24odW5yZXNvbHZlZFNjaGVtYXMpXG4gICAgPyB1bnJlc29sdmVkU2NoZW1hcygpXG4gICAgOiB1bnJlc29sdmVkU2NoZW1hc1xuICBzY2hlbWFzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWFzLCBmYWxzZSlcbiAgaWYgKGlzQXJyYXkoc2NoZW1hcykpIHtcbiAgICAvLyBUcmFuc2xhdGUgYW4gYXJyYXkgb2YgZHluYW1pYyBpbXBvcnQsIGVhY2ggaW1wb3J0aW5nIG9uZSBuYW1lZCBzY2hlbWFcbiAgICAvLyBtb2R1bGUgdG8gYW4gb2JqZWN0IHdpdGggbmFtZWQgZW50cmllcy5cbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKGF3YWl0IFByb21pc2UuYWxsKHNjaGVtYXMubWFwKFxuICAgICAgYXN5bmMgaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHJlc29sdmVJdGVtKGl0ZW0sIHRydWUpXG4gICAgICAgIHJldHVybiBbc2NoZW1hLm5hbWUsIHNjaGVtYV1cbiAgICAgIH1cbiAgICApKSlcbiAgfSBlbHNlIGlmIChpc09iamVjdChzY2hlbWFzKSkge1xuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXMoc2NoZW1hcykubWFwKFxuICAgICAgYXN5bmMgKFtrZXksIGl0ZW1dKSA9PiB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHJlc29sdmVJdGVtKGl0ZW0sIHRydWUpXG4gICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICB9XG4gICAgKSkpXG4gIH1cbiAgcmV0dXJuIHNjaGVtYXNcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQYW5lbHMoc2NoZW1hKSB7XG4gIGNvbnN0IHsgcGFuZWxzIH0gPSBzY2hlbWFcbiAgaWYgKHNjaGVtYS5wYW5lbHMpIHtcbiAgICBzY2hlbWEucGFuZWxzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMocGFuZWxzKVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzVmlldyhjb21wb25lbnQsIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMpIHtcbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuICBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUpXG4gIGF3YWl0IHJlc29sdmVQYW5lbHMoc2NoZW1hKVxuICBpZiAoaXNTaW5nbGVDb21wb25lbnRWaWV3KHNjaGVtYSkpIHtcbiAgICBhd2FpdCBwcm9jZXNzQ29tcG9uZW50KGFwaSwgc2NoZW1hLCBuYW1lLCBjaGlsZHJlbiwgMClcbiAgfSBlbHNlIHtcbiAgICAvLyBBIG11bHRpLWNvbXBvbmVudCB2aWV3LCBzdGFydCBhdCBsZXZlbCAxXG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIGNoaWxkcmVuLCAxKVxuICB9XG4gIHJvdXRlcy5wdXNoKHtcbiAgICBwYXRoOiBgLyR7c2NoZW1hLnBhdGh9YCxcbiAgICBjaGlsZHJlbixcbiAgICBjb21wb25lbnQsXG4gICAgbWV0YToge1xuICAgICAgYXBpLFxuICAgICAgc2NoZW1hXG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0NvbXBvbmVudChhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCkge1xuICBzY2hlbWEubGV2ZWwgPSBsZXZlbFxuICAvLyBEZWxlZ2F0ZSBzY2hlbWEgcHJvY2Vzc2luZyB0byB0aGUgYWN0dWFsIHR5cGUgY29tcG9uZW50cy5cbiAgcmV0dXJuIGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LnByb2Nlc3NTY2hlbWE/LihcbiAgICBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbFxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUpIHtcbiAgLy8gVXNlZCBmb3IgdmlldyBhbmQgc291cmNlIHNjaGVtYXMsIHNlZSBTb3VyY2VNaXhpblxuICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgc2NoZW1hLnBhdGggPSBzY2hlbWEucGF0aCB8fCBhcGkubm9ybWFsaXplUGF0aChuYW1lKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwpIHtcbiAgY29uc3QgcHJvbWlzZXMgPSBbXVxuICBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgKGNvbXBvbmVudCwgbmFtZSkgPT4ge1xuICAgIHByb21pc2VzLnB1c2gocHJvY2Vzc0NvbXBvbmVudChhcGksIGNvbXBvbmVudCwgbmFtZSwgcm91dGVzLCBsZXZlbCkpXG4gIH0pXG4gIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbCkge1xuICAvLyBGaXJzdCByZXNvbHZlIHRoZSBmb3JtcyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgYmFjayBvbiB0aGUgc2NoZW1hLlxuICBsZXQgeyBmb3JtLCBmb3JtcywgY29tcG9uZW50cyB9ID0gc2NoZW1hXG4gIGlmIChmb3Jtcykge1xuICAgIGZvcm1zID0gc2NoZW1hLmZvcm1zID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoZm9ybXMsIHJlc29sdmVGb3JtKVxuICB9IGVsc2UgaWYgKGZvcm0pIHtcbiAgICBmb3JtID0gc2NoZW1hLmZvcm0gPSBhd2FpdCByZXNvbHZlRm9ybShmb3JtKVxuICB9IGVsc2UgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAvLyBOT1RFOiBQcm9jZXNzaW5nIGZvcm1zIGluIGNvbXB1dGVkIGNvbXBvbmVudHMgaXMgbm90IHN1cHBvcnRlZCwgc2luY2UgaXRcbiAgICAvLyBvbmx5IGNhbiBiZSBjb21wdXRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGFjdHVhbCBkYXRhLlxuICAgIGlmIChpc09iamVjdChjb21wb25lbnRzKSkge1xuICAgICAgZm9ybSA9IHsgY29tcG9uZW50cyB9XG4gICAgfVxuICB9XG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfSAvLyBPbmx5IHVzZWQgZm9yIHByb2Nlc3MgbG9vcCBiZWxvdy5cbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuICBmb3IgKGNvbnN0IGZvcm0gb2YgT2JqZWN0LnZhbHVlcyhmb3JtcykpIHtcbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIGZvcm0sIGNoaWxkcmVuLCBsZXZlbCArIDEpXG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlRm9ybShmb3JtKSB7XG4gIGZvcm0gPSBhd2FpdCByZXNvbHZlU2NoZW1hKGZvcm0sIHRydWUpXG4gIGlmIChmb3JtKSB7XG4gICAgYXdhaXQgcmVzb2x2ZVBhbmVscyhmb3JtKVxuICB9XG4gIHJldHVybiBmb3JtXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NpbmdsZUNvbXBvbmVudFZpZXcoc2NoZW1hKSB7XG4gIC8vIElmIHRoZSBzY2hlbWEgaGFzIGEgdHlwZSwgaXQgaXMgYSBzaW5nbGUtY29tcG9uZW50IHZpZXcuXG4gIHJldHVybiAhIXNjaGVtYS50eXBlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNGb3JtU2NoZW1hKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGJvdGggc2luZ2xlIGZvcm0gYW5kIG11bHRpcGxlIGZvcm1zIG5vdGF0aW9uLCBhcyB3ZWxsIGFzIGlubGluZWRcbiAgLy8gY29tcG9uZW50cy5cbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYSkgJiYgISEoXG4gICAgc2NoZW1hLmZvcm0gfHxcbiAgICBzY2hlbWEuZm9ybXMgfHxcbiAgICBzY2hlbWEuY29tcG9uZW50c1xuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gT2JqZWN0LmtleXMoc2NoZW1hPy5mb3JtcyB8fCB7fSkubGVuZ3RoID4gMVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgY29uc3QgeyB2aWV3IH0gPSBzY2hlbWFcbiAgY29uc3Qgdmlld1NjaGVtYSA9IHZpZXcgJiYgY29udGV4dC52aWV3c1t2aWV3XVxuICByZXR1cm4gdmlld1NjaGVtYVxuICAgID8gaGFzRm9ybVNjaGVtYSh2aWV3U2NoZW1hKVxuICAgICAgPyB2aWV3U2NoZW1hXG4gICAgICAvLyBOT1RFOiBWaWV3cyBjYW4gaGF2ZSB0YWJzLCBpbiB3aGljaCBjYXNlIHRoZSB2aWV3IGNvbXBvbmVudCBpcyBuZXN0ZWRcbiAgICAgIC8vIGluIG9uZSBvZiB0aGUgdGFicywgZ28gZmluZCBpdC5cbiAgICAgIDogZm9yRWFjaFNjaGVtYSh2aWV3U2NoZW1hLCBzY2hlbWEgPT4ge1xuICAgICAgICBjb25zdCB2aWV3Q29tcG9uZW50ID0gc2NoZW1hLmNvbXBvbmVudHM/Llt2aWV3XVxuICAgICAgICBpZiAoaGFzRm9ybVNjaGVtYSh2aWV3Q29tcG9uZW50KSkge1xuICAgICAgICAgIHJldHVybiB2aWV3Q29tcG9uZW50XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3RWRpdFBhdGgoc2NoZW1hLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZpZXcgPSBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgcmV0dXJuIHZpZXdcbiAgICA/IHZpZXcubGV2ZWwgPT09IDBcbiAgICAgID8gYC8ke3ZpZXcucGF0aH1gIC8vIEEgc2luZ2xlLWNvbXBvbmVudCB2aWV3XG4gICAgICA6IGAvJHt2aWV3LnBhdGh9LyR7dmlldy5wYXRofWAgLy8gQSBtdWx0aS1jb21wb25lbnQgdmlld1xuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0LCBtb2RpZnlGb3JtKSB7XG4gIGNvbnN0IHZpZXcgPSBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgaWYgKHZpZXcpIHtcbiAgICBzY2hlbWEgPSB2aWV3XG4gIH0gZWxzZSBpZiAoc2NoZW1hLnZpZXcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdmlldzogJyR7c2NoZW1hLnZpZXd9J2ApXG4gIH1cblxuICBsZXQgeyBmb3JtLCBmb3JtcywgY29tcG9uZW50cywgY29tcGFjdCB9ID0gc2NoZW1hXG4gIGlmICghZm9ybSAmJiAhZm9ybXMpIHtcbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgLy8gQ29udmVydCBpbmxpbmVkIGNvbXBvbmVudHMgdG8gZm9ybXMsIHN1cHBvcnRpbmcgYGNvbXBhY3RgIHNldHRpbmcuXG4gICAgICBmb3JtID0geyBjb21wb25lbnRzLCBjb21wYWN0IH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gYGZvcm1zYCwgYGZvcm1gIG9yIGBjb21wb25lbnRzYCwgcmV0dXJuIGFuZCBlbXB0eSBgZm9ybXNgIG9iamVjdC5cbiAgICAgIHJldHVybiB7fVxuICAgIH1cbiAgfVxuICBmb3JtcyB8fD0geyBkZWZhdWx0OiBmb3JtIH1cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhmb3JtcykubWFwKChbdHlwZSwgZm9ybV0pID0+IHtcbiAgICAgIC8vIFN1cHBvcnQgYHNjaGVtYS5jb21wb25lbnRzYCBjYWxsYmFja3MgdG8gY3JlYXRlIGNvbXBvbmVudHMgb24gdGhlIGZseS5cbiAgICAgIGlmIChpc0Z1bmN0aW9uKGZvcm0uY29tcG9uZW50cykpIHtcbiAgICAgICAgZm9ybSA9IHtcbiAgICAgICAgICAuLi5mb3JtLFxuICAgICAgICAgIGNvbXBvbmVudHM6IGZvcm0uY29tcG9uZW50cyhjb250ZXh0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gW3R5cGUsIG1vZGlmeUZvcm0/Lihmb3JtKSA/PyBmb3JtXVxuICAgIH0pXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKSB7XG4gIHJldHVybiBmb3Jtc1tpdGVtPy50eXBlXSB8fCBmb3Jtcy5kZWZhdWx0IHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dCkge1xuICByZXR1cm4gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0KSwgaXRlbSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0xhYmVsKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hLmxhYmVsICE9PSBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wYWN0KHNjaGVtYSkge1xuICByZXR1cm4gISFzY2hlbWEuY29tcGFjdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJbmxpbmVkKHNjaGVtYSkge1xuICByZXR1cm4gISEoc2NoZW1hLmlubGluZWQgfHwgc2NoZW1hLmNvbXBvbmVudHMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05lc3RlZChzY2hlbWEpIHtcbiAgcmV0dXJuICEhKFxuICAgIHNjaGVtYS5uZXN0ZWQgfHxcbiAgICBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5kZWZhdWx0TmVzdGVkID09PSB0cnVlXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZE9taXRQYWRkaW5nKHNjaGVtYSkge1xuICByZXR1cm4gISFnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5vbWl0UGFkZGluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGRlZmF1bHQgdmFsdWVzIGJvdGggb24gc2NoZW1hIGFuZCBvbiBjb21wb25lbnQgbGV2ZWwuXG4gIC8vIE5PVEU6IEF0IHRoZSB0aW1lIG9mIGNyZWF0aW9uLCBjb21wb25lbnRzIG1heSBub3QgYmUgaW5zdGFudGlhdGVkLCAoZS5nLiBpZlxuICAvLyBlbnRyaWVzIGFyZSBjcmVhdGVkIHRocm91Z2ggbmVzdGVkIGZvcm1zLCB0aGUgcGFyZW50IGZvcm0gaXNuJ3QgbW91bnRlZCkgc29cbiAgLy8gd2UgY2FuJ3QgdXNlIGBkYXRhUGF0aGAgdG8gZ2V0IHRvIGNvbXBvbmVudHMsIGFuZCB0aGUgYGRlZmF1bHRWYWx1ZWAgZnJvbVxuICAvLyB0aGVyZS4gVGhhdCdzIHdoeSBgZGVmYXVsdFZhbHVlYCBpcyBkZWZpbmVkIHN0YXRpY2FsbHkgaW4gdGhlIGNvbXBvbmVudHM6XG4gIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHNjaGVtYS5kZWZhdWx0XG4gIGNvbnN0IHZhbHVlID0gZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICA/IGRlZmF1bHRWYWx1ZVxuICAgIDogZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdFZhbHVlXG4gIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgID8gdmFsdWUoc2NoZW1hKVxuICAgIDogY2xvbmUodmFsdWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSB7XG4gIGNvbnN0IHR5cGVPcHRpb25zID0gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKVxuICByZXR1cm4gISEoXG4gICAgdHlwZU9wdGlvbnM/LmV4Y2x1ZGVWYWx1ZSB8fFxuICAgIHR5cGVPcHRpb25zPy5pZ25vcmVNaXNzaW5nVmFsdWU/LihzY2hlbWEpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0xhYmVscyhzY2hlbWEpIHtcbiAgY29uc3QgY2hlY2tDb21wb25lbnRzID0gY29tcG9uZW50cyA9PlxuICAgIE9iamVjdC52YWx1ZXMoY29tcG9uZW50cyB8fCB7fSkuc29tZShoYXNMYWJlbClcblxuICByZXR1cm4gKFxuICAgIGNoZWNrQ29tcG9uZW50cyhzY2hlbWEuY29tcG9uZW50cykgfHxcbiAgICBPYmplY3QudmFsdWVzKHNjaGVtYS50YWJzIHx8IHt9KS5zb21lKGNoZWNrQ29tcG9uZW50cylcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RGVmYXVsdHMoc2NoZW1hLCBkYXRhID0ge30sIGNvbXBvbmVudCkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHJvb3REYXRhOiBkYXRhIH1cblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSkgPT4ge1xuICAgIGlmICghKG5hbWUgaW4gZGF0YSkgJiYgIWlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpKSB7XG4gICAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSlcbiAgICB9XG4gIH1cblxuICAvLyBTZXRzIHVwIGEgZGF0YSBvYmplY3QgdGhhdCBoYXMga2V5cyB3aXRoIGRlZmF1bHQgdmFsdWVzIGZvciBhbGxcbiAgLy8gZm9ybSBmaWVsZHMsIHNvIHRoZXkgY2FuIGJlIGNvcnJlY3RseSB3YXRjaGVkIGZvciBjaGFuZ2VzLlxuICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLCBkYXRhLCBudWxsLCBudWxsLCBwcm9jZXNzQmVmb3JlLCBudWxsLCBvcHRpb25zXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCA9IG51bGwsXG4gIHJvb3REYXRhID0gY29tcG9uZW50Py5yb290RGF0YVxufSA9IHt9KSB7XG4gIGNvbnN0IHsgY29tcHV0ZSB9ID0gc2NoZW1hXG4gIGlmIChjb21wdXRlKSB7XG4gICAgY29uc3QgdmFsdWUgPSBjb21wdXRlKERpdG9Db250ZXh0LmdldChjb21wb25lbnQsIHtcbiAgICAgIC8vIE92ZXJyaWRlIHZhbHVlIHRvIHByZXZlbnQgZW5kbGVzcyByZWN1cnNpb24gdGhyb3VnaCBjYWxsaW5nIHRoZVxuICAgICAgLy8gZ2V0dGVyIGZvciBgdGhpcy52YWx1ZWAgaW4gYERpdG9Db250ZXh0YDpcbiAgICAgIHZhbHVlOiBkYXRhW25hbWVdLFxuICAgICAgbmFtZSxcbiAgICAgIGRhdGEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIHJvb3REYXRhXG4gICAgfSkpXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFVzZSBgJHNldCgpYCBkaXJlY3RseSBpbnN0ZWFkIG9mIGB0aGlzLnZhbHVlID0g4oCmYCB0byB1cGRhdGUgdGhlXG4gICAgICAvLyB2YWx1ZSB3aXRob3V0IGNhbGxpbmcgcGFyc2UoKTpcbiAgICAgIFZ1ZS5zZXQoZGF0YSwgbmFtZSwgdmFsdWUpXG4gICAgfVxuICB9XG4gIC8vIElmIHRoZSB2YWx1ZSBpcyBzdGlsbCBtaXNzaW5nIGFmdGVyIGNvbXB1dGUsIHNldCB0aGUgZGVmYXVsdCBmb3IgaXQ6XG4gIGlmICghKG5hbWUgaW4gZGF0YSkgJiYgIWlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpKSB7XG4gICAgVnVlLnNldChkYXRhLCBuYW1lLCBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKSlcbiAgfVxuICAvLyBOb3cgYWNjZXNzIHRoZSB2YWx1ZS4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHJlYWN0aXZpdHkgYW5kIG5lZWRzIHRvXG4gIC8vIGhhcHBlbiBhZnRlciBhbGwgcHJpb3IgbWFuaXB1bGF0aW9uIHRocm91Z2ggYCRzZXQoKWAsIHNlZSBhYm92ZTpcbiAgcmV0dXJuIGRhdGFbbmFtZV1cbn1cblxuZnVuY3Rpb24gY2xvbmVJdGVtKHNvdXJjZVNjaGVtYSwgaXRlbSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucy5zY2hlbWFPbmx5KSB7XG4gICAgY29uc3QgY29weSA9IHt9XG4gICAgY29uc3QgeyBpZEtleSA9ICdpZCcsIG9yZGVyS2V5IH0gPSBzb3VyY2VTY2hlbWFcbiAgICBjb25zdCBpZCA9IGl0ZW1baWRLZXldXG4gICAgaWYgKGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvcHlbaWRLZXldID0gaWRcbiAgICB9XG4gICAgLy8gQ29weSBvdmVyIHR5cGUgaW4gY2FzZSB0aGVyZSBhcmUgbXVsdGlwbGUgZm9ybXMgdG8gY2hvb3NlIGZyb20uXG4gICAgaWYgKGhhc011bHRpcGxlRm9ybVNjaGVtYXMoc291cmNlU2NoZW1hKSkge1xuICAgICAgY29weS50eXBlID0gaXRlbS50eXBlXG4gICAgfVxuICAgIGlmIChvcmRlcktleSkge1xuICAgICAgY29weVtvcmRlcktleV0gPSBpdGVtW29yZGVyS2V5XVxuICAgIH1cbiAgICByZXR1cm4gY29weVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRGF0YShzY2hlbWEsIHNvdXJjZVNjaGVtYSwgZGF0YSwgZGF0YVBhdGgsIHtcbiAgY29tcG9uZW50LFxuICBzY2hlbWFPbmx5LCAvLyB3aGV0aGVyIHRvIG9ubHkgaW5jbHVkZSBkYXRhIGNvdmVyZWQgYnkgdGhlIHNjaGVtYSwgb3IgYWxsIGRhdGFcbiAgdGFyZ2V0XG59ID0ge30pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCBzY2hlbWFPbmx5LCB0YXJnZXQsIHJvb3REYXRhOiBkYXRhIH1cbiAgY29uc3QgcHJvY2Vzc2VkRGF0YSA9IGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGRhdGEsIG9wdGlvbnMpXG4gIGNvbnN0IGdyYXBoID0gbmV3IFNjaGVtYUdyYXBoKClcblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBsZXQgdmFsdWUgPSBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgb3B0aW9ucylcbiAgICAvLyBUaGUgc2NoZW1hIGV4cGVjdHMgdGhlIGB3cmFwUHJpbWl0aXZlc2AgdHJhbnNmb3JtYXRpb25zIHRvIGJlIHByZXNlbnQgb25cbiAgICAvLyB0aGUgZGF0YSB0aGF0IGl0IGlzIGFwcGxpZWQgb24sIHNvIHdhcnAgYmVmb3JlIGFuZCB1bndyYXAgYWZ0ZXIuXG4gICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBvcmRlcktleSwgaWRLZXkgPSAnaWQnIH0gPSBzY2hlbWFcbiAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLm1hcChlbnRyeSA9PiAoe1xuICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IGVudHJ5XG4gICAgICAgIH0pKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWx3YXlzIHNoYWxsb3ctY2xvbmUgYXJyYXkgdmFsdWVzOlxuICAgICAgICB2YWx1ZSA9IFsuLi52YWx1ZV1cbiAgICAgIH1cbiAgICAgIGlmIChvcmRlcktleSAmJiB0YXJnZXQgPT09ICdjbGlwYm9hcmQnKSB7XG4gICAgICAgIC8vIFNvcnQgdGhlIGRhdGEgYmFjayBpbnRvIHRoZSBuYXR1cmFsIHNlcXVlbmNlIGFzIGRlZmluZWQgYnkgdGhlaXIgaWRzLFxuICAgICAgICAvLyBzbyBjb3B5LXBhc3RpbmcgYmV0d2VlbiBzZXJ2ZXJzIChlLmcuIG5lc3RlZCBmb250LWN1dHMgb24gTGluZXRvKVxuICAgICAgICAvLyBuYXR1cmFsbHkgZ2V0cyBtYXBwZWQgdG8gdGhlIHNhbWUgZW50cmllcyBpbiB0aGUgZ3JhcGguXG4gICAgICAgIHZhbHVlLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBjb25zdCBpZDEgPSBhPy5baWRLZXldXG4gICAgICAgICAgY29uc3QgaWQyID0gYj8uW2lkS2V5XVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpZDEgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMSkgPyAxXG4gICAgICAgICAgICA6IGlkMiA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQyKSA/IC0xXG4gICAgICAgICAgICA6IGlkMSAtIGlkMlxuICAgICAgICAgIClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gIH1cblxuICBjb25zdCBwcm9jZXNzQWZ0ZXIgPSAoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YSkgPT4ge1xuICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMsIGV4Y2x1ZGUsIHByb2Nlc3MgfSA9IHNjaGVtYVxuICAgIGxldCB2YWx1ZSA9IHByb2Nlc3NlZERhdGFbbmFtZV1cblxuICAgIGNvbnN0IHR5cGVPcHRpb25zID0gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKVxuXG4gICAgLy8gTk9URTogV2UgZG9uJ3QgY2FjaGUgdGhpcyBjb250ZXh0LCBzaW5jZSBgdmFsdWVgIGlzIGNoYW5naW5nLlxuICAgIGNvbnN0IGdldENvbnRleHQgPSAoKSA9PiBEaXRvQ29udGV4dC5nZXQoY29tcG9uZW50LCB7XG4gICAgICB2YWx1ZSxcbiAgICAgIG5hbWUsXG4gICAgICBkYXRhLFxuICAgICAgZGF0YVBhdGgsXG4gICAgICByb290RGF0YTogb3B0aW9ucy5yb290RGF0YSxcbiAgICAgIC8vIFBhc3MgdGhlIGFscmVhZHkgcHJvY2Vzc2VkIGRhdGEgdG8gYHByb2Nlc3MoKWAsIHNvIGl0IGNhbiBiZSBtb2RpZmllZFxuICAgICAgLy8gdGhyb3VnaCBgcHJvY2Vzc2VkSXRlbWAgZnJvbSB0aGVyZS5cbiAgICAgIHByb2Nlc3NlZERhdGFcbiAgICB9KVxuXG4gICAgLy8gRmlyc3QgdW53cmFwIHRoZSB3cmFwcGVkIHByaW1pdGl2ZXMgYWdhaW4sIHRvIGJyaW5nIHRoZSBkYXRhIGJhY2sgaW50b1xuICAgIC8vIGl0cyBuYXRpdmUgZm9ybS4gU2UgYHByb2Nlc3NCZWZvcmUoKWAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICBpZiAod3JhcFByaW1pdGl2ZXMgJiYgaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUubWFwKG9iamVjdCA9PiBvYmplY3Rbd3JhcFByaW1pdGl2ZXNdKVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0aGUgdXNlcidzIGBwcm9jZXNzKClgIGNhbGxiYWNrIGZpcnN0LCBpZiBvbmUgaXMgcHJvdmlkZWQsIHNvIHRoYXRcbiAgICAvLyBpdCBjYW4gbW9kaWZ5IGRhdGEgaW4gYHByb2Nlc3NlZERhdGFgIGV2ZW4gaWYgaXQgcHJvdmlkZXMgYGV4Y2x1ZGU6IHRydWVgXG4gICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgIHZhbHVlID0gcHJvY2VzcyhnZXRDb250ZXh0KCkpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdHlwZU9wdGlvbnM/LmV4Y2x1ZGVWYWx1ZSB8fFxuICAgICAgLy8gU3VwcG9ydCBmdW5jdGlvbnMgbmV4dCB0byBib29sZWFucyBmb3IgYHNjaGVtYS5leGNsdWRlYDpcbiAgICAgIGV4Y2x1ZGUgPT09IHRydWUgfHxcbiAgICAgIGlzRnVuY3Rpb24oZXhjbHVkZSkgJiYgZXhjbHVkZShnZXRDb250ZXh0KCkpXG4gICAgKSB7XG4gICAgICBkZWxldGUgcHJvY2Vzc2VkRGF0YVtuYW1lXVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFYWNoIGNvbXBvbmVudCB0eXBlIGNhbiBwcm92aWRlIGl0cyBvd24gc3RhdGljIGBwcm9jZXNzVmFsdWUoKWAgbWV0aG9kXG4gICAgICAvLyB0byBjb252ZXJ0IHRoZSBkYXRhIGZvciBzdG9yYWdlLlxuICAgICAgY29uc3QgcHJvY2Vzc1ZhbHVlID0gdHlwZU9wdGlvbnM/LnByb2Nlc3NWYWx1ZVxuICAgICAgaWYgKHByb2Nlc3NWYWx1ZSkge1xuICAgICAgICB2YWx1ZSA9IHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpXG4gICAgICB9XG4gICAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICBzY2hlbWEsXG4gICAgZGF0YSxcbiAgICBkYXRhUGF0aCxcbiAgICBwcm9jZXNzZWREYXRhLFxuICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgcHJvY2Vzc0FmdGVyLFxuICAgIG9wdGlvbnNcbiAgKVxuXG4gIHJldHVybiBncmFwaC5wcm9jZXNzKHNvdXJjZVNjaGVtYSwgcHJvY2Vzc2VkRGF0YSwgb3B0aW9ucylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFEYXRhKFxuICBzY2hlbWEsXG4gIGRhdGEsXG4gIGRhdGFQYXRoLFxuICBwcm9jZXNzZWREYXRhLFxuICBwcm9jZXNzQmVmb3JlLFxuICBwcm9jZXNzQWZ0ZXIsXG4gIG9wdGlvbnNcbikge1xuICBjb25zdCBwcm9jZXNzQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgPT4ge1xuICAgIGNvbnN0IGdldERhdGFQYXRoID0gKGRhdGFQYXRoLCB0b2tlbikgPT4gZGF0YVBhdGggIT0gbnVsbFxuICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pXG4gICAgICA6IG51bGxcblxuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21wb25lbnRTY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKGNvbXBvbmVudHMpKSB7XG4gICAgICAgIGlmICghaXNOZXN0ZWQoY29tcG9uZW50U2NoZW1hKSkge1xuICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHByb2Nlc3MgZGF0YSBvbiB1bm5lc3RlZCBjb21wb25lbnRzLlxuICAgICAgICAgIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgICAgICAgICAgY29tcG9uZW50U2NoZW1hLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YSxcbiAgICAgICAgICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgICAgICAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudERhdGFQYXRoID0gZ2V0RGF0YVBhdGgoZGF0YVBhdGgsIG5hbWUpXG5cbiAgICAgICAgICBjb25zdCBwcm9jZXNzSXRlbSA9IChpdGVtLCBpbmRleCA9IG51bGwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFQYXRoID0gaW5kZXggIT09IG51bGxcbiAgICAgICAgICAgICAgPyBnZXREYXRhUGF0aChjb21wb25lbnREYXRhUGF0aCwgaW5kZXgpXG4gICAgICAgICAgICAgIDogY29tcG9uZW50RGF0YVBhdGhcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBEaXRvQ29udGV4dC5nZXQob3B0aW9ucy5jb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGFcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBjb25zdCBnZXRGb3JtcyA9IChcbiAgICAgICAgICAgICAgZ2V0VHlwZU9wdGlvbnMoY29tcG9uZW50U2NoZW1hKT8uZ2V0Rm9ybVNjaGVtYXNGb3JQcm9jZXNzaW5nIHx8XG4gICAgICAgICAgICAgICBnZXRGb3JtU2NoZW1hc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgZm9ybXMgPSBnZXRGb3Jtcyhjb21wb25lbnRTY2hlbWEsIGNvbnRleHQpXG4gICAgICAgICAgICBjb25zdCBmb3JtID0gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZm9ybXMsIGl0ZW0pXG4gICAgICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgICBjb25zdCBwcm9jZXNzZWRJdGVtID0gcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgICAgICAgID8gY2xvbmVJdGVtKGNvbXBvbmVudFNjaGVtYSwgaXRlbSwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgICAgICAgICAgICAgIGZvcm0sXG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWRJdGVtLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gSXRlbXMgd2l0aG91dCBmb3JtcyBzdGlsbCBnZXQgZnVsbHkgKGJ1dCBzaGFsbG93bHkpIGNsb25lZC5cbiAgICAgICAgICAgICAgLy8gVE9ETzogRmluZCBvdXQgb2YgdGhpcyBpcyBhY3R1YWxseSBuZWVkZWQgLyB1c2VkIGF0IGFsbD9cbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJvY2Vzc0JlZm9yZT8uKFxuICAgICAgICAgICAgY29tcG9uZW50U2NoZW1hLCBkYXRhLCBuYW1lLCBjb21wb25lbnREYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhID8gcHJvY2Vzc2VkRGF0YVtuYW1lXSA6IGRhdGFbbmFtZV1cbiAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiBoYXNGb3JtU2NoZW1hKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHByb2Nlc3MgZGF0YSBvbiBuZXN0ZWQgZm9ybSBpdGVtcy5cbiAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAvLyBPcHRpbWl6YXRpb246IE5vIG5lZWQgdG8gY29sbGVjdCB2YWx1ZXMgaWYgd2UncmUgbm90IGNsb25pbmchXG4gICAgICAgICAgICAgIHZhbHVlID0gcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgICAgICAgID8gdmFsdWUubWFwKHByb2Nlc3NJdGVtKVxuICAgICAgICAgICAgICAgIDogdmFsdWUuZm9yRWFjaChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gcHJvY2Vzc0l0ZW0odmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvY2Vzc2VkRGF0YSkge1xuICAgICAgICAgICAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcHJvY2Vzc0FmdGVyPy4oXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsIGRhdGEsIG5hbWUsIGNvbXBvbmVudERhdGFQYXRoLCBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc0NvbXBvbmVudHMoc2NoZW1hLmNvbXBvbmVudHMpXG4gIGlmIChzY2hlbWEudGFicykge1xuICAgIGZvciAoY29uc3QgdGFiIG9mIE9iamVjdC52YWx1ZXMoc2NoZW1hLnRhYnMpKSB7XG4gICAgICBwcm9jZXNzQ29tcG9uZW50cyh0YWIuY29tcG9uZW50cylcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBwYW5lbCBvZiBnZXRBbGxQYW5lbFNjaGVtYXMoc2NoZW1hLCBkYXRhUGF0aCkpIHtcbiAgICBwcm9jZXNzQ29tcG9uZW50cyhwYW5lbC5zY2hlbWEuY29tcG9uZW50cylcbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzZWREYXRhIHx8IGRhdGFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWVkU2NoZW1hcyhkZXNjcmlwdGlvbnMsIGRlZmF1bHRzKSB7XG4gIGNvbnN0IHRvT2JqZWN0ID0gKGFycmF5LCB0b1NjaGVtYSkgPT4ge1xuICAgIHJldHVybiBhcnJheS5sZW5ndGggPiAwXG4gICAgICA/IGFycmF5LnJlZHVjZSgob2JqZWN0LCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSB0b1NjaGVtYSh2YWx1ZSlcbiAgICAgICAgaWYgKHNjaGVtYSkge1xuICAgICAgICAgIG9iamVjdFtzY2hlbWEubmFtZV0gPSBzY2hlbWEgJiYgZGVmYXVsdHNcbiAgICAgICAgICAgID8geyAuLi5kZWZhdWx0cywgLi4uc2NoZW1hIH1cbiAgICAgICAgICAgIDogc2NoZW1hXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdFxuICAgICAgfSwge30pXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIHJldHVybiBpc0FycmF5KGRlc2NyaXB0aW9ucylcbiAgICA/IHRvT2JqZWN0KGRlc2NyaXB0aW9ucywgdmFsdWUgPT4gKFxuICAgICAgaXNPYmplY3QodmFsdWUpID8gdmFsdWUgOiB7XG4gICAgICAgIG5hbWU6IGNhbWVsaXplKHZhbHVlLCBmYWxzZSlcbiAgICAgIH1cbiAgICApKVxuICAgIDogaXNPYmplY3QoZGVzY3JpcHRpb25zKVxuICAgICAgPyB0b09iamVjdChcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZGVzY3JpcHRpb25zKSxcbiAgICAgICAgKFtuYW1lLCB2YWx1ZV0pID0+XG4gICAgICAgICAgaXNPYmplY3QodmFsdWUpID8ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIC4uLnZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICAgIDogaXNTdHJpbmcodmFsdWUpID8ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGxhYmVsOiB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICA6IG51bGxcbiAgICAgIClcbiAgICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnV0dG9uU2NoZW1hcyhidXR0b25zKSB7XG4gIHJldHVybiBnZXROYW1lZFNjaGVtYXMoXG4gICAgYnV0dG9ucyxcbiAgICB7IHR5cGU6ICdidXR0b24nIH0gLy8gRGVmYXVsdHNcbiAgKVxufVxuXG5mdW5jdGlvbiBnZXRUeXBlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gaXNPYmplY3Qoc2NoZW1hT3JUeXBlKSA/IHNjaGVtYU9yVHlwZS50eXBlIDogc2NoZW1hT3JUeXBlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlT3B0aW9ucyhzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFR5cGVDb21wb25lbnQoZ2V0VHlwZShzY2hlbWFPclR5cGUpLCB0cnVlKT8ub3B0aW9ucyA/PyBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTb3VyY2VUeXBlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKT8uZ2V0U291cmNlVHlwZT8uKFxuICAgIGdldFR5cGUoc2NoZW1hT3JUeXBlKVxuICApID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsU2NoZW1hKHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCkge1xuICByZXR1cm4gc2NoZW1hXG4gICAgPyB7XG4gICAgICBzY2hlbWEsXG4gICAgICAvLyBJZiB0aGUgcGFuZWwgcHJvdmlkZXMgaXRzIG93biBuYW1lLCBhcHBlbmQgaXQgdG8gdGhlIGRhdGFQYXRoLlxuICAgICAgLy8gVGhpcyBpcyB1c2VkIGUuZy4gZm9yICRmaWx0ZXJzIHBhbmVscy5cbiAgICAgIGRhdGFQYXRoOiBzY2hlbWEubmFtZVxuICAgICAgICA/IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBzY2hlbWEubmFtZSlcbiAgICAgICAgOiBkYXRhUGF0aCxcbiAgICAgIHRhYkNvbXBvbmVudFxuICAgIH1cbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsU2NoZW1hcyhzY2hlbWFzLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50LCBwYW5lbHMgPSBbXSkge1xuICBpZiAoc2NoZW1hcykge1xuICAgIGZvciAoY29uc3QgW2tleSwgc2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhzY2hlbWFzKSkge1xuICAgICAgY29uc3QgcGFuZWwgPSBnZXRQYW5lbFNjaGVtYShcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwga2V5KSxcbiAgICAgICAgdGFiQ29tcG9uZW50XG4gICAgICApXG4gICAgICBpZiAocGFuZWwpIHtcbiAgICAgICAgcGFuZWxzLnB1c2gocGFuZWwpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBwYW5lbHNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbFBhbmVsU2NoZW1hcyhcbiAgc2NoZW1hLFxuICBkYXRhUGF0aCxcbiAgc2NoZW1hQ29tcG9uZW50ID0gbnVsbCxcbiAgdGFiQ29tcG9uZW50ID0gbnVsbFxuKSB7XG4gIGNvbnN0IHBhbmVsID0gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZ2V0UGFuZWxTY2hlbWE/LihcbiAgICBzY2hlbWEsXG4gICAgZGF0YVBhdGgsXG4gICAgc2NoZW1hQ29tcG9uZW50XG4gIClcbiAgY29uc3QgcGFuZWxzID0gcGFuZWwgPyBbZ2V0UGFuZWxTY2hlbWEocGFuZWwsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXSA6IFtdXG4gIC8vIEFsbG93IGVhY2ggY29tcG9uZW50IHRvIHByb3ZpZGUgaXRzIG93biBzZXQgb2YgcGFuZWxzLCBpblxuICAvLyBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBvbmUgKGUuZy4gJGZpbHRlcik6XG4gIGdldFBhbmVsU2NoZW1hcyhzY2hlbWEucGFuZWxzLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50LCBwYW5lbHMpXG4gIHJldHVybiBwYW5lbHNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnb2JqZWN0J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMaXN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnbGlzdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pIHtcbiAgY29uc3QgaWQgPSBpdGVtW3NvdXJjZVNjaGVtYS5pZEtleSB8fCAnaWQnXVxuICByZXR1cm4gaWQgIT0gbnVsbCA/IFN0cmluZyhpZCkgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1VaWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIC8vIFRyeSB0byB1c2UgdGhlIGl0ZW0gaWQgYXMgdGhlIHVpZCwgZmFsbGluZyBiYWNrIG9uIGF1dG8tZ2VuZXJhdGVkIGlkcywgYnV0XG4gIC8vIGVpdGhlciB3YXksIHBhc3MgdGhyb3VnaCBgZ2V0VWlkKClgIHNvIHRoYXQgdGhlIGlkcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICAvLyBpdGVtIHRocm91Z2ggYSB3ZWFrIG1hcCwgYXMgdGhlIGlkcyBjYW4gYmUgZmlsdGVyZWQgb3V0IGluIGBwcm9jZXNzRGF0YSgpYFxuICAvLyB3aGlsZSB0aGUgY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgdWlkcyBhcyBrZXkgYXJlIHN0aWxsIHZpc2libGUuXG4gIHJldHVybiBnZXRVaWQoaXRlbSwgZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSkpXG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgVmFsaWRhdGlvbk1peGluIGZyb20gJy4vVmFsaWRhdGlvbk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGNvbXB1dGVWYWx1ZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldEl0ZW0sIGdldFBhcmVudEl0ZW0gfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNTdHJpbmcsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtWYWxpZGF0aW9uTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBOT1RFOiBXaGlsZSBgZGF0YVBhdGhgIHBvaW50cyB0byB0aGUgYWN0dWFsIGB2YWx1ZWAsIGBkYXRhYCByZXByZXNlbnRzXG4gICAgLy8gdGhlIGBpdGVtYCBpbiB3aGljaCB0aGUgYHZhbHVlYCBpcyBjb250YWluZWQsIHVuZGVyIHRoZSBrZXkgYG5hbWVgLlxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2VkVmFsdWU6IG51bGwsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnR5cGVcbiAgICB9LFxuXG4gICAgY29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZVR5cGVDb21wb25lbnQodGhpcy5zY2hlbWEuY29tcG9uZW50KVxuICAgIH0sXG5cbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogdGhpcy5uZXN0ZWQgfSlcbiAgICB9LFxuXG4gICAgdmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjb21wdXRlVmFsdWUoXG4gICAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICAgIHRoaXMubmFtZSxcbiAgICAgICAgICB0aGlzLmRhdGFQYXRoLFxuICAgICAgICAgIHsgY29tcG9uZW50OiB0aGlzIH1cbiAgICAgICAgKVxuICAgICAgICBjb25zdCB7IGZvcm1hdCB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgLy8gYHNjaGVtYS5mb3JtYXRgIGlzIG9ubHkgZXZlciBjYWxsZWQgaW4gdGhlIGxpZmUtY3ljbGVcbiAgICAgICAgLy8gb2YgdGhlIGNvbXBvbmVudCBhbmQgdGh1cyBpdCdzIG9rIHRvIGJpbmQgaXQgdG8gYHRoaXNgXG4gICAgICAgIHJldHVybiBmb3JtYXRcbiAgICAgICAgICA/IGZvcm1hdC5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHZhbHVlIH0pKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCB7IHBhcnNlIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICAvLyBgc2NoZW1hLnBhcnNlYCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGluIHRoZSBsaWZlLWN5Y2xlXG4gICAgICAgIC8vIG9mIHRoZSBjb21wb25lbnQgYW5kIHRodXMgaXQncyBvayB0byBiaW5kIGl0IHRvIGB0aGlzYFxuICAgICAgICB0aGlzLnBhcnNlZFZhbHVlID0gcGFyc2VcbiAgICAgICAgICA/IHBhcnNlLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgdmFsdWUgfSkpXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgICB0aGlzLiRzZXQodGhpcy5kYXRhLCB0aGlzLm5hbWUsIHRoaXMucGFyc2VkVmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgc2ltaWxhciB0byBgRGl0b0NvbnRleHRgXG4gICAgLy8gcHJvcGVydGllcywgc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZXNlIG9uIGB0aGlzYCBhcyB3ZWxsOlxuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gZ2V0SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICB9LFxuXG4gICAgcGFyZW50SXRlbSgpIHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIH0sXG5cbiAgICByb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3REYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgICAvLyBXZSBjYW4gb25seSBnZXQgdGhlIHByb2Nlc3NlZCBpdGVtcyB0aHJvdWdoIHRoZSBzY2hlbWFDb21wb25lbnQsIGJ1dFxuICAgICAgLy8gdGhhdCdzIG5vdCBuZWNlc3NhcmlseSB0aGUgaXRlbSByZXByZXNlbnRlZCBieSB0aGlzIGNvbXBvbmVudC5cbiAgICAgIC8vIFNvbHV0aW9uOiBGaW5kIHRoZSByZWxhdGl2ZSBwYXRoIGFuZCB0aGUgcHJvY2Vzc2VkIHN1Yi1pdGVtIGZyb20gdGhlcmU6XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGdldEl0ZW0oXG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5wcm9jZXNzZWRJdGVtLFxuICAgICAgICAvLyBHZXQgdGhlIGRhdGFQYXRoIHJlbGF0aXZlIHRvIHRoZSBzY2hlbWFDb21wb25lbnQncyBkYXRhOlxuICAgICAgICB0aGlzLmRhdGFQYXRoLnNsaWNlKHNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aC5sZW5ndGgpLFxuICAgICAgICB0aGlzLm5lc3RlZFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBsYWJlbDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2xhYmVsJywge1xuICAgICAgdHlwZTogW1N0cmluZywgQm9vbGVhbl0sXG4gICAgICBnZXQobGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKGxhYmVsKVxuICAgICAgICAgID8gbGFiZWxcbiAgICAgICAgICA6IGxhYmVsICE9PSBmYWxzZSAmJiB0aGlzLiRvcHRpb25zLmdlbmVyYXRlTGFiZWxcbiAgICAgICAgICAgID8gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgd2lkdGg6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl1cbiAgICB9KSxcblxuICAgIHZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVPcHRpb25zLmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYGV4Y2x1ZGVkYCBmb3IgY29uc2lzdGVudCBuYW1pbmdcbiAgICBleGNsdWRlOiBnZXRTY2hlbWFBY2Nlc3NvcignZXhjbHVkZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcmVxdWlyZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXF1aXJlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogTW92ZSB0aGVzZSB0byBhIHN1Yi1jbGFzcyBjb21wb25lbnQgdXNlZCBmb3IgYWxsIGlucHV0IGNvbXBvbmVudHM/XG4gICAgcmVhZG9ubHk6IGdldFNjaGVtYUFjY2Vzc29yKCdyZWFkb25seScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgYXV0b2ZvY3VzOiBnZXRTY2hlbWFBY2Nlc3NvcignYXV0b2ZvY3VzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUbyBiZSB1c2VkIGZvciBzZWxlY3RzIGFuZCBpbnB1dHMgb25seT9cbiAgICBjbGVhcmFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjbGVhcmFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHBsYWNlaG9sZGVyOiBnZXRTY2hlbWFBY2Nlc3NvcigncGxhY2Vob2xkZXInLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGF1dG9jb21wbGV0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9jb21wbGV0ZScsIHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0pLFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgbmF0aXZlRmllbGQsIHRleHRGaWVsZCB9ID0gdGhpcy4kb3B0aW9uc1xuXG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuXG4gICAgICBpZiAobmF0aXZlRmllbGQpIHtcbiAgICAgICAgYXR0cmlidXRlcy5uYW1lID0gdGhpcy5uYW1lXG4gICAgICAgIGlmICh0aGlzLmxhYmVsKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy50aXRsZSA9IHRoaXMubGFiZWxcbiAgICAgICAgfVxuICAgICAgICBhdHRyaWJ1dGVzLnJlYWRvbmx5ID0gdGhpcy5yZWFkb25seVxuICAgICAgICBhdHRyaWJ1dGVzLmF1dG9mb2N1cyA9IHRoaXMuYXV0b2ZvY3VzXG4gICAgICAgIGlmICh0ZXh0RmllbGQpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnBsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlclxuICAgICAgICAgIGF0dHJpYnV0ZXMuYXV0b2NvbXBsZXRlID0gdGhpcy5hdXRvY29tcGxldGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNcbiAgICB9LFxuXG4gICAgbGlzdGVuZXJzKCkge1xuICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5nZXRMaXN0ZW5lcnMoKVxuICAgICAgY29uc3QgeyBldmVudHMgPSB7fSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgLy8gUmVnaXN0ZXIgY2FsbGJhY2tzIGZvciBhbGwgcHJvdmlkZXMgbm9uLXJlY29nbml6ZWQgZXZlbnRzLFxuICAgICAgICAvLyBhc3N1bWluZyB0aGV5IGFyZSBuYXRpdmUgZXZlbnRzLlxuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIE9iamVjdC5rZXlzKGV2ZW50cykpIHtcbiAgICAgICAgICBsaXN0ZW5lcnNbZXZlbnRdIHx8PSAoKSA9PiB0aGlzLmVtaXRFdmVudChldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3RlbmVyc1xuICAgIH0sXG5cbiAgICB2YWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0geyAuLi50aGlzLmdldFZhbGlkYXRpb25zKCkgfVxuICAgICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMucmVxdWlyZWQgPSB0cnVlXG4gICAgICB9XG4gICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgZGVmYXVsdCBydWxlcyBhbmQgYWRkIGFueSBuZXcgb25lczpcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLnJ1bGVzIHx8IHt9KSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRlbGV0ZSB2YWxpZGF0aW9uc1trZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnNba2V5XSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uc1xuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBOT1RFOiBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gUmVzb3VyY2VNaXhpbiwgdXNlZCBieSBsaXN0cy5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzaG93Q2xlYXJCdXR0b24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGVhcmFibGUgJiYgdGhpcy52YWx1ZSAhPSBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICB0aGlzLnNldHVwU2NoZW1hRmllbGRzKClcbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBQcmV2ZW50IHVubmVzdGVkIHR5cGUgY29tcG9uZW50cyBmcm9tIG92ZXJyaWRpbmcgcGFyZW50IGRhdGEgcGF0aHNcbiAgICAgIGlmICh0aGlzLm5lc3RlZCkge1xuICAgICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJDb21wb25lbnQodGhpcywgYWRkKVxuICAgICAgICAvLyBJbnN0YWxsIC8gcmVtb3ZlIHRoZSBmaWVsZCBldmVudHMgdG8gd2F0Y2ggb2YgY2hhbmdlcyBhbmQgaGFuZGxlXG4gICAgICAgIC8vIHZhbGlkYXRpb24gZmxhZ3MuIGBldmVudHNgIGlzIHByb3ZpZGVkIGJ5IGBWYWxpZGF0aW9uTWl4aW4uZXZlbnRzKClgXG4gICAgICAgIHRoaXNbYWRkID8gJ29uJyA6ICdvZmYnXSh0aGlzLmV2ZW50cylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0TGlzdGVuZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgYmx1cjogdGhpcy5vbkJsdXIsXG4gICAgICAgIGlucHV0OiB0aGlzLm9uSW5wdXQsXG4gICAgICAgIGNoYW5nZTogdGhpcy5vbkNoYW5nZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIGNvbnN0IFtlbGVtZW50XSA9IGFzQXJyYXkodGhpcy4kcmVmcy5lbGVtZW50KVxuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIGVsZW1lbnQuZm9jdXMoKVxuICAgICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGRpc2FibGVkLCBgZm9jdXMoKWAgd2lsbCBsaWtlbHkgbm90IGhhdmUgdGhlXG4gICAgICAgICAgLy8gZGVzaXJlZCBlZmZlY3QuIFVzZSBgc2Nyb2xsSW50b1ZpZXcoKWAgaWYgYXZhaWxhYmxlOlxuICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAoZWxlbWVudC4kZWwgfHwgZWxlbWVudCkuc2Nyb2xsSW50b1ZpZXc/LigpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIC8vIEFsc28gZm9jdXMgdGhpcyBjb21wb25lbnQncyBzY2hlbWEgYW5kIHBhbmVsIGluIGNhc2UgaXQncyBhIHRhYi5cbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50LmZvY3VzKClcbiAgICAgIHRoaXMudGFiQ29tcG9uZW50Py5mb2N1cygpXG4gICAgICB0aGlzLmZvY3VzRWxlbWVudCgpXG4gICAgfSxcblxuICAgIGNsZWFyKCkge1xuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgIH0sXG5cbiAgICBvbkZvY3VzKCkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2ZvY3VzJylcbiAgICB9LFxuXG4gICAgb25CbHVyKCkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2VcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdibHVyJylcbiAgICB9LFxuXG4gICAgb25JbnB1dCgpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdpbnB1dCcpXG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScsIHtcbiAgICAgICAgY29udGV4dDogdGhpcy5wYXJzZWRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB7IHZhbHVlOiB0aGlzLnBhcnNlZFZhbHVlIH1cbiAgICAgICAgICA6IG51bGwsXG4gICAgICAgIC8vIFBhc3MgYHNjaGVtYUNvbXBvbmVudGAgYXMgcGFyZW50LCBzbyBjaGFuZ2UgZXZlbnRzIGNhbiBwcm9wYWdhdGUgdXAuXG4gICAgICAgIHBhcmVudDogdGhpcy5zY2hlbWFDb21wb25lbnRcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzUHJvbWlzZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b01peGluIGZyb20gJy4vbWl4aW5zL0RpdG9NaXhpbi5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0VHlwZUNvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvc2NoZW1hLmpzJ1xuXG5jb25zdCBjb21wb25lbnRzID0ge31cblxuY29uc3QgRGl0b0NvbXBvbmVudCA9IFZ1ZS5leHRlbmQoe1xuICAvLyBNYWtlIHN1cmUgdGhhdCByZWdpc3RlcmVkIGNvbXBvbmVudHMgYXJlIHByZXNlbnQgaW4gYWxsIERpdG9Db21wb25lbnQuXG4gIGNvbXBvbmVudHMsXG4gIG1peGluczogW0RpdG9NaXhpbl0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFR5cGVDb21wb25lbnQsXG5cbiAgICByZXNvbHZlQ29tcG9uZW50KGNvbXBvbmVudCwgbWl4aW5zID0gW10pIHtcbiAgICAgIC8vIEEgaGVscGVyIG1ldGhvZCB0byBhbGxvdyB0aHJlZSB0aGluZ3M6XG4gICAgICAvLyAtIFdoZW4gdXNlZCBpbiBhIGNvbXB1dGVkIHByb3BlcnR5LCBpdCByZW1vdmVzIHRoZSBuZWVkIHRvIGhhdmUgdG9cbiAgICAgIC8vICAgbG9hZCBjb21wb25lbnRzIHdpdGggYXN5bmMgZnVuY3Rpb25zIGBjb21wb25lbnQ6ICgpID0+IGltcG9ydCguLi4pYC5cbiAgICAgIC8vICAgaW5zdGVhZCwgdGhleSBjYW4gYmUgZGlyZWN0bHkgcHJvdmlkZWQ6IGBjb21wb25lbnQ6IGltcG9ydCguLi4pYFxuICAgICAgLy8gLSBUaGUgcHJvcGVydGllcyBwYXNzZWQgdG8gc3VjaCBjb21wb25lbnRzIGRvbid0IG5lZWQgdG8gYmUgZGVmaW5lZC5cbiAgICAgIC8vICAgSW5zdGVhZCwgdGhlIHByb3ZpZGVkIG1peGlucyBhcmUgYXV0b21hdGljYWxseSBpbmhlcml0ZWQuXG4gICAgICAvLyAtIFRoZSBjb21wb25lbnQgY2FuIHVzZSBhbGwgaW50ZXJuYWwgY29tcG9uZW50cyBrbm93biB0byBEaXRvLmpzIEFkbWluLlxuICAgICAgcmV0dXJuIGNvbXBvbmVudFxuICAgICAgICA/IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAvLyBBdCBmaXJzdCwgcmVzb2x2ZSBjb21wb25lbnQgaXMgaXQgaXMgbG9hZGVkIGFzeW5jaHJvbm91c2x5LlxuICAgICAgICAgIGxldCBjb21wID0gaXNGdW5jdGlvbihjb21wb25lbnQpID8gYXdhaXQgY29tcG9uZW50KClcbiAgICAgICAgICAgIDogaXNQcm9taXNlKGNvbXBvbmVudCkgPyBhd2FpdCBjb21wb25lbnRcbiAgICAgICAgICAgIDogY29tcG9uZW50XG4gICAgICAgICAgY29tcCA9IGNvbXA/LmRlZmF1bHQgfHwgY29tcFxuICAgICAgICAgIGNvbXAubWl4aW5zID0gbWl4aW5zXG4gICAgICAgICAgY29tcC5jb21wb25lbnRzID0gY29tcG9uZW50c1xuICAgICAgICAgIHJldHVybiBjb21wXG4gICAgICAgIH1cbiAgICAgICAgOiBjb21wb25lbnRcbiAgICB9LFxuXG4gICAgcmVzb2x2ZURpdG9Db21wb25lbnQoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlQ29tcG9uZW50KGNvbXBvbmVudCwgW0RpdG9NaXhpbl0pXG4gICAgfSxcblxuICAgIHJlc29sdmVUeXBlQ29tcG9uZW50KGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZUNvbXBvbmVudChjb21wb25lbnQsIFtEaXRvTWl4aW4sIFR5cGVNaXhpbl0pXG4gICAgfVxuICB9XG59KVxuXG5EaXRvQ29tcG9uZW50LmNvbXBvbmVudCA9IGZ1bmN0aW9uKG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgbmFtZSxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9XG4gICAgY29uc3QgY3RvciA9IHRoaXMuZXh0ZW5kKG9wdGlvbnMpXG4gICAgY29tcG9uZW50c1tuYW1lXSA9IGN0b3JcbiAgICByZXR1cm4gY3RvclxuICB9IGVsc2Uge1xuICAgIHJldHVybiBjb21wb25lbnRzW25hbWVdIHx8IFZ1ZS5jb21wb25lbnQobmFtZSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvVXNlciB7XG4gIGhhc1JvbGUoLi4ucm9sZXMpIHtcbiAgICBpZiAodGhpcy5yb2xlcykge1xuICAgICAgZm9yIChjb25zdCByb2xlIG9mIHJvbGVzKSB7XG4gICAgICAgIGlmICh0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuIiwiLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNjaGVtYVBhcmVudENvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzY2hlbWFDb21wb25lbnRzOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG1haW5TY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzWzBdXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgYERpdG9TY2hlbWEuY3JlYXRlZCgpL2Rlc3Ryb3llZCgpYCBvbiBpdHNcbiAgICAvLyAkcGFyZW50LCBpZiB0aGUgcGFyZW50IHVzZXMgdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHNjaGVtYUNvbXBvbmVudCwgYWRkKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50cy5wdXNoKHNjaGVtYUNvbXBvbmVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMuc3BsaWNlKHNjaGVtYUNvbXBvbmVudHMuaW5kZXhPZihzY2hlbWFDb21wb25lbnQpLCAxKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFNjaGVtYVBhcmVudE1peGluIGZyb20gJy4vU2NoZW1hUGFyZW50TWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1NjaGVtYVBhcmVudE1peGluXSxcblxuICBjb21wdXRlZDoge1xuICAgIGVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMucmVkdWNlKFxuICAgICAgICAocmVzdWx0LCB7IGVycm9ycyB9KSA9PlxuICAgICAgICAgIGVycm9ycyAmJiByZXN1bHQgPyByZXN1bHQuY29uY2F0KGVycm9ycykgOiBlcnJvcnMsXG4gICAgICAgIG51bGxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNUb3VjaGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5zb21lKGl0ID0+IGl0LmlzVG91Y2hlZClcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuc29tZShpdCA9PiBpdC5pc0RpcnR5KVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LnZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkpKVxuICAgIH0sXG5cbiAgICB2ZXJpZnlBbGwobWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQudmVyaWZ5QWxsKG1hdGNoKSlcbiAgICB9LFxuXG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnRzLmZvckVhY2goaXQgPT4gaXQucmVzZXRWYWxpZGF0aW9uKCkpXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnRzLmZvckVhY2goaXQgPT4gaXQuY2xlYXJFcnJvcnMoKSlcbiAgICB9LFxuXG4gICAgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnRzLmZvckVhY2goXG4gICAgICAgIGl0ID0+IGl0LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpXG4gICAgICApXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgVmFsaWRhdG9yTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Q29tbW9uUHJlZml4IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdG9yTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRyb3V0ZUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBiZWZvcmVSb3V0ZVVwZGF0ZSh0bywgZnJvbSwgbmV4dCkge1xuICAgIHRoaXMuYmVmb3JlUm91dGVDaGFuZ2UodG8sIGZyb20sIG5leHQpXG4gIH0sXG5cbiAgYmVmb3JlUm91dGVMZWF2ZSh0bywgZnJvbSwgbmV4dCkge1xuICAgIHRoaXMuYmVmb3JlUm91dGVDaGFuZ2UodG8sIGZyb20sIG5leHQpXG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVsb2FkOiBmYWxzZSxcbiAgICAgIC8vIEVhY2ggcm91dGUtY29tcG9uZW50IGRlZmluZXMgYSBzdG9yZSB0aGF0IGdldHMgcGFzc2VkIG9uIHRvIGl0c1xuICAgICAgLy8gY2hpbGQgY29tcG9uZW50cywgc28gdGhleSBjYW4gc3RvcmUgdmFsdWVzIGluIHRoZW0gdGhhdCBsaXZlIGJleW9uZFxuICAgICAgLy8gdGhlaXIgbGlmZS1jeWNsZS4gU2VlOiBEaXRvUGFuZSwgU291cmNlTWl4aW5cbiAgICAgIHN0b3JlOiB7fSxcbiAgICAgIGxvYWRDYWNoZToge30gLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIE92ZXJyaWRlIERpdG9NaXhpbidzIHJvdXRlQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICByb3V0ZVJlY29yZCgpIHtcbiAgICAgIC8vIFRPRE86IENhbiB0aGlzLiRyb3V0ZS5jdXJyZW50Um91dGUgYmUgb2YgdXNlIHNvbWV3aGVyZSBoZXJlP1xuICAgICAgLy8gUmV0cmlldmUgdGhlIHJvdXRlLXJlY29yZCB0byB3aGljaCB0aGlzIGNvbXBvbmVudCB3YXMgbWFwcGVkIHRvOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzMzgjaXNzdWVjb21tZW50LTI5NjM4MTQ1OVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLm1hdGNoZWRbdGhpcy4kdm5vZGUuZGF0YS5yb3V0ZXJWaWV3RGVwdGhdXG4gICAgfSxcblxuICAgIGlzTGFzdFJvdXRlKCkge1xuICAgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhpcyByb3V0ZXIgY29tcG9uZW50IGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm91dGUuXG4gICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZCA9PT0gbWF0Y2hlZFttYXRjaGVkLmxlbmd0aCAtIDFdXG4gICAgfSxcblxuICAgIGlzTGFzdFVubmVzdGVkUm91dGUoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyByb3V0ZSBjb21wb25lbnQgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSByb3V0ZSB0aGF0XG4gICAgICAvLyBuZWVkcyBpdHMgb3duIHJvdXRlci12aWV3ICg9IGlzIG5vdCBuZXN0ZWQpLlxuICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgZm9yIChsZXQgaSA9IG1hdGNoZWQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gbWF0Y2hlZFtpXVxuICAgICAgICBpZiAoIXJlY29yZC5tZXRhLm5lc3RlZCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkID09PSByZWNvcmRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGlzTmVzdGVkUm91dGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhLm5lc3RlZFxuICAgIH0sXG5cbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQ/Lm1ldGFcbiAgICB9LFxuXG4gICAgcGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJvdXRlUGF0aCh0aGlzLnJvdXRlUmVjb3JkLnBhdGgpXG4gICAgfSxcblxuICAgIGxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWIoKSB7XG4gICAgICBjb25zdCB7IGJyZWFkY3J1bWIgfSA9IHRoaXMuc2NoZW1hIHx8IHt9XG4gICAgICByZXR1cm4gYnJlYWRjcnVtYiB8fCBgJHt0aGlzLmJyZWFkY3J1bWJQcmVmaXh9ICR7dGhpcy5sYWJlbH1gXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWJQcmVmaXgoKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9LFxuXG4gICAgcGFyYW0oKSB7XG4gICAgICAvLyBXb3JrYXJvdW5kIGZvciB2dWUtcm91dGVyIG5vdCBiZWluZyBhYmxlIHRvIG1hcCBtdWx0aXBsZSB1cmwgcGFyYW1ldGVyc1xuICAgICAgLy8gd2l0aCB0aGUgc2FtZSBuYW1lIHRvIG11bHRpcGxlIGNvbXBvbmVudHMsIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzQ1XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucGFyYW1zW3RoaXMubWV0YT8ucGFyYW1dIHx8IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlLCBzZWUgRGl0b0Zvcm1cbiAgICBkb2VzTXV0YXRlKCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgLy8gS2VlcCBhIHNoYXJlZCBzdGFjayBvZiByb290IGNvbXBvbmVudHMgZm9yIERpdG9UcmFpbCB0byB1c2UgdG8gcmVuZGVyXG4gICAgLy8gbGFiZWxzLiBDYW4ndCByZWx5IG9uICRyb3V0ZS5tYXRjaGVkW2ldLmluc3RhbmNlcy5kZWZhdWx0IHVuZm9ydHVuYXRlbHksXG4gICAgLy8gYXMgaW5zdGFuY2VzIGFyZW4ndCBpbW1lZGlhdGVseSByZWFkeSwgYW5kIGluc3RhbmNlcyBpcyBub3QgcmVhY3RpdmUuXG4gICAgdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMucHVzaCh0aGlzKVxuICB9LFxuXG4gIGRlc3Ryb3llZCgpIHtcbiAgICBjb25zdCB7IHJvdXRlQ29tcG9uZW50cyB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgIHJvdXRlQ29tcG9uZW50cy5zcGxpY2Uocm91dGVDb21wb25lbnRzLmluZGV4T2YodGhpcyksIDEpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgICBsZXQgb2sgPSB0cnVlXG4gICAgICBjb25zdCBpc0Nsb3NpbmcgPSAoXG4gICAgICAgIC8vIE9ubHkgaGFuZGxlIHRoaXMgcm91dGUgY2hhbmdlIGlmIHRoZSBmb3JtIGlzIGFjdHVhbGx5IG1hcHBlZCB0byB0aGVcbiAgICAgICAgLy8gYGZyb21gIHJvdXRlLCBidXQgaW5jbHVkZSBwYXJlbnQgZm9ybXMgb2YgY2xvc2luZyBuZXN0ZWQgZm9ybXMgYXMgYXNcbiAgICAgICAgLy8gd2VsbCwgYnkgbWF0Y2hpbmcgdGhlIHRoZSBzdGFydCBvZiBmcm9tL3RvIHBhdGggYWdhaW5zdCBgdGhpcy5wYXRoYDpcbiAgICAgICAgZnJvbS5wYXRoLnN0YXJ0c1dpdGgodGhpcy5wYXRoKSAmJlxuICAgICAgICAhdG8ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgLy8gRXhjbHVkZSBoYXNoIGNoYW5nZXMgb25seSAoPSB0YWIgY2hhbmdlcyk6XG4gICAgICAgIGZyb20ucGF0aCAhPT0gdG8ucGF0aCAmJiAoXG4gICAgICAgICAgdGhpcy5pc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkgfHxcbiAgICAgICAgICAvLyBEZWNpZGUgaWYgd2UncmUgbW92aW5nIHRvd2FyZHMgYSBuZXcgbmVzdGVkIGZvcm0sIG9yIGNsb3NpbmcgL1xuICAgICAgICAgIC8vIHJlcGxhY2luZyBhbiBhbHJlYWR5IG9wZW4gb25lIGJ5IGNvbXBhcmluZyBwYXRoIGxlbmd0aHMuXG4gICAgICAgICAgLy8gVGhlIGNhc2Ugb2YgYD1gIG1hdGNoZXMgdGhlIHJlcGxhY2luZyBvZiBhbiBhbHJlYWR5IG9wZW4gb25lLlxuICAgICAgICAgIHRvLnBhdGgubGVuZ3RoIDw9IGZyb20ucGF0aC5sZW5ndGhcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgaWYgKGlzQ2xvc2luZykge1xuICAgICAgICBpZiAodGhpcy5kb2VzTXV0YXRlKSB7XG4gICAgICAgICAgLy8gRm9yIGFjdGl2ZSBkaXJlY3RseSBtdXRhdGluZyAobmVzdGVkKSBmb3JtcyB0aGF0IHdlcmUgbm90IHZhbGlkYXRlZFxuICAgICAgICAgIC8vIHlldCwgdmFsaWRhdGUgdGhlbSBvbmNlLiBJZiB0aGUgdXNlciB0aGVuIHN0aWxsIHdhbnRzIHRvIGxlYXZlXG4gICAgICAgICAgLy8gdGhlbSwgdGhleSBjYW4gY2xpY2sgY2xvc2UgLyBuYXZpZ2F0ZSBhd2F5IGFnYWluLlxuICAgICAgICAgIG9rID0gKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCB8fFxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUFsbCgpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoZSBmb3JtIGRvZXNuJ3QgZGlyZWN0bHkgbXV0YXRlIGRhdGEuIElmIGl0IGlzIGRpcnR5LCBhc2sgaWYgdXNlclxuICAgICAgICAgIC8vIHdhbnRzIHRvIHBlcnNpc3QgZGF0YSBmaXJzdC5cbiAgICAgICAgICBpZiAodGhpcy5pc0RpcnR5KSB7XG4gICAgICAgICAgICBvayA9IHdpbmRvdy5jb25maXJtKFxuICAgICAgICAgICAgICBgWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzLiBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHtcbiAgICAgICAgICAgICAgICB0aGlzLnZlcmJzLmNhbmNlbFxuICAgICAgICAgICAgICB9P2BcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG5leHQob2spXG4gICAgfSxcblxuICAgIGdldFJvdXRlUGF0aCh0ZW1wbGF0ZVBhdGgpIHtcbiAgICAgIC8vIE1hcHMgdGhlIHJvdXRlJ3MgYWN0dWFsIHBhdGggdG8gdGhlIG1hdGNoZWQgcm91dGVzIGJ5IGNvdW50aW5nIGl0c1xuICAgICAgLy8gcGFydHMgc2VwYXJhdGVkIGJ5ICcvJywgc3BsaXR0aW5nIHRoZSBwYXRoIGludG8gdGhlIG1hcHBlZCBwYXJ0c1xuICAgICAgLy8gY29udGFpbmluZyBhY3R1YWwgcGFyYW1ldGVycy5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5wYXRoXG4gICAgICAgIC5zcGxpdCgnLycpXG4gICAgICAgIC5zbGljZSgwLCB0ZW1wbGF0ZVBhdGguc3BsaXQoJy8nKS5sZW5ndGgpXG4gICAgICAgIC5qb2luKCcvJylcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRQYXRoKHBhdGgpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLnBhdGh9LyR7cGF0aH1gXG4gICAgfSxcblxuICAgIGlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSB7XG4gICAgICAvLyBUaGUgcm91dGUgcGF0aCBpcyB0aGUgcGF0aCB1cCB0byB0aGUgZmlyc3QgLyAoZXhjbHVkaW5nIHRoZSBpbml0aWFsIC8pOlxuICAgICAgY29uc3Qgcm9vdFBhdGggPSB0aGlzLnBhdGgubWF0Y2goL14oXFwvW14vXSopLylbMV1cbiAgICAgIHJldHVybiAhZ2V0Q29tbW9uUHJlZml4KHRvLnBhdGgsIGZyb20ucGF0aCkuc3RhcnRzV2l0aChyb290UGF0aClcbiAgICB9XG4gIH1cbn1cbiIsIlxuLy8gT25seSByZW5kZXIgRGl0b1ZpZXcgd2hlbiBpdCBpcyBhY3RpdmUsIG90aGVyd2lzZSBhIG5vcm1hbCByb3V0ZXItdmlld1xuLy8gaW5zdGVhZCwgdG8gbmVzdCBmdXJ0aGVyIHJvdXRlIGNvbXBvbmVudHMuXG4vLyBOT1RFOiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBoYW5kbGluZyBpbiBEaXRvRm9ybSwgd2hlcmUgYHYtc2hvd2AgaXNcbi8vIHVzZWQgdG8gYWx3YXlzIHJlbmRlciBmb3JtcyBldmVuIHdoZW4gb3RoZXIgbmVzdGVkIGZvcm1zIGFyZSBwcmVzZW50Llxucm91dGVyLXZpZXcoXG4gIHYtaWY9XCIhaXNMYXN0Um91dGVcIlxuICA6a2V5PVwibmFtZVwiXG4pXG4uZGl0by12aWV3LmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgdi1lbHNlLWlmPVwic2hvdWxkUmVuZGVyKHZpZXdTY2hlbWEpXCJcbilcbiAgZGl0by1zY2hlbWEuZGl0by1zY3JvbGwoXG4gICAgOnNjaGVtYT1cInZpZXdTY2hlbWFcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKG5hbWUpXCJcbiAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAvLyBPbmx5IHJlbmRlciBEaXRvVmlldyB3aGVuIGl0IGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIGEgbm9ybWFsIHJvdXRlci12aWV3XG4gIC8vIGluc3RlYWQsIHRvIG5lc3QgZnVydGhlciByb3V0ZSBjb21wb25lbnRzLlxuICAvLyBOT1RFOiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBoYW5kbGluZyBpbiBEaXRvRm9ybSwgd2hlcmUgYHYtc2hvd2AgaXNcbiAgLy8gdXNlZCB0byBhbHdheXMgcmVuZGVyIGZvcm1zIGV2ZW4gd2hlbiBvdGhlciBuZXN0ZWQgZm9ybXMgYXJlIHByZXNlbnQuXG4gIHJvdXRlci12aWV3KFxuICAgIHYtaWY9XCIhaXNMYXN0Um91dGVcIlxuICAgIDprZXk9XCJuYW1lXCJcbiAgKVxuICAuZGl0by12aWV3LmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgICB2LWVsc2UtaWY9XCJzaG91bGRSZW5kZXIodmlld1NjaGVtYSlcIlxuICApXG4gICAgZGl0by1zY2hlbWEuZGl0by1zY3JvbGwoXG4gICAgICA6c2NoZW1hPVwidmlld1NjaGVtYVwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUobmFtZSlcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCB7IHNvbWVTY2hlbWFDb21wb25lbnQsIGlzU2luZ2xlQ29tcG9uZW50VmlldyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGhhc1Jlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by12aWV3Jywge1xuICBtaXhpbnM6IFtSb3V0ZU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIC8vIFJlZGlyZWN0ICRzb3VyY2VDb21wb25lbnQgYW5kICRyZXNvdXJjZUNvbXBvbmVudCB0byB0aGUgbWFpbiBjb21wb25lbnQ6XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMubWFpbkNvbXBvbmVudD8uc291cmNlQ29tcG9uZW50IHx8IG51bGwsXG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMubWFpbkNvbXBvbmVudD8ucmVzb3VyY2VDb21wb25lbnQgfHwgbnVsbFxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc1ZpZXc6IHRydWUsXG4gICAgICAvLyBVcGRhdGVkIGZyb20gTG9hZGluZ01peGluIHRocm91Z2ggYHNldExvYWRpbmcoaXNMb2FkaW5nKWA6XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgLy8gTk9URTogRGF0YSBpcyBzaGFyZWQgYWNyb3NzIGFsbCB2aWV3cyBiZWNhdXNlIHRoZSByb3V0ZXIgcmVjeWNsZXMgdGhlXG4gICAgICAvLyBEaXRvVmlldyBjb21wb25lbnQuXG4gICAgICBkYXRhOiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEuc2NoZW1hXG4gICAgfSxcblxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICBpc1NpbmdsZUNvbXBvbmVudFZpZXcoKSB7XG4gICAgICByZXR1cm4gaXNTaW5nbGVDb21wb25lbnRWaWV3KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBtYWluQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeURhdGFQYXRoKHRoaXMubmFtZSlcbiAgICB9LFxuXG4gICAgdmlld1NjaGVtYSgpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hIH0gPSB0aGlzXG4gICAgICAvLyBUcmFuc2xhdGUgc2luZ2xlLWNvbXBvbmVudCBzY2hlbWFzIGludG8gbXVsdGktY29tcG9uZW50IHNjaGVtYXMsXG4gICAgICAvLyBzbyB0aGV5IGNhbiBiZSByZW5kZXJlZCBkaXJlY3RseSB0aHJvdWdoIERpdG9TY2hlbWEgYWxzbzpcbiAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50Vmlld1xuICAgICAgICA/IHtcbiAgICAgICAgICBuYW1lOiBzY2hlbWEubmFtZSxcbiAgICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgICBbc2NoZW1hLm5hbWVdOiB7XG4gICAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgICAgbGFiZWw6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIDogc2NoZW1hXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIHJldHVybiBzb21lU2NoZW1hQ29tcG9uZW50KFxuICAgICAgICB0aGlzLnZpZXdTY2hlbWEsXG4gICAgICAgIGNvbXBvbmVudCA9PiBoYXNSZXNvdXJjZShjb21wb25lbnQpXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlKHRvLCBmcm9tKSB7XG4gICAgICAvLyBTZWUgaWYgdGhlIHJvdXRlIGNoYW5nZXMgY29tcGxldGVseSwgYW5kIGNsZWFyIHRoZSBkYXRhIGlmIGl0IGRvZXMuXG4gICAgICBpZiAodGhpcy5pc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxuICAgICAgICB0aGlzLmRhdGEgPSB7fVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgfSxcblxuICAgIGdldENoaWxkUGF0aChwYXRoKSB7XG4gICAgICAvLyBMaXN0cyBpbnNpZGUgc2luZ2xlLWNvbXBvbmVudCB2aWV3cyB1c2UgdGhlIHZpZXcncyBwYXRoIGZvciBzdWItcGF0aHM6XG4gICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZUNvbXBvbmVudFZpZXdcbiAgICAgICAgPyB0aGlzLnBhdGhcbiAgICAgICAgOiBgJHt0aGlzLnBhdGh9LyR7cGF0aH1gXG4gICAgfSxcblxuICAgIHNldExvYWRpbmcoaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9ICEhaXNMb2FkaW5nXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMgfSBmcm9tICdAZGl0b2pzL3VpJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkb21IYW5kbGVyczogW11cbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICBmb3IgKGNvbnN0IHsgcmVtb3ZlIH0gb2YgdGhpcy5kb21IYW5kbGVycykge1xuICAgICAgcmVtb3ZlKClcbiAgICB9XG4gICAgdGhpcy5kb21IYW5kbGVycyA9IFtdXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGRvbU9uKGVsZW1lbnQsIHR5cGUsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGFkZEV2ZW50cyhcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgaXNPYmplY3QodHlwZSkgPyB0eXBlIDogeyBbdHlwZV06IGhhbmRsZXIgfVxuICAgICAgKVxuICAgICAgdGhpcy5kb21IYW5kbGVycy5wdXNoKHJlc3VsdClcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tcm9vdFxuICBub3RpZmljYXRpb25zLmRpdG8tbm90aWZpY2F0aW9ucyhcbiAgICByZWY9XCJub3RpZmljYXRpb25zXCJcbiAgICBwb3NpdGlvbj1cInRvcCByaWdodFwiXG4gICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgKVxuICBkaXRvLW1lbnVcbiAgbWFpbi5kaXRvLXBhZ2UuZGl0by1zY3JvbGwtcGFyZW50XG4gICAgZGl0by1oZWFkZXIoXG4gICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICApXG4gICAgICBkaXRvLWFjY291bnQoXG4gICAgICAgIHYtaWY9XCJ1c2VyXCJcbiAgICAgIClcbiAgICAgIGEuZGl0by1sb2dpbihcbiAgICAgICAgdi1lbHNlLWlmPVwiYWxsb3dMb2dpblwiXG4gICAgICAgIEBjbGljaz1cInJvb3RDb21wb25lbnQubG9naW4oKVwiXG4gICAgICApXG4gICAgICAgIHNwYW4gTG9naW5cbiAgICByb3V0ZXItdmlld1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcm9vdFxuICAgIG5vdGlmaWNhdGlvbnMuZGl0by1ub3RpZmljYXRpb25zKFxuICAgICAgcmVmPVwibm90aWZpY2F0aW9uc1wiXG4gICAgICBwb3NpdGlvbj1cInRvcCByaWdodFwiXG4gICAgICBjbGFzc2VzPVwiZGl0by1ub3RpZmljYXRpb25cIlxuICAgIClcbiAgICBkaXRvLW1lbnVcbiAgICBtYWluLmRpdG8tcGFnZS5kaXRvLXNjcm9sbC1wYXJlbnRcbiAgICAgIGRpdG8taGVhZGVyKFxuICAgICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICAgIDppc0xvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgICAgKVxuICAgICAgICBkaXRvLWFjY291bnQoXG4gICAgICAgICAgdi1pZj1cInVzZXJcIlxuICAgICAgICApXG4gICAgICAgIGEuZGl0by1sb2dpbihcbiAgICAgICAgICB2LWVsc2UtaWY9XCJhbGxvd0xvZ2luXCJcbiAgICAgICAgICBAY2xpY2s9XCJyb290Q29tcG9uZW50LmxvZ2luKClcIlxuICAgICAgICApXG4gICAgICAgICAgc3BhbiBMb2dpblxuICAgICAgcm91dGVyLXZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvc3R5bGUuc2FzcydcblxuICAuZGl0by1yb290XG4gICAgaGVpZ2h0OiAxMDAlXG4gICAgZGlzcGxheTogZmxleFxuICAgIC5kaXRvLXBhZ2VcbiAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmRcbiAgICAgIC8vIFRoZSByb290LWxldmVsIHZpZXdzIGFuZCBmb3JtcyBtYXkgaGF2ZSBhIGAuZGl0by1zY2hlbWEtaGVhZGVyYCB0aGF0XG4gICAgICAvLyBzaG91bGQgYXBwZWFyIGxheWVyZWQgb3ZlciBgLmRpdG8tbWVudWAsIHdoaWxlIGhhdmluZyBgb3ZlcmxheTogaGlkZGVuYFxuICAgICAgLy8gc2V0IGJ5IGAuZGl0by1zY3JvbGwtcGFyZW50YCB0byBkZWxlZ2F0ZSBzY3JvbGxpbmcgdG8gYC5kaXRvLXNjcm9sbGAuXG4gICAgICAvLyBJbiBvcmRlciB0byBub3QgaGF2ZSB0aGUgaGVhZGVyIGNsaXBwZWQsIGFkanVzdCB0aGUgdG9wIGhlcmU6XG4gICAgICA+IC5kaXRvLWZvcm0sXG4gICAgICA+IC5kaXRvLXZpZXdcbiAgICAgICAgbWFyZ2luLXRvcDogLSRtZW51LWhlaWdodFxuICAgICAgICBwYWRkaW5nLXRvcDogJG1lbnUtaGVpZ2h0XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgYXNBcnJheSwgc3RyaXBUYWdzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b1VzZXIgZnJvbSAnLi4vRGl0b1VzZXIuanMnXG5pbXBvcnQgRGl0b1ZpZXcgZnJvbSAnLi4vY29tcG9uZW50cy9EaXRvVmlldy52dWUnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgcHJvY2Vzc1ZpZXcsIHJlc29sdmVTY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcm9vdCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICR2aWV3czogKCkgPT4gdGhpcy5yZXNvbHZlZFZpZXdzXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgdW5yZXNvbHZlZFZpZXdzOiB7IHR5cGU6IFtPYmplY3QsIEZ1bmN0aW9uLCBQcm9taXNlXSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBvcHRpb25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzb2x2ZWRWaWV3czoge30sXG4gICAgICBhbGxvd0xvZ2luOiBmYWxzZSxcbiAgICAgIGxvYWRpbmdDb3VudDogMFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy5ub3RpZmljYXRpb25zXG4gICAgfSxcblxuICAgIGlzTG9hZGluZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRpbmdDb3VudCA+IDBcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLmFwcFN0YXRlLnRpdGxlID0gZG9jdW1lbnQudGl0bGUgfHwgJ0RpdG8uanMgQWRtaW4nXG4gICAgLy8gV2l0aCBob3QtcmVsb2FkaW5nLCBpdCBsb29rcyBsaWtlIGRlc3Ryb3llZCBob29rcyBhcmVuJ3QgYWx3YXlzIGNhbGxlZFxuICAgIC8vIGZvciByb3V0ZSBjb21wb25lbnRzIHNvIHJlc2V0IHRoZSBhcnJheSBvZiByZWdpc3RlcmVkIGNvbXBvbmVudHMgaW5zdGVhZC5cbiAgICB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cyA9IFtdXG4gIH0sXG5cbiAgYXN5bmMgbW91bnRlZCgpIHtcbiAgICAvLyBDbGVhciB0aGUgbGFiZWwgbWFya2VkIGFzIGFjdGl2ZSBvbiBhbGwgbW91c2UgYW5kIGtleWJvYXJkIGV2ZW50cywgZXhjZXB0XG4gICAgLy8gdGhlIG9uZXMgdGhhdCBEaXRvTGFiZWwgaXRzZWxmIGludGVyY2VwdHMuXG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgY2xpY2s6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKCFldmVudC50YXJnZXQuY2xvc2VzdCgnLmRpdG8tbGFiZWwnKSkge1xuICAgICAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGtleXVwOiBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5jb2RlID09PSAnVGFiJykge1xuICAgICAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIHRyeSB7XG4gICAgICB0aGlzLmFsbG93TG9naW4gPSBmYWxzZVxuICAgICAgaWYgKGF3YWl0IHRoaXMuZmV0Y2hVc2VyKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlVmlld3MoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICB9XG4gICAgdGhpcy5hbGxvd0xvZ2luID0gdHJ1ZVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBub3RpZnkoeyB0eXBlID0gJ2luZm8nLCB0aXRsZSwgdGV4dCB9ID0ge30pIHtcbiAgICAgIHRpdGxlIHx8PSB7XG4gICAgICAgIHdhcm5pbmc6ICdXYXJuaW5nJyxcbiAgICAgICAgZXJyb3I6ICdFcnJvcicsXG4gICAgICAgIGluZm86ICdJbmZvcm1hdGlvbicsXG4gICAgICAgIHN1Y2Nlc3M6ICdTdWNjZXNzJ1xuICAgICAgfVt0eXBlXSB8fCAnTm90aWZpY2F0aW9uJ1xuICAgICAgdGV4dCA9IGA8cD4ke1xuICAgICAgICBhc0FycmF5KHRleHQpLmpvaW4oJzwvcD4gPHA+JylcbiAgICAgIH08L3A+YC5yZXBsYWNlKC9cXG58XFxyXFxufFxcci9nLCAnPGJyPicpXG4gICAgICBjb25zdCBsb2cgPSB7XG4gICAgICAgIHdhcm5pbmc6ICd3YXJuJyxcbiAgICAgICAgZXJyb3I6ICdlcnJvcicsXG4gICAgICAgIGluZm86ICdsb2cnLFxuICAgICAgICBzdWNjZXNzOiAnbG9nJ1xuICAgICAgfVt0eXBlXSB8fCAnZXJyb3InXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZVtsb2ddKHN0cmlwVGFncyh0ZXh0KSlcbiAgICAgIGNvbnN0IHsgbm90aWZpY2F0aW9ucyA9IHRydWUgfSA9IHRoaXMuYXBpXG4gICAgICBpZiAobm90aWZpY2F0aW9ucykge1xuICAgICAgICAvLyBDYWxjdWxhdGUgZGlzcGxheS1kdXJhdGlvbiBmb3IgdGhlIG5vdGlmaWNhdGlvbiBiYXNlZCBvbiBpdHMgY29udGVudFxuICAgICAgICAvLyBhbmQgdGhlIHNldHRpbmcgb2YgdGhlIGBkdXJhdGlvbkZhY3RvcmAgY29uZmlndXJhdGlvbi4gSXQgZGVmaW5lcyB0aGVcbiAgICAgICAgLy8gYW1vdW50IG9mIG1pbGxpc2Vjb25kcyBtdWx0aXBsaWVkIHdpdGggdGhlIGFtb3VudCBvZiBjaGFyYWN0ZXJzXG4gICAgICAgIC8vIGRpc3BsYXllZCBpbiB0aGUgbm90aWZpY2F0aW9uLCBwbHVzIDQwICg0MCArIHRpdGxlICsgbWVzc2FnZSk6XG4gICAgICAgIGNvbnN0IHsgZHVyYXRpb25GYWN0b3IgPSAyMCB9ID0gbm90aWZpY2F0aW9uc1xuICAgICAgICBjb25zdCBkdXJhdGlvbiA9ICg0MCArIHRleHQubGVuZ3RoICsgdGl0bGUubGVuZ3RoKSAqIGR1cmF0aW9uRmFjdG9yXG4gICAgICAgIHRoaXMuJG5vdGlmeSh7IHR5cGUsIHRpdGxlLCB0ZXh0LCBkdXJhdGlvbiB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbG9zZU5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuZGVzdHJveUFsbCgpXG4gICAgfSxcblxuICAgIHJlZ2lzdGVyTG9hZGluZyhpc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMubG9hZGluZ0NvdW50ICs9IGlzTG9hZGluZyA/IDEgOiAtMVxuICAgIH0sXG5cbiAgICBhc3luYyBsb2dpbigpIHtcbiAgICAgIHRoaXMuYWxsb3dMb2dpbiA9IHRydWVcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYWRkaXRpb25hbENvbXBvbmVudHMsXG4gICAgICAgIHJlZGlyZWN0QWZ0ZXJMb2dpblxuICAgICAgfSA9IHRoaXMub3B0aW9ucy5sb2dpbiB8fCB7fVxuICAgICAgY29uc3QgbG9naW5EYXRhID0gYXdhaXQgdGhpcy5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIHVzZXJuYW1lOiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBhdXRvZm9jdXM6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBhc3N3b3JkOiB7XG4gICAgICAgICAgICB0eXBlOiAncGFzc3dvcmQnXG4gICAgICAgICAgfSxcbiAgICAgICAgICAuLi5hZGRpdGlvbmFsQ29tcG9uZW50c1xuICAgICAgICB9LFxuICAgICAgICBidXR0b25zOiB7XG4gICAgICAgICAgY2FuY2VsOiB7fSxcbiAgICAgICAgICBsb2dpbjogeyB0eXBlOiAnc3VibWl0JyB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBpZiAobG9naW5EYXRhKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5sb2dpbixcbiAgICAgICAgICAgIGRhdGE6IGxvZ2luRGF0YSxcbiAgICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAocmVkaXJlY3RBZnRlckxvZ2luKSB7XG4gICAgICAgICAgICBsb2NhdGlvbi5yZXBsYWNlKHJlZGlyZWN0QWZ0ZXJMb2dpbilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRVc2VyKHJlc3BvbnNlLmRhdGEudXNlcilcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzb2x2ZVZpZXdzKClcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gZXJyLnJlc3BvbnNlPy5kYXRhPy5lcnJvclxuICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICB0aXRsZTogJ0F1dGhlbnRpY2F0aW9uIEVycm9yJyxcbiAgICAgICAgICAgIHRleHQ6IGVycm9yIHx8IGVyclxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5yZXNwb25zZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2dpbigpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbmF2aWdhdGVIb21lKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGUoJy8nKVxuICAgIH0sXG5cbiAgICBhc3luYyBsb2dvdXQoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5sb2dvdXQsXG4gICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuc2V0VXNlcihudWxsKVxuICAgICAgICAgIHRoaXMubmF2aWdhdGVIb21lKClcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFVzZXIoKSB7XG4gICAgICBsZXQgdXNlciA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLnNlc3Npb24sXG4gICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgdXNlciA9IHJlc3BvbnNlLmRhdGEudXNlciB8fCBudWxsXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbiBFcnJvcicsXG4gICAgICAgICAgdGV4dDogZXJyXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICB0aGlzLnNldFVzZXIodXNlcilcbiAgICAgIHJldHVybiB1c2VyXG4gICAgfSxcblxuICAgIHNldFVzZXIodXNlcikge1xuICAgICAgdGhpcy5hcHBTdGF0ZS51c2VyID0gKFxuICAgICAgICB1c2VyICYmXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih1c2VyLCBEaXRvVXNlci5wcm90b3R5cGUpXG4gICAgICApXG4gICAgICAvLyBDbGVhciByZXNvbHZlZCB2aWV3cyB3aGVuIHVzZXIgaXMgbG9nZ2VkIG91dC5cbiAgICAgIGlmICghdXNlcikge1xuICAgICAgICB0aGlzLnJlc29sdmVkVmlld3MgPSB7fVxuICAgICAgICB0aGlzLm5hdmlnYXRlSG9tZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGVuc3VyZVVzZXIoKSB7XG4gICAgICBpZiAoIShhd2FpdCB0aGlzLmZldGNoVXNlcigpKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgcmVzb2x2ZVZpZXdzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFZpZXdzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXModGhpcy51bnJlc29sdmVkVmlld3MpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIWVycm9yLnJlcXVlc3QpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICAgIC8vIENvbGxlY3QgYWxsIHJvdXRlcyBmcm9tIHRoZSByb290IHNjaGVtYSBjb21wb25lbnRzXG4gICAgICBjb25zdCByb3V0ZXMgPSBbXVxuICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXVxuICAgICAgZm9yIChjb25zdCBbbmFtZSwgc2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnJlc29sdmVkVmlld3MpKSB7XG4gICAgICAgIHByb21pc2VzLnB1c2gocHJvY2Vzc1ZpZXcoRGl0b1ZpZXcsIHRoaXMuYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcykpXG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcbiAgICAgIGZvciAoY29uc3Qgcm91dGUgb2Ygcm91dGVzKSB7XG4gICAgICAgIHRoaXMuJHJvdXRlci5hZGRSb3V0ZShyb3V0ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxubmF2LmRpdG8tbWVudS5kaXRvLXNjcm9sbC1wYXJlbnRcbiAgaDEge3sgYXBwU3RhdGUudGl0bGUgfX1cbiAgdWwuZGl0by1zY3JvbGxcbiAgICBsaSh2LWZvcj1cInZpZXcgaW4gdmlld3NcIilcbiAgICAgIHJvdXRlci1saW5rLmRpdG8tbGluayhcbiAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcih2aWV3KVwiXG4gICAgICAgIDp0bz1cImAvJHt2aWV3LnBhdGh9YFwiXG4gICAgICAgIGFjdGl2ZS1jbGFzcz1cImRpdG8tYWN0aXZlXCJcbiAgICAgICkge3sgZ2V0TGFiZWwodmlldykgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIG5hdi5kaXRvLW1lbnUuZGl0by1zY3JvbGwtcGFyZW50XG4gICAgaDEge3sgYXBwU3RhdGUudGl0bGUgfX1cbiAgICB1bC5kaXRvLXNjcm9sbFxuICAgICAgbGkodi1mb3I9XCJ2aWV3IGluIHZpZXdzXCIpXG4gICAgICAgIHJvdXRlci1saW5rLmRpdG8tbGluayhcbiAgICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHZpZXcpXCJcbiAgICAgICAgICA6dG89XCJgLyR7dmlldy5wYXRofWBcIlxuICAgICAgICAgIGFjdGl2ZS1jbGFzcz1cImRpdG8tYWN0aXZlXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbCh2aWV3KSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLW1lbnVcbiAgICBmbGV4OiBpbml0aWFsXG4gICAgZm9udC1zaXplOiAkbWVudS1mb250LXNpemVcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgdWxcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyXG4gICAgICBib3JkZXItcmlnaHQ6ICRib3JkZXItc3R5bGVcbiAgICBhLFxuICAgIGgxXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgIGgxXG4gICAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nXG4gICAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHRcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyXG4gICAgICBib3JkZXItcmlnaHQ6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWRhcmtlc3RcbiAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAuZGl0by1saW5rXG4gICAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nXG4gICAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHRcbiAgICAgICYuZGl0by1hY3RpdmVcbiAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gIC5kaXRvLWxpbmtcbiAgICAmOmZvY3VzOm5vdCg6YWN0aXZlKTpub3QoLmRpdG8tYWN0aXZlKVxuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy1mb2N1c1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1tZW51Jywge30pXG48L3NjcmlwdD5cbiIsIlxuPGRpdiBjbGFzcz1cInYtc3Bpbm5lclwiIHYtc2hvdz1cImxvYWRpbmdcIj5cbiAgICA8ZGl2IGNsYXNzPVwidi1wdWxzZSB2LXB1bHNlMVwiIHYtYmluZDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5MV1cIj5cbiAgICA8L2Rpdj48ZGl2IGNsYXNzPVwidi1wdWxzZSB2LXB1bHNlMlwiIHYtYmluZDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5Ml1cIj5cbiAgICA8L2Rpdj48ZGl2IGNsYXNzPVwidi1wdWxzZSB2LXB1bHNlM1wiIHYtYmluZDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5M11cIj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4iLCI8dGVtcGxhdGU+XG48ZGl2IGNsYXNzPVwidi1zcGlubmVyXCIgdi1zaG93PVwibG9hZGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UxXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkxXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UyXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkyXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UzXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkzXVwiPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIFxuICBuYW1lOiAnUHVsc2VMb2FkZXInLFxuXG4gIHByb3BzOiB7XG4gICAgbG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGNvbG9yOiB7IFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJyM1ZGM1OTYnXG4gICAgfSxcbiAgICBzaXplOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMTVweCdcbiAgICB9LFxuICAgIG1hcmdpbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJzJweCdcbiAgICB9LFxuICAgIHJhZGl1czoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJzEwMCUnXG4gICAgfVxuICB9LFxuICBkYXRhICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3Bpbm5lclN0eWxlOiB7XG4gICAgICBcdGJhY2tncm91bmRDb2xvcjogdGhpcy5jb2xvcixcbiAgICAgIFx0d2lkdGg6IHRoaXMuc2l6ZSxcbiAgICAgICAgaGVpZ2h0OiB0aGlzLnNpemUsXG4gICAgICBcdG1hcmdpbjogdGhpcy5tYXJnaW4sXG4gICAgICBcdGJvcmRlclJhZGl1czogdGhpcy5yYWRpdXMsXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgICAgICBhbmltYXRpb25OYW1lOiAndi1wdWxzZVN0cmV0Y2hEZWxheScsXG4gICAgICAgIGFuaW1hdGlvbkR1cmF0aW9uOiAnMC43NXMnLFxuICAgICAgICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogJ2luZmluaXRlJyxcbiAgICAgICAgYW5pbWF0aW9uVGltaW5nRnVuY3Rpb246ICdjdWJpYy1iZXppZXIoLjIsLjY4LC4xOCwxLjA4KScsXG4gICAgICAgIGFuaW1hdGlvbkZpbGxNb2RlOiAnYm90aCdcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkxOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4xMnMnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5Mjoge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMjRzJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTM6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjM2cydcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cbi8qLnYtc3Bpbm5lclxue1xuICAgIG1hcmdpbjogMTAwcHggYXV0bztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4qL1xuXG5ALXdlYmtpdC1rZXlmcmFtZXMgdi1wdWxzZVN0cmV0Y2hEZWxheVxue1xuICAgIDAlLFxuICAgIDgwJVxuICAgIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMTsgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNDUlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMC43OyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgfVxufVxuXG5Aa2V5ZnJhbWVzIHYtcHVsc2VTdHJldGNoRGVsYXlcbntcbiAgICAwJSxcbiAgICA4MCVcbiAgICB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAtd2Via2l0LW9wYWNpdHk6IDE7ICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDQ1JVxuICAgIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgICAgICAtd2Via2l0LW9wYWNpdHk6IDAuNzsgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMC43O1xuICAgIH1cbn1cbjwvc3R5bGU+IiwiXG5uYXYuZGl0by1oZWFkZXJcbiAgLmRpdG8tdHJhaWxcbiAgICB1bFxuICAgICAgbGkoXG4gICAgICAgIHYtZm9yPVwiKGNvbXBvbmVudCwgaW5kZXgpIGluIHRyYWlsXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUodi1pZj1cImluZGV4ID09PSB0cmFpbC5sZW5ndGggLSAxXCIpXG4gICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgICAgICByb3V0ZXItbGluay5kaXRvLWJyZWFkY3J1bWIodi1lbHNlLCA6dG89XCJjb21wb25lbnQucGF0aFwiKVxuICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgICBzcGlubmVyLmRpdG8tc3Bpbm5lcih2LWlmPVwiaXNMb2FkaW5nXCIpXG4gIHNsb3RcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIG5hdi5kaXRvLWhlYWRlclxuICAgIC5kaXRvLXRyYWlsXG4gICAgICB1bFxuICAgICAgICBsaShcbiAgICAgICAgICB2LWZvcj1cIihjb21wb25lbnQsIGluZGV4KSBpbiB0cmFpbFwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiaW5kZXggPT09IHRyYWlsLmxlbmd0aCAtIDFcIilcbiAgICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgICAgICAgIHJvdXRlci1saW5rLmRpdG8tYnJlYWRjcnVtYih2LWVsc2UsIDp0bz1cImNvbXBvbmVudC5wYXRoXCIpXG4gICAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgICAgIHNwaW5uZXIuZGl0by1zcGlubmVyKHYtaWY9XCJpc0xvYWRpbmdcIilcbiAgICBzbG90XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8taGVhZGVyXG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWJsYWNrXG4gICAgZm9udC1zaXplOiAkbWVudS1mb250LXNpemVcbiAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHRcbiAgICB6LWluZGV4OiAkbWVudS16LWluZGV4XG4gICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgc3BhblxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nXG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLmRpdG8tdHJhaWxcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIGhlaWdodDogM2VtXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aCArICRjb250ZW50LXBhZGRpbmdcbiAgICAgIHVsXG4gICAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGFcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDAuNGVtXG4gICAgICAgICRhbmdsZTogMzNkZWdcbiAgICAgICAgJjpob3ZlclxuICAgICAgICAgIGNvbG9yOiAjOTk5XG4gICAgICAgICY6OmJlZm9yZSxcbiAgICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICAgIHdpZHRoOiAxcHhcbiAgICAgICAgICBoZWlnaHQ6IDEuMmVtXG4gICAgICAgICAgcmlnaHQ6IC0xcHhcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya1xuICAgICAgICAmOjpiZWZvcmVcbiAgICAgICAgICB0b3A6IDUwJVxuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKCRhbmdsZSlcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3BcbiAgICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgICBib3R0b206IDUwJVxuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0kYW5nbGUpXG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tXG4gICAgLmRpdG8tc3Bpbm5lclxuICAgICAgbWFyZ2luLXRvcDogJG1lbnUtcGFkZGluZy12ZXJcbiAgICAuZGl0by1kaXJ0eVxuICAgICAgJjphZnRlclxuICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICAgIHdpZHRoOiA4cHhcbiAgICAgICAgaGVpZ2h0OiA4cHhcbiAgICAgICAgbWFyZ2luOiAycHhcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDAuNWVtXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCVcbiAgICAuZGl0by1hY2NvdW50LFxuICAgIC5kaXRvLWxvZ2luXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIHRvcDogMFxuICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgLmRpdG8tYWNjb3VudFxuICAgICAgbGVmdDogJGNvbnRlbnQtd2lkdGggKyAkY29udGVudC1wYWRkaW5nICogMlxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUHVsc2VMb2FkZXIgZnJvbSAndnVlLXNwaW5uZXIvc3JjL1B1bHNlTG9hZGVyLnZ1ZSdcblxuY29uc3QgU3Bpbm5lciA9IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdzcGlubmVyJywgUHVsc2VMb2FkZXIpXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1oZWFkZXInLCB7XG4gIGNvbXBvbmVudHM6IHsgU3Bpbm5lciB9LFxuXG4gIHByb3BzOiB7XG4gICAgc3Bpbm5lcjoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgaXNMb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmFpbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5maWx0ZXIoXG4gICAgICAgIGNvbXBvbmVudCA9PiAhIWNvbXBvbmVudC5yb3V0ZVJlY29yZFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNpemUgPSAnOHB4JyxcbiAgICAgIGNvbG9yID0gJyM5OTknXG4gICAgfSA9IHRoaXMuc3Bpbm5lciB8fCB7fVxuICAgIGNvbnN0IHsgcHJvcHMgfSA9IFNwaW5uZXIub3B0aW9uc1xuICAgIHByb3BzLnNpemUuZGVmYXVsdCA9IHNpemVcbiAgICBwcm9wcy5jb2xvci5kZWZhdWx0ID0gY29sb3JcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tZGlydHknOiBjb21wb25lbnQuaXNEaXJ0eVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IERvbU1peGluIGZyb20gJy4vRG9tTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwdWxsZG93bjoge1xuICAgICAgICBvcGVuOiBmYWxzZSxcbiAgICAgICAgc3RhcnRUaW1lOiAwLFxuICAgICAgICBjaGVja1RpbWU6IHRydWUsXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIG1vdXNlZG93bjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIG1vdXNldXA6ICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9uUHVsbGRvd25Nb3VzZVVwKG51bGwpKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZXJzOiBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblB1bGxkb3duTW91c2VEb3duKHZhbHVlKSB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKHRydWUpXG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGVja1RpbWUgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duTW91c2VVcCh2YWx1ZSkge1xuICAgICAgY29uc3QgeyBzdGFydFRpbWUgfSA9IHRoaXMucHVsbGRvd25cbiAgICAgIGlmICghdGhpcy5jaGVja1RpbWUgfHwgc3RhcnRUaW1lICYmIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lID4gMjUwKSkge1xuICAgICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5vblB1bGxkb3duU2VsZWN0KHZhbHVlKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25TZWxlY3QoLyogdmFsdWUgKi8pIHtcbiAgICAgIC8vIE5PVEU6IFRvIGJlIG92ZXJyaWRkZW4uXG4gICAgfSxcblxuICAgIHNldFB1bGxkb3duT3BlbihvcGVuKSB7XG4gICAgICB0aGlzLnB1bGxkb3duLm9wZW4gPSBvcGVuXG4gICAgICB0aGlzLnB1bGxkb3duLnN0YXJ0VGltZSA9IG9wZW4gPyBEYXRlLm5vdygpIDogMFxuICAgICAgaWYgKG9wZW4pIHtcbiAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHRoaXMucHVsbGRvd24uZXZlbnRzKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1hY2NvdW50XG4gIGEoXG4gICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgKVxuICAgIHNwYW4ge3sgdXNlci51c2VybmFtZSB9fVxuICB1bC5kaXRvLXB1bGxkb3duKFxuICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gIClcbiAgICBsaShcbiAgICAgIHYtZm9yPVwiKGxhYmVsLCB2YWx1ZSkgb2YgaXRlbXNcIlxuICAgIClcbiAgICAgIGEoXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpXCJcbiAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh2YWx1ZSlcIlxuICAgICAgKSB7eyBsYWJlbCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tYWNjb3VudFxuICAgIGEoXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgIClcbiAgICAgIHNwYW4ge3sgdXNlci51c2VybmFtZSB9fVxuICAgIHVsLmRpdG8tcHVsbGRvd24oXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIlxuICAgIClcbiAgICAgIGxpKFxuICAgICAgICB2LWZvcj1cIihsYWJlbCwgdmFsdWUpIG9mIGl0ZW1zXCJcbiAgICAgIClcbiAgICAgICAgYShcbiAgICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHZhbHVlKVwiXG4gICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh2YWx1ZSlcIlxuICAgICAgICApIHt7IGxhYmVsIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tYWNjb3VudFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC5kaXRvLXB1bGxkb3duXG4gICAgICB0b3A6ICRwdWxsZG93bi1wYWRkaW5nLXZlclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUHVsbGRvd25NaXhpbiBmcm9tICcuLi9taXhpbnMvUHVsbGRvd25NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWFjY291bnQnLCB7XG4gIG1peGluczogW1B1bGxkb3duTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiB7XG4gICAgICAgIHNldHRpbmdzOiAnU2V0dGluZ3MnLFxuICAgICAgICBsb2dvdXQ6ICdMb2dvdXQnXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblB1bGxkb3duU2VsZWN0KHZhbHVlKSB7XG4gICAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICBjYXNlICdsb2dvdXQnOlxuICAgICAgICB0aGlzLnJvb3RDb21wb25lbnQubG9nb3V0KClcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3NldHRpbmdzJzpcbiAgICAgICAgY29uc29sZS5pbmZvKCdUT0RPOiBJbXBsZW1lbnQgU2V0dGluZ3MnKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5mb3JtLmRpdG8tZGlhbG9nKEBzdWJtaXQucHJldmVudD1cInN1Ym1pdFwiKVxuICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICApXG4gICAgZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGZvcm0uZGl0by1kaWFsb2coQHN1Ym1pdC5wcmV2ZW50PVwic3VibWl0XCIpXG4gICAgZGl0by1zY2hlbWEuZGl0by1zY3JvbGwoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC52LS1tb2RhbC1vdmVybGF5XG4gICAgei1pbmRleDogMjAwMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNsb25lIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJ0BkaXRvanMvdWknXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWRpYWxvZycsIHtcbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGRpYWxvZ0NvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIGNvbXBvbmVudHM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHByb21pc2U6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIC8vIE1ha2Ugc3VyZSBkaWFsb2cgZGF0YSBjb250YWlucyBhbGwgdGhlIGV4cGVjdGVkIGtleXNcbiAgICBjb25zdCBkaWFsb2dEYXRhID0gY2xvbmUodGhpcy5kYXRhKVxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgaWYgKCEoa2V5IGluIGRpYWxvZ0RhdGEpKSB7XG4gICAgICAgIGRpYWxvZ0RhdGFba2V5XSA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpbmRvd0V2ZW50czogbnVsbCxcbiAgICAgIGRpYWxvZ0RhdGFcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHBhcmVudC5uYW1lXG4gICAgfSxcblxuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbXBvbmVudHM6IHRoaXMuY29tcG9uZW50c1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLmJ1dHRvbnMpKS5tYXAoXG4gICAgICAgICAgLy8gUHJvY2VzcyB0aGUgYnV0dG9uIHNjaGVtYXMgdG8gYWRkIGRlZmF1bHQgY2xpY2sgZXZlbnRzXG4gICAgICAgICAgLy8gZm9yIGJvdGggJ3N1Ym1pdCcgYW5kICdjYW5jZWwnIGJ1dHRvbnM6XG4gICAgICAgICAgKFtrZXksIHNjaGVtYV0pID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdjYW5jZWwnICYmICFzY2hlbWEuZXZlbnRzKSB7XG4gICAgICAgICAgICAgIHNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtrZXksIHNjaGVtYV1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzQ2FuY2VsKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5idXR0b25TY2hlbWFzLmNhbmNlbFxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMud2luZG93RXZlbnRzID0gYWRkRXZlbnRzKHdpbmRvdywge1xuICAgICAga2V5dXA6ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2FuY2VsICYmIGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgdGhpcy5jYW5jZWwoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBkZXN0cm95ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMucmVtb3ZlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGlkZSgpIHtcbiAgICAgIHRoaXMuJG1vZGFsLmhpZGUodGhpcy5uYW1lKVxuICAgIH0sXG5cbiAgICByZXNvbHZlKHZhbHVlKSB7XG4gICAgICB0aGlzLnByb21pc2UucmVzb2x2ZSh2YWx1ZSlcbiAgICAgIHRoaXMuaGlkZSgpXG4gICAgfSxcblxuICAgIHJlamVjdCh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlamVjdCh2YWx1ZSlcbiAgICAgIHRoaXMuaGlkZSgpXG4gICAgfSxcblxuICAgIHN1Ym1pdCgpIHtcbiAgICAgIHRoaXMucmVzb2x2ZSh0aGlzLmRpYWxvZ0RhdGEpXG4gICAgfSxcblxuICAgIGNhbmNlbCgpIHtcbiAgICAgIHRoaXMucmVzb2x2ZShudWxsKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5jb21wb25lbnQoXG4gIHYtaWY9XCJjb250ZW50XCJcbiAgOmlzPVwib3B0aW9ucy50YWcgfHwgdGFnXCJcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIDpzdHlsZT1cInN0eWxlc1wiXG4pIHt7IG9wdGlvbnMudGV4dCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgY29tcG9uZW50KFxuICAgIHYtaWY9XCJjb250ZW50XCJcbiAgICA6aXM9XCJvcHRpb25zLnRhZyB8fCB0YWdcIlxuICAgIDpjbGFzcz1cImNsYXNzZXNcIlxuICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gICkge3sgb3B0aW9ucy50ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lbGVtZW50Jywge1xuICBwcm9wczoge1xuICAgIHRhZzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzcGFuJyB9LFxuICAgIGNvbnRlbnQ6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBvcHRpb25zKCkge1xuICAgICAgY29uc3QgeyBjb250ZW50IH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNPYmplY3QoY29udGVudCkgPyBjb250ZW50IDogeyB0ZXh0OiBjb250ZW50IH1cbiAgICB9LFxuXG4gICAgY2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMuJGF0dHJzLmNsYXNzLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuY2xhc3MpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMuJGF0dHJzLnN0eWxlLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuc3R5bGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5mdW5jdGlvbiBhc09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gYXNBcnJheSh2YWx1ZSkucmVkdWNlKChvYmplY3QsIGVudHJ5KSA9PiB7XG4gICAgaWYgKGlzU3RyaW5nKGVudHJ5KSkge1xuICAgICAgb2JqZWN0W2VudHJ5XSA9IHRydWVcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGVudHJ5KSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmplY3QsIGVudHJ5KVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0XG4gIH0sIHt9KVxufVxuXG48L3NjcmlwdD5cbiIsIlxuY29tcG9uZW50LmRpdG8tbGFiZWwoXG4gIHYtaWY9XCJ0ZXh0IHx8IGNvbGxhcHNpYmxlXCJcbiAgOmlzPVwidGFnXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4pXG4gIC5kaXRvLWNoZXZyb24oXG4gICAgdi1pZj1cImNvbGxhcHNpYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6ICFjb2xsYXBzZWQgfVwiXG4gIClcbiAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtcHJlZml4KFxuICAgIHYtZm9yPVwiKHByZWZpeCwgaW5kZXgpIG9mIHByZWZpeGVzXCJcbiAgICB0YWc9XCJzcGFuXCJcbiAgICA6a2V5PVwiYHByZWZpeC0ke2luZGV4fWBcIlxuICAgIDpjb250ZW50PVwicHJlZml4XCJcbiAgKVxuICBsYWJlbCg6Zm9yPVwiZGF0YVBhdGhcIiB2LWh0bWw9XCJ0ZXh0XCIpXG4gIGRpdG8tZWxlbWVudC5kaXRvLWxhYmVsLXN1ZmZpeChcbiAgICB2LWZvcj1cIihzdWZmaXgsIGluZGV4KSBvZiBzdWZmaXhlc1wiXG4gICAgdGFnPVwic3BhblwiXG4gICAgOmtleT1cImBzdWZmaXgtJHtpbmRleH1gXCJcbiAgICA6Y29udGVudD1cInN1ZmZpeFwiXG4gIClcbiAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBjb21wb25lbnQuZGl0by1sYWJlbChcbiAgICB2LWlmPVwidGV4dCB8fCBjb2xsYXBzaWJsZVwiXG4gICAgOmlzPVwidGFnXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuICApXG4gICAgLmRpdG8tY2hldnJvbihcbiAgICAgIHYtaWY9XCJjb2xsYXBzaWJsZVwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6ICFjb2xsYXBzZWQgfVwiXG4gICAgKVxuICAgIGRpdG8tZWxlbWVudC5kaXRvLWxhYmVsLXByZWZpeChcbiAgICAgIHYtZm9yPVwiKHByZWZpeCwgaW5kZXgpIG9mIHByZWZpeGVzXCJcbiAgICAgIHRhZz1cInNwYW5cIlxuICAgICAgOmtleT1cImBwcmVmaXgtJHtpbmRleH1gXCJcbiAgICAgIDpjb250ZW50PVwicHJlZml4XCJcbiAgICApXG4gICAgbGFiZWwoOmZvcj1cImRhdGFQYXRoXCIgdi1odG1sPVwidGV4dFwiKVxuICAgIGRpdG8tZWxlbWVudC5kaXRvLWxhYmVsLXN1ZmZpeChcbiAgICAgIHYtZm9yPVwiKHN1ZmZpeCwgaW5kZXgpIG9mIHN1ZmZpeGVzXCJcbiAgICAgIHRhZz1cInNwYW5cIlxuICAgICAgOmtleT1cImBzdWZmaXgtJHtpbmRleH1gXCJcbiAgICAgIDpjb250ZW50PVwic3VmZml4XCJcbiAgICApXG4gICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tbGFiZWxcbiAgICAtLWxhYmVsLXBhZGRpbmc6IDBcbiAgICAvLyBGb3IgYnV0dG9ucyBhbmQgY2hldnJvbiB0byBhbGlnbiByaWdodDpcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLy8gVmVydGljYWxseSBjZW50ZXIgYWxsIGl0ZW1zIGluIHRoZSBsYWJlbCwgZS5nLiBjaGV2cm9uLCBlZGl0LWJ1dHRvbnMuXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlclxuICAgIHBhZGRpbmc6IHZhcigtLWxhYmVsLXBhZGRpbmcpXG4gICAgbWFyZ2luOiAwIDAgJGZvcm0tc3BhY2luZy1oYWxmIDBcblxuICAgIGxhYmVsXG4gICAgICBkaXNwbGF5OiBpbmxpbmVcbiAgICAgIGN1cnNvcjogaW5oZXJpdFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcblxuICAgIGxhYmVsLFxuICAgIC5kaXRvLWxhYmVsLXByZWZpeCxcbiAgICAuZGl0by1sYWJlbC1zdWZmaXhcbiAgICAgICY6bnRoLWxhc3QtY2hpbGQoMilcbiAgICAgICAgLy8gVG8gc3RyZXRjaCBlaXRoZXIgbGFiZWwgb3IgLmRpdG8tbGFiZWwtc3VmZml4IHRvIGZ1bGwgYXZhaWxhYmxlIHdpZHRoXG4gICAgICAgIC8vIHNvIHRoYXQgYnV0dG9ucyBhbHdheXMgYXBwZWFyIHJpZ2h0LWFsaWduZWQ6XG4gICAgICAgIGZsZXg6IDEgMSBhdXRvXG4gICAgICAmOjphZnRlclxuICAgICAgICBjb250ZW50OiAnXFxhMCcgLy8gJm5icHM7XG5cbiAgICAuZGl0by1sYWJlbC1wcmVmaXgsXG4gICAgLmRpdG8tbGFiZWwtc3VmZml4XG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAgICtlbGxpcHNpc1xuXG4gICAgLmRpdG8tYnV0dG9uc1xuICAgICAgLy8gTW92ZSB0aGUgbGFiZWwgcGFkZGluZyBpbnNpZGUgLmRpdG8tYnV0dG9ucywgc28gdGhhdCBpdCBjYXB0dXJlcyBhbGxcbiAgICAgIC8vIG5lYXIgbW91c2UgZXZlbnRzOlxuICAgICAgbWFyZ2luOiBjYWxjKC0xICogdmFyKC0tbGFiZWwtcGFkZGluZykpXG4gICAgICBtYXJnaW4tbGVmdDogMFxuICAgICAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZylcblxuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgLy8gSW4gb3JkZXIgZm9yIGVsbGlwc2lzIHRvIHdvcmsgb24gbGFiZWxzIHdpdGhvdXQgYWZmZWN0aW5nIG90aGVyIGxheW91dCxcbiAgICAgIC8vIHdlIG5lZWQgdG8gcG9zaXRpb24gaXQgYWJzb2x1dGVseSBpbnNpZGUgaXRzIGNvbnRhaW5lci5cbiAgICAgIGxhYmVsXG4gICAgICAgICtlbGxpcHNpc1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlXG4gICAgICAmOjphZnRlclxuICAgICAgICAvLyBTaW5jZSA8bGFiZWw+IHVzZXMgYHBvc2l0aW9uOiBhYnNvbHV0ZWAsIHNldCBjb250ZW50IHRvIGEgemVyby13aWR0aFxuICAgICAgICAvLyBzcGFjZSBvbiBpdHMgcGFyZW50IHRvIGVuZm9yY2UgdGhlIHJpZ2h0IHRleHQgaGVpZ2h0IGluIHRoZSBjb250YWluZXJcbiAgICAgICAgY29udGVudDogJ1xcMjAwYicgLy8gemVyby13aWR0aCBzcGFjZVxuXG4gIGEuZGl0by1sYWJlbFxuICAgICY6aG92ZXJcbiAgICAgIC5kaXRvLWNoZXZyb25cbiAgICAgICAgY29sb3I6ICRjb2xvci1kYXJrZXJcbiAgICAmOmZvY3VzOm5vdCg6YWN0aXZlKTpub3QoLmRpdG8tYWN0aXZlKVxuICAgICAgLmRpdG8tY2hldnJvblxuICAgICAgICAtd2Via2l0LXRleHQtc3Ryb2tlOiAkYm9yZGVyLXdpZHRoICRjb2xvci1hY3RpdmVcblxuICAvLyBEaXNwbGF5IGxhYmVscyBpbiBjb21wYWN0IHNjaGVtYSBhcyBpbmxpbmUtYmxvY2tzLCB0byBhbGxvdyBjb21wYWN0IGxheW91dHNcbiAgLy8gd2l0aCBgd2lkdGg6ICdhdXRvJ2AgZWxlbWVudHM6XG4gIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGNvbnRyb2wgdGhpcyBiZWhhdmlvci5cbiAgLmRpdG8tc2NoZW1hLWNvbXBhY3RcbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICA+IC5kaXRvLXBhbmVcbiAgICAgICAgPiAuZGl0by1jb250YWluZXJcbiAgICAgICAgICA+IC5kaXRvLWxhYmVsOm5vdCguZGl0by1sYWJlbC1jb21wb25lbnQpXG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tbGFiZWwnLCB7XG4gIHByb3BzOiB7XG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlID8gJ2EnIDogJ2RpdidcbiAgICB9LFxuXG4gICAgdGV4dCgpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChsYWJlbCkgPyBsYWJlbD8udGV4dCA6IGxhYmVsXG4gICAgfSxcblxuICAgIHByZWZpeGVzKCkge1xuICAgICAgcmV0dXJuIGFzQXJyYXkodGhpcy5sYWJlbD8ucHJlZml4KVxuICAgIH0sXG5cbiAgICBzdWZmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnN1ZmZpeClcbiAgICB9LFxuXG4gICAgbGlzdGVuZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKHRoaXMuY29sbGFwc2libGUgJiYge1xuICAgICAgICAgIGNsaWNrOiB0aGlzLm9uQ2xpY2tcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9PT0gdGhpc1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25DbGljaygpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSB0aGlzXG4gICAgICB0aGlzLiRlbWl0KCdleHBhbmQnLCB0aGlzLmNvbGxhcHNlZClcbiAgICB9XG4gIH1cbn0pXG5cbjwvc2NyaXB0PlxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbUZvcm1TY2hlbWEsIGdldEl0ZW1JZCwgZ2V0SXRlbVVpZCwgaXNMaXN0U291cmNlXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1ldGhvZHM6IHtcbiAgICBnZXRJdGVtRm9ybVNjaGVtYSxcblxuICAgIGdldEl0ZW1VaWQsXG5cbiAgICBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCA9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzVHJhbnNpZW50ICYmIGluZGV4ICE9PSBudWxsXG4gICAgICAgID8gU3RyaW5nKGluZGV4KVxuICAgICAgICA6IGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pXG4gICAgfSxcblxuICAgIGdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSB7XG4gICAgICBsZXQgeyBkYXRhUGF0aCB9ID0gdGhpc1xuICAgICAgaWYgKHNvdXJjZVNjaGVtYSAhPT0gdGhpcy5zY2hlbWEpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc291cmNlU2NoZW1hLm5hbWUpXG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICBkYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBpbmRleClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhUGF0aFxuICAgIH0sXG5cbiAgICBmaW5kSXRlbUlkSW5kZXgoc291cmNlU2NoZW1hLCBkYXRhLCBpdGVtSWQpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICAvLyBGb3IgdHJhbnNpZW50IGRhdGEsIHRoZSBpbmRleCBpcyB1c2VkIGFzIHRoZSBpZFxuICAgICAgICA/IGl0ZW1JZFxuICAgICAgICA6IGRhdGE/LmZpbmRJbmRleChcbiAgICAgICAgICAoaXRlbSwgaW5kZXgpID0+XG4gICAgICAgICAgICB0aGlzLmdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSA9PT0gaXRlbUlkXG4gICAgICAgIClcbiAgICAgIHJldHVybiBpbmRleCAhPT0gLTEgPyBpbmRleCA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0SXRlbUxhYmVsKHNvdXJjZVNjaGVtYSwgaXRlbSwge1xuICAgICAgaW5kZXggPSBudWxsLFxuICAgICAgZXh0ZW5kZWQgPSBmYWxzZSxcbiAgICAgIGFzT2JqZWN0ID0gZmFsc2VcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IHsgaXRlbUxhYmVsIH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgIGlmICghaXRlbSB8fCAhZXh0ZW5kZWQgJiYgaXRlbUxhYmVsID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YVBhdGhcbiAgICAgIGNvbnN0IGdldERhdGFQYXRoID0gKCkgPT5cbiAgICAgICAgKGRhdGFQYXRoIHx8PSB0aGlzLmdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSlcblxuICAgICAgbGV0IGZvcm1MYWJlbFxuICAgICAgY29uc3QgZ2V0Rm9ybUxhYmVsID0gKCkgPT5cbiAgICAgICAgKGZvcm1MYWJlbCB8fD0gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgICBnZXRJdGVtRm9ybVNjaGVtYShzb3VyY2VTY2hlbWEsIGl0ZW0sIHRoaXMuY29udGV4dClcbiAgICAgICAgKSlcblxuICAgICAgbGV0IHRleHRcbiAgICAgIGxldCBwcmVmaXhcbiAgICAgIGxldCBzdWZmaXhcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGl0ZW1MYWJlbCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBpdGVtTGFiZWwuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgaW5kZXgsXG5cbiAgICAgICAgICAgIGdldCBkYXRhUGF0aCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldERhdGFQYXRoKClcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldCBmb3JtTGFiZWwoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRGb3JtTGFiZWwoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgaWYgKGlzT2JqZWN0KGxhYmVsKSkge1xuICAgICAgICAgICh7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gPSBsYWJlbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gbGFiZWxcbiAgICAgICAgfVxuICAgICAgICAvLyBJdCdzIHVwIHRvIGBpdGVtTGFiZWwoKWAgZW50aXJlbHkgdG8gcHJvZHVjZSB0aGUgbGFiZWw6XG4gICAgICAgIGV4dGVuZGVkID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvb2sgdXAgdGhlIG5hbWUgb24gdGhlIGl0ZW0sIGJ5IHRoZXNlIHJ1bGVzOlxuICAgICAgICAvLyAxLiBJZiBgaXRlbUxhYmVsYCBpcyBhIHN0cmluZywgdXNlIGl0IGFzIHRoZSBwcm9wZXJ0eSBrZXlcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgY29sdW1ucywgdXNlIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBzZWUgaWYgdGhlIGl0ZW0gaGFzIGEgcHJvcGVydHkgbmFtZWQgJ25hbWUnXG4gICAgICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gc291cmNlU2NoZW1hXG4gICAgICAgIGNvbnN0IGtleSA9IChcbiAgICAgICAgICBpc1N0cmluZyhpdGVtTGFiZWwpICYmIGl0ZW1MYWJlbCB8fFxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGNvbHVtbnMgJiYgT2JqZWN0LmtleXMoY29sdW1ucylbMF0gfHxcbiAgICAgICAgICAnbmFtZSdcbiAgICAgICAgKVxuICAgICAgICB0ZXh0ID0gaXRlbVtrZXldXG4gICAgICB9XG4gICAgICBjb25zdCBoYWRMYWJlbCA9ICEhdGV4dFxuICAgICAgdGV4dCB8fD0gJydcbiAgICAgIC8vIElmIG5vIGxhYmVsIHdhcyBmb3VuZCBzbyBmYXIsIHRyeSB0byBwcm9kdWNlIG9uZSBmcm9tIHRoZWluZGV4LlxuICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgIC8vIEFsd2F5cyB1c2UgZXh0ZW5kZWQgc3R5bGUgd2hlbiBhdXRvLWdlbmVyYXRpbmcgbGFiZWxzIGZyb20gaW5kZXgvaWQ6XG4gICAgICAgIGV4dGVuZGVkID0gdHJ1ZVxuICAgICAgICBpZiAoaXNMaXN0U291cmNlKHNvdXJjZVNjaGVtYSkgJiYgaW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICB0ZXh0ID0gYCR7aW5kZXggKyAxfWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGV4dGVuZGVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm1MYWJlbCA9IGdldEZvcm1MYWJlbCgpXG4gICAgICAgIGlmIChmb3JtTGFiZWwpIHtcbiAgICAgICAgICAvLyBJZiBhIGxhYmVsIHdhcyBwcm92aWRlZCwgcHV0IGluIHF1b3RlcyB3aGVuIHByZWZpeGVkIHdpdGggdGhlXG4gICAgICAgICAgLy8gZm9ybSBsYWJlbCBmb3IgdGhlIGV4dGVuZGVkIHN0eWxlOlxuICAgICAgICAgIHRleHQgPSBgJHtmb3JtTGFiZWx9ICR7aGFkTGFiZWwgPyBgJyR7dGV4dH0nYCA6IHRleHR9YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXNPYmplY3QgPyB7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gOiB0ZXh0XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLXNjaGVtYVxuICAuZGl0by1zY2hlbWEtY29udGVudFxuICAgIC5kaXRvLXNjaGVtYS1oZWFkZXIoXG4gICAgICB2LWlmPVwiaGFzTGFiZWwgfHwgaGFzVGFicyB8fCBjbGlwYm9hcmRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtbWVudS1oZWFkZXInOiBtZW51SGVhZGVyIH1cIlxuICAgIClcbiAgICAgIGRpdG8tbGFiZWwoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgIDpjb2xsYXBzZWQ9XCIhb3BlbmVkXCJcbiAgICAgICAgQGV4cGFuZD1cIm9uRXhwYW5kXCJcbiAgICAgIClcbiAgICAgICAgLy8gUGFzcyBlZGl0LWJ1dHRvbnMgdGhyb3VnaCB0byBkaXRvLWxhYmVsJ3Mgb3duIGVkaXQtYnV0dG9ucyBzbG90OlxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAjZWRpdC1idXR0b25zXG4gICAgICAgICAgdi1pZj1cImlubGluZWRcIlxuICAgICAgICApXG4gICAgICAgICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4gICAgICBkaXRvLXRhYnMoXG4gICAgICAgIHYtaWY9XCJ0YWJzXCJcbiAgICAgICAgOnRhYnM9XCJ0YWJzXCJcbiAgICAgICAgOnNlbGVjdGVkVGFiPVwic2VsZWN0ZWRUYWJcIlxuICAgICAgKVxuICAgICAgZGl0by1jbGlwYm9hcmQoXG4gICAgICAgIDpjbGlwYm9hcmQ9XCJjbGlwYm9hcmRcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICApXG4gICAgZGl0by1wYW5lLmRpdG8tcGFuZS10YWIoXG4gICAgICB2LWlmPVwiaGFzVGFic1wiXG4gICAgICB2LWZvcj1cIihzY2hlbWEsIHRhYikgaW4gdGFic1wiXG4gICAgICByZWY9XCJ0YWJzXCJcbiAgICAgIDprZXk9XCJ0YWJcIlxuICAgICAgOnZpc2libGU9XCJzZWxlY3RlZFRhYiA9PT0gdGFiXCJcbiAgICAgIDp0YWI9XCJ0YWJcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzTWFpblBhbmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgIClcbiAgICB0cmFuc2l0aW9uLWhlaWdodChcbiAgICAgIDplbmFibGVkPVwiaW5saW5lZFwiXG4gICAgKVxuICAgICAgZGl0by1wYW5lLmRpdG8tcGFuZS1tYWluKFxuICAgICAgICB2LWlmPVwiaGFzTWFpblBhbmUgJiYgb3BlbmVkXCJcbiAgICAgICAgcmVmPVwiY29tcG9uZW50c1wiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNUYWJzXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgc2xvdChcbiAgICAgIG5hbWU9XCJidXR0b25zXCJcbiAgICAgIHYtaWY9XCIhaW5saW5lZCAmJiBpc1BvcHVsYXRlZFwiXG4gICAgKVxuICB0ZW1wbGF0ZSh2LWlmPVwiaW5saW5lZFwiKVxuICAgIHNsb3QoXG4gICAgICB2LWlmPVwiIWhhc0xhYmVsXCJcbiAgICAgIG5hbWU9XCJlZGl0LWJ1dHRvbnNcIlxuICAgIClcbiAgdGVtcGxhdGUodi1lbHNlLWlmPVwiaXNQb3B1bGF0ZWRcIilcbiAgICBkaXRvLXBhbmVscyhcbiAgICAgIDpwYW5lbHM9XCJwYW5lbFNjaGVtYXNcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2NoZW1hXG4gICAgLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgIC5kaXRvLXNjaGVtYS1oZWFkZXIoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbCB8fCBoYXNUYWJzIHx8IGNsaXBib2FyZFwiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLW1lbnUtaGVhZGVyJzogbWVudUhlYWRlciB9XCJcbiAgICAgIClcbiAgICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgICAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgIDpjb2xsYXBzZWQ9XCIhb3BlbmVkXCJcbiAgICAgICAgICBAZXhwYW5kPVwib25FeHBhbmRcIlxuICAgICAgICApXG4gICAgICAgICAgLy8gUGFzcyBlZGl0LWJ1dHRvbnMgdGhyb3VnaCB0byBkaXRvLWxhYmVsJ3Mgb3duIGVkaXQtYnV0dG9ucyBzbG90OlxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgI2VkaXQtYnV0dG9uc1xuICAgICAgICAgICAgdi1pZj1cImlubGluZWRcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuICAgICAgICBkaXRvLXRhYnMoXG4gICAgICAgICAgdi1pZj1cInRhYnNcIlxuICAgICAgICAgIDp0YWJzPVwidGFic1wiXG4gICAgICAgICAgOnNlbGVjdGVkVGFiPVwic2VsZWN0ZWRUYWJcIlxuICAgICAgICApXG4gICAgICAgIGRpdG8tY2xpcGJvYXJkKFxuICAgICAgICAgIDpjbGlwYm9hcmQ9XCJjbGlwYm9hcmRcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICApXG4gICAgICBkaXRvLXBhbmUuZGl0by1wYW5lLXRhYihcbiAgICAgICAgdi1pZj1cImhhc1RhYnNcIlxuICAgICAgICB2LWZvcj1cIihzY2hlbWEsIHRhYikgaW4gdGFic1wiXG4gICAgICAgIHJlZj1cInRhYnNcIlxuICAgICAgICA6a2V5PVwidGFiXCJcbiAgICAgICAgOnZpc2libGU9XCJzZWxlY3RlZFRhYiA9PT0gdGFiXCJcbiAgICAgICAgOnRhYj1cInRhYlwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNNYWluUGFuZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgICAgdHJhbnNpdGlvbi1oZWlnaHQoXG4gICAgICAgIDplbmFibGVkPVwiaW5saW5lZFwiXG4gICAgICApXG4gICAgICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtbWFpbihcbiAgICAgICAgICB2LWlmPVwiaGFzTWFpblBhbmUgJiYgb3BlbmVkXCJcbiAgICAgICAgICByZWY9XCJjb21wb25lbnRzXCJcbiAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc1RhYnNcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIG5hbWU9XCJidXR0b25zXCJcbiAgICAgICAgdi1pZj1cIiFpbmxpbmVkICYmIGlzUG9wdWxhdGVkXCJcbiAgICAgIClcbiAgICB0ZW1wbGF0ZSh2LWlmPVwiaW5saW5lZFwiKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cIiFoYXNMYWJlbFwiXG4gICAgICAgIG5hbWU9XCJlZGl0LWJ1dHRvbnNcIlxuICAgICAgKVxuICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImlzUG9wdWxhdGVkXCIpXG4gICAgICBkaXRvLXBhbmVscyhcbiAgICAgICAgOnBhbmVscz1cInBhbmVsU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXNjaGVtYVxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAvLyBUbyBkaXNwbGF5IHNjaGVtYSBuZXh0IHRvIHBhbmVsczpcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgbWluLWhlaWdodDogMTAwJVxuICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgIGZsZXg6IDEgMSAxMDAlXG4gICAgICAvLyBTbyB0aGF0IHNjaGVtYSBidXR0b25zIGNhbiBiZSBzdGlja3kgdG8gdGhlIGJvdHRvbTpcbiAgICAgIGRpc3BsYXk6IGdyaWRcbiAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnRcbiAgICAgID4gKjpvbmx5LWNoaWxkXG4gICAgICAgIGdyaWQtcm93LWVuZDogbm9uZVxuICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aFxuICAgICAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZ1xuICAgID4gLmRpdG8tYnV0dG9ucyxcbiAgICA+IC5kaXRvLXBhbmVsc1xuICAgICAgZmxleDogMSAxIDAlXG4gICAgPiAuZGl0by1idXR0b25zXG4gICAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZ1xuICAgID4gLmRpdG8tcGFuZWxzXG4gICAgICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nICRjb250ZW50LXBhZGRpbmcgJGNvbnRlbnQtcGFkZGluZyAwXG4gICAgLy8gRGlzcGxheSBhIHJ1bGVyIGJldHdlZW4gdGFiYmVkIGNvbXBvbmVudHMgYW5kIHRvd2FyZHMgdGhlIC5kaXRvLWJ1dHRvbnNcbiAgICAuZGl0by1wYW5lLXRhYiArIC5kaXRvLXBhbmUtbWFpblxuICAgICAgJjo6YmVmb3JlXG4gICAgICAgIC8vIFVzZSBhIHBzZXVkbyBlbGVtZW50IHRvIGRpc3BsYXkgYSBydWxlciB3aXRoIHByb3BlciBtYXJnaW5zXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIGNvbnRlbnQ6ICcnXG4gICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGVcbiAgICAgICAgLy8gQWRkIHJlbW92ZWQgJGZvcm0tc3BhY2luZyBhZ2FpbiB0byB0aGUgcnVsZXJcbiAgICAgICAgbWFyZ2luOiAkY29udGVudC1wYWRkaW5nICRmb3JtLXNwYWNpbmctaGFsZiAkZm9ybS1zcGFjaW5nLWhhbGZcbiAgLmRpdG8tc2NoZW1hLWhlYWRlclxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW5cbiAgICAuZGl0by10YWJzLFxuICAgIC5kaXRvLWNsaXBib2FyZFxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmRcbiAgICAuZGl0by1jbGlwYm9hcmRcbiAgICAgICY6b25seS1jaGlsZFxuICAgICAgICBtYXJnaW4tbGVmdDogYXV0b1xuICAgICAgLmRpdG8tYnV0dG9uXG4gICAgICAgIG1hcmdpbjogMCAwICR0YWItbWFyZ2luICR0YWItbWFyZ2luXG4gICAgJi5kaXRvLXNjaGVtYS1tZW51LWhlYWRlclxuICAgICAgLy8gQnJpbmcgdGhlIHRhYnMgdXAgdG8gdGhlIG1lbnUuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIGhlaWdodDogJG1lbnUtaGVpZ2h0XG4gICAgICBwYWRkaW5nOiAwICRtZW51LXBhZGRpbmctaG9yXG4gICAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoXG4gICAgICB0b3A6IDBcbiAgICAgIGxlZnQ6IDBcbiAgICAgIHJpZ2h0OiAwXG4gICAgICB6LWluZGV4OiAkbWVudS16LWluZGV4XG4gICAgICAvLyBUdXJuIG9mZiBwb2ludGVyIGV2ZW50cyBzbyB0aGF0IERpdG9UcmFpbCBrZWVwcyByZWNlaXZpbmcgZXZlbnRzLi4uXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZVxuICAgICAgLy8gLi4uYnV0IGFsbG93IGludGVyYWN0aW9uIHdpdGggdGhlIHRhYnMgYW5kIGJ1dHRvbnMgKGUuZy4gY2xpcGJvYXJkKVxuICAgICAgLy8gbGF5ZXJlZCBvbiB0b3Agb2YgRGl0b1RyYWlsLlxuICAgICAgLmRpdG8tdGFicyxcbiAgICAgIC5kaXRvLWJ1dHRvbnNcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG9cbiAgICAgICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0XG4gICAgICAgIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplXG4gICAgYnV0dG9uLmRpdG8tbGFiZWxcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAvLyBDYXRjaCBhbGwgY2xpY2tzLCBldmVuIHdoZW4gaXQgd291bGQgYmUgcGFydGlhbGx5IGNvdmVyZWQgYnkgc2NoZW1hLlxuICAgICAgei1pbmRleDogMVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0FycmF5LCBpc0Z1bmN0aW9uLCBpc1JlZ0V4cCxcbiAgcGFyc2VEYXRhUGF0aCwgbm9ybWFsaXplRGF0YVBhdGgsIGxhYmVsaXplXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBUcmFuc2l0aW9uSGVpZ2h0IH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBnZXROYW1lZFNjaGVtYXMsIGdldFBhbmVsU2NoZW1hcywgc2V0RGVmYXVsdHMsIHByb2Nlc3NEYXRhXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXNjaGVtYScsIHtcbiAgY29tcG9uZW50czogeyBUcmFuc2l0aW9uSGVpZ2h0IH0sXG4gIG1peGluczogW0l0ZW1NaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNjaGVtYUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBpbmplY3Q6IFtcbiAgICAnJHNjaGVtYVBhcmVudENvbXBvbmVudCdcbiAgXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgaW5saW5lZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgaGFzT3duRGF0YTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG1lbnVIZWFkZXI6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLnNjaGVtYVxuICAgIHJldHVybiB7XG4gICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gcHJvdmlkZSBtb3JlIGRhdGEgdGhyb3VnaCBgc2NoZW1hLmRhdGFgLCB2dWUtc3R5bGU6XG4gICAgICAuLi4oXG4gICAgICAgIGRhdGEgJiYgaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICAgID8gZGF0YS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICA6IGRhdGFcbiAgICAgICksXG4gICAgICBjb21wb25lbnRzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZXNSZWdpc3RyeToge30sXG4gICAgICBwYW5lbHNSZWdpc3RyeToge31cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyBzY2hlbWFDb21wb25lbnQoKSB3aGljaCB1c2VzIHRoZSBpbmplY3RlZCB2YWx1ZS5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHBhcmVudFNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIERvbid0IHJldHVybiB0aGUgYWN0dWFsIHBhcmVudCBzY2hlbWEgaXMgdGhpcyBzY2hlbWEgaGFuZGxlcyBpdHMgb3duXG4gICAgICAvLyBkYXRhLiBUaGlzIHByZXZlbnRzIGRlbGVnYXRpbmcgZXZlbnRzIHRvIHRoZSBwYXJlbnQsIGFuZCByZWdpc3RlcmluZ1xuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIHRoZSBwYXJlbnQgdGhhdCB3b3VsZCBjYXVzZSBpdCB0byBzZXQgaXNEaXJ0eSBmbGFncy5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyBudWxsIDogdGhpcy4kcGFyZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYXMoKSB7XG4gICAgICBjb25zdCBwYW5lbHMgPSBnZXRQYW5lbFNjaGVtYXModGhpcy5zY2hlbWEucGFuZWxzLCAnJylcbiAgICAgIGZvciAoY29uc3QgcGFuZSBvZiB0aGlzLnBhbmVzKSB7XG4gICAgICAgIHBhbmVscy5wdXNoKC4uLnBhbmUucGFuZWxTY2hlbWFzKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHBhbmVsc1xuICAgIH0sXG5cbiAgICB0YWJzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS50YWJzKVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYigpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRUYWIgPSB0aGlzLiRyb3V0ZS5oYXNoPy5zbGljZSgxKSB8fCBudWxsXG4gICAgICBjb25zdCB0YWIgPSBjdXJyZW50VGFiICYmIHRoaXMuc2hvdWxkUmVuZGVyKHRoaXMudGFic1tjdXJyZW50VGFiXSlcbiAgICAgICAgPyBjdXJyZW50VGFiXG4gICAgICAgIDogdGhpcy5kZWZhdWx0VGFiPy5uYW1lIHx8IG51bGxcbiAgICAgIGlmICh0YWIgIT09IGN1cnJlbnRUYWIpIHtcbiAgICAgICAgLy8gQW55IHRhYiBjaGFuZ2UgbmVlZHMgdG8gYmUgcmVmbGVjdGVkIGluIHRoZSByb3V0ZXIgYWxzby5cbiAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBoYXNoOiB0YWIgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB0YWJcbiAgICB9LFxuXG4gICAgZGVmYXVsdFRhYigpIHtcbiAgICAgIGlmICh0aGlzLnRhYnMpIHtcbiAgICAgICAgbGV0IGZpcnN0ID0gbnVsbFxuICAgICAgICBmb3IgKGNvbnN0IHRhYiBvZiBPYmplY3QudmFsdWVzKHRoaXMudGFicykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRUYWIgfSA9IHRhYlxuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGRlZmF1bHRUYWIpXG4gICAgICAgICAgICA/IGRlZmF1bHRUYWIuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgICA6IGRlZmF1bHRUYWJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0YWJcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgZmlyc3QgPSB0YWJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpcnN0XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsaXBib2FyZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYT8uY2xpcGJvYXJkXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGF0YSh7IHRhcmdldDogJ3NlcnZlcicsIHNjaGVtYU9ubHk6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkRGF0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICRzY2hlbWE6IHRoaXMuc2NoZW1hLm5hbWUsXG4gICAgICAgIC4uLnRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdjbGlwYm9hcmQnLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgc2ltaWxhciB0byBgRGl0b0NvbnRleHRgXG4gICAgLy8gcHJvcGVydGllcywgc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZXNlIG9uIGB0aGlzYCBhcyB3ZWxsOlxuICAgIC8vIE5PVEU6IFdoaWxlIGludGVybmFsbHksIHdlIHNwZWFrIG9mIGBkYXRhYCwgaW4gdGhlIEFQSSBzdXJmYWNlIHRoZVxuICAgIC8vIHRlcm0gYGl0ZW1gIGlzIHVzZWQgZm9yIHRoZSBkYXRhIHRoYXQgcmVsYXRlcyB0byBlZGl0aW5nIG9iamVjdHMuXG4gICAgLy8gTk9URTogVGhpcyBzaG91bGQgYWx3YXlzIHJldHVybiB0aGUgc2FtZSBhczpcbiAgICAvLyByZXR1cm4gZ2V0SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICByb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3REYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWREYXRhXG4gICAgfSxcblxuICAgIGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGlwYm9hcmREYXRhXG4gICAgfSxcblxuICAgIHBhcmVudEl0ZW0oKSB7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICB9LFxuXG4gICAgZm9ybUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwoXG4gICAgICAgIHRoaXMuZ2V0SXRlbUZvcm1TY2hlbWEodGhpcy5zb3VyY2VTY2hlbWEsIHRoaXMuZGF0YSwgdGhpcy5jb250ZXh0KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5pc0RpcnR5KVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzVG91Y2hlZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZXJ5Q29tcG9uZW50KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZGF0ZWQpXG4gICAgfSxcblxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmxhYmVsIHx8IHRoaXMuY29sbGFwc2libGVcbiAgICB9LFxuXG4gICAgaGFzVGFicygpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pbmxpbmVkICYmICEhdGhpcy50YWJzXG4gICAgfSxcblxuICAgIGhhc01haW5QYW5lKCkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnRzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuICEhY29tcG9uZW50cyAmJiBPYmplY3Qua2V5cyhjb21wb25lbnRzKS5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIG9wZW5lZDogZ2V0U3RvcmVBY2Nlc3Nvcignb3BlbmVkJywge1xuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmNvbGxhcHNlZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50cygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucGFuZXNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZWxzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lbHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgY29tcG9uZW50c0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lc0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZXNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZWxzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNSZWdpc3RyeSlcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICAgIC8vIERlbGVnYXRlIGNoYW5nZSBldmVudHMgdGhyb3VnaCB0byBwYXJlbnQgc2NoZW1hOlxuICAgIHRoaXMuZGVsZWdhdGUoJ2NoYW5nZScsIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50KVxuICAgIHRoaXMuZW1pdEV2ZW50KCdpbml0aWFsaXplJykgLy8gTm90IGAnY3JlYXRlJ2AsIHNpbmNlIHRoYXQncyBmb3IgZGF0YS5cbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuZW1pdEV2ZW50KCdkZXN0cm95JylcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgoXG4gICAgICAgIHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudHNCeU5hbWUoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5TmFtZSh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5TmFtZShuYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnQoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZWxzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRQYW5lbEJ5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRQYW5lbHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllcyh0aGlzLnBhbmVsc0J5RGF0YVBhdGgsIGRhdGFQYXRoT3JOYW1lLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWwoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQYW5lbHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIHNvbWVDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5zb21lKGNhbGxiYWNrKVxuICAgIH0sXG5cbiAgICBldmVyeUNvbXBvbmVudChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNQb3B1bGF0ZWQgJiYgdGhpcy5jb21wb25lbnRzLmV2ZXJ5KGNhbGxiYWNrKVxuICAgIH0sXG5cbiAgICBvbkV4cGFuZChleHBhbmQpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdleHBhbmQnLCB7XG4gICAgICAgIC8vIFRPRE86IEFjdHVhbGx5IGV4cG9zZSB0aGlzIG9uIERpdG9Db250ZXh0P1xuICAgICAgICBjb250ZXh0OiB7IGV4cGFuZCB9XG4gICAgICB9KVxuICAgICAgLy8gUHJldmVudCBjbG9zaW5nIHRoZSBzY2hlbWEgd2l0aCBpbnZhbGlkIGRhdGEsIHNpbmNlIHRoZSBpbi1jb21wb25lbnRcbiAgICAgIC8vIHZhbGlkYXRpb24gd2lsbCBub3QgYmUgZXhlY3V0ZWQgb25jZSBpdCdzIGNsb3NlZC5cblxuICAgICAgLy8gVE9ETzogTW92ZSB2YWxpZGF0aW9uIG91dCBvZiBjb21wb25lbnRzLCB0byBzY2hlbWEsIGp1c3QgbGlrZVxuICAgICAgLy8gcHJvY2Vzc2luZywgYW5kIHVzZSBgc2hvd1ZhbGlkYXRpb25FcnJvcnMoKWAgZm9yIHRoZSByZXN1bHRpbmcgZXJyb3JzLFxuICAgICAgLy8gdGhlbiByZW1vdmUgdGhpcyByZXF1aXJlbWVudCwgc2luY2Ugd2UgY2FuIHZhbGlkYXRlIGNsb3NlZCBmb3JtcyBhbmRcbiAgICAgIC8vIHNjaGVtYXMgdGhlbi5cbiAgICAgIGlmICghdGhpcy5vcGVuZWQgfHwgZXhwYW5kIHx8IHRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICB0aGlzLm9wZW5lZCA9IGV4cGFuZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdjaGFuZ2UnKVxuICAgIH0sXG5cbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICAgIGNvbXBvbmVudC5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/LmZvY3VzKClcbiAgICAgIHRoaXMub3BlbmVkID0gdHJ1ZVxuICAgIH0sXG5cbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnRzQnlEYXRhUGF0aCB9ID0gdGhpc1xuICAgICAgbGV0IGRhdGFQYXRoc1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrID0gaXNGdW5jdGlvbihtYXRjaClcbiAgICAgICAgICA/IG1hdGNoXG4gICAgICAgICAgOiBpc1JlZ0V4cChtYXRjaClcbiAgICAgICAgICAgID8gZmllbGQgPT4gbWF0Y2gudGVzdChmaWVsZClcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBkYXRhUGF0aHMgPSBjaGVja1xuICAgICAgICAgID8gT2JqZWN0LmtleXMoY29tcG9uZW50c0J5RGF0YVBhdGgpLmZpbHRlcihjaGVjaylcbiAgICAgICAgICA6IGlzQXJyYXkobWF0Y2gpXG4gICAgICAgICAgICA/IG1hdGNoXG4gICAgICAgICAgICA6IFttYXRjaF1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWVcbiAgICAgIGxldCBmaXJzdCA9IHRydWVcbiAgICAgIGRhdGFQYXRocyB8fD0gT2JqZWN0LmtleXMoY29tcG9uZW50c0J5RGF0YVBhdGgpXG4gICAgICBmb3IgKGNvbnN0IGRhdGFQYXRoIG9mIGRhdGFQYXRocykge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgIGlmICghY29tcG9uZW50LnZhbGlkYXRlKG5vdGlmeSkpIHtcbiAgICAgICAgICAgIC8vIEZvY3VzIGZpcnN0IGVycm9yIGZpZWxkXG4gICAgICAgICAgICBpZiAobm90aWZ5ICYmIGZpcnN0KSB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudC5mb2N1cygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkgJiYgIWlzVmFsaWQpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFsbChtYXRjaCwgZmFsc2UpXG4gICAgfSxcblxuICAgIGFzeW5jIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgbGV0IGZpcnN0ID0gdHJ1ZVxuICAgICAgY29uc3QgdW5tYXRjaGVkID0gW11cbiAgICAgIGZvciAoY29uc3QgW2RhdGFQYXRoLCBlcnJzXSBvZiBPYmplY3QuZW50cmllcyhlcnJvcnMpKSB7XG4gICAgICAgIC8vIElmIHRoZSBzY2hlbWEgaXMgYSBkYXRhLXJvb3QsIHByZWZpeCBpdHMgb3duIGRhdGFQYXRoIHRvIGFsbCBlcnJvcnMsXG4gICAgICAgIC8vIHNpbmNlIHRoZSBkYXRhIHRoYXQgaXQgc2VuZHMgYW5kIHZhbGlkYXRlcyB3aWxsIGJlIHVucHJlZml4ZWQuXG4gICAgICAgIGNvbnN0IGZ1bGxEYXRhUGF0aCA9IHRoaXMuaGFzT3duRGF0YVxuICAgICAgICAgID8gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgICAgICAgOiBkYXRhUGF0aFxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLCB0aGlzLmRhdGFQYXRoLCB0aGlzLmhhc093bkRhdGEsIGZ1bGxEYXRhUGF0aClcbiAgICAgICAgLy8gQ29udmVydCBmcm9tIEphdmFTY3JpcHQgcHJvcGVydHkgYWNjZXNzIG5vdGF0aW9uLCB0byBvdXIgb3duIGZvcm1cbiAgICAgICAgLy8gb2YgcmVsYXRpdmUgSlNPTiBwb2ludGVycyBhcyBkYXRhLXBhdGhzOlxuICAgICAgICBjb25zdCBkYXRhUGF0aFBhcnRzID0gcGFyc2VEYXRhUGF0aChmdWxsRGF0YVBhdGgpXG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoUGFydHMpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycnMsIGZpcnN0ICYmIGZvY3VzKSkge1xuICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAvLyBDb3VsZG4ndCBmaW5kIGEgY29tcG9uZW50IGluIGFuIGFjdGl2ZSBmb3JtIGZvciB0aGUgZ2l2ZW4gZGF0YVBhdGguXG4gICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgY29tcG9uZW50IHNlcnZpbmcgYSBwYXJ0IG9mIHRoZSBkYXRhUGF0aCxcbiAgICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIHdoaWxlIChkYXRhUGF0aFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoUGFydHMpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgIGlmIChhd2FpdCBjb21wb25lbnQubmF2aWdhdGVUb0NvbXBvbmVudD8uKFxuICAgICAgICAgICAgICAgIGZ1bGxEYXRhUGF0aCxcbiAgICAgICAgICAgICAgICBzdWJDb21wb25lbnRzID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBzdWJDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycnMgPSBlcnJvcnNbY29tcG9uZW50LmRhdGFQYXRoXVxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgZXJycyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cylcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICAvLyBGb3VuZCBhIG5lc3RlZCBmb3JtIHRvIGRpc3BsYXkgYXQgbGVhc3QgcGFydHMgZm8gdGhlIGVycm9ycy5cbiAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBzaG93IGFsbCBlcnJvcnMgYXQgb25jZSwgc28gd2UncmUgZG9uZS4gRG9uJ3QgY2FsbFxuICAgICAgICAgICAgICAgIC8vIGBub3RpZnlFcnJvcnMoKWAgeWV0LCBhcyB3ZSBjYW4gb25seSBkaXNwbGF5IGl0IG9uY2VcbiAgICAgICAgICAgICAgICAvLyBgc2hvd1ZhbGlkYXRpb25FcnJvcnMoKWAgd2FzIGNhbGxlZCBmcm9tIGBEaXRvRm9ybS5tb3VudGVkKClgXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFN0aWxsIGhlcmUsIHNvIGtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgICBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFdoZW4gdGhlIGVycm9yIGNhbid0IGJlIG1hdGNoZWQsIGFkZCBpdCB0byBhIGxpc3Qgb2YgdW5tYXRjaGVkXG4gICAgICAgICAgLy8gZXJyb3JzIHdpdGggZGVjZW50IG1lc3NhZ2UsIHRvIHJlcG9ydCBhdCB0aGUgZW5kLlxuICAgICAgICAgIGNvbnN0IGZpZWxkID0gbGFiZWxpemUocHJvcGVydHkpXG4gICAgICAgICAgZm9yIChjb25zdCBlcnIgb2YgZXJycykge1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ID0gZmllbGRcbiAgICAgICAgICAgICAgPyBgVGhlIGZpZWxkICR7ZmllbGR9YFxuICAgICAgICAgICAgICA6IGBUaGUgJHt0aGlzLmZvcm1MYWJlbH1gXG4gICAgICAgICAgICB1bm1hdGNoZWQucHVzaChgJHtwcmVmaXh9ICR7ZXJyLm1lc3NhZ2V9YClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgfVxuICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICB0aGlzLm5vdGlmeUVycm9ycyh1bm1hdGNoZWQuam9pbignXFxuJykpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG5vdGlmeUVycm9ycyhtZXNzYWdlKSB7XG4gICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIHRpdGxlOiAnVmFsaWRhdGlvbiBFcnJvcnMnLFxuICAgICAgICB0ZXh0OiBtZXNzYWdlIHx8ICdQbGVhc2UgY29ycmVjdCB0aGUgaGlnaGxpZ2h0ZWQgZXJyb3JzLidcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHJlc2V0RGF0YSgpIHtcbiAgICAgIC8vIFdlIGNhbid0IHNldCBgdGhpcy5kYXRhID0gLi4uYCBiZWNhdXNlIGl0J3MgYSBwcm9wZXJ0eSwgYnV0IHdlIGNhblxuICAgICAgLy8gc2V0IGFsbCBrbm93biBwcm9wZXJ0aWVzIG9uIGl0IHRvIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnlcbiAgICAgIC8vIGBzZXREZWZhdWx0cygpYCwgYXMgdGhleSBhcmUgYWxsIHJlYWN0aXZlIGFscmVhZHkgZnJvbSB0aGUgc3RhcnRzOlxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmRhdGEsIHNldERlZmF1bHRzKHRoaXMuc2NoZW1hLCB7fSwgdGhpcykpXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gZGF0YSkge1xuICAgICAgICBpZiAobmFtZSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICB0aGlzLiRzZXQodGhpcy5kYXRhLCBuYW1lLCBkYXRhW25hbWVdKVxuICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKSkge1xuICAgICAgICAgICAgY29tcG9uZW50Lm1hcmtEaXJ0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZpbHRlckRhdGEoZGF0YSkge1xuICAgICAgLy8gRmlsdGVycyBvdXQgYXJyYXlzIGFuZCBvYmplY3RzIHRoYXQgYXJlIGJhY2sgYnkgZGF0YSByZXNvdXJjZXNcbiAgICAgIC8vIHRoZW1zZWx2ZXMsIGFzIHRob3NlIGFyZSBhbHJlYWR5IHRha2luZyBjYXJlIG9mIHRocm91Z2ggdGhlaXIgb3duIEFQSVxuICAgICAgLy8gcmVzb3VyY2UgZW5kLXBvaW50cyBhbmQgc2hvdWxkbid0IGJlIHNldC5cbiAgICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpXG4gICAgICAgICAgaWYgKGNvbXBvbmVudHMuc29tZShjb21wb25lbnQgPT4gY29tcG9uZW50LnByb3ZpZGVzRGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvcHlbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvcHlcbiAgICB9LFxuXG4gICAgcHJvY2Vzc0RhdGEoeyB0YXJnZXQgPSAnY2xpcGJvYXJkJywgc2NoZW1hT25seSA9IHRydWUgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gcHJvY2Vzc0RhdGEoXG4gICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICB0aGlzLmRhdGFQYXRoLCB7XG4gICAgICAgICAgLy8gTmVlZGVkIGZvciBEaXRvQ29udGV4dCBoYW5kbGluZyBpbnNpZGUgYHByb2Nlc3NEYXRhYCBhbmRcbiAgICAgICAgICAvLyBgcHJvY2Vzc1NjaGVtYURhdGEoKWA6XG4gICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgIHNjaGVtYU9ubHksXG4gICAgICAgICAgdGFyZ2V0XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnQoKWAgaXMgb25seSBzZXQgaWYgb25lIG9mIHRoZSBhbmNlc3RvcnMgdXNlc1xuICAgICAgLy8gdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgICB0aGlzLiRzY2hlbWFQYXJlbnRDb21wb25lbnQoKT8uX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5LCBjb21wb25lbnQsIGFkZClcbiAgICAgIC8vIE9ubHkgcmVnaXN0ZXIgd2l0aCB0aGUgcGFyZW50IGlmIHNjaGVtYSBzaGFyZXMgZGF0YSB3aXRoIGl0LlxuICAgICAgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/Ll9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZShwYW5lLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lc1JlZ2lzdHJ5LCBwYW5lLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmVsKHBhbmVsLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lbHNSZWdpc3RyeSwgcGFuZWwsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyRW50cnkocmVnaXN0cnksIGVudHJ5LCBhZGQpIHtcbiAgICAgIGNvbnN0IHVpZCA9IGVudHJ5LiR1aWRcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgdGhpcy4kc2V0KHJlZ2lzdHJ5LCB1aWQsIGVudHJ5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4kZGVsZXRlKHJlZ2lzdHJ5LCB1aWQpXG4gICAgICB9XG4gICAgfSxcblxuICAgIF9saXN0RW50cmllc0J5RGF0YVBhdGgocmVnaXN0cnkpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJlZ2lzdHJ5KS5yZWR1Y2UoKGVudHJpZXNCeURhdGFQYXRoLCBlbnRyeSkgPT4ge1xuICAgICAgICAvLyBNdWx0aXBsZSBlbnRyaWVzIGNhbiBiZSBsaW5rZWQgdG8gdGhlIHNhbWUgZGF0YS1wYXRoLCBlLmcuIHdoZW5cbiAgICAgICAgLy8gdGhlcmUgYXJlIHRhYnMuIExpbmsgZWFjaCBkYXRhLXBhdGggdG8gYW4gYXJyYXkgb2YgZW50cmllcy5cbiAgICAgICAgY29uc3QgeyBkYXRhUGF0aCB9ID0gZW50cnlcbiAgICAgICAgY29uc3QgZW50cmllcyA9IGVudHJpZXNCeURhdGFQYXRoW2RhdGFQYXRoXSB8fD0gW11cbiAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgICByZXR1cm4gZW50cmllc0J5RGF0YVBhdGhcbiAgICAgIH0sIHt9KVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllcyhlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgPyB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgICAgICA6IHRoaXMuX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJFbnRyaWVzKFxuICAgICAgICBlbnRyaWVzQnlEYXRhUGF0aFtub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCldIHx8IFtdLFxuICAgICAgICBtYXRjaFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgbmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJFbnRyaWVzKFxuICAgICAgICBlbnRyaWVzQnlEYXRhUGF0aFthcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKV0gfHwgW10sXG4gICAgICAgIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIF9maWx0ZXJFbnRyaWVzKGVudHJpZXMsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gbWF0Y2ggPyBlbnRyaWVzLmZpbHRlcihtYXRjaCkgOiBlbnRyaWVzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmRpdG8tc2NoZW1hLmRpdG8tc2NoZW1hLWlubGluZWQoXG4gIDpzY2hlbWE9XCJzY2hlbWFcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgOmxhYmVsPVwiaXNDb21wYWN0ID8gbnVsbCA6IGxhYmVsXCJcbiAgOmlubGluZWQ9XCJ0cnVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1jb21wYWN0JzogaXNDb21wYWN0IH1cIlxuKVxuICAvLyBSZW5kZXIgZGl0by1lZGl0LWJ1dHRvbnMgZm9yIGlubGluZWQgc2hlbWFzIHNlcGFyYXRlbHkgZnJvbSBhbGxcbiAgLy8gb3RoZXJzIGluIGBUeXBlTGlzdGAgYXMgYSBzY29wZSwgZm9yIGJldHRlciBoYW5kbGluZyBvZiBsYXlvdXQuXG4gIHRlbXBsYXRlKCNlZGl0LWJ1dHRvbnMpXG4gICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICB2LWlmPVwiZGVsZXRhYmxlIHx8IGRyYWdnYWJsZSB8fCBlZGl0YWJsZVwiXG4gICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIEBkZWxldGU9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGRpdG8tc2NoZW1hLmRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmxhYmVsPVwiaXNDb21wYWN0ID8gbnVsbCA6IGxhYmVsXCJcbiAgICA6aW5saW5lZD1cInRydWVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtY29tcGFjdCc6IGlzQ29tcGFjdCB9XCJcbiAgKVxuICAgIC8vIFJlbmRlciBkaXRvLWVkaXQtYnV0dG9ucyBmb3IgaW5saW5lZCBzaGVtYXMgc2VwYXJhdGVseSBmcm9tIGFsbFxuICAgIC8vIG90aGVycyBpbiBgVHlwZUxpc3RgIGFzIGEgc2NvcGUsIGZvciBiZXR0ZXIgaGFuZGxpbmcgb2YgbGF5b3V0LlxuICAgIHRlbXBsYXRlKCNlZGl0LWJ1dHRvbnMpXG4gICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgdi1pZj1cImRlbGV0YWJsZSB8fCBkcmFnZ2FibGUgfHwgZWRpdGFibGVcIlxuICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIEBkZWxldGU9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXNjaGVtYS1pbmxpbmVkXG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgcGFkZGluZzogMFxuICAgICAgPiAuZGl0by1zY2hlbWEtaGVhZGVyXG4gICAgICAgIC8vIENoYW5nZSBzcGFjaW5nIHNvIC5kaXRvLWxhYmVsIGNvdmVycyB0aGUgZnVsbCAuZGl0by1zY2hlbWEtaGVhZGVyLlxuICAgICAgICBtYXJnaW46IC0kZm9ybS1zcGFjaW5nXG4gICAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgICAgLy8gQWRkIHJlbW92ZWQgJGZvcm0tc3BhY2luZyBhZ2FpblxuICAgICAgICAgIC0tbGFiZWwtcGFkZGluZzogI3skZm9ybS1zcGFjaW5nfVxuICAgICAgICAgIG1hcmdpbjogMFxuICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgICAgIC8vIEJlY2F1c2UgdGFibGVzIGhhdmUgYSBmdW5ueSB3YXkgb2YgYWxsb3dpbmcgdG9vIG11Y2ggd2lkdGggZ3Jvd3RoOlxuICAgICAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgICAgJiArLmRpdG8tcGFuZVxuICAgICAgICAgIC8vIE5lZWRlZCBmb3IgdHJhbnNpdGlvbi1oZWlnaHQgaW4gRGl0b1NjaGVtYTpcbiAgICAgICAgICBtaW4taGVpZ2h0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzQ29tcGFjdCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1zY2hlbWEtaW5saW5lZCcsIHtcbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gaXNDb21wYWN0KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0NvbXBhY3QgJiYgISF0aGlzLmxhYmVsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXBhbmUoXG4gIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBjb21wb25lbnRTY2hlbWFzLmxlbmd0aCA+IDBcIlxuICB2LXNob3c9XCJ2aXNpYmxlXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9YHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICBuZXN0ZWQsXG4gICAgICBzdG9yZVxuICAgIH0gaW4gY29tcG9uZW50U2NoZW1hc2BcbiAgKVxuICAgIC5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgIClcbiAgICBkaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICA6a2V5PVwibmVzdGVkRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCJpc1NpbmdsZUNvbXBvbmVudFwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICApXG4gICAgLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYWZ0ZXInXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1wYW5lKFxuICAgIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBjb21wb25lbnRTY2hlbWFzLmxlbmd0aCA+IDBcIlxuICAgIHYtc2hvdz1cInZpc2libGVcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWZvcj1ge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICBuZXN0ZWREYXRhUGF0aCxcbiAgICAgICAgbmVzdGVkLFxuICAgICAgICBzdG9yZVxuICAgICAgfSBpbiBjb21wb25lbnRTY2hlbWFzYFxuICAgIClcbiAgICAgIC5kaXRvLWJyZWFrKFxuICAgICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYmVmb3JlJ1wiXG4gICAgICApXG4gICAgICBkaXRvLWNvbnRhaW5lcihcbiAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6c2luZ2xlPVwiaXNTaW5nbGVDb21wb25lbnRcIlxuICAgICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgICAuZGl0by1icmVhayhcbiAgICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2FmdGVyJ1wiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tcGFuZVxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICBmbGV4LWZsb3c6IHJvdyB3cmFwXG4gICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydFxuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZVxuICAgIC8vIFJlbW92ZSBwYWRkaW5nIGFkZGVkIGJ5IGAuZGl0by1jb250YWluZXJgXG4gICAgbWFyZ2luOiAoLSRmb3JtLXNwYWNpbmcpICgtJGZvcm0tc3BhY2luZy1oYWxmKVxuICAgIC8vIEFkZCByZW1vdmVkIGhvcml6b250YWwgbWFyZ2luIGFnYWluIHRvIG1heC13aWR0aDpcbiAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoICsgMiAqICRmb3JtLXNwYWNpbmctaGFsZlxuICAgIC8vIFVzZSBgZmxleDogMCVgIGZvciBhbGwgYC5kaXRvLXBhbmVgIGV4Y2VwdCBgLmRpdG8tcGFuZS1tYWluYCxcbiAgICAvLyBzbyB0aGF0IHRoZSBgLmRpdG8tYnV0dG9ucy1tYWluYCBjYW4gYmUgbW92ZWQgYWxsIHRoZSB3YXkgdG8gdGhlIGJvdHRvbS5cbiAgICBmbGV4OiAwJVxuXG4gICAgJi5kaXRvLXBhbmUtbWFpblxuICAgICAgZmxleDogMTAwJVxuXG4gICAgLmRpdG8tc2NoZW1hLWhlYWRlcjpub3QoLmRpdG8tc2NoZW1hLW1lbnUtaGVhZGVyKSArICZcbiAgICAgIC8vIENsZWFyIHRvcC1tYXJnaW4gaWYgdGhlIGNvbXBvbmVudHMgYXJlIHByZWNlZGVkIGJ5IGEgc2NoZW1hIGhlYWRlci5cbiAgICAgIG1hcmdpbi10b3A6IDBcblxuICAgIC5kaXRvLWNvbnRhaW5lci5kaXRvLW9taXQtcGFkZGluZyA+ICZcbiAgICAgIC8vIENsZWFyIG1hcmdpbnMgc2V0IGFib3ZlIGFnYWluIGlmIHBhcmVudCBpcyBvbWl0dGluZyBwYWRkaW5nLlxuICAgICAgbWFyZ2luOiAwXG4gICAgICBtYXgtd2lkdGg6IHVuc2V0XG5cbiAgICAuZGl0by1icmVha1xuICAgICAgZmxleDogMTAwJVxuICAgICAgaGVpZ2h0OiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGdldEFsbFBhbmVsU2NoZW1hcywgaXNOZXN0ZWQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1wYW5lJywge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnRhYkNvbXBvbmVudFxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB2aXNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMudGFiID8gdGhpcyA6IHRoaXMuJHRhYkNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGNvbXBvbmVudFNjaGVtYXMoKSB7XG4gICAgICAvLyBDb21wdXRlIGEgY29tcG9uZW50cyBsaXN0IHdoaWNoIGhhcyB0aGUgZGF0YVBhdGggYmFrZWQgaW50byBpdHMga2V5c1xuICAgICAgLy8gYW5kIGFkZHMgdGhlIGtleSBhcyB0aGUgbmFtZSB0byBlYWNoIGNvbXBvbmVudCwgdXNlZCBmb3IgbGFiZWxzLCBldGMuXG4gICAgICAvLyBOT1RFOiBzY2hlbWEgY2FuIGJlIG51bGwgd2hpbGUgbXVsdGktZm9ybSBsaXN0cyBsb2FkIHRoZWlyIGRhdGEsXG4gICAgICAvLyBiZWNhdXNlIG9ubHkgdGhlIGF2YWlsYWJsZSBkYXRhIHdpbGwgZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGZvcm0uXG4gICAgICAvLyBXaGVuIGVkaXRpbmcgcHJpbWl0aXZlIHZhbHVlcyB0aHJvdWdoIGEgZm9ybSwgZG8gbm90IGFwcGVuZCAnbmFtZScgdG9cbiAgICAgIC8vIHRoZSBjb21wb25lbnQncyBkYXRhUGF0aCBzbyBpdCBjYW4gYmUgbWFwcGVkIHRvIGZyb20gdmFsaWRhdGlvbiBlcnJvcnMuXG4gICAgICAvLyBOT1RFOiBOb3QgYWxsIHNjaGVtYXMgLyBjb21wb25lbnRzIGhhdmUgYSBzb3VyY2VTY2hlbWEsIGUuZy4gZGlhbG9ncy5cbiAgICAgIGNvbnN0IHdyYXBQcmltaXRpdmVzID0gdGhpcy5zb3VyY2VTY2hlbWE/LndyYXBQcmltaXRpdmVzXG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWE/LmNvbXBvbmVudHMgfHwge30pLm1hcChcbiAgICAgICAgKFtuYW1lLCBzY2hlbWFdKSA9PiB7XG4gICAgICAgICAgLy8gQWx3YXlzIGFkZCBuYW1lIHRvIGNvbXBvbmVudCBzY2hlbWEuXG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgICAgLy8gU2hhcmUgZGF0YVBhdGggYW5kIHN0b3JlIHdpdGggcGFyZW50IGlmIG5vdCBuZXN0ZWQ6XG4gICAgICAgICAgY29uc3QgbmVzdGVkID0gaXNOZXN0ZWQoc2NoZW1hKVxuICAgICAgICAgIGNvbnN0IG5lc3RlZERhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSlcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgZGF0YVBhdGg6IG5lc3RlZCAmJiAhd3JhcFByaW1pdGl2ZXNcbiAgICAgICAgICAgICAgPyBuZXN0ZWREYXRhUGF0aFxuICAgICAgICAgICAgICA6IHRoaXMuZGF0YVBhdGgsXG4gICAgICAgICAgICBuZXN0ZWREYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZCxcbiAgICAgICAgICAgIHN0b3JlOiBuZXN0ZWQgPyB0aGlzLmdldENoaWxkU3RvcmUobmFtZSkgOiB0aGlzLnN0b3JlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIHBhbmVsU2NoZW1hcygpIHtcbiAgICAgIC8vIEdhdGhlciBhbGwgcGFuZWwgc2NoZW1hcyBmcm9tIGFsbCBjb21wb25lbnQgc2NoZW1hcywgYnkgZmluZGluZyB0aG9zZVxuICAgICAgLy8gdGhhdCB3YW50IHRvIHByb3ZpZGUgYSBwYW5lbC4gU2VlIGBnZXRBbGxQYW5lbFNjaGVtYXMoKWAgZm9yIGRldGFpbHMuXG4gICAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTY2hlbWFzLmZsYXRNYXAoXG4gICAgICAgICh7IHNjaGVtYSwgbmVzdGVkRGF0YVBhdGg6IGRhdGFQYXRoIH0pID0+IGdldEFsbFBhbmVsU2NoZW1hcyhcbiAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQsXG4gICAgICAgICAgdGhpcy50YWJDb21wb25lbnRcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1NpbmdsZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpbmdsZSAmJiB0aGlzLmNvbXBvbmVudFNjaGVtYXMubGVuZ3RoID09PSAxXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lKHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICBpZiAodGhpcy50YWIpIHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBoYXNoOiB0aGlzLnRhYiB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGcmFjdGlvbih2YWx1ZSkge1xuICBjb25zdCBtYXRjaCA9IChcbiAgICBpc1N0cmluZyh2YWx1ZSkgJiZcbiAgICB2YWx1ZS5tYXRjaCgvXlxccyooWystXT9cXGQrKVxccypcXC9cXHMqKFsrLV0/XFxkKylcXHMqJC8pXG4gIClcbiAgaWYgKG1hdGNoKSB7XG4gICAgY29uc3QgWywgZGl2aWRlbmQsIGRpdmlzb3JdID0gbWF0Y2hcbiAgICByZXR1cm4gcGFyc2VGbG9hdChkaXZpZGVuZCkgLyBwYXJzZUZsb2F0KGRpdmlzb3IpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpXG4gIH1cbn1cbiIsIlxuLmRpdG8tY29udGFpbmVyKFxuICB2LXNob3c9XCJjb21wb25lbnRWaXNpYmxlXCJcbiAgOmNsYXNzPVwiY29udGFpbmVyQ2xhc3NcIlxuICA6c3R5bGU9XCJjb250YWluZXJTdHlsZVwiXG4pXG4gIGRpdG8tbGFiZWwoXG4gICAgdi1pZj1cImxhYmVsXCJcbiAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgOmRhdGFQYXRoPVwibGFiZWxEYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICApXG4gIGNvbXBvbmVudC5kaXRvLWNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRUeXBlQ29tcG9uZW50KHNjaGVtYS50eXBlKVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOnNpbmdsZT1cInNpbmdsZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiY29tcG9uZW50RGlzYWJsZWRcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICBAZXJyb3JzPVwib25FcnJvcnNcIlxuICApXG4gIGRpdG8tZXJyb3JzKFxuICAgIDplcnJvcnM9XCJlcnJvcnNcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jb250YWluZXIoXG4gICAgdi1zaG93PVwiY29tcG9uZW50VmlzaWJsZVwiXG4gICAgOmNsYXNzPVwiY29udGFpbmVyQ2xhc3NcIlxuICAgIDpzdHlsZT1cImNvbnRhaW5lclN0eWxlXCJcbiAgKVxuICAgIGRpdG8tbGFiZWwoXG4gICAgICB2LWlmPVwibGFiZWxcIlxuICAgICAgOmxhYmVsPVwibGFiZWxcIlxuICAgICAgOmRhdGFQYXRoPVwibGFiZWxEYXRhUGF0aFwiXG4gICAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gICAgKVxuICAgIGNvbXBvbmVudC5kaXRvLWNvbXBvbmVudChcbiAgICAgIDppcz1cImdldFR5cGVDb21wb25lbnQoc2NoZW1hLnR5cGUpXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwic2luZ2xlXCJcbiAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgOmRpc2FibGVkPVwiY29tcG9uZW50RGlzYWJsZWRcIlxuICAgICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICAgICAgQGVycm9ycz1cIm9uRXJyb3JzXCJcbiAgICApXG4gICAgZGl0by1lcnJvcnMoXG4gICAgICA6ZXJyb3JzPVwiZXJyb3JzXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tY29udGFpbmVyXG4gICAgLy8gTmVlZGVkIGZvciBiZXR0ZXIgdmVydGljYWwgYWxpZ25tZW50OlxuICAgIGFsaWduLXNlbGY6IHN0cmV0Y2hcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgLy8gVG8gcHJldmVudCBsaXN0IHRhYmxlcyBmcm9tIGJsb3dpbmcgb3V0IG9mIHRoZWlyIGZsZXggYm94IGNvbnRhaW5lcnMuXG4gICAgbWF4LXdpZHRoOiAxMDAlXG4gICAgLy8gQ2Fubm90IHVzZSBtYXJnaW4gaGVyZSBhcyBpdCBuZWVkcyB0byBiZSBwYXJ0IG9mIGJveC1zaXppbmcgZm9yXG4gICAgLy8gcGVyY2VudGFnZXMgaW4gZmxleC1iYXNpcyB0byB3b3JrLlxuICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmcgJGZvcm0tc3BhY2luZy1oYWxmXG4gICAgJjplbXB0eVxuICAgICAgcGFkZGluZzogMFxuICAgICYuZGl0by1vbWl0LXBhZGRpbmdcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgID4gLmRpdG8tbGFiZWxcbiAgICAgICAgbWFyZ2luOiAkZm9ybS1zcGFjaW5nICRmb3JtLXNwYWNpbmctaGFsZiAwXG4gICAgJi5kaXRvLXNpbmdsZVxuICAgICAgaGVpZ2h0OiAxMDAlIC8vIFNvIHRoYXQgbGlzdCBidXR0b25zIGNhbiBiZSBzdGlja3kgYXQgdGhlIGJvdHRvbVxuICAvLyBOT1RFOiBUaGlzIGlzIG5vdCBuZXN0ZWQgaW5zaWRlIGAuZGl0by1jb250YWluZXJgIHNvIHRoYXQgb3RoZXJcbiAgLy8gdHlwZSBjb21wb25lbnRzIGNhbiBvdmVycmlkZSBgLmRpdG8td2lkdGgtZmlsbGAgY2xhc3MgKGZpbHRlciBwcmVjZWRlbmNlKS5cbiAgLmRpdG8tY29tcG9uZW50XG4gICAgJi5kaXRvLXdpZHRoLWZpbGxcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAmLmRpdG8tY2hlY2tib3gsXG4gICAgICAmLmRpdG8tcmFkaW8tYnV0dG9uXG4gICAgICAgIC8vIFdlYktpdCBkb2Vzbid0IGxpa2UgY2hhbmdlZCB3aWR0aCBvbiBjaGVja2JveGVzIGFuZCByYWRpb3MsIG92ZXJyaWRlOlxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgd2lkdGg6IGF1dG9cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc1N0cmluZywgaXNOdW1iZXIgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXRUeXBlT3B0aW9ucywgc2hvdWxkT21pdFBhZGRpbmcgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBwYXJzZUZyYWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvbWF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNvbnRhaW5lcicsIHtcbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiB0aGlzLm5lc3RlZCB9KVxuICAgIH0sXG5cbiAgICB0eXBlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBnZXRUeXBlT3B0aW9ucyh0aGlzLnNjaGVtYSkgfHwge31cbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgY29uc3QgeyBsYWJlbCB9ID0gc2NoZW1hXG4gICAgICByZXR1cm4gKFxuICAgICAgICBsYWJlbCAhPT0gZmFsc2UgJiZcbiAgICAgICAgKCEhbGFiZWwgfHwgdGhpcy50eXBlT3B0aW9ucy5nZW5lcmF0ZUxhYmVsICYmIHRoaXMuZ2VuZXJhdGVMYWJlbHMpXG4gICAgICApXG4gICAgfSxcblxuICAgIGxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzTGFiZWwgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKSA6IG51bGxcbiAgICB9LFxuXG4gICAgbGFiZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIFVubmVzdGVkIHR5cGVzIGRvbid0IGhhdmUgYSBkYXRhUGF0aCBmb3IgdGhlbXNlbHZlcywgZG9uJ3QgdXNlIGl0OlxuICAgICAgcmV0dXJuIHRoaXMubmVzdGVkID8gdGhpcy5kYXRhUGF0aCA6IG51bGxcbiAgICB9LFxuXG4gICAgY29tcG9uZW50V2lkdGg6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0V2lkdGhcbiAgICAgIH0sXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgLy8gVXNlIDEwMCUgPT0gMS4wIGFzIGRlZmF1bHQgd2lkdGggd2hlbiBub3RoaW5nIGlzIHNldDpcbiAgICAgICAgcmV0dXJuIHdpZHRoID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IDEuMFxuICAgICAgICAgIDogaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKls8Pl0/XFxzKiguKikkLylbMV0gLy8gUmVtb3ZlIHdpZHRoIG9wZXJhdG9yXG4gICAgICAgICAgICA6IHdpZHRoXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRXaWR0aE9wZXJhdG9yOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqKFs8Pl0/KS8pWzFdIHx8IG51bGxcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudFZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVPcHRpb25zLmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnREaXNhYmxlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Rpc2FibGVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiBkaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb250YWluZXJDbGFzcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IGNvbnRhaW5lckNsYXNzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLW9taXQtcGFkZGluZyc6IHNob3VsZE9taXRQYWRkaW5nKHRoaXMuc2NoZW1hKSxcbiAgICAgICAgLi4uKFxuICAgICAgICAgIGlzU3RyaW5nKGNvbnRhaW5lckNsYXNzKVxuICAgICAgICAgICAgPyB7IFtjb250YWluZXJDbGFzc106IHRydWUgfVxuICAgICAgICAgICAgOiBjb250YWluZXJDbGFzc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXBvbmVudEJhc2lzKCkge1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmNvbXBvbmVudFdpZHRoXG4gICAgICAvLyAnYXV0bycgPSBubyBmaXR0aW5nOlxuICAgICAgY29uc3QgYmFzaXMgPSAoXG4gICAgICAgIFtudWxsLCAnYXV0bycsICdmaWxsJ10uaW5jbHVkZXMod2lkdGgpID8gJ2F1dG8nXG4gICAgICAgIDogLyUkLy50ZXN0KHdpZHRoKSA/IHBhcnNlRmxvYXQod2lkdGgpIC8vIHBlcmNlbnRhZ2VcbiAgICAgICAgOiAvW2Etel0vLnRlc3Qod2lkdGgpID8gd2lkdGggLy8gbmF0aXZlIHVuaXRzXG4gICAgICAgIDogcGFyc2VGcmFjdGlvbih3aWR0aCkgKiAxMDAgLy8gZnJhY3Rpb25cbiAgICAgIClcbiAgICAgIHJldHVybiBpc051bWJlcihiYXNpcykgPyBgJHtiYXNpc30lYCA6IGJhc2lzXG4gICAgfSxcblxuICAgIGNvbnRhaW5lclN0eWxlKCkge1xuICAgICAgLy8gSW50ZXJwcmV0ICc+NTAlJyBhcyAnNTAlLCBmbGV4LWdyb3c6IDFgXG4gICAgICBjb25zdCBncm93ID0gKFxuICAgICAgICB0aGlzLmNvbXBvbmVudFdpZHRoT3BlcmF0b3IgPT09ICc+JyB8fFxuICAgICAgICB0aGlzLmNvbXBvbmVudFdpZHRoID09PSAnZmlsbCdcbiAgICAgIClcbiAgICAgIC8vIEludGVycHJldCAnPDUwJScgYXMgJzUwJSwgZmxleC1zaHJpbms6IDFgXG4gICAgICBjb25zdCBzaHJpbmsgPSB0aGlzLmNvbXBvbmVudFdpZHRoT3BlcmF0b3IgPT09ICc8J1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmxleDogYCR7Z3JvdyA/IDEgOiAwfSAke3NocmluayA/IDEgOiAwfSAke3RoaXMuY29tcG9uZW50QmFzaXN9YFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRDbGFzcygpIHtcbiAgICAgIGNvbnN0IGJhc2lzSXNBdXRvID0gdGhpcy5jb21wb25lbnRCYXNpcyA9PT0gJ2F1dG8nXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1zaW5nbGUnOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiB0aGlzLmNvbXBvbmVudERpc2FibGVkLFxuICAgICAgICAnZGl0by13aWR0aC1maWxsJzogIWJhc2lzSXNBdXRvIHx8IHRoaXMuY29tcG9uZW50V2lkdGggPT09ICdmaWxsJyxcbiAgICAgICAgJ2RpdG8td2lkdGgtYXV0byc6IGJhc2lzSXNBdXRvLFxuICAgICAgICAnZGl0by1oYXMtZXJyb3JzJzogISF0aGlzLmVycm9yc1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25FcnJvcnMoZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IGVycm9yc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by10YWJzXG4gIHJvdXRlci1saW5rLmRpdG8tbGluayhcbiAgICB2LWZvcj1cIih0YWJTY2hlbWEsIGtleSkgaW4gdGFic1wiXG4gICAgdi1pZj1cInNob3VsZFJlbmRlcih0YWJTY2hlbWEpXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICA6dG89XCJ7IGhhc2g6IGtleSB9XCJcbiAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gIClcbiAgICB8IHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdGFic1xuICAgIHJvdXRlci1saW5rLmRpdG8tbGluayhcbiAgICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwga2V5KSBpbiB0YWJzXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodGFiU2NoZW1hKVwiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDp0bz1cInsgaGFzaDoga2V5IH1cIlxuICAgICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWwodGFiU2NoZW1hLCBrZXkpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgJHRhYi1jb2xvci1iYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlc3RcbiAgJHRhYi1jb2xvci1pbmFjdGl2ZTogJGNvbG9yLWxpZ2h0XG4gICR0YWItY29sb3ItYWN0aXZlOiAkY29sb3ItbGlnaHRlc3RcbiAgJHRhYi1jb2xvci1ob3ZlcjogJGNvbG9yLXdoaXRlXG5cbiAgLmRpdG8tdGFic1xuICAgIC8vIFNlZTogaHR0cHM6Ly9jb2RlcGVuLmlvL3Rob2xleC9wZW4vaHZlQngvXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG9cbiAgICBhXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWluYWN0aXZlXG4gICAgICBwYWRkaW5nOiAkdGFiLXBhZGRpbmctdmVyICR0YWItcGFkZGluZy1ob3JcbiAgICAgIG1hcmdpbi1sZWZ0OiAkdGFiLW1hcmdpblxuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHRhYi1yYWRpdXNcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkdGFiLXJhZGl1c1xuICAgICAgJjpob3ZlclxuICAgICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWhvdmVyXG4gICAgICAmOmFjdGl2ZVxuICAgICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWFjdGl2ZVxuICAgICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWJhY2tncm91bmRcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdGFicycsIHtcbiAgcHJvcHM6IHtcbiAgICB0YWJzOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNlbGVjdGVkVGFiOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLy8gT25seSBzaG93IHBhbmVscyBpbiB0YWJzIHdoZW4gdGhlIHRhYnMgYXJlIGFsc28gdmlzaWJsZS5cbmNvbXBvbmVudC5kaXRvLXBhbmVsKFxuICA6aXM9XCJwYW5lbFRhZ1wiXG4gIHYtc2hvdz1cInZpc2libGUgJiYgKCFwYW5lbFRhYkNvbXBvbmVudCB8fCBwYW5lbFRhYkNvbXBvbmVudC52aXNpYmxlKVwiXG4gIEBzdWJtaXQucHJldmVudFxuKVxuICBsYWJlbC5kaXRvLXBhbmVsLXRpdGxlIHt7IGdldExhYmVsKHNjaGVtYSkgfX1cbiAgZGl0by1zY2hlbWEuZGl0by1wYW5lbC1zY2hlbWEoXG4gICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpoYXNPd25EYXRhPVwiaGFzT3duRGF0YVwiXG4gIClcbiAgICBkaXRvLWJ1dHRvbnMoXG4gICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vIE9ubHkgc2hvdyBwYW5lbHMgaW4gdGFicyB3aGVuIHRoZSB0YWJzIGFyZSBhbHNvIHZpc2libGUuXG4gIGNvbXBvbmVudC5kaXRvLXBhbmVsKFxuICAgIDppcz1cInBhbmVsVGFnXCJcbiAgICB2LXNob3c9XCJ2aXNpYmxlICYmICghcGFuZWxUYWJDb21wb25lbnQgfHwgcGFuZWxUYWJDb21wb25lbnQudmlzaWJsZSlcIlxuICAgIEBzdWJtaXQucHJldmVudFxuICApXG4gICAgbGFiZWwuZGl0by1wYW5lbC10aXRsZSB7eyBnZXRMYWJlbChzY2hlbWEpIH19XG4gICAgZGl0by1zY2hlbWEuZGl0by1wYW5lbC1zY2hlbWEoXG4gICAgICA6c2NoZW1hPVwicGFuZWxTY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmhhc093bkRhdGE9XCJoYXNPd25EYXRhXCJcbiAgICApXG4gICAgICBkaXRvLWJ1dHRvbnMoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tcGFuZWxcbiAgICBtYXJnaW4tYm90dG9tOiAkY29udGVudC1wYWRkaW5nXG4gICAgLmRpdG8tcGFuZWwtdGl0bGVcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgYmFja2dyb3VuZDogJGJ1dHRvbi1jb2xvclxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgLmRpdG8tcGFuZWwtc2NoZW1hXG4gICAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGxcbiAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmRcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXRvcDogMFxuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZ1xuICAgICAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgICAgICAtLWJ1dHRvbi1tYXJnaW46ICN7JGZvcm0tc3BhY2luZ31cbiAgICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGYgMFxuICAgICAgLmRpdG8tb2JqZWN0XG4gICAgICAgIGJvcmRlcjogMFxuICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAuZGl0by1sYWJlbFxuICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgbGFiZWxcbiAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsXG4gICAgICAuZGl0by1wYW5lXG4gICAgICAgIG1hcmdpbjogMCAoLSRmb3JtLXNwYWNpbmctaGFsZilcbiAgICAgIC5kaXRvLWNvbnRhaW5lclxuICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGZcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgVmFsaWRhdG9yTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1wYW5lbCcsIHtcbiAgbWl4aW5zOiBbVmFsaWRhdG9yTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IHRoaXMucGFuZWxUYWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYW5lbFRhYkNvbXBvbmVudDogeyB0eXBlOiBEaXRvQ29tcG9uZW50LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvd25EYXRhOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgdGFyZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnRhcmdldCB8fCB0aGlzLmRhdGFQYXRoXG4gICAgfSxcblxuICAgIGhhc093bkRhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLm93bkRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMub3duRGF0YSB8fCB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWEoKSB7XG4gICAgICBpZiAodGhpcy5oYXNPd25EYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIGBkYXRhYCBmcm9tIHRoZSBzY2hlbWEsIHNvIHRoYXQgRGl0b1NjaGVtYSBpc24ndCB1c2luZyBpdCB0b1xuICAgICAgICAvLyBwcm9kdWNlIGl0cyBvd24gZGF0YS4gU2VlICRmaWx0ZXJzIHBhbmVsIGZvciBtb3JlIGRldGFpbHMgb24gZGF0YS5cbiAgICAgICAgY29uc3QgeyBkYXRhLCAuLi5zY2hlbWEgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFuZWxUYWcoKSB7XG4gICAgICAvLyBQYW5lbHMgdGhhdCBwcm92aWRlIHRoZWlyIG93biBkYXRhIG5lZWQgdGhlaXIgb3duIGZvcm0uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gJ2Zvcm0nIDogJ2RpdidcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIGRhdGEsIHRoZW4gaXQgbmVlZHMgdG8gcHJlZml4IGFsbFxuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIGl0cyBkYXRhLXBhdGgsIGJ1dCBpZiBpdCBzaGFyZXMgZGF0YSB3aXRoIHRoZSBzY2hlbWFcbiAgICAgIC8vIGNvbXBvbmVudCwgdGhlbiBpdCBzaG91bGQgc2hhcmUgdGhlIGRhdGEtcGF0aCBuYW1lIHNwYWNlIHRvby5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyB0aGlzLmRhdGFQYXRoIDogdGhpcy5zY2hlbWFDb21wb25lbnQuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIC8vIE5PVEU6IFRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIGBzY2hlbWEuZGF0YWAgaGFuZGxpbmcgaW4gRGl0b1NjaGVtYSxcbiAgICAvLyB3aGVyZSB0aGUgZGF0YSBpcyBhZGRlZCB0byB0aGUgYWN0dWFsIGNvbXBvbmVudC5cbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHRoaXMub3duRGF0YSA9IGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgPyBkYXRhLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICA6IGRhdGFcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUmVnaXN0ZXIgdGhlIHBhbmVscyBzbyB0aGF0IG90aGVyIGNvbXBvbmVudHMgY2FuIGZpbmQgdGhlbSBieSB0aGVpclxuICAgICAgLy8gZGF0YS1wYXRoLCBlLmcuIGluIFR5cGVMaXN0Lm9uRmlsdGVyRXJyb3JzKClcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlclBhbmVsKHRoaXMsIGFkZClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tcGFuZWxzKFxuICB2LWlmPVwicGFuZWxzLmxlbmd0aCA+IDBcIlxuKVxuICBkaXRvLXBhbmVsKFxuICAgIHYtZm9yPVwieyBzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQgfSBpbiBwYW5lbHNcIlxuICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgOmtleT1cImdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoc2NoZW1hLm5hbWUpXCJcbiAgICA6ZGlzYWJsZWQ9XCJzY2hlbWEuZGlzYWJsZWQgIT0gbnVsbCA/IHNjaGVtYS5kaXNhYmxlZCA6IGRpc2FibGVkXCJcbiAgICA6cGFuZWxUYWJDb21wb25lbnQ9XCJ0YWJDb21wb25lbnRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1wYW5lbHMoXG4gICAgdi1pZj1cInBhbmVscy5sZW5ndGggPiAwXCJcbiAgKVxuICAgIGRpdG8tcGFuZWwoXG4gICAgICB2LWZvcj1cInsgc2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50IH0gaW4gcGFuZWxzXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICA6a2V5PVwiZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudClcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoc2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cInNjaGVtYS5kaXNhYmxlZCAhPSBudWxsID8gc2NoZW1hLmRpc2FibGVkIDogZGlzYWJsZWRcIlxuICAgICAgOnBhbmVsVGFiQ29tcG9uZW50PVwidGFiQ29tcG9uZW50XCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tcGFuZWxzXG4gICAgbWF4LXdpZHRoOiAkY29udGVudC1zaWRlYmFyLXdpZHRoXG4gICAgbWluLXdpZHRoOiBjYWxjKCRjb250ZW50LXNpZGViYXItd2lkdGggLyAyKVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1wYW5lbHMnLCB7XG4gIHByb3BzOiB7XG4gICAgcGFuZWxzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudCkge1xuICAgICAgLy8gQWxsb3cgc2VwYXJhdGUgdGFicyB0byB1c2UgcGFuZWxzIG9mIHRoZSBzYW1lIG5hbWUsIGJ5XG4gICAgICAvLyBwcmVmaXhpbmcgdGhlaXIga2V5IHdpdGggdGhlIHRhYiBuYW1lLlxuICAgICAgcmV0dXJuIHRhYkNvbXBvbmVudCA/IGAke3RhYkNvbXBvbmVudC50YWJ9XyR7ZGF0YVBhdGh9YCA6IGRhdGFQYXRoXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWJ1dHRvbnMoXG4gIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8ICRzbG90cy5kZWZhdWx0XCJcbiAgLyogUGFzcyBvbiAkbGlzdGVuZXJzIHNvIHRoYXQgZGl0by1lZGl0LWJ1dHRvbnMgY2FuIHBhc3MgZXZlbnRzLiAqL1xuICB2LW9uPVwiJGxpc3RlbmVyc1wiXG4pXG4gIGRpdG8tY29udGFpbmVyKFxuICAgIHYtZm9yPVwiKGJ1dHRvblNjaGVtYSwgYnV0dG9uRGF0YVBhdGgpIGluIGJ1dHRvblNjaGVtYXNcIlxuICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoYnV0dG9uU2NoZW1hKVwiXG4gICAgOmtleT1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICA6c2NoZW1hPVwiYnV0dG9uU2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICApXG4gIC8vIFJlbmRlciBlYWNoIG5vZGUgaW4gdGhlIGRlZmF1bHQgc2xvdCB0aHJvdWdoIGBkaXRvLXZub2RlYCwgc28gaXQgY2FuIGJlXG4gIC8vIHdyYXBwZWQgaW4gYSBgLmRpdG8tY29udGFpbmVyYCBjbGFzcy5cbiAgLmRpdG8tY29udGFpbmVyKFxuICAgIHYtZm9yPVwibm9kZSBpbiAkc2xvdHMuZGVmYXVsdFwiXG4gICAgdi1pZj1cIm5vZGUudGFnXCJcbiAgKVxuICAgIGRpdG8tdm5vZGUoOm5vZGU9XCJub2RlXCIpXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1idXR0b25zKFxuICAgIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8ICRzbG90cy5kZWZhdWx0XCJcbiAgICAvKiBQYXNzIG9uICRsaXN0ZW5lcnMgc28gdGhhdCBkaXRvLWVkaXQtYnV0dG9ucyBjYW4gcGFzcyBldmVudHMuICovXG4gICAgdi1vbj1cIiRsaXN0ZW5lcnNcIlxuICApXG4gICAgZGl0by1jb250YWluZXIoXG4gICAgICB2LWZvcj1cIihidXR0b25TY2hlbWEsIGJ1dHRvbkRhdGFQYXRoKSBpbiBidXR0b25TY2hlbWFzXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoYnV0dG9uU2NoZW1hKVwiXG4gICAgICA6a2V5PVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgICApXG4gICAgLy8gUmVuZGVyIGVhY2ggbm9kZSBpbiB0aGUgZGVmYXVsdCBzbG90IHRocm91Z2ggYGRpdG8tdm5vZGVgLCBzbyBpdCBjYW4gYmVcbiAgICAvLyB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gICAgLmRpdG8tY29udGFpbmVyKFxuICAgICAgdi1mb3I9XCJub2RlIGluICRzbG90cy5kZWZhdWx0XCJcbiAgICAgIHYtaWY9XCJub2RlLnRhZ1wiXG4gICAgKVxuICAgICAgZGl0by12bm9kZSg6bm9kZT1cIm5vZGVcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuLmRpdG8tYnV0dG9uc1xuICA+IC5kaXRvLWNvbnRhaW5lclxuICAgIHBhZGRpbmc6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tYnV0dG9ucycsIHtcbiAgcHJvdmlkZToge1xuICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgfSxcblxuICBwcm9wczoge1xuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGJ1dHRvbnMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXMuXG4gICAgICBjb25zdCB7IGRhdGFQYXRoLCBidXR0b25zIH0gPSB0aGlzXG4gICAgICByZXR1cm4gYnV0dG9uc1xuICAgICAgICA/IE9iamVjdC52YWx1ZXMoYnV0dG9ucykucmVkdWNlKChzY2hlbWFzLCBidXR0b24pID0+IHtcbiAgICAgICAgICBzY2hlbWFzW2FwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBidXR0b24ubmFtZSldID0gYnV0dG9uXG4gICAgICAgICAgcmV0dXJuIHNjaGVtYXNcbiAgICAgICAgfSwge30pXG4gICAgICAgIDogbnVsbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5kaXRvLWJ1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgLyogUHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsOiAqL1xuICBAY2xpY2suc3RvcFxuKVxuICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICBhLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0RyYWdnYWJsZVwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gIClcbiAgcm91dGVyLWxpbmsuZGl0by1idXR0b24oXG4gICAgdi1pZj1cImlzRWRpdGFibGVcIlxuICAgIDp0bz1cInsgcGF0aDogZWRpdFBhdGggfVwiIGFwcGVuZFxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICApXG4gIGRpdG8tY3JlYXRlLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNDcmVhdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgOnZlcmI9XCJ2ZXJicy5jcmVhdGVcIlxuICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0RlbGV0YWJsZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBkaXRvLWJ1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICAgIDpidXR0b25zPVwiYnV0dG9uc1wiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgLyogUHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsOiAqL1xuICAgIEBjbGljay5zdG9wXG4gIClcbiAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgIGEuZGl0by1idXR0b24oXG4gICAgICB2LWlmPVwiaXNEcmFnZ2FibGVcIlxuICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgKVxuICAgIHJvdXRlci1saW5rLmRpdG8tYnV0dG9uKFxuICAgICAgdi1pZj1cImlzRWRpdGFibGVcIlxuICAgICAgOnRvPVwieyBwYXRoOiBlZGl0UGF0aCB9XCIgYXBwZW5kXG4gICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgICApXG4gICAgZGl0by1jcmVhdGUtYnV0dG9uKFxuICAgICAgdi1pZj1cImlzQ3JlYXRhYmxlXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOnBhdGg9XCJjcmVhdGVQYXRoXCJcbiAgICAgIDp2ZXJiPVwidmVyYnMuY3JlYXRlXCJcbiAgICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0RlbGV0YWJsZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1lZGl0LWJ1dHRvbnNcbiAgICAvLyBPdmVycmlkZSBjdXJzb3IgZnJvbSBjb2xsYXBzaWJsZSBkaXRvLWxhYmVsOlxuICAgIGN1cnNvcjogZGVmYXVsdFxuICAgIGZsZXg6IG5vbmVcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lZGl0LWJ1dHRvbnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjcmVhdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjcmVhdGVQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hLmZvcm0pXG4gICAgfSxcblxuICAgIGlzRHJhZ2dhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdkcmFnZ2FibGUnKVxuICAgIH0sXG5cbiAgICBpc0VkaXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdlZGl0YWJsZScpICYmICEhdGhpcy5lZGl0UGF0aFxuICAgIH0sXG5cbiAgICBpc0NyZWF0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignY3JlYXRhYmxlJykgJiYgISF0aGlzLmNyZWF0ZVBhdGhcbiAgICB9LFxuXG4gICAgaXNEZWxldGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2RlbGV0YWJsZScpXG4gICAgfSxcblxuICAgIGNyZWF0ZUJ1dHRvblRleHQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgY3JlYXRlIGJ1dHRvbiB0aHJvdWdoIGNyZWF0YWJsZSBvYmplY3Q6XG4gICAgICAgIHRoaXMuc2NoZW1hLmNyZWF0YWJsZT8ubGFiZWwgfHxcbiAgICAgICAgKFxuICAgICAgICAgIC8vIEF1dG8tZ2VuZXJhdGUgY3JlYXRlIGJ1dHRvbiBsYWJlbHMgZnJvbSBmcm9tIGxhYmVscyBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMgd2l0aCBvbmx5IG9uZSBmb3JtOlxuICAgICAgICAgIHRoaXMuZm9ybUxhYmVsICYmXG4gICAgICAgICAgYCR7Y2FwaXRhbGl6ZSh0aGlzLnZlcmJzLmNyZWF0ZSl9ICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICApIHx8XG4gICAgICAgIG51bGxcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc09wdGlvbihuYW1lKSB7XG4gICAgICAvLyBUaGUgb3B0aW9ucyBvZiB0aGUgb3V0ZXIgY29tcG9uZW50IGFyZSBwYXNzZWQgdG8gdGhlIGJ1dHRvbnMgY29tcG9uZW50XG4gICAgICAvLyB0aHJvdWdoIHByb3BlcnRpZXMgYHRoaXNbbmFtZV1gLCBidXQgY2FuIGJlIGRpc2FibGVkIG9uIGEgcGVyLWZvcm1cbiAgICAgIC8vIGJhc2lzIGJ5IHNldHRpbmcgYHNjaGVtYVtuYW1lXWAgdG8gYGZhbHNlYC5cbiAgICAgIHJldHVybiAhISh0aGlzW25hbWVdICYmIHRoaXMuc2NoZW1hW25hbWVdICE9PSBmYWxzZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tY3JlYXRlLWJ1dHRvblxuICB0ZW1wbGF0ZSh2LWlmPVwic2hvd1B1bGxkb3duXCIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICApIHt7IHRleHQgfX1cbiAgICB1bC5kaXRvLXB1bGxkb3duKFxuICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgICApXG4gICAgICBsaSh2LWZvcj1cIihmb3JtLCB0eXBlKSBpbiBmb3Jtc1wiKVxuICAgICAgICBhKFxuICAgICAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZShmb3JtKVwiXG4gICAgICAgICAgOmNsYXNzPVwiYGRpdG8tdHlwZS0ke3R5cGV9YFwiXG4gICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih0eXBlKVwiXG4gICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh0eXBlKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwoZm9ybSkgfX1cbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtZWxzZVxuICAgIDp0eXBlPVwiaXNJbmxpbmVkID8gJ2J1dHRvbicgOiAnc3VibWl0J1wiXG4gICAgQGNsaWNrPVwiY3JlYXRlSXRlbShmb3Jtcy5kZWZhdWx0KVwiXG4gICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICkge3sgdGV4dCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tY3JlYXRlLWJ1dHRvblxuICAgIHRlbXBsYXRlKHYtaWY9XCJzaG93UHVsbGRvd25cIilcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gICAgICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICAgICkge3sgdGV4dCB9fVxuICAgICAgdWwuZGl0by1wdWxsZG93bihcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgICAgIClcbiAgICAgICAgbGkodi1mb3I9XCIoZm9ybSwgdHlwZSkgaW4gZm9ybXNcIilcbiAgICAgICAgICBhKFxuICAgICAgICAgICAgdi1pZj1cImlzQ3JlYXRhYmxlKGZvcm0pXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImBkaXRvLXR5cGUtJHt0eXBlfWBcIlxuICAgICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih0eXBlKVwiXG4gICAgICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHR5cGUpXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsKGZvcm0pIH19XG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdi1lbHNlXG4gICAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgICAgQGNsaWNrPVwiY3JlYXRlSXRlbShmb3Jtcy5kZWZhdWx0KVwiXG4gICAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgICAgOnRpdGxlPVwibGFiZWxpemUodmVyYilcIlxuICAgICkge3sgdGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNyZWF0ZS1idXR0b25cbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAuZGl0by1wdWxsZG93blxuICAgICAgcmlnaHQ6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRGb3JtU2NoZW1hcywgaXNJbmxpbmVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tY3JlYXRlLWJ1dHRvbicsIHtcbiAgbWl4aW5zOiBbUHVsbGRvd25NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHZlcmI6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRleHQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIHNob3dQdWxsZG93bigpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmZvcm1zKS5sZW5ndGggPiAxIHx8ICF0aGlzLmZvcm1zLmRlZmF1bHRcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGlzQ3JlYXRhYmxlKGZvcm0pIHtcbiAgICAgIC8vIEZvcm1zIGNhbiBiZSBleGNsdWRlZCBmcm9tIHRoZSBsaXN0IGJ5IHByb3ZpZGluZyBgY3JlYXRhYmxlOiBmYWxzZWBcbiAgICAgIHJldHVybiBmb3JtLmNyZWF0YWJsZSAhPT0gZmFsc2VcbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShmb3JtLCB0eXBlID0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGFibGUoZm9ybSkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbmxpbmVkKSB7XG4gICAgICAgICAgdGhpcy5zb3VyY2VDb21wb25lbnQuY3JlYXRlSXRlbShmb3JtLCB0eXBlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgICAgIHBhdGg6IGAke3RoaXMucGF0aH0vY3JlYXRlYCxcbiAgICAgICAgICAgIHF1ZXJ5OiB7IHR5cGUgfSxcbiAgICAgICAgICAgIGFwcGVuZDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGFsbG93ZWQgdG8gY3JlYXRlIGl0ZW0gZm9yIGdpdmVuIGZvcm0nKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KHR5cGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlSXRlbSh0aGlzLmZvcm1zW3R5cGVdLCB0eXBlKVxuICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICB2LWlmPVwiY2xpcGJvYXJkXCJcbilcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgcmVmPVwiY29weURhdGFcIlxuICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uQ29weVwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25QYXN0ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICAgIHYtaWY9XCJjbGlwYm9hcmRcIlxuICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHJlZj1cImNvcHlEYXRhXCJcbiAgICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICAgIDpkaXNhYmxlZD1cIiFjb3B5RW5hYmxlZFwiXG4gICAgICBAY2xpY2s9XCJvbkNvcHlcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tcGFzdGUoXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgICA6ZGlzYWJsZWQ9XCIhcGFzdGVFbmFibGVkXCJcbiAgICAgIEBjbGljaz1cIm9uUGFzdGVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc09iamVjdCwgY2xvbmUsIGRlaW5kZW50IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tY2xpcGJvYXJkJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBjbGlwYm9hcmQ6IHsgdHlwZTogW0Jvb2xlYW4sIE9iamVjdF0sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb3B5RW5hYmxlZDogZmFsc2UsXG4gICAgICBwYXN0ZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgZml4Q2xpcGJvYXJkOiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2xpcGJvYXJkT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBpc09iamVjdCh0aGlzLmNsaXBib2FyZCkgPyB0aGlzLmNsaXBib2FyZCA6IHt9XG4gICAgfSxcblxuICAgIGNvcHlEYXRhKCkge1xuICAgICAgY29uc3QgeyBjb3B5IH0gPSB0aGlzLmNsaXBib2FyZE9wdGlvbnNcbiAgICAgIHJldHVybiBjb3B5XG4gICAgICAgID8gY2xpcGJvYXJkRGF0YSA9PiBjb3B5LmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xvbmUoY2xpcGJvYXJkRGF0YSlcbiAgICB9LFxuXG4gICAgcGFzdGVEYXRhKCkge1xuICAgICAgY29uc3QgeyBwYXN0ZSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gcGFzdGVcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+IHBhc3RlLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xpcGJvYXJkRGF0YVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIC8vIENoZWNrIGNsaXBib2FyZCBjb250ZW50IHdoZW5ldmVyIHNvbWV0aGluZyBnZXRzIGNvcGllZCBvciB0aGUgd2luZG93IGdldHNcbiAgICAvLyAocmUpYWN0aXZhdGVkLCBhcyB0aG9zZSBhcmUgdGhlIG1vbWVudHMgd2hlbiB0aGUgY2xpcGJvYXJkIGNhbiBjaGFuZ2U6XG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgY29weTogdGhpcy5jaGVja0NsaXBib2FyZFxuICAgIH0pXG4gICAgdGhpcy5kb21Pbih3aW5kb3csIHtcbiAgICAgIGZvY3VzOiB0aGlzLmNoZWNrQ2xpcGJvYXJkXG4gICAgfSlcbiAgICB0aGlzLiR3YXRjaCgnZGF0YScsIHtcbiAgICAgIC8vIENoZWNrIHJpZ2h0IGF3YXkgYWxzbyBpbiBjYXNlIHRoZXJlJ3MgYWxyZWFkeSBkYXRhIChlLmcuIGNyZWF0ZSBmb3JtKS5cbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICh0bywgZnJvbSkgPT4ge1xuICAgICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgICB0aGlzLmNoZWNrQ2xpcGJvYXJkKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFzeW5jIGdldENsaXBib2FyZERhdGEocmVwb3J0KSB7XG4gICAgICAvLyBVc2UgdGhlIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgIGxldCB7IGNsaXBib2FyZERhdGEgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy5yZWFkVGV4dD8uKClcbiAgICAgICAgaWYgKHRoaXMuZml4Q2xpcGJvYXJkICYmIGpzb24pIHtcbiAgICAgICAgICAvLyBUaGlzIGFwcGVhcnMgdG8gYmUgbmVlZGVkIG9uIFNhZmFyaSB0byBwcmV2ZW50IGEgc3RyYW5nZSBcIlBhc3RlXCJcbiAgICAgICAgICAvLyBidXR0b24gZnJvbSBhcHBlYXJpbmcgd2hlbiB0aGUgY2xpcGJvYXJkIGlzIGFjY2Vzc2VkICh3aHk/ISkuXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICB0aGlzLmZpeENsaXBib2FyZCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24pIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhID0gSlNPTi5wYXJzZShqc29uKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJlcG9ydCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgaWYgKGVyci5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICBhbGVydChkZWluZGVudGBcbiAgICAgICAgICAgICAgVGhlIGRhdGEgaW4gdGhlIGNsaXBib2FyZCBhcHBlYXJzIHRvIGJlIG1hbGZvcm1lZDpcbiAgICAgICAgICAgICAgJHtlcnIubWVzc2FnZX1cbiAgICAgICAgICAgIGApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB7ICRzY2hlbWEsIC4uLmRhdGEgfSA9IGNsaXBib2FyZERhdGEgfHwge31cbiAgICAgIHJldHVybiAkc2NoZW1hID09PSB0aGlzLnNjaGVtYUNvbXBvbmVudD8uc2NoZW1hLm5hbWUgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBhc3luYyBjaGVja0NsaXBib2FyZCgpIHtcbiAgICAgIHRoaXMuY29weUVuYWJsZWQgPSAhIXRoaXMuZGF0YVxuICAgICAgLy8gU2VlIGlmIHRoZSBjbGlwYm9hcmQgY29udGVudCBpcyB2YWxpZCBKU09OIGRhdGEgdGhhdCBpcyBjb21wYXRpYmxlXG4gICAgICAvLyB3aXRoIHRoZSBjdXJyZW50IHRhcmdldCBzY2hlbWEsIGFuZCBvbmx5IHRoZW4gYWN0aXZhdGUgdGhlIHBhc3Rpbmc6XG4gICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhKGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YShmYWxzZSkpIC8vIGRvbid0IHJlcG9ydFxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNvcHkoKSB7XG4gICAgICBsZXQgZGF0YSA9IHRoaXMuc2NoZW1hQ29tcG9uZW50Py5jbGlwYm9hcmREYXRhXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLmNvcHlEYXRhKGRhdGEpXG4gICAgICAgIC8vIEtlZXAgYW4gaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgICB0aGlzLmFwcFN0YXRlLmNsaXBib2FyZERhdGEgPSBkYXRhXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGFjdGl2YXRlIHRoZSBwYXN0ZSBidXR0b24sIGRlcGVuZGRpbmcgb24gYnJvd3NlcnM6XG4gICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0NsaXBib2FyZCgpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uUGFzdGUoKSB7XG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YSh0cnVlKSAvLyByZXBvcnRcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBkYXRhICYmIHRoaXMucGFzdGVEYXRhKGRhdGEpXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuc2V0RGF0YShkYXRhKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcsIHsgdXBkYXRlUm9vdCA9IGZhbHNlLCB1cGRhdGVWaWV3ID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAoIXRoaXMuaXNMb2FkaW5nIF4gIWlzTG9hZGluZykgeyAvLyBCb29sZWFuIHhvclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9ICEhaXNMb2FkaW5nXG4gICAgICAgIGlmICh1cGRhdGVSb290KSB7XG4gICAgICAgICAgdGhpcy5yb290Q29tcG9uZW50LnJlZ2lzdGVyTG9hZGluZyhpc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZVZpZXcpIHtcbiAgICAgICAgICB0aGlzLnZpZXdDb21wb25lbnQuc2V0TG9hZGluZyh0aGlzLmlzTG9hZGluZylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuL0l0ZW1NaXhpbi5qcydcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5pbXBvcnQgeyBzZXREZWZhdWx0cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluLCBMb2FkaW5nTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgIC8vIFBhc3MgbG9jYWwgdmVyYnMgb3ZlcnJpZGVzIG9uIHRvIGNoaWxkcmVuLCBzZWUgdmVyYnMoKSBjb21wdXRlZCBwcm9wLlxuICAgICAgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzLFxuICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0aGlzLmhhc0RhdGFcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9hZGVkRGF0YTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRoZSByZXNvdXJjZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXNvdXJjZSBmb3IgdGhlXG4gICAgICAvLyBhc3NvY2lhdGVkIHNvdXJjZSBzY2hlbWEuXG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZSgpXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIC8vIFRoaXMgY29tcG9uZW50IGlzIGEgZGF0YS1zb3VyY2UgaWYgaXQgaGFzIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlOlxuICAgICAgcmV0dXJuICEhdGhpcy5yZXNvdXJjZVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIC8vIFJldHVybnMgYGZhbHNlYGhlcmUsIGJ1dCBpcyBvdmVycmlkZGVuIHRvIHJldHVybiBgdHJ1ZWAgaW5cbiAgICAgIC8vIGBTb3VyY2VNaXhpbmAgZm9yIGNvbXBvbmVudCB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZWlyIG93biBkYXRhLCBidXRcbiAgICAgIC8vIGVkaXQgdGhlaXIgaXRlbXMgdGhyb3VnaCBhIGxpbmtlZCB2aWV3LiAgSW4gdGhpcyBjYXNlLCByZWFsIGlkcyBuZWVkIHRvXG4gICAgICAvLyBiZSB1c2VkLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGlzVHJhbnNpZW50KCkge1xuICAgICAgLy8gQ2hlY2sgdGhlIGZvcm0gdGhhdCB0aGlzIGNvbXBvbmVudCBiZWxvbmdzIHRvIGFzIHdlbGwsIHNpbmNlIGl0IG1heSBiZVxuICAgICAgLy8gaW4gY3JlYXRpb24gbW9kZSwgd2hpY2ggbWFrZXMgaXQgdHJhbnNpZW50LlxuICAgICAgLy8gTk9URTogVGhpcyBkb2VzIG5vdCBsb29wIGVuZGxlc3NseSBiZWNhdXNlIERpdG9Gb3JtIHJlZGVmaW5lc1xuICAgICAgLy8gYGlzVHJhbnNpZW50KClgIHRvIG9ubHkgcmV0dXJuIGAhdGhpcy5wcm92aWRlc0RhdGFgLlxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybUNvbXBvbmVudFxuICAgICAgcmV0dXJuIChcbiAgICAgICAgIXRoaXMucHJvdmlkZXNEYXRhICYmXG4gICAgICAgICF0aGlzLmxpbmtzVG9WaWV3IHx8XG4gICAgICAgIGZvcm0gJiYgKFxuICAgICAgICAgIGZvcm0uaXNUcmFuc2llbnQgfHxcbiAgICAgICAgICBmb3JtLmlzQ3JlYXRpbmdcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICB0cmFuc2llbnROb3RlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICAnPGI+Tm90ZTwvYj46IHRoZSBwYXJlbnQgc3RpbGwgbmVlZHMgdG8gYmUgc2F2ZWQgJyArXG4gICAgICAgICdpbiBvcmRlciB0byBwZXJzaXN0IHRoaXMgY2hhbmdlLidcbiAgICAgIClcbiAgICB9LFxuXG4gICAgc2hvdWxkTG9hZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgICF0aGlzLmlzTG9hZGluZ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBoYXNEYXRhKCkge1xuICAgICAgLy8gQmFzZSBkZWZpbml0aW9uLCB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluXG4gICAgICByZXR1cm4gISF0aGlzLmxvYWRlZERhdGFcbiAgICB9LFxuXG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBUaGUgYWN0dWFsIGNvZGUgaXMgdGhlIGBnZXRWZXJicygpYCBtZXRob2QsIGZvciBlYXNpZXIgb3ZlcnJpZGluZyBvZlxuICAgICAgLy8gdGhpcyBjb21wdXRlZCBwcm9wZXJ0eSBpbiBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSBSZXNvdXJjZU1peGluLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmVyYnMoKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0aW9uUmFuZ2UoKSB7XG4gICAgICAvLyBPbmx5IGFwcGx5IHBhZ2luYXRpb24gdG8gbGlzdHMuXG4gICAgICBjb25zdCB7IHBhZ2luYXRlOiBhbW91bnQgfSA9IHRoaXMuc291cmNlU2NoZW1hXG4gICAgICBpZiAodGhpcy5pc0xpc3RTb3VyY2UgJiYgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHsgcGFnZSA9IDAgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwYWdlICogYW1vdW50XG4gICAgICAgIHJldHVybiBbc3RhcnQsIHN0YXJ0ICsgYW1vdW50IC0gMV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcXVlcnlQYXJhbXMoKSB7XG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMucGFnaW5hdGlvblJhbmdlXG4gICAgICBjb25zdCB7IHBhZ2UsIC4uLnF1ZXJ5IH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5xdWVyeSwgLy8gUXVlcnkgbWF5IG92ZXJyaWRlIHNjb3BlLlxuICAgICAgICAuLi4ocmFuZ2UgJiYge1xuICAgICAgICAgIC8vIFBhc3MgcGFnaW5hdGlvbiBhcyByYW5nZSwgc28gdGhhdCB3ZSBhdXRvbWF0aWNhbGx5IGdldCBPYmplY3Rpb24nc1xuICAgICAgICAgIC8vIHJlc3VsdHMgY291bnRpbmc6XG4gICAgICAgICAgcmFuZ2U6IHJhbmdlLmpvaW4oJywnKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIFdoZW4gY3JlYXRpbmcgbmVzdGVkIGRhdGEsIHdlIHN0aWxsIG5lZWQgdG8gY2FsbCBzZXR1cERhdGEoKVxuICAgIGlmICh0aGlzLnByb3ZpZGVzRGF0YSB8fCB0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgIHRoaXMuc2V0dXBEYXRhKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFJlc291cmNlKCkge1xuICAgICAgLy8gVGhpcyBpcyBkZWZpbmVkIGFzIGEgbWV0aG9kIHNvIHRoZSBjb21wdXRlZCBgcmVzb3VyY2VgIGdldHRlciBjYW5cbiAgICAgIC8vIGJlIG92ZXJyaWRkZW4gYW5kIGBzdXBlcmAgZnVuY3Rpb25hbGl0eSBjYW4gc3RpbGwgYmUgYWNjZXNzZWQuXG4gICAgICByZXR1cm4gZ2V0UmVzb3VyY2UodGhpcy5zb3VyY2VTY2hlbWE/LnJlc291cmNlLCB7XG4gICAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgcGFyZW50OiB0aGlzLnBhcmVudEZvcm1Db21wb25lbnQ/LnJlc291cmNlID8/IG51bGxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFZlcmJzKCkge1xuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLiR2ZXJicygpXG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICA/IHtcbiAgICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgICAvLyBPdmVycmlkZSBkZWZhdWx0IHZlcmJzIHdpdGggdGhlaXIgdHJhbnNpZW50IHZlcnNpb25zOlxuICAgICAgICAgIGNyZWF0ZTogJ2FkZCcsXG4gICAgICAgICAgY3JlYXRlZDogJ2FkZGVkJyxcbiAgICAgICAgICBzYXZlOiAnYXBwbHknLFxuICAgICAgICAgIHNhdmVkOiAnYXBwbGllZCcsXG4gICAgICAgICAgZGVsZXRlOiAncmVtb3ZlJyxcbiAgICAgICAgICBkZWxldGVkOiAncmVtb3ZlZCdcbiAgICAgICAgfVxuICAgICAgICA6IHZlcmJzXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZGVkRGF0YSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgfSxcblxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIC8vIEFjdHVhbCBjb2RlIGlzIGluIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIGl0J3MgZWFzZXIgdG8gb3ZlcnJpZGVcbiAgICAgIC8vIGBzZXR1cERhdGEoKWAgYW5kIGFuZCBjYWxsIGBlbnN1cmVEYXRhKClgIGZyb20gdGhlIG92ZXJyaWRlcyxcbiAgICAgIC8vIHNlZSBEaXRvRm9ybSBhbmQgU291cmNlTWl4aW4uXG4gICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgIH0sXG5cbiAgICBlbnN1cmVEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkTG9hZCkge1xuICAgICAgICBpZiAodGhpcy5oYXNEYXRhKSB7XG4gICAgICAgICAgdGhpcy5yZWxvYWREYXRhKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVsb2FkRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgfSxcblxuICAgIGxvYWREYXRhKGNsZWFyKSB7XG4gICAgICBpZiAoIXRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgaWYgKGNsZWFyKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckRhdGEoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVxdWVzdERhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVEYXRhKHNjaGVtYSwgdHlwZSkge1xuICAgICAgcmV0dXJuIHNldERlZmF1bHRzKHNjaGVtYSwgdHlwZSA/IHsgdHlwZSB9IDoge30sIHRoaXMpXG4gICAgfSxcblxuICAgIHJlcXVlc3REYXRhKCkge1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJ5UGFyYW1zXG4gICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdnZXQnLCBxdWVyeSB9LCAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGRhdGE/LnR5cGUgPT09ICdGaWx0ZXJWYWxpZGF0aW9uJyAmJlxuICAgICAgICAgICAgICB0aGlzLm9uRmlsdGVyRXJyb3JzPy4oZGF0YS5lcnJvcnMpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNVbmF1dGhvcml6ZWRFcnJvcihyZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgLy8gVE9ETzogQ2FuIHdlIHJlYWxseSBzd2FsbG93IHRoZXNlIGVycm9ycz9cbiAgICAgICAgICAgICAgLy8gSXMgY2FsbGluZyBgZW5zdXJlVXNlcigpYCBpbiBgb25CZWZvcmVSZXF1ZXN0KClgIGVub3VnaD9cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhKHJlc3BvbnNlLmRhdGEpXG4gICAgICAgICAgdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2xvYWQnKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRpb25FcnJvcihyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMFxuICAgIH0sXG5cbiAgICBpc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAxXG4gICAgfSxcblxuICAgIGFzeW5jIGhhbmRsZVJlcXVlc3Qoe1xuICAgICAgbWV0aG9kLFxuICAgICAgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlLFxuICAgICAgcXVlcnksXG4gICAgICBkYXRhXG4gICAgfSwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IGxvYWRpbmdPcHRpb25zID0ge1xuICAgICAgICB1cGRhdGVSb290OiB0cnVlLCAvLyBEaXNwbGF5IHNwaW5uZXIgaW4gaGVhZGVyIHdoZW4gbG9hZGluZyBpbiByZXNvdXJjZXNcbiAgICAgICAgdXBkYXRlVmlldzogdGhpcy5pc0luVmlldyAvLyBOb3RpZnkgdmlldyBvZiBsb2FkaW5nIGZvciB2aWV3IGNvbXBvbmVudHNcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEsIHF1ZXJ5IH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAvLyBQYXNzIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UgdG8gdGhlIGNhbGxiYWNrLCBzbyB0aGV5IGNhbiBiZVxuICAgICAgICAvLyBleHBvc2VkIHRvIGZ1cnRoZXIgY2FsbGJhY2tzIHRocm91Z2ggRGl0b0NvbnRleHQuXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgY2FsbGJhY2sgcmV0dXJucyB0cnVlLCBlcnJvcnMgd2VyZSBhbHJlYWR5IGhhbmRsZWQuXG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGVycm9yXG4gICAgICAgIGlmICghY2FsbGJhY2soZXJyb3IsIHJlc3BvbnNlKSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgIGlmIChkYXRhICYmIGlzU3RyaW5nKGRhdGEudHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6IGxhYmVsaXplKGRhdGEudHlwZSksXG4gICAgICAgICAgICAgIHRleHQ6IGRhdGEubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBlcnJvclxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgfSxcblxuICAgIGdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKSB7XG4gICAgICAvLyBDb252ZW50aW9uOiBvbmx5IHBvc3QsIHB1dCBhbmQgcGF0Y2ggcmVxdWVzdHMgcGFzcyB0aGUgZGF0YSBhcyBwYXlsb2FkLlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluY2x1ZGVzKG1ldGhvZCkgJiYgKFxuICAgICAgICAgIC8vIFRPRE86IFVzZSBgaGFuZGxlRGF0YVNjaGVtYSgpYCBhc3luY2hyb25vdXNseSBoZXJlIGluc3RlYWQsIHRvXG4gICAgICAgICAgLy8gb2ZmZXIgdGhlIHNhbWUgYW1vdW50IG9mIHBvc3NpYmlsaXRpZXMgZm9yIGRhdGEgbG9hZGluZy5cbiAgICAgICAgICBidXR0b24uZ2V0U2NoZW1hVmFsdWUoWydyZXNvdXJjZScsICdkYXRhJ10pIHx8XG4gICAgICAgICAgYnV0dG9uLnByb2Nlc3NlZEl0ZW1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0aG9kIH0gPSByZXNvdXJjZVxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgc2V0RGF0YSA9IGZhbHNlLFxuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MgPSAoKSA9PiB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IFN1Y2Nlc3NmdWwnLFxuICAgICAgICB0ZXh0OiAnUmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQuJ1xuICAgICAgfSksXG4gICAgICBub3RpZnlFcnJvciA9IGVycm9yID0+IHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgdGV4dDogW1xuICAgICAgICAgIGBVbmFibGUgdG8gc2VuZCByZXF1ZXN0JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgXVxuICAgICAgfSlcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KFxuICAgICAgICAgIHsgbWV0aG9kLCByZXNvdXJjZSwgZGF0YSB9LFxuICAgICAgICAgIGFzeW5jIChlcnIsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgLy8gU2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIERpdG8gdmFsaWRhdGlvbiBlcnJvcjpcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy5pc1ZhbGlkYXRpb25FcnJvcihyZXNwb25zZSkgJiYgZGF0YS5lcnJvcnNcbiAgICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNPYmplY3QoZGF0YSkgPyBkYXRhIDogZXJyXG4gICAgICAgICAgICAgICAgb25FcnJvcj8uKGVycm9yKVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB1bmRlcmx5aW5nIGRhdGEgYmVmb3JlIGNhbGxpbmcgYG5vdGlmeSgpYCBvclxuICAgICAgICAgICAgICAvLyBgdGhpcy5pdGVtTGFiZWxgLCBzbyBpZCBpcyBzZXQgYWZ0ZXIgY3JlYXRpbmcgbmV3IGl0ZW1zLlxuICAgICAgICAgICAgICBpZiAoc2V0RGF0YSAmJiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb25TdWNjZXNzPy4oKVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdzdWNjZXNzJywge1xuICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5U3VjY2Vzc1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCBldmVudCwgeyBub3RpZnksIGVycm9yIH0pIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgY29udGV4dCBvdXRzaWRlIG9mIGBlbWl0RXZlbnQoKWAsIHNvIHRoYXRcbiAgICAgIC8vIGBjb250ZXh0Lndhc05vdGlmaWVkYCBjYW4gYmUgY2hlY2tlZCBhZnRlci5cbiAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgRGl0b0NvbnRleHQoYnV0dG9uLCB7XG4gICAgICAgIG5lc3RlZDogZmFsc2UsXG4gICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgaXRlbUxhYmVsOiB0aGlzLml0ZW1MYWJlbCxcbiAgICAgICAgZXJyb3JcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBidXR0b24uZW1pdEV2ZW50KGV2ZW50LCB7IGNvbnRleHQgfSlcbiAgICAgIGlmIChcbiAgICAgICAgbm90aWZ5ICYmXG4gICAgICAgIC8vIFByZXZlbnQgZGVmYXVsdCBpZiBhbnl0aGluZyB3YXMgcmV0dXJuZWQgZnJvbSB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgICAgcmVzID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgLy8gRG8gbm90IGRpc3BsYXkgZGVmYXVsdCBub3RpZmljYXRpb24gaWYgdGhlIGV2ZW50IGhhbmRsZXIgYWxyZWFkeVxuICAgICAgICAvLyBkaXNwbGF5ZWQgYSBub3RpZmljYXRpb24uXG4gICAgICAgICFjb250ZXh0Lndhc05vdGlmaWVkXG4gICAgICApIHtcbiAgICAgICAgbm90aWZ5KGVycm9yKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1mb3JtLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgOmNsYXNzPVwieyAnZGl0by1mb3JtLW5lc3RlZCc6IGlzTmVzdGVkUm91dGUgfVwiXG4pXG4gIC8vIE5PVEU6IE5lc3RlZCBmb3JtIGNvbXBvbmVudHMgYXJlIGtlcHQgYWxpdmUgYnkgdXNpbmcgYHYtc2hvd2AgaW5zdGVhZCBvZlxuICAvLyBgdi1pZmAgaGVyZSwgc28gZXZlbnQgaGFuZGxpbmcgYW5kIG90aGVyIHRoaW5ncyBzdGlsbCB3b3JrIHdpdGggbmVzdGVkXG4gIC8vIGVkaXRpbmcuIE9ubHkgcmVuZGVyIGEgcm91dGVyLXZpZXcgaGVyZSBpZiB0aGlzIGlzbid0IHRoZSBsYXN0IGRhdGEgcm91dGVcbiAgLy8gYW5kIG5vdCBhIG5lc3RlZCBmb3JtIHJvdXRlLCB3aGljaCB3aWxsIGFwcGVhciBlbHNld2hlcmUgaW4gaXRzIG93biB2aWV3LlxuICByb3V0ZXItdmlldyhcbiAgICB2LWlmPVwiIShpc0xhc3RVbm5lc3RlZFJvdXRlIHx8IGlzTmVzdGVkUm91dGUpXCJcbiAgICB2LXNob3c9XCIhaXNBY3RpdmVcIlxuICApXG4gIC8vIFVzZSBhIDxkaXY+IGZvciBpbmxpbmVkIGZvcm1zLCBhcyB3ZSBzaG91bGRuJ3QgbmVzdCBhY3R1YWwgPGZvcm0+IHRhZ3MuXG4gIGNvbXBvbmVudC5kaXRvLXNjcm9sbChcbiAgICB2LXNob3c9XCJpc0FjdGl2ZVwiXG4gICAgOmlzPVwiaXNOZXN0ZWRSb3V0ZSA/ICdkaXYnIDogJ2Zvcm0nXCJcbiAgICBAc3VibWl0LnByZXZlbnRcbiAgKVxuICAgIC8vIFByZXZlbnQgaW1wbGljaXQgc3VibWlzc2lvbiBvZiB0aGUgZm9ybSwgZm9yIGV4YW1wbGUgd2hlbiB0eXBpbmcgZW50ZXJcbiAgICAvLyBpbiBhbiBpbnB1dCBmaWVsZC5cbiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTE1MDc4MDZcbiAgICBidXR0b24oXG4gICAgICB2LXNob3c9XCJmYWxzZVwiXG4gICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgIGRpc2FibGVkPVwidHJ1ZVwiXG4gICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgIClcbiAgICBkaXRvLXNjaGVtYShcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgOm1lbnVIZWFkZXI9XCJ0cnVlXCJcbiAgICApXG4gICAgICBkaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kLmRpdG8tYnV0dG9ucy1tYWluLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1mb3JtLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgOmNsYXNzPVwieyAnZGl0by1mb3JtLW5lc3RlZCc6IGlzTmVzdGVkUm91dGUgfVwiXG4pXG4gIC8vIE5PVEU6IE5lc3RlZCBmb3JtIGNvbXBvbmVudHMgYXJlIGtlcHQgYWxpdmUgYnkgdXNpbmcgYHYtc2hvd2AgaW5zdGVhZCBvZlxuICAvLyBgdi1pZmAgaGVyZSwgc28gZXZlbnQgaGFuZGxpbmcgYW5kIG90aGVyIHRoaW5ncyBzdGlsbCB3b3JrIHdpdGggbmVzdGVkXG4gIC8vIGVkaXRpbmcuIE9ubHkgcmVuZGVyIGEgcm91dGVyLXZpZXcgaGVyZSBpZiB0aGlzIGlzbid0IHRoZSBsYXN0IGRhdGEgcm91dGVcbiAgLy8gYW5kIG5vdCBhIG5lc3RlZCBmb3JtIHJvdXRlLCB3aGljaCB3aWxsIGFwcGVhciBlbHNld2hlcmUgaW4gaXRzIG93biB2aWV3LlxuICByb3V0ZXItdmlldyhcbiAgICB2LWlmPVwiIShpc0xhc3RVbm5lc3RlZFJvdXRlIHx8IGlzTmVzdGVkUm91dGUpXCJcbiAgICB2LXNob3c9XCIhaXNBY3RpdmVcIlxuICApXG4gIC8vIFVzZSBhIDxkaXY+IGZvciBpbmxpbmVkIGZvcm1zLCBhcyB3ZSBzaG91bGRuJ3QgbmVzdCBhY3R1YWwgPGZvcm0+IHRhZ3MuXG4gIGNvbXBvbmVudC5kaXRvLXNjcm9sbChcbiAgICB2LXNob3c9XCJpc0FjdGl2ZVwiXG4gICAgOmlzPVwiaXNOZXN0ZWRSb3V0ZSA/ICdkaXYnIDogJ2Zvcm0nXCJcbiAgICBAc3VibWl0LnByZXZlbnRcbiAgKVxuICAgIC8vIFByZXZlbnQgaW1wbGljaXQgc3VibWlzc2lvbiBvZiB0aGUgZm9ybSwgZm9yIGV4YW1wbGUgd2hlbiB0eXBpbmcgZW50ZXJcbiAgICAvLyBpbiBhbiBpbnB1dCBmaWVsZC5cbiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTE1MDc4MDZcbiAgICBidXR0b24oXG4gICAgICB2LXNob3c9XCJmYWxzZVwiXG4gICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgIGRpc2FibGVkPVwidHJ1ZVwiXG4gICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgIClcbiAgICBkaXRvLXNjaGVtYShcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgOm1lbnVIZWFkZXI9XCJ0cnVlXCJcbiAgICApXG4gICAgICBkaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kLmRpdG8tYnV0dG9ucy1tYWluLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSwgY2FwaXRhbGl6ZSwgcGFyc2VEYXRhUGF0aCwgbWVyZ2UgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSb3V0ZU1peGluIGZyb20gJy4uL21peGlucy9Sb3V0ZU1peGluLmpzJ1xuaW1wb3J0IFJlc291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMsIGlzT2JqZWN0U291cmNlIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZm9ybScsIHtcbiAgbWl4aW5zOiBbUm91dGVNaXhpbiwgUmVzb3VyY2VNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRlZERhdGE6IG51bGwsXG4gICAgICBjbG9uZWREYXRhOiB1bmRlZmluZWQsXG4gICAgICBzb3VyY2VLZXk6IG51bGwsXG4gICAgICBpc0Zvcm06IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2ZXJicygpIHtcbiAgICAgIC8vIEFkZCBzdWJtaXQgLyBzdWJtaXR0ZWQgdG8gdGhlIHZlcmJzIHJldHVybmVkIGJ5IFJlc291cmNlTWl4aW5cbiAgICAgIC8vIE5PVEU6IFRoZXNlIGdldCBwYXNzZWQgb24gdG8gY2hpbGRyZW4gdGhyb3VnaDpcbiAgICAgIC8vIGBwcm92aWRlKCkgLi4uIHsgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzIH1gIGluIFJlc291cmNlTWl4aW5cbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy5nZXRWZXJicygpXG4gICAgICBjb25zdCB7IGlzQ3JlYXRpbmcsIHByb3ZpZGVzRGF0YSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udmVyYnMsXG4gICAgICAgIHN1Ym1pdDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZSA6IHZlcmJzLnNhdmUsXG4gICAgICAgIHN1Ym1pdHRlZDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZWQgOiB2ZXJicy5zYXZlZCxcbiAgICAgICAgY2FuY2VsOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWwgOiB2ZXJicy5jbG9zZSxcbiAgICAgICAgY2FuY2VsbGVkOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWxsZWQgOiB2ZXJicy5jbG9zZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbUZvcm1TY2hlbWEoXG4gICAgICAgIHRoaXMuc291cmNlU2NoZW1hLFxuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBkYXRhIHlldCwgcHJvdmlkZSBhbiBlbXB0eSBvYmplY3Qgd2l0aCBqdXN0IHRoZSByaWdodFxuICAgICAgICAvLyB0eXBlIHNldCwgc28gdGhlIGZvcm0gY2FuIGFsd2F5cyBiZSBkZXRlcm1pbmVkLlxuICAgICAgICB0aGlzLmRhdGEgfHwgeyB0eXBlOiB0aGlzLnR5cGUgfSxcbiAgICAgICAgdGhpcy5jb250ZXh0XG4gICAgICApIHx8IHt9IC8vIEFsd2F5cyByZXR1cm4gYSBzY2hlbWEgb2JqZWN0IHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIGl0LlxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXMoXG4gICAgICAgIG1lcmdlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNhbmNlbDoge1xuICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuY2FuY2VsKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc3VibWl0OiAhdGhpcy5kb2VzTXV0YXRlICYmIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgICAgIC8vIFN1Ym1pdCBidXR0b25zIGNsb3NlIHRoZSBmb3JtIGJ5IGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGNsb3NlRm9ybTogdHJ1ZSxcbiAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6ICh7IGNvbXBvbmVudDogYnV0dG9uIH0pID0+IGJ1dHRvbi5zdWJtaXQoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnNjaGVtYS5idXR0b25zXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0xhc3RSb3V0ZSB8fCB0aGlzLmlzTGFzdFVubmVzdGVkUm91dGVcbiAgICB9LFxuXG4gICAgaXNUcmFuc2llbnQoKSB7XG4gICAgICByZXR1cm4gIXRoaXMucHJvdmlkZXNEYXRhXG4gICAgfSxcblxuICAgIGlzQ3JlYXRpbmcoKSB7XG4gICAgICAvLyB0aGlzLnBhcmFtIGlzIGluaGVyaXRlZCBmcm9tIFJvdXRlTWl4aW5cbiAgICAgIHJldHVybiB0aGlzLnBhcmFtID09PSAnY3JlYXRlJ1xuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuICF0aGlzLmRvZXNNdXRhdGUgJiYgISF0aGlzLm1haW5TY2hlbWFDb21wb25lbnQ/LmlzRGlydHlcbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRUYWIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50Py5zZWxlY3RlZFRhYiB8fCBudWxsXG4gICAgfSxcblxuICAgIGRvZXNNdXRhdGUoKSB7XG4gICAgICAvLyBXaGVuIGBzb3VyY2VTY2hlbWEubXV0YXRlYCBpcyB0cnVlLCB0aGUgZm9ybSBlZGl0cyB0aGUgaW5oZXJpdGVkIGRhdGFcbiAgICAgIC8vIGRpcmVjdGx5IGluc3RlYWQgb2YgbWFraW5nIGEgY29weSBmb3IgYXBwbGljYXRpb24gdXBvbiBzdWJtaXQuXG4gICAgICAvLyBTZWUgYGluaGVyaXRlZERhdGEoKWAgY29tcHV0ZWQgcHJvcGVydHkgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZVNjaGVtYS5tdXRhdGVcbiAgICB9LFxuXG4gICAgdHlwZSgpIHtcbiAgICAgIC8vIFRoZSB0eXBlIG9mIGZvcm0gdG8gY3JlYXRlLCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZm9ybXMgdG8gY2hvb3NlIGZyb20uXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucXVlcnkudHlwZVxuICAgIH0sXG5cbiAgICBpdGVtSWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6ICh0aGlzLnBhcmFtID8/IG51bGwpXG4gICAgfSxcblxuICAgIG1ldGhvZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmcgPyAncG9zdCcgOiAncGF0Y2gnXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLmdldFJlc291cmNlKClcbiAgICAgIHJldHVybiBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLml0ZW1JZCwgcmVzb3VyY2UpIHx8IHJlc291cmNlXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWJQcmVmaXgoKSB7XG4gICAgICByZXR1cm4gY2FwaXRhbGl6ZSh0aGlzLmlzQ3JlYXRpbmcgPyB0aGlzLnZlcmJzLmNyZWF0ZSA6IHRoaXMudmVyYnMuZWRpdClcbiAgICB9LFxuXG4gICAgZGF0YSgpIHtcbiAgICAgIC8vIFJldHVybiBkaWZmZXJlbnQgZGF0YSBcImNvbnRhaW5lcnNcIiBiYXNlZCBvbiBkaWZmZXJlbnQgc2NlbmFyaW9zOlxuICAgICAgLy8gMS4gY3JlYXRlZERhdGEsIGlmIHdlJ3JlIGluIGEgZm9ybSBmb3IgYSBuZXdseSBjcmVhdGVkIG9iamVjdC5cbiAgICAgIC8vIDIuIGxvYWRlZERhdGEsIGlmIHRoZSBmb3JtIGl0c2VsZiBpcyB0aGUgcm9vdCBvZiB0aGUgZGF0YSAoZS5nLiB3aGVuXG4gICAgICAvLyAgICBkaXJlY3RseSBsb2FkaW5nIGFuIGVkaXRpbmcgcm9vdCkuXG4gICAgICAvLyAzLiBUaGUgZGF0YSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50LCB3aGljaCBpdHNlbGYgbWF5IGJlIGVpdGhlciBhXG4gICAgICAvLyAgICB2aWV3IHRoYXQgbG9hZGVkIHRoZSBkYXRhLCBvciBhIGZvcm0gdGhhdCBlaXRoZXIgbG9hZGVkIHRoZSBkYXRhLCBvclxuICAgICAgLy8gICAgYWxzbyBpbmhlcml0ZWQgaXQgZnJvbSBpdHMgcGFyZW50LiBOb3RlIHRoYXQgd2UgdXNlIGEgY2xvbmUgb2YgaXQsXG4gICAgICAvLyAgICBzbywgZGF0YSBjaGFuZ2VzIGFyZW4ndCBhcHBsaWVkIHVudGlsIHNldFNvdXJjZURhdGEoKSBpcyBjYWxsZWQuXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVkRGF0YSB8fCB0aGlzLmxvYWRlZERhdGEgfHwgdGhpcy5pbmhlcml0ZWREYXRhIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREYXRhUGF0aEZyb20odGhpcy5kYXRhQ29tcG9uZW50KVxuICAgIH0sXG5cbiAgICBzb3VyY2VEYXRhKCkge1xuICAgICAgLy8gUG9zc2libGUgcGFyZW50cyBhcmUgRGl0b0Zvcm0gZm9yIGZvcm1zLCBvciBEaXRvVmlldyBmb3Igcm9vdCBsaXN0cy5cbiAgICAgIC8vIEJvdGggaGF2ZSBhIGRhdGEgcHJvcGVydHkgd2hpY2ggYWJzdHJhY3RzIGF3YXkgbG9hZGluZyBhbmQgaW5oZXJpdGluZ1xuICAgICAgLy8gb2YgZGF0YS5cbiAgICAgIGxldCB7IGRhdGEgfSA9IHRoaXMucGFyZW50Um91dGVDb21wb25lbnRcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIC8vIEhhbmRsZSBuZXN0ZWQgZGF0YSBieSBzcGxpdHRpbmcgdGhlIGRhdGFQYXRoLCBpdGVyYXRlIHRocm91Z2ggdGhlXG4gICAgICAgIC8vIGFjdHVhbCBkYXRhIGFuZCBsb29rIG5lc3QgY2hpbGQtZGF0YSB1cC5cbiAgICAgICAgY29uc3QgZGF0YVBhcnRzID0gcGFyc2VEYXRhUGF0aChcbiAgICAgICAgICB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50KVxuICAgICAgICApXG4gICAgICAgIC8vIENvbXBhcmUgZGF0YVBhcnRzIGFnYWluc3QgbWF0Y2hlZCByb3V0ZVBhdGggcGFydHMsIHRvIGlkZW50aWZ5IHRob3NlXG4gICAgICAgIC8vIHBhcnRzIHRoYXQgbmVlZCB0byBiZSB0cmVhdGVkIGxpa2UgaWRzIGFuZCBtYXBwZWQgdG8gaW5kaWNlcyBpbiBkYXRhLlxuICAgICAgICBjb25zdCBwYXRoUGFydHMgPSB0aGlzLnJvdXRlUmVjb3JkLnBhdGguc3BsaXQoJy8nKVxuICAgICAgICBjb25zdCByb3V0ZVBhcnRzID0gcGF0aFBhcnRzLnNsaWNlKHBhdGhQYXJ0cy5sZW5ndGggLSBkYXRhUGFydHMubGVuZ3RoKVxuICAgICAgICB0aGlzLnNvdXJjZUtleSA9IG51bGxcbiAgICAgICAgY29uc3QgbGFzdERhdGFQYXJ0ID0gZGF0YVBhcnRzW2RhdGFQYXJ0cy5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpICYmIGxhc3REYXRhUGFydCA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIG9iamVjdCBzb3VyY2UgYW5kIGFyZSBjcmVhdGluZywgdGhlIGRhdGFQYXRoIG5lZWRzIHRvXG4gICAgICAgICAgLy8gYmUgc2hvcnRlbmVkIGJ5IHRoZSAnY3JlYXRlJyBlbnRyeS4gVGhpcyBpc24ndCBuZWVkZWQgZm9yIGxpc3RcbiAgICAgICAgICAvLyBzb3VyY2VzLCBhcyB0aGVyZSB0aGUgcGFyYW1ldGVyIGlzIGFjdHVhbGx5IG1hcHBlZCB0byB0aGUgaXRlbSBpZC5cbiAgICAgICAgICBkYXRhUGFydHMubGVuZ3RoLS1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGRhdGFQYXJ0cy5sZW5ndGg7IGkgPCBsICYmIGRhdGE7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRhdGFQYXJ0ID0gZGF0YVBhcnRzW2ldXG4gICAgICAgICAgLy8gSWYgdGhpcyBpcyBhbiA6aWQgcGFydCwgZmluZCB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gd2l0aCBnaXZlbiBpZC5cbiAgICAgICAgICBjb25zdCBrZXkgPSAvXjppZC8udGVzdChyb3V0ZVBhcnRzW2ldKVxuICAgICAgICAgICAgPyBkYXRhUGFydCA9PT0gJ2NyZWF0ZSdcbiAgICAgICAgICAgICAgPyBudWxsIC8vIFRoZXJlJ3Mgbm8gaW5kZXggZm9yIGVudHJpZXMgYWJvdXQgdG8gYmUgY3JlYXRlZFxuICAgICAgICAgICAgICA6IHRoaXMuZmluZEl0ZW1JZEluZGV4KHRoaXMuc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGFydClcbiAgICAgICAgICAgIDogZGF0YVBhcnRcbiAgICAgICAgICAvLyBTa2lwIHRoZSBmaW5hbCBsb29rdXAgYnV0IHJlbWVtYmVyIGBzb3VyY2VLZXlgLCBhcyB3ZSB3YW50IHRoZVxuICAgICAgICAgIC8vIHBhcmVudCBkYXRhIHNvIHdlIGNhbiByZXBsYWNlIHRoZSBlbnRyeSBhdCBgc291cmNlS2V5YCBvbiBpdC5cbiAgICAgICAgICBpZiAoaSA9PT0gbCAtIDEpIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlS2V5ID0ga2V5XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhW2tleV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGluaGVyaXRlZERhdGEoKSB7XG4gICAgICAvLyBEYXRhIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgYW5kIGNsb25lZCB0byBwcm90ZWN0IGFnYWluc3QgcmVhY3RpdmVcbiAgICAgIC8vIGNoYW5nZXMgdW50aWwgY2hhbmdlcyBhcmUgYXBwbGllZCB0aHJvdWdoIHNldFNvdXJjZURhdGEoKSwgdW5sZXNzXG4gICAgICAvLyBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgaW4gd2hpY2ggY2FzZSBkYXRhIGlzIG11dGF0ZWQgZGlyZWN0bHkuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhICYmXG4gICAgICAgIHRoaXMuc291cmNlS2V5ICE9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnNvdXJjZURhdGFbdGhpcy5zb3VyY2VLZXldXG4gICAgICAgIGlmICghdGhpcy5kb2VzTXV0YXRlKSB7XG4gICAgICAgICAgLy8gVXNlIGEgdHJpY2sgdG8gc3RvcmUgY2xvbmVkIGluaGVyaXRlZCBkYXRhIGluIGNsb25lZERhdGEsIHRvIG1ha2VcbiAgICAgICAgICAvLyBpdCByZWFjdGl2ZSBhbmQgcHJldmVudCBpdCBmcm9tIGJlaW5nIGNsb25lZCBtdWx0aXBsZSB0aW1lcy5cbiAgICAgICAgICB0aGlzLmNsb25lZERhdGEgPSBkYXRhID0gY2xvbmUoZGF0YSlcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgZGF0YSA9PT0gbnVsbCAmJlxuICAgICAgICAgICF0aGlzLmlzQ3JlYXRpbmcgJiZcbiAgICAgICAgICBpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gSWYgZGF0YSBvZiBhbiBvYmplY3Qgc291cmNlIGlzIG51bGwsIHJlZGlyZWN0IHRvIGl0cyBjcmVhdGUgcm91dGUuXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBwYXRoOiAnY3JlYXRlJywgYXBwZW5kOiB0cnVlIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNsb25lZERhdGFcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBpdGVtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zb3VyY2VTY2hlbWEsIHRoaXMuZGF0YSwgeyBleHRlbmRlZDogdHJ1ZSB9KVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNvdXJjZURhdGE6ICdjbGVhckNsb25lZERhdGEnLFxuICAgIC8vIE5lZWRlZCBmb3IgdGhlICdjcmVhdGUnIHJlZGlyZWN0IGluIGBpbmhlcml0ZWREYXRhKClgIHRvIHdvcms6XG4gICAgY3JlYXRlOiAnc2V0dXBEYXRhJ1xuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBlbWl0U2NoZW1hRXZlbnQoZXZlbnQsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudC5lbWl0RXZlbnQoZXZlbnQsIHBhcmFtcylcbiAgICB9LFxuXG4gICAgZ2V0RGF0YVBhdGhGcm9tKHJvdXRlKSB7XG4gICAgICAvLyBHZXQgdGhlIGRhdGEgcGF0aCBieSBkZW5vcm1hbGl6ZVBhdGggdGhlIHJlbGF0aXZlIHJvdXRlIHBhdGhcbiAgICAgIHJldHVybiB0aGlzLmFwaS5kZW5vcm1hbGl6ZVBhdGgodGhpcy5wYXRoXG4gICAgICAgIC8vIERpdG9WaWV3cyBoYXZlIG5lc3RlZCByb3V0ZXMsIHNvIGRvbid0IHJlbW92ZSB0aGVpciBwYXRoLlxuICAgICAgICAuc2xpY2UoKHJvdXRlLmlzVmlldyA/IDAgOiByb3V0ZS5wYXRoLmxlbmd0aCkgKyAxKSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0dXBEYXRhKClcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICBpZiAodGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZERhdGEgPSB0aGlzLmNyZWF0ZWREYXRhIHx8XG4gICAgICAgICAgdGhpcy5jcmVhdGVEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLnR5cGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXRTb3VyY2VEYXRhKGRhdGEpIHtcbiAgICAgIGlmICh0aGlzLnNvdXJjZURhdGEgJiYgdGhpcy5zb3VyY2VLZXkgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgeyBtYWluU2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICAgIHRoaXMuJHNldChcbiAgICAgICAgICB0aGlzLnNvdXJjZURhdGEsXG4gICAgICAgICAgdGhpcy5zb3VyY2VLZXksXG4gICAgICAgICAgbWFpblNjaGVtYUNvbXBvbmVudC5maWx0ZXJEYXRhKGRhdGEpXG4gICAgICAgIClcbiAgICAgICAgbWFpblNjaGVtYUNvbXBvbmVudC5vbkNoYW5nZSgpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYWRkU291cmNlRGF0YShkYXRhKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgID8gdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogISF0aGlzLnNvdXJjZURhdGE/LnB1c2goZGF0YSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnNldERhdGEobnVsbClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBzZXREYXRhKCkgaXMgY2FsbGVkIGFmdGVyIHN1Ym1pdCB3aGVuIGRhdGEgaGFzIGNoYW5nZWQuXG4gICAgICBpZiAodGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICAvLyBGb3IgY29tcG9uZW50cyB3aXRoIHRyYW5zaWVudCBkYXRhLCBtb2RpZnkgdGhpcy5zb3VyY2VEYXRhLlxuICAgICAgICB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZERhdGEgPSBudWxsXG4gICAgICAgIHRoaXMubG9hZGVkRGF0YSA9IGRhdGFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJDbG9uZWREYXRhKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgLy8gT25seSBjbGVhciBpZiB0aGUgd2F0Y2hlZCBzb3VyY2VEYXRhIGl0c2VsZiBjaGFuZ2VzIGluIHRoZSBmb3JtLlxuICAgICAgaWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSkge1xuICAgICAgICB0aGlzLmNsb25lZERhdGEgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xvc2UoKVxuICAgIH0sXG5cbiAgICBhc3luYyBjbG9zZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQucGF0aClcbiAgICB9LFxuXG4gICAgZ2V0U3VibWl0VmVyYihwcmVzZW50ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IHByZXNlbnQgPyAnY3JlYXRlJyA6ICdjcmVhdGVkJ1xuICAgICAgICA6IHByZXNlbnQgPyAnc3VibWl0JyA6ICdzdWJtaXR0ZWQnXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChidXR0b24sIHsgdmFsaWRhdGUgPSB0cnVlLCBjbG9zZUZvcm0gPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICh2YWxpZGF0ZSAmJiAhdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBnZXRWZXJiID0gcHJlc2VudCA9PiB0aGlzLnZlcmJzW3RoaXMuZ2V0U3VibWl0VmVyYihwcmVzZW50KV1cblxuICAgICAgLy8gQWxsb3cgYnV0dG9ucyB0byBvdmVycmlkZSBib3RoIG1ldGhvZCBhbmQgcmVzb3VyY2UgcGF0aCB0byBzdWJtaXQgdG86XG4gICAgICBjb25zdCBidXR0dG9uUmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5yZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlc291cmNlID0gYnV0dHRvblJlc291cmNlIHx8IHRoaXMucmVzb3VyY2VcbiAgICAgIGNvbnN0IG1ldGhvZCA9IHJlc291cmNlPy5tZXRob2QgfHwgdGhpcy5tZXRob2RcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKVxuICAgICAgbGV0IHN1Y2Nlc3NcbiAgICAgIGlmICghYnV0dHRvblJlc291cmNlICYmIHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgICAgICAgICA/IGBJdGVtICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gXG4gICAgICAgICAgICAgICAgOiBgQ2hhbmdlICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgICA/IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICAgICAgICA6IGBDaGFuZ2VzIHRvICR7dGhpcy5pdGVtTGFiZWx9IHdlcmUgJHt2ZXJifS5gLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IGBVbmFibGUgdG8gJHt2ZXJifSAke3RoaXMuaXRlbUxhYmVsfS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIHNldERhdGE6IHRydWUsXG4gICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCh0aGlzLmdldFN1Ym1pdFZlcmIoKSksXG4gICAgICAgICAgb25FcnJvcjogZXJyb3IgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2Vycm9yJywge1xuICAgICAgICAgICAgY29udGV4dDogeyBlcnJvciB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbm90aWZ5U3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIoZmFsc2UpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgdGl0bGU6IGBTdWNjZXNzZnVsbHkgJHtjYXBpdGFsaXplKHZlcmIpfWAsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0ke2Vycm9yID8gJzonIDogJyd9YCxcbiAgICAgICAgICAgICAgICBlcnJvcj8ubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgICAgaWYgKGNsb3NlRm9ybSB8fCBidXR0b24uY2xvc2VGb3JtKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICAgICAgLy8gUmVkaXJlY3QgdG8gdGhlIGZvcm0gZWRpdGluZyB0aGUgbmV3bHkgY3JlYXRlZCBpdGVtOlxuICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIHRoaXMuZGF0YSlcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IHBhdGg6IGAuLi8ke2lkfWAsIGFwcGVuZDogdHJ1ZSB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2Vzc1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRUcmFuc2llbnQoYnV0dG9uLCBfcmVzb3VyY2UsIF9tZXRob2QsIGRhdGEsIHtcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzLFxuICAgICAgbm90aWZ5RXJyb3JcbiAgICB9KSB7XG4gICAgICAvLyBIYW5kbGUgdGhlIGRlZmF1bHQgXCJzdWJtaXR0aW5nXCIgb2YgdHJhbnNpZW50LCBuZXN0ZWQgZGF0YTpcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyB0aGlzLmFkZFNvdXJjZURhdGEoZGF0YSlcbiAgICAgICAgOiB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gJ0NvdWxkIG5vdCBzdWJtaXQgdHJhbnNpZW50IGl0ZW0nXG4gICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnZXJyb3InLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1mb3JtLW5lc3RlZFxuICAgICYsXG4gICAgLmRpdG8tc2Nyb2xsXG4gICAgICAvLyBObyBzY3JvbGxpbmcgaW5zaWRlIG5lc3RlZCBmb3JtcywgYW5kIHByZXZlbnQgb3BlbiAubXVsdGlzZWxlY3QgZnJvbVxuICAgICAgLy8gYmVpbmcgY3JvcHBlZC5cbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Gb3JtIGZyb20gJy4vRGl0b0Zvcm0udnVlJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvRm9ybS5jb21wb25lbnQoJ2RpdG8tZm9ybS1uZXN0ZWQnLCB7fSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1lcnJvcnMoXG4gIHYtaWY9XCJlcnJvcnNcIlxuKVxuICB1bFxuICAgIGxpKHYtZm9yPVwiZXJyb3Igb2YgZXJyb3JzXCIpXG4gICAgICB8IHt7IGVycm9yIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1lcnJvcnMoXG4gICAgdi1pZj1cImVycm9yc1wiXG4gIClcbiAgICB1bFxuICAgICAgbGkodi1mb3I9XCJlcnJvciBvZiBlcnJvcnNcIilcbiAgICAgICAgfCB7eyBlcnJvciB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWVycm9yc1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgIHotaW5kZXg6IDFcbiAgICB1bFxuICAgICAgbWFyZ2luLXRvcDogMXB4XG4gICAgICBjb2xvcjogJGNvbG9yLWVycm9yXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWVycm9ycycsIHtcbiAgcHJvcHM6IHtcbiAgICBlcnJvcnM6IHsgdHlwZTogQXJyYXksIGRlZmF1bHQ6IG51bGwgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXNjb3Blc1xuICByb3V0ZXItbGluayhcbiAgICB2LWZvcj1cIihzY29wZSwga2V5KSBpbiBzY29wZXNcIlxuICAgIDprZXk9XCJrZXlcIlxuICAgIDp0bz1cImdldFNjb3BlTGluayhzY29wZSlcIlxuICAgIGN1c3RvbSB2LXNsb3Q9XCJ7IG5hdmlnYXRlIH1cIlxuICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNlbGVjdGVkJzogc2NvcGUubmFtZSA9PT0gcXVlcnkuc2NvcGUgfVwiXG4gICAgICA6dGl0bGU9XCJzY29wZS5oaW50IHx8IGdldExhYmVsKHNjb3BlKVwiXG4gICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgKSB7eyBnZXRMYWJlbChzY29wZSkgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXNjb3Blc1xuICAgIHJvdXRlci1saW5rKFxuICAgICAgdi1mb3I9XCIoc2NvcGUsIGtleSkgaW4gc2NvcGVzXCJcbiAgICAgIDprZXk9XCJrZXlcIlxuICAgICAgOnRvPVwiZ2V0U2NvcGVMaW5rKHNjb3BlKVwiXG4gICAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNlbGVjdGVkJzogc2NvcGUubmFtZSA9PT0gcXVlcnkuc2NvcGUgfVwiXG4gICAgICAgIDp0aXRsZT1cInNjb3BlLmhpbnQgfHwgZ2V0TGFiZWwoc2NvcGUpXCJcbiAgICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICAgKSB7eyBnZXRMYWJlbChzY29wZSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zY29wZXNcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgZGlzcGxheTogZmxleFxuICAgIC5kaXRvLWJ1dHRvblxuICAgICAgK2VsbGlwc2lzXG4gICAgICBib3JkZXItcmFkaXVzOiAwXG4gICAgICAvLyBBIGJpdCBtb3JlIHRoYW4gdGhlIHdpZHRoIG9mIGVsbGlwc2lzLCB0byBwcmV2ZW50IHJlcGxhY2luZyBzaG9ydCB3b3Jkc1xuICAgICAgLy8gd2l0aCBlbGxpcHNpcy5cbiAgICAgIG1pbi13aWR0aDogM2VtXG4gICAgICBmbGV4OiAwIDEgYXV0b1xuICAgICAgJjpmaXJzdC1jaGlsZFxuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxZW1cbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMWVtXG4gICAgICAgIHBhZGRpbmctbGVmdDogMWVtXG4gICAgICAmOmxhc3QtY2hpbGRcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDFlbVxuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMWVtXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbVxuICAgICAgJiArIC5kaXRvLWJ1dHRvblxuICAgICAgICBtYXJnaW4tbGVmdDogLTFweFxuICAgICAgLy8gRG9uJ3QgY292ZXIgdGhlIGZvY3VzZWQgYm9yZGVyIG9mIGJ1dHRvbnM6XG4gICAgICAmOmZvY3VzXG4gICAgICAgIHotaW5kZXg6IDFcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tc2NvcGVzJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY29wZXM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFNjb3BlTGluayhzY29wZSkge1xuICAgICAgY29uc3QgcXVlcnkgPSB7IC4uLnRoaXMucXVlcnksIHNjb3BlOiBzY29wZS5uYW1lIH1cbiAgICAgIGlmIChxdWVyeS5wYWdlKSB7XG4gICAgICAgIHF1ZXJ5LnBhZ2UgPSAwXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsocXVlcnkpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnBhZ2luYXRpb24oXG4gIDpwYWdlU2l6ZT1cImxpbWl0XCJcbiAgOnRvdGFsPVwidG90YWxcIlxuICA6cGFnZS5zeW5jPVwicGFnZVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBwYWdpbmF0aW9uKFxuICAgIDpwYWdlU2l6ZT1cImxpbWl0XCJcbiAgICA6dG90YWw9XCJ0b3RhbFwiXG4gICAgOnBhZ2Uuc3luYz1cInBhZ2VcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgUGFnaW5hdGlvbiB9IGZyb20gJ0BkaXRvanMvdWknXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFnaW5hdGlvbicsIHtcbiAgY29tcG9uZW50czogeyBQYWdpbmF0aW9uIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGltaXQ6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFnZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKCt0aGlzLnF1ZXJ5LnBhZ2UgfHwgMCkgKyAxXG4gICAgICB9LFxuXG4gICAgICBzZXQocGFnZSkge1xuICAgICAgICBpZiAodGhpcy5wYWdlICE9PSBwYWdlKSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2godGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2U6IChwYWdlIC0gMSlcbiAgICAgICAgICB9KSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuLi9taXhpbnMvSXRlbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtJdGVtTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRyYWdnaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25TdGFydERyYWcoKSB7XG4gICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZVxuICAgIH0sXG5cbiAgICBvbkVuZERyYWcoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlXG4gICAgICBpZiAob2xkSW5kZXggIT09IG5ld0luZGV4KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3QsIHBhZ2luYXRpb25SYW5nZSkge1xuICAgICAgY29uc3QgeyBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgICAgLy8gUmVvcmRlciB0aGUgY2hhbmdlZCBlbnRyaWVzIGJ5IHRoZWlyIG9yZGVyIGtleSwgdGFraW5nIHBhZ2luYXRpb25cbiAgICAgICAgLy8gb2Zmc2V0cyBpbnRvIGFjY291bnQ6XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHBhZ2luYXRpb25SYW5nZT8uWzBdIHx8IDBcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGlzdFtpXVtvcmRlcktleV0gPSBpICsgb2Zmc2V0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLXRyZWUtaXRlbShcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9YHtcbiAgICAnZGl0by1kcmFnZ2luZyc6IGRyYWdnaW5nLFxuICAgICdkaXRvLWFjdGl2ZSc6IGFjdGl2ZVxuICB9YFxuICA6c3R5bGU9XCJsZXZlbCA+IDAgJiYgeyAnLS1sZXZlbCc6IGxldmVsIH1cIlxuKVxuICAuZGl0by10cmVlLWhlYWRlcih2LWlmPVwibGFiZWxcIilcbiAgICAuZGl0by10cmVlLWJyYW5jaChcbiAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgIEBjbGljay5zdG9wPVwib3BlbmVkID0gIW9wZW5lZFwiXG4gICAgKVxuICAgICAgLmRpdG8tY2hldnJvbihcbiAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6IG9wZW5lZCB9XCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAgIC5kaXRvLXRyZWUtaW5mbyh2LWlmPVwiZGV0YWlsc1wiKSB7eyBkZXRhaWxzIH19XG4gICAgLmRpdG8tdHJlZS1sZWFmKHYtZWxzZSlcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbCh2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIilcbiAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBAY2xpY2s9XCJvbkVkaXRcIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBAY2xpY2s9XCJvbkRlbGV0ZVwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICApXG4gIHRhYmxlLmRpdG8tcHJvcGVydGllcyhcbiAgICB2LWlmPVwicHJvcGVydGllc1wiXG4gICAgdi1zaG93PVwib3BlbmVkXCJcbiAgKVxuICAgIHRyKFxuICAgICAgdi1mb3I9XCJwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzXCJcbiAgICApXG4gICAgICB0ZFxuICAgICAgICBkaXRvLWxhYmVsKFxuICAgICAgICAgIHYtaWY9XCJwcm9wZXJ0eS5sYWJlbCAhPT0gZmFsc2VcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICA6bGFiZWw9XCJnZXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICApXG4gICAgICBkaXRvLXRhYmxlLWNlbGwoXG4gICAgICAgIDpjZWxsPVwicHJvcGVydHlcIlxuICAgICAgICA6c2NoZW1hPVwicHJvcGVydHlcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuICB2dWUtZHJhZ2dhYmxlKFxuICAgIHYtaWY9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhjaGlsZHJlbkRyYWdnYWJsZSwgdHJ1ZSlcIlxuICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdClcIlxuICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICBAZW5kPVwib25FbmREcmFnKCRldmVudCwgY2hpbGRyZW5TY2hlbWEpXCJcbiAgKVxuICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIGNoaWxkcmVuSXRlbXNcIlxuICAgICAgOmtleT1cImdldEl0ZW1VaWQoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSlcIlxuICAgICAgOnNjaGVtYT1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImdldEl0ZW1EYXRhUGF0aChjaGlsZHJlblNjaGVtYSwgaW5kZXgpXCJcbiAgICAgIDpkYXRhPVwiaXRlbS5kYXRhXCJcbiAgICAgIDpwYXRoPVwiaXRlbS5wYXRoXCJcbiAgICAgIDpvcGVuPVwiaXRlbS5vcGVuXCJcbiAgICAgIDphY3RpdmU9XCJpdGVtLmFjdGl2ZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEsIHsgaW5kZXggfSlcIlxuICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCJcbiAgICApXG4gICAgLy8gVE9ETzogQ29udmVydCBkaXRvLXRyZWUtaXRlbSB0byB1c2UgZGl0by1sYWJlbCBpbnRlcm5hbGx5LCBhbmQgdGhlblxuICAgIC8vIHBhc3MgYGFzT2JqZWN0OiB0cnVlYCBpbiB0aGUgYGdldEl0ZW1MYWJlbCgpYCBjYWxsIGFib3ZlLlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdHJlZS1pdGVtKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLWRyYWdnaW5nJzogZHJhZ2dpbmcsXG4gICAgICAnZGl0by1hY3RpdmUnOiBhY3RpdmVcbiAgICB9YFxuICAgIDpzdHlsZT1cImxldmVsID4gMCAmJiB7ICctLWxldmVsJzogbGV2ZWwgfVwiXG4gIClcbiAgICAuZGl0by10cmVlLWhlYWRlcih2LWlmPVwibGFiZWxcIilcbiAgICAgIC5kaXRvLXRyZWUtYnJhbmNoKFxuICAgICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICAgIEBjbGljay5zdG9wPVwib3BlbmVkID0gIW9wZW5lZFwiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogb3BlbmVkIH1cIlxuICAgICAgICApXG4gICAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAgICAgLmRpdG8tdHJlZS1pbmZvKHYtaWY9XCJkZXRhaWxzXCIpIHt7IGRldGFpbHMgfX1cbiAgICAgIC5kaXRvLXRyZWUtbGVhZih2LWVsc2UpXG4gICAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXNtYWxsKHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiKVxuICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIEBjbGljaz1cIm9uRWRpdFwiXG4gICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIEBjbGljaz1cIm9uRGVsZXRlXCJcbiAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICApXG4gICAgdGFibGUuZGl0by1wcm9wZXJ0aWVzKFxuICAgICAgdi1pZj1cInByb3BlcnRpZXNcIlxuICAgICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCJwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzXCJcbiAgICAgIClcbiAgICAgICAgdGRcbiAgICAgICAgICBkaXRvLWxhYmVsKFxuICAgICAgICAgICAgdi1pZj1cInByb3BlcnR5LmxhYmVsICE9PSBmYWxzZVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgICAgICA6bGFiZWw9XCJnZXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICAgIClcbiAgICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICAgIDpjZWxsPVwicHJvcGVydHlcIlxuICAgICAgICAgIDpzY2hlbWE9XCJwcm9wZXJ0eVwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICApXG4gICAgdnVlLWRyYWdnYWJsZShcbiAgICAgIHYtaWY9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgICB2LXNob3c9XCJvcGVuZWRcIlxuICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoY2hpbGRyZW5EcmFnZ2FibGUsIHRydWUpXCJcbiAgICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdClcIlxuICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgQGVuZD1cIm9uRW5kRHJhZygkZXZlbnQsIGNoaWxkcmVuU2NoZW1hKVwiXG4gICAgKVxuICAgICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBjaGlsZHJlbkl0ZW1zXCJcbiAgICAgICAgOmtleT1cImdldEl0ZW1VaWQoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSlcIlxuICAgICAgICA6c2NoZW1hPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJnZXRJdGVtRGF0YVBhdGgoY2hpbGRyZW5TY2hlbWEsIGluZGV4KVwiXG4gICAgICAgIDpkYXRhPVwiaXRlbS5kYXRhXCJcbiAgICAgICAgOnBhdGg9XCJpdGVtLnBhdGhcIlxuICAgICAgICA6b3Blbj1cIml0ZW0ub3BlblwiXG4gICAgICAgIDphY3RpdmU9XCJpdGVtLmFjdGl2ZVwiXG4gICAgICAgIDpkcmFnZ2FibGU9XCJjaGlsZHJlbkRyYWdnYWJsZVwiXG4gICAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhLCB7IGluZGV4IH0pXCJcbiAgICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCJcbiAgICAgIClcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgZGl0by10cmVlLWl0ZW0gdG8gdXNlIGRpdG8tbGFiZWwgaW50ZXJuYWxseSwgYW5kIHRoZW5cbiAgICAgIC8vIHBhc3MgYGFzT2JqZWN0OiB0cnVlYCBpbiB0aGUgYGdldEl0ZW1MYWJlbCgpYCBjYWxsIGFib3ZlLlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXRyZWUtaXRlbVxuICAgIC0tY2hldnJvbi1pbmRlbnQ6ICN7JGNoZXZyb24taW5kZW50fVxuICAgID4gLmRpdG8tdHJlZS1oZWFkZXJcbiAgICAgID4gLmRpdG8tdHJlZS1icmFuY2gsXG4gICAgICA+IC5kaXRvLXRyZWUtbGVhZlxuICAgICAgICAvLyBVc2UgYC0tbGV2ZWxgIENTUyB2YXJpYWJsZSB0byBjYWxjdWxhdGVkIHRoZSBhY2N1bXVsYXRlZCBpbmRlbnRcbiAgICAgICAgLy8gcGFkZGluZyBkaXJlY3RseSBpbnN0ZWFkIG9mIGhhdmluZyBpdCBhY2N1bXVsYXRlIGluIG5lc3RlZCBDU1MuXG4gICAgICAgIC8vIFRoaXMgd2F5LCB3ZSBjYW4ga2VlcCB0aGUgLmRpdG8tYWN0aXZlIGFyZWEgY292ZXIgdGhlIGZ1bGwgd2lkdGg6XG4gICAgICAgIHBhZGRpbmctbGVmdDogY2FsYyh2YXIoLS1jaGV2cm9uLWluZGVudCkgKiAodmFyKC0tbGV2ZWwsIDEpIC0gMSkpXG4gICAgLmRpdG8tdHJlZS1icmFuY2hcbiAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgIC5kaXRvLXRyZWUtaGVhZGVyXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW5cbiAgICAuZGl0by10cmVlLWJyYW5jaCxcbiAgICAuZGl0by10cmVlLWxlYWZcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGZsZXg6IGF1dG9cbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgICAgbWFyZ2luOiAxcHggMFxuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgLmRpdG8tdHJlZS1sYWJlbCxcbiAgICAuZGl0by10cmVlLWluZm9cbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICAuZGl0by10cmVlLWluZm9cbiAgICAgIHBhZGRpbmctbGVmdDogMC4zNWVtXG4gICAgICBjb2xvcjogcmdiYSgkY29sb3ItYmxhY2ssIC4yKVxuICAgIC5kaXRvLWJ1dHRvbnNcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIHZpc2liaWxpdHk6IGhpZGRlblxuICAgICAgaGVpZ2h0OiAxMDAlXG4gICAgICBtYXJnaW4tbGVmdDogMWVtXG4gICAgICBtYXJnaW46IDFweCAwIDFweCAxZW1cbiAgICAuZGl0by10cmVlLWhlYWRlcjpob3ZlclxuICAgICAgPiAuZGl0by1idXR0b25zXG4gICAgICAgIHZpc2liaWxpdHk6IHZpc2libGVcbiAgICAvLyBIaWRlIGJ1dHRvbnMgZHVyaW5nIGRyYWdnaW5nXG4gICAgJi5kaXRvLWRyYWdnaW5nXG4gICAgICAuZGl0by10cmVlLWhlYWRlclxuICAgICAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW5cbiAgICAmLmRpdG8tYWN0aXZlXG4gICAgICA+IC5kaXRvLXRyZWUtaGVhZGVyXG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgcGFkZGluZzogMCAkaW5wdXQtcGFkZGluZy1ob3JcbiAgICAgICAgbWFyZ2luOiAwICgtJGlucHV0LXBhZGRpbmctaG9yKVxuICAgICAgICA+IC5kaXRvLXRyZWUtYnJhbmNoXG4gICAgICAgICAgPiAuZGl0by1jaGV2cm9uOjpiZWZvcmVcbiAgICAgICAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICAgICA+ICogPiAuZGl0by10cmVlLWxhYmVsXG4gICAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5kaXRvLXByb3BlcnRpZXNcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICBtYXJnaW4tbGVmdDogJGNoZXZyb24taW5kZW50XG4gICAgICA+IHRyXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZVxuICAgICAgLmRpdG8tbGFiZWxcbiAgICAgICAgbWFyZ2luOiAwXG4gICAgICAgICY6OmFmdGVyXG4gICAgICAgICAgY29udGVudDogJzogJ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBWdWVEcmFnZ2FibGUgZnJvbSAndnVlZHJhZ2dhYmxlJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBPcmRlcmVkTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09yZGVyZWRNaXhpbi5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXROYW1lZFNjaGVtYXMsIGhhc0Zvcm1TY2hlbWEgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by10cmVlLWl0ZW0nLCB7XG4gIGNvbXBvbmVudHM6IHsgVnVlRHJhZ2dhYmxlIH0sXG4gIG1peGluczogW09yZGVyZWRNaXhpbl0sXG4gIGluamVjdDogWydjb250YWluZXInXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW0FycmF5LCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgb3BlbjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGFjdGl2ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxldmVsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlbmVkOiB0aGlzLm9wZW4gfHwgdGhpcy5zY2hlbWEub3BlblxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG1ldGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIubWV0YVxuICAgIH0sXG5cbiAgICBzdG9yZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5zdG9yZVxuICAgIH0sXG5cbiAgICBkaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5kaXNhYmxlZFxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnByb3BlcnRpZXMpXG4gICAgfSxcblxuICAgIC8vIFRPRE86IFNob3VsZCB0aGlzIGJlIG5hbWVkIGBzb3VyY2VTY2hlbWFgIGluc3RlYWQ/IFVzZSBTb3VyY2VNaXhpbj9cbiAgICBjaGlsZHJlblNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5jaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkxpc3QoKSB7XG4gICAgICBjb25zdCBuYW1lID0gdGhpcy5jaGlsZHJlblNjaGVtYT8ubmFtZVxuICAgICAgcmV0dXJuIG5hbWUgJiYgdGhpcy5kYXRhW25hbWVdXG4gICAgfSxcblxuICAgIGNoaWxkcmVuRHJhZ2dhYmxlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5jaGlsZHJlbkxpc3Q/Lmxlbmd0aCA+IDEgJiZcbiAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZHJhZ2dhYmxlJywge1xuICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgc2NoZW1hOiB0aGlzLmNoaWxkcmVuU2NoZW1hXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSxcblxuICAgIG51bUNoaWxkcmVuKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggfHwgMFxuICAgIH0sXG5cbiAgICBudW1Qcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcz8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtRW50cmllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLm51bVByb3BlcnRpZXMgKyB0aGlzLm51bUNoaWxkcmVuXG4gICAgfSxcblxuICAgIGNoaWxkcmVuSXRlbXMoKSB7XG4gICAgICBjb25zdCB7IGNoaWxkcmVuU2NoZW1hIH0gPSB0aGlzXG4gICAgICBpZiAoY2hpbGRyZW5TY2hlbWEpIHtcbiAgICAgICAgY29uc3QgeyBlZGl0UGF0aCB9ID0gdGhpcy5jb250YWluZXJcbiAgICAgICAgY29uc3QgY2hpbGRyZW5PcGVuID0gIXRoaXMucGF0aCAmJiBjaGlsZHJlblNjaGVtYS5vcGVuXG4gICAgICAgIC8vIEJ1aWxkIGEgY2hpbGRyZW4gbGlzdCB3aXRoIGNoaWxkIG1ldGEgaW5mb3JtYXRpb24gZm9yIHRoZSB0ZW1wbGF0ZS5cbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5MaXN0Py5tYXAoKGRhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IChcbiAgICAgICAgICAgIGNoaWxkcmVuU2NoZW1hLnBhdGggJiZcbiAgICAgICAgICAgIGAke3RoaXMucGF0aH0vJHtjaGlsZHJlblNjaGVtYS5wYXRofS8ke2luZGV4fWBcbiAgICAgICAgICApXG4gICAgICAgICAgY29uc3Qgb3BlbiA9IGNoaWxkcmVuT3BlbiB8fFxuICAgICAgICAgICAgLy8gT25seSBjb3VudCBhcyBcImluIGVkaXQgcGF0aFwiIHdoZW4gaXQncyBub3QgdGhlIGZ1bGwgZWRpdCBwYXRoLlxuICAgICAgICAgICAgZWRpdFBhdGguc3RhcnRzV2l0aChwYXRoKSAmJiBwYXRoLmxlbmd0aCA8IGVkaXRQYXRoLmxlbmd0aFxuICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IGVkaXRQYXRoID09PSBwYXRoXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgb3BlbixcbiAgICAgICAgICAgIGFjdGl2ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSkgfHwgW11cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGV0YWlscygpIHtcbiAgICAgIGNvbnN0IHsgbnVtQ2hpbGRyZW4gfSA9IHRoaXNcbiAgICAgIHJldHVybiBudW1DaGlsZHJlbiAmJiBgJHtudW1DaGlsZHJlbn0gJHtcbiAgICAgICAgbnVtQ2hpbGRyZW4gPT09IDEgPyAnaXRlbScgOiAnaXRlbXMnXG4gICAgICB9YFxuICAgIH0sXG5cbiAgICBoYXNFZGl0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmRyYWdnYWJsZSB8fCB0aGlzLmVkaXRhYmxlIHx8IHRoaXMuZGVsZXRhYmxlXG4gICAgfSxcblxuICAgIC8vIFRPRE86IFN1cHBvcnQgY3JlYXRhYmxlIVxuICAgIC8vIFRPRE86IEFkZCBzdXBwb3J0IGZvciBjcmVhdGFibGUsIGVkaXRhYmxlIGFuZCBkZWxldGFibGUgb3ZlcnJpZGVzIG9uIHRoZVxuICAgIC8vIGFzc29jaWF0ZWQgZm9ybXMsIGp1c3QgbGlrZSBpbiBgVHlwZUxpc3RgIGFuZCBgVHlwZU9iamVjdGAsIHRocm91Z2hcbiAgICAvLyBgRGl0b0VkaXRCdXR0b25zYC4gSXQgd291bGQgYmUgYmVzdCB0byB1c2UgYERpdG9FZGl0QnV0dG9uc2AgaGVyZSB0b28uXG4gICAgY3JlYXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY3JlYXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGNyZWF0YWJsZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBlZGl0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSkge1xuICAgICAgcmV0dXJuIGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHByb3BlcnR5Lm5hbWUpXG4gICAgfSxcblxuICAgIG9uRWRpdCgpIHtcbiAgICAgIC8vIEFsbCB3ZSBnb3QgdG8gZG8gaXMgcHVzaCB0aGUgcmlnaHQgZWRpdCBwYXRoIHRvIHRoZSByb3V0ZXIsIHRoZSByZXN0XG4gICAgICAvLyBpcyBoYW5kbGVkIGJ5IG91ciByb3V0ZXMsIGFsbG93aW5nIHJlbG9hZHMgYXMgd2VsbC5cbiAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgcGF0aDogYCR7dGhpcy5jb250YWluZXIucGF0aH0ke3RoaXMucGF0aH1gLFxuICAgICAgICAvLyBQcmVzZXJ2ZSBjdXJyZW50IHF1ZXJ5XG4gICAgICAgIHF1ZXJ5OiB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25EZWxldGUoKSB7XG4gICAgICAvLyBUT0RPOiBJbXBsZW1lbnQhXG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5jb250YWluZXIub25DaGFuZ2UoKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG50aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgdHJcbiAgICB0aChcbiAgICAgIHYtZm9yPVwiKGNvbHVtbiwgaW5kZXgpIGluIGNvbHVtbnNcIlxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihjb2x1bW4pXCJcbiAgICAgIDpjbGFzcz1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgIClcbiAgICAgIHJvdXRlci1saW5rKFxuICAgICAgICB2LWlmPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgOnRvPVwiZ2V0U29ydExpbmsoY29sdW1uKVwiXG4gICAgICAgIGN1c3RvbSB2LXNsb3Q9XCJ7IG5hdmlnYXRlIH1cIlxuICAgICAgKVxuICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgOmNsYXNzPVwiZ2V0U29ydENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLW9yZGVyLWFycm93c1xuICAgICAgICAgIHNwYW4ge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgc3BhbihcbiAgICAgICAgdi1lbHNlXG4gICAgICApIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICB0aCh2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIilcbiAgICAgIC8vIEVtcHR5IDxzcGFuPiBpcyBuZWVkZWQgZm9yIHN0eWxpbmcsIHNlZSBfdGFibGUuc2Fzc1xuICAgICAgc3BhblxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdGhlYWQuZGl0by10YWJsZS1oZWFkXG4gICAgdHJcbiAgICAgIHRoKFxuICAgICAgICB2LWZvcj1cIihjb2x1bW4sIGluZGV4KSBpbiBjb2x1bW5zXCJcbiAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihjb2x1bW4pXCJcbiAgICAgICAgOmNsYXNzPVwiZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKVwiXG4gICAgICApXG4gICAgICAgIHJvdXRlci1saW5rKFxuICAgICAgICAgIHYtaWY9XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgICAgIDp0bz1cImdldFNvcnRMaW5rKGNvbHVtbilcIlxuICAgICAgICAgIGN1c3RvbSB2LXNsb3Q9XCJ7IG5hdmlnYXRlIH1cIlxuICAgICAgICApXG4gICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJnZXRTb3J0Q2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLmRpdG8tb3JkZXItYXJyb3dzXG4gICAgICAgICAgICBzcGFuIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICAgICAgc3BhbihcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgKSB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgICB0aCh2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIilcbiAgICAgICAgLy8gRW1wdHkgPHNwYW4+IGlzIG5lZWRlZCBmb3Igc3R5bGluZywgc2VlIF90YWJsZS5zYXNzXG4gICAgICAgIHNwYW5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by10YWJsZS1oZWFkXG4gICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgdHJcbiAgICAgIHRoXG4gICAgICAgIHBhZGRpbmc6IDBcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbFxuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICAgICAgLmRpdG8tYnV0dG9uXG4gICAgICAgICAgLy8gQ29udmVudGlvbjogTmVzdGVkIHNwYW5zIGhhbmRsZSBwYWRkaW5nLCBzZWUgYmVsb3dcbiAgICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgICB0ZXh0LWFsaWduOiBpbmhlcml0XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMFxuICAgICAgICBzcGFuXG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgICAgLy8gQ29udmVudGlvbjogTmVzdGVkIHNwYW5zIGhhbmRsZSBwYWRkaW5nXG4gICAgICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgICAgICAmOmVtcHR5OjphZnRlclxuICAgICAgICAgICAgLy8gUHJldmVudCBlbXB0eSA8dGg+IGZyb20gY29sbGFwc2luZ1xuICAgICAgICAgICAgY29udGVudDogJ1xcMjAwYicgLy8gemVyby13aWR0aCBzcGFjZVxuICAgICAgICA+IHNwYW5cbiAgICAgICAgICBkaXNwbGF5OiBibG9ja1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdGFibGUtaGVhZCcsIHtcbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sdW1uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgaGFzRWRpdEJ1dHRvbnM6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc29ydCgpIHtcbiAgICAgIGNvbnN0IG9yZGVyID0gKHRoaXMucXVlcnkub3JkZXIgfHwgJycpLnNwbGl0KC9cXHMrLylcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IG9yZGVyWzBdLFxuICAgICAgICBvcmRlcjogb3JkZXJbMV1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbHVtbkNsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIGBkaXRvLWNvbHVtbi0ke2h5cGhlbmF0ZShjb2x1bW4ubmFtZSl9YFxuICAgIH0sXG5cbiAgICBnZXRTb3J0Q2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3J0Lm5hbWUgPT09IGNvbHVtbi5uYW1lXG4gICAgICAgID8gYGRpdG8tc2VsZWN0ZWQgZGl0by1vcmRlci0ke3RoaXMuc29ydC5vcmRlcn1gXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBnZXRTb3J0TGluayhjb2x1bW4pIHtcbiAgICAgIC8vIFRvZ2dsZSBvcmRlciBpZiB0aGUgc2FtZSBjb2x1bW4gaXMgY2xpY2tlZCBhZ2Fpbi5cbiAgICAgIGNvbnN0IG9yZGVyID0gdGhpcy5zb3J0Lm5hbWUgPT09IGNvbHVtbi5uYW1lICYmIHRoaXMuc29ydC5vcmRlciA9PT0gJ2FzYydcbiAgICAgICAgPyAnZGVzYydcbiAgICAgICAgOiAnYXNjJ1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlMaW5rKHtcbiAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgb3JkZXI6IGAke2NvbHVtbi5uYW1lfSAke29yZGVyfWBcbiAgICAgIH0pXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnRkKFxuICA6Y2xhc3M9XCJjZWxsLmNsYXNzXCJcbiAgOnN0eWxlPVwiY2VsbC5zdHlsZVwiXG4pXG4gIC8vIFRPRE86IEltcGxlbWVudCBpbmxpbmVkIGNvbXBvbmVudHMgaW4gY2VsbCBtb2RlIVxuICBjb21wb25lbnQoXG4gICAgdi1pZj1cImNvbXBvbmVudFwiXG4gICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiAgc3BhbihcbiAgICB2LWVsc2VcbiAgICB2LWh0bWw9XCJyZW5kZXJDZWxsKGRhdGEpXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdGQoXG4gICAgOmNsYXNzPVwiY2VsbC5jbGFzc1wiXG4gICAgOnN0eWxlPVwiY2VsbC5zdHlsZVwiXG4gIClcbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgaW5saW5lZCBjb21wb25lbnRzIGluIGNlbGwgbW9kZSFcbiAgICBjb21wb25lbnQoXG4gICAgICB2LWlmPVwiY29tcG9uZW50XCJcbiAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2VcbiAgICAgIHYtaHRtbD1cInJlbmRlckNlbGwoZGF0YSlcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZXNjYXBlSHRtbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by10YWJsZS1jZWxsJywge1xuICBwcm9wczoge1xuICAgIGNlbGw6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVUeXBlQ29tcG9uZW50KHRoaXMuY2VsbC5jb21wb25lbnQpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZW5kZXJDZWxsKGl0ZW0pIHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgcmVuZGVyIH0gPSB0aGlzLmNlbGxcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtuYW1lXVxuICAgICAgcmV0dXJuIHJlbmRlclxuICAgICAgICA/IHJlbmRlci5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSlcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIDogZXNjYXBlSHRtbCh2YWx1ZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBBIGNvbXBvbmVudCB0byBzaW1wbHkgcGFzcyB0aHJvdWdoIGFuIGV4aXN0aW5nIHZ1ZSB2bm9kZS5cbi8vIFNlZTogaHR0cHM6Ly9mb3J1bS52dWVqcy5vcmcvdC8yODE2Mi80XG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by12bm9kZScsIHtcbiAgZnVuY3Rpb25hbDogdHJ1ZSxcbiAgcmVuZGVyOiAoaCwgY29udGV4dCkgPT4gY29udGV4dC5wcm9wcy5ub2RlXG59KVxuPC9zY3JpcHQ+XG4iLCIvLyBUeXBlQ29tcG9uZW50IGlzIHRoZSBhYnN0cmFjdCBiYXNlIGNvbXBvbmVudCBmb3IgYWxsIG90aGVyIHR5cGUgY29tcG9uZW50c1xuLy8gaW5zaWRlIHRoZSB0eXBlcy8gZm9sZGVyLiBUaGVyZSdzIGFsc28gYSBzZXBhcmF0ZSBjb25jcmV0ZVxuLy8gYFR5cGVDb21wb25lbnQudnVlYCBjb21wb25lbnQsIHVzZSB0byByZW5kZXIgdGhlIGB0eXBlOiAnY29tcG9uZW50J2AgdHlwZXMuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IHsgcmVnaXN0ZXJUeXBlQ29tcG9uZW50LCBnZXRUeXBlQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9zY2hlbWEuanMnXG5cbmNvbnN0IFR5cGVDb21wb25lbnQgPSBEaXRvQ29tcG9uZW50LmV4dGVuZCh7XG4gIG1peGluczogW1R5cGVNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IGZhbHNlLFxuICB0ZXh0RmllbGQ6IGZhbHNlLFxuICAvLyBTZXQgcmVhc29uYWJsZSBkZWZhdWx0cyBmb3IgYWxsIG9mIHRoZXNlIHRoYXQgYXJlIHVzZWQgYnkgbW9zdCB0eXBlXG4gIC8vIGNvbXBvbmVudHMuIFRoZXNlIG9ubHkgbmVlZCBkZWZpbmluZyBpbiBzdWItY2xhc3NlcyB3aGVuIHRoZXkgZGlmZmVyLlxuICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gIGRlZmF1bHROZXN0ZWQ6IHRydWUsXG4gIGRlZmF1bHRWaXNpYmxlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiB0cnVlLFxuICBleGNsdWRlVmFsdWU6IGZhbHNlLFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IG51bGwsXG4gIG9taXRQYWRkaW5nOiBmYWxzZVxufSlcblxuVHlwZUNvbXBvbmVudC5yZWdpc3RlciA9IGZ1bmN0aW9uKHR5cGVzLCBkZWZpbml0aW9uID0ge30pIHtcbiAgdHlwZXMgPSBhc0FycmF5KHR5cGVzKVxuICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudChgZGl0by10eXBlLSR7dHlwZXNbMF19YCwgZGVmaW5pdGlvbilcbiAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgcmVnaXN0ZXJUeXBlQ29tcG9uZW50KHR5cGUsIGNvbXBvbmVudClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cblR5cGVDb21wb25lbnQuZ2V0ID0gZ2V0VHlwZUNvbXBvbmVudFxuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50XG4iLCJcbmJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnR5cGU9XCJ0eXBlXCJcbiAgOnRpdGxlPVwidGV4dFwiXG4gIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbikge3sgdGV4dCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6dHlwZT1cInR5cGVcIlxuICAgIDp0aXRsZT1cInRleHRcIlxuICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICkge3sgdGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdidXR0b24nLCAnc3VibWl0J1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuICAvLyBUT0RPOiBDb25zaWRlciBtYWtpbmcgdGhpcyB3b3JrIG5pY2VseTpcbiAgLy8gb21pdEZsZXhHcm93OiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdmVyYigpIHtcbiAgICAgIHJldHVybiB0aGlzLnZlcmJzW3RoaXMubmFtZV0gfHwgdGhpcy5uYW1lXG4gICAgfSxcblxuICAgIHRleHQ6IGdldFNjaGVtYUFjY2Vzc29yKCd0ZXh0Jywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZ2V0KHRleHQpIHtcbiAgICAgICAgcmV0dXJuIHRleHQgfHwgbGFiZWxpemUodGhpcy52ZXJiKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY2xvc2VGb3JtOiBnZXRTY2hlbWFBY2Nlc3NvcignY2xvc2VGb3JtJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gQG92ZXJyaWRlXG4gICAgZ2V0TGlzdGVuZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgYmx1cjogdGhpcy5vbkJsdXIsXG4gICAgICAgIGNsaWNrOiB0aGlzLm9uQ2xpY2tcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc291cmNlQ29tcG9uZW50Py5zdWJtaXQodGhpcywgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgb25DbGljaygpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZW1pdEV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnNjaGVtYUNvbXBvbmVudFxuICAgICAgfSlcbiAgICAgIC8vIEhhdmUgYnV0dG9ucyB0aGF0IGRlZmluZSByZXNvdXJjZXMgY2FsbCBgdGhpcy5zdWJtaXQoKWAgYnkgZGVmYXVsdDpcbiAgICAgIGlmIChcbiAgICAgICAgcmVzID09PSB1bmRlZmluZWQgJiYgLy8gTWVhbmluZzogZG9uJ3QgcHJldmVudCBkZWZhdWx0LlxuICAgICAgICBoYXNSZXNvdXJjZSh0aGlzLnNjaGVtYSlcbiAgICAgICkge1xuICAgICAgICBhd2FpdCB0aGlzLnN1Ym1pdCgpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmlucHV0LmRpdG8tY2hlY2tib3goXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHR5cGU9XCJjaGVja2JveFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGlucHV0LmRpdG8tY2hlY2tib3goXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNoZWNrYm94XG4gICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzc1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveCcsIHtcbiAgbmF0aXZlRmllbGQ6IHRydWVcbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0Z1bmN0aW9uLCBpc1Byb21pc2UsIG5vcm1hbGl6ZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0xvYWRpbmdNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGFzeW5jRGF0YUVudHJpZXM6IHt9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgbmFtZSwge1xuICAgICAgcmVzb2x2ZUNvdW50ZXIgPSAxLFxuICAgICAgLi4ubG9hZGluZ09wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIGlmICghaXNPYmplY3Qoc2NoZW1hKSkge1xuICAgICAgICBzY2hlbWEgPSB7IGRhdGE6IHNjaGVtYSB9XG4gICAgICB9XG4gICAgICBsZXQgeyBkYXRhID0gdW5kZWZpbmVkLCBkYXRhUGF0aCA9IG51bGwgfSA9IHNjaGVtYVxuICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGFzeW5jIGRhdGEgbG9hZGluZyBhbHJlYWR5IGluIHByb2Nlc3MuXG4gICAgICBjb25zdCBhc3luY0VudHJ5ID0gKFxuICAgICAgICB0aGlzLmFzeW5jRGF0YUVudHJpZXNbbmFtZV0gfHxcbiAgICAgICAgdGhpcy4kc2V0KHRoaXMuYXN5bmNEYXRhRW50cmllcywgbmFtZSwge1xuICAgICAgICAgIGRlcGVuZGVuY3lGdW5jdGlvbjogbnVsbCxcbiAgICAgICAgICByZXNvbHZlQ291bnRlcjogMCxcbiAgICAgICAgICByZXNvbHZlZERhdGE6IG51bGwsXG4gICAgICAgICAgcmVzb2x2aW5nOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLy8gSWYgdGhlIGRhdGEgY2FsbGJhY2sgcHJvdmlkZWQgYSBkZXBlbmRlbmN5IGZ1bmN0aW9uIHdoZW4gaXQgd2FzIGNhbGxlZCxcbiAgICAgIC8vIGNhbCBpdCBpbiBldmVyeSBjYWxsIG9mIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGZvcmNlIFZ1ZSB0byBrZWVwIHRyYWNrXG4gICAgICAvLyBvZiB0aGUgYXN5bmMgZGVwZW5kZW5jaWVzLlxuICAgICAgYXN5bmNFbnRyeS5kZXBlbmRlbmN5RnVuY3Rpb24/LmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuXG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA+IDApIHtcbiAgICAgICAgLy8gSWYgdGhlIGRhdGEgd2FzIHJlc29sdmVkIGFscmVhZHksIHJldHVybiBpdCBhbmQgY2xlYXIgdGhlIHZhbHVlIG9uY2VcbiAgICAgICAgLy8gYHJlc29sdmVDb3VudGVyYCByZWFjaGVzIHplcm8uIENvdW50aW5nIGlzIG5lZWRlZCBiZWNhdXNlIGRlcGVuZGluZ1xuICAgICAgICAvLyBvbiB0aGUgdXNlIG9mIGRhdGEgYW5kIHJlYWN0aXZpdHksIG11bHRpcGxlIGNhbGxzIHRvIHRoZSBjb21wdXRlZFxuICAgICAgICAvLyBnZXR0ZXIgYXJlIHRyaWdnZXJlZCB3aGVuIHRoZSBkYXRhIGlzIGNoYW5naW5nLiBDbGVhcmluZyB0aGUgcmVzb2x2ZWRcbiAgICAgICAgLy8gZGF0YSB3b3JrcyBiZWNhdXNlIFZ1ZSBjYWNoZXMgdGhlIHJlc3VsdCBvZiBjb21wdXRlZCBnZXR0ZXJzIGFuZCBvbmx5XG4gICAgICAgIC8vIHJlZXZhbHVhdGVzIGlmIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZWQuIFRoaXMgaXMgdG8gZW5zdXJlXG4gICAgICAgIC8vIHRoYXQgYSBjYWNoZWQgdmFsdWUgaGVyZSBkb2Vzbid0IGJsb2NrIC8gb3ZlcnJpZGUgcmVldmFsdWF0aW9uOlxuICAgICAgICBjb25zdCB7IHJlc29sdmVkRGF0YSB9ID0gYXN5bmNFbnRyeVxuICAgICAgICBpZiAoLS1hc3luY0VudHJ5LnJlc29sdmVDb3VudGVyID09PSAwKSB7XG4gICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlZERhdGEgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc29sdmVkRGF0YVxuICAgICAgfVxuICAgICAgLy8gQXZvaWQgY2FsbGluZyB0aGUgZGF0YSBmdW5jdGlvbiB0d2ljZTpcbiAgICAgIGlmIChhc3luY0VudHJ5LnJlc29sdmluZykge1xuICAgICAgICBkYXRhID0gbnVsbFxuICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGRhdGEpKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGF0YS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICAvLyBJZiB0aGUgcmVzdWx0IG9mIHRoZSBkYXRhIGZ1bmN0aW9uIGlzIGFub3RoZXIgZnVuY3Rpb24sIHRoZW4gdGhlXG4gICAgICAgICAgLy8gZmlyc3QgZGF0YSBmdW5jdGlvbiBpcyB0aGVyZSB0byB0cmFjayBkZXBlbmRlbmNpZXMgYW5kIHRoZSByZWFsXG4gICAgICAgICAgLy8gZGF0YSBsb2FkaW5nIGhhcHBlbnMgaW4gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQuIEtlZXAgdHJhY2tcbiAgICAgICAgICAvLyBpdCBpbiBgZGVwZW5kZW5jeUZ1bmN0aW9uYCBzbyBpdCBjYW4gYmUgY2FsbGVkIG9uIGVhY2ggY2FsbCBvZlxuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGtlZXAgdGhlIGRlcGVuZGVuY2llcyBpbnRhY3QsIGFuZCBjYWxsXG4gICAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQgb25jZSB0byBnZXQgdGhlIGFjdHVhbCBkYXRhOlxuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uID0gZGF0YVxuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdC5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGRhdGEpKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRhdGEgaXMgYXN5bmNocm9ub3VzLCBpdCBjYW4ndCBiZSByZXR1cm5lZCBzdHJhaWdodCBhd2F5LlxuICAgICAgICAgIC8vIEJ1dCB3ZSBjYW4gY2hlYXQgdXNpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhbmQgYHJlc29sdmVkRGF0YWAsXG4gICAgICAgICAgLy8gd2hpY2ggaXMgZ29pbmcgdG8gcmVjZWl2ZSB0aGUgbG9hZGVkIGRhdGEgYXN5bmNocm9ub3VzbHksXG4gICAgICAgICAgLy8gdHJpZ2dlcmluZyBhIHJlY29tcHV0ZSBvZiB0aGUgY29tcHV0ZWQgcHJvcGVydHkgdGhhdCBjYWxsc1xuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgLlxuICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gdHJ1ZVxuICAgICAgICAgIHRoaXMucmVzb2x2ZURhdGEoZGF0YSwgbG9hZGluZ09wdGlvbnMpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVDb3VudGVyID0gcmVzb2x2ZUNvdW50ZXJcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gZGF0YVxuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSBmYWxzZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gQ2xlYXIgZGF0YSB1bnRpbCBwcm9taXNlIGlzIHJlc29sdmVkIGFuZCBgcmVzb2x2ZWREYXRhYCBpcyBzZXRcbiAgICAgICAgICBkYXRhID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGFQYXRoKSB7XG4gICAgICAgIGRhdGEgPSBnZXRWYWx1ZUF0RGF0YVBhdGgoXG4gICAgICAgICAgdGhpcy5yb290RGF0YSxcbiAgICAgICAgICBub3JtYWxpemVEYXRhUGF0aChgJHt0aGlzLmRhdGFQYXRofS8ke2RhdGFQYXRofWApXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVEYXRhKGxvYWQsIGxvYWRpbmdPcHRpb25zID0ge30pIHtcbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIGxldCBkYXRhID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IChpc0Z1bmN0aW9uKGxvYWQpID8gbG9hZCgpIDogbG9hZClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3IubWVzc2FnZSB8fCBlcnJvcilcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICByZXR1cm4gZGF0YVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERhdGFNaXhpbiBmcm9tICcuL0RhdGFNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBzZXRUZW1wb3JhcnlJZCwgaXNSZWZlcmVuY2UgfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzQXJyYXksIGlzU3RyaW5nLCBpc0Z1bmN0aW9uLFxuICBub3JtYWxpemVEYXRhUGF0aCwgbGFiZWxpemUsIGRlYm91bmNlQXN5bmNcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBoYXNPcHRpb25zOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgY29udmVydFZhbHVlID0gdmFsdWUgPT4gdGhpcy5yZWxhdGVcbiAgICAgICAgICA/IHRoaXMuaGFzT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgPyB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgICBjb25zdCB2YWx1ZSA9IGlzQXJyYXkodGhpcy52YWx1ZSlcbiAgICAgICAgICA/IHRoaXMudmFsdWUubWFwKGNvbnZlcnRWYWx1ZSkuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKVxuICAgICAgICAgIDogY29udmVydFZhbHVlKHRoaXMudmFsdWUpXG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyBXaGVuIHJlbGF0aW5nIGFuZCBhcyBzb29uIGFzIHRoZSBvcHRpb25zIGFyZSBhdmFpbGFibGUuLi5cbiAgICAgICAgICB0aGlzLnJlbGF0ZSAmJiB0aGlzLmhhc09wdGlvbnMgJiYgKFxuICAgICAgICAgICAgLy8gLi4uaWYgdGhlIHZhbHVlIGlzIGZvcmNlZCB0byBudWxsIGJlY2F1c2UgYSBkaXNhcHBlYXJlZCBvcHRpb24uLi5cbiAgICAgICAgICAgIHZhbHVlID09PSBudWxsICYmIHRoaXMudmFsdWUgIT09IG51bGwgfHxcbiAgICAgICAgICAgIC8vIC4uLm9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlZmVyZW5jZSwgcmVwbGFjZSBpdCB3aXRoIGl0cyBvcHRpb25cbiAgICAgICAgICAgIC8vIHZhbHVlLCBzbyB0aGF0IGl0J2xsIGhvbGQgYWN0dWFsIGRhdGEsIG5vdCBqdXN0IGEgcmVmZXJlbmNlIGlkLlxuICAgICAgICAgICAgaXNSZWZlcmVuY2UodGhpcy52YWx1ZSlcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgY29udmVydCA9IHZhbHVlID0+IHRoaXMucmVsYXRlXG4gICAgICAgICAgPyB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgdGhpcy52YWx1ZSA9IGlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgPyB2YWx1ZS5tYXAoY29udmVydClcbiAgICAgICAgICA6IGNvbnZlcnQodmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlbGVjdGVkT3B0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodGhpcy5zZWxlY3RlZFZhbHVlKVxuICAgIH0sXG5cbiAgICBvcHRpb25zKCkge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuaGFuZGxlRGF0YVNjaGVtYSh0aGlzLnNjaGVtYS5vcHRpb25zLCAnb3B0aW9ucycsIHtcbiAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDFcbiAgICAgIH0pID8/IFtdXG4gICAgICBpZiAoIWlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG9wdGlvbnMgZGF0YSwgc2hvdWxkIGJlIGFycmF5OiAke2RhdGF9YClcbiAgICAgIH1cbiAgICAgIHRoaXMuaGFzT3B0aW9ucyA9IGRhdGEubGVuZ3RoID4gMFxuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc09wdGlvbnMoZGF0YSlcbiAgICB9LFxuXG4gICAgYWN0aXZlT3B0aW9ucygpIHtcbiAgICAgIC8vIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiBgVHlwZU11bHRpc2VsZWN0YCB0byByZXR1cm4gdGhlIGBzZWFyY2hlZE9wdGlvbnNgXG4gICAgICAvLyB3aGVuIGEgc2VhcmNoIGZpbHRlciB3YXMgYXBwbGllZC5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNcbiAgICB9LFxuXG4gICAgcmVsYXRlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVsYXRlJywge1xuICAgICAgLy8gVE9ETzogQ29udmVydCB0byBgcmVsYXRlQnk6ICdpZCdgXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBXZSBjYW5ub3QgdXNlIHNjaGVtYSBhY2Nlc3NvciBjYWxsYmFjayBtYWdpYyBmb3IgYHJlbGF0ZWAgYXMgd2UgbmVlZFxuICAgICAgLy8gdGhpcyBvdXRzaWRlIG9mIHRoZSBjb21wb25lbnQncyBsaWZlLXNwYW4sIHNlZSBgcHJvY2Vzc0RhdGEoKWAgYmVsb3cuXG4gICAgICBjYWxsYmFjazogZmFsc2VcbiAgICB9KSxcblxuICAgIGdyb3VwQnk6IGdldFNjaGVtYUFjY2Vzc29yKCdncm91cEJ5Jywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgb3B0aW9uTGFiZWw6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLmxhYmVsJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldChsYWJlbCkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ2xhYmVsJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBsYWJlbCB8fFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uS2V5KCdsYWJlbCcpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBvcHRpb25WYWx1ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ29wdGlvbnMudmFsdWUnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KHZhbHVlKSB7XG4gICAgICAgIC8vIElmIG5vIGBsYWJlbGAgd2FzIHByb3ZpZGVkIGJ1dCB0aGUgb3B0aW9ucyBhcmUgb2JqZWN0cywgYXNzdW1lIGFcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBvZiAndmFsdWUnOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHZhbHVlIHx8XG4gICAgICAgICAgdGhpcy5yZWxhdGUgJiYgJ2lkJyB8fFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uS2V5KCd2YWx1ZScpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBDb25zaWRlciBtb3Zpbmcgc2VhcmNoIHRvIGBvcHRpb25zLnNlYXJjaGA/XG4gICAgc2VhcmNoRmlsdGVyOiBnZXRTY2hlbWFBY2Nlc3Nvcignc2VhcmNoJywge1xuICAgICAgdHlwZTogW09iamVjdCwgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldChzZWFyY2gpIHtcbiAgICAgICAgaWYgKHNlYXJjaCkge1xuICAgICAgICAgIGNvbnN0IHsgZmlsdGVyLCBkZWJvdW5jZSB9ID0gaXNGdW5jdGlvbihzZWFyY2gpXG4gICAgICAgICAgICA/IHsgZmlsdGVyOiBzZWFyY2ggfVxuICAgICAgICAgICAgOiBzZWFyY2hcbiAgICAgICAgICByZXR1cm4gZGVib3VuY2UgPyBkZWJvdW5jZUFzeW5jKGZpbHRlciwgZGVib3VuY2UpIDogZmlsdGVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGdyb3VwQnlMYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnbGFiZWwnIDogbnVsbFxuICAgIH0sXG5cbiAgICBncm91cEJ5T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnb3B0aW9ucycgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRPcHRpb25LZXkoa2V5KSB7XG4gICAgICBjb25zdCBbb3B0aW9uXSA9IHRoaXMuYWN0aXZlT3B0aW9uc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KG9wdGlvbikgJiYga2V5IGluIG9wdGlvbiA/IGtleSA6IG51bGxcbiAgICB9LFxuXG4gICAgcHJvY2Vzc09wdGlvbnMob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlbGF0ZSkge1xuICAgICAgICAgIC8vIElmIGlkcyBhcmUgbWlzc2luZyBhbmQgd2Ugd2FudCB0byByZWxhdGUsIHNldCB0ZW1wb3JhcnkgaWRzLlxuICAgICAgICAgIC8vIE5PVEU6IFdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBhY3R1YWwgZGF0YSwgbWFraW5nIGEgY29weSB3b24ndCB3b3JrXG4gICAgICAgICAgLy8gYXMgaXQgd29uJ3QgcHJvcGFnYXRlLlxuICAgICAgICAgIC8vIE5PVEU6IFRoaXMgb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgZGF0YSBpcyBmcm9tIHRoZSBncmFwaCB0aGF0XG4gICAgICAgICAgLy8gd2UncmUgY3VycmVudGx5IGVkaXRpbmcuXG4gICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKCEoJ2lkJyBpbiBvcHRpb24pKSB7XG4gICAgICAgICAgICAgIHNldFRlbXBvcmFyeUlkKG9wdGlvbiwgJ2lkJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBCeSkge1xuICAgICAgICAgIGNvbnN0IGdyb3VwZWQgPSB7fVxuICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLnJlZHVjZShcbiAgICAgICAgICAgIChyZXN1bHRzLCBvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBvcHRpb25bdGhpcy5ncm91cEJ5XVxuICAgICAgICAgICAgICBsZXQgZW50cnkgPSBncm91cGVkW2dyb3VwXVxuICAgICAgICAgICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgICAgICAgICAgZW50cnkgPSBncm91cGVkW2dyb3VwXSA9IHtcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlMYWJlbF06IGdyb3VwLFxuICAgICAgICAgICAgICAgICAgW3RoaXMuZ3JvdXBCeU9wdGlvbnNdOiBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goZW50cnkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZW50cnkub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9LFxuXG4gICAgaGFzT3B0aW9uKG9wdGlvbikge1xuICAgICAgcmV0dXJuICEhdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgfSxcblxuICAgIGdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB7XG4gICAgICBjb25zdCBmaW5kT3B0aW9uID0gKG9wdGlvbnMsIHZhbHVlLCBncm91cEJ5KSA9PiB7XG4gICAgICAgIC8vIFNlYXJjaCBmb3IgdGhlIG9wdGlvbiBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgYW5kIHJldHVybiB0aGVcbiAgICAgICAgLy8gd2hvbGUgb2JqZWN0LlxuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKGdyb3VwQnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gZmluZE9wdGlvbihvcHRpb24ub3B0aW9ucywgdmFsdWUsIG51bGwpXG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvblZhbHVlXG4gICAgICAgID8gZmluZE9wdGlvbih0aGlzLmFjdGl2ZU9wdGlvbnMsIHZhbHVlLCB0aGlzLmdyb3VwQnkpXG4gICAgICAgIDogdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgICBjb25zdCB7IG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNTdHJpbmcob3B0aW9uVmFsdWUpXG4gICAgICAgID8gb3B0aW9uPy5bb3B0aW9uVmFsdWVdXG4gICAgICAgIDogaXNGdW5jdGlvbihvcHRpb25WYWx1ZSlcbiAgICAgICAgICA/IG9wdGlvblZhbHVlLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgb3B0aW9uIH0pKVxuICAgICAgICAgIDogb3B0aW9uXG4gICAgfSxcblxuICAgIGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25MYWJlbCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvbkxhYmVsKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvbkxhYmVsXVxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uTGFiZWwpXG4gICAgICAgICAgPyBvcHRpb25MYWJlbC5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IGxhYmVsaXplKGAke29wdGlvbn1gKVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKSB7XG4gICAgaWYgKHNjaGVtYS5yZWxhdGUpIHtcbiAgICAgIC8vIEZvciBpbnRlcm5hbGx5IHJlbGF0aW5nIGRhdGEgKGBzY2hlbWEub3B0aW9ucy5kYXRhUGF0aGApLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBwcm9jZXNzIGJvdGggdGhlIG9wdGlvbnMgKGZvciAnI3JlZicpIGFuZCB0aGUgdmFsdWUgKCcjaWQnKS5cbiAgICAgIC8vIFNlZSBgRGF0YU1peGluLmhhbmRsZURhdGFTY2hlbWEoKWA6XG4gICAgICBjb25zdCBwYXRoID0gc2NoZW1hLm9wdGlvbnM/LmRhdGFQYXRoXG4gICAgICBjb25zdCByZWxhdGVkRGF0YVBhdGggPSBwYXRoXG4gICAgICAgID8gbm9ybWFsaXplRGF0YVBhdGgoYCR7ZGF0YVBhdGh9LyR7cGF0aH1gKVxuICAgICAgICA6IG51bGxcbiAgICAgIGdyYXBoLmFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSlcbiAgICAgIGlmIChyZWxhdGVkRGF0YVBhdGgpIHtcbiAgICAgICAgZ3JhcGguc2V0U291cmNlUmVsYXRlZChyZWxhdGVkRGF0YVBhdGgpXG4gICAgICB9XG4gICAgICAvLyBDb252ZXJ0IHJlbGF0aW5nIG9iamVjdHMgdG8gYSBzaGFsbG93IGNvcHkgd2l0aCBvbmx5IHRoZSBpZCBsZWZ0LlxuICAgICAgLy8gVE9ETzogQ29udmVydCB0byB1c2luZyBgcmVsYXRlQnlgOlxuICAgICAgY29uc3QgcHJvY2Vzc1JlbGF0ZSA9IHZhbHVlID0+IHZhbHVlID8geyBpZDogdmFsdWUuaWQgfSA6IHZhbHVlXG4gICAgICAvLyBTZWxlY3RlZCBvcHRpb25zIGNhbiBiZSBib3RoIG9iamVjdHMgJiBhcnJheXMsIGUuZy4gJ2NoZWNrYm94ZXMnOlxuICAgICAgdmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzUmVsYXRlKVxuICAgICAgICA6IHByb2Nlc3NSZWxhdGUodmFsdWUpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCJcbnVsLmRpdG8tY2hlY2tib3hlcyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1jaGVja2JveChcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgKVxuICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB1bC5kaXRvLWNoZWNrYm94ZXMoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbiAgKVxuICAgIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICAgIGxhYmVsXG4gICAgICAgIGlucHV0LmRpdG8tY2hlY2tib3goXG4gICAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgICAgKVxuICAgICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1jaGVja2JveGVzXG4gICAgbGFiZWxcbiAgICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3NcbiAgICAuZGl0by1jaGVja2JveFxuICAgICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NoZWNrYm94ZXMnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIGRlZmF1bHRWYWx1ZTogW10sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZE9wdGlvbnM6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGVkVmFsdWUgfHwgW10pLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSlcbiAgICAgIH0sXG5cbiAgICAgIHNldChvcHRpb24pIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gKG9wdGlvbiB8fCBbXSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tY29kZShcbiAgcmVmPVwiY29kZVwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnN0eWxlPVwic3R5bGVcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tY29kZShcbiAgICByZWY9XCJjb2RlXCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOnN0eWxlPVwic3R5bGVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tY29kZVxuICAgIEBleHRlbmQgJWlucHV0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLy8gRm9yIHByb3BwZXIgc2l6aW5nIG9mIGNvbnRlbnQgYWxvbmcgd2l0aCA6c3R5bGU9XCJzdHlsZVwiIHNldHRpbmcgYWJvdmUsXG4gICAgLy8gZm9yIHByb3BlciBsaW5lLWhlaWdodCBjYWxjdWxhdGlvbi5cbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICB3aWR0aDogYXV0b1xuICAgIC5jb2RlZmxhc2tcbiAgICAgIGJhY2tncm91bmQ6IG5vbmVcbiAgICAgIC8vIElnbm9yZSB0aGVwYXJlbnQgcGFkZGluZyBkZWZpbmVkIGFib3ZlIHdoaWNoIGlzIG9ubHkgbmVlZGVkIHRvIHNldFxuICAgICAgLy8gdGhlIGRlc2lyZWQgaGVpZ2h0IHdpdGggOnN0eWxlPVwic3R5bGVcIi5cbiAgICAgIHRvcDogMFxuICAgICAgbGVmdDogMFxuICAgIC5jb2RlZmxhc2tfX3RleHRhcmVhLFxuICAgIC5jb2RlZmxhc2tfX3ByZVxuICAgICAgLy8gVXNlIHNhbWUgcGFkZGluZyBhcyAuZGl0by1jb2RlXG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgIC5jb2RlZmxhc2tfX3RleHRhcmVhLFxuICAgIC5jb2RlZmxhc2tfX2NvZGUsXG4gICAgLmNvZGVmbGFza19fbGluZXNcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ub1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUpXG4gICAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpXG4gICAgLmNvZGVmbGFza19fbGluZXNcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgQ29kZUZsYXNrIGZyb20gJ2NvZGVmbGFzaydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvZGUnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDNcbiAgICB9LFxuXG4gICAgc3R5bGUoKSB7XG4gICAgICByZXR1cm4gYGhlaWdodDogY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGNvbnN0IGZsYXNrID0gbmV3IENvZGVGbGFzayh0aGlzLiRyZWZzLmNvZGUsIHtcbiAgICAgIGxhbmd1YWdlOiB0aGlzLnNjaGVtYS5sYW5ndWFnZSB8fCAnamF2YXNjcmlwdCcsXG4gICAgICB0YWJTaXplOiB0aGlzLnNjaGVtYS5pbmRlbnRTaXplIHx8IDIsXG4gICAgICBsaW5lTnVtYmVyczogZmFsc2VcbiAgICB9KVxuXG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZVxuICAgIGxldCBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVVwZGF0ZSA9IGZhbHNlXG5cbiAgICBjb25zdCBvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5mb2N1c2VkICYmIGNoYW5nZWQpIHtcbiAgICAgICAgY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9uRm9jdXMgPSAoKSA9PiB0aGlzLm9uRm9jdXMoKVxuXG4gICAgY29uc3Qgb25CbHVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5vbkJsdXIoKVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH1cblxuICAgIHRoaXMuZG9tT24odGhpcy4kcmVmcy5jb2RlLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyksIHtcbiAgICAgIGZvY3VzOiBvbkZvY3VzLFxuICAgICAgYmx1cjogb25CbHVyXG4gICAgfSlcblxuICAgIGNvbnN0IHNldENvZGUgPSBjb2RlID0+IHtcbiAgICAgIGlmIChjb2RlICE9PSBmbGFzay5jb2RlKSB7XG4gICAgICAgIGlnbm9yZVVwZGF0ZSA9IHRydWVcbiAgICAgICAgZmxhc2sudXBkYXRlQ29kZShjb2RlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgY2hhbmdlZCA9IHRydWVcbiAgICAgICAgb25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZsYXNrLm9uVXBkYXRlKHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVVcGRhdGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFZhbHVlKHZhbHVlKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLiR3YXRjaCgndmFsdWUnLCB2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlV2F0Y2gpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0Q29kZSh2YWx1ZSB8fCAnJylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgc2V0Q29kZSh0aGlzLnZhbHVlIHx8ICcnKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpPy5mb2N1cygpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnRyaWdnZXIuZGl0by1jb2xvcihcbiAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgOnNob3cuc3luYz1cInNob3dQb3B1cFwiXG4pXG4gIC5kaXRvLWlucHV0KFxuICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICApXG4gICAgaW5wdXQoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIHR5cGU9XCJpbnB1dFwiXG4gICAgICBzaXplPVwiOFwiXG4gICAgICB2LW1vZGVsPVwiaGV4VmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICApXG4gICAgLmRpdG8tY29sb3ItcHJldmlldy5kaXRvLWluaGVyaXQtZm9jdXMoXG4gICAgICB2LWlmPVwidmFsdWVcIlxuICAgIClcbiAgICAgIGRpdig6c3R5bGU9XCJ7IGJhY2tncm91bmQ6IGAjJHtoZXhWYWx1ZSB8fCAnMDAwMDAwMDAnfWAgfVwiKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gIHNrZXRjaC1waWNrZXIuZGl0by1jb2xvci1waWNrZXIoXG4gICAgc2xvdD1cInBvcHVwXCJcbiAgICB2LW1vZGVsPVwiY29sb3JWYWx1ZVwiXG4gICAgOmRpc2FibGUtYWxwaGE9XCIhYWxwaGFcIlxuICAgIDpkaXNhYmxlLWZpZWxkcz1cIiFpbnB1dHNcIlxuICAgIDpwcmVzZXQtY29sb3JzPVwicHJlc2V0c1wiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRyaWdnZXIuZGl0by1jb2xvcihcbiAgICB0cmlnZ2VyPVwiY2xpY2tcIlxuICAgIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuICApXG4gICAgLmRpdG8taW5wdXQoXG4gICAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICAgIClcbiAgICAgIGlucHV0KFxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgICB0eXBlPVwiaW5wdXRcIlxuICAgICAgICBzaXplPVwiOFwiXG4gICAgICAgIHYtbW9kZWw9XCJoZXhWYWx1ZVwiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIClcbiAgICAgIC5kaXRvLWNvbG9yLXByZXZpZXcuZGl0by1pbmhlcml0LWZvY3VzKFxuICAgICAgICB2LWlmPVwidmFsdWVcIlxuICAgICAgKVxuICAgICAgICBkaXYoOnN0eWxlPVwieyBiYWNrZ3JvdW5kOiBgIyR7aGV4VmFsdWUgfHwgJzAwMDAwMDAwJ31gIH1cIilcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbiAgICBza2V0Y2gtcGlja2VyLmRpdG8tY29sb3ItcGlja2VyKFxuICAgICAgc2xvdD1cInBvcHVwXCJcbiAgICAgIHYtbW9kZWw9XCJjb2xvclZhbHVlXCJcbiAgICAgIDpkaXNhYmxlLWFscGhhPVwiIWFscGhhXCJcbiAgICAgIDpkaXNhYmxlLWZpZWxkcz1cIiFpbnB1dHNcIlxuICAgICAgOnByZXNldC1jb2xvcnM9XCJwcmVzZXRzXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgJGNvbG9yLXN3YXRjaC13aWR0aDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5LXNpemVcbiAgJGNvbG9yLXN3YXRjaC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gJGJvcmRlci13aWR0aFxuICAuZGl0by1jb2xvclxuICAgIC5kaXRvLWlucHV0XG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICBpbnB1dFxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgICAgcGFkZGluZy1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgIC5kaXRvLWJ1dHRvbi1jbGVhclxuICAgICAgbWFyZ2luLXJpZ2h0OiAkY29sb3Itc3dhdGNoLXdpZHRoXG4gICAgLmRpdG8tY29sb3ItcGlja2VyXG4gICAgICBtYXJnaW46ICRwb3B1cC1tYXJnaW5cbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3dcbiAgICAuZGl0by1jb2xvci1wcmV2aWV3XG4gICAgICBiYWNrZ3JvdW5kOiAkcGF0dGVybi10cmFuc3BhcmVuY3lcbiAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlXG4gICAgICAmLFxuICAgICAgZGl2XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICB3aWR0aDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgICAgICB0b3A6IDBcbiAgICAgICAgcmlnaHQ6IDBcbiAgICAgICAgYm90dG9tOiAwXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1c1xuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXNcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgdGlueWNvbG9yIGZyb20gJ3Rpbnljb2xvcjInXG5pbXBvcnQgeyBTa2V0Y2ggYXMgU2tldGNoUGlja2VyIH0gZnJvbSAndnVlLWNvbG9yJ1xuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IFRyaWdnZXIgfSBmcm9tICdAZGl0b2pzL3VpJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvbG9yJywge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIFNrZXRjaFBpY2tlciB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dQb3B1cDogZmFsc2UsXG4gICAgICBjb252ZXJ0ZWRIZXhWYWx1ZTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbG9yVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgfHwge31cbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBmb3JtYXQgPSB0aGlzLmNvbG9yRm9ybWF0XG4gICAgICAgIGNvbnN0IGtleSA9IHtcbiAgICAgICAgICAvLyBOT1RFOiB2dWUtY29sb3IgY2FsbHMgaXQgJ2hleCcsIHdoaWxlIHRpbnljb2xvciBjYWxscyBpdCAnaGV4NidcbiAgICAgICAgICBoZXg6IHZhbHVlPy5hIDwgMSA/ICdoZXg4JyA6ICdoZXgnLFxuICAgICAgICAgIHJnYjogJ3JnYmEnXG4gICAgICAgIH1bZm9ybWF0XSB8fCBmb3JtYXRcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVtrZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRpbnljb2xvcih2YWx1ZSkudG9TdHJpbmcoZm9ybWF0KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBoZXhWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IG51bGxcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5mb2N1c2VkKSB7XG4gICAgICAgICAgY29uc3QgY29sb3IgPSB0aW55Y29sb3IodGhpcy52YWx1ZSlcbiAgICAgICAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gY29sb3JcbiAgICAgICAgICAgICAgLnRvU3RyaW5nKGNvbG9yLmdldEFscGhhKCkgPCAxID8gJ2hleDgnIDogJ2hleDYnKVxuICAgICAgICAgICAgICAuc2xpY2UoMSlcbiAgICAgICAgICAgICAgLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydGVkSGV4VmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gdmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVE9ETzogYGZvcm1hdGAgY2xhc2hlcyB3aXRoIFR5cGVNaXhpbi5mb3JtYXQoKWAsIHdoaWNoIHNoYWxsIGJlIHJlbmFtZWRcbiAgICAvLyBzb29uIHRvIGBmb3JtYXRWYWx1ZSgpYC4gUmVuYW1lIGBjb2xvckZvcm1hdGAgYmFjayB0byBgZm9ybWF0YCBhZnRlci5cbiAgICBjb2xvckZvcm1hdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Zvcm1hdCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdoZXgnXG4gICAgfSksXG5cbiAgICBhbHBoYTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2FscGhhJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBpbnB1dHM6IGdldFNjaGVtYUFjY2Vzc29yKCdpbnB1dHMnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pLFxuXG4gICAgcHJlc2V0czogZ2V0U2NoZW1hQWNjZXNzb3IoJ3ByZXNldHMnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGRlZmF1bHQ6IFtcbiAgICAgICAgJyNmZmZmZmYnLFxuICAgICAgICAnI2MzYzNjMycsXG4gICAgICAgICcjN2Y3ZjdmJyxcbiAgICAgICAgJyMwMDAwMDAnLFxuICAgICAgICAnIzg4MDAxNScsXG4gICAgICAgICcjZWQxYzI0JyxcbiAgICAgICAgJyNmZjdmMjcnLFxuICAgICAgICAnI2ZmZjIwMCcsXG5cbiAgICAgICAgJyMyMmIxNGMnLFxuICAgICAgICAnIzAwYTJlOCcsXG4gICAgICAgICcjM2Y0OGNjJyxcbiAgICAgICAgJyNhMzQ5YTQnLFxuICAgICAgICAnI2I5N2E1NycsXG4gICAgICAgICcjZmZhZWM5JyxcbiAgICAgICAgJyNmZmM5MGUnLFxuICAgICAgICAnIzAwMDAwMDAwJ1xuICAgICAgXVxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBmb2N1c2VkKGZvY3VzZWQpIHtcbiAgICAgIGlmICghZm9jdXNlZCAmJiB0aGlzLmNvbnZlcnRlZEhleFZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvbG9yID0gdGlueWNvbG9yKGAjJHt0aGlzLmNvbnZlcnRlZEhleFZhbHVlfWApXG4gICAgICAgIGlmIChjb2xvcj8uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbG9yLnRvU3RyaW5nKHRoaXMuY29sb3JGb3JtYXQpXG4gICAgICAgICAgLy8gVE9ETzogRW1pdCAnaW5wdXQnIGhlcmUgaW5zdGVhZCwgYW5kICdjaGFuZ2UnIGluIGJsdXIsIGxpa2Ugb3RoZXJzLlxuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuXG48L3NjcmlwdD5cbiIsIlxuY29tcG9uZW50KFxuICA6aXM9XCJjb21wb25lbnRcIlxuICB2LWJpbmQ9XCIkcHJvcHNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgY29tcG9uZW50KFxuICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgdi1iaW5kPVwiJHByb3BzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbi8vIFRoaXMgaXMgdGhlIGdlbmVyYWwgcHVycG9zZSAnY29tcG9uZW50JyB0eXBlLCB3aGljaCBjYW4gcmVzb2x2ZSB0byBhbnkgY3VzdG9tXG4vLyBjb21wb25lbnQgdGhyb3VnaCBgc2NoZW1hLmNvbXBvbmVudGAsIHNlZSBgcmVzb2x2ZVR5cGVDb21wb25lbnQoKWAuIFRoaXMgY2FuXG4vLyBiZSB1c2VkIHRvIG5lc3QgYXJiaXRyYXJ5IHZ1ZSBjb21wb25lbnRzIGluIHNjaGVtYTpcbi8vIHtcbi8vICAgdHlwZTogJ2NvbXBvbmVudCcsXG4vLyAgIGNvbXBvbmVudDogaW1wb3J0KCcuL2NvbXBvbmVudCcpXG4vLyB9XG5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb21wb25lbnQnLCB7XG4gIC8vIE92ZXJyaWRlIHRoZSBzdGFuZGFyZCBgZGVmYXVsdFZhbHVlOiBudWxsYCB0byBub3Qgc2V0IGFueSBkYXRhIGZvciBjdXN0b21cbiAgLy8gY29tcG9uZW50cywgdW5sZXNzIHRoZXkgcHJvdmlkZSBhIGRlZmF1bHQgdmFsdWUuXG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiAhKCdkZWZhdWx0JyBpbiBzY2hlbWEpXG59KVxuPC9zY3JpcHQ+XG4iLCJcbi8vLSBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byB0cmlnZ2VyIGV2YWx1YXRpb24gb2YgYHZhbHVlYCB0aGF0IGRvc2Ugbm90XG4vLyAgaW52b2x2ZSBhY3R1YWxseSByZW5kZXJpbmcgaXQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCB2aXNpYmxlLlxuaW5wdXQuZGl0by10ZXh0LmRpdG8taW5wdXQoXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpuYW1lPVwibmFtZVwiXG4gIHR5cGU9XCJ0ZXh0XCJcbiAgOnZhbHVlPVwidmFsdWVcIlxuICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIDpyZWFkb25seT1cInRydWVcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLy8tIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHRyaWdnZXIgZXZhbHVhdGlvbiBvZiBgdmFsdWVgIHRoYXQgZG9zZSBub3RcbiAgLy8gIGludm9sdmUgYWN0dWFsbHkgcmVuZGVyaW5nIGl0IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgdmlzaWJsZS5cbiAgaW5wdXQuZGl0by10ZXh0LmRpdG8taW5wdXQoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpuYW1lPVwibmFtZVwiXG4gICAgdHlwZT1cInRleHRcIlxuICAgIDp2YWx1ZT1cInZhbHVlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOnJlYWRvbmx5PVwidHJ1ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IERhdGFNaXhpbiBmcm9tICcuLi9taXhpbnMvRGF0YU1peGluLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ2NvbXB1dGVkJywgJ2RhdGEnLCAnaGlkZGVuJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIG1peGluczogW0RhdGFNaXhpbl0sXG5cbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGRlZmF1bHRWaXNpYmxlOiBmYWxzZSxcblxuICBjb21wdXRlZDoge1xuICAgIHZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hIH0gPSB0aGlzXG4gICAgICAgIGlmIChzY2hlbWEuZGF0YSB8fCBzY2hlbWEuZGF0YVBhdGgpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaGFuZGxlRGF0YVNjaGVtYShzY2hlbWEsICdzY2hlbWEnLCB7XG4gICAgICAgICAgICAvLyBNb2RpZnlpbmcgYHRoaXMuZGF0YWAgYmVsb3cgdHJpZ2dlcnMgYW5vdGhlciBjYWxsIG9mIHRoZSBgdmFsdWVgXG4gICAgICAgICAgICAvLyBnZXR0ZXIsIHNvIHVzZSBhIHZhbHVlIG9mIDIgZm9yIGByZXNvbHZlQ291bnRlcmAgdG8gcmV0dXJuIHRoZVxuICAgICAgICAgICAgLy8gcmVzb2x2ZWQgZGF0YSB0d2ljZS5cbiAgICAgICAgICAgIHJlc29sdmVDb3VudGVyOiAyXG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLiRzZXQodGhpcy5kYXRhLCB0aGlzLm5hbWUsIHZhbHVlKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBUeXBlTWl4aW4uY29tcHV0ZWQudmFsdWUuZ2V0LmNhbGwodGhpcylcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBUeXBlTWl4aW4uY29tcHV0ZWQudmFsdWUuc2V0LmNhbGwodGhpcywgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWRhdGVcbiAgY29tcG9uZW50KFxuICAgIDppcz1cImdldENvbXBvbmVudCh0eXBlKVwiXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpsb2NhbGU9XCJsb2NhbGVcIlxuICAgIDpkYXRlRm9ybWF0PVwieyAuLi5hcGkuZm9ybWF0cy5kYXRlLCAuLi5kYXRlRm9ybWF0IH1cIlxuICAgIHYtbW9kZWw9XCJkYXRlVmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1kYXRlXG4gICAgY29tcG9uZW50KFxuICAgICAgOmlzPVwiZ2V0Q29tcG9uZW50KHR5cGUpXCJcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgOmxvY2FsZT1cImxvY2FsZVwiXG4gICAgICA6ZGF0ZUZvcm1hdD1cInsgLi4uYXBpLmZvcm1hdHMuZGF0ZSwgLi4uZGF0ZUZvcm1hdCB9XCJcbiAgICAgIHYtbW9kZWw9XCJkYXRlVmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBEYXRlVGltZVBpY2tlciB9IGZyb20gJ0BkaXRvanMvdWknXG5pbXBvcnQgeyBpc0RhdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ2RhdGUnLCAnZGF0ZXRpbWUnLCAndGltZSdcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBjb21wb25lbnRzOiB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIsIERhdGVUaW1lUGlja2VyIH0sXG4gIC8vIFRPRE86IFRoaXMgaXMgb25seSBoZXJlIHNvIHdlIGdldCBwbGFjZWhvbGRlciBhZGRlZC4gQ29tZSB1cCB3aXRoIGEgYmV0dGVyXG4gIC8vIHdheSB0byBzdXBwb3J0IGF0dHJpYnV0ZXMgcGVyIGNvbXBvbmVudCAoYSBsaXN0IG9mIGFjdHVhbGx5IHN1cHBvcnRlZFxuICAvLyBhdHRyaWJ1dGVzKVxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZGF0ZVZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIHZhbHVlID8gbmV3IERhdGUodmFsdWUpIDogdmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGF0ZUZvcm1hdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RhdGVGb3JtYXQnLCB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29tcG9uZW50KHR5cGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGU6ICdkYXRlLXBpY2tlcicsXG4gICAgICAgIHRpbWU6ICd0aW1lLXBpY2tlcicsXG4gICAgICAgIGRhdGV0aW1lOiAnZGF0ZS10aW1lLXBpY2tlcidcbiAgICAgIH1bdHlwZV1cbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUpIHtcbiAgICByZXR1cm4gaXNEYXRlKHZhbHVlKSA/IHZhbHVlLnRvSVNPU3RyaW5nKCkgOiB2YWx1ZVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJlc291cmNlTWl4aW4gZnJvbSAnLi9SZXNvdXJjZU1peGluLmpzJ1xuaW1wb3J0IFNjaGVtYVBhcmVudE1peGluIGZyb20gJy4uL21peGlucy9TY2hlbWFQYXJlbnRNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yLCBnZXRTdG9yZUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHtcbiAgcHJvY2Vzc1JvdXRlU2NoZW1hLCBwcm9jZXNzRm9ybXMsIGdldE5hbWVkU2NoZW1hcywgZ2V0QnV0dG9uU2NoZW1hcyxcbiAgaGFzRm9ybVNjaGVtYSwgZ2V0Rm9ybVNjaGVtYXMsIGdldFZpZXdTY2hlbWEsXG4gIGhhc0xhYmVscywgaXNDb21wYWN0LCBpc0lubGluZWQsXG4gIGlzT2JqZWN0U291cmNlLCBpc0xpc3RTb3VyY2Vcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0FycmF5LCBpc051bWJlciwgZXF1YWxzLFxuICBwYXJzZURhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtSZXNvdXJjZU1peGluLCBTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgZGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICAgIHJldHVybiBpc0xpc3RTb3VyY2Uoc2NoZW1hKSA/IFtdIDogbnVsbFxuICB9LFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JhcHBlZFByaW1pdGl2ZXM6IG51bGwsXG4gICAgICB1bndyYXBwaW5nUHJpbWl0aXZlczogZmFsc2UsXG4gICAgICBpZ25vcmVSb3V0ZUNoYW5nZTogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBpc09iamVjdFNvdXJjZSgpIHtcbiAgICAgIHJldHVybiBpc09iamVjdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIGlzTGlzdFNvdXJjZSgpIHtcbiAgICAgIHJldHVybiBpc0xpc3RTb3VyY2UodGhpcy50eXBlKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5oYXNEYXRhKClcbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52YWx1ZVxuICAgIH0sXG5cbiAgICBpc1JlYWR5KCkge1xuICAgICAgLy8gTGlzdHMgdGhhdCBoYXZlIG5vIGRhdGEgYW5kIG5vIGFzc29jaWF0ZWQgcmVzb3VyY2Ugc2hvdWxkIHN0aWxsIHJlbmRlcixcbiAgICAgIC8vIGFzIHRoZXkgbWF5IGJlIGdldHRpbmcgdGhlaXIgZGF0YSBlbHNld2hlcmUsIGUuZy4gYGNvbXB1dGUoKWAuXG4gICAgICByZXR1cm4gdGhpcy5oYXNEYXRhIHx8ICF0aGlzLnByb3ZpZGVzRGF0YVxuICAgIH0sXG5cbiAgICBpc0luVmlldygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmlld0NvbXBvbmVudFxuICAgIH0sXG5cbiAgICB3cmFwUHJpbWl0aXZlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS53cmFwUHJpbWl0aXZlc1xuICAgIH0sXG5cbiAgICBsaXN0RGF0YToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMudmFsdWVcbiAgICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgICAvLyBDb252ZXJ0IHRvIGxpc3QgYXJyYXkuXG4gICAgICAgICAgZGF0YSA9IGRhdGEgIT0gbnVsbCA/IFtkYXRhXSA6IFtdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgZGF0YSBnZXRzIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgdW53cmFwcGluZyBpcyBub3QgaGFwcGVuaW5nXG4gICAgICAgICAgLy8gYXQgdGhlIHJvb3QgaW4gYHNldERhdGEoKWAsIGJ1dCBoZXJlIGluc3RlYWQuXG4gICAgICAgICAgZGF0YSA9IHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkgfHwgZGF0YVxuICAgICAgICB9XG4gICAgICAgIGRhdGEgfHw9IFtdXG4gICAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMgfSA9IHRoaXNcbiAgICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgICAgaWYgKHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMpIHtcbiAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUgdW53cmFwcGluZyBvbmNlIGBsaXN0RGF0YWAgaXMgcmVldmFsdWF0ZWQsIHNvIHNldFxuICAgICAgICAgICAgLy8gdGhpcyB0byBgZmFsc2VgIGFnYWluLiBTZWUgYHdyYXBwZWRQcmltaXRpdmVzYCB3YXRjaGVyIGFib3ZlLlxuICAgICAgICAgICAgdGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcyA9IGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIENvbnZlcnQgZGF0YSB0byBhIGxpc3Qgb2Ygd3JhcHBlZCBwcmltaXRpdmVzLCBhbmQgcmV0dXJuIGl0LlxuICAgICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGEubWFwKHZhbHVlID0+ICh7XG4gICAgICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IHZhbHVlXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMud3JhcHBlZFByaW1pdGl2ZXNcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfSxcblxuICAgICAgc2V0KGRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMud3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICA/IChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCA/IGRhdGFbMF0gOiBudWxsKVxuICAgICAgICAgICAgOiBkYXRhXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb2JqZWN0RGF0YToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICAvLyBBbHdheXMgZ28gdGhyb3VnaCBgbGlzdERhdGFgIGludGVybmFsbHksIHdoaWNoIGRvZXMgYWxsIHRoZVxuICAgICAgICAvLyBwcm9jZXNzaW5nIG9mIGB3cmFwUHJpbWl0aXZlc2AsIGV0Yy5cbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdERhdGFbMF0gfHwgbnVsbFxuICAgICAgfSxcblxuICAgICAgc2V0KGRhdGEpIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YSA9IGRhdGEgPyBbZGF0YV0gOiBbXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzb3VyY2VTY2hlbWEoKSB7XG4gICAgICAvLyBUaGUgc291cmNlU2NoZW1hIG9mIGEgbGlzdCBpcyB0aGUgbGlzdCdzIHNjaGVtYSBpdHNlbGYuXG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFcbiAgICB9LFxuXG4gICAgcGF0aCgpIHtcbiAgICAgIC8vIFRoaXMgaXMgdXNlZCBpbiBUeXBlTGlzdCBmb3IgRGl0b0Zvcm1DaG9vc2VyLlxuICAgICAgcmV0dXJuIHRoaXMucm91dGVDb21wb25lbnQuZ2V0Q2hpbGRQYXRoKHRoaXMuc2NoZW1hLnBhdGgpXG4gICAgfSxcblxuICAgIGRlZmF1bHRRdWVyeSgpIHtcbiAgICAgIGNvbnN0IHsgZGVmYXVsdE9yZGVyOiBvcmRlciB9ID0gdGhpc1xuICAgICAgcmV0dXJuIG9yZGVyID8geyBvcmRlciB9IDoge31cbiAgICB9LFxuXG4gICAgcXVlcnk6IGdldFN0b3JlQWNjZXNzb3IoJ3F1ZXJ5Jywge1xuICAgICAgZ2V0KHF1ZXJ5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4udGhpcy5kZWZhdWx0UXVlcnksXG4gICAgICAgICAgLi4ucXVlcnlcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgc2V0KHF1ZXJ5KSB7XG4gICAgICAgIC8vIEFsd2F5cyBrZWVwIHRoZSBkaXNwbGF5ZWQgcXVlcnkgcGFyYW1ldGVycyBpbiBzeW5jIHdpdGggdGhlIHN0b3JlZFxuICAgICAgICAvLyBvbmVzLiBVc2Ugc2NvcGUgYW5kIHBhZ2UgZnJvbSB0aGUgbGlzdCBzY2hlbWEgYXMgZGVmYXVsdHMsIGJ1dCBhbGxvd1xuICAgICAgICAvLyB0aGUgcm91dGUgcXVlcnkgcGFyYW1ldGVycyB0byBvdmVycmlkZSB0aGVtLlxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgc2NvcGUgPSB0aGlzLmRlZmF1bHRTY29wZT8ubmFtZSxcbiAgICAgICAgICBwYWdlID0gdGhpcy5zY2hlbWEucGFnZVxuICAgICAgICB9ID0gdGhpcy5xdWVyeVxuICAgICAgICAvLyBQcmVzZXJ2ZSAvIG1lcmdlIGN1cnJlbnRseSBzdG9yZWQgdmFsdWVzLlxuICAgICAgICBxdWVyeSA9IHtcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICAgIC4uLihzY29wZSAhPSBudWxsICYmIHsgc2NvcGUgfSksXG4gICAgICAgICAgLi4uKHBhZ2UgIT0gbnVsbCAmJiB7IHBhZ2UgfSksXG4gICAgICAgICAgLi4ucXVlcnlcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVxdWFscyhxdWVyeSwgdGhpcy4kcm91dGUucXVlcnkpKSB7XG4gICAgICAgICAgLy8gVGVsbCB0aGUgYCRyb3V0ZWAgd2F0Y2hlciB0byBpZ25vcmUgdGhlIGNoYW5nZWQgdHJpZ2dlcmVkIGhlcmU6XG4gICAgICAgICAgdGhpcy5pZ25vcmVSb3V0ZUNoYW5nZSA9IHRydWVcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IHF1ZXJ5LCBoYXNoOiB0aGlzLiRyb3V0ZS5oYXNoIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1ZXJ5IC8vIExldCBnZXRTdG9yZUFjY2Vzc29yKCkgZG8gdGhlIGFjdHVhbCBzZXR0aW5nXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB0b3RhbDogZ2V0U3RvcmVBY2Nlc3NvcigndG90YWwnKSxcblxuICAgIGNvbHVtbnMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLmNvbHVtbnMpXG4gICAgfSxcblxuICAgIHNjb3BlcygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuc2NvcGVzKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0U2NvcGUoKSB7XG4gICAgICBpZiAodGhpcy5zY29wZXMpIHtcbiAgICAgICAgbGV0IGZpcnN0ID0gbnVsbFxuICAgICAgICBmb3IgKGNvbnN0IHNjb3BlIG9mIE9iamVjdC52YWx1ZXModGhpcy5zY29wZXMpKSB7XG4gICAgICAgICAgaWYgKHNjb3BlLmRlZmF1bHRTY29wZSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjb3BlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgICAgIGZpcnN0ID0gc2NvcGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpcnN0XG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlZmF1bHRPcmRlcigpIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmNvbHVtbnMpKSB7XG4gICAgICAgICAgY29uc3QgeyBkZWZhdWx0U29ydCB9ID0gY29sdW1uXG4gICAgICAgICAgaWYgKGRlZmF1bHRTb3J0KSB7XG4gICAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBpc1N0cmluZyhkZWZhdWx0U29ydCkgPyBkZWZhdWx0U29ydCA6ICdhc2MnXG4gICAgICAgICAgICByZXR1cm4gYCR7Y29sdW1uLm5hbWV9ICR7ZGlyZWN0aW9ufWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpKVxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBsaW5rZWQgdmlldyBzY2hlbWEgaWYgdGhpcyBzb3VyY2UgZWRpdHMgaXQgaXRzIGl0ZW1zIHRocm91Z2hcbiAgICAvLyBhIGxpbmtlZCB2aWV3LlxuICAgIHZpZXcoKSB7XG4gICAgICByZXR1cm4gZ2V0Vmlld1NjaGVtYSh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmlld1xuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgaGFzTGFiZWxzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybXMuc29tZShoYXNMYWJlbHMpXG4gICAgfSxcblxuICAgIGlzQ29tcGFjdCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1zLmV2ZXJ5KGlzQ29tcGFjdClcbiAgICB9LFxuXG4gICAgaXNJbmxpbmVkKCkge1xuICAgICAgcmV0dXJuIGlzSW5saW5lZCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgcGFnaW5hdGU6IGdldFNjaGVtYUFjY2Vzc29yKCdwYWdpbmF0ZScsIHtcbiAgICAgIHR5cGU6IE51bWJlclxuICAgIH0pLFxuXG4gICAgcmVuZGVyOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVuZGVyJywge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSksXG5cbiAgICBjcmVhdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjcmVhdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY3JlYXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgICAgICA/IHRoaXMuaXNPYmplY3RTb3VyY2VcbiAgICAgICAgICAgID8gIXRoaXMudmFsdWVcbiAgICAgICAgICAgIDogdHJ1ZVxuICAgICAgICAgIDogZmFsc2VcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZWRpdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGVkaXRhYmxlICYmICF0aGlzLmlzSW5saW5lZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBkcmFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkcmFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZHJhZ2dhYmxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZSAmJiB0aGlzLmxpc3REYXRhLmxlbmd0aCA+IDEgJiYgZHJhZ2dhYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb2xsYXBzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGwsIC8vIHNvIHRoYXQgYD8/YCBiZWxvdyBjYW4gZG8gaXRzIHRoaW5nOlxuICAgICAgZ2V0KGNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW5saW5lZCAmJiAhIShjb2xsYXBzaWJsZSA/PyB0aGlzLmNvbGxhcHNlZCAhPT0gbnVsbClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKHRoaXMuaWdub3JlUm91dGVDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5pZ25vcmVSb3V0ZUNoYW5nZSA9IGZhbHNlXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGZyb20ucGF0aCA9PT0gdG8ucGF0aCAmJiBmcm9tLmhhc2ggPT09IHRvLmhhc2gpIHtcbiAgICAgICAgLy8gUGF0aHMgYW5kIGhhc2hlcyByZW1haW4gdGhlIHNhbWUsIHNvIG9ubHkgcXVlcmllcyBoYXZlIGNoYW5nZWQuXG4gICAgICAgIC8vIFVwZGF0ZSBmaWx0ZXIgYW5kIHJlbG9hZCBkYXRhIHdpdGhvdXQgY2xlYXJpbmcuXG4gICAgICAgIHRoaXMucXVlcnkgPSB0by5xdWVyeVxuICAgICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB3cmFwcGVkUHJpbWl0aXZlczoge1xuICAgICAgZGVlcDogdHJ1ZSxcbiAgICAgIGhhbmRsZXIobmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMgfSA9IHRoaXNcbiAgICAgICAgLy8gU2tpcCB0aGUgaW5pdGlhbCBzZXR0aW5nIG9mIHdyYXBwZWRQcmltaXRpdmVzIGFycmF5XG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBvbGRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdoZW5ldmVyIHRoZSB3cmFwcGVkUHJpbWl0aXZlcyBjaGFuZ2UsIG1hcCB0aGVpciB2YWx1ZXMgYmFjayB0b1xuICAgICAgICAgIC8vIHRoZSBhcnJheSBvZiBwcmltaXRpdmVzLCBpbiBhIHByaW1pdGl2ZSB3YXkgOilcbiAgICAgICAgICAvLyBCdXQgc2V0IGB1bndyYXBwaW5nUHJpbWl0aXZlcyA9IHRydWVgLCBzbyB0aGUgYGxpc3REYXRhYCBjb21wdXRlZFxuICAgICAgICAgIC8vIHByb3BlcnR5IGtub3dzIGFib3V0IGl0LCB3aGljaCBzZXRzIGl0IHRvIGBmYWxzZWAgYWdhaW4uXG4gICAgICAgICAgdGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcyA9IHRydWVcbiAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWUubWFwKG9iamVjdCA9PiBvYmplY3Rbd3JhcFByaW1pdGl2ZXNdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy50b3RhbCA9IDBcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gV2hlbiBuZXcgZGF0YSBpcyBsb2FkZWQsIHdlIGNhbiBzdG9yZSBpdCByaWdodCBiYWNrIGluIHRoZSBkYXRhIG9mIHRoZVxuICAgICAgLy8gdmlldyBvciBmb3JtIHRoYXQgY3JlYXRlZCB0aGlzIGxpc3QgY29tcG9uZW50LlxuICAgICAgLy8gU3VwcG9ydCB0d28gZm9ybWF0cyBmb3IgbGlzdCBkYXRhOlxuICAgICAgLy8gLSBBcnJheTogYFsuLi5dYFxuICAgICAgLy8gLSBPYmplY3Q6IGB7IHJlc3VsdHM6IFsuLi5dLCB0b3RhbCB9YCwgc2VlIGB1bndyYXBMaXN0RGF0YSgpYFxuICAgICAgaWYgKFxuICAgICAgICAhZGF0YSB8fFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJiBpc0FycmF5KGRhdGEpIHx8XG4gICAgICAgIHRoaXMuaXNPYmplY3RTb3VyY2UgJiYgaXNPYmplY3QoZGF0YSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLnZhbHVlID0gZGF0YVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpKSB7XG4gICAgICAgIC8vIFRoZSBmb3JtYXQgZGlkbid0IG1hdGNoLCBzZWUgaWYgd2UgcmVjZWl2ZWQgYSBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyBvYmplY3QsIGluIHdoaWNoIGNhc2UgYHRoaXMudmFsdWVgIHdhcyBhbHJlYWR5IHNldCBieVxuICAgICAgICAvLyBgdW53cmFwTGlzdERhdGEoKWAgYW5kIHdlJ3JlIGRvbmUgbm93LlxuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkYXRhKSAmJiB0aGlzLmlzSW5WaWV3KSB7XG4gICAgICAgIC8vIFRoZSBjb250cm9sbGVyIGlzIHNlbmRpbmcgZGF0YSBmb3IgYSBmdWxsIG11bHRpLWNvbXBvbmVudCB2aWV3LFxuICAgICAgICAvLyBpbmNsdWRpbmcgdGhlIG5lc3RlZCBsaXN0IGRhdGEuXG4gICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXREYXRhKGRhdGEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVud3JhcExpc3REYXRhKGRhdGEpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2UgJiZcbiAgICAgICAgaXNPYmplY3QoZGF0YSkgJiZcbiAgICAgICAgaXNOdW1iZXIoZGF0YS50b3RhbCkgJiZcbiAgICAgICAgaXNBcnJheShkYXRhLnJlc3VsdHMpXG4gICAgICApIHtcbiAgICAgICAgLy8gSWYgQGRpdG9qcy9zZXJ2ZXIgc2VuZHMgZGF0YSBpbiB0aGUgZm9ybSBvZiBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyByZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIHJlc3VsdCwgYnV0IHJlbWVtYmVyIHRoZSB0b3RhbCBpbiB0aGUgc3RvcmUuXG4gICAgICAgIHRoaXMudG90YWwgPSBkYXRhLnRvdGFsXG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhLnJlc3VsdHNcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNyZWF0ZURhdGEoc2NoZW1hLCB0eXBlKVxuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gaXRlbVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YS5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLm9wZW5TY2hlbWFDb21wb25lbnQoLTEpKVxuICAgICAgfVxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICByZXR1cm4gaXRlbVxuICAgIH0sXG5cbiAgICByZW1vdmVJdGVtKGl0ZW0pIHtcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgIHRoaXMub2JqZWN0RGF0YSA9IG51bGxcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICAgIGNvbnN0IGluZGV4ID0gbGlzdERhdGEgJiYgbGlzdERhdGEuaW5kZXhPZihpdGVtKVxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGxpc3REYXRhLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWxldGVJdGVtKGl0ZW0sIGluZGV4KSB7XG4gICAgICBjb25zdCBsYWJlbCA9IGl0ZW0gJiYgdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zY2hlbWEsIGl0ZW0sIHtcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGV4dGVuZGVkOiB0cnVlXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBub3RpZnkgPSAoKSA9PiB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6IHRoaXMuaXNUcmFuc2llbnQgPyAnaW5mbycgOiAnc3VjY2VzcycsXG4gICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgYCR7bGFiZWx9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYCxcbiAgICAgICAgICB0aGlzLnRyYW5zaWVudE5vdGVcbiAgICAgICAgXVxuICAgICAgfSlcblxuICAgICAgaWYgKGl0ZW0gJiYgd2luZG93LmNvbmZpcm0oXG4gICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLmRlbGV0ZX0gJHtsYWJlbH0/YClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtKVxuICAgICAgICAgIG5vdGlmeSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgaXRlbUlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIGl0ZW0pXG4gICAgICAgICAgY29uc3QgcmVzb3VyY2UgPSBnZXRNZW1iZXJSZXNvdXJjZShpdGVtSWQsIHRoaXMucmVzb3VyY2UpXG4gICAgICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdkZWxldGUnLCByZXNvdXJjZSB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtKVxuICAgICAgICAgICAgICAgIG5vdGlmeSgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5yZWxvYWREYXRhKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFNjaGVtYUNvbXBvbmVudChpbmRleCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IGxlbmd0aCB9ID0gc2NoZW1hQ29tcG9uZW50c1xuICAgICAgcmV0dXJuIHNjaGVtYUNvbXBvbmVudHNbKChpbmRleCAlIGxlbmd0aCkgKyBsZW5ndGgpICUgbGVuZ3RoXVxuICAgIH0sXG5cbiAgICBvcGVuU2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCBzY2hlbWFDb21wb25lbnQgPSB0aGlzLmdldFNjaGVtYUNvbXBvbmVudChpbmRleClcbiAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGVUb0NvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSkge1xuICAgICAgaWYgKHRoaXMuY29sbGFwc2libGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBkYXRhUGF0aC5zdGFydHNXaXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICAgICAgPyB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgICAgPyBwYXJzZURhdGFQYXRoKGRhdGFQYXRoLnNsaWNlKHRoaXMuZGF0YVBhdGgubGVuZ3RoICsgMSkpWzBdID8/IG51bGxcbiAgICAgICAgICAgIDogMFxuICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoaW5kZXggIT09IG51bGwgJiYgaXNOdW1iZXIoK2luZGV4KSkge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KCtpbmRleClcbiAgICAgICAgICBpZiAoc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb25zdCB7IG9wZW5lZCB9ID0gc2NoZW1hQ29tcG9uZW50XG4gICAgICAgICAgICBpZiAoIW9wZW5lZCkge1xuICAgICAgICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLiRuZXh0VGljaygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gc2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudHMubGVuZ3RoID4gMCAmJiAob25Db21wbGV0ZT8uKGNvbXBvbmVudHMpID8/IHRydWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gb3BlbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvUm91dGVDb21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpXG4gICAgfSxcblxuICAgIG5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbE9uQ29tcGxldGUgPSAoKSA9PiB7XG4gICAgICAgICAgLy8gUmV0cmlldmUgdGhlIGxhc3Qgcm91dGUgY29tcG9uZW50LCB3aGljaCB3aWxsIGJlIHRoZSBjb21wb25lbnQgdGhhdFxuICAgICAgICAgIC8vIHdlIGp1c3QgbmF2aWdhdGVkIHRvLCBhbmQgcGFzcyBpdCBvbiB0byBgb25Db21wbGV0ZSgpYFxuICAgICAgICAgIGNvbnN0IHsgcm91dGVDb21wb25lbnRzIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgICAgICAgY29uc3Qgcm91dGVDb21wb25lbnQgPSByb3V0ZUNvbXBvbmVudHNbcm91dGVDb21wb25lbnRzLmxlbmd0aCAtIDFdXG4gICAgICAgICAgcmVzb2x2ZShvbkNvbXBsZXRlPy4oW3JvdXRlQ29tcG9uZW50XSkgPz8gdHJ1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGFQYXRoUGFydHMgPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSByb3V0ZSB0aGF0IGNhbiBzZXJ2ZSBwYXJ0IG9mIHRoZSBnaXZlbiBkYXRhUGF0aCxcbiAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgd2hpbGUgKGRhdGFQYXRoUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLnJvdXRlQ29tcG9uZW50LmdldENoaWxkUGF0aChcbiAgICAgICAgICAgIHRoaXMuYXBpLm5vcm1hbGl6ZVBhdGgobm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGhQYXJ0cykpXG4gICAgICAgICAgKVxuICAgICAgICAgIC8vIFNlZSBpZiB0aGVyZSBhY3R1YWxseSBpcyBhIHJvdXRlIGZvciB0aGlzIHN1Yi1jb21wb25lbnQ6XG4gICAgICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZXIubWF0Y2gocGF0aClcbiAgICAgICAgICBpZiAobWF0Y2hlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiRyb3V0ZS5wYXRoID09PSBwYXRoKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBhbHJlYWR5IHRoZXJlLCBzbyBqdXN0IGNhbGwgYG9uQ29tcGxldGUoKWA6XG4gICAgICAgICAgICAgIGNhbGxPbkNvbXBsZXRlKClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgY29tcG9uZW50J3MgcGF0aCwgdGhlbiBjYWxsIGBvbkNvbXBsZXRlKClgXzpcbiAgICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goXG4gICAgICAgICAgICAgICAgeyBwYXRoIH0sXG4gICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIGxhc3Qgcm91dGUgY29tcG9uZW50IHRvIGJlIG1vdW50ZWQgaW4gdGhlIG5leHRcbiAgICAgICAgICAgICAgICAvLyB0aWNrIGJlZm9yZSBjYWxsaW5nIGBvbkNvbXBsZXRlKClgXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soY2FsbE9uQ29tcGxldGUpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBLZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgfSlcbiAgICB9XG4gIH0sIC8vIGVuZCBvZiBgbWV0aG9kc2BcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgIG5lc3RlZCA9IGZhbHNlLCBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKVxuICAgIGNvbnN0IGlubGluZWQgPSBpc0lubGluZWQoc2NoZW1hKVxuICAgIGlmIChpbmxpbmVkICYmIHNjaGVtYS5yZXNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnTGlzdHMgd2l0aCBuZXN0ZWQgZm9ybXMgY2Fubm90IGxvYWQgZGF0YSBmcm9tIHRoZWlyIG93biByZXNvdXJjZXMnXG4gICAgICApXG4gICAgfVxuICAgIC8vIFVzZSBkaWZmZXJlbnRseSBuYW1lZCB1cmwgcGFyYW1ldGVycyBvbiBlYWNoIG5lc3RlZCBsZXZlbCBmb3IgaWQgYXNcbiAgICAvLyBvdGhlcndpc2UgdGhleSB3b3VsZCBjbGFzaCBhbmQgb3ZlcnJpZGUgZWFjaCBvdGhlciBpbnNpZGUgJHJvdXRlLnBhcmFtc1xuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzNDVcbiAgICBjb25zdCBwYXJhbSA9IGBpZCR7bGV2ZWwgKyAxfWBcbiAgICBjb25zdCBtZXRhID0ge1xuICAgICAgYXBpLFxuICAgICAgc2NoZW1hXG4gICAgfVxuICAgIGNvbnN0IGZvcm1NZXRhID0ge1xuICAgICAgLi4ubWV0YSxcbiAgICAgIC8vIFdoZW4gY2hpbGRyZW4gYXJlIGZsYXR0ZW5lZCAoZS5nLiB0cmVlLWxpc3RzKSwgaW5jbHVkZSB0aGUgYGZsYXR0ZW5gXG4gICAgICAvLyBzZXR0aW5nIGFsc28sIGZvciBmbGF0dGVuaW5nIGJlbG93LlxuICAgICAgZmxhdHRlbixcbiAgICAgIG5lc3RlZCxcbiAgICAgIHBhcmFtXG4gICAgfVxuICAgIGNvbnN0IGNoaWxkUm91dGVzID0gYXdhaXQgcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbClcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgYXdhaXQgcHJvY2VzcyhjaGlsZFJvdXRlcywgbGV2ZWwgKyAxKVxuICAgIH1cbiAgICAvLyBJbmxpbmVkIGZvcm1zIGRvbid0IG5lZWQgdG8gYWN0dWFsbHkgYWRkIHJvdXRlcy5cbiAgICBpZiAoaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmICFpbmxpbmVkKSB7XG4gICAgICBjb25zdCBnZXRQYXRoV2l0aFBhcmFtID0gKHBhdGgsIHBhcmFtKSA9PiBwYXJhbVxuICAgICAgICA/IHBhdGhcbiAgICAgICAgICA/IGAke3BhdGh9Lzoke3BhcmFtfWBcbiAgICAgICAgICA6IGA6JHtwYXJhbX1gXG4gICAgICAgIDogcGF0aFxuXG4gICAgICAvLyBMaXN0cyBpbiBzaW5nbGUtY29tcG9uZW50LXZpZXdzIChsZXZlbCA9PT0gMCkgdXNlIHRoZWlyIHZpZXcncyBwYXRoLFxuICAgICAgLy8gd2hpbGUgYWxsIG90aGVycyBuZWVkIHRoZWlyIHBhdGggcHJlZml4ZWQgd2l0aCB0aGUgcGFyZW50J3MgcGF0aDpcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBsZXZlbCA9PT0gMCA/ICcnIDogc2NoZW1hLnBhdGhcbiAgICAgIGNvbnN0IGZvcm1Sb3V0ZSA9IHtcbiAgICAgICAgLy8gT2JqZWN0IHNvdXJjZXMgZG9uJ3QgbmVlZCBpZCBwYXJhbXMgaW4gdGhlaXIgZm9ybSBwYXRocywgYXMgdGhleVxuICAgICAgICAvLyBkaXJlY3RseSBlZGl0IG9uZSBvYmplY3QuXG4gICAgICAgIHBhdGg6IGdldFBhdGhXaXRoUGFyYW0oc291cmNlUGF0aCwgaXNMaXN0U291cmNlKHNjaGVtYSkgJiYgcGFyYW0pLFxuICAgICAgICBjb21wb25lbnQ6IERpdG9Db21wb25lbnQuY29tcG9uZW50KFxuICAgICAgICAgIG5lc3RlZCA/ICdkaXRvLWZvcm0tbmVzdGVkJyA6ICdkaXRvLWZvcm0nXG4gICAgICAgICksXG4gICAgICAgIG1ldGE6IGZvcm1NZXRhXG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3RTb3VyY2Uoc2NoZW1hKSkge1xuICAgICAgICAvLyBBbHNvIGFkZCBhIHBhcmFtIHJvdXRlLCBzaW1wbHkgdG8gaGFuZGxlICcvY3JlYXRlJyBsaW5rcyB0aGUgc2FtZVxuICAgICAgICAvLyB3YXkgdGhhdCBsaXN0cyBkbywgd2hlcmUgaXQgb3ZlcmxhcHMgd2l0aCA6aWQgZm9yIGl0ZW0gaWRzLlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgLi4uZm9ybVJvdXRlLFxuICAgICAgICAgIHBhdGg6IGdldFBhdGhXaXRoUGFyYW0oc291cmNlUGF0aCwgcGFyYW0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc291cmNlUGF0aCkge1xuICAgICAgICAvLyBKdXN0IHJlZGlyZWN0IGJhY2sgdG8gdGhlIHBhcmVudCB3aGVuIGEgbmVzdGVkIHNvdXJjZSByb3V0ZSBpcyBoaXQuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICBwYXRoOiBzb3VyY2VQYXRoLFxuICAgICAgICAgIHJlZGlyZWN0OiAnLicsXG4gICAgICAgICAgbWV0YVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgLy8gUGFydGl0aW9uIGNoaWxkUm91dGVzIGludG8gdGhvc2UgdGhhdCBuZWVkIGZsYXR0ZW5pbmcgKGUuZy4gdHJlZS1saXN0cylcbiAgICAgIC8vIGFuZCB0aG9zZSB0aGF0IGRvbid0LCBhbmQgcHJvY2VzcyBlYWNoIGdyb3VwIHNlcGFyYXRlbHkgYWZ0ZXIuXG4gICAgICBjb25zdCBbZmxhdFJvdXRlcywgc3ViUm91dGVzXSA9IGNoaWxkUm91dGVzLnJlZHVjZShcbiAgICAgICAgKHJlcywgcm91dGUpID0+IHtcbiAgICAgICAgICByZXNbcm91dGUubWV0YS5mbGF0dGVuID8gMCA6IDFdLnB1c2gocm91dGUpXG4gICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICB9LFxuICAgICAgICBbW10sIFtdXVxuICAgICAgKVxuICAgICAgaWYgKHN1YlJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9ybVJvdXRlLmNoaWxkcmVuID0gc3ViUm91dGVzXG4gICAgICB9XG4gICAgICByb3V0ZXMucHVzaChmb3JtUm91dGUpXG4gICAgICAvLyBBZGQgdGhlIHByZWZpeGVkIGZvcm1Sb3V0ZXMgd2l0aCB0aGVpciBjaGlsZHJlbiBmb3IgbmVzdGVkIGxpc3RzLlxuICAgICAgaWYgKGZsYXRSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGRSb3V0ZSBvZiBmbGF0Um91dGVzKSB7XG4gICAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgICAgLi4uKGNoaWxkUm91dGUucmVkaXJlY3QgPyBjaGlsZFJvdXRlIDogZm9ybVJvdXRlKSxcbiAgICAgICAgICAgIHBhdGg6IGAke2Zvcm1Sb3V0ZS5wYXRofS8ke2NoaWxkUm91dGUucGF0aH1gLFxuICAgICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgICAuLi5jaGlsZFJvdXRlLm1ldGEsXG4gICAgICAgICAgICAgIGZsYXR0ZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpIHtcbiAgICBncmFwaC5hZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSlcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSwgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZmlsdGVyQ29tcG9uZW50cyA9IHtcbiAgdGV4dChmaWx0ZXIpIHtcbiAgICBjb25zdCBvcHRpb25zID0gW1xuICAgICAge1xuICAgICAgICBsYWJlbDogJ2NvbnRhaW5zJyxcbiAgICAgICAgdmFsdWU6ICdjb250YWlucydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnZXF1YWxzJyxcbiAgICAgICAgdmFsdWU6ICdlcXVhbHMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ3N0YXJ0cyB3aXRoJyxcbiAgICAgICAgdmFsdWU6ICdzdGFydHMtd2l0aCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnZW5kcyB3aXRoJyxcbiAgICAgICAgdmFsdWU6ICdlbmRzLXdpdGgnXG4gICAgICB9XG4gICAgXVxuICAgIHJldHVybiB7XG4gICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yc1xuICAgICAgICA/IHtcbiAgICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgICAgICBvcHRpb25zOlxuICAgICAgICAgICAgaXNBcnJheShmaWx0ZXIub3BlcmF0b3JzKVxuICAgICAgICAgICAgICA/IG9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIG9wdGlvbiA9PiBmaWx0ZXIub3BlcmF0b3JzLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IG9wdGlvbnMsXG4gICAgICAgICAgd2lkdGg6ICc0MCUnXG4gICAgICAgIH1cbiAgICAgICAgOiBudWxsLFxuICAgICAgdGV4dDoge1xuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIHdpZHRoOiBmaWx0ZXIub3BlcmF0b3JzID8gJzYwJScgOiAnZmlsbCdcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgJ2RhdGUtcmFuZ2UnKCkge1xuICAgIC8vIFVzZSBzaG9ydGVyIGRhdGUgZm9ybWF0IGluIGRhdGUtcmFuZ2UgZmlsdGVyczpcbiAgICBjb25zdCBkYXRlRm9ybWF0ID0ge1xuICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgeWVhcjogJ251bWVyaWMnXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIHR5cGU6ICdkYXRldGltZScsXG4gICAgICAgIHdpZHRoOiAnNTAlJyxcbiAgICAgICAgZGF0ZUZvcm1hdFxuICAgICAgfSxcbiAgICAgIHRvOiB7XG4gICAgICAgIHR5cGU6ICdkYXRldGltZScsXG4gICAgICAgIHdpZHRoOiAnNTAlJyxcbiAgICAgICAgZGF0ZUZvcm1hdFxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsdGVyc1BhbmVsKGZpbHRlcnMsIGRhdGFQYXRoLCBwcm94eSkge1xuICBjb25zdCBwYW5lbCA9IHtcbiAgICBsYWJlbDogJ0ZpbHRlcnMnLFxuICAgIG5hbWU6ICckZmlsdGVycycsXG4gICAgdGFyZ2V0OiBkYXRhUGF0aCxcbiAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAvLyBOT1RFOiBPbiBwYW5lbHMsIHRoZSBkYXRhKCkgY2FsbGJhY2sgZG9lcyBzb21ldGhpbmcgZWxzZSB0aGFuIG9uIG5vcm1hbFxuICAgIC8vIHNjaGVtYTogSXQgcHJvZHVjZXMgdGhlIGBkYXRhYCBwcm9wZXJ0eSB0byBiZSBwYXNzZWQgdG8gdGhlIHBhbmVsJ3NcbiAgICAvLyBzY2hlbWEsIG5vdCB0aGUgZGF0YSB0byBiZSB1c2VkIGZvciB0aGUgcGFuZWwgY29tcG9uZW50IGRpcmVjdGx5LlxuICAgIGRhdGEoKSB7XG4gICAgICByZXR1cm4gcGFyc2VGaWx0ZXJzRGF0YShcbiAgICAgICAgcGFuZWwsXG4gICAgICAgIHByb3h5LnF1ZXJ5XG4gICAgICApXG4gICAgfSxcbiAgICBjb21wb25lbnRzOiBnZXRGaWx0ZXJzQ29tcG9uZW50cyhmaWx0ZXJzKSxcbiAgICBidXR0b25zOiB7XG4gICAgICBjbGVhcjoge1xuICAgICAgICB0ZXh0OiAnQ2xlYXInLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBjbGljayh7IHNjaGVtYUNvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICBzY2hlbWFDb21wb25lbnQucmVzZXREYXRhKClcbiAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5hcHBseUZpbHRlcnMoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgZmlsdGVyOiB7XG4gICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICB0ZXh0OiAnRmlsdGVyJyxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgY2xpY2soeyBzY2hlbWFDb21wb25lbnQgfSkge1xuICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50LmFwcGx5RmlsdGVycygpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICBhcHBseUZpbHRlcnMoKSB7XG4gICAgICAgIHByb3h5LnF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnByb3h5LnF1ZXJ5LFxuICAgICAgICAgIGZpbHRlcjogZm9ybWF0RmlsdGVyc0RhdGEodGhpcy5zY2hlbWEsIHRoaXMuZGF0YSksXG4gICAgICAgICAgLy8gQ2xlYXIgcGFnaW5hdGlvbiB3aGVuIGFwcGx5aW5nIG9yIGNsZWFyaW5nIGZpbHRlcnM6XG4gICAgICAgICAgcGFnZTogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhbmVsXG59XG5cbmZ1bmN0aW9uIGdldEZpbHRlcnNDb21wb25lbnRzKGZpbHRlcnMpIHtcbiAgY29uc3QgY29tcHMgPSB7fVxuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBPYmplY3QudmFsdWVzKGZpbHRlcnMgfHwge30pKSB7XG4gICAgLy8gU3VwcG9ydCBib3RoIGN1c3RvbSBmb3JtcyBhbmQgZGVmYXVsdCBmaWx0ZXIgY29tcG9uZW50cywgdGhyb3VnaCB0aGVcbiAgICAvLyBgZmlsdGVyQ29tcG9uZW50c2AgcmVnaXN0cnkuIEV2ZW4gZm9yIGRlZmF1bHQgZmlsdGVycywgc3RpbGwgdXNlIHRoZVxuICAgIC8vIHByb3BlcnRpZXMgaW4gYGZpbHRlcmAgYXMgdGhlIGJhc2UgZm9yIGBmb3JtYCwgc28gdGhpbmdzIGxpa2UgYGxhYmVsYFxuICAgIC8vIGNhbiBiZSBjaGFuZ2VkIG9uIHRoZSByZXN1bHRpbmcgZm9ybS5cbiAgICBjb25zdCB7IGZpbHRlcjogdHlwZSwgLi4uZm9ybSB9ID0gZmlsdGVyXG4gICAgY29uc3QgY29tcG9uZW50cyA9IHR5cGVcbiAgICAgID8gZmlsdGVyQ29tcG9uZW50c1t0eXBlXT8uKGZpbHRlcilcbiAgICAgIDogZmlsdGVyLmNvbXBvbmVudHNcbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9ybS5jb21wb25lbnRzID0ge31cbiAgICAgIC8vIENvbnZlcnQgbGFiZWxzIHRvIHBsYWNlaG9sZGVyczpcbiAgICAgIGZvciAoY29uc3QgW2tleSwgY29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgY29uc3QgbGFiZWwgPSBjb21wb25lbnQubGFiZWwgfHwgbGFiZWxpemUoY29tcG9uZW50Lm5hbWUgfHwga2V5KVxuICAgICAgICAgIGZvcm0uY29tcG9uZW50c1trZXldID0ge1xuICAgICAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICAgICAgbGFiZWw6IGZhbHNlLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGxhYmVsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb21wc1tmaWx0ZXIubmFtZV0gPSB7XG4gICAgICAgIGxhYmVsOiBmb3JtLmxhYmVsLFxuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gKHt9KSxcbiAgICAgICAgZm9ybSxcbiAgICAgICAgaW5saW5lZDogdHJ1ZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGZpbHRlciAnJHtmaWx0ZXIubmFtZX0nOiBVbmtub3duIGZpbHRlciB0eXBlICcke3R5cGV9Jy5gXG4gICAgICApXG4gICAgfVxuICB9XG4gIHJldHVybiBjb21wc1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSkge1xuICBjb25zdCBjb21wb25lbnQgPSBzY2hlbWEuY29tcG9uZW50c1tuYW1lXVxuICByZXR1cm4gY29tcG9uZW50Py5mb3JtPy5jb21wb25lbnRzXG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZpbHRlcnNEYXRhKHNjaGVtYSwgZGF0YSkge1xuICBjb25zdCBmaWx0ZXJzID0gW11cbiAgZm9yIChjb25zdCBuYW1lIGluIGRhdGEpIHtcbiAgICBjb25zdCBlbnRyeSA9IGRhdGFbbmFtZV1cbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIC8vIE1hcCBjb21wb25lbnRzIHNlcXVlbmNlIHRvIGFyZ3VtZW50czpcbiAgICAgIGNvbnN0IGFyZ3MgPSBPYmplY3Qua2V5cyhnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSkpLm1hcChcbiAgICAgICAga2V5ID0+IGVudHJ5W2tleV0gPz8gbnVsbFxuICAgICAgKVxuICAgICAgLy8gT25seSBhcHBseSBmaWx0ZXIgaWYgdGhlcmUgYXJlIHNvbWUgYXJndW1lbnRzIHRoYXQgYXJlbid0IG51bGw6XG4gICAgICBpZiAoYXJncy5zb21lKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKSkge1xuICAgICAgICBmaWx0ZXJzLnB1c2goYCR7bmFtZX06JHthcmdzLm1hcChKU09OLnN0cmluZ2lmeSkuam9pbignLCcpfWApXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmaWx0ZXJzLmxlbmd0aCA/IGZpbHRlcnMgOiB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gcGFyc2VGaWx0ZXJzRGF0YShzY2hlbWEsIHF1ZXJ5KSB7XG4gIGNvbnN0IGZpbHRlcnMgPSB7fVxuICAvLyBTYW1lIGFzIEBkaXRvanMvc2VydmVyJ3MgUXVlcnlQYXJhbWV0ZXJzLmZpbHRlcjogVHJhbnNsYXRlIHRoZSBzdHJpbmcgZGF0YVxuICAvLyBmcm9tICRyb3V0ZS5xdWVyeSBiYWNrIHRvIHBhcmFtIGxpc3RzIHBlciBmaWx0ZXI6XG4gIGlmIChxdWVyeSkge1xuICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGFzQXJyYXkocXVlcnkuZmlsdGVyKSkge1xuICAgICAgY29uc3QgWywgbmFtZSwganNvbl0gPSBmaWx0ZXIubWF0Y2goL14oXFx3Kyk6KC4qKSQvKVxuICAgICAgdHJ5IHtcbiAgICAgICAgZmlsdGVyc1tuYW1lXSA9IGFzQXJyYXkoSlNPTi5wYXJzZShgWyR7anNvbn1dYCkpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCBmaWx0ZXJzRGF0YSA9IHt9XG4gIGZvciAoY29uc3QgbmFtZSBpbiBzY2hlbWEuY29tcG9uZW50cykge1xuICAgIGNvbnN0IGRhdGEgPSB7fVxuICAgIC8vIElmIHdlIGhhdmUgcmV0cmlldmVkIHBhcmFtcyBmcm9tIHRoZSBxdWVyeSwgZmV0Y2ggdGhlIGFzc29jaWF0ZWRcbiAgICAvLyBmb3JtIGNvbXBvbmVudHMgc28gd2UgY2FuIG1hcCB0aGUgdmFsdWVzIGJhY2sgdG8gb2JqZWN0IGtleXM6XG4gICAgY29uc3QgYXJncyA9IGZpbHRlcnNbbmFtZV1cbiAgICBpZiAoYXJncykge1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKVxuICAgICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgICAgbGV0IGluZGV4ID0gMFxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgZGF0YVtrZXldID0gYXJnc1tpbmRleCsrXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZpbHRlcnNEYXRhW25hbWVdID0gZGF0YVxuICB9XG4gIHJldHVybiBmaWx0ZXJzRGF0YVxufVxuIiwiXG4uZGl0by1saXN0KFxuICB2LWlmPVwiaXNSZWFkeVwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwic2NoZW1hLmNsYXNzXCJcbiAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbilcbiAgLmRpdG8tbmF2aWdhdGlvblxuICAgIGRpdG8tc2NvcGVzKFxuICAgICAgdi1pZj1cInNjb3Blc1wiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgICApXG4gICAgLy8gV2hlbiB0aGVyZSdzIG9ubHkgcGFnaW5hdGlvbiB3aXRob3V0IHNjb3Blcywgd2UgbmVlZCBhIGdvb2Qgb2wnIHNwYWNlclxuICAgIC8vIGRpdiwgZm9yIHRoZSBsYXlvdXQgbm90IHRvIGJyZWFrLi4uXG4gICAgLmRpdG8tc3BhY2VyKFxuICAgICAgdi1lbHNlLWlmPVwicGFnaW5hdGVcIlxuICAgIClcbiAgICBkaXRvLXBhZ2luYXRpb24oXG4gICAgICB2LWlmPVwicGFnaW5hdGVcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmxpbWl0PVwicGFnaW5hdGVcIlxuICAgICAgOnRvdGFsPVwidG90YWwgfHwgMFwiXG4gICAgKVxuICB0YWJsZS5kaXRvLXRhYmxlKFxuICAgIDpjbGFzcz1ge1xuICAgICAgJ2RpdG8tdGFibGUtc2VwYXJhdG9ycyc6IGlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWxhcmdlci1wYWRkaW5nJzogaGFzRWRpdEJ1dHRvbnMgJiYgIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWFsdGVybmF0ZS1jb2xvcnMnOiAhaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtZXZlbi1jb3VudCc6IGhhc0V2ZW5Db3VudFxuICAgIH1gXG4gIClcbiAgICBkaXRvLXRhYmxlLWhlYWQoXG4gICAgICB2LWlmPVwiY29sdW1uc1wiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6Y29sdW1ucz1cImNvbHVtbnNcIlxuICAgICAgOmhhc0VkaXRCdXR0b25zPVwiaGFzRWRpdEJ1dHRvbnNcIlxuICAgIClcbiAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdERhdGEsIHBhZ2luYXRpb25SYW5nZSlcIlxuICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgQGVuZD1cIm9uRW5kRHJhZ1wiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwiaXRlbSwgaW5kZXggaW4gbGlzdERhdGFcIlxuICAgICAgICA6a2V5PVwiZ2V0SXRlbVVpZChzY2hlbWEsIGl0ZW0pXCJcbiAgICAgICAgOmlkPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUodi1pZj1cImNvbHVtbnNcIilcbiAgICAgICAgICBkaXRvLXRhYmxlLWNlbGwoXG4gICAgICAgICAgICB2LWZvcj1cImNvbHVtbiBpbiBjb2x1bW5zXCJcbiAgICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgICAgICA6a2V5PVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgOmNsYXNzPVwiZ2V0Q2VsbENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgOmNlbGw9XCJjb2x1bW5cIlxuICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICApXG4gICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICB0ZFxuICAgICAgICAgICAgZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICAgICAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgICAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXgsIGFzT2JqZWN0OiB0cnVlIH0pXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29tcG9uZW50KFxuICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoaXRlbSwgaW5kZXgpKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCB9KVwiXG4gICAgICAgICAgICApXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgdi1pZj1cImhhc0NlbGxFZGl0QnV0dG9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShpbmRleClcIlxuICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICApXG4gICAgLy8gUmVuZGVyIGNyZWF0ZSBidXR0b25zIGluc2lkZSB0YWJsZSB3aGVuIG5vdCBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgICB0Zm9vdChcbiAgICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiAhc2luZ2xlXCJcbiAgICApXG4gICAgICB0clxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgIDpjb2xzcGFuPVwibnVtQ29sdW1uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICApXG4gIC8vIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBvdXRzaWRlIHRhYmxlIHdoZW4gaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gIGRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1tYWluLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgc2luZ2xlXCJcbiAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1saXN0KFxuICAgIHYtaWY9XCJpc1JlYWR5XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwic2NoZW1hLmNsYXNzXCJcbiAgICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuICApXG4gICAgLmRpdG8tbmF2aWdhdGlvblxuICAgICAgZGl0by1zY29wZXMoXG4gICAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICAgICAgKVxuICAgICAgLy8gV2hlbiB0aGVyZSdzIG9ubHkgcGFnaW5hdGlvbiB3aXRob3V0IHNjb3Blcywgd2UgbmVlZCBhIGdvb2Qgb2wnIHNwYWNlclxuICAgICAgLy8gZGl2LCBmb3IgdGhlIGxheW91dCBub3QgdG8gYnJlYWsuLi5cbiAgICAgIC5kaXRvLXNwYWNlcihcbiAgICAgICAgdi1lbHNlLWlmPVwicGFnaW5hdGVcIlxuICAgICAgKVxuICAgICAgZGl0by1wYWdpbmF0aW9uKFxuICAgICAgICB2LWlmPVwicGFnaW5hdGVcIlxuICAgICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICAgIDpsaW1pdD1cInBhZ2luYXRlXCJcbiAgICAgICAgOnRvdGFsPVwidG90YWwgfHwgMFwiXG4gICAgICApXG4gICAgdGFibGUuZGl0by10YWJsZShcbiAgICAgIDpjbGFzcz1ge1xuICAgICAgICAnZGl0by10YWJsZS1zZXBhcmF0b3JzJzogaXNJbmxpbmVkLFxuICAgICAgICAnZGl0by10YWJsZS1sYXJnZXItcGFkZGluZyc6IGhhc0VkaXRCdXR0b25zICYmICFpc0lubGluZWQsXG4gICAgICAgICdkaXRvLXRhYmxlLWFsdGVybmF0ZS1jb2xvcnMnOiAhaXNJbmxpbmVkLFxuICAgICAgICAnZGl0by10YWJsZS1ldmVuLWNvdW50JzogaGFzRXZlbkNvdW50XG4gICAgICB9YFxuICAgIClcbiAgICAgIGRpdG8tdGFibGUtaGVhZChcbiAgICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICAgIDpjb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICAgIDpoYXNFZGl0QnV0dG9ucz1cImhhc0VkaXRCdXR0b25zXCJcbiAgICAgIClcbiAgICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0RGF0YSwgcGFnaW5hdGlvblJhbmdlKVwiXG4gICAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgICAgQGVuZD1cIm9uRW5kRHJhZ1wiXG4gICAgICApXG4gICAgICAgIHRyKFxuICAgICAgICAgIHYtZm9yPVwiaXRlbSwgaW5kZXggaW4gbGlzdERhdGFcIlxuICAgICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKHNjaGVtYSwgaXRlbSlcIlxuICAgICAgICAgIDppZD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiY29sdW1uc1wiKVxuICAgICAgICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICAgICAgICB2LWZvcj1cImNvbHVtbiBpbiBjb2x1bW5zXCJcbiAgICAgICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmtleT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0Q2VsbENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgICA6Y2VsbD1cImNvbHVtblwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgICAgdGRcbiAgICAgICAgICAgICAgZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4LCBhc09iamVjdDogdHJ1ZSB9KVwiXG4gICAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbXBvbmVudChcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSlcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCB9KVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgdi1pZj1cImhhc0NlbGxFZGl0QnV0dG9uc1wiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgIC8vIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBpbnNpZGUgdGFibGUgd2hlbiBub3QgaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgICB0Zm9vdChcbiAgICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmICFzaW5nbGVcIlxuICAgICAgKVxuICAgICAgICB0clxuICAgICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICA6Y29sc3Bhbj1cIm51bUNvbHVtbnNcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgICAgICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgIClcbiAgICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgb3V0c2lkZSB0YWJsZSB3aGVuIGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgIGRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1tYWluLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiBzaW5nbGVcIlxuICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1saXN0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLmRpdG8tbmF2aWdhdGlvblxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgICBwYWRkaW5nLWJvdHRvbTogJGNvbnRlbnQtcGFkZGluZy1oYWxmXG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAgICY6ZW1wdHlcbiAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgLmRpdG8tc2NvcGVzLFxuICAgICAgLmRpdG8tcGFnaW5hdGlvblxuICAgICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICAgIGZsZXg6IDAgMSBhdXRvXG4gICAgICAgIG1pbi13aWR0aDogMFxuICAgICYuZGl0by1zaW5nbGVcbiAgICAgIC8vIFNvIHRoYXQgbGlzdCBidXR0b25zIGNhbiBiZSBzdGlja3kgdG8gdGhlIGJvdHRvbTpcbiAgICAgIGRpc3BsYXk6IGdyaWRcbiAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnRcbiAgICAgIGhlaWdodDogMTAwJVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IE9yZGVyZWRNaXhpbiBmcm9tICcuLi9taXhpbnMvT3JkZXJlZE1peGluLmpzJ1xuaW1wb3J0IFZ1ZURyYWdnYWJsZSBmcm9tICd2dWVkcmFnZ2FibGUnXG5pbXBvcnQgeyBnZXROYW1lZFNjaGVtYXMsIGdldFZpZXdFZGl0UGF0aCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldEZpbHRlcnNQYW5lbCB9IGZyb20gJy4uL3V0aWxzL2ZpbHRlci5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IHBpY2tCeSwgZXF1YWxzLCBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGlzdCcsIHtcbiAgY29tcG9uZW50czogeyBWdWVEcmFnZ2FibGUgfSxcbiAgbWl4aW5zOiBbU291cmNlTWl4aW4sIE9yZGVyZWRNaXhpbl0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgLy8gTm8gbmVlZCBmb3IgdHJhbnNmb3JtYXRpb24gaGVyZS4gU2VlIFR5cGVUcmVlTGlzdCBmb3IgZGV0YWlscy5cbiAgICByZXR1cm4gdHlwZVxuICB9LFxuXG4gIGdldFBhbmVsU2NoZW1hKHNjaGVtYSwgZGF0YVBhdGgsIHNjaGVtYUNvbXBvbmVudCkge1xuICAgIGNvbnN0IHsgZmlsdGVycyB9ID0gc2NoZW1hXG4gICAgLy8gU2VlIGlmIHRoaXMgbGlzdCBjb21wb25lbnQgd2FudHMgdG8gZGlzcGxheSBhIGZpbHRlciBwYW5lbCwgYW5kIGlmIHNvLFxuICAgIC8vIGNyZWF0ZSB0aGUgcGFuZWwgc2NoZW1hIGZvciBpdCB0aHJvdWdoIGBnZXRGaWx0ZXJzUGFuZWwoKWAuXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgIC8vIEF0IHRoZSB0aW1lIG9mIHRoZSBjcmVhdGlvbiBvZiB0aGUgcGFuZWwgc2NoZW1hLCB0aGUgc2NoZW1hQ29tcG9uZW50IGlzXG4gICAgICAvLyBub3QgZmlsbGVkIHlldCwgc28gd2UgY2FuJ3QgZ2V0IHRoZSB0YXJnZXQgY29tcG9uZW50IChkYXRhUGF0aCkgcmlnaHRcbiAgICAgIC8vIGF3YXkuIFVzZSBhIHByb3h5IGFuZCBhIGdldHRlciBpbnN0ZWFkLCB0byBnZXQgYXJvdW5kIHRoaXM6XG4gICAgICBjb25zdCBnZXRMaXN0Q29tcG9uZW50ID0gKCkgPT4gc2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5RGF0YVBhdGgoXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICBjb21wb25lbnQgPT4gY29tcG9uZW50LnR5cGUgPT09ICdsaXN0J1xuICAgICAgKVxuXG4gICAgICByZXR1cm4gZ2V0RmlsdGVyc1BhbmVsKFxuICAgICAgICBnZXROYW1lZFNjaGVtYXMoZmlsdGVycyksXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICB7IC8vIENyZWF0ZSBhIHNpbXBsZSBwcm94eSB0byBnZXQgLyBzZXQgdGhlIHF1ZXJ5LCBzZWUgZ2V0RmlsdGVyc1BhbmVsKClcbiAgICAgICAgICBnZXQgcXVlcnkoKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdENvbXBvbmVudCgpPy5xdWVyeVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2V0IHF1ZXJ5KHF1ZXJ5KSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBnZXRMaXN0Q29tcG9uZW50KClcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIG91dCB1bmRlZmluZWQgdmFsdWVzIGZvciBjb21wYXJpbmcgd2l0aCBlcXVhbHMoKVxuICAgICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBvYmogPT4gcGlja0J5KG9iaiwgdmFsdWUgPT4gdmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgaWYgKCFlcXVhbHMoZmlsdGVyKHF1ZXJ5KSwgZmlsdGVyKGNvbXBvbmVudC5xdWVyeSkpKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LnF1ZXJ5ID0gcXVlcnlcbiAgICAgICAgICAgICAgICBjb21wb25lbnQubG9hZERhdGEoZmFsc2UpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBoYXNMaXN0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiAhIShcbiAgICAgICAgdGhpcy5idXR0b25TY2hlbWFzIHx8XG4gICAgICAgIHRoaXMuY3JlYXRhYmxlXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0VkaXRCdXR0b25zKCkge1xuICAgICAgY29uc3QgeyBsaXN0RGF0YSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGxpc3REYXRhLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICB0aGlzLmVkaXRhYmxlIHx8XG4gICAgICAgIHRoaXMuZGVsZXRhYmxlIHx8XG4gICAgICAgIHRoaXMuZHJhZ2dhYmxlXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0NlbGxFZGl0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0lubGluZWQgJiYgdGhpcy5oYXNFZGl0QnV0dG9uc1xuICAgIH0sXG5cbiAgICBoYXNFdmVuQ291bnQoKSB7XG4gICAgICByZXR1cm4gISh0aGlzLmxpc3REYXRhLmxlbmd0aCAlIDIpXG4gICAgfSxcblxuICAgIG51bUNvbHVtbnMoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAodGhpcy5jb2x1bW5zID8gT2JqZWN0LmtleXModGhpcy5jb2x1bW5zKS5sZW5ndGggOiAxKSArXG4gICAgICAgICh0aGlzLmhhc0NlbGxFZGl0QnV0dG9ucyA/IDEgOiAwKVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0RGF0YVBhdGgoaW5kZXgpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBpbmRleClcbiAgICB9LFxuXG4gICAgZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpIHtcbiAgICAgIGlmICh0aGlzLmVkaXRhYmxlKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBnZXRWaWV3RWRpdFBhdGgodGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dCkgfHwgdGhpcy5wYXRoXG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIGl0ZW0sIGluZGV4KVxuICAgICAgICByZXR1cm4gYCR7cGF0aH0vJHtpZH1gXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDZWxsQ2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gYGRpdG8tY2VsbC0ke2h5cGhlbmF0ZShjb2x1bW4ubmFtZSl9YFxuICAgIH0sXG5cbiAgICBnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgIGluZGV4LFxuICAgICAgICBkYXRhUGF0aDogdGhpcy5nZXREYXRhUGF0aChpbmRleClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRmlsdGVyRXJyb3JzKGVycm9ycykge1xuICAgICAgY29uc3QgZmlsdGVyc0RhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgJyRmaWx0ZXJzJylcbiAgICAgIGNvbnN0IHBhbmVsID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0UGFuZWxCeURhdGFQYXRoKGZpbHRlcnNEYXRhUGF0aClcbiAgICAgIGlmIChwYW5lbCkge1xuICAgICAgICBwYW5lbC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIHRydWUpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmRpdG8tbGFiZWwuZGl0by1sYWJlbC1jb21wb25lbnQoOmxhYmVsPVwidmFsdWVcIiA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZGl0by1sYWJlbC5kaXRvLWxhYmVsLWNvbXBvbmVudCg6bGFiZWw9XCJ2YWx1ZVwiIDpkYXRhUGF0aD1cImRhdGFQYXRoXCIpXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tbGFiZWwtY29tcG9uZW50XG4gICAgZGlzcGxheTogZmxleFxuICAgIGhlaWdodDogMmVtXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xhYmVsJywge1xuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlXG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLW1hcmt1cChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuKVxuICBlZGl0b3ItbWVudS1iYXIuZGl0by1tYXJrdXAtdG9vbGJhcig6ZWRpdG9yPVwiZWRpdG9yXCIpXG4gICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtdG9vbGJhcihcbiAgICAgIHYtaWY9XCJncm91cGVkQnV0dG9ucy5sZW5ndGggPiAwXCJcbiAgICApXG4gICAgICAuZGl0by1idXR0b24tZ3JvdXAoXG4gICAgICAgIHYtZm9yPVwiYnV0dG9ucyBpbiBncm91cGVkQnV0dG9uc1wiXG4gICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWZvcj1cInsgbmFtZSwgaWNvbiwgaXNBY3RpdmUsIG9uQ2xpY2sgfSBpbiBidXR0b25zXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIixcbiAgICAgICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICAgICAgKVxuICAgICAgICAgIGljb24oOm5hbWU9XCJpY29uXCIpXG4gIGVkaXRvci1jb250ZW50LmRpdG8tbWFya3VwLWVkaXRvcihcbiAgICByZWY9XCJlZGl0b3JcIlxuICAgIDplZGl0b3I9XCJlZGl0b3JcIlxuICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gIClcbiAgLmRpdG8tcmVzaXplKFxuICAgIHYtaWY9XCJyZXNpemFibGVcIlxuICAgIEBtb3VzZWRvd24uc3RvcC5wcmV2ZW50PVwib25EcmFnUmVzaXplXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tbWFya3VwKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgKVxuICAgIGVkaXRvci1tZW51LWJhci5kaXRvLW1hcmt1cC10b29sYmFyKDplZGl0b3I9XCJlZGl0b3JcIilcbiAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXRvb2xiYXIoXG4gICAgICAgIHYtaWY9XCJncm91cGVkQnV0dG9ucy5sZW5ndGggPiAwXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tYnV0dG9uLWdyb3VwKFxuICAgICAgICAgIHYtZm9yPVwiYnV0dG9ucyBpbiBncm91cGVkQnV0dG9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICB2LWZvcj1cInsgbmFtZSwgaWNvbiwgaXNBY3RpdmUsIG9uQ2xpY2sgfSBpbiBidXR0b25zXCJcbiAgICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiLFxuICAgICAgICAgICAgQGNsaWNrPVwib25DbGlja1wiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgaWNvbig6bmFtZT1cImljb25cIilcbiAgICBlZGl0b3ItY29udGVudC5kaXRvLW1hcmt1cC1lZGl0b3IoXG4gICAgICByZWY9XCJlZGl0b3JcIlxuICAgICAgOmVkaXRvcj1cImVkaXRvclwiXG4gICAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICAgIClcbiAgICAuZGl0by1yZXNpemUoXG4gICAgICB2LWlmPVwicmVzaXphYmxlXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcC5wcmV2ZW50PVwib25EcmFnUmVzaXplXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tbWFya3VwXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAgIC5kaXRvLXJlc2l6ZVxuICAgICAgQGV4dGVuZCAlaWNvbi1yZXNpemVcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgdG9wOiB1bnNldFxuICAgICAgbGVmdDogdW5zZXRcbiAgICAgIHJpZ2h0OiAwXG4gICAgICBib3R0b206IDBcbiAgICAgIHdpZHRoOiAxZW1cbiAgICAgIGhlaWdodDogMWVtXG5cbiAgICAuUHJvc2VNaXJyb3JcbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgb3V0bGluZTogbm9uZVxuXG4gICAgLmRpdG8tbWFya3VwLWVkaXRvclxuICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsXG4gICAgICAvLyBNb3ZlIHBhZGRpbmcgXCJpbnNpZGVcIiBlZGl0b3IgdG8gY29ycmVjdGx5IHBvc2l0aW9uIHNjcm9sbGJhclxuICAgICAgbWFyZ2luLXJpZ2h0OiAtJGlucHV0LXBhZGRpbmctaG9yXG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkaW5wdXQtcGFkZGluZy1ob3JcblxuICAgIC5kaXRvLWJ1dHRvbnMtdG9vbGJhclxuICAgICAgbWFyZ2luOiAkaW5wdXQtcGFkZGluZy12ZXIgMFxuXG4gICAgaDEsXG4gICAgaDIsXG4gICAgaDMsXG4gICAgcCxcbiAgICB1bCxcbiAgICBvbCxcbiAgICBwcmUsXG4gICAgYmxvY2txdW90ZVxuICAgICAgbWFyZ2luOiAxcmVtIDBcbiAgICAgICY6Zmlyc3QtY2hpbGRcbiAgICAgICAgbWFyZ2luLXRvcDogMFxuICAgICAgJjpsYXN0LWNoaWxkXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDBcbiAgICBoMSxcbiAgICBoMixcbiAgICBoM1xuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICBoMVxuICAgICAgZm9udC1zaXplOiAxLjRyZW1cbiAgICBoMlxuICAgICAgZm9udC1zaXplOiAxLjJyZW1cbiAgICB1bFxuICAgICAgbGlzdC1zdHlsZTogZGlzY1xuICAgIGNvZGVcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ub1xuICAgIHByZVxuICAgICAgcGFkZGluZzogMC43cmVtIDFyZW1cbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyXG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICBvdmVyZmxvdy14OiBhdXRvXG4gICAgICBjb2RlXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgcCBjb2RlXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIHBhZGRpbmc6IDAgMC4zcmVtXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXJcbiAgICBhXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZVxuICAgICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgICBjb2xvcjogYmx1ZVxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmVcbiAgICB1bCxcbiAgICBvbFxuICAgICAgcGFkZGluZy1sZWZ0OiAycmVtXG4gICAgbGlcbiAgICAgICYgPiBwLFxuICAgICAgJiA+IG9sLFxuICAgICAgJiA+IHVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgIGJsb2NrcXVvdGVcbiAgICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgJGNvbG9yLWxpZ2h0ZXJcbiAgICAgIHBhZGRpbmctbGVmdDogMXJlbVxuICAgICAgZm9udC1zdHlsZTogaXRhbGljXG4gICAgICBwXG4gICAgICAgIG1hcmdpbjogMFxuXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRWRpdG9yLCBFZGl0b3JDb250ZW50LCBFZGl0b3JNZW51QmFyLCBNYXJrIH0gZnJvbSAndGlwdGFwJ1xuaW1wb3J0IHsgdG9nZ2xlTWFyayB9IGZyb20gJ3RpcHRhcC1jb21tYW5kcydcbmltcG9ydCB7XG4gIC8vIE1hcmtzOlxuICBCb2xkLCBDb2RlLCBJdGFsaWMsIExpbmssIFN0cmlrZSwgVW5kZXJsaW5lLFxuICAvLyBOb2RlczpcbiAgQmxvY2txdW90ZSwgQ29kZUJsb2NrLCBIYXJkQnJlYWssIEhlYWRpbmcsIEhvcml6b250YWxSdWxlLFxuICBPcmRlcmVkTGlzdCwgQnVsbGV0TGlzdCwgTGlzdEl0ZW0sXG4gIC8vIFRPRE86XG4gIC8vIC0gSW1hZ2UsIE1lbnRpb24sIENvZGVCbG9ja0hpZ2hsaWdodFxuICAvLyAtIFRhYmxlLCBUYWJsZUNlbGwsIFRhYmxlSGVhZGVyLCBUYWJsZU5vZGVzLCBUYWJsZVJvdyxcbiAgLy8gLSBUb2RvSXRlbSwgVG9kb0xpc3RcbiAgLy8gVG9vbHM6XG4gIEhpc3Rvcnlcbn0gZnJvbSAndGlwdGFwLWV4dGVuc2lvbnMnXG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCB7XG4gIGlzQXJyYXksIGlzT2JqZWN0LCB1bmRlcnNjb3JlLCBoeXBoZW5hdGUsIGRlYm91bmNlXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdtYXJrdXAnLCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICBFZGl0b3JDb250ZW50LFxuICAgIEVkaXRvck1lbnVCYXIsXG4gICAgSWNvblxuICB9LFxuXG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlZGl0b3I6IG51bGwsXG4gICAgICBoZWlnaHQ6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCAxMFxuICAgIH0sXG5cbiAgICBzdHlsZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0IHx8IGBjYWxjKCR7dGhpcy5saW5lc31lbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlgXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1hcmtCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbWFya3MnLCB7XG4gICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgIGl0YWxpYzogdHJ1ZSxcbiAgICAgICAgdW5kZXJsaW5lOiB0cnVlLFxuICAgICAgICBzdHJpa2U6IHRydWUsXG4gICAgICAgIHNtYWxsOiB0cnVlLFxuICAgICAgICBjb2RlOiB0cnVlLFxuICAgICAgICBsaW5rOiB7XG4gICAgICAgICAgb25DbGljazogY29tbWFuZCA9PiB0aGlzLm9uQ2xpY2tMaW5rKGNvbW1hbmQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGJhc2ljTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgcGFyYWdyYXBoOiB7XG4gICAgICAgIC8vIERvIG5vdCBzaG93IHRoZSBwYXJhZ3JhcGggY29tbWFuZCBhcyBhY3RpdmUgaWYgYW55IG9mIHRoZSBibG9ja1xuICAgICAgICAvLyBjb21tYW5kcyBhcmUgYWxzbyBhY3RpdmU6XG4gICAgICAgICAgaWdub3JlQWN0aXZlOiAoKSA9PlxuICAgICAgICAgICAgdGhpcy5vdGhlck5vZGVCdXR0b25zLnNvbWUoYnV0dG9uID0+IGJ1dHRvbi5pc0FjdGl2ZSlcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZGluZzoge1xuICAgICAgICAgIGF0dHI6ICdsZXZlbCcsXG4gICAgICAgICAgdmFsdWVzOiBbMSwgMiwgMywgNCwgNSwgNl1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb3RoZXJOb2RlQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ25vZGVzJywge1xuICAgICAgICBidWxsZXRMaXN0OiB0cnVlLFxuICAgICAgICBvcmRlcmVkTGlzdDogdHJ1ZSxcbiAgICAgICAgYmxvY2txdW90ZTogdHJ1ZSxcbiAgICAgICAgY29kZUJsb2NrOiB0cnVlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB0b29sQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ3Rvb2xzJywge1xuICAgICAgICB1bmRvOiB0cnVlLFxuICAgICAgICByZWRvOiB0cnVlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBncm91cGVkQnV0dG9ucygpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFya0J1dHRvbnMsXG4gICAgICAgIGJhc2ljTm9kZUJ1dHRvbnMsXG4gICAgICAgIG90aGVyTm9kZUJ1dHRvbnMsXG4gICAgICAgIHRvb2xCdXR0b25zXG4gICAgICB9ID0gdGhpc1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgbWFya0J1dHRvbnMsXG4gICAgICAgIGJhc2ljTm9kZUJ1dHRvbnMsXG4gICAgICAgIG90aGVyTm9kZUJ1dHRvbnMsXG4gICAgICAgIHRvb2xCdXR0b25zXG4gICAgICBdLmZpbHRlcihidXR0b25zID0+IGJ1dHRvbnMubGVuZ3RoID4gMClcbiAgICB9LFxuXG4gICAgcGFyc2VPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJlc2VydmVXaGl0ZXNwYWNlOiB7XG4gICAgICAgICAgJ2NvbGxhcHNlJzogZmFsc2UsXG4gICAgICAgICAgJ3ByZXNlcnZlJzogdHJ1ZSxcbiAgICAgICAgICAncHJlc2VydmUtYWxsJzogJ2Z1bGwnXG4gICAgICAgIH1bdGhpcy53aGl0ZXNwYWNlXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBlZGl0b3JPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWRpdGFibGU6ICF0aGlzLnJlYWR5b25seSxcbiAgICAgICAgYXV0b0ZvY3VzOiB0aGlzLmF1dG9mb2N1cyxcbiAgICAgICAgZGlzYWJsZUlucHV0UnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLmlucHV0LFxuICAgICAgICBkaXNhYmxlUGFzdGVSdWxlczogIXRoaXMuZW5hYmxlUnVsZXMucGFzdGUsXG4gICAgICAgIHBhcnNlT3B0aW9uczogdGhpcy5wYXJzZU9wdGlvbnNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVzaXphYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVzaXphYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICB3aGl0ZXNwYWNlOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2hpdGVzcGFjZScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdjb2xsYXBzZSdcbiAgICAgIC8vIFBvc3NpYmxlIHZhbHVlcyBhcmU6ICdjb2xsYXBzZScsICdwcmVzZXJ2ZScsICdwcmVzZXJ2ZS1hbGwnXG4gICAgfSksXG5cbiAgICBlbmFibGVSdWxlczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VuYWJsZVJ1bGVzJywge1xuICAgICAgdHlwZTogW09iamVjdCwgQm9vbGVhbl0sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlbmFibGVSdWxlcykge1xuICAgICAgICByZXR1cm4gaXNPYmplY3QoZW5hYmxlUnVsZXMpXG4gICAgICAgICAgPyBlbmFibGVSdWxlc1xuICAgICAgICAgIDoge1xuICAgICAgICAgICAgaW5wdXQ6ICEhZW5hYmxlUnVsZXMsXG4gICAgICAgICAgICBwYXN0ZTogISFlbmFibGVSdWxlc1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgcmVhZHlvbmx5OiAndXBkYXRlRWRpdG9yT3B0aW9ucycsXG4gICAgYXV0b2ZvY3VzOiAndXBkYXRlRWRpdG9yT3B0aW9ucycsXG4gICAgZW5hYmxlUnVsZXM6ICd1cGRhdGVFZGl0b3JPcHRpb25zJ1xuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZVxuICAgIGxldCBpZ25vcmVXYXRjaCA9IGZhbHNlXG5cbiAgICBjb25zdCBvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5mb2N1c2VkICYmIGNoYW5nZWQpIHtcbiAgICAgICAgY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9uRm9jdXMgPSAoKSA9PiB0aGlzLm9uRm9jdXMoKVxuXG4gICAgY29uc3Qgb25CbHVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5vbkJsdXIoKVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH1cblxuICAgIGNvbnN0IHNldFZhbHVlRGVib3VuY2VkID0gZGVib3VuY2UoZ2V0VmFsdWUgPT4ge1xuICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICB0aGlzLnZhbHVlID0gZ2V0VmFsdWUoKVxuICAgICAgY2hhbmdlZCA9IHRydWVcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9LCAxMDApXG5cbiAgICBjb25zdCBvblVwZGF0ZSA9ICh7IGdldEhUTUwgfSkgPT4ge1xuICAgICAgc2V0VmFsdWVEZWJvdW5jZWQoZ2V0SFRNTClcbiAgICAgIHRoaXMub25JbnB1dCgpXG4gICAgfVxuXG4gICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVdhdGNoKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZWRpdG9yLnNldENvbnRlbnQodmFsdWUsIGZhbHNlLCB0aGlzLnBhcnNlT3B0aW9ucylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5lZGl0b3IgPSBuZXcgRWRpdG9yKHtcbiAgICAgIC4uLnRoaXMuZWRpdG9yT3B0aW9ucyxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbkJsdXIsXG4gICAgICBvblVwZGF0ZSxcbiAgICAgIGV4dGVuc2lvbnM6IHRoaXMuY3JlYXRlRXh0ZW5zaW9ucygpLFxuICAgICAgY29udGVudDogdGhpcy52YWx1ZSB8fCAnJ1xuICAgIH0pXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLmVkaXRvci5kZXN0cm95KClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25EcmFnUmVzaXplKGV2ZW50KSB7XG4gICAgICBjb25zdCBnZXRQb2ludCA9ICh7IGNsaWVudFg6IHgsIGNsaWVudFk6IHkgfSkgPT4gKHsgeCwgeSB9KVxuXG4gICAgICBsZXQgcHJldlkgPSBnZXRQb2ludChldmVudCkueVxuICAgICAgbGV0IGhlaWdodCA9IHBhcnNlRmxvYXQoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiRyZWZzLmVkaXRvci4kZWwpLmhlaWdodClcblxuICAgICAgY29uc3QgbW91c2Vtb3ZlID0gZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCB7IHkgfSA9IGdldFBvaW50KGV2ZW50KVxuICAgICAgICBoZWlnaHQgKz0geSAtIHByZXZZXG4gICAgICAgIHByZXZZID0geVxuICAgICAgICB0aGlzLmhlaWdodCA9IGAke01hdGgubWF4KGhlaWdodCwgMCl9cHhgXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgICBtb3VzZW1vdmUsXG5cbiAgICAgICAgbW91c2V1cChldmVudCkge1xuICAgICAgICAgIG1vdXNlbW92ZShldmVudClcbiAgICAgICAgICBoYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB1cGRhdGVFZGl0b3JPcHRpb25zKCkge1xuICAgICAgdGhpcy5lZGl0b3Iuc2V0T3B0aW9ucyh0aGlzLmVkaXRvck9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ2xpY2tMaW5rKGNvbW1hbmQpIHtcbiAgICAgIGNvbnN0IGF0dHJzID0gYXdhaXQgdGhpcy5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIGhyZWY6IHtcbiAgICAgICAgICAgIHR5cGU6ICd1cmwnLFxuICAgICAgICAgICAgbGFiZWw6ICdMaW5rJyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGxhYmVsOiAnVGl0bGUnXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBidXR0b25zOiB7XG4gICAgICAgICAgY2FuY2VsOiB7fSxcbiAgICAgICAgICBhcHBseTogeyB0eXBlOiAnc3VibWl0JyB9LFxuICAgICAgICAgIHJlbW92ZToge1xuICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgIGNsaWNrKHsgZGlhbG9nQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb21wb25lbnQucmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICBocmVmOiBudWxsLFxuICAgICAgICAgICAgICAgICAgdGl0bGU6IG51bGxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXRhOiB0aGlzLmVkaXRvci5nZXRNYXJrQXR0cnMoJ2xpbmsnKVxuICAgICAgfSlcbiAgICAgIGlmIChhdHRycykge1xuICAgICAgICBsZXQgeyBocmVmLCB0aXRsZSB9ID0gYXR0cnNcbiAgICAgICAgaWYgKGhyZWYpIHtcbiAgICAgICAgICAvLyBTZWUgaWYgYGhyZWZgIGNhbiBiZSBwYXJzZWQgYXMgYSBVUkwsIGFuZCBpZiBub3QsIHByZWZpeCBpdCB3aXRoXG4gICAgICAgICAgLy8gYSBkZWZhdWx0IHByb3RvY29sLlxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgVVJMKGhyZWYpXG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICBocmVmID0gYGh0dHA6Ly8ke2hyZWZ9YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb21tYW5kKHsgaHJlZiwgdGl0bGUgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlRXh0ZW5zaW9ucygpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFya3MgPSB7fSxcbiAgICAgICAgbm9kZXMgPSB7fSxcbiAgICAgICAgdG9vbHMgPSB7fVxuICAgICAgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gW1xuICAgICAgICAvLyBzY2hlbWEubWFya3M6XG4gICAgICAgIG1hcmtzLmJvbGQgJiYgbmV3IEJvbGQoKSxcbiAgICAgICAgbWFya3MuaXRhbGljICYmIG5ldyBJdGFsaWMoKSxcbiAgICAgICAgbWFya3MudW5kZXJsaW5lICYmIG5ldyBVbmRlcmxpbmUoKSxcbiAgICAgICAgbWFya3Muc3RyaWtlICYmIG5ldyBTdHJpa2UoKSxcbiAgICAgICAgbWFya3Muc21hbGwgJiYgbmV3IFNtYWxsKCksXG4gICAgICAgIG1hcmtzLmNvZGUgJiYgbmV3IENvZGUoKSxcbiAgICAgICAgbWFya3MubGluayAmJiBuZXcgTGlua1dpdGhUaXRsZSgpLFxuXG4gICAgICAgIC8vIHNjaGVtYS5ub2RlczpcbiAgICAgICAgbm9kZXMuYmxvY2txdW90ZSAmJiBuZXcgQmxvY2txdW90ZSgpLFxuICAgICAgICBub2Rlcy5jb2RlQmxvY2sgJiYgbmV3IENvZGVCbG9jaygpLFxuICAgICAgICBuZXcgSGFyZEJyZWFrKCksIC8vIFRPRE86IFNob3VsZCB0aGlzIGFsd2F5cyBvbj9cbiAgICAgICAgbm9kZXMuaGVhZGluZyAmJiBuZXcgSGVhZGluZyh7IGxldmVsczogbm9kZXMuaGVhZGluZyB9KSxcbiAgICAgICAgbm9kZXMuaG9yaXpvbnRhbFJ1bGUgJiYgbmV3IEhvcml6b250YWxSdWxlKCksXG4gICAgICAgIChub2Rlcy5vcmRlcmVkTGlzdCB8fCBub2Rlcy5idWxsZXRMaXN0KSAmJiBuZXcgTGlzdEl0ZW0oKSxcbiAgICAgICAgbm9kZXMuYnVsbGV0TGlzdCAmJiBuZXcgQnVsbGV0TGlzdCgpLFxuICAgICAgICBub2Rlcy5vcmRlcmVkTGlzdCAmJiBuZXcgT3JkZXJlZExpc3QoKSxcbiAgICAgICAgLy8gVE9ETzpcbiAgICAgICAgLy8gbm9kZXMudG9kb0xpc3QgJiYgbmV3IFRvZG9JdGVtKCksXG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIG5ldyBUb2RvTGlzdCgpLFxuXG4gICAgICAgIC8vIHNjaGVtYS50b29sczpcbiAgICAgICAgdG9vbHMuaGlzdG9yeSAmJiBuZXcgSGlzdG9yeSgpXG4gICAgICBdLmZpbHRlcihleHRlbnNpb24gPT4gISFleHRlbnNpb24pXG4gICAgfSxcblxuICAgIGdldEJ1dHRvbnMoc2V0dGluZ3NOYW1lLCBkZXNjcmlwdGlvbnMpIHtcbiAgICAgIGNvbnN0IGxpc3QgPSBbXVxuXG4gICAgICBjb25zdCBhZGRCdXR0b24gPSAoeyBuYW1lLCBpY29uLCBhdHRycywgaWdub3JlQWN0aXZlLCBvbkNsaWNrIH0pID0+IHtcbiAgICAgICAgY29uc3QgaXNBY3RpdmUgPSB0aGlzLmVkaXRvci5pc0FjdGl2ZVtuYW1lXVxuICAgICAgICBjb25zdCBjb21tYW5kID0gdGhpcy5lZGl0b3IuY29tbWFuZHNbbmFtZV1cbiAgICAgICAgbGlzdC5wdXNoKHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGljb24sXG4gICAgICAgICAgaXNBY3RpdmU6IChcbiAgICAgICAgICAgIGlzQWN0aXZlPy4oYXR0cnMpICYmXG4gICAgICAgICAgICAoaWdub3JlQWN0aXZlID09IG51bGwgfHwgIWlnbm9yZUFjdGl2ZSgpKVxuICAgICAgICAgICksXG4gICAgICAgICAgb25DbGljazogKCkgPT4gb25DbGlja1xuICAgICAgICAgICAgPyBvbkNsaWNrKGNvbW1hbmQsIGF0dHJzKVxuICAgICAgICAgICAgOiBjb21tYW5kKGF0dHJzKVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuc2NoZW1hW3NldHRpbmdzTmFtZV1cbiAgICAgIGlmIChzZXR0aW5ncykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGRlc2NyaXB0aW9uXSBvZiBPYmplY3QuZW50cmllcyhkZXNjcmlwdGlvbnMpKSB7XG4gICAgICAgICAgY29uc3Qgc2V0dGluZ05hbWUgPSBbJ3VuZG8nLCAncmVkbyddLmluY2x1ZGVzKGtleSkgPyAnaGlzdG9yeScgOiBrZXlcbiAgICAgICAgICBjb25zdCBzZXR0aW5nID0gc2V0dGluZ3Nbc2V0dGluZ05hbWVdXG4gICAgICAgICAgY29uc3QgbmFtZSA9IHVuZGVyc2NvcmUoa2V5KVxuICAgICAgICAgIGNvbnN0IGljb24gPSBoeXBoZW5hdGUoa2V5KVxuICAgICAgICAgIGlmIChzZXR0aW5nKSB7XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgYWRkQnV0dG9uKHsgbmFtZSwgaWNvbiB9KVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkZXNjcmlwdGlvbikpIHtcbiAgICAgICAgICAgICAgY29uc3QgeyBhdHRyLCB2YWx1ZXMsIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9ID0gZGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgaWYgKGF0dHIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZXMpICYmIGlzQXJyYXkoc2V0dGluZykpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgaGVhZGluZyBsZXZlbCBhdHRyczpcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogYCR7aWNvbn0tJHt2YWx1ZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgW2F0dHJdOiB2YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkQnV0dG9uKHsgbmFtZSwgaWNvbiwgaWdub3JlQWN0aXZlLCBvbkNsaWNrIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfSxcblxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnNjcm9sbEludG9WaWV3Py4oKVxuICAgICAgdGhpcy5lZGl0b3IuZm9jdXMoKVxuICAgIH1cbiAgfVxufSlcblxuY2xhc3MgU21hbGwgZXh0ZW5kcyBNYXJrIHtcbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuICdzbWFsbCdcbiAgfVxuXG4gIGdldCBzY2hlbWEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlRE9NOiBbXG4gICAgICAgIHsgdGFnOiAnc21hbGwnIH1cbiAgICAgIF0sXG4gICAgICB0b0RPTTogKCkgPT4gWydzbWFsbCcsIDBdXG4gICAgfVxuICB9XG5cbiAgY29tbWFuZHMoeyB0eXBlIH0pIHtcbiAgICByZXR1cm4gKCkgPT4gdG9nZ2xlTWFyayh0eXBlKVxuICB9XG59XG5jbGFzcyBMaW5rV2l0aFRpdGxlIGV4dGVuZHMgTGluayB7XG4gIGdldCBzY2hlbWEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIGhyZWY6IHtcbiAgICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICAgIH0sXG4gICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgIHBhcnNlRE9NOiBbe1xuICAgICAgICB0YWc6ICdhJyxcbiAgICAgICAgZ2V0QXR0cnM6IGRvbSA9PiAoe1xuICAgICAgICAgIGhyZWY6IGRvbS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSxcbiAgICAgICAgICB0aXRsZTogZG9tLmdldEF0dHJpYnV0ZSgndGl0bGUnKVxuICAgICAgICB9KVxuICAgICAgfV0sXG4gICAgICB0b0RPTTogbm9kZSA9PiBbJ2EnLCBub2RlLmF0dHJzLCAwXVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLW11bHRpc2VsZWN0KFxuICA6Y2xhc3M9YHtcbiAgICAnZGl0by1tdWx0aXNlbGVjdC1zaW5nbGUnOiAhbXVsdGlwbGUsXG4gICAgJ2RpdG8tbXVsdGlzZWxlY3QtbXVsdGlwbGUnOiBtdWx0aXBsZVxuICB9YFxuKVxuICB2dWUtbXVsdGlzZWxlY3QoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOnNob3ctbGFiZWxzPVwiZmFsc2VcIlxuICAgIDpwbGFjZWhvbGRlcj1cInBsYWNlaG9sZGVyXCJcbiAgICB0YWctcGxhY2Vob2xkZXI9XCJQcmVzcyBlbnRlciB0byBhZGQgbmV3IHRhZ1wiLFxuICAgIDpvcHRpb25zPVwicG9wdWxhdGUgJiYgYWN0aXZlT3B0aW9ucyB8fCBbXVwiXG4gICAgOmN1c3RvbS1sYWJlbD1cImdldExhYmVsRm9yT3B0aW9uXCJcbiAgICA6dHJhY2stYnk9XCJvcHRpb25WYWx1ZVwiXG4gICAgOmdyb3VwLWxhYmVsPVwiZ3JvdXBCeUxhYmVsXCJcbiAgICA6Z3JvdXAtdmFsdWVzPVwiZ3JvdXBCeU9wdGlvbnNcIlxuICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICA6dGFnZ2FibGU9XCJ0YWdnYWJsZVwiXG4gICAgOnNlYXJjaGFibGU9XCJzZWFyY2hhYmxlXCJcbiAgICA6aW50ZXJuYWwtc2VhcmNoPVwiIXNlYXJjaEZpbHRlclwiXG4gICAgOnByZXNlcnZlLXNlYXJjaD1cIiEhc2VhcmNoRmlsdGVyXCJcbiAgICA6Y2xlYXItb24tc2VsZWN0PVwiIXNlYXJjaEZpbHRlclwiXG4gICAgOmNsb3NlLW9uLXNlbGVjdD1cIiFzdGF5T3BlblwiXG4gICAgOmxvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgIEBvcGVuPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICBAdGFnPVwib25BZGRUYWdcIlxuICAgIEBzZWFyY2gtY2hhbmdlPVwib25TZWFyY2hDaGFuZ2VcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLW11bHRpc2VsZWN0KFxuICAgIDpjbGFzcz1ge1xuICAgICAgJ2RpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlJzogIW11bHRpcGxlLFxuICAgICAgJ2RpdG8tbXVsdGlzZWxlY3QtbXVsdGlwbGUnOiBtdWx0aXBsZVxuICAgIH1gXG4gIClcbiAgICB2dWUtbXVsdGlzZWxlY3QoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIDpzaG93LWxhYmVscz1cImZhbHNlXCJcbiAgICAgIDpwbGFjZWhvbGRlcj1cInBsYWNlaG9sZGVyXCJcbiAgICAgIHRhZy1wbGFjZWhvbGRlcj1cIlByZXNzIGVudGVyIHRvIGFkZCBuZXcgdGFnXCIsXG4gICAgICA6b3B0aW9ucz1cInBvcHVsYXRlICYmIGFjdGl2ZU9wdGlvbnMgfHwgW11cIlxuICAgICAgOmN1c3RvbS1sYWJlbD1cImdldExhYmVsRm9yT3B0aW9uXCJcbiAgICAgIDp0cmFjay1ieT1cIm9wdGlvblZhbHVlXCJcbiAgICAgIDpncm91cC1sYWJlbD1cImdyb3VwQnlMYWJlbFwiXG4gICAgICA6Z3JvdXAtdmFsdWVzPVwiZ3JvdXBCeU9wdGlvbnNcIlxuICAgICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgICAgOnRhZ2dhYmxlPVwidGFnZ2FibGVcIlxuICAgICAgOnNlYXJjaGFibGU9XCJzZWFyY2hhYmxlXCJcbiAgICAgIDppbnRlcm5hbC1zZWFyY2g9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICAgIDpwcmVzZXJ2ZS1zZWFyY2g9XCIhIXNlYXJjaEZpbHRlclwiXG4gICAgICA6Y2xlYXItb24tc2VsZWN0PVwiIXNlYXJjaEZpbHRlclwiXG4gICAgICA6Y2xvc2Utb24tc2VsZWN0PVwiIXN0YXlPcGVuXCJcbiAgICAgIDpsb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICAgIEBvcGVuPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICAgIEB0YWc9XCJvbkFkZFRhZ1wiXG4gICAgICBAc2VhcmNoLWNoYW5nZT1cIm9uU2VhcmNoQ2hhbmdlXCJcbiAgICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICd2dWUtbXVsdGlzZWxlY3QvZGlzdC92dWUtbXVsdGlzZWxlY3QubWluLmNzcydcblxuICAkc3Bpbm5lci13aWR0aDogJHNlbGVjdC1hcnJvdy13aWR0aFxuICAkdGFnLWljb24td2lkdGg6IDEuOGVtXG4gICR0YWctbWFyZ2luOiAycHhcbiAgJHRhZy1wYWRkaW5nOiAzcHhcbiAgJHRhZy1saW5lLWhlaWdodDogMS4xZW1cblxuICAuZGl0by1tdWx0aXNlbGVjdFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gICAgLm11bHRpc2VsZWN0XG4gICAgICBmb250LXNpemU6IGluaGVyaXRcbiAgICAgIG1pbi1oZWlnaHQ6IGluaGVyaXRcbiAgICAgIGNvbG9yOiAkY29sb3ItYmxhY2tcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0XG4gICAgICBvdmVyZmxvdzogYXV0b1xuICAgICAgbWluLWhlaWdodDogaW5oZXJpdFxuICAgICAgcGFkZGluZzogMCAkc3Bpbm5lci13aWR0aCAwIDBcbiAgICAgIC8vIFNvIHRhZ3MgY2FuIGZsb2F0IG9uIG11bHRpcGxlIGxpbmVzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zOlxuICAgICAgcGFkZGluZy1ib3R0b206ICR0YWctbWFyZ2luXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZ1xuICAgICAgZmxvYXQ6IGxlZnRcbiAgICAgIG1hcmdpbjogJHRhZy1tYXJnaW4gMCAwICR0YWctbWFyZ2luXG4gICAgICBib3JkZXItcmFkaXVzOiAxZW1cbiAgICAgIHBhZGRpbmc6ICR0YWctcGFkZGluZyAkdGFnLWljb24td2lkdGggJHRhZy1wYWRkaW5nIDAuOGVtXG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuXG4gICAgLm11bHRpc2VsZWN0X190YWdzLXdyYXBcbiAgICAgIG92ZXJmbG93OiBhdXRvXG4gICAgICBsaW5lLWhlaWdodDogMFxuXG4gICAgLm11bHRpc2VsZWN0X19zaW5nbGUsXG4gICAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlcixcbiAgICAubXVsdGlzZWxlY3RfX2lucHV0XG4gICAgICBmb250LXNpemU6IGluaGVyaXRcbiAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0XG4gICAgICBtaW4taGVpZ2h0OiAwXG4gICAgICBtYXJnaW46IDAgMCAxcHggMFxuICAgICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBzdHlsZT1cInBhZGRpbmc6IC4uLjtcIiBpbiBhZGRpdGlvbiB0byB1c2luZ1xuICAgICAgLy8gY2xhc3Nlcywgc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nICFpbXBvcnRhbnRcbiAgICAgIC8vIFNvIGlucHV0IGNhbiBmbG9hdCBuZXh0IHRvIHRhZ3MgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnMgd2l0aFxuICAgICAgLy8gLm11bHRpc2VsZWN0X190YWdzOlxuICAgICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudFxuICAgICAgYmFja2dyb3VuZDogbm9uZVxuXG4gICAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlcixcbiAgICAubXVsdGlzZWxlY3RfX2lucHV0OjpwbGFjZWhvbGRlclxuICAgICAgY29sb3I6ICRjb2xvci1wbGFjZWhvbGRlclxuXG4gICAgLm11bHRpc2VsZWN0LS1hY3RpdmVcbiAgICAgIC5tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXJcbiAgICAgICAgLy8gRG9uJ3QgdXNlIGBkaXNwbGF5OiBub25lYCB0byBoaWRlIHBsYWNlLWhvbGRlciwgYXMgdGhlIGxheW91dCB3b3VsZFxuICAgICAgICAvLyBjb2xsYXBzZS5cbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlblxuXG4gICAgLm11bHRpc2VsZWN0X19zZWxlY3QsXG4gICAgLm11bHRpc2VsZWN0X19zcGlubmVyXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICAvLyAkYm9yZGVyLXdpZHRoIHRvIHByZXZlbnQgbWFza2luZyBib3JkZXIgd2l0aCAubXVsdGlzZWxlY3RfX3NwaW5uZXJcbiAgICAgIHRvcDogJGJvcmRlci13aWR0aFxuICAgICAgcmlnaHQ6ICRib3JkZXItd2lkdGhcbiAgICAgIGJvdHRvbTogJGJvcmRlci13aWR0aFxuICAgICAgaGVpZ2h0OiBpbmhlcml0XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuXG4gICAgLm11bHRpc2VsZWN0X19zZWxlY3RcbiAgICAgIHdpZHRoOiAwXG4gICAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoJHNlbGVjdC1hcnJvdy13aWR0aCAvIDIpXG4gICAgICAmOjpiZWZvcmVcbiAgICAgICAgK2Fycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSlcbiAgICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbVxuICAgICAgICByaWdodDogY2FsYygtMSAqICRzZWxlY3QtYXJyb3ctc2l6ZSAvIDIpXG5cbiAgICAubXVsdGlzZWxlY3RfX3NwaW5uZXJcbiAgICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aFxuICAgICAgJjo6YmVmb3JlLFxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gQ2hhbmdlIHRoZSB3aWR0aCBvZiB0aGUgbG9hZGluZyBzcGlubmVyXG4gICAgICAgIGJvcmRlci13aWR0aDogM3B4XG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgaW5zZXQ6IDBcbiAgICAgICAgbWFyZ2luOiBhdXRvXG5cbiAgICAubXVsdGlzZWxlY3RfX29wdGlvblxuICAgICAgbWluLWhlaWdodDogdW5zZXRcbiAgICAgIGhlaWdodDogdW5zZXRcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gdGV4dCBmb3Igb3B0aW9uc1xuICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudFxuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLm11bHRpc2VsZWN0X19vcHRpb24tLWRpc2FibGVkXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZy1pY29uXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICBib3JkZXItcmFkaXVzOiAxZW1cbiAgICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0XG4gICAgICBsaW5lLWhlaWdodDogMS40ZW1cbiAgICAgIHdpZHRoOiAkdGFnLWljb24td2lkdGhcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuICAgICAgICBmb250LXNpemU6IDEuM2VtXG4gICAgICAmOmhvdmVyOjphZnRlclxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHRcblxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1zZWxlY3RlZFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodFxuICAgICAgY29sb3I6ICRjb2xvci10ZXh0XG4gICAgICBmb250LXdlaWdodDogbm9ybWFsXG4gICAgICAmLm11bHRpc2VsZWN0X19vcHRpb24tLWhpZ2hsaWdodFxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnLFxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuXG4gICAgLm11bHRpc2VsZWN0X190YWdzLFxuICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG5cbiAgICAmLmRpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlXG4gICAgICAtLWlucHV0LXdpZHRoOiAxMDAlXG4gICAgJi5kaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlXG4gICAgICAtLWlucHV0LXdpZHRoOiBhdXRvXG5cbiAgICAubXVsdGlzZWxlY3QtLWFjdGl2ZVxuICAgICAgLm11bHRpc2VsZWN0X19zaW5nbGUsXG4gICAgICAubXVsdGlzZWxlY3RfX2lucHV0XG4gICAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgYHN0eWxlPVwid2lkdGhcImAgaW4gYWRkaXRpb24gdG8gdXNpbmcgY2xhc3Nlc1xuICAgICAgICAvLyBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgICB3aWR0aDogdmFyKC0taW5wdXQtd2lkdGgpICFpbXBvcnRhbnRcblxuICAgICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlXG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRib3JkZXItY29sb3JcbiAgICAgICAgbWFyZ2luOiAtMXB4IDAgMFxuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAgICYubXVsdGlzZWxlY3QtLWFib3ZlXG4gICAgICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMFxuICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwXG4gICAgICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmVcbiAgICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG4gICAgICAgICAgbWFyZ2luOiAwIDAgLTFweFxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMFxuICAgICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAmLmRpdG8taGFzLWVycm9yc1xuICAgICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWVycm9yXG5cbiAgICAuZGl0by1idXR0b24tY2xlYXJcbiAgICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5pbXBvcnQgVnVlTXVsdGlzZWxlY3QgZnJvbSAndnVlLW11bHRpc2VsZWN0J1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCAndnVlLW11bHRpc2VsZWN0L2Rpc3QvdnVlLW11bHRpc2VsZWN0Lm1pbi5jc3MnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdtdWx0aXNlbGVjdCcsIHtcbiAgY29tcG9uZW50czogeyBWdWVNdWx0aXNlbGVjdCB9LFxuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlYXJjaGVkT3B0aW9uczogbnVsbCxcbiAgICAgIHBvcHVsYXRlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkT3B0aW9uczoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKHRoaXMuc2VsZWN0ZWRWYWx1ZSB8fCBbXSlcbiAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgIC8vIElmIGFuIG9wdGlvbiBjYW5ub3QgYmUgZm91bmQsIHdlIG1heSBiZSBpbiB0YWdnYWJsZSBtb2RlIGFuZFxuICAgICAgICAgICAgICAvLyBjYW4gYWRkIGl0LlxuICAgICAgICAgICAgICB2YWx1ZSA9PiB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB8fCB0aGlzLmFkZFRhZ09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgb3B0aW9ucyB0aGF0IHdlIGNvdWxkbid0IG1hdGNoLlxuICAgICAgICAgICAgLy8gVE9ETzogV2UgcmVhbGx5IHNob3VsZCBkaXNwbGF5IGFuIGVycm9yIGluc3RlYWRcbiAgICAgICAgICAgIC5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICAgICAgOiB0aGlzLnNlbGVjdGVkT3B0aW9uXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIC8vIENvbnZlcnQgdmFsdWUgdG8gb3B0aW9ucyBvYmplY3QsIHNpbmNlIHZ1ZS1tdWx0aXNlbGVjdCBjYW4ndCBtYXAgdGhhdFxuICAgICAgICAvLyBpdHNlbGYgdW5mb3J0dW5hdGVseS4gYHRyYWNrLWJ5YCBpcyB1c2VkIGZvciA6a2V5IG1hcHBpbmcgaXQgc2VlbXMuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/IChvcHRpb24gfHwgW10pLm1hcCh2YWx1ZSA9PiB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKHZhbHVlKSlcbiAgICAgICAgICA6IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhY3RpdmVPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoZWRPcHRpb25zIHx8IHRoaXMub3B0aW9uc1xuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzZWFyY2hhYmxlOiBnZXRTY2hlbWFBY2Nlc3Nvcignc2VhcmNoYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgdGFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCd0YWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgc3RheU9wZW46IGdldFNjaGVtYUFjY2Vzc29yKCdzdGF5T3BlbicsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcGxhY2Vob2xkZXIoKSB7XG4gICAgICBjb25zdCB7IHBsYWNlaG9sZGVyLCBzZWFyY2hhYmxlLCB0YWdnYWJsZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiBwbGFjZWhvbGRlciB8fCAoXG4gICAgICAgIHNlYXJjaGFibGUgJiYgdGFnZ2FibGUgPyAnU2VhcmNoIG9yIGFkZCBhIHRhZydcbiAgICAgICAgOiBzZWFyY2hhYmxlID8gJ1NlbGVjdCBvciBzZWFyY2ggZW50cnknXG4gICAgICAgIDogdW5kZWZpbmVkXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgaWYgKHRoaXMuYXV0b2ZvY3VzKSB7XG4gICAgICAvLyB2dWUtbXVsdGlzZWxlY3QgZG9lc24ndCBzdXBwb3J0IHRoZSBhdXRvZm9jdXMgYXR0cmlidXRlLiBXZSBuZWVkIHRvXG4gICAgICAvLyBoYW5kbGUgaXQgaGVyZS5cbiAgICAgIHRoaXMuZm9jdXMoKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gQG92ZXJyaWRlXG4gICAgZ2V0TGlzdGVuZXJzKCkge1xuICAgICAgLy8gb3ZlcnJpZGUgYFR5cGVNaXhpbi5nZXRMaXN0ZW5lcnMoKWAgdG8gcmUtcm91dGUgJ2lucHV0JyB0byBgb25DaGFuZ2UoKWBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIGJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBpbnB1dDogdGhpcy5vbkNoYW5nZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhZGRUYWdPcHRpb24odGFnKSB7XG4gICAgICBpZiAodGhpcy50YWdnYWJsZSkge1xuICAgICAgICBjb25zdCB7IG9wdGlvbkxhYmVsLCBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgICBjb25zdCBvcHRpb24gPSBvcHRpb25MYWJlbCAmJiBvcHRpb25WYWx1ZVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgW29wdGlvbkxhYmVsXTogdGFnLFxuICAgICAgICAgICAgLy8gVE9ETzogRGVmaW5lIGEgc2ltcGxlIHNjaGVtYSBvcHRpb24gdG8gY29udmVydCB0aGUgdGFnIHZhbHVlIHRvXG4gICAgICAgICAgICAvLyBzb21ldGhpbmcgZWxzZSwgZS5nLiBgdG9UYWc6IHRhZyA9PiB1bmRlcnNjb3JlKHRhZylgXG4gICAgICAgICAgICBbb3B0aW9uVmFsdWVdOiB0YWdcbiAgICAgICAgICB9XG4gICAgICAgICAgOiB0YWdcbiAgICAgICAgdGhpcy5vcHRpb25zLnB1c2gob3B0aW9uKVxuICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJHJlZnMuZWxlbWVudC5hY3RpdmF0ZSgpXG4gICAgfSxcblxuICAgIG9uQWRkVGFnKHRhZykge1xuICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5hZGRUYWdPcHRpb24odGFnKVxuICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICB0aGlzLnZhbHVlLnB1c2godGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblNlYXJjaENoYW5nZShxdWVyeSkge1xuICAgICAgaWYgKHRoaXMuc2VhcmNoRmlsdGVyKSB7XG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgIC8vIFNldCBgc2VhcmNoZWRPcHRpb25zYCB0byBhbiBlbXB0eSBhcnJheSwgYmVmb3JlIGl0IHdpbGwgYmVcbiAgICAgICAgICAvLyBwb3B1bGF0ZWQgYXN5bmNocm9ub3VzbHkgd2l0aCB0aGUgYWN0dWFsIHJlc3VsdHMuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBbXVxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gYXdhaXQgdGhpcy5yZXNvbHZlRGF0YShcbiAgICAgICAgICAgICgpID0+IHRoaXMuc2VhcmNoRmlsdGVyKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHF1ZXJ5IH0pKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDbGVhciBgc2VhcmNoZWRPcHRpb25zYCB3aGVuIHRoZSBxdWVyeSBpcyBjbGVhcmVkLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgaW5wdXRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSAhPT0gbnVsbCA/IHRoaXMudmFsdWUgOiAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZSAhPT0gJydcbiAgICAgICAgICA/IHRoaXMuaXNJbnRlZ2VyID8gcGFyc2VJbnQodmFsdWUsIDEwKSA6IHBhcnNlRmxvYXQodmFsdWUpXG4gICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGlzSW50ZWdlcigpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzdGVwVmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGVwID09IG51bGwgJiYgIXRoaXMuaXNJbnRlZ2VyID8gJ2FueScgOiB0aGlzLnN0ZXBcbiAgICB9LFxuXG4gICAgZGVjaW1hbHM6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWNpbWFscycsIHtcbiAgICAgIHR5cGU6IE51bWJlclxuICAgIH0pLFxuXG4gICAgc3RlcDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0ZXAnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQoc3RlcCkge1xuICAgICAgICAvLyBGb3IgaW50ZWdlcnMsIHJvdW5kIHRoZSBzdGVwcyB0byB0aGUgbmV4dCBiaWdnZXIgaW50ZWdlciB2YWx1ZTpcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIHN0ZXAgIT0gbnVsbCA/IE1hdGguY2VpbChzdGVwKSA6IHN0ZXBcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1pbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ21pbicsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtaW4pIHtcbiAgICAgICAgbWluID0gbWluID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzBdXG4gICAgICAgICAgOiBtaW5cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1pbiAhPSBudWxsID8gTWF0aC5mbG9vcihtaW4pIDogbWluXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXg6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXgnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQobWF4KSB7XG4gICAgICAgIG1heCA9IG1heCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdyYW5nZScsIHsgdHlwZTogQXJyYXkgfSk/LlsxXVxuICAgICAgICAgIDogbWF4XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBtYXggIT0gbnVsbCA/IE1hdGguY2VpbChtYXgpIDogbWF4XG4gICAgICB9XG4gICAgfSksXG5cbiAgICByYW5nZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JhbmdlJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIGB0aGlzLm1pbmAsIGB0aGlzLm1heGAgYWxyZWFkeSBzdXBwb3J0IGBzY2hlbWEucmFuZ2VgLFxuICAgICAgICAvLyBzbyByZWRpcmVjdCB0aGVyZS5cbiAgICAgICAgY29uc3QgeyBtaW4sIG1heCB9ID0gdGhpc1xuICAgICAgICByZXR1cm4gbWluICE9IG51bGwgJiYgbWF4ICE9IG51bGwgPyBbbWluLCBtYXhdIDogdW5kZWZpbmVkXG4gICAgICB9LFxuXG4gICAgICBzZXQocmFuZ2UpIHtcbiAgICAgICAgLy8gUHJvdmlkZSBhIHNldHRlciB0aGF0IGRlbGVnYXRlcyB0byBgW3RoaXMubWluLCB0aGlzLm1heF1gLFxuICAgICAgICAvLyBzaW5jZSB0aG9zZSBhbHJlYWR5IGhhbmRsZSBgc2NoZW1hLnJhbmdlYC5cbiAgICAgICAgaWYgKGlzQXJyYXkocmFuZ2UpKSB7XG4gICAgICAgICAgW3RoaXMubWluLCB0aGlzLm1heF0gPSByYW5nZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHt9XG4gICAgICBjb25zdCB7IHJhbmdlLCBtaW4sIG1heCwgZGVjaW1hbHMsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yYW5nZSA9IHJhbmdlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobWluICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5taW4gPSBtaW5cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4ICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5tYXggPSBtYXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRlY2ltYWxzICE9IG51bGwpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgfSBlbHNlIGlmIChzdGVwKSB7XG4gICAgICAgIGNvbnN0IGRlY2ltYWxzID0gKGAke3N0ZXB9YC5zcGxpdCgnLicpWzFdIHx8ICcnKS5sZW5ndGhcbiAgICAgICAgaWYgKGRlY2ltYWxzID4gMCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmRlY2ltYWxzID0gZGVjaW1hbHNcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc0ludGVnZXIpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuaW50ZWdlciA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uc1xuICAgIH1cbiAgfVxufVxuIiwiXG5pbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgdHlwZT1cIm51bWJlclwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuICA6bWluPVwibWluXCJcbiAgOm1heD1cIm1heFwiXG4gIDpzdGVwPVwic3RlcFZhbHVlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB0eXBlPVwibnVtYmVyXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLy8gT25seSBzaG93IHNwaW4gYnV0dG9ucyBpZiB0aGUgbnVtYmVyIGNvbXBvbmVudCBkZWZpbmVzIGEgc3RlcCBzaXplLlxuICBpbnB1dFt0eXBlPVwibnVtYmVyXCJdOm5vdChbc3RlcF0pXG4gICAgJjo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgICAmOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uXG4gICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmVcbiAgICAgIG1hcmdpbjogMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWknXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnbnVtYmVyJywgJ2ludGVnZXInXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGlzSW50ZWdlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdpbnRlZ2VyJ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1vYmplY3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuKVxuICAuZGl0by1vYmplY3QtY29udGVudChcbiAgICB2LWlmPVwib2JqZWN0RGF0YVwiXG4gIClcbiAgICAvLyBTdXBwb3J0IHRoZSBzYW1lIHJlbmRlcmluZyBvcHRpb25zIGFzIFR5cGVMaXN0OlxuICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIG9iamVjdERhdGEsIGNvbnRleHQpXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIClcbiAgICBjb21wb25lbnQoXG4gICAgICB2LWVsc2UtaWY9XCJjb21wb25lbnRcIlxuICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KCkpXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZVxuICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgb2JqZWN0RGF0YSlcIlxuICAgIClcbiAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgOmRlbGV0YWJsZT1cIm9iamVjdERhdGEgJiYgZGVsZXRhYmxlXCJcbiAgICA6ZWRpdGFibGU9XCJvYmplY3REYXRhICYmIGVkaXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgOnBhdGg9XCJwYXRoXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShvYmplY3REYXRhKVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLW9iamVjdChcbiAgICB2LWlmPVwiaXNSZWFkeVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gICAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbiAgKVxuICAgIC5kaXRvLW9iamVjdC1jb250ZW50KFxuICAgICAgdi1pZj1cIm9iamVjdERhdGFcIlxuICAgIClcbiAgICAgIC8vIFN1cHBvcnQgdGhlIHNhbWUgcmVuZGVyaW5nIG9wdGlvbnMgYXMgVHlwZUxpc3Q6XG4gICAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgb2JqZWN0RGF0YSwgY29udGV4dClcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgIClcbiAgICAgIGNvbXBvbmVudChcbiAgICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoKSlcIlxuICAgICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1lbHNlXG4gICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIG9iamVjdERhdGEpXCJcbiAgICAgIClcbiAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgOmRlbGV0YWJsZT1cIm9iamVjdERhdGEgJiYgZGVsZXRhYmxlXCJcbiAgICAgIDplZGl0YWJsZT1cIm9iamVjdERhdGEgJiYgZWRpdGFibGVcIlxuICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDpwYXRoPVwicGF0aFwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0ob2JqZWN0RGF0YSlcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1vYmplY3RcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICBtYXJnaW46IDBcbiAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgIC5kaXRvLW9iamVjdC1jb250ZW50XG4gICAgICBmbGV4OiAwIDEgMTAwJVxuICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgZmxleDogMSAwIDAlXG4gICAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignb2JqZWN0Jywge1xuICBtaXhpbnM6IFtTb3VyY2VNaXhpbl0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgLy8gTm8gbmVlZCBmb3IgdHJhbnNmb3JtYXRpb24gaGVyZS4gU2VlIFR5cGVUcmVlTGlzdCBmb3IgZGV0YWlscy5cbiAgICByZXR1cm4gdHlwZVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IGRhdGE6IHRoaXMub2JqZWN0RGF0YSB9KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdwYW5lbCcsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gIG9taXRQYWRkaW5nOiB0cnVlLFxuXG4gIGdldFBhbmVsU2NoZW1hKHNjaGVtYSkge1xuICAgIC8vIEZvciBhIFR5cGVQYW5lbCwgdGhlIGNvbXBvbmVudCBzY2hlbWEgaXMgYWxzbyB0aGUgcGFuZWwgc2NoZW1hLCBidXRcbiAgICAvLyByZW1vdmUgdGhlIGFkZGVkIG5hbWUsIHNvIGl0IGRvZXNuJ3QgZ2V0IGFwcGVuZGVkIHR3aWNlIHRvIGRhdGEtcGF0aC5cbiAgICBjb25zdCB7IG5hbWUsIC4uLnBhbmVsIH0gPSBzY2hlbWFcbiAgICByZXR1cm4gcGFuZWxcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5wcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6dmFsdWU9XCJwcm9ncmVzc1ZhbHVlXCJcbiAgOm1heD1cInByb2dyZXNzTWF4XCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOnZhbHVlPVwicHJvZ3Jlc3NWYWx1ZVwiXG4gICAgOm1heD1cInByb2dyZXNzTWF4XCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncHJvZ3Jlc3MnLCB7XG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBwcm9ncmVzc1ZhbHVlKCkge1xuICAgICAgbGV0IHsgdmFsdWUsIHJhbmdlLCBzdGVwIH0gPSB0aGlzXG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgdmFsdWUgLT0gcmFuZ2VbMF1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcCkge1xuICAgICAgICAgIHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSAvIHN0ZXApICogc3RlcFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICcnXG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgcHJvZ3Jlc3NNYXgoKSB7XG4gICAgICBjb25zdCB7IHJhbmdlIH0gPSB0aGlzXG4gICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHJhbmdlWzFdIC0gcmFuZ2VbMF1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudWwuZGl0by1yYWRpby1idXR0b25zKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbilcbiAgbGkodi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiKVxuICAgIGxhYmVsXG4gICAgICBpbnB1dC5kaXRvLXJhZGlvLWJ1dHRvbihcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdWwuZGl0by1yYWRpby1idXR0b25zKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4gIClcbiAgICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgICBsYWJlbFxuICAgICAgICBpbnB1dC5kaXRvLXJhZGlvLWJ1dHRvbihcbiAgICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgICAgKVxuICAgICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1yYWRpby1idXR0b25zXG4gICAgbGFiZWxcbiAgICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3NcbiAgICAuZGl0by1yYWRpby1idXR0b25cbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdyYWRpbycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zZWN0aW9uKFxuICA6Y2xhc3M9XCJ7ICdkaXRvLXNlY3Rpb24tbGFiZWxsZWQnIDogISFzY2hlbWEubGFiZWwgfVwiXG4pXG4gIGRpdG8tcGFuZS5kaXRvLXNlY3Rpb24tcGFuZShcbiAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zZWN0aW9uKFxuICAgIDpjbGFzcz1cInsgJ2RpdG8tc2VjdGlvbi1sYWJlbGxlZCcgOiAhIXNjaGVtYS5sYWJlbCB9XCJcbiAgKVxuICAgIGRpdG8tcGFuZS5kaXRvLXNlY3Rpb24tcGFuZShcbiAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zZWN0aW9uXG4gICAgJi5kaXRvLXNlY3Rpb24tbGFiZWxsZWRcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmdcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0SXRlbUZvcm1TY2hlbWEsIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VjdGlvbicsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+ICFzY2hlbWEubmVzdGVkICYmICEoJ2RlZmF1bHQnIGluIHNjaGVtYSksXG4gIGRlZmF1bHROZXN0ZWQ6IGZhbHNlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcbiAgb21pdEZsZXhHcm93OiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMudmFsdWUgOiB0aGlzLmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEl0ZW1Gb3JtU2NoZW1hXG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCkge1xuICAgIC8vIFByb2Nlc3Mgc2VjdGlvbiBjb21wb25lbnRzIHNvIHRoZWlyIGZvcm1zIGdldCByZXNvbHZlZCB0b28uXG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwpXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuLmRpdG8tc2VsZWN0XG4gIHNlbGVjdChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIEBtb3VzZWRvd249XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIEBmb2N1cz1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJwb3B1bGF0ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICAgICAgKVxuICAgICAgICBvcHRncm91cChcbiAgICAgICAgICB2LWlmPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgOmxhYmVsPVwib3B0aW9uW2dyb3VwQnlMYWJlbF1cIlxuICAgICAgICApXG4gICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgdi1mb3I9XCJvcHQgaW4gb3B0aW9uW2dyb3VwQnlPcHRpb25zXVwiXG4gICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHQpXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdCkgfX1cbiAgICAgICAgb3B0aW9uKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZWxzZS1pZj1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICApXG4gICAgICBvcHRpb24oXG4gICAgICAgIDp2YWx1ZT1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihzZWxlY3RlZE9wdGlvbikgfX1cbiAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuICAuZGl0by1zZWxlY3RcbiAgICBzZWxlY3QoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICBAbW91c2Vkb3duPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICAgIEBmb2N1cz1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJwb3B1bGF0ZVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgb3B0Z3JvdXAoXG4gICAgICAgICAgICB2LWlmPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgICA6bGFiZWw9XCJvcHRpb25bZ3JvdXBCeUxhYmVsXVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgICB2LWZvcj1cIm9wdCBpbiBvcHRpb25bZ3JvdXBCeU9wdGlvbnNdXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0KVwiXG4gICAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdCkgfX1cbiAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICAgIClcbiAgICAgICAgb3B0aW9uKFxuICAgICAgICAgIDp2YWx1ZT1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKHNlbGVjdGVkT3B0aW9uKSB9fVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC8vIFRPRE86IE1vdmUgdG8gZGl0by11aVxuICAkc2VsZWN0LWFycm93LXJpZ2h0OiBjYWxjKCgkc2VsZWN0LWFycm93LXdpZHRoIC0gJHNlbGVjdC1hcnJvdy1zaXplKSAvIDIpXG5cbiAgLmRpdG8tc2VsZWN0XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG5cbiAgICBzZWxlY3RcbiAgICAgIHBhZGRpbmctcmlnaHQ6ICRzZWxlY3QtYXJyb3ctd2lkdGhcblxuICAgIC8vIEhhbmRsZSAuZGl0by13aWR0aC1maWxsIHNlcGFyYXRlbHkgZHVlIHRvIHJlcXVpcmVkIG5lc3Rpbmcgb2Ygc2VsZWN0OlxuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICBzZWxlY3RcbiAgICAgICAgd2lkdGg6IDEwMCVcblxuICAgICY6OmFmdGVyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICthcnJvdygkc2VsZWN0LWFycm93LXNpemUpXG4gICAgICBib3R0b206ICRzZWxlY3QtYXJyb3ctYm90dG9tXG4gICAgICByaWdodDogY2FsYygjeyRzZWxlY3QtYXJyb3ctcmlnaHR9ICsgI3skYm9yZGVyLXdpZHRofSlcblxuICAgICYuZGl0by1kaXNhYmxlZDo6YWZ0ZXJcbiAgICAgIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzZWxlY3QnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gRGlzYWJsZSBsYXp5LXBvcHVsYXRpb24gZm9yIG5vdy5cbiAgICAgIC8vIFRPRE86IFNldCB0byBgZmFsc2VgIE9uY2UgbGluZXRvIGUyZSB0ZXN0cyBhZGRyZXNzIHRoZWlyIGlzc3Vlcy5cbiAgICAgIHBvcHVsYXRlOiB0cnVlXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXNsaWRlclxuICBpbnB1dC5kaXRvLXJhbmdlKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB0eXBlPVwicmFuZ2VcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbiAgaW5wdXQtZmllbGQuZGl0by1udW1iZXIoXG4gICAgdi1pZj1cImlucHV0XCJcbiAgICB0eXBlPVwibnVtYmVyXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zbGlkZXJcbiAgICBpbnB1dC5kaXRvLXJhbmdlKFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICB0eXBlPVwicmFuZ2VcIlxuICAgICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIDptaW49XCJtaW5cIlxuICAgICAgOm1heD1cIm1heFwiXG4gICAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gICAgKVxuICAgIGlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICAgICAgdi1pZj1cImlucHV0XCJcbiAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIDptaW49XCJtaW5cIlxuICAgICAgOm1heD1cIm1heFwiXG4gICAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXNsaWRlclxuICAgIEBleHRlbmQgJWlucHV0XG4gICAgZGlzcGxheTogZmxleFxuICAgIC5kaXRvLXJhbmdlXG4gICAgICBmbGV4OiBhdXRvXG4gICAgICBoZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpKVxuICAgIC5kaXRvLW51bWJlclxuICAgICAgYm9yZGVyOiAwXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICB0ZXh0LWFsaWduOiByaWdodFxuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2xpZGVyJywge1xuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGlucHV0OiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuc3dpdGNoLWJ1dHRvbi5kaXRvLXN3aXRjaChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnN5bmM9XCJ0cnVlXCJcbiAgOmxhYmVscz1cImxhYmVsc1wiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHN3aXRjaC1idXR0b24uZGl0by1zd2l0Y2goXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpzeW5jPVwidHJ1ZVwiXG4gICAgOmxhYmVscz1cImxhYmVsc1wiXG4gICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXN3aXRjaFxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IFN3aXRjaEJ1dHRvbiB9IGZyb20gJ0BkaXRvanMvdWknXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzd2l0Y2gnLCB7XG4gIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBTd2l0Y2hCdXR0b25cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5sYWJlbHNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuaW5wdXQtZmllbGQuZGl0by10ZXh0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6dHlwZT1cImlucHV0VHlwZVwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQtZmllbGQuZGl0by10ZXh0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6dHlwZT1cImlucHV0VHlwZVwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpJ1xuXG5jb25zdCBtYXNrZWRQYXNzd29yZCA9ICcqKioqKioqKioqKioqKioqJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ3RleHQnLCAnZW1haWwnLCAndXJsJywgJ2hvc3RuYW1lJywgJ2RvbWFpbicsICd0ZWwnLCAncGFzc3dvcmQnLCAnY3JlZGl0Y2FyZCdcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gc2NoZW1hLnR5cGUgPT09ICdwYXNzd29yZCcsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpbnB1dFR5cGUoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjcmVkaXRjYXJkOiAndGV4dCcsXG4gICAgICAgIGhvc3RuYW1lOiAndGV4dCcsXG4gICAgICAgIGRvbWFpbjogJ3RleHQnXG4gICAgICB9W3RoaXMudHlwZV0gfHwgdGhpcy50eXBlXG4gICAgfSxcblxuICAgIGlucHV0VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB0aGlzLnR5cGUgPT09ICdwYXNzd29yZCcgJiZcbiAgICAgICAgICB0aGlzLnZhbHVlID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAhdGhpcy5mb2N1c2VkXG4gICAgICAgIClcbiAgICAgICAgICA/IG1hc2tlZFBhc3N3b3JkXG4gICAgICAgICAgOiB0aGlzLnZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHJ1bGUgPSB7XG4gICAgICAgIGVtYWlsOiAnZW1haWwnLFxuICAgICAgICB1cmw6ICd1cmwnLFxuICAgICAgICBob3N0bmFtZTogJ2hvc3RuYW1lJyxcbiAgICAgICAgZG9tYWluOiAnZG9tYWluJyxcbiAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZCcsXG4gICAgICAgIGNyZWRpdGNhcmQ6ICdjcmVkaXRjYXJkJ1xuICAgICAgfVt0aGlzLnR5cGVdXG4gICAgICByZXR1cm4gcnVsZSA/IHsgW3J1bGVdOiB0cnVlIH0gOiB7fVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG50ZXh0YXJlYS5kaXRvLXRleHRhcmVhLmRpdG8taW5wdXQoXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgOnJvd3M9XCJsaW5lc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tcmVzaXphYmxlJzogcmVzaXphYmxlIH1cIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdGV4dGFyZWEuZGl0by10ZXh0YXJlYS5kaXRvLWlucHV0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDpyb3dzPVwibGluZXNcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tcmVzaXphYmxlJzogcmVzaXphYmxlIH1cIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tdGV4dGFyZWFcbiAgICBkaXNwbGF5OiBibG9ja1xuICAgIHJlc2l6ZTogbm9uZVxuICAgIG1pbi1oZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpICsgI3sgMiAqICRpbnB1dC1wYWRkaW5nLXZlciB9KVxuICAgICYuZGl0by1yZXNpemFibGVcbiAgICAgIHJlc2l6ZTogdmVydGljYWxcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3RleHRhcmVhJywge1xuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgNFxuICAgIH0sXG5cbiAgICByZXNpemFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXNpemFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXRyZWUtbGlzdFxuICBkaXRvLXNjb3BlcyhcbiAgICB2LWlmPVwic2NvcGVzXCJcbiAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gIClcbiAgLmRpdG8tdHJlZS1wYW5lbFxuICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgOnNjaGVtYT1cInRyZWVTY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwidHJlZURhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwidHJlZURhdGFcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6b3Blbj1cInRydWVcIlxuICAgIClcbiAgICAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyKFxuICAgICAgdi1pZj1cImhhc0VkaXRhYmxlRm9ybXNcIlxuICAgIClcbiAgICAgIC8vIEluY2x1ZGUgYSByb3V0ZXItdmlldyBmb3IgdGhlIG9wdGlvbmFsIERpdG9Gb3JtSW5saW5lZFxuICAgICAgcm91dGVyLXZpZXdcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRyZWUtbGlzdFxuICAgIGRpdG8tc2NvcGVzKFxuICAgICAgdi1pZj1cInNjb3Blc1wiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgICApXG4gICAgLmRpdG8tdHJlZS1wYW5lbFxuICAgICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICAgIDpzY2hlbWE9XCJ0cmVlU2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwidHJlZURhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJ0cmVlRGF0YVwiXG4gICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICA6b3Blbj1cInRydWVcIlxuICAgICAgKVxuICAgICAgLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lcihcbiAgICAgICAgdi1pZj1cImhhc0VkaXRhYmxlRm9ybXNcIlxuICAgICAgKVxuICAgICAgICAvLyBJbmNsdWRlIGEgcm91dGVyLXZpZXcgZm9yIHRoZSBvcHRpb25hbCBEaXRvRm9ybUlubGluZWRcbiAgICAgICAgcm91dGVyLXZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by10cmVlLWxpc3RcbiAgICBAZXh0ZW5kICVmaWVsZFxuICAgIC5kaXRvLXRyZWUtcGFuZWxcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgICAgPiAuZGl0by10cmVlLWl0ZW1cbiAgICAgICAgZmxleDogMSAxIDI1JVxuICAgICAgPiAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyXG4gICAgICAgIGZsZXg6IDAgMSA3NSVcbiAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaFxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDFcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMVxuICAgICAgICBtYXJnaW46ICgtJGlucHV0LXBhZGRpbmctdmVyKSAoLSRpbnB1dC1wYWRkaW5nLWhvcilcbiAgICAgICAgbWFyZ2luLWxlZnQ6ICRpbnB1dC1wYWRkaW5nLWhvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgaGFzRm9ybVNjaGVtYSwgZ2V0Rm9ybVNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAndHJlZS1saXN0JywgJ3RyZWUtb2JqZWN0J1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7IGNvbnRhaW5lcjogdGhpcyB9XG4gIH0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgPT09ICd0cmVlLW9iamVjdCcgPyAnb2JqZWN0JyA6ICdsaXN0J1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGF0aCgpIHtcbiAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5wYXRoYDpcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LnBhdGhcbiAgICB9LFxuXG4gICAgZWRpdFBhdGgoKSB7XG4gICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIuZWRpdFBhdGhgOlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGguc2xpY2UodGhpcy5wYXRoPy5sZW5ndGgpXG4gICAgfSxcblxuICAgIHRyZWVEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgID8geyBbdGhpcy5uYW1lXTogdGhpcy52YWx1ZSB9XG4gICAgICAgIDogdGhpcy52YWx1ZVxuICAgIH0sXG5cbiAgICB0cmVlRGF0YVBhdGgoKSB7XG4gICAgICAvLyBSZW1vdmUgYG5hbWVgIGZyb20gYGRhdGFQYXRoYCwgYXMgaXQgaXMgYWRkZWVkXG4gICAgICAvLyB0byBgdHJlZURhdGFgIGFuZCBgdHJlZVNjaGVtYWBcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHRoaXMuZGF0YVBhdGguc2xpY2UoMCwgdGhpcy5kYXRhUGF0aC5sZW5ndGggLSB0aGlzLm5hbWUubGVuZ3RoKVxuICAgICAgICA6IHRoaXMuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgdHJlZVNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHtcbiAgICAgICAgICBjaGlsZHJlbjoge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgLi4udGhpcy5zY2hlbWFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgOiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBoYXNFZGl0YWJsZUZvcm1zKCkge1xuICAgICAgY29uc3QgaGFzRWRpdGFibGVGb3JtcyA9IHNjaGVtYSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmIChcbiAgICAgICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2VkaXRhYmxlJywge1xuICAgICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgc2NoZW1hXG4gICAgICAgICAgICB9KSB8fFxuICAgICAgICAgICAgc2NoZW1hLmNoaWxkcmVuICYmXG4gICAgICAgICAgICBoYXNFZGl0YWJsZUZvcm1zKHNjaGVtYS5jaGlsZHJlbilcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNFZGl0YWJsZUZvcm1zKHRoaXMuc2NoZW1hKVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgIG5lc3RlZCA9IHRydWUsIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgICAgbmVzdGVkLCBmbGF0dGVuLFxuICAgICAgLy8gUGFzcyBwcm9jZXNzKCkgdG8gYWRkIG1vcmUgcm91dGVzIHRvIGNoaWxkUm91dGVzOlxuICAgICAgKGNoaWxkUm91dGVzLCBsZXZlbCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgLy8gQWRkIGB0eXBlYCB0byB0aGUgbmVzdGVkIHRyZWUgbGlzdC5cbiAgICAgICAgICBjaGlsZHJlbi50eXBlID0gJ3RyZWUtbGlzdCdcbiAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2NoZW1hKFxuICAgICAgICAgICAgYXBpLCBjaGlsZHJlbiwgY2hpbGRyZW4ubmFtZSwgY2hpbGRSb3V0ZXMsIGxldmVsLFxuICAgICAgICAgICAgbmVzdGVkLCB0cnVlLCAvLyBQYXNzIGB0cnVlYCBmb3IgYGZsYXR0ZW5gIGluIHRyZWUgbGlzdHMuXG4gICAgICAgICAgICBwcm9jZXNzXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuICB9LFxuXG4gIGdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyhzY2hlbWEsIGNvbnRleHQpIHtcbiAgICAvLyBDb252ZXJ0IG5lc3RlZCBjaGlsZHJlbiBzY2hlbWEgdG8gc3RhbmQtYWxvbmUgc2NoZW1hIGNvbXBvbmVudCxcbiAgICAvLyBwcmVzZW50IGluIGVhY2ggb2YgdGhlIGZvcm1zLCBhcyByZXF1aXJlZCBieSBgcHJvY2Vzc1NjaGVtYURhdGEoKWBcbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICByZXR1cm4gZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0LCBjaGlsZHJlblxuICAgICAgPyBmb3JtID0+ICh7XG4gICAgICAgIC4uLmZvcm0sXG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAuLi5mb3JtLmNvbXBvbmVudHMsXG4gICAgICAgICAgW2NoaWxkcmVuLm5hbWVdOiBjaGlsZHJlblxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgOiBudWxsXG4gICAgKVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBmaWxlc2l6ZSB9IGZyb20gJ2ZpbGVzaXplJ1xuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoc2l6ZSkge1xuICByZXR1cm4gZmlsZXNpemUoc2l6ZSwgeyBiYXNlOiAxMCB9KVxufVxuIiwiXG4uZGl0by11cGxvYWRcbiAgdGFibGUuZGl0by10YWJsZS5kaXRvLXRhYmxlLXNlcGFyYXRvcnMuZGl0by10YWJsZS1iYWNrZ3JvdW5kXG4gICAgLy8tIFN0eWxpbmcgY29tZXMgZnJvbSBEaXRvVGFibGVIZWFkXG4gICAgdGhlYWQuZGl0by10YWJsZS1oZWFkXG4gICAgICB0clxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gTmFtZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU2l6ZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU3RhdHVzXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhblxuICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICAgIDpsaXN0PVwiZmlsZXNcIlxuICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgQGVuZD1cIm9uRW5kRHJhZ1wiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwiKGZpbGUsIGluZGV4KSBpbiBmaWxlc1wiXG4gICAgICAgIDprZXk9XCJmaWxlLmtleVwiXG4gICAgICApXG4gICAgICAgIHRkKHYtaHRtbD1cInJlbmRlckZpbGUoZmlsZSwgaW5kZXgpXCIpXG4gICAgICAgIHRkIHt7IGZpbGUuc2l6ZSB8IGZvcm1hdEZpbGVTaXplIH19XG4gICAgICAgIHRkXG4gICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkXCIpXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWQuZXJyb3JcIilcbiAgICAgICAgICAgICAgfCBFcnJvcjoge3sgZmlsZS51cGxvYWQuZXJyb3IgfX1cbiAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLmFjdGl2ZVwiKVxuICAgICAgICAgICAgICB8IFVwbG9hZGluZy4uLlxuICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuc3VjY2Vzc1wiKVxuICAgICAgICAgICAgICB8IFVwbG9hZGVkXG4gICAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgICAgfCBTdG9yZWRcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9uc1xuICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIEBjbGljaz1cImRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgICAgIClcbiAgICB0Zm9vdFxuICAgICAgdHJcbiAgICAgICAgdGQoOmNvbHNwYW49XCI0XCIpXG4gICAgICAgICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgICAgICAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwidXBsb2FkUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gZmFsc2VcIlxuICAgICAgICAgICAgICApIENhbmNlbCBBbGxcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImlzVXBsb2FkUmVhZHlcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IHRydWVcIlxuICAgICAgICAgICAgICApIFVwbG9hZCBBbGxcbiAgICAgICAgICAgICAgdnVlLXVwbG9hZC5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1hZGQtdXBsb2FkKFxuICAgICAgICAgICAgICAgIDppbnB1dC1pZD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICA6bmFtZT1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgOnBvc3QtYWN0aW9uPVwidXBsb2FkUGF0aFwiXG4gICAgICAgICAgICAgICAgOmV4dGVuc2lvbnM9XCJleHRlbnNpb25zXCJcbiAgICAgICAgICAgICAgICA6YWNjZXB0PVwiYWNjZXB0XCJcbiAgICAgICAgICAgICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgOnNpemU9XCJtYXhTaXplXCJcbiAgICAgICAgICAgICAgICB2LW1vZGVsPVwidXBsb2Fkc1wiXG4gICAgICAgICAgICAgICAgQGlucHV0LWZpbHRlcj1cImlucHV0RmlsdGVyXCJcbiAgICAgICAgICAgICAgICBAaW5wdXQtZmlsZT1cImlucHV0RmlsZVwiXG4gICAgICAgICAgICAgICAgcmVmPVwidXBsb2FkXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIlVwbG9hZCBGaWxlc1wiXG4gICAgICAgICAgICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXVwbG9hZFxuICAgIHRhYmxlLmRpdG8tdGFibGUuZGl0by10YWJsZS1zZXBhcmF0b3JzLmRpdG8tdGFibGUtYmFja2dyb3VuZFxuICAgICAgLy8tIFN0eWxpbmcgY29tZXMgZnJvbSBEaXRvVGFibGVIZWFkXG4gICAgICB0aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgICAgICAgdHJcbiAgICAgICAgICB0aFxuICAgICAgICAgICAgc3BhbiBOYW1lXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW4gU2l6ZVxuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuIFN0YXR1c1xuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuXG4gICAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgICA6bGlzdD1cImZpbGVzXCJcbiAgICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICAgIClcbiAgICAgICAgdHIoXG4gICAgICAgICAgdi1mb3I9XCIoZmlsZSwgaW5kZXgpIGluIGZpbGVzXCJcbiAgICAgICAgICA6a2V5PVwiZmlsZS5rZXlcIlxuICAgICAgICApXG4gICAgICAgICAgdGQodi1odG1sPVwicmVuZGVyRmlsZShmaWxlLCBpbmRleClcIilcbiAgICAgICAgICB0ZCB7eyBmaWxlLnNpemUgfCBmb3JtYXRGaWxlU2l6ZSB9fVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWRcIilcbiAgICAgICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkLmVycm9yXCIpXG4gICAgICAgICAgICAgICAgfCBFcnJvcjoge3sgZmlsZS51cGxvYWQuZXJyb3IgfX1cbiAgICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuYWN0aXZlXCIpXG4gICAgICAgICAgICAgICAgfCBVcGxvYWRpbmcuLi5cbiAgICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuc3VjY2Vzc1wiKVxuICAgICAgICAgICAgICAgIHwgVXBsb2FkZWRcbiAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICAgICAgfCBTdG9yZWRcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zXG4gICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJkZWxldGVGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgdGZvb3RcbiAgICAgICAgdHJcbiAgICAgICAgICB0ZCg6Y29sc3Bhbj1cIjRcIilcbiAgICAgICAgICAgIC5kaXRvLXVwbG9hZC1mb290ZXJcbiAgICAgICAgICAgICAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgIDp2YWx1ZT1cInVwbG9hZFByb2dyZXNzXCJcbiAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICkgQ2FuY2VsIEFsbFxuICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImlzVXBsb2FkUmVhZHlcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICApIFVwbG9hZCBBbGxcbiAgICAgICAgICAgICAgICB2dWUtdXBsb2FkLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWFkZC11cGxvYWQoXG4gICAgICAgICAgICAgICAgICA6aW5wdXQtaWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgICA6bmFtZT1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIDpwb3N0LWFjdGlvbj1cInVwbG9hZFBhdGhcIlxuICAgICAgICAgICAgICAgICAgOmV4dGVuc2lvbnM9XCJleHRlbnNpb25zXCJcbiAgICAgICAgICAgICAgICAgIDphY2NlcHQ9XCJhY2NlcHRcIlxuICAgICAgICAgICAgICAgICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgICAgOnNpemU9XCJtYXhTaXplXCJcbiAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1cGxvYWRzXCJcbiAgICAgICAgICAgICAgICAgIEBpbnB1dC1maWx0ZXI9XCJpbnB1dEZpbHRlclwiXG4gICAgICAgICAgICAgICAgICBAaW5wdXQtZmlsZT1cImlucHV0RmlsZVwiXG4gICAgICAgICAgICAgICAgICByZWY9XCJ1cGxvYWRcIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJVcGxvYWQgRmlsZXNcIlxuICAgICAgICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by11cGxvYWRcbiAgICAuZGl0by10YWJsZVxuICAgICAgdHJcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZVxuICAgIC5kaXRvLWJ1dHRvbi1hZGQtdXBsb2FkXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICA+ICpcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgIC5kaXRvLXVwbG9hZC1mb290ZXJcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmRcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXJcbiAgICAgIC5kaXRvLXByb2dyZXNzXG4gICAgICAgIGZsZXg6IGF1dG9cbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBPcmRlcmVkTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09yZGVyZWRNaXhpbi5qcydcbmltcG9ydCBWdWVVcGxvYWQgZnJvbSAndnVlLXVwbG9hZC1jb21wb25lbnQnXG5pbXBvcnQgVnVlRHJhZ2dhYmxlIGZyb20gJ3Z1ZWRyYWdnYWJsZSdcbmltcG9ydCBwYXJzZUZpbGVTaXplIGZyb20gJ2ZpbGVzaXplLXBhcnNlcidcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBmb3JtYXRGaWxlU2l6ZSB9IGZyb20gJy4uL3V0aWxzL3VuaXRzLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSwgZXNjYXBlSHRtbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCd1cGxvYWQnLCB7XG4gIGNvbXBvbmVudHM6IHsgVnVlVXBsb2FkLCBWdWVEcmFnZ2FibGUgfSxcbiAgZmlsdGVyczogeyBmb3JtYXRGaWxlU2l6ZSB9LFxuICBtaXhpbnM6IFtPcmRlcmVkTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVwbG9hZHM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdXBsb2FkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMudXBsb2FkXG4gICAgfSxcblxuICAgIGZpbGVzKCkge1xuICAgICAgcmV0dXJuIGFzRmlsZXModGhpcy52YWx1ZSlcbiAgICB9LFxuXG4gICAgbXVsdGlwbGU6IGdldFNjaGVtYUFjY2Vzc29yKCdtdWx0aXBsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIC8vIE5vIGNhbGxiYWNrIGFzIGl0J3MgdXNlZCBpbiBgcHJvY2Vzc1ZhbHVlKClgXG4gICAgICBjYWxsYmFjazogZmFsc2VcbiAgICB9KSxcblxuICAgIGV4dGVuc2lvbnM6IGdldFNjaGVtYUFjY2Vzc29yKCdleHRlbnNpb25zJywge1xuICAgICAgdHlwZTogW0FycmF5LCBTdHJpbmcsIFJlZ0V4cF1cbiAgICB9KSxcblxuICAgIGFjY2VwdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2FjY2VwdCcsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZ2V0KGFjY2VwdCkge1xuICAgICAgICByZXR1cm4gaXNBcnJheShhY2NlcHQpID8gYWNjZXB0LmpvaW4oJywnKSA6IGFjY2VwdFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4U2l6ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ21heFNpemUnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZ2V0KG1heFNpemUpIHtcbiAgICAgICAgcmV0dXJuIG1heFNpemUgPyBwYXJzZUZpbGVTaXplKG1heFNpemUpIDogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkcmFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkcmFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZHJhZ2dhYmxlKSB7XG4gICAgICAgIHJldHVybiBkcmFnZ2FibGUgJiYgdGhpcy5maWxlcy5sZW5ndGggPiAxXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGlzVXBsb2FkUmVhZHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRzLmxlbmd0aCAmJlxuICAgICAgICAhKHRoaXMudXBsb2FkLmFjdGl2ZSB8fCB0aGlzLnVwbG9hZC51cGxvYWRlZClcbiAgICB9LFxuXG4gICAgaXNVcGxvYWRBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRzLmxlbmd0aCAmJiB0aGlzLnVwbG9hZC5hY3RpdmVcbiAgICB9LFxuXG4gICAgdXBsb2FkUHJvZ3Jlc3MoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnVwbG9hZHMucmVkdWNlKCh0b3RhbCwgZmlsZSkgPT4gdG90YWwgKyBmaWxlLnByb2dyZXNzLCAwKSAvXG4gICAgICAgIHRoaXMudXBsb2Fkcy5sZW5ndGhcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdXBsb2FkUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlVXJsKHtcbiAgICAgICAgdHlwZTogJ3VwbG9hZCcsXG4gICAgICAgIHBhdGg6IHRoaXMuYXBpLm5vcm1hbGl6ZVBhdGgodGhpcy5kYXRhUGF0aClcbiAgICAgIH0pXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZW5kZXJGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IHJlbmRlciB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiByZW5kZXJcbiAgICAgICAgPyByZW5kZXIuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICB2YWx1ZTogZmlsZSxcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuZmlsZXMsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIDogZXNjYXBlSHRtbChmaWxlLm5hbWUpXG4gICAgfSxcblxuICAgIGRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgbmFtZSB9ID0gZmlsZVxuXG4gICAgICBpZiAoZmlsZSAmJiB3aW5kb3cuY29uZmlybShcbiAgICAgICAgYERvIHlvdSByZWFsbHkgd2FudCB0byAke3RoaXMudmVyYnMucmVtb3ZlfSAke25hbWV9P2ApXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGlmIChmaWxlLnVwbG9hZCkge1xuICAgICAgICAgIHRoaXMudXBsb2FkLnJlbW92ZShmaWxlLnVwbG9hZClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICB0aXRsZTogJ1N1Y2Nlc3NmdWxseSBSZW1vdmVkJyxcbiAgICAgICAgICB0ZXh0OiBgJHtuYW1lfSB3YXMgJHt0aGlzLnZlcmJzLmRlbGV0ZWR9LmBcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RmlsZUluZGV4KGZpbGUpIHtcbiAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlICYmIHRoaXMudmFsdWVcbiAgICAgICAgPyB0aGlzLnZhbHVlLmZpbmRJbmRleChpdCA9PiBpdC5pZCA9PT0gZmlsZS5pZClcbiAgICAgICAgOiAtMVxuICAgIH0sXG5cbiAgICBhZGRGaWxlKGZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKGZpbGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IFtmaWxlXVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gZmlsZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXBsYWNlRmlsZShmaWxlLCBuZXdGaWxlKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0RmlsZUluZGV4KGZpbGUpXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5ld0ZpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuJHNldCh0aGlzLnZhbHVlLCBpbmRleCwgbmV3RmlsZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3RmlsZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZW1vdmVGaWxlKGZpbGUpIHtcbiAgICAgIHRoaXMucmVwbGFjZUZpbGUoZmlsZSwgbnVsbClcbiAgICB9LFxuXG4gICAgaW5wdXRGaWxlKG5ld0ZpbGUsIG9sZEZpbGUpIHtcbiAgICAgIGlmIChuZXdGaWxlICYmICFvbGRGaWxlKSB7XG4gICAgICAgIGNvbnN0IHsgaWQsIG5hbWUsIHNpemUgfSA9IG5ld0ZpbGVcbiAgICAgICAgdGhpcy5hZGRGaWxlKHsgaWQsIG5hbWUsIHNpemUsIHVwbG9hZDogbmV3RmlsZSB9KVxuICAgICAgfVxuICAgICAgaWYgKG5ld0ZpbGUgJiYgb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IHN1Y2Nlc3MsIGVycm9yIH0gPSBuZXdGaWxlXG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgICAgY29uc3QgZmlsZSA9IG5ld0ZpbGUucmVzcG9uc2VbMF1cbiAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgZmlsZS51cGxvYWQgPSBuZXdGaWxlXG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSB1cGxvYWQgZmlsZSBvYmplY3Qgd2l0aCB0aGUgZmlsZSBvYmplY3QgcmVjZWl2ZWRcbiAgICAgICAgICAgIC8vIGZyb20gdGhlIHVwbG9hZCByZXNwb25zZS5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUZpbGUobmV3RmlsZSwgZmlsZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGVycm9yKSB7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IHtcbiAgICAgICAgICAgIGFib3J0OiAnVXBsb2FkIGFib3J0ZWQnLFxuICAgICAgICAgICAgZGVuaWVkOiAnVXBsb2FkIGRlbmllZCcsXG4gICAgICAgICAgICBleHRlbnNpb246IGBVbnN1cHBvcnRlZCBmaWxlLXR5cGU6ICR7bmV3RmlsZS5uYW1lfWAsXG4gICAgICAgICAgICBuZXR3b3JrOiAnTmV0d29yayBlcnJvciBlbmNvdW50ZXJlZCBkdXJpbmcgdXBsb2FkJyxcbiAgICAgICAgICAgIHNlcnZlcjogJ1NlcnZlciBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdXBsb2FkJyxcbiAgICAgICAgICAgIHNpemU6IGBGaWxlIGlzIHRvbyBsYXJnZTogJHtmb3JtYXRGaWxlU2l6ZShuZXdGaWxlLnNpemUpfWAsXG4gICAgICAgICAgICB0aW1lb3V0OiAnVGltZW91dCBvY2N1cnJlZCBkdXJpbmcgdXBsb2FkJ1xuXG4gICAgICAgICAgfVtlcnJvcl0gfHwgYFVua25vd24gRmlsZSBVcGxvYWQgRXJyb3I6ICcke2Vycm9yfSdgXG4gICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIHRpdGxlOiAnRmlsZSBVcGxvYWQgRXJyb3InLFxuICAgICAgICAgICAgdGV4dFxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaW5wdXRGaWx0ZXIobmV3RmlsZS8qLCBvbGRGaWxlLCBwcmV2ZW50ICovKSB7XG4gICAgICBjb25zdCB4aHIgPSBuZXdGaWxlPy54aHJcbiAgICAgIGlmICh0aGlzLmFwaS5jb3JzPy5jcmVkZW50aWFscyAmJiB4aHIgJiYgIXhoci53aXRoQ3JlZGVudGlhbHMpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUpIHtcbiAgICAvLyBGaWx0ZXIgb3V0IGFsbCBuZXdseSBhZGRlZCBmaWxlcyB0aGF0IHdlcmVuJ3QgYWN0dWFsbHkgdXBsb2FkZWQuXG4gICAgY29uc3QgZmlsZXMgPSBhc0ZpbGVzKHZhbHVlKVxuICAgICAgLm1hcChcbiAgICAgICAgKHsgdXBsb2FkLCAuLi5maWxlIH0pID0+ICF1cGxvYWQgfHwgdXBsb2FkLnN1Y2Nlc3MgPyBmaWxlIDogbnVsbFxuICAgICAgKVxuICAgICAgLmZpbHRlcihmaWxlID0+IGZpbGUpXG4gICAgcmV0dXJuIHNjaGVtYS5tdWx0aXBsZSA/IGZpbGVzIDogZmlsZXNbMF0gfHwgbnVsbFxuICB9XG59KVxuXG5mdW5jdGlvbiBhc0ZpbGVzKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA/IGFzQXJyYXkodmFsdWUpIDogW11cbn1cblxuPC9zY3JpcHQ+XG4iLCJjb25zdCBsb2dnZWREZXByZWNhdGlvbnMgPSBuZXcgU2V0KClcblxuZXhwb3J0IGZ1bmN0aW9uIGRlcHJlY2F0ZShtZXNzYWdlKSB7XG4gIC8vIE9ubHkgbG9nIGRlcHJlY2F0aW9uIG1lc3NhZ2VzIG9uY2UuXG4gIGlmICghbG9nZ2VkRGVwcmVjYXRpb25zLmhhcyhtZXNzYWdlKSkge1xuICAgIGxvZ2dlZERlcHJlY2F0aW9ucy5hZGQobWVzc2FnZSlcbiAgICBjb25zb2xlLndhcm4obWVzc2FnZSlcbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgW1xuICAnY3JlYXRlJywgJ2NyZWF0ZWQnLFxuICAnc2F2ZScsICdzYXZlZCcsXG4gICdzdWJtaXQnLCAnc3VibWl0dGVkJyxcbiAgJ2RlbGV0ZScsICdkZWxldGVkJyxcbiAgJ2VkaXQnLCAnZWRpdGVkJyxcbiAgJ2Nsb3NlJywgJ2Nsb3NlZCcsXG4gICdjYW5jZWwnLCAnY2FuY2VsbGVkJyxcbiAgJ2RyYWcnLCAnZHJhZ2dlZCdcbl0ucmVkdWNlKCh2ZXJicywgdmVyYikgPT4ge1xuICB2ZXJic1t2ZXJiXSA9IHZlcmJcbiAgcmV0dXJuIHZlcmJzXG59LCB7fSlcbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IFZ1ZU1vZGFsIGZyb20gJ3Z1ZS1qcy1tb2RhbCdcbmltcG9ydCBWdWVSb3V0ZXIgZnJvbSAndnVlLXJvdXRlcidcbmltcG9ydCBWdWVOb3RpZmljYXRpb25zIGZyb20gJ3Z1ZS1ub3RpZmljYXRpb24nXG5pbXBvcnQge1xuICBpc1N0cmluZywgaXNBYnNvbHV0ZVVybCwgbWVyZ2UsIGh5cGhlbmF0ZSwgY2FtZWxpemUsIGRlZmF1bHRGb3JtYXRzXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgKiBhcyBjb21wb25lbnRzIGZyb20gJy4vY29tcG9uZW50cy9pbmRleC5qcydcbmltcG9ydCAqIGFzIHR5cGVzIGZyb20gJy4vdHlwZXMvaW5kZXguanMnXG5pbXBvcnQgRGl0b1Jvb3QgZnJvbSAnLi9jb21wb25lbnRzL0RpdG9Sb290LnZ1ZSdcbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGRlcHJlY2F0ZSB9IGZyb20gJy4vdXRpbHMvZGVwcmVjYXRlLmpzJ1xuaW1wb3J0IHZlcmJzIGZyb20gJy4vdmVyYnMuanMnXG5cblZ1ZS5jb25maWcucHJvZHVjdGlvblRpcCA9IGZhbHNlXG5cbi8vIEFsbCBnbG9iYWwgcGx1Z2lucyB0aGF0IG5lZWQgdG8gYmUgcmVnaXN0ZXJlZCBvbiBgVnVlYDpcblZ1ZS51c2UoVnVlUm91dGVyKVxuVnVlLnVzZShWdWVNb2RhbCwgeyBkeW5hbWljOiB0cnVlIH0pXG5WdWUudXNlKFZ1ZU5vdGlmaWNhdGlvbnMpXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9BZG1pbiB7XG4gIGNvbnN0cnVjdG9yKGVsLCB7XG4gICAgLy8gYGRpdG9gIGNvbnRhaW5zIHRoZSBiYXNlIGFuZCBhcGkgc2V0dGluZ3MgcGFzc2VkIGZyb20gYEFkbWluQ29udHJvbGxlcmBcbiAgICBkaXRvID0ge30sXG4gICAgYXBpLFxuICAgIHZpZXdzID0ge30sXG4gICAgLi4ub3B0aW9uc1xuICB9ID0ge30pIHtcbiAgICB0aGlzLmVsID0gZWxcbiAgICAvLyBNZXJnZSBpbiBgYXBpYCBzZXR0aW5ncyBhcyBwYXNzZWQgZnJvbSBgY29uZmlnLmFkbWluYCBhbmQgdGhyb3VnaCB0aGVcbiAgICAvLyBgQWRtaW5Db250cm9sbGVyYCB3aXRoIGBhcGlgIHZhbHVlcyBmcm9tIGZyb20gJ2FkbWluL2luZGV4LmpzJ1xuICAgIC8vIE5PVEU6IGBBZG1pbkNvbnRyb2xsZXJgIHByb3ZpZGVzIGBkaXRvLmFwaS5iYXNlYFxuICAgIHRoaXMuYXBpID0gYXBpID0gbWVyZ2UoeyBiYXNlOiAnLycgfSwgZGl0by5hcGksIGFwaSlcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG5cbiAgICAvLyBTZXR1cCBkZWZhdWx0IGFwaSBzZXR0dGluZ3M6XG4gICAgYXBpLmxvY2FsZSB8fD0gJ2VuLVVTJ1xuICAgIGFwaS5mb3JtYXRzID0gbWVyZ2Uoe30sIGRlZmF1bHRGb3JtYXRzLCBhcGkuZm9ybWF0cylcbiAgICBhcGkucmVxdWVzdCB8fD0gb3B0aW9ucyA9PiByZXF1ZXN0KGFwaSwgb3B0aW9ucylcbiAgICBhcGkuZ2V0QXBpVXJsIHx8PSBwYXRoID0+IGdldEFwaVVybChhcGksIHBhdGgpXG4gICAgYXBpLmlzQXBpUmVxdWVzdCB8fD0gdXJsID0+IGlzQXBpUmVxdWVzdChhcGksIHVybClcbiAgICAvLyBTZXR0aW5nIGBhcGkubm9ybWFsaXplUGF0aHMgPSB0cnVlIChwbHVyYWwpIHNldHMgYm90aDpcbiAgICAvLyBgYXBpLm5vcm1hbGl6ZVBhdGggPSBoeXBoZW5hdGVgIGFuZCBgYXBpLmRlbm9ybWFsaXplUGF0aCA9IGNhbWVsaXplYFxuICAgIGFwaS5ub3JtYWxpemVQYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aHMgPyBoeXBoZW5hdGUgOiB2YWwgPT4gdmFsXG4gICAgYXBpLmRlbm9ybWFsaXplUGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGhzID8gY2FtZWxpemUgOiB2YWwgPT4gdmFsXG5cbiAgICAvLyBBbGxvdyB0aGUgY29uZmlndXJhdGlvbiBvZiBhbGwgYXV0aCByZXNvdXJjZXMsIGxpa2Ugc286XG4gICAgLy8gYXBpLnVzZXJzID0ge1xuICAgIC8vICAgcGF0aDogJy9hZG1pbnMnLFxuICAgIC8vICAgLy8gVGhlc2UgYXJlIHRoZSBkZWZhdWx0czpcbiAgICAvLyAgIGxvZ2luOiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dpbicsXG4gICAgLy8gICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgLy8gICB9LFxuICAgIC8vICAgbG9nb3V0OiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dvdXQnLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIHNlc3Npb246IHtcbiAgICAvLyAgICAgcGF0aDogJ3Nlc3Npb24nLFxuICAgIC8vICAgICBtZXRob2Q6ICdnZXQnXG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIGNvbnN0IHVzZXJzID0gYXBpLnVzZXJzID0gZ2V0UmVzb3VyY2UoYXBpLnVzZXJzLCB7XG4gICAgICB0eXBlOiAnY29sbGVjdGlvbidcbiAgICB9KSB8fCB7fVxuICAgIHVzZXJzLmxvZ2luID0gZ2V0UmVzb3VyY2UodXNlcnMubG9naW4gfHwgJ2xvZ2luJywge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICB1c2Vycy5sb2dvdXQgPSBnZXRSZXNvdXJjZSh1c2Vycy5sb2dvdXQgfHwgJ2xvZ291dCcsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMuc2Vzc2lvbiA9IGdldFJlc291cmNlKHVzZXJzLnNlc3Npb24gfHwgJ3Nlc3Npb24nLCB7XG4gICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIG9mIHJlc291cmNlIHBhdGggaGFuZGxlcnM6XG4gICAgLy8gYXBpLnJlc291cmNlcyA9IHtcbiAgICAvLyAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAvLyAgICAgcmV0dXJuIHJlc291cmNlLnBhcmVudFxuICAgIC8vICAgICAgID8gYCR7cmVzb3VyY2UucGF0aH0/JHtyZXNvdXJjZS5wYXJlbnQucGF0aH1faWQ9JHtcbiAgICAvLyAgICAgICAgICByZXNvdXJjZS5wYXJlbnQuaWR9YFxuICAgIC8vICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgICBhbnkocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXNbcmVzb3VyY2U/LnR5cGVdIHx8IHRoaXMuZGVmYXVsdFxuICAgICAgICByZXR1cm4gcmVzb3VyY2UgJiYgaGFuZGxlci5jYWxsKHRoaXMsIHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgZGVmYXVsdChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gdGhpcy5hbnkocmVzb3VyY2UucGFyZW50KVxuICAgICAgICByZXR1cm4gcGFyZW50UGF0aFxuICAgICAgICAgID8gYCR7cGFyZW50UGF0aH0vJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAgIH0sXG5cbiAgICAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdChyZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIG1lbWJlcihyZXNvdXJjZSkge1xuICAgICAgICAvLyBOT1RFOiBXZSBhc3N1bWUgdGhhdCBhbGwgbWVtYmVycyBoYXZlIHJvb3QtbGV2ZWwgY29sbGVjdGlvbiByb3V0ZXMsXG4gICAgICAgIC8vIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBuZXN0aW5nIG9mIChzdWItKWNvbGxlY3Rpb24gcm91dGVzLlxuICAgICAgICByZXR1cm4gYCR7cmVzb3VyY2UucGF0aH0vJHtyZXNvdXJjZS5pZH1gXG4gICAgICB9LFxuXG4gICAgICB1cGxvYWQocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gRGl0byBTZXJ2ZXIgaGFuZGxlcyB1cGxvYWQgcm91dGVzIG9uIHRoZSBjb2xsZWN0aW9uIHJlc291cmNlOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb2xsZWN0aW9uKHJlc291cmNlLnBhcmVudCl9L3VwbG9hZC8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgfSxcblxuICAgICAgLi4uYXBpLnJlc291cmNlc1xuICAgIH1cblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgLyBleHRlbmRpbmcgb2YgaGVhZGVyczpcbiAgICAvLyBhcGkuaGVhZGVycyA9IHtcbiAgICAvLyAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAvLyB9XG4gICAgYXBpLmhlYWRlcnMgPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgLi4uYXBpLmhlYWRlcnNcbiAgICB9XG5cbiAgICBpZiAoaXNTdHJpbmcoZWwpKSB7XG4gICAgICBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpXG4gICAgfVxuXG4gICAgdGhpcy5yb290ID0gbmV3IFZ1ZSh7XG4gICAgICBlbCxcbiAgICAgIHJvdXRlcjogbmV3IFZ1ZVJvdXRlcih7XG4gICAgICAgIG1vZGU6ICdoaXN0b3J5JyxcbiAgICAgICAgYmFzZTogZGl0by5iYXNlLFxuICAgICAgICBsaW5rQWN0aXZlQ2xhc3M6ICcnLFxuICAgICAgICBsaW5rRXhhY3RBY3RpdmVDbGFzczogJydcbiAgICAgIH0pLFxuICAgICAgY29tcG9uZW50czogeyBEaXRvUm9vdCB9LFxuICAgICAgLy8gTW9zdCBpbmplY3RzIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmUgcmVhY3RpdmVuZXNzIGFjcm9zc1xuICAgICAgLy8gcHJvdmlkZS9pbmplY3QsIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvaXNzdWVzLzcwMTcjaXNzdWVjb21tZW50LTQ4MDkwNjY5MVxuICAgICAgcHJvdmlkZToge1xuICAgICAgICBhcGksXG4gICAgICAgIC8vIEEgZGVmYXVsdCBsaXN0IG9mIHZlcmJzIGFyZSBwcm92aWRlZCBieSAkdmVyYnMoKSBhbmQgY2FuIGJlXG4gICAgICAgIC8vIG92ZXJyaWRkZW4gYXQgYW55IHBvaW50IGluIHRoZSBjb21wb25lbnQgaGllcmFyY2h5LlxuICAgICAgICAkdmVyYnM6ICgpID0+IHZlcmJzLFxuICAgICAgICAvLyBQcm92aWRlIGRlZmF1bHRzIHNvIERpdG9NaXhpbiBjYW4gaW5qZWN0IHRoZW0gZm9yIGFsbCBjb21wb25lbnRzOlxuICAgICAgICAvLyAgIGluamVjdDogWyAgJyRpc1BvcHVsYXRlZCcsICckc2NoZW1hQ29tcG9uZW50JywgJyRyb3V0ZUNvbXBvbmVudCcgXVxuICAgICAgICAkdmlld3M6ICgpID0+IHt9LFxuICAgICAgICAkaXNQb3B1bGF0ZWQ6ICgpID0+IHRydWUsXG4gICAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRyb3V0ZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJGRhdGFDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJGRpYWxvZ0NvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHBhbmVsQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gICAgICB9LFxuXG4gICAgICByZW5kZXI6IGNyZWF0ZUVsZW1lbnQgPT4gY3JlYXRlRWxlbWVudChEaXRvUm9vdCwge1xuICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgcm9vdCBjb250YWluZXIncyBpZCwgYXMgcmVxdWlyZWQgYnkgaG90LXJlbG9hZGluZzpcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBpZDogZWwuaWRcbiAgICAgICAgfSxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICB1bnJlc29sdmVkVmlld3M6IHZpZXdzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgfSxcbiAgICAgICAgLy8gVGhpcyBtYXkgb25seSBiZSBuZWVkZWQgdG8gYXZvaWQgdHJlZS1zaGFja2luZyBvZiB0aGVzZSBjb21wb25lbnRzLFxuICAgICAgICAvLyBzaW5jZSB0aGV5IGFjdHVhbGx5IGhhbmRsZSByZWdpc3RyeSBpbnRlcm5hbGx5IGFscmVhZHkuXG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAuLi5jb21wb25lbnRzLFxuICAgICAgICAgIC4uLnR5cGVzXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHJlZ2lzdGVyKHR5cGUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gVHlwZUNvbXBvbmVudC5yZWdpc3Rlcih0eXBlLCBvcHRpb25zKVxuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBzdXBlcihgUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZTogJHtyZXNwb25zZS5zdGF0dXN9ICgke3Jlc3BvbnNlLnN0YXR1c1RleHR9KWApXG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdChhcGksIHtcbiAgdXJsLFxuICBtZXRob2QgPSAnZ2V0JyxcbiAgLy8gVE9ETzogYHJlcXVlc3QucGFyYW1zYCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgcXVlcnlgIG9uIDIwMjItMTEtMDEsXG4gIC8vIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55bW9yZS5cbiAgcGFyYW1zID0gbnVsbCxcbiAgcXVlcnkgPSBwYXJhbXMgfHwgbnVsbCxcbiAgaGVhZGVycyA9IG51bGwsXG4gIGRhdGEgPSBudWxsXG59KSB7XG4gIGlmIChwYXJhbXMpIHtcbiAgICBkZXByZWNhdGUoYHJlcXVlc3QucGFyYW1zIGlzIGRlcHJlY2F0ZWQuIFVzZSBhY3Rpb24ubWV0aG9kIGFuZCBhY3Rpb24ucGF0aCBpbnN0ZWFkLmApXG4gIH1cblxuICBjb25zdCBpc0FwaVJlcXVlc3QgPSBhcGkuaXNBcGlSZXF1ZXN0KHVybClcbiAgaWYgKGlzQXBpUmVxdWVzdCAmJiAhaXNBYnNvbHV0ZVVybCh1cmwpKSB7XG4gICAgdXJsID0gYXBpLmdldEFwaVVybCh1cmwpXG4gIH1cblxuICBjb25zdCBzZWFyY2ggPSBxdWVyeSAmJiBuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5KS50b1N0cmluZygpXG4gIGlmIChzZWFyY2gpIHtcbiAgICB1cmwgPSBgJHt1cmx9PyR7c2VhcmNofWBcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAuLi4oZGF0YSAmJiB7IGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpIH0pLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLihpc0FwaVJlcXVlc3QgJiYgYXBpLmhlYWRlcnMpLFxuICAgICAgLi4uaGVhZGVyc1xuICAgIH0sXG4gICAgY3JlZGVudGlhbHM6IGlzQXBpUmVxdWVzdCAmJiBhcGkuY29ycz8uY3JlZGVudGlhbHNcbiAgICAgID8gJ2luY2x1ZGUnXG4gICAgICA6ICdzYW1lLW9yaWdpbidcbiAgfSlcblxuICBpZiAocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpPy5pbmNsdWRlcygnYXBwbGljYXRpb24vanNvbicpKSB7XG4gICAgcmVzcG9uc2UuZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICB9XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IocmVzcG9uc2UpXG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbmZ1bmN0aW9uIGdldEFwaVVybChhcGksIHBhdGgpIHtcbiAgLy8gVXNlIHNhbWUgYXBwcm9hY2ggYXMgYXhpb3MgYGNvbWJpbmVVUkxzKClgIHRvIGpvaW4gYmFzZVVSTCB3aXRoIHBhdGg6XG4gIHJldHVybiBgJHthcGkudXJsLnJlcGxhY2UoL1xcLyskLywgJycpfS8ke3BhdGgucmVwbGFjZSgvXlxcLysvLCAnJyl9YFxufVxuXG5mdW5jdGlvbiBpc0FwaVJlcXVlc3QoYXBpLCB1cmwpIHtcbiAgcmV0dXJuICFpc0Fic29sdXRlVXJsKHVybCkgfHwgdXJsLnN0YXJ0c1dpdGgoYXBpLnVybClcbn1cbiJdLCJuYW1lcyI6WyJhcHBTdGF0ZSIsImFwcGVuZERhdGFQYXRoIiwiZGF0YVBhdGgiLCJ0b2tlbiIsInBhcnNlUGFyZW50RGF0YVBhdGgiLCJwYXRoIiwicGFyc2VEYXRhUGF0aCIsInBhcnNlSXRlbURhdGFQYXRoIiwibmVzdGVkIiwiZ2V0SXRlbURhdGFQYXRoIiwibm9ybWFsaXplRGF0YVBhdGgiLCJwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aCIsImlzSW50ZWdlciIsImdldFBhcmVudEl0ZW1EYXRhUGF0aCIsImdldEl0ZW0iLCJyb290SXRlbSIsImdldFZhbHVlQXREYXRhUGF0aCIsImdldFBhcmVudEl0ZW0iLCJnZXRMYXN0RGF0YVBhdGhUb2tlbiIsImdldExhc3REYXRhUGF0aE5hbWUiLCJnZXRMYXN0RGF0YVBhdGhJbmRleCIsImluZGV4IiwidGVtcG9yYXJ5SWQiLCJzZXRUZW1wb3JhcnlJZCIsImRhdGEiLCJpZEtleSIsImlzVGVtcG9yYXJ5SWQiLCJpZCIsImlzUmVmZXJlbmNlIiwiY29udGV4dHMiLCJnZXQiLCJjb250ZXh0Iiwia2V5IiwiZGVmYXVsdFZhbHVlIiwib2JqZWN0IiwidmFsdWUiLCJpc0Z1bmN0aW9uIiwic2V0IiwiRGl0b0NvbnRleHQiLCJjb21wb25lbnQiLCJfYSIsInBhcmVudEl0ZW0iLCJvcHRpb25zIiwibG9jYXRpb24iLCJyZXNvdXJjZSIsIkVtaXR0ZXJNaXhpbiIsImV2ZW50IiwiY2FsbGJhY2siLCJpc0FycmF5IiwiZXYiLCJpc1BsYWluT2JqZWN0IiwiZXZlbnRzIiwiY2FsbGJhY2tzIiwib24iLCJhcmdzIiwiZW50cnkiLCJjYiIsInF1ZXVlIiwicmVzb2x2ZSIsIm5leHQiLCJyZXN1bHQiLCJyZXMiLCJlcnJvciIsInRhcmdldCIsInR5cGVDaGVja2VycyIsImlzQm9vbGVhbiIsImlzTnVtYmVyIiwiaXNTdHJpbmciLCJpc0RhdGUiLCJpc09iamVjdCIsImlzUmVnRXhwIiwidG9Cb29sZWFuIiwidG9OdW1iZXIiLCJ0b1N0cmluZyIsInRvRGF0ZSIsInRvQXJyYXkiLCJhc0FycmF5IiwidG9PYmplY3QiLCJ0b1JlZ0V4cCIsInR5cGVDb252ZXJ0ZXJzIiwiaXNNYXRjaGluZ1R5cGUiLCJ0eXBlcyIsInR5cGUiLCJjb252ZXJ0VHlwZSIsImNvbnZlcnRlciIsImhhc1Jlc291cmNlIiwic2NoZW1hIiwiZ2V0UmVzb3VyY2UiLCJkZWZhdWx0cyIsInBhcmVudCIsImRlZnMiLCJnZXRNZW1iZXJSZXNvdXJjZSIsInBpY2tCeSIsIkRpdG9NaXhpbiIsInVpZCIsImtleU9yRGF0YVBhdGgiLCJkZWYiLCJjb252ZXJ0ZWQiLCJuYW1lIiwibGFiZWxpemUiLCJidXR0b24iLCJ2ZXJiIiwiZHJhZ2dhYmxlIiwiZmFsbGJhY2siLCJxdWVyeSIsImNvbXBvbmVudHMiLCJidXR0b25zIiwic2V0dGluZ3MiLCJyZWplY3QiLCJEaXRvQ29tcG9uZW50IiwidXJsIiwic2VhcmNoIiwibWV0aG9kIiwiaW50ZXJuYWwiLCJjaGVja1VzZXIiLCJyZXNwb25zZSIsImVxdWFscyIsImNhY2hlIiwiY2FjaGVQYXJlbnQiLCJsb2FkQ2FjaGUiLCJjYWNoZUtleSIsImxvY2FsZSIsImZvcm1hdCIsImZpbGVuYW1lIiwiYSIsImJvZHkiLCJhY2Nlc3NvciIsIndhdGNoIiwiaGFuZGxlcnMiLCJleHByIiwiYWRkRXZlbnQiLCJoeXBoZW5hdGUiLCJoYXNMaXN0ZW5lcnMiLCJwYXJlbnRIYXNMaXN0ZW5lcnMiLCJnZXRDb250ZXh0IiwicGFyYW1zIiwiY3JlZGl0Y2FyZCIsImlzQ3JlZGl0Q2FyZCIsImRlY2ltYWxzIiwibWF0Y2giLCJlbWFpbCIsImlzRW1haWwiLCJob3N0bmFtZSIsImlzSG9zdG5hbWUiLCJkb21haW4iLCJpc0RvbWFpbiIsImludGVnZXIiLCJtYXgiLCJtaW4iLCJwYXNzd29yZCIsInJhbmdlIiwicmVxdWlyZWQiLCJpc1VybCIsIlZhbGlkYXRpb25NaXhpbiIsIm5vdGlmeSIsImlzVmFsaWQiLCJydWxlIiwic2V0dGluZyIsInZhbGlkYXRvciIsInZhbGlkYXRpb25zIiwidmFsaWRhdGUiLCJtZXNzYWdlIiwiYWRkTGFiZWwiLCJlcnJvcnMiLCJmb2N1cyIsImdldFNjaGVtYUFjY2Vzc29yIiwiZ2V0U3RvcmVBY2Nlc3NvciIsInVpZE1hcCIsImdldFVpZCIsIml0ZW1JZCIsIlNjaGVtYUdyYXBoIiwiX19wdWJsaWNGaWVsZCIsInN1YkdyYXBoIiwicGFydCIsInJlbGF0ZWREYXRhUGF0aCIsIl9iIiwibmFub2lkIiwiZmxhdHRlbiIsImdyYXBoIiwiZW50cmllcyIsIiRzZXR0aW5ncyIsInN1YktleSIsInNvdXJjZVNjaGVtYSIsImNsaXBib2FyZCIsInJlbGF0ZWQiLCJyZWZlcmVuY2UiLCJzb3VyY2UiLCJyZWxhdGlvbiIsInZhbHVlcyIsInJlbW92ZUlkIiwicmVmZXJlbmNlSWQiLCJyZWZLZXkiLCJyZXZWYWx1ZSIsInR5cGVDb21wb25lbnRzIiwidW5rbm93blR5cGVSZXBvcnRlZCIsInJlZ2lzdGVyVHlwZUNvbXBvbmVudCIsImdldFR5cGVDb21wb25lbnQiLCJhbGxvd051bGwiLCJmb3JFYWNoU2NoZW1hIiwic2NoZW1hcyIsImZvckVhY2hTY2hlbWFDb21wb25lbnQiLCJzb21lU2NoZW1hQ29tcG9uZW50IiwicmVzb2x2ZVNjaGVtYSIsInVud3JhcE1vZHVsZSIsImlzUHJvbWlzZSIsImlzTW9kdWxlIiwia2V5cyIsInJlc29sdmVTY2hlbWFzIiwidW5yZXNvbHZlZFNjaGVtYXMiLCJyZXNvbHZlSXRlbSIsIml0ZW0iLCJyZXNvbHZlUGFuZWxzIiwicGFuZWxzIiwicHJvY2Vzc1ZpZXciLCJhcGkiLCJyb3V0ZXMiLCJjaGlsZHJlbiIsInByb2Nlc3NSb3V0ZVNjaGVtYSIsImlzU2luZ2xlQ29tcG9uZW50VmlldyIsInByb2Nlc3NDb21wb25lbnQiLCJwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyIsImxldmVsIiwiZ2V0VHlwZU9wdGlvbnMiLCJwcm9taXNlcyIsInByb2Nlc3NGb3JtcyIsImZvcm0iLCJmb3JtcyIsInJlc29sdmVGb3JtIiwiaGFzRm9ybVNjaGVtYSIsImhhc011bHRpcGxlRm9ybVNjaGVtYXMiLCJnZXRWaWV3U2NoZW1hIiwidmlldyIsInZpZXdTY2hlbWEiLCJ2aWV3Q29tcG9uZW50IiwiZ2V0Vmlld0VkaXRQYXRoIiwiZ2V0Rm9ybVNjaGVtYXMiLCJtb2RpZnlGb3JtIiwiY29tcGFjdCIsImdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zIiwiZ2V0SXRlbUZvcm1TY2hlbWEiLCJoYXNMYWJlbCIsImlzQ29tcGFjdCIsImlzSW5saW5lZCIsImlzTmVzdGVkIiwic2hvdWxkT21pdFBhZGRpbmciLCJnZXREZWZhdWx0VmFsdWUiLCJjbG9uZSIsImlnbm9yZU1pc3NpbmdWYWx1ZSIsInR5cGVPcHRpb25zIiwiaGFzTGFiZWxzIiwiY2hlY2tDb21wb25lbnRzIiwic2V0RGVmYXVsdHMiLCJwcm9jZXNzU2NoZW1hRGF0YSIsImNvbXB1dGVWYWx1ZSIsInJvb3REYXRhIiwiY29tcHV0ZSIsIlZ1ZSIsImNsb25lSXRlbSIsImNvcHkiLCJvcmRlcktleSIsInByb2Nlc3NEYXRhIiwic2NoZW1hT25seSIsInByb2Nlc3NlZERhdGEiLCJ3cmFwUHJpbWl0aXZlcyIsImIiLCJpZDEiLCJpZDIiLCJleGNsdWRlIiwicHJvY2VzcyIsInByb2Nlc3NWYWx1ZSIsInByb2Nlc3NCZWZvcmUiLCJwcm9jZXNzQWZ0ZXIiLCJwcm9jZXNzQ29tcG9uZW50cyIsImdldERhdGFQYXRoIiwiY29tcG9uZW50U2NoZW1hIiwiY29tcG9uZW50RGF0YVBhdGgiLCJwcm9jZXNzSXRlbSIsInByb2Nlc3NlZEl0ZW0iLCJ0YWIiLCJwYW5lbCIsImdldEFsbFBhbmVsU2NoZW1hcyIsImdldE5hbWVkU2NoZW1hcyIsImRlc2NyaXB0aW9ucyIsImFycmF5IiwidG9TY2hlbWEiLCJjYW1lbGl6ZSIsImdldEJ1dHRvblNjaGVtYXMiLCJnZXRUeXBlIiwic2NoZW1hT3JUeXBlIiwiZ2V0U291cmNlVHlwZSIsIl9jIiwiZ2V0UGFuZWxTY2hlbWEiLCJ0YWJDb21wb25lbnQiLCJnZXRQYW5lbFNjaGVtYXMiLCJzY2hlbWFDb21wb25lbnQiLCJpc09iamVjdFNvdXJjZSIsImlzTGlzdFNvdXJjZSIsImdldEl0ZW1JZCIsImdldEl0ZW1VaWQiLCJUeXBlTWl4aW4iLCJwYXJzZSIsImxhYmVsIiwibmF0aXZlRmllbGQiLCJ0ZXh0RmllbGQiLCJhdHRyaWJ1dGVzIiwibGlzdGVuZXJzIiwiYWRkIiwiZWxlbWVudCIsIm1peGlucyIsImNvbXAiLCJjdG9yIiwiRGl0b1VzZXIiLCJyb2xlcyIsInJvbGUiLCJTY2hlbWFQYXJlbnRNaXhpbiIsInNjaGVtYUNvbXBvbmVudHMiLCJWYWxpZGF0b3JNaXhpbiIsIml0IiwiUm91dGVNaXhpbiIsInRvIiwiZnJvbSIsIm1hdGNoZWQiLCJpIiwicmVjb3JkIiwiYnJlYWRjcnVtYiIsInJvdXRlQ29tcG9uZW50cyIsIm9rIiwidGVtcGxhdGVQYXRoIiwicm9vdFBhdGgiLCJnZXRDb21tb25QcmVmaXgiLCJyZW5kZXIiLCJfdm0iLCJfaCIsInN0YXRpY1JlbmRlckZucyIsIl9fdnVlMl9zY3JpcHQiLCJpc0xvYWRpbmciLCJEb21NaXhpbiIsInJlbW92ZSIsImhhbmRsZXIiLCJhZGRFdmVudHMiLCIkZXZlbnQiLCJlcnIiLCJ0aXRsZSIsInRleHQiLCJsb2ciLCJzdHJpcFRhZ3MiLCJub3RpZmljYXRpb25zIiwiZHVyYXRpb25GYWN0b3IiLCJkdXJhdGlvbiIsImFkZGl0aW9uYWxDb21wb25lbnRzIiwicmVkaXJlY3RBZnRlckxvZ2luIiwibG9naW5EYXRhIiwidXNlciIsIkRpdG9WaWV3Iiwicm91dGUiLCJTcGlubmVyIiwiUHVsc2VMb2FkZXIiLCJzaXplIiwiY29sb3IiLCJwcm9wcyIsIlB1bGxkb3duTWl4aW4iLCJzdGFydFRpbWUiLCJvcGVuIiwiZGlhbG9nRGF0YSIsImNvbnRlbnQiLCJhc09iamVjdCIsInByZWZpeCIsInN1ZmZpeCIsIkl0ZW1NaXhpbiIsImV4dGVuZGVkIiwiaXRlbUxhYmVsIiwiZm9ybUxhYmVsIiwiZ2V0Rm9ybUxhYmVsIiwiY29sdW1ucyIsImhhZExhYmVsIiwiVHJhbnNpdGlvbkhlaWdodCIsInBhbmUiLCJjdXJyZW50VGFiIiwiZmlyc3QiLCJkZWZhdWx0VGFiIiwiZGF0YVBhdGhPck5hbWUiLCJleHBhbmQiLCJjb21wb25lbnRzQnlEYXRhUGF0aCIsImRhdGFQYXRocyIsImNoZWNrIiwiZmllbGQiLCJ1bm1hdGNoZWQiLCJlcnJzIiwiZnVsbERhdGFQYXRoIiwiZGF0YVBhdGhQYXJ0cyIsImZvdW5kIiwicHJvcGVydHkiLCJzdWJDb21wb25lbnRzIiwicmVnaXN0cnkiLCJlbnRyaWVzQnlEYXRhUGF0aCIsIl9yZWYiLCJuZXN0ZWREYXRhUGF0aCIsInN0b3JlIiwicGFyc2VGcmFjdGlvbiIsImRpdmlkZW5kIiwiZGl2aXNvciIsIndpZHRoIiwiZGlzYWJsZWQiLCJjb250YWluZXJDbGFzcyIsImJhc2lzIiwiZ3JvdyIsInNocmluayIsImJhc2lzSXNBdXRvIiwidGFiU2NoZW1hIiwiYnV0dG9uU2NoZW1hIiwiYnV0dG9uRGF0YVBhdGgiLCJub2RlIiwiY2FwaXRhbGl6ZSIsImNsaXBib2FyZERhdGEiLCJwYXN0ZSIsInJlcG9ydCIsImpzb24iLCJfZCIsImRlaW5kZW50IiwiJHNjaGVtYSIsIl9lIiwiTG9hZGluZ01peGluIiwidXBkYXRlUm9vdCIsInVwZGF0ZVZpZXciLCJSZXNvdXJjZU1peGluIiwiYW1vdW50IiwicGFnZSIsInN0YXJ0IiwidmVyYnMiLCJjbGVhciIsImxvYWRpbmdPcHRpb25zIiwicmVxdWVzdCIsInNldERhdGEiLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwibm90aWZ5U3VjY2VzcyIsIm5vdGlmeUVycm9yIiwiaXNDcmVhdGluZyIsInByb3ZpZGVzRGF0YSIsIm1lcmdlIiwiZGF0YVBhcnRzIiwicGF0aFBhcnRzIiwicm91dGVQYXJ0cyIsImxhc3REYXRhUGFydCIsImwiLCJkYXRhUGFydCIsIm1haW5TY2hlbWFDb21wb25lbnQiLCJuZXdWYWx1ZSIsIm9sZFZhbHVlIiwicHJlc2VudCIsImNsb3NlRm9ybSIsImdldFZlcmIiLCJidXR0dG9uUmVzb3VyY2UiLCJzdWNjZXNzIiwiX3Jlc291cmNlIiwiX21ldGhvZCIsIkRpdG9Gb3JtIiwic2NvcGUiLCJuYXZpZ2F0ZSIsIlBhZ2luYXRpb24iLCJPcmRlcmVkTWl4aW4iLCJvbGRJbmRleCIsIm5ld0luZGV4IiwibGlzdCIsInBhZ2luYXRpb25SYW5nZSIsIm9mZnNldCIsIlZ1ZURyYWdnYWJsZSIsImNoaWxkcmVuU2NoZW1hIiwiZWRpdFBhdGgiLCJjaGlsZHJlbk9wZW4iLCJudW1DaGlsZHJlbiIsImNyZWF0YWJsZSIsImVkaXRhYmxlIiwiY29sdW1uIiwib3JkZXIiLCJlc2NhcGVIdG1sIiwiaCIsIlR5cGVDb21wb25lbnQiLCJkZWZpbml0aW9uIiwiJCRhIiwiJCRlbCIsIiQkYyIsIiQkdiIsIiQkaSIsIkRhdGFNaXhpbiIsInJlc29sdmVDb3VudGVyIiwiYXN5bmNFbnRyeSIsInJlc29sdmVkRGF0YSIsImxvYWQiLCJPcHRpb25zTWl4aW4iLCJjb252ZXJ0VmFsdWUiLCJjb252ZXJ0IiwiZmlsdGVyIiwiZGVib3VuY2UiLCJkZWJvdW5jZUFzeW5jIiwib3B0aW9uIiwiZ3JvdXBlZCIsInJlc3VsdHMiLCJncm91cCIsImZpbmRPcHRpb24iLCJncm91cEJ5Iiwib3B0aW9uVmFsdWUiLCJvcHRpb25MYWJlbCIsInByb2Nlc3NSZWxhdGUiLCJmbGFzayIsIkNvZGVGbGFzayIsImNoYW5nZWQiLCJpZ25vcmVXYXRjaCIsImlnbm9yZVVwZGF0ZSIsIm9uQ2hhbmdlIiwib25Gb2N1cyIsIm9uQmx1ciIsInNldENvZGUiLCJjb2RlIiwic2V0VmFsdWUiLCJUcmlnZ2VyIiwiU2tldGNoUGlja2VyIiwidGlueWNvbG9yIiwiZm9jdXNlZCIsIkRhdGVQaWNrZXIiLCJUaW1lUGlja2VyIiwiRGF0ZVRpbWVQaWNrZXIiLCJTb3VyY2VNaXhpbiIsImRlZmF1bHRTb3J0IiwiZGlyZWN0aW9uIiwiY29sbGFwc2libGUiLCJsaXN0RGF0YSIsImxlbmd0aCIsIm9uQ29tcGxldGUiLCJvcGVuZWQiLCJjYWxsT25Db21wbGV0ZSIsInJvdXRlQ29tcG9uZW50IiwiaW5saW5lZCIsInBhcmFtIiwibWV0YSIsImZvcm1NZXRhIiwiY2hpbGRSb3V0ZXMiLCJnZXRQYXRoV2l0aFBhcmFtIiwic291cmNlUGF0aCIsImZvcm1Sb3V0ZSIsImZsYXRSb3V0ZXMiLCJzdWJSb3V0ZXMiLCJjaGlsZFJvdXRlIiwiZmlsdGVyQ29tcG9uZW50cyIsImRhdGVGb3JtYXQiLCJnZXRGaWx0ZXJzUGFuZWwiLCJmaWx0ZXJzIiwicHJveHkiLCJwYXJzZUZpbHRlcnNEYXRhIiwiZ2V0RmlsdGVyc0NvbXBvbmVudHMiLCJmb3JtYXRGaWx0ZXJzRGF0YSIsImNvbXBzIiwiZ2V0Q29tcG9uZW50c0ZvckZpbHRlciIsImZpbHRlcnNEYXRhIiwiZ2V0TGlzdENvbXBvbmVudCIsIm9iaiIsImZpbHRlcnNEYXRhUGF0aCIsImljb24iLCJpc0FjdGl2ZSIsIm9uQ2xpY2siLCJFZGl0b3JDb250ZW50IiwiRWRpdG9yTWVudUJhciIsIkljb24iLCJjb21tYW5kIiwibWFya0J1dHRvbnMiLCJiYXNpY05vZGVCdXR0b25zIiwib3RoZXJOb2RlQnV0dG9ucyIsInRvb2xCdXR0b25zIiwiZW5hYmxlUnVsZXMiLCJzZXRWYWx1ZURlYm91bmNlZCIsImdldFZhbHVlIiwib25VcGRhdGUiLCJnZXRIVE1MIiwiRWRpdG9yIiwiZ2V0UG9pbnQiLCJ4IiwieSIsInByZXZZIiwiaGVpZ2h0IiwibW91c2Vtb3ZlIiwiYXR0cnMiLCJkaWFsb2dDb21wb25lbnQiLCJocmVmIiwibWFya3MiLCJub2RlcyIsInRvb2xzIiwiQm9sZCIsIkl0YWxpYyIsIlVuZGVybGluZSIsIlN0cmlrZSIsIlNtYWxsIiwiQ29kZSIsIkxpbmtXaXRoVGl0bGUiLCJCbG9ja3F1b3RlIiwiQ29kZUJsb2NrIiwiSGFyZEJyZWFrIiwiSGVhZGluZyIsIkhvcml6b250YWxSdWxlIiwiTGlzdEl0ZW0iLCJCdWxsZXRMaXN0IiwiT3JkZXJlZExpc3QiLCJIaXN0b3J5IiwiZXh0ZW5zaW9uIiwic2V0dGluZ3NOYW1lIiwiYWRkQnV0dG9uIiwiaWdub3JlQWN0aXZlIiwiZGVzY3JpcHRpb24iLCJzZXR0aW5nTmFtZSIsInVuZGVyc2NvcmUiLCJhdHRyIiwiTWFyayIsInRvZ2dsZU1hcmsiLCJMaW5rIiwiZG9tIiwiVnVlTXVsdGlzZWxlY3QiLCJwbGFjZWhvbGRlciIsInNlYXJjaGFibGUiLCJ0YWdnYWJsZSIsInRhZyIsIk51bWJlck1peGluIiwic3RlcCIsIklucHV0RmllbGQiLCIkJHNlbGVjdGVkVmFsIiwibyIsInZhbCIsIm9wdCIsIlN3aXRjaEJ1dHRvbiIsIm1hc2tlZFBhc3N3b3JkIiwiaGFzRWRpdGFibGVGb3JtcyIsImZvcm1hdEZpbGVTaXplIiwiZmlsZXNpemUiLCJmaWxlIiwiVnVlVXBsb2FkIiwiYXNGaWxlcyIsImFjY2VwdCIsIm1heFNpemUiLCJwYXJzZUZpbGVTaXplIiwidG90YWwiLCJuZXdGaWxlIiwib2xkRmlsZSIsInhociIsImZpbGVzIiwidXBsb2FkIiwibG9nZ2VkRGVwcmVjYXRpb25zIiwiZGVwcmVjYXRlIiwiVnVlUm91dGVyIiwiVnVlTW9kYWwiLCJWdWVOb3RpZmljYXRpb25zIiwiRGl0b0FkbWluIiwiZWwiLCJkaXRvIiwidmlld3MiLCJkZWZhdWx0Rm9ybWF0cyIsImdldEFwaVVybCIsImlzQXBpUmVxdWVzdCIsInVzZXJzIiwicGFyZW50UGF0aCIsIkRpdG9Sb290IiwiY3JlYXRlRWxlbWVudCIsIlJlcXVlc3RFcnJvciIsImhlYWRlcnMiLCJpc0Fic29sdXRlVXJsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxNQUFlQSxLQUFBO0FBQUEsRUFDYixPQUFPO0FBQUEsRUFDUCxpQkFBaUIsQ0FBRTtBQUFBLEVBQ25CLE1BQU07QUFBQSxFQUNOLFdBQVcsQ0FBRTtBQUFBLEVBQ2IsYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUNqQjtBQ0hPLFNBQVNDLEVBQWVDLEdBQVVDLEdBQU87QUFDOUMsU0FBT0QsSUFDSCxHQUFHQSxLQUFZQyxNQUNmQTtBQUNOO0FBRU8sU0FBU0MsR0FBb0JGLEdBQVU7QUFDNUMsUUFBTUcsSUFBT0MsRUFBY0osQ0FBUTtBQUNuQyxTQUFBRyxLQUFBLFFBQUFBLEVBQU0sT0FDQ0E7QUFDVDtBQU1PLFNBQVNFLEdBQWtCTCxHQUFVTSxJQUFTLElBQU87QUFDMUQsU0FBT0EsSUFBU0osR0FBb0JGLENBQVEsSUFBSUksRUFBY0osQ0FBUTtBQUN4RTtBQUVPLFNBQVNPLEdBQWdCUCxHQUFVTSxJQUFTLElBQU87QUFDeEQsU0FBT0UsRUFBa0JILEdBQWtCTCxHQUFVTSxDQUFNLENBQUM7QUFDOUQ7QUFFTyxTQUFTRyxHQUF3QlQsR0FBVU0sSUFBUyxJQUFPO0FBQ2hFLFFBQU1ILElBQU9FLEdBQWtCTCxHQUFVTSxDQUFNO0FBQy9DLE1BQUlILEdBQU07QUFHUixRQUFJRjtBQUNKO0FBQ0UsTUFBQUEsSUFBUUUsRUFBSyxJQUFLO0FBQUEsV0FDWEYsS0FBUyxRQUFRUyxFQUFVLENBQUNULENBQUs7QUFFMUMsUUFBSUEsS0FBUztBQUNYLGFBQU9FO0FBQUEsRUFFVjtBQUNELFNBQU87QUFDVDtBQUVPLFNBQVNRLEdBQXNCWCxHQUFVTSxJQUFTLElBQU87QUFDOUQs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QSxVQUFBLGFBQUE7QUFBQSxFQUNBLFFBQUEsQ0FBQW1PLENBQUE7QUFBQSxFQUVBLFVBQUE7QUFDQSxXQUFBO0FBQUEsTUFDQSxRQUFBLE1BQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxpQkFBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLFVBQUEsT0FBQSxHQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsU0FBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLE9BQUEsQ0FBQSxHQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLGVBQUEsQ0FBQTtBQUFBLE1BQ0EsWUFBQTtBQUFBLE1BQ0EsY0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxnQkFBQTtBQUNBLGFBQUEsS0FBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQTtBQUNBLGFBQUEsS0FBQSxlQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFDQSxTQUFBLFNBQUEsUUFBQSxTQUFBLFNBQUEsaUJBR0EsS0FBQSxTQUFBLGtCQUFBLENBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxNQUFBLFVBQUE7QUFHQSxTQUFBLE1BQUEsVUFBQTtBQUFBLE1BQ0EsT0FBQSxDQUFBbFMsTUFBQTtBQUNBLFFBQUFBLEVBQUEsT0FBQSxRQUFBLGFBQUEsTUFDQSxLQUFBLFNBQUEsY0FBQTtBQUFBLE1BRUE7QUFBQSxNQUVBLE9BQUEsQ0FBQUEsTUFBQTtBQUNBLFFBQUFBLEVBQUEsU0FBQSxVQUNBLEtBQUEsU0FBQSxjQUFBO0FBQUEsTUFFQTtBQUFBLElBQ0EsQ0FBQTtBQUNBLFFBQUE7QUFDQSxXQUFBLGFBQUEsSUFDQSxNQUFBLEtBQUEsY0FDQSxNQUFBLEtBQUEsYUFBQSxJQUVBLE1BQUEsS0FBQSxNQUFBO0FBQUEsSUFFQSxTQUFBdVMsR0FBQTtBQUNBLGNBQUEsTUFBQUEsQ0FBQTtBQUFBLElBQ0E7QUFDQSxTQUFB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QTtBQUFBLEVBRUEsT0FBQTtBQUFBLElBQ0EsWUFBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLFNBQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxTQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLE9BQUEsQ0FBQSxHQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUVBLFVBQUE4UCxJQUFBckgsR0FBQSxLQUFBLElBQUE7QUFDQSxlQUFBdE4sS0FBQSxLQUFBO0FBQ0EsTUFBQUEsS0FBQTJVLE1BQ0FBLEVBQUEzVSxLQUFBO0FBR0EsV0FBQTtBQUFBLE1BQ0EsY0FBQTtBQUFBLE1BQ0EsWUFBQTJVO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLGtCQUFBO0FBQ0EsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE9BQUE7QUFDQSxhQUFBLEtBQUEsUUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxZQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFDQSxhQUFBLE9BQUE7QUFBQSxRQUNBLE9BQUEsUUFBQTdFLEdBQUEsS0FBQSxPQUFBLENBQUEsRUFBQTtBQUFBLFVBR0EsQ0FBQSxDQUFBOVAsR0FBQXNELENBQUEsT0FDQXRELE1BQUEsWUFBQSxDQUFBc0QsRUFBQSxXQUNBQSxJQUFBO0FBQUEsWUFDQSxHQUFBQTtBQUFBLFlBQ0EsUUFBQTtBQUFBLGNBQ0EsT0FBQSxNQUFBLEtBQUEsT0FBQTtBQUFBLFlBQ0E7QUFBQSxVQUNBLElBRUEsQ0FBQXRELEdBQUFzRCxDQUFBO0FBQUEsUUFFQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBO0FBQ0EsYUFBQSxDQUFBLENBQUEsS0FBQSxjQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFDQSxTQUFBLGVBQUE2UCxHQUFBLFFBQUE7QUFBQSxNQUNBLE9BQUEsTUFBQTtBQUNBLFFBQUEsS0FBQSxhQUFBLE1BQUEsWUFBQSxNQUNBLEtBQUEsT0FBQTtBQUFBLE1BRUE7QUFBQSxJQUNBLENBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxZQUFBO0FBQ0EsU0FBQSxhQUFBLE9BQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxTQUFBO0FBQUEsSUFDQSxPQUFBO0FBQ0EsV0FBQSxPQUFBLEtBQUEsS0FBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQWhULEdBQUE7QUFDQSxXQUFBLFFBQUEsUUFBQUEsQ0FBQSxHQUNBLEtBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE9BQUFBLEdBQUE7QUFDQSxXQUFBLFFBQUEsT0FBQUEsQ0FBQSxHQUNBLEtBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7QUFDQSxXQUFBLFFBQUEsS0FBQSxVQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQTtBQUNBLFdBQUEsUUFBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFDQSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsSUEsSUFBSXVTLEtBQVMsV0FBWTtBQUN2QixNQUFJQyxJQUFJLE1BQ0pDLElBQUdELEVBQUksZ0JBQ1B6QyxJQUFHeUMsRUFBSSxNQUFNLE1BQUlDO0FBRXJCLFNBQU9ELEVBQUksVUFBVXpDLEVBQUd5QyxFQUFJLFFBQVEsT0FBT0EsRUFBSSxLQUFLO0FBQUEsSUFDbEQsS0FBSztBQUFBLElBQ0wsT0FBT0EsRUFBSTtBQUFBLElBQ1gsT0FBT0EsRUFBSTtBQUFBLEVBQ1osR0FBRSxDQUFDQSxFQUFJLEdBQUdBLEVBQUksR0FBR0EsRUFBSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSUEsRUFBSSxHQUFFO0FBQ2pELEdBRUlFLEtBQWtCLENBQUU7QUNFeEIsTUFBQUMsS0FBQWpPLEVBQUEsVUFBQSxnQkFBQTtBQUFBLEVBQ0EsT0FBQTtBQUFBLElBQ0EsS0FBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLE9BQUE7QUFBQSxJQUNBLFNBQUEsRUFBQSxNQUFBLENBQUEsUUFBQSxNQUFBLEVBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxVQUFBO0FBQ0EsWUFBQSxFQUFBLFNBQUErUCxFQUFBLElBQUE7QUFDQSxhQUFBdlMsRUFBQXVTLENBQUEsSUFBQUEsSUFBQSxFQUFBLE1BQUFBLEVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EsR0FBQSxLQUFBLE9BQUE7QUFBQSxRQUNBLEdBQUFDLEdBQUEsS0FBQSxRQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQTtBQUNBLGFBQUE7QUFBQSxRQUNBLEdBQUEsS0FBQSxPQUFBO0FBQUEsUUFDQSxHQUFBQSxHQUFBLEtBQUEsUUFBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQ0EsQ0FBQTtBQUVBLFNBQUFBLEdBQUExVSxHQUFBO0FBQ0EsU0FBQXlDLEVBQUF6QyxDQUFBLEVBQUEsT0FBQSxDQUFBRCxHQUFBcUIsT0FDQVksRUFBQVosQ0FBQSxJQUNBckIsRUFBQXFCLEtBQUEsS0FDQWMsRUFBQWQsQ0FBQSxLQUNBLE9BQUEsT0FBQXJCLEdBQUFxQixDQUFBLEdBRUFyQixJQUNBLEVBQUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25EQSxJQUFJd1MsS0FBUyxXQUFZO0FBQ3ZCLE1BQUlDLElBQUksTUFDSkMsSUFBR0QsRUFBSSxnQkFDUHpDLElBQUd5QyxFQUFJLE1BQU0sTUFBSUM7QUFFckIsU0FBT0QsRUFBSSxRQUFRQSxFQUFJLGNBQWN6QyxFQUFHeUMsRUFBSSxLQUFLQSxFQUFJLEdBQUc7QUFBQSxJQUN0RCxLQUFLO0FBQUEsSUFDTCxhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsTUFDTCxlQUFlQSxFQUFJO0FBQUEsSUFDcEI7QUFBQSxFQUNMLEdBQUtBLEVBQUksU0FBUyxHQUFHLENBQUNBLEVBQUksY0FBY3pDLEVBQUcsT0FBTztBQUFBLElBQzlDLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxNQUNMLGVBQWUsQ0FBQ3lDLEVBQUk7QUFBQSxJQUNyQjtBQUFBLEVBQ0wsQ0FBRyxJQUFJQSxFQUFJLEdBQUUsR0FBSUEsRUFBSSxHQUFHQSxFQUFJLFVBQVUsU0FBVW1DLEdBQVF6VixHQUFPO0FBQzNELFdBQU82USxFQUFHLGdCQUFnQjtBQUFBLE1BQ3hCLEtBQUssVUFBVTdRO0FBQUEsTUFDZixhQUFhO0FBQUEsTUFDYixPQUFPO0FBQUEsUUFDTCxLQUFPO0FBQUEsUUFDUCxTQUFXeVY7QUFBQSxNQUNaO0FBQUEsSUFDUCxDQUFLO0FBQUEsRUFDTCxDQUFHLEdBQUc1RSxFQUFHLFNBQVM7QUFBQSxJQUNkLE9BQU87QUFBQSxNQUNMLEtBQU95QyxFQUFJO0FBQUEsSUFDWjtBQUFBLElBQ0QsVUFBVTtBQUFBLE1BQ1IsV0FBYUEsRUFBSSxHQUFHQSxFQUFJLElBQUk7QUFBQSxJQUM3QjtBQUFBLEVBQ0wsQ0FBRyxHQUFHQSxFQUFJLEdBQUdBLEVBQUksVUFBVSxTQUFVb0MsR0FBUTFWLEdBQU87QUFDaEQsV0FBTzZRLEVBQUcsZ0JBQWdCO0FBQUEsTUFDeEIsS0FBSyxVQUFVN1E7QUFBQSxNQUNmLGFBQWE7QUFBQSxNQUNiLE9BQU87QUFBQSxRQUNMLEtBQU87QUFBQSxRQUNQLFNBQVcwVjtBQUFBLE1BQ1o7QUFBQSxJQUNQLENBQUs7QUFBQSxFQUNMLENBQUcsR0FBR3BDLEVBQUksR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUlBLEVBQUk7QUFDeEMsR0FFSUUsS0FBa0IsQ0FBRTtBQzJEeEIsTUFBQUMsS0FBQWpPLEVBQUEsVUFBQSxjQUFBO0FBQUEsRUFDQSxPQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxDQUFBLFFBQUEsTUFBQSxHQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLFdBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxhQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLE1BQUE7QUFDQSxhQUFBLEtBQUEsY0FBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsT0FBQTtBQUNBLFlBQUEsRUFBQSxPQUFBZ00sRUFBQSxJQUFBO0FBQ0EsYUFBQXhPLEVBQUF3TyxDQUFBLElBQUFBLEtBQUEsZ0JBQUFBLEVBQUEsT0FBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBOztBQUNBLGFBQUFqTyxHQUFBcEMsSUFBQSxLQUFBLFVBQUEsZ0JBQUFBLEVBQUEsTUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUE7O0FBQ0EsYUFBQW9DLEdBQUFwQyxJQUFBLEtBQUEsVUFBQSxnQkFBQUEsRUFBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQTtBQUNBLGFBQUE7QUFBQSxRQUNBLEdBQUEsS0FBQSxlQUFBO0FBQUEsVUFDQSxPQUFBLEtBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUE7QUFDQSxhQUFBLEtBQUEsU0FBQSxnQkFBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxTQUFBO0FBQUEsSUFDQSxVQUFBO0FBQ0EsV0FBQSxTQUFBLGNBQUEsTUFDQSxLQUFBLE1BQUEsVUFBQSxLQUFBLFNBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUNBLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0tDNUlld1UsS0FBQTtBQUFBLEVBQ2IsU0FBUztBQUFBLElBQ1AsbUJBQUFqSTtBQUFBLElBRUEsWUFBQTJEO0FBQUEsSUFFQSxVQUFVcEgsR0FBYzRCLEdBQU03TCxJQUFRLE1BQU07QUFDMUMsYUFBTyxLQUFLLGVBQWVBLE1BQVUsT0FDakMsT0FBT0EsQ0FBSyxJQUNab1IsR0FBVW5ILEdBQWM0QixDQUFJO0FBQUEsSUFDakM7QUFBQSxJQUVELGdCQUFnQjVCLEdBQWNqSyxHQUFPO0FBQ25DLFVBQUksRUFBRSxVQUFBbkIsRUFBUSxJQUFLO0FBQ25CLGFBQUlvTCxNQUFpQixLQUFLLFdBQ3hCcEwsSUFBV0QsRUFBZUMsR0FBVW9MLEVBQWEsSUFBSSxJQUVuRGpLLEtBQVMsU0FDWG5CLElBQVdELEVBQWVDLEdBQVVtQixDQUFLLElBRXBDbkI7QUFBQSxJQUNSO0FBQUEsSUFFRCxnQkFBZ0JvTCxHQUFjOUosR0FBTWlKLEdBQVE7QUFDMUMsWUFBTXBKLElBQVEsS0FBSyxjQUVmb0osSUFDQWpKLEtBQUEsZ0JBQUFBLEVBQU07QUFBQSxRQUNOLENBQUMwTCxHQUFNN0wsTUFDTCxLQUFLLFVBQVVpSyxHQUFjNEIsR0FBTTdMLENBQUssTUFBTW9KO0FBQUE7QUFFcEQsYUFBT3BKLE1BQVUsS0FBS0EsSUFBUTtBQUFBLElBQy9CO0FBQUEsSUFFRCxhQUFhaUssR0FBYzRCLEdBQU07QUFBQSxNQUMvQixPQUFBN0wsSUFBUTtBQUFBLE1BQ1IsVUFBQTRWLElBQVc7QUFBQSxNQUNYLFVBQUFKLElBQVc7QUFBQSxJQUNaLElBQUcsSUFBSTtBQUNOLFlBQU0sRUFBRSxXQUFBSyxFQUFTLElBQUs1TDtBQUN0QixVQUFJLENBQUM0QixLQUFRLENBQUMrSixLQUFZQyxNQUFjO0FBQ3RDLGVBQU87QUFHVCxVQUFJaFg7QUFDSixZQUFNK1EsSUFBYyxNQUNqQi9RLFVBQWEsS0FBSyxnQkFBZ0JvTCxHQUFjakssQ0FBSztBQUV4RCxVQUFJOFY7QUFDSixZQUFNQyxJQUFlLE1BQ2xCRCxVQUFjLEtBQUs7QUFBQSxRQUNsQnBJLEdBQWtCekQsR0FBYzRCLEdBQU0sS0FBSyxPQUFPO0FBQUEsTUFDNUQ7QUFFTSxVQUFJcUksR0FDQXVCLEdBQ0FDO0FBQ0osVUFBSTNVLEVBQVc4VSxDQUFTLEdBQUc7QUFDekIsY0FBTXJFLElBQVFxRSxFQUFVO0FBQUEsVUFDdEI7QUFBQSxVQUNBLElBQUk1VSxFQUFZLE1BQU07QUFBQSxZQUNwQixRQUFRO0FBQUEsWUFDUixNQUFNNEs7QUFBQSxZQUNOLE9BQU9BO0FBQUEsWUFDUCxPQUFBN0w7QUFBQSxZQUVBLElBQUksV0FBVztBQUNiLHFCQUFPNFAsRUFBYTtBQUFBLFlBQ3JCO0FBQUEsWUFFRCxJQUFJLFlBQVk7QUFDZCxxQkFBT21HLEVBQWM7QUFBQSxZQUN0QjtBQUFBLFVBQ2IsQ0FBVztBQUFBLFFBQ0Y7QUFDRCxRQUFJL1MsRUFBU3dPLENBQUssSUFDZixFQUFFLE1BQUEwQyxHQUFNLFFBQUF1QixHQUFRLFFBQUFDLEVBQU0sSUFBS2xFLElBRTVCMEMsSUFBTzFDLEdBR1RvRSxJQUFXO0FBQUEsTUFDbkIsT0FBYTtBQUtMLGNBQU0sRUFBRSxTQUFBSSxFQUFPLElBQUsvTCxHQUNkdEosSUFDSm1DLEVBQVMrUyxDQUFTLEtBQUtBLEtBQ3ZCMUUsRUFBYWxILENBQVksS0FBSytMLEtBQVcsT0FBTyxLQUFLQSxDQUFPLEVBQUUsTUFDOUQ7QUFFRixRQUFBOUIsSUFBT3JJLEVBQUtsTDtBQUFBLE1BQ2I7QUFDRCxZQUFNc1YsSUFBVyxDQUFDLENBQUMvQjtBQVVuQixVQVRBQSxVQUFTLEtBRUpBLE1BRUgwQixJQUFXLElBQ1B6RSxFQUFhbEgsQ0FBWSxLQUFLakssTUFBVSxTQUMxQ2tVLElBQU8sR0FBR2xVLElBQVEsT0FHbEI0VixHQUFVO0FBQ1osY0FBTUUsSUFBWUMsRUFBYztBQUNoQyxRQUFJRCxNQUdGNUIsSUFBTyxHQUFHNEIsS0FBYUcsSUFBVyxJQUFJL0IsT0FBVUE7QUFBQSxNQUVuRDtBQUNELGFBQU9zQixJQUFXLEVBQUUsTUFBQXRCLEdBQU0sUUFBQXVCLEdBQVEsUUFBQUMsRUFBUSxJQUFHeEI7QUFBQSxJQUM5QztBQUFBLEVBQ0Y7QUFDSDtBQzVIQSxJQUFJYixLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQekMsSUFBR3lDLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPMUMsRUFBRyxPQUFPO0FBQUEsSUFDZixhQUFhO0FBQUEsRUFDakIsR0FBSyxDQUFDQSxFQUFHLE9BQU87QUFBQSxJQUNaLGFBQWE7QUFBQSxFQUNqQixHQUFLLENBQUN5QyxFQUFJLFlBQVlBLEVBQUksV0FBV0EsRUFBSSxZQUFZekMsRUFBRyxPQUFPO0FBQUEsSUFDM0QsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsMkJBQTJCeUMsRUFBSTtBQUFBLElBQ2hDO0FBQUEsRUFDRixHQUFFLENBQUNBLEVBQUksV0FBV3pDLEVBQUcsY0FBYztBQUFBLElBQ2xDLE9BQU87QUFBQSxNQUNMLE9BQVN5QyxFQUFJO0FBQUEsTUFDYixVQUFZQSxFQUFJO0FBQUEsTUFDaEIsYUFBZUEsRUFBSTtBQUFBLE1BQ25CLFdBQWEsQ0FBQ0EsRUFBSTtBQUFBLElBQ25CO0FBQUEsSUFDRCxJQUFJO0FBQUEsTUFDRixRQUFVQSxFQUFJO0FBQUEsSUFDZjtBQUFBLElBQ0QsYUFBYUEsRUFBSSxHQUFHLENBQUNBLEVBQUksVUFBVTtBQUFBLE1BQ2pDLEtBQUs7QUFBQSxNQUNMLElBQUksV0FBWTtBQUNkLGVBQU8sQ0FBQ0EsRUFBSSxHQUFHLGNBQWMsQ0FBQztBQUFBLE1BQy9CO0FBQUEsTUFDRCxPQUFPO0FBQUEsSUFDYixJQUFRLElBQUksR0FBRyxNQUFNLEVBQUk7QUFBQSxFQUN6QixDQUFHLElBQUlBLEVBQUksR0FBSSxHQUFFQSxFQUFJLE9BQU96QyxFQUFHLGFBQWE7QUFBQSxJQUN4QyxPQUFPO0FBQUEsTUFDTCxNQUFReUMsRUFBSTtBQUFBLE1BQ1osYUFBZUEsRUFBSTtBQUFBLElBQ3BCO0FBQUEsRUFDRixDQUFBLElBQUlBLEVBQUksTUFBTXpDLEVBQUcsa0JBQWtCO0FBQUEsSUFDbEMsT0FBTztBQUFBLE1BQ0wsV0FBYXlDLEVBQUk7QUFBQSxNQUNqQixVQUFZQSxFQUFJO0FBQUEsTUFDaEIsTUFBUUEsRUFBSTtBQUFBLElBQ2I7QUFBQSxFQUNGLENBQUEsQ0FBQyxHQUFHLENBQUMsSUFBSUEsRUFBSSxHQUFJLEdBQUVBLEVBQUksR0FBR0EsRUFBSSxNQUFNLFNBQVVyUCxHQUFRZ00sR0FBSztBQUMxRCxXQUFPcUQsRUFBSSxVQUFVekMsRUFBRyxhQUFhO0FBQUEsTUFDbkMsS0FBS1o7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLFVBQVU7QUFBQSxNQUNWLGFBQWE7QUFBQSxNQUNiLE9BQU87QUFBQSxRQUNMLFNBQVdxRCxFQUFJLGdCQUFnQnJEO0FBQUEsUUFDL0IsS0FBT0E7QUFBQSxRQUNQLFFBQVVoTTtBQUFBLFFBQ1YsVUFBWXFQLEVBQUk7QUFBQSxRQUNoQixNQUFRQSxFQUFJO0FBQUEsUUFDWixNQUFRQSxFQUFJO0FBQUEsUUFDWixPQUFTQSxFQUFJO0FBQUEsUUFDYixRQUFVLENBQUNBLEVBQUksV0FBVyxDQUFDQSxFQUFJO0FBQUEsUUFDL0IsVUFBWUEsRUFBSTtBQUFBLFFBQ2hCLGdCQUFrQkEsRUFBSTtBQUFBLE1BQ3ZCO0FBQUEsSUFDUCxDQUFLLElBQUlBLEVBQUk7RUFDYixDQUFHLEdBQUd6QyxFQUFHLHFCQUFxQjtBQUFBLElBQzFCLE9BQU87QUFBQSxNQUNMLFNBQVd5QyxFQUFJO0FBQUEsSUFDaEI7QUFBQSxFQUNMLEdBQUssQ0FBQ0EsRUFBSSxlQUFlQSxFQUFJLFNBQVN6QyxFQUFHLGFBQWE7QUFBQSxJQUNsRCxLQUFLO0FBQUEsSUFDTCxhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsTUFDTCxRQUFVeUMsRUFBSTtBQUFBLE1BQ2QsVUFBWUEsRUFBSTtBQUFBLE1BQ2hCLE1BQVFBLEVBQUk7QUFBQSxNQUNaLE1BQVFBLEVBQUk7QUFBQSxNQUNaLE9BQVNBLEVBQUk7QUFBQSxNQUNiLFFBQVUsQ0FBQ0EsRUFBSSxXQUFXLENBQUNBLEVBQUk7QUFBQSxNQUMvQixVQUFZQSxFQUFJO0FBQUEsTUFDaEIsZ0JBQWtCQSxFQUFJO0FBQUEsSUFDdkI7QUFBQSxFQUNMLENBQUcsSUFBSUEsRUFBSSxHQUFFLENBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQ0EsRUFBSSxXQUFXQSxFQUFJLGNBQWNBLEVBQUksR0FBRyxTQUFTLElBQUlBLEVBQUksSUFBSSxHQUFHLENBQUMsR0FBR0EsRUFBSSxVQUFVLENBQUVBLEVBQUksV0FBb0NBLEVBQUksR0FBRSxJQUEvQkEsRUFBSSxHQUFHLGNBQWMsQ0FBWSxJQUFJQSxFQUFJLGNBQWMsQ0FBQ3pDLEVBQUcsZUFBZTtBQUFBLElBQ2hNLE9BQU87QUFBQSxNQUNMLFFBQVV5QyxFQUFJO0FBQUEsTUFDZCxNQUFRQSxFQUFJO0FBQUEsTUFDWixNQUFRQSxFQUFJO0FBQUEsTUFDWixPQUFTQSxFQUFJO0FBQUEsTUFDYixVQUFZQSxFQUFJO0FBQUEsSUFDakI7QUFBQSxFQUNGLENBQUEsQ0FBQyxJQUFJQSxFQUFJLEdBQUUsQ0FBRSxHQUFHLENBQUM7QUFDcEIsR0FFSUUsS0FBa0IsQ0FBRTtBQzRFeEIsTUFBQUMsS0FBQWpPLEVBQUEsVUFBQSxlQUFBO0FBQUEsRUFDQSxZQUFBLEVBQUEsa0JBQUEwUSxHQUFBO0FBQUEsRUFDQSxRQUFBLENBQUFQLEVBQUE7QUFBQSxFQUVBLFVBQUE7QUFDQSxXQUFBO0FBQUEsTUFDQSxrQkFBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFFBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUFBLElBQ0EsUUFBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLFVBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLE9BQUEsQ0FBQSxHQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsT0FBQSxDQUFBLEdBQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxNQUFBLENBQUEsUUFBQSxNQUFBLEdBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxTQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFdBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxhQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsZ0JBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsWUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQ0EsVUFBQSxFQUFBLE1BQUF4VixNQUFBLEtBQUE7QUFDQSxXQUFBO0FBQUEsTUFFQSxHQUNBQSxLQUFBWSxFQUFBWixDQUFBLElBQ0FBLEVBQUEsS0FBQSxNQUFBLEtBQUEsT0FBQSxJQUNBQTtBQUFBLE1BRUEsb0JBQUEsQ0FBQTtBQUFBLE1BQ0EsZUFBQSxDQUFBO0FBQUEsTUFDQSxnQkFBQSxDQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLGtCQUFBO0FBRUEsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLHdCQUFBO0FBSUEsYUFBQSxLQUFBLGFBQUEsT0FBQSxLQUFBLFFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxlQUFBO0FBQ0EsWUFBQTRMLElBQUFpRixHQUFBLEtBQUEsT0FBQSxRQUFBLEVBQUE7QUFDQSxpQkFBQW1GLEtBQUEsS0FBQTtBQUNBLFFBQUFwSyxFQUFBLEtBQUEsR0FBQW9LLEVBQUEsWUFBQTtBQUVBLGFBQUFwSztBQUFBLElBQ0E7QUFBQSxJQUVBLE9BQUE7QUFDQSxhQUFBcUUsRUFBQSxLQUFBLE9BQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7O0FBQ0EsWUFBQWdHLE1BQUFqVixJQUFBLEtBQUEsT0FBQSxTQUFBLGdCQUFBQSxFQUFBLE1BQUEsT0FBQSxNQUNBOE8sSUFBQW1HLEtBQUEsS0FBQSxhQUFBLEtBQUEsS0FBQUEsRUFBQSxJQUNBQSxNQUNBMU0sSUFBQSxLQUFBLGVBQUEsZ0JBQUFBLEVBQUEsU0FBQTtBQUNBLGFBQUF1RyxNQUFBbUcsS0FFQSxLQUFBLFFBQUEsUUFBQSxFQUFBLE1BQUFuRyxFQUFBLENBQUEsR0FFQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsVUFBQSxLQUFBLE1BQUE7QUFDQSxZQUFBb0csSUFBQTtBQUNBLG1CQUFBcEcsS0FBQSxPQUFBLE9BQUEsS0FBQSxJQUFBLEdBQUE7QUFDQSxnQkFBQSxFQUFBLFlBQUFxRyxFQUFBLElBQUFyRztBQUNBLGNBQUFsUCxFQUFBdVYsQ0FBQSxJQUNBQSxFQUFBLEtBQUEsTUFBQSxLQUFBLE9BQUEsSUFDQUE7QUFFQSxtQkFBQXJHO0FBRUEsVUFBQW9HLE1BQ0FBLElBQUFwRztBQUFBLFFBRUE7QUFDQSxlQUFBb0c7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQTs7QUFDQSxjQUFBbFYsSUFBQSxLQUFBLFdBQUEsZ0JBQUFBLEVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQTtBQUNBLGFBQUEsS0FBQSxZQUFBLEVBQUEsUUFBQSxVQUFBLFlBQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EsU0FBQSxLQUFBLE9BQUE7QUFBQSxRQUNBLEdBQUEsS0FBQSxZQUFBLEVBQUEsUUFBQSxhQUFBLFlBQUEsSUFBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFRQSxPQUFBO0FBQ0EsYUFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQTtBQUNBLGFBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBQ0EsYUFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFDQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsYUFBQXZCLEdBQUEsS0FBQSxVQUFBLEtBQUEsVUFBQSxFQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQTtBQUNBLGFBQUEsS0FBQTtBQUFBLFFBQ0EsS0FBQSxrQkFBQSxLQUFBLGNBQUEsS0FBQSxNQUFBLEtBQUEsT0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQ0EsYUFBQSxLQUFBLGNBQUEsQ0FBQTRTLE1BQUFBLEVBQUEsT0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFlBQUE7QUFDQSxhQUFBLEtBQUEsY0FBQSxDQUFBQSxNQUFBQSxFQUFBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUEsQ0FBQUEsTUFBQUEsRUFBQSxPQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTtBQUNBLGFBQUEsS0FBQSxlQUFBLENBQUFBLE1BQUFBLEVBQUEsV0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFDQSxhQUFBLENBQUEsQ0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQTtBQUNBLGFBQUEsQ0FBQSxDQUFBLEtBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQTtBQUNBLGFBQUEsQ0FBQSxLQUFBLFdBQUEsQ0FBQSxDQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsWUFBQSxFQUFBLFlBQUFwTixNQUFBLEtBQUE7QUFDQSxhQUFBLENBQUEsQ0FBQUEsS0FBQSxPQUFBLEtBQUFBLENBQUEsRUFBQSxTQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQTZELEdBQUEsVUFBQTtBQUFBLE1BQ0EsVUFBQTtBQUNBLGVBQUEsQ0FBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLElBRUEsYUFBQTtBQUNBLGFBQUEsT0FBQSxPQUFBLEtBQUEsa0JBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBO0FBQ0EsYUFBQSxPQUFBLE9BQUEsS0FBQSxhQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQTtBQUNBLGFBQUEsT0FBQSxPQUFBLEtBQUEsY0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLHVCQUFBO0FBQ0EsYUFBQSxLQUFBLHVCQUFBLEtBQUEsa0JBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxrQkFBQTtBQUNBLGFBQUEsS0FBQSx1QkFBQSxLQUFBLGFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxtQkFBQTtBQUNBLGFBQUEs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TUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxTQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsbUJBQUEsRUFBQSxNQUFBL00sR0FBQSxTQUFBLEtBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQ0EsV0FBQTtBQUFBLE1BQ0EsU0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxpQkFBQTtBQUNBLGFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxlQUFBO0FBQ0EsYUFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFDQSxhQUFBaUwsR0FBQSxLQUFBLE9BQUEsT0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7QUFDQSxhQUFBLEtBQUEsT0FBQSxVQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsYUFBQSxDQUFBLENBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFlBQUE7QUFDQSxhQUFBLEtBQUEsV0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTtBQUNBLFVBQUEsS0FBQTtBQUNBLGVBQUEsS0FBQTtBQUNBO0FBR0EsY0FBQSxFQUFBLE1BQUF0USxNQUFBOEQsRUFBQSxJQUFBLEtBQUE7QUFDQSxlQUFBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBO0FBRUEsYUFBQSxLQUFBLGFBQUEsU0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBSUEsYUFBQSxLQUFBLGFBQUEsS0FBQSxXQUFBLEtBQUEsZ0JBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBK0UsRUFBQSxXQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQSxDQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUNB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QUFBQSxZQUNBO0FBQUEsWUFFQSxRQUFBLENBQUEsS0FBQSxjQUFBO0FBQUEsY0FDQSxNQUFBO0FBQUEsY0FFQSxXQUFBO0FBQUEsY0FDQSxRQUFBO0FBQUEsZ0JBQ0EsT0FBQSxDQUFBLEVBQUEsV0FBQW5WLEVBQUEsTUFBQUEsRUFBQSxPQUFBO0FBQUEsY0FDQTtBQUFBLFlBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQSxLQUFBLE9BQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUE7QUFDQSxhQUFBLEtBQUEsZUFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTtBQUNBLGFBQUEsQ0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQTtBQUVBLGFBQUEsS0FBQSxVQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQTs7QUFDQSxhQUFBLENBQUEsS0FBQSxjQUFBLENBQUEsR0FBQTVELElBQUEsS0FBQSx3QkFBQSxRQUFBQSxFQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTs7QUFDQSxlQUFBQSxJQUFBLEtBQUEsd0JBQUEsZ0JBQUFBLEVBQUEsZ0JBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBSUEsYUFBQSxLQUFBLGFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxPQUFBO0FBRUEsYUFBQSxLQUFBLE9BQUEsTUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7O0FBQ0EsYUFBQSxLQUFBLGFBQ0EsUUFDQUEsSUFBQSxLQUFBLFVBQUEsT0FBQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7QUFDQSxhQUFBLEtBQUEsYUFBQSxTQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQTtBQUNBLFlBQUFJLElBQUEsS0FBQSxZQUFBO0FBQ0EsYUFBQStDLEdBQUEsS0FBQSxRQUFBL0MsQ0FBQSxLQUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLG1CQUFBO0FBQ0EsYUFBQWdYLEVBQUEsS0FBQSxhQUFBLEtBQUEsTUFBQSxTQUFBLEtBQUEsTUFB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Q0EsT0FBQTtBQUNBLGFBQUEsS0FBQSxVQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQTtBQUNBLGFBQUEsS0FBQSxVQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQTtBQUNBLGFBQUEsS0FBQSxVQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQTtBQUNBLGFBQUE7QUFBQSxRQUNBLEdBQUEsS0FBQTtBQUFBLFFBQ0EsUUFBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFDQSxhQUFBbkwsRUFBQSxLQUFBLE9BQUEsVUFBQTtBQUFBLElBQ0E7QUFBQSxJQUdBLGlCQUFBO0FBQ0EsYUFBQSxLQUFBLE9BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxlQUFBOztBQUNBLFlBQUF2TCxLQUFBMUQsSUFBQSxLQUFBLG1CQUFBLGdCQUFBQSxFQUFBO0FBQ0EsYUFBQTBELEtBQUEsS0FBQSxLQUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLG9CQUFBOztBQUNBLGVBQ0ExRCxJQUFBLEtBQUEsaUJBQUEsZ0JBQUFBLEVBQUEsVUFBQSxLQUNBLEtBQUEsZUFBQSxhQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsUUFDQSxTQUFBO0FBQUEsUUFDQSxRQUFBLEtBQUE7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxjQUFBOztBQUNBLGVBQUFBLElBQUEsS0FBQSxpQkFBQSxnQkFBQUEsRUFBQSxXQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7O0FBQ0EsZUFBQUEsSUFBQSxLQUFBLGVBQUEsZ0JBQUFBLEVBQUEsV0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFDQSxhQUFBLEtBQUEsZ0JBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBOztBQUNBLFlBQUEsRUFBQSxnQkFBQTJhLEVBQUEsSUFBQTtBQUNBLFVBQUFBLEdBQUE7QUFDQSxjQUFBLEVBQUEsVUFBQUMsTUFBQSxLQUFBLFdBQ0FDLElBQUEsQ0FBQSxLQUFBLFFBQUFGLEVBQUE7QUFFQSxp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Q0E7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxtQkFBQTtBQUNBLGFBQUEsS0FBQSxXQUFBLFNBQUE7QUFBQSxRQUNBLFlBQUE7QUFBQSxRQUNBLGFBQUE7QUFBQSxRQUNBLFlBQUE7QUFBQSxRQUNBLFdBQUE7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsYUFBQSxLQUFBLFdBQUEsU0FBQTtBQUFBLFFBQ0EsTUFBQTtBQUFBLFFBQ0EsTUFBQTtBQUFBLE1BQ0EsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGlCQUFBO0FBQ0EsWUFBQTtBQUFBLFFBQ0EsYUFBQWdkO0FBQUEsUUFDQSxrQkFBQUM7QUFBQSxRQUNBLGtCQUFBQztBQUFBLFFBQ0EsYUFBQUM7QUFBQSxNQUNBLElBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQUg7QUFBQSxRQUNBQztBQUFBLFFBQ0FDO0FBQUEsUUFDQUM7QUFBQSxNQUNBLEVBQUEsT0FBQSxDQUFBN2MsTUFBQUEsRUFBQSxTQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxlQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0Esb0JBQUE7QUFBQSxVQUNBLFVBQUE7QUFBQSxVQUNBLFVBQUE7QUFBQSxVQUNBLGdCQUFBO0FBQUEsUUFDQSxFQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxVQUFBLENBQUEsS0FBQTtBQUFBLFFBQ0EsV0FBQSxLQUFBO0FBQUEsUUFDQSxtQkFBQSxDQUFBLEtBQUEsWUFBQTtBQUFBLFFBQ0EsbUJBQUEsQ0FBQSxLQUFBLFlBQUE7QUFBQSxRQUNBLGNBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBMkQsRUFBQSxhQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxZQUFBQSxFQUFBLGNBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFB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
|
|
8852
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcFN0YXRlLmpzIiwiLi4vc3JjL3V0aWxzL2RhdGEuanMiLCIuLi9zcmMvRGl0b0NvbnRleHQuanMiLCIuLi9zcmMvbWl4aW5zL0VtaXR0ZXJNaXhpbi5qcyIsIi4uL3NyYy91dGlscy90eXBlLmpzIiwiLi4vc3JjL3V0aWxzL3Jlc291cmNlLmpzIiwiLi4vc3JjL21peGlucy9EaXRvTWl4aW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2NyZWRpdGNhcmQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RlY2ltYWxzLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19lbWFpbC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faG9zdG5hbWUuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RvbWFpbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faW50ZWdlci5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWF4LmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19taW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3Bhc3N3b3JkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19yYW5nZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmVxdWlyZWQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3VybC5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdGlvbk1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2FjY2Vzc29yLmpzIiwiLi4vc3JjL3V0aWxzL3VpZC5qcyIsIi4uL3NyYy91dGlscy9TY2hlbWFHcmFwaC5qcyIsIi4uL3NyYy91dGlscy9zY2hlbWEuanMiLCIuLi9zcmMvbWl4aW5zL1R5cGVNaXhpbi5qcyIsIi4uL3NyYy9EaXRvQ29tcG9uZW50LmpzIiwiLi4vc3JjL0RpdG9Vc2VyLmpzIiwiLi4vc3JjL21peGlucy9TY2hlbWFQYXJlbnRNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1JvdXRlTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVmlldy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSIsIi4uL3NyYy9taXhpbnMvRG9tTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUm9vdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Sb290LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9NZW51LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b01lbnUudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zcGlubmVyL3NyYy9QdWxzZUxvYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3Bpbm5lci9zcmMvUHVsc2VMb2FkZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0hlYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9IZWFkZXIudnVlIiwiLi4vc3JjL21peGlucy9QdWxsZG93bk1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0FjY291bnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQWNjb3VudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRGlhbG9nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FbGVtZW50LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9MYWJlbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9MYWJlbC52dWUiLCIuLi9zcmMvbWl4aW5zL0l0ZW1NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWEudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYUlubGluZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZS52dWUiLCIuLi9zcmMvdXRpbHMvbWF0aC5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Db250YWluZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ29udGFpbmVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbHMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWxzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9CdXR0b25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0J1dHRvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DcmVhdGVCdXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ3JlYXRlQnV0dG9uLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DbGlwYm9hcmQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ2xpcGJvYXJkLnZ1ZSIsIi4uL3NyYy9taXhpbnMvTG9hZGluZ01peGluLmpzIiwiLi4vc3JjL21peGlucy9SZXNvdXJjZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybU5lc3RlZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRXJyb3JzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NvcGVzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Njb3Blcy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYWdpbmF0aW9uLnZ1ZSIsIi4uL3NyYy9taXhpbnMvT3JkZXJlZE1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RyZWVJdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RyZWVJdGVtLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUhlYWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUNlbGwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVDZWxsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WTm9kZS52dWUiLCIuLi9zcmMvVHlwZUNvbXBvbmVudC5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVCdXR0b24udnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDaGVja2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3gudnVlIiwiLi4vc3JjL21peGlucy9EYXRhTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL09wdGlvbnNNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3hlcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3hlcy52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUNvZGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvZGUudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2xvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ29sb3IudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbXBvbmVudC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbXB1dGVkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wdXRlZC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZURhdGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZURhdGUudnVlIiwiLi4vc3JjL21peGlucy9Tb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy91dGlscy9maWx0ZXIuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxpc3QudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVMYWJlbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTGFiZWwudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVNYXJrdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU1hcmt1cC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZU11bHRpc2VsZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVNdWx0aXNlbGVjdC52dWUiLCIuLi9zcmMvbWl4aW5zL051bWJlck1peGluLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVOdW1iZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU51bWJlci52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZU9iamVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlT2JqZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUGFuZWwudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVQcm9ncmVzcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlUHJvZ3Jlc3MudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVSYWRpby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlUmFkaW8udnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWN0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWN0aW9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2VsZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWxlY3QudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTbGlkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVNsaWRlci52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVN3aXRjaC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU3dpdGNoLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHRhcmVhLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVUZXh0YXJlYS52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRyZWVMaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVUcmVlTGlzdC52dWUiLCIuLi9zcmMvdXRpbHMvdW5pdHMuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVVwbG9hZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVXBsb2FkLnZ1ZSIsIi4uL3NyYy91dGlscy9kZXByZWNhdGUuanMiLCIuLi9zcmMvdmVyYnMuanMiLCIuLi9zcmMvRGl0b0FkbWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcbiAgdGl0bGU6ICcnLFxuICByb3V0ZUNvbXBvbmVudHM6IFtdLFxuICB1c2VyOiBudWxsLFxuICBsb2FkQ2FjaGU6IHt9LCAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICBhY3RpdmVMYWJlbDogbnVsbCxcbiAgY2xpcGJvYXJkRGF0YTogbnVsbFxufVxuIiwiaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLCBwYXJzZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pIHtcbiAgcmV0dXJuIGRhdGFQYXRoXG4gICAgPyBgJHtkYXRhUGF0aH0vJHt0b2tlbn1gXG4gICAgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcGF0aD8ucG9wKClcbiAgcmV0dXJuIHBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbmVzdGVkID8gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkgOiBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIGlmIChwYXRoKSB7XG4gICAgLy8gUmVtb3ZlIHRoZSBwYXJlbnQgdG9rZW4uIElmIGl0J3MgYSBudW1iZXIsIHRoZW4gd2UncmUgZGVhbGluZyB3aXRoIGFuXG4gICAgLy8gYXJyYXkgYW5kIG5lZWQgdG8gcmVtb3ZlIG1vcmUgdG9rZW5zIHVudGlsIHdlIG1lZXQgdGhlIGFjdHVhbCBwYXJlbnQ6XG4gICAgbGV0IHRva2VuXG4gICAgZG8ge1xuICAgICAgdG9rZW4gPSBwYXRoLnBvcCgpXG4gICAgfSB3aGlsZSAodG9rZW4gIT0gbnVsbCAmJiBpc0ludGVnZXIoK3Rva2VuKSlcbiAgICAvLyBJZiB0aGUgcmVtb3ZlZCB0b2tlbiBpcyB2YWxpZCwgd2UgY2FuIGdldCB0aGUgcGFyZW50IGRhdGE6XG4gICAgaWYgKHRva2VuICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwYXRoXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbShyb290SXRlbSwgZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICByZXR1cm4gcGF0aCA/IGdldFZhbHVlQXREYXRhUGF0aChyb290SXRlbSwgcGF0aCkgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcmV0dXJuIHBhdGhbcGF0aC5sZW5ndGggLSAxXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoTmFtZShkYXRhUGF0aCkge1xuICBjb25zdCB0b2tlbiA9IGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKVxuICByZXR1cm4gdG9rZW4gPT0gbnVsbCB8fCBpc0ludGVnZXIoK3Rva2VuKSA/IG51bGwgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoSW5kZXgoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgY29uc3QgaW5kZXggPSB0b2tlbiA9PSBudWxsID8gbnVsbCA6ICt0b2tlblxuICByZXR1cm4gaXNJbnRlZ2VyKGluZGV4KSA/IGluZGV4IDogbnVsbFxufVxuXG5sZXQgdGVtcG9yYXJ5SWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gc2V0VGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFRlbXBvcmFyeSBpZHMgYXJlIG1hcmtlZCB3aXRoIGEgJ0AnIGF0IHRoZSBiZWdpbm5pbmcuXG4gIGRhdGFbaWRLZXldID0gYEAkeysrdGVtcG9yYXJ5SWR9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wb3JhcnlJZChpZCkge1xuICByZXR1cm4gL15ALy50ZXN0KGlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzVGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIHJldHVybiBpc1RlbXBvcmFyeUlkKGRhdGE/LltpZEtleV0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZmVyZW5jZShkYXRhLCBpZEtleSA9ICdpZCcpIHtcbiAgLy8gUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIG9iamVjdCB0aGF0IGhvbGRzIG5vdGhpbmcgbW9yZSB0aGFuIGFuIGlkLlxuICByZXR1cm4gZGF0YT8uW2lkS2V5XSAhPSBudWxsICYmIE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMVxufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQge1xuICBnZXRJdGVtRGF0YVBhdGgsIGdldFBhcmVudEl0ZW1EYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSwgZ2V0SXRlbSxcbiAgZ2V0TGFzdERhdGFQYXRoTmFtZSwgZ2V0TGFzdERhdGFQYXRoSW5kZXhcbn0gZnJvbSAnLi91dGlscy9kYXRhLmpzJ1xuXG4vLyBgRGl0b0NvbnRleHRgIGluc3RhbmNlcyBhcmUgYSB0aGluIHdyYXBwZXIgYXJvdW5kIHJhdyBgY29udGV4dGAgb2JqZWN0cyxcbi8vIHdoaWNoIHRoZW1zZWx2ZXMgYWN0dWFsbHkgaW5oZXJpdCBmcm9tIHRoZSBsaW5rZWQgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvXG4vLyB0aGF0IHRoZXkgb25seSBuZWVkIHRvIHByb3ZpZGUgdGhlIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBkaWZmZXJlbnQgdGhhblxuLy8gaW4gdGhlIHVuZGVybHlpbmcgY29tcG9uZW50LiBJbiBvcmRlciB0byBub3QgZXhwb3NlIGFsbCBmaWVsZHMgZnJvbSB0aGVcbi8vIGNvbXBvbmVudCwgdGhlIHdyYXBwZXIgaXMgaW50cm9kdWNlZDpcbi8vIFVzZSBXZWFrTWFwIGZvciB0aGUgcmF3IGBjb250ZXh0YCBvYmplY3RzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBvbGx1dGUgdGhlXG4vLyBhY3R1YWwgYERpdG9Db250ZXh0YCBpbnN0YW5jZSB3aXRoIGl0LlxuY29uc3QgY29udGV4dHMgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIGdldChjb250ZXh0LCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICBjb25zdCBvYmplY3QgPSBjb250ZXh0cy5nZXQoY29udGV4dClcbiAgY29uc3QgdmFsdWUgPSBvYmplY3Rba2V5XVxuICAvLyBJZiBgb2JqZWN0YCBleHBsaWNpdGx5IHNldHMgdGhlIGtleSB0byBgdW5kZWZpbmVkYCwgcmV0dXJuIGl0LlxuICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCB8fCBvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KVxuICAgID8gdmFsdWVcbiAgICA6IGlzRnVuY3Rpb24oZGVmYXVsdFZhbHVlKVxuICAgICAgPyBkZWZhdWx0VmFsdWUoKVxuICAgICAgOiBkZWZhdWx0VmFsdWVcbn1cblxuZnVuY3Rpb24gc2V0KGNvbnRleHQsIGtleSwgdmFsdWUpIHtcbiAgY29udGV4dHMuZ2V0KGNvbnRleHQpW2tleV0gPSB2YWx1ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYW1zIG9iamVjdCAvIGZ1bmN0aW9uLCBvciBjcmVhdGUgYSBuZXcgb25lOlxuICAgIGNvbnRleHQgPSBjb250ZXh0XG4gICAgICA/IChpc0Z1bmN0aW9uKGNvbnRleHQpID8gY29udGV4dCgpIDogeyAuLi5jb250ZXh0IH0pXG4gICAgICA6IHt9XG4gICAgLy8gSWYgbm90IGV4cGxpY2l0bHkgc2V0ICh0byBmYWxzZSksIGRlZmF1bHQgdG8gdHJ1ZSBzbyB3ZSBkb24ndCBmYWxsIGJhY2tcbiAgICAvLyB0byBgY29tcG9uZW50YCBmb3IgaXRzIHZhbHVlLlxuICAgIGNvbnRleHQubmVzdGVkID8/PSB0cnVlXG4gICAgY29udGV4dC5jb21wb25lbnQgPSBjb21wb25lbnRcbiAgICAvLyBIYXZlIGBvYmplY3RgIGluaGVyaXQgZnJvbSB0aGUgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvIGl0IGNhbiBvdmVycmlkZVxuICAgIC8vIGl0cyB2YWx1ZXMgYW5kIHN0aWxsIHJldHJpZXZlIGZyb20gaXQsIGFuZCBhc3NvY2lhdGUgaXQgd2l0aCBgdGhpc2BcbiAgICAvLyB0aHJvdWdoIGBjb250ZXh0c2AgbWFwOlxuICAgIGNvbnN0IG9iamVjdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZihjb250ZXh0LCBjb21wb25lbnQpXG4gICAgY29udGV4dHMuc2V0KHRoaXMsIG9iamVjdClcbiAgfVxuXG4gIHN0YXRpYyBnZXQoY29tcG9uZW50LCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQgaW5zdGFuY2VvZiBEaXRvQ29udGV4dFxuICAgICAgPyBjb250ZXh0XG4gICAgICA6IG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIGNvbnRleHQpXG4gIH1cblxuICAvLyBgbmVzdGVkYCBpcyBgdHJ1ZWAgd2hlbiB0aGUgZGF0YS1wYXRoIHBvaW50cyBhIHZhbHVlIGluc2lkZSBhbiBpdGVtLCBhbmRcbiAgLy8gYGZhbHNlYCB3aGVuIGl0IHBvaW50cyB0byB0aGUgaXRlbSBpdHNlbGYuXG4gIGdldCBuZXN0ZWQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmVzdGVkJywgdHJ1ZSlcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2YWx1ZScsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBkYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkYXRhUGF0aCcsICcnKVxuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmFtZScsICgpID0+IGdldExhc3REYXRhUGF0aE5hbWUodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnaW5kZXgnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldFBhcmVudEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBpdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuaXRlbURhdGFQYXRoKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5wYXJlbnRJdGVtRGF0YVBhdGgpXG4gIH1cblxuICBnZXQgaXRlbSgpIHtcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzOlxuICAgIC8vIElmIGBkYXRhYCBpc24ndCBwcm92aWRlZCwgd2UgY2FuIGRldGVybWluZSBpdCBmcm9tIHJvb3REYXRhICYgZGF0YVBhdGg6XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YScsICgpID0+XG4gICAgICBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIClcbiAgfVxuXG4gIC8vIE5PVEU6IGBwYXJlbnRJdGVtYCBpc24ndCB0aGUgY2xvc2VzdCBkYXRhIHBhcmVudCB0byBgaXRlbWAsIGl0J3MgdGhlXG4gIC8vIGNsb3Nlc3QgcGFyZW50IHRoYXQgaXNuJ3QgYW4gYXJyYXksIGUuZy4gZm9yIHJlbGF0aW9ucyBvciBuZXN0ZWQgSlNPTlxuICAvLyBkYXRhLiAgVGhpcyBpcyB3aHkgdGhlIHRlcm0gYGl0ZW1gIHdhcyBjaG9zZW4gb3ZlciBgZGF0YWAsIGUuZy4gVlMgdGhlXG4gIC8vIHVzZSBvZiBgcGFyZW50RGF0YWAgaW4gc2VydmVyLXNpZGVkIHZhbGlkYXRpb24sIHdoaWNoIGlzIHRoZSBjbG9zZXN0XG4gIC8vIHBhcmVudC4gSWYgbmVlZGVkLCB3ZSBjb3VsZCBleHBvc2UgdGhpcyBkYXRhIGhlcmUgdG9vLCBhcyB3ZSBjYW4gZG8gYWxsXG4gIC8vIHNvcnRzIG9mIGRhdGEgcHJvY2Vzc2luZyB3aXRoIGByb290RGF0YWAgYW5kIGBkYXRhUGF0aGAuXG4gIGdldCBwYXJlbnRJdGVtKCkge1xuICAgIGNvbnN0IHBhcmVudEl0ZW0gPVxuICAgICAgZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZCkgfHwgbnVsbFxuICAgIHJldHVybiBwYXJlbnRJdGVtICE9PSB0aGlzLml0ZW0gPyBwYXJlbnRJdGVtIDogbnVsbFxuICB9XG5cbiAgZ2V0IHJvb3RJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jvb3REYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBwcm9jZXNzZWRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Byb2Nlc3NlZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY2xpcGJvYXJkRGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgdXNlcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd1c2VyJywgbnVsbClcbiAgfVxuXG4gIGdldCBhcGkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnYXBpJywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBSZW1vdmUgZXhwb3N1cmUgc2luY2UgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LFxuICAvLyBlLmcuIG5lc3RlZCBmb3JtcyBpbiBgcHJvY2Vzc0RhdGEoKWAuIEluc3RlYWQsIGJpbmQgY29tcG9uZW50IHRvIGB0aGlzYFxuICAvLyBvbmx5IHdoZXJlIGF2YWlsYWJsZS5cbiAgZ2V0IGNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gVE9ETzogQWRkIGBjb21wb25lbnRTY2hlbWFgIGdldHRlciBmb3IgdGhlIHNjaGVtYSBvZiB0aGUgY3VycmVudCBjb21wb25lbnQsXG4gIC8vIGV2ZW4gd2hlbiB0aGUgY29tcG9uZW50IGlzbid0IGFjdHVhbGx5IGluc3RhbnRpYXRlZC4gQ29uc2lkZXIgYWRkaW5nXG4gIC8vIGBzb3VyY2VTY2hlbWFgIGFzIHdlbGw/XG5cbiAgLy8gVE9ETzogRml4IHVuY2xlYXIgbmFtaW5nOiBXaGljaCBzY2hlbWEgaXMgdGhpcywgdGhhdCBvZiB0aGUgY29tcG9uZW50IG9yIG9mXG4gIC8vIGl0cyBwYXJlbnQ/IElzbid0IGV4cG9zaW5nIGBmb3JtQ29tcG9uZW50YCBhbmQgYHZpZXdDb21wb25lbnRgIGVub3VnaCwgb25jZVxuICAvLyB3ZSBvZmZlciBhY2Nlc3MgdG8gdGhlaXIgY29tcG9uZW50cyB0aGVyZSB0aHJvdWdoIGBnZXRDb21wb25lbnQoKWAgJiBjby4gb25cbiAgLy8gYERpdG9NaXhpbmAgcGVyaGFwcz8gIEFsc28sIHRoZXJlIGNvdWxkIGJlIGEgYHRhYkNvbXBvbmVudGAgZ2V0dGVyIGZvclxuICAvLyBzY2hlbWFzIGluIHRhYnM/XG4gIGdldCBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc2NoZW1hQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBmb3JtQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1Db21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RpYWxvZ0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncGFuZWxDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jlc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFdoZW4gdXNlZCBpbiBPcHRpb25zTWl4aW4gZm9yIGBzY2hlbWEub3B0aW9ucy52YWx1ZSgpYCxcbiAgLy8gYHNjaGVtYS5vcHRpb25zLmxhYmVsKClgIGFuZCAgYHNjaGVtYS5zZWFyY2guZmlsdGVyKClgIGNhbGxiYWNrczpcbiAgZ2V0IG9wdGlvbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb24nLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb25zJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGV2ZW50czogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gQXN5bmMgdmVyc2lvbnMgb2YgVnVlJ3MgJG9uKCkgYW5kICRvZmYoKSBtZXRob2RzIHRoYXQga2VlcCB0cmFjayBvZiB0aGVcbiAgICAvLyBldmVudHMgYWRkZWQgLyByZW1vdmVkLCBhbmQgcHJvdmlkZSBhIGhhc0xpc3RlbmVycygpIG1ldGhvZCB0aGF0IGNoZWNrc1xuICAgIC8vIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudC5cblxuICAgIC8vIEFsc28gYWRkcyBwcm9wZXIgaGFuZGxpbmcgb2YgYXN5bmMgZXZlbnRzLCBpbmNsdWRpbmcgYSBhc3luYyBlbWl0KCkgdGhhdFxuICAgIC8vIGRlYWxzIHdpdGggcHJvcGVyIGV2ZW50IHF1ZXVlaW5nLlxuICAgIG9uKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGV2LCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMub24oa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLiRldmVudHMgfHwgKHRoaXMuJGV2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCkpXG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBldmVudHNbZXZlbnRdIHx8IChldmVudHNbZXZlbnRdID0ge1xuICAgICAgICAgIGNhbGxiYWNrczogW10sXG4gICAgICAgICAgcXVldWU6IFtdXG4gICAgICAgIH0pXG4gICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgb25jZShldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IG9uID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgdGhpcy5vZmYoZXZlbnQsIG9uKVxuICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcbiAgICAgIH1cbiAgICAgIG9uLmNhbGxiYWNrID0gY2FsbGJhY2sgLy8gTmVlZGVkIGZvciBgb2ZmKClgLCBzZWUgYmVsb3cuXG4gICAgICByZXR1cm4gdGhpcy5vbihldmVudCwgb24pXG4gICAgfSxcblxuICAgIG9mZihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAvLyBSZW1vdmUgYWxsIGV2ZW50c1xuICAgICAgICBkZWxldGUgdGhpcy4kZXZlbnRzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuJGV2ZW50cz8uW2V2ZW50XVxuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYWxsIGhhbmRsZXJzIGZvciB0aGlzIGV2ZW50XG4gICAgICAgICAgICBkZWxldGUgdGhpcy4kZXZlbnRzW2V2ZW50XVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYSBzcGVjaWZpYyBoYW5kbGVyOiBmaW5kIHRoZSBpbmRleCBpbiBjYWxsYmFja3NcbiAgICAgICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBlbnRyeVxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjYWxsYmFja3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAvLyBNYXRjaCBgY2IuY2FsbGJhY2tgIGFsc28sIGFzIHVzZWQgYnkgYG9uY2UoKWAsIHNlZSAgYWJvdmU6XG4gICAgICAgICAgICAgIGNiID0+IGNiID09PSBjYWxsYmFjayB8fCBjYi5jYWxsYmFjayA9PT0gY2FsbGJhY2tcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICAgIC8vIE9ubHkgcXVldWUgZXZlbnQgaWYgdGhlcmUgYWN0dWFsbHkgYXJlIGxpc3RlbmVycyBmb3IgaXQuXG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMuJGV2ZW50cz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLCBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCB0eXBlOlxuICAgIGhhc0xpc3RlbmVycyhldmVudCkge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKGV2KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5sZW5ndGggPiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISF0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZWdhdGUoZXZlbnQsIHRhcmdldCkge1xuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlKGV2LCB0YXJnZXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub24oZXZlbnQsICguLi5hcmdzKSA9PiB0YXJnZXQuZW1pdChldmVudCwgLi4uYXJncykpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc0FycmF5LCBpc09iamVjdCwgaXNTdHJpbmcsIGlzQm9vbGVhbiwgaXNOdW1iZXIsIGlzRnVuY3Rpb24sIGlzRGF0ZSxcbiAgaXNSZWdFeHAsIGFzQXJyYXlcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgdHlwZUNoZWNrZXJzID0ge1xuICBCb29sZWFuOiBpc0Jvb2xlYW4sXG4gIE51bWJlcjogaXNOdW1iZXIsXG4gIFN0cmluZzogaXNTdHJpbmcsXG4gIERhdGU6IGlzRGF0ZSxcbiAgQXJyYXk6IGlzQXJyYXksXG4gIE9iamVjdDogaXNPYmplY3QsXG4gIFJlZ0V4cDogaXNSZWdFeHAsXG4gIEZ1bmN0aW9uOiBpc0Z1bmN0aW9uXG59XG5cbi8vIERlY2xhcmUgdGhlc2Ugc2VwYXJhdGVseSBmcm9tIHRoZSBgdHlwZUNvbnZlcnRlcnNgIG9iamVjdCwgdG8gcHJldmVudFxuLy8gQmFiZWwgaXNzdWVzIHdpdGggYE9iamVjdGAgb3ZlcnJpZGluZyB0aGUgZ2xvYmFsIGBPYmplY3RgOlxuY29uc3QgdG9Cb29sZWFuID0gdmFsdWUgPT4gISF2YWx1ZVxuY29uc3QgdG9OdW1iZXIgPSB2YWx1ZSA9PiArdmFsdWVcbmNvbnN0IHRvU3RyaW5nID0gdmFsdWUgPT4gU3RyaW5nKHZhbHVlKVxuXG5jb25zdCB0b0RhdGUgPSB2YWx1ZSA9PiBpc0RhdGUodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBuZXcgRGF0ZSh2YWx1ZSlcblxuY29uc3QgdG9BcnJheSA9IHZhbHVlID0+IGlzQXJyYXkodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBpc1N0cmluZyh2YWx1ZSlcbiAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICA6IGFzQXJyYXkodmFsdWUpXG5cbmNvbnN0IHRvT2JqZWN0ID0gdmFsdWUgPT4gaXNPYmplY3QodmFsdWUpXG4gID8gdmFsdWVcbiAgLy8gSWYgYSBPYmplY3QgaXMgZXhwZWN0ZWQgYnV0IGEgQm9vbGVhbiBwcm92aWRlLCBjb252ZXJ0IHRvIGFuIGVtcHR5XG4gIC8vIG9iamVjdC4gVXNlZCBieSBgY3JlYXRhYmxlYCAmIGNvLCB0aGF0IGNhbiBiZSBib3RoLlxuICA6IHZhbHVlID09PSB0cnVlXG4gICAgPyB7fVxuICAgIDogbnVsbFxuXG5jb25zdCB0b1JlZ0V4cCA9IHZhbHVlID0+IGlzUmVnRXhwKHZhbHVlKVxuICA/IHZhbHVlXG4gIDogbmV3IFJlZ0V4cCh2YWx1ZSlcblxuY29uc3QgdHlwZUNvbnZlcnRlcnMgPSB7XG4gIEJvb2xlYW46IHRvQm9vbGVhbixcbiAgTnVtYmVyOiB0b051bWJlcixcbiAgU3RyaW5nOiB0b1N0cmluZyxcbiAgRGF0ZTogdG9EYXRlLFxuICBBcnJheTogdG9BcnJheSxcbiAgT2JqZWN0OiB0b09iamVjdCxcbiAgUmVnRXhwOiB0b1JlZ0V4cFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSB7XG4gIC8vIFNlZSBpZiBhbnkgb2YgdGhlIGV4cGVjdCB0eXBlcyBtYXRjaCwgcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHRoZXkgZG86XG4gIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBpZiAodHlwZUNoZWNrZXJzW3R5cGUubmFtZV0/Lih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSkge1xuICBjb25zdCBjb252ZXJ0ZXIgPSB0eXBlICYmIHR5cGVDb252ZXJ0ZXJzW3R5cGUubmFtZSB8fCB0eXBlXVxuICByZXR1cm4gY29udmVydGVyID8gY29udmVydGVyKHZhbHVlKSA6IHZhbHVlXG59XG4iLCJpbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIHBpY2tCeSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSZXNvdXJjZShzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0UmVzb3VyY2Uoc2NoZW1hLnJlc291cmNlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzb3VyY2UocmVzb3VyY2UsIGRlZmF1bHRzID0ge30pIHtcbiAgY29uc3QgeyBwYXJlbnQsIC4uLmRlZnMgfSA9IGRlZmF1bHRzXG4gIHJlc291cmNlID0gaXNPYmplY3QocmVzb3VyY2UpID8geyAuLi5kZWZzLCAuLi5yZXNvdXJjZSB9XG4gICAgOiBpc1N0cmluZyhyZXNvdXJjZSkgPyB7IC4uLmRlZnMsIHBhdGg6IHJlc291cmNlIH1cbiAgICA6IG51bGxcbiAgLy8gT25seSBzZXQgcGFyZW50IGlmIHBhdGggZG9lc24ndCBzdGFydCB3aXRoICcvJywgc28gcmVsYXRpdmUgVVJMcyBhcmVcbiAgLy8gZGVhbHQgd2l0aCBjb3JyZWN0bHkuXG4gIGlmIChcbiAgICByZXNvdXJjZSAmJlxuICAgIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgcmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQgJiZcbiAgICAhcmVzb3VyY2UucGF0aD8uc3RhcnRzV2l0aCgnLycpXG4gICkge1xuICAgIHJlc291cmNlLnBhcmVudCA9IHBhcmVudFxuICAgIGlmICghcmVzb3VyY2UucGF0aCkge1xuICAgICAgcmVzb3VyY2UucGF0aCA9ICcuJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzb3VyY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbWJlclJlc291cmNlKGlkLCByZXNvdXJjZSkge1xuICByZXR1cm4gaWQgIT0gbnVsbCAmJiByZXNvdXJjZT8udHlwZSA9PT0gJ2NvbGxlY3Rpb24nXG4gICAgPyB7XG4gICAgICB0eXBlOiAnbWVtYmVyJyxcbiAgICAgIC4uLnBpY2tCeShcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICh2YWx1ZSwga2V5KSA9PiBbJ21ldGhvZCcsICdwYXRoJywgJ3BhcmVudCddLmluY2x1ZGVzKGtleSlcbiAgICAgICksXG4gICAgICBpZDogYCR7aWR9YFxuICAgIH1cbiAgICA6IG51bGxcbn1cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0FycmF5LCBpc1N0cmluZywgaXNGdW5jdGlvbiwgYXNBcnJheSwgZXF1YWxzLFxuICBnZXRWYWx1ZUF0RGF0YVBhdGgsIGxhYmVsaXplLCBoeXBoZW5hdGUsIGZvcm1hdFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IGFwcFN0YXRlIGZyb20gJy4uL2FwcFN0YXRlLmpzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBFbWl0dGVyTWl4aW4gZnJvbSAnLi9FbWl0dGVyTWl4aW4uanMnXG5pbXBvcnQgeyBpc01hdGNoaW5nVHlwZSwgY29udmVydFR5cGUgfSBmcm9tICcuLi91dGlscy90eXBlLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0VtaXR0ZXJNaXhpbl0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJ2FwaScsXG4gICAgJyR2ZXJicycsXG4gICAgJyR2aWV3cycsXG4gICAgJyRpc1BvcHVsYXRlZCcsXG4gICAgJyRzY2hlbWFDb21wb25lbnQnLFxuICAgICckcm91dGVDb21wb25lbnQnLFxuICAgICckZGF0YUNvbXBvbmVudCcsXG4gICAgJyRzb3VyY2VDb21wb25lbnQnLFxuICAgICckcmVzb3VyY2VDb21wb25lbnQnLFxuICAgICckZGlhbG9nQ29tcG9uZW50JyxcbiAgICAnJHBhbmVsQ29tcG9uZW50JyxcbiAgICAnJHRhYkNvbXBvbmVudCdcbiAgXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVzRGF0YVxuICAgICAgPyB7ICRkYXRhQ29tcG9uZW50OiAoKSA9PiB0aGlzIH1cbiAgICAgIDoge31cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhcHBTdGF0ZSxcbiAgICAgIG92ZXJyaWRlczogbnVsbCAvLyBTZWUgYWNjZXNzb3IuanNcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3VyY2VTY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhPy5zY2hlbWFcbiAgICB9LFxuXG4gICAgdXNlcigpIHtcbiAgICAgIHJldHVybiBhcHBTdGF0ZS51c2VyXG4gICAgfSxcblxuICAgIC8vICR2ZXJicywgJHZlcmJzIGFuZCAkaXNQb3B1bGF0ZWQgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZVxuICAgIC8vIHJlYWN0aXZlbmVzcyBhY3Jvc3MgcHJvdmlkZS9pbmplY3QuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICB2ZXJicygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2ZXJicygpXG4gICAgfSxcblxuICAgIHZpZXdzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHZpZXdzKClcbiAgICB9LFxuXG4gICAgaXNQb3B1bGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kaXNQb3B1bGF0ZWQoKVxuICAgIH0sXG5cbiAgICBsb2NhbGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcGkubG9jYWxlXG4gICAgfSxcblxuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiBmYWxzZSB9KVxuICAgIH0sXG5cbiAgICByb290Q29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvb3QuJGNoaWxkcmVuWzBdXG4gICAgfSxcblxuICAgIHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIFVzZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGFzIGxpbmtzIHRvIGluamVjdHMsIHNvIERpdG9TY2hlbWEgY2FuXG4gICAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgICAgcmV0dXJuIHRoaXMuJHNjaGVtYUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgLy8gVXNlIGNvbXB1dGVkIHByb3BlcnRpZXMgYXMgbGlua3MgdG8gaW5qZWN0cywgc28gUm91dGVNaXhpbiBjYW5cbiAgICAgIC8vIG92ZXJyaWRlIHRoZSBwcm9wZXJ0eSBhbmQgcmV0dXJuIGB0aGlzYCBpbnN0ZWFkIG9mIHRoZSBwYXJlbnQuXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBmb3JtQ29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNGb3JtID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICB2aWV3Q29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNWaWV3ID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHMsIGluY2x1ZGluZ1xuICAgIC8vIHRoaXMgY3VycmVudCBjb21wb25lbnQsIHRoYXQgaXMgbGlua2VkIHRvIGEgcmVzb3VyY2UgKGFuZCB0aHVzIGxvYWRzIGl0c1xuICAgIC8vIG93biBkYXRhIGFuZCBkb2Vzbid0IGhvbGQgbmVzdGVkIGRhdGEpLlxuICAgIGRhdGFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGEgPyB0aGlzIDogdGhpcy4kZGF0YUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZXNvdXJjZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRkaWFsb2dDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYW5lbENvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQ/LiRwYXJlbnQuc2NoZW1hQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudFJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVDb21wb25lbnQ/LiRwYXJlbnQucm91dGVDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFyZW50Rm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LiRwYXJlbnQuZm9ybUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBkYXRhIG9mIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHNcbiAgICAvLyB0aGF0IGxvYWRzIGl0cyBvd24gZGF0YSBmcm9tIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlLlxuICAgIHJvb3REYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YUNvbXBvbmVudD8uZGF0YVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVDcmVhdGUoKSB7XG4gICAgdGhpcy4kdWlkID0gKyt1aWRcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhlIHN0YXRlIG9mIGNvbXBvbmVudHMgaXMgb25seSBhdmFpbGFibGUgZHVyaW5nIHRoZSBsaWZlLWN5Y2xlIG9mIGFcbiAgICAvLyBjb21wb25lbnQuIFNvbWUgaW5mb3JtYXRpb24gd2UgbmVlZCBhdmFpbGFibGUgbG9uZ2VyIHRoYW4gdGhhdCwgZS5nLlxuICAgIC8vIGBxdWVyeWAgJiBgdG90YWxgIG9uIFR5cGVMaXN0LCBzbyB0aGF0IHdoZW4gdGhlIHVzZXIgbmF2aWdhdGVzIGJhY2sgZnJvbVxuICAgIC8vIGVkaXRpbmcgYW4gaXRlbSBpbiB0aGUgbGlzdCwgdGhlIHN0YXRlIG9mIHRoZSBsaXN0IGlzIHN0aWxsIHRoZSBzYW1lLlxuICAgIC8vIFdlIGNhbid0IHN0b3JlIHRoaXMgaW4gYGRhdGFgLCBhcyB0aGlzIGlzIGFscmVhZHkgdGhlIHB1cmUgZGF0YSBmcm9tIHRoZVxuICAgIC8vIEFQSSBzZXJ2ZXIuIFRoYXQncyB3aGF0IHRoZSBgc3RvcmVgIGlzIGZvcjogTWVtb3J5IHRoYXQncyBhdmFpbGFibGUgYXNcbiAgICAvLyBsb25nIGFzIHRoZSBjdXJyZW50IGVkaXRpbmcgcGF0aCBpcyBzdGlsbCB2YWxpZC4gRm9yIHR5cGUgY29tcG9uZW50cyxcbiAgICAvLyB0aGlzIG1lbW9yeSBpcyBwcm92aWRlZCBieSB0aGUgcGFyZW50LCBzZWUgUm91dGVNaXhpbiBhbmQgRGl0b1BhbmUuXG4gICAgZ2V0U3RvcmUoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZVtrZXldXG4gICAgfSxcblxuICAgIHNldFN0b3JlKGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzZXQodGhpcy5zdG9yZSwga2V5LCB2YWx1ZSlcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRTdG9yZShrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN0b3JlKGtleSkgfHwgdGhpcy5zZXRTdG9yZShrZXksIHt9KVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFWYWx1ZShcbiAgICAgIGtleU9yRGF0YVBhdGgsXG4gICAgICB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgc2NoZW1hID0gdGhpcy5zY2hlbWEsIGNhbGxiYWNrID0gdHJ1ZSB9ID0ge31cbiAgICApIHtcbiAgICAgIGNvbnN0IHR5cGVzID0gdHlwZSAmJiBhc0FycmF5KHR5cGUpXG4gICAgICAvLyBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgZGF0YS1wYXRocyBpbiBga2V5T3JEYXRhUGF0aGAgY2FuIG9ubHkgYmVcbiAgICAgIC8vIHByb3ZpZGVkIGluIGluIGFycmF5IGZvcm1hdCBoZXJlOlxuICAgICAgbGV0IHZhbHVlID0gc2NoZW1hXG4gICAgICAgID8gaXNBcnJheShrZXlPckRhdGFQYXRoKVxuICAgICAgICAgID8gZ2V0VmFsdWVBdERhdGFQYXRoKHNjaGVtYSwga2V5T3JEYXRhUGF0aCwgKCkgPT4gdW5kZWZpbmVkKVxuICAgICAgICAgIDogc2NoZW1hW2tleU9yRGF0YVBhdGhdXG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGRlZikgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCBkZWYpKSB7XG4gICAgICAgICAgLy8gU3VwcG9ydCBgZGVmYXVsdCgpYCBmdW5jdGlvbnMgZm9yIGFueSB0eXBlIGV4Y2VwdCBgRnVuY3Rpb25gOlxuICAgICAgICAgIGRlZiA9IGRlZi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmXG4gICAgICB9XG5cbiAgICAgIGlmIChpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfVxuICAgICAgLy8gQW55IHNjaGVtYSB2YWx1ZSBoYW5kbGVkIHRocm91Z2ggYGdldFNjaGVtYVZhbHVlKClgIGNhbiBwcm92aWRlXG4gICAgICAvLyBhIGZ1bmN0aW9uIHRoYXQncyByZXNvbHZlZCB3aGVuIHRoZSB2YWx1ZSBpcyBldmFsdWF0ZWQ6XG4gICAgICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIE5vdyBmaW5hbGx5IHNlZSBpZiB3ZSBjYW4gY29udmVydCB0byB0aGUgZXhwZWN0IHR5cGVzLlxuICAgICAgaWYgKHR5cGVzICYmIHZhbHVlICE9IG51bGwgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICAgICAgY29uc3QgY29udmVydGVkID0gY29udmVydFR5cGUodHlwZSwgdmFsdWUpXG4gICAgICAgICAgaWYgKGNvbnZlcnRlZCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG5cbiAgICBnZXRMYWJlbChzY2hlbWEsIG5hbWUpIHtcbiAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdsYWJlbCcsIHsgdHlwZTogU3RyaW5nLCBzY2hlbWEgfSkgfHxcbiAgICAgICAgICBsYWJlbGl6ZShuYW1lIHx8IHNjaGVtYS5uYW1lKVxuICAgICAgICA6IGxhYmVsaXplKG5hbWUpIHx8ICcnXG4gICAgfSxcblxuICAgIGxhYmVsaXplLFxuXG4gICAgZ2V0QnV0dG9uQXR0cmlidXRlcyhuYW1lLCBidXR0b24pIHtcbiAgICAgIGNvbnN0IHZlcmIgPSB0aGlzLnZlcmJzW25hbWVdIHx8IG5hbWVcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsYXNzOiBgZGl0by1idXR0b24tJHt2ZXJifWAsXG4gICAgICAgIHRpdGxlOiBidXR0b24/LnRleHQgfHwgbGFiZWxpemUodmVyYilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlLCBmYWxsYmFjayA9IGZhbHNlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbmltYXRpb246IDE1MCxcbiAgICAgICAgZGlzYWJsZWQ6ICFkcmFnZ2FibGUsXG4gICAgICAgIGhhbmRsZTogJy5kaXRvLWJ1dHRvbi1kcmFnJyxcbiAgICAgICAgZHJhZ0NsYXNzOiAnZGl0by1kcmFnLWFjdGl2ZScsXG4gICAgICAgIGNob3NlbkNsYXNzOiAnZGl0by1kcmFnLWNob3NlbicsXG4gICAgICAgIGdob3N0Q2xhc3M6ICdkaXRvLWRyYWctZ2hvc3QnLFxuICAgICAgICBmYWxsYmFja0NsYXNzOiAnZGl0by1kcmFnLWZhbGxiYWNrJyxcbiAgICAgICAgZm9yY2VGYWxsYmFjazogZmFsbGJhY2tcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0UXVlcnlMaW5rKHF1ZXJ5KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgLy8gUHJlc2VydmUgaGFzaCBmb3IgdGFiczpcbiAgICAgICAgaGFzaDogdGhpcy4kcm91dGUuaGFzaFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG91bGRSZW5kZXIoc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuICEhc2NoZW1hICYmIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2lmJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNob3dEaWFsb2coe1xuICAgICAgY29tcG9uZW50cyxcbiAgICAgIGJ1dHRvbnMsXG4gICAgICBkYXRhLFxuICAgICAgc2V0dGluZ3MgPSB7XG4gICAgICAgIHdpZHRoOiA0ODAsXG4gICAgICAgIGhlaWdodDogJ2F1dG8nLFxuICAgICAgICBjbGlja1RvQ2xvc2U6IGZhbHNlXG4gICAgICB9XG4gICAgfSkge1xuICAgICAgLy8gU2hvd3MgYSBkaXRvLWRpYWxvZyBjb21wb25lbnQgdGhyb3VnaCB2dWUtanMtbW9kYWwsIGFuZCB3cmFwcyBpdCBpbiBhXG4gICAgICAvLyBwcm9taXNlIHNvIHRoYXQgdGhlIGJ1dHRvbnMgaW4gdGhlIGRpYWxvZyBjYW4gdXNlIGBkaWFsb2cucmVzb2x2ZSgpYFxuICAgICAgLy8gYW5kIGBkaWFsb2cucmVqZWN0KClgIHRvIGNsb3NlIHRoZSBtb2RhbCBkaWFsb2cgYW5kIHJlc29sdmUgLyByZWplY3RcbiAgICAgIC8vIHRoZSBwcm9taXNlIGF0IG9uY2UuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLiRtb2RhbC5zaG93KERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWRpYWxvZycpLCB7XG4gICAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgICBidXR0b25zLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgcHJvbWlzZTogeyByZXNvbHZlLCByZWplY3QgfVxuICAgICAgICB9LCBzZXR0aW5ncylcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlUGF0aChyZXNvdXJjZSkge1xuICAgICAgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShyZXNvdXJjZSlcbiAgICAgIC8vIFJlc291cmNlcyB3aXRob3V0IGEgcGFyZW50IGluaGVyaXQgdGhlIG9uZSBmcm9tIGBkYXRhQ29tcG9uZW50YFxuICAgICAgLy8gYXV0b21hdGljYWxseS5cbiAgICAgIGlmIChyZXNvdXJjZS5wYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXNvdXJjZS5wYXJlbnQgPSB0aGlzLmRhdGFDb21wb25lbnQ/LnJlc291cmNlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hcGkucmVzb3VyY2VzLmFueShnZXRSZXNvdXJjZShyZXNvdXJjZSkpXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlVXJsKHJlc291cmNlKSB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIHJldHVybiB1cmwgPyB0aGlzLmFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5OiByZXNvdXJjZS5xdWVyeSB9KSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3QoeyBtZXRob2QsIHVybCwgcmVzb3VyY2UsIHF1ZXJ5LCBkYXRhLCBpbnRlcm5hbCB9KSB7XG4gICAgICB1cmwgfHw9IHRoaXMuZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKVxuICAgICAgbWV0aG9kIHx8PSByZXNvdXJjZT8ubWV0aG9kXG4gICAgICBjb25zdCBjaGVja1VzZXIgPSAhaW50ZXJuYWwgJiYgdGhpcy5hcGkuaXNBcGlVcmwodXJsKVxuICAgICAgaWYgKGNoZWNrVXNlcikge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZW5zdXJlVXNlcigpXG4gICAgICB9XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYXBpLnJlcXVlc3QoeyBtZXRob2QsIHVybCwgZGF0YSwgcXVlcnkgfSlcbiAgICAgIC8vIERldGVjdCBjaGFuZ2Ugb2YgdGhlIG93biB1c2VyLCBhbmQgZmV0Y2ggaXQgYWdhaW4gaWYgaXQgd2FzIGNoYW5nZWQuXG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrVXNlciAmJlxuICAgICAgICBtZXRob2QgPT09ICdwYXRjaCcgJiZcbiAgICAgICAgZXF1YWxzKHJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLnVzZXIuaWQsIHRoaXMuYXBpLnVzZXJzKSlcbiAgICAgICkge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZmV0Y2hVc2VyKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH0sXG5cbiAgICByZXF1ZXN0KHsgY2FjaGUsIC4uLm9wdGlvbnMgfSkge1xuICAgICAgLy8gQWxsb3cgY2FjaGluZyBvZiBsb2FkZWQgZGF0YSBvbiB0d28gbGV2ZWxzOlxuICAgICAgLy8gLSAnZ2xvYmFsJzogY2FjaGUgZ2xvYmFsbHksIGZvciB0aGUgZW50aXJlIGFkbWluIHNlc3Npb25cbiAgICAgIC8vIC0gJ2xvY2FsJzogY2FjaGUgbG9jYWxseSB3aXRoaW4gdGhlIGNsb3Nlc3Qgcm91dGUgY29tcG9uZW50IHRoYXQgaXNcbiAgICAgIC8vICAgIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlIGFuZCBsb2FkcyBpdHMgb3duIGRhdGEuXG4gICAgICBjb25zdCBjYWNoZVBhcmVudCA9IGNhY2hlICYmIHtcbiAgICAgICAgZ2xvYmFsOiB0aGlzLmFwcFN0YXRlLFxuICAgICAgICBsb2NhbDogdGhpcy5kYXRhQ29tcG9uZW50XG4gICAgICB9W2NhY2hlXVxuICAgICAgY29uc3QgbG9hZENhY2hlID0gY2FjaGVQYXJlbnQ/LmxvYWRDYWNoZVxuICAgICAgLy8gQnVpbGQgYSBjYWNoZSBrZXkgZnJvbSB0aGUgY29uZmlnOlxuICAgICAgY29uc3QgY2FjaGVLZXkgPSBsb2FkQ2FjaGUgJiYgYCR7XG4gICAgICAgIG9wdGlvbnMubWV0aG9kIHx8ICdnZXQnfSAke1xuICAgICAgICBvcHRpb25zLnVybH0gJHtcbiAgICAgICAgLy8gVE9ETzogYHJlcXVlc3QucGFyYW1zYCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgcXVlcnlgIG9uXG4gICAgICAgIC8vIDIwMjItMTEtMDEsIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55bW9yZS5cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5xdWVyeSB8fCBvcHRpb25zLnBhcmFtcyB8fCAnJyl9ICR7XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSB8fCAnJylcbiAgICAgIH1gXG4gICAgICBpZiAobG9hZENhY2hlICYmIChjYWNoZUtleSBpbiBsb2FkQ2FjaGUpKSB7XG4gICAgICAgIHJldHVybiBsb2FkQ2FjaGVbY2FjaGVLZXldXG4gICAgICB9XG4gICAgICAvLyBOT1RFOiBObyBhd2FpdCBoZXJlLCByZXMgaXMgYSBwcm9taXNlIHRoYXQgd2UgY2FuIGVhc2lseSBjYWNoZS5cbiAgICAgIC8vIFRoYXQncyBmaW5lIGJlY2F1c2UgcHJvbWlzZXMgY2FuIGJlIHJlc29sdmVkIG92ZXIgYW5kIG92ZXIgYWdhaW4uXG4gICAgICBjb25zdCByZXMgPSB0aGlzLnNlbmRSZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEpXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgLy8gQ29udmVydCBheGlvcyBlcnJvcnMgdG8gbm9ybWFsIGVycm9yc1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBlcnJvci5yZXNwb25zZT8uZGF0YVxuICAgICAgICAgIHRocm93IGRhdGFcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoZGF0YS5tZXNzYWdlKSwgZGF0YSlcbiAgICAgICAgICAgIDogZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIGlmIChsb2FkQ2FjaGUpIHtcbiAgICAgICAgbG9hZENhY2hlW2NhY2hlS2V5XSA9IHJlc1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0sXG5cbiAgICBmb3JtYXQodmFsdWUsIHtcbiAgICAgIGxvY2FsZSA9IHRoaXMuYXBpLmxvY2FsZSxcbiAgICAgIGRlZmF1bHRzID0gdGhpcy5hcGkuZm9ybWF0cyxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBmb3JtYXQodmFsdWUsIHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGUobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgKCkgPT4gcmVzb2x2ZSh0cnVlKSxcbiAgICAgICAgICAoKSA9PiByZXNvbHZlKGZhbHNlKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBkb3dubG9hZChvcHRpb25zID0ge30pIHtcbiAgICAgIGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfVxuICAgICAgfVxuICAgICAgLy8gU2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDk5MTcwNjYvMTE2MzcwOFxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgYS5ocmVmID0gdGhpcy5hcGkuZ2V0QXBpVXJsKG9wdGlvbnMpXG4gICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5maWxlbmFtZSA/PyBudWxsXG4gICAgICBjb25zdCB7IGJvZHkgfSA9IGRvY3VtZW50XG4gICAgICBib2R5LmFwcGVuZENoaWxkKGEpXG4gICAgICBhLmNsaWNrKClcbiAgICAgIGJvZHkucmVtb3ZlQ2hpbGQoYSlcbiAgICB9LFxuXG4gICAgbm90aWZ5KG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5ub3RpZnkob3B0aW9ucylcbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50LmNsb3NlTm90aWZpY2F0aW9ucygpXG4gICAgfSxcblxuICAgIHNldHVwU2NoZW1hRmllbGRzKCkge1xuICAgICAgdGhpcy5zZXR1cE1ldGhvZHMoKVxuICAgICAgdGhpcy5zZXR1cENvbXB1dGVkKClcbiAgICAgIHRoaXMuc2V0dXBFdmVudHMoKVxuICAgIH0sXG5cbiAgICBzZXR1cE1ldGhvZHMoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5tZXRob2RzIHx8IHt9KSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgbWV0aG9kIGRlZmluaXRpb246ICR7a2V5fTogJHt2YWx1ZX1gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldHVwQ29tcHV0ZWQoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5jb21wdXRlZCB8fCB7fSkpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzb3IgPSBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgICAgICAgID8geyBnZXQ6IHZhbHVlIH1cbiAgICAgICAgICA6IGlzT2JqZWN0KHZhbHVlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmdldClcbiAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoYWNjZXNzb3IpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCBhY2Nlc3NvcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgY29tcHV0ZWQgcHJvcGVydHkgZGVmaW5pdGlvbjogJHtrZXl9OiAke3ZhbHVlfWBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBFdmVudHMoKSB7XG4gICAgICBjb25zdCB7IHdhdGNoLCBldmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAod2F0Y2gpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBpc0Z1bmN0aW9uKHdhdGNoKSA/IHdhdGNoLmNhbGwodGhpcykgOiB3YXRjaFxuICAgICAgICBpZiAoaXNPYmplY3QoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgLy8gSW5zdGFsbCB0aGUgd2F0Y2ggaGFuZGxlcnMgaW4gdGhlIG5leHQgdGljaywgc28gYWxsIGNvbXBvbmVudHMgYXJlXG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZWQgYW5kIHdlIGNhbiBjaGVjayBhZ2FpbnN0IHRoZWlyIG5hbWVzLlxuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGhhbmRsZXJzKSkge1xuICAgICAgICAgICAgICAvLyBFeHBhbmQgcHJvcGVydHkgbmFtZXMgdG8gJ2RhdGEucHJvcGVydHknOlxuICAgICAgICAgICAgICBjb25zdCBleHByID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlOYW1lKGtleSlcbiAgICAgICAgICAgICAgICA/IGBkYXRhLiR7a2V5fWBcbiAgICAgICAgICAgICAgICA6IGtleVxuICAgICAgICAgICAgICB0aGlzLiR3YXRjaChleHByLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFkZEV2ZW50ID0gKGtleSwgZXZlbnQsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgIHRoaXMub24oaHlwaGVuYXRlKGV2ZW50KSwgY2FsbGJhY2spXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBldmVudCBkZWZpbml0aW9uOiAke2tleX06ICR7Y2FsbGJhY2t9YClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50cykpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFsc28gc2NhbiBzY2hlbWEgZm9yIGBvbltBLVpdYC1zdHlsZSBjYWxsYmFja3MgYW5kIGFkZCB0aGVtXG4gICAgICAvLyBUT0RPOiBEZXBlcmVjYXRlIG9uZSBmb3JtYXQgb3IgdGhlIG90aGVyLCBpbiBmYXZvdXIgb2Ygb25seSBvbmUgd2F5IG9mXG4gICAgICAvLyBkb2luZyB0aGluZ3MuIERlY2lkZSB3aGljaCBvbmUgdG8gcmVtb3ZlLlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEpKSB7XG4gICAgICAgIGlmICgvXm9uW0EtWl0vLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LnNsaWNlKDIpLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0RXZlbnQoZXZlbnQsIHtcbiAgICAgIGNvbnRleHQgPSBudWxsLFxuICAgICAgcGFyZW50ID0gbnVsbFxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgaGFzTGlzdGVuZXJzID0gdGhpcy5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBjb25zdCBwYXJlbnRIYXNMaXN0ZW5lcnMgPSBwYXJlbnQ/Lmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGlmIChoYXNMaXN0ZW5lcnMgfHwgcGFyZW50SGFzTGlzdGVuZXJzKSB7XG4gICAgICAgIC8vIFRoZSBlZmZlY3RzIG9mIHNvbWUgZXZlbnRzIG5lZWQgc29tZSB0aW1lIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIFZ1ZS5cbiAgICAgICAgLy8gVXNlICRuZXh0VGljaygpIHRvIG1ha2Ugc3VyZSBvdXIgaGFuZGxlcnMgc2VlIHRoZXNlIGNoYW5nZXMuXG4gICAgICAgIC8vIEZvciBleGFtcGxlLCBgcHJvY2Vzc2VkSXRlbWAgaXMgb25seSBjb3JyZWN0IGFmdGVyIGNvbXBvbmVudHMgdGhhdFxuICAgICAgICAvLyBhcmUgbmV3bHkgcmVuZGVyZWQgZHVlIHRvIGRhdGEgY2hhbmdlcyBoYXZlIHJlZ2lzdGVyZWQgdGhlbXNlbHZlcy5cbiAgICAgICAgaWYgKFsnbG9hZCcsICdjaGFuZ2UnXS5pbmNsdWRlcyhldmVudCkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLiRuZXh0VGljaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gKGNvbnRleHQgPSBEaXRvQ29udGV4dC5nZXQodGhpcywgY29udGV4dCkpXG4gICAgICAgIGNvbnN0IHJlcyA9IGhhc0xpc3RlbmVyc1xuICAgICAgICAgID8gYXdhaXQgdGhpcy5lbWl0KGV2ZW50LCBnZXRDb250ZXh0KCkpXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgLy8gRG9uJ3QgYnViYmxlIHRvIHBhcmVudCBpZiBoYW5kbGVkIGV2ZW50IHJldHVybmVkIGBmYWxzZWBcbiAgICAgICAgaWYgKHBhcmVudEhhc0xpc3RlbmVycyAmJiByZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgcGFyZW50LmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfVxuICB9XG59XG5cbmxldCB1aWQgPSAwXG4iLCJpbXBvcnQgeyBpc0NyZWRpdENhcmQgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgY3JlZGl0Y2FyZCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzQ3JlZGl0Q2FyZCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBpbnZhbGlkJ1xufVxuIiwiZXhwb3J0IGNvbnN0IGRlY2ltYWxzID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBkZWNpbWFscykgPT4ge1xuICAgIGNvbnN0IG1hdGNoID0gZGVjaW1hbHMgPT09ICcqJyA/ICcrJyA6IGB7MSwke2RlY2ltYWxzfX1gXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF5bLStdP1xcXFxkKihcXFxcLlxcXFxkJHttYXRjaH0pPyRgKS50ZXN0KHZhbHVlKVxuICB9LFxuXG4gIG1lc3NhZ2U6ICh2YWx1ZSwgZGVjaW1hbHMpID0+IChcbiAgICBgbXVzdCBiZSBudW1lcmljIGFuZCBtYXkgY29udGFpbiAke1xuICAgICAgIWRlY2ltYWxzIHx8IGRlY2ltYWxzID09PSAnKicgPyAnJyA6IGRlY2ltYWxzXG4gICAgfSBkZWNpbWFsIHBvaW50c2BcbiAgKVxufVxuIiwiaW1wb3J0IHsgaXNFbWFpbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBlbWFpbCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRW1haWwodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSBhIHZhbGlkIGVtYWlsJ1xufVxuIiwiaW1wb3J0IHsgaXNIb3N0bmFtZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBob3N0bmFtZSA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSG9zdG5hbWUodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgaG9zdCBuYW1lJ1xufVxuIiwiaW1wb3J0IHsgaXNEb21haW4gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZG9tYWluID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNEb21haW4odmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgZG9tYWluJ1xufVxuIiwiaW1wb3J0IHsgaXNJbnRlZ2VyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGludGVnZXIgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0ludGVnZXIodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSB3aG9sZSBudW1iZXInXG59XG4iLCJleHBvcnQgY29uc3QgbWF4ID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtYXgpID0+IHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgbWF4KSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWF4fSBvciBsZXNzYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgbWluID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtaW4pID0+IHZhbHVlID49IG1pbixcbiAgbWVzc2FnZSh2YWx1ZSwgbWluKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWlufSBvciBtb3JlYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcGFzc3dvcmQgPSB7XG4gIC8vIEFsbG93IGFueSB2YWx1ZS4gRm9yIG5vdyB0aGlzIGlzIG9ubHkgdXNlZCBhcyBhIG1hcmtlciwgdG8gYWxsb3cgdGhlXG4gIC8vIHJlcXVpcmVkIHZhbGlkYXRpb24gdG8gaGFuZGxlIHVuY2hhbmdlZCBwYXNzd29yZHMgc2VwYXJhdGVseS5cbiAgdmFsaWRhdGU6ICgpID0+IHRydWVcbn1cbiIsImV4cG9ydCBjb25zdCByYW5nZSA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgW21pbiwgbWF4XSkgPT4gdmFsdWUgPj0gbWluICYmIHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgW21pbiwgbWF4XSkge1xuICAgIHJldHVybiBgbXVzdCBiZSBiZXR3ZWVuICR7bWlufSBhbmQgJHttYXh9YFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcmVxdWlyZWQgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIHNldHRpbmdzLCB7IHBhc3N3b3JkIH0pID0+IChcbiAgICAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHx8XG4gICAgLy8gUGFzc3dvcmQgZmllbGRzIHVzZSBgdW5kZWZpbmVkYCBhcyBvcHBvc2VkIHRvIGBudWxsYCB3aGVuIHRoZXkncmUgc2V0XG4gICAgLy8gYnV0IHVuY2hhbmdlZCwgYWxsb3cgdGhpcyB0byBwYXNzIHRocm91Z2g6XG4gICAgKHBhc3N3b3JkICYmIHZhbHVlID09PSB1bmRlZmluZWQpXG4gICksXG4gIG1lc3NhZ2U6ICdpcyByZXF1aXJlZCcsXG4gIG51bGxpc2g6IHRydWVcbn1cbiIsImltcG9ydCB7IGlzVXJsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IHVybCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzVXJsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIHZhbGlkIFVSTCdcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgdmFsaWRhdGlvbnMgZnJvbSAnLi4vdmFsaWRhdGlvbnMvaW5kZXguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVG91Y2hlZDogZmFsc2UsXG4gICAgICBpc0RpcnR5OiBmYWxzZSxcbiAgICAgIGlzVmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgZXJyb3JzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZXZlbnRzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzVG91Y2hlZCA9IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxuICAgICAgICB9LFxuICAgICAgICBjaGFuZ2U6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICAgIH0sXG4gICAgICAgIGlucHV0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHZhbGlkYXRlKG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZScsIHRoaXMuZGF0YVBhdGgsIHZhbHVlLCB0aGlzLnZhbGlkYXRpb25zKVxuICAgICAgZm9yIChjb25zdCBbcnVsZSwgc2V0dGluZ10gb2YgT2JqZWN0LmVudHJpZXModGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdmFsaWRhdGlvbnNbcnVsZV1cbiAgICAgICAgaWYgKHZhbGlkYXRvciAmJiAodmFsaWRhdG9yLm51bGxpc2ggfHwgdmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbGlkYXRlLCBtZXNzYWdlIH0gPSB2YWxpZGF0b3JcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlKHZhbHVlLCBzZXR0aW5nLCB0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNGdW5jdGlvbihtZXNzYWdlKVxuICAgICAgICAgICAgICAgID8gbWVzc2FnZSh2YWx1ZSwgc2V0dGluZywgdGhpcylcbiAgICAgICAgICAgICAgICA6IG1lc3NhZ2VcbiAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvciwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IHRydWVcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gaXNWYWxpZFxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoZmFsc2UpXG4gICAgfSxcblxuICAgIG1hcmtEaXJ0eSgpIHtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIG9uIG5ldyBpbnB1dC5cbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBhZGRFcnJvcihlcnJvciwgYWRkTGFiZWwgPSBmYWxzZSkge1xuICAgICAgdGhpcy5lcnJvcnMgfHw9IFtdXG4gICAgICBpZiAoYWRkTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsIHx8IHRoaXMucGxhY2Vob2xkZXIgfHwgdGhpcy5uYW1lXG4gICAgICAgIGVycm9yID0gYFRoZSAke2xhYmVsfSBmaWVsZCAke2Vycm9yfS5gXG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIC8vIENvbnZlcnQgZnJvbSBBSlYgZXJyb3JzIG9iamVjdHMgdG8gYW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHRoaXMuZXJyb3JzID0gW11cbiAgICAgIGZvciAoY29uc3QgeyBtZXNzYWdlIH0gb2YgZXJyb3JzKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IobWVzc2FnZSwgdHJ1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGdldEVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVycm9ycyA/IFsuLi50aGlzLmVycm9yc10gOiBudWxsXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5lcnJvcnMgPSBudWxsXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBwYXJzZURhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hQWNjZXNzb3IoXG4gIGtleU9yRGF0YVBhdGgsXG4gIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBnZXQsIHNldCwgY2FsbGJhY2sgPSB0cnVlIH0gPSB7fVxuKSB7XG4gIC8vIGBrZXlPckRhdGFQYXRoYCBjYW4gYmUgYSBzaW1wbGUgcHJvcGVydHkga2V5LFxuICAvLyBvciBhIGRhdGEtcGF0aCBpbnRvIHN1Yi1wcm9wZXJ0aWVzLCBib3RoIGluIGFycmF5IG9yIHN0cmluZyBmb3JtYXQuXG4gIGlmIChpc1N0cmluZyhrZXlPckRhdGFQYXRoKSAmJiBrZXlPckRhdGFQYXRoLmluY2x1ZGVzKCcuJykpIHtcbiAgICBrZXlPckRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICB9XG4gIC8vIFVzZSB0aGUgbm9ybWFsaXplZCBkYXRhIHBhdGggZm9yIHRoZSBoYW5kbGluZyBvdmVycmlkZXNcbiAgY29uc3QgbmFtZSA9IG5vcm1hbGl6ZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgLy8gT25seSBkZXRlcm1pbmUgc2NoZW1hIHZhbHVlIGlmIHdlIGhhdmUgbm8gZ2V0dGVyLCBvciB0aGUgZ2V0dGVyXG4gICAgICAvLyB3YW50cyB0byByZWNlaXZlIHRoZSB2YWx1ZSBhbmQgcHJvY2VzcyBpdCBmdXJ0aGVyOlxuICAgICAgY29uc3QgdmFsdWUgPSAhZ2V0IHx8IGdldC5sZW5ndGggPiAwXG4gICAgICAgIC8vIE5PVEU6IEJlY2F1c2UgYHNjaGVtYWAgb2JqZWN0cyBhcmUgcmV0cmlldmVkIGZyb20gYG1ldGFgIG9iamVjdCwgdGhleVxuICAgICAgICAvLyBkb24ndCBzZWVtIHRvIGJlIHJlYWN0aXZlLiBUbyBhbGxvdyBjaGFuZ2VkIGluIGBzY2hlbWFgIHZhbHVlcyxcbiAgICAgICAgLy8gYHNldCgpYCBzdG9yZXMgY2hhbmdlZCB2YWx1ZXMgaW4gdGhlIHNlcGFyYXRlIGBvdmVycmlkZXNgIG9iamVjdC5cbiAgICAgICAgPyB0aGlzLm92ZXJyaWRlcyAmJiBuYW1lIGluIHRoaXMub3ZlcnJpZGVzXG4gICAgICAgICAgPyB0aGlzLm92ZXJyaWRlc1tuYW1lXVxuICAgICAgICAgIDogdGhpcy5nZXRTY2hlbWFWYWx1ZShrZXlPckRhdGFQYXRoLCB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgY2FsbGJhY2sgfSlcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIGlmIChzZXQpIHtcbiAgICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm92ZXJyaWRlcyB8fD0ge31cbiAgICAgICAgdGhpcy4kc2V0KHRoaXMub3ZlcnJpZGVzLCBuYW1lLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0b3JlQWNjZXNzb3IobmFtZSwgeyBkZWZhdWx0OiBkZWYsIGdldCwgc2V0IH0gPSB7fSkge1xuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zOlxuICAgICAgICB2YWx1ZSA9IGlzRnVuY3Rpb24oZGVmKSA/IGRlZi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dCkgOiBkZWZcbiAgICAgICAgLy8gVHJpZ2dlciBzZXR0ZXIgYnkgc2V0dGluZyB2YWx1ZSBhbmQgYWNjZXNzb3IgdG8gZGVmYXVsdDpcbiAgICAgICAgdGhpc1tuYW1lXSA9IHZhbHVlXG4gICAgICAgIC8vIE5vdyBhY2Nlc3Mgc3RvcmUgYWdhaW4sIGZvciByZWFjdGl2aXR5IHRyYWNraW5nXG4gICAgICAgIHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBnZXR0ZXIgdG8gZnVydGhlciBjaGFuZ2Ugb3IgcHJvY2VzcyB0aGUgdmFsdWVcbiAgICAgIC8vIHJldHJpZXZlZCBmcm9tIHRoZSBzdG9yZTpcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBzZXR0ZXIgdG8gcmV0dXJuIGEgbmV3IHZhbHVlIHRvIHNldCwgb3IgZG8gdGhlXG4gICAgICAvLyBzZXR0aW5nIGl0c2VsZiwgYW5kIHRoZW4gcmV0dXJuIGB1bmRlZmluZWRgOlxuICAgICAgaWYgKCFzZXQgfHwgKHZhbHVlID0gc2V0LmNhbGwodGhpcywgdmFsdWUpKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2V0U3RvcmUobmFtZSwgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJjb25zdCB1aWRNYXAgPSBuZXcgV2Vha01hcCgpXG5cbi8vIEdlbmVyYXRlZCBhbmQgcmVtZW1iZXJzIHVuaXF1ZSBpZHMgcGVyIHBhc3NlZCBvYmplY3QgdXNpbmcgYSB3ZWFrIG1hcC5cbmxldCB1aWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gZ2V0VWlkKG9iamVjdCwgaXRlbUlkKSB7XG4gIGxldCBpZCA9IHVpZE1hcC5nZXQob2JqZWN0KVxuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBpdGVtSWQgfHwgYEAkeysrdWlkfWBcbiAgICB1aWRNYXAuc2V0KG9iamVjdCwgaWQpXG4gIH1cbiAgcmV0dXJuIGlkXG59XG4iLCJpbXBvcnQgeyBpc1RlbXBvcmFyeUlkIH0gZnJvbSAnLi9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLCBhc0FycmF5LCBwYXJzZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gJ25hbm9pZCdcblxuLy8gU2NoZW1hR3JhcGggaXMgYSBjbGFzcyB0byBjb2xsZWN0IHNjaGVtYSBncmFwaCBtZXRhIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvXG4vLyBwcm9jZXNzIHNvdXJjZXMgYW5kIHJlbGF0aW9ucyBmb3IgdGhlIGdpdmVuIHRhcmdldHMgJ3NlcnZlcicgYW5kICdjbGlwYm9hcmQnLFxuLy8gYWNjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlOlxuLy9cbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZXJ2ZXIgICAgfCBjbGlwYm9hcmQgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IGZhbHNlICAgICAgICAgICB8IGtlZXAgaWQgICB8IGtlZXAgaWQgICB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiB0cnVlICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZWYsICNyZWYgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSwgdGVtcG9yYXJ5IHwgcmVmLCAjcmVmIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IGZhbHNlICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlbW92ZSBpZCB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSwgdGVtcG9yYXJ5ICAgfCByZWYsICNpZCAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogdHJ1ZSAgICAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjaWQgIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUsIHRlbXBvcmFyeSAgICB8IHJlZiwgI2lkICB8IHJlZiwgI2lkICB8XG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuXG5leHBvcnQgY2xhc3MgU2NoZW1hR3JhcGgge1xuICBncmFwaCA9IHt9XG4gIHJlZmVyZW5jZXMgPSB7fVxuXG4gIHNldChkYXRhUGF0aCwgc2V0dGluZ3MsIGRlZmF1bHRzKSB7XG4gICAgZGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICAgIGxldCBzdWJHcmFwaCA9IHRoaXMuZ3JhcGhcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgZGF0YVBhdGgpIHtcbiAgICAgIGNvbnN0IGtleSA9IGlzSW50ZWdlcigrcGFydCkgPyAnKicgOiBwYXJ0XG4gICAgICBzdWJHcmFwaCA9IChzdWJHcmFwaFtrZXldID8/PSB7fSlcbiAgICB9XG4gICAgc3ViR3JhcGguJHNldHRpbmdzID0ge1xuICAgICAgLi4uZGVmYXVsdHMsIC8vIFNlZSBgYWRkU291cmNlKGRhdGFQYXRoKWBcbiAgICAgIC4uLnN1YkdyYXBoLiRzZXR0aW5ncyxcbiAgICAgIC4uLnNldHRpbmdzXG4gICAgfVxuICB9XG5cbiAgYWRkU291cmNlKGRhdGFQYXRoLCBzY2hlbWEpIHtcbiAgICAvLyBPbmx5IHNldCBgcmVsYXRlZDogZmFsc2VgIHRocm91Z2ggdGhlIGRlZmF1bHRzLCBhcyBgc2V0U291cmNlUmVsYXRlZCgpYFxuICAgIC8vIG1heSBiZSBjYWxsZWQgYmVmb3JlIGBhZGRTb3VyY2UoKWAsIGRlcGVuZGluZyBvbiB0aGUgZ3JhcGggc3RydWN0dXJlLlxuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7IHR5cGU6ICdzb3VyY2UnLCBzY2hlbWEgfSwgeyByZWxhdGVkOiBmYWxzZSB9KVxuICB9XG5cbiAgc2V0U291cmNlUmVsYXRlZChkYXRhUGF0aCkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICByZWxhdGVkOiB0cnVlLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aClcbiAgICB9KVxuICB9XG5cbiAgYWRkUmVsYXRpb24oZGF0YVBhdGgsIHJlbGF0ZWREYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHtcbiAgICAgIHR5cGU6ICdyZWxhdGlvbicsXG4gICAgICBzY2hlbWEsXG4gICAgICBpbnRlcm5hbDogISFyZWxhdGVkRGF0YVBhdGgsXG4gICAgICByZWZlcmVuY2U6IHRoaXMuZ2V0UmVmZXJlbmNlUHJlZml4KHJlbGF0ZWREYXRhUGF0aClcbiAgICB9KVxuICB9XG5cbiAgZ2V0UmVmZXJlbmNlUHJlZml4KGRhdGFQYXRoKSB7XG4gICAgcmV0dXJuIGRhdGFQYXRoXG4gICAgICA/ICh0aGlzLnJlZmVyZW5jZXNbZGF0YVBhdGhdID8/PSBuYW5vaWQoNikpXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIGZsYXR0ZW4oKSB7XG4gICAgY29uc3QgZmxhdHRlbiA9IGdyYXBoID0+IHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBbXVxuICAgICAgZm9yIChjb25zdCBba2V5LCB7ICRzZXR0aW5ncywgLi4uc3ViR3JhcGggfV0gb2YgT2JqZWN0LmVudHJpZXMoZ3JhcGgpKSB7XG4gICAgICAgIGlmICgkc2V0dGluZ3MpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2tleSwgJHNldHRpbmdzXSlcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtzdWJLZXksIHNldHRpbmdzXSBvZiBmbGF0dGVuKHN1YkdyYXBoKSkge1xuICAgICAgICAgIGVudHJpZXMucHVzaChbYCR7a2V5fS8ke3N1YktleX1gLCBzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYXR0ZW4odGhpcy5ncmFwaClcbiAgfVxuXG4gIHByb2Nlc3Moc291cmNlU2NoZW1hLCBkYXRhLCB7IHRhcmdldCB9KSB7XG4gICAgY29uc3QgY2xpcGJvYXJkID0gdGFyZ2V0ID09PSAnY2xpcGJvYXJkJ1xuICAgIGlmIChjbGlwYm9hcmQpIHtcbiAgICAgIGRlbGV0ZSBkYXRhW3NvdXJjZVNjaGVtYS5pZEtleSB8fCAnaWQnXVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgc2V0dGluZ3NdIG9mIHRoaXMuZmxhdHRlbigpKSB7XG4gICAgICBjb25zdCB7IHR5cGUsIHNjaGVtYSwgaW50ZXJuYWwsIHJlbGF0ZWQsIHJlZmVyZW5jZSB9ID0gc2V0dGluZ3NcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHR5cGUgPT09ICdzb3VyY2UnXG4gICAgICBjb25zdCByZWxhdGlvbiA9IHR5cGUgPT09ICdyZWxhdGlvbidcbiAgICAgIGlmIChzb3VyY2UgfHwgcmVsYXRpb24gJiYgaW50ZXJuYWwpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gZ2V0VmFsdWVBdERhdGFQYXRoKGRhdGEsIGRhdGFQYXRoLCAoKSA9PiBudWxsKVxuICAgICAgICBjb25zdCByZW1vdmVJZCA9IGNsaXBib2FyZCAmJiBzb3VyY2UgJiYgIXJlbGF0ZWRcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlSWQgPSBjbGlwYm9hcmQgJiYgKFxuICAgICAgICAgIHJlbGF0aW9uICYmIGludGVybmFsIHx8XG4gICAgICAgICAgc291cmNlICYmIHJlbGF0ZWRcbiAgICAgICAgKVxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGFzQXJyYXkodmFsdWVzKS5mbGF0KCkpIHtcbiAgICAgICAgICBjb25zdCBpZEtleSA9IChcbiAgICAgICAgICAgIHNvdXJjZSAmJiBzY2hlbWEuaWRLZXkgfHxcbiAgICAgICAgICAgIHJlbGF0aW9uICYmIHNjaGVtYS5yZWxhdGVCeSB8fFxuICAgICAgICAgICAgJ2lkJ1xuICAgICAgICAgIClcbiAgICAgICAgICBsZXQgaWQgPSB2YWx1ZT8uW2lkS2V5XVxuICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAocmVtb3ZlSWQpIHtcbiAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2lkS2V5XVxuICAgICAgICAgICAgfSBpZiAocmVmZXJlbmNlSWQgfHwgaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgaWYgKGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBpZC5zbGljZSgxKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJlZktleSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgIC8vIENsaXBib2FyZCBqdXN0IG5lZWRzIHRlbXBvcmFyeSBpZHMgdW5kZXIgdGhlIGFjdHVhbCBgaWRLZXlgLlxuICAgICAgICAgICAgICAgID8gaWRLZXlcbiAgICAgICAgICAgICAgICAvLyBTZXJ2ZXIgd2FudHMgT2JqZWN0aW9uLXN0eWxlICcjaWQnIC8gJyNyZWYnIHBhaXJzLlxuICAgICAgICAgICAgICAgIDogc291cmNlID8gJyNpZCcgOiAnI3JlZidcbiAgICAgICAgICAgICAgY29uc3QgcmV2VmFsdWUgPSBjbGlwYm9hcmRcbiAgICAgICAgICAgICAgICA/IGBAJHtpZH1gXG4gICAgICAgICAgICAgICAgLy8gS2VlcCB0aGUgaWRzIHVuaXF1ZSBpbiByZWZlcmVuY2UgZ3JvdXBzLCBzaW5jZSB0aGV5IHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgIC8vIGFjY3Jvc3MgdGhlIGZ1bGwgZ3JhcGguXG4gICAgICAgICAgICAgICAgOiByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAgID8gYCR7cmVmZXJlbmNlfS0ke2lkfWBcbiAgICAgICAgICAgICAgICAgIDogaWQgLy8gQSB0ZW1wb3JhcnkgaWQgd2l0aG91dCBhIHJlbGF0ZWQsIGp1c3QgcHJlc2VydmUgaXQuXG4gICAgICAgICAgICAgIHZhbHVlW3JlZktleV0gPSByZXZWYWx1ZVxuICAgICAgICAgICAgICBpZiAocmVmS2V5ICE9PSBpZEtleSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YVxuICB9XG59XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGdldFVpZCB9IGZyb20gJy4vdWlkLmpzJ1xuaW1wb3J0IHsgU2NoZW1hR3JhcGggfSBmcm9tICcuL1NjaGVtYUdyYXBoLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGgsIGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNTdHJpbmcsIGlzQXJyYXksIGlzRnVuY3Rpb24sIGlzUHJvbWlzZSwgY2xvbmUsIGNhbWVsaXplLCBpc01vZHVsZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5jb25zdCB0eXBlQ29tcG9uZW50cyA9IHt9XG5jb25zdCB1bmtub3duVHlwZVJlcG9ydGVkID0ge31cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpIHtcbiAgdHlwZUNvbXBvbmVudHNbdHlwZV0gPSBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wb25lbnQodHlwZSwgYWxsb3dOdWxsID0gZmFsc2UpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gdHlwZUNvbXBvbmVudHNbdHlwZV0gfHwgbnVsbFxuICBpZiAoIWNvbXBvbmVudCAmJiAhYWxsb3dOdWxsICYmICF1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdKSB7XG4gICAgLy8gUmVwb3J0IGVhY2ggbWlzc2luZyB0eXBlIG9ubHkgb25jZSwgdG8gYXZvaWQgZmxvb2RpbmcgdGhlIGNvbnNvbGU6XG4gICAgdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSA9IHRydWVcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gRGl0byBjb21wb25lbnQgdHlwZTogJyR7dHlwZX0nYClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoU2NoZW1hKHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgY29uc3Qgc2NoZW1hcyA9IFtcbiAgICAuLi5PYmplY3QudmFsdWVzKHNjaGVtYT8udGFicyB8fCB7fSksXG4gICAgc2NoZW1hXG4gIF1cbiAgZm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuICAgIGlmIChzY2hlbWEpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKHNjaGVtYSlcbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWEoc2NoZW1hLCBzY2hlbWEgPT4ge1xuICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hLmNvbXBvbmVudHMgfHwge30pKSB7XG4gICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpXG4gICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gZm9yRWFjaFNjaGVtYUNvbXBvbmVudChcbiAgICBzY2hlbWEsXG4gICAgKGNvbXBvbmVudCwgbmFtZSkgPT4gY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKSA/IGNvbXBvbmVudCA6IHVuZGVmaW5lZFxuICApIHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gZm9yRWFjaFNjaGVtYUNvbXBvbmVudChcbiAgICBzY2hlbWEsXG4gICAgKGNvbXBvbmVudCwgbmFtZSkgPT4gY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKSA/IHRydWUgOiB1bmRlZmluZWRcbiAgKSA9PT0gdHJ1ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlcnlTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gZm9yRWFjaFNjaGVtYUNvbXBvbmVudChcbiAgICBzY2hlbWEsXG4gICAgKGNvbXBvbmVudCwgbmFtZSkgPT4gIWNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyBmYWxzZSA6IHVuZGVmaW5lZFxuICApICE9PSBmYWxzZVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHVud3JhcE1vZHVsZSA9IGZhbHNlKSB7XG4gIGlmIChpc0Z1bmN0aW9uKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSBzY2hlbWEoKVxuICB9XG4gIGlmIChpc1Byb21pc2Uoc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IGF3YWl0IHNjaGVtYVxuICB9XG4gIGlmIChpc01vZHVsZShzY2hlbWEpKSB7XG4gICAgLy8gQ29weSB0byBjb252ZXJ0IGZyb20gbW9kdWxlIHRvIG9iamVjdDpcbiAgICBzY2hlbWEgPSB7IC4uLnNjaGVtYSB9XG4gICAgLy8gVW53cmFwIGRlZmF1bHQgb3IgbmFtZWQgc2NoZW1hXG4gICAgaWYgKCFzY2hlbWEubmFtZSAmJiAodW53cmFwTW9kdWxlIHx8IHNjaGVtYS5kZWZhdWx0KSkge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHNjaGVtYSlcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBuYW1lID0ga2V5c1swXVxuICAgICAgICBzY2hlbWEgPSBzY2hlbWFbbmFtZV1cbiAgICAgICAgaWYgKG5hbWUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBzY2hlbWFcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFzKFxuICB1bnJlc29sdmVkU2NoZW1hcyxcbiAgcmVzb2x2ZUl0ZW0gPSByZXNvbHZlU2NoZW1hXG4pIHtcbiAgbGV0IHNjaGVtYXMgPSBpc0Z1bmN0aW9uKHVucmVzb2x2ZWRTY2hlbWFzKVxuICAgID8gdW5yZXNvbHZlZFNjaGVtYXMoKVxuICAgIDogdW5yZXNvbHZlZFNjaGVtYXNcbiAgc2NoZW1hcyA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hcywgZmFsc2UpXG4gIGlmIChpc0FycmF5KHNjaGVtYXMpKSB7XG4gICAgLy8gVHJhbnNsYXRlIGFuIGFycmF5IG9mIGR5bmFtaWMgaW1wb3J0LCBlYWNoIGltcG9ydGluZyBvbmUgbmFtZWQgc2NoZW1hXG4gICAgLy8gbW9kdWxlIHRvIGFuIG9iamVjdCB3aXRoIG5hbWVkIGVudHJpZXMuXG4gICAgc2NoZW1hcyA9IE9iamVjdC5mcm9tRW50cmllcyhhd2FpdCBQcm9taXNlLmFsbChzY2hlbWFzLm1hcChcbiAgICAgIGFzeW5jIGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICByZXR1cm4gW3NjaGVtYS5uYW1lLCBzY2hlbWFdXG4gICAgICB9XG4gICAgKSkpXG4gIH0gZWxzZSBpZiAoaXNPYmplY3Qoc2NoZW1hcykpIHtcbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLm1hcChcbiAgICAgIGFzeW5jIChba2V5LCBpdGVtXSkgPT4ge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgfVxuICAgICkpKVxuICB9XG4gIHJldHVybiBzY2hlbWFzXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUGFuZWxzKHNjaGVtYSkge1xuICBjb25zdCB7IHBhbmVscyB9ID0gc2NoZW1hXG4gIGlmIChzY2hlbWEucGFuZWxzKSB7XG4gICAgc2NoZW1hLnBhbmVscyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKHBhbmVscylcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1ZpZXcoY29tcG9uZW50LCBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzKSB7XG4gIGNvbnN0IGNoaWxkcmVuID0gW11cbiAgcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKVxuICBhd2FpdCByZXNvbHZlUGFuZWxzKHNjaGVtYSlcbiAgaWYgKGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpKSB7XG4gICAgYXdhaXQgcHJvY2Vzc0NvbXBvbmVudChhcGksIHNjaGVtYSwgbmFtZSwgY2hpbGRyZW4sIDApXG4gIH0gZWxzZSB7XG4gICAgLy8gQSBtdWx0aS1jb21wb25lbnQgdmlldywgc3RhcnQgYXQgbGV2ZWwgMVxuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCBjaGlsZHJlbiwgMSlcbiAgfVxuICByb3V0ZXMucHVzaCh7XG4gICAgcGF0aDogYC8ke3NjaGVtYS5wYXRofWAsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50LFxuICAgIG1ldGE6IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NDb21wb25lbnQoYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwpIHtcbiAgc2NoZW1hLmxldmVsID0gbGV2ZWxcbiAgLy8gRGVsZWdhdGUgc2NoZW1hIHByb2Nlc3NpbmcgdG8gdGhlIGFjdHVhbCB0eXBlIGNvbXBvbmVudHMuXG4gIHJldHVybiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5wcm9jZXNzU2NoZW1hPy4oXG4gICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKSB7XG4gIC8vIFVzZWQgZm9yIHZpZXcgYW5kIHNvdXJjZSBzY2hlbWFzLCBzZWUgU291cmNlTWl4aW5cbiAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gIHNjaGVtYS5wYXRoID0gc2NoZW1hLnBhdGggfHwgYXBpLm5vcm1hbGl6ZVBhdGgobmFtZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCByb3V0ZXMsIGxldmVsKSB7XG4gIGNvbnN0IHByb21pc2VzID0gW11cbiAgZm9yRWFjaFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIChjb21wb25lbnQsIG5hbWUpID0+IHtcbiAgICBwcm9taXNlcy5wdXNoKHByb2Nlc3NDb21wb25lbnQoYXBpLCBjb21wb25lbnQsIG5hbWUsIHJvdXRlcywgbGV2ZWwpKVxuICB9KVxuICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpIHtcbiAgLy8gRmlyc3QgcmVzb2x2ZSB0aGUgZm9ybXMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGJhY2sgb24gdGhlIHNjaGVtYS5cbiAgbGV0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMgfSA9IHNjaGVtYVxuICBpZiAoZm9ybXMpIHtcbiAgICBmb3JtcyA9IHNjaGVtYS5mb3JtcyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKGZvcm1zLCByZXNvbHZlRm9ybSlcbiAgfSBlbHNlIGlmIChmb3JtKSB7XG4gICAgZm9ybSA9IHNjaGVtYS5mb3JtID0gYXdhaXQgcmVzb2x2ZUZvcm0oZm9ybSlcbiAgfSBlbHNlIGlmIChjb21wb25lbnRzKSB7XG4gICAgLy8gTk9URTogUHJvY2Vzc2luZyBmb3JtcyBpbiBjb21wdXRlZCBjb21wb25lbnRzIGlzIG5vdCBzdXBwb3J0ZWQsIHNpbmNlIGl0XG4gICAgLy8gb25seSBjYW4gYmUgY29tcHV0ZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhY3R1YWwgZGF0YS5cbiAgICBpZiAoaXNPYmplY3QoY29tcG9uZW50cykpIHtcbiAgICAgIGZvcm0gPSB7IGNvbXBvbmVudHMgfVxuICAgIH1cbiAgfVxuICBmb3JtcyB8fD0geyBkZWZhdWx0OiBmb3JtIH0gLy8gT25seSB1c2VkIGZvciBwcm9jZXNzIGxvb3AgYmVsb3cuXG4gIGNvbnN0IGNoaWxkcmVuID0gW11cbiAgZm9yIChjb25zdCBmb3JtIG9mIE9iamVjdC52YWx1ZXMoZm9ybXMpKSB7XG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBmb3JtLCBjaGlsZHJlbiwgbGV2ZWwgKyAxKVxuICB9XG4gIHJldHVybiBjaGlsZHJlblxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUZvcm0oZm9ybSkge1xuICBmb3JtID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShmb3JtLCB0cnVlKVxuICBpZiAoZm9ybSkge1xuICAgIGF3YWl0IHJlc29sdmVQYW5lbHMoZm9ybSlcbiAgfVxuICByZXR1cm4gZm9ybVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTaW5nbGVDb21wb25lbnRWaWV3KHNjaGVtYSkge1xuICAvLyBJZiB0aGUgc2NoZW1hIGhhcyBhIHR5cGUsIGl0IGlzIGEgc2luZ2xlLWNvbXBvbmVudCB2aWV3LlxuICByZXR1cm4gISFzY2hlbWEudHlwZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzRm9ybVNjaGVtYShzY2hlbWEpIHtcbiAgLy8gU3VwcG9ydCBib3RoIHNpbmdsZSBmb3JtIGFuZCBtdWx0aXBsZSBmb3JtcyBub3RhdGlvbiwgYXMgd2VsbCBhcyBpbmxpbmVkXG4gIC8vIGNvbXBvbmVudHMuXG4gIHJldHVybiBpc09iamVjdChzY2hlbWEpICYmICEhKFxuICAgIHNjaGVtYS5mb3JtIHx8XG4gICAgc2NoZW1hLmZvcm1zIHx8XG4gICAgc2NoZW1hLmNvbXBvbmVudHNcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzY2hlbWEpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHNjaGVtYT8uZm9ybXMgfHwge30pLmxlbmd0aCA+IDFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgdmlldyB9ID0gc2NoZW1hXG4gIGNvbnN0IHZpZXdTY2hlbWEgPSB2aWV3ICYmIGNvbnRleHQudmlld3Nbdmlld11cbiAgcmV0dXJuIHZpZXdTY2hlbWFcbiAgICA/IGhhc0Zvcm1TY2hlbWEodmlld1NjaGVtYSlcbiAgICAgID8gdmlld1NjaGVtYVxuICAgICAgLy8gTk9URTogVmlld3MgY2FuIGhhdmUgdGFicywgaW4gd2hpY2ggY2FzZSB0aGUgdmlldyBjb21wb25lbnQgaXMgbmVzdGVkXG4gICAgICAvLyBpbiBvbmUgb2YgdGhlIHRhYnMsIGdvIGZpbmQgaXQuXG4gICAgICA6IGZvckVhY2hTY2hlbWEodmlld1NjaGVtYSwgc2NoZW1hID0+IHtcbiAgICAgICAgY29uc3Qgdmlld0NvbXBvbmVudCA9IHNjaGVtYS5jb21wb25lbnRzPy5bdmlld11cbiAgICAgICAgaWYgKGhhc0Zvcm1TY2hlbWEodmlld0NvbXBvbmVudCkpIHtcbiAgICAgICAgICByZXR1cm4gdmlld0NvbXBvbmVudFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0VkaXRQYXRoKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCB2aWV3ID0gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpXG4gIHJldHVybiB2aWV3XG4gICAgPyB2aWV3LmxldmVsID09PSAwXG4gICAgICA/IGAvJHt2aWV3LnBhdGh9YCAvLyBBIHNpbmdsZS1jb21wb25lbnQgdmlld1xuICAgICAgOiBgLyR7dmlldy5wYXRofS8ke3ZpZXcucGF0aH1gIC8vIEEgbXVsdGktY29tcG9uZW50IHZpZXdcbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCwgbW9kaWZ5Rm9ybSkge1xuICBjb25zdCB2aWV3ID0gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpXG4gIGlmICh2aWV3KSB7XG4gICAgc2NoZW1hID0gdmlld1xuICB9IGVsc2UgaWYgKHNjaGVtYS52aWV3KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHZpZXc6ICcke3NjaGVtYS52aWV3fSdgKVxuICB9XG5cbiAgbGV0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMsIGNvbXBhY3QgfSA9IHNjaGVtYVxuICBpZiAoIWZvcm0gJiYgIWZvcm1zKSB7XG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIC8vIENvbnZlcnQgaW5saW5lZCBjb21wb25lbnRzIHRvIGZvcm1zLCBzdXBwb3J0aW5nIGBjb21wYWN0YCBzZXR0aW5nLlxuICAgICAgZm9ybSA9IHsgY29tcG9uZW50cywgY29tcGFjdCB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGBmb3Jtc2AsIGBmb3JtYCBvciBgY29tcG9uZW50c2AsIHJldHVybiBhbmQgZW1wdHkgYGZvcm1zYCBvYmplY3QuXG4gICAgICByZXR1cm4ge31cbiAgICB9XG4gIH1cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoZm9ybXMpLm1hcCgoW3R5cGUsIGZvcm1dKSA9PiB7XG4gICAgICAvLyBTdXBwb3J0IGBzY2hlbWEuY29tcG9uZW50c2AgY2FsbGJhY2tzIHRvIGNyZWF0ZSBjb21wb25lbnRzIG9uIHRoZSBmbHkuXG4gICAgICBpZiAoaXNGdW5jdGlvbihmb3JtLmNvbXBvbmVudHMpKSB7XG4gICAgICAgIGZvcm0gPSB7XG4gICAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgICBjb21wb25lbnRzOiBmb3JtLmNvbXBvbmVudHMoY29udGV4dClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFt0eXBlLCBtb2RpZnlGb3JtPy4oZm9ybSkgPz8gZm9ybV1cbiAgICB9KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSkge1xuICByZXR1cm4gZm9ybXNbaXRlbT8udHlwZV0gfHwgZm9ybXMuZGVmYXVsdCB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCksIGl0ZW0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMYWJlbChzY2hlbWEpIHtcbiAgcmV0dXJuIHNjaGVtYS5sYWJlbCAhPT0gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcGFjdChzY2hlbWEpIHtcbiAgcmV0dXJuICEhc2NoZW1hLmNvbXBhY3Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5saW5lZChzY2hlbWEpIHtcbiAgcmV0dXJuICEhKHNjaGVtYS5pbmxpbmVkIHx8IHNjaGVtYS5jb21wb25lbnRzKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShcbiAgICBzY2hlbWEubmVzdGVkIHx8XG4gICAgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdE5lc3RlZCA9PT0gdHJ1ZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRPbWl0UGFkZGluZyhzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8ub21pdFBhZGRpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZShzY2hlbWEpIHtcbiAgLy8gU3VwcG9ydCBkZWZhdWx0IHZhbHVlcyBib3RoIG9uIHNjaGVtYSBhbmQgb24gY29tcG9uZW50IGxldmVsLlxuICAvLyBOT1RFOiBBdCB0aGUgdGltZSBvZiBjcmVhdGlvbiwgY29tcG9uZW50cyBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCwgKGUuZy4gaWZcbiAgLy8gZW50cmllcyBhcmUgY3JlYXRlZCB0aHJvdWdoIG5lc3RlZCBmb3JtcywgdGhlIHBhcmVudCBmb3JtIGlzbid0IG1vdW50ZWQpIHNvXG4gIC8vIHdlIGNhbid0IHVzZSBgZGF0YVBhdGhgIHRvIGdldCB0byBjb21wb25lbnRzLCBhbmQgdGhlIGBkZWZhdWx0VmFsdWVgIGZyb21cbiAgLy8gdGhlcmUuIFRoYXQncyB3aHkgYGRlZmF1bHRWYWx1ZWAgaXMgZGVmaW5lZCBzdGF0aWNhbGx5IGluIHRoZSBjb21wb25lbnRzOlxuICBjb25zdCBkZWZhdWx0VmFsdWUgPSBzY2hlbWEuZGVmYXVsdFxuICBjb25zdCB2YWx1ZSA9IGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgPyBkZWZhdWx0VmFsdWVcbiAgICA6IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHRWYWx1ZVxuICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSlcbiAgICA/IHZhbHVlKHNjaGVtYSlcbiAgICA6IGNsb25lKHZhbHVlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkge1xuICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcbiAgcmV0dXJuICEhKFxuICAgIHR5cGVPcHRpb25zPy5leGNsdWRlVmFsdWUgfHxcbiAgICB0eXBlT3B0aW9ucz8uaWdub3JlTWlzc2luZ1ZhbHVlPy4oc2NoZW1hKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMYWJlbHMoc2NoZW1hKSB7XG4gIGNvbnN0IGNoZWNrQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgPT5cbiAgICBPYmplY3QudmFsdWVzKGNvbXBvbmVudHMgfHwge30pLnNvbWUoaGFzTGFiZWwpXG5cbiAgcmV0dXJuIChcbiAgICBjaGVja0NvbXBvbmVudHMoc2NoZW1hLmNvbXBvbmVudHMpIHx8XG4gICAgT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicyB8fCB7fSkuc29tZShjaGVja0NvbXBvbmVudHMpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRzKHNjaGVtYSwgZGF0YSA9IHt9LCBjb21wb25lbnQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCByb290RGF0YTogZGF0YSB9XG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUpID0+IHtcbiAgICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgICAgZGF0YVtuYW1lXSA9IGdldERlZmF1bHRWYWx1ZShzY2hlbWEpXG4gICAgfVxuICB9XG5cbiAgLy8gU2V0cyB1cCBhIGRhdGEgb2JqZWN0IHRoYXQgaGFzIGtleXMgd2l0aCBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsXG4gIC8vIGZvcm0gZmllbGRzLCBzbyB0aGV5IGNhbiBiZSBjb3JyZWN0bHkgd2F0Y2hlZCBmb3IgY2hhbmdlcy5cbiAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSwgZGF0YSwgbnVsbCwgbnVsbCwgcHJvY2Vzc0JlZm9yZSwgbnVsbCwgb3B0aW9uc1xuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQgPSBudWxsLFxuICByb290RGF0YSA9IGNvbXBvbmVudD8ucm9vdERhdGFcbn0gPSB7fSkge1xuICBjb25zdCB7IGNvbXB1dGUgfSA9IHNjaGVtYVxuICBpZiAoY29tcHV0ZSkge1xuICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZShEaXRvQ29udGV4dC5nZXQoY29tcG9uZW50LCB7XG4gICAgICAvLyBPdmVycmlkZSB2YWx1ZSB0byBwcmV2ZW50IGVuZGxlc3MgcmVjdXJzaW9uIHRocm91Z2ggY2FsbGluZyB0aGVcbiAgICAgIC8vIGdldHRlciBmb3IgYHRoaXMudmFsdWVgIGluIGBEaXRvQ29udGV4dGA6XG4gICAgICB2YWx1ZTogZGF0YVtuYW1lXSxcbiAgICAgIG5hbWUsXG4gICAgICBkYXRhLFxuICAgICAgZGF0YVBhdGgsXG4gICAgICByb290RGF0YVxuICAgIH0pKVxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBVc2UgYCRzZXQoKWAgZGlyZWN0bHkgaW5zdGVhZCBvZiBgdGhpcy52YWx1ZSA9IOKApmAgdG8gdXBkYXRlIHRoZVxuICAgICAgLy8gdmFsdWUgd2l0aG91dCBjYWxsaW5nIHBhcnNlKCk6XG4gICAgICBWdWUuc2V0KGRhdGEsIG5hbWUsIHZhbHVlKVxuICAgIH1cbiAgfVxuICAvLyBJZiB0aGUgdmFsdWUgaXMgc3RpbGwgbWlzc2luZyBhZnRlciBjb21wdXRlLCBzZXQgdGhlIGRlZmF1bHQgZm9yIGl0OlxuICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgIFZ1ZS5zZXQoZGF0YSwgbmFtZSwgZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSkpXG4gIH1cbiAgLy8gTm93IGFjY2VzcyB0aGUgdmFsdWUuIFRoaXMgaXMgaW1wb3J0YW50IGZvciByZWFjdGl2aXR5IGFuZCBuZWVkcyB0b1xuICAvLyBoYXBwZW4gYWZ0ZXIgYWxsIHByaW9yIG1hbmlwdWxhdGlvbiB0aHJvdWdoIGAkc2V0KClgLCBzZWUgYWJvdmU6XG4gIHJldHVybiBkYXRhW25hbWVdXG59XG5cbmZ1bmN0aW9uIGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMuc2NoZW1hT25seSkge1xuICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgIGNvbnN0IHsgaWRLZXkgPSAnaWQnLCBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgY29uc3QgaWQgPSBpdGVtW2lkS2V5XVxuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb3B5W2lkS2V5XSA9IGlkXG4gICAgfVxuICAgIC8vIENvcHkgb3ZlciB0eXBlIGluIGNhc2UgdGhlcmUgYXJlIG11bHRpcGxlIGZvcm1zIHRvIGNob29zZSBmcm9tLlxuICAgIGlmIChoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNvdXJjZVNjaGVtYSkpIHtcbiAgICAgIGNvcHkudHlwZSA9IGl0ZW0udHlwZVxuICAgIH1cbiAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgIGNvcHlbb3JkZXJLZXldID0gaXRlbVtvcmRlcktleV1cbiAgICB9XG4gICAgcmV0dXJuIGNvcHlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyAuLi5pdGVtIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0RhdGEoc2NoZW1hLCBzb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCxcbiAgc2NoZW1hT25seSwgLy8gd2hldGhlciB0byBvbmx5IGluY2x1ZGUgZGF0YSBjb3ZlcmVkIGJ5IHRoZSBzY2hlbWEsIG9yIGFsbCBkYXRhXG4gIHRhcmdldFxufSA9IHt9KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7IGNvbXBvbmVudCwgc2NoZW1hT25seSwgdGFyZ2V0LCByb290RGF0YTogZGF0YSB9XG4gIGNvbnN0IHByb2Nlc3NlZERhdGEgPSBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBkYXRhLCBvcHRpb25zKVxuICBjb25zdCBncmFwaCA9IG5ldyBTY2hlbWFHcmFwaCgpXG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgbGV0IHZhbHVlID0gY29tcHV0ZVZhbHVlKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIG9wdGlvbnMpXG4gICAgLy8gVGhlIHNjaGVtYSBleHBlY3RzIHRoZSBgd3JhcFByaW1pdGl2ZXNgIHRyYW5zZm9ybWF0aW9ucyB0byBiZSBwcmVzZW50IG9uXG4gICAgLy8gdGhlIGRhdGEgdGhhdCBpdCBpcyBhcHBsaWVkIG9uLCBzbyB3YXJwIGJlZm9yZSBhbmQgdW53cmFwIGFmdGVyLlxuICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgb3JkZXJLZXksIGlkS2V5ID0gJ2lkJyB9ID0gc2NoZW1hXG4gICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoZW50cnkgPT4gKHtcbiAgICAgICAgICBbd3JhcFByaW1pdGl2ZXNdOiBlbnRyeVxuICAgICAgICB9KSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFsd2F5cyBzaGFsbG93LWNsb25lIGFycmF5IHZhbHVlczpcbiAgICAgICAgdmFsdWUgPSBbLi4udmFsdWVdXG4gICAgICB9XG4gICAgICBpZiAob3JkZXJLZXkgJiYgdGFyZ2V0ID09PSAnY2xpcGJvYXJkJykge1xuICAgICAgICAvLyBTb3J0IHRoZSBkYXRhIGJhY2sgaW50byB0aGUgbmF0dXJhbCBzZXF1ZW5jZSBhcyBkZWZpbmVkIGJ5IHRoZWlyIGlkcyxcbiAgICAgICAgLy8gc28gY29weS1wYXN0aW5nIGJldHdlZW4gc2VydmVycyAoZS5nLiBuZXN0ZWQgZm9udC1jdXRzIG9uIExpbmV0bylcbiAgICAgICAgLy8gbmF0dXJhbGx5IGdldHMgbWFwcGVkIHRvIHRoZSBzYW1lIGVudHJpZXMgaW4gdGhlIGdyYXBoLlxuICAgICAgICB2YWx1ZS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQxID0gYT8uW2lkS2V5XVxuICAgICAgICAgIGNvbnN0IGlkMiA9IGI/LltpZEtleV1cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaWQxID09IG51bGwgfHwgaXNUZW1wb3JhcnlJZChpZDEpID8gMVxuICAgICAgICAgICAgOiBpZDIgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMikgPyAtMVxuICAgICAgICAgICAgOiBpZDEgLSBpZDJcbiAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICB9XG5cbiAgY29uc3QgcHJvY2Vzc0FmdGVyID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBleGNsdWRlLCBwcm9jZXNzIH0gPSBzY2hlbWFcbiAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhW25hbWVdXG5cbiAgICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcblxuICAgIC8vIE5PVEU6IFdlIGRvbid0IGNhY2hlIHRoaXMgY29udGV4dCwgc2luY2UgYHZhbHVlYCBpcyBjaGFuZ2luZy5cbiAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gRGl0b0NvbnRleHQuZ2V0KGNvbXBvbmVudCwge1xuICAgICAgdmFsdWUsXG4gICAgICBuYW1lLFxuICAgICAgZGF0YSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGEsXG4gICAgICAvLyBQYXNzIHRoZSBhbHJlYWR5IHByb2Nlc3NlZCBkYXRhIHRvIGBwcm9jZXNzKClgLCBzbyBpdCBjYW4gYmUgbW9kaWZpZWRcbiAgICAgIC8vIHRocm91Z2ggYHByb2Nlc3NlZEl0ZW1gIGZyb20gdGhlcmUuXG4gICAgICBwcm9jZXNzZWREYXRhXG4gICAgfSlcblxuICAgIC8vIEZpcnN0IHVud3JhcCB0aGUgd3JhcHBlZCBwcmltaXRpdmVzIGFnYWluLCB0byBicmluZyB0aGUgZGF0YSBiYWNrIGludG9cbiAgICAvLyBpdHMgbmF0aXZlIGZvcm0uIFNlIGBwcm9jZXNzQmVmb3JlKClgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLm1hcChvYmplY3QgPT4gb2JqZWN0W3dyYXBQcmltaXRpdmVzXSlcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIHVzZXIncyBgcHJvY2VzcygpYCBjYWxsYmFjayBmaXJzdCwgaWYgb25lIGlzIHByb3ZpZGVkLCBzbyB0aGF0XG4gICAgLy8gaXQgY2FuIG1vZGlmeSBkYXRhIGluIGBwcm9jZXNzZWREYXRhYCBldmVuIGlmIGl0IHByb3ZpZGVzIGBleGNsdWRlOiB0cnVlYFxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICB2YWx1ZSA9IHByb2Nlc3MoZ2V0Q29udGV4dCgpKVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVPcHRpb25zPy5leGNsdWRlVmFsdWUgfHxcbiAgICAgIC8vIFN1cHBvcnQgZnVuY3Rpb25zIG5leHQgdG8gYm9vbGVhbnMgZm9yIGBzY2hlbWEuZXhjbHVkZWA6XG4gICAgICBleGNsdWRlID09PSB0cnVlIHx8XG4gICAgICBpc0Z1bmN0aW9uKGV4Y2x1ZGUpICYmIGV4Y2x1ZGUoZ2V0Q29udGV4dCgpKVxuICAgICkge1xuICAgICAgZGVsZXRlIHByb2Nlc3NlZERhdGFbbmFtZV1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRWFjaCBjb21wb25lbnQgdHlwZSBjYW4gcHJvdmlkZSBpdHMgb3duIHN0YXRpYyBgcHJvY2Vzc1ZhbHVlKClgIG1ldGhvZFxuICAgICAgLy8gdG8gY29udmVydCB0aGUgZGF0YSBmb3Igc3RvcmFnZS5cbiAgICAgIGNvbnN0IHByb2Nlc3NWYWx1ZSA9IHR5cGVPcHRpb25zPy5wcm9jZXNzVmFsdWVcbiAgICAgIGlmIChwcm9jZXNzVmFsdWUpIHtcbiAgICAgICAgdmFsdWUgPSBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKVxuICAgICAgfVxuICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLFxuICAgIGRhdGEsXG4gICAgZGF0YVBhdGgsXG4gICAgcHJvY2Vzc2VkRGF0YSxcbiAgICBwcm9jZXNzQmVmb3JlLFxuICAgIHByb2Nlc3NBZnRlcixcbiAgICBvcHRpb25zXG4gIClcblxuICByZXR1cm4gZ3JhcGgucHJvY2Vzcyhzb3VyY2VTY2hlbWEsIHByb2Nlc3NlZERhdGEsIG9wdGlvbnMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgc2NoZW1hLFxuICBkYXRhLFxuICBkYXRhUGF0aCxcbiAgcHJvY2Vzc2VkRGF0YSxcbiAgcHJvY2Vzc0JlZm9yZSxcbiAgcHJvY2Vzc0FmdGVyLFxuICBvcHRpb25zXG4pIHtcbiAgY29uc3QgcHJvY2Vzc0NvbXBvbmVudHMgPSBjb21wb25lbnRzID0+IHtcbiAgICBjb25zdCBnZXREYXRhUGF0aCA9IChkYXRhUGF0aCwgdG9rZW4pID0+IGRhdGFQYXRoICE9IG51bGxcbiAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKVxuICAgICAgOiBudWxsXG5cbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50U2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoIWlzTmVzdGVkKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gdW5uZXN0ZWQgY29tcG9uZW50cy5cbiAgICAgICAgICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgIHByb2Nlc3NlZERhdGEsXG4gICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnREYXRhUGF0aCA9IGdldERhdGFQYXRoKGRhdGFQYXRoLCBuYW1lKVxuXG4gICAgICAgICAgY29uc3QgcHJvY2Vzc0l0ZW0gPSAoaXRlbSwgaW5kZXggPSBudWxsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUGF0aCA9IGluZGV4ICE9PSBudWxsXG4gICAgICAgICAgICAgID8gZ2V0RGF0YVBhdGgoY29tcG9uZW50RGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgICAgICA6IGNvbXBvbmVudERhdGFQYXRoXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gRGl0b0NvbnRleHQuZ2V0KG9wdGlvbnMuY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY29uc3QgZ2V0Rm9ybXMgPSAoXG4gICAgICAgICAgICAgIGdldFR5cGVPcHRpb25zKGNvbXBvbmVudFNjaGVtYSk/LmdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyB8fFxuICAgICAgICAgICAgICAgZ2V0Rm9ybVNjaGVtYXNcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IGZvcm1zID0gZ2V0Rm9ybXMoY29tcG9uZW50U2NoZW1hLCBjb250ZXh0KVxuICAgICAgICAgICAgY29uc3QgZm9ybSA9IGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKVxuICAgICAgICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkSXRlbSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IGNsb25lSXRlbShjb21wb25lbnRTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgICAgICBmb3JtLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEl0ZW1zIHdpdGhvdXQgZm9ybXMgc3RpbGwgZ2V0IGZ1bGx5IChidXQgc2hhbGxvd2x5KSBjbG9uZWQuXG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgb3V0IG9mIHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkIC8gdXNlZCBhdCBhbGw/XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHByb2Nlc3NCZWZvcmU/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSwgZGF0YSwgbmFtZSwgY29tcG9uZW50RGF0YVBhdGgsIHByb2Nlc3NlZERhdGFcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YSA/IHByb2Nlc3NlZERhdGFbbmFtZV0gOiBkYXRhW25hbWVdXG4gICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgaGFzRm9ybVNjaGVtYShjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gbmVzdGVkIGZvcm0gaXRlbXMuXG4gICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgLy8gT3B0aW1pemF0aW9uOiBObyBuZWVkIHRvIGNvbGxlY3QgdmFsdWVzIGlmIHdlJ3JlIG5vdCBjbG9uaW5nIVxuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlLmZvckVhY2gocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NJdGVtKHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb2Nlc3NlZERhdGEpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHByb2Nlc3NBZnRlcj8uKFxuICAgICAgICAgICAgY29tcG9uZW50U2NoZW1hLCBkYXRhLCBuYW1lLCBjb21wb25lbnREYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKVxuICBpZiAoc2NoZW1hLnRhYnMpIHtcbiAgICBmb3IgKGNvbnN0IHRhYiBvZiBPYmplY3QudmFsdWVzKHNjaGVtYS50YWJzKSkge1xuICAgICAgcHJvY2Vzc0NvbXBvbmVudHModGFiLmNvbXBvbmVudHMpXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgcGFuZWwgb2YgZ2V0QWxsUGFuZWxTY2hlbWFzKHNjaGVtYSwgZGF0YVBhdGgpKSB7XG4gICAgcHJvY2Vzc0NvbXBvbmVudHMocGFuZWwuc2NoZW1hLmNvbXBvbmVudHMpXG4gIH1cblxuICByZXR1cm4gcHJvY2Vzc2VkRGF0YSB8fCBkYXRhXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lZFNjaGVtYXMoZGVzY3JpcHRpb25zLCBkZWZhdWx0cykge1xuICBjb25zdCB0b09iamVjdCA9IChhcnJheSwgdG9TY2hlbWEpID0+IHtcbiAgICByZXR1cm4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgPyBhcnJheS5yZWR1Y2UoKG9iamVjdCwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gdG9TY2hlbWEodmFsdWUpXG4gICAgICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAgICBvYmplY3Rbc2NoZW1hLm5hbWVdID0gc2NoZW1hICYmIGRlZmF1bHRzXG4gICAgICAgICAgICA/IHsgLi4uZGVmYXVsdHMsIC4uLnNjaGVtYSB9XG4gICAgICAgICAgICA6IHNjaGVtYVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3RcbiAgICAgIH0sIHt9KVxuICAgICAgOiBudWxsXG4gIH1cblxuICByZXR1cm4gaXNBcnJheShkZXNjcmlwdGlvbnMpXG4gICAgPyB0b09iamVjdChkZXNjcmlwdGlvbnMsIHZhbHVlID0+IChcbiAgICAgIGlzT2JqZWN0KHZhbHVlKSA/IHZhbHVlIDoge1xuICAgICAgICBuYW1lOiBjYW1lbGl6ZSh2YWx1ZSwgZmFsc2UpXG4gICAgICB9XG4gICAgKSlcbiAgICA6IGlzT2JqZWN0KGRlc2NyaXB0aW9ucylcbiAgICAgID8gdG9PYmplY3QoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0aW9ucyksXG4gICAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICAgIGlzT2JqZWN0KHZhbHVlKSA/IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAuLi52YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICA6IGlzU3RyaW5nKHZhbHVlKSA/IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBsYWJlbDogdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgOiBudWxsXG4gICAgICApXG4gICAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvblNjaGVtYXMoYnV0dG9ucykge1xuICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKFxuICAgIGJ1dHRvbnMsXG4gICAgeyB0eXBlOiAnYnV0dG9uJyB9IC8vIERlZmF1bHRzXG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYU9yVHlwZSkgPyBzY2hlbWFPclR5cGUudHlwZSA6IHNjaGVtYU9yVHlwZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRUeXBlQ29tcG9uZW50KGdldFR5cGUoc2NoZW1hT3JUeXBlKSwgdHJ1ZSk/Lm9wdGlvbnMgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSk/LmdldFNvdXJjZVR5cGU/LihcbiAgICBnZXRUeXBlKHNjaGVtYU9yVHlwZSlcbiAgKSA/PyBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYShzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgcmV0dXJuIHNjaGVtYVxuICAgID8ge1xuICAgICAgc2NoZW1hLFxuICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gbmFtZSwgYXBwZW5kIGl0IHRvIHRoZSBkYXRhUGF0aC5cbiAgICAgIC8vIFRoaXMgaXMgdXNlZCBlLmcuIGZvciAkZmlsdGVycyBwYW5lbHMuXG4gICAgICBkYXRhUGF0aDogc2NoZW1hLm5hbWVcbiAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc2NoZW1hLm5hbWUpXG4gICAgICAgIDogZGF0YVBhdGgsXG4gICAgICB0YWJDb21wb25lbnRcbiAgICB9XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hcywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxzID0gW10pIHtcbiAgaWYgKHNjaGVtYXMpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hcykpIHtcbiAgICAgIGNvbnN0IHBhbmVsID0gZ2V0UGFuZWxTY2hlbWEoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGtleSksXG4gICAgICAgIHRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVscy5wdXNoKHBhbmVsKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxQYW5lbFNjaGVtYXMoXG4gIHNjaGVtYSxcbiAgZGF0YVBhdGgsXG4gIHNjaGVtYUNvbXBvbmVudCA9IG51bGwsXG4gIHRhYkNvbXBvbmVudCA9IG51bGxcbikge1xuICBjb25zdCBwYW5lbCA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmdldFBhbmVsU2NoZW1hPy4oXG4gICAgc2NoZW1hLFxuICAgIGRhdGFQYXRoLFxuICAgIHNjaGVtYUNvbXBvbmVudFxuICApXG4gIGNvbnN0IHBhbmVscyA9IHBhbmVsID8gW2dldFBhbmVsU2NoZW1hKHBhbmVsLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KV0gOiBbXVxuICAvLyBBbGxvdyBlYWNoIGNvbXBvbmVudCB0byBwcm92aWRlIGl0cyBvd24gc2V0IG9mIHBhbmVscywgaW5cbiAgLy8gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgb25lIChlLmcuICRmaWx0ZXIpOlxuICBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hLnBhbmVscywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxzKVxuICByZXR1cm4gcGFuZWxzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ29iamVjdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGlzdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ2xpc3QnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIGNvbnN0IGlkID0gaXRlbVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgcmV0dXJuIGlkICE9IG51bGwgPyBTdHJpbmcoaWQpIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtVWlkKHNvdXJjZVNjaGVtYSwgaXRlbSkge1xuICAvLyBUcnkgdG8gdXNlIHRoZSBpdGVtIGlkIGFzIHRoZSB1aWQsIGZhbGxpbmcgYmFjayBvbiBhdXRvLWdlbmVyYXRlZCBpZHMsIGJ1dFxuICAvLyBlaXRoZXIgd2F5LCBwYXNzIHRocm91Z2ggYGdldFVpZCgpYCBzbyB0aGF0IHRoZSBpZHMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGVcbiAgLy8gaXRlbSB0aHJvdWdoIGEgd2VhayBtYXAsIGFzIHRoZSBpZHMgY2FuIGJlIGZpbHRlcmVkIG91dCBpbiBgcHJvY2Vzc0RhdGEoKWBcbiAgLy8gd2hpbGUgdGhlIGNvbXBvbmVudHMgdGhhdCB1c2UgdGhlIHVpZHMgYXMga2V5IGFyZSBzdGlsbCB2aXNpYmxlLlxuICByZXR1cm4gZ2V0VWlkKGl0ZW0sIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pKVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFZhbGlkYXRpb25NaXhpbiBmcm9tICcuL1ZhbGlkYXRpb25NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBjb21wdXRlVmFsdWUgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRJdGVtLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdGlvbk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gTk9URTogV2hpbGUgYGRhdGFQYXRoYCBwb2ludHMgdG8gdGhlIGFjdHVhbCBgdmFsdWVgLCBgZGF0YWAgcmVwcmVzZW50c1xuICAgIC8vIHRoZSBgaXRlbWAgaW4gd2hpY2ggdGhlIGB2YWx1ZWAgaXMgY29udGFpbmVkLCB1bmRlciB0aGUga2V5IGBuYW1lYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlZFZhbHVlOiBudWxsLFxuICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgdHlwZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS50eXBlXG4gICAgfSxcblxuICAgIGNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVUeXBlQ29tcG9uZW50KHRoaXMuc2NoZW1hLmNvbXBvbmVudClcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIHZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZVZhbHVlKFxuICAgICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICB7IGNvbXBvbmVudDogdGhpcyB9XG4gICAgICAgIClcbiAgICAgICAgY29uc3QgeyBmb3JtYXQgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIC8vIGBzY2hlbWEuZm9ybWF0YCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGluIHRoZSBsaWZlLWN5Y2xlXG4gICAgICAgIC8vIG9mIHRoZSBjb21wb25lbnQgYW5kIHRodXMgaXQncyBvayB0byBiaW5kIGl0IHRvIGB0aGlzYFxuICAgICAgICByZXR1cm4gZm9ybWF0XG4gICAgICAgICAgPyBmb3JtYXQuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyBwYXJzZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgLy8gYHNjaGVtYS5wYXJzZWAgaXMgb25seSBldmVyIGNhbGxlZCBpbiB0aGUgbGlmZS1jeWNsZVxuICAgICAgICAvLyBvZiB0aGUgY29tcG9uZW50IGFuZCB0aHVzIGl0J3Mgb2sgdG8gYmluZCBpdCB0byBgdGhpc2BcbiAgICAgICAgdGhpcy5wYXJzZWRWYWx1ZSA9IHBhcnNlXG4gICAgICAgICAgPyBwYXJzZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHZhbHVlIH0pKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgdGhpcy5uYW1lLCB0aGlzLnBhcnNlZFZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIGdldEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgfSxcblxuICAgIHBhcmVudEl0ZW0oKSB7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgLy8gV2UgY2FuIG9ubHkgZ2V0IHRoZSBwcm9jZXNzZWQgaXRlbXMgdGhyb3VnaCB0aGUgc2NoZW1hQ29tcG9uZW50LCBidXRcbiAgICAgIC8vIHRoYXQncyBub3QgbmVjZXNzYXJpbHkgdGhlIGl0ZW0gcmVwcmVzZW50ZWQgYnkgdGhpcyBjb21wb25lbnQuXG4gICAgICAvLyBTb2x1dGlvbjogRmluZCB0aGUgcmVsYXRpdmUgcGF0aCBhbmQgdGhlIHByb2Nlc3NlZCBzdWItaXRlbSBmcm9tIHRoZXJlOlxuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnQgfSA9IHRoaXNcbiAgICAgIHJldHVybiBnZXRJdGVtKFxuICAgICAgICBzY2hlbWFDb21wb25lbnQucHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgLy8gR2V0IHRoZSBkYXRhUGF0aCByZWxhdGl2ZSB0byB0aGUgc2NoZW1hQ29tcG9uZW50J3MgZGF0YTpcbiAgICAgICAgdGhpcy5kYXRhUGF0aC5zbGljZShzY2hlbWFDb21wb25lbnQuZGF0YVBhdGgubGVuZ3RoKSxcbiAgICAgICAgdGhpcy5uZXN0ZWRcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbGFiZWw6IGdldFNjaGVtYUFjY2Vzc29yKCdsYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEJvb2xlYW5dLFxuICAgICAgZ2V0KGxhYmVsKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyhsYWJlbClcbiAgICAgICAgICA/IGxhYmVsXG4gICAgICAgICAgOiBsYWJlbCAhPT0gZmFsc2UgJiYgdGhpcy4kb3B0aW9ucy5nZW5lcmF0ZUxhYmVsXG4gICAgICAgICAgICA/IHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHdpZHRoOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdXG4gICAgfSksXG5cbiAgICB2aXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0VmlzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBleGNsdWRlZGAgZm9yIGNvbnNpc3RlbnQgbmFtaW5nXG4gICAgZXhjbHVkZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4Y2x1ZGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHJlcXVpcmVkOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVxdWlyZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IE1vdmUgdGhlc2UgdG8gYSBzdWItY2xhc3MgY29tcG9uZW50IHVzZWQgZm9yIGFsbCBpbnB1dCBjb21wb25lbnRzP1xuICAgIHJlYWRvbmx5OiBnZXRTY2hlbWFBY2Nlc3NvcigncmVhZG9ubHknLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGF1dG9mb2N1czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9mb2N1cycsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVG8gYmUgdXNlZCBmb3Igc2VsZWN0cyBhbmQgaW5wdXRzIG9ubHk/XG4gICAgY2xlYXJhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY2xlYXJhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BsYWNlaG9sZGVyJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICBhdXRvY29tcGxldGU6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvY29tcGxldGUnLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IG5hdGl2ZUZpZWxkLCB0ZXh0RmllbGQgfSA9IHRoaXMuJG9wdGlvbnNcblxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cblxuICAgICAgaWYgKG5hdGl2ZUZpZWxkKSB7XG4gICAgICAgIGF0dHJpYnV0ZXMubmFtZSA9IHRoaXMubmFtZVxuICAgICAgICBpZiAodGhpcy5sYWJlbCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMudGl0bGUgPSB0aGlzLmxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgYXR0cmlidXRlcy5yZWFkb25seSA9IHRoaXMucmVhZG9ubHlcbiAgICAgICAgYXR0cmlidXRlcy5hdXRvZm9jdXMgPSB0aGlzLmF1dG9mb2N1c1xuICAgICAgICBpZiAodGV4dEZpZWxkKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy5wbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXJcbiAgICAgICAgICBhdHRyaWJ1dGVzLmF1dG9jb21wbGV0ZSA9IHRoaXMuYXV0b2NvbXBsZXRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgfSxcblxuICAgIGxpc3RlbmVycygpIHtcbiAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuZ2V0TGlzdGVuZXJzKClcbiAgICAgIGNvbnN0IHsgZXZlbnRzID0ge30gfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIC8vIFJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgYWxsIHByb3ZpZGVzIG5vbi1yZWNvZ25pemVkIGV2ZW50cyxcbiAgICAgICAgLy8gYXNzdW1pbmcgdGhleSBhcmUgbmF0aXZlIGV2ZW50cy5cbiAgICAgICAgZm9yIChjb25zdCBldmVudCBvZiBPYmplY3Qua2V5cyhldmVudHMpKSB7XG4gICAgICAgICAgbGlzdGVuZXJzW2V2ZW50XSB8fD0gKCkgPT4gdGhpcy5lbWl0RXZlbnQoZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0ZW5lcnNcbiAgICB9LFxuXG4gICAgdmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHsgLi4udGhpcy5nZXRWYWxpZGF0aW9ucygpIH1cbiAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJlcXVpcmVkID0gdHJ1ZVxuICAgICAgfVxuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIG92ZXJyaWRlIGRlZmF1bHQgcnVsZXMgYW5kIGFkZCBhbnkgbmV3IG9uZXM6XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5ydWxlcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZWxldGUgdmFsaWRhdGlvbnNba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zW2tleV0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWRhdGlvbnNcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgLy8gTk9URTogVGhpcyBpcyBvdmVycmlkZGVuIGluIFJlc291cmNlTWl4aW4sIHVzZWQgYnkgbGlzdHMuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc2hvd0NsZWFyQnV0dG9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xlYXJhYmxlICYmIHRoaXMudmFsdWUgIT0gbnVsbFxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUHJldmVudCB1bm5lc3RlZCB0eXBlIGNvbXBvbmVudHMgZnJvbSBvdmVycmlkaW5nIHBhcmVudCBkYXRhIHBhdGhzXG4gICAgICBpZiAodGhpcy5uZXN0ZWQpIHtcbiAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICAgICAgLy8gSW5zdGFsbCAvIHJlbW92ZSB0aGUgZmllbGQgZXZlbnRzIHRvIHdhdGNoIG9mIGNoYW5nZXMgYW5kIGhhbmRsZVxuICAgICAgICAvLyB2YWxpZGF0aW9uIGZsYWdzLiBgZXZlbnRzYCBpcyBwcm92aWRlZCBieSBgVmFsaWRhdGlvbk1peGluLmV2ZW50cygpYFxuICAgICAgICB0aGlzW2FkZCA/ICdvbicgOiAnb2ZmJ10odGhpcy5ldmVudHMpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldExpc3RlbmVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIGJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBpbnB1dDogdGhpcy5vbklucHV0LFxuICAgICAgICBjaGFuZ2U6IHRoaXMub25DaGFuZ2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICBjb25zdCBbZWxlbWVudF0gPSBhc0FycmF5KHRoaXMuJHJlZnMuZWxlbWVudClcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICBlbGVtZW50LmZvY3VzKClcbiAgICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBkaXNhYmxlZCwgYGZvY3VzKClgIHdpbGwgbGlrZWx5IG5vdCBoYXZlIHRoZVxuICAgICAgICAgIC8vIGRlc2lyZWQgZWZmZWN0LiBVc2UgYHNjcm9sbEludG9WaWV3KClgIGlmIGF2YWlsYWJsZTpcbiAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgKGVsZW1lbnQuJGVsIHx8IGVsZW1lbnQpLnNjcm9sbEludG9WaWV3Py4oKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICAvLyBBbHNvIGZvY3VzIHRoaXMgY29tcG9uZW50J3Mgc2NoZW1hIGFuZCBwYW5lbCBpbiBjYXNlIGl0J3MgYSB0YWIuXG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5mb2N1cygpXG4gICAgICB0aGlzLnRhYkNvbXBvbmVudD8uZm9jdXMoKVxuICAgICAgdGhpcy5mb2N1c0VsZW1lbnQoKVxuICAgIH0sXG5cbiAgICBjbGVhcigpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICB9LFxuXG4gICAgb25Gb2N1cygpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWVcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdmb2N1cycpXG4gICAgfSxcblxuICAgIG9uQmx1cigpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlXG4gICAgICB0aGlzLmVtaXRFdmVudCgnYmx1cicpXG4gICAgfSxcblxuICAgIG9uSW5wdXQoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnaW5wdXQnKVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdjaGFuZ2UnLCB7XG4gICAgICAgIGNvbnRleHQ6IHRoaXMucGFyc2VkVmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8geyB2YWx1ZTogdGhpcy5wYXJzZWRWYWx1ZSB9XG4gICAgICAgICAgOiBudWxsLFxuICAgICAgICAvLyBQYXNzIGBzY2hlbWFDb21wb25lbnRgIGFzIHBhcmVudCwgc28gY2hhbmdlIGV2ZW50cyBjYW4gcHJvcGFnYXRlIHVwLlxuICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc1Byb21pc2UgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9NaXhpbiBmcm9tICcuL21peGlucy9EaXRvTWl4aW4uanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcblxuY29uc3QgY29tcG9uZW50cyA9IHt9XG5cbmNvbnN0IERpdG9Db21wb25lbnQgPSBWdWUuZXh0ZW5kKHtcbiAgLy8gTWFrZSBzdXJlIHRoYXQgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGFyZSBwcmVzZW50IGluIGFsbCBEaXRvQ29tcG9uZW50LlxuICBjb21wb25lbnRzLFxuICBtaXhpbnM6IFtEaXRvTWl4aW5dLFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRUeXBlQ29tcG9uZW50LFxuXG4gICAgcmVzb2x2ZUNvbXBvbmVudChjb21wb25lbnQsIG1peGlucyA9IFtdKSB7XG4gICAgICAvLyBBIGhlbHBlciBtZXRob2QgdG8gYWxsb3cgdGhyZWUgdGhpbmdzOlxuICAgICAgLy8gLSBXaGVuIHVzZWQgaW4gYSBjb21wdXRlZCBwcm9wZXJ0eSwgaXQgcmVtb3ZlcyB0aGUgbmVlZCB0byBoYXZlIHRvXG4gICAgICAvLyAgIGxvYWQgY29tcG9uZW50cyB3aXRoIGFzeW5jIGZ1bmN0aW9ucyBgY29tcG9uZW50OiAoKSA9PiBpbXBvcnQoLi4uKWAuXG4gICAgICAvLyAgIGluc3RlYWQsIHRoZXkgY2FuIGJlIGRpcmVjdGx5IHByb3ZpZGVkOiBgY29tcG9uZW50OiBpbXBvcnQoLi4uKWBcbiAgICAgIC8vIC0gVGhlIHByb3BlcnRpZXMgcGFzc2VkIHRvIHN1Y2ggY29tcG9uZW50cyBkb24ndCBuZWVkIHRvIGJlIGRlZmluZWQuXG4gICAgICAvLyAgIEluc3RlYWQsIHRoZSBwcm92aWRlZCBtaXhpbnMgYXJlIGF1dG9tYXRpY2FsbHkgaW5oZXJpdGVkLlxuICAgICAgLy8gLSBUaGUgY29tcG9uZW50IGNhbiB1c2UgYWxsIGludGVybmFsIGNvbXBvbmVudHMga25vd24gdG8gRGl0by5qcyBBZG1pbi5cbiAgICAgIHJldHVybiBjb21wb25lbnRcbiAgICAgICAgPyBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgLy8gQXQgZmlyc3QsIHJlc29sdmUgY29tcG9uZW50IGlzIGl0IGlzIGxvYWRlZCBhc3luY2hyb25vdXNseS5cbiAgICAgICAgICBsZXQgY29tcCA9IGlzRnVuY3Rpb24oY29tcG9uZW50KSA/IGF3YWl0IGNvbXBvbmVudCgpXG4gICAgICAgICAgICA6IGlzUHJvbWlzZShjb21wb25lbnQpID8gYXdhaXQgY29tcG9uZW50XG4gICAgICAgICAgICA6IGNvbXBvbmVudFxuICAgICAgICAgIGNvbXAgPSBjb21wPy5kZWZhdWx0IHx8IGNvbXBcbiAgICAgICAgICBjb21wLm1peGlucyA9IG1peGluc1xuICAgICAgICAgIGNvbXAuY29tcG9uZW50cyA9IGNvbXBvbmVudHNcbiAgICAgICAgICByZXR1cm4gY29tcFxuICAgICAgICB9XG4gICAgICAgIDogY29tcG9uZW50XG4gICAgfSxcblxuICAgIHJlc29sdmVEaXRvQ29tcG9uZW50KGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZUNvbXBvbmVudChjb21wb25lbnQsIFtEaXRvTWl4aW5dKVxuICAgIH0sXG5cbiAgICByZXNvbHZlVHlwZUNvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVDb21wb25lbnQoY29tcG9uZW50LCBbRGl0b01peGluLCBUeXBlTWl4aW5dKVxuICAgIH1cbiAgfVxufSlcblxuRGl0b0NvbXBvbmVudC5jb21wb25lbnQgPSBmdW5jdGlvbihuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIG5hbWUsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfVxuICAgIGNvbnN0IGN0b3IgPSB0aGlzLmV4dGVuZChvcHRpb25zKVxuICAgIGNvbXBvbmVudHNbbmFtZV0gPSBjdG9yXG4gICAgcmV0dXJuIGN0b3JcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29tcG9uZW50c1tuYW1lXSB8fCBWdWUuY29tcG9uZW50KG5hbWUpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudFxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b1VzZXIge1xuICBoYXNSb2xlKC4uLnJvbGVzKSB7XG4gICAgaWYgKHRoaXMucm9sZXMpIHtcbiAgICAgIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlcykge1xuICAgICAgICBpZiAodGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NoZW1hQ29tcG9uZW50czogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtYWluU2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50c1swXVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGBEaXRvU2NoZW1hLmNyZWF0ZWQoKS9kZXN0cm95ZWQoKWAgb24gaXRzXG4gICAgLy8gJHBhcmVudCwgaWYgdGhlIHBhcmVudCB1c2VzIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgIF9yZWdpc3RlclNjaGVtYUNvbXBvbmVudChzY2hlbWFDb21wb25lbnQsIGFkZCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMucHVzaChzY2hlbWFDb21wb25lbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2hlbWFDb21wb25lbnRzLnNwbGljZShzY2hlbWFDb21wb25lbnRzLmluZGV4T2Yoc2NoZW1hQ29tcG9uZW50KSwgMSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBlcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgeyBlcnJvcnMgfSkgPT5cbiAgICAgICAgICBlcnJvcnMgJiYgcmVzdWx0ID8gcmVzdWx0LmNvbmNhdChlcnJvcnMpIDogZXJyb3JzLFxuICAgICAgICBudWxsXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuc29tZShpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5KSlcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LnZlcmlmeUFsbChtYXRjaCkpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LnJlc2V0VmFsaWRhdGlvbigpKVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LmNsZWFyRXJyb3JzKCkpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKFxuICAgICAgICBpdCA9PiBpdC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKVxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldENvbW1vblByZWZpeCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlUm91dGVVcGRhdGUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzLmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlTGVhdmUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzLmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbG9hZDogZmFsc2UsXG4gICAgICAvLyBFYWNoIHJvdXRlLWNvbXBvbmVudCBkZWZpbmVzIGEgc3RvcmUgdGhhdCBnZXRzIHBhc3NlZCBvbiB0byBpdHNcbiAgICAgIC8vIGNoaWxkIGNvbXBvbmVudHMsIHNvIHRoZXkgY2FuIHN0b3JlIHZhbHVlcyBpbiB0aGVtIHRoYXQgbGl2ZSBiZXlvbmRcbiAgICAgIC8vIHRoZWlyIGxpZmUtY3ljbGUuIFNlZTogRGl0b1BhbmUsIFNvdXJjZU1peGluXG4gICAgICBzdG9yZToge30sXG4gICAgICBsb2FkQ2FjaGU6IHt9IC8vIFNlZSBUeXBlTWl4aW4ubG9hZCgpXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyByb3V0ZUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcm91dGVSZWNvcmQoKSB7XG4gICAgICAvLyBUT0RPOiBDYW4gdGhpcy4kcm91dGUuY3VycmVudFJvdXRlIGJlIG9mIHVzZSBzb21ld2hlcmUgaGVyZT9cbiAgICAgIC8vIFJldHJpZXZlIHRoZSByb3V0ZS1yZWNvcmQgdG8gd2hpY2ggdGhpcyBjb21wb25lbnQgd2FzIG1hcHBlZCB0bzpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzM4I2lzc3VlY29tbWVudC0yOTYzODE0NTlcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5tYXRjaGVkW3RoaXMuJHZub2RlLmRhdGEucm91dGVyVmlld0RlcHRoXVxuICAgIH0sXG5cbiAgICBpc0xhc3RSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoaXMgcm91dGVyIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlLlxuICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IG1hdGNoZWRbbWF0Y2hlZC5sZW5ndGggLSAxXVxuICAgIH0sXG5cbiAgICBpc0xhc3RVbm5lc3RlZFJvdXRlKCkge1xuICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgcm91dGUgY29tcG9uZW50IGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm91dGUgdGhhdFxuICAgICAgLy8gbmVlZHMgaXRzIG93biByb3V0ZXItdmlldyAoPSBpcyBub3QgbmVzdGVkKS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIGZvciAobGV0IGkgPSBtYXRjaGVkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IG1hdGNoZWRbaV1cbiAgICAgICAgaWYgKCFyZWNvcmQubWV0YS5uZXN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZCA9PT0gcmVjb3JkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc05lc3RlZFJvdXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5uZXN0ZWRcbiAgICB9LFxuXG4gICAgbWV0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkPy5tZXRhXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSb3V0ZVBhdGgodGhpcy5yb3V0ZVJlY29yZC5wYXRoKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iKCkge1xuICAgICAgY29uc3QgeyBicmVhZGNydW1iIH0gPSB0aGlzLnNjaGVtYSB8fCB7fVxuICAgICAgcmV0dXJuIGJyZWFkY3J1bWIgfHwgYCR7dGhpcy5icmVhZGNydW1iUHJlZml4fSAke3RoaXMubGFiZWx9YFxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfSxcblxuICAgIHBhcmFtKCkge1xuICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdnVlLXJvdXRlciBub3QgYmVpbmcgYWJsZSB0byBtYXAgbXVsdGlwbGUgdXJsIHBhcmFtZXRlcnNcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgbmFtZSB0byBtdWx0aXBsZSBjb21wb25lbnRzLCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhcmFtc1t0aGlzLm1ldGE/LnBhcmFtXSB8fCBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZSwgc2VlIERpdG9Gb3JtXG4gICAgZG9lc011dGF0ZSgpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIEtlZXAgYSBzaGFyZWQgc3RhY2sgb2Ygcm9vdCBjb21wb25lbnRzIGZvciBEaXRvVHJhaWwgdG8gdXNlIHRvIHJlbmRlclxuICAgIC8vIGxhYmVscy4gQ2FuJ3QgcmVseSBvbiAkcm91dGUubWF0Y2hlZFtpXS5pbnN0YW5jZXMuZGVmYXVsdCB1bmZvcnR1bmF0ZWx5LFxuICAgIC8vIGFzIGluc3RhbmNlcyBhcmVuJ3QgaW1tZWRpYXRlbHkgcmVhZHksIGFuZCBpbnN0YW5jZXMgaXMgbm90IHJlYWN0aXZlLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLnB1c2godGhpcylcbiAgfSxcblxuICBkZXN0cm95ZWQoKSB7XG4gICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICByb3V0ZUNvbXBvbmVudHMuc3BsaWNlKHJvdXRlQ29tcG9uZW50cy5pbmRleE9mKHRoaXMpLCAxKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBiZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dCkge1xuICAgICAgbGV0IG9rID0gdHJ1ZVxuICAgICAgY29uc3QgaXNDbG9zaW5nID0gKFxuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0aGlzIHJvdXRlIGNoYW5nZSBpZiB0aGUgZm9ybSBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlXG4gICAgICAgIC8vIGBmcm9tYCByb3V0ZSwgYnV0IGluY2x1ZGUgcGFyZW50IGZvcm1zIG9mIGNsb3NpbmcgbmVzdGVkIGZvcm1zIGFzIGFzXG4gICAgICAgIC8vIHdlbGwsIGJ5IG1hdGNoaW5nIHRoZSB0aGUgc3RhcnQgb2YgZnJvbS90byBwYXRoIGFnYWluc3QgYHRoaXMucGF0aGA6XG4gICAgICAgIGZyb20ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgIXRvLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgIC8vIEV4Y2x1ZGUgaGFzaCBjaGFuZ2VzIG9ubHkgKD0gdGFiIGNoYW5nZXMpOlxuICAgICAgICBmcm9tLnBhdGggIT09IHRvLnBhdGggJiYgKFxuICAgICAgICAgIHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHx8XG4gICAgICAgICAgLy8gRGVjaWRlIGlmIHdlJ3JlIG1vdmluZyB0b3dhcmRzIGEgbmV3IG5lc3RlZCBmb3JtLCBvciBjbG9zaW5nIC9cbiAgICAgICAgICAvLyByZXBsYWNpbmcgYW4gYWxyZWFkeSBvcGVuIG9uZSBieSBjb21wYXJpbmcgcGF0aCBsZW5ndGhzLlxuICAgICAgICAgIC8vIFRoZSBjYXNlIG9mIGA9YCBtYXRjaGVzIHRoZSByZXBsYWNpbmcgb2YgYW4gYWxyZWFkeSBvcGVuIG9uZS5cbiAgICAgICAgICB0by5wYXRoLmxlbmd0aCA8PSBmcm9tLnBhdGgubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIGlmIChpc0Nsb3NpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9lc011dGF0ZSkge1xuICAgICAgICAgIC8vIEZvciBhY3RpdmUgZGlyZWN0bHkgbXV0YXRpbmcgKG5lc3RlZCkgZm9ybXMgdGhhdCB3ZXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgICAvLyB5ZXQsIHZhbGlkYXRlIHRoZW0gb25jZS4gSWYgdGhlIHVzZXIgdGhlbiBzdGlsbCB3YW50cyB0byBsZWF2ZVxuICAgICAgICAgIC8vIHRoZW0sIHRoZXkgY2FuIGNsaWNrIGNsb3NlIC8gbmF2aWdhdGUgYXdheSBhZ2Fpbi5cbiAgICAgICAgICBvayA9IChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgfHxcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGwoKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGUgZm9ybSBkb2Vzbid0IGRpcmVjdGx5IG11dGF0ZSBkYXRhLiBJZiBpdCBpcyBkaXJ0eSwgYXNrIGlmIHVzZXJcbiAgICAgICAgICAvLyB3YW50cyB0byBwZXJzaXN0IGRhdGEgZmlyc3QuXG4gICAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xuICAgICAgICAgICAgb2sgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICAgICAgYFlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHJlYWxseSB3YW50IHRvICR7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJicy5jYW5jZWxcbiAgICAgICAgICAgICAgfT9gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KG9rKVxuICAgIH0sXG5cbiAgICBnZXRSb3V0ZVBhdGgodGVtcGxhdGVQYXRoKSB7XG4gICAgICAvLyBNYXBzIHRoZSByb3V0ZSdzIGFjdHVhbCBwYXRoIHRvIHRoZSBtYXRjaGVkIHJvdXRlcyBieSBjb3VudGluZyBpdHNcbiAgICAgIC8vIHBhcnRzIHNlcGFyYXRlZCBieSAnLycsIHNwbGl0dGluZyB0aGUgcGF0aCBpbnRvIHRoZSBtYXBwZWQgcGFydHNcbiAgICAgIC8vIGNvbnRhaW5pbmcgYWN0dWFsIHBhcmFtZXRlcnMuXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucGF0aFxuICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAuc2xpY2UoMCwgdGVtcGxhdGVQYXRoLnNwbGl0KCcvJykubGVuZ3RoKVxuICAgICAgICAuam9pbignLycpXG4gICAgfSxcblxuICAgIGdldENoaWxkUGF0aChwYXRoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBpc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkge1xuICAgICAgLy8gVGhlIHJvdXRlIHBhdGggaXMgdGhlIHBhdGggdXAgdG8gdGhlIGZpcnN0IC8gKGV4Y2x1ZGluZyB0aGUgaW5pdGlhbCAvKTpcbiAgICAgIGNvbnN0IHJvb3RQYXRoID0gdGhpcy5wYXRoLm1hdGNoKC9eKFxcL1teL10qKS8pWzFdXG4gICAgICByZXR1cm4gIWdldENvbW1vblByZWZpeCh0by5wYXRoLCBmcm9tLnBhdGgpLnN0YXJ0c1dpdGgocm9vdFBhdGgpXG4gICAgfVxuICB9XG59XG4iLCJcbi8vIE9ubHkgcmVuZGVyIERpdG9WaWV3IHdoZW4gaXQgaXMgYWN0aXZlLCBvdGhlcndpc2UgYSBub3JtYWwgcm91dGVyLXZpZXdcbi8vIGluc3RlYWQsIHRvIG5lc3QgZnVydGhlciByb3V0ZSBjb21wb25lbnRzLlxuLy8gTk9URTogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaGFuZGxpbmcgaW4gRGl0b0Zvcm0sIHdoZXJlIGB2LXNob3dgIGlzXG4vLyB1c2VkIHRvIGFsd2F5cyByZW5kZXIgZm9ybXMgZXZlbiB3aGVuIG90aGVyIG5lc3RlZCBmb3JtcyBhcmUgcHJlc2VudC5cbnJvdXRlci12aWV3KFxuICB2LWlmPVwiIWlzTGFzdFJvdXRlXCJcbiAgOmtleT1cIm5hbWVcIlxuKVxuLmRpdG8tdmlldy5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlcih2aWV3U2NoZW1hKVwiXG4pXG4gIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgIDpzY2hlbWE9XCJ2aWV3U2NoZW1hXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShuYW1lKVwiXG4gICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgOm1lbnVIZWFkZXI9XCJ0cnVlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLy8gT25seSByZW5kZXIgRGl0b1ZpZXcgd2hlbiBpdCBpcyBhY3RpdmUsIG90aGVyd2lzZSBhIG5vcm1hbCByb3V0ZXItdmlld1xuICAvLyBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbiAgLy8gTk9URTogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaGFuZGxpbmcgaW4gRGl0b0Zvcm0sIHdoZXJlIGB2LXNob3dgIGlzXG4gIC8vIHVzZWQgdG8gYWx3YXlzIHJlbmRlciBmb3JtcyBldmVuIHdoZW4gb3RoZXIgbmVzdGVkIGZvcm1zIGFyZSBwcmVzZW50LlxuICByb3V0ZXItdmlldyhcbiAgICB2LWlmPVwiIWlzTGFzdFJvdXRlXCJcbiAgICA6a2V5PVwibmFtZVwiXG4gIClcbiAgLmRpdG8tdmlldy5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gICAgdi1lbHNlLWlmPVwic2hvdWxkUmVuZGVyKHZpZXdTY2hlbWEpXCJcbiAgKVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgICAgOnNjaGVtYT1cInZpZXdTY2hlbWFcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKG5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQgeyBzb21lU2NoZW1hQ29tcG9uZW50LCBpc1NpbmdsZUNvbXBvbmVudFZpZXcgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdmlldycsIHtcbiAgbWl4aW5zOiBbUm91dGVNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICAvLyBSZWRpcmVjdCAkc291cmNlQ29tcG9uZW50IGFuZCAkcmVzb3VyY2VDb21wb25lbnQgdG8gdGhlIG1haW4gY29tcG9uZW50OlxuICAgIHJldHVybiB7XG4gICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLm1haW5Db21wb25lbnQ/LnNvdXJjZUNvbXBvbmVudCB8fCBudWxsLFxuICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLm1haW5Db21wb25lbnQ/LnJlc291cmNlQ29tcG9uZW50IHx8IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNWaWV3OiB0cnVlLFxuICAgICAgLy8gVXBkYXRlZCBmcm9tIExvYWRpbmdNaXhpbiB0aHJvdWdoIGBzZXRMb2FkaW5nKGlzTG9hZGluZylgOlxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIC8vIE5PVEU6IERhdGEgaXMgc2hhcmVkIGFjcm9zcyBhbGwgdmlld3MgYmVjYXVzZSB0aGUgcm91dGVyIHJlY3ljbGVzIHRoZVxuICAgICAgLy8gRGl0b1ZpZXcgY29tcG9uZW50LlxuICAgICAgZGF0YToge31cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhLnNjaGVtYVxuICAgIH0sXG5cbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgaXNTaW5nbGVDb21wb25lbnRWaWV3KCkge1xuICAgICAgcmV0dXJuIGlzU2luZ2xlQ29tcG9uZW50Vmlldyh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgbWFpbkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlEYXRhUGF0aCh0aGlzLm5hbWUpXG4gICAgfSxcblxuICAgIHZpZXdTY2hlbWEoKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgLy8gVHJhbnNsYXRlIHNpbmdsZS1jb21wb25lbnQgc2NoZW1hcyBpbnRvIG11bHRpLWNvbXBvbmVudCBzY2hlbWFzLFxuICAgICAgLy8gc28gdGhleSBjYW4gYmUgcmVuZGVyZWQgZGlyZWN0bHkgdGhyb3VnaCBEaXRvU2NoZW1hIGFsc286XG4gICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZUNvbXBvbmVudFZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgbmFtZTogc2NoZW1hLm5hbWUsXG4gICAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgW3NjaGVtYS5uYW1lXToge1xuICAgICAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgICAgIGxhYmVsOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA6IHNjaGVtYVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICByZXR1cm4gc29tZVNjaGVtYUNvbXBvbmVudChcbiAgICAgICAgdGhpcy52aWV3U2NoZW1hLFxuICAgICAgICBjb21wb25lbnQgPT4gaGFzUmVzb3VyY2UoY29tcG9uZW50KVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZSh0bywgZnJvbSkge1xuICAgICAgLy8gU2VlIGlmIHRoZSByb3V0ZSBjaGFuZ2VzIGNvbXBsZXRlbHksIGFuZCBjbGVhciB0aGUgZGF0YSBpZiBpdCBkb2VzLlxuICAgICAgaWYgKHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5kYXRhID0ge31cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgLy8gTGlzdHMgaW5zaWRlIHNpbmdsZS1jb21wb25lbnQgdmlld3MgdXNlIHRoZSB2aWV3J3MgcGF0aCBmb3Igc3ViLXBhdGhzOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8gdGhpcy5wYXRoXG4gICAgICAgIDogYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnQGRpdG9qcy91aSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZG9tSGFuZGxlcnM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgZm9yIChjb25zdCB7IHJlbW92ZSB9IG9mIHRoaXMuZG9tSGFuZGxlcnMpIHtcbiAgICAgIHJlbW92ZSgpXG4gICAgfVxuICAgIHRoaXMuZG9tSGFuZGxlcnMgPSBbXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBkb21PbihlbGVtZW50LCB0eXBlLCBoYW5kbGVyKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhZGRFdmVudHMoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGlzT2JqZWN0KHR5cGUpID8gdHlwZSA6IHsgW3R5cGVdOiBoYW5kbGVyIH1cbiAgICAgIClcbiAgICAgIHRoaXMuZG9tSGFuZGxlcnMucHVzaChyZXN1bHQpXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLXJvb3RcbiAgbm90aWZpY2F0aW9ucy5kaXRvLW5vdGlmaWNhdGlvbnMoXG4gICAgcmVmPVwibm90aWZpY2F0aW9uc1wiXG4gICAgcG9zaXRpb249XCJ0b3AgcmlnaHRcIlxuICAgIGNsYXNzZXM9XCJkaXRvLW5vdGlmaWNhdGlvblwiXG4gIClcbiAgZGl0by1tZW51XG4gIG1haW4uZGl0by1wYWdlLmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgIGRpdG8taGVhZGVyKFxuICAgICAgOnNwaW5uZXI9XCJvcHRpb25zLnNwaW5uZXJcIlxuICAgICAgOmlzTG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgKVxuICAgICAgZGl0by1hY2NvdW50KFxuICAgICAgICB2LWlmPVwidXNlclwiXG4gICAgICApXG4gICAgICBhLmRpdG8tbG9naW4oXG4gICAgICAgIHYtZWxzZS1pZj1cImFsbG93TG9naW5cIlxuICAgICAgICBAY2xpY2s9XCJyb290Q29tcG9uZW50LmxvZ2luKClcIlxuICAgICAgKVxuICAgICAgICBzcGFuIExvZ2luXG4gICAgcm91dGVyLXZpZXdcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXJvb3RcbiAgICBub3RpZmljYXRpb25zLmRpdG8tbm90aWZpY2F0aW9ucyhcbiAgICAgIHJlZj1cIm5vdGlmaWNhdGlvbnNcIlxuICAgICAgcG9zaXRpb249XCJ0b3AgcmlnaHRcIlxuICAgICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgICApXG4gICAgZGl0by1tZW51XG4gICAgbWFpbi5kaXRvLXBhZ2UuZGl0by1zY3JvbGwtcGFyZW50XG4gICAgICBkaXRvLWhlYWRlcihcbiAgICAgICAgOnNwaW5uZXI9XCJvcHRpb25zLnNwaW5uZXJcIlxuICAgICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICAgIClcbiAgICAgICAgZGl0by1hY2NvdW50KFxuICAgICAgICAgIHYtaWY9XCJ1c2VyXCJcbiAgICAgICAgKVxuICAgICAgICBhLmRpdG8tbG9naW4oXG4gICAgICAgICAgdi1lbHNlLWlmPVwiYWxsb3dMb2dpblwiXG4gICAgICAgICAgQGNsaWNrPVwicm9vdENvbXBvbmVudC5sb2dpbigpXCJcbiAgICAgICAgKVxuICAgICAgICAgIHNwYW4gTG9naW5cbiAgICAgIHJvdXRlci12aWV3XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL3N0eWxlLnNhc3MnXG5cbiAgLmRpdG8tcm9vdFxuICAgIGhlaWdodDogMTAwJVxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1wYWdlXG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICAvLyBUaGUgcm9vdC1sZXZlbCB2aWV3cyBhbmQgZm9ybXMgbWF5IGhhdmUgYSBgLmRpdG8tc2NoZW1hLWhlYWRlcmAgdGhhdFxuICAgICAgLy8gc2hvdWxkIGFwcGVhciBsYXllcmVkIG92ZXIgYC5kaXRvLW1lbnVgLCB3aGlsZSBoYXZpbmcgYG92ZXJsYXk6IGhpZGRlbmBcbiAgICAgIC8vIHNldCBieSBgLmRpdG8tc2Nyb2xsLXBhcmVudGAgdG8gZGVsZWdhdGUgc2Nyb2xsaW5nIHRvIGAuZGl0by1zY3JvbGxgLlxuICAgICAgLy8gSW4gb3JkZXIgdG8gbm90IGhhdmUgdGhlIGhlYWRlciBjbGlwcGVkLCBhZGp1c3QgdGhlIHRvcCBoZXJlOlxuICAgICAgPiAuZGl0by1mb3JtLFxuICAgICAgPiAuZGl0by12aWV3XG4gICAgICAgIG1hcmdpbi10b3A6IC0kbWVudS1oZWlnaHRcbiAgICAgICAgcGFkZGluZy10b3A6ICRtZW51LWhlaWdodFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGFzQXJyYXksIHN0cmlwVGFncyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Vc2VyIGZyb20gJy4uL0RpdG9Vc2VyLmpzJ1xuaW1wb3J0IERpdG9WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IHByb2Nlc3NWaWV3LCByZXNvbHZlU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXJvb3QnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdmlld3M6ICgpID0+IHRoaXMucmVzb2x2ZWRWaWV3c1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHVucmVzb2x2ZWRWaWV3czogeyB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbiwgUHJvbWlzZV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgb3B0aW9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkVmlld3M6IHt9LFxuICAgICAgYWxsb3dMb2dpbjogZmFsc2UsXG4gICAgICBsb2FkaW5nQ291bnQ6IDBcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBub3RpZmljYXRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMubm90aWZpY2F0aW9uc1xuICAgIH0sXG5cbiAgICBpc0xvYWRpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ291bnQgPiAwXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5hcHBTdGF0ZS50aXRsZSA9IGRvY3VtZW50LnRpdGxlIHx8ICdEaXRvLmpzIEFkbWluJ1xuICAgIC8vIFdpdGggaG90LXJlbG9hZGluZywgaXQgbG9va3MgbGlrZSBkZXN0cm95ZWQgaG9va3MgYXJlbid0IGFsd2F5cyBjYWxsZWRcbiAgICAvLyBmb3Igcm91dGUgY29tcG9uZW50cyBzbyByZXNldCB0aGUgYXJyYXkgb2YgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGluc3RlYWQuXG4gICAgdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMgPSBbXVxuICB9LFxuXG4gIGFzeW5jIG1vdW50ZWQoKSB7XG4gICAgLy8gQ2xlYXIgdGhlIGxhYmVsIG1hcmtlZCBhcyBhY3RpdmUgb24gYWxsIG1vdXNlIGFuZCBrZXlib2FyZCBldmVudHMsIGV4Y2VwdFxuICAgIC8vIHRoZSBvbmVzIHRoYXQgRGl0b0xhYmVsIGl0c2VsZiBpbnRlcmNlcHRzLlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgIGNsaWNrOiBldmVudCA9PiB7XG4gICAgICAgIGlmICghZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5kaXRvLWxhYmVsJykpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICB0cnkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gZmFsc2VcbiAgICAgIGlmIChhd2FpdCB0aGlzLmZldGNoVXNlcigpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzb2x2ZVZpZXdzKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgfVxuICAgIHRoaXMuYWxsb3dMb2dpbiA9IHRydWVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbm90aWZ5KHsgdHlwZSA9ICdpbmZvJywgdGl0bGUsIHRleHQgfSA9IHt9KSB7XG4gICAgICB0aXRsZSB8fD0ge1xuICAgICAgICB3YXJuaW5nOiAnV2FybmluZycsXG4gICAgICAgIGVycm9yOiAnRXJyb3InLFxuICAgICAgICBpbmZvOiAnSW5mb3JtYXRpb24nLFxuICAgICAgICBzdWNjZXNzOiAnU3VjY2VzcydcbiAgICAgIH1bdHlwZV0gfHwgJ05vdGlmaWNhdGlvbidcbiAgICAgIHRleHQgPSBgPHA+JHtcbiAgICAgICAgYXNBcnJheSh0ZXh0KS5qb2luKCc8L3A+IDxwPicpXG4gICAgICB9PC9wPmAucmVwbGFjZSgvXFxufFxcclxcbnxcXHIvZywgJzxicj4nKVxuICAgICAgY29uc3QgbG9nID0ge1xuICAgICAgICB3YXJuaW5nOiAnd2FybicsXG4gICAgICAgIGVycm9yOiAnZXJyb3InLFxuICAgICAgICBpbmZvOiAnbG9nJyxcbiAgICAgICAgc3VjY2VzczogJ2xvZydcbiAgICAgIH1bdHlwZV0gfHwgJ2Vycm9yJ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGVbbG9nXShzdHJpcFRhZ3ModGV4dCkpXG4gICAgICBjb25zdCB7IG5vdGlmaWNhdGlvbnMgPSB0cnVlIH0gPSB0aGlzLmFwaVxuICAgICAgaWYgKG5vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGRpc3BsYXktZHVyYXRpb24gZm9yIHRoZSBub3RpZmljYXRpb24gYmFzZWQgb24gaXRzIGNvbnRlbnRcbiAgICAgICAgLy8gYW5kIHRoZSBzZXR0aW5nIG9mIHRoZSBgZHVyYXRpb25GYWN0b3JgIGNvbmZpZ3VyYXRpb24uIEl0IGRlZmluZXMgdGhlXG4gICAgICAgIC8vIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgbXVsdGlwbGllZCB3aXRoIHRoZSBhbW91bnQgb2YgY2hhcmFjdGVyc1xuICAgICAgICAvLyBkaXNwbGF5ZWQgaW4gdGhlIG5vdGlmaWNhdGlvbiwgcGx1cyA0MCAoNDAgKyB0aXRsZSArIG1lc3NhZ2UpOlxuICAgICAgICBjb25zdCB7IGR1cmF0aW9uRmFjdG9yID0gMjAgfSA9IG5vdGlmaWNhdGlvbnNcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoNDAgKyB0ZXh0Lmxlbmd0aCArIHRpdGxlLmxlbmd0aCkgKiBkdXJhdGlvbkZhY3RvclxuICAgICAgICB0aGlzLiRub3RpZnkoeyB0eXBlLCB0aXRsZSwgdGV4dCwgZHVyYXRpb24gfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmRlc3Ryb3lBbGwoKVxuICAgIH0sXG5cbiAgICByZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmxvYWRpbmdDb3VudCArPSBpc0xvYWRpbmcgPyAxIDogLTFcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9naW4oKSB7XG4gICAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFkZGl0aW9uYWxDb21wb25lbnRzLFxuICAgICAgICByZWRpcmVjdEFmdGVyTG9naW5cbiAgICAgIH0gPSB0aGlzLm9wdGlvbnMubG9naW4gfHwge31cbiAgICAgIGNvbnN0IGxvZ2luRGF0YSA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICB1c2VybmFtZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uYWRkaXRpb25hbENvbXBvbmVudHNcbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgbG9naW46IHsgdHlwZTogJ3N1Ym1pdCcgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKGxvZ2luRGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9naW4sXG4gICAgICAgICAgICBkYXRhOiBsb2dpbkRhdGEsXG4gICAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHJlZGlyZWN0QWZ0ZXJMb2dpbikge1xuICAgICAgICAgICAgbG9jYXRpb24ucmVwbGFjZShyZWRpcmVjdEFmdGVyTG9naW4pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXNlcihyZXNwb25zZS5kYXRhLnVzZXIpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZT8uZGF0YT8uZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbiBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0OiBlcnJvciB8fCBlcnJcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIucmVzcG9uc2UpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9naW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG5hdmlnYXRlSG9tZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9nb3V0KCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9nb3V0LFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLnNldFVzZXIobnVsbClcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlSG9tZSgpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hVc2VyKCkge1xuICAgICAgbGV0IHVzZXIgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5zZXNzaW9uLFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIHVzZXIgPSByZXNwb25zZS5kYXRhLnVzZXIgfHwgbnVsbFxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgIHRleHQ6IGVyclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRVc2VyKHVzZXIpXG4gICAgICByZXR1cm4gdXNlclxuICAgIH0sXG5cbiAgICBzZXRVc2VyKHVzZXIpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUudXNlciA9IChcbiAgICAgICAgdXNlciAmJlxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodXNlciwgRGl0b1VzZXIucHJvdG90eXBlKVxuICAgICAgKVxuICAgICAgLy8gQ2xlYXIgcmVzb2x2ZWQgdmlld3Mgd2hlbiB1c2VyIGlzIGxvZ2dlZCBvdXQuXG4gICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFZpZXdzID0ge31cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbnN1cmVVc2VyKCkge1xuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVWaWV3cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKHRoaXMudW5yZXNvbHZlZFZpZXdzKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCFlcnJvci5yZXF1ZXN0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgICAvLyBDb2xsZWN0IGFsbCByb3V0ZXMgZnJvbSB0aGUgcm9vdCBzY2hlbWEgY29tcG9uZW50c1xuICAgICAgY29uc3Qgcm91dGVzID0gW11cbiAgICAgIGNvbnN0IHByb21pc2VzID0gW11cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvbHZlZFZpZXdzKSkge1xuICAgICAgICBwcm9taXNlcy5wdXNoKHByb2Nlc3NWaWV3KERpdG9WaWV3LCB0aGlzLmFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMpKVxuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgICAgICB0aGlzLiRyb3V0ZXIuYWRkUm91dGUocm91dGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbm5hdi5kaXRvLW1lbnUuZGl0by1zY3JvbGwtcGFyZW50XG4gIGgxIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gIHVsLmRpdG8tc2Nyb2xsXG4gICAgbGkodi1mb3I9XCJ2aWV3IGluIHZpZXdzXCIpXG4gICAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodmlldylcIlxuICAgICAgICA6dG89XCJgLyR7dmlldy5wYXRofWBcIlxuICAgICAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gICAgICApIHt7IGdldExhYmVsKHZpZXcpIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBuYXYuZGl0by1tZW51LmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgIGgxIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gICAgdWwuZGl0by1zY3JvbGxcbiAgICAgIGxpKHYtZm9yPVwidmlldyBpbiB2aWV3c1wiKVxuICAgICAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcih2aWV3KVwiXG4gICAgICAgICAgOnRvPVwiYC8ke3ZpZXcucGF0aH1gXCJcbiAgICAgICAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwodmlldykgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1tZW51XG4gICAgZmxleDogaW5pdGlhbFxuICAgIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIHVsXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlclxuICAgICAgYm9yZGVyLXJpZ2h0OiAkYm9yZGVyLXN0eWxlXG4gICAgYSxcbiAgICBoMVxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICBoMVxuICAgICAgcGFkZGluZzogJG1lbnUtcGFkZGluZ1xuICAgICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0XG4gICAgICBmb250LXdlaWdodDogYm9sZFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtlclxuICAgICAgYm9yZGVyLXJpZ2h0OiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1kYXJrZXN0XG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLmRpdG8tbGlua1xuICAgICAgcGFkZGluZzogJG1lbnUtcGFkZGluZ1xuICAgICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0XG4gICAgICAmLmRpdG8tYWN0aXZlXG4gICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZVxuICAuZGl0by1saW5rXG4gICAgJjpmb2N1czpub3QoOmFjdGl2ZSk6bm90KC5kaXRvLWFjdGl2ZSlcbiAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctZm9jdXNcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tbWVudScsIHt9KVxuPC9zY3JpcHQ+XG4iLCJcbjxkaXYgY2xhc3M9XCJ2LXNwaW5uZXJcIiB2LXNob3c9XCJsb2FkaW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTFcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTFdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTJcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTJdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTNcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTNdXCI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuIiwiPHRlbXBsYXRlPlxuPGRpdiBjbGFzcz1cInYtc3Bpbm5lclwiIHYtc2hvdz1cImxvYWRpbmdcIj5cbiAgICA8ZGl2IGNsYXNzPVwidi1wdWxzZSB2LXB1bHNlMVwiIHYtYmluZDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5MV1cIj5cbiAgICA8L2Rpdj48ZGl2IGNsYXNzPVwidi1wdWxzZSB2LXB1bHNlMlwiIHYtYmluZDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5Ml1cIj5cbiAgICA8L2Rpdj48ZGl2IGNsYXNzPVwidi1wdWxzZSB2LXB1bHNlM1wiIHYtYmluZDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5M11cIj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBcbiAgbmFtZTogJ1B1bHNlTG9hZGVyJyxcblxuICBwcm9wczoge1xuICAgIGxvYWRpbmc6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBjb2xvcjogeyBcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcjNWRjNTk2J1xuICAgIH0sXG4gICAgc2l6ZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJzE1cHgnXG4gICAgfSxcbiAgICBtYXJnaW46IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcycHgnXG4gICAgfSxcbiAgICByYWRpdXM6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcxMDAlJ1xuICAgIH1cbiAgfSxcbiAgZGF0YSAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNwaW5uZXJTdHlsZToge1xuICAgICAgXHRiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuY29sb3IsXG4gICAgICBcdHdpZHRoOiB0aGlzLnNpemUsXG4gICAgICAgIGhlaWdodDogdGhpcy5zaXplLFxuICAgICAgXHRtYXJnaW46IHRoaXMubWFyZ2luLFxuICAgICAgXHRib3JkZXJSYWRpdXM6IHRoaXMucmFkaXVzLFxuICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgICAgYW5pbWF0aW9uTmFtZTogJ3YtcHVsc2VTdHJldGNoRGVsYXknLFxuICAgICAgICBhbmltYXRpb25EdXJhdGlvbjogJzAuNzVzJyxcbiAgICAgICAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ICdpbmZpbml0ZScsXG4gICAgICAgIGFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uOiAnY3ViaWMtYmV6aWVyKC4yLC42OCwuMTgsMS4wOCknLFxuICAgICAgICBhbmltYXRpb25GaWxsTW9kZTogJ2JvdGgnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5MToge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMTJzJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTI6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjI0cydcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkzOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4zNnMnXG4gICAgICB9XG4gICAgfVxuICB9XG5cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGU+XG4vKi52LXNwaW5uZXJcbntcbiAgICBtYXJnaW46IDEwMHB4IGF1dG87XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuKi9cblxuQC13ZWJraXQta2V5ZnJhbWVzIHYtcHVsc2VTdHJldGNoRGVsYXlcbntcbiAgICAwJSxcbiAgICA4MCVcbiAgICB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAtd2Via2l0LW9wYWNpdHk6IDE7ICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDQ1JVxuICAgIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgICAgICAtd2Via2l0LW9wYWNpdHk6IDAuNzsgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMC43O1xuICAgIH1cbn1cblxuQGtleWZyYW1lcyB2LXB1bHNlU3RyZXRjaERlbGF5XG57XG4gICAgMCUsXG4gICAgODAlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAxOyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICA0NSVcbiAgICB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAwLjc7ICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICB9XG59XG48L3N0eWxlPiIsIlxubmF2LmRpdG8taGVhZGVyXG4gIC5kaXRvLXRyYWlsXG4gICAgdWxcbiAgICAgIGxpKFxuICAgICAgICB2LWZvcj1cIihjb21wb25lbnQsIGluZGV4KSBpbiB0cmFpbFwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKHYtaWY9XCJpbmRleCA9PT0gdHJhaWwubGVuZ3RoIC0gMVwiKVxuICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgICAgICAgcm91dGVyLWxpbmsuZGl0by1icmVhZGNydW1iKHYtZWxzZSwgOnRvPVwiY29tcG9uZW50LnBhdGhcIilcbiAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgc3Bpbm5lci5kaXRvLXNwaW5uZXIodi1pZj1cImlzTG9hZGluZ1wiKVxuICBzbG90XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBuYXYuZGl0by1oZWFkZXJcbiAgICAuZGl0by10cmFpbFxuICAgICAgdWxcbiAgICAgICAgbGkoXG4gICAgICAgICAgdi1mb3I9XCIoY29tcG9uZW50LCBpbmRleCkgaW4gdHJhaWxcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUodi1pZj1cImluZGV4ID09PSB0cmFpbC5sZW5ndGggLSAxXCIpXG4gICAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgICAgICAgICByb3V0ZXItbGluay5kaXRvLWJyZWFkY3J1bWIodi1lbHNlLCA6dG89XCJjb21wb25lbnQucGF0aFwiKVxuICAgICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICBzcGlubmVyLmRpdG8tc3Bpbm5lcih2LWlmPVwiaXNMb2FkaW5nXCIpXG4gICAgc2xvdFxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWhlYWRlclxuICAgIGJhY2tncm91bmQ6ICRjb2xvci1ibGFja1xuICAgIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplXG4gICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0XG4gICAgei1pbmRleDogJG1lbnUtei1pbmRleFxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIHNwYW5cbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgcGFkZGluZzogJG1lbnUtcGFkZGluZ1xuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5kaXRvLXRyYWlsXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICBoZWlnaHQ6IDNlbVxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGggKyAkY29udGVudC1wYWRkaW5nXG4gICAgICB1bFxuICAgICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBhXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwLjRlbVxuICAgICAgICAkYW5nbGU6IDMzZGVnXG4gICAgICAgICY6aG92ZXJcbiAgICAgICAgICBjb2xvcjogIzk5OVxuICAgICAgICAmOjpiZWZvcmUsXG4gICAgICAgICY6OmFmdGVyXG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgICAgY29udGVudDogJydcbiAgICAgICAgICB3aWR0aDogMXB4XG4gICAgICAgICAgaGVpZ2h0OiAxLjJlbVxuICAgICAgICAgIHJpZ2h0OiAtMXB4XG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtcbiAgICAgICAgJjo6YmVmb3JlXG4gICAgICAgICAgdG9wOiA1MCVcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgkYW5nbGUpXG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wXG4gICAgICAgICY6OmFmdGVyXG4gICAgICAgICAgYm90dG9tOiA1MCVcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtJGFuZ2xlKVxuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGJvdHRvbVxuICAgIC5kaXRvLXNwaW5uZXJcbiAgICAgIG1hcmdpbi10b3A6ICRtZW51LXBhZGRpbmctdmVyXG4gICAgLmRpdG8tZGlydHlcbiAgICAgICY6YWZ0ZXJcbiAgICAgICAgY29udGVudDogJydcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICAgICB3aWR0aDogOHB4XG4gICAgICAgIGhlaWdodDogOHB4XG4gICAgICAgIG1hcmdpbjogMnB4XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwLjVlbVxuICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlXG4gICAgLmRpdG8tYWNjb3VudCxcbiAgICAuZGl0by1sb2dpblxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICB0b3A6IDBcbiAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgIC5kaXRvLWFjY291bnRcbiAgICAgIGxlZnQ6ICRjb250ZW50LXdpZHRoICsgJGNvbnRlbnQtcGFkZGluZyAqIDJcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bHNlTG9hZGVyIGZyb20gJ3Z1ZS1zcGlubmVyL3NyYy9QdWxzZUxvYWRlci52dWUnXG5cbmNvbnN0IFNwaW5uZXIgPSBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnc3Bpbm5lcicsIFB1bHNlTG9hZGVyKVxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8taGVhZGVyJywge1xuICBjb21wb25lbnRzOiB7IFNwaW5uZXIgfSxcblxuICBwcm9wczoge1xuICAgIHNwaW5uZXI6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9LFxuICAgIGlzTG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdHJhaWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMuZmlsdGVyKFxuICAgICAgICBjb21wb25lbnQgPT4gISFjb21wb25lbnQucm91dGVSZWNvcmRcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBzaXplID0gJzhweCcsXG4gICAgICBjb2xvciA9ICcjOTk5J1xuICAgIH0gPSB0aGlzLnNwaW5uZXIgfHwge31cbiAgICBjb25zdCB7IHByb3BzIH0gPSBTcGlubmVyLm9wdGlvbnNcbiAgICBwcm9wcy5zaXplLmRlZmF1bHQgPSBzaXplXG4gICAgcHJvcHMuY29sb3IuZGVmYXVsdCA9IGNvbG9yXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWRpcnR5JzogY29tcG9uZW50LmlzRGlydHlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBEb21NaXhpbiBmcm9tICcuL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHVsbGRvd246IHtcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICAgIHN0YXJ0VGltZTogMCxcbiAgICAgICAgY2hlY2tUaW1lOiB0cnVlLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBtb3VzZWRvd246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBtb3VzZXVwOiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vblB1bGxkb3duTW91c2VVcChudWxsKSkge1xuICAgICAgICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVyczogbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSkge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldFB1bGxkb3duT3Blbih0cnVlKVxuICAgICAgICB0aGlzLmNoZWNrVGltZSA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93bk1vdXNlVXAodmFsdWUpIHtcbiAgICAgIGNvbnN0IHsgc3RhcnRUaW1lIH0gPSB0aGlzLnB1bGxkb3duXG4gICAgICBpZiAoIXRoaXMuY2hlY2tUaW1lIHx8IHN0YXJ0VGltZSAmJiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA+IDI1MCkpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMub25QdWxsZG93blNlbGVjdCh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KC8qIHZhbHVlICovKSB7XG4gICAgICAvLyBOT1RFOiBUbyBiZSBvdmVycmlkZGVuLlxuICAgIH0sXG5cbiAgICBzZXRQdWxsZG93bk9wZW4ob3Blbikge1xuICAgICAgdGhpcy5wdWxsZG93bi5vcGVuID0gb3BlblxuICAgICAgdGhpcy5wdWxsZG93bi5zdGFydFRpbWUgPSBvcGVuID8gRGF0ZS5ub3coKSA6IDBcbiAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB0aGlzLnB1bGxkb3duLmV2ZW50cylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tYWNjb3VudFxuICBhKFxuICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gIClcbiAgICBzcGFuIHt7IHVzZXIudXNlcm5hbWUgfX1cbiAgdWwuZGl0by1wdWxsZG93bihcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIlxuICApXG4gICAgbGkoXG4gICAgICB2LWZvcj1cIihsYWJlbCwgdmFsdWUpIG9mIGl0ZW1zXCJcbiAgICApXG4gICAgICBhKFxuICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHZhbHVlKVwiXG4gICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodmFsdWUpXCJcbiAgICAgICkge3sgbGFiZWwgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWFjY291bnRcbiAgICBhKFxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgICApXG4gICAgICBzcGFuIHt7IHVzZXIudXNlcm5hbWUgfX1cbiAgICB1bC5kaXRvLXB1bGxkb3duKFxuICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgICApXG4gICAgICBsaShcbiAgICAgICAgdi1mb3I9XCIobGFiZWwsIHZhbHVlKSBvZiBpdGVtc1wiXG4gICAgICApXG4gICAgICAgIGEoXG4gICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSlcIlxuICAgICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodmFsdWUpXCJcbiAgICAgICAgKSB7eyBsYWJlbCB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWFjY291bnRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAuZGl0by1wdWxsZG93blxuICAgICAgdG9wOiAkcHVsbGRvd24tcGFkZGluZy12ZXJcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1hY2NvdW50Jywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczoge1xuICAgICAgICBzZXR0aW5nczogJ1NldHRpbmdzJyxcbiAgICAgICAgbG9nb3V0OiAnTG9nb3V0J1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93blNlbGVjdCh2YWx1ZSkge1xuICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSAnbG9nb3V0JzpcbiAgICAgICAgdGhpcy5yb290Q29tcG9uZW50LmxvZ291dCgpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzZXR0aW5ncyc6XG4gICAgICAgIGNvbnNvbGUuaW5mbygnVE9ETzogSW1wbGVtZW50IFNldHRpbmdzJylcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZm9ybS5kaXRvLWRpYWxvZyhAc3VibWl0LnByZXZlbnQ9XCJzdWJtaXRcIilcbiAgZGl0by1zY2hlbWEuZGl0by1zY3JvbGwoXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgKVxuICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBmb3JtLmRpdG8tZGlhbG9nKEBzdWJtaXQucHJldmVudD1cInN1Ym1pdFwiKVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAudi0tbW9kYWwtb3ZlcmxheVxuICAgIHotaW5kZXg6IDIwMDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMgfSBmcm9tICdAZGl0b2pzL3VpJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1kaWFsb2cnLCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRkaWFsb2dDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBjb21wb25lbnRzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwcm9taXNlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICAvLyBNYWtlIHN1cmUgZGlhbG9nIGRhdGEgY29udGFpbnMgYWxsIHRoZSBleHBlY3RlZCBrZXlzXG4gICAgY29uc3QgZGlhbG9nRGF0YSA9IGNsb25lKHRoaXMuZGF0YSlcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBkaWFsb2dEYXRhKSkge1xuICAgICAgICBkaWFsb2dEYXRhW2tleV0gPSBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB3aW5kb3dFdmVudHM6IG51bGwsXG4gICAgICBkaWFsb2dEYXRhXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnQubmFtZVxuICAgIH0sXG5cbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21wb25lbnRzOiB0aGlzLmNvbXBvbmVudHNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGdldEJ1dHRvblNjaGVtYXModGhpcy5idXR0b25zKSkubWFwKFxuICAgICAgICAgIC8vIFByb2Nlc3MgdGhlIGJ1dHRvbiBzY2hlbWFzIHRvIGFkZCBkZWZhdWx0IGNsaWNrIGV2ZW50c1xuICAgICAgICAgIC8vIGZvciBib3RoICdzdWJtaXQnIGFuZCAnY2FuY2VsJyBidXR0b25zOlxuICAgICAgICAgIChba2V5LCBzY2hlbWFdKSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnY2FuY2VsJyAmJiAhc2NoZW1hLmV2ZW50cykge1xuICAgICAgICAgICAgICBzY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuY2FuY2VsKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0NhbmNlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuYnV0dG9uU2NoZW1hcy5jYW5jZWxcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLndpbmRvd0V2ZW50cyA9IGFkZEV2ZW50cyh3aW5kb3csIHtcbiAgICAgIGtleXVwOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NhbmNlbCAmJiBldmVudC5rZXlDb2RlID09PSAyNykge1xuICAgICAgICAgIHRoaXMuY2FuY2VsKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgZGVzdHJveWVkKCkge1xuICAgIHRoaXMud2luZG93RXZlbnRzLnJlbW92ZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhpZGUoKSB7XG4gICAgICB0aGlzLiRtb2RhbC5oaWRlKHRoaXMubmFtZSlcbiAgICB9LFxuXG4gICAgcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlc29sdmUodmFsdWUpXG4gICAgICB0aGlzLmhpZGUoKVxuICAgIH0sXG5cbiAgICByZWplY3QodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvbWlzZS5yZWplY3QodmFsdWUpXG4gICAgICB0aGlzLmhpZGUoKVxuICAgIH0sXG5cbiAgICBzdWJtaXQoKSB7XG4gICAgICB0aGlzLnJlc29sdmUodGhpcy5kaWFsb2dEYXRhKVxuICAgIH0sXG5cbiAgICBjYW5jZWwoKSB7XG4gICAgICB0aGlzLnJlc29sdmUobnVsbClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuY29tcG9uZW50KFxuICB2LWlmPVwiY29udGVudFwiXG4gIDppcz1cIm9wdGlvbnMudGFnIHx8IHRhZ1wiXG4gIDpjbGFzcz1cImNsYXNzZXNcIlxuICA6c3R5bGU9XCJzdHlsZXNcIlxuKSB7eyBvcHRpb25zLnRleHQgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGNvbXBvbmVudChcbiAgICB2LWlmPVwiY29udGVudFwiXG4gICAgOmlzPVwib3B0aW9ucy50YWcgfHwgdGFnXCJcbiAgICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApIHt7IG9wdGlvbnMudGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZWxlbWVudCcsIHtcbiAgcHJvcHM6IHtcbiAgICB0YWc6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc3BhbicgfSxcbiAgICBjb250ZW50OiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0gfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IHsgY29udGVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KGNvbnRlbnQpID8gY29udGVudCA6IHsgdGV4dDogY29udGVudCB9XG4gICAgfSxcblxuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLiRhdHRycy5jbGFzcyxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLmNsYXNzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdHlsZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLiRhdHRycy5zdHlsZSxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLnN0eWxlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuZnVuY3Rpb24gYXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLnJlZHVjZSgob2JqZWN0LCBlbnRyeSkgPT4ge1xuICAgIGlmIChpc1N0cmluZyhlbnRyeSkpIHtcbiAgICAgIG9iamVjdFtlbnRyeV0gPSB0cnVlXG4gICAgfSBlbHNlIGlmIChpc09iamVjdChlbnRyeSkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqZWN0LCBlbnRyeSlcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdFxuICB9LCB7fSlcbn1cblxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudC5kaXRvLWxhYmVsKFxuICB2LWlmPVwidGV4dCB8fCBjb2xsYXBzaWJsZVwiXG4gIDppcz1cInRhZ1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuKVxuICAuZGl0by1jaGV2cm9uKFxuICAgIHYtaWY9XCJjb2xsYXBzaWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiAhY29sbGFwc2VkIH1cIlxuICApXG4gIGRpdG8tZWxlbWVudC5kaXRvLWxhYmVsLXByZWZpeChcbiAgICB2LWZvcj1cIihwcmVmaXgsIGluZGV4KSBvZiBwcmVmaXhlc1wiXG4gICAgdGFnPVwic3BhblwiXG4gICAgOmtleT1cImBwcmVmaXgtJHtpbmRleH1gXCJcbiAgICA6Y29udGVudD1cInByZWZpeFwiXG4gIClcbiAgbGFiZWwoOmZvcj1cImRhdGFQYXRoXCIgdi1odG1sPVwidGV4dFwiKVxuICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1zdWZmaXgoXG4gICAgdi1mb3I9XCIoc3VmZml4LCBpbmRleCkgb2Ygc3VmZml4ZXNcIlxuICAgIHRhZz1cInNwYW5cIlxuICAgIDprZXk9XCJgc3VmZml4LSR7aW5kZXh9YFwiXG4gICAgOmNvbnRlbnQ9XCJzdWZmaXhcIlxuICApXG4gIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgY29tcG9uZW50LmRpdG8tbGFiZWwoXG4gICAgdi1pZj1cInRleHQgfHwgY29sbGFwc2libGVcIlxuICAgIDppcz1cInRhZ1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbiAgKVxuICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICB2LWlmPVwiY29sbGFwc2libGVcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiAhY29sbGFwc2VkIH1cIlxuICAgIClcbiAgICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1wcmVmaXgoXG4gICAgICB2LWZvcj1cIihwcmVmaXgsIGluZGV4KSBvZiBwcmVmaXhlc1wiXG4gICAgICB0YWc9XCJzcGFuXCJcbiAgICAgIDprZXk9XCJgcHJlZml4LSR7aW5kZXh9YFwiXG4gICAgICA6Y29udGVudD1cInByZWZpeFwiXG4gICAgKVxuICAgIGxhYmVsKDpmb3I9XCJkYXRhUGF0aFwiIHYtaHRtbD1cInRleHRcIilcbiAgICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1zdWZmaXgoXG4gICAgICB2LWZvcj1cIihzdWZmaXgsIGluZGV4KSBvZiBzdWZmaXhlc1wiXG4gICAgICB0YWc9XCJzcGFuXCJcbiAgICAgIDprZXk9XCJgc3VmZml4LSR7aW5kZXh9YFwiXG4gICAgICA6Y29udGVudD1cInN1ZmZpeFwiXG4gICAgKVxuICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWxhYmVsXG4gICAgLS1sYWJlbC1wYWRkaW5nOiAwXG4gICAgLy8gRm9yIGJ1dHRvbnMgYW5kIGNoZXZyb24gdG8gYWxpZ24gcmlnaHQ6XG4gICAgZGlzcGxheTogZmxleFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC8vIFZlcnRpY2FsbHkgY2VudGVyIGFsbCBpdGVtcyBpbiB0aGUgbGFiZWwsIGUuZy4gY2hldnJvbiwgZWRpdC1idXR0b25zLlxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXJcbiAgICBwYWRkaW5nOiB2YXIoLS1sYWJlbC1wYWRkaW5nKVxuICAgIG1hcmdpbjogMCAwICRmb3JtLXNwYWNpbmctaGFsZiAwXG5cbiAgICBsYWJlbFxuICAgICAgZGlzcGxheTogaW5saW5lXG4gICAgICBjdXJzb3I6IGluaGVyaXRcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG5cbiAgICBsYWJlbCxcbiAgICAuZGl0by1sYWJlbC1wcmVmaXgsXG4gICAgLmRpdG8tbGFiZWwtc3VmZml4XG4gICAgICAmOm50aC1sYXN0LWNoaWxkKDIpXG4gICAgICAgIC8vIFRvIHN0cmV0Y2ggZWl0aGVyIGxhYmVsIG9yIC5kaXRvLWxhYmVsLXN1ZmZpeCB0byBmdWxsIGF2YWlsYWJsZSB3aWR0aFxuICAgICAgICAvLyBzbyB0aGF0IGJ1dHRvbnMgYWx3YXlzIGFwcGVhciByaWdodC1hbGlnbmVkOlxuICAgICAgICBmbGV4OiAxIDEgYXV0b1xuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgY29udGVudDogJ1xcYTAnIC8vICZuYnBzO1xuXG4gICAgLmRpdG8tbGFiZWwtcHJlZml4LFxuICAgIC5kaXRvLWxhYmVsLXN1ZmZpeFxuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICArZWxsaXBzaXNcblxuICAgIC5kaXRvLWJ1dHRvbnNcbiAgICAgIC8vIE1vdmUgdGhlIGxhYmVsIHBhZGRpbmcgaW5zaWRlIC5kaXRvLWJ1dHRvbnMsIHNvIHRoYXQgaXQgY2FwdHVyZXMgYWxsXG4gICAgICAvLyBuZWFyIG1vdXNlIGV2ZW50czpcbiAgICAgIG1hcmdpbjogY2FsYygtMSAqIHZhcigtLWxhYmVsLXBhZGRpbmcpKVxuICAgICAgbWFyZ2luLWxlZnQ6IDBcbiAgICAgIHBhZGRpbmc6IHZhcigtLWxhYmVsLXBhZGRpbmcpXG5cbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIC8vIEluIG9yZGVyIGZvciBlbGxpcHNpcyB0byB3b3JrIG9uIGxhYmVscyB3aXRob3V0IGFmZmVjdGluZyBvdGhlciBsYXlvdXQsXG4gICAgICAvLyB3ZSBuZWVkIHRvIHBvc2l0aW9uIGl0IGFic29sdXRlbHkgaW5zaWRlIGl0cyBjb250YWluZXIuXG4gICAgICBsYWJlbFxuICAgICAgICArZWxsaXBzaXNcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgIG1heC13aWR0aDogMTAwJVxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gU2luY2UgPGxhYmVsPiB1c2VzIGBwb3NpdGlvbjogYWJzb2x1dGVgLCBzZXQgY29udGVudCB0byBhIHplcm8td2lkdGhcbiAgICAgICAgLy8gc3BhY2Ugb24gaXRzIHBhcmVudCB0byBlbmZvcmNlIHRoZSByaWdodCB0ZXh0IGhlaWdodCBpbiB0aGUgY29udGFpbmVyXG4gICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInIC8vIHplcm8td2lkdGggc3BhY2VcblxuICBhLmRpdG8tbGFiZWxcbiAgICAmOmhvdmVyXG4gICAgICAuZGl0by1jaGV2cm9uXG4gICAgICAgIGNvbG9yOiAkY29sb3ItZGFya2VyXG4gICAgJjpmb2N1czpub3QoOmFjdGl2ZSk6bm90KC5kaXRvLWFjdGl2ZSlcbiAgICAgIC5kaXRvLWNoZXZyb25cbiAgICAgICAgLXdlYmtpdC10ZXh0LXN0cm9rZTogJGJvcmRlci13aWR0aCAkY29sb3ItYWN0aXZlXG5cbiAgLy8gRGlzcGxheSBsYWJlbHMgaW4gY29tcGFjdCBzY2hlbWEgYXMgaW5saW5lLWJsb2NrcywgdG8gYWxsb3cgY29tcGFjdCBsYXlvdXRzXG4gIC8vIHdpdGggYHdpZHRoOiAnYXV0bydgIGVsZW1lbnRzOlxuICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byBjb250cm9sIHRoaXMgYmVoYXZpb3IuXG4gIC5kaXRvLXNjaGVtYS1jb21wYWN0XG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgPiAuZGl0by1wYW5lXG4gICAgICAgID4gLmRpdG8tY29udGFpbmVyXG4gICAgICAgICAgPiAuZGl0by1sYWJlbDpub3QoLmRpdG8tbGFiZWwtY29tcG9uZW50KVxuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWxhYmVsJywge1xuICBwcm9wczoge1xuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZSA/ICdhJyA6ICdkaXYnXG4gICAgfSxcblxuICAgIHRleHQoKSB7XG4gICAgICBjb25zdCB7IGxhYmVsIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNPYmplY3QobGFiZWwpID8gbGFiZWw/LnRleHQgOiBsYWJlbFxuICAgIH0sXG5cbiAgICBwcmVmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnByZWZpeClcbiAgICB9LFxuXG4gICAgc3VmZml4ZXMoKSB7XG4gICAgICByZXR1cm4gYXNBcnJheSh0aGlzLmxhYmVsPy5zdWZmaXgpXG4gICAgfSxcblxuICAgIGxpc3RlbmVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLih0aGlzLmNvbGxhcHNpYmxlICYmIHtcbiAgICAgICAgICBjbGljazogdGhpcy5vbkNsaWNrXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPT09IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2soKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gdGhpc1xuICAgICAgdGhpcy4kZW1pdCgnZXhwYW5kJywgdGhpcy5jb2xsYXBzZWQpXG4gICAgfVxuICB9XG59KVxuXG48L3NjcmlwdD5cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7XG4gIGdldEl0ZW1Gb3JtU2NoZW1hLCBnZXRJdGVtSWQsIGdldEl0ZW1VaWQsIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWEsXG5cbiAgICBnZXRJdGVtVWlkLFxuXG4gICAgZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXggPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudCAmJiBpbmRleCAhPT0gbnVsbFxuICAgICAgICA/IFN0cmluZyhpbmRleClcbiAgICAgICAgOiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKVxuICAgIH0sXG5cbiAgICBnZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkge1xuICAgICAgbGV0IHsgZGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGlmIChzb3VyY2VTY2hlbWEgIT09IHRoaXMuc2NoZW1hKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNvdXJjZVNjaGVtYS5uYW1lKVxuICAgICAgfVxuICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgaW5kZXgpXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgZmluZEl0ZW1JZEluZGV4KHNvdXJjZVNjaGVtYSwgZGF0YSwgaXRlbUlkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgLy8gRm9yIHRyYW5zaWVudCBkYXRhLCB0aGUgaW5kZXggaXMgdXNlZCBhcyB0aGUgaWRcbiAgICAgICAgPyBpdGVtSWRcbiAgICAgICAgOiBkYXRhPy5maW5kSW5kZXgoXG4gICAgICAgICAgKGl0ZW0sIGluZGV4KSA9PlxuICAgICAgICAgICAgdGhpcy5nZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCkgPT09IGl0ZW1JZFxuICAgICAgICApXG4gICAgICByZXR1cm4gaW5kZXggIT09IC0xID8gaW5kZXggOiBudWxsXG4gICAgfSxcblxuICAgIGdldEl0ZW1MYWJlbChzb3VyY2VTY2hlbWEsIGl0ZW0sIHtcbiAgICAgIGluZGV4ID0gbnVsbCxcbiAgICAgIGV4dGVuZGVkID0gZmFsc2UsXG4gICAgICBhc09iamVjdCA9IGZhbHNlXG4gICAgfSA9IHt9KSB7XG4gICAgICBjb25zdCB7IGl0ZW1MYWJlbCB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAoIWl0ZW0gfHwgIWV4dGVuZGVkICYmIGl0ZW1MYWJlbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgbGV0IGRhdGFQYXRoXG4gICAgICBjb25zdCBnZXREYXRhUGF0aCA9ICgpID0+XG4gICAgICAgIChkYXRhUGF0aCB8fD0gdGhpcy5nZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkpXG5cbiAgICAgIGxldCBmb3JtTGFiZWxcbiAgICAgIGNvbnN0IGdldEZvcm1MYWJlbCA9ICgpID0+XG4gICAgICAgIChmb3JtTGFiZWwgfHw9IHRoaXMuZ2V0TGFiZWwoXG4gICAgICAgICAgZ2V0SXRlbUZvcm1TY2hlbWEoc291cmNlU2NoZW1hLCBpdGVtLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICkpXG5cbiAgICAgIGxldCB0ZXh0XG4gICAgICBsZXQgcHJlZml4XG4gICAgICBsZXQgc3VmZml4XG4gICAgICBpZiAoaXNGdW5jdGlvbihpdGVtTGFiZWwpKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbUxhYmVsLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgbmVzdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgICAgIGluZGV4LFxuXG4gICAgICAgICAgICBnZXQgZGF0YVBhdGgoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXREYXRhUGF0aCgpXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZXQgZm9ybUxhYmVsKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Rm9ybUxhYmVsKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIGlmIChpc09iamVjdChsYWJlbCkpIHtcbiAgICAgICAgICAoeyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9ID0gbGFiZWwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dCA9IGxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgLy8gSXQncyB1cCB0byBgaXRlbUxhYmVsKClgIGVudGlyZWx5IHRvIHByb2R1Y2UgdGhlIGxhYmVsOlxuICAgICAgICBleHRlbmRlZCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMb29rIHVwIHRoZSBuYW1lIG9uIHRoZSBpdGVtLCBieSB0aGVzZSBydWxlczpcbiAgICAgICAgLy8gMS4gSWYgYGl0ZW1MYWJlbGAgaXMgYSBzdHJpbmcsIHVzZSBpdCBhcyB0aGUgcHJvcGVydHkga2V5XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgdGhlcmUgYXJlIGNvbHVtbnMsIHVzZSB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0XG4gICAgICAgIC8vIDMuIE90aGVyd2lzZSwgc2VlIGlmIHRoZSBpdGVtIGhhcyBhIHByb3BlcnR5IG5hbWVkICduYW1lJ1xuICAgICAgICBjb25zdCB7IGNvbHVtbnMgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgICBjb25zdCBrZXkgPSAoXG4gICAgICAgICAgaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiBpdGVtTGFiZWwgfHxcbiAgICAgICAgICBpc0xpc3RTb3VyY2Uoc291cmNlU2NoZW1hKSAmJiBjb2x1bW5zICYmIE9iamVjdC5rZXlzKGNvbHVtbnMpWzBdIHx8XG4gICAgICAgICAgJ25hbWUnXG4gICAgICAgIClcbiAgICAgICAgdGV4dCA9IGl0ZW1ba2V5XVxuICAgICAgfVxuICAgICAgY29uc3QgaGFkTGFiZWwgPSAhIXRleHRcbiAgICAgIHRleHQgfHw9ICcnXG4gICAgICAvLyBJZiBubyBsYWJlbCB3YXMgZm91bmQgc28gZmFyLCB0cnkgdG8gcHJvZHVjZSBvbmUgZnJvbSB0aGVpbmRleC5cbiAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAvLyBBbHdheXMgdXNlIGV4dGVuZGVkIHN0eWxlIHdoZW4gYXV0by1nZW5lcmF0aW5nIGxhYmVscyBmcm9tIGluZGV4L2lkOlxuICAgICAgICBleHRlbmRlZCA9IHRydWVcbiAgICAgICAgaWYgKGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgdGV4dCA9IGAke2luZGV4ICsgMX1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChleHRlbmRlZCkge1xuICAgICAgICBjb25zdCBmb3JtTGFiZWwgPSBnZXRGb3JtTGFiZWwoKVxuICAgICAgICBpZiAoZm9ybUxhYmVsKSB7XG4gICAgICAgICAgLy8gSWYgYSBsYWJlbCB3YXMgcHJvdmlkZWQsIHB1dCBpbiBxdW90ZXMgd2hlbiBwcmVmaXhlZCB3aXRoIHRoZVxuICAgICAgICAgIC8vIGZvcm0gbGFiZWwgZm9yIHRoZSBleHRlbmRlZCBzdHlsZTpcbiAgICAgICAgICB0ZXh0ID0gYCR7Zm9ybUxhYmVsfSAke2hhZExhYmVsID8gYCcke3RleHR9J2AgOiB0ZXh0fWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzT2JqZWN0ID8geyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9IDogdGV4dFxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1zY2hlbWFcbiAgLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAuZGl0by1zY2hlbWEtaGVhZGVyKFxuICAgICAgdi1pZj1cImhhc0xhYmVsIHx8IGhhc1RhYnMgfHwgY2xpcGJvYXJkXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLW1lbnUtaGVhZGVyJzogbWVudUhlYWRlciB9XCJcbiAgICApXG4gICAgICBkaXRvLWxhYmVsKFxuICAgICAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICA6Y29sbGFwc2VkPVwiIW9wZW5lZFwiXG4gICAgICAgIEBleHBhbmQ9XCJvbkV4cGFuZFwiXG4gICAgICApXG4gICAgICAgIC8vIFBhc3MgZWRpdC1idXR0b25zIHRocm91Z2ggdG8gZGl0by1sYWJlbCdzIG93biBlZGl0LWJ1dHRvbnMgc2xvdDpcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgI2VkaXQtYnV0dG9uc1xuICAgICAgICAgIHYtaWY9XCJpbmxpbmVkXCJcbiAgICAgICAgKVxuICAgICAgICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuICAgICAgZGl0by10YWJzKFxuICAgICAgICB2LWlmPVwidGFic1wiXG4gICAgICAgIDp0YWJzPVwidGFic1wiXG4gICAgICAgIDpzZWxlY3RlZFRhYj1cInNlbGVjdGVkVGFiXCJcbiAgICAgIClcbiAgICAgIGRpdG8tY2xpcGJvYXJkKFxuICAgICAgICA6Y2xpcGJvYXJkPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgKVxuICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtdGFiKFxuICAgICAgdi1pZj1cImhhc1RhYnNcIlxuICAgICAgdi1mb3I9XCIoc2NoZW1hLCB0YWIpIGluIHRhYnNcIlxuICAgICAgcmVmPVwidGFic1wiXG4gICAgICA6a2V5PVwidGFiXCJcbiAgICAgIDp2aXNpYmxlPVwic2VsZWN0ZWRUYWIgPT09IHRhYlwiXG4gICAgICA6dGFiPVwidGFiXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc01haW5QYW5lXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICApXG4gICAgdHJhbnNpdGlvbi1oZWlnaHQoXG4gICAgICA6ZW5hYmxlZD1cImlubGluZWRcIlxuICAgIClcbiAgICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtbWFpbihcbiAgICAgICAgdi1pZj1cImhhc01haW5QYW5lICYmIG9wZW5lZFwiXG4gICAgICAgIHJlZj1cImNvbXBvbmVudHNcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzVGFic1wiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgIHNsb3QoXG4gICAgICBuYW1lPVwiYnV0dG9uc1wiXG4gICAgICB2LWlmPVwiIWlubGluZWQgJiYgaXNQb3B1bGF0ZWRcIlxuICAgIClcbiAgdGVtcGxhdGUodi1pZj1cImlubGluZWRcIilcbiAgICBzbG90KFxuICAgICAgdi1pZj1cIiFoYXNMYWJlbFwiXG4gICAgICBuYW1lPVwiZWRpdC1idXR0b25zXCJcbiAgICApXG4gIHRlbXBsYXRlKHYtZWxzZS1pZj1cImlzUG9wdWxhdGVkXCIpXG4gICAgZGl0by1wYW5lbHMoXG4gICAgICA6cGFuZWxzPVwicGFuZWxTY2hlbWFzXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXNjaGVtYVxuICAgIC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICAuZGl0by1zY2hlbWEtaGVhZGVyKFxuICAgICAgICB2LWlmPVwiaGFzTGFiZWwgfHwgaGFzVGFicyB8fCBjbGlwYm9hcmRcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1tZW51LWhlYWRlcic6IG1lbnVIZWFkZXIgfVwiXG4gICAgICApXG4gICAgICAgIGRpdG8tbGFiZWwoXG4gICAgICAgICAgdi1pZj1cImhhc0xhYmVsXCJcbiAgICAgICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICA6Y29sbGFwc2VkPVwiIW9wZW5lZFwiXG4gICAgICAgICAgQGV4cGFuZD1cIm9uRXhwYW5kXCJcbiAgICAgICAgKVxuICAgICAgICAgIC8vIFBhc3MgZWRpdC1idXR0b25zIHRocm91Z2ggdG8gZGl0by1sYWJlbCdzIG93biBlZGl0LWJ1dHRvbnMgc2xvdDpcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICNlZGl0LWJ1dHRvbnNcbiAgICAgICAgICAgIHYtaWY9XCJpbmxpbmVkXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbiAgICAgICAgZGl0by10YWJzKFxuICAgICAgICAgIHYtaWY9XCJ0YWJzXCJcbiAgICAgICAgICA6dGFicz1cInRhYnNcIlxuICAgICAgICAgIDpzZWxlY3RlZFRhYj1cInNlbGVjdGVkVGFiXCJcbiAgICAgICAgKVxuICAgICAgICBkaXRvLWNsaXBib2FyZChcbiAgICAgICAgICA6Y2xpcGJvYXJkPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgKVxuICAgICAgZGl0by1wYW5lLmRpdG8tcGFuZS10YWIoXG4gICAgICAgIHYtaWY9XCJoYXNUYWJzXCJcbiAgICAgICAgdi1mb3I9XCIoc2NoZW1hLCB0YWIpIGluIHRhYnNcIlxuICAgICAgICByZWY9XCJ0YWJzXCJcbiAgICAgICAgOmtleT1cInRhYlwiXG4gICAgICAgIDp2aXNpYmxlPVwic2VsZWN0ZWRUYWIgPT09IHRhYlwiXG4gICAgICAgIDp0YWI9XCJ0YWJcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzTWFpblBhbmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgIClcbiAgICAgIHRyYW5zaXRpb24taGVpZ2h0KFxuICAgICAgICA6ZW5hYmxlZD1cImlubGluZWRcIlxuICAgICAgKVxuICAgICAgICBkaXRvLXBhbmUuZGl0by1wYW5lLW1haW4oXG4gICAgICAgICAgdi1pZj1cImhhc01haW5QYW5lICYmIG9wZW5lZFwiXG4gICAgICAgICAgcmVmPVwiY29tcG9uZW50c1wiXG4gICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNUYWJzXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgICApXG4gICAgICBzbG90KFxuICAgICAgICBuYW1lPVwiYnV0dG9uc1wiXG4gICAgICAgIHYtaWY9XCIhaW5saW5lZCAmJiBpc1BvcHVsYXRlZFwiXG4gICAgICApXG4gICAgdGVtcGxhdGUodi1pZj1cImlubGluZWRcIilcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCIhaGFzTGFiZWxcIlxuICAgICAgICBuYW1lPVwiZWRpdC1idXR0b25zXCJcbiAgICAgIClcbiAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJpc1BvcHVsYXRlZFwiKVxuICAgICAgZGl0by1wYW5lbHMoXG4gICAgICAgIDpwYW5lbHM9XCJwYW5lbFNjaGVtYXNcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zY2hlbWFcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgLy8gVG8gZGlzcGxheSBzY2hlbWEgbmV4dCB0byBwYW5lbHM6XG4gICAgZGlzcGxheTogZmxleFxuICAgIG1pbi1oZWlnaHQ6IDEwMCVcbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICBmbGV4OiAxIDEgMTAwJVxuICAgICAgLy8gU28gdGhhdCBzY2hlbWEgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgICBkaXNwbGF5OiBncmlkXG4gICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICA+ICo6b25seS1jaGlsZFxuICAgICAgICBncmlkLXJvdy1lbmQ6IG5vbmVcbiAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgIHBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmdcbiAgICA+IC5kaXRvLWJ1dHRvbnMsXG4gICAgPiAuZGl0by1wYW5lbHNcbiAgICAgIGZsZXg6IDEgMSAwJVxuICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmdcbiAgICA+IC5kaXRvLXBhbmVsc1xuICAgICAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZyAkY29udGVudC1wYWRkaW5nICRjb250ZW50LXBhZGRpbmcgMFxuICAgIC8vIERpc3BsYXkgYSBydWxlciBiZXR3ZWVuIHRhYmJlZCBjb21wb25lbnRzIGFuZCB0b3dhcmRzIHRoZSAuZGl0by1idXR0b25zXG4gICAgLmRpdG8tcGFuZS10YWIgKyAuZGl0by1wYW5lLW1haW5cbiAgICAgICY6OmJlZm9yZVxuICAgICAgICAvLyBVc2UgYSBwc2V1ZG8gZWxlbWVudCB0byBkaXNwbGF5IGEgcnVsZXIgd2l0aCBwcm9wZXIgbWFyZ2luc1xuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXN0eWxlXG4gICAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW4gdG8gdGhlIHJ1bGVyXG4gICAgICAgIG1hcmdpbjogJGNvbnRlbnQtcGFkZGluZyAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZy1oYWxmXG4gIC5kaXRvLXNjaGVtYS1oZWFkZXJcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgLmRpdG8tdGFicyxcbiAgICAuZGl0by1jbGlwYm9hcmRcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kXG4gICAgLmRpdG8tY2xpcGJvYXJkXG4gICAgICAmOm9ubHktY2hpbGRcbiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG9cbiAgICAgIC5kaXRvLWJ1dHRvblxuICAgICAgICBtYXJnaW46IDAgMCAkdGFiLW1hcmdpbiAkdGFiLW1hcmdpblxuICAgICYuZGl0by1zY2hlbWEtbWVudS1oZWFkZXJcbiAgICAgIC8vIEJyaW5nIHRoZSB0YWJzIHVwIHRvIHRoZSBtZW51LlxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICBoZWlnaHQ6ICRtZW51LWhlaWdodFxuICAgICAgcGFkZGluZzogMCAkbWVudS1wYWRkaW5nLWhvclxuICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aFxuICAgICAgdG9wOiAwXG4gICAgICBsZWZ0OiAwXG4gICAgICByaWdodDogMFxuICAgICAgei1pbmRleDogJG1lbnUtei1pbmRleFxuICAgICAgLy8gVHVybiBvZmYgcG9pbnRlciBldmVudHMgc28gdGhhdCBEaXRvVHJhaWwga2VlcHMgcmVjZWl2aW5nIGV2ZW50cy4uLlxuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmVcbiAgICAgIC8vIC4uLmJ1dCBhbGxvdyBpbnRlcmFjdGlvbiB3aXRoIHRoZSB0YWJzIGFuZCBidXR0b25zIChlLmcuIGNsaXBib2FyZClcbiAgICAgIC8vIGxheWVyZWQgb24gdG9wIG9mIERpdG9UcmFpbC5cbiAgICAgIC5kaXRvLXRhYnMsXG4gICAgICAuZGl0by1idXR0b25zXG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIGJ1dHRvbi5kaXRvLWxhYmVsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgLy8gQ2F0Y2ggYWxsIGNsaWNrcywgZXZlbiB3aGVuIGl0IHdvdWxkIGJlIHBhcnRpYWxseSBjb3ZlcmVkIGJ5IHNjaGVtYS5cbiAgICAgIHotaW5kZXg6IDFcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNBcnJheSwgaXNGdW5jdGlvbiwgaXNSZWdFeHAsXG4gIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoLCBsYWJlbGl6ZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgVHJhbnNpdGlvbkhlaWdodCB9IGZyb20gJ0BkaXRvanMvdWknXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuLi9taXhpbnMvSXRlbU1peGluLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGgsIGdldFBhcmVudEl0ZW0gfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgZ2V0TmFtZWRTY2hlbWFzLCBnZXRQYW5lbFNjaGVtYXMsIHNldERlZmF1bHRzLCBwcm9jZXNzRGF0YVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTdG9yZUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1zY2hlbWEnLCB7XG4gIGNvbXBvbmVudHM6IHsgVHJhbnNpdGlvbkhlaWdodCB9LFxuICBtaXhpbnM6IFtJdGVtTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJyRzY2hlbWFQYXJlbnRDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGlubGluZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhhc093bkRhdGE6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBtZW51SGVhZGVyOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICByZXR1cm4ge1xuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIHByb3ZpZGUgbW9yZSBkYXRhIHRocm91Z2ggYHNjaGVtYS5kYXRhYCwgdnVlLXN0eWxlOlxuICAgICAgLi4uKFxuICAgICAgICBkYXRhICYmIGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgICA/IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgOiBkYXRhXG4gICAgICApLFxuICAgICAgY29tcG9uZW50c1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZWxzUmVnaXN0cnk6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgc2NoZW1hQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBEb24ndCByZXR1cm4gdGhlIGFjdHVhbCBwYXJlbnQgc2NoZW1hIGlzIHRoaXMgc2NoZW1hIGhhbmRsZXMgaXRzIG93blxuICAgICAgLy8gZGF0YS4gVGhpcyBwcmV2ZW50cyBkZWxlZ2F0aW5nIGV2ZW50cyB0byB0aGUgcGFyZW50LCBhbmQgcmVnaXN0ZXJpbmdcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCB0aGUgcGFyZW50IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gc2V0IGlzRGlydHkgZmxhZ3MuXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gbnVsbCA6IHRoaXMuJHBhcmVudC5zY2hlbWFDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWFzKCkge1xuICAgICAgY29uc3QgcGFuZWxzID0gZ2V0UGFuZWxTY2hlbWFzKHRoaXMuc2NoZW1hLnBhbmVscywgJycpXG4gICAgICBmb3IgKGNvbnN0IHBhbmUgb2YgdGhpcy5wYW5lcykge1xuICAgICAgICBwYW5lbHMucHVzaCguLi5wYW5lLnBhbmVsU2NoZW1hcylcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYW5lbHNcbiAgICB9LFxuXG4gICAgdGFicygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEudGFicylcbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRUYWIoKSB7XG4gICAgICBjb25zdCBjdXJyZW50VGFiID0gdGhpcy4kcm91dGUuaGFzaD8uc2xpY2UoMSkgfHwgbnVsbFxuICAgICAgY29uc3QgdGFiID0gY3VycmVudFRhYiAmJiB0aGlzLnNob3VsZFJlbmRlcih0aGlzLnRhYnNbY3VycmVudFRhYl0pXG4gICAgICAgID8gY3VycmVudFRhYlxuICAgICAgICA6IHRoaXMuZGVmYXVsdFRhYj8ubmFtZSB8fCBudWxsXG4gICAgICBpZiAodGFiICE9PSBjdXJyZW50VGFiKSB7XG4gICAgICAgIC8vIEFueSB0YWIgY2hhbmdlIG5lZWRzIHRvIGJlIHJlZmxlY3RlZCBpbiB0aGUgcm91dGVyIGFsc28uXG4gICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgaGFzaDogdGFiIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gdGFiXG4gICAgfSxcblxuICAgIGRlZmF1bHRUYWIoKSB7XG4gICAgICBpZiAodGhpcy50YWJzKSB7XG4gICAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgICAgZm9yIChjb25zdCB0YWIgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnRhYnMpKSB7XG4gICAgICAgICAgY29uc3QgeyBkZWZhdWx0VGFiIH0gPSB0YWJcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihkZWZhdWx0VGFiKVxuICAgICAgICAgICAgPyBkZWZhdWx0VGFiLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICAgICAgOiBkZWZhdWx0VGFiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFiXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgICAgIGZpcnN0ID0gdGFiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaXJzdFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWE/LmNsaXBib2FyZFxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdzZXJ2ZXInLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGNsaXBib2FyZERhdGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAkc2NoZW1hOiB0aGlzLnNjaGVtYS5uYW1lLFxuICAgICAgICAuLi50aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnY2xpcGJvYXJkJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzLlxuICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgYXM6XG4gICAgLy8gcmV0dXJuIGdldEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkRGF0YVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xpcGJvYXJkRGF0YVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIGdldFBhcmVudEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgfSxcblxuICAgIGZvcm1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKFxuICAgICAgICB0aGlzLmdldEl0ZW1Gb3JtU2NoZW1hKHRoaXMuc291cmNlU2NoZW1hLCB0aGlzLmRhdGEsIHRoaXMuY29udGV4dClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNUb3VjaGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZXJ5Q29tcG9uZW50KGl0ID0+IGl0LmlzVmFsaWRhdGVkKVxuICAgIH0sXG5cbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5sYWJlbCB8fCB0aGlzLmNvbGxhcHNpYmxlXG4gICAgfSxcblxuICAgIGhhc1RhYnMoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaW5saW5lZCAmJiAhIXRoaXMudGFic1xuICAgIH0sXG5cbiAgICBoYXNNYWluUGFuZSgpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiAhIWNvbXBvbmVudHMgJiYgT2JqZWN0LmtleXMoY29tcG9uZW50cykubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBvcGVuZWQ6IGdldFN0b3JlQWNjZXNzb3IoJ29wZW5lZCcsIHtcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jb2xsYXBzZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVscygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucGFuZWxzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIGNvbXBvbmVudHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZXNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVsc0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZWxzUmVnaXN0cnkpXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICB0aGlzLnNldHVwU2NoZW1hRmllbGRzKClcbiAgICAvLyBEZWxlZ2F0ZSBjaGFuZ2UgZXZlbnRzIHRocm91Z2ggdG8gcGFyZW50IHNjaGVtYTpcbiAgICB0aGlzLmRlbGVnYXRlKCdjaGFuZ2UnLCB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudClcbiAgICB0aGlzLmVtaXRFdmVudCgnaW5pdGlhbGl6ZScpIC8vIE5vdCBgJ2NyZWF0ZSdgLCBzaW5jZSB0aGF0J3MgZm9yIGRhdGEuXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLmVtaXRFdmVudCgnZGVzdHJveScpXG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKFxuICAgICAgICB0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRzQnlOYW1lKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeU5hbWUodGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRCeU5hbWUobmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoT3JOYW1lLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50KGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldFBhbmVsKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBzb21lQ29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuc29tZShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgZXZlcnlDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5ldmVyeShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgb25FeHBhbmQoZXhwYW5kKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnZXhwYW5kJywge1xuICAgICAgICAvLyBUT0RPOiBBY3R1YWxseSBleHBvc2UgdGhpcyBvbiBEaXRvQ29udGV4dD9cbiAgICAgICAgY29udGV4dDogeyBleHBhbmQgfVxuICAgICAgfSlcbiAgICAgIC8vIFByZXZlbnQgY2xvc2luZyB0aGUgc2NoZW1hIHdpdGggaW52YWxpZCBkYXRhLCBzaW5jZSB0aGUgaW4tY29tcG9uZW50XG4gICAgICAvLyB2YWxpZGF0aW9uIHdpbGwgbm90IGJlIGV4ZWN1dGVkIG9uY2UgaXQncyBjbG9zZWQuXG5cbiAgICAgIC8vIFRPRE86IE1vdmUgdmFsaWRhdGlvbiBvdXQgb2YgY29tcG9uZW50cywgdG8gc2NoZW1hLCBqdXN0IGxpa2VcbiAgICAgIC8vIHByb2Nlc3NpbmcsIGFuZCB1c2UgYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIGZvciB0aGUgcmVzdWx0aW5nIGVycm9ycyxcbiAgICAgIC8vIHRoZW4gcmVtb3ZlIHRoaXMgcmVxdWlyZW1lbnQsIHNpbmNlIHdlIGNhbiB2YWxpZGF0ZSBjbG9zZWQgZm9ybXMgYW5kXG4gICAgICAvLyBzY2hlbWFzIHRoZW4uXG4gICAgICBpZiAoIXRoaXMub3BlbmVkIHx8IGV4cGFuZCB8fCB0aGlzLnZhbGlkYXRlQWxsKCkpIHtcbiAgICAgICAgdGhpcy5vcGVuZWQgPSBleHBhbmRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJylcbiAgICB9LFxuXG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICAgIGNvbXBvbmVudC5yZXNldFZhbGlkYXRpb24oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50Py5mb2N1cygpXG4gICAgICB0aGlzLm9wZW5lZCA9IHRydWVcbiAgICB9LFxuXG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50c0J5RGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGxldCBkYXRhUGF0aHNcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBjaGVjayA9IGlzRnVuY3Rpb24obWF0Y2gpXG4gICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgIDogaXNSZWdFeHAobWF0Y2gpXG4gICAgICAgICAgICA/IGZpZWxkID0+IG1hdGNoLnRlc3QoZmllbGQpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgZGF0YVBhdGhzID0gY2hlY2tcbiAgICAgICAgICA/IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKS5maWx0ZXIoY2hlY2spXG4gICAgICAgICAgOiBpc0FycmF5KG1hdGNoKVxuICAgICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgICAgOiBbbWF0Y2hdXG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBkYXRhUGF0aHMgfHw9IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKVxuICAgICAgZm9yIChjb25zdCBkYXRhUGF0aCBvZiBkYXRhUGF0aHMpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoIWNvbXBvbmVudC52YWxpZGF0ZShub3RpZnkpKSB7XG4gICAgICAgICAgICAvLyBGb2N1cyBmaXJzdCBlcnJvciBmaWVsZFxuICAgICAgICAgICAgaWYgKG5vdGlmeSAmJiBmaXJzdCkge1xuICAgICAgICAgICAgICBjb21wb25lbnQuZm9jdXMoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5ICYmICFpc1ZhbGlkKSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1ZhbGlkXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBbGwobWF0Y2gsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIGxldCBmaXJzdCA9IHRydWVcbiAgICAgIGNvbnN0IHVubWF0Y2hlZCA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgZXJyc10gb2YgT2JqZWN0LmVudHJpZXMoZXJyb3JzKSkge1xuICAgICAgICAvLyBJZiB0aGUgc2NoZW1hIGlzIGEgZGF0YS1yb290LCBwcmVmaXggaXRzIG93biBkYXRhUGF0aCB0byBhbGwgZXJyb3JzLFxuICAgICAgICAvLyBzaW5jZSB0aGUgZGF0YSB0aGF0IGl0IHNlbmRzIGFuZCB2YWxpZGF0ZXMgd2lsbCBiZSB1bnByZWZpeGVkLlxuICAgICAgICBjb25zdCBmdWxsRGF0YVBhdGggPSB0aGlzLmhhc093bkRhdGFcbiAgICAgICAgICA/IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgICAgICAgIDogZGF0YVBhdGhcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcywgdGhpcy5kYXRhUGF0aCwgdGhpcy5oYXNPd25EYXRhLCBmdWxsRGF0YVBhdGgpXG4gICAgICAgIC8vIENvbnZlcnQgZnJvbSBKYXZhU2NyaXB0IHByb3BlcnR5IGFjY2VzcyBub3RhdGlvbiwgdG8gb3VyIG93biBmb3JtXG4gICAgICAgIC8vIG9mIHJlbGF0aXZlIEpTT04gcG9pbnRlcnMgYXMgZGF0YS1wYXRoczpcbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZnVsbERhdGFQYXRoKVxuICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cykpIHtcbiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgLy8gQ291bGRuJ3QgZmluZCBhIGNvbXBvbmVudCBpbiBhbiBhY3RpdmUgZm9ybSBmb3IgdGhlIGdpdmVuIGRhdGFQYXRoLlxuICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIGNvbXBvbmVudCBzZXJ2aW5nIGEgcGFydCBvZiB0aGUgZGF0YVBhdGgsXG4gICAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgICBpZiAoYXdhaXQgY29tcG9uZW50Lm5hdmlnYXRlVG9Db21wb25lbnQ/LihcbiAgICAgICAgICAgICAgICBmdWxsRGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgc3ViQ29tcG9uZW50cyA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2Ygc3ViQ29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJzID0gZXJyb3JzW2NvbXBvbmVudC5kYXRhUGF0aF1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIGVycnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJycywgZmlyc3QgJiYgZm9jdXMpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgICAgLy8gRm91bmQgYSBuZXN0ZWQgZm9ybSB0byBkaXNwbGF5IGF0IGxlYXN0IHBhcnRzIGZvIHRoZSBlcnJvcnMuXG4gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc2hvdyBhbGwgZXJyb3JzIGF0IG9uY2UsIHNvIHdlJ3JlIGRvbmUuIERvbid0IGNhbGxcbiAgICAgICAgICAgICAgICAvLyBgbm90aWZ5RXJyb3JzKClgIHlldCwgYXMgd2UgY2FuIG9ubHkgZGlzcGxheSBpdCBvbmNlXG4gICAgICAgICAgICAgICAgLy8gYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIHdhcyBjYWxsZWQgZnJvbSBgRGl0b0Zvcm0ubW91bnRlZCgpYFxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdGlsbCBoZXJlLCBzbyBrZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBXaGVuIHRoZSBlcnJvciBjYW4ndCBiZSBtYXRjaGVkLCBhZGQgaXQgdG8gYSBsaXN0IG9mIHVubWF0Y2hlZFxuICAgICAgICAgIC8vIGVycm9ycyB3aXRoIGRlY2VudCBtZXNzYWdlLCB0byByZXBvcnQgYXQgdGhlIGVuZC5cbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGxhYmVsaXplKHByb3BlcnR5KVxuICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IGZpZWxkXG4gICAgICAgICAgICAgID8gYFRoZSBmaWVsZCAke2ZpZWxkfWBcbiAgICAgICAgICAgICAgOiBgVGhlICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICAgICAgdW5tYXRjaGVkLnB1c2goYCR7cHJlZml4fSAke2Vyci5tZXNzYWdlfWApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgIH1cbiAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnModW5tYXRjaGVkLmpvaW4oJ1xcbicpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBub3RpZnlFcnJvcnMobWVzc2FnZSkge1xuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICB0aXRsZTogJ1ZhbGlkYXRpb24gRXJyb3JzJyxcbiAgICAgICAgdGV4dDogbWVzc2FnZSB8fCAnUGxlYXNlIGNvcnJlY3QgdGhlIGhpZ2hsaWdodGVkIGVycm9ycy4nXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICByZXNldERhdGEoKSB7XG4gICAgICAvLyBXZSBjYW4ndCBzZXQgYHRoaXMuZGF0YSA9IC4uLmAgYmVjYXVzZSBpdCdzIGEgcHJvcGVydHksIGJ1dCB3ZSBjYW5cbiAgICAgIC8vIHNldCBhbGwga25vd24gcHJvcGVydGllcyBvbiBpdCB0byB0aGUgdmFsdWVzIHJldHVybmVkIGJ5XG4gICAgICAvLyBgc2V0RGVmYXVsdHMoKWAsIGFzIHRoZXkgYXJlIGFsbCByZWFjdGl2ZSBhbHJlYWR5IGZyb20gdGhlIHN0YXJ0czpcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5kYXRhLCBzZXREZWZhdWx0cyh0aGlzLnNjaGVtYSwge30sIHRoaXMpKVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgZm9yIChjb25zdCBuYW1lIGluIGRhdGEpIHtcbiAgICAgICAgaWYgKG5hbWUgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgbmFtZSwgZGF0YVtuYW1lXSlcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSkpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5tYXJrRGlydHkoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmaWx0ZXJEYXRhKGRhdGEpIHtcbiAgICAgIC8vIEZpbHRlcnMgb3V0IGFycmF5cyBhbmQgb2JqZWN0cyB0aGF0IGFyZSBiYWNrIGJ5IGRhdGEgcmVzb3VyY2VzXG4gICAgICAvLyB0aGVtc2VsdmVzLCBhcyB0aG9zZSBhcmUgYWxyZWFkeSB0YWtpbmcgY2FyZSBvZiB0aHJvdWdoIHRoZWlyIG93biBBUElcbiAgICAgIC8vIHJlc291cmNlIGVuZC1wb2ludHMgYW5kIHNob3VsZG4ndCBiZSBzZXQuXG4gICAgICBjb25zdCBjb3B5ID0ge31cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkgfHwgaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKVxuICAgICAgICAgIGlmIChjb21wb25lbnRzLnNvbWUoY29tcG9uZW50ID0+IGNvbXBvbmVudC5wcm92aWRlc0RhdGEpKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb3B5W25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb3B5XG4gICAgfSxcblxuICAgIHByb2Nlc3NEYXRhKHsgdGFyZ2V0ID0gJ2NsaXBib2FyZCcsIHNjaGVtYU9ubHkgPSB0cnVlIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIHByb2Nlc3NEYXRhKFxuICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgdGhpcy5kYXRhUGF0aCwge1xuICAgICAgICAgIC8vIE5lZWRlZCBmb3IgRGl0b0NvbnRleHQgaGFuZGxpbmcgaW5zaWRlIGBwcm9jZXNzRGF0YWAgYW5kXG4gICAgICAgICAgLy8gYHByb2Nlc3NTY2hlbWFEYXRhKClgOlxuICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICBzY2hlbWFPbmx5LFxuICAgICAgICAgIHRhcmdldFxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIGAkc2NoZW1hUGFyZW50Q29tcG9uZW50KClgIGlzIG9ubHkgc2V0IGlmIG9uZSBvZiB0aGUgYW5jZXN0b3JzIHVzZXNcbiAgICAgIC8vIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgICAgdGhpcy4kc2NoZW1hUGFyZW50Q29tcG9uZW50KCk/Ll9yZWdpc3RlclNjaGVtYUNvbXBvbmVudCh0aGlzLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSwgY29tcG9uZW50LCBhZGQpXG4gICAgICAvLyBPbmx5IHJlZ2lzdGVyIHdpdGggdGhlIHBhcmVudCBpZiBzY2hlbWEgc2hhcmVzIGRhdGEgd2l0aCBpdC5cbiAgICAgIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50Py5fcmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50LCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmUocGFuZSwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMucGFuZXNSZWdpc3RyeSwgcGFuZSwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJQYW5lbChwYW5lbCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMucGFuZWxzUmVnaXN0cnksIHBhbmVsLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlckVudHJ5KHJlZ2lzdHJ5LCBlbnRyeSwgYWRkKSB7XG4gICAgICBjb25zdCB1aWQgPSBlbnRyeS4kdWlkXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHRoaXMuJHNldChyZWdpc3RyeSwgdWlkLCBlbnRyeSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJGRlbGV0ZShyZWdpc3RyeSwgdWlkKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfbGlzdEVudHJpZXNCeURhdGFQYXRoKHJlZ2lzdHJ5KSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZWdpc3RyeSkucmVkdWNlKChlbnRyaWVzQnlEYXRhUGF0aCwgZW50cnkpID0+IHtcbiAgICAgICAgLy8gTXVsdGlwbGUgZW50cmllcyBjYW4gYmUgbGlua2VkIHRvIHRoZSBzYW1lIGRhdGEtcGF0aCwgZS5nLiB3aGVuXG4gICAgICAgIC8vIHRoZXJlIGFyZSB0YWJzLiBMaW5rIGVhY2ggZGF0YS1wYXRoIHRvIGFuIGFycmF5IG9mIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IHsgZGF0YVBhdGggfSA9IGVudHJ5XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBlbnRyaWVzQnlEYXRhUGF0aFtkYXRhUGF0aF0gfHw9IFtdXG4gICAgICAgIGVudHJpZXMucHVzaChlbnRyeSlcbiAgICAgICAgcmV0dXJuIGVudHJpZXNCeURhdGFQYXRoXG4gICAgICB9LCB7fSlcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXMoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKS5zdGFydHNXaXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICAgID8gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICAgICAgOiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRW50cmllcyhcbiAgICAgICAgZW50cmllc0J5RGF0YVBhdGhbbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpXSB8fCBbXSxcbiAgICAgICAgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIG5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRW50cmllcyhcbiAgICAgICAgZW50cmllc0J5RGF0YVBhdGhbYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSldIHx8IFtdLFxuICAgICAgICBtYXRjaFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfZmlsdGVyRW50cmllcyhlbnRyaWVzLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hdGNoID8gZW50cmllcy5maWx0ZXIobWF0Y2gpIDogZW50cmllc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5kaXRvLXNjaGVtYS5kaXRvLXNjaGVtYS1pbmxpbmVkKFxuICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICA6ZGF0YT1cImRhdGFcIlxuICA6bWV0YT1cIm1ldGFcIlxuICA6c3RvcmU9XCJzdG9yZVwiXG4gIDpsYWJlbD1cImlzQ29tcGFjdCA/IG51bGwgOiBsYWJlbFwiXG4gIDppbmxpbmVkPVwidHJ1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtY29tcGFjdCc6IGlzQ29tcGFjdCB9XCJcbilcbiAgLy8gUmVuZGVyIGRpdG8tZWRpdC1idXR0b25zIGZvciBpbmxpbmVkIHNoZW1hcyBzZXBhcmF0ZWx5IGZyb20gYWxsXG4gIC8vIG90aGVycyBpbiBgVHlwZUxpc3RgIGFzIGEgc2NvcGUsIGZvciBiZXR0ZXIgaGFuZGxpbmcgb2YgbGF5b3V0LlxuICB0ZW1wbGF0ZSgjZWRpdC1idXR0b25zKVxuICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgdi1pZj1cImRlbGV0YWJsZSB8fCBkcmFnZ2FibGUgfHwgZWRpdGFibGVcIlxuICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICBAZGVsZXRlPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBkaXRvLXNjaGVtYS5kaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpsYWJlbD1cImlzQ29tcGFjdCA/IG51bGwgOiBsYWJlbFwiXG4gICAgOmlubGluZWQ9XCJ0cnVlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLWNvbXBhY3QnOiBpc0NvbXBhY3QgfVwiXG4gIClcbiAgICAvLyBSZW5kZXIgZGl0by1lZGl0LWJ1dHRvbnMgZm9yIGlubGluZWQgc2hlbWFzIHNlcGFyYXRlbHkgZnJvbSBhbGxcbiAgICAvLyBvdGhlcnMgaW4gYFR5cGVMaXN0YCBhcyBhIHNjb3BlLCBmb3IgYmV0dGVyIGhhbmRsaW5nIG9mIGxheW91dC5cbiAgICB0ZW1wbGF0ZSgjZWRpdC1idXR0b25zKVxuICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgIHYtaWY9XCJkZWxldGFibGUgfHwgZHJhZ2dhYmxlIHx8IGVkaXRhYmxlXCJcbiAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICBAZGVsZXRlPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zY2hlbWEtaW5saW5lZFxuICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgID4gLmRpdG8tc2NoZW1hLWhlYWRlclxuICAgICAgICAvLyBDaGFuZ2Ugc3BhY2luZyBzbyAuZGl0by1sYWJlbCBjb3ZlcnMgdGhlIGZ1bGwgLmRpdG8tc2NoZW1hLWhlYWRlci5cbiAgICAgICAgbWFyZ2luOiAtJGZvcm0tc3BhY2luZ1xuICAgICAgICAuZGl0by1sYWJlbFxuICAgICAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW5cbiAgICAgICAgICAtLWxhYmVsLXBhZGRpbmc6ICN7JGZvcm0tc3BhY2luZ31cbiAgICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgICAgICAvLyBCZWNhdXNlIHRhYmxlcyBoYXZlIGEgZnVubnkgd2F5IG9mIGFsbG93aW5nIHRvbyBtdWNoIHdpZHRoIGdyb3d0aDpcbiAgICAgICAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoXG4gICAgICAgICYgKy5kaXRvLXBhbmVcbiAgICAgICAgICAvLyBOZWVkZWQgZm9yIHRyYW5zaXRpb24taGVpZ2h0IGluIERpdG9TY2hlbWE6XG4gICAgICAgICAgbWluLWhlaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc0NvbXBhY3QgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tc2NoZW1hLWlubGluZWQnLCB7XG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIGlzQ29tcGFjdCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNDb21wYWN0ICYmICEhdGhpcy5sYWJlbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1wYW5lKFxuICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgdi1zaG93PVwidmlzaWJsZVwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPWB7XG4gICAgICBzY2hlbWEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgbmVzdGVkLFxuICAgICAgc3RvcmVcbiAgICB9IGluIGNvbXBvbmVudFNjaGVtYXNgXG4gIClcbiAgICAuZGl0by1icmVhayhcbiAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdiZWZvcmUnXCJcbiAgICApXG4gICAgZGl0by1jb250YWluZXIoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwiaXNTaW5nbGVDb21wb25lbnRcIlxuICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgKVxuICAgIC5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2FmdGVyJ1wiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcGFuZShcbiAgICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgICB2LXNob3c9XCJ2aXNpYmxlXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1mb3I9YHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICAgIG5lc3RlZCxcbiAgICAgICAgc3RvcmVcbiAgICAgIH0gaW4gY29tcG9uZW50U2NoZW1hc2BcbiAgICApXG4gICAgICAuZGl0by1icmVhayhcbiAgICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgICAgKVxuICAgICAgZGl0by1jb250YWluZXIoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICAgIDprZXk9XCJuZXN0ZWREYXRhUGF0aFwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cImlzU2luZ2xlQ29tcG9uZW50XCJcbiAgICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tYnJlYWsoXG4gICAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdhZnRlcidcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXBhbmVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgZmxleC1mbG93OiByb3cgd3JhcFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnRcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmVcbiAgICAvLyBSZW1vdmUgcGFkZGluZyBhZGRlZCBieSBgLmRpdG8tY29udGFpbmVyYFxuICAgIG1hcmdpbjogKC0kZm9ybS1zcGFjaW5nKSAoLSRmb3JtLXNwYWNpbmctaGFsZilcbiAgICAvLyBBZGQgcmVtb3ZlZCBob3Jpem9udGFsIG1hcmdpbiBhZ2FpbiB0byBtYXgtd2lkdGg6XG4gICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aCArIDIgKiAkZm9ybS1zcGFjaW5nLWhhbGZcbiAgICAvLyBVc2UgYGZsZXg6IDAlYCBmb3IgYWxsIGAuZGl0by1wYW5lYCBleGNlcHQgYC5kaXRvLXBhbmUtbWFpbmAsXG4gICAgLy8gc28gdGhhdCB0aGUgYC5kaXRvLWJ1dHRvbnMtbWFpbmAgY2FuIGJlIG1vdmVkIGFsbCB0aGUgd2F5IHRvIHRoZSBib3R0b20uXG4gICAgZmxleDogMCVcblxuICAgICYuZGl0by1wYW5lLW1haW5cbiAgICAgIGZsZXg6IDEwMCVcblxuICAgIC5kaXRvLXNjaGVtYS1oZWFkZXI6bm90KC5kaXRvLXNjaGVtYS1tZW51LWhlYWRlcikgKyAmXG4gICAgICAvLyBDbGVhciB0b3AtbWFyZ2luIGlmIHRoZSBjb21wb25lbnRzIGFyZSBwcmVjZWRlZCBieSBhIHNjaGVtYSBoZWFkZXIuXG4gICAgICBtYXJnaW4tdG9wOiAwXG5cbiAgICAuZGl0by1jb250YWluZXIuZGl0by1vbWl0LXBhZGRpbmcgPiAmXG4gICAgICAvLyBDbGVhciBtYXJnaW5zIHNldCBhYm92ZSBhZ2FpbiBpZiBwYXJlbnQgaXMgb21pdHRpbmcgcGFkZGluZy5cbiAgICAgIG1hcmdpbjogMFxuICAgICAgbWF4LXdpZHRoOiB1bnNldFxuXG4gICAgLmRpdG8tYnJlYWtcbiAgICAgIGZsZXg6IDEwMCVcbiAgICAgIGhlaWdodDogMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRBbGxQYW5lbFNjaGVtYXMsIGlzTmVzdGVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFuZScsIHtcbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy50YWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0YWI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdmlzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYiA/IHRoaXMgOiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRTY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGNvbXBvbmVudHMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXNcbiAgICAgIC8vIGFuZCBhZGRzIHRoZSBrZXkgYXMgdGhlIG5hbWUgdG8gZWFjaCBjb21wb25lbnQsIHVzZWQgZm9yIGxhYmVscywgZXRjLlxuICAgICAgLy8gTk9URTogc2NoZW1hIGNhbiBiZSBudWxsIHdoaWxlIG11bHRpLWZvcm0gbGlzdHMgbG9hZCB0aGVpciBkYXRhLFxuICAgICAgLy8gYmVjYXVzZSBvbmx5IHRoZSBhdmFpbGFibGUgZGF0YSB3aWxsIGRldGVybWluZSB0aGUgdHlwZSBvZiBmb3JtLlxuICAgICAgLy8gV2hlbiBlZGl0aW5nIHByaW1pdGl2ZSB2YWx1ZXMgdGhyb3VnaCBhIGZvcm0sIGRvIG5vdCBhcHBlbmQgJ25hbWUnIHRvXG4gICAgICAvLyB0aGUgY29tcG9uZW50J3MgZGF0YVBhdGggc28gaXQgY2FuIGJlIG1hcHBlZCB0byBmcm9tIHZhbGlkYXRpb24gZXJyb3JzLlxuICAgICAgLy8gTk9URTogTm90IGFsbCBzY2hlbWFzIC8gY29tcG9uZW50cyBoYXZlIGEgc291cmNlU2NoZW1hLCBlLmcuIGRpYWxvZ3MuXG4gICAgICBjb25zdCB3cmFwUHJpbWl0aXZlcyA9IHRoaXMuc291cmNlU2NoZW1hPy53cmFwUHJpbWl0aXZlc1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hPy5jb21wb25lbnRzIHx8IHt9KS5tYXAoXG4gICAgICAgIChbbmFtZSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgIC8vIEFsd2F5cyBhZGQgbmFtZSB0byBjb21wb25lbnQgc2NoZW1hLlxuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICAgIC8vIFNoYXJlIGRhdGFQYXRoIGFuZCBzdG9yZSB3aXRoIHBhcmVudCBpZiBub3QgbmVzdGVkOlxuICAgICAgICAgIGNvbnN0IG5lc3RlZCA9IGlzTmVzdGVkKHNjaGVtYSlcbiAgICAgICAgICBjb25zdCBuZXN0ZWREYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIGRhdGFQYXRoOiBuZXN0ZWQgJiYgIXdyYXBQcmltaXRpdmVzXG4gICAgICAgICAgICAgID8gbmVzdGVkRGF0YVBhdGhcbiAgICAgICAgICAgICAgOiB0aGlzLmRhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICAgICAgICBuZXN0ZWQsXG4gICAgICAgICAgICBzdG9yZTogbmVzdGVkID8gdGhpcy5nZXRDaGlsZFN0b3JlKG5hbWUpIDogdGhpcy5zdG9yZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYXMoKSB7XG4gICAgICAvLyBHYXRoZXIgYWxsIHBhbmVsIHNjaGVtYXMgZnJvbSBhbGwgY29tcG9uZW50IHNjaGVtYXMsIGJ5IGZpbmRpbmcgdGhvc2VcbiAgICAgIC8vIHRoYXQgd2FudCB0byBwcm92aWRlIGEgcGFuZWwuIFNlZSBgZ2V0QWxsUGFuZWxTY2hlbWFzKClgIGZvciBkZXRhaWxzLlxuICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50U2NoZW1hcy5mbGF0TWFwKFxuICAgICAgICAoeyBzY2hlbWEsIG5lc3RlZERhdGFQYXRoOiBkYXRhUGF0aCB9KSA9PiBnZXRBbGxQYW5lbFNjaGVtYXMoXG4gICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50LFxuICAgICAgICAgIHRoaXMudGFiQ29tcG9uZW50XG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNTaW5nbGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaW5nbGUgJiYgdGhpcy5jb21wb25lbnRTY2hlbWFzLmxlbmd0aCA9PT0gMVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZSh0aGlzLCBhZGQpXG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgaWYgKHRoaXMudGFiKSB7XG4gICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgaGFzaDogdGhpcy50YWIgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRnJhY3Rpb24odmFsdWUpIHtcbiAgY29uc3QgbWF0Y2ggPSAoXG4gICAgaXNTdHJpbmcodmFsdWUpICYmXG4gICAgdmFsdWUubWF0Y2goL15cXHMqKFsrLV0/XFxkKylcXHMqXFwvXFxzKihbKy1dP1xcZCspXFxzKiQvKVxuICApXG4gIGlmIChtYXRjaCkge1xuICAgIGNvbnN0IFssIGRpdmlkZW5kLCBkaXZpc29yXSA9IG1hdGNoXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoZGl2aWRlbmQpIC8gcGFyc2VGbG9hdChkaXZpc29yKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKVxuICB9XG59XG4iLCJcbi5kaXRvLWNvbnRhaW5lcihcbiAgdi1zaG93PVwiY29tcG9uZW50VmlzaWJsZVwiXG4gIDpjbGFzcz1cImNvbnRhaW5lckNsYXNzXCJcbiAgOnN0eWxlPVwiY29udGFpbmVyU3R5bGVcIlxuKVxuICBkaXRvLWxhYmVsKFxuICAgIHYtaWY9XCJsYWJlbFwiXG4gICAgOmxhYmVsPVwibGFiZWxcIlxuICAgIDpkYXRhUGF0aD1cImxhYmVsRGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgKVxuICBjb21wb25lbnQuZGl0by1jb21wb25lbnQoXG4gICAgOmlzPVwiZ2V0VHlwZUNvbXBvbmVudChzY2hlbWEudHlwZSlcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpzaW5nbGU9XCJzaW5nbGVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImNvbXBvbmVudERpc2FibGVkXCJcbiAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gICAgQGVycm9ycz1cIm9uRXJyb3JzXCJcbiAgKVxuICBkaXRvLWVycm9ycyhcbiAgICA6ZXJyb3JzPVwiZXJyb3JzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tY29udGFpbmVyKFxuICAgIHYtc2hvdz1cImNvbXBvbmVudFZpc2libGVcIlxuICAgIDpjbGFzcz1cImNvbnRhaW5lckNsYXNzXCJcbiAgICA6c3R5bGU9XCJjb250YWluZXJTdHlsZVwiXG4gIClcbiAgICBkaXRvLWxhYmVsKFxuICAgICAgdi1pZj1cImxhYmVsXCJcbiAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgIDpkYXRhUGF0aD1cImxhYmVsRGF0YVBhdGhcIlxuICAgICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICAgIClcbiAgICBjb21wb25lbnQuZGl0by1jb21wb25lbnQoXG4gICAgICA6aXM9XCJnZXRUeXBlQ29tcG9uZW50KHNjaGVtYS50eXBlKVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOnNpbmdsZT1cInNpbmdsZVwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImNvbXBvbmVudERpc2FibGVkXCJcbiAgICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICAgIEBlcnJvcnM9XCJvbkVycm9yc1wiXG4gICAgKVxuICAgIGRpdG8tZXJyb3JzKFxuICAgICAgOmVycm9ycz1cImVycm9yc1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNvbnRhaW5lclxuICAgIC8vIE5lZWRlZCBmb3IgYmV0dGVyIHZlcnRpY2FsIGFsaWdubWVudDpcbiAgICBhbGlnbi1zZWxmOiBzdHJldGNoXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgIC8vIFRvIHByZXZlbnQgbGlzdCB0YWJsZXMgZnJvbSBibG93aW5nIG91dCBvZiB0aGVpciBmbGV4IGJveCBjb250YWluZXJzLlxuICAgIG1heC13aWR0aDogMTAwJVxuICAgIC8vIENhbm5vdCB1c2UgbWFyZ2luIGhlcmUgYXMgaXQgbmVlZHMgdG8gYmUgcGFydCBvZiBib3gtc2l6aW5nIGZvclxuICAgIC8vIHBlcmNlbnRhZ2VzIGluIGZsZXgtYmFzaXMgdG8gd29yay5cbiAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nICRmb3JtLXNwYWNpbmctaGFsZlxuICAgICY6ZW1wdHlcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAmLmRpdG8tb21pdC1wYWRkaW5nXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICA+IC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogJGZvcm0tc3BhY2luZyAkZm9ybS1zcGFjaW5nLWhhbGYgMFxuICAgICYuZGl0by1zaW5nbGVcbiAgICAgIGhlaWdodDogMTAwJSAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IGF0IHRoZSBib3R0b21cbiAgLy8gTk9URTogVGhpcyBpcyBub3QgbmVzdGVkIGluc2lkZSBgLmRpdG8tY29udGFpbmVyYCBzbyB0aGF0IG90aGVyXG4gIC8vIHR5cGUgY29tcG9uZW50cyBjYW4gb3ZlcnJpZGUgYC5kaXRvLXdpZHRoLWZpbGxgIGNsYXNzIChmaWx0ZXIgcHJlY2VkZW5jZSkuXG4gIC5kaXRvLWNvbXBvbmVudFxuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgJi5kaXRvLWNoZWNrYm94LFxuICAgICAgJi5kaXRvLXJhZGlvLWJ1dHRvblxuICAgICAgICAvLyBXZWJLaXQgZG9lc24ndCBsaWtlIGNoYW5nZWQgd2lkdGggb24gY2hlY2tib3hlcyBhbmQgcmFkaW9zLCBvdmVycmlkZTpcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgIHdpZHRoOiBhdXRvXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNTdHJpbmcsIGlzTnVtYmVyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0VHlwZU9wdGlvbnMsIHNob3VsZE9taXRQYWRkaW5nIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgcGFyc2VGcmFjdGlvbiB9IGZyb20gJy4uL3V0aWxzL21hdGguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1jb250YWluZXInLCB7XG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogdGhpcy5uZXN0ZWQgfSlcbiAgICB9LFxuXG4gICAgdHlwZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gZ2V0VHlwZU9wdGlvbnModGhpcy5zY2hlbWEpIHx8IHt9XG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IHNjaGVtYVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgbGFiZWwgIT09IGZhbHNlICYmXG4gICAgICAgICghIWxhYmVsIHx8IHRoaXMudHlwZU9wdGlvbnMuZ2VuZXJhdGVMYWJlbCAmJiB0aGlzLmdlbmVyYXRlTGFiZWxzKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc0xhYmVsID8gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSkgOiBudWxsXG4gICAgfSxcblxuICAgIGxhYmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBVbm5lc3RlZCB0eXBlcyBkb24ndCBoYXZlIGEgZGF0YVBhdGggZm9yIHRoZW1zZWx2ZXMsIGRvbid0IHVzZSBpdDpcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMuZGF0YVBhdGggOiBudWxsXG4gICAgfSxcblxuICAgIGNvbXBvbmVudFdpZHRoOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZU9wdGlvbnMuZGVmYXVsdFdpZHRoXG4gICAgICB9LFxuICAgICAgZ2V0KHdpZHRoKSB7XG4gICAgICAgIC8vIFVzZSAxMDAlID09IDEuMCBhcyBkZWZhdWx0IHdpZHRoIHdoZW4gbm90aGluZyBpcyBzZXQ6XG4gICAgICAgIHJldHVybiB3aWR0aCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAxLjBcbiAgICAgICAgICA6IGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgICAgPyB3aWR0aC5tYXRjaCgvXlxccypbPD5dP1xccyooLiopJC8pWzFdIC8vIFJlbW92ZSB3aWR0aCBvcGVyYXRvclxuICAgICAgICAgICAgOiB3aWR0aFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50V2lkdGhPcGVyYXRvcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZ2V0KHdpZHRoKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyh3aWR0aClcbiAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKihbPD5dPykvKVsxXSB8fCBudWxsXG4gICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRWaXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0VmlzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50RGlzYWJsZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdkaXNhYmxlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkaXNhYmxlZCkge1xuICAgICAgICByZXR1cm4gZGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29udGFpbmVyQ2xhc3MoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzOiBjb250YWluZXJDbGFzcyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXNpbmdsZSc6IHRoaXMuc2luZ2xlLFxuICAgICAgICAnZGl0by1vbWl0LXBhZGRpbmcnOiBzaG91bGRPbWl0UGFkZGluZyh0aGlzLnNjaGVtYSksXG4gICAgICAgIC4uLihcbiAgICAgICAgICBpc1N0cmluZyhjb250YWluZXJDbGFzcylcbiAgICAgICAgICAgID8geyBbY29udGFpbmVyQ2xhc3NdOiB0cnVlIH1cbiAgICAgICAgICAgIDogY29udGFpbmVyQ2xhc3NcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRCYXNpcygpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5jb21wb25lbnRXaWR0aFxuICAgICAgLy8gJ2F1dG8nID0gbm8gZml0dGluZzpcbiAgICAgIGNvbnN0IGJhc2lzID0gKFxuICAgICAgICBbbnVsbCwgJ2F1dG8nLCAnZmlsbCddLmluY2x1ZGVzKHdpZHRoKSA/ICdhdXRvJ1xuICAgICAgICA6IC8lJC8udGVzdCh3aWR0aCkgPyBwYXJzZUZsb2F0KHdpZHRoKSAvLyBwZXJjZW50YWdlXG4gICAgICAgIDogL1thLXpdLy50ZXN0KHdpZHRoKSA/IHdpZHRoIC8vIG5hdGl2ZSB1bml0c1xuICAgICAgICA6IHBhcnNlRnJhY3Rpb24od2lkdGgpICogMTAwIC8vIGZyYWN0aW9uXG4gICAgICApXG4gICAgICByZXR1cm4gaXNOdW1iZXIoYmFzaXMpID8gYCR7YmFzaXN9JWAgOiBiYXNpc1xuICAgIH0sXG5cbiAgICBjb250YWluZXJTdHlsZSgpIHtcbiAgICAgIC8vIEludGVycHJldCAnPjUwJScgYXMgJzUwJSwgZmxleC1ncm93OiAxYFxuICAgICAgY29uc3QgZ3JvdyA9IChcbiAgICAgICAgdGhpcy5jb21wb25lbnRXaWR0aE9wZXJhdG9yID09PSAnPicgfHxcbiAgICAgICAgdGhpcy5jb21wb25lbnRXaWR0aCA9PT0gJ2ZpbGwnXG4gICAgICApXG4gICAgICAvLyBJbnRlcnByZXQgJzw1MCUnIGFzICc1MCUsIGZsZXgtc2hyaW5rOiAxYFxuICAgICAgY29uc3Qgc2hyaW5rID0gdGhpcy5jb21wb25lbnRXaWR0aE9wZXJhdG9yID09PSAnPCdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZsZXg6IGAke2dyb3cgPyAxIDogMH0gJHtzaHJpbmsgPyAxIDogMH0gJHt0aGlzLmNvbXBvbmVudEJhc2lzfWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcG9uZW50Q2xhc3MoKSB7XG4gICAgICBjb25zdCBiYXNpc0lzQXV0byA9IHRoaXMuY29tcG9uZW50QmFzaXMgPT09ICdhdXRvJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5jb21wb25lbnREaXNhYmxlZCxcbiAgICAgICAgJ2RpdG8td2lkdGgtZmlsbCc6ICFiYXNpc0lzQXV0byB8fCB0aGlzLmNvbXBvbmVudFdpZHRoID09PSAnZmlsbCcsXG4gICAgICAgICdkaXRvLXdpZHRoLWF1dG8nOiBiYXNpc0lzQXV0byxcbiAgICAgICAgJ2RpdG8taGFzLWVycm9ycyc6ICEhdGhpcy5lcnJvcnNcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRXJyb3JzKGVycm9ycykge1xuICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tdGFic1xuICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgdi1mb3I9XCIodGFiU2NoZW1hLCBrZXkpIGluIHRhYnNcIlxuICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodGFiU2NoZW1hKVwiXG4gICAgOmtleT1cImtleVwiXG4gICAgOnRvPVwieyBoYXNoOiBrZXkgfVwiXG4gICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICApXG4gICAgfCB7eyBnZXRMYWJlbCh0YWJTY2hlbWEsIGtleSkgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRhYnNcbiAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICB2LWZvcj1cIih0YWJTY2hlbWEsIGtleSkgaW4gdGFic1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHRhYlNjaGVtYSlcIlxuICAgICAgOmtleT1cImtleVwiXG4gICAgICA6dG89XCJ7IGhhc2g6IGtleSB9XCJcbiAgICAgIGFjdGl2ZS1jbGFzcz1cImRpdG8tYWN0aXZlXCJcbiAgICApXG4gICAgICB8IHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gICR0YWItY29sb3ItYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0XG4gICR0YWItY29sb3ItaW5hY3RpdmU6ICRjb2xvci1saWdodFxuICAkdGFiLWNvbG9yLWFjdGl2ZTogJGNvbG9yLWxpZ2h0ZXN0XG4gICR0YWItY29sb3ItaG92ZXI6ICRjb2xvci13aGl0ZVxuXG4gIC5kaXRvLXRhYnNcbiAgICAvLyBTZWU6IGh0dHBzOi8vY29kZXBlbi5pby90aG9sZXgvcGVuL2h2ZUJ4L1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvXG4gICAgYVxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1pbmFjdGl2ZVxuICAgICAgcGFkZGluZzogJHRhYi1wYWRkaW5nLXZlciAkdGFiLXBhZGRpbmctaG9yXG4gICAgICBtYXJnaW4tbGVmdDogJHRhYi1tYXJnaW5cbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR0YWItcmFkaXVzXG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHRhYi1yYWRpdXNcbiAgICAgICY6aG92ZXJcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1ob3ZlclxuICAgICAgJjphY3RpdmVcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1hY3RpdmVcbiAgICAgICYuZGl0by1hY3RpdmVcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1iYWNrZ3JvdW5kXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYnMnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFiczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzZWxlY3RlZFRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi8vIE9ubHkgc2hvdyBwYW5lbHMgaW4gdGFicyB3aGVuIHRoZSB0YWJzIGFyZSBhbHNvIHZpc2libGUuXG5jb21wb25lbnQuZGl0by1wYW5lbChcbiAgOmlzPVwicGFuZWxUYWdcIlxuICB2LXNob3c9XCJ2aXNpYmxlICYmICghcGFuZWxUYWJDb21wb25lbnQgfHwgcGFuZWxUYWJDb21wb25lbnQudmlzaWJsZSlcIlxuICBAc3VibWl0LnByZXZlbnRcbilcbiAgbGFiZWwuZGl0by1wYW5lbC10aXRsZSB7eyBnZXRMYWJlbChzY2hlbWEpIH19XG4gIGRpdG8tc2NoZW1hLmRpdG8tcGFuZWwtc2NoZW1hKFxuICAgIDpzY2hlbWE9XCJwYW5lbFNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6aGFzT3duRGF0YT1cImhhc093bkRhdGFcIlxuICApXG4gICAgZGl0by1idXR0b25zKFxuICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAvLyBPbmx5IHNob3cgcGFuZWxzIGluIHRhYnMgd2hlbiB0aGUgdGFicyBhcmUgYWxzbyB2aXNpYmxlLlxuICBjb21wb25lbnQuZGl0by1wYW5lbChcbiAgICA6aXM9XCJwYW5lbFRhZ1wiXG4gICAgdi1zaG93PVwidmlzaWJsZSAmJiAoIXBhbmVsVGFiQ29tcG9uZW50IHx8IHBhbmVsVGFiQ29tcG9uZW50LnZpc2libGUpXCJcbiAgICBAc3VibWl0LnByZXZlbnRcbiAgKVxuICAgIGxhYmVsLmRpdG8tcGFuZWwtdGl0bGUge3sgZ2V0TGFiZWwoc2NoZW1hKSB9fVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tcGFuZWwtc2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpoYXNPd25EYXRhPVwiaGFzT3duRGF0YVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXBhbmVsXG4gICAgbWFyZ2luLWJvdHRvbTogJGNvbnRlbnQtcGFkZGluZ1xuICAgIC5kaXRvLXBhbmVsLXRpdGxlXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgIGJhY2tncm91bmQ6ICRidXR0b24tY29sb3JcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgIC5kaXRvLXBhbmVsLXNjaGVtYVxuICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsXG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci10b3A6IDBcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmICRmb3JtLXNwYWNpbmdcbiAgICAgICAgPiAuZGl0by1idXR0b25zXG4gICAgICAgICAgLS1idXR0b24tbWFyZ2luOiAjeyRmb3JtLXNwYWNpbmd9XG4gICAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmIDBcbiAgICAgIC5kaXRvLW9iamVjdFxuICAgICAgICBib3JkZXI6IDBcbiAgICAgICAgcGFkZGluZzogMFxuICAgICAgLmRpdG8tbGFiZWxcbiAgICAgICAgbWFyZ2luOiAwXG4gICAgICAgIGxhYmVsXG4gICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbFxuICAgICAgLmRpdG8tcGFuZVxuICAgICAgICBtYXJnaW46IDAgKC0kZm9ybS1zcGFjaW5nLWhhbGYpXG4gICAgICAuZGl0by1jb250YWluZXJcbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFuZWwnLCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFuZWxUYWJDb21wb25lbnQ6IHsgdHlwZTogRGl0b0NvbXBvbmVudCwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3duRGF0YTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhbmVsQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFuZWxUYWJDb21wb25lbnRcbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKHRoaXMuc2NoZW1hLmJ1dHRvbnMpXG4gICAgfSxcblxuICAgIHRhcmdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS50YXJnZXQgfHwgdGhpcy5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICBoYXNPd25EYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5vd25EYXRhXG4gICAgfSxcblxuICAgIHBhbmVsRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm93bkRhdGEgfHwgdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIHBhbmVsU2NoZW1hKCkge1xuICAgICAgaWYgKHRoaXMuaGFzT3duRGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY2hlbWFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBgZGF0YWAgZnJvbSB0aGUgc2NoZW1hLCBzbyB0aGF0IERpdG9TY2hlbWEgaXNuJ3QgdXNpbmcgaXQgdG9cbiAgICAgICAgLy8gcHJvZHVjZSBpdHMgb3duIGRhdGEuIFNlZSAkZmlsdGVycyBwYW5lbCBmb3IgbW9yZSBkZXRhaWxzIG9uIGRhdGEuXG4gICAgICAgIGNvbnN0IHsgZGF0YSwgLi4uc2NoZW1hIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICByZXR1cm4gc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhbmVsVGFnKCkge1xuICAgICAgLy8gUGFuZWxzIHRoYXQgcHJvdmlkZSB0aGVpciBvd24gZGF0YSBuZWVkIHRoZWlyIG93biBmb3JtLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/ICdmb3JtJyA6ICdkaXYnXG4gICAgfSxcblxuICAgIHBhbmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBJZiB0aGUgcGFuZWwgcHJvdmlkZXMgaXRzIG93biBkYXRhLCB0aGVuIGl0IG5lZWRzIHRvIHByZWZpeCBhbGxcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCBpdHMgZGF0YS1wYXRoLCBidXQgaWYgaXQgc2hhcmVzIGRhdGEgd2l0aCB0aGUgc2NoZW1hXG4gICAgICAvLyBjb21wb25lbnQsIHRoZW4gaXQgc2hvdWxkIHNoYXJlIHRoZSBkYXRhLXBhdGggbmFtZSBzcGFjZSB0b28uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gdGhpcy5kYXRhUGF0aCA6IHRoaXMuc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoXG4gICAgfSxcblxuICAgIHZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICAvLyBOT1RFOiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBhcyBgc2NoZW1hLmRhdGFgIGhhbmRsaW5nIGluIERpdG9TY2hlbWEsXG4gICAgLy8gd2hlcmUgdGhlIGRhdGEgaXMgYWRkZWQgdG8gdGhlIGFjdHVhbCBjb21wb25lbnQuXG4gICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLnNjaGVtYVxuICAgIGlmIChkYXRhKSB7XG4gICAgICB0aGlzLm93bkRhdGEgPSBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgID8gZGF0YS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgOiBkYXRhXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIFJlZ2lzdGVyIHRoZSBwYW5lbHMgc28gdGhhdCBvdGhlciBjb21wb25lbnRzIGNhbiBmaW5kIHRoZW0gYnkgdGhlaXJcbiAgICAgIC8vIGRhdGEtcGF0aCwgZS5nLiBpbiBUeXBlTGlzdC5vbkZpbHRlckVycm9ycygpXG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lbCh0aGlzLCBhZGQpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXBhbmVscyhcbiAgdi1pZj1cInBhbmVscy5sZW5ndGggPiAwXCJcbilcbiAgZGl0by1wYW5lbChcbiAgICB2LWZvcj1cInsgc2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50IH0gaW4gcGFuZWxzXCJcbiAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgIDprZXk9XCJnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKHNjaGVtYS5uYW1lKVwiXG4gICAgOmRpc2FibGVkPVwic2NoZW1hLmRpc2FibGVkICE9IG51bGwgPyBzY2hlbWEuZGlzYWJsZWQgOiBkaXNhYmxlZFwiXG4gICAgOnBhbmVsVGFiQ29tcG9uZW50PVwidGFiQ29tcG9uZW50XCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcGFuZWxzKFxuICAgIHYtaWY9XCJwYW5lbHMubGVuZ3RoID4gMFwiXG4gIClcbiAgICBkaXRvLXBhbmVsKFxuICAgICAgdi1mb3I9XCJ7IHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCB9IGluIHBhbmVsc1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgICAgOmtleT1cImdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKHNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJzY2hlbWEuZGlzYWJsZWQgIT0gbnVsbCA/IHNjaGVtYS5kaXNhYmxlZCA6IGRpc2FibGVkXCJcbiAgICAgIDpwYW5lbFRhYkNvbXBvbmVudD1cInRhYkNvbXBvbmVudFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXBhbmVsc1xuICAgIG1heC13aWR0aDogJGNvbnRlbnQtc2lkZWJhci13aWR0aFxuICAgIG1pbi13aWR0aDogY2FsYygkY29udGVudC1zaWRlYmFyLXdpZHRoIC8gMilcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFuZWxzJywge1xuICBwcm9wczoge1xuICAgIHBhbmVsczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgICAgIC8vIEFsbG93IHNlcGFyYXRlIHRhYnMgdG8gdXNlIHBhbmVscyBvZiB0aGUgc2FtZSBuYW1lLCBieVxuICAgICAgLy8gcHJlZml4aW5nIHRoZWlyIGtleSB3aXRoIHRoZSB0YWIgbmFtZS5cbiAgICAgIHJldHVybiB0YWJDb21wb25lbnQgPyBgJHt0YWJDb21wb25lbnQudGFifV8ke2RhdGFQYXRofWAgOiBkYXRhUGF0aFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1idXR0b25zKFxuICB2LWlmPVwiYnV0dG9uU2NoZW1hcyB8fCAkc2xvdHMuZGVmYXVsdFwiXG4gIC8qIFBhc3Mgb24gJGxpc3RlbmVycyBzbyB0aGF0IGRpdG8tZWRpdC1idXR0b25zIGNhbiBwYXNzIGV2ZW50cy4gKi9cbiAgdi1vbj1cIiRsaXN0ZW5lcnNcIlxuKVxuICBkaXRvLWNvbnRhaW5lcihcbiAgICB2LWZvcj1cIihidXR0b25TY2hlbWEsIGJ1dHRvbkRhdGFQYXRoKSBpbiBidXR0b25TY2hlbWFzXCJcbiAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGJ1dHRvblNjaGVtYSlcIlxuICAgIDprZXk9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGJ1dHRvblNjaGVtYS5uYW1lKVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgKVxuICAvLyBSZW5kZXIgZWFjaCBub2RlIGluIHRoZSBkZWZhdWx0IHNsb3QgdGhyb3VnaCBgZGl0by12bm9kZWAsIHNvIGl0IGNhbiBiZVxuICAvLyB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gIC5kaXRvLWNvbnRhaW5lcihcbiAgICB2LWZvcj1cIm5vZGUgaW4gJHNsb3RzLmRlZmF1bHRcIlxuICAgIHYtaWY9XCJub2RlLnRhZ1wiXG4gIClcbiAgICBkaXRvLXZub2RlKDpub2RlPVwibm9kZVwiKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tYnV0dG9ucyhcbiAgICB2LWlmPVwiYnV0dG9uU2NoZW1hcyB8fCAkc2xvdHMuZGVmYXVsdFwiXG4gICAgLyogUGFzcyBvbiAkbGlzdGVuZXJzIHNvIHRoYXQgZGl0by1lZGl0LWJ1dHRvbnMgY2FuIHBhc3MgZXZlbnRzLiAqL1xuICAgIHYtb249XCIkbGlzdGVuZXJzXCJcbiAgKVxuICAgIGRpdG8tY29udGFpbmVyKFxuICAgICAgdi1mb3I9XCIoYnV0dG9uU2NoZW1hLCBidXR0b25EYXRhUGF0aCkgaW4gYnV0dG9uU2NoZW1hc1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGJ1dHRvblNjaGVtYSlcIlxuICAgICAgOmtleT1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJidXR0b25TY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGJ1dHRvblNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgKVxuICAgIC8vIFJlbmRlciBlYWNoIG5vZGUgaW4gdGhlIGRlZmF1bHQgc2xvdCB0aHJvdWdoIGBkaXRvLXZub2RlYCwgc28gaXQgY2FuIGJlXG4gICAgLy8gd3JhcHBlZCBpbiBhIGAuZGl0by1jb250YWluZXJgIGNsYXNzLlxuICAgIC5kaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtZm9yPVwibm9kZSBpbiAkc2xvdHMuZGVmYXVsdFwiXG4gICAgICB2LWlmPVwibm9kZS50YWdcIlxuICAgIClcbiAgICAgIGRpdG8tdm5vZGUoOm5vZGU9XCJub2RlXCIpXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbi5kaXRvLWJ1dHRvbnNcbiAgPiAuZGl0by1jb250YWluZXJcbiAgICBwYWRkaW5nOiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWJ1dHRvbnMnLCB7XG4gIHByb3ZpZGU6IHtcbiAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIC8vIENvbXB1dGUgYSBidXR0b25zIGxpc3Qgd2hpY2ggaGFzIHRoZSBkYXRhUGF0aCBiYWtlZCBpbnRvIGl0cyBrZXlzLlxuICAgICAgY29uc3QgeyBkYXRhUGF0aCwgYnV0dG9ucyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGJ1dHRvbnNcbiAgICAgICAgPyBPYmplY3QudmFsdWVzKGJ1dHRvbnMpLnJlZHVjZSgoc2NoZW1hcywgYnV0dG9uKSA9PiB7XG4gICAgICAgICAgc2NoZW1hc1thcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgYnV0dG9uLm5hbWUpXSA9IGJ1dHRvblxuICAgICAgICAgIHJldHVybiBzY2hlbWFzXG4gICAgICAgIH0sIHt9KVxuICAgICAgICA6IG51bGxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZGl0by1idXR0b25zLmRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgOmJ1dHRvbnM9XCJidXR0b25zXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICA6ZGF0YT1cImRhdGFcIlxuICA6bWV0YT1cIm1ldGFcIlxuICA6c3RvcmU9XCJzdG9yZVwiXG4gIC8qIFByZXZlbnQgY2xpY2sgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gZGl0by1sYWJlbDogKi9cbiAgQGNsaWNrLnN0b3BcbilcbiAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgYS5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNEcmFnZ2FibGVcIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICApXG4gIHJvdXRlci1saW5rLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0VkaXRhYmxlXCJcbiAgICA6dG89XCJ7IHBhdGg6IGVkaXRQYXRoIH1cIiBhcHBlbmRcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgKVxuICBkaXRvLWNyZWF0ZS1idXR0b24oXG4gICAgdi1pZj1cImlzQ3JlYXRhYmxlXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6cGF0aD1cImNyZWF0ZVBhdGhcIlxuICAgIDp2ZXJiPVwidmVyYnMuY3JlYXRlXCJcbiAgICA6dGV4dD1cImNyZWF0ZUJ1dHRvblRleHRcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNEZWxldGFibGVcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgQGNsaWNrPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZGl0by1idXR0b25zLmRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIC8qIFByZXZlbnQgY2xpY2sgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gZGl0by1sYWJlbDogKi9cbiAgICBAY2xpY2suc3RvcFxuICApXG4gICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgdi1pZj1cImlzRHJhZ2dhYmxlXCJcbiAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgIClcbiAgICByb3V0ZXItbGluay5kaXRvLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0VkaXRhYmxlXCJcbiAgICAgIDp0bz1cInsgcGF0aDogZWRpdFBhdGggfVwiIGFwcGVuZFxuICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgKVxuICAgIGRpdG8tY3JlYXRlLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgICA6dmVyYj1cInZlcmJzLmNyZWF0ZVwiXG4gICAgICA6dGV4dD1cImNyZWF0ZUJ1dHRvblRleHRcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB2LWlmPVwiaXNEZWxldGFibGVcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgQGNsaWNrPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tZWRpdC1idXR0b25zXG4gICAgLy8gT3ZlcnJpZGUgY3Vyc29yIGZyb20gY29sbGFwc2libGUgZGl0by1sYWJlbDpcbiAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICBmbGV4OiBub25lXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZWRpdC1idXR0b25zJywge1xuICBwcm9wczoge1xuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY3JlYXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3JlYXRlUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYS5mb3JtKVxuICAgIH0sXG5cbiAgICBpc0RyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZHJhZ2dhYmxlJylcbiAgICB9LFxuXG4gICAgaXNFZGl0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZWRpdGFibGUnKSAmJiAhIXRoaXMuZWRpdFBhdGhcbiAgICB9LFxuXG4gICAgaXNDcmVhdGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2NyZWF0YWJsZScpICYmICEhdGhpcy5jcmVhdGVQYXRoXG4gICAgfSxcblxuICAgIGlzRGVsZXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdkZWxldGFibGUnKVxuICAgIH0sXG5cbiAgICBjcmVhdGVCdXR0b25UZXh0KCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIG92ZXJyaWRlIGNyZWF0ZSBidXR0b24gdGhyb3VnaCBjcmVhdGFibGUgb2JqZWN0OlxuICAgICAgICB0aGlzLnNjaGVtYS5jcmVhdGFibGU/LmxhYmVsIHx8XG4gICAgICAgIChcbiAgICAgICAgICAvLyBBdXRvLWdlbmVyYXRlIGNyZWF0ZSBidXR0b24gbGFiZWxzIGZyb20gZnJvbSBsYWJlbHMgZm9yIGxpc3RcbiAgICAgICAgICAvLyBzb3VyY2VzIHdpdGggb25seSBvbmUgZm9ybTpcbiAgICAgICAgICB0aGlzLmZvcm1MYWJlbCAmJlxuICAgICAgICAgIGAke2NhcGl0YWxpemUodGhpcy52ZXJicy5jcmVhdGUpfSAke3RoaXMuZm9ybUxhYmVsfWBcbiAgICAgICAgKSB8fFxuICAgICAgICBudWxsXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYXNPcHRpb24obmFtZSkge1xuICAgICAgLy8gVGhlIG9wdGlvbnMgb2YgdGhlIG91dGVyIGNvbXBvbmVudCBhcmUgcGFzc2VkIHRvIHRoZSBidXR0b25zIGNvbXBvbmVudFxuICAgICAgLy8gdGhyb3VnaCBwcm9wZXJ0aWVzIGB0aGlzW25hbWVdYCwgYnV0IGNhbiBiZSBkaXNhYmxlZCBvbiBhIHBlci1mb3JtXG4gICAgICAvLyBiYXNpcyBieSBzZXR0aW5nIGBzY2hlbWFbbmFtZV1gIHRvIGBmYWxzZWAuXG4gICAgICByZXR1cm4gISEodGhpc1tuYW1lXSAmJiB0aGlzLnNjaGVtYVtuYW1lXSAhPT0gZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNyZWF0ZS1idXR0b25cbiAgdGVtcGxhdGUodi1pZj1cInNob3dQdWxsZG93blwiKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICAgKSB7eyB0ZXh0IH19XG4gICAgdWwuZGl0by1wdWxsZG93bihcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gICAgKVxuICAgICAgbGkodi1mb3I9XCIoZm9ybSwgdHlwZSkgaW4gZm9ybXNcIilcbiAgICAgICAgYShcbiAgICAgICAgICB2LWlmPVwiaXNDcmVhdGFibGUoZm9ybSlcIlxuICAgICAgICAgIDpjbGFzcz1cImBkaXRvLXR5cGUtJHt0eXBlfWBcIlxuICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odHlwZSlcIlxuICAgICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodHlwZSlcIlxuICAgICAgICApIHt7IGdldExhYmVsKGZvcm0pIH19XG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWVsc2VcbiAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgIEBjbGljaz1cImNyZWF0ZUl0ZW0oZm9ybXMuZGVmYXVsdClcIlxuICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgOnRpdGxlPVwibGFiZWxpemUodmVyYilcIlxuICApIHt7IHRleHQgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNyZWF0ZS1idXR0b25cbiAgICB0ZW1wbGF0ZSh2LWlmPVwic2hvd1B1bGxkb3duXCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgICAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgICAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICAgICApIHt7IHRleHQgfX1cbiAgICAgIHVsLmRpdG8tcHVsbGRvd24oXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gICAgICApXG4gICAgICAgIGxpKHYtZm9yPVwiKGZvcm0sIHR5cGUpIGluIGZvcm1zXCIpXG4gICAgICAgICAgYShcbiAgICAgICAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZShmb3JtKVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJgZGl0by10eXBlLSR7dHlwZX1gXCJcbiAgICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odHlwZSlcIlxuICAgICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh0eXBlKVwiXG4gICAgICAgICAgKSB7eyBnZXRMYWJlbChmb3JtKSB9fVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtZWxzZVxuICAgICAgOnR5cGU9XCJpc0lubGluZWQgPyAnYnV0dG9uJyA6ICdzdWJtaXQnXCJcbiAgICAgIEBjbGljaz1cImNyZWF0ZUl0ZW0oZm9ybXMuZGVmYXVsdClcIlxuICAgICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICApIHt7IHRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1jcmVhdGUtYnV0dG9uXG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLmRpdG8tcHVsbGRvd25cbiAgICAgIHJpZ2h0OiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Rm9ybVNjaGVtYXMsIGlzSW5saW5lZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNyZWF0ZS1idXR0b24nLCB7XG4gIG1peGluczogW1B1bGxkb3duTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB2ZXJiOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0ZXh0OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBzaG93UHVsbGRvd24oKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5mb3JtcykubGVuZ3RoID4gMSB8fCAhdGhpcy5mb3Jtcy5kZWZhdWx0XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBpc0NyZWF0YWJsZShmb3JtKSB7XG4gICAgICAvLyBGb3JtcyBjYW4gYmUgZXhjbHVkZWQgZnJvbSB0aGUgbGlzdCBieSBwcm92aWRpbmcgYGNyZWF0YWJsZTogZmFsc2VgXG4gICAgICByZXR1cm4gZm9ybS5jcmVhdGFibGUgIT09IGZhbHNlXG4gICAgfSxcblxuICAgIGNyZWF0ZUl0ZW0oZm9ybSwgdHlwZSA9IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRhYmxlKGZvcm0pKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5saW5lZCkge1xuICAgICAgICAgIHRoaXMuc291cmNlQ29tcG9uZW50LmNyZWF0ZUl0ZW0oZm9ybSwgdHlwZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgICAgICBwYXRoOiBgJHt0aGlzLnBhdGh9L2NyZWF0ZWAsXG4gICAgICAgICAgICBxdWVyeTogeyB0eXBlIH0sXG4gICAgICAgICAgICBhcHBlbmQ6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhbGxvd2VkIHRvIGNyZWF0ZSBpdGVtIGZvciBnaXZlbiBmb3JtJylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93blNlbGVjdCh0eXBlKSB7XG4gICAgICB0aGlzLmNyZWF0ZUl0ZW0odGhpcy5mb3Jtc1t0eXBlXSwgdHlwZSlcbiAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1jbGlwYm9hcmQuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgdi1pZj1cImNsaXBib2FyZFwiXG4pXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1jb3B5KFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHJlZj1cImNvcHlEYXRhXCJcbiAgICB0aXRsZT1cIkNvcHkgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIWNvcHlFbmFibGVkXCJcbiAgICBAY2xpY2s9XCJvbkNvcHlcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1wYXN0ZShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0aXRsZT1cIlBhc3RlIERhdGFcIlxuICAgIDpkaXNhYmxlZD1cIiFwYXN0ZUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uUGFzdGVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jbGlwYm9hcmQuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgICB2LWlmPVwiY2xpcGJvYXJkXCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1jb3B5KFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICByZWY9XCJjb3B5RGF0YVwiXG4gICAgICB0aXRsZT1cIkNvcHkgRGF0YVwiXG4gICAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgICAgQGNsaWNrPVwib25Db3B5XCJcbiAgICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB0aXRsZT1cIlBhc3RlIERhdGFcIlxuICAgICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgICBAY2xpY2s9XCJvblBhc3RlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNPYmplY3QsIGNsb25lLCBkZWluZGVudCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNsaXBib2FyZCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgY2xpcGJvYXJkOiB7IHR5cGU6IFtCb29sZWFuLCBPYmplY3RdLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29weUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgcGFzdGVFbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpeENsaXBib2FyZDogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsaXBib2FyZE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3QodGhpcy5jbGlwYm9hcmQpID8gdGhpcy5jbGlwYm9hcmQgOiB7fVxuICAgIH0sXG5cbiAgICBjb3B5RGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgY29weSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gY29weVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT4gY29weS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YVxuICAgICAgICB9KSlcbiAgICAgICAgOiBjbGlwYm9hcmREYXRhID0+IGNsb25lKGNsaXBib2FyZERhdGEpXG4gICAgfSxcblxuICAgIHBhc3RlRGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgcGFzdGUgfSA9IHRoaXMuY2xpcGJvYXJkT3B0aW9uc1xuICAgICAgcmV0dXJuIHBhc3RlXG4gICAgICAgID8gY2xpcGJvYXJkRGF0YSA9PiBwYXN0ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YVxuICAgICAgICB9KSlcbiAgICAgICAgOiBjbGlwYm9hcmREYXRhID0+IGNsaXBib2FyZERhdGFcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICAvLyBDaGVjayBjbGlwYm9hcmQgY29udGVudCB3aGVuZXZlciBzb21ldGhpbmcgZ2V0cyBjb3BpZWQgb3IgdGhlIHdpbmRvdyBnZXRzXG4gICAgLy8gKHJlKWFjdGl2YXRlZCwgYXMgdGhvc2UgYXJlIHRoZSBtb21lbnRzIHdoZW4gdGhlIGNsaXBib2FyZCBjYW4gY2hhbmdlOlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgIGNvcHk6IHRoaXMuY2hlY2tDbGlwYm9hcmRcbiAgICB9KVxuICAgIHRoaXMuZG9tT24od2luZG93LCB7XG4gICAgICBmb2N1czogdGhpcy5jaGVja0NsaXBib2FyZFxuICAgIH0pXG4gICAgdGhpcy4kd2F0Y2goJ2RhdGEnLCB7XG4gICAgICAvLyBDaGVjayByaWdodCBhd2F5IGFsc28gaW4gY2FzZSB0aGVyZSdzIGFscmVhZHkgZGF0YSAoZS5nLiBjcmVhdGUgZm9ybSkuXG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiAodG8sIGZyb20pID0+IHtcbiAgICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgICAgdGhpcy5jaGVja0NsaXBib2FyZCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBhc3luYyBnZXRDbGlwYm9hcmREYXRhKHJlcG9ydCkge1xuICAgICAgLy8gVXNlIHRoZSBpbnRlcm5hbCBjbGlwYm9hcmQgYXMgZmFsbGJhY2suXG4gICAgICBsZXQgeyBjbGlwYm9hcmREYXRhIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBqc29uID0gYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ucmVhZFRleHQ/LigpXG4gICAgICAgIGlmICh0aGlzLmZpeENsaXBib2FyZCAmJiBqc29uKSB7XG4gICAgICAgICAgLy8gVGhpcyBhcHBlYXJzIHRvIGJlIG5lZWRlZCBvbiBTYWZhcmkgdG8gcHJldmVudCBhIHN0cmFuZ2UgXCJQYXN0ZVwiXG4gICAgICAgICAgLy8gYnV0dG9uIGZyb20gYXBwZWFyaW5nIHdoZW4gdGhlIGNsaXBib2FyZCBpcyBhY2Nlc3NlZCAod2h5PyEpLlxuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LndyaXRlVGV4dD8uKGpzb24pXG4gICAgICAgICAgdGhpcy5maXhDbGlwYm9hcmQgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmIChqc29uKSB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YSA9IEpTT04ucGFyc2UoanNvbilcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChyZXBvcnQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLm5hbWUsIGVyci5tZXNzYWdlKVxuICAgICAgICAgIGlmIChlcnIubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgYWxlcnQoZGVpbmRlbnRgXG4gICAgICAgICAgICAgIFRoZSBkYXRhIGluIHRoZSBjbGlwYm9hcmQgYXBwZWFycyB0byBiZSBtYWxmb3JtZWQ6XG4gICAgICAgICAgICAgICR7ZXJyLm1lc3NhZ2V9XG4gICAgICAgICAgICBgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgeyAkc2NoZW1hLCAuLi5kYXRhIH0gPSBjbGlwYm9hcmREYXRhIHx8IHt9XG4gICAgICByZXR1cm4gJHNjaGVtYSA9PT0gdGhpcy5zY2hlbWFDb21wb25lbnQ/LnNjaGVtYS5uYW1lID8gZGF0YSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgY2hlY2tDbGlwYm9hcmQoKSB7XG4gICAgICB0aGlzLmNvcHlFbmFibGVkID0gISF0aGlzLmRhdGFcbiAgICAgIC8vIFNlZSBpZiB0aGUgY2xpcGJvYXJkIGNvbnRlbnQgaXMgdmFsaWQgSlNPTiBkYXRhIHRoYXQgaXMgY29tcGF0aWJsZVxuICAgICAgLy8gd2l0aCB0aGUgY3VycmVudCB0YXJnZXQgc2NoZW1hLCBhbmQgb25seSB0aGVuIGFjdGl2YXRlIHRoZSBwYXN0aW5nOlxuICAgICAgdGhpcy5wYXN0ZUVuYWJsZWQgPSAhIShhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEoZmFsc2UpKSAvLyBkb24ndCByZXBvcnRcbiAgICB9LFxuXG4gICAgYXN5bmMgb25Db3B5KCkge1xuICAgICAgbGV0IGRhdGEgPSB0aGlzLnNjaGVtYUNvbXBvbmVudD8uY2xpcGJvYXJkRGF0YVxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGRhdGEgJiYgdGhpcy5jb3B5RGF0YShkYXRhKVxuICAgICAgICAvLyBLZWVwIGFuIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgICAgdGhpcy5hcHBTdGF0ZS5jbGlwYm9hcmREYXRhID0gZGF0YVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKVxuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LndyaXRlVGV4dD8uKGpzb24pXG4gICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBhY3RpdmF0ZSB0aGUgcGFzdGUgYnV0dG9uLCBkZXBlbmRkaW5nIG9uIGJyb3dzZXJzOlxuICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tDbGlwYm9hcmQoKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLm5hbWUsIGVyci5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblBhc3RlKCkge1xuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEodHJ1ZSkgLy8gcmVwb3J0XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLnBhc3RlRGF0YShkYXRhKVxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50LnNldERhdGEoZGF0YSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgYWxlcnQoZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldExvYWRpbmcoaXNMb2FkaW5nLCB7IHVwZGF0ZVJvb3QgPSBmYWxzZSwgdXBkYXRlVmlldyA9IGZhbHNlIH0gPSB7fSkge1xuICAgICAgaWYgKCF0aGlzLmlzTG9hZGluZyBeICFpc0xvYWRpbmcpIHsgLy8gQm9vbGVhbiB4b3JcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgICAgICBpZiAodXBkYXRlUm9vdCkge1xuICAgICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5yZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVWaWV3KSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldExvYWRpbmcodGhpcy5pc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi9JdGVtTWl4aW4uanMnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuaW1wb3J0IHsgc2V0RGVmYXVsdHMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgTG9hZGluZ01peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAvLyBQYXNzIGxvY2FsIHZlcmJzIG92ZXJyaWRlcyBvbiB0byBjaGlsZHJlbiwgc2VlIHZlcmJzKCkgY29tcHV0ZWQgcHJvcC5cbiAgICAgICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyxcbiAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdGhpcy5oYXNEYXRhXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRlZERhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgLy8gUmV0dXJucyB0aGUgcmVzb3VyY2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVzb3VyY2UgZm9yIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBzb3VyY2Ugc2NoZW1hLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBhIGRhdGEtc291cmNlIGlmIGl0IGhhcyBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZTpcbiAgICAgIHJldHVybiAhIXRoaXMucmVzb3VyY2VcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICAvLyBSZXR1cm5zIGBmYWxzZWBoZXJlLCBidXQgaXMgb3ZlcnJpZGRlbiB0byByZXR1cm4gYHRydWVgIGluXG4gICAgICAvLyBgU291cmNlTWl4aW5gIGZvciBjb21wb25lbnQgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGVpciBvd24gZGF0YSwgYnV0XG4gICAgICAvLyBlZGl0IHRoZWlyIGl0ZW1zIHRocm91Z2ggYSBsaW5rZWQgdmlldy4gIEluIHRoaXMgY2FzZSwgcmVhbCBpZHMgbmVlZCB0b1xuICAgICAgLy8gYmUgdXNlZC5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIC8vIENoZWNrIHRoZSBmb3JtIHRoYXQgdGhpcyBjb21wb25lbnQgYmVsb25ncyB0byBhcyB3ZWxsLCBzaW5jZSBpdCBtYXkgYmVcbiAgICAgIC8vIGluIGNyZWF0aW9uIG1vZGUsIHdoaWNoIG1ha2VzIGl0IHRyYW5zaWVudC5cbiAgICAgIC8vIE5PVEU6IFRoaXMgZG9lcyBub3QgbG9vcCBlbmRsZXNzbHkgYmVjYXVzZSBEaXRvRm9ybSByZWRlZmluZXNcbiAgICAgIC8vIGBpc1RyYW5zaWVudCgpYCB0byBvbmx5IHJldHVybiBgIXRoaXMucHJvdmlkZXNEYXRhYC5cbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1Db21wb25lbnRcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAhdGhpcy5saW5rc1RvVmlldyB8fFxuICAgICAgICBmb3JtICYmIChcbiAgICAgICAgICBmb3JtLmlzVHJhbnNpZW50IHx8XG4gICAgICAgICAgZm9ybS5pc0NyZWF0aW5nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdHJhbnNpZW50Tm90ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgJzxiPk5vdGU8L2I+OiB0aGUgcGFyZW50IHN0aWxsIG5lZWRzIHRvIGJlIHNhdmVkICcgK1xuICAgICAgICAnaW4gb3JkZXIgdG8gcGVyc2lzdCB0aGlzIGNoYW5nZS4nXG4gICAgICApXG4gICAgfSxcblxuICAgIHNob3VsZExvYWQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAhdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICAhdGhpcy5pc0xvYWRpbmdcbiAgICAgIClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIC8vIEJhc2UgZGVmaW5pdGlvbiwgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IERpdG9Gb3JtIGFuZCBTb3VyY2VNaXhpblxuICAgICAgcmV0dXJuICEhdGhpcy5sb2FkZWREYXRhXG4gICAgfSxcblxuICAgIHZlcmJzKCkge1xuICAgICAgLy8gVGhlIGFjdHVhbCBjb2RlIGlzIHRoZSBgZ2V0VmVyYnMoKWAgbWV0aG9kLCBmb3IgZWFzaWVyIG92ZXJyaWRpbmcgb2ZcbiAgICAgIC8vIHRoaXMgY29tcHV0ZWQgcHJvcGVydHkgaW4gY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgUmVzb3VyY2VNaXhpbi5cbiAgICAgIHJldHVybiB0aGlzLmdldFZlcmJzKClcbiAgICB9LFxuXG4gICAgcGFnaW5hdGlvblJhbmdlKCkge1xuICAgICAgLy8gT25seSBhcHBseSBwYWdpbmF0aW9uIHRvIGxpc3RzLlxuICAgICAgY29uc3QgeyBwYWdpbmF0ZTogYW1vdW50IH0gPSB0aGlzLnNvdXJjZVNjaGVtYVxuICAgICAgaWYgKHRoaXMuaXNMaXN0U291cmNlICYmIGFtb3VudCkge1xuICAgICAgICBjb25zdCB7IHBhZ2UgPSAwIH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcGFnZSAqIGFtb3VudFxuICAgICAgICByZXR1cm4gW3N0YXJ0LCBzdGFydCArIGFtb3VudCAtIDFdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHF1ZXJ5UGFyYW1zKCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnBhZ2luYXRpb25SYW5nZVxuICAgICAgY29uc3QgeyBwYWdlLCAuLi5xdWVyeSB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucXVlcnksIC8vIFF1ZXJ5IG1heSBvdmVycmlkZSBzY29wZS5cbiAgICAgICAgLi4uKHJhbmdlICYmIHtcbiAgICAgICAgICAvLyBQYXNzIHBhZ2luYXRpb24gYXMgcmFuZ2UsIHNvIHRoYXQgd2UgYXV0b21hdGljYWxseSBnZXQgT2JqZWN0aW9uJ3NcbiAgICAgICAgICAvLyByZXN1bHRzIGNvdW50aW5nOlxuICAgICAgICAgIHJhbmdlOiByYW5nZS5qb2luKCcsJylcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBXaGVuIGNyZWF0aW5nIG5lc3RlZCBkYXRhLCB3ZSBzdGlsbCBuZWVkIHRvIGNhbGwgc2V0dXBEYXRhKClcbiAgICBpZiAodGhpcy5wcm92aWRlc0RhdGEgfHwgdGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICB0aGlzLnNldHVwRGF0YSgpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRSZXNvdXJjZSgpIHtcbiAgICAgIC8vIFRoaXMgaXMgZGVmaW5lZCBhcyBhIG1ldGhvZCBzbyB0aGUgY29tcHV0ZWQgYHJlc291cmNlYCBnZXR0ZXIgY2FuXG4gICAgICAvLyBiZSBvdmVycmlkZGVuIGFuZCBgc3VwZXJgIGZ1bmN0aW9uYWxpdHkgY2FuIHN0aWxsIGJlIGFjY2Vzc2VkLlxuICAgICAgcmV0dXJuIGdldFJlc291cmNlKHRoaXMuc291cmNlU2NoZW1hPy5yZXNvdXJjZSwge1xuICAgICAgICB0eXBlOiAnY29sbGVjdGlvbicsXG4gICAgICAgIHBhcmVudDogdGhpcy5wYXJlbnRGb3JtQ29tcG9uZW50Py5yZXNvdXJjZSA/PyBudWxsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRWZXJicygpIHtcbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy4kdmVyYnMoKVxuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyB7XG4gICAgICAgICAgLi4udmVyYnMsXG4gICAgICAgICAgLy8gT3ZlcnJpZGUgZGVmYXVsdCB2ZXJicyB3aXRoIHRoZWlyIHRyYW5zaWVudCB2ZXJzaW9uczpcbiAgICAgICAgICBjcmVhdGU6ICdhZGQnLFxuICAgICAgICAgIGNyZWF0ZWQ6ICdhZGRlZCcsXG4gICAgICAgICAgc2F2ZTogJ2FwcGx5JyxcbiAgICAgICAgICBzYXZlZDogJ2FwcGxpZWQnLFxuICAgICAgICAgIGRlbGV0ZTogJ3JlbW92ZScsXG4gICAgICAgICAgZGVsZXRlZDogJ3JlbW92ZWQnXG4gICAgICAgIH1cbiAgICAgICAgOiB2ZXJic1xuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICAvLyBBY3R1YWwgY29kZSBpcyBpbiBzZXBhcmF0ZSBmdW5jdGlvbiBzbyBpdCdzIGVhc2VyIHRvIG92ZXJyaWRlXG4gICAgICAvLyBgc2V0dXBEYXRhKClgIGFuZCBhbmQgY2FsbCBgZW5zdXJlRGF0YSgpYCBmcm9tIHRoZSBvdmVycmlkZXMsXG4gICAgICAvLyBzZWUgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluLlxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgZW5zdXJlRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZExvYWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGF0YSkge1xuICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2FkRGF0YSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbG9hZERhdGEoKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgIH0sXG5cbiAgICBsb2FkRGF0YShjbGVhcikge1xuICAgICAgaWYgKCF0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIGlmIChjbGVhcikge1xuICAgICAgICAgIHRoaXMuY2xlYXJEYXRhKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlcXVlc3REYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIHJldHVybiBzZXREZWZhdWx0cyhzY2hlbWEsIHR5cGUgPyB7IHR5cGUgfSA6IHt9LCB0aGlzKVxuICAgIH0sXG5cbiAgICByZXF1ZXN0RGF0YSgpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5xdWVyeVBhcmFtc1xuICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KHsgbWV0aG9kOiAnZ2V0JywgcXVlcnkgfSwgKGVyciwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBkYXRhPy50eXBlID09PSAnRmlsdGVyVmFsaWRhdGlvbicgJiZcbiAgICAgICAgICAgICAgdGhpcy5vbkZpbHRlckVycm9ycz8uKGRhdGEuZXJyb3JzKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgIC8vIFRPRE86IENhbiB3ZSByZWFsbHkgc3dhbGxvdyB0aGVzZSBlcnJvcnM/XG4gICAgICAgICAgICAgIC8vIElzIGNhbGxpbmcgYGVuc3VyZVVzZXIoKWAgaW4gYG9uQmVmb3JlUmVxdWVzdCgpYCBlbm91Z2g/XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0RGF0YShyZXNwb25zZS5kYXRhKVxuICAgICAgICAgIHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdsb2FkJylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDBcbiAgICB9LFxuXG4gICAgaXNVbmF1dGhvcml6ZWRFcnJvcihyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMVxuICAgIH0sXG5cbiAgICBhc3luYyBoYW5kbGVSZXF1ZXN0KHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSxcbiAgICAgIHF1ZXJ5LFxuICAgICAgZGF0YVxuICAgIH0sIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBsb2FkaW5nT3B0aW9ucyA9IHtcbiAgICAgICAgdXBkYXRlUm9vdDogdHJ1ZSwgLy8gRGlzcGxheSBzcGlubmVyIGluIGhlYWRlciB3aGVuIGxvYWRpbmcgaW4gcmVzb3VyY2VzXG4gICAgICAgIHVwZGF0ZVZpZXc6IHRoaXMuaXNJblZpZXcgLy8gTm90aWZ5IHZpZXcgb2YgbG9hZGluZyBmb3IgdmlldyBjb21wb25lbnRzXG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICBjb25zdCByZXF1ZXN0ID0geyBtZXRob2QsIHJlc291cmNlLCBkYXRhLCBxdWVyeSB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdClcbiAgICAgICAgLy8gUGFzcyBib3RoIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHRvIHRoZSBjYWxsYmFjaywgc28gdGhleSBjYW4gYmVcbiAgICAgICAgLy8gZXhwb3NlZCB0byBmdXJ0aGVyIGNhbGxiYWNrcyB0aHJvdWdoIERpdG9Db250ZXh0LlxuICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSwgZXJyb3JzIHdlcmUgYWxyZWFkeSBoYW5kbGVkLlxuICAgICAgICBjb25zdCB7IHJlc3BvbnNlIH0gPSBlcnJvclxuICAgICAgICBpZiAoIWNhbGxiYWNrKGVycm9yLCByZXNwb25zZSkpIHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICBpZiAoZGF0YSAmJiBpc1N0cmluZyhkYXRhLnR5cGUpKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiBsYWJlbGl6ZShkYXRhLnR5cGUpLFxuICAgICAgICAgICAgICB0ZXh0OiBkYXRhLm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogZXJyb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgIH0sXG5cbiAgICBnZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZCkge1xuICAgICAgLy8gQ29udmVudGlvbjogb25seSBwb3N0LCBwdXQgYW5kIHBhdGNoIHJlcXVlc3RzIHBhc3MgdGhlIGRhdGEgYXMgcGF5bG9hZC5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmNsdWRlcyhtZXRob2QpICYmIChcbiAgICAgICAgICAvLyBUT0RPOiBVc2UgYGhhbmRsZURhdGFTY2hlbWEoKWAgYXN5bmNocm9ub3VzbHkgaGVyZSBpbnN0ZWFkLCB0b1xuICAgICAgICAgIC8vIG9mZmVyIHRoZSBzYW1lIGFtb3VudCBvZiBwb3NzaWJpbGl0aWVzIGZvciBkYXRhIGxvYWRpbmcuXG4gICAgICAgICAgYnV0dG9uLmdldFNjaGVtYVZhbHVlKFsncmVzb3VyY2UnLCAnZGF0YSddKSB8fFxuICAgICAgICAgIGJ1dHRvbi5wcm9jZXNzZWRJdGVtXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KGJ1dHRvbikge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5yZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCB7IG1ldGhvZCB9ID0gcmVzb3VyY2VcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpXG4gICAgICAgIHJldHVybiB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgIHNldERhdGEgPSBmYWxzZSxcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzID0gKCkgPT4gdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgIHRpdGxlOiAnUmVxdWVzdCBTdWNjZXNzZnVsJyxcbiAgICAgICAgdGV4dDogJ1JlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWxseSBzZW50LidcbiAgICAgIH0pLFxuICAgICAgbm90aWZ5RXJyb3IgPSBlcnJvciA9PiB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgIHRleHQ6IFtcbiAgICAgICAgICBgVW5hYmxlIHRvIHNlbmQgcmVxdWVzdCR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgIGVycm9yPy5tZXNzYWdlIHx8IGVycm9yXG4gICAgICAgIF1cbiAgICAgIH0pXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdChcbiAgICAgICAgICB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEgfSxcbiAgICAgICAgICBhc3luYyAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBEaXRvIHZhbGlkYXRpb24gZXJyb3I6XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpICYmIGRhdGEuZXJyb3JzXG4gICAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzT2JqZWN0KGRhdGEpID8gZGF0YSA6IGVyclxuICAgICAgICAgICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdW5kZXJseWluZyBkYXRhIGJlZm9yZSBjYWxsaW5nIGBub3RpZnkoKWAgb3JcbiAgICAgICAgICAgICAgLy8gYHRoaXMuaXRlbUxhYmVsYCwgc28gaWQgaXMgc2V0IGFmdGVyIGNyZWF0aW5nIG5ldyBpdGVtcy5cbiAgICAgICAgICAgICAgaWYgKHNldERhdGEgJiYgZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgZXZlbnQsIHsgbm90aWZ5LCBlcnJvciB9KSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgb3V0c2lkZSBvZiBgZW1pdEV2ZW50KClgLCBzbyB0aGF0XG4gICAgICAvLyBgY29udGV4dC53YXNOb3RpZmllZGAgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIuXG4gICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KGJ1dHRvbiwge1xuICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgIGl0ZW1MYWJlbDogdGhpcy5pdGVtTGFiZWwsXG4gICAgICAgIGVycm9yXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYnV0dG9uLmVtaXRFdmVudChldmVudCwgeyBjb250ZXh0IH0pXG4gICAgICBpZiAoXG4gICAgICAgIG5vdGlmeSAmJlxuICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgaWYgYW55dGhpbmcgd2FzIHJldHVybmVkIGZyb20gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIC8vIERvIG5vdCBkaXNwbGF5IGRlZmF1bHQgbm90aWZpY2F0aW9uIGlmIHRoZSBldmVudCBoYW5kbGVyIGFscmVhZHlcbiAgICAgICAgLy8gZGlzcGxheWVkIGEgbm90aWZpY2F0aW9uLlxuICAgICAgICAhY29udGV4dC53YXNOb3RpZmllZFxuICAgICAgKSB7XG4gICAgICAgIG5vdGlmeShlcnJvcilcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuKVxuICAvLyBOT1RFOiBOZXN0ZWQgZm9ybSBjb21wb25lbnRzIGFyZSBrZXB0IGFsaXZlIGJ5IHVzaW5nIGB2LXNob3dgIGluc3RlYWQgb2ZcbiAgLy8gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLyBlZGl0aW5nLiBPbmx5IHJlbmRlciBhIHJvdXRlci12aWV3IGhlcmUgaWYgdGhpcyBpc24ndCB0aGUgbGFzdCBkYXRhIHJvdXRlXG4gIC8vIGFuZCBub3QgYSBuZXN0ZWQgZm9ybSByb3V0ZSwgd2hpY2ggd2lsbCBhcHBlYXIgZWxzZXdoZXJlIGluIGl0cyBvd24gdmlldy5cbiAgcm91dGVyLXZpZXcoXG4gICAgdi1pZj1cIiEoaXNMYXN0VW5uZXN0ZWRSb3V0ZSB8fCBpc05lc3RlZFJvdXRlKVwiXG4gICAgdi1zaG93PVwiIWlzQWN0aXZlXCJcbiAgKVxuICAvLyBVc2UgYSA8ZGl2PiBmb3IgaW5saW5lZCBmb3JtcywgYXMgd2Ugc2hvdWxkbid0IG5lc3QgYWN0dWFsIDxmb3JtPiB0YWdzLlxuICBjb21wb25lbnQuZGl0by1zY3JvbGwoXG4gICAgdi1zaG93PVwiaXNBY3RpdmVcIlxuICAgIDppcz1cImlzTmVzdGVkUm91dGUgPyAnZGl2JyA6ICdmb3JtJ1wiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICAvLyBQcmV2ZW50IGltcGxpY2l0IHN1Ym1pc3Npb24gb2YgdGhlIGZvcm0sIGZvciBleGFtcGxlIHdoZW4gdHlwaW5nIGVudGVyXG4gICAgLy8gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxNTA3ODA2XG4gICAgYnV0dG9uKFxuICAgICAgdi1zaG93PVwiZmFsc2VcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBkaXNhYmxlZD1cInRydWVcIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICApXG4gICAgZGl0by1zY2hlbWEoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuKVxuICAvLyBOT1RFOiBOZXN0ZWQgZm9ybSBjb21wb25lbnRzIGFyZSBrZXB0IGFsaXZlIGJ5IHVzaW5nIGB2LXNob3dgIGluc3RlYWQgb2ZcbiAgLy8gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLyBlZGl0aW5nLiBPbmx5IHJlbmRlciBhIHJvdXRlci12aWV3IGhlcmUgaWYgdGhpcyBpc24ndCB0aGUgbGFzdCBkYXRhIHJvdXRlXG4gIC8vIGFuZCBub3QgYSBuZXN0ZWQgZm9ybSByb3V0ZSwgd2hpY2ggd2lsbCBhcHBlYXIgZWxzZXdoZXJlIGluIGl0cyBvd24gdmlldy5cbiAgcm91dGVyLXZpZXcoXG4gICAgdi1pZj1cIiEoaXNMYXN0VW5uZXN0ZWRSb3V0ZSB8fCBpc05lc3RlZFJvdXRlKVwiXG4gICAgdi1zaG93PVwiIWlzQWN0aXZlXCJcbiAgKVxuICAvLyBVc2UgYSA8ZGl2PiBmb3IgaW5saW5lZCBmb3JtcywgYXMgd2Ugc2hvdWxkbid0IG5lc3QgYWN0dWFsIDxmb3JtPiB0YWdzLlxuICBjb21wb25lbnQuZGl0by1zY3JvbGwoXG4gICAgdi1zaG93PVwiaXNBY3RpdmVcIlxuICAgIDppcz1cImlzTmVzdGVkUm91dGUgPyAnZGl2JyA6ICdmb3JtJ1wiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICAvLyBQcmV2ZW50IGltcGxpY2l0IHN1Ym1pc3Npb24gb2YgdGhlIGZvcm0sIGZvciBleGFtcGxlIHdoZW4gdHlwaW5nIGVudGVyXG4gICAgLy8gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxNTA3ODA2XG4gICAgYnV0dG9uKFxuICAgICAgdi1zaG93PVwiZmFsc2VcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBkaXNhYmxlZD1cInRydWVcIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICApXG4gICAgZGl0by1zY2hlbWEoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUsIGNhcGl0YWxpemUsIHBhcnNlRGF0YVBhdGgsIG1lcmdlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9SZXNvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzLCBpc09iamVjdFNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWZvcm0nLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW4sIFJlc291cmNlTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWF0ZWREYXRhOiBudWxsLFxuICAgICAgY2xvbmVkRGF0YTogdW5kZWZpbmVkLFxuICAgICAgc291cmNlS2V5OiBudWxsLFxuICAgICAgaXNGb3JtOiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBBZGQgc3VibWl0IC8gc3VibWl0dGVkIHRvIHRoZSB2ZXJicyByZXR1cm5lZCBieSBSZXNvdXJjZU1peGluXG4gICAgICAvLyBOT1RFOiBUaGVzZSBnZXQgcGFzc2VkIG9uIHRvIGNoaWxkcmVuIHRocm91Z2g6XG4gICAgICAvLyBgcHJvdmlkZSgpIC4uLiB7ICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyB9YCBpbiBSZXNvdXJjZU1peGluXG4gICAgICBjb25zdCB2ZXJicyA9IHRoaXMuZ2V0VmVyYnMoKVxuICAgICAgY29uc3QgeyBpc0NyZWF0aW5nLCBwcm92aWRlc0RhdGEgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnZlcmJzLFxuICAgICAgICBzdWJtaXQ6IGlzQ3JlYXRpbmcgPyB2ZXJicy5jcmVhdGUgOiB2ZXJicy5zYXZlLFxuICAgICAgICBzdWJtaXR0ZWQ6IGlzQ3JlYXRpbmcgPyB2ZXJicy5jcmVhdGVkIDogdmVyYnMuc2F2ZWQsXG4gICAgICAgIGNhbmNlbDogcHJvdmlkZXNEYXRhID8gdmVyYnMuY2FuY2VsIDogdmVyYnMuY2xvc2UsXG4gICAgICAgIGNhbmNlbGxlZDogcHJvdmlkZXNEYXRhID8gdmVyYnMuY2FuY2VsbGVkIDogdmVyYnMuY2xvc2VkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1Gb3JtU2NoZW1hKFxuICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGF0YSB5ZXQsIHByb3ZpZGUgYW4gZW1wdHkgb2JqZWN0IHdpdGgganVzdCB0aGUgcmlnaHRcbiAgICAgICAgLy8gdHlwZSBzZXQsIHNvIHRoZSBmb3JtIGNhbiBhbHdheXMgYmUgZGV0ZXJtaW5lZC5cbiAgICAgICAgdGhpcy5kYXRhIHx8IHsgdHlwZTogdGhpcy50eXBlIH0sXG4gICAgICAgIHRoaXMuY29udGV4dFxuICAgICAgKSB8fCB7fSAvLyBBbHdheXMgcmV0dXJuIGEgc2NoZW1hIG9iamVjdCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciBpdC5cbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKFxuICAgICAgICBtZXJnZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjYW5jZWw6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHN1Ym1pdDogIXRoaXMuZG9lc011dGF0ZSAmJiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICAgICAgICAvLyBTdWJtaXQgYnV0dG9ucyBjbG9zZSB0aGUgZm9ybSBieSBkZWZhdWx0OlxuICAgICAgICAgICAgICBjbG9zZUZvcm06IHRydWUsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoeyBjb21wb25lbnQ6IGJ1dHRvbiB9KSA9PiBidXR0b24uc3VibWl0KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5zY2hlbWEuYnV0dG9uc1xuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMYXN0Um91dGUgfHwgdGhpcy5pc0xhc3RVbm5lc3RlZFJvdXRlXG4gICAgfSxcblxuICAgIGlzVHJhbnNpZW50KCkge1xuICAgICAgcmV0dXJuICF0aGlzLnByb3ZpZGVzRGF0YVxuICAgIH0sXG5cbiAgICBpc0NyZWF0aW5nKCkge1xuICAgICAgLy8gdGhpcy5wYXJhbSBpcyBpbmhlcml0ZWQgZnJvbSBSb3V0ZU1peGluXG4gICAgICByZXR1cm4gdGhpcy5wYXJhbSA9PT0gJ2NyZWF0ZSdcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5kb2VzTXV0YXRlICYmICEhdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50Py5pc0RpcnR5XG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uc2VsZWN0ZWRUYWIgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBkb2VzTXV0YXRlKCkge1xuICAgICAgLy8gV2hlbiBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgdGhlIGZvcm0gZWRpdHMgdGhlIGluaGVyaXRlZCBkYXRhXG4gICAgICAvLyBkaXJlY3RseSBpbnN0ZWFkIG9mIG1ha2luZyBhIGNvcHkgZm9yIGFwcGxpY2F0aW9uIHVwb24gc3VibWl0LlxuICAgICAgLy8gU2VlIGBpbmhlcml0ZWREYXRhKClgIGNvbXB1dGVkIHByb3BlcnR5IGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gdGhpcy5zb3VyY2VTY2hlbWEubXV0YXRlXG4gICAgfSxcblxuICAgIHR5cGUoKSB7XG4gICAgICAvLyBUaGUgdHlwZSBvZiBmb3JtIHRvIGNyZWF0ZSwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGZvcm1zIHRvIGNob29zZSBmcm9tLlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnF1ZXJ5LnR5cGVcbiAgICB9LFxuXG4gICAgaXRlbUlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IG51bGxcbiAgICAgICAgOiAodGhpcy5wYXJhbSA/PyBudWxsKVxuICAgIH0sXG5cbiAgICBtZXRob2QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nID8gJ3Bvc3QnIDogJ3BhdGNoJ1xuICAgIH0sXG5cbiAgICByZXNvdXJjZSgpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5nZXRSZXNvdXJjZSgpXG4gICAgICByZXR1cm4gZ2V0TWVtYmVyUmVzb3VyY2UodGhpcy5pdGVtSWQsIHJlc291cmNlKSB8fCByZXNvdXJjZVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuIGNhcGl0YWxpemUodGhpcy5pc0NyZWF0aW5nID8gdGhpcy52ZXJicy5jcmVhdGUgOiB0aGlzLnZlcmJzLmVkaXQpXG4gICAgfSxcblxuICAgIGRhdGEoKSB7XG4gICAgICAvLyBSZXR1cm4gZGlmZmVyZW50IGRhdGEgXCJjb250YWluZXJzXCIgYmFzZWQgb24gZGlmZmVyZW50IHNjZW5hcmlvczpcbiAgICAgIC8vIDEuIGNyZWF0ZWREYXRhLCBpZiB3ZSdyZSBpbiBhIGZvcm0gZm9yIGEgbmV3bHkgY3JlYXRlZCBvYmplY3QuXG4gICAgICAvLyAyLiBsb2FkZWREYXRhLCBpZiB0aGUgZm9ybSBpdHNlbGYgaXMgdGhlIHJvb3Qgb2YgdGhlIGRhdGEgKGUuZy4gd2hlblxuICAgICAgLy8gICAgZGlyZWN0bHkgbG9hZGluZyBhbiBlZGl0aW5nIHJvb3QpLlxuICAgICAgLy8gMy4gVGhlIGRhdGEgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCwgd2hpY2ggaXRzZWxmIG1heSBiZSBlaXRoZXIgYVxuICAgICAgLy8gICAgdmlldyB0aGF0IGxvYWRlZCB0aGUgZGF0YSwgb3IgYSBmb3JtIHRoYXQgZWl0aGVyIGxvYWRlZCB0aGUgZGF0YSwgb3JcbiAgICAgIC8vICAgIGFsc28gaW5oZXJpdGVkIGl0IGZyb20gaXRzIHBhcmVudC4gTm90ZSB0aGF0IHdlIHVzZSBhIGNsb25lIG9mIGl0LFxuICAgICAgLy8gICAgc28sIGRhdGEgY2hhbmdlcyBhcmVuJ3QgYXBwbGllZCB1bnRpbCBzZXRTb3VyY2VEYXRhKCkgaXMgY2FsbGVkLlxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlZERhdGEgfHwgdGhpcy5sb2FkZWREYXRhIHx8IHRoaXMuaW5oZXJpdGVkRGF0YSB8fCBudWxsXG4gICAgfSxcblxuICAgIGRhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YVBhdGhGcm9tKHRoaXMuZGF0YUNvbXBvbmVudClcbiAgICB9LFxuXG4gICAgc291cmNlRGF0YSgpIHtcbiAgICAgIC8vIFBvc3NpYmxlIHBhcmVudHMgYXJlIERpdG9Gb3JtIGZvciBmb3Jtcywgb3IgRGl0b1ZpZXcgZm9yIHJvb3QgbGlzdHMuXG4gICAgICAvLyBCb3RoIGhhdmUgYSBkYXRhIHByb3BlcnR5IHdoaWNoIGFic3RyYWN0cyBhd2F5IGxvYWRpbmcgYW5kIGluaGVyaXRpbmdcbiAgICAgIC8vIG9mIGRhdGEuXG4gICAgICBsZXQgeyBkYXRhIH0gPSB0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICAvLyBIYW5kbGUgbmVzdGVkIGRhdGEgYnkgc3BsaXR0aW5nIHRoZSBkYXRhUGF0aCwgaXRlcmF0ZSB0aHJvdWdoIHRoZVxuICAgICAgICAvLyBhY3R1YWwgZGF0YSBhbmQgbG9vayBuZXN0IGNoaWxkLWRhdGEgdXAuXG4gICAgICAgIGNvbnN0IGRhdGFQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoXG4gICAgICAgICAgdGhpcy5nZXREYXRhUGF0aEZyb20odGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudClcbiAgICAgICAgKVxuICAgICAgICAvLyBDb21wYXJlIGRhdGFQYXJ0cyBhZ2FpbnN0IG1hdGNoZWQgcm91dGVQYXRoIHBhcnRzLCB0byBpZGVudGlmeSB0aG9zZVxuICAgICAgICAvLyBwYXJ0cyB0aGF0IG5lZWQgdG8gYmUgdHJlYXRlZCBsaWtlIGlkcyBhbmQgbWFwcGVkIHRvIGluZGljZXMgaW4gZGF0YS5cbiAgICAgICAgY29uc3QgcGF0aFBhcnRzID0gdGhpcy5yb3V0ZVJlY29yZC5wYXRoLnNwbGl0KCcvJylcbiAgICAgICAgY29uc3Qgcm91dGVQYXJ0cyA9IHBhdGhQYXJ0cy5zbGljZShwYXRoUGFydHMubGVuZ3RoIC0gZGF0YVBhcnRzLmxlbmd0aClcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBudWxsXG4gICAgICAgIGNvbnN0IGxhc3REYXRhUGFydCA9IGRhdGFQYXJ0c1tkYXRhUGFydHMubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKSAmJiBsYXN0RGF0YVBhcnQgPT09ICdjcmVhdGUnKSB7XG4gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBvYmplY3Qgc291cmNlIGFuZCBhcmUgY3JlYXRpbmcsIHRoZSBkYXRhUGF0aCBuZWVkcyB0b1xuICAgICAgICAgIC8vIGJlIHNob3J0ZW5lZCBieSB0aGUgJ2NyZWF0ZScgZW50cnkuIFRoaXMgaXNuJ3QgbmVlZGVkIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcywgYXMgdGhlcmUgdGhlIHBhcmFtZXRlciBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlIGl0ZW0gaWQuXG4gICAgICAgICAgZGF0YVBhcnRzLmxlbmd0aC0tXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBkYXRhUGFydHMubGVuZ3RoOyBpIDwgbCAmJiBkYXRhOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRhUGFydCA9IGRhdGFQYXJ0c1tpXVxuICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gOmlkIHBhcnQsIGZpbmQgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdpdGggZ2l2ZW4gaWQuXG4gICAgICAgICAgY29uc3Qga2V5ID0gL146aWQvLnRlc3Qocm91dGVQYXJ0c1tpXSlcbiAgICAgICAgICAgID8gZGF0YVBhcnQgPT09ICdjcmVhdGUnXG4gICAgICAgICAgICAgID8gbnVsbCAvLyBUaGVyZSdzIG5vIGluZGV4IGZvciBlbnRyaWVzIGFib3V0IHRvIGJlIGNyZWF0ZWRcbiAgICAgICAgICAgICAgOiB0aGlzLmZpbmRJdGVtSWRJbmRleCh0aGlzLnNvdXJjZVNjaGVtYSwgZGF0YSwgZGF0YVBhcnQpXG4gICAgICAgICAgICA6IGRhdGFQYXJ0XG4gICAgICAgICAgLy8gU2tpcCB0aGUgZmluYWwgbG9va3VwIGJ1dCByZW1lbWJlciBgc291cmNlS2V5YCwgYXMgd2Ugd2FudCB0aGVcbiAgICAgICAgICAvLyBwYXJlbnQgZGF0YSBzbyB3ZSBjYW4gcmVwbGFjZSB0aGUgZW50cnkgYXQgYHNvdXJjZUtleWAgb24gaXQuXG4gICAgICAgICAgaWYgKGkgPT09IGwgLSAxKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUtleSA9IGtleVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gZGF0YVtrZXldXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBpbmhlcml0ZWREYXRhKCkge1xuICAgICAgLy8gRGF0YSBpbmhlcml0ZWQgZnJvbSBwYXJlbnQsIGFuZCBjbG9uZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHJlYWN0aXZlXG4gICAgICAvLyBjaGFuZ2VzIHVudGlsIGNoYW5nZXMgYXJlIGFwcGxpZWQgdGhyb3VnaCBzZXRTb3VyY2VEYXRhKCksIHVubGVzc1xuICAgICAgLy8gYHNvdXJjZVNjaGVtYS5tdXRhdGVgIGlzIHRydWUsIGluIHdoaWNoIGNhc2UgZGF0YSBpcyBtdXRhdGVkIGRpcmVjdGx5LlxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHRoaXMuc291cmNlRGF0YSAmJlxuICAgICAgICB0aGlzLnNvdXJjZUtleSAhPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5zb3VyY2VEYXRhW3RoaXMuc291cmNlS2V5XVxuICAgICAgICBpZiAoIXRoaXMuZG9lc011dGF0ZSkge1xuICAgICAgICAgIC8vIFVzZSBhIHRyaWNrIHRvIHN0b3JlIGNsb25lZCBpbmhlcml0ZWQgZGF0YSBpbiBjbG9uZWREYXRhLCB0byBtYWtlXG4gICAgICAgICAgLy8gaXQgcmVhY3RpdmUgYW5kIHByZXZlbnQgaXQgZnJvbSBiZWluZyBjbG9uZWQgbXVsdGlwbGUgdGltZXMuXG4gICAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gZGF0YSA9IGNsb25lKGRhdGEpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRhdGEgPT09IG51bGwgJiZcbiAgICAgICAgICAhdGhpcy5pc0NyZWF0aW5nICYmXG4gICAgICAgICAgaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIElmIGRhdGEgb2YgYW4gb2JqZWN0IHNvdXJjZSBpcyBudWxsLCByZWRpcmVjdCB0byBpdHMgY3JlYXRlIHJvdXRlLlxuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgcGF0aDogJ2NyZWF0ZScsIGFwcGVuZDogdHJ1ZSB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jbG9uZWREYXRhXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaXRlbUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc291cmNlU2NoZW1hLCB0aGlzLmRhdGEsIHsgZXh0ZW5kZWQ6IHRydWUgfSlcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBzb3VyY2VEYXRhOiAnY2xlYXJDbG9uZWREYXRhJyxcbiAgICAvLyBOZWVkZWQgZm9yIHRoZSAnY3JlYXRlJyByZWRpcmVjdCBpbiBgaW5oZXJpdGVkRGF0YSgpYCB0byB3b3JrOlxuICAgIGNyZWF0ZTogJ3NldHVwRGF0YSdcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZW1pdFNjaGVtYUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfSxcblxuICAgIGdldERhdGFQYXRoRnJvbShyb3V0ZSkge1xuICAgICAgLy8gR2V0IHRoZSBkYXRhIHBhdGggYnkgZGVub3JtYWxpemVQYXRoIHRoZSByZWxhdGl2ZSByb3V0ZSBwYXRoXG4gICAgICByZXR1cm4gdGhpcy5hcGkuZGVub3JtYWxpemVQYXRoKHRoaXMucGF0aFxuICAgICAgICAvLyBEaXRvVmlld3MgaGF2ZSBuZXN0ZWQgcm91dGVzLCBzbyBkb24ndCByZW1vdmUgdGhlaXIgcGF0aC5cbiAgICAgICAgLnNsaWNlKChyb3V0ZS5pc1ZpZXcgPyAwIDogcm91dGUucGF0aC5sZW5ndGgpICsgMSkpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldHVwRGF0YSgpXG4gICAgc2V0dXBEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhID0gdGhpcy5jcmVhdGVkRGF0YSB8fFxuICAgICAgICAgIHRoaXMuY3JlYXRlRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy50eXBlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0U291cmNlRGF0YShkYXRhKSB7XG4gICAgICBpZiAodGhpcy5zb3VyY2VEYXRhICYmIHRoaXMuc291cmNlS2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHsgbWFpblNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgICB0aGlzLiRzZXQoXG4gICAgICAgICAgdGhpcy5zb3VyY2VEYXRhLFxuICAgICAgICAgIHRoaXMuc291cmNlS2V5LFxuICAgICAgICAgIG1haW5TY2hlbWFDb21wb25lbnQuZmlsdGVyRGF0YShkYXRhKVxuICAgICAgICApXG4gICAgICAgIG1haW5TY2hlbWFDb21wb25lbnQub25DaGFuZ2UoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFkZFNvdXJjZURhdGEoZGF0YSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICA/IHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgICA6ICEhdGhpcy5zb3VyY2VEYXRhPy5wdXNoKGRhdGEpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy5zZXREYXRhKG51bGwpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gc2V0RGF0YSgpIGlzIGNhbGxlZCBhZnRlciBzdWJtaXQgd2hlbiBkYXRhIGhhcyBjaGFuZ2VkLlxuICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgLy8gRm9yIGNvbXBvbmVudHMgd2l0aCB0cmFuc2llbnQgZGF0YSwgbW9kaWZ5IHRoaXMuc291cmNlRGF0YS5cbiAgICAgICAgdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhID0gbnVsbFxuICAgICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyQ2xvbmVkRGF0YShuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgIC8vIE9ubHkgY2xlYXIgaWYgdGhlIHdhdGNoZWQgc291cmNlRGF0YSBpdHNlbGYgY2hhbmdlcyBpbiB0aGUgZm9ybS5cbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsb3NlKClcbiAgICB9LFxuXG4gICAgYXN5bmMgY2xvc2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50LnBhdGgpXG4gICAgfSxcblxuICAgIGdldFN1Ym1pdFZlcmIocHJlc2VudCA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBwcmVzZW50ID8gJ2NyZWF0ZScgOiAnY3JlYXRlZCdcbiAgICAgICAgOiBwcmVzZW50ID8gJ3N1Ym1pdCcgOiAnc3VibWl0dGVkJ1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uLCB7IHZhbGlkYXRlID0gdHJ1ZSwgY2xvc2VGb3JtID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAodmFsaWRhdGUgJiYgIXRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2V0VmVyYiA9IHByZXNlbnQgPT4gdGhpcy52ZXJic1t0aGlzLmdldFN1Ym1pdFZlcmIocHJlc2VudCldXG5cbiAgICAgIC8vIEFsbG93IGJ1dHRvbnMgdG8gb3ZlcnJpZGUgYm90aCBtZXRob2QgYW5kIHJlc291cmNlIHBhdGggdG8gc3VibWl0IHRvOlxuICAgICAgY29uc3QgYnV0dHRvblJlc291cmNlID0gZ2V0UmVzb3VyY2UoYnV0dG9uLnNjaGVtYS5yZXNvdXJjZSwge1xuICAgICAgICBwYXJlbnQ6IHRoaXMucmVzb3VyY2VcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXNvdXJjZSA9IGJ1dHR0b25SZXNvdXJjZSB8fCB0aGlzLnJlc291cmNlXG4gICAgICBjb25zdCBtZXRob2QgPSByZXNvdXJjZT8ubWV0aG9kIHx8IHRoaXMubWV0aG9kXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgIGxldCBzdWNjZXNzXG4gICAgICBpZiAoIWJ1dHR0b25SZXNvdXJjZSAmJiB0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zaWVudChidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KHRoaXMuZ2V0U3VibWl0VmVyYigpKSxcbiAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgICBjb250ZXh0OiB7IGVycm9yIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBub3RpZnlTdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgICAgICB0aXRsZTogdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgPyBgSXRlbSAke2NhcGl0YWxpemUodmVyYil9YFxuICAgICAgICAgICAgICAgIDogYENoYW5nZSAke2NhcGl0YWxpemUodmVyYil9YCxcbiAgICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICAgICAgICAgICAgPyBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgICAgICAgOiBgQ2hhbmdlcyB0byAke3RoaXMuaXRlbUxhYmVsfSB3ZXJlICR7dmVyYn0uYCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaWVudE5vdGVcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5zdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBzZXREYXRhOiB0cnVlLFxuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgIHRpdGxlOiBgU3VjY2Vzc2Z1bGx5ICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byAke3ZlcmJ9ICR7dGhpcy5pdGVtTGFiZWx9JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICAgIGlmIChjbG9zZUZvcm0gfHwgYnV0dG9uLmNsb3NlRm9ybSkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICAgIC8vIFJlZGlyZWN0IHRvIHRoZSBmb3JtIGVkaXRpbmcgdGhlIG5ld2x5IGNyZWF0ZWQgaXRlbTpcbiAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBwYXRoOiBgLi4vJHtpZH1gLCBhcHBlbmQ6IHRydWUgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgX3Jlc291cmNlLCBfbWV0aG9kLCBkYXRhLCB7XG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBvbkVycm9yLFxuICAgICAgbm90aWZ5U3VjY2VzcyxcbiAgICAgIG5vdGlmeUVycm9yXG4gICAgfSkge1xuICAgICAgLy8gSGFuZGxlIHRoZSBkZWZhdWx0IFwic3VibWl0dGluZ1wiIG9mIHRyYW5zaWVudCwgbmVzdGVkIGRhdGE6XG4gICAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gdGhpcy5hZGRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICBvblN1Y2Nlc3M/LigpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ3N1Y2Nlc3MnLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlTdWNjZXNzXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnJvciA9ICdDb3VsZCBub3Qgc3VibWl0IHRyYW5zaWVudCBpdGVtJ1xuICAgICAgICBvbkVycm9yPy4oZXJyb3IpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tZm9ybS1uZXN0ZWRcbiAgICAmLFxuICAgIC5kaXRvLXNjcm9sbFxuICAgICAgLy8gTm8gc2Nyb2xsaW5nIGluc2lkZSBuZXN0ZWQgZm9ybXMsIGFuZCBwcmV2ZW50IG9wZW4gLm11bHRpc2VsZWN0IGZyb21cbiAgICAgIC8vIGJlaW5nIGNyb3BwZWQuXG4gICAgICBvdmVyZmxvdzogdmlzaWJsZVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvRm9ybSBmcm9tICcuL0RpdG9Gb3JtLnZ1ZSdcblxuZXhwb3J0IGRlZmF1bHQgRGl0b0Zvcm0uY29tcG9uZW50KCdkaXRvLWZvcm0tbmVzdGVkJywge30pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tZXJyb3JzKFxuICB2LWlmPVwiZXJyb3JzXCJcbilcbiAgdWxcbiAgICBsaSh2LWZvcj1cImVycm9yIG9mIGVycm9yc1wiKVxuICAgICAgfCB7eyBlcnJvciB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tZXJyb3JzKFxuICAgIHYtaWY9XCJlcnJvcnNcIlxuICApXG4gICAgdWxcbiAgICAgIGxpKHYtZm9yPVwiZXJyb3Igb2YgZXJyb3JzXCIpXG4gICAgICAgIHwge3sgZXJyb3IgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1lcnJvcnNcbiAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICB6LWluZGV4OiAxXG4gICAgdWxcbiAgICAgIG1hcmdpbi10b3A6IDFweFxuICAgICAgY29sb3I6ICRjb2xvci1lcnJvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lcnJvcnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZXJyb3JzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zY29wZXNcbiAgcm91dGVyLWxpbmsoXG4gICAgdi1mb3I9XCIoc2NvcGUsIGtleSkgaW4gc2NvcGVzXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICA6dG89XCJnZXRTY29wZUxpbmsoc2NvcGUpXCJcbiAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgOnRpdGxlPVwic2NvcGUuaGludCB8fCBnZXRMYWJlbChzY29wZSlcIlxuICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zY29wZXNcbiAgICByb3V0ZXItbGluayhcbiAgICAgIHYtZm9yPVwiKHNjb3BlLCBrZXkpIGluIHNjb3Blc1wiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDp0bz1cImdldFNjb3BlTGluayhzY29wZSlcIlxuICAgICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgICA6dGl0bGU9XCJzY29wZS5oaW50IHx8IGdldExhYmVsKHNjb3BlKVwiXG4gICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tc2NvcGVzXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1idXR0b25cbiAgICAgICtlbGxpcHNpc1xuICAgICAgYm9yZGVyLXJhZGl1czogMFxuICAgICAgLy8gQSBiaXQgbW9yZSB0aGFuIHRoZSB3aWR0aCBvZiBlbGxpcHNpcywgdG8gcHJldmVudCByZXBsYWNpbmcgc2hvcnQgd29yZHNcbiAgICAgIC8vIHdpdGggZWxsaXBzaXMuXG4gICAgICBtaW4td2lkdGg6IDNlbVxuICAgICAgZmxleDogMCAxIGF1dG9cbiAgICAgICY6Zmlyc3QtY2hpbGRcbiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMWVtXG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDFlbVxuICAgICAgICBwYWRkaW5nLWxlZnQ6IDFlbVxuICAgICAgJjpsYXN0LWNoaWxkXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxZW1cbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDFlbVxuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxZW1cbiAgICAgICYgKyAuZGl0by1idXR0b25cbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xcHhcbiAgICAgIC8vIERvbid0IGNvdmVyIHRoZSBmb2N1c2VkIGJvcmRlciBvZiBidXR0b25zOlxuICAgICAgJjpmb2N1c1xuICAgICAgICB6LWluZGV4OiAxXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXNjb3BlcycsIHtcbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NvcGVzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRTY29wZUxpbmsoc2NvcGUpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0geyAuLi50aGlzLnF1ZXJ5LCBzY29wZTogc2NvcGUubmFtZSB9XG4gICAgICBpZiAocXVlcnkucGFnZSkge1xuICAgICAgICBxdWVyeS5wYWdlID0gMFxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlMaW5rKHF1ZXJ5KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5wYWdpbmF0aW9uKFxuICA6cGFnZVNpemU9XCJsaW1pdFwiXG4gIDp0b3RhbD1cInRvdGFsXCJcbiAgOnBhZ2Uuc3luYz1cInBhZ2VcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgcGFnaW5hdGlvbihcbiAgICA6cGFnZVNpemU9XCJsaW1pdFwiXG4gICAgOnRvdGFsPVwidG90YWxcIlxuICAgIDpwYWdlLnN5bmM9XCJwYWdlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IFBhZ2luYXRpb24gfSBmcm9tICdAZGl0b2pzL3VpJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhZ2luYXRpb24nLCB7XG4gIGNvbXBvbmVudHM6IHsgUGFnaW5hdGlvbiB9LFxuXG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxpbWl0OiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhZ2U6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICgrdGhpcy5xdWVyeS5wYWdlIHx8IDApICsgMVxuICAgICAgfSxcblxuICAgICAgc2V0KHBhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMucGFnZSAhPT0gcGFnZSkge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHRoaXMuZ2V0UXVlcnlMaW5rKHtcbiAgICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgICBwYWdlOiAocGFnZSAtIDEpXG4gICAgICAgICAgfSkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0l0ZW1NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkcmFnZ2luZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uU3RhcnREcmFnKCkge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWVcbiAgICB9LFxuXG4gICAgb25FbmREcmFnKHsgb2xkSW5kZXgsIG5ld0luZGV4IH0pIHtcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZVxuICAgICAgaWYgKG9sZEluZGV4ICE9PSBuZXdJbmRleCkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0LCBwYWdpbmF0aW9uUmFuZ2UpIHtcbiAgICAgIGNvbnN0IHsgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICAgIC8vIFJlb3JkZXIgdGhlIGNoYW5nZWQgZW50cmllcyBieSB0aGVpciBvcmRlciBrZXksIHRha2luZyBwYWdpbmF0aW9uXG4gICAgICAgIC8vIG9mZnNldHMgaW50byBhY2NvdW50OlxuICAgICAgICBjb25zdCBvZmZzZXQgPSBwYWdpbmF0aW9uUmFuZ2U/LlswXSB8fCAwXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxpc3RbaV1bb3JkZXJLZXldID0gaSArIG9mZnNldFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by10cmVlLWl0ZW0oXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tZHJhZ2dpbmcnOiBkcmFnZ2luZyxcbiAgICAnZGl0by1hY3RpdmUnOiBhY3RpdmVcbiAgfWBcbiAgOnN0eWxlPVwibGV2ZWwgPiAwICYmIHsgJy0tbGV2ZWwnOiBsZXZlbCB9XCJcbilcbiAgLmRpdG8tdHJlZS1oZWFkZXIodi1pZj1cImxhYmVsXCIpXG4gICAgLmRpdG8tdHJlZS1icmFuY2goXG4gICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICBAY2xpY2suc3RvcD1cIm9wZW5lZCA9ICFvcGVuZWRcIlxuICAgIClcbiAgICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiBvcGVuZWQgfVwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgICAuZGl0by10cmVlLWluZm8odi1pZj1cImRldGFpbHNcIikge3sgZGV0YWlscyB9fVxuICAgIC5kaXRvLXRyZWUtbGVhZih2LWVsc2UpXG4gICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtc21hbGwodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgQGNsaWNrPVwib25FZGl0XCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgQGNsaWNrPVwib25EZWxldGVcIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgKVxuICB0YWJsZS5kaXRvLXByb3BlcnRpZXMoXG4gICAgdi1pZj1cInByb3BlcnRpZXNcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gIClcbiAgICB0cihcbiAgICAgIHYtZm9yPVwicHJvcGVydHkgaW4gcHJvcGVydGllc1wiXG4gICAgKVxuICAgICAgdGRcbiAgICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgICB2LWlmPVwicHJvcGVydHkubGFiZWwgIT09IGZhbHNlXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgICAgOmxhYmVsPVwiZ2V0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgKVxuICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICA6Y2VsbD1cInByb3BlcnR5XCJcbiAgICAgICAgOnNjaGVtYT1cInByb3BlcnR5XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbiAgdnVlLWRyYWdnYWJsZShcbiAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoY2hpbGRyZW5EcmFnZ2FibGUsIHRydWUpXCJcbiAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QpXCJcbiAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgQGVuZD1cIm9uRW5kRHJhZygkZXZlbnQsIGNoaWxkcmVuU2NoZW1hKVwiXG4gIClcbiAgICBkaXRvLXRyZWUtaXRlbShcbiAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBjaGlsZHJlbkl0ZW1zXCJcbiAgICAgIDprZXk9XCJnZXRJdGVtVWlkKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEpXCJcbiAgICAgIDpzY2hlbWE9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJnZXRJdGVtRGF0YVBhdGgoY2hpbGRyZW5TY2hlbWEsIGluZGV4KVwiXG4gICAgICA6ZGF0YT1cIml0ZW0uZGF0YVwiXG4gICAgICA6cGF0aD1cIml0ZW0ucGF0aFwiXG4gICAgICA6b3Blbj1cIml0ZW0ub3BlblwiXG4gICAgICA6YWN0aXZlPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgOmRyYWdnYWJsZT1cImNoaWxkcmVuRHJhZ2dhYmxlXCJcbiAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhLCB7IGluZGV4IH0pXCJcbiAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiXG4gICAgKVxuICAgIC8vIFRPRE86IENvbnZlcnQgZGl0by10cmVlLWl0ZW0gdG8gdXNlIGRpdG8tbGFiZWwgaW50ZXJuYWxseSwgYW5kIHRoZW5cbiAgICAvLyBwYXNzIGBhc09iamVjdDogdHJ1ZWAgaW4gdGhlIGBnZXRJdGVtTGFiZWwoKWAgY2FsbCBhYm92ZS5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRyZWUtaXRlbShcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPWB7XG4gICAgICAnZGl0by1kcmFnZ2luZyc6IGRyYWdnaW5nLFxuICAgICAgJ2RpdG8tYWN0aXZlJzogYWN0aXZlXG4gICAgfWBcbiAgICA6c3R5bGU9XCJsZXZlbCA+IDAgJiYgeyAnLS1sZXZlbCc6IGxldmVsIH1cIlxuICApXG4gICAgLmRpdG8tdHJlZS1oZWFkZXIodi1pZj1cImxhYmVsXCIpXG4gICAgICAuZGl0by10cmVlLWJyYW5jaChcbiAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICBAY2xpY2suc3RvcD1cIm9wZW5lZCA9ICFvcGVuZWRcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6IG9wZW5lZCB9XCJcbiAgICAgICAgKVxuICAgICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgICAgIC5kaXRvLXRyZWUtaW5mbyh2LWlmPVwiZGV0YWlsc1wiKSB7eyBkZXRhaWxzIH19XG4gICAgICAuZGl0by10cmVlLWxlYWYodi1lbHNlKVxuICAgICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbCh2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIilcbiAgICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgICAgKVxuICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBAY2xpY2s9XCJvbkVkaXRcIlxuICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICAgICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBAY2xpY2s9XCJvbkRlbGV0ZVwiXG4gICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgKVxuICAgIHRhYmxlLmRpdG8tcHJvcGVydGllcyhcbiAgICAgIHYtaWY9XCJwcm9wZXJ0aWVzXCJcbiAgICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwicHJvcGVydHkgaW4gcHJvcGVydGllc1wiXG4gICAgICApXG4gICAgICAgIHRkXG4gICAgICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgICAgIHYtaWY9XCJwcm9wZXJ0eS5sYWJlbCAhPT0gZmFsc2VcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICAgICAgOmxhYmVsPVwiZ2V0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgICApXG4gICAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgICA6Y2VsbD1cInByb3BlcnR5XCJcbiAgICAgICAgICA6c2NoZW1hPVwicHJvcGVydHlcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgKVxuICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGNoaWxkcmVuRHJhZ2dhYmxlLCB0cnVlKVwiXG4gICAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QpXCJcbiAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgIEBlbmQ9XCJvbkVuZERyYWcoJGV2ZW50LCBjaGlsZHJlblNjaGVtYSlcIlxuICAgIClcbiAgICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gY2hpbGRyZW5JdGVtc1wiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEpXCJcbiAgICAgICAgOnNjaGVtYT1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0SXRlbURhdGFQYXRoKGNoaWxkcmVuU2NoZW1hLCBpbmRleClcIlxuICAgICAgICA6ZGF0YT1cIml0ZW0uZGF0YVwiXG4gICAgICAgIDpwYXRoPVwiaXRlbS5wYXRoXCJcbiAgICAgICAgOm9wZW49XCJpdGVtLm9wZW5cIlxuICAgICAgICA6YWN0aXZlPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSwgeyBpbmRleCB9KVwiXG4gICAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiXG4gICAgICApXG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IGRpdG8tdHJlZS1pdGVtIHRvIHVzZSBkaXRvLWxhYmVsIGludGVybmFsbHksIGFuZCB0aGVuXG4gICAgICAvLyBwYXNzIGBhc09iamVjdDogdHJ1ZWAgaW4gdGhlIGBnZXRJdGVtTGFiZWwoKWAgY2FsbCBhYm92ZS5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by10cmVlLWl0ZW1cbiAgICAtLWNoZXZyb24taW5kZW50OiAjeyRjaGV2cm9uLWluZGVudH1cbiAgICA+IC5kaXRvLXRyZWUtaGVhZGVyXG4gICAgICA+IC5kaXRvLXRyZWUtYnJhbmNoLFxuICAgICAgPiAuZGl0by10cmVlLWxlYWZcbiAgICAgICAgLy8gVXNlIGAtLWxldmVsYCBDU1MgdmFyaWFibGUgdG8gY2FsY3VsYXRlZCB0aGUgYWNjdW11bGF0ZWQgaW5kZW50XG4gICAgICAgIC8vIHBhZGRpbmcgZGlyZWN0bHkgaW5zdGVhZCBvZiBoYXZpbmcgaXQgYWNjdW11bGF0ZSBpbiBuZXN0ZWQgQ1NTLlxuICAgICAgICAvLyBUaGlzIHdheSwgd2UgY2FuIGtlZXAgdGhlIC5kaXRvLWFjdGl2ZSBhcmVhIGNvdmVyIHRoZSBmdWxsIHdpZHRoOlxuICAgICAgICBwYWRkaW5nLWxlZnQ6IGNhbGModmFyKC0tY2hldnJvbi1pbmRlbnQpICogKHZhcigtLWxldmVsLCAxKSAtIDEpKVxuICAgIC5kaXRvLXRyZWUtYnJhbmNoXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by10cmVlLWhlYWRlclxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgLmRpdG8tdHJlZS1icmFuY2gsXG4gICAgLmRpdG8tdHJlZS1sZWFmXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBmbGV4OiBhdXRvXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgIG1hcmdpbjogMXB4IDBcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIC5kaXRvLXRyZWUtbGFiZWwsXG4gICAgLmRpdG8tdHJlZS1pbmZvXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgLmRpdG8tdHJlZS1pbmZvXG4gICAgICBwYWRkaW5nLWxlZnQ6IDAuMzVlbVxuICAgICAgY29sb3I6IHJnYmEoJGNvbG9yLWJsYWNrLCAuMilcbiAgICAuZGl0by1idXR0b25zXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW5cbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgbWFyZ2luLWxlZnQ6IDFlbVxuICAgICAgbWFyZ2luOiAxcHggMCAxcHggMWVtXG4gICAgLmRpdG8tdHJlZS1oZWFkZXI6aG92ZXJcbiAgICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlXG4gICAgLy8gSGlkZSBidXR0b25zIGR1cmluZyBkcmFnZ2luZ1xuICAgICYuZGl0by1kcmFnZ2luZ1xuICAgICAgLmRpdG8tdHJlZS1oZWFkZXJcbiAgICAgICAgPiAuZGl0by1idXR0b25zXG4gICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuXG4gICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgPiAuZGl0by10cmVlLWhlYWRlclxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIHBhZGRpbmc6IDAgJGlucHV0LXBhZGRpbmctaG9yXG4gICAgICAgIG1hcmdpbjogMCAoLSRpbnB1dC1wYWRkaW5nLWhvcilcbiAgICAgICAgPiAuZGl0by10cmVlLWJyYW5jaFxuICAgICAgICAgID4gLmRpdG8tY2hldnJvbjo6YmVmb3JlXG4gICAgICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgICAgPiAqID4gLmRpdG8tdHJlZS1sYWJlbFxuICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAuZGl0by1wcm9wZXJ0aWVzXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgbWFyZ2luLWxlZnQ6ICRjaGV2cm9uLWluZGVudFxuICAgICAgPiB0clxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmVcbiAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICAmOjphZnRlclxuICAgICAgICAgIGNvbnRlbnQ6ICc6ICdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVnVlRHJhZ2dhYmxlIGZyb20gJ3Z1ZWRyYWdnYWJsZSdcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBoYXNGb3JtU2NoZW1hIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdHJlZS1pdGVtJywge1xuICBjb21wb25lbnRzOiB7IFZ1ZURyYWdnYWJsZSB9LFxuICBtaXhpbnM6IFtPcmRlcmVkTWl4aW5dLFxuICBpbmplY3Q6IFsnY29udGFpbmVyJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtBcnJheSwgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIG9wZW46IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY3RpdmU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsZXZlbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZW5lZDogdGhpcy5vcGVuIHx8IHRoaXMuc2NoZW1hLm9wZW5cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLm1ldGFcbiAgICB9LFxuXG4gICAgc3RvcmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuc3RvcmVcbiAgICB9LFxuXG4gICAgZGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuZGlzYWJsZWRcbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzKVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTaG91bGQgdGhpcyBiZSBuYW1lZCBgc291cmNlU2NoZW1hYCBpbnN0ZWFkPyBVc2UgU291cmNlTWl4aW4/XG4gICAgY2hpbGRyZW5TY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEuY2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5MaXN0KCkge1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMuY2hpbGRyZW5TY2hlbWE/Lm5hbWVcbiAgICAgIHJldHVybiBuYW1lICYmIHRoaXMuZGF0YVtuYW1lXVxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkRyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggPiAxICYmXG4gICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2RyYWdnYWJsZScsIHtcbiAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgIHNjaGVtYTogdGhpcy5jaGlsZHJlblNjaGVtYVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBudW1DaGlsZHJlbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtUHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXM/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bUVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5udW1Qcm9wZXJ0aWVzICsgdGhpcy5udW1DaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkl0ZW1zKCkge1xuICAgICAgY29uc3QgeyBjaGlsZHJlblNjaGVtYSB9ID0gdGhpc1xuICAgICAgaWYgKGNoaWxkcmVuU2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IHsgZWRpdFBhdGggfSA9IHRoaXMuY29udGFpbmVyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuT3BlbiA9ICF0aGlzLnBhdGggJiYgY2hpbGRyZW5TY2hlbWEub3BlblxuICAgICAgICAvLyBCdWlsZCBhIGNoaWxkcmVuIGxpc3Qgd2l0aCBjaGlsZCBtZXRhIGluZm9ybWF0aW9uIGZvciB0aGUgdGVtcGxhdGUuXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubWFwKChkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSAoXG4gICAgICAgICAgICBjaGlsZHJlblNjaGVtYS5wYXRoICYmXG4gICAgICAgICAgICBgJHt0aGlzLnBhdGh9LyR7Y2hpbGRyZW5TY2hlbWEucGF0aH0vJHtpbmRleH1gXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnN0IG9wZW4gPSBjaGlsZHJlbk9wZW4gfHxcbiAgICAgICAgICAgIC8vIE9ubHkgY291bnQgYXMgXCJpbiBlZGl0IHBhdGhcIiB3aGVuIGl0J3Mgbm90IHRoZSBmdWxsIGVkaXQgcGF0aC5cbiAgICAgICAgICAgIGVkaXRQYXRoLnN0YXJ0c1dpdGgocGF0aCkgJiYgcGF0aC5sZW5ndGggPCBlZGl0UGF0aC5sZW5ndGhcbiAgICAgICAgICBjb25zdCBhY3RpdmUgPSBlZGl0UGF0aCA9PT0gcGF0aFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIG9wZW4sXG4gICAgICAgICAgICBhY3RpdmVcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRldGFpbHMoKSB7XG4gICAgICBjb25zdCB7IG51bUNoaWxkcmVuIH0gPSB0aGlzXG4gICAgICByZXR1cm4gbnVtQ2hpbGRyZW4gJiYgYCR7bnVtQ2hpbGRyZW59ICR7XG4gICAgICAgIG51bUNoaWxkcmVuID09PSAxID8gJ2l0ZW0nIDogJ2l0ZW1zJ1xuICAgICAgfWBcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kcmFnZ2FibGUgfHwgdGhpcy5lZGl0YWJsZSB8fCB0aGlzLmRlbGV0YWJsZVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTdXBwb3J0IGNyZWF0YWJsZSFcbiAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgY3JlYXRhYmxlLCBlZGl0YWJsZSBhbmQgZGVsZXRhYmxlIG92ZXJyaWRlcyBvbiB0aGVcbiAgICAvLyBhc3NvY2lhdGVkIGZvcm1zLCBqdXN0IGxpa2UgaW4gYFR5cGVMaXN0YCBhbmQgYFR5cGVPYmplY3RgLCB0aHJvdWdoXG4gICAgLy8gYERpdG9FZGl0QnV0dG9uc2AuIEl0IHdvdWxkIGJlIGJlc3QgdG8gdXNlIGBEaXRvRWRpdEJ1dHRvbnNgIGhlcmUgdG9vLlxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBwcm9wZXJ0eS5uYW1lKVxuICAgIH0sXG5cbiAgICBvbkVkaXQoKSB7XG4gICAgICAvLyBBbGwgd2UgZ290IHRvIGRvIGlzIHB1c2ggdGhlIHJpZ2h0IGVkaXQgcGF0aCB0byB0aGUgcm91dGVyLCB0aGUgcmVzdFxuICAgICAgLy8gaXMgaGFuZGxlZCBieSBvdXIgcm91dGVzLCBhbGxvd2luZyByZWxvYWRzIGFzIHdlbGwuXG4gICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgIHBhdGg6IGAke3RoaXMuY29udGFpbmVyLnBhdGh9JHt0aGlzLnBhdGh9YCxcbiAgICAgICAgLy8gUHJlc2VydmUgY3VycmVudCBxdWVyeVxuICAgICAgICBxdWVyeTogdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRGVsZXRlKCkge1xuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLm9uQ2hhbmdlKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGhlYWQuZGl0by10YWJsZS1oZWFkXG4gIHRyXG4gICAgdGgoXG4gICAgICB2LWZvcj1cIihjb2x1bW4sIGluZGV4KSBpbiBjb2x1bW5zXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICA6Y2xhc3M9XCJnZXRDb2x1bW5DbGFzcyhjb2x1bW4pXCJcbiAgICApXG4gICAgICByb3V0ZXItbGluayhcbiAgICAgICAgdi1pZj1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgIDp0bz1cImdldFNvcnRMaW5rKGNvbHVtbilcIlxuICAgICAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIDpjbGFzcz1cImdldFNvcnRDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgICAgIClcbiAgICAgICAgICAuZGl0by1vcmRlci1hcnJvd3NcbiAgICAgICAgICBzcGFuIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZVxuICAgICAgKSB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgdGgodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAvLyBFbXB0eSA8c3Bhbj4gaXMgbmVlZGVkIGZvciBzdHlsaW5nLCBzZWUgX3RhYmxlLnNhc3NcbiAgICAgIHNwYW5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgIHRyXG4gICAgICB0aChcbiAgICAgICAgdi1mb3I9XCIoY29sdW1uLCBpbmRleCkgaW4gY29sdW1uc1wiXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgIDpjbGFzcz1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgICAgKVxuICAgICAgICByb3V0ZXItbGluayhcbiAgICAgICAgICB2LWlmPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgICA6dG89XCJnZXRTb3J0TGluayhjb2x1bW4pXCJcbiAgICAgICAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgICAgKVxuICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgOmNsYXNzPVwiZ2V0U29ydENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLW9yZGVyLWFycm93c1xuICAgICAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgICAgIHNwYW4oXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICkge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgdGgodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAgIC8vIEVtcHR5IDxzcGFuPiBpcyBuZWVkZWQgZm9yIHN0eWxpbmcsIHNlZSBfdGFibGUuc2Fzc1xuICAgICAgICBzcGFuXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tdGFibGUtaGVhZFxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIHRyXG4gICAgICB0aFxuICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWxcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdFxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgICAgIC5kaXRvLWJ1dHRvblxuICAgICAgICAgIC8vIENvbnZlbnRpb246IE5lc3RlZCBzcGFucyBoYW5kbGUgcGFkZGluZywgc2VlIGJlbG93XG4gICAgICAgICAgcGFkZGluZzogMFxuICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdFxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDBcbiAgICAgICAgc3BhblxuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICAgIC8vIENvbnZlbnRpb246IE5lc3RlZCBzcGFucyBoYW5kbGUgcGFkZGluZ1xuICAgICAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgICAgICAgJjplbXB0eTo6YWZ0ZXJcbiAgICAgICAgICAgIC8vIFByZXZlbnQgZW1wdHkgPHRoPiBmcm9tIGNvbGxhcHNpbmdcbiAgICAgICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInIC8vIHplcm8td2lkdGggc3BhY2VcbiAgICAgICAgPiBzcGFuXG4gICAgICAgICAgZGlzcGxheTogYmxvY2tcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYmxlLWhlYWQnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbHVtbnM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGhhc0VkaXRCdXR0b25zOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvcnQoKSB7XG4gICAgICBjb25zdCBvcmRlciA9ICh0aGlzLnF1ZXJ5Lm9yZGVyIHx8ICcnKS5zcGxpdCgvXFxzKy8pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBvcmRlclswXSxcbiAgICAgICAgb3JkZXI6IG9yZGVyWzFdXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb2x1bW5DbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jb2x1bW4tJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0U29ydENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZVxuICAgICAgICA/IGBkaXRvLXNlbGVjdGVkIGRpdG8tb3JkZXItJHt0aGlzLnNvcnQub3JkZXJ9YFxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0U29ydExpbmsoY29sdW1uKSB7XG4gICAgICAvLyBUb2dnbGUgb3JkZXIgaWYgdGhlIHNhbWUgY29sdW1uIGlzIGNsaWNrZWQgYWdhaW4uXG4gICAgICBjb25zdCBvcmRlciA9IHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZSAmJiB0aGlzLnNvcnQub3JkZXIgPT09ICdhc2MnXG4gICAgICAgID8gJ2Rlc2MnXG4gICAgICAgIDogJ2FzYydcbiAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5TGluayh7XG4gICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgIG9yZGVyOiBgJHtjb2x1bW4ubmFtZX0gJHtvcmRlcn1gXG4gICAgICB9KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG50ZChcbiAgOmNsYXNzPVwiY2VsbC5jbGFzc1wiXG4gIDpzdHlsZT1cImNlbGwuc3R5bGVcIlxuKVxuICAvLyBUT0RPOiBJbXBsZW1lbnQgaW5saW5lZCBjb21wb25lbnRzIGluIGNlbGwgbW9kZSFcbiAgY29tcG9uZW50KFxuICAgIHYtaWY9XCJjb21wb25lbnRcIlxuICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4gIHNwYW4oXG4gICAgdi1lbHNlXG4gICAgdi1odG1sPVwicmVuZGVyQ2VsbChkYXRhKVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRkKFxuICAgIDpjbGFzcz1cImNlbGwuY2xhc3NcIlxuICAgIDpzdHlsZT1cImNlbGwuc3R5bGVcIlxuICApXG4gICAgLy8gVE9ETzogSW1wbGVtZW50IGlubGluZWQgY29tcG9uZW50cyBpbiBjZWxsIG1vZGUhXG4gICAgY29tcG9uZW50KFxuICAgICAgdi1pZj1cImNvbXBvbmVudFwiXG4gICAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlXG4gICAgICB2LWh0bWw9XCJyZW5kZXJDZWxsKGRhdGEpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdGFibGUtY2VsbCcsIHtcbiAgcHJvcHM6IHtcbiAgICBjZWxsOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlVHlwZUNvbXBvbmVudCh0aGlzLmNlbGwuY29tcG9uZW50KVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVuZGVyQ2VsbChpdGVtKSB7XG4gICAgICBjb25zdCB7IG5hbWUsIHJlbmRlciB9ID0gdGhpcy5jZWxsXG4gICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1bbmFtZV1cbiAgICAgIHJldHVybiByZW5kZXJcbiAgICAgICAgPyByZW5kZXIuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgZGF0YVBhdGg6IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwodmFsdWUpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQSBjb21wb25lbnQgdG8gc2ltcGx5IHBhc3MgdGhyb3VnaCBhbiBleGlzdGluZyB2dWUgdm5vZGUuXG4vLyBTZWU6IGh0dHBzOi8vZm9ydW0udnVlanMub3JnL3QvMjgxNjIvNFxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdm5vZGUnLCB7XG4gIGZ1bmN0aW9uYWw6IHRydWUsXG4gIHJlbmRlcjogKGgsIGNvbnRleHQpID0+IGNvbnRleHQucHJvcHMubm9kZVxufSlcbjwvc2NyaXB0PlxuIiwiLy8gVHlwZUNvbXBvbmVudCBpcyB0aGUgYWJzdHJhY3QgYmFzZSBjb21wb25lbnQgZm9yIGFsbCBvdGhlciB0eXBlIGNvbXBvbmVudHNcbi8vIGluc2lkZSB0aGUgdHlwZXMvIGZvbGRlci4gVGhlcmUncyBhbHNvIGEgc2VwYXJhdGUgY29uY3JldGVcbi8vIGBUeXBlQ29tcG9uZW50LnZ1ZWAgY29tcG9uZW50LCB1c2UgdG8gcmVuZGVyIHRoZSBgdHlwZTogJ2NvbXBvbmVudCdgIHR5cGVzLlxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IHJlZ2lzdGVyVHlwZUNvbXBvbmVudCwgZ2V0VHlwZUNvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvc2NoZW1hLmpzJ1xuXG5jb25zdCBUeXBlQ29tcG9uZW50ID0gRGl0b0NvbXBvbmVudC5leHRlbmQoe1xuICBtaXhpbnM6IFtUeXBlTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiBmYWxzZSxcbiAgdGV4dEZpZWxkOiBmYWxzZSxcbiAgLy8gU2V0IHJlYXNvbmFibGUgZGVmYXVsdHMgZm9yIGFsbCBvZiB0aGVzZSB0aGF0IGFyZSB1c2VkIGJ5IG1vc3QgdHlwZVxuICAvLyBjb21wb25lbnRzLiBUaGVzZSBvbmx5IG5lZWQgZGVmaW5pbmcgaW4gc3ViLWNsYXNzZXMgd2hlbiB0aGV5IGRpZmZlci5cbiAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICBkZWZhdWx0TmVzdGVkOiB0cnVlLFxuICBkZWZhdWx0VmlzaWJsZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogdHJ1ZSxcbiAgZXhjbHVkZVZhbHVlOiBmYWxzZSxcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBudWxsLFxuICBvbWl0UGFkZGluZzogZmFsc2Vcbn0pXG5cblR5cGVDb21wb25lbnQucmVnaXN0ZXIgPSBmdW5jdGlvbih0eXBlcywgZGVmaW5pdGlvbiA9IHt9KSB7XG4gIHR5cGVzID0gYXNBcnJheSh0eXBlcylcbiAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnQoYGRpdG8tdHlwZS0ke3R5cGVzWzBdfWAsIGRlZmluaXRpb24pXG4gIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpXG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG5UeXBlQ29tcG9uZW50LmdldCA9IGdldFR5cGVDb21wb25lbnRcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudFxuIiwiXG5idXR0b24uZGl0by1idXR0b24oXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDp0eXBlPVwidHlwZVwiXG4gIDp0aXRsZT1cInRleHRcIlxuICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pIHt7IHRleHQgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOnR5cGU9XCJ0eXBlXCJcbiAgICA6dGl0bGU9XCJ0ZXh0XCJcbiAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApIHt7IHRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGhhc1Jlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnYnV0dG9uJywgJ3N1Ym1pdCdcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcbiAgLy8gVE9ETzogQ29uc2lkZXIgbWFraW5nIHRoaXMgd29yayBuaWNlbHk6XG4gIC8vIG9taXRGbGV4R3JvdzogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIHZlcmIoKSB7XG4gICAgICByZXR1cm4gdGhpcy52ZXJic1t0aGlzLm5hbWVdIHx8IHRoaXMubmFtZVxuICAgIH0sXG5cbiAgICB0ZXh0OiBnZXRTY2hlbWFBY2Nlc3NvcigndGV4dCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGdldCh0ZXh0KSB7XG4gICAgICAgIHJldHVybiB0ZXh0IHx8IGxhYmVsaXplKHRoaXMudmVyYilcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNsb3NlRm9ybTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Nsb3NlRm9ybScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIEBvdmVycmlkZVxuICAgIGdldExpc3RlbmVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIGJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBjbGljazogdGhpcy5vbkNsaWNrXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZUNvbXBvbmVudD8uc3VibWl0KHRoaXMsIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ2xpY2soKSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmVtaXRFdmVudCgnY2xpY2snLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5zY2hlbWFDb21wb25lbnRcbiAgICAgIH0pXG4gICAgICAvLyBIYXZlIGJ1dHRvbnMgdGhhdCBkZWZpbmUgcmVzb3VyY2VzIGNhbGwgYHRoaXMuc3VibWl0KClgIGJ5IGRlZmF1bHQ6XG4gICAgICBpZiAoXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmIC8vIE1lYW5pbmc6IGRvbid0IHByZXZlbnQgZGVmYXVsdC5cbiAgICAgICAgaGFzUmVzb3VyY2UodGhpcy5zY2hlbWEpXG4gICAgICApIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdWJtaXQoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5pbnB1dC5kaXRvLWNoZWNrYm94KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICB0eXBlPVwiY2hlY2tib3hcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBpbnB1dC5kaXRvLWNoZWNrYm94KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1jaGVja2JveFxuICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3Ncbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3gnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCwgaXNGdW5jdGlvbiwgaXNQcm9taXNlLCBub3JtYWxpemVEYXRhUGF0aCwgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtMb2FkaW5nTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBhc3luY0RhdGFFbnRyaWVzOiB7fVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlRGF0YVNjaGVtYShzY2hlbWEsIG5hbWUsIHtcbiAgICAgIHJlc29sdmVDb3VudGVyID0gMSxcbiAgICAgIC4uLmxvYWRpbmdPcHRpb25zXG4gICAgfSA9IHt9KSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KHNjaGVtYSkpIHtcbiAgICAgICAgc2NoZW1hID0geyBkYXRhOiBzY2hlbWEgfVxuICAgICAgfVxuICAgICAgbGV0IHsgZGF0YSA9IHVuZGVmaW5lZCwgZGF0YVBhdGggPSBudWxsIH0gPSBzY2hlbWFcbiAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhc3luYyBkYXRhIGxvYWRpbmcgYWxyZWFkeSBpbiBwcm9jZXNzLlxuICAgICAgY29uc3QgYXN5bmNFbnRyeSA9IChcbiAgICAgICAgdGhpcy5hc3luY0RhdGFFbnRyaWVzW25hbWVdIHx8XG4gICAgICAgIHRoaXMuJHNldCh0aGlzLmFzeW5jRGF0YUVudHJpZXMsIG5hbWUsIHtcbiAgICAgICAgICBkZXBlbmRlbmN5RnVuY3Rpb246IG51bGwsXG4gICAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDAsXG4gICAgICAgICAgcmVzb2x2ZWREYXRhOiBudWxsLFxuICAgICAgICAgIHJlc29sdmluZzogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC8vIElmIHRoZSBkYXRhIGNhbGxiYWNrIHByb3ZpZGVkIGEgZGVwZW5kZW5jeSBmdW5jdGlvbiB3aGVuIGl0IHdhcyBjYWxsZWQsXG4gICAgICAvLyBjYWwgaXQgaW4gZXZlcnkgY2FsbCBvZiBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBmb3JjZSBWdWUgdG8ga2VlcCB0cmFja1xuICAgICAgLy8gb2YgdGhlIGFzeW5jIGRlcGVuZGVuY2llcy5cbiAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uPy5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcblxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2ZUNvdW50ZXIgPiAwKSB7XG4gICAgICAgIC8vIElmIHRoZSBkYXRhIHdhcyByZXNvbHZlZCBhbHJlYWR5LCByZXR1cm4gaXQgYW5kIGNsZWFyIHRoZSB2YWx1ZSBvbmNlXG4gICAgICAgIC8vIGByZXNvbHZlQ291bnRlcmAgcmVhY2hlcyB6ZXJvLiBDb3VudGluZyBpcyBuZWVkZWQgYmVjYXVzZSBkZXBlbmRpbmdcbiAgICAgICAgLy8gb24gdGhlIHVzZSBvZiBkYXRhIGFuZCByZWFjdGl2aXR5LCBtdWx0aXBsZSBjYWxscyB0byB0aGUgY29tcHV0ZWRcbiAgICAgICAgLy8gZ2V0dGVyIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgZGF0YSBpcyBjaGFuZ2luZy4gQ2xlYXJpbmcgdGhlIHJlc29sdmVkXG4gICAgICAgIC8vIGRhdGEgd29ya3MgYmVjYXVzZSBWdWUgY2FjaGVzIHRoZSByZXN1bHQgb2YgY29tcHV0ZWQgZ2V0dGVycyBhbmQgb25seVxuICAgICAgICAvLyByZWV2YWx1YXRlcyBpZiBvbmUgb2YgdGhlIGRlcGVuZGVuY2llcyBjaGFuZ2VkLiBUaGlzIGlzIHRvIGVuc3VyZVxuICAgICAgICAvLyB0aGF0IGEgY2FjaGVkIHZhbHVlIGhlcmUgZG9lc24ndCBibG9jayAvIG92ZXJyaWRlIHJlZXZhbHVhdGlvbjpcbiAgICAgICAgY29uc3QgeyByZXNvbHZlZERhdGEgfSA9IGFzeW5jRW50cnlcbiAgICAgICAgaWYgKC0tYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA9PT0gMCkge1xuICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvbHZlZERhdGFcbiAgICAgIH1cbiAgICAgIC8vIEF2b2lkIGNhbGxpbmcgdGhlIGRhdGEgZnVuY3Rpb24gdHdpY2U6XG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZpbmcpIHtcbiAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihkYXRhKSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgLy8gSWYgdGhlIHJlc3VsdCBvZiB0aGUgZGF0YSBmdW5jdGlvbiBpcyBhbm90aGVyIGZ1bmN0aW9uLCB0aGVuIHRoZVxuICAgICAgICAgIC8vIGZpcnN0IGRhdGEgZnVuY3Rpb24gaXMgdGhlcmUgdG8gdHJhY2sgZGVwZW5kZW5jaWVzIGFuZCB0aGUgcmVhbFxuICAgICAgICAgIC8vIGRhdGEgbG9hZGluZyBoYXBwZW5zIGluIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkLiBLZWVwIHRyYWNrXG4gICAgICAgICAgLy8gaXQgaW4gYGRlcGVuZGVuY3lGdW5jdGlvbmAgc28gaXQgY2FuIGJlIGNhbGxlZCBvbiBlYWNoIGNhbGwgb2ZcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBrZWVwIHRoZSBkZXBlbmRlbmNpZXMgaW50YWN0LCBhbmQgY2FsbFxuICAgICAgICAgIC8vIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkIG9uY2UgdG8gZ2V0IHRoZSBhY3R1YWwgZGF0YTpcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXN1bHQpKSB7XG4gICAgICAgICAgICBhc3luY0VudHJ5LmRlcGVuZGVuY3lGdW5jdGlvbiA9IGRhdGFcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHQuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShkYXRhKSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkYXRhIGlzIGFzeW5jaHJvbm91cywgaXQgY2FuJ3QgYmUgcmV0dXJuZWQgc3RyYWlnaHQgYXdheS5cbiAgICAgICAgICAvLyBCdXQgd2UgY2FuIGNoZWF0IHVzaW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYW5kIGByZXNvbHZlZERhdGFgLFxuICAgICAgICAgIC8vIHdoaWNoIGlzIGdvaW5nIHRvIHJlY2VpdmUgdGhlIGxvYWRlZCBkYXRhIGFzeW5jaHJvbm91c2x5LFxuICAgICAgICAgIC8vIHRyaWdnZXJpbmcgYSByZWNvbXB1dGUgb2YgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgY2FsbHNcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYC5cbiAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IHRydWVcbiAgICAgICAgICB0aGlzLnJlc29sdmVEYXRhKGRhdGEsIGxvYWRpbmdPcHRpb25zKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA9IHJlc29sdmVDb3VudGVyXG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkRGF0YSA9IGRhdGFcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIC8vIENsZWFyIGRhdGEgdW50aWwgcHJvbWlzZSBpcyByZXNvbHZlZCBhbmQgYHJlc29sdmVkRGF0YWAgaXMgc2V0XG4gICAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhUGF0aCkge1xuICAgICAgICBkYXRhID0gZ2V0VmFsdWVBdERhdGFQYXRoKFxuICAgICAgICAgIHRoaXMucm9vdERhdGEsXG4gICAgICAgICAgbm9ybWFsaXplRGF0YVBhdGgoYCR7dGhpcy5kYXRhUGF0aH0vJHtkYXRhUGF0aH1gKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlRGF0YShsb2FkLCBsb2FkaW5nT3B0aW9ucyA9IHt9KSB7XG4gICAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICBsZXQgZGF0YSA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCAoaXNGdW5jdGlvbihsb2FkKSA/IGxvYWQoKSA6IGxvYWQpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpXG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi9EYXRhTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgc2V0VGVtcG9yYXJ5SWQsIGlzUmVmZXJlbmNlIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0FycmF5LCBpc1N0cmluZywgaXNGdW5jdGlvbixcbiAgbm9ybWFsaXplRGF0YVBhdGgsIGxhYmVsaXplLCBkZWJvdW5jZUFzeW5jXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RhdGFNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGFzT3B0aW9uczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRWYWx1ZSA9IHZhbHVlID0+IHRoaXMucmVsYXRlXG4gICAgICAgICAgPyB0aGlzLmhhc09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgID8gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpc0FycmF5KHRoaXMudmFsdWUpXG4gICAgICAgICAgPyB0aGlzLnZhbHVlLm1hcChjb252ZXJ0VmFsdWUpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbClcbiAgICAgICAgICA6IGNvbnZlcnRWYWx1ZSh0aGlzLnZhbHVlKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gV2hlbiByZWxhdGluZyBhbmQgYXMgc29vbiBhcyB0aGUgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLi4uXG4gICAgICAgICAgdGhpcy5yZWxhdGUgJiYgdGhpcy5oYXNPcHRpb25zICYmIChcbiAgICAgICAgICAgIC8vIC4uLmlmIHRoZSB2YWx1ZSBpcyBmb3JjZWQgdG8gbnVsbCBiZWNhdXNlIGEgZGlzYXBwZWFyZWQgb3B0aW9uLi4uXG4gICAgICAgICAgICB2YWx1ZSA9PT0gbnVsbCAmJiB0aGlzLnZhbHVlICE9PSBudWxsIHx8XG4gICAgICAgICAgICAvLyAuLi5vciBpZiB0aGUgdmFsdWUgaXMgYSByZWZlcmVuY2UsIHJlcGxhY2UgaXQgd2l0aCBpdHMgb3B0aW9uXG4gICAgICAgICAgICAvLyB2YWx1ZSwgc28gdGhhdCBpdCdsbCBob2xkIGFjdHVhbCBkYXRhLCBub3QganVzdCBhIHJlZmVyZW5jZSBpZC5cbiAgICAgICAgICAgIGlzUmVmZXJlbmNlKHRoaXMudmFsdWUpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnQgPSB2YWx1ZSA9PiB0aGlzLnJlbGF0ZVxuICAgICAgICAgID8gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIHRoaXMudmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICAgID8gdmFsdWUubWFwKGNvbnZlcnQpXG4gICAgICAgICAgOiBjb252ZXJ0KHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZE9wdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSlcbiAgICB9LFxuXG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEodGhpcy5zY2hlbWEub3B0aW9ucywgJ29wdGlvbnMnLCB7XG4gICAgICAgIHJlc29sdmVDb3VudGVyOiAxXG4gICAgICB9KSA/PyBbXVxuICAgICAgaWYgKCFpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBvcHRpb25zIGRhdGEsIHNob3VsZCBiZSBhcnJheTogJHtkYXRhfWApXG4gICAgICB9XG4gICAgICB0aGlzLmhhc09wdGlvbnMgPSBkYXRhLmxlbmd0aCA+IDBcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NPcHRpb25zKGRhdGEpXG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICAvLyBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gYFR5cGVNdWx0aXNlbGVjdGAgdG8gcmV0dXJuIHRoZSBgc2VhcmNoZWRPcHRpb25zYFxuICAgICAgLy8gd2hlbiBhIHNlYXJjaCBmaWx0ZXIgd2FzIGFwcGxpZWQuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIHJlbGF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbGF0ZScsIHtcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gYHJlbGF0ZUJ5OiAnaWQnYFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gV2UgY2Fubm90IHVzZSBzY2hlbWEgYWNjZXNzb3IgY2FsbGJhY2sgbWFnaWMgZm9yIGByZWxhdGVgIGFzIHdlIG5lZWRcbiAgICAgIC8vIHRoaXMgb3V0c2lkZSBvZiB0aGUgY29tcG9uZW50J3MgbGlmZS1zcGFuLCBzZWUgYHByb2Nlc3NEYXRhKClgIGJlbG93LlxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBncm91cEJ5OiBnZXRTY2hlbWFBY2Nlc3NvcignZ3JvdXBCeScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIG9wdGlvbkxhYmVsOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy5sYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQobGFiZWwpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICdsYWJlbCc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbGFiZWwgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgnbGFiZWwnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgb3B0aW9uVmFsdWU6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLnZhbHVlJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldCh2YWx1ZSkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ3ZhbHVlJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB2YWx1ZSB8fFxuICAgICAgICAgIHRoaXMucmVsYXRlICYmICdpZCcgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgndmFsdWUnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgbW92aW5nIHNlYXJjaCB0byBgb3B0aW9ucy5zZWFyY2hgP1xuICAgIHNlYXJjaEZpbHRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaCcsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQoc2VhcmNoKSB7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBjb25zdCB7IGZpbHRlciwgZGVib3VuY2UgfSA9IGlzRnVuY3Rpb24oc2VhcmNoKVxuICAgICAgICAgICAgPyB7IGZpbHRlcjogc2VhcmNoIH1cbiAgICAgICAgICAgIDogc2VhcmNoXG4gICAgICAgICAgcmV0dXJuIGRlYm91bmNlID8gZGVib3VuY2VBc3luYyhmaWx0ZXIsIGRlYm91bmNlKSA6IGZpbHRlclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBncm91cEJ5TGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ2xhYmVsJyA6IG51bGxcbiAgICB9LFxuXG4gICAgZ3JvdXBCeU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ29wdGlvbnMnIDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0T3B0aW9uS2V5KGtleSkge1xuICAgICAgY29uc3QgW29wdGlvbl0gPSB0aGlzLmFjdGl2ZU9wdGlvbnNcbiAgICAgIHJldHVybiBpc09iamVjdChvcHRpb24pICYmIGtleSBpbiBvcHRpb24gPyBrZXkgOiBudWxsXG4gICAgfSxcblxuICAgIHByb2Nlc3NPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5yZWxhdGUpIHtcbiAgICAgICAgICAvLyBJZiBpZHMgYXJlIG1pc3NpbmcgYW5kIHdlIHdhbnQgdG8gcmVsYXRlLCBzZXQgdGVtcG9yYXJ5IGlkcy5cbiAgICAgICAgICAvLyBOT1RFOiBXZSBuZWVkIHRvIG1vZGlmeSB0aGUgYWN0dWFsIGRhdGEsIG1ha2luZyBhIGNvcHkgd29uJ3Qgd29ya1xuICAgICAgICAgIC8vIGFzIGl0IHdvbid0IHByb3BhZ2F0ZS5cbiAgICAgICAgICAvLyBOT1RFOiBUaGlzIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIGRhdGEgaXMgZnJvbSB0aGUgZ3JhcGggdGhhdFxuICAgICAgICAgIC8vIHdlJ3JlIGN1cnJlbnRseSBlZGl0aW5nLlxuICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghKCdpZCcgaW4gb3B0aW9uKSkge1xuICAgICAgICAgICAgICBzZXRUZW1wb3JhcnlJZChvcHRpb24sICdpZCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyb3VwQnkpIHtcbiAgICAgICAgICBjb25zdCBncm91cGVkID0ge31cbiAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5yZWR1Y2UoXG4gICAgICAgICAgICAocmVzdWx0cywgb3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gb3B0aW9uW3RoaXMuZ3JvdXBCeV1cbiAgICAgICAgICAgICAgbGV0IGVudHJ5ID0gZ3JvdXBlZFtncm91cF1cbiAgICAgICAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgICAgICAgIGVudHJ5ID0gZ3JvdXBlZFtncm91cF0gPSB7XG4gICAgICAgICAgICAgICAgICBbdGhpcy5ncm91cEJ5TGFiZWxdOiBncm91cCxcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlPcHRpb25zXTogW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGVudHJ5KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVudHJ5Lm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW11cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfSxcblxuICAgIGhhc09wdGlvbihvcHRpb24pIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgIH0sXG5cbiAgICBnZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgY29uc3QgZmluZE9wdGlvbiA9IChvcHRpb25zLCB2YWx1ZSwgZ3JvdXBCeSkgPT4ge1xuICAgICAgICAvLyBTZWFyY2ggZm9yIHRoZSBvcHRpb24gb2JqZWN0IHdpdGggdGhlIGdpdmVuIHZhbHVlIGFuZCByZXR1cm4gdGhlXG4gICAgICAgIC8vIHdob2xlIG9iamVjdC5cbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgIGlmIChncm91cEJ5KSB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IGZpbmRPcHRpb24ob3B0aW9uLm9wdGlvbnMsIHZhbHVlLCBudWxsKVxuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25WYWx1ZVxuICAgICAgICA/IGZpbmRPcHRpb24odGhpcy5hY3RpdmVPcHRpb25zLCB2YWx1ZSwgdGhpcy5ncm91cEJ5KVxuICAgICAgICA6IHZhbHVlXG4gICAgfSxcblxuICAgIGdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvblZhbHVlKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvblZhbHVlXVxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uVmFsdWUpXG4gICAgICAgICAgPyBvcHRpb25WYWx1ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IG9wdGlvblxuICAgIH0sXG5cbiAgICBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25MYWJlbClcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25MYWJlbF1cbiAgICAgICAgOiBpc0Z1bmN0aW9uKG9wdGlvbkxhYmVsKVxuICAgICAgICAgID8gb3B0aW9uTGFiZWwuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBvcHRpb24gfSkpXG4gICAgICAgICAgOiBsYWJlbGl6ZShgJHtvcHRpb259YClcbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGlmIChzY2hlbWEucmVsYXRlKSB7XG4gICAgICAvLyBGb3IgaW50ZXJuYWxseSByZWxhdGluZyBkYXRhIChgc2NoZW1hLm9wdGlvbnMuZGF0YVBhdGhgKSwgd2UgbmVlZCB0b1xuICAgICAgLy8gcHJvY2VzcyBib3RoIHRoZSBvcHRpb25zIChmb3IgJyNyZWYnKSBhbmQgdGhlIHZhbHVlICgnI2lkJykuXG4gICAgICAvLyBTZWUgYERhdGFNaXhpbi5oYW5kbGVEYXRhU2NoZW1hKClgOlxuICAgICAgY29uc3QgcGF0aCA9IHNjaGVtYS5vcHRpb25zPy5kYXRhUGF0aFxuICAgICAgY29uc3QgcmVsYXRlZERhdGFQYXRoID0gcGF0aFxuICAgICAgICA/IG5vcm1hbGl6ZURhdGFQYXRoKGAke2RhdGFQYXRofS8ke3BhdGh9YClcbiAgICAgICAgOiBudWxsXG4gICAgICBncmFwaC5hZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpXG4gICAgICBpZiAocmVsYXRlZERhdGFQYXRoKSB7XG4gICAgICAgIGdyYXBoLnNldFNvdXJjZVJlbGF0ZWQocmVsYXRlZERhdGFQYXRoKVxuICAgICAgfVxuICAgICAgLy8gQ29udmVydCByZWxhdGluZyBvYmplY3RzIHRvIGEgc2hhbGxvdyBjb3B5IHdpdGggb25seSB0aGUgaWQgbGVmdC5cbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gdXNpbmcgYHJlbGF0ZUJ5YDpcbiAgICAgIGNvbnN0IHByb2Nlc3NSZWxhdGUgPSB2YWx1ZSA9PiB2YWx1ZSA/IHsgaWQ6IHZhbHVlLmlkIH0gOiB2YWx1ZVxuICAgICAgLy8gU2VsZWN0ZWQgb3B0aW9ucyBjYW4gYmUgYm90aCBvYmplY3RzICYgYXJyYXlzLCBlLmcuICdjaGVja2JveGVzJzpcbiAgICAgIHZhbHVlID0gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc1JlbGF0ZSlcbiAgICAgICAgOiBwcm9jZXNzUmVsYXRlKHZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiXG51bC5kaXRvLWNoZWNrYm94ZXMoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuKVxuICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgbGFiZWxcbiAgICAgIGlucHV0LmRpdG8tY2hlY2tib3goXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdWwuZGl0by1jaGVja2JveGVzKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4gIClcbiAgICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgICBsYWJlbFxuICAgICAgICBpbnB1dC5kaXRvLWNoZWNrYm94KFxuICAgICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICAgIClcbiAgICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tY2hlY2tib3hlc1xuICAgIGxhYmVsXG4gICAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzXG4gICAgLmRpdG8tY2hlY2tib3hcbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveGVzJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICBkZWZhdWx0VmFsdWU6IFtdLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IChvcHRpb24gfHwgW10pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNvZGUoXG4gIHJlZj1cImNvZGVcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpzdHlsZT1cInN0eWxlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNvZGUoXG4gICAgcmVmPVwiY29kZVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpzdHlsZT1cInN0eWxlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNvZGVcbiAgICBAZXh0ZW5kICVpbnB1dFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC8vIEZvciBwcm9wcGVyIHNpemluZyBvZiBjb250ZW50IGFsb25nIHdpdGggOnN0eWxlPVwic3R5bGVcIiBzZXR0aW5nIGFib3ZlLFxuICAgIC8vIGZvciBwcm9wZXIgbGluZS1oZWlnaHQgY2FsY3VsYXRpb24uXG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgd2lkdGg6IGF1dG9cbiAgICAuY29kZWZsYXNrXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICAvLyBJZ25vcmUgdGhlcGFyZW50IHBhZGRpbmcgZGVmaW5lZCBhYm92ZSB3aGljaCBpcyBvbmx5IG5lZWRlZCB0byBzZXRcbiAgICAgIC8vIHRoZSBkZXNpcmVkIGhlaWdodCB3aXRoIDpzdHlsZT1cInN0eWxlXCIuXG4gICAgICB0b3A6IDBcbiAgICAgIGxlZnQ6IDBcbiAgICAuY29kZWZsYXNrX190ZXh0YXJlYSxcbiAgICAuY29kZWZsYXNrX19wcmVcbiAgICAgIC8vIFVzZSBzYW1lIHBhZGRpbmcgYXMgLmRpdG8tY29kZVxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAuY29kZWZsYXNrX190ZXh0YXJlYSxcbiAgICAuY29kZWZsYXNrX19jb2RlLFxuICAgIC5jb2RlZmxhc2tfX2xpbmVzXG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm9cbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplKVxuICAgICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KVxuICAgIC5jb2RlZmxhc2tfX2xpbmVzXG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IENvZGVGbGFzayBmcm9tICdjb2RlZmxhc2snXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2RlJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCAzXG4gICAgfSxcblxuICAgIHN0eWxlKCkge1xuICAgICAgcmV0dXJuIGBoZWlnaHQ6IGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBjb25zdCBmbGFzayA9IG5ldyBDb2RlRmxhc2sodGhpcy4kcmVmcy5jb2RlLCB7XG4gICAgICBsYW5ndWFnZTogdGhpcy5zY2hlbWEubGFuZ3VhZ2UgfHwgJ2phdmFzY3JpcHQnLFxuICAgICAgdGFiU2l6ZTogdGhpcy5zY2hlbWEuaW5kZW50U2l6ZSB8fCAyLFxuICAgICAgbGluZU51bWJlcnM6IGZhbHNlXG4gICAgfSlcblxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgIGxldCBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICB0aGlzLmRvbU9uKHRoaXMuJHJlZnMuY29kZS5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpLCB7XG4gICAgICBmb2N1czogb25Gb2N1cyxcbiAgICAgIGJsdXI6IG9uQmx1clxuICAgIH0pXG5cbiAgICBjb25zdCBzZXRDb2RlID0gY29kZSA9PiB7XG4gICAgICBpZiAoY29kZSAhPT0gZmxhc2suY29kZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSB0cnVlXG4gICAgICAgIGZsYXNrLnVwZGF0ZUNvZGUoY29kZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICAgIG9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmbGFzay5vblVwZGF0ZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlVXBkYXRlKSB7XG4gICAgICAgIGlnbm9yZVVwZGF0ZSA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRWYWx1ZSh2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVdhdGNoKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldENvZGUodmFsdWUgfHwgJycpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHNldENvZGUodGhpcy52YWx1ZSB8fCAnJylcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKT8uZm9jdXMoKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG50cmlnZ2VyLmRpdG8tY29sb3IoXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4gIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuKVxuICAuZGl0by1pbnB1dChcbiAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgKVxuICAgIGlucHV0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICB0eXBlPVwiaW5wdXRcIlxuICAgICAgc2l6ZT1cIjhcIlxuICAgICAgdi1tb2RlbD1cImhleFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgKVxuICAgIC5kaXRvLWNvbG9yLXByZXZpZXcuZGl0by1pbmhlcml0LWZvY3VzKFxuICAgICAgdi1pZj1cInZhbHVlXCJcbiAgICApXG4gICAgICBkaXYoOnN0eWxlPVwieyBiYWNrZ3JvdW5kOiBgIyR7aGV4VmFsdWUgfHwgJzAwMDAwMDAwJ31gIH1cIilcbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICBza2V0Y2gtcGlja2VyLmRpdG8tY29sb3ItcGlja2VyKFxuICAgIHNsb3Q9XCJwb3B1cFwiXG4gICAgdi1tb2RlbD1cImNvbG9yVmFsdWVcIlxuICAgIDpkaXNhYmxlLWFscGhhPVwiIWFscGhhXCJcbiAgICA6ZGlzYWJsZS1maWVsZHM9XCIhaW5wdXRzXCJcbiAgICA6cHJlc2V0LWNvbG9ycz1cInByZXNldHNcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0cmlnZ2VyLmRpdG8tY29sb3IoXG4gICAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbiAgKVxuICAgIC5kaXRvLWlucHV0KFxuICAgICAgc2xvdD1cInRyaWdnZXJcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICApXG4gICAgICBpbnB1dChcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgICAgdHlwZT1cImlucHV0XCJcbiAgICAgICAgc2l6ZT1cIjhcIlxuICAgICAgICB2LW1vZGVsPVwiaGV4VmFsdWVcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICApXG4gICAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgICAgdi1pZj1cInZhbHVlXCJcbiAgICAgIClcbiAgICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG4gICAgc2tldGNoLXBpY2tlci5kaXRvLWNvbG9yLXBpY2tlcihcbiAgICAgIHNsb3Q9XCJwb3B1cFwiXG4gICAgICB2LW1vZGVsPVwiY29sb3JWYWx1ZVwiXG4gICAgICA6ZGlzYWJsZS1hbHBoYT1cIiFhbHBoYVwiXG4gICAgICA6ZGlzYWJsZS1maWVsZHM9XCIhaW5wdXRzXCJcbiAgICAgIDpwcmVzZXQtY29sb3JzPVwicHJlc2V0c1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gICRjb2xvci1zd2F0Y2gtd2lkdGg6ICRwYXR0ZXJuLXRyYW5zcGFyZW5jeS1zaXplXG4gICRjb2xvci1zd2F0Y2gtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtICRib3JkZXItd2lkdGhcbiAgLmRpdG8tY29sb3JcbiAgICAuZGl0by1pbnB1dFxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgICAgaW5wdXRcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGhcbiAgICAuZGl0by1idXR0b24tY2xlYXJcbiAgICAgIG1hcmdpbi1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgIC5kaXRvLWNvbG9yLXBpY2tlclxuICAgICAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGVcbiAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93XG4gICAgLmRpdG8tY29sb3ItcHJldmlld1xuICAgICAgYmFja2dyb3VuZDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5XG4gICAgICBib3JkZXItbGVmdDogJGJvcmRlci1zdHlsZVxuICAgICAgJixcbiAgICAgIGRpdlxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgd2lkdGg6ICRjb2xvci1zd2F0Y2gtd2lkdGhcbiAgICAgICAgdG9wOiAwXG4gICAgICAgIHJpZ2h0OiAwXG4gICAgICAgIGJvdHRvbTogMFxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXNcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRjb2xvci1zd2F0Y2gtcmFkaXVzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHRpbnljb2xvciBmcm9tICd0aW55Y29sb3IyJ1xuaW1wb3J0IHsgU2tldGNoIGFzIFNrZXRjaFBpY2tlciB9IGZyb20gJ3Z1ZS1jb2xvcidcbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBUcmlnZ2VyIH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2xvcicsIHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBTa2V0Y2hQaWNrZXIgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IGZhbHNlLFxuICAgICAgY29udmVydGVkSGV4VmFsdWU6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb2xvclZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlIHx8IHt9XG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5jb2xvckZvcm1hdFxuICAgICAgICBjb25zdCBrZXkgPSB7XG4gICAgICAgICAgLy8gTk9URTogdnVlLWNvbG9yIGNhbGxzIGl0ICdoZXgnLCB3aGlsZSB0aW55Y29sb3IgY2FsbHMgaXQgJ2hleDYnXG4gICAgICAgICAgaGV4OiB2YWx1ZT8uYSA8IDEgPyAnaGV4OCcgOiAnaGV4JyxcbiAgICAgICAgICByZ2I6ICdyZ2JhJ1xuICAgICAgICB9W2Zvcm1hdF0gfHwgZm9ybWF0XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aW55Y29sb3IodmFsdWUpLnRvU3RyaW5nKGZvcm1hdClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaGV4VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSBudWxsXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGlueWNvbG9yKHRoaXMudmFsdWUpXG4gICAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IGNvbG9yXG4gICAgICAgICAgICAgIC50b1N0cmluZyhjb2xvci5nZXRBbHBoYSgpIDwgMSA/ICdoZXg4JyA6ICdoZXg2JylcbiAgICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZEhleFZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IGBmb3JtYXRgIGNsYXNoZXMgd2l0aCBUeXBlTWl4aW4uZm9ybWF0KClgLCB3aGljaCBzaGFsbCBiZSByZW5hbWVkXG4gICAgLy8gc29vbiB0byBgZm9ybWF0VmFsdWUoKWAuIFJlbmFtZSBgY29sb3JGb3JtYXRgIGJhY2sgdG8gYGZvcm1hdGAgYWZ0ZXIuXG4gICAgY29sb3JGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdmb3JtYXQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaGV4J1xuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93QWxwaGFgP1xuICAgIGFscGhhOiBnZXRTY2hlbWFBY2Nlc3NvcignYWxwaGEnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0c2A/XG4gICAgaW5wdXRzOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXRzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSxcblxuICAgIHByZXNldHM6IGdldFNjaGVtYUFjY2Vzc29yKCdwcmVzZXRzJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBbXG4gICAgICAgICcjZmZmZmZmJyxcbiAgICAgICAgJyNjM2MzYzMnLFxuICAgICAgICAnIzdmN2Y3ZicsXG4gICAgICAgICcjMDAwMDAwJyxcbiAgICAgICAgJyM4ODAwMTUnLFxuICAgICAgICAnI2VkMWMyNCcsXG4gICAgICAgICcjZmY3ZjI3JyxcbiAgICAgICAgJyNmZmYyMDAnLFxuXG4gICAgICAgICcjMjJiMTRjJyxcbiAgICAgICAgJyMwMGEyZTgnLFxuICAgICAgICAnIzNmNDhjYycsXG4gICAgICAgICcjYTM0OWE0JyxcbiAgICAgICAgJyNiOTdhNTcnLFxuICAgICAgICAnI2ZmYWVjOScsXG4gICAgICAgICcjZmZjOTBlJyxcbiAgICAgICAgJyMwMDAwMDAwMCdcbiAgICAgIF1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgZm9jdXNlZChmb2N1c2VkKSB7XG4gICAgICBpZiAoIWZvY3VzZWQgJiYgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSkge1xuICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcihgIyR7dGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZX1gKVxuICAgICAgICBpZiAoY29sb3I/LmlzVmFsaWQoKSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBjb2xvci50b1N0cmluZyh0aGlzLmNvbG9yRm9ybWF0KVxuICAgICAgICAgIC8vIFRPRE86IEVtaXQgJ2lucHV0JyBoZXJlIGluc3RlYWQsIGFuZCAnY2hhbmdlJyBpbiBibHVyLCBsaWtlIG90aGVycy5cbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudChcbiAgOmlzPVwiY29tcG9uZW50XCJcbiAgdi1iaW5kPVwiJHByb3BzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgIHYtYmluZD1cIiRwcm9wc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4vLyBUaGlzIGlzIHRoZSBnZW5lcmFsIHB1cnBvc2UgJ2NvbXBvbmVudCcgdHlwZSwgd2hpY2ggY2FuIHJlc29sdmUgdG8gYW55IGN1c3RvbVxuLy8gY29tcG9uZW50IHRocm91Z2ggYHNjaGVtYS5jb21wb25lbnRgLCBzZWUgYHJlc29sdmVUeXBlQ29tcG9uZW50KClgLiBUaGlzIGNhblxuLy8gYmUgdXNlZCB0byBuZXN0IGFyYml0cmFyeSB2dWUgY29tcG9uZW50cyBpbiBzY2hlbWE6XG4vLyB7XG4vLyAgIHR5cGU6ICdjb21wb25lbnQnLFxuLy8gICBjb21wb25lbnQ6IGltcG9ydCgnLi9jb21wb25lbnQnKVxuLy8gfVxuXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29tcG9uZW50Jywge1xuICAvLyBPdmVycmlkZSB0aGUgc3RhbmRhcmQgYGRlZmF1bHRWYWx1ZTogbnVsbGAgdG8gbm90IHNldCBhbnkgZGF0YSBmb3IgY3VzdG9tXG4gIC8vIGNvbXBvbmVudHMsIHVubGVzcyB0aGV5IHByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlLlxuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gISgnZGVmYXVsdCcgaW4gc2NoZW1hKVxufSlcbjwvc2NyaXB0PlxuIiwiXG4vLy0gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gdHJpZ2dlciBldmFsdWF0aW9uIG9mIGB2YWx1ZWAgdGhhdCBkb3NlIG5vdFxuLy8gIGludm9sdmUgYWN0dWFsbHkgcmVuZGVyaW5nIGl0IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgdmlzaWJsZS5cbmlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6bmFtZT1cIm5hbWVcIlxuICB0eXBlPVwidGV4dFwiXG4gIDp2YWx1ZT1cInZhbHVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6cmVhZG9ubHk9XCJ0cnVlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vLSBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byB0cmlnZ2VyIGV2YWx1YXRpb24gb2YgYHZhbHVlYCB0aGF0IGRvc2Ugbm90XG4gIC8vICBpbnZvbHZlIGFjdHVhbGx5IHJlbmRlcmluZyBpdCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IHZpc2libGUuXG4gIGlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6bmFtZT1cIm5hbWVcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICA6dmFsdWU9XCJ2YWx1ZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpyZWFkb25seT1cInRydWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RhdGFNaXhpbi5qcydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdjb21wdXRlZCcsICdkYXRhJywgJ2hpZGRlbidcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBkZWZhdWx0VmlzaWJsZTogZmFsc2UsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2YWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgICBpZiAoc2NoZW1hLmRhdGEgfHwgc2NoZW1hLmRhdGFQYXRoKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCAnc2NoZW1hJywge1xuICAgICAgICAgICAgLy8gTW9kaWZ5aW5nIGB0aGlzLmRhdGFgIGJlbG93IHRyaWdnZXJzIGFub3RoZXIgY2FsbCBvZiB0aGUgYHZhbHVlYFxuICAgICAgICAgICAgLy8gZ2V0dGVyLCBzbyB1c2UgYSB2YWx1ZSBvZiAyIGZvciBgcmVzb2x2ZUNvdW50ZXJgIHRvIHJldHVybiB0aGVcbiAgICAgICAgICAgIC8vIHJlc29sdmVkIGRhdGEgdHdpY2UuXG4gICAgICAgICAgICByZXNvbHZlQ291bnRlcjogMlxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgdGhpcy5uYW1lLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLmdldC5jYWxsKHRoaXMpXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLnNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1kYXRlXG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICA6ZGF0ZUZvcm1hdD1cInsgLi4uYXBpLmZvcm1hdHMuZGF0ZSwgLi4uZGF0ZUZvcm1hdCB9XCJcbiAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tZGF0ZVxuICAgIGNvbXBvbmVudChcbiAgICAgIDppcz1cImdldENvbXBvbmVudCh0eXBlKVwiXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIDpsb2NhbGU9XCJsb2NhbGVcIlxuICAgICAgOmRhdGVGb3JtYXQ9XCJ7IC4uLmFwaS5mb3JtYXRzLmRhdGUsIC4uLmRhdGVGb3JtYXQgfVwiXG4gICAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSBmcm9tICdAZGl0b2pzL3VpJ1xuaW1wb3J0IHsgaXNEYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdkYXRlJywgJ2RhdGV0aW1lJywgJ3RpbWUnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgY29tcG9uZW50czogeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBEYXRlVGltZVBpY2tlciB9LFxuICAvLyBUT0RPOiBUaGlzIGlzIG9ubHkgaGVyZSBzbyB3ZSBnZXQgcGxhY2Vob2xkZXIgYWRkZWQuIENvbWUgdXAgd2l0aCBhIGJldHRlclxuICAvLyB3YXkgdG8gc3VwcG9ydCBhdHRyaWJ1dGVzIHBlciBjb21wb25lbnQgKGEgbGlzdCBvZiBhY3R1YWxseSBzdXBwb3J0ZWRcbiAgLy8gYXR0cmlidXRlcylcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGRhdGVWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzXG4gICAgICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRhdGVGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdkYXRlRm9ybWF0Jywge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbXBvbmVudCh0eXBlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRlOiAnZGF0ZS1waWNrZXInLFxuICAgICAgICB0aW1lOiAndGltZS1waWNrZXInLFxuICAgICAgICBkYXRldGltZTogJ2RhdGUtdGltZS1waWNrZXInXG4gICAgICB9W3R5cGVdXG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRGF0ZSh2YWx1ZSkgPyB2YWx1ZS50b0lTT1N0cmluZygpIDogdmFsdWVcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4vUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuLi9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciwgZ2V0U3RvcmVBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7XG4gIHByb2Nlc3NSb3V0ZVNjaGVtYSwgcHJvY2Vzc0Zvcm1zLCBnZXROYW1lZFNjaGVtYXMsIGdldEJ1dHRvblNjaGVtYXMsXG4gIGhhc0Zvcm1TY2hlbWEsIGdldEZvcm1TY2hlbWFzLCBnZXRWaWV3U2NoZW1hLFxuICBoYXNMYWJlbHMsIGlzQ29tcGFjdCwgaXNJbmxpbmVkLFxuICBpc09iamVjdFNvdXJjZSwgaXNMaXN0U291cmNlXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc1N0cmluZywgaXNBcnJheSwgaXNOdW1iZXIsIGVxdWFscyxcbiAgcGFyc2VEYXRhUGF0aCwgbm9ybWFsaXplRGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbUmVzb3VyY2VNaXhpbiwgU2NoZW1hUGFyZW50TWl4aW5dLFxuXG4gIGRlZmF1bHRWYWx1ZShzY2hlbWEpIHtcbiAgICByZXR1cm4gaXNMaXN0U291cmNlKHNjaGVtYSkgPyBbXSA6IG51bGxcbiAgfSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyYXBwZWRQcmltaXRpdmVzOiBudWxsLFxuICAgICAgdW53cmFwcGluZ1ByaW1pdGl2ZXM6IGZhbHNlLFxuICAgICAgaWdub3JlUm91dGVDaGFuZ2U6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgaXNPYmplY3RTb3VyY2UoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy50eXBlKVxuICAgIH0sXG5cbiAgICBpc0xpc3RTb3VyY2UoKSB7XG4gICAgICByZXR1cm4gaXNMaXN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmFsdWVcbiAgICB9LFxuXG4gICAgaXNSZWFkeSgpIHtcbiAgICAgIC8vIExpc3RzIHRoYXQgaGF2ZSBubyBkYXRhIGFuZCBubyBhc3NvY2lhdGVkIHJlc291cmNlIHNob3VsZCBzdGlsbCByZW5kZXIsXG4gICAgICAvLyBhcyB0aGV5IG1heSBiZSBnZXR0aW5nIHRoZWlyIGRhdGEgZWxzZXdoZXJlLCBlLmcuIGBjb21wdXRlKClgLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzRGF0YSB8fCAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNJblZpZXcoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZpZXdDb21wb25lbnRcbiAgICB9LFxuXG4gICAgd3JhcFByaW1pdGl2ZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEud3JhcFByaW1pdGl2ZXNcbiAgICB9LFxuXG4gICAgbGlzdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnZhbHVlXG4gICAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgICAgLy8gQ29udmVydCB0byBsaXN0IGFycmF5LlxuICAgICAgICAgIGRhdGEgPSBkYXRhICE9IG51bGwgPyBbZGF0YV0gOiBbXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIGRhdGEgZ2V0cyBpbmhlcml0ZWQgZnJvbSBwYXJlbnQsIHVud3JhcHBpbmcgaXMgbm90IGhhcHBlbmluZ1xuICAgICAgICAgIC8vIGF0IHRoZSByb290IGluIGBzZXREYXRhKClgLCBidXQgaGVyZSBpbnN0ZWFkLlxuICAgICAgICAgIGRhdGEgPSB0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpIHx8IGRhdGFcbiAgICAgICAgfVxuICAgICAgICBkYXRhIHx8PSBbXVxuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIGlmICh0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBkb25lIHVud3JhcHBpbmcgb25jZSBgbGlzdERhdGFgIGlzIHJlZXZhbHVhdGVkLCBzbyBzZXRcbiAgICAgICAgICAgIC8vIHRoaXMgdG8gYGZhbHNlYCBhZ2Fpbi4gU2VlIGB3cmFwcGVkUHJpbWl0aXZlc2Agd2F0Y2hlciBhYm92ZS5cbiAgICAgICAgICAgIHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDb252ZXJ0IGRhdGEgdG8gYSBsaXN0IG9mIHdyYXBwZWQgcHJpbWl0aXZlcywgYW5kIHJldHVybiBpdC5cbiAgICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhLm1hcCh2YWx1ZSA9PiAoe1xuICAgICAgICAgICAgICBbd3JhcFByaW1pdGl2ZXNdOiB2YWx1ZVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRQcmltaXRpdmVzXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLndyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGFcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDAgPyBkYXRhWzBdIDogbnVsbClcbiAgICAgICAgICAgIDogZGF0YVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9iamVjdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gQWx3YXlzIGdvIHRocm91Z2ggYGxpc3REYXRhYCBpbnRlcm5hbGx5LCB3aGljaCBkb2VzIGFsbCB0aGVcbiAgICAgICAgLy8gcHJvY2Vzc2luZyBvZiBgd3JhcFByaW1pdGl2ZXNgLCBldGMuXG4gICAgICAgIHJldHVybiB0aGlzLmxpc3REYXRhWzBdIHx8IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIHRoaXMubGlzdERhdGEgPSBkYXRhID8gW2RhdGFdIDogW11cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgLy8gVGhlIHNvdXJjZVNjaGVtYSBvZiBhIGxpc3QgaXMgdGhlIGxpc3QncyBzY2hlbWEgaXRzZWxmLlxuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICAvLyBUaGlzIGlzIHVzZWQgaW4gVHlwZUxpc3QgZm9yIERpdG9Gb3JtQ2hvb3Nlci5cbiAgICAgIHJldHVybiB0aGlzLnJvdXRlQ29tcG9uZW50LmdldENoaWxkUGF0aCh0aGlzLnNjaGVtYS5wYXRoKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0UXVlcnkoKSB7XG4gICAgICBjb25zdCB7IGRlZmF1bHRPcmRlcjogb3JkZXIgfSA9IHRoaXNcbiAgICAgIHJldHVybiBvcmRlciA/IHsgb3JkZXIgfSA6IHt9XG4gICAgfSxcblxuICAgIHF1ZXJ5OiBnZXRTdG9yZUFjY2Vzc29yKCdxdWVyeScsIHtcbiAgICAgIGdldChxdWVyeSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnRoaXMuZGVmYXVsdFF1ZXJ5LFxuICAgICAgICAgIC4uLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIHNldChxdWVyeSkge1xuICAgICAgICAvLyBBbHdheXMga2VlcCB0aGUgZGlzcGxheWVkIHF1ZXJ5IHBhcmFtZXRlcnMgaW4gc3luYyB3aXRoIHRoZSBzdG9yZWRcbiAgICAgICAgLy8gb25lcy4gVXNlIHNjb3BlIGFuZCBwYWdlIGZyb20gdGhlIGxpc3Qgc2NoZW1hIGFzIGRlZmF1bHRzLCBidXQgYWxsb3dcbiAgICAgICAgLy8gdGhlIHJvdXRlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gb3ZlcnJpZGUgdGhlbS5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHNjb3BlID0gdGhpcy5kZWZhdWx0U2NvcGU/Lm5hbWUsXG4gICAgICAgICAgcGFnZSA9IHRoaXMuc2NoZW1hLnBhZ2VcbiAgICAgICAgfSA9IHRoaXMucXVlcnlcbiAgICAgICAgLy8gUHJlc2VydmUgLyBtZXJnZSBjdXJyZW50bHkgc3RvcmVkIHZhbHVlcy5cbiAgICAgICAgcXVlcnkgPSB7XG4gICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICAuLi4oc2NvcGUgIT0gbnVsbCAmJiB7IHNjb3BlIH0pLFxuICAgICAgICAgIC4uLihwYWdlICE9IG51bGwgJiYgeyBwYWdlIH0pLFxuICAgICAgICAgIC4uLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlcXVhbHMocXVlcnksIHRoaXMuJHJvdXRlLnF1ZXJ5KSkge1xuICAgICAgICAgIC8vIFRlbGwgdGhlIGAkcm91dGVgIHdhdGNoZXIgdG8gaWdub3JlIHRoZSBjaGFuZ2VkIHRyaWdnZXJlZCBoZXJlOlxuICAgICAgICAgIHRoaXMuaWdub3JlUm91dGVDaGFuZ2UgPSB0cnVlXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBxdWVyeSwgaGFzaDogdGhpcy4kcm91dGUuaGFzaCB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBxdWVyeSAvLyBMZXQgZ2V0U3RvcmVBY2Nlc3NvcigpIGRvIHRoZSBhY3R1YWwgc2V0dGluZ1xuICAgICAgfVxuICAgIH0pLFxuXG4gICAgdG90YWw6IGdldFN0b3JlQWNjZXNzb3IoJ3RvdGFsJyksXG5cbiAgICBjb2x1bW5zKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5jb2x1bW5zKVxuICAgIH0sXG5cbiAgICBzY29wZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnNjb3BlcylcbiAgICB9LFxuXG4gICAgZGVmYXVsdFNjb3BlKCkge1xuICAgICAgaWYgKHRoaXMuc2NvcGVzKSB7XG4gICAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgICAgZm9yIChjb25zdCBzY29wZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuc2NvcGVzKSkge1xuICAgICAgICAgIGlmIChzY29wZS5kZWZhdWx0U2NvcGUpIHtcbiAgICAgICAgICAgIHJldHVybiBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICBmaXJzdCA9IHNjb3BlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaXJzdFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWZhdWx0T3JkZXIoKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5zKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIE9iamVjdC52YWx1ZXModGhpcy5jb2x1bW5zKSkge1xuICAgICAgICAgIGNvbnN0IHsgZGVmYXVsdFNvcnQgfSA9IGNvbHVtblxuICAgICAgICAgIGlmIChkZWZhdWx0U29ydCkge1xuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gaXNTdHJpbmcoZGVmYXVsdFNvcnQpID8gZGVmYXVsdFNvcnQgOiAnYXNjJ1xuICAgICAgICAgICAgcmV0dXJuIGAke2NvbHVtbi5uYW1lfSAke2RpcmVjdGlvbn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG5lc3RlZE1ldGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLm1ldGEsXG4gICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9ybXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KSlcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgbGlua2VkIHZpZXcgc2NoZW1hIGlmIHRoaXMgc291cmNlIGVkaXRzIGl0IGl0cyBpdGVtcyB0aHJvdWdoXG4gICAgLy8gYSBsaW5rZWQgdmlldy5cbiAgICB2aWV3KCkge1xuICAgICAgcmV0dXJuIGdldFZpZXdTY2hlbWEodGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dClcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZpZXdcbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKHRoaXMuc2NoZW1hLmJ1dHRvbnMpXG4gICAgfSxcblxuICAgIGhhc0xhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1zLnNvbWUoaGFzTGFiZWxzKVxuICAgIH0sXG5cbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3Jtcy5ldmVyeShpc0NvbXBhY3QpXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIHBhZ2luYXRlOiBnZXRTY2hlbWFBY2Nlc3NvcigncGFnaW5hdGUnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHJlbmRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbmRlcicsIHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgY3JlYXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY3JlYXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGNyZWF0YWJsZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICAgICAgPyB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICA/ICF0aGlzLnZhbHVlXG4gICAgICAgICAgICA6IHRydWVcbiAgICAgICAgICA6IGZhbHNlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBlZGl0YWJsZSAmJiAhdGhpcy5pc0lubGluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2UgJiYgdGhpcy5saXN0RGF0YS5sZW5ndGggPiAxICYmIGRyYWdnYWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsLCAvLyBzbyB0aGF0IGA/P2AgYmVsb3cgY2FuIGRvIGl0cyB0aGluZzpcbiAgICAgIGdldChjb2xsYXBzaWJsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0lubGluZWQgJiYgISEoY29sbGFwc2libGUgPz8gdGhpcy5jb2xsYXBzZWQgIT09IG51bGwpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb2xsYXBzZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGUodG8sIGZyb20pIHtcbiAgICAgIGlmICh0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMuaWdub3JlUm91dGVDaGFuZ2UgPSBmYWxzZVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChmcm9tLnBhdGggPT09IHRvLnBhdGggJiYgZnJvbS5oYXNoID09PSB0by5oYXNoKSB7XG4gICAgICAgIC8vIFBhdGhzIGFuZCBoYXNoZXMgcmVtYWluIHRoZSBzYW1lLCBzbyBvbmx5IHF1ZXJpZXMgaGF2ZSBjaGFuZ2VkLlxuICAgICAgICAvLyBVcGRhdGUgZmlsdGVyIGFuZCByZWxvYWQgZGF0YSB3aXRob3V0IGNsZWFyaW5nLlxuICAgICAgICB0aGlzLnF1ZXJ5ID0gdG8ucXVlcnlcbiAgICAgICAgdGhpcy5sb2FkRGF0YShmYWxzZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgd3JhcHBlZFByaW1pdGl2ZXM6IHtcbiAgICAgIGRlZXA6IHRydWUsXG4gICAgICBoYW5kbGVyKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIC8vIFNraXAgdGhlIGluaXRpYWwgc2V0dGluZyBvZiB3cmFwcGVkUHJpbWl0aXZlcyBhcnJheVxuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMgJiYgb2xkVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXaGVuZXZlciB0aGUgd3JhcHBlZFByaW1pdGl2ZXMgY2hhbmdlLCBtYXAgdGhlaXIgdmFsdWVzIGJhY2sgdG9cbiAgICAgICAgICAvLyB0aGUgYXJyYXkgb2YgcHJpbWl0aXZlcywgaW4gYSBwcmltaXRpdmUgd2F5IDopXG4gICAgICAgICAgLy8gQnV0IHNldCBgdW53cmFwcGluZ1ByaW1pdGl2ZXMgPSB0cnVlYCwgc28gdGhlIGBsaXN0RGF0YWAgY29tcHV0ZWRcbiAgICAgICAgICAvLyBwcm9wZXJ0eSBrbm93cyBhYm91dCBpdCwgd2hpY2ggc2V0cyBpdCB0byBgZmFsc2VgIGFnYWluLlxuICAgICAgICAgIHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMgPSB0cnVlXG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlLm1hcChvYmplY3QgPT4gb2JqZWN0W3dyYXBQcmltaXRpdmVzXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0dXBEYXRhKCkge1xuICAgICAgdGhpcy5xdWVyeSA9IHRoaXMuJHJvdXRlLnF1ZXJ5XG4gICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5jbGVhckRhdGEoKVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMudG90YWwgPSAwXG4gICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXREYXRhKClcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIC8vIFdoZW4gbmV3IGRhdGEgaXMgbG9hZGVkLCB3ZSBjYW4gc3RvcmUgaXQgcmlnaHQgYmFjayBpbiB0aGUgZGF0YSBvZiB0aGVcbiAgICAgIC8vIHZpZXcgb3IgZm9ybSB0aGF0IGNyZWF0ZWQgdGhpcyBsaXN0IGNvbXBvbmVudC5cbiAgICAgIC8vIFN1cHBvcnQgdHdvIGZvcm1hdHMgZm9yIGxpc3QgZGF0YTpcbiAgICAgIC8vIC0gQXJyYXk6IGBbLi4uXWBcbiAgICAgIC8vIC0gT2JqZWN0OiBgeyByZXN1bHRzOiBbLi4uXSwgdG90YWwgfWAsIHNlZSBgdW53cmFwTGlzdERhdGEoKWBcbiAgICAgIGlmIChcbiAgICAgICAgIWRhdGEgfHxcbiAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2UgJiYgaXNBcnJheShkYXRhKSB8fFxuICAgICAgICB0aGlzLmlzT2JqZWN0U291cmNlICYmIGlzT2JqZWN0KGRhdGEpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy51bndyYXBMaXN0RGF0YShkYXRhKSkge1xuICAgICAgICAvLyBUaGUgZm9ybWF0IGRpZG4ndCBtYXRjaCwgc2VlIGlmIHdlIHJlY2VpdmVkIGEgYHsgcmVzdWx0cywgdG90YWwgfWBcbiAgICAgICAgLy8gb2JqZWN0LCBpbiB3aGljaCBjYXNlIGB0aGlzLnZhbHVlYCB3YXMgYWxyZWFkeSBzZXQgYnlcbiAgICAgICAgLy8gYHVud3JhcExpc3REYXRhKClgIGFuZCB3ZSdyZSBkb25lIG5vdy5cbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGF0YSkgJiYgdGhpcy5pc0luVmlldykge1xuICAgICAgICAvLyBUaGUgY29udHJvbGxlciBpcyBzZW5kaW5nIGRhdGEgZm9yIGEgZnVsbCBtdWx0aS1jb21wb25lbnQgdmlldyxcbiAgICAgICAgLy8gaW5jbHVkaW5nIHRoZSBuZXN0ZWQgbGlzdCBkYXRhLlxuICAgICAgICB0aGlzLnZpZXdDb21wb25lbnQuc2V0RGF0YShkYXRhKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1bndyYXBMaXN0RGF0YShkYXRhKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNMaXN0U291cmNlICYmXG4gICAgICAgIGlzT2JqZWN0KGRhdGEpICYmXG4gICAgICAgIGlzTnVtYmVyKGRhdGEudG90YWwpICYmXG4gICAgICAgIGlzQXJyYXkoZGF0YS5yZXN1bHRzKVxuICAgICAgKSB7XG4gICAgICAgIC8vIElmIEBkaXRvanMvc2VydmVyIHNlbmRzIGRhdGEgaW4gdGhlIGZvcm0gb2YgYHsgcmVzdWx0cywgdG90YWwgfWBcbiAgICAgICAgLy8gcmVwbGFjZSB0aGUgdmFsdWUgd2l0aCByZXN1bHQsIGJ1dCByZW1lbWJlciB0aGUgdG90YWwgaW4gdGhlIHN0b3JlLlxuICAgICAgICB0aGlzLnRvdGFsID0gZGF0YS50b3RhbFxuICAgICAgICB0aGlzLnZhbHVlID0gZGF0YS5yZXN1bHRzXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZUl0ZW0oc2NoZW1hLCB0eXBlKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5jcmVhdGVEYXRhKHNjaGVtYSwgdHlwZSlcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgIHRoaXMub2JqZWN0RGF0YSA9IGl0ZW1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGlzdERhdGEucHVzaChpdGVtKVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29sbGFwc2libGUpIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy5vcGVuU2NoZW1hQ29tcG9uZW50KC0xKSlcbiAgICAgIH1cbiAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgcmV0dXJuIGl0ZW1cbiAgICB9LFxuXG4gICAgcmVtb3ZlSXRlbShpdGVtKSB7XG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBudWxsXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeyBsaXN0RGF0YSB9ID0gdGhpc1xuICAgICAgICBjb25zdCBpbmRleCA9IGxpc3REYXRhICYmIGxpc3REYXRhLmluZGV4T2YoaXRlbSlcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBsaXN0RGF0YS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZXRlSXRlbShpdGVtLCBpbmRleCkge1xuICAgICAgY29uc3QgbGFiZWwgPSBpdGVtICYmIHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc2NoZW1hLCBpdGVtLCB7XG4gICAgICAgIGluZGV4LFxuICAgICAgICBleHRlbmRlZDogdHJ1ZVxuICAgICAgfSlcblxuICAgICAgY29uc3Qgbm90aWZ5ID0gKCkgPT4gdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiB0aGlzLmlzVHJhbnNpZW50ID8gJ2luZm8nIDogJ3N1Y2Nlc3MnLFxuICAgICAgICB0aXRsZTogJ1N1Y2Nlc3NmdWxseSBSZW1vdmVkJyxcbiAgICAgICAgdGV4dDogW1xuICAgICAgICAgIGAke2xhYmVsfSB3YXMgJHt0aGlzLnZlcmJzLmRlbGV0ZWR9LmAsXG4gICAgICAgICAgdGhpcy50cmFuc2llbnROb3RlXG4gICAgICAgIF1cbiAgICAgIH0pXG5cbiAgICAgIGlmIChpdGVtICYmIHdpbmRvdy5jb25maXJtKFxuICAgICAgICBgRG8geW91IHJlYWxseSB3YW50IHRvICR7dGhpcy52ZXJicy5kZWxldGV9ICR7bGFiZWx9P2ApXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSlcbiAgICAgICAgICBub3RpZnkoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGl0ZW1JZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtKVxuICAgICAgICAgIGNvbnN0IHJlc291cmNlID0gZ2V0TWVtYmVyUmVzb3VyY2UoaXRlbUlkLCB0aGlzLnJlc291cmNlKVxuICAgICAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KHsgbWV0aG9kOiAnZGVsZXRlJywgcmVzb3VyY2UgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSlcbiAgICAgICAgICAgICAgICBub3RpZnkoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50cyB9ID0gdGhpc1xuICAgICAgY29uc3QgeyBsZW5ndGggfSA9IHNjaGVtYUNvbXBvbmVudHNcbiAgICAgIHJldHVybiBzY2hlbWFDb21wb25lbnRzWygoaW5kZXggJSBsZW5ndGgpICsgbGVuZ3RoKSAlIGxlbmd0aF1cbiAgICB9LFxuXG4gICAgb3BlblNjaGVtYUNvbXBvbmVudChpbmRleCkge1xuICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoaW5kZXgpXG4gICAgICBpZiAoc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG5hdmlnYXRlVG9Db21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpIHtcbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YVBhdGguc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICAgID8gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICAgID8gcGFyc2VEYXRhUGF0aChkYXRhUGF0aC5zbGljZSh0aGlzLmRhdGFQYXRoLmxlbmd0aCArIDEpKVswXSA/PyBudWxsXG4gICAgICAgICAgICA6IDBcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsICYmIGlzTnVtYmVyKCtpbmRleCkpIHtcbiAgICAgICAgICBjb25zdCBzY2hlbWFDb21wb25lbnQgPSB0aGlzLmdldFNjaGVtYUNvbXBvbmVudCgraW5kZXgpXG4gICAgICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICAgICAgY29uc3QgeyBvcGVuZWQgfSA9IHNjaGVtYUNvbXBvbmVudFxuICAgICAgICAgICAgaWYgKCFvcGVuZWQpIHtcbiAgICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IHRydWVcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy4kbmV4dFRpY2soKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgICAgIGlmIChjb21wb25lbnRzLmxlbmd0aCA+IDAgJiYgKG9uQ29tcGxldGU/Lihjb21wb25lbnRzKSA/PyB0cnVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IG9wZW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZVRvUm91dGVDb21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxPbkNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgICAgIC8vIFJldHJpZXZlIHRoZSBsYXN0IHJvdXRlIGNvbXBvbmVudCwgd2hpY2ggd2lsbCBiZSB0aGUgY29tcG9uZW50IHRoYXRcbiAgICAgICAgICAvLyB3ZSBqdXN0IG5hdmlnYXRlZCB0bywgYW5kIHBhc3MgaXQgb24gdG8gYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICBjb25zdCB7IHJvdXRlQ29tcG9uZW50cyB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgICAgICAgIGNvbnN0IHJvdXRlQ29tcG9uZW50ID0gcm91dGVDb21wb25lbnRzW3JvdXRlQ29tcG9uZW50cy5sZW5ndGggLSAxXVxuICAgICAgICAgIHJlc29sdmUob25Db21wbGV0ZT8uKFtyb3V0ZUNvbXBvbmVudF0pID8/IHRydWUpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhUGF0aFBhcnRzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgcm91dGUgdGhhdCBjYW4gc2VydmUgcGFydCBvZiB0aGUgZ2l2ZW4gZGF0YVBhdGgsXG4gICAgICAgIC8vIGFuZCB0YWtlIGl0IGZyb20gdGhlcmU6XG4gICAgICAgIHdoaWxlIChkYXRhUGF0aFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgoXG4gICAgICAgICAgICB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKG5vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoUGFydHMpKVxuICAgICAgICAgIClcbiAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgYWN0dWFsbHkgaXMgYSByb3V0ZSBmb3IgdGhpcyBzdWItY29tcG9uZW50OlxuICAgICAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVyLm1hdGNoKHBhdGgpXG4gICAgICAgICAgaWYgKG1hdGNoZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4kcm91dGUucGF0aCA9PT0gcGF0aCkge1xuICAgICAgICAgICAgLy8gV2UncmUgYWxyZWFkeSB0aGVyZSwgc28ganVzdCBjYWxsIGBvbkNvbXBsZXRlKClgOlxuICAgICAgICAgICAgICBjYWxsT25Db21wbGV0ZSgpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTmF2aWdhdGUgdG8gdGhlIGNvbXBvbmVudCdzIHBhdGgsIHRoZW4gY2FsbCBgb25Db21wbGV0ZSgpYF86XG4gICAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKFxuICAgICAgICAgICAgICAgIHsgcGF0aCB9LFxuICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBsYXN0IHJvdXRlIGNvbXBvbmVudCB0byBiZSBtb3VudGVkIGluIHRoZSBuZXh0XG4gICAgICAgICAgICAgICAgLy8gdGljayBiZWZvcmUgY2FsbGluZyBgb25Db21wbGV0ZSgpYFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKGNhbGxPbkNvbXBsZXRlKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVqZWN0XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gS2VlcCByZW1vdmluZyB0aGUgbGFzdCBwYXJ0IHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cbiAgICAgICAgICBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgIH0pXG4gICAgfVxuICB9LCAvLyBlbmQgb2YgYG1ldGhvZHNgXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCxcbiAgICBuZXN0ZWQgPSBmYWxzZSwgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgICBjb25zdCBpbmxpbmVkID0gaXNJbmxpbmVkKHNjaGVtYSlcbiAgICBpZiAoaW5saW5lZCAmJiBzY2hlbWEucmVzb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0xpc3RzIHdpdGggbmVzdGVkIGZvcm1zIGNhbm5vdCBsb2FkIGRhdGEgZnJvbSB0aGVpciBvd24gcmVzb3VyY2VzJ1xuICAgICAgKVxuICAgIH1cbiAgICAvLyBVc2UgZGlmZmVyZW50bHkgbmFtZWQgdXJsIHBhcmFtZXRlcnMgb24gZWFjaCBuZXN0ZWQgbGV2ZWwgZm9yIGlkIGFzXG4gICAgLy8gb3RoZXJ3aXNlIHRoZXkgd291bGQgY2xhc2ggYW5kIG92ZXJyaWRlIGVhY2ggb3RoZXIgaW5zaWRlICRyb3V0ZS5wYXJhbXNcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzQ1XG4gICAgY29uc3QgcGFyYW0gPSBgaWQke2xldmVsICsgMX1gXG4gICAgY29uc3QgbWV0YSA9IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgICBjb25zdCBmb3JtTWV0YSA9IHtcbiAgICAgIC4uLm1ldGEsXG4gICAgICAvLyBXaGVuIGNoaWxkcmVuIGFyZSBmbGF0dGVuZWQgKGUuZy4gdHJlZS1saXN0cyksIGluY2x1ZGUgdGhlIGBmbGF0dGVuYFxuICAgICAgLy8gc2V0dGluZyBhbHNvLCBmb3IgZmxhdHRlbmluZyBiZWxvdy5cbiAgICAgIGZsYXR0ZW4sXG4gICAgICBuZXN0ZWQsXG4gICAgICBwYXJhbVxuICAgIH1cbiAgICBjb25zdCBjaGlsZFJvdXRlcyA9IGF3YWl0IHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpXG4gICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgIGF3YWl0IHByb2Nlc3MoY2hpbGRSb3V0ZXMsIGxldmVsICsgMSlcbiAgICB9XG4gICAgLy8gSW5saW5lZCBmb3JtcyBkb24ndCBuZWVkIHRvIGFjdHVhbGx5IGFkZCByb3V0ZXMuXG4gICAgaWYgKGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSAmJiAhaW5saW5lZCkge1xuICAgICAgY29uc3QgZ2V0UGF0aFdpdGhQYXJhbSA9IChwYXRoLCBwYXJhbSkgPT4gcGFyYW1cbiAgICAgICAgPyBwYXRoXG4gICAgICAgICAgPyBgJHtwYXRofS86JHtwYXJhbX1gXG4gICAgICAgICAgOiBgOiR7cGFyYW19YFxuICAgICAgICA6IHBhdGhcblxuICAgICAgLy8gTGlzdHMgaW4gc2luZ2xlLWNvbXBvbmVudC12aWV3cyAobGV2ZWwgPT09IDApIHVzZSB0aGVpciB2aWV3J3MgcGF0aCxcbiAgICAgIC8vIHdoaWxlIGFsbCBvdGhlcnMgbmVlZCB0aGVpciBwYXRoIHByZWZpeGVkIHdpdGggdGhlIHBhcmVudCdzIHBhdGg6XG4gICAgICBjb25zdCBzb3VyY2VQYXRoID0gbGV2ZWwgPT09IDAgPyAnJyA6IHNjaGVtYS5wYXRoXG4gICAgICBjb25zdCBmb3JtUm91dGUgPSB7XG4gICAgICAgIC8vIE9iamVjdCBzb3VyY2VzIGRvbid0IG5lZWQgaWQgcGFyYW1zIGluIHRoZWlyIGZvcm0gcGF0aHMsIGFzIHRoZXlcbiAgICAgICAgLy8gZGlyZWN0bHkgZWRpdCBvbmUgb2JqZWN0LlxuICAgICAgICBwYXRoOiBnZXRQYXRoV2l0aFBhcmFtKHNvdXJjZVBhdGgsIGlzTGlzdFNvdXJjZShzY2hlbWEpICYmIHBhcmFtKSxcbiAgICAgICAgY29tcG9uZW50OiBEaXRvQ29tcG9uZW50LmNvbXBvbmVudChcbiAgICAgICAgICBuZXN0ZWQgPyAnZGl0by1mb3JtLW5lc3RlZCcgOiAnZGl0by1mb3JtJ1xuICAgICAgICApLFxuICAgICAgICBtZXRhOiBmb3JtTWV0YVxuICAgICAgfVxuICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHNjaGVtYSkpIHtcbiAgICAgICAgLy8gQWxzbyBhZGQgYSBwYXJhbSByb3V0ZSwgc2ltcGx5IHRvIGhhbmRsZSAnL2NyZWF0ZScgbGlua3MgdGhlIHNhbWVcbiAgICAgICAgLy8gd2F5IHRoYXQgbGlzdHMgZG8sIHdoZXJlIGl0IG92ZXJsYXBzIHdpdGggOmlkIGZvciBpdGVtIGlkcy5cbiAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgIC4uLmZvcm1Sb3V0ZSxcbiAgICAgICAgICBwYXRoOiBnZXRQYXRoV2l0aFBhcmFtKHNvdXJjZVBhdGgsIHBhcmFtKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHNvdXJjZVBhdGgpIHtcbiAgICAgICAgLy8gSnVzdCByZWRpcmVjdCBiYWNrIHRvIHRoZSBwYXJlbnQgd2hlbiBhIG5lc3RlZCBzb3VyY2Ugcm91dGUgaXMgaGl0LlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgcGF0aDogc291cmNlUGF0aCxcbiAgICAgICAgICByZWRpcmVjdDogJy4nLFxuICAgICAgICAgIG1ldGFcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIC8vIFBhcnRpdGlvbiBjaGlsZFJvdXRlcyBpbnRvIHRob3NlIHRoYXQgbmVlZCBmbGF0dGVuaW5nIChlLmcuIHRyZWUtbGlzdHMpXG4gICAgICAvLyBhbmQgdGhvc2UgdGhhdCBkb24ndCwgYW5kIHByb2Nlc3MgZWFjaCBncm91cCBzZXBhcmF0ZWx5IGFmdGVyLlxuICAgICAgY29uc3QgW2ZsYXRSb3V0ZXMsIHN1YlJvdXRlc10gPSBjaGlsZFJvdXRlcy5yZWR1Y2UoXG4gICAgICAgIChyZXMsIHJvdXRlKSA9PiB7XG4gICAgICAgICAgcmVzW3JvdXRlLm1ldGEuZmxhdHRlbiA/IDAgOiAxXS5wdXNoKHJvdXRlKVxuICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfSxcbiAgICAgICAgW1tdLCBbXV1cbiAgICAgIClcbiAgICAgIGlmIChzdWJSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvcm1Sb3V0ZS5jaGlsZHJlbiA9IHN1YlJvdXRlc1xuICAgICAgfVxuICAgICAgcm91dGVzLnB1c2goZm9ybVJvdXRlKVxuICAgICAgLy8gQWRkIHRoZSBwcmVmaXhlZCBmb3JtUm91dGVzIHdpdGggdGhlaXIgY2hpbGRyZW4gZm9yIG5lc3RlZCBsaXN0cy5cbiAgICAgIGlmIChmbGF0Um91dGVzLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkUm91dGUgb2YgZmxhdFJvdXRlcykge1xuICAgICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLihjaGlsZFJvdXRlLnJlZGlyZWN0ID8gY2hpbGRSb3V0ZSA6IGZvcm1Sb3V0ZSksXG4gICAgICAgICAgICBwYXRoOiBgJHtmb3JtUm91dGUucGF0aH0vJHtjaGlsZFJvdXRlLnBhdGh9YCxcbiAgICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgICAgLi4uY2hpbGRSb3V0ZS5tZXRhLFxuICAgICAgICAgICAgICBmbGF0dGVuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKSB7XG4gICAgZ3JhcGguYWRkU291cmNlKGRhdGFQYXRoLCBzY2hlbWEpXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cbiIsImltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXksIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGZpbHRlckNvbXBvbmVudHMgPSB7XG4gIHRleHQoZmlsdGVyKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdjb250YWlucycsXG4gICAgICAgIHZhbHVlOiAnY29udGFpbnMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ2VxdWFscycsXG4gICAgICAgIHZhbHVlOiAnZXF1YWxzJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdzdGFydHMgd2l0aCcsXG4gICAgICAgIHZhbHVlOiAnc3RhcnRzLXdpdGgnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ2VuZHMgd2l0aCcsXG4gICAgICAgIHZhbHVlOiAnZW5kcy13aXRoJ1xuICAgICAgfVxuICAgIF1cbiAgICByZXR1cm4ge1xuICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvcnNcbiAgICAgICAgPyB7XG4gICAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgb3B0aW9uczpcbiAgICAgICAgICAgIGlzQXJyYXkoZmlsdGVyLm9wZXJhdG9ycylcbiAgICAgICAgICAgICAgPyBvcHRpb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICBvcHRpb24gPT4gZmlsdGVyLm9wZXJhdG9ycy5pbmNsdWRlcyhvcHRpb24udmFsdWUpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBvcHRpb25zLFxuICAgICAgICAgIHdpZHRoOiAnNDAlJ1xuICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRleHQ6IHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB3aWR0aDogZmlsdGVyLm9wZXJhdG9ycyA/ICc2MCUnIDogJ2ZpbGwnXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gICdkYXRlLXJhbmdlJygpIHtcbiAgICAvLyBVc2Ugc2hvcnRlciBkYXRlIGZvcm1hdCBpbiBkYXRlLXJhbmdlIGZpbHRlcnM6XG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IHtcbiAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgIHllYXI6ICdudW1lcmljJ1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZnJvbToge1xuICAgICAgICB0eXBlOiAnZGF0ZXRpbWUnLFxuICAgICAgICB3aWR0aDogJzUwJScsXG4gICAgICAgIGRhdGVGb3JtYXRcbiAgICAgIH0sXG4gICAgICB0bzoge1xuICAgICAgICB0eXBlOiAnZGF0ZXRpbWUnLFxuICAgICAgICB3aWR0aDogJzUwJScsXG4gICAgICAgIGRhdGVGb3JtYXRcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlcnNQYW5lbChmaWx0ZXJzLCBkYXRhUGF0aCwgcHJveHkpIHtcbiAgY29uc3QgcGFuZWwgPSB7XG4gICAgbGFiZWw6ICdGaWx0ZXJzJyxcbiAgICBuYW1lOiAnJGZpbHRlcnMnLFxuICAgIHRhcmdldDogZGF0YVBhdGgsXG4gICAgLy8gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgLy8gTk9URTogT24gcGFuZWxzLCB0aGUgZGF0YSgpIGNhbGxiYWNrIGRvZXMgc29tZXRoaW5nIGVsc2UgdGhhbiBvbiBub3JtYWxcbiAgICAvLyBzY2hlbWE6IEl0IHByb2R1Y2VzIHRoZSBgZGF0YWAgcHJvcGVydHkgdG8gYmUgcGFzc2VkIHRvIHRoZSBwYW5lbCdzXG4gICAgLy8gc2NoZW1hLCBub3QgdGhlIGRhdGEgdG8gYmUgdXNlZCBmb3IgdGhlIHBhbmVsIGNvbXBvbmVudCBkaXJlY3RseS5cbiAgICBkYXRhKCkge1xuICAgICAgcmV0dXJuIHBhcnNlRmlsdGVyc0RhdGEoXG4gICAgICAgIHBhbmVsLFxuICAgICAgICBwcm94eS5xdWVyeVxuICAgICAgKVxuICAgIH0sXG4gICAgY29tcG9uZW50czogZ2V0RmlsdGVyc0NvbXBvbmVudHMoZmlsdGVycyksXG4gICAgYnV0dG9uczoge1xuICAgICAgY2xlYXI6IHtcbiAgICAgICAgdGV4dDogJ0NsZWFyJyxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgY2xpY2soeyBzY2hlbWFDb21wb25lbnQgfSkge1xuICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50LnJlc2V0RGF0YSgpXG4gICAgICAgICAgICBzY2hlbWFDb21wb25lbnQuYXBwbHlGaWx0ZXJzKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGZpbHRlcjoge1xuICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgdGV4dDogJ0ZpbHRlcicsXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5hcHBseUZpbHRlcnMoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgYXBwbHlGaWx0ZXJzKCkge1xuICAgICAgICBwcm94eS5xdWVyeSA9IHtcbiAgICAgICAgICAuLi5wcm94eS5xdWVyeSxcbiAgICAgICAgICBmaWx0ZXI6IGZvcm1hdEZpbHRlcnNEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpLFxuICAgICAgICAgIC8vIENsZWFyIHBhZ2luYXRpb24gd2hlbiBhcHBseWluZyBvciBjbGVhcmluZyBmaWx0ZXJzOlxuICAgICAgICAgIHBhZ2U6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBwYW5lbFxufVxuXG5mdW5jdGlvbiBnZXRGaWx0ZXJzQ29tcG9uZW50cyhmaWx0ZXJzKSB7XG4gIGNvbnN0IGNvbXBzID0ge31cbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgT2JqZWN0LnZhbHVlcyhmaWx0ZXJzIHx8IHt9KSkge1xuICAgIC8vIFN1cHBvcnQgYm90aCBjdXN0b20gZm9ybXMgYW5kIGRlZmF1bHQgZmlsdGVyIGNvbXBvbmVudHMsIHRocm91Z2ggdGhlXG4gICAgLy8gYGZpbHRlckNvbXBvbmVudHNgIHJlZ2lzdHJ5LiBFdmVuIGZvciBkZWZhdWx0IGZpbHRlcnMsIHN0aWxsIHVzZSB0aGVcbiAgICAvLyBwcm9wZXJ0aWVzIGluIGBmaWx0ZXJgIGFzIHRoZSBiYXNlIGZvciBgZm9ybWAsIHNvIHRoaW5ncyBsaWtlIGBsYWJlbGBcbiAgICAvLyBjYW4gYmUgY2hhbmdlZCBvbiB0aGUgcmVzdWx0aW5nIGZvcm0uXG4gICAgY29uc3QgeyBmaWx0ZXI6IHR5cGUsIC4uLmZvcm0gfSA9IGZpbHRlclxuICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0eXBlXG4gICAgICA/IGZpbHRlckNvbXBvbmVudHNbdHlwZV0/LihmaWx0ZXIpXG4gICAgICA6IGZpbHRlci5jb21wb25lbnRzXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvcm0uY29tcG9uZW50cyA9IHt9XG4gICAgICAvLyBDb252ZXJ0IGxhYmVscyB0byBwbGFjZWhvbGRlcnM6XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGNvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgIGNvbnN0IGxhYmVsID0gY29tcG9uZW50LmxhYmVsIHx8IGxhYmVsaXplKGNvbXBvbmVudC5uYW1lIHx8IGtleSlcbiAgICAgICAgICBmb3JtLmNvbXBvbmVudHNba2V5XSA9IHtcbiAgICAgICAgICAgIC4uLmNvbXBvbmVudCxcbiAgICAgICAgICAgIGxhYmVsOiBmYWxzZSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBsYWJlbFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29tcHNbZmlsdGVyLm5hbWVdID0ge1xuICAgICAgICBsYWJlbDogZm9ybS5sYWJlbCxcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+ICh7fSksXG4gICAgICAgIGZvcm0sXG4gICAgICAgIGlubGluZWQ6IHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBmaWx0ZXIgJyR7ZmlsdGVyLm5hbWV9JzogVW5rbm93biBmaWx0ZXIgdHlwZSAnJHt0eXBlfScuYFxuICAgICAgKVxuICAgIH1cbiAgfVxuICByZXR1cm4gY29tcHNcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gc2NoZW1hLmNvbXBvbmVudHNbbmFtZV1cbiAgcmV0dXJuIGNvbXBvbmVudD8uZm9ybT8uY29tcG9uZW50c1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGaWx0ZXJzRGF0YShzY2hlbWEsIGRhdGEpIHtcbiAgY29uc3QgZmlsdGVycyA9IFtdXG4gIGZvciAoY29uc3QgbmFtZSBpbiBkYXRhKSB7XG4gICAgY29uc3QgZW50cnkgPSBkYXRhW25hbWVdXG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICAvLyBNYXAgY29tcG9uZW50cyBzZXF1ZW5jZSB0byBhcmd1bWVudHM6XG4gICAgICBjb25zdCBhcmdzID0gT2JqZWN0LmtleXMoZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpKS5tYXAoXG4gICAgICAgIGtleSA9PiBlbnRyeVtrZXldID8/IG51bGxcbiAgICAgIClcbiAgICAgIC8vIE9ubHkgYXBwbHkgZmlsdGVyIGlmIHRoZXJlIGFyZSBzb21lIGFyZ3VtZW50cyB0aGF0IGFyZW4ndCBudWxsOlxuICAgICAgaWYgKGFyZ3Muc29tZSh2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgZmlsdGVycy5wdXNoKGAke25hbWV9OiR7YXJncy5tYXAoSlNPTi5zdHJpbmdpZnkpLmpvaW4oJywnKX1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsdGVycy5sZW5ndGggPyBmaWx0ZXJzIDogdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIHBhcnNlRmlsdGVyc0RhdGEoc2NoZW1hLCBxdWVyeSkge1xuICBjb25zdCBmaWx0ZXJzID0ge31cbiAgLy8gU2FtZSBhcyBAZGl0b2pzL3NlcnZlcidzIFF1ZXJ5UGFyYW1ldGVycy5maWx0ZXI6IFRyYW5zbGF0ZSB0aGUgc3RyaW5nIGRhdGFcbiAgLy8gZnJvbSAkcm91dGUucXVlcnkgYmFjayB0byBwYXJhbSBsaXN0cyBwZXIgZmlsdGVyOlxuICBpZiAocXVlcnkpIHtcbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBhc0FycmF5KHF1ZXJ5LmZpbHRlcikpIHtcbiAgICAgIGNvbnN0IFssIG5hbWUsIGpzb25dID0gZmlsdGVyLm1hdGNoKC9eKFxcdyspOiguKikkLylcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbHRlcnNbbmFtZV0gPSBhc0FycmF5KEpTT04ucGFyc2UoYFske2pzb259XWApKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgZmlsdGVyc0RhdGEgPSB7fVxuICBmb3IgKGNvbnN0IG5hbWUgaW4gc2NoZW1hLmNvbXBvbmVudHMpIHtcbiAgICBjb25zdCBkYXRhID0ge31cbiAgICAvLyBJZiB3ZSBoYXZlIHJldHJpZXZlZCBwYXJhbXMgZnJvbSB0aGUgcXVlcnksIGZldGNoIHRoZSBhc3NvY2lhdGVkXG4gICAgLy8gZm9ybSBjb21wb25lbnRzIHNvIHdlIGNhbiBtYXAgdGhlIHZhbHVlcyBiYWNrIHRvIG9iamVjdCBrZXlzOlxuICAgIGNvbnN0IGFyZ3MgPSBmaWx0ZXJzW25hbWVdXG4gICAgaWYgKGFyZ3MpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSlcbiAgICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY29tcG9uZW50cykge1xuICAgICAgICAgIGRhdGFba2V5XSA9IGFyZ3NbaW5kZXgrK11cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmaWx0ZXJzRGF0YVtuYW1lXSA9IGRhdGFcbiAgfVxuICByZXR1cm4gZmlsdGVyc0RhdGFcbn1cbiIsIlxuLmRpdG8tbGlzdChcbiAgdi1pZj1cImlzUmVhZHlcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4pXG4gIC5kaXRvLW5hdmlnYXRpb25cbiAgICBkaXRvLXNjb3BlcyhcbiAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgKVxuICAgIC8vIFdoZW4gdGhlcmUncyBvbmx5IHBhZ2luYXRpb24gd2l0aG91dCBzY29wZXMsIHdlIG5lZWQgYSBnb29kIG9sJyBzcGFjZXJcbiAgICAvLyBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgIC5kaXRvLXNwYWNlcihcbiAgICAgIHYtZWxzZS1pZj1cInBhZ2luYXRlXCJcbiAgICApXG4gICAgZGl0by1wYWdpbmF0aW9uKFxuICAgICAgdi1pZj1cInBhZ2luYXRlXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpsaW1pdD1cInBhZ2luYXRlXCJcbiAgICAgIDp0b3RhbD1cInRvdGFsIHx8IDBcIlxuICAgIClcbiAgdGFibGUuZGl0by10YWJsZShcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLXRhYmxlLXNlcGFyYXRvcnMnOiBpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1sYXJnZXItcGFkZGluZyc6IGhhc0VkaXRCdXR0b25zICYmICFpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1hbHRlcm5hdGUtY29sb3JzJzogIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWV2ZW4tY291bnQnOiBoYXNFdmVuQ291bnRcbiAgICB9YFxuICApXG4gICAgZGl0by10YWJsZS1oZWFkKFxuICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmNvbHVtbnM9XCJjb2x1bW5zXCJcbiAgICAgIDpoYXNFZGl0QnV0dG9ucz1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgdnVlLWRyYWdnYWJsZShcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgOmxpc3Q9XCJ1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3REYXRhLCBwYWdpbmF0aW9uUmFuZ2UpXCJcbiAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgIClcbiAgICAgIHRyKFxuICAgICAgICB2LWZvcj1cIml0ZW0sIGluZGV4IGluIGxpc3REYXRhXCJcbiAgICAgICAgOmtleT1cImdldEl0ZW1VaWQoc2NoZW1hLCBpdGVtKVwiXG4gICAgICAgIDppZD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKHYtaWY9XCJjb2x1bW5zXCIpXG4gICAgICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGNvbHVtbilcIlxuICAgICAgICAgICAgOmtleT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgIDpjZWxsPVwiY29sdW1uXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UpXG4gICAgICAgICAgdGRcbiAgICAgICAgICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICAgICAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4LCBhc09iamVjdDogdHJ1ZSB9KVwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShpbmRleClcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbXBvbmVudChcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXggfSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgIHYtaWY9XCJoYXNDZWxsRWRpdEJ1dHRvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgKVxuICAgIC8vIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBpbnNpZGUgdGFibGUgd2hlbiBub3QgaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgdGZvb3QoXG4gICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgIXNpbmdsZVwiXG4gICAgKVxuICAgICAgdHJcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICA6Y29sc3Bhbj1cIm51bUNvbHVtbnNcIlxuICAgICAgICApXG4gICAgICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgICAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgKVxuICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgb3V0c2lkZSB0YWJsZSB3aGVuIGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICBkaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmIHNpbmdsZVwiXG4gICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tbGlzdChcbiAgICB2LWlmPVwiaXNSZWFkeVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gICAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbiAgKVxuICAgIC5kaXRvLW5hdmlnYXRpb25cbiAgICAgIGRpdG8tc2NvcGVzKFxuICAgICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgICAgIClcbiAgICAgIC8vIFdoZW4gdGhlcmUncyBvbmx5IHBhZ2luYXRpb24gd2l0aG91dCBzY29wZXMsIHdlIG5lZWQgYSBnb29kIG9sJyBzcGFjZXJcbiAgICAgIC8vIGRpdiwgZm9yIHRoZSBsYXlvdXQgbm90IHRvIGJyZWFrLi4uXG4gICAgICAuZGl0by1zcGFjZXIoXG4gICAgICAgIHYtZWxzZS1pZj1cInBhZ2luYXRlXCJcbiAgICAgIClcbiAgICAgIGRpdG8tcGFnaW5hdGlvbihcbiAgICAgICAgdi1pZj1cInBhZ2luYXRlXCJcbiAgICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgICA6bGltaXQ9XCJwYWdpbmF0ZVwiXG4gICAgICAgIDp0b3RhbD1cInRvdGFsIHx8IDBcIlxuICAgICAgKVxuICAgIHRhYmxlLmRpdG8tdGFibGUoXG4gICAgICA6Y2xhc3M9YHtcbiAgICAgICAgJ2RpdG8tdGFibGUtc2VwYXJhdG9ycyc6IGlzSW5saW5lZCxcbiAgICAgICAgJ2RpdG8tdGFibGUtbGFyZ2VyLXBhZGRpbmcnOiBoYXNFZGl0QnV0dG9ucyAmJiAhaXNJbmxpbmVkLFxuICAgICAgICAnZGl0by10YWJsZS1hbHRlcm5hdGUtY29sb3JzJzogIWlzSW5saW5lZCxcbiAgICAgICAgJ2RpdG8tdGFibGUtZXZlbi1jb3VudCc6IGhhc0V2ZW5Db3VudFxuICAgICAgfWBcbiAgICApXG4gICAgICBkaXRvLXRhYmxlLWhlYWQoXG4gICAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgICA6Y29sdW1ucz1cImNvbHVtbnNcIlxuICAgICAgICA6aGFzRWRpdEJ1dHRvbnM9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgICApXG4gICAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdERhdGEsIHBhZ2luYXRpb25SYW5nZSlcIlxuICAgICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgICAgKVxuICAgICAgICB0cihcbiAgICAgICAgICB2LWZvcj1cIml0ZW0sIGluZGV4IGluIGxpc3REYXRhXCJcbiAgICAgICAgICA6a2V5PVwiZ2V0SXRlbVVpZChzY2hlbWEsIGl0ZW0pXCJcbiAgICAgICAgICA6aWQ9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUodi1pZj1cImNvbHVtbnNcIilcbiAgICAgICAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmNlbGw9XCJjb2x1bW5cIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICAgIHRkXG4gICAgICAgICAgICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgICAgICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCwgYXNPYmplY3Q6IHRydWUgfSlcIlxuICAgICAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb21wb25lbnQoXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dChpdGVtLCBpbmRleCkpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXggfSlcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgIHYtaWY9XCJoYXNDZWxsRWRpdEJ1dHRvbnNcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgaW5zaWRlIHRhYmxlIHdoZW4gbm90IGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgICAgdGZvb3QoXG4gICAgICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiAhc2luZ2xlXCJcbiAgICAgIClcbiAgICAgICAgdHJcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmNvbHNwYW49XCJudW1Db2x1bW5zXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICApXG4gICAgLy8gUmVuZGVyIGNyZWF0ZSBidXR0b25zIG91dHNpZGUgdGFibGUgd2hlbiBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgICBkaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgc2luZ2xlXCJcbiAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tbGlzdFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC5kaXRvLW5hdmlnYXRpb25cbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgICAgcGFkZGluZy1ib3R0b206ICRjb250ZW50LXBhZGRpbmctaGFsZlxuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICAmOmVtcHR5XG4gICAgICAgIGRpc3BsYXk6IG5vbmVcbiAgICAgIC5kaXRvLXNjb3BlcyxcbiAgICAgIC5kaXRvLXBhZ2luYXRpb25cbiAgICAgICAgZGlzcGxheTogZmxleFxuICAgICAgICBmbGV4OiAwIDEgYXV0b1xuICAgICAgICBtaW4td2lkdGg6IDBcbiAgICAmLmRpdG8tc2luZ2xlXG4gICAgICAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgICBkaXNwbGF5OiBncmlkXG4gICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICBoZWlnaHQ6IDEwMCVcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCBPcmRlcmVkTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09yZGVyZWRNaXhpbi5qcydcbmltcG9ydCBWdWVEcmFnZ2FibGUgZnJvbSAndnVlZHJhZ2dhYmxlJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBnZXRWaWV3RWRpdFBhdGggfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRGaWx0ZXJzUGFuZWwgfSBmcm9tICcuLi91dGlscy9maWx0ZXIuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBwaWNrQnksIGVxdWFscywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xpc3QnLCB7XG4gIGNvbXBvbmVudHM6IHsgVnVlRHJhZ2dhYmxlIH0sXG4gIG1peGluczogW1NvdXJjZU1peGluLCBPcmRlcmVkTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBnZXRQYW5lbFNjaGVtYShzY2hlbWEsIGRhdGFQYXRoLCBzY2hlbWFDb21wb25lbnQpIHtcbiAgICBjb25zdCB7IGZpbHRlcnMgfSA9IHNjaGVtYVxuICAgIC8vIFNlZSBpZiB0aGlzIGxpc3QgY29tcG9uZW50IHdhbnRzIHRvIGRpc3BsYXkgYSBmaWx0ZXIgcGFuZWwsIGFuZCBpZiBzbyxcbiAgICAvLyBjcmVhdGUgdGhlIHBhbmVsIHNjaGVtYSBmb3IgaXQgdGhyb3VnaCBgZ2V0RmlsdGVyc1BhbmVsKClgLlxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAvLyBBdCB0aGUgdGltZSBvZiB0aGUgY3JlYXRpb24gb2YgdGhlIHBhbmVsIHNjaGVtYSwgdGhlIHNjaGVtYUNvbXBvbmVudCBpc1xuICAgICAgLy8gbm90IGZpbGxlZCB5ZXQsIHNvIHdlIGNhbid0IGdldCB0aGUgdGFyZ2V0IGNvbXBvbmVudCAoZGF0YVBhdGgpIHJpZ2h0XG4gICAgICAvLyBhd2F5LiBVc2UgYSBwcm94eSBhbmQgYSBnZXR0ZXIgaW5zdGVhZCwgdG8gZ2V0IGFyb3VuZCB0aGlzOlxuICAgICAgY29uc3QgZ2V0TGlzdENvbXBvbmVudCA9ICgpID0+IHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeURhdGFQYXRoKFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgY29tcG9uZW50ID0+IGNvbXBvbmVudC50eXBlID09PSAnbGlzdCdcbiAgICAgIClcblxuICAgICAgcmV0dXJuIGdldEZpbHRlcnNQYW5lbChcbiAgICAgICAgZ2V0TmFtZWRTY2hlbWFzKGZpbHRlcnMpLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgeyAvLyBDcmVhdGUgYSBzaW1wbGUgcHJveHkgdG8gZ2V0IC8gc2V0IHRoZSBxdWVyeSwgc2VlIGdldEZpbHRlcnNQYW5lbCgpXG4gICAgICAgICAgZ2V0IHF1ZXJ5KCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldExpc3RDb21wb25lbnQoKT8ucXVlcnlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldCBxdWVyeShxdWVyeSkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZ2V0TGlzdENvbXBvbmVudCgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgdW5kZWZpbmVkIHZhbHVlcyBmb3IgY29tcGFyaW5nIHdpdGggZXF1YWxzKClcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gb2JqID0+IHBpY2tCeShvYmosIHZhbHVlID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIGlmICghZXF1YWxzKGZpbHRlcihxdWVyeSksIGZpbHRlcihjb21wb25lbnQucXVlcnkpKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5xdWVyeSA9IHF1ZXJ5XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmxvYWREYXRhKGZhbHNlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaGFzTGlzdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gISEoXG4gICAgICAgIHRoaXMuYnV0dG9uU2NoZW1hcyB8fFxuICAgICAgICB0aGlzLmNyZWF0YWJsZVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNFZGl0QnV0dG9ucygpIHtcbiAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgIHJldHVybiBsaXN0RGF0YS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgdGhpcy5lZGl0YWJsZSB8fFxuICAgICAgICB0aGlzLmRlbGV0YWJsZSB8fFxuICAgICAgICB0aGlzLmRyYWdnYWJsZVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNDZWxsRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNJbmxpbmVkICYmIHRoaXMuaGFzRWRpdEJ1dHRvbnNcbiAgICB9LFxuXG4gICAgaGFzRXZlbkNvdW50KCkge1xuICAgICAgcmV0dXJuICEodGhpcy5saXN0RGF0YS5sZW5ndGggJSAyKVxuICAgIH0sXG5cbiAgICBudW1Db2x1bW5zKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHRoaXMuY29sdW1ucyA/IE9iamVjdC5rZXlzKHRoaXMuY29sdW1ucykubGVuZ3RoIDogMSkgK1xuICAgICAgICAodGhpcy5oYXNDZWxsRWRpdEJ1dHRvbnMgPyAxIDogMClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldERhdGFQYXRoKGluZGV4KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgfSxcblxuICAgIGdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KSB7XG4gICAgICBpZiAodGhpcy5lZGl0YWJsZSkge1xuICAgICAgICBjb25zdCBwYXRoID0gZ2V0Vmlld0VkaXRQYXRoKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpIHx8IHRoaXMucGF0aFxuICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgcmV0dXJuIGAke3BhdGh9LyR7aWR9YFxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q2VsbENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIGBkaXRvLWNlbGwtJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0Q29udGV4dChpdGVtLCBpbmRleCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgZGF0YVBhdGg6IHRoaXMuZ2V0RGF0YVBhdGgoaW5kZXgpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkZpbHRlckVycm9ycyhlcnJvcnMpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnNEYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsICckZmlsdGVycycpXG4gICAgICBjb25zdCBwYW5lbCA9IHRoaXMuc2NoZW1hQ29tcG9uZW50LmdldFBhbmVsQnlEYXRhUGF0aChmaWx0ZXJzRGF0YVBhdGgpXG4gICAgICBpZiAocGFuZWwpIHtcbiAgICAgICAgcGFuZWwuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5kaXRvLWxhYmVsLmRpdG8tbGFiZWwtY29tcG9uZW50KDpsYWJlbD1cInZhbHVlXCIgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGRpdG8tbGFiZWwuZGl0by1sYWJlbC1jb21wb25lbnQoOmxhYmVsPVwidmFsdWVcIiA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWxhYmVsLWNvbXBvbmVudFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBoZWlnaHQ6IDJlbVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdsYWJlbCcsIHtcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1tYXJrdXAoXG4gIDppZD1cImRhdGFQYXRoXCJcbilcbiAgZWRpdG9yLW1lbnUtYmFyLmRpdG8tbWFya3VwLXRvb2xiYXIoOmVkaXRvcj1cImVkaXRvclwiKVxuICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXRvb2xiYXIoXG4gICAgICB2LWlmPVwiZ3JvdXBlZEJ1dHRvbnMubGVuZ3RoID4gMFwiXG4gICAgKVxuICAgICAgLmRpdG8tYnV0dG9uLWdyb3VwKFxuICAgICAgICB2LWZvcj1cImJ1dHRvbnMgaW4gZ3JvdXBlZEJ1dHRvbnNcIlxuICAgICAgKVxuICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgdi1mb3I9XCJ7IG5hbWUsIGljb24sIGlzQWN0aXZlLCBvbkNsaWNrIH0gaW4gYnV0dG9uc1wiXG4gICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCIsXG4gICAgICAgICAgQGNsaWNrPVwib25DbGlja1wiXG4gICAgICAgIClcbiAgICAgICAgICBpY29uKDpuYW1lPVwiaWNvblwiKVxuICBlZGl0b3ItY29udGVudC5kaXRvLW1hcmt1cC1lZGl0b3IoXG4gICAgcmVmPVwiZWRpdG9yXCJcbiAgICA6ZWRpdG9yPVwiZWRpdG9yXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApXG4gIC5kaXRvLXJlc2l6ZShcbiAgICB2LWlmPVwicmVzaXphYmxlXCJcbiAgICBAbW91c2Vkb3duLnN0b3AucHJldmVudD1cIm9uRHJhZ1Jlc2l6ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLW1hcmt1cChcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gIClcbiAgICBlZGl0b3ItbWVudS1iYXIuZGl0by1tYXJrdXAtdG9vbGJhcig6ZWRpdG9yPVwiZWRpdG9yXCIpXG4gICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy10b29sYmFyKFxuICAgICAgICB2LWlmPVwiZ3JvdXBlZEJ1dHRvbnMubGVuZ3RoID4gMFwiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWJ1dHRvbi1ncm91cChcbiAgICAgICAgICB2LWZvcj1cImJ1dHRvbnMgaW4gZ3JvdXBlZEJ1dHRvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgdi1mb3I9XCJ7IG5hbWUsIGljb24sIGlzQWN0aXZlLCBvbkNsaWNrIH0gaW4gYnV0dG9uc1wiXG4gICAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIixcbiAgICAgICAgICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGljb24oOm5hbWU9XCJpY29uXCIpXG4gICAgZWRpdG9yLWNvbnRlbnQuZGl0by1tYXJrdXAtZWRpdG9yKFxuICAgICAgcmVmPVwiZWRpdG9yXCJcbiAgICAgIDplZGl0b3I9XCJlZGl0b3JcIlxuICAgICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgICApXG4gICAgLmRpdG8tcmVzaXplKFxuICAgICAgdi1pZj1cInJlc2l6YWJsZVwiXG4gICAgICBAbW91c2Vkb3duLnN0b3AucHJldmVudD1cIm9uRHJhZ1Jlc2l6ZVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLW1hcmt1cFxuICAgIEBleHRlbmQgJWlucHV0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG5cbiAgICAuZGl0by1yZXNpemVcbiAgICAgIEBleHRlbmQgJWljb24tcmVzaXplXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIHRvcDogdW5zZXRcbiAgICAgIGxlZnQ6IHVuc2V0XG4gICAgICByaWdodDogMFxuICAgICAgYm90dG9tOiAwXG4gICAgICB3aWR0aDogMWVtXG4gICAgICBoZWlnaHQ6IDFlbVxuXG4gICAgLlByb3NlTWlycm9yXG4gICAgICBoZWlnaHQ6IDEwMCVcbiAgICAgIG91dGxpbmU6IG5vbmVcblxuICAgIC5kaXRvLW1hcmt1cC1lZGl0b3JcbiAgICAgIG92ZXJmbG93LXk6IHNjcm9sbFxuICAgICAgLy8gTW92ZSBwYWRkaW5nIFwiaW5zaWRlXCIgZWRpdG9yIHRvIGNvcnJlY3RseSBwb3NpdGlvbiBzY3JvbGxiYXJcbiAgICAgIG1hcmdpbi1yaWdodDogLSRpbnB1dC1wYWRkaW5nLWhvclxuICAgICAgcGFkZGluZy1yaWdodDogJGlucHV0LXBhZGRpbmctaG9yXG5cbiAgICAuZGl0by1idXR0b25zLXRvb2xiYXJcbiAgICAgIG1hcmdpbjogJGlucHV0LXBhZGRpbmctdmVyIDBcblxuICAgIGgxLFxuICAgIGgyLFxuICAgIGgzLFxuICAgIHAsXG4gICAgdWwsXG4gICAgb2wsXG4gICAgcHJlLFxuICAgIGJsb2NrcXVvdGVcbiAgICAgIG1hcmdpbjogMXJlbSAwXG4gICAgICAmOmZpcnN0LWNoaWxkXG4gICAgICAgIG1hcmdpbi10b3A6IDBcbiAgICAgICY6bGFzdC1jaGlsZFxuICAgICAgICBtYXJnaW4tYm90dG9tOiAwXG4gICAgaDEsXG4gICAgaDIsXG4gICAgaDNcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgaDFcbiAgICAgIGZvbnQtc2l6ZTogMS40cmVtXG4gICAgaDJcbiAgICAgIGZvbnQtc2l6ZTogMS4ycmVtXG4gICAgdWxcbiAgICAgIGxpc3Qtc3R5bGU6IGRpc2NcbiAgICBjb2RlXG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm9cbiAgICBwcmVcbiAgICAgIHBhZGRpbmc6IDAuN3JlbSAxcmVtXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtlclxuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICAgb3ZlcmZsb3cteDogYXV0b1xuICAgICAgY29kZVxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgIHAgY29kZVxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICBwYWRkaW5nOiAwIDAuM3JlbVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyXG4gICAgYVxuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmVcbiAgICAgIGN1cnNvcjogZGVmYXVsdFxuICAgICAgY29sb3I6IGJsdWVcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lXG4gICAgdWwsXG4gICAgb2xcbiAgICAgIHBhZGRpbmctbGVmdDogMnJlbVxuICAgIGxpXG4gICAgICAmID4gcCxcbiAgICAgICYgPiBvbCxcbiAgICAgICYgPiB1bFxuICAgICAgICBtYXJnaW46IDBcbiAgICBibG9ja3F1b3RlXG4gICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICRjb2xvci1saWdodGVyXG4gICAgICBwYWRkaW5nLWxlZnQ6IDFyZW1cbiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpY1xuICAgICAgcFxuICAgICAgICBtYXJnaW46IDBcblxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IEVkaXRvciwgRWRpdG9yQ29udGVudCwgRWRpdG9yTWVudUJhciwgTWFyayB9IGZyb20gJ3RpcHRhcCdcbmltcG9ydCB7IHRvZ2dsZU1hcmsgfSBmcm9tICd0aXB0YXAtY29tbWFuZHMnXG5pbXBvcnQge1xuICAvLyBNYXJrczpcbiAgQm9sZCwgQ29kZSwgSXRhbGljLCBMaW5rLCBTdHJpa2UsIFVuZGVybGluZSxcbiAgLy8gTm9kZXM6XG4gIEJsb2NrcXVvdGUsIENvZGVCbG9jaywgSGFyZEJyZWFrLCBIZWFkaW5nLCBIb3Jpem9udGFsUnVsZSxcbiAgT3JkZXJlZExpc3QsIEJ1bGxldExpc3QsIExpc3RJdGVtLFxuICAvLyBUT0RPOlxuICAvLyAtIEltYWdlLCBNZW50aW9uLCBDb2RlQmxvY2tIaWdobGlnaHRcbiAgLy8gLSBUYWJsZSwgVGFibGVDZWxsLCBUYWJsZUhlYWRlciwgVGFibGVOb2RlcywgVGFibGVSb3csXG4gIC8vIC0gVG9kb0l0ZW0sIFRvZG9MaXN0XG4gIC8vIFRvb2xzOlxuICBIaXN0b3J5XG59IGZyb20gJ3RpcHRhcC1leHRlbnNpb25zJ1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gJ0BkaXRvanMvdWknXG5pbXBvcnQge1xuICBpc0FycmF5LCBpc09iamVjdCwgdW5kZXJzY29yZSwgaHlwaGVuYXRlLCBkZWJvdW5jZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbWFya3VwJywge1xuICBjb21wb25lbnRzOiB7XG4gICAgRWRpdG9yQ29udGVudCxcbiAgICBFZGl0b3JNZW51QmFyLFxuICAgIEljb25cbiAgfSxcblxuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yOiBudWxsLFxuICAgICAgaGVpZ2h0OiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgMTBcbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCB8fCBgY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtYXJrQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ21hcmtzJywge1xuICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICBpdGFsaWM6IHRydWUsXG4gICAgICAgIHVuZGVybGluZTogdHJ1ZSxcbiAgICAgICAgc3RyaWtlOiB0cnVlLFxuICAgICAgICBzbWFsbDogdHJ1ZSxcbiAgICAgICAgY29kZTogdHJ1ZSxcbiAgICAgICAgbGluazoge1xuICAgICAgICAgIG9uQ2xpY2s6IGNvbW1hbmQgPT4gdGhpcy5vbkNsaWNrTGluayhjb21tYW5kKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBiYXNpY05vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIHBhcmFncmFwaDoge1xuICAgICAgICAvLyBEbyBub3Qgc2hvdyB0aGUgcGFyYWdyYXBoIGNvbW1hbmQgYXMgYWN0aXZlIGlmIGFueSBvZiB0aGUgYmxvY2tcbiAgICAgICAgLy8gY29tbWFuZHMgYXJlIGFsc28gYWN0aXZlOlxuICAgICAgICAgIGlnbm9yZUFjdGl2ZTogKCkgPT5cbiAgICAgICAgICAgIHRoaXMub3RoZXJOb2RlQnV0dG9ucy5zb21lKGJ1dHRvbiA9PiBidXR0b24uaXNBY3RpdmUpXG4gICAgICAgIH0sXG4gICAgICAgIGhlYWRpbmc6IHtcbiAgICAgICAgICBhdHRyOiAnbGV2ZWwnLFxuICAgICAgICAgIHZhbHVlczogWzEsIDIsIDMsIDQsIDUsIDZdXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG90aGVyTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgYnVsbGV0TGlzdDogdHJ1ZSxcbiAgICAgICAgb3JkZXJlZExpc3Q6IHRydWUsXG4gICAgICAgIGJsb2NrcXVvdGU6IHRydWUsXG4gICAgICAgIGNvZGVCbG9jazogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdG9vbEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCd0b29scycsIHtcbiAgICAgICAgdW5kbzogdHJ1ZSxcbiAgICAgICAgcmVkbzogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ3JvdXBlZEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgfSA9IHRoaXNcbiAgICAgIHJldHVybiBbXG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgXS5maWx0ZXIoYnV0dG9ucyA9PiBidXR0b25zLmxlbmd0aCA+IDApXG4gICAgfSxcblxuICAgIHBhcnNlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZToge1xuICAgICAgICAgICdjb2xsYXBzZSc6IGZhbHNlLFxuICAgICAgICAgICdwcmVzZXJ2ZSc6IHRydWUsXG4gICAgICAgICAgJ3ByZXNlcnZlLWFsbCc6ICdmdWxsJ1xuICAgICAgICB9W3RoaXMud2hpdGVzcGFjZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVkaXRhYmxlOiAhdGhpcy5yZWFkeW9ubHksXG4gICAgICAgIGF1dG9Gb2N1czogdGhpcy5hdXRvZm9jdXMsXG4gICAgICAgIGRpc2FibGVJbnB1dFJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5pbnB1dCxcbiAgICAgICAgZGlzYWJsZVBhc3RlUnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLnBhc3RlLFxuICAgICAgICBwYXJzZU9wdGlvbnM6IHRoaXMucGFyc2VPcHRpb25zXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgd2hpdGVzcGFjZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3doaXRlc3BhY2UnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnY29sbGFwc2UnXG4gICAgICAvLyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiAnY29sbGFwc2UnLCAncHJlc2VydmUnLCAncHJlc2VydmUtYWxsJ1xuICAgIH0pLFxuXG4gICAgZW5hYmxlUnVsZXM6IGdldFNjaGVtYUFjY2Vzc29yKCdlbmFibGVSdWxlcycsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEJvb2xlYW5dLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZW5hYmxlUnVsZXMpIHtcbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGVuYWJsZVJ1bGVzKVxuICAgICAgICAgID8gZW5hYmxlUnVsZXNcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgIGlucHV0OiAhIWVuYWJsZVJ1bGVzLFxuICAgICAgICAgICAgcGFzdGU6ICEhZW5hYmxlUnVsZXNcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHJlYWR5b25seTogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGF1dG9mb2N1czogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGVuYWJsZVJ1bGVzOiAndXBkYXRlRWRpdG9yT3B0aW9ucydcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZURlYm91bmNlZCA9IGRlYm91bmNlKGdldFZhbHVlID0+IHtcbiAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgdGhpcy52YWx1ZSA9IGdldFZhbHVlKClcbiAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfSwgMTAwKVxuXG4gICAgY29uc3Qgb25VcGRhdGUgPSAoeyBnZXRIVE1MIH0pID0+IHtcbiAgICAgIHNldFZhbHVlRGVib3VuY2VkKGdldEhUTUwpXG4gICAgICB0aGlzLm9uSW5wdXQoKVxuICAgIH1cblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVkaXRvci5zZXRDb250ZW50KHZhbHVlLCBmYWxzZSwgdGhpcy5wYXJzZU9wdGlvbnMpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7XG4gICAgICAuLi50aGlzLmVkaXRvck9wdGlvbnMsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25CbHVyLFxuICAgICAgb25VcGRhdGUsXG4gICAgICBleHRlbnNpb25zOiB0aGlzLmNyZWF0ZUV4dGVuc2lvbnMoKSxcbiAgICAgIGNvbnRlbnQ6IHRoaXMudmFsdWUgfHwgJydcbiAgICB9KVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRHJhZ1Jlc2l6ZShldmVudCkge1xuICAgICAgY29uc3QgZ2V0UG9pbnQgPSAoeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5IH0pID0+ICh7IHgsIHkgfSlcblxuICAgICAgbGV0IHByZXZZID0gZ2V0UG9pbnQoZXZlbnQpLnlcbiAgICAgIGxldCBoZWlnaHQgPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUodGhpcy4kcmVmcy5lZGl0b3IuJGVsKS5oZWlnaHQpXG5cbiAgICAgIGNvbnN0IG1vdXNlbW92ZSA9IGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyB5IH0gPSBnZXRQb2ludChldmVudClcbiAgICAgICAgaGVpZ2h0ICs9IHkgLSBwcmV2WVxuICAgICAgICBwcmV2WSA9IHlcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBgJHtNYXRoLm1heChoZWlnaHQsIDApfXB4YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgbW91c2Vtb3ZlLFxuXG4gICAgICAgIG1vdXNldXAoZXZlbnQpIHtcbiAgICAgICAgICBtb3VzZW1vdmUoZXZlbnQpXG4gICAgICAgICAgaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdXBkYXRlRWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnNldE9wdGlvbnModGhpcy5lZGl0b3JPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrTGluayhjb21tYW5kKSB7XG4gICAgICBjb25zdCBhdHRycyA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICBocmVmOiB7XG4gICAgICAgICAgICB0eXBlOiAndXJsJyxcbiAgICAgICAgICAgIGxhYmVsOiAnTGluaycsXG4gICAgICAgICAgICBhdXRvZm9jdXM6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBsYWJlbDogJ1RpdGxlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgYXBwbHk6IHsgdHlwZTogJ3N1Ym1pdCcgfSxcbiAgICAgICAgICByZW1vdmU6IHtcbiAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICBjbGljayh7IGRpYWxvZ0NvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29tcG9uZW50LnJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgaHJlZjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiBudWxsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF0YTogdGhpcy5lZGl0b3IuZ2V0TWFya0F0dHJzKCdsaW5rJylcbiAgICAgIH0pXG4gICAgICBpZiAoYXR0cnMpIHtcbiAgICAgICAgbGV0IHsgaHJlZiwgdGl0bGUgfSA9IGF0dHJzXG4gICAgICAgIGlmIChocmVmKSB7XG4gICAgICAgICAgLy8gU2VlIGlmIGBocmVmYCBjYW4gYmUgcGFyc2VkIGFzIGEgVVJMLCBhbmQgaWYgbm90LCBwcmVmaXggaXQgd2l0aFxuICAgICAgICAgIC8vIGEgZGVmYXVsdCBwcm90b2NvbC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IFVSTChocmVmKVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgaHJlZiA9IGBodHRwOi8vJHtocmVmfWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29tbWFuZCh7IGhyZWYsIHRpdGxlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZUV4dGVuc2lvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtzID0ge30sXG4gICAgICAgIG5vZGVzID0ge30sXG4gICAgICAgIHRvb2xzID0ge31cbiAgICAgIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLy8gc2NoZW1hLm1hcmtzOlxuICAgICAgICBtYXJrcy5ib2xkICYmIG5ldyBCb2xkKCksXG4gICAgICAgIG1hcmtzLml0YWxpYyAmJiBuZXcgSXRhbGljKCksXG4gICAgICAgIG1hcmtzLnVuZGVybGluZSAmJiBuZXcgVW5kZXJsaW5lKCksXG4gICAgICAgIG1hcmtzLnN0cmlrZSAmJiBuZXcgU3RyaWtlKCksXG4gICAgICAgIG1hcmtzLnNtYWxsICYmIG5ldyBTbWFsbCgpLFxuICAgICAgICBtYXJrcy5jb2RlICYmIG5ldyBDb2RlKCksXG4gICAgICAgIG1hcmtzLmxpbmsgJiYgbmV3IExpbmtXaXRoVGl0bGUoKSxcblxuICAgICAgICAvLyBzY2hlbWEubm9kZXM6XG4gICAgICAgIG5vZGVzLmJsb2NrcXVvdGUgJiYgbmV3IEJsb2NrcXVvdGUoKSxcbiAgICAgICAgbm9kZXMuY29kZUJsb2NrICYmIG5ldyBDb2RlQmxvY2soKSxcbiAgICAgICAgbmV3IEhhcmRCcmVhaygpLCAvLyBUT0RPOiBTaG91bGQgdGhpcyBhbHdheXMgb24/XG4gICAgICAgIG5vZGVzLmhlYWRpbmcgJiYgbmV3IEhlYWRpbmcoeyBsZXZlbHM6IG5vZGVzLmhlYWRpbmcgfSksXG4gICAgICAgIG5vZGVzLmhvcml6b250YWxSdWxlICYmIG5ldyBIb3Jpem9udGFsUnVsZSgpLFxuICAgICAgICAobm9kZXMub3JkZXJlZExpc3QgfHwgbm9kZXMuYnVsbGV0TGlzdCkgJiYgbmV3IExpc3RJdGVtKCksXG4gICAgICAgIG5vZGVzLmJ1bGxldExpc3QgJiYgbmV3IEJ1bGxldExpc3QoKSxcbiAgICAgICAgbm9kZXMub3JkZXJlZExpc3QgJiYgbmV3IE9yZGVyZWRMaXN0KCksXG4gICAgICAgIC8vIFRPRE86XG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIG5ldyBUb2RvSXRlbSgpLFxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBuZXcgVG9kb0xpc3QoKSxcblxuICAgICAgICAvLyBzY2hlbWEudG9vbHM6XG4gICAgICAgIHRvb2xzLmhpc3RvcnkgJiYgbmV3IEhpc3RvcnkoKVxuICAgICAgXS5maWx0ZXIoZXh0ZW5zaW9uID0+ICEhZXh0ZW5zaW9uKVxuICAgIH0sXG5cbiAgICBnZXRCdXR0b25zKHNldHRpbmdzTmFtZSwgZGVzY3JpcHRpb25zKSB7XG4gICAgICBjb25zdCBsaXN0ID0gW11cblxuICAgICAgY29uc3QgYWRkQnV0dG9uID0gKHsgbmFtZSwgaWNvbiwgYXR0cnMsIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzQWN0aXZlID0gdGhpcy5lZGl0b3IuaXNBY3RpdmVbbmFtZV1cbiAgICAgICAgY29uc3QgY29tbWFuZCA9IHRoaXMuZWRpdG9yLmNvbW1hbmRzW25hbWVdXG4gICAgICAgIGxpc3QucHVzaCh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpY29uLFxuICAgICAgICAgIGlzQWN0aXZlOiAoXG4gICAgICAgICAgICBpc0FjdGl2ZT8uKGF0dHJzKSAmJlxuICAgICAgICAgICAgKGlnbm9yZUFjdGl2ZSA9PSBudWxsIHx8ICFpZ25vcmVBY3RpdmUoKSlcbiAgICAgICAgICApLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IG9uQ2xpY2tcbiAgICAgICAgICAgID8gb25DbGljayhjb21tYW5kLCBhdHRycylcbiAgICAgICAgICAgIDogY29tbWFuZChhdHRycylcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNjaGVtYVtzZXR0aW5nc05hbWVdXG4gICAgICBpZiAoc2V0dGluZ3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBkZXNjcmlwdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZGVzY3JpcHRpb25zKSkge1xuICAgICAgICAgIGNvbnN0IHNldHRpbmdOYW1lID0gWyd1bmRvJywgJ3JlZG8nXS5pbmNsdWRlcyhrZXkpID8gJ2hpc3RvcnknIDoga2V5XG4gICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW3NldHRpbmdOYW1lXVxuICAgICAgICAgIGNvbnN0IG5hbWUgPSB1bmRlcnNjb3JlKGtleSlcbiAgICAgICAgICBjb25zdCBpY29uID0gaHlwaGVuYXRlKGtleSlcbiAgICAgICAgICBpZiAoc2V0dGluZykge1xuICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24gfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgYXR0ciwgdmFsdWVzLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSA9IGRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgIGlmIChhdHRyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWVzKSAmJiBpc0FycmF5KHNldHRpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGhlYWRpbmcgbGV2ZWwgYXR0cnM6XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhZGRCdXR0b24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IGAke2ljb259LSR7dmFsdWV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IFthdHRyXTogdmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUFjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24sIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRlbC5zY3JvbGxJbnRvVmlldz8uKClcbiAgICAgIHRoaXMuZWRpdG9yLmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG5cbmNsYXNzIFNtYWxsIGV4dGVuZHMgTWFyayB7XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiAnc21hbGwnXG4gIH1cblxuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZURPTTogW1xuICAgICAgICB7IHRhZzogJ3NtYWxsJyB9XG4gICAgICBdLFxuICAgICAgdG9ET006ICgpID0+IFsnc21hbGwnLCAwXVxuICAgIH1cbiAgfVxuXG4gIGNvbW1hbmRzKHsgdHlwZSB9KSB7XG4gICAgcmV0dXJuICgpID0+IHRvZ2dsZU1hcmsodHlwZSlcbiAgfVxufVxuY2xhc3MgTGlua1dpdGhUaXRsZSBleHRlbmRzIExpbmsge1xuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyczoge1xuICAgICAgICBocmVmOiB7XG4gICAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgICB9LFxuICAgICAgICB0aXRsZToge1xuICAgICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGluY2x1c2l2ZTogZmFsc2UsXG4gICAgICBwYXJzZURPTTogW3tcbiAgICAgICAgdGFnOiAnYScsXG4gICAgICAgIGdldEF0dHJzOiBkb20gPT4gKHtcbiAgICAgICAgICBocmVmOiBkb20uZ2V0QXR0cmlidXRlKCdocmVmJyksXG4gICAgICAgICAgdGl0bGU6IGRvbS5nZXRBdHRyaWJ1dGUoJ3RpdGxlJylcbiAgICAgICAgfSlcbiAgICAgIH1dLFxuICAgICAgdG9ET006IG5vZGUgPT4gWydhJywgbm9kZS5hdHRycywgMF1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1tdWx0aXNlbGVjdChcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlJzogIW11bHRpcGxlLFxuICAgICdkaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGVcbiAgfWBcbilcbiAgdnVlLW11bHRpc2VsZWN0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDpzaG93LWxhYmVscz1cImZhbHNlXCJcbiAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgdGFnLXBsYWNlaG9sZGVyPVwiUHJlc3MgZW50ZXIgdG8gYWRkIG5ldyB0YWdcIixcbiAgICA6b3B0aW9ucz1cInBvcHVsYXRlICYmIGFjdGl2ZU9wdGlvbnMgfHwgW11cIlxuICAgIDpjdXN0b20tbGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgOnRyYWNrLWJ5PVwib3B0aW9uVmFsdWVcIlxuICAgIDpncm91cC1sYWJlbD1cImdyb3VwQnlMYWJlbFwiXG4gICAgOmdyb3VwLXZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgOnRhZ2dhYmxlPVwidGFnZ2FibGVcIlxuICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgOmludGVybmFsLXNlYXJjaD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpwcmVzZXJ2ZS1zZWFyY2g9XCIhIXNlYXJjaEZpbHRlclwiXG4gICAgOmNsZWFyLW9uLXNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpjbG9zZS1vbi1zZWxlY3Q9XCIhc3RheU9wZW5cIlxuICAgIDpsb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICBAb3Blbj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgQHRhZz1cIm9uQWRkVGFnXCJcbiAgICBAc2VhcmNoLWNoYW5nZT1cIm9uU2VhcmNoQ2hhbmdlXCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1tdWx0aXNlbGVjdChcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLW11bHRpc2VsZWN0LXNpbmdsZSc6ICFtdWx0aXBsZSxcbiAgICAgICdkaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGVcbiAgICB9YFxuICApXG4gICAgdnVlLW11bHRpc2VsZWN0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6c2hvdy1sYWJlbHM9XCJmYWxzZVwiXG4gICAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgICB0YWctcGxhY2Vob2xkZXI9XCJQcmVzcyBlbnRlciB0byBhZGQgbmV3IHRhZ1wiLFxuICAgICAgOm9wdGlvbnM9XCJwb3B1bGF0ZSAmJiBhY3RpdmVPcHRpb25zIHx8IFtdXCJcbiAgICAgIDpjdXN0b20tbGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgICA6dHJhY2stYnk9XCJvcHRpb25WYWx1ZVwiXG4gICAgICA6Z3JvdXAtbGFiZWw9XCJncm91cEJ5TGFiZWxcIlxuICAgICAgOmdyb3VwLXZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgIDp0YWdnYWJsZT1cInRhZ2dhYmxlXCJcbiAgICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgICA6aW50ZXJuYWwtc2VhcmNoPVwiIXNlYXJjaEZpbHRlclwiXG4gICAgICA6cHJlc2VydmUtc2VhcmNoPVwiISFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsZWFyLW9uLXNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsb3NlLW9uLXNlbGVjdD1cIiFzdGF5T3BlblwiXG4gICAgICA6bG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgICBAb3Blbj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgICBAdGFnPVwib25BZGRUYWdcIlxuICAgICAgQHNlYXJjaC1jaGFuZ2U9XCJvblNlYXJjaENoYW5nZVwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAndnVlLW11bHRpc2VsZWN0L2Rpc3QvdnVlLW11bHRpc2VsZWN0Lm1pbi5jc3MnXG5cbiAgJHNwaW5uZXItd2lkdGg6ICRzZWxlY3QtYXJyb3ctd2lkdGhcbiAgJHRhZy1pY29uLXdpZHRoOiAxLjhlbVxuICAkdGFnLW1hcmdpbjogMnB4XG4gICR0YWctcGFkZGluZzogM3B4XG4gICR0YWctbGluZS1oZWlnaHQ6IDEuMWVtXG5cbiAgLmRpdG8tbXVsdGlzZWxlY3RcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAgIC5tdWx0aXNlbGVjdFxuICAgICAgZm9udC1zaXplOiBpbmhlcml0XG4gICAgICBtaW4taGVpZ2h0OiBpbmhlcml0XG4gICAgICBjb2xvcjogJGNvbG9yLWJsYWNrXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZ3NcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdFxuICAgICAgb3ZlcmZsb3c6IGF1dG9cbiAgICAgIG1pbi1oZWlnaHQ6IGluaGVyaXRcbiAgICAgIHBhZGRpbmc6IDAgJHNwaW5uZXItd2lkdGggMCAwXG4gICAgICAvLyBTbyB0YWdzIGNhbiBmbG9hdCBvbiBtdWx0aXBsZSBsaW5lcyBhbmQgaGF2ZSBwcm9wZXIgbWFyZ2luczpcbiAgICAgIHBhZGRpbmctYm90dG9tOiAkdGFnLW1hcmdpblxuXG4gICAgLm11bHRpc2VsZWN0X190YWdcbiAgICAgIGZsb2F0OiBsZWZ0XG4gICAgICBtYXJnaW46ICR0YWctbWFyZ2luIDAgMCAkdGFnLW1hcmdpblxuICAgICAgYm9yZGVyLXJhZGl1czogMWVtXG4gICAgICBwYWRkaW5nOiAkdGFnLXBhZGRpbmcgJHRhZy1pY29uLXdpZHRoICR0YWctcGFkZGluZyAwLjhlbVxuICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFncy13cmFwXG4gICAgICBvdmVyZmxvdzogYXV0b1xuICAgICAgbGluZS1oZWlnaHQ6IDBcblxuICAgIC5tdWx0aXNlbGVjdF9fc2luZ2xlLFxuICAgIC5tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXIsXG4gICAgLm11bHRpc2VsZWN0X19pbnB1dFxuICAgICAgZm9udC1zaXplOiBpbmhlcml0XG4gICAgICBsaW5lLWhlaWdodDogaW5oZXJpdFxuICAgICAgbWluLWhlaWdodDogMFxuICAgICAgbWFyZ2luOiAwIDAgMXB4IDBcbiAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgc3R5bGU9XCJwYWRkaW5nOiAuLi47XCIgaW4gYWRkaXRpb24gdG8gdXNpbmdcbiAgICAgIC8vIGNsYXNzZXMsIHNvIGAhaW1wb3J0YW50YCBpcyBuZWNlc3Nhcnk6XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZyAhaW1wb3J0YW50XG4gICAgICAvLyBTbyBpbnB1dCBjYW4gZmxvYXQgbmV4dCB0byB0YWdzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zIHdpdGhcbiAgICAgIC8vIC5tdWx0aXNlbGVjdF9fdGFnczpcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnRcbiAgICAgIGJhY2tncm91bmQ6IG5vbmVcblxuICAgIC5tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXIsXG4gICAgLm11bHRpc2VsZWN0X19pbnB1dDo6cGxhY2Vob2xkZXJcbiAgICAgIGNvbG9yOiAkY29sb3ItcGxhY2Vob2xkZXJcblxuICAgIC5tdWx0aXNlbGVjdC0tYWN0aXZlXG4gICAgICAubXVsdGlzZWxlY3RfX3BsYWNlaG9sZGVyXG4gICAgICAgIC8vIERvbid0IHVzZSBgZGlzcGxheTogbm9uZWAgdG8gaGlkZSBwbGFjZS1ob2xkZXIsIGFzIHRoZSBsYXlvdXQgd291bGRcbiAgICAgICAgLy8gY29sbGFwc2UuXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW5cblxuICAgIC5tdWx0aXNlbGVjdF9fc2VsZWN0LFxuICAgIC5tdWx0aXNlbGVjdF9fc3Bpbm5lclxuICAgICAgcGFkZGluZzogMFxuICAgICAgLy8gJGJvcmRlci13aWR0aCB0byBwcmV2ZW50IG1hc2tpbmcgYm9yZGVyIHdpdGggLm11bHRpc2VsZWN0X19zcGlubmVyXG4gICAgICB0b3A6ICRib3JkZXItd2lkdGhcbiAgICAgIHJpZ2h0OiAkYm9yZGVyLXdpZHRoXG4gICAgICBib3R0b206ICRib3JkZXItd2lkdGhcbiAgICAgIGhlaWdodDogaW5oZXJpdFxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcblxuICAgIC5tdWx0aXNlbGVjdF9fc2VsZWN0XG4gICAgICB3aWR0aDogMFxuICAgICAgbWFyZ2luLXJpZ2h0OiBjYWxjKCRzZWxlY3QtYXJyb3ctd2lkdGggLyAyKVxuICAgICAgJjo6YmVmb3JlXG4gICAgICAgICthcnJvdygkc2VsZWN0LWFycm93LXNpemUpXG4gICAgICAgIGJvdHRvbTogJHNlbGVjdC1hcnJvdy1ib3R0b21cbiAgICAgICAgcmlnaHQ6IGNhbGMoLTEgKiAkc2VsZWN0LWFycm93LXNpemUgLyAyKVxuXG4gICAgLm11bHRpc2VsZWN0X19zcGlubmVyXG4gICAgICB3aWR0aDogJHNwaW5uZXItd2lkdGhcbiAgICAgICY6OmJlZm9yZSxcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIC8vIENoYW5nZSB0aGUgd2lkdGggb2YgdGhlIGxvYWRpbmcgc3Bpbm5lclxuICAgICAgICBib3JkZXItd2lkdGg6IDNweFxuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIGluc2V0OiAwXG4gICAgICAgIG1hcmdpbjogYXV0b1xuXG4gICAgLm11bHRpc2VsZWN0X19vcHRpb25cbiAgICAgIG1pbi1oZWlnaHQ6IHVuc2V0XG4gICAgICBoZWlnaHQ6IHVuc2V0XG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIC8vIEluc3RydWN0aW9uIHRleHQgZm9yIG9wdGlvbnNcbiAgICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHRcbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0taGlnaGxpZ2h0XG4gICAgICAmOjphZnRlclxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnRcbiAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1kaXNhYmxlZFxuICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZFxuXG4gICAgLm11bHRpc2VsZWN0X190YWctaWNvblxuICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgYm9yZGVyLXJhZGl1czogMWVtXG4gICAgICBmb250LXdlaWdodDogaW5oZXJpdFxuICAgICAgbGluZS1oZWlnaHQ6IDEuNGVtXG4gICAgICB3aWR0aDogJHRhZy1pY29uLXdpZHRoXG4gICAgICAmOjphZnRlclxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcbiAgICAgICAgZm9udC1zaXplOiAxLjNlbVxuICAgICAgJjpob3Zlcjo6YWZ0ZXJcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0XG5cbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0tc2VsZWN0ZWRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHRcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dFxuICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbFxuICAgICAgJi5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZyxcbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0taGlnaGxpZ2h0XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFncyxcbiAgICAubXVsdGlzZWxlY3RfX2NvbnRlbnQtd3JhcHBlclxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuXG4gICAgJi5kaXRvLW11bHRpc2VsZWN0LXNpbmdsZVxuICAgICAgLS1pbnB1dC13aWR0aDogMTAwJVxuICAgICYuZGl0by1tdWx0aXNlbGVjdC1tdWx0aXBsZVxuICAgICAgLS1pbnB1dC13aWR0aDogYXV0b1xuXG4gICAgLm11bHRpc2VsZWN0LS1hY3RpdmVcbiAgICAgIC5tdWx0aXNlbGVjdF9fc2luZ2xlLFxuICAgICAgLm11bHRpc2VsZWN0X19pbnB1dFxuICAgICAgICAvLyBTYWRseSwgdnVlLXNlbGVjdCBzZXRzIGBzdHlsZT1cIndpZHRoXCJgIGluIGFkZGl0aW9uIHRvIHVzaW5nIGNsYXNzZXNcbiAgICAgICAgLy8gc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgICAgd2lkdGg6IHZhcigtLWlucHV0LXdpZHRoKSAhaW1wb3J0YW50XG5cbiAgICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMFxuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMFxuXG4gICAgICAubXVsdGlzZWxlY3RfX2NvbnRlbnQtd3JhcHBlclxuICAgICAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWFjdGl2ZVxuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG4gICAgICAgIG1hcmdpbjogLTFweCAwIDBcbiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMFxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMFxuXG4gICAgICAmLm11bHRpc2VsZWN0LS1hYm92ZVxuICAgICAgICAubXVsdGlzZWxlY3RfX3RhZ3NcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDBcbiAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMFxuICAgICAgICAubXVsdGlzZWxlY3RfX2NvbnRlbnQtd3JhcHBlclxuICAgICAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGJvcmRlci1jb2xvclxuICAgICAgICAgIG1hcmdpbjogMCAwIC0xcHhcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDBcbiAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMFxuXG4gICAgJi5kaXRvLWhhcy1lcnJvcnNcbiAgICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvci1lcnJvclxuXG4gICAgLmRpdG8tYnV0dG9uLWNsZWFyXG4gICAgICB3aWR0aDogJHNwaW5uZXItd2lkdGhcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuaW1wb3J0IFZ1ZU11bHRpc2VsZWN0IGZyb20gJ3Z1ZS1tdWx0aXNlbGVjdCdcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgJ3Z1ZS1tdWx0aXNlbGVjdC9kaXN0L3Z1ZS1tdWx0aXNlbGVjdC5taW4uY3NzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbXVsdGlzZWxlY3QnLCB7XG4gIGNvbXBvbmVudHM6IHsgVnVlTXVsdGlzZWxlY3QgfSxcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZWFyY2hlZE9wdGlvbnM6IG51bGwsXG4gICAgICBwb3B1bGF0ZTogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZE9wdGlvbnM6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/ICh0aGlzLnNlbGVjdGVkVmFsdWUgfHwgW10pXG4gICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAvLyBJZiBhbiBvcHRpb24gY2Fubm90IGJlIGZvdW5kLCB3ZSBtYXkgYmUgaW4gdGFnZ2FibGUgbW9kZSBhbmRcbiAgICAgICAgICAgICAgLy8gY2FuIGFkZCBpdC5cbiAgICAgICAgICAgICAgdmFsdWUgPT4gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkgfHwgdGhpcy5hZGRUYWdPcHRpb24odmFsdWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IG9wdGlvbnMgdGhhdCB3ZSBjb3VsZG4ndCBtYXRjaC5cbiAgICAgICAgICAgIC8vIFRPRE86IFdlIHJlYWxseSBzaG91bGQgZGlzcGxheSBhbiBlcnJvciBpbnN0ZWFkXG4gICAgICAgICAgICAuZmlsdGVyKHZhbHVlID0+IHZhbHVlKVxuICAgICAgICAgIDogdGhpcy5zZWxlY3RlZE9wdGlvblxuICAgICAgfSxcblxuICAgICAgc2V0KG9wdGlvbikge1xuICAgICAgICAvLyBDb252ZXJ0IHZhbHVlIHRvIG9wdGlvbnMgb2JqZWN0LCBzaW5jZSB2dWUtbXVsdGlzZWxlY3QgY2FuJ3QgbWFwIHRoYXRcbiAgICAgICAgLy8gaXRzZWxmIHVuZm9ydHVuYXRlbHkuIGB0cmFjay1ieWAgaXMgdXNlZCBmb3IgOmtleSBtYXBwaW5nIGl0IHNlZW1zLlxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAob3B0aW9uIHx8IFtdKS5tYXAodmFsdWUgPT4gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSkpXG4gICAgICAgICAgOiB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWN0aXZlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaGVkT3B0aW9ucyB8fCB0aGlzLm9wdGlvbnNcbiAgICB9LFxuXG4gICAgbXVsdGlwbGU6IGdldFNjaGVtYUFjY2Vzc29yKCdtdWx0aXBsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgc2VhcmNoYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHRhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndGFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHN0YXlPcGVuOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RheU9wZW4nLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHBsYWNlaG9sZGVyKCkge1xuICAgICAgY29uc3QgeyBwbGFjZWhvbGRlciwgc2VhcmNoYWJsZSwgdGFnZ2FibGUgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gcGxhY2Vob2xkZXIgfHwgKFxuICAgICAgICBzZWFyY2hhYmxlICYmIHRhZ2dhYmxlID8gYFNlYXJjaCBvciBhZGQgYSAke3RoaXMubGFiZWx9YFxuICAgICAgICA6IHNlYXJjaGFibGUgPyBgU2VsZWN0IG9yIHNlYXJjaCAke3RoaXMubGFiZWx9YFxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGlmICh0aGlzLmF1dG9mb2N1cykge1xuICAgICAgLy8gdnVlLW11bHRpc2VsZWN0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgYXV0b2ZvY3VzIGF0dHJpYnV0ZS4gV2UgbmVlZCB0b1xuICAgICAgLy8gaGFuZGxlIGl0IGhlcmUuXG4gICAgICB0aGlzLmZvY3VzKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIEBvdmVycmlkZVxuICAgIGdldExpc3RlbmVycygpIHtcbiAgICAgIC8vIG92ZXJyaWRlIGBUeXBlTWl4aW4uZ2V0TGlzdGVuZXJzKClgIHRvIHJlLXJvdXRlICdpbnB1dCcgdG8gYG9uQ2hhbmdlKClgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBibHVyOiB0aGlzLm9uQmx1cixcbiAgICAgICAgaW5wdXQ6IHRoaXMub25DaGFuZ2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWRkVGFnT3B0aW9uKHRhZykge1xuICAgICAgaWYgKHRoaXMudGFnZ2FibGUpIHtcbiAgICAgICAgY29uc3QgeyBvcHRpb25MYWJlbCwgb3B0aW9uVmFsdWUgfSA9IHRoaXNcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gb3B0aW9uTGFiZWwgJiYgb3B0aW9uVmFsdWVcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgIFtvcHRpb25MYWJlbF06IHRhZyxcbiAgICAgICAgICAgIC8vIFRPRE86IERlZmluZSBhIHNpbXBsZSBzY2hlbWEgb3B0aW9uIHRvIGNvbnZlcnQgdGhlIHRhZyB2YWx1ZSB0b1xuICAgICAgICAgICAgLy8gc29tZXRoaW5nIGVsc2UsIGUuZy4gYHRvVGFnOiB0YWcgPT4gdW5kZXJzY29yZSh0YWcpYFxuICAgICAgICAgICAgW29wdGlvblZhbHVlXTogdGFnXG4gICAgICAgICAgfVxuICAgICAgICAgIDogdGFnXG4gICAgICAgIHRoaXMub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRyZWZzLmVsZW1lbnQuYWN0aXZhdGUoKVxuICAgIH0sXG5cbiAgICBvbkFkZFRhZyh0YWcpIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuYWRkVGFnT3B0aW9uKHRhZylcbiAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25TZWFyY2hDaGFuZ2UocXVlcnkpIHtcbiAgICAgIGlmICh0aGlzLnNlYXJjaEZpbHRlcikge1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICAvLyBTZXQgYHNlYXJjaGVkT3B0aW9uc2AgdG8gYW4gZW1wdHkgYXJyYXksIGJlZm9yZSBpdCB3aWxsIGJlXG4gICAgICAgICAgLy8gcG9wdWxhdGVkIGFzeW5jaHJvbm91c2x5IHdpdGggdGhlIGFjdHVhbCByZXN1bHRzLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gW11cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IGF3YWl0IHRoaXMucmVzb2x2ZURhdGEoXG4gICAgICAgICAgICAoKSA9PiB0aGlzLnNlYXJjaEZpbHRlcihuZXcgRGl0b0NvbnRleHQodGhpcywgeyBxdWVyeSB9KSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQ2xlYXIgYHNlYXJjaGVkT3B0aW9uc2Agd2hlbiB0aGUgcXVlcnkgaXMgY2xlYXJlZC5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wdXRlZDoge1xuICAgIGlucHV0VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgIT09IG51bGwgPyB0aGlzLnZhbHVlIDogJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWUgIT09ICcnXG4gICAgICAgICAgPyB0aGlzLmlzSW50ZWdlciA/IHBhcnNlSW50KHZhbHVlLCAxMCkgOiBwYXJzZUZsb2F0KHZhbHVlKVxuICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBpc0ludGVnZXIoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc3RlcFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RlcCA9PSBudWxsICYmICF0aGlzLmlzSW50ZWdlciA/ICdhbnknIDogdGhpcy5zdGVwXG4gICAgfSxcblxuICAgIGRlY2ltYWxzOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVjaW1hbHMnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHN0ZXA6IGdldFNjaGVtYUFjY2Vzc29yKCdzdGVwJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KHN0ZXApIHtcbiAgICAgICAgLy8gRm9yIGludGVnZXJzLCByb3VuZCB0aGUgc3RlcHMgdG8gdGhlIG5leHQgYmlnZ2VyIGludGVnZXIgdmFsdWU6XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBzdGVwICE9IG51bGwgPyBNYXRoLmNlaWwoc3RlcCkgOiBzdGVwXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtaW46IGdldFNjaGVtYUFjY2Vzc29yKCdtaW4nLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQobWluKSB7XG4gICAgICAgIG1pbiA9IG1pbiA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdyYW5nZScsIHsgdHlwZTogQXJyYXkgfSk/LlswXVxuICAgICAgICAgIDogbWluXG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBtaW4gIT0gbnVsbCA/IE1hdGguZmxvb3IobWluKSA6IG1pblxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4OiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4Jywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1heCkge1xuICAgICAgICBtYXggPSBtYXggPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMV1cbiAgICAgICAgICA6IG1heFxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWF4ICE9IG51bGwgPyBNYXRoLmNlaWwobWF4KSA6IG1heFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgcmFuZ2U6IGdldFNjaGVtYUFjY2Vzc29yKCdyYW5nZScsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZ2V0KCkge1xuICAgICAgICAvLyBgdGhpcy5taW5gLCBgdGhpcy5tYXhgIGFscmVhZHkgc3VwcG9ydCBgc2NoZW1hLnJhbmdlYCxcbiAgICAgICAgLy8gc28gcmVkaXJlY3QgdGhlcmUuXG4gICAgICAgIGNvbnN0IHsgbWluLCBtYXggfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIG1pbiAhPSBudWxsICYmIG1heCAhPSBudWxsID8gW21pbiwgbWF4XSA6IHVuZGVmaW5lZFxuICAgICAgfSxcblxuICAgICAgc2V0KHJhbmdlKSB7XG4gICAgICAgIC8vIFByb3ZpZGUgYSBzZXR0ZXIgdGhhdCBkZWxlZ2F0ZXMgdG8gYFt0aGlzLm1pbiwgdGhpcy5tYXhdYCxcbiAgICAgICAgLy8gc2luY2UgdGhvc2UgYWxyZWFkeSBoYW5kbGUgYHNjaGVtYS5yYW5nZWAuXG4gICAgICAgIGlmIChpc0FycmF5KHJhbmdlKSkge1xuICAgICAgICAgIFt0aGlzLm1pbiwgdGhpcy5tYXhdID0gcmFuZ2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7fVxuICAgICAgY29uc3QgeyByYW5nZSwgbWluLCBtYXgsIGRlY2ltYWxzLCBzdGVwIH0gPSB0aGlzXG4gICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMucmFuZ2UgPSByYW5nZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1pbiAhPSBudWxsKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMubWluID0gbWluXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heCAhPSBudWxsKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMubWF4ID0gbWF4XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkZWNpbWFscyAhPSBudWxsKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLmRlY2ltYWxzID0gZGVjaW1hbHNcbiAgICAgIH0gZWxzZSBpZiAoc3RlcCkge1xuICAgICAgICBjb25zdCBkZWNpbWFscyA9IChgJHtzdGVwfWAuc3BsaXQoJy4nKVsxXSB8fCAnJykubGVuZ3RoXG4gICAgICAgIGlmIChkZWNpbWFscyA+IDApIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuaW50ZWdlciA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNJbnRlZ2VyKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWRhdGlvbnNcbiAgICB9XG4gIH1cbn1cbiIsIlxuaW5wdXQtZmllbGQuZGl0by1udW1iZXIoXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHR5cGU9XCJudW1iZXJcIlxuICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgOm1pbj1cIm1pblwiXG4gIDptYXg9XCJtYXhcIlxuICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBpbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdHlwZT1cIm51bWJlclwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC8vIE9ubHkgc2hvdyBzcGluIGJ1dHRvbnMgaWYgdGhlIG51bWJlciBjb21wb25lbnQgZGVmaW5lcyBhIHN0ZXAgc2l6ZS5cbiAgaW5wdXRbdHlwZT1cIm51bWJlclwiXTpub3QoW3N0ZXBdKVxuICAgICY6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG4gICAgJjo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvblxuICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lXG4gICAgICBtYXJnaW46IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ251bWJlcicsICdpbnRlZ2VyJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0ludGVnZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnaW50ZWdlcidcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tb2JqZWN0KFxuICB2LWlmPVwiaXNSZWFkeVwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwic2NoZW1hLmNsYXNzXCJcbiAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbilcbiAgLmRpdG8tb2JqZWN0LWNvbnRlbnQoXG4gICAgdi1pZj1cIm9iamVjdERhdGFcIlxuICApXG4gICAgLy8gU3VwcG9ydCB0aGUgc2FtZSByZW5kZXJpbmcgb3B0aW9ucyBhcyBUeXBlTGlzdDpcbiAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBvYmplY3REYXRhLCBjb250ZXh0KVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICApXG4gICAgY29tcG9uZW50KFxuICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dCgpKVwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2VcbiAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIG9iamVjdERhdGEpXCJcbiAgICApXG4gIGRpdG8tZWRpdC1idXR0b25zKFxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpkZWxldGFibGU9XCJvYmplY3REYXRhICYmIGRlbGV0YWJsZVwiXG4gICAgOmVkaXRhYmxlPVwib2JqZWN0RGF0YSAmJiBlZGl0YWJsZVwiXG4gICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICA6ZWRpdFBhdGg9XCJwYXRoXCJcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgIDpwYXRoPVwicGF0aFwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0ob2JqZWN0RGF0YSlcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1vYmplY3QoXG4gICAgdi1pZj1cImlzUmVhZHlcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICAgIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4gIClcbiAgICAuZGl0by1vYmplY3QtY29udGVudChcbiAgICAgIHYtaWY9XCJvYmplY3REYXRhXCJcbiAgICApXG4gICAgICAvLyBTdXBwb3J0IHRoZSBzYW1lIHJlbmRlcmluZyBvcHRpb25zIGFzIFR5cGVMaXN0OlxuICAgICAgZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIG9iamVjdERhdGEsIGNvbnRleHQpXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICApXG4gICAgICBjb21wb25lbnQoXG4gICAgICAgIHYtZWxzZS1pZj1cImNvbXBvbmVudFwiXG4gICAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KCkpXCJcbiAgICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZVxuICAgICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBvYmplY3REYXRhKVwiXG4gICAgICApXG4gICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgIDpkZWxldGFibGU9XCJvYmplY3REYXRhICYmIGRlbGV0YWJsZVwiXG4gICAgICA6ZWRpdGFibGU9XCJvYmplY3REYXRhICYmIGVkaXRhYmxlXCJcbiAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICA6ZWRpdFBhdGg9XCJwYXRoXCJcbiAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6cGF0aD1cInBhdGhcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKG9iamVjdERhdGEpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tb2JqZWN0XG4gICAgZGlzcGxheTogZmxleFxuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgbWFyZ2luOiAwXG4gICAgcGFkZGluZzogJGZvcm0tc3BhY2luZ1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAuZGl0by1vYmplY3QtY29udGVudFxuICAgICAgZmxleDogMCAxIDEwMCVcbiAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgIGZsZXg6IDEgMCAwJVxuICAgICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ29iamVjdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBkYXRhOiB0aGlzLm9iamVjdERhdGEgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncGFuZWwnLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuICBvbWl0UGFkZGluZzogdHJ1ZSxcblxuICBnZXRQYW5lbFNjaGVtYShzY2hlbWEpIHtcbiAgICAvLyBGb3IgYSBUeXBlUGFuZWwsIHRoZSBjb21wb25lbnQgc2NoZW1hIGlzIGFsc28gdGhlIHBhbmVsIHNjaGVtYSwgYnV0XG4gICAgLy8gcmVtb3ZlIHRoZSBhZGRlZCBuYW1lLCBzbyBpdCBkb2Vzbid0IGdldCBhcHBlbmRlZCB0d2ljZSB0byBkYXRhLXBhdGguXG4gICAgY29uc3QgeyBuYW1lLCAuLi5wYW5lbCB9ID0gc2NoZW1hXG4gICAgcmV0dXJuIHBhbmVsXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxucHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnZhbHVlPVwicHJvZ3Jlc3NWYWx1ZVwiXG4gIDptYXg9XCJwcm9ncmVzc01heFwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDp2YWx1ZT1cInByb2dyZXNzVmFsdWVcIlxuICAgIDptYXg9XCJwcm9ncmVzc01heFwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3Byb2dyZXNzJywge1xuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJvZ3Jlc3NWYWx1ZSgpIHtcbiAgICAgIGxldCB7IHZhbHVlLCByYW5nZSwgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgIHZhbHVlIC09IHJhbmdlWzBdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgICB2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgLyBzdGVwKSAqIHN0ZXBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSAnJ1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIHByb2dyZXNzTWF4KCkge1xuICAgICAgY29uc3QgeyByYW5nZSB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHJldHVybiByYW5nZVsxXSAtIHJhbmdlWzBdXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICApXG4gICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuICApXG4gICAgbGkodi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiKVxuICAgICAgbGFiZWxcbiAgICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICAgIClcbiAgICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tcmFkaW8tYnV0dG9uc1xuICAgIGxhYmVsXG4gICAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzXG4gICAgLmRpdG8tcmFkaW8tYnV0dG9uXG4gICAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncmFkaW8nLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWVcbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tc2VjdGlvbihcbiAgOmNsYXNzPVwieyAnZGl0by1zZWN0aW9uLWxhYmVsbGVkJyA6ICEhc2NoZW1hLmxhYmVsIH1cIlxuKVxuICBkaXRvLXBhbmUuZGl0by1zZWN0aW9uLXBhbmUoXG4gICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cIml0ZW1cIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2VjdGlvbihcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNlY3Rpb24tbGFiZWxsZWQnIDogISFzY2hlbWEubGFiZWwgfVwiXG4gIClcbiAgICBkaXRvLXBhbmUuZGl0by1zZWN0aW9uLXBhbmUoXG4gICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tc2VjdGlvblxuICAgICYuZGl0by1zZWN0aW9uLWxhYmVsbGVkXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldEl0ZW1Gb3JtU2NoZW1hLCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NlY3Rpb24nLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiAhc2NoZW1hLm5lc3RlZCAmJiAhKCdkZWZhdWx0JyBpbiBzY2hlbWEpLFxuICBkZWZhdWx0TmVzdGVkOiBmYWxzZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gIG9taXRGbGV4R3JvdzogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5uZXN0ZWQgPyB0aGlzLnZhbHVlIDogdGhpcy5kYXRhXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRJdGVtRm9ybVNjaGVtYVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwpIHtcbiAgICAvLyBQcm9jZXNzIHNlY3Rpb24gY29tcG9uZW50cyBzbyB0aGVpciBmb3JtcyBnZXQgcmVzb2x2ZWQgdG9vLlxuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCByb3V0ZXMsIGxldmVsKVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi8vLSBOZXN0aW5nIGlzIG5lZWRlZCB0byBtYWtlIGFuIGFycm93IGFwcGVhciBvdmVyIHRoZSBzZWxlY3QgaXRlbTpcbi5kaXRvLXNlbGVjdFxuICBzZWxlY3QoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICBAbW91c2Vkb3duPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICBAZm9jdXM9XCJwb3B1bGF0ZSA9IHRydWVcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWlmPVwicG9wdWxhdGVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgICAgIClcbiAgICAgICAgb3B0Z3JvdXAoXG4gICAgICAgICAgdi1pZj1cImdyb3VwQnlcIlxuICAgICAgICAgIDpsYWJlbD1cIm9wdGlvbltncm91cEJ5TGFiZWxdXCJcbiAgICAgICAgKVxuICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgIHYtZm9yPVwib3B0IGluIG9wdGlvbltncm91cEJ5T3B0aW9uc11cIlxuICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0KVwiXG4gICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHQpIH19XG4gICAgICAgIG9wdGlvbihcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWVsc2UtaWY9XCJzZWxlY3RlZE9wdGlvblwiXG4gICAgKVxuICAgICAgb3B0aW9uKFxuICAgICAgICA6dmFsdWU9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24oc2VsZWN0ZWRPcHRpb24pIH19XG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vLSBOZXN0aW5nIGlzIG5lZWRlZCB0byBtYWtlIGFuIGFycm93IGFwcGVhciBvdmVyIHRoZSBzZWxlY3QgaXRlbTpcbiAgLmRpdG8tc2VsZWN0XG4gICAgc2VsZWN0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgQG1vdXNlZG93bj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgICBAZm9jdXM9XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwicG9wdWxhdGVcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIG9wdGdyb3VwKFxuICAgICAgICAgICAgdi1pZj1cImdyb3VwQnlcIlxuICAgICAgICAgICAgOmxhYmVsPVwib3B0aW9uW2dyb3VwQnlMYWJlbF1cIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJvcHQgaW4gb3B0aW9uW2dyb3VwQnlPcHRpb25zXVwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdClcIlxuICAgICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHQpIH19XG4gICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJzZWxlY3RlZE9wdGlvblwiXG4gICAgICApXG4gICAgICAgIG9wdGlvbihcbiAgICAgICAgICA6dmFsdWU9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihzZWxlY3RlZE9wdGlvbikgfX1cbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAvLyBUT0RPOiBNb3ZlIHRvIGRpdG8tdWlcbiAgJHNlbGVjdC1hcnJvdy1yaWdodDogY2FsYygoJHNlbGVjdC1hcnJvdy13aWR0aCAtICRzZWxlY3QtYXJyb3ctc2l6ZSkgLyAyKVxuXG4gIC5kaXRvLXNlbGVjdFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gICAgc2VsZWN0XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkc2VsZWN0LWFycm93LXdpZHRoXG5cbiAgICAvLyBIYW5kbGUgLmRpdG8td2lkdGgtZmlsbCBzZXBhcmF0ZWx5IGR1ZSB0byByZXF1aXJlZCBuZXN0aW5nIG9mIHNlbGVjdDpcbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgc2VsZWN0XG4gICAgICAgIHdpZHRoOiAxMDAlXG5cbiAgICAmOjphZnRlclxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICArYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKVxuICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbVxuICAgICAgcmlnaHQ6IGNhbGMoI3skc2VsZWN0LWFycm93LXJpZ2h0fSArICN7JGJvcmRlci13aWR0aH0pXG5cbiAgICAmLmRpdG8tZGlzYWJsZWQ6OmFmdGVyXG4gICAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3Jcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VsZWN0Jywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIERpc2FibGUgbGF6eS1wb3B1bGF0aW9uIGZvciBub3cuXG4gICAgICAvLyBUT0RPOiBTZXQgdG8gYGZhbHNlYCBPbmNlIGxpbmV0byBlMmUgdGVzdHMgYWRkcmVzcyB0aGVpciBpc3N1ZXMuXG4gICAgICBwb3B1bGF0ZTogdHJ1ZVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zbGlkZXJcbiAgaW5wdXQuZGl0by1yYW5nZShcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdHlwZT1cInJhbmdlXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG4gIGlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgdHlwZT1cIm51bWJlclwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2xpZGVyXG4gICAgaW5wdXQuZGl0by1yYW5nZShcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgdHlwZT1cInJhbmdlXCJcbiAgICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6bWluPVwibWluXCJcbiAgICAgIDptYXg9XCJtYXhcIlxuICAgICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICAgIClcbiAgICBpbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6bWluPVwibWluXCJcbiAgICAgIDptYXg9XCJtYXhcIlxuICAgICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zbGlkZXJcbiAgICBAZXh0ZW5kICVpbnB1dFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1yYW5nZVxuICAgICAgZmxleDogYXV0b1xuICAgICAgaGVpZ2h0OiBjYWxjKDFlbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlcbiAgICAuZGl0by1udW1iZXJcbiAgICAgIGJvcmRlcjogMFxuICAgICAgcGFkZGluZzogMFxuICAgICAgdGV4dC1hbGlnbjogcmlnaHRcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NsaWRlcicsIHtcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dJbnB1dGA/XG4gICAgaW5wdXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdpbnB1dCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5zd2l0Y2gtYnV0dG9uLmRpdG8tc3dpdGNoKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6c3luYz1cInRydWVcIlxuICA6bGFiZWxzPVwibGFiZWxzXCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgc3dpdGNoLWJ1dHRvbi5kaXRvLXN3aXRjaChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOnN5bmM9XCJ0cnVlXCJcbiAgICA6bGFiZWxzPVwibGFiZWxzXCJcbiAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tc3dpdGNoXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGxcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgU3dpdGNoQnV0dG9uIH0gZnJvbSAnQGRpdG9qcy91aSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3N3aXRjaCcsIHtcbiAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG5cbiAgY29tcG9uZW50czoge1xuICAgIFN3aXRjaEJ1dHRvblxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGFiZWxzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxhYmVsc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5pbnB1dC1maWVsZC5kaXRvLXRleHQoXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDp0eXBlPVwiaW5wdXRUeXBlXCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBpbnB1dC1maWVsZC5kaXRvLXRleHQoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDp0eXBlPVwiaW5wdXRUeXBlXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWknXG5cbmNvbnN0IG1hc2tlZFBhc3N3b3JkID0gJyoqKioqKioqKioqKioqKionXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAndGV4dCcsICdlbWFpbCcsICd1cmwnLCAnaG9zdG5hbWUnLCAnZG9tYWluJywgJ3RlbCcsICdwYXNzd29yZCcsICdjcmVkaXRjYXJkJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiBzY2hlbWEudHlwZSA9PT0gJ3Bhc3N3b3JkJyxcblxuICBjb21wdXRlZDoge1xuICAgIGlucHV0VHlwZSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNyZWRpdGNhcmQ6ICd0ZXh0JyxcbiAgICAgICAgaG9zdG5hbWU6ICd0ZXh0JyxcbiAgICAgICAgZG9tYWluOiAndGV4dCdcbiAgICAgIH1bdGhpcy50eXBlXSB8fCB0aGlzLnR5cGVcbiAgICB9LFxuXG4gICAgaW5wdXRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHRoaXMudHlwZSA9PT0gJ3Bhc3N3b3JkJyAmJlxuICAgICAgICAgIHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICF0aGlzLmZvY3VzZWRcbiAgICAgICAgKVxuICAgICAgICAgID8gbWFza2VkUGFzc3dvcmRcbiAgICAgICAgICA6IHRoaXMudmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgcnVsZSA9IHtcbiAgICAgICAgZW1haWw6ICdlbWFpbCcsXG4gICAgICAgIHVybDogJ3VybCcsXG4gICAgICAgIGhvc3RuYW1lOiAnaG9zdG5hbWUnLFxuICAgICAgICBkb21haW46ICdkb21haW4nLFxuICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkJyxcbiAgICAgICAgY3JlZGl0Y2FyZDogJ2NyZWRpdGNhcmQnXG4gICAgICB9W3RoaXMudHlwZV1cbiAgICAgIHJldHVybiBydWxlID8geyBbcnVsZV06IHRydWUgfSA6IHt9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnRleHRhcmVhLmRpdG8tdGV4dGFyZWEuZGl0by1pbnB1dChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuICA6cm93cz1cImxpbmVzXCJcbiAgOmNsYXNzPVwieyAnZGl0by1yZXNpemFibGUnOiByZXNpemFibGUgfVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0ZXh0YXJlYS5kaXRvLXRleHRhcmVhLmRpdG8taW5wdXQoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOnJvd3M9XCJsaW5lc1wiXG4gICAgOmNsYXNzPVwieyAnZGl0by1yZXNpemFibGUnOiByZXNpemFibGUgfVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by10ZXh0YXJlYVxuICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgcmVzaXplOiBub25lXG4gICAgbWluLWhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkgKyAjeyAyICogJGlucHV0LXBhZGRpbmctdmVyIH0pXG4gICAgJi5kaXRvLXJlc2l6YWJsZVxuICAgICAgcmVzaXplOiB2ZXJ0aWNhbFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndGV4dGFyZWEnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCA0XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tdHJlZS1saXN0XG4gIGRpdG8tc2NvcGVzKFxuICAgIHYtaWY9XCJzY29wZXNcIlxuICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgKVxuICAuZGl0by10cmVlLXBhbmVsXG4gICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICA6c2NoZW1hPVwidHJlZVNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJ0cmVlRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJ0cmVlRGF0YVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDpvcGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXIoXG4gICAgICB2LWlmPVwiaGFzRWRpdGFibGVGb3Jtc1wiXG4gICAgKVxuICAgICAgLy8gSW5jbHVkZSBhIHJvdXRlci12aWV3IGZvciB0aGUgb3B0aW9uYWwgRGl0b0Zvcm1JbmxpbmVkXG4gICAgICByb3V0ZXItdmlld1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdHJlZS1saXN0XG4gICAgZGl0by1zY29wZXMoXG4gICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICAgIClcbiAgICAuZGl0by10cmVlLXBhbmVsXG4gICAgICBkaXRvLXRyZWUtaXRlbShcbiAgICAgICAgOnNjaGVtYT1cInRyZWVTY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJ0cmVlRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInRyZWVEYXRhXCJcbiAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgIDpvcGVuPVwidHJ1ZVwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyKFxuICAgICAgICB2LWlmPVwiaGFzRWRpdGFibGVGb3Jtc1wiXG4gICAgICApXG4gICAgICAgIC8vIEluY2x1ZGUgYSByb3V0ZXItdmlldyBmb3IgdGhlIG9wdGlvbmFsIERpdG9Gb3JtSW5saW5lZFxuICAgICAgICByb3V0ZXItdmlld1xuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXRyZWUtbGlzdFxuICAgIEBleHRlbmQgJWZpZWxkXG4gICAgLmRpdG8tdHJlZS1wYW5lbFxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgICA+IC5kaXRvLXRyZWUtaXRlbVxuICAgICAgICBmbGV4OiAxIDEgMjUlXG4gICAgICA+IC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXJcbiAgICAgICAgZmxleDogMCAxIDc1JVxuICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoXG4gICAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmRcbiAgICAgICAgYm9yZGVyLWxlZnQ6ICRib3JkZXItc3R5bGVcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMVxuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAxXG4gICAgICAgIG1hcmdpbjogKC0kaW5wdXQtcGFkZGluZy12ZXIpICgtJGlucHV0LXBhZGRpbmctaG9yKVxuICAgICAgICBtYXJnaW4tbGVmdDogJGlucHV0LXBhZGRpbmctaG9yXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQgeyBoYXNGb3JtU2NoZW1hLCBnZXRGb3JtU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICd0cmVlLWxpc3QnLCAndHJlZS1vYmplY3QnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHsgY29udGFpbmVyOiB0aGlzIH1cbiAgfSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ3RyZWUtb2JqZWN0JyA/ICdvYmplY3QnIDogJ2xpc3QnXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYXRoKCkge1xuICAgICAgLy8gQWNjZXNzZWQgZnJvbSBEaXRvVHJlZUl0ZW0gdGhyb3VnaCBgY29udGFpbmVyLnBhdGhgOlxuICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbXBvbmVudD8ucGF0aFxuICAgIH0sXG5cbiAgICBlZGl0UGF0aCgpIHtcbiAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5lZGl0UGF0aGA6XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucGF0aC5zbGljZSh0aGlzLnBhdGg/Lmxlbmd0aClcbiAgICB9LFxuXG4gICAgdHJlZURhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgPyB7IFt0aGlzLm5hbWVdOiB0aGlzLnZhbHVlIH1cbiAgICAgICAgOiB0aGlzLnZhbHVlXG4gICAgfSxcblxuICAgIHRyZWVEYXRhUGF0aCgpIHtcbiAgICAgIC8vIFJlbW92ZSBgbmFtZWAgZnJvbSBgZGF0YVBhdGhgLCBhcyBpdCBpcyBhZGRlZWRcbiAgICAgIC8vIHRvIGB0cmVlRGF0YWAgYW5kIGB0cmVlU2NoZW1hYFxuICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgID8gdGhpcy5kYXRhUGF0aC5zbGljZSgwLCB0aGlzLmRhdGFQYXRoLmxlbmd0aCAtIHRoaXMubmFtZS5sZW5ndGgpXG4gICAgICAgIDogdGhpcy5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICB0cmVlU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgID8ge1xuICAgICAgICAgIGNoaWxkcmVuOiB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICAuLi50aGlzLnNjaGVtYVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA6IHRoaXMuc2NoZW1hXG4gICAgfSxcblxuICAgIGhhc0VkaXRhYmxlRm9ybXMoKSB7XG4gICAgICBjb25zdCBoYXNFZGl0YWJsZUZvcm1zID0gc2NoZW1hID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgKFxuICAgICAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZWRpdGFibGUnLCB7XG4gICAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgICAgICBzY2hlbWFcbiAgICAgICAgICAgIH0pIHx8XG4gICAgICAgICAgICBzY2hlbWEuY2hpbGRyZW4gJiZcbiAgICAgICAgICAgIGhhc0VkaXRhYmxlRm9ybXMoc2NoZW1hLmNoaWxkcmVuKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0VkaXRhYmxlRm9ybXModGhpcy5zY2hlbWEpXG4gICAgfVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwsXG4gICAgbmVzdGVkID0gdHJ1ZSwgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIHJldHVybiBTb3VyY2VNaXhpbi5wcm9jZXNzU2NoZW1hKFxuICAgICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwsXG4gICAgICBuZXN0ZWQsIGZsYXR0ZW4sXG4gICAgICAvLyBQYXNzIHByb2Nlc3MoKSB0byBhZGQgbW9yZSByb3V0ZXMgdG8gY2hpbGRSb3V0ZXM6XG4gICAgICAoY2hpbGRSb3V0ZXMsIGxldmVsKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHNjaGVtYVxuICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICAvLyBBZGQgYHR5cGVgIHRvIHRoZSBuZXN0ZWQgdHJlZSBsaXN0LlxuICAgICAgICAgIGNoaWxkcmVuLnR5cGUgPSAndHJlZS1saXN0J1xuICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgICAgICBhcGksIGNoaWxkcmVuLCBjaGlsZHJlbi5uYW1lLCBjaGlsZFJvdXRlcywgbGV2ZWwsXG4gICAgICAgICAgICBuZXN0ZWQsIHRydWUsIC8vIFBhc3MgYHRydWVgIGZvciBgZmxhdHRlbmAgaW4gdHJlZSBsaXN0cy5cbiAgICAgICAgICAgIHByb2Nlc3NcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG4gIH0sXG5cbiAgZ2V0Rm9ybVNjaGVtYXNGb3JQcm9jZXNzaW5nKHNjaGVtYSwgY29udGV4dCkge1xuICAgIC8vIENvbnZlcnQgbmVzdGVkIGNoaWxkcmVuIHNjaGVtYSB0byBzdGFuZC1hbG9uZSBzY2hlbWEgY29tcG9uZW50LFxuICAgIC8vIHByZXNlbnQgaW4gZWFjaCBvZiB0aGUgZm9ybXMsIGFzIHJlcXVpcmVkIGJ5IGBwcm9jZXNzU2NoZW1hRGF0YSgpYFxuICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHNjaGVtYVxuICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQsIGNoaWxkcmVuXG4gICAgICA/IGZvcm0gPT4gKHtcbiAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIC4uLmZvcm0uY29tcG9uZW50cyxcbiAgICAgICAgICBbY2hpbGRyZW4ubmFtZV06IGNoaWxkcmVuXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICA6IG51bGxcbiAgICApXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGZpbGVzaXplIH0gZnJvbSAnZmlsZXNpemUnXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRGaWxlU2l6ZShzaXplKSB7XG4gIHJldHVybiBmaWxlc2l6ZShzaXplLCB7IGJhc2U6IDEwIH0pXG59XG4iLCJcbi5kaXRvLXVwbG9hZFxuICB0YWJsZS5kaXRvLXRhYmxlLmRpdG8tdGFibGUtc2VwYXJhdG9ycy5kaXRvLXRhYmxlLWJhY2tncm91bmRcbiAgICAvLy0gU3R5bGluZyBjb21lcyBmcm9tIERpdG9UYWJsZUhlYWRcbiAgICB0aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgICAgIHRyXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBOYW1lXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBTaXplXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBTdGF0dXNcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuXG4gICAgdnVlLWRyYWdnYWJsZShcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgOmxpc3Q9XCJmaWxlc1wiXG4gICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCIoZmlsZSwgaW5kZXgpIGluIGZpbGVzXCJcbiAgICAgICAgOmtleT1cImZpbGUua2V5XCJcbiAgICAgIClcbiAgICAgICAgdGQodi1odG1sPVwicmVuZGVyRmlsZShmaWxlLCBpbmRleClcIilcbiAgICAgICAgdGQge3sgZmlsZS5zaXplIHwgZm9ybWF0RmlsZVNpemUgfX1cbiAgICAgICAgdGRcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWRcIilcbiAgICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJmaWxlLnVwbG9hZC5lcnJvclwiKVxuICAgICAgICAgICAgICB8IEVycm9yOiB7eyBmaWxlLnVwbG9hZC5lcnJvciB9fVxuICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuYWN0aXZlXCIpXG4gICAgICAgICAgICAgIHwgVXBsb2FkaW5nLi4uXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5zdWNjZXNzXCIpXG4gICAgICAgICAgICAgIHwgVXBsb2FkZWRcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UpXG4gICAgICAgICAgICB8IFN0b3JlZFxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zXG4gICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiZGVsZXRlRmlsZShmaWxlLCBpbmRleClcIlxuICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICAgICAgKVxuICAgIHRmb290XG4gICAgICB0clxuICAgICAgICB0ZCg6Y29sc3Bhbj1cIjRcIilcbiAgICAgICAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICAgICAgICBwcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICA6dmFsdWU9XCJ1cGxvYWRQcm9ncmVzc1wiXG4gICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICkgQ2FuY2VsIEFsbFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiaXNVcGxvYWRSZWFkeVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICkgVXBsb2FkIEFsbFxuICAgICAgICAgICAgICB2dWUtdXBsb2FkLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWFkZC11cGxvYWQoXG4gICAgICAgICAgICAgICAgOmlucHV0LWlkPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICAgIDpuYW1lPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICA6cG9zdC1hY3Rpb249XCJ1cGxvYWRQYXRoXCJcbiAgICAgICAgICAgICAgICA6ZXh0ZW5zaW9ucz1cImV4dGVuc2lvbnNcIlxuICAgICAgICAgICAgICAgIDphY2NlcHQ9XCJhY2NlcHRcIlxuICAgICAgICAgICAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICA6c2l6ZT1cIm1heFNpemVcIlxuICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1cGxvYWRzXCJcbiAgICAgICAgICAgICAgICBAaW5wdXQtZmlsdGVyPVwiaW5wdXRGaWx0ZXJcIlxuICAgICAgICAgICAgICAgIEBpbnB1dC1maWxlPVwiaW5wdXRGaWxlXCJcbiAgICAgICAgICAgICAgICByZWY9XCJ1cGxvYWRcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwiVXBsb2FkIEZpbGVzXCJcbiAgICAgICAgICAgICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdXBsb2FkXG4gICAgdGFibGUuZGl0by10YWJsZS5kaXRvLXRhYmxlLXNlcGFyYXRvcnMuZGl0by10YWJsZS1iYWNrZ3JvdW5kXG4gICAgICAvLy0gU3R5bGluZyBjb21lcyBmcm9tIERpdG9UYWJsZUhlYWRcbiAgICAgIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgICAgICB0clxuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuIE5hbWVcbiAgICAgICAgICB0aFxuICAgICAgICAgICAgc3BhbiBTaXplXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW4gU3RhdHVzXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW5cbiAgICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICAgIDpsaXN0PVwiZmlsZXNcIlxuICAgICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgICAgKVxuICAgICAgICB0cihcbiAgICAgICAgICB2LWZvcj1cIihmaWxlLCBpbmRleCkgaW4gZmlsZXNcIlxuICAgICAgICAgIDprZXk9XCJmaWxlLmtleVwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZCh2LWh0bWw9XCJyZW5kZXJGaWxlKGZpbGUsIGluZGV4KVwiKVxuICAgICAgICAgIHRkIHt7IGZpbGUuc2l6ZSB8IGZvcm1hdEZpbGVTaXplIH19XG4gICAgICAgICAgdGRcbiAgICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJmaWxlLnVwbG9hZFwiKVxuICAgICAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWQuZXJyb3JcIilcbiAgICAgICAgICAgICAgICB8IEVycm9yOiB7eyBmaWxlLnVwbG9hZC5lcnJvciB9fVxuICAgICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5hY3RpdmVcIilcbiAgICAgICAgICAgICAgICB8IFVwbG9hZGluZy4uLlxuICAgICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5zdWNjZXNzXCIpXG4gICAgICAgICAgICAgICAgfCBVcGxvYWRlZFxuICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgICAgICB8IFN0b3JlZFxuICAgICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnNcbiAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICAgICAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cImRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICAgICAgICApXG4gICAgICB0Zm9vdFxuICAgICAgICB0clxuICAgICAgICAgIHRkKDpjb2xzcGFuPVwiNFwiKVxuICAgICAgICAgICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgICAgICAgICBwcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgOnZhbHVlPVwidXBsb2FkUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKSBDYW5jZWwgQWxsXG4gICAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiaXNVcGxvYWRSZWFkeVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IHRydWVcIlxuICAgICAgICAgICAgICAgICkgVXBsb2FkIEFsbFxuICAgICAgICAgICAgICAgIHZ1ZS11cGxvYWQuZGl0by1idXR0b24uZGl0by1idXR0b24tYWRkLXVwbG9hZChcbiAgICAgICAgICAgICAgICAgIDppbnB1dC1pZD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICAgIDpuYW1lPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgOnBvc3QtYWN0aW9uPVwidXBsb2FkUGF0aFwiXG4gICAgICAgICAgICAgICAgICA6ZXh0ZW5zaW9ucz1cImV4dGVuc2lvbnNcIlxuICAgICAgICAgICAgICAgICAgOmFjY2VwdD1cImFjY2VwdFwiXG4gICAgICAgICAgICAgICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgICA6c2l6ZT1cIm1heFNpemVcIlxuICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInVwbG9hZHNcIlxuICAgICAgICAgICAgICAgICAgQGlucHV0LWZpbHRlcj1cImlucHV0RmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgIEBpbnB1dC1maWxlPVwiaW5wdXRGaWxlXCJcbiAgICAgICAgICAgICAgICAgIHJlZj1cInVwbG9hZFwiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIlVwbG9hZCBGaWxlc1wiXG4gICAgICAgICAgICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXVwbG9hZFxuICAgIC5kaXRvLXRhYmxlXG4gICAgICB0clxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlXG4gICAgLmRpdG8tYnV0dG9uLWFkZC11cGxvYWRcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgID4gKlxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZFxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlclxuICAgICAgLmRpdG8tcHJvZ3Jlc3NcbiAgICAgICAgZmxleDogYXV0b1xuICAgICAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IE9yZGVyZWRNaXhpbiBmcm9tICcuLi9taXhpbnMvT3JkZXJlZE1peGluLmpzJ1xuaW1wb3J0IFZ1ZVVwbG9hZCBmcm9tICd2dWUtdXBsb2FkLWNvbXBvbmVudCdcbmltcG9ydCBWdWVEcmFnZ2FibGUgZnJvbSAndnVlZHJhZ2dhYmxlJ1xuaW1wb3J0IHBhcnNlRmlsZVNpemUgZnJvbSAnZmlsZXNpemUtcGFyc2VyJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGZvcm1hdEZpbGVTaXplIH0gZnJvbSAnLi4vdXRpbHMvdW5pdHMuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBlc2NhcGVIdG1sIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3VwbG9hZCcsIHtcbiAgY29tcG9uZW50czogeyBWdWVVcGxvYWQsIFZ1ZURyYWdnYWJsZSB9LFxuICBmaWx0ZXJzOiB7IGZvcm1hdEZpbGVTaXplIH0sXG4gIG1peGluczogW09yZGVyZWRNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBsb2FkczogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB1cGxvYWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy51cGxvYWRcbiAgICB9LFxuXG4gICAgZmlsZXMoKSB7XG4gICAgICByZXR1cm4gYXNGaWxlcyh0aGlzLnZhbHVlKVxuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gTm8gY2FsbGJhY2sgYXMgaXQncyB1c2VkIGluIGBwcm9jZXNzVmFsdWUoKWBcbiAgICAgIGNhbGxiYWNrOiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZXh0ZW5zaW9uczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4dGVuc2lvbnMnLCB7XG4gICAgICB0eXBlOiBbQXJyYXksIFN0cmluZywgUmVnRXhwXVxuICAgIH0pLFxuXG4gICAgYWNjZXB0OiBnZXRTY2hlbWFBY2Nlc3NvcignYWNjZXB0Jywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoYWNjZXB0KSB7XG4gICAgICAgIHJldHVybiBpc0FycmF5KGFjY2VwdCkgPyBhY2NlcHQuam9pbignLCcpIDogYWNjZXB0XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXhTaXplOiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4U2l6ZScsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBnZXQobWF4U2l6ZSkge1xuICAgICAgICByZXR1cm4gbWF4U2l6ZSA/IHBhcnNlRmlsZVNpemUobWF4U2l6ZSkgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIGRyYWdnYWJsZSAmJiB0aGlzLmZpbGVzLmxlbmd0aCA+IDFcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgaXNVcGxvYWRSZWFkeSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZHMubGVuZ3RoICYmXG4gICAgICAgICEodGhpcy51cGxvYWQuYWN0aXZlIHx8IHRoaXMudXBsb2FkLnVwbG9hZGVkKVxuICAgIH0sXG5cbiAgICBpc1VwbG9hZEFjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZHMubGVuZ3RoICYmIHRoaXMudXBsb2FkLmFjdGl2ZVxuICAgIH0sXG5cbiAgICB1cGxvYWRQcm9ncmVzcygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMudXBsb2Fkcy5yZWR1Y2UoKHRvdGFsLCBmaWxlKSA9PiB0b3RhbCArIGZpbGUucHJvZ3Jlc3MsIDApIC9cbiAgICAgICAgdGhpcy51cGxvYWRzLmxlbmd0aFxuICAgICAgKVxuICAgIH0sXG5cbiAgICB1cGxvYWRQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VVcmwoe1xuICAgICAgICB0eXBlOiAndXBsb2FkJyxcbiAgICAgICAgcGF0aDogdGhpcy5hcGkubm9ybWFsaXplUGF0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbmRlckZpbGUoZmlsZSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgcmVuZGVyIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHJlbmRlclxuICAgICAgICA/IHJlbmRlci5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIHZhbHVlOiBmaWxlLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5maWxlcyxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgZGF0YVBhdGg6IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgOiBlc2NhcGVIdG1sKGZpbGUubmFtZSlcbiAgICB9LFxuXG4gICAgZGVsZXRlRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgY29uc3QgeyBuYW1lIH0gPSBmaWxlXG5cbiAgICAgIGlmIChmaWxlICYmIHdpbmRvdy5jb25maXJtKFxuICAgICAgICBgRG8geW91IHJlYWxseSB3YW50IHRvICR7dGhpcy52ZXJicy5yZW1vdmV9ICR7bmFtZX0/YClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbGUudXBsb2FkKSB7XG4gICAgICAgICAgdGhpcy51cGxvYWQucmVtb3ZlKGZpbGUudXBsb2FkKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICAgIHRleHQ6IGAke25hbWV9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRGaWxlSW5kZXgoZmlsZSkge1xuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgJiYgdGhpcy52YWx1ZVxuICAgICAgICA/IHRoaXMudmFsdWUuZmluZEluZGV4KGl0ID0+IGl0LmlkID09PSBmaWxlLmlkKVxuICAgICAgICA6IC0xXG4gICAgfSxcblxuICAgIGFkZEZpbGUoZmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goZmlsZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gW2ZpbGVdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBmaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlcGxhY2VGaWxlKGZpbGUsIG5ld0ZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRGaWxlSW5kZXgoZmlsZSlcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBpZiAobmV3RmlsZSkge1xuICAgICAgICAgICAgdGhpcy4kc2V0KHRoaXMudmFsdWUsIGluZGV4LCBuZXdGaWxlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXdGaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbW92ZUZpbGUoZmlsZSkge1xuICAgICAgdGhpcy5yZXBsYWNlRmlsZShmaWxlLCBudWxsKVxuICAgIH0sXG5cbiAgICBpbnB1dEZpbGUobmV3RmlsZSwgb2xkRmlsZSkge1xuICAgICAgaWYgKG5ld0ZpbGUgJiYgIW9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBpZCwgbmFtZSwgc2l6ZSB9ID0gbmV3RmlsZVxuICAgICAgICB0aGlzLmFkZEZpbGUoeyBpZCwgbmFtZSwgc2l6ZSwgdXBsb2FkOiBuZXdGaWxlIH0pXG4gICAgICB9XG4gICAgICBpZiAobmV3RmlsZSAmJiBvbGRGaWxlKSB7XG4gICAgICAgIGNvbnN0IHsgc3VjY2VzcywgZXJyb3IgfSA9IG5ld0ZpbGVcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgICBjb25zdCBmaWxlID0gbmV3RmlsZS5yZXNwb25zZVswXVxuICAgICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgICBmaWxlLnVwbG9hZCA9IG5ld0ZpbGVcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIHVwbG9hZCBmaWxlIG9iamVjdCB3aXRoIHRoZSBmaWxlIG9iamVjdCByZWNlaXZlZFxuICAgICAgICAgICAgLy8gZnJvbSB0aGUgdXBsb2FkIHJlc3BvbnNlLlxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlRmlsZShuZXdGaWxlLCBmaWxlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUobmV3RmlsZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zdCB0ZXh0ID0ge1xuICAgICAgICAgICAgYWJvcnQ6ICdVcGxvYWQgYWJvcnRlZCcsXG4gICAgICAgICAgICBkZW5pZWQ6ICdVcGxvYWQgZGVuaWVkJyxcbiAgICAgICAgICAgIGV4dGVuc2lvbjogYFVuc3VwcG9ydGVkIGZpbGUtdHlwZTogJHtuZXdGaWxlLm5hbWV9YCxcbiAgICAgICAgICAgIG5ldHdvcms6ICdOZXR3b3JrIGVycm9yIGVuY291bnRlcmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgc2VydmVyOiAnU2VydmVyIGVycm9yIG9jY3VycmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgc2l6ZTogYEZpbGUgaXMgdG9vIGxhcmdlOiAke2Zvcm1hdEZpbGVTaXplKG5ld0ZpbGUuc2l6ZSl9YCxcbiAgICAgICAgICAgIHRpbWVvdXQ6ICdUaW1lb3V0IG9jY3VycmVkIGR1cmluZyB1cGxvYWQnXG5cbiAgICAgICAgICB9W2Vycm9yXSB8fCBgVW5rbm93biBGaWxlIFVwbG9hZCBFcnJvcjogJyR7ZXJyb3J9J2BcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdGaWxlIFVwbG9hZCBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0XG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUobmV3RmlsZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBpbnB1dEZpbHRlcihuZXdGaWxlLyosIG9sZEZpbGUsIHByZXZlbnQgKi8pIHtcbiAgICAgIGNvbnN0IHhociA9IG5ld0ZpbGU/LnhoclxuICAgICAgaWYgKHRoaXMuYXBpLmNvcnM/LmNyZWRlbnRpYWxzICYmIHhociAmJiAheGhyLndpdGhDcmVkZW50aWFscykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgIC8vIEZpbHRlciBvdXQgYWxsIG5ld2x5IGFkZGVkIGZpbGVzIHRoYXQgd2VyZW4ndCBhY3R1YWxseSB1cGxvYWRlZC5cbiAgICBjb25zdCBmaWxlcyA9IGFzRmlsZXModmFsdWUpXG4gICAgICAubWFwKFxuICAgICAgICAoeyB1cGxvYWQsIC4uLmZpbGUgfSkgPT4gIXVwbG9hZCB8fCB1cGxvYWQuc3VjY2VzcyA/IGZpbGUgOiBudWxsXG4gICAgICApXG4gICAgICAuZmlsdGVyKGZpbGUgPT4gZmlsZSlcbiAgICByZXR1cm4gc2NoZW1hLm11bHRpcGxlID8gZmlsZXMgOiBmaWxlc1swXSB8fCBudWxsXG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGFzRmlsZXModmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID8gYXNBcnJheSh2YWx1ZSkgOiBbXVxufVxuXG48L3NjcmlwdD5cbiIsImNvbnN0IGxvZ2dlZERlcHJlY2F0aW9ucyA9IG5ldyBTZXQoKVxuXG5leHBvcnQgZnVuY3Rpb24gZGVwcmVjYXRlKG1lc3NhZ2UpIHtcbiAgLy8gT25seSBsb2cgZGVwcmVjYXRpb24gbWVzc2FnZXMgb25jZS5cbiAgaWYgKCFsb2dnZWREZXByZWNhdGlvbnMuaGFzKG1lc3NhZ2UpKSB7XG4gICAgbG9nZ2VkRGVwcmVjYXRpb25zLmFkZChtZXNzYWdlKVxuICAgIGNvbnNvbGUud2FybihtZXNzYWdlKVxuICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBbXG4gICdjcmVhdGUnLCAnY3JlYXRlZCcsXG4gICdzYXZlJywgJ3NhdmVkJyxcbiAgJ3N1Ym1pdCcsICdzdWJtaXR0ZWQnLFxuICAnZGVsZXRlJywgJ2RlbGV0ZWQnLFxuICAnZWRpdCcsICdlZGl0ZWQnLFxuICAnY2xvc2UnLCAnY2xvc2VkJyxcbiAgJ2NhbmNlbCcsICdjYW5jZWxsZWQnLFxuICAnZHJhZycsICdkcmFnZ2VkJ1xuXS5yZWR1Y2UoKHZlcmJzLCB2ZXJiKSA9PiB7XG4gIHZlcmJzW3ZlcmJdID0gdmVyYlxuICByZXR1cm4gdmVyYnNcbn0sIHt9KVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgVnVlTW9kYWwgZnJvbSAndnVlLWpzLW1vZGFsJ1xuaW1wb3J0IFZ1ZVJvdXRlciBmcm9tICd2dWUtcm91dGVyJ1xuaW1wb3J0IFZ1ZU5vdGlmaWNhdGlvbnMgZnJvbSAndnVlLW5vdGlmaWNhdGlvbidcbmltcG9ydCB7XG4gIGlzU3RyaW5nLCBpc0FycmF5LCBhc0FycmF5LCBpc0Fic29sdXRlVXJsLFxuICBtZXJnZSwgaHlwaGVuYXRlLCBjYW1lbGl6ZSxcbiAgZGVmYXVsdEZvcm1hdHNcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCAqIGFzIGNvbXBvbmVudHMgZnJvbSAnLi9jb21wb25lbnRzL2luZGV4LmpzJ1xuaW1wb3J0ICogYXMgdHlwZXMgZnJvbSAnLi90eXBlcy9pbmRleC5qcydcbmltcG9ydCBEaXRvUm9vdCBmcm9tICcuL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlJ1xuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZGVwcmVjYXRlIH0gZnJvbSAnLi91dGlscy9kZXByZWNhdGUuanMnXG5pbXBvcnQgdmVyYnMgZnJvbSAnLi92ZXJicy5qcydcblxuVnVlLmNvbmZpZy5wcm9kdWN0aW9uVGlwID0gZmFsc2VcblxuLy8gQWxsIGdsb2JhbCBwbHVnaW5zIHRoYXQgbmVlZCB0byBiZSByZWdpc3RlcmVkIG9uIGBWdWVgOlxuVnVlLnVzZShWdWVSb3V0ZXIpXG5WdWUudXNlKFZ1ZU1vZGFsLCB7IGR5bmFtaWM6IHRydWUgfSlcblZ1ZS51c2UoVnVlTm90aWZpY2F0aW9ucylcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0FkbWluIHtcbiAgY29uc3RydWN0b3IoZWwsIHtcbiAgICAvLyBgZGl0b2AgY29udGFpbnMgdGhlIGJhc2UgYW5kIGFwaSBzZXR0aW5ncyBwYXNzZWQgZnJvbSBgQWRtaW5Db250cm9sbGVyYFxuICAgIGRpdG8gPSB7fSxcbiAgICBhcGksXG4gICAgdmlld3MgPSB7fSxcbiAgICAuLi5vcHRpb25zXG4gIH0gPSB7fSkge1xuICAgIHRoaXMuZWwgPSBlbFxuICAgIC8vIE1lcmdlIGluIGBhcGlgIHNldHRpbmdzIGFzIHBhc3NlZCBmcm9tIGBjb25maWcuYWRtaW5gIGFuZCB0aHJvdWdoIHRoZVxuICAgIC8vIGBBZG1pbkNvbnRyb2xsZXJgIHdpdGggYGFwaWAgdmFsdWVzIGZyb20gZnJvbSAnYWRtaW4vaW5kZXguanMnXG4gICAgLy8gTk9URTogYEFkbWluQ29udHJvbGxlcmAgcHJvdmlkZXMgYGRpdG8uYXBpLmJhc2VgXG4gICAgdGhpcy5hcGkgPSBhcGkgPSBtZXJnZSh7IGJhc2U6ICcvJyB9LCBkaXRvLmFwaSwgYXBpKVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcblxuICAgIC8vIFNldHVwIGRlZmF1bHQgYXBpIHNldHR0aW5nczpcbiAgICBhcGkubG9jYWxlIHx8PSAnZW4tVVMnXG4gICAgYXBpLmZvcm1hdHMgPSBtZXJnZSh7fSwgZGVmYXVsdEZvcm1hdHMsIGFwaS5mb3JtYXRzKVxuICAgIGFwaS5yZXF1ZXN0IHx8PSBvcHRpb25zID0+IHJlcXVlc3QoYXBpLCBvcHRpb25zKVxuICAgIGFwaS5nZXRBcGlVcmwgfHw9IG9wdGlvbnMgPT4gZ2V0QXBpVXJsKGFwaSwgb3B0aW9ucylcbiAgICBhcGkuaXNBcGlVcmwgfHw9IHVybCA9PiBpc0FwaVVybChhcGksIHVybClcbiAgICAvLyBTZXR0aW5nIGBhcGkubm9ybWFsaXplUGF0aHMgPSB0cnVlIChwbHVyYWwpIHNldHMgYm90aDpcbiAgICAvLyBgYXBpLm5vcm1hbGl6ZVBhdGggPSBoeXBoZW5hdGVgIGFuZCBgYXBpLmRlbm9ybWFsaXplUGF0aCA9IGNhbWVsaXplYFxuICAgIGFwaS5ub3JtYWxpemVQYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aHMgPyBoeXBoZW5hdGUgOiB2YWwgPT4gdmFsXG4gICAgYXBpLmRlbm9ybWFsaXplUGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGhzID8gY2FtZWxpemUgOiB2YWwgPT4gdmFsXG5cbiAgICAvLyBBbGxvdyB0aGUgY29uZmlndXJhdGlvbiBvZiBhbGwgYXV0aCByZXNvdXJjZXMsIGxpa2Ugc286XG4gICAgLy8gYXBpLnVzZXJzID0ge1xuICAgIC8vICAgcGF0aDogJy9hZG1pbnMnLFxuICAgIC8vICAgLy8gVGhlc2UgYXJlIHRoZSBkZWZhdWx0czpcbiAgICAvLyAgIGxvZ2luOiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dpbicsXG4gICAgLy8gICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgLy8gICB9LFxuICAgIC8vICAgbG9nb3V0OiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dvdXQnLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIHNlc3Npb246IHtcbiAgICAvLyAgICAgcGF0aDogJ3Nlc3Npb24nLFxuICAgIC8vICAgICBtZXRob2Q6ICdnZXQnXG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIGNvbnN0IHVzZXJzID0gYXBpLnVzZXJzID0gZ2V0UmVzb3VyY2UoYXBpLnVzZXJzLCB7XG4gICAgICB0eXBlOiAnY29sbGVjdGlvbidcbiAgICB9KSB8fCB7fVxuICAgIHVzZXJzLmxvZ2luID0gZ2V0UmVzb3VyY2UodXNlcnMubG9naW4gfHwgJ2xvZ2luJywge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICB1c2Vycy5sb2dvdXQgPSBnZXRSZXNvdXJjZSh1c2Vycy5sb2dvdXQgfHwgJ2xvZ291dCcsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMuc2Vzc2lvbiA9IGdldFJlc291cmNlKHVzZXJzLnNlc3Npb24gfHwgJ3Nlc3Npb24nLCB7XG4gICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIG9mIHJlc291cmNlIHBhdGggaGFuZGxlcnM6XG4gICAgLy8gYXBpLnJlc291cmNlcyA9IHtcbiAgICAvLyAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAvLyAgICAgcmV0dXJuIHJlc291cmNlLnBhcmVudFxuICAgIC8vICAgICAgID8gYCR7cmVzb3VyY2UucGF0aH0/JHtyZXNvdXJjZS5wYXJlbnQucGF0aH1faWQ9JHtcbiAgICAvLyAgICAgICAgICByZXNvdXJjZS5wYXJlbnQuaWR9YFxuICAgIC8vICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgICBhbnkocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXNbcmVzb3VyY2U/LnR5cGVdIHx8IHRoaXMuZGVmYXVsdFxuICAgICAgICByZXR1cm4gcmVzb3VyY2UgJiYgaGFuZGxlci5jYWxsKHRoaXMsIHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgZGVmYXVsdChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gdGhpcy5hbnkocmVzb3VyY2UucGFyZW50KVxuICAgICAgICByZXR1cm4gcGFyZW50UGF0aFxuICAgICAgICAgID8gYCR7cGFyZW50UGF0aH0vJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAgIH0sXG5cbiAgICAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdChyZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIG1lbWJlcihyZXNvdXJjZSkge1xuICAgICAgICAvLyBOT1RFOiBXZSBhc3N1bWUgdGhhdCBhbGwgbWVtYmVycyBoYXZlIHJvb3QtbGV2ZWwgY29sbGVjdGlvbiByb3V0ZXMsXG4gICAgICAgIC8vIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBuZXN0aW5nIG9mIChzdWItKWNvbGxlY3Rpb24gcm91dGVzLlxuICAgICAgICByZXR1cm4gYCR7cmVzb3VyY2UucGF0aH0vJHtyZXNvdXJjZS5pZH1gXG4gICAgICB9LFxuXG4gICAgICB1cGxvYWQocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gRGl0byBTZXJ2ZXIgaGFuZGxlcyB1cGxvYWQgcm91dGVzIG9uIHRoZSBjb2xsZWN0aW9uIHJlc291cmNlOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb2xsZWN0aW9uKHJlc291cmNlLnBhcmVudCl9L3VwbG9hZC8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgfSxcblxuICAgICAgLi4uYXBpLnJlc291cmNlc1xuICAgIH1cblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgLyBleHRlbmRpbmcgb2YgaGVhZGVyczpcbiAgICAvLyBhcGkuaGVhZGVycyA9IHtcbiAgICAvLyAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAvLyB9XG4gICAgYXBpLmhlYWRlcnMgPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgLi4uYXBpLmhlYWRlcnNcbiAgICB9XG5cbiAgICBpZiAoaXNTdHJpbmcoZWwpKSB7XG4gICAgICBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpXG4gICAgfVxuXG4gICAgdGhpcy5yb290ID0gbmV3IFZ1ZSh7XG4gICAgICBlbCxcbiAgICAgIHJvdXRlcjogbmV3IFZ1ZVJvdXRlcih7XG4gICAgICAgIG1vZGU6ICdoaXN0b3J5JyxcbiAgICAgICAgYmFzZTogZGl0by5iYXNlLFxuICAgICAgICBsaW5rQWN0aXZlQ2xhc3M6ICcnLFxuICAgICAgICBsaW5rRXhhY3RBY3RpdmVDbGFzczogJydcbiAgICAgIH0pLFxuICAgICAgY29tcG9uZW50czogeyBEaXRvUm9vdCB9LFxuICAgICAgLy8gTW9zdCBpbmplY3RzIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmUgcmVhY3RpdmVuZXNzIGFjcm9zc1xuICAgICAgLy8gcHJvdmlkZS9pbmplY3QsIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvaXNzdWVzLzcwMTcjaXNzdWVjb21tZW50LTQ4MDkwNjY5MVxuICAgICAgcHJvdmlkZToge1xuICAgICAgICBhcGksXG4gICAgICAgIC8vIEEgZGVmYXVsdCBsaXN0IG9mIHZlcmJzIGFyZSBwcm92aWRlZCBieSAkdmVyYnMoKSBhbmQgY2FuIGJlXG4gICAgICAgIC8vIG92ZXJyaWRkZW4gYXQgYW55IHBvaW50IGluIHRoZSBjb21wb25lbnQgaGllcmFyY2h5LlxuICAgICAgICAkdmVyYnM6ICgpID0+IHZlcmJzLFxuICAgICAgICAvLyBQcm92aWRlIGRlZmF1bHRzIHNvIERpdG9NaXhpbiBjYW4gaW5qZWN0IHRoZW0gZm9yIGFsbCBjb21wb25lbnRzOlxuICAgICAgICAvLyAgIGluamVjdDogWyAgJyRpc1BvcHVsYXRlZCcsICckc2NoZW1hQ29tcG9uZW50JywgJyRyb3V0ZUNvbXBvbmVudCcgXVxuICAgICAgICAkdmlld3M6ICgpID0+IHt9LFxuICAgICAgICAkaXNQb3B1bGF0ZWQ6ICgpID0+IHRydWUsXG4gICAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRyb3V0ZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJGRhdGFDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJGRpYWxvZ0NvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHBhbmVsQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gICAgICB9LFxuXG4gICAgICByZW5kZXI6IGNyZWF0ZUVsZW1lbnQgPT4gY3JlYXRlRWxlbWVudChEaXRvUm9vdCwge1xuICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgcm9vdCBjb250YWluZXIncyBpZCwgYXMgcmVxdWlyZWQgYnkgaG90LXJlbG9hZGluZzpcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBpZDogZWwuaWRcbiAgICAgICAgfSxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICB1bnJlc29sdmVkVmlld3M6IHZpZXdzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgfSxcbiAgICAgICAgLy8gVGhpcyBtYXkgb25seSBiZSBuZWVkZWQgdG8gYXZvaWQgdHJlZS1zaGFja2luZyBvZiB0aGVzZSBjb21wb25lbnRzLFxuICAgICAgICAvLyBzaW5jZSB0aGV5IGFjdHVhbGx5IGhhbmRsZSByZWdpc3RyeSBpbnRlcm5hbGx5IGFscmVhZHkuXG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAuLi5jb21wb25lbnRzLFxuICAgICAgICAgIC4uLnR5cGVzXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHJlZ2lzdGVyKHR5cGUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gVHlwZUNvbXBvbmVudC5yZWdpc3Rlcih0eXBlLCBvcHRpb25zKVxuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBzdXBlcihgUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZTogJHtyZXNwb25zZS5zdGF0dXN9ICgke3Jlc3BvbnNlLnN0YXR1c1RleHR9KWApXG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdChhcGksIHtcbiAgdXJsLFxuICBtZXRob2QgPSAnZ2V0JyxcbiAgLy8gVE9ETzogYHJlcXVlc3QucGFyYW1zYCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgcXVlcnlgIG9uIDIwMjItMTEtMDEsXG4gIC8vIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55bW9yZS5cbiAgcGFyYW1zID0gbnVsbCxcbiAgcXVlcnkgPSBwYXJhbXMgfHwgbnVsbCxcbiAgaGVhZGVycyA9IG51bGwsXG4gIGRhdGEgPSBudWxsXG59KSB7XG4gIGlmIChwYXJhbXMpIHtcbiAgICBkZXByZWNhdGUoYHJlcXVlc3QucGFyYW1zIGlzIGRlcHJlY2F0ZWQuIFVzZSBhY3Rpb24ubWV0aG9kIGFuZCBhY3Rpb24ucGF0aCBpbnN0ZWFkLmApXG4gIH1cblxuICBjb25zdCBpc0FwaVVybCA9IGFwaS5pc0FwaVVybCh1cmwpXG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChhcGkuZ2V0QXBpVXJsKHsgdXJsLCBxdWVyeSB9KSwge1xuICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgLi4uKGRhdGEgJiYgeyBib2R5OiBKU09OLnN0cmluZ2lmeShkYXRhKSB9KSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi4oaXNBcGlVcmwgJiYgYXBpLmhlYWRlcnMpLFxuICAgICAgLi4uaGVhZGVyc1xuICAgIH0sXG4gICAgY3JlZGVudGlhbHM6IGlzQXBpVXJsICYmIGFwaS5jb3JzPy5jcmVkZW50aWFsc1xuICAgICAgPyAnaW5jbHVkZSdcbiAgICAgIDogJ3NhbWUtb3JpZ2luJ1xuICB9KVxuXG4gIGlmIChyZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk/LmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICByZXNwb25zZS5kYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gIH1cblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcihyZXNwb25zZSlcbiAgfVxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuZnVuY3Rpb24gaXNBcGlVcmwoYXBpLCB1cmwpIHtcbiAgcmV0dXJuICFpc0Fic29sdXRlVXJsKHVybCkgfHwgdXJsLnN0YXJ0c1dpdGgoYXBpLnVybClcbn1cblxuZnVuY3Rpb24gZ2V0QXBpVXJsKGFwaSwgeyB1cmwsIHF1ZXJ5IH0pIHtcbiAgaWYgKCFpc0Fic29sdXRlVXJsKHVybCkpIHtcbiAgICB1cmwgPSBjb21iaW5lVXJscyhhcGkudXJsLCB1cmwpXG4gIH1cbiAgLy8gU3VwcG9ydCBvcHRpb25hbCBxdWVyeSBwYXJhbWV0ZXJzLCB0byBiZSBhcmUgYWRkZWQgdG8gdGhlIFVSTC5cbiAgY29uc3Qgc2VhcmNoID0gZm9ybWF0UXVlcnkocXVlcnkpXG4gIHJldHVybiBzZWFyY2ggPyBgJHt1cmx9PyR7c2VhcmNofWAgOiB1cmxcbn1cblxuZnVuY3Rpb24gY29tYmluZVVybHMoYmFzZVVybCwgcmVsYXRpdmVVcmwpIHtcbiAgLy8gVXNlIHNhbWUgYXBwcm9hY2ggYXMgYXhpb3MgYGNvbWJpbmVVUkxzKClgIHRvIGpvaW4gYmFzZVVybCAmIHJlbGF0aXZlVXJsOlxuICByZXR1cm4gYCR7YmFzZVVybC5yZXBsYWNlKC9cXC8rJC8sICcnKX0vJHtyZWxhdGl2ZVVybC5yZXBsYWNlKC9eXFwvKy8sICcnKX1gXG59XG5cbmZ1bmN0aW9uIGZvcm1hdFF1ZXJ5KHF1ZXJ5KSB7XG4gIGNvbnN0IGVudHJpZXMgPSBxdWVyeVxuICAgID8gaXNBcnJheShxdWVyeSlcbiAgICAgID8gcXVlcnlcbiAgICAgIDogT2JqZWN0LmVudHJpZXMocXVlcnkpXG4gICAgOiBbXVxuICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAvLyBFeHBhbmQgYXJyYXkgdmFsdWVzIGludG8gbXVsdGlwbGUgZW50cmllcyB1bmRlciB0aGUgc2FtZSBrZXksIHNvXG4gICAgLy8gYGZvcm1hdFF1ZXJ5KHsgZm9vOiBbMSwgMl0sIGJhcjogMyB9KWAgPT4gJ2Zvbz0xJmZvbz0yJmJhcj0zJy5cbiAgICBlbnRyaWVzLnJlZHVjZShcbiAgICAgIChlbnRyaWVzLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgYXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2tleSwgdmFsXSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cmllc1xuICAgICAgfSxcbiAgICAgIFtdXG4gICAgKVxuICApLnRvU3RyaW5nKClcbn1cbiJdLCJuYW1lcyI6WyJhcHBTdGF0ZSIsImFwcGVuZERhdGFQYXRoIiwiZGF0YVBhdGgiLCJ0b2tlbiIsInBhcnNlUGFyZW50RGF0YVBhdGgiLCJwYXRoIiwicGFyc2VEYXRhUGF0aCIsInBhcnNlSXRlbURhdGFQYXRoIiwibmVzdGVkIiwiZ2V0SXRlbURhdGFQYXRoIiwibm9ybWFsaXplRGF0YVBhdGgiLCJwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aCIsImlzSW50ZWdlciIsImdldFBhcmVudEl0ZW1EYXRhUGF0aCIsImdldEl0ZW0iLCJyb290SXRlbSIsImdldFZhbHVlQXREYXRhUGF0aCIsImdldFBhcmVudEl0ZW0iLCJnZXRMYXN0RGF0YVBhdGhUb2tlbiIsImdldExhc3REYXRhUGF0aE5hbWUiLCJnZXRMYXN0RGF0YVBhdGhJbmRleCIsImluZGV4IiwidGVtcG9yYXJ5SWQiLCJzZXRUZW1wb3JhcnlJZCIsImRhdGEiLCJpZEtleSIsImlzVGVtcG9yYXJ5SWQiLCJpZCIsImlzUmVmZXJlbmNlIiwiY29udGV4dHMiLCJnZXQiLCJjb250ZXh0Iiwia2V5IiwiZGVmYXVsdFZhbHVlIiwib2JqZWN0IiwidmFsdWUiLCJpc0Z1bmN0aW9uIiwic2V0IiwiRGl0b0NvbnRleHQiLCJjb21wb25lbnQiLCJfYSIsInBhcmVudEl0ZW0iLCJvcHRpb25zIiwibG9jYXRpb24iLCJyZXNvdXJjZSIsIkVtaXR0ZXJNaXhpbiIsImV2ZW50IiwiY2FsbGJhY2siLCJpc0FycmF5IiwiZXYiLCJpc1BsYWluT2JqZWN0IiwiZXZlbnRzIiwiY2FsbGJhY2tzIiwib24iLCJhcmdzIiwiZW50cnkiLCJjYiIsInF1ZXVlIiwicmVzb2x2ZSIsIm5leHQiLCJyZXN1bHQiLCJyZXMiLCJlcnJvciIsInRhcmdldCIsInR5cGVDaGVja2VycyIsImlzQm9vbGVhbiIsImlzTnVtYmVyIiwiaXNTdHJpbmciLCJpc0RhdGUiLCJpc09iamVjdCIsImlzUmVnRXhwIiwidG9Cb29sZWFuIiwidG9OdW1iZXIiLCJ0b1N0cmluZyIsInRvRGF0ZSIsInRvQXJyYXkiLCJhc0FycmF5IiwidG9PYmplY3QiLCJ0b1JlZ0V4cCIsInR5cGVDb252ZXJ0ZXJzIiwiaXNNYXRjaGluZ1R5cGUiLCJ0eXBlcyIsInR5cGUiLCJjb252ZXJ0VHlwZSIsImNvbnZlcnRlciIsImhhc1Jlc291cmNlIiwic2NoZW1hIiwiZ2V0UmVzb3VyY2UiLCJkZWZhdWx0cyIsInBhcmVudCIsImRlZnMiLCJnZXRNZW1iZXJSZXNvdXJjZSIsInBpY2tCeSIsIkRpdG9NaXhpbiIsInVpZCIsImtleU9yRGF0YVBhdGgiLCJkZWYiLCJjb252ZXJ0ZWQiLCJuYW1lIiwibGFiZWxpemUiLCJidXR0b24iLCJ2ZXJiIiwiZHJhZ2dhYmxlIiwiZmFsbGJhY2siLCJxdWVyeSIsImNvbXBvbmVudHMiLCJidXR0b25zIiwic2V0dGluZ3MiLCJyZWplY3QiLCJEaXRvQ29tcG9uZW50IiwidXJsIiwibWV0aG9kIiwiaW50ZXJuYWwiLCJjaGVja1VzZXIiLCJyZXNwb25zZSIsImVxdWFscyIsImNhY2hlIiwiY2FjaGVQYXJlbnQiLCJsb2FkQ2FjaGUiLCJjYWNoZUtleSIsImxvY2FsZSIsImZvcm1hdCIsImEiLCJib2R5IiwiYWNjZXNzb3IiLCJ3YXRjaCIsImhhbmRsZXJzIiwiZXhwciIsImFkZEV2ZW50IiwiaHlwaGVuYXRlIiwiaGFzTGlzdGVuZXJzIiwicGFyZW50SGFzTGlzdGVuZXJzIiwiZ2V0Q29udGV4dCIsInBhcmFtcyIsImNyZWRpdGNhcmQiLCJpc0NyZWRpdENhcmQiLCJkZWNpbWFscyIsIm1hdGNoIiwiZW1haWwiLCJpc0VtYWlsIiwiaG9zdG5hbWUiLCJpc0hvc3RuYW1lIiwiZG9tYWluIiwiaXNEb21haW4iLCJpbnRlZ2VyIiwibWF4IiwibWluIiwicGFzc3dvcmQiLCJyYW5nZSIsInJlcXVpcmVkIiwiaXNVcmwiLCJWYWxpZGF0aW9uTWl4aW4iLCJub3RpZnkiLCJpc1ZhbGlkIiwicnVsZSIsInNldHRpbmciLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0aW9ucyIsInZhbGlkYXRlIiwibWVzc2FnZSIsImFkZExhYmVsIiwiZXJyb3JzIiwiZm9jdXMiLCJnZXRTY2hlbWFBY2Nlc3NvciIsImdldFN0b3JlQWNjZXNzb3IiLCJ1aWRNYXAiLCJnZXRVaWQiLCJpdGVtSWQiLCJTY2hlbWFHcmFwaCIsIl9fcHVibGljRmllbGQiLCJzdWJHcmFwaCIsInBhcnQiLCJyZWxhdGVkRGF0YVBhdGgiLCJfYiIsIm5hbm9pZCIsImZsYXR0ZW4iLCJncmFwaCIsImVudHJpZXMiLCIkc2V0dGluZ3MiLCJzdWJLZXkiLCJzb3VyY2VTY2hlbWEiLCJjbGlwYm9hcmQiLCJyZWxhdGVkIiwicmVmZXJlbmNlIiwic291cmNlIiwicmVsYXRpb24iLCJ2YWx1ZXMiLCJyZW1vdmVJZCIsInJlZmVyZW5jZUlkIiwicmVmS2V5IiwicmV2VmFsdWUiLCJ0eXBlQ29tcG9uZW50cyIsInVua25vd25UeXBlUmVwb3J0ZWQiLCJyZWdpc3RlclR5cGVDb21wb25lbnQiLCJnZXRUeXBlQ29tcG9uZW50IiwiYWxsb3dOdWxsIiwiZm9yRWFjaFNjaGVtYSIsInNjaGVtYXMiLCJmb3JFYWNoU2NoZW1hQ29tcG9uZW50Iiwic29tZVNjaGVtYUNvbXBvbmVudCIsInJlc29sdmVTY2hlbWEiLCJ1bndyYXBNb2R1bGUiLCJpc1Byb21pc2UiLCJpc01vZHVsZSIsImtleXMiLCJyZXNvbHZlU2NoZW1hcyIsInVucmVzb2x2ZWRTY2hlbWFzIiwicmVzb2x2ZUl0ZW0iLCJpdGVtIiwicmVzb2x2ZVBhbmVscyIsInBhbmVscyIsInByb2Nlc3NWaWV3IiwiYXBpIiwicm91dGVzIiwiY2hpbGRyZW4iLCJwcm9jZXNzUm91dGVTY2hlbWEiLCJpc1NpbmdsZUNvbXBvbmVudFZpZXciLCJwcm9jZXNzQ29tcG9uZW50IiwicHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMiLCJsZXZlbCIsImdldFR5cGVPcHRpb25zIiwicHJvbWlzZXMiLCJwcm9jZXNzRm9ybXMiLCJmb3JtIiwiZm9ybXMiLCJyZXNvbHZlRm9ybSIsImhhc0Zvcm1TY2hlbWEiLCJoYXNNdWx0aXBsZUZvcm1TY2hlbWFzIiwiZ2V0Vmlld1NjaGVtYSIsInZpZXciLCJ2aWV3U2NoZW1hIiwidmlld0NvbXBvbmVudCIsImdldFZpZXdFZGl0UGF0aCIsImdldEZvcm1TY2hlbWFzIiwibW9kaWZ5Rm9ybSIsImNvbXBhY3QiLCJnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3JtcyIsImdldEl0ZW1Gb3JtU2NoZW1hIiwiaGFzTGFiZWwiLCJpc0NvbXBhY3QiLCJpc0lubGluZWQiLCJpc05lc3RlZCIsInNob3VsZE9taXRQYWRkaW5nIiwiZ2V0RGVmYXVsdFZhbHVlIiwiY2xvbmUiLCJpZ25vcmVNaXNzaW5nVmFsdWUiLCJ0eXBlT3B0aW9ucyIsImhhc0xhYmVscyIsImNoZWNrQ29tcG9uZW50cyIsInNldERlZmF1bHRzIiwicHJvY2Vzc1NjaGVtYURhdGEiLCJjb21wdXRlVmFsdWUiLCJyb290RGF0YSIsImNvbXB1dGUiLCJWdWUiLCJjbG9uZUl0ZW0iLCJjb3B5Iiwib3JkZXJLZXkiLCJwcm9jZXNzRGF0YSIsInNjaGVtYU9ubHkiLCJwcm9jZXNzZWREYXRhIiwid3JhcFByaW1pdGl2ZXMiLCJiIiwiaWQxIiwiaWQyIiwiZXhjbHVkZSIsInByb2Nlc3MiLCJwcm9jZXNzVmFsdWUiLCJwcm9jZXNzQmVmb3JlIiwicHJvY2Vzc0FmdGVyIiwicHJvY2Vzc0NvbXBvbmVudHMiLCJnZXREYXRhUGF0aCIsImNvbXBvbmVudFNjaGVtYSIsImNvbXBvbmVudERhdGFQYXRoIiwicHJvY2Vzc0l0ZW0iLCJwcm9jZXNzZWRJdGVtIiwidGFiIiwicGFuZWwiLCJnZXRBbGxQYW5lbFNjaGVtYXMiLCJnZXROYW1lZFNjaGVtYXMiLCJkZXNjcmlwdGlvbnMiLCJhcnJheSIsInRvU2NoZW1hIiwiY2FtZWxpemUiLCJnZXRCdXR0b25TY2hlbWFzIiwiZ2V0VHlwZSIsInNjaGVtYU9yVHlwZSIsImdldFNvdXJjZVR5cGUiLCJfYyIsImdldFBhbmVsU2NoZW1hIiwidGFiQ29tcG9uZW50IiwiZ2V0UGFuZWxTY2hlbWFzIiwic2NoZW1hQ29tcG9uZW50IiwiaXNPYmplY3RTb3VyY2UiLCJpc0xpc3RTb3VyY2UiLCJnZXRJdGVtSWQiLCJnZXRJdGVtVWlkIiwiVHlwZU1peGluIiwicGFyc2UiLCJsYWJlbCIsIm5hdGl2ZUZpZWxkIiwidGV4dEZpZWxkIiwiYXR0cmlidXRlcyIsImxpc3RlbmVycyIsImFkZCIsImVsZW1lbnQiLCJtaXhpbnMiLCJjb21wIiwiY3RvciIsIkRpdG9Vc2VyIiwicm9sZXMiLCJyb2xlIiwiU2NoZW1hUGFyZW50TWl4aW4iLCJzY2hlbWFDb21wb25lbnRzIiwiVmFsaWRhdG9yTWl4aW4iLCJpdCIsIlJvdXRlTWl4aW4iLCJ0byIsImZyb20iLCJtYXRjaGVkIiwiaSIsInJlY29yZCIsImJyZWFkY3J1bWIiLCJyb3V0ZUNvbXBvbmVudHMiLCJvayIsInRlbXBsYXRlUGF0aCIsInJvb3RQYXRoIiwiZ2V0Q29tbW9uUHJlZml4IiwicmVuZGVyIiwiX3ZtIiwiX2giLCJzdGF0aWNSZW5kZXJGbnMiLCJfX3Z1ZTJfc2NyaXB0IiwiaXNMb2FkaW5nIiwiRG9tTWl4aW4iLCJyZW1vdmUiLCJoYW5kbGVyIiwiYWRkRXZlbnRzIiwiJGV2ZW50IiwiZXJyIiwidGl0bGUiLCJ0ZXh0IiwibG9nIiwic3RyaXBUYWdzIiwibm90aWZpY2F0aW9ucyIsImR1cmF0aW9uRmFjdG9yIiwiZHVyYXRpb24iLCJhZGRpdGlvbmFsQ29tcG9uZW50cyIsInJlZGlyZWN0QWZ0ZXJMb2dpbiIsImxvZ2luRGF0YSIsInVzZXIiLCJEaXRvVmlldyIsInJvdXRlIiwiU3Bpbm5lciIsIlB1bHNlTG9hZGVyIiwic2l6ZSIsImNvbG9yIiwicHJvcHMiLCJQdWxsZG93bk1peGluIiwic3RhcnRUaW1lIiwib3BlbiIsImRpYWxvZ0RhdGEiLCJjb250ZW50IiwiYXNPYmplY3QiLCJwcmVmaXgiLCJzdWZmaXgiLCJJdGVtTWl4aW4iLCJleHRlbmRlZCIsIml0ZW1MYWJlbCIsImZvcm1MYWJlbCIsImdldEZvcm1MYWJlbCIsImNvbHVtbnMiLCJoYWRMYWJlbCIsIlRyYW5zaXRpb25IZWlnaHQiLCJwYW5lIiwiY3VycmVudFRhYiIsImZpcnN0IiwiZGVmYXVsdFRhYiIsImRhdGFQYXRoT3JOYW1lIiwiZXhwYW5kIiwiY29tcG9uZW50c0J5RGF0YVBhdGgiLCJkYXRhUGF0aHMiLCJjaGVjayIsImZpZWxkIiwidW5tYXRjaGVkIiwiZXJycyIsImZ1bGxEYXRhUGF0aCIsImRhdGFQYXRoUGFydHMiLCJmb3VuZCIsInByb3BlcnR5Iiwic3ViQ29tcG9uZW50cyIsInJlZ2lzdHJ5IiwiZW50cmllc0J5RGF0YVBhdGgiLCJfcmVmIiwibmVzdGVkRGF0YVBhdGgiLCJzdG9yZSIsInBhcnNlRnJhY3Rpb24iLCJkaXZpZGVuZCIsImRpdmlzb3IiLCJ3aWR0aCIsImRpc2FibGVkIiwiY29udGFpbmVyQ2xhc3MiLCJiYXNpcyIsImdyb3ciLCJzaHJpbmsiLCJiYXNpc0lzQXV0byIsInRhYlNjaGVtYSIsImJ1dHRvblNjaGVtYSIsImJ1dHRvbkRhdGFQYXRoIiwibm9kZSIsImNhcGl0YWxpemUiLCJjbGlwYm9hcmREYXRhIiwicGFzdGUiLCJyZXBvcnQiLCJqc29uIiwiX2QiLCJkZWluZGVudCIsIiRzY2hlbWEiLCJfZSIsIkxvYWRpbmdNaXhpbiIsInVwZGF0ZVJvb3QiLCJ1cGRhdGVWaWV3IiwiUmVzb3VyY2VNaXhpbiIsImFtb3VudCIsInBhZ2UiLCJzdGFydCIsInZlcmJzIiwiY2xlYXIiLCJsb2FkaW5nT3B0aW9ucyIsInJlcXVlc3QiLCJzZXREYXRhIiwib25TdWNjZXNzIiwib25FcnJvciIsIm5vdGlmeVN1Y2Nlc3MiLCJub3RpZnlFcnJvciIsImlzQ3JlYXRpbmciLCJwcm92aWRlc0RhdGEiLCJtZXJnZSIsImRhdGFQYXJ0cyIsInBhdGhQYXJ0cyIsInJvdXRlUGFydHMiLCJsYXN0RGF0YVBhcnQiLCJsIiwiZGF0YVBhcnQiLCJtYWluU2NoZW1hQ29tcG9uZW50IiwibmV3VmFsdWUiLCJvbGRWYWx1ZSIsInByZXNlbnQiLCJjbG9zZUZvcm0iLCJnZXRWZXJiIiwiYnV0dHRvblJlc291cmNlIiwic3VjY2VzcyIsIl9yZXNvdXJjZSIsIl9tZXRob2QiLCJEaXRvRm9ybSIsInNjb3BlIiwibmF2aWdhdGUiLCJQYWdpbmF0aW9uIiwiT3JkZXJlZE1peGluIiwib2xkSW5kZXgiLCJuZXdJbmRleCIsImxpc3QiLCJwYWdpbmF0aW9uUmFuZ2UiLCJvZmZzZXQiLCJWdWVEcmFnZ2FibGUiLCJjaGlsZHJlblNjaGVtYSIsImVkaXRQYXRoIiwiY2hpbGRyZW5PcGVuIiwibnVtQ2hpbGRyZW4iLCJjcmVhdGFibGUiLCJlZGl0YWJsZSIsImNvbHVtbiIsIm9yZGVyIiwiZXNjYXBlSHRtbCIsImgiLCJUeXBlQ29tcG9uZW50IiwiZGVmaW5pdGlvbiIsIiQkYSIsIiQkZWwiLCIkJGMiLCIkJHYiLCIkJGkiLCJEYXRhTWl4aW4iLCJyZXNvbHZlQ291bnRlciIsImFzeW5jRW50cnkiLCJyZXNvbHZlZERhdGEiLCJsb2FkIiwiT3B0aW9uc01peGluIiwiY29udmVydFZhbHVlIiwiY29udmVydCIsInNlYXJjaCIsImZpbHRlciIsImRlYm91bmNlIiwiZGVib3VuY2VBc3luYyIsIm9wdGlvbiIsImdyb3VwZWQiLCJyZXN1bHRzIiwiZ3JvdXAiLCJmaW5kT3B0aW9uIiwiZ3JvdXBCeSIsIm9wdGlvblZhbHVlIiwib3B0aW9uTGFiZWwiLCJwcm9jZXNzUmVsYXRlIiwiZmxhc2siLCJDb2RlRmxhc2siLCJjaGFuZ2VkIiwiaWdub3JlV2F0Y2giLCJpZ25vcmVVcGRhdGUiLCJvbkNoYW5nZSIsIm9uRm9jdXMiLCJvbkJsdXIiLCJzZXRDb2RlIiwiY29kZSIsInNldFZhbHVlIiwiVHJpZ2dlciIsIlNrZXRjaFBpY2tlciIsInRpbnljb2xvciIsImZvY3VzZWQiLCJEYXRlUGlja2VyIiwiVGltZVBpY2tlciIsIkRhdGVUaW1lUGlja2VyIiwiU291cmNlTWl4aW4iLCJkZWZhdWx0U29ydCIsImRpcmVjdGlvbiIsImNvbGxhcHNpYmxlIiwibGlzdERhdGEiLCJsZW5ndGgiLCJvbkNvbXBsZXRlIiwib3BlbmVkIiwiY2FsbE9uQ29tcGxldGUiLCJyb3V0ZUNvbXBvbmVudCIsImlubGluZWQiLCJwYXJhbSIsIm1ldGEiLCJmb3JtTWV0YSIsImNoaWxkUm91dGVzIiwiZ2V0UGF0aFdpdGhQYXJhbSIsInNvdXJjZVBhdGgiLCJmb3JtUm91dGUiLCJmbGF0Um91dGVzIiwic3ViUm91dGVzIiwiY2hpbGRSb3V0ZSIsImZpbHRlckNvbXBvbmVudHMiLCJkYXRlRm9ybWF0IiwiZ2V0RmlsdGVyc1BhbmVsIiwiZmlsdGVycyIsInByb3h5IiwicGFyc2VGaWx0ZXJzRGF0YSIsImdldEZpbHRlcnNDb21wb25lbnRzIiwiZm9ybWF0RmlsdGVyc0RhdGEiLCJjb21wcyIsImdldENvbXBvbmVudHNGb3JGaWx0ZXIiLCJmaWx0ZXJzRGF0YSIsImdldExpc3RDb21wb25lbnQiLCJvYmoiLCJmaWx0ZXJzRGF0YVBhdGgiLCJpY29uIiwiaXNBY3RpdmUiLCJvbkNsaWNrIiwiRWRpdG9yQ29udGVudCIsIkVkaXRvck1lbnVCYXIiLCJJY29uIiwiY29tbWFuZCIsIm1hcmtCdXR0b25zIiwiYmFzaWNOb2RlQnV0dG9ucyIsIm90aGVyTm9kZUJ1dHRvbnMiLCJ0b29sQnV0dG9ucyIsImVuYWJsZVJ1bGVzIiwic2V0VmFsdWVEZWJvdW5jZWQiLCJnZXRWYWx1ZSIsIm9uVXBkYXRlIiwiZ2V0SFRNTCIsIkVkaXRvciIsImdldFBvaW50IiwieCIsInkiLCJwcmV2WSIsImhlaWdodCIsIm1vdXNlbW92ZSIsImF0dHJzIiwiZGlhbG9nQ29tcG9uZW50IiwiaHJlZiIsIm1hcmtzIiwibm9kZXMiLCJ0b29scyIsIkJvbGQiLCJJdGFsaWMiLCJVbmRlcmxpbmUiLCJTdHJpa2UiLCJTbWFsbCIsIkNvZGUiLCJMaW5rV2l0aFRpdGxlIiwiQmxvY2txdW90ZSIsIkNvZGVCbG9jayIsIkhhcmRCcmVhayIsIkhlYWRpbmciLCJIb3Jpem9udGFsUnVsZSIsIkxpc3RJdGVtIiwiQnVsbGV0TGlzdCIsIk9yZGVyZWRMaXN0IiwiSGlzdG9yeSIsImV4dGVuc2lvbiIsInNldHRpbmdzTmFtZSIsImFkZEJ1dHRvbiIsImlnbm9yZUFjdGl2ZSIsImRlc2NyaXB0aW9uIiwic2V0dGluZ05hbWUiLCJ1bmRlcnNjb3JlIiwiYXR0ciIsIk1hcmsiLCJ0b2dnbGVNYXJrIiwiTGluayIsImRvbSIsIlZ1ZU11bHRpc2VsZWN0IiwicGxhY2Vob2xkZXIiLCJzZWFyY2hhYmxlIiwidGFnZ2FibGUiLCJ0YWciLCJOdW1iZXJNaXhpbiIsInN0ZXAiLCJJbnB1dEZpZWxkIiwiJCRzZWxlY3RlZFZhbCIsIm8iLCJ2YWwiLCJvcHQiLCJTd2l0Y2hCdXR0b24iLCJtYXNrZWRQYXNzd29yZCIsImhhc0VkaXRhYmxlRm9ybXMiLCJmb3JtYXRGaWxlU2l6ZSIsImZpbGVzaXplIiwiZmlsZSIsIlZ1ZVVwbG9hZCIsImFzRmlsZXMiLCJhY2NlcHQiLCJtYXhTaXplIiwicGFyc2VGaWxlU2l6ZSIsInRvdGFsIiwibmV3RmlsZSIsIm9sZEZpbGUiLCJ4aHIiLCJmaWxlcyIsInVwbG9hZCIsImxvZ2dlZERlcHJlY2F0aW9ucyIsImRlcHJlY2F0ZSIsIlZ1ZVJvdXRlciIsIlZ1ZU1vZGFsIiwiVnVlTm90aWZpY2F0aW9ucyIsIkRpdG9BZG1pbiIsImVsIiwiZGl0byIsInZpZXdzIiwiZGVmYXVsdEZvcm1hdHMiLCJnZXRBcGlVcmwiLCJpc0FwaVVybCIsInVzZXJzIiwicGFyZW50UGF0aCIsIkRpdG9Sb290IiwiY3JlYXRlRWxlbWVudCIsIlJlcXVlc3RFcnJvciIsImhlYWRlcnMiLCJpc0Fic29sdXRlVXJsIiwiY29tYmluZVVybHMiLCJmb3JtYXRRdWVyeSIsImJhc2VVcmwiLCJyZWxhdGl2ZVVybCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsTUFBZUEsS0FBQTtBQUFBLEVBQ2IsT0FBTztBQUFBLEVBQ1AsaUJBQWlCLENBQUU7QUFBQSxFQUNuQixNQUFNO0FBQUEsRUFDTixXQUFXLENBQUU7QUFBQSxFQUNiLGFBQWE7QUFBQSxFQUNiLGVBQWU7QUFDakI7QUNITyxTQUFTQyxFQUFlQyxHQUFVQyxHQUFPO0FB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LGFBQUEsS0FBQSxRQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQTtBQUNBLGFBQUE7QUFBQSxRQUNBLFlBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQTtBQUNBLGFBQUEsT0FBQTtBQUFBLFFBQ0EsT0FBQSxRQUFBN0UsR0FBQSxLQUFBLE9BQUEsQ0FBQSxFQUFBO0FBQUEsVUFHQSxDQUFBLENBQUE1UCxHQUFBc0QsQ0FBQSxPQUNBdEQsTUFBQSxZQUFBLENBQUFzRCxFQUFBLFdBQ0FBLElBQUE7QUFBQSxZQUNBLEdBQUFBO0FBQUEsWUFDQSxRQUFBO0FBQUEsY0FDQSxPQUFBLE1BQUEsS0FBQSxPQUFBO0FBQUEsWUFDQTtBQUFBLFVBQ0EsSUFFQSxDQUFBdEQsR0FBQXNELENBQUE7QUFBQSxRQUVBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFlBQUE7QUFDQSxhQUFBLENBQUEsQ0FBQSxLQUFBLGNBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUNBLFNBQUEsZUFBQTJQLEdBQUEsUUFBQTtBQUFBLE1BQ0EsT0FBQSxNQUFBO0FBQ0EsUUFBQSxLQUFBLGFBQUEsTUFBQSxZQUFBLE1BQ0EsS0FBQSxPQUFBO0FBQUEsTUFFQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFlBQUE7QUFDQSxTQUFBLGFBQUEsT0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLE9BQUE7QUFDQSxXQUFBLE9BQUEsS0FBQSxLQUFBLElBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBOVMsR0FBQTtBQUNBLFdBQUEsUUFBQSxRQUFBQSxDQUFBLEdBQ0EsS0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsT0FBQUEsR0FBQTtBQUNBLFdBQUEsUUFBQSxPQUFBQSxDQUFBLEdBQ0EsS0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQTtBQUNBLFdBQUEsUUFBQSxLQUFBLFVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBO0FBQ0EsV0FBQSxRQUFBLElBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUNBLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2xJQSxJQUFJcVMsS0FBUyxXQUFZO0FBQ3ZCLE1BQUlDLElBQUksTUFDSkMsSUFBR0QsRUFBSSxnQkFDUHpDLElBQUd5QyxFQUFJLE1BQU0sTUFBSUM7QUFFckIsU0FBT0QsRUFBSSxVQUFVekMsRUFBR3lDLEVBQUksUUFBUSxPQUFPQSxFQUFJLEtBQUs7QUFBQSxJQUNsRCxLQUFLO0FBQUEsSUFDTCxPQUFPQSxFQUFJO0FBQUEsSUFDWCxPQUFPQSxFQUFJO0FBQUEsRUFDWixHQUFFLENBQUNBLEVBQUksR0FBR0EsRUFBSSxHQUFHQSxFQUFJLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJQSxFQUFJLEdBQUU7QUFDakQsR0FFSUUsS0FBa0IsQ0FBRTtBQ0V4QixNQUFBQyxLQUFBL04sRUFBQSxVQUFBLGdCQUFBO0FBQUEsRUFDQSxPQUFBO0FBQUEsSUFDQSxLQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsT0FBQTtBQUFBLElBQ0EsU0FBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLE1BQUEsRUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFVBQUE7QUFDQSxZQUFBLEVBQUEsU0FBQTZQLEVBQUEsSUFBQTtBQUNBLGFBQUFyUyxFQUFBcVMsQ0FBQSxJQUFBQSxJQUFBLEVBQUEsTUFBQUEsRUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxHQUFBLEtBQUEsT0FBQTtBQUFBLFFBQ0EsR0FBQUMsR0FBQSxLQUFBLFFBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EsR0FBQSxLQUFBLE9BQUE7QUFBQSxRQUNBLEdBQUFBLEdBQUEsS0FBQSxRQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFDQSxDQUFBO0FBRUEsU0FBQUEsR0FBQXhVLEdBQUE7QUFDQSxTQUFBeUMsRUFBQXpDLENBQUEsRUFBQSxPQUFBLENBQUFELEdBQUFxQixPQUNBWSxFQUFBWixDQUFBLElBQ0FyQixFQUFBcUIsS0FBQSxLQUNBYyxFQUFBZCxDQUFBLEtBQ0EsT0FBQSxPQUFBckIsR0FBQXFCLENBQUEsR0FFQXJCLElBQ0EsRUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkRBLElBQUlzUyxLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQekMsSUFBR3lDLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPRCxFQUFJLFFBQVFBLEVBQUksY0FBY3pDLEVBQUd5QyxFQUFJLEtBQUtBLEVBQUksR0FBRztBQUFBLElBQ3RELEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxNQUNMLGVBQWVBLEVBQUk7QUFBQSxJQUNwQjtBQUFBLEVBQ0wsR0FBS0EsRUFBSSxTQUFTLEdBQUcsQ0FBQ0EsRUFBSSxjQUFjekMsRUFBRyxPQUFPO0FBQUEsSUFDOUMsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsZUFBZSxDQUFDeUMsRUFBSTtBQUFBLElBQ3JCO0FBQUEsRUFDTCxDQUFHLElBQUlBLEVBQUksR0FBRSxHQUFJQSxFQUFJLEdBQUdBLEVBQUksVUFBVSxTQUFVbUMsR0FBUXZWLEdBQU87QUFDM0QsV0FBTzJRLEVBQUcsZ0JBQWdCO0FBQUEsTUFDeEIsS0FBSyxVQUFVM1E7QUFBQSxNQUNmLGFBQWE7QUFBQSxNQUNiLE9BQU87QUFBQSxRQUNMLEtBQU87QUFBQSxRQUNQLFNBQVd1VjtBQUFBLE1BQ1o7QUFBQSxJQUNQLENBQUs7QUFBQSxFQUNMLENBQUcsR0FBRzVFLEVBQUcsU0FBUztBQUFBLElBQ2QsT0FBTztBQUFBLE1BQ0wsS0FBT3lDLEVBQUk7QUFBQSxJQUNaO0FBQUEsSUFDRCxVQUFVO0FBQUEsTUFDUixXQUFhQSxFQUFJLEdBQUdBLEVBQUksSUFBSTtBQUFBLElBQzdCO0FBQUEsRUFDTCxDQUFHLEdBQUdBLEVBQUksR0FBR0EsRUFBSSxVQUFVLFNBQVVvQyxHQUFReFYsR0FBTztBQUNoRCxXQUFPMlEsRUFBRyxnQkFBZ0I7QUFBQSxNQUN4QixLQUFLLFVBQVUzUTtBQUFBLE1BQ2YsYUFBYTtBQUFBLE1BQ2IsT0FBTztBQUFBLFFBQ0wsS0FBTztBQUFBLFFBQ1AsU0FBV3dWO0FBQUEsTUFDWjtBQUFBLElBQ1AsQ0FBSztBQUFBLEVBQ0wsQ0FBRyxHQUFHcEMsRUFBSSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSUEsRUFBSTtBQUN4QyxHQUVJRSxLQUFrQixDQUFFO0FDMkR4QixNQUFBQyxLQUFBL04sRUFBQSxVQUFBLGNBQUE7QUFBQSxFQUNBLE9BQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxNQUFBLENBQUEsUUFBQSxNQUFBLEdBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsV0FBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLGFBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsTUFBQTtBQUNBLGFBQUEsS0FBQSxjQUFBLE1BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxPQUFBO0FBQ0EsWUFBQSxFQUFBLE9BQUE4TCxFQUFBLElBQUE7QUFDQSxhQUFBdE8sRUFBQXNPLENBQUEsSUFBQUEsS0FBQSxnQkFBQUEsRUFBQSxPQUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUE7O0FBQ0EsYUFBQS9OLEdBQUFwQyxJQUFBLEtBQUEsVUFBQSxnQkFBQUEsRUFBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQTs7QUFDQSxhQUFBb0MsR0FBQXBDLElBQUEsS0FBQSxVQUFBLGdCQUFBQSxFQUFBLE1BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EsR0FBQSxLQUFBLGVBQUE7QUFBQSxVQUNBLE9BQUEsS0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQTtBQUNBLGFBQUEsS0FBQSxTQUFBLGdCQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLFVBQUE7QUFDQSxXQUFBLFNBQUEsY0FBQSxNQUNBLEtBQUEsTUFBQSxVQUFBLEtBQUEsU0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQ0EsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7S0M1SWVzVSxLQUFBO0FBQUEsRUFDYixTQUFTO0FBQUEsSUFDUCxtQkFBQWpJO0FBQUEsSUFFQSxZQUFBMkQ7QUFBQSxJQUVBLFVBQVVwSCxHQUFjNEIsR0FBTTNMLElBQVEsTUFBTTtBQUMxQyxhQUFPLEtBQUssZUFBZUEsTUFBVSxPQUNqQyxPQUFPQSxDQUFLLElBQ1prUixHQUFVbkgsR0FBYzRCLENBQUk7QUFBQSxJQUNqQztBQUFBLElBRUQsZ0JBQWdCNUIsR0FBYy9KLEdBQU87QUFDbkMsVUFBSSxFQUFFLFVBQUFuQixFQUFRLElBQUs7QUFDbkIsYUFBSWtMLE1BQWlCLEtBQUssV0FDeEJsTCxJQUFXRCxFQUFlQyxHQUFVa0wsRUFBYSxJQUFJLElBRW5EL0osS0FBUyxTQUNYbkIsSUFBV0QsRUFBZUMsR0FBVW1CLENBQUssSUFFcENuQjtBQUFBLElBQ1I7QUFBQSxJQUVELGdCQUFnQmtMLEdBQWM1SixHQUFNK0ksR0FBUTtBQUMxQyxZQUFNbEosSUFBUSxLQUFLLGNBRWZrSixJQUNBL0ksS0FBQSxnQkFBQUEsRUFBTTtBQUFBLFFBQ04sQ0FBQ3dMLEdBQU0zTCxNQUNMLEtBQUssVUFBVStKLEdBQWM0QixHQUFNM0wsQ0FBSyxNQUFNa0o7QUFBQTtBQUVwRCxhQUFPbEosTUFBVSxLQUFLQSxJQUFRO0FBQUEsSUFDL0I7QUFBQSxJQUVELGFBQWErSixHQUFjNEIsR0FBTTtBQUFBLE1BQy9CLE9BQUEzTCxJQUFRO0FBQUEsTUFDUixVQUFBMFYsSUFBVztBQUFBLE1BQ1gsVUFBQUosSUFBVztBQUFBLElBQ1osSUFBRyxJQUFJO0FBQ04sWUFBTSxFQUFFLFdBQUFLLEVBQVMsSUFBSzVMO0FBQ3RCLFVBQUksQ0FBQzRCLEtBQVEsQ0FBQytKLEtBQVlDLE1BQWM7QUFDdEMsZUFBTztBQUdULFVBQUk5VztBQUNKLFlBQU02USxJQUFjLE1BQ2pCN1EsVUFBYSxLQUFLLGdCQUFnQmtMLEdBQWMvSixDQUFLO0FBRXhELFVBQUk0VjtBQUNKLFlBQU1DLElBQWUsTUFDbEJELFVBQWMsS0FBSztBQUFBLFFBQ2xCcEksR0FBa0J6RCxHQUFjNEIsR0FBTSxLQUFLLE9BQU87QUFBQSxNQUM1RDtBQUVNLFVBQUlxSSxHQUNBdUIsR0FDQUM7QUFDSixVQUFJelUsRUFBVzRVLENBQVMsR0FBRztBQUN6QixjQUFNckUsSUFBUXFFLEVBQVU7QUFBQSxVQUN0QjtBQUFBLFVBQ0EsSUFBSTFVLEVBQVksTUFBTTtBQUFBLFlBQ3BCLFFBQVE7QUFBQSxZQUNSLE1BQU0wSztBQUFBLFlBQ04sT0FBT0E7QUFBQSxZQUNQLE9BQUEzTDtBQUFBLFlBRUEsSUFBSSxXQUFXO0FBQ2IscUJBQU8wUCxFQUFhO0FBQUEsWUFDckI7QUFBQSxZQUVELElBQUksWUFBWTtBQUNkLHFCQUFPbUcsRUFBYztBQUFBLFlBQ3RCO0FBQUEsVUFDYixDQUFXO0FBQUEsUUFDRjtBQUNELFFBQUk3UyxFQUFTc08sQ0FBSyxJQUNmLEVBQUUsTUFBQTBDLEdBQU0sUUFBQXVCLEdBQVEsUUFBQUMsRUFBTSxJQUFLbEUsSUFFNUIwQyxJQUFPMUMsR0FHVG9FLElBQVc7QUFBQSxNQUNuQixPQUFhO0FBS0wsY0FBTSxFQUFFLFNBQUFJLEVBQU8sSUFBSy9MLEdBQ2RwSixJQUNKbUMsRUFBUzZTLENBQVMsS0FBS0EsS0FDdkIxRSxFQUFhbEgsQ0FBWSxLQUFLK0wsS0FBVyxPQUFPLEtBQUtBLENBQU8sRUFBRSxNQUM5RDtBQUVGLFFBQUE5QixJQUFPckksRUFBS2hMO0FBQUEsTUFDYjtBQUNELFlBQU1vVixJQUFXLENBQUMsQ0FBQy9CO0FBVW5CLFVBVEFBLFVBQVMsS0FFSkEsTUFFSDBCLElBQVcsSUFDUHpFLEVBQWFsSCxDQUFZLEtBQUsvSixNQUFVLFNBQzFDZ1UsSUFBTyxHQUFHaFUsSUFBUSxPQUdsQjBWLEdBQVU7QUFDWixjQUFNRSxJQUFZQyxFQUFjO0FBQ2hDLFFBQUlELE1BR0Y1QixJQUFPLEdBQUc0QixLQUFhRyxJQUFXLElBQUkvQixPQUFVQTtBQUFBLE1BRW5EO0FBQ0QsYUFBT3NCLElBQVcsRUFBRSxNQUFBdEIsR0FBTSxRQUFBdUIsR0FBUSxRQUFBQyxFQUFRLElBQUd4QjtBQUFBLElBQzlDO0FBQUEsRUFDRjtBQUNIO0FDNUhBLElBQUliLEtBQVMsV0FBWTtBQUN2QixNQUFJQyxJQUFJLE1BQ0pDLElBQUdELEVBQUksZ0JBQ1B6QyxJQUFHeUMsRUFBSSxNQUFNLE1BQUlDO0FBRXJCLFNBQU8xQyxFQUFHLE9BQU87QUFBQSxJQUNmLGFBQWE7QUFBQSxFQUNqQixHQUFLLENBQUNBLEVBQUcsT0FBTztBQUFBLElBQ1osYUFBYTtBQUFBLEVBQ2pCLEdBQUssQ0FBQ3lDLEVBQUksWUFBWUEsRUFBSSxXQUFXQSxFQUFJLFlBQVl6QyxFQUFHLE9BQU87QUFBQSxJQUMzRCxhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsTUFDTCwyQkFBMkJ5QyxFQUFJO0FBQUEsSUFDaEM7QUFBQSxFQUNGLEdBQUUsQ0FBQ0EsRUFBSSxXQUFXekMsRUFBRyxjQUFjO0FBQUEsSUFDbEMsT0FBTztBQUFBLE1BQ0wsT0FBU3lDLEVBQUk7QUFBQSxNQUNiLFVBQVlBLEVBQUk7QUFBQSxNQUNoQixhQUFlQSxFQUFJO0FBQUEsTUFDbkIsV0FBYSxDQUFDQSxFQUFJO0FBQUEsSUFDbkI7QUFBQSxJQUNELElBQUk7QUFBQSxNQUNGLFFBQVVBLEVBQUk7QUFBQSxJQUNmO0FBQUEsSUFDRCxhQUFhQSxFQUFJLEdBQUcsQ0FBQ0EsRUFBSSxVQUFVO0FBQUEsTUFDakMsS0FBSztBQUFBLE1BQ0wsSUFBSSxXQUFZO0FBQ2QsZUFBTyxDQUFDQSxFQUFJLEdBQUcsY0FBYyxDQUFDO0FBQUEsTUFDL0I7QUFBQSxNQUNELE9BQU87QUFBQSxJQUNiLElBQVEsSUFBSSxHQUFHLE1BQU0sRUFBSTtBQUFBLEVBQ3pCLENBQUcsSUFBSUEsRUFBSSxHQUFJLEdBQUVBLEVBQUksT0FBT3pDLEVBQUcsYUFBYTtBQUFBLElBQ3hDLE9BQU87QUFBQSxNQUNMLE1BQVF5QyxFQUFJO0FBQUEsTUFDWixhQUFlQSxFQUFJO0FBQUEsSUFDcEI7QUFBQSxFQUNGLENBQUEsSUFBSUEsRUFBSSxNQUFNekMsRUFBRyxrQkFBa0I7QUFBQSxJQUNsQyxPQUFPO0FBQUEsTUFDTCxXQUFheUMsRUFBSTtBQUFBLE1BQ2pCLFVBQVlBLEVBQUk7QUFBQSxNQUNoQixNQUFRQSxFQUFJO0FBQUEsSUFDYjtBQUFBLEVBQ0YsQ0FBQSxDQUFDLEdBQUcsQ0FBQyxJQUFJQSxFQUFJLEdBQUksR0FBRUEsRUFBSSxHQUFHQSxFQUFJLE1BQU0sU0FBVW5QLEdBQVE4TCxHQUFLO0FBQzFELFdBQU9xRCxFQUFJLFVBQVV6QyxFQUFHLGFBQWE7QUFBQSxNQUNuQyxLQUFLWjtBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsVUFBVTtBQUFBLE1BQ1YsYUFBYTtBQUFBLE1BQ2IsT0FBTztBQUFBLFFBQ0wsU0FBV3FELEVBQUksZ0JBQWdCckQ7QUFBQSxRQUMvQixLQUFPQTtBQUFBLFFBQ1AsUUFBVTlMO0FBQUEsUUFDVixVQUFZbVAsRUFBSTtBQUFBLFFBQ2hCLE1BQVFBLEVBQUk7QUFBQSxRQUNaLE1BQVFBLEVBQUk7QUFBQSxRQUNaLE9BQVNBLEVBQUk7QUFBQSxRQUNiLFFBQVUsQ0FBQ0EsRUFBSSxXQUFXLENBQUNBLEVBQUk7QUFBQSxRQUMvQixVQUFZQSxFQUFJO0FBQUEsUUFDaEIsZ0JBQWtCQSxFQUFJO0FBQUEsTUFDdkI7QUFBQSxJQUNQLENBQUssSUFBSUEsRUFBSTtFQUNiLENBQUcsR0FBR3pDLEVBQUcscUJBQXFCO0FBQUEsSUFDMUIsT0FBTztBQUFBLE1BQ0wsU0FBV3lDLEVBQUk7QUFBQSxJQUNoQjtBQUFBLEVBQ0wsR0FBSyxDQUFDQSxFQUFJLGVBQWVBLEVBQUksU0FBU3pDLEVBQUcsYUFBYTtBQUFBLElBQ2xELEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxNQUNMLFFBQVV5QyxFQUFJO0FBQUEsTUFDZCxVQUFZQSxFQUFJO0FBQUEsTUFDaEIsTUFBUUEsRUFBSTtBQUFBLE1BQ1osTUFBUUEsRUFBSTtBQUFBLE1BQ1osT0FBU0EsRUFBSTtBQUFBLE1BQ2IsUUFBVSxDQUFDQSxFQUFJLFdBQVcsQ0FBQ0EsRUFBSTtBQUFBLE1BQy9CLFVBQVlBLEVBQUk7QUFBQSxNQUNoQixnQkFBa0JBLEVBQUk7QUFBQSxJQUN2QjtBQUFBLEVBQ0wsQ0FBRyxJQUFJQSxFQUFJLEdBQUUsQ0FBRSxHQUFHLENBQUMsR0FBRyxDQUFDQSxFQUFJLFdBQVdBLEVBQUksY0FBY0EsRUFBSSxHQUFHLFNBQVMsSUFBSUEsRUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHQSxFQUFJLFVBQVUsQ0FBRUEsRUFBSSxXQUFvQ0EsRUFBSSxHQUFFLElBQS9CQSxFQUFJLEdBQUcsY0FBYyxDQUFZLElBQUlBLEVBQUksY0FBYyxDQUFDekMsRUFBRyxlQUFlO0FBQUEsSUFDaE0sT0FBTztBQUFBLE1BQ0wsUUFBVXlDLEVBQUk7QUFBQSxNQUNkLE1BQVFBLEVBQUk7QUFBQSxNQUNaLE1BQVFBLEVBQUk7QUFBQSxNQUNaLE9BQVNBLEVBQUk7QUFBQSxNQUNiLFVBQVlBLEVBQUk7QUFBQSxJQUNqQjtBQUFBLEVBQ0YsQ0FBQSxDQUFDLElBQUlBLEVBQUksR0FBRSxDQUFFLEdBQUcsQ0FBQztBQUNwQixHQUVJRSxLQUFrQixDQUFFO0FDNEV4QixNQUFBQyxLQUFBL04sRUFBQSxVQUFBLGVBQUE7QUFBQSxFQUNBLFlBQUEsRUFBQSxrQkFBQXdRLEdBQUE7QUFBQSxFQUNBLFFBQUEsQ0FBQVAsRUFBQTtBQUFBLEVBRUEsVUFBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLGtCQUFBLE1BQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsUUFBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxRQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsT0FBQSxDQUFBLEdBQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxPQUFBLENBQUEsR0FBQTtBQUFBLElBQ0EsT0FBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLE1BQUEsR0FBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLFNBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsV0FBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLGFBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxnQkFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFlBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFDQSxVQUFBLEVBQUEsTUFBQXRWLE1BQUEsS0FBQTtBQUNBLFdBQUE7QUFBQSxNQUVBLEdBQ0FBLEtBQUFZLEVBQUFaLENBQUEsSUFDQUEsRUFBQSxLQUFBLE1BQUEsS0FBQSxPQUFBLElBQ0FBO0FBQUEsTUFFQSxvQkFBQSxDQUFBO0FBQUEsTUFDQSxlQUFBLENBQUE7QUFBQSxNQUNBLGdCQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0Esa0JBQUE7QUFFQSxhQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsd0JBQUE7QUFJQSxhQUFBLEtBQUEsYUFBQSxPQUFBLEtBQUEsUUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGVBQUE7QUFDQSxZQUFBMEwsSUFBQWlGLEdBQUEsS0FBQSxPQUFBLFFBQUEsRUFBQTtBQUNBLGlCQUFBbUYsS0FBQSxLQUFBO0FBQ0EsUUFBQXBLLEVBQUEsS0FBQSxHQUFBb0ssRUFBQSxZQUFBO0FBRUEsYUFBQXBLO0FBQUEsSUFDQTtBQUFBLElBRUEsT0FBQTtBQUNBLGFBQUFxRSxFQUFBLEtBQUEsT0FBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTs7QUFDQSxZQUFBZ0csTUFBQS9VLElBQUEsS0FBQSxPQUFBLFNBQUEsZ0JBQUFBLEVBQUEsTUFBQSxPQUFBLE1BQ0E0TyxJQUFBbUcsS0FBQSxLQUFBLGFBQUEsS0FBQSxLQUFBQSxFQUFBLElBQ0FBLE1BQ0ExTSxJQUFBLEtBQUEsZUFBQSxnQkFBQUEsRUFBQSxTQUFBO0FBQ0EsYUFBQXVHLE1BQUFtRyxLQUVBLEtBQUEsUUFBQSxRQUFBLEVBQUEsTUFBQW5HLEVBQUEsQ0FBQSxHQUVBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFDQSxVQUFBLEtBQUEsTUFBQTtBQUNBLFlBQUFvRyxJQUFBO0FBQ0EsbUJBQUFwRyxLQUFBLE9BQUEsT0FBQSxLQUFBLElBQUEsR0FBQTtBQUNBLGdCQUFBLEVBQUEsWUFBQXFHLEVBQUEsSUFBQXJHO0FBQ0EsY0FBQWhQLEVBQUFxVixDQUFBLElBQ0FBLEVBQUEsS0FBQSxNQUFBLEtBQUEsT0FBQSxJQUNBQTtBQUVBLG1CQUFBckc7QUFFQSxVQUFBb0csTUFDQUEsSUFBQXBHO0FBQUEsUUFFQTtBQUNBLGVBQUFvRztBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBOztBQUNBLGNBQUFoVixJQUFBLEtBQUEsV0FBQSxnQkFBQUEsRUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBQ0EsYUFBQSxLQUFBLFlBQUEsRUFBQSxRQUFBLFVBQUEsWUFBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxTQUFBLEtBQUEsT0FBQTtBQUFBLFFBQ0EsR0FBQSxLQUFBLFlBQUEsRUFBQSxRQUFBLGFBQUEsWUFBQSxJQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQVFBLE9BQUE7QUFDQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsYUFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFDQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQTtBQUNBLGFBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFDQSxhQUFBdkIsR0FBQSxLQUFBLFVBQUEsS0FBQSxVQUFBLEVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBO0FBQ0EsYUFBQSxLQUFBO0FBQUEsUUFDQSxLQUFBLGtCQUFBLEtBQUEsY0FBQSxLQUFBLE1BQUEsS0FBQSxPQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFDQSxhQUFBLEtBQUEsY0FBQSxDQUFBMFMsTUFBQUEsRUFBQSxPQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQTtBQUNBLGFBQUEsS0FBQSxjQUFBLENBQUFBLE1BQUFBLEVBQUEsU0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFDQSxhQUFBLEtBQUEsZUFBQSxDQUFBQSxNQUFBQSxFQUFBLE9BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUEsQ0FBQUEsTUFBQUEsRUFBQSxXQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQTtBQUNBLGFBQUEsQ0FBQSxDQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsYUFBQSxDQUFBLENBQUEsS0FBQSxTQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQ0EsYUFBQSxDQUFBLEtBQUEsV0FBQSxDQUFBLENBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxZQUFBLEVBQUEsWUFBQWxOLE1BQUEsS0FBQTtBQUNBLGFBQUEsQ0FBQSxDQUFBQSxLQUFBLE9BQUEsS0FBQUEsQ0FBQSxFQUFBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBMkQsR0FBQSxVQUFBO0FBQUEsTUFDQSxVQUFBO0FBQ0EsZUFBQSxDQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsYUFBQSxPQUFBLE9BQUEsS0FBQSxrQkFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFFBQUE7QUFDQSxhQUFBLE9BQUEsT0FBQSxLQUFBLGFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBO0FBQ0EsYUFBQSxPQUFBLE9BQUEsS0FBQSxjQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsdUJBQUE7QUFDQSxhQUFBLEtBQUEsdUJBQUEsS0FBQSxrQkFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGtCQUFBO0FBQ0EsYUFBQSxLQUFBLHVCQUFBLEtBQUEsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLG1CQUFBO0FBQ0EsYUFBQSxLQUFBLHVCQUFBLEtBQUEsY0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsU0FBQSxVQUFBLEVBQUEsR0FDQSxLQUFBLGtCQUFBLEdBRUEsS0FBQSxTQUFBLFVBQUEsS0FBQSxxQkFBQSxHQUNBLEtBQUEsVUFBQSxZQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsZ0JBQUE7QUFDQSxTQUFBLFVBQUEsU0FBQSxHQUNBLEtBQUEsVUFBQSxFQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQTtBQUFBLElBQ0Esd0JBQUFsSyxHQUFBdUksR0FBQTtBQUNBLGFBQUEsS0FBQTtBQUFBLFFBQ0EsS0FBQTtBQUFBLFFBQUF2STtBQUFBLFFBQUF1STtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSx1QkFBQXZJLEdBQUF1SSxHQUFBO0FBQ0EsYUFBQSxLQUFBLHdCQUFBdkksR0FBQXVJLENBQUEsRUFBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsb0JBQUF2SSxHQUFBdUksR0FBQTtBQUNBLGFBQUEsS0FBQSxrQkFBQSxLQUFBLHNCQUFBdkksR0FBQXVJLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxtQkFBQXZDLEdBQUF1QyxHQUFBO0FBQ0EsYUFBQSxLQUFBLG9CQUFBdkMsR0FBQXVDLENBQUEsRUFBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQWlQLEdBQUFqUCxHQUFBO0FBQ0EsYUFBQSxLQUFBLFlBQUEsS0FBQSxzQkFBQWlQLEdBQUFqUCxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQWlQLEdBQUFqUCxHQUFBO0FBQ0EsYUFBQSxLQUFBLGNBQUFpUCxHQUFBalAsQ0FBQSxFQUFBLE1BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxvQkFBQXZJLEdBQUF1SSxHQUFBO0FBQ0EsYUFBQSxLQUFBLHNCQUFBLEtBQUEsa0JBQUF2SSxHQUFBdUksQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLG1CQUFBdkksR0FBQXVJLEdBQUE7QUFDQSxhQUFBLEtBQUEsb0JBQUF2SSxHQUFBdUksQ0FBQSxFQUFBLE1BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBaVAsR0FBQWpQLEdBQUE7QUFDQSxhQUFBLEtBQUEsWUFBQSxLQUFBLGtCQUFBaVAsR0FBQWpQLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBaVAsR0FBQWpQLEdBQUE7QUFDQSxhQUFBLEtBQUEsVUFBQWlQLEdBQUFqUCxDQUFBLEVBQUEsTUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUExRixHQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUEsS0FBQSxXQUFBLEtBQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxlQUFBQSxHQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUEsS0FBQSxXQUFBLE1BQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBNFUsR0FBQTtBQUNBLFdBQUEsVUFBQSxVQUFBO0FBQUEsUUFFQSxTQUFBLEVBQUEsUUFBQUEsRUFBQTtBQUFBLE1BQ0EsQ0FBQSxJQVFBLENBQUEsS0FBQSxVQUFBQSxLQUFBLEtBQUEsWUFBQSxPQUNBLEtBQUEsU0FBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsV0FBQSxVQUFBLFFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxrQkFBQTtBQUNBLGlCQUFBcFYsS0FBQSxLQUFBO0FBQ0EsUUFBQUEsRUFBQSxnQkFBQTtBQUFBLElBRUE7QUFBQSxJQUVBLGNBQUE7QUFDQSxpQkFBQUEsS0FBQSxLQUFBO0FBQ0EsUUFBQUEsRUFBQSxZQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsUUFBQTs7QUFDQSxPQUFBQyxJQUFBLEtBQUEsMEJBQUEsUUFBQUEsRUFBQSxTQUNBLEtBQUEsU0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFlBQUFpRyxHQUFBZSxJQUFBLElBQUE7QUFDQSxZQUFBLEVBQUEsc0JBQUFvTyxFQUFBLElBQUE7QUFDQSxVQUFBQztBQUNBLFVBQUFwUCxHQUFBO0FBQ0EsY0FBQXFQLElBQUExVixFQUFBcUcsQ0FBQSxJQUNBQSxJQUNBbkUsR0FBQW1FLENBQUEsSUFDQSxDQUFBc1AsTUFBQXRQLEVBQUEsS0FBQXNQLENBQUEsSUFDQTtBQUNBLFFBQUFGLElBQUFDLElBQ0EsT0FBQSxLQUFBRixDQUFBLEVBQUEsT0FBQUUsQ0FBQSxJQUNBOVUsRUFBQXlGLENBQUEsSUFDQUEsSUFDQSxDQUFBQSxDQUFBO0FBQUEsTUFDQTtBQUNBLE1BQUFlLEtBQ0EsS0FBQSxZQUFBO0FBRUEsVUFBQUMsSUFBQSxJQUNBK04sSUFBQTtBQUNBLE1BQUFLLFVBQUEsT0FBQSxLQUFBRCxDQUFBO0FBQ0EsaUJBQUExWCxLQUFBMlgsR0FBQTtBQUNBLGNBQUFwUixJQUFBLEtBQUEsd0JBQUF2RyxDQUFBO0FBQ0EsbUJBQUFxQyxLQUFBa0U7QUFDQSxVQUFBbEUsRUFBQSxTQUFBaUgsQ0FBQSxNQUVBQSxLQUFBZ08sS0FDQWpWLEVBQUEsTUFBQSxHQUVBaVYsSUFBQSxJQUNBL04sSUFBQTtBQUFBLE1BR0E7QUFDQSxhQUFBRCxLQUFBLENBQUFDLEtBQ0EsS0FBQSxhQUFBLEdBRUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQWhCLEdBQUE7QUFDQSxhQUFBLEtBQUEsWUFBQUEsR0FBQSxFQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsTUFBQSxxQkFBQXdCLEdBQUFDLEdBQUE7O0FBQ0EsV0FBQSxZQUFBO0FBQ0EsVUFBQXNOLElBQUE7QUFDQSxZQUFBUSxJQUFBLENBQUE7QUFDQSxpQkFBQSxDQUFBOVgsR0FBQStYLENBQUEsS0FBQSxPQUFBLFFBQUFoTyxDQUFBLEdBQUE7QUFHQSxjQUFBaU8sSUFBQSxLQUFBLGFBQ0FqWSxFQUFBLEtBQUEsVUFBQUMsQ0FBQSxJQUNBQSxHQUlBaVksSUFBQTdYLEVBQUE0WCxDQUFBO0FBQ0EsWUFBQUUsSUFBQTtBQUNBLGNBQUEzUixJQUFBLEtBQUEsd0JBQUEwUixDQUFBO0FBQ0EsbUJBQUE1VixLQUFBa0U7QUFDQSxVQUFBbEUsRUFBQSxxQkFBQTBWLEdBQUFULEtBQUF0TixDQUFBLE1BQ0FrTyxJQUFBLElBQ0FaLElBQUE7QUFHQSxZQUFBLENBQUFZLEdBQUE7QUFJQSxnQkFBQUMsSUFBQUYsRUFBQSxJQUFBO0FBQ0EsaUJBQUFBLEVBQUEsU0FBQSxLQUFBO0FBQ0Esa0JBQUExUixJQUFBLEtBQUEsd0JBQUEwUixDQUFBO0FBQ0EsdUJBQUE1VixLQUFBa0U7QUFDQSxrQkFBQSxRQUFBakUsSUFBQUQsRUFBQSx3QkFBQSxnQkFBQUMsRUFBQTtBQUFBLGdCQUFBRDtBQUFBLGdCQUNBMlY7QUFBQSxnQkFDQSxDQUFBSSxNQUFBO0FBQ0Esc0JBQUFGLElBQUE7QUFDQSw2QkFBQTdWLEtBQUErVixHQUFBO0FBQ0EsMEJBQUFMLElBQUFoTyxFQUFBMUgsRUFBQTtBQUNBLG9CQUNBMFYsS0FDQTFWLEVBQUEscUJBQUEwVixHQUFBVCxLQUFBdE4sQ0FBQSxNQUVBa08sSUFBQSxJQUNBWixJQUFBO0FBQUEsa0JBRUE7QUFDQSx5QkFBQVk7QUFBQSxnQkFDQTtBQUFBO0FBTUE7QUFJQSxZQUFBRCxFQUFBLElBQUE7QUFBQSxVQUNBO0FBR0EsZ0JBQUFKLElBQUE1UixFQUFBa1MsQ0FBQTtBQUNBLHFCQUFBbEQsS0FBQThDLEdBQUE7QUFDQSxrQkFBQXJCLElBQUFtQixJQUNBLGFBQUFBLE1BQ0EsT0FBQSxLQUFBO0FBQ0EsWUFBQUMsRUFBQSxLQUFBLEdBQUFwQixLQUFBekIsRUFBQSxTQUFBO0FBQUEsVUFDQTtBQUFBLFFBQ0E7QUFDQSxRQUFBcUMsSUFBQTtBQUFBLE1BQ0E7QUFDQSxNQUFBQSxLQUNBLEtBQUEsYUFBQVEsRUFBQSxLQUFBO0FBQUEsQ0FBQSxDQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsYUFBQWpPLEdBQUE7QUFDQSxXQUFBLE9BQUE7QUFBQSxRQUNBLE1BQUE7QUFBQSxRQUNBLE9BQUE7QUFBQSxRQUNBLE1BQUFBLEtBQUE7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBO0FBSUEsYUFBQSxPQUFBLEtBQUEsTUFBQTBGLEdBQUEsS0FBQSxRQUFBLElBQUEsSUFBQSxDQUFBLEdBQ0EsS0FBQSxZQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQWpPLEdBQUE7QUFDQSxpQkFBQTBFLEtBQUExRTtBQUNBLFlBQUEwRSxLQUFBLEtBQUEsTUFBQTtBQUNBLGVBQUEsS0FBQSxLQUFBLE1BQUFBLEdBQUExRSxFQUFBMEUsRUFBQTtBQUNBLHFCQUFBM0QsS0FBQSxLQUFBLG9CQUFBMkQsQ0FBQTtBQUNBLFlBQUEzRCxFQUFBLFVBQUE7QUFBQSxRQUVBO0FBQUEsSUFFQTtBQUFBLElBRUEsV0FBQWYsR0FBQTtBQUlBLFlBQUF3TyxJQUFBLENBQUE7QUFDQSxpQkFBQSxDQUFBOUosR0FBQS9ELENBQUEsS0FBQSxPQUFBLFFBQUFYLENBQUE7QUFDQSxTQUFBd0IsRUFBQWIsQ0FBQSxLQUFBa0MsRUFBQWxDLENBQUEsTUFDQSxLQUFBLG9CQUFBK0QsQ0FBQSxFQUNBLEtBQUEsQ0FBQTNELE1BQUFBLEVBQUEsWUFBQSxNQUlBeU4sRUFBQTlKLEtBQUEvRDtBQUVBLGFBQUE2TjtBQUFBLElBQ0E7QUFBQSxJQUVBLFlBQUEsRUFBQSxRQUFBak0sSUFBQSxhQUFBLFlBQUFvTSxJQUFBLEdBQUEsSUFBQSxJQUFBO0FBQ0EsYUFBQUQ7QUFBQSxRQUNBLEtBQUE7QUFBQSxRQUNBLEtBQUE7QUFBQSxRQUNBLEtBQUE7QUFBQSxRQUNBLEtBQUE7QUFBQSxRQUFBO0FBQUEsVUFHQSxXQUFBO0FBQUEsVUFDQSxZQUFBQztBQUFBLFVBQ0EsUUFBQXBNO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBaVAsR0FBQTs7QUFHQSxPQUFBeFEsSUFBQSxLQUFBLHVCQUFBLE1BQUEsUUFBQUEsRUFBQSx5QkFBQSxNQUFBd1E7QUFBQSxJQUNBO0FBQUEsSUFFQSxtQkFBQXpRLEdBQUF5USxHQUFBOztBQUNBLFdBQUEsZUFBQSxLQUFBLG9CQUFBelEsR0FBQXlRLENBQUEsSUFFQXhRLElBQUEsS0FBQSwwQkFBQSxRQUFBQSxFQUFBLG1CQUFBRCxHQUFBeVE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBc0UsR0FBQXRFLEdBQUE7QUFDQSxXQUFBLGVBQUEsS0FBQSxlQUFBc0UsR0FBQXRFLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxlQUFBM0IsR0FBQTJCLEdBQUE7QUFDQSxXQUFBLGVBQUEsS0FBQSxnQkFBQTNCLEdBQUEyQixDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZUFBQXVGLEdBQUFoVixHQUFBeVAsR0FBQTtBQUNBLFlBQUFsTixJQUFBdkMsRUFBQTtBQUNBLE1BQUF5UCxJQUNBLEtBQUEsS0FBQXVGLEdBQUF6UyxHQUFBdkMsQ0FBQSxJQUVBLEtBQUEsUUFBQWdWLEdBQUF6UyxDQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsdUJBQUF5UyxHQUFBO0FBQ0EsYUFBQSxPQUFBLE9BQUFBLENBQUEsRUFBQSxPQUFBLENBQUFDLEdBQUFqVixNQUFBO0FBR0EsY0FBQSxFQUFBLFVBQUFyRCxFQUFBLElBQUFxRDtBQUVBLGdCQURBaVYsRUFBQXRZLE9BQUFzWSxFQUFBdFksS0FBQSxDQUFBLElBQ0EsS0FBQXFELENBQUEsR0FDQWlWO0FBQUEsTUFDQSxHQUFBLEVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBQSxHQUFBdFksR0FBQXVJLEdBQUE7QUFDQSxhQUFBL0gsRUFBQVIsQ0FBQSxFQUFBLFdBQUEsS0FBQSxRQUFBLElBQ0EsS0FBQSxzQkFBQXNZLEdBQUF0WSxHQUFBdUksQ0FBQSxJQUNBLEtBQUEsa0JBQUErUCxHQUFBdFksR0FBQXVJLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxzQkFBQStQLEdBQUF0WSxHQUFBdUksR0FBQTtBQUNBLGFBQUEsS0FBQTtBQUFBLFFBQ0ErUCxFQUFBOVgsRUFBQVIsQ0FBQSxNQUFBLENBQUE7QUFBQSxRQUNBdUk7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsa0JBQUErUCxHQUFBdFMsR0FBQXVDLEdBQUE7QUFDQSxhQUFBLEtBQUE7QUFBQSxRQUNBK1AsRUFBQXZZLEVBQUEsS0FBQSxVQUFBaUcsQ0FBQSxNQUFBLENBQUE7QUFBQSxRQUNBdUM7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsZUFBQXdDLEdBQUF4QyxHQUFBO0FBQ0EsYUFBQUEsSUFBQXdDLEVBQUEsT0FBQXhDLENBQUEsSUFBQXdDO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFDQSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNodEJBLElBQUl1SixLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQekMsSUFBR3lDLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPMUMsRUFBRyxlQUFlO0FBQUEsSUFDdkIsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsdUJBQXVCeUMsRUFBSTtBQUFBLElBQzVCO0FBQUEsSUFDRCxPQUFPO0FBQUEsTUFDTCxRQUFVQSxFQUFJO0FBQUEsTUFDZCxVQUFZQSxFQUFJO0FBQUEsTUFDaEIsTUFBUUEsRUFBSTtBQUFBLE1BQ1osTUFBUUEsRUFBSTtBQUFBLE1BQ1osT0FBU0EsRUFBSTtBQUFBLE1BQ2IsT0FBU0EsRUFBSSxZQUFZLE9BQU9BLEVBQUk7QUFBQSxNQUNwQyxTQUFXO0FBQUEsTUFDWCxVQUFZQSxFQUFJO0FBQUEsTUFDaEIsV0FBYUEsRUFBSTtBQUFBLE1BQ2pCLGFBQWVBLEVBQUk7QUFBQSxJQUNwQjtBQUFBLElBQ0QsYUFBYUEsRUFBSSxHQUFHLENBQUM7QUFBQSxNQUNuQixLQUFLO0FBQUEsTUFDTCxJQUFJLFdBQVk7QUFDZCxlQUFPLENBQUNBLEVBQUksYUFBYUEsRUFBSSxhQUFhQSxFQUFJLFdBQVd6QyxFQUFHLHFCQUFxQjtBQUFBLFVBQy9FLE9BQU87QUFBQSxZQUNMLFdBQWF5QyxFQUFJO0FBQUEsWUFDakIsV0FBYUEsRUFBSTtBQUFBLFlBQ2pCLFVBQVlBLEVBQUk7QUFBQSxZQUNoQixVQUFZQSxFQUFJO0FBQUEsWUFDaEIsUUFBVUEsRUFBSTtBQUFBLFlBQ2QsVUFBWUEsRUFBSTtBQUFBLFlBQ2hCLE1BQVFBLEVBQUk7QUFBQSxZQUNaLE1BQVFBLEVBQUk7QUFBQSxZQUNaLE9BQVNBLEVBQUk7QUFBQSxVQUNkO0FBQUEsVUFDRCxJQUFJO0FBQUEsWUFDRixRQUFVLFNBQVVTLEdBQVE7QUFDMUIscUJBQU9ULEVBQUksTUFBTSxRQUFRO0FBQUEsWUFDMUI7QUFBQSxVQUNGO0FBQUEsUUFDWCxDQUFTLElBQUlBLEVBQUksR0FBRSxDQUFFO0FBQUEsTUFDZDtBQUFBLE1BQ0QsT0FBTztBQUFBLElBQ2IsQ0FBSyxDQUFDO0FBQUEsRUFDTixDQUFHO0FBQ0gsR0FFSUUsS0FBa0IsQ0FBRTtBQ094QixNQUFBQyxLQUFBL04sRUFBQSxVQUFBLHVCQUFBO0FBQUEsRUFDQSxPQUFBO0FBQUEsSUFDQSxRQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsT0FBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxNQUFBLENBQUEsUUFBQSxNQUFBLEdBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxTQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsV0FBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLGFBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxXQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFdBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsS0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFlBQUE7QUFDQSxhQUFBa0ksR0FBQSxLQUFBLE1BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsYUFBQSxDQUFBLEtBQUEsYUFBQSxDQUFBLENBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQ0EsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEZBLElBQUl5RixLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQekMsSUFBR3lDLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPRCxFQUFJLGVBQWVBLEVBQUksaUJBQWlCLFNBQVMsSUFBSXpDLEVBQUcsT0FBTztBQUFBLElBQ3BFLFlBQVksQ0FBQztBQUFBLE1BQ1gsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsT0FBT3lDLEVBQUk7QUFBQSxNQUNYLFlBQVk7QUFBQSxJQUNsQixDQUFLO0FBQUEsSUFDRCxhQUFhO0FBQUEsRUFDakIsR0FBSyxDQUFDQSxFQUFJLEdBQUdBLEVBQUksa0JBQWtCLFNBQVVnRSxHQUFNO0FBQy9DLFFBQUluVCxJQUFTbVQsRUFBSyxRQUNkdlksSUFBV3VZLEVBQUssVUFDaEJDLElBQWlCRCxFQUFLLGdCQUN0QmpZLElBQVNpWSxFQUFLLFFBQ2RFLElBQVFGLEVBQUs7QUFDakIsV0FBTyxDQUFDblQsRUFBTyxVQUFVLFdBQVcwTSxFQUFHLE9BQU87QUFBQSxNQUM1QyxhQUFhO0FBQUEsSUFDbkIsQ0FBSyxJQUFJeUMsRUFBSSxNQUFNQSxFQUFJLGFBQWFuUCxDQUFNLElBQUkwTSxFQUFHLGtCQUFrQjtBQUFBLE1BQzdELEtBQUswRztBQUFBLE1BQ0wsT0FBTztBQUFBLFFBQ0wsUUFBVXBUO0FBQUEsUUFDVixVQUFZcEY7QUFBQSxRQUNaLE1BQVF1VSxFQUFJO0FBQUEsUUFDWixNQUFRQSxFQUFJO0FBQUEsUUFDWixPQUFTa0U7QUFBQSxRQUNULFFBQVVsRSxFQUFJO0FBQUEsUUFDZCxRQUFValU7QUFBQSxRQUNWLFVBQVlpVSxFQUFJO0FBQUEsUUFDaEIsZ0JBQWtCQSxFQUFJO0FBQUEsTUFDdkI7QUFBQSxJQUNQLENBQUssSUFBSUEsRUFBSSxNQUFNblAsRUFBTyxVQUFVLFVBQVUwTSxFQUFHLE9BQU87QUFBQSxNQUNsRCxhQUFhO0FBQUEsSUFDbkIsQ0FBSyxJQUFJeUMsRUFBSSxHQUFFLENBQUU7QUFBQSxFQUNkLENBQUEsQ0FBQyxHQUFHLENBQUMsSUFBSUEsRUFBSSxHQUFFO0FBQ2xCLEdBRUlFLEtBQWtCLENBQUU7QUNpQ3hCLE1BQUFDLEtBQUEvTixFQUFBLFVBQUEsYUFBQTtBQUFBLEVBQ0EsVUFBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLGVBQUEsTUFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsS0FBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxTQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLGdCQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLGVBQUE7QUFDQSxhQUFBLEtBQUEsTUFBQSxPQUFBLEtBQUEsY0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLG1CQUFBOztBQVFBLFlBQUF3SixLQUFBN04sSUFBQSxLQUFBLGlCQUFBLGdCQUFBQSxFQUFBO0FBQ0EsYUFBQSxPQUFBLFVBQUFxSSxJQUFBLEtBQUEsV0FBQSxnQkFBQUEsRUFBQSxlQUFBLENBQUEsQ0FBQSxFQUFBO0FBQUEsUUFDQSxDQUFBLENBQUEzRSxHQUFBWixDQUFBLE1BQUE7QUFFQSxVQUFBQSxFQUFBLE9BQUFZO0FBRUEsZ0JBQUExRixJQUFBeU8sR0FBQTNKLENBQUEsR0FDQW9ULElBQUF6WSxFQUFBLEtBQUEsVUFBQWlHLENBQUE7QUFDQSxpQkFBQTtBQUFBLFlBQ0EsUUFBQVo7QUFBQSxZQUNBLFVBQUE5RSxLQUFBLENBQUE2UCxJQUNBcUksSUFDQSxLQUFBO0FBQUEsWUFDQSxnQkFBQUE7QUFBQSxZQUNBLFFBQUFsWTtBQUFBLFlBQ0EsT0FBQUEsSUFBQSxLQUFBLGNBQUEwRixDQUFBLElBQUEsS0FBQTtBQUFBLFVBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGVBQUE7QUFHQSxhQUFBLEtBQUEsaUJBQUE7QUFBQSxRQUNBLENBQUEsRUFBQSxRQUFBWixHQUFBLGdCQUFBcEYsRUFBQSxNQUFBb1I7QUFBQSxVQUNBaE07QUFBQSxVQUNBcEY7QUFBQSxVQUNBLEtBQUE7QUFBQSxVQUNBLEtBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLG9CQUFBO0FBQ0EsYUFBQSxLQUFBLFVBQUEsS0FBQSxpQkFBQSxXQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFDQSxTQUFBLFVBQUEsRUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLGdCQUFBO0FBQ0EsU0FBQSxVQUFBLEVBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxTQUFBO0FBQUEsSUFDQSxVQUFBOFMsR0FBQTtBQUNBLFdBQUEsZ0JBQUEsY0FBQSxNQUFBQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQTtBQUNBLE1BQUEsS0FBQSxPQUNBLEtBQUEsUUFBQSxLQUFBLEVBQUEsTUFBQSxLQUFBLEtBQUE7QUFBQSxJQUVBO0FBQUEsRUFDQTtBQUNBLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2xLTyxTQUFTNEYsR0FBY3pXLEdBQU87QUFDbkMsUUFBTXNHLElBQ0p0RSxFQUFTaEMsQ0FBSyxLQUNkQSxFQUFNLE1BQU0sc0NBQXNDO0FBRXBELE1BQUlzRyxHQUFPO0FBQ1QsVUFBTSxDQUFHLEVBQUFvUSxHQUFVQyxDQUFPLElBQUlyUTtBQUM5QixXQUFPLFdBQVdvUSxDQUFRLElBQUksV0FBV0MsQ0FBTztBQUFBLEVBQ3BEO0FBQ0ksV0FBTyxXQUFXM1csQ0FBSztBQUUzQjtBQ2JBLElBQUlxUyxLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQekMsSUFBR3lDLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPMUMsRUFBRyxPQUFPO0FBQUEsSUFDZixZQUFZLENBQUM7QUFBQSxNQUNYLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE9BQU95QyxFQUFJO0FBQUEsTUFDWCxZQUFZO0FBQUEsSUFDbEIsQ0FBSztBQUFBLElBQ0QsYUFBYTtBQUFBLElBQ2IsT0FBT0EsRUFBSTtBQUFBLElBQ1gsT0FBT0EsRUFBSTtBQUFBLEVBQ1osR0FBRSxDQUFDQSxFQUFJLFFBQVF6QyxFQUFHLGNBQWM7QUFBQSxJQUMvQixPQUFPeUMsRUFBSTtBQUFBLElBQ1gsT0FBTztBQUFBLE1BQ0wsT0FBU0EsRUFBSTtBQUFBLE1BQ2IsVUFBWUEsRUFBSTtBQUFBLElBQ2pCO0FBQUEsRUFDTCxDQUFHLElBQUlBLEVBQUksR0FBRSxHQUFJekMsRUFBR3lDLEVBQUksaUJBQWlCQSxFQUFJLE9BQU8sSUFBSSxHQUFHO0FBQUEsSUFDdkQsS0FBSztBQUFBLElBQ0wsYUFBYTtBQUFBLElBQ2IsT0FBT0EsRUFBSTtBQUFBLElBQ1gsT0FBTztBQUFBLE1BQ0wsUUFBVUEsRUFBSTtBQUFBLE1BQ2QsVUFBWUEsRUFBSTtBQUFBLE1BQ2hCLE1BQVFBLEVBQUk7QUFBQSxNQUNaLE1BQVFBLEVBQUk7QUFBQSxNQUNaLE9BQVNBLEVBQUk7QUFBQSxNQUNiLFFBQVVBLEVBQUk7QUFBQSxNQUNkLFFBQVVBLEVBQUk7QUFBQSxNQUNkLFVBQVlBLEVBQUk7QUFBQSxJQUNqQjtBQUFBLElBQ0QsSUFBSTtBQUFBLE1BQ0YsUUFBVUEsRUFBSTtBQUFBLElBQ2Y7QUFBQSxFQUNMLENBQUcsR0FBR3pDLEVBQUcsZUFBZTtBQUFBLElBQ3BCLE9BQU87QUFBQSxNQUNMLFFBQVV5QyxFQUFJO0FBQUEsSUFDZjtBQUFBLEVBQ0wsQ0FBRyxDQUFDLEdBQUcsQ0FBQztBQUNSLEdBRUlFLEtBQWtCLENBQUU7QUN3QnhCLE1BQUFDLEtBQUEvTixFQUFBLFVBQUEsa0JBQUE7QUFBQSxFQUNBLE9BQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLEtBQUEsR0FBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsUUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxTQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsZ0JBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLFFBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsVUFBQTtBQUNBLGFBQUEsSUFBQXZFLEVBQUEsTUFBQSxFQUFBLFFBQUEsS0FBQSxRQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTtBQUNBLGFBQUFzTCxFQUFBLEtBQUEsTUFBQSxLQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsWUFBQSxFQUFBLFFBQUF0SSxFQUFBLElBQUEsTUFDQSxFQUFBLE9BQUFxTixFQUFBLElBQUFyTjtBQUNBLGFBQ0FxTixNQUFBLE9BQ0EsQ0FBQSxDQUFBQSxLQUFBLEtBQUEsWUFBQSxpQkFBQSxLQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsUUFBQTtBQUNBLGFBQUEsS0FBQSxXQUFBLEtBQUEsU0FBQSxLQUFBLE1BQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBRUEsYUFBQSxLQUFBLFNBQUEsS0FBQSxXQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUF4SSxFQUFBLFNBQUE7QUFBQSxNQUNBLE1BQUEsQ0FBQSxRQUFBLE1BQUE7QUFBQSxNQUNBLFVBQUE7QUFDQSxlQUFBLEtBQUEsWUFBQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLElBQUE0TyxHQUFBO0FBRUEsZUFBQUEsTUFBQSxTQUNBLElBQ0E1VSxFQUFBNFUsQ0FBQSxJQUNBQSxFQUFBLE1BQUEsbUJBQUEsRUFBQSxLQUNBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLHdCQUFBNU8sRUFBQSxTQUFBO0FBQUEsTUFDQSxNQUFBO0FB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QSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFVBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxXQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsV0FBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFVBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsU0FBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLEtBQUEsR0FBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFlBQUE7QUFDQSxhQUFBLEtBQUEsU0FBQSxLQUFBLE9BQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxhQUFBLEtBQUEsVUFBQSxXQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQTtBQUNBLGFBQUEsS0FBQSxVQUFBLFVBQUEsS0FBQSxDQUFBLENBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxhQUFBLEtBQUEsVUFBQSxXQUFBLEtBQUEsQ0FBQSxDQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsYUFBQSxLQUFBLFVBQUEsV0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLG1CQUFBOztBQUNBLGVBRUFyRSxJQUFBLEtBQUEsT0FBQSxjQUFBLGdCQUFBQSxFQUFBLFVBSUEsS0FBQSxhQUNBLEdBQUFrWCxFQUFBLEtBQUEs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QUFBLElBQUEsZ0JBQUEsS0FBQSxLQUVBLE9BQUFBLEVBQUEsU0FBQSxJQUFBQSxFQUFBLEtBQUEsVUFBQSxDQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFHQSxZQUFBO0FBQ0EsTUFBQSxLQUFBLGFBQ0EsS0FBQSxjQUFBLEtBQUEsZUFDQSxLQUFBLFdBQUEsS0FBQSxRQUFBLEtBQUEsSUFBQSxJQUVBLEtBQUEsV0FBQTtBQUFBLElBRUE7QUFBQSxJQUVBLGNBQUF4VSxHQUFBO0FBQ0EsVUFBQSxLQUFBLGNBQUEsS0FBQSxjQUFBLE1BQUE7QUFDQSxjQUFBLEVBQUEscUJBQUFvYSxFQUFBLElBQUE7QUFDQSxvQkFBQTtBQUFBLFVBQ0EsS0FBQTtBQUFBLFVBQ0EsS0FBQTtBQUFBLFVBQ0FBLEVBQUEsV0FBQXBhLENBQUE7QUFBQSxRQUNBLEdBQ0FvYSxFQUFBLFNBQUEsR0FDQTtBQUFBLE1BQ0E7QUFDQSxhQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQXBhLEdBQUE7O0FBQ0EsYUFBQTZRLEVBQUEsS0FBQSxZQUFBLElBQ0EsS0FBQSxjQUFBN1EsQ0FBQSxJQUNBLENBQUEsR0FBQWdCLElBQUEsS0FBQSxlQUFBLFFBQUFBLEVBQUEsS0FBQWhCO0FBQUEsSUFDQTtBQUFBLElBR0EsWUFBQTtBQUNBLFdBQUEsUUFBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBR0EsUUFBQUEsR0FBQTtBQUVBLE1BQUEsS0FBQSxjQUVBLEtBQUEsY0FBQUEsQ0FBQSxLQUVBLEtBQUEsY0FBQSxNQUNBLEtBQUEsYUFBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxnQkFBQXFhLEdBQUFDLEdBQUE7QUFFQSxNQUFBRCxNQUFBQyxNQUNBLEtBQUEsYUFBQTtBQUFBLElBRUE7QUFBQSxJQUVBLE1BQUEsU0FBQTtBQUNBLGFBQUEsS0FBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsTUFBQSxRQUFBO0FBQ0EsYUFBQSxLQUFBLFNBQUEsS0FBQSxxQkFBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQUMsSUFBQSxJQUFB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QSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLENBQUEsT0FBQSxNQUFBLEdBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxXQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsT0FBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxFQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLFFBQUEsS0FBQSxRQUFBLEtBQUEsT0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxPQUFBO0FBQ0EsYUFBQSxLQUFBLFVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBO0FBQ0EsYUFBQSxLQUFBLFVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsYUFBQSxLQUFBLFVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EsR0FBQSxLQUFBO0FBQUEsUUFDQSxRQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQTtBQUNBLGFBQUFuTCxFQUFBLEtBQUEsT0FBQSxVQUFBO0FBQUEsSUFDQTtBQUFBLElBR0EsaUJBQUE7QUFDQSxhQUFBLEtBQUEsT0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGVBQUE7O0FBQ0EsWUFBQXJMLEtBQUExRCxJQUFBLEtBQUEsbUJBQUEsZ0JBQUFBLEVBQUE7QUFDQSxhQUFBMEQsS0FBQSxLQUFBLEtBQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsb0JBQUE7O0FB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QSxLQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxhQUFBLEtBQUEsV0FBQSxTQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsUUFDQSxRQUFBO0FBQUEsUUFDQSxXQUFBO0FBQUEsUUFDQSxRQUFBO0FBQUEsUUFDQSxPQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsVUFDQSxTQUFBLENBQUFvTyxNQUFBLEtBQUEsWUFBQUEsQ0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxtQkFBQTtBQUNBLGFBQUEsS0FBQSxXQUFBLFNBQUE7QUFBQSxRQUNBLFdBQUE7QUFBQSxVQUdBLGNBQUEsTUFDQSxLQUFBLGlCQUFBLEtBQUEsQ0FBQTljLE1BQUFBLEVBQUEsUUFBQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLFNBQUE7QUFBQSxVQUNBLE1BQUE7QUFBQSxVQUNBLFFBQUEsQ0FBQSxHQUFBLEdBQUEsR0FBQSxHQUFBLEdBQUEsQ0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxtQkFBQTtBQUNBLGFBQUEsS0FBQSxXQUFBLFNBQUE7QUFBQSxRQUNBLFlBQUE7QUFBQSxRQUNBLGFBQUE7QUFBQSxRQUNBLFlBQUE7QUFBQSxRQUNBLFdBQUE7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsYUFBQSxLQUFBLFdBQUEsU0FBQTtBQUFBLFFBQ0EsTUFBQTtBQUFBLFFBQ0EsTUFBQTtBQUFBLE1BQ0EsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGlCQUFBO0FBQ0EsWUFBQTtBQUFBLFFBQ0EsYUFBQStjO0FBQUEsUUFDQSxrQkFBQUM7QUFBQSxRQUNBLGtCQUFBQztBQUFBLFFBQ0EsYUFBQUM7QUFBQSxNQUNBLElBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQUg7QUFBQSxRQUNBQztBQUFBLFFBQ0FDO0FBQUEsUUFDQUM7QUFBQSxNQUNBLEVBQUEsT0FBQSxDQUFBNWMsTUFBQUEsRUFBQSxTQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxlQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0Esb0JBQUE7QUFBQSxVQUNBLFVBQUE7QUFBQSxVQUNBLFVBQUE7QUFBQSxVQUNBLGdCQUFBO0FBQUEsUUFDQSxFQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxVQUFBLENBQUEsS0FBQTtBQUFBLFFBQ0EsV0FBQSxLQUFBO0FBQUEsUUFDQSxtQkFBQSxDQUFBLEtBQUEsWUFBQTtBQUFBLFFBQ0EsbUJBQUEsQ0FBQSxLQUFBLFlBQUE7QUFBQSxRQUNBLGNBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBeUQsRUFBQSxhQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxZQUFBQSxFQUFBLGNBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxJQUVBLENBQUE7QUFBQSxJQUVBLGFBQUFBLEVBQUEsZUFBQTtBQUFBLE1BQ0EsTUFBQSxDQUFBLFFBQUEsT0FBQTtBQUFBLE1BQ0EsU0FBQTtBQUFBLE1BQ0EsSUFBQW9aLEdBQUE7QUFDQSxlQUFBbGYsRUFBQWtmLENBQUEsSUFDQUEsSUFDQTtBQUFBLFVBQ0EsT0FBQSxDQUFBLENBQUFBO0FBQUEsVUFDQSxPQUFBLENBQUEsQ0FBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFBQSxJQUNBLFdBQUE7QUFBQSxJQUNBLFdBQUE7QUFBQSxJQUNBLGFBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsUUFBQTlELElBQUEsSUFDQUMsSUFBQTtBQUVBLFVBQUFFLElBQUEsTUFBQTtBQUNBLE1BQUEsQ0FBQSxLQUFBLFdBQUFILE1BQ0FBLElBQUEsSUFDQSxLQUFBLFNBQUE7QUFBQSxJQUVBLEdBRUFJLElBQUEsTUFBQSxLQUFBLFFBQUEsR0FFQUMsSUFBQSxNQUFBO0FBQ0EsV0FBQSxPQUFBLEdBQ0FGLEVBQUE7QUFBQSxJQUNBLEdBRUE0RCxJQUFBNUUsR0FBQSxDQUFBNkUsTUFBQTtBQUNBLE1BQUEvRCxJQUFBLElBQ0EsS0FBQSxRQUFBK0QsRUFBQSxHQUNBaEUsSUFBQSxJQUNBRyxFQUFBO0FBQUEsSUFDQSxHQUFBLEdBQUEsR0FFQThELElBQUEsQ0FBQSxFQUFBLFNBQUFDLFFBQUE7QUFDQSxNQUFBSCxFQUFBRyxDQUFBLEdBQ0EsS0FBQSxRQUFBO0FBQUEsSUFDQTtBQUVBLFNBQUEsT0FBQSxTQUFBLENBQUF4aEIsTUFBQTtBQUNBLE1BQUF1ZCxJQUNBQSxJQUFBLEtBRUEsS0FBQSxPQUFBLFdBQUF2ZCxHQUFBLElBQUEsS0FBQSxZQUFBO0FBQUEsSUFFQSxDQUFBLEdBRUEsS0FBQSxTQUFBLElBQUF5aEIsR0FBQTtBQUFBLE1BQ0EsR0FBQSxLQUFBO0FBQUEsTUFDQSxTQUFBL0Q7QUFBQSxNQUNBLFFBQUFDO0FBQUEsTUFDQSxVQUFBNEQ7QUFBQSxNQUNBLFlBQUEsS0FBQSxpQkFBQTtBQUFBLE1BQ0EsU0FBQSxLQUFBLFNBQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxnQkFBQTtBQUNBLFNBQUEsT0FBQSxRQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQTtBQUFBLElBQ0EsYUFBQTVnQixHQUFBO0FBQ0EsWUFBQStnQixJQUFBLENBQUEsRUFBQSxTQUFBQyxHQUFBLFNBQUFDLFNBQUEsRUFBQSxHQUFBRCxHQUFBLEdBQUFDO0FBRUEsVUFBQUMsSUFBQUgsRUFBQS9nQixDQUFBLEVBQUEsR0FDQW1oQixJQUFBLFdBQUEsaUJBQUEsS0FBQSxNQUFBLE9BQUEsR0FBQSxFQUFBLE1BQUE7QUFFQSxZQUFBQyxJQUFBLENBQUFwaEIsTUFBQTtBQUNBLGNBQUEsRUFBQSxHQUFBaWhCLEVBQUEsSUFBQUYsRUFBQS9nQixDQUFBO0FBQ0EsUUFBQW1oQixLQUFBRixJQUFBQyxHQUNBQSxJQUFBRCxHQUNBLEtBQUEsU0FBQSxHQUFBLEtBQUEsSUFBQUUsR0FBQSxDQUFBO0FBQUEsTUFDQSxHQUVBbmMsSUFBQSxLQUFBLE1BQUEsVUFBQTtBQUFBLFFBQ0EsV0FBQW9jO0FBQUEsUUFFQSxRQUFBcGhCLEdBQUE7QUFDQSxVQUFBb2hCLEVBQUFwaEIsQ0FBQSxHQUNBZ0YsRUFBQSxPQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0EsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLHNCQUFBO0FBQ0EsV0FBQSxPQUFBLFdBQUEsS0FBQSxhQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsTUFBQSxZQUFBb2IsR0FBQTtBQUNBLFlBQUFpQixJQUFBLE1BQUEsS0FBQSxXQUFBO0FBQUEsUUFDQSxZQUFBO0FBQUEsVUFDQSxNQUFBO0FBQUEsWUFDQSxNQUFBO0FBQUEsWUFDQSxPQUFBO0FBQUEsWUFDQSxXQUFBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsT0FBQTtBQUFBLFlBQ0EsTUFBQTtBQUFBLFlBQ0EsT0FBQTtBQUFBLFVBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxTQUFBO0FBQUEsVUFDQSxRQUFBLENBQUE7QUFBQSxVQUNBLE9BQUEsRUFBQSxNQUFBLFNBQUE7QUFBQSxVQUNBLFFBQUE7QUFBQSxZQUNBLFFBQUE7QUFBQSxjQUNBLE1BQUEsRUFBQSxpQkFBQUMsS0FBQTtBQUNBLGdCQUFBQSxFQUFBLFFBQUE7QUFBQSxrQkFDQSxNQUFBO0FBQUEsa0JBQ0EsT0FBQTtBQUFBLGdCQUNBLENBQUE7QUFBQSxjQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxNQUFBLEtBQUEsT0FBQSxhQUFBLE1BQUE7QUFBQSxNQUNBLENBQUE7QUFDQSxVQUFBRCxHQUFBO0FBQ0EsWUFBQSxFQUFBLE1BQUFFLEdBQUEsT0FBQWpQLEVBQUEsSUFBQStPO0FBQ0EsWUFBQUU7QUFHQSxjQUFBO0FBQ0EsZ0JBQUEsSUFBQUEsQ0FBQTtBQUFBLFVBQ0EsUUFBQTtBQUNBLFlBQUFBLElBQUEsVUFBQUE7QUFBQSxVQUNBO0FBRUEsUUFBQW5CLEVBQUEsRUFBQSxNQUFBbUIsR0FBQSxPQUFBalAsR0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxtQkFBQTtBQUNBLFlBQUE7QUFBQSxRQUNBLE9BQUFrUCxJQUFBLENBQUE7QUFBQSxRQUNBLE9BQUFDLElBQUEsQ0FBQTtBQUFBLFFBQ0EsT0FBQUMsSUFBQSxDQUFBO0FBQUEsTUFDQSxJQUFBLEtBQUE7QUFDQSxhQUFBO0FBQUEsUUFFQUYsRUFBQSxRQUFBLElBQUFHLEdBQUE7QUFBQSxRQUNBSCxFQUFBLFVBQUEsSUFBQUksR0FBQTtBQUFBLFFBQ0FKLEVBQUEsYUFBQSxJQUFBSyxHQUFBO0FBQUEsUUFDQUwsRUFBQSxVQUFBLElBQUFNLEdBQUE7QUFBQSxRQUNBTixFQUFBLFNBQUEsSUFBQU8sR0FBQTtBQUFBLFFBQ0FQLEVBQUEsUUFBQSxJQUFBUSxHQUFBO0FBQUEsUUFDQVIsRUFBQSxRQUFBLElBQUFTLEdBQUE7QUFBQSxRQUdBUixFQUFBLGNBQUEsSUFBQVMsR0FBQTtBQUFBLFFBQ0FULEVBQUEsYUFBQSxJQUFBVSxHQUFBO0FBQUEsUUFDQSxJQUFBQyxHQUFBO0FBQUEsUUFDQVgsRUFBQSxXQUFBLElBQUFZLEdBQUEsRUFBQSxRQUFBWixFQUFBLFNBQUE7QUFBQSxRQUNBQSxFQUFBLGtCQUFBLElBQUFhLEdBQUE7QUFBQSxTQUNBYixFQUFBLGVBQUFBLEVBQUEsZUFBQSxJQUFBYyxHQUFBO0FBQUEsUUFDQWQsRUFBQSxjQUFBLElBQUFlLEdBQUE7QUFBQSxRQUNBZixFQUFBLGVBQUEsSUFBQWdCLEdBQUE7QUFBQSxRQU1BZixFQUFBLFdBQUEsSUFBQWdCLEdBQUE7QUFBQSxNQUNBLEVBQUEsT0FBQSxDQUFBQyxNQUFBLENBQUEsQ0FBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUFDLEdBQUFsVSxHQUFBO0FBQ0EsWUFBQXFMLElBQUEsQ0FBQSxHQUVBOEksSUFBQSxDQUFBLEVBQUEsTUFBQXpmLEdBQUEsTUFBQTBjLEdBQUEsT0FBQXVCLEdBQUEsY0FBQXlCLEdBQUEsU0FBQTlDLFFBQUE7QUFDQSxjQUFBRCxJQUFBLEtBQUEsT0FBQSxTQUFBM2MsSUFDQWdkLElBQUEsS0FBQSxPQUFBLFNBQUFoZDtBQUNBLFFBQUEyVyxFQUFBLEtBQUE7QUFBQSxVQUNBLE1BQUEzVztBQUFBLFVBQ0EsTUFBQTBjO0FBQUEsVUFDQSxXQUNBQyxLQUFBLGdCQUFBQSxFQUFBc0IsUUFDQXlCLEtBQUEsUUFBQSxDQUFBQTtVQUVBLFNBQUEsTUFBQTlDLElBQ0FBLEVBQUFJLEdBQUFpQixDQUFBLElBQ0FqQixFQUFBaUIsQ0FBQTtBQUFBLFFBQ0EsQ0FBQTtBQUFBLE1BQ0EsR0FFQXhkLElBQUEsS0FBQSxPQUFBK2U7QUFDQSxVQUFBL2U7QUFDQSxtQkFBQSxDQUFBM0UsR0FBQTZqQixDQUFBLEtBQUEsT0FBQSxRQUFBclUsQ0FBQSxHQUFBO0FBQ0EsZ0JBQUFzVSxJQUFBLENBQUEsUUFBQSxNQUFBLEVBQUEsU0FBQTlqQixDQUFBLElBQUEsWUFBQUEsR0FDQTJILElBQUFoRCxFQUFBbWYsSUFDQTVmLElBQUE2ZixHQUFBL2pCLENBQUEsR0FDQTRnQixJQUFBM2EsRUFBQWpHLENBQUE7QUFDQSxjQUFBMkg7QUFDQSxnQkFBQWtjLE1BQUE7QUFDQSxjQUFBRixFQUFBLEVBQUEsTUFBQXpmLEdBQUEsTUFBQTBjLEdBQUE7QUFBQSxxQkFDQXZlLEVBQUF3aEIsQ0FBQSxHQUFBO0FBQ0Esb0JBQUEsRUFBQSxNQUFBRyxHQUFBLFFBQUF0YSxHQUFBLGNBQUFrYSxHQUFBLFNBQUE5QyxFQUFBLElBQUErQztBQUNBLGtCQUFBRztBQUNBLG9CQUFBaGpCLEVBQUEwSSxDQUFBLEtBQUExSSxFQUFBMkcsQ0FBQTtBQUVBLDZCQUFBeEgsS0FBQXVKO0FBQ0Esb0JBQUEvQixFQUFBLFNBQUF4SCxDQUFBLEtBQ0F3akIsRUFBQTtBQUFBLHNCQUNBLE1BQUF6ZjtBQUFBLHNCQUNBLE1BQUEsR0FBQTBjLEtBQUF6Z0I7QUFBQSxzQkFDQSxPQUFBLEVBQUEsQ0FBQTZqQixJQUFBN2pCLEVBQUE7QUFBQSxzQkFDQSxjQUFBeWpCO0FBQUEsc0JBQ0EsU0FBQTlDO0FBQUEsb0JBQ0EsQ0FBQTtBQUFBO0FBS0EsZ0JBQUE2QyxFQUFBLEVBQUEsTUFBQXpmLEdBQUEsTUFBQTBjLEdBQUEsY0FBQWdELEdBQUEsU0FBQTlDLEVBQUEsQ0FBQTtBQUFBLFlBRUE7QUFBQTtBQUFBLFFBRUE7QUFFQSxhQUFBakc7QUFBQSxJQUNBO0FBQUEsSUFFQSxlQUFBOztBQUNBLE9BQUFoUyxLQUFBckksSUFBQSxLQUFBLEtBQUEsbUJBQUEsUUFBQXFJLEVBQUEsS0FBQXJJLElBQ0EsS0FBQSxPQUFBLE1BQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUNBLENBQUE7QUFFQSxNQUFBcWlCLFdBQUFvQixHQUFBO0FBQUEsRUFDQSxJQUFBLE9BQUE7QUFDQSxXQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsSUFBQSxTQUFBO0FBQ0EsV0FBQTtBQUFBLE1BQ0EsVUFBQTtBQUFBLFFBQ0EsRUFBQSxLQUFBLFFBQUE7QUFBQSxNQUNBO0FBQUEsTUFDQSxPQUFBLE1BQUEsQ0FBQSxTQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQSxFQUFBLE1BQUEvZ0IsS0FBQTtBQUNBLFdBQUEsTUFBQWdoQixHQUFBaGhCLENBQUE7QUFBQSxFQUNBO0FBQ0E7QUFDQSxNQUFBNmYsV0FBQW9CLEdBQUE7QUFBQSxFQUNBLElBQUEsU0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLE9BQUE7QUFBQSxRQUNBLE1BQUE7QUFBQSxVQUNBLFNBQUE7QUFBQSxRQUNBO0FBQUEsUUFDQSxPQUFBO0FBQUEsVUFDQSxTQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLFdBQUE7QUFBQSxNQUNBLFVBQUEsQ0FBQTtBQUFBLFFBQ0EsS0FBQTtBQUFBLFFBQ0EsVUFBQSxDQUFBQyxPQUFBO0FBQUEsVUFDQSxNQUFBQSxFQUFBLGFBQUEsTUFBQTtBQUFBLFVBQ0EsT0FBQUEsRUFBQSxhQUFBLE9BQUE7QUFBQSxRQUNBO0FBQUEsTUFDQSxDQUFBO0FBQUEsTUFDQSxPQUFBLENBQUEzTSxNQUFBLENBQUEsS0FBQUEsRUFBQSxPQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDNWhCQSxJQUFJakYsS0FBUyxXQUFZO0FBQ3ZCLE1BQUlDLElBQUksTUFDSkMsSUFBR0QsRUFBSSxnQkFDUHpDLElBQUd5QyxFQUFJLE1BQU0sTUFBSUM7QUFFckIsU0FBTzFDLEVBQUcsT0FBTztBQUFBLElBQ2YsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsMkJBQTJCLENBQUN5QyxFQUFJO0FBQUEsTUFDaEMsNkJBQTZCQSxFQUFJO0FBQUEsSUFDbEM7QUFBQSxFQUNMLEdBQUssQ0FBQ3pDLEVBQUcsbUJBQW1CeUMsRUFBSSxHQUFHQSxFQUFJLEdBQUc7QUFBQSxJQUN0QyxLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsTUFDTCxlQUFlO0FBQUEsTUFDZixhQUFlQSxFQUFJO0FBQUEsTUFDbkIsbUJBQW1CO0FBQUEsTUFDbkIsU0FBV0EsRUFBSSxZQUFZQSxFQUFJLGlCQUFpQixDQUFFO0FBQUEsTUFDbEQsZ0JBQWdCQSxFQUFJO0FBQUEsTUFDcEIsWUFBWUEsRUFBSTtBQUFBLE1BQ2hCLGVBQWVBLEVBQUk7QUFBQSxNQUNuQixnQkFBZ0JBLEVBQUk7QUFBQSxNQUNwQixVQUFZQSxFQUFJO0FBQUEsTUFDaEIsVUFBWUEsRUFBSTtBQUFBLE1BQ2hCLFlBQWNBLEVBQUk7QUFBQSxNQUNsQixtQkFBbUIsQ0FBQ0EsRUFBSTtBQUFBLE1BQ3hCLG1CQUFtQixDQUFDLENBQUNBLEVBQUk7QUFBQSxNQUN6QixtQkFBbUIsQ0FBQ0EsRUFBSTtBQUFBLE1BQ3hCLG1CQUFtQixDQUFDQSxFQUFJO0FBQUEsTUFDeEIsU0FBV0EsRUFBSTtBQUFBLElBQ2hCO0FBQUEsSUFDRCxJQUFJO0FBQUEsTUFDRixNQUFRLFNBQVVTLEdBQVE7QUFDeEIsUUFBQVQsRUFBSSxXQUFXO0FBQUEsTUFDaEI7QUFBQSxNQUNELEtBQU9BLEVBQUk7QUFBQSxNQUNYLGlCQUFpQkEsRUFBSTtBQUFBLElBQ3RCO0FBQUEsSUFDRCxPQUFPO0FBQUEsTUFDTCxPQUFPQSxFQUFJO0FBQUEsTUFDWCxVQUFVLFNBQVV1SixHQUFLO0FBQ3ZCLFFBQUF2SixFQUFJLGtCQUFrQnVKO0FBQUEsTUFDdkI7QUFBQSxNQUNELFlBQVk7QUFBQSxJQUNiO0FBQUEsRUFDRixHQUFFLG1CQUFtQnZKLEVBQUksWUFBWSxFQUFLLEdBQUdBLEVBQUksU0FBUyxDQUFDLEdBQUdBLEVBQUksa0JBQWtCekMsRUFBRyxVQUFVO0FBQUEsSUFDaEcsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsTUFBUTtBQUFBLE1BQ1IsVUFBWXlDLEVBQUk7QUFBQSxJQUNqQjtBQUFBLElBQ0QsSUFBSTtBQUFBLE1BQ0YsT0FBU0EsRUFBSTtBQUFBLElBQ2Q7QUFBQSxFQUNGLENBQUEsSUFBSUEsRUFBSSxJQUFJLEdBQUcsQ0FBQztBQUNuQixHQUVJRSxLQUFrQixDQUFFO0FDK0t4QixNQUFBQyxLQUFBK0ksRUFBQSxTQUFBLGVBQUE7QUFBQSxFQUNBLFlBQUEsRUFBQSxnQkFBQTBJLEdBQUE7QUFBQSxFQUNBLFFBQUEsQ0FBQTlILEVBQUE7QUFBQSxFQUVBLE9BQUE7QUFDQSxXQUFBO0FBQUEsTUFDQSxpQkFBQTtBQUFBLE1BQ0EsVUFBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxpQkFBQTtBQUFBLE1BQ0EsTUFBQTtBQUNBLGVBQUEsS0FBQSxZQUNBLEtBQUEsaUJBQUEsQ0FBQSxHQUNBO0FBQUEsVUFHQSxDQUFBcGMsTUFBQSxLQUFBLGtCQUFBQSxDQUFBLEtBQUEsS0FBQSxhQUFBQSxDQUFBO0FBQUEsUUFDQSxFQUdBLE9BQUEsQ0FBQUEsTUFBQUEsQ0FBQSxJQUNBLEtBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxJQUFBMmMsR0FBQTtBQUdBLGFBQUEsZ0JBQUEsS0FBQSxZQUNBQSxLQUFBLENBQUEsR0FBQSxJQUFBLENBQUEzYyxNQUFBLEtBQUEsa0JBQUFBLENBQUEsQ0FBQSxJQUNBLEtBQUEsa0JBQUEyYyxDQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBQ0EsYUFBQSxLQUFBLG1CQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBM1UsRUFBQSxZQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxZQUFBQSxFQUFBLGNBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLFVBQUFBLEVBQUEsWUFBQTtBQUFBLE1BQ0EsTUFBQTtBQUFBLE1BQ0EsU0FBQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLElBRUEsVUFBQUEsRUFBQSxZQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsWUFBQSxFQUFBLGFBQUFtYyxHQUFBLFlBQUFDLEdBQUEsVUFBQUMsRUFBQSxJQUFBLEtBQUE7QUFDQSxhQUFBRixNQUNBQyxLQUFBQyxJQUFBLG1CQUFBLEtBQUEsVUFDQUQsSUFBQSxvQkFBQSxLQUFBLFVBQ0E7QUFBQSxJQUVBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUNBLElBQUEsS0FBQSxhQUdBLEtBQUEsTUFBQTtBQUFBLEVBRUE7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUVBLGVBQUE7QUFFQSxhQUFBO0FBQUEsUUFDQSxPQUFBLEtBQUE7QUFBQSxRQUNBLE1BQUEsS0FBQTtBQUFBLFFBQ0EsT0FBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUFFLEdBQUE7QUFDQSxVQUFBLEtBQUEsVUFBQTtBQUNBLGNBQUEsRUFBQSxhQUFBcEgsR0FBQSxhQUFBRCxFQUFBLElBQUEsTUFDQU4sSUFBQU8sS0FBQUQsSUFDQTtBQUFBLFVBQ0EsQ0FBQUMsSUFBQW9IO0FBQUEsVUFHQSxDQUFBckgsSUFBQXFIO0FBQUEsUUFDQSxJQUNBQTtBQUNBLG9CQUFBLFFBQUEsS0FBQTNILENBQUEsR0FDQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsZUFBQTtBQUNBLFdBQUEsTUFBQSxRQUFBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBMkgsR0FBQTtBQUNBLFlBQUEzSCxJQUFBLEtBQUEsYUFBQTJILENBQUE7QUFDQSxNQUFBM0gsS0FDQSxLQUFBLE1BQUEsS0FBQSxLQUFBLGtCQUFBQSxDQUFBLENBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxNQUFBLGVBQUF0WSxHQUFBO0FBQ0EsTUFBQSxLQUFBLGlCQUNBQSxLQUdBLEtBQUEsa0JBQUEsQ0FBQSxHQUNBLEtBQUEsa0JBQUEsTUFBQSxLQUFBO0FBQUEsUUFDQSxNQUFBLEtBQUEsYUFBQSxJQUFBbEUsRUFBQSxNQUFBLEVBQUEsT0FBQWtFLEVBQUEsQ0FBQSxDQUFBO0FBQUEsTUFDQSxLQUdBLEtBQUEsa0JBQUE7QUFBQSxJQUdBO0FBQUEsRUFDQTtBQUNBLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0tDeFdla2dCLEtBQUE7QUFBQSxFQUNiLFVBQVU7QUFBQSxJQUNSLFlBQVk7QUFBQSxNQUNWLE1BQU07QUFDSixlQUFPLEtBQUssVUFBVSxPQUFPLEtBQUssUUFBUTtBQUFBLE1BQzNDO0FBQUEsTUFFRCxJQUFJdmtCLEdBQU87QUFDVCxhQUFLLFFBQVFBLE1BQVUsS0FDbkIsS0FBSyxZQUFZLFNBQVNBLEdBQU8sRUFBRSxJQUFJLFdBQVdBLENBQUssSUFDdkQ7QUFBQSxNQUNMO0FBQUEsSUFDRjtBQUFBLElBR0QsWUFBWTtBQUNWLGFBQU87QUFBQSxJQUNSO0FBQUEsSUFFRCxZQUFZO0FBQ1YsYUFBTyxLQUFLLFFBQVEsUUFBUSxDQUFDLEtBQUssWUFBWSxRQUFRLEtBQUs7QUFBQSxJQUM1RDtBQUFBLElBRUQsVUFBVWdJLEVBQWtCLFlBQVk7QUFBQSxNQUN0QyxNQUFNO0FBQUEsSUFDWixDQUFLO0FBQUEsSUFFRCxNQUFNQSxFQUFrQixRQUFRO0FBQUEsTUFDOUIsTUFBTTtBQUFBLE1BQ04sSUFBSXdjLEdBQU07QUFFUixlQUFPLEtBQUssYUFBYUEsS0FBUSxPQUFPLEtBQUssS0FBS0EsQ0FBSSxJQUFJQTtBQUFBLE1BQzNEO0FBQUEsSUFDUCxDQUFLO0FBQUEsSUFFRCxLQUFLeGMsRUFBa0IsT0FBTztBQUFBLE1BQzVCLE1BQU07QUFBQSxNQUNOLElBQUlqQixHQUFLOztBQUNQLGVBQUFBLElBQU1BLE1BQVEsVUFDVjFHLElBQUEsS0FBSyxlQUFlLFNBQVMsRUFBRSxNQUFNLE1BQUssQ0FBRSxNQUE1QyxnQkFBQUEsRUFBZ0QsS0FDaEQwRyxHQUNHLEtBQUssYUFBYUEsS0FBTyxPQUFPLEtBQUssTUFBTUEsQ0FBRyxJQUFJQTtBQUFBLE1BQzFEO0FBQUEsSUFDUCxDQUFLO0FBQUEsSUFFRCxLQUFLaUIsRUFBa0IsT0FBTztBQUFBLE1BQzVCLE1BQU07QUFBQSxNQUNOLElBQUlsQixHQUFLOztBQUNQLGVBQUFBLElBQU1BLE1BQVEsVUFDVnpHLElBQUEsS0FBSyxlQUFlLFNBQVMsRUFBRSxNQUFNLE1BQUssQ0FBRSxNQUE1QyxnQkFBQUEsRUFBZ0QsS0FDaER5RyxHQUNHLEtBQUssYUFBYUEsS0FBTyxPQUFPLEtBQUssS0FBS0EsQ0FBRyxJQUFJQTtBQUFBLE1BQ3pEO0FBQUEsSUFDUCxDQUFLO0FBQUEsSUFFRCxPQUFPa0IsRUFBa0IsU0FBUztBQUFBLE1BQ2hDLE1BQU07QUFBQSxNQUNOLE1BQU07QUFHSixjQUFNLEVBQUUsS0FBQWpCLEdBQUssS0FBQUQsRUFBRyxJQUFLO0FBQ3JCLGVBQU9DLEtBQU8sUUFBUUQsS0FBTyxPQUFPLENBQUNDLEdBQUtELENBQUcsSUFBSTtBQUFBLE1BQ2xEO0FBQUEsTUFFRCxJQUFJRyxHQUFPO0FBR1QsUUFBSXBHLEVBQVFvRyxDQUFLLE1BQ2YsQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUlBO0FBQUEsTUFFMUI7QUFBQSxJQUNQLENBQUs7QUFBQSxFQUNGO0FBQUEsRUFFRCxTQUFTO0FBQUEsSUFDUCxpQkFBaUI7QUFDZixZQUFNUyxJQUFjLENBQUUsR0FDaEIsRUFBRSxPQUFBVCxHQUFPLEtBQUFGLEdBQUssS0FBQUQsR0FBSyxVQUFBVCxHQUFVLE1BQUFtZSxFQUFJLElBQUs7QUFXNUMsVUFWSXZkLElBQ0ZTLEVBQVksUUFBUVQsS0FFaEJGLEtBQU8sU0FDVFcsRUFBWSxNQUFNWCxJQUVoQkQsS0FBTyxTQUNUWSxFQUFZLE1BQU1aLEtBR2xCVCxLQUFZO0FBQ2QsUUFBQXFCLEVBQVksV0FBV3JCO0FBQUEsZUFDZG1lLEdBQU07QUFDZixjQUFNbmUsS0FBWSxHQUFHbWUsSUFBTyxNQUFNLEdBQUcsRUFBRSxNQUFNLElBQUk7QUFDakQsUUFBSW5lLElBQVcsSUFDYnFCLEVBQVksV0FBV3JCLElBRXZCcUIsRUFBWSxVQUFVO0FBQUEsTUFFekI7QUFDRCxhQUFJLEtBQUssY0FDUEEsRUFBWSxVQUFVLEtBRWpCQTtBQUFBLElBQ1I7QUFBQSxFQUNGO0FBQ0g7QUM1R0EsSUFBSTJLLEtBQVMsV0FBWTtBQUN2QixNQUFJQyxJQUFJLE1BQ0pDLElBQUdELEVBQUksZ0JBQ1B6QyxJQUFHeUMsRUFBSSxNQUFNLE1BQUlDO0FBRXJCLFNBQU8xQyxFQUFHLGVBQWV5QyxFQUFJLEdBQUdBLEVBQUksR0FBRztBQUFBLElBQ3JDLEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxNQUNMLElBQU1BLEVBQUk7QUFBQSxNQUNWLE1BQVE7QUFBQSxNQUNSLEtBQU9BLEVBQUk7QUFBQSxNQUNYLEtBQU9BLEVBQUk7QUFBQSxNQUNYLE1BQVFBLEVBQUk7QUFBQSxJQUNiO0FBQUEsSUFDRCxPQUFPO0FBQUEsTUFDTCxPQUFPQSxFQUFJO0FBQUEsTUFDWCxVQUFVLFNBQVV1SixHQUFLO0FBQ3ZCLFFBQUF2SixFQUFJLGFBQWF1SjtBQUFBLE1BQ2xCO0FBQUEsTUFDRCxZQUFZO0FBQUEsSUFDYjtBQUFBLEVBQ0wsR0FBSyxlQUFldkosRUFBSSxZQUFZLEVBQUssR0FBR0EsRUFBSSxTQUFTLENBQUM7QUFDMUQsR0FFSUUsS0FBa0IsQ0FBRTtBQ0d4QixNQUFBQyxLQUFBK0ksRUFBQTtBQUFBLEVBQUE7QUFBQSxJQUNBO0FBQUEsSUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBO0FBQUEsSUFDQSxZQUFBLEVBQUEsWUFBQWlKLEdBQUE7QUFBQSxJQUNBLFFBQUEsQ0FBQUYsRUFBQTtBQUFBLElBQ0EsYUFBQTtBQUFBLElBQ0EsV0FBQTtBQUFBLElBRUEsVUFBQTtBQUFBLE1BQ0EsWUFBQTtBQUNBLGVBQUEsS0FBQSxTQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzNDQSxJQUFJbFMsS0FBUyxXQUFZO0FBQ3ZCLE1BQUlDLElBQUksTUFDSkMsSUFBR0QsRUFBSSxnQkFDUHpDLElBQUd5QyxFQUFJLE1BQU0sTUFBSUM7QUFFckIsU0FBT0QsRUFBSSxVQUFVekMsRUFBRyxPQUFPO0FBQUEsSUFDN0IsYUFBYTtBQUFBLElBQ2IsT0FBT3lDLEVBQUksT0FBTztBQUFBLElBQ2xCLE9BQU9BLEVBQUksT0FBTztBQUFBLElBQ2xCLE9BQU87QUFBQSxNQUNMLElBQU1BLEVBQUk7QUFBQSxJQUNYO0FBQUEsRUFDRixHQUFFLENBQUNBLEVBQUksYUFBYXpDLEVBQUcsT0FBTztBQUFBLElBQzdCLGFBQWE7QUFBQSxFQUNkLEdBQUUsQ0FBQ3lDLEVBQUksWUFBWXpDLEVBQUcsdUJBQXVCO0FBQUEsSUFDNUMsT0FBTztBQUFBLE1BQ0wsUUFBVXlDLEVBQUksa0JBQWtCQSxFQUFJLFFBQVFBLEVBQUksWUFBWUEsRUFBSSxPQUFPO0FBQUEsTUFDdkUsVUFBWUEsRUFBSTtBQUFBLE1BQ2hCLE1BQVFBLEVBQUk7QUFBQSxNQUNaLE1BQVFBLEVBQUk7QUFBQSxNQUNaLE9BQVNBLEVBQUk7QUFBQSxNQUNiLFVBQVlBLEVBQUksWUFBWUEsRUFBSTtBQUFBLE1BQ2hDLFdBQWFBLEVBQUk7QUFBQSxNQUNqQixhQUFlQSxFQUFJO0FBQUEsSUFDcEI7QUFBQSxFQUNGLENBQUEsSUFBSUEsRUFBSSxZQUFZekMsRUFBR3lDLEVBQUksV0FBVztBQUFBLElBQ3JDLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxNQUNMLFVBQVlBLEVBQUk7QUFBQSxNQUNoQixNQUFRQSxFQUFJO0FBQUEsTUFDWixRQUFVO0FBQUEsSUFDWDtBQUFBLEVBQ0YsQ0FBQSxJQUFJQSxFQUFJLFNBQVN6QyxFQUFHLFFBQVE7QUFBQSxJQUMzQixVQUFVO0FBQUEsTUFDUixXQUFheUMsRUFBSSxHQUFHQSxFQUFJLE9BQU9BLEVBQUksV0FBVSxDQUFFLENBQUM7QUFBQSxJQUNqRDtBQUFBLEVBQ0wsQ0FBRyxJQUFJekMsRUFBRyxRQUFRO0FBQUEsSUFDZCxVQUFVO0FBQUEsTUFDUixXQUFheUMsRUFBSSxHQUFHQSxFQUFJLGFBQWFBLEVBQUksUUFBUUEsRUFBSSxVQUFVLENBQUM7QUFBQSxJQUNqRTtBQUFBLEVBQ0wsQ0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJQSxFQUFJLEdBQUksR0FBRXpDLEVBQUcscUJBQXFCO0FBQUEsSUFDMUMsT0FBTztBQUFBLE1BQ0wsV0FBYXlDLEVBQUk7QUFBQSxNQUNqQixXQUFhQSxFQUFJLGNBQWNBLEVBQUk7QUFBQSxNQUNuQyxVQUFZQSxFQUFJLGNBQWNBLEVBQUk7QUFBQSxNQUNsQyxZQUFjQSxFQUFJO0FBQUEsTUFDbEIsVUFBWUEsRUFBSTtBQUFBLE1BQ2hCLFNBQVdBLEVBQUk7QUFBQSxNQUNmLFFBQVVBLEVBQUk7QUFBQSxNQUNkLFVBQVlBLEVBQUk7QUFBQSxNQUNoQixNQUFRQSxFQUFJO0FBQUEsTUFDWixNQUFRQSxFQUFJO0FBQUEsTUFDWixNQUFRQSxFQUFJO0FBQUEsTUFDWixPQUFTQSxFQUFJO0FBQUEsSUFDZDtBQUFBLElBQ0QsSUFBSTtBQUFBLE1BQ0YsUUFBVSxTQUFVUyxHQUFRO0FBQzFCLGVBQU9ULEVBQUksV0FBV0EsRUFBSSxVQUFVO0FBQUEsTUFDckM7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFBLENBQUMsR0FBRyxDQUFDLElBQUlBLEVBQUksR0FBRTtBQUNsQixHQUVJRSxLQUFrQixDQUFFO0FDWXhCLE1BQUFDLEtBQUErSSxFQUFBLFNBQUEsVUFBQTtBQUFBLEVBQ0EsUUFBQSxDQUFBOEMsRUFBQTtBQUFBLEVBRUEsY0FBQXZiLEdBQUE7QUFFQSxXQUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLGFBQUE7QUFDQSxhQUFBLElBQUE1QyxFQUFBLE1BQUEsRUFBQSxNQUFBLEtBQUEsWUFBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQ0EsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7S0NyRkFzUyxLQUFBK0ksRUFBQSxTQUFBLFNBQUE7QUFBQSxFQUNBLGNBQUEsTUFBQTtBQUFBO0FBQUEsRUFDQSxjQUFBO0FBQUEsRUFDQSxlQUFBO0FBQUEsRUFDQSxhQUFBO0FBQUE7QUFLQSxVQUFBLEVBQUEsTUFBQXpYLE1BQUFtTCxFQUFBLElBQUEvTDtBQUNBLFdBQUErTDtBQUFBLEVBQ0E7QUFDQSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2ZBLElBQUltRCxLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQekMsSUFBR3lDLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPMUMsRUFBRyxZQUFZeUMsRUFBSSxHQUFHQSxFQUFJLEdBQUc7QUFBQSxJQUNsQyxLQUFLO0FBQUEsSUFDTCxhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsTUFDTCxJQUFNQSxFQUFJO0FBQUEsTUFDVixLQUFPQSxFQUFJO0FBQUEsSUFDWjtBQUFBLElBQ0QsVUFBVTtBQUFBLE1BQ1IsT0FBU0EsRUFBSTtBQUFBLElBQ2Q7QUFBQSxFQUNMLEdBQUssWUFBWUEsRUFBSSxZQUFZLEVBQUssR0FBR0EsRUFBSSxTQUFTLENBQUM7QUFDdkQsR0FFSUUsS0FBa0IsQ0FBRTtBQ0Z4QixNQUFBQyxLQUFBK0ksRUFBQSxTQUFBLFlBQUE7QUFBQSxFQUNBLFFBQUEsQ0FBQStJLEVBQUE7QUFBQSxFQUNBLFVBQUE7QUFBQSxJQUNBLGdCQUFBO0FBQ0EsVUFBQSxFQUFBLE9BQUF2a0IsR0FBQSxPQUFBaUgsR0FBQSxNQUFBdWQsRUFBQSxJQUFBO0FBQ0EsYUFBQXhrQixNQUFBLFFBQ0FpSCxNQUNBakgsS0FBQWlILEVBQUEsS0FFQXVkLE1BQ0F4a0IsSUFBQSxLQUFBLE1BQUFBLElBQUF3a0IsQ0FBQSxJQUFBQSxNQUdBeGtCLElBQUEsSUFFQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsWUFBQSxFQUFBLE9BQUFpSCxFQUFBLElBQUE7QUFDQSxVQUFBQTtBQUNBLGVBQUFBLEVBQUEsS0FBQUEsRUFBQTtBQUFBLElBRUE7QUFBQSxFQUNBO0FBQ0EsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDekNBLElBQUlvTCxLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQekMsSUFBR3lDLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPMUMsRUFBRyxNQUFNO0FBQUEsSUFDZCxhQUFhO0FBQUEsSUFDYixPQUFPLGVBQWV5QyxFQUFJLE9BQU8sVUFBVTtBQUFBLElBQzNDLE9BQU87QUFBQSxNQUNMLElBQU1BLEVBQUk7QUFBQSxJQUNYO0FBQUEsRUFDRixHQUFFQSxFQUFJLEdBQUdBLEVBQUksU0FBUyxTQUFVcUssR0FBUTtBQUN2QyxXQUFPOU0sRUFBRyxNQUFNLENBQUNBLEVBQUcsU0FBUyxDQUFDQSxFQUFHLFNBQVN5QyxFQUFJLEdBQUdBLEVBQUksR0FBRztBQUFBLE1BQ3RELFlBQVksQ0FBQztBQUFBLFFBQ1gsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLFFBQ1QsT0FBT0EsRUFBSTtBQUFBLFFBQ1gsWUFBWTtBQUFBLE1BQ3BCLENBQU87QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLFVBQVU7QUFBQSxNQUNWLGFBQWE7QUFBQSxNQUNiLE9BQU87QUFBQSxRQUNMLE1BQVE7QUFBQSxNQUNUO0FBQUEsTUFDRCxVQUFVO0FBQUEsUUFDUixPQUFTQSxFQUFJLGtCQUFrQnFLLENBQU07QUFBQSxRQUNyQyxTQUFXckssRUFBSSxHQUFHQSxFQUFJLGVBQWVBLEVBQUksa0JBQWtCcUssQ0FBTSxDQUFDO0FBQUEsTUFDbkU7QUFBQSxNQUNELElBQUk7QUFBQSxRQUNGLFFBQVUsU0FBVTVKLEdBQVE7QUFDMUIsVUFBQVQsRUFBSSxnQkFBZ0JBLEVBQUksa0JBQWtCcUssQ0FBTTtBQUFBLFFBQ2pEO0FBQUEsTUFDRjtBQUFBLElBQ1AsR0FBTyxTQUFTckssRUFBSSxZQUFZLEVBQUssR0FBR0EsRUFBSSxTQUFTLENBQUMsR0FBR0EsRUFBSSxHQUFHQSxFQUFJLEdBQUdBLEVBQUksa0JBQWtCcUssQ0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUFBLEVBQ3pHLENBQUcsR0FBRyxDQUFDO0FBQ1AsR0FFSW5LLEtBQWtCLENBQUU7QUNQeEIsTUFBQUMsS0FBQStJLEVBQUEsU0FBQSxTQUFBO0FBQUEsRUFDQSxRQUFBLENBQUFZLEVBQUE7QUFBQSxFQUVBLGFBQUE7QUFDQSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNuQ0EsSUFBSS9KLEtBQVMsV0FBWTtBQUN2QixNQUFJQyxJQUFJLE1BQ0pDLElBQUdELEVBQUksZ0JBQ1B6QyxJQUFHeUMsRUFBSSxNQUFNLE1BQUlDO0FBRXJCLFNBQU8xQyxFQUFHLE9BQU87QUFBQSxJQUNmLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxNQUNMLHlCQUF5QixDQUFDLENBQUN5QyxFQUFJLE9BQU87QUFBQSxJQUN2QztBQUFBLEVBQ0wsR0FBSyxDQUFDekMsRUFBRyxhQUFhO0FBQUEsSUFDbEIsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsUUFBVXlDLEVBQUksa0JBQWtCQSxFQUFJLFFBQVFBLEVBQUksTUFBTUEsRUFBSSxPQUFPO0FBQUEsTUFDakUsVUFBWUEsRUFBSTtBQUFBLE1BQ2hCLE1BQVFBLEVBQUk7QUFBQSxNQUNaLE1BQVFBLEVBQUk7QUFBQSxNQUNaLE9BQVNBLEVBQUk7QUFBQSxNQUNiLFVBQVlBLEVBQUk7QUFBQSxJQUNqQjtBQUFBLEVBQ0wsQ0FBRyxDQUFDLEdBQUcsQ0FBQztBQUNSLEdBRUlFLEtBQWtCLENBQUU7QUNLeEIsTUFBQUMsS0FBQStJLEVBQUEsU0FBQSxXQUFBO0FBQUEsRUFDQSxjQUFBLE1BQUE7QUFBQTtBQUFBLEVBQ0Esb0JBQUEsQ0FBQXJZLE1BQUEsQ0FBQUEsRUFBQSxVQUFBLEVBQUEsYUFBQUE7QUFBQSxFQUNBLGVBQUE7QUFBQSxFQUNBLGVBQUE7QUFBQSxFQUNBLGNBQUE7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLE9BQUE7QUFDQSxhQUFBLEtBQUEsU0FBQSxLQUFBLFFBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxTQUFBO0FBQUEsSUFDQSxtQkFBQXVKO0FBQUEsRUFDQTtBQUFBLEVBRUEsTUFBQSxjQUFBekIsR0FBQTlILEdBQUFZLEdBQUFtSCxHQUFBTSxHQUFBO0FBRUEsVUFBQUQsR0FBQU4sR0FBQTlILEdBQUErSCxHQUFBTSxDQUFBO0FBQUEsRUFDQTtBQUNBLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2pEQSxJQUFJNkcsS0FBUyxXQUFZO0FBQ3ZCLE1BQUlDLElBQUksTUFDSkMsSUFBR0QsRUFBSSxnQkFDUHpDLElBQUd5QyxFQUFJLE1BQU0sTUFBSUM7QUFFckIsU0FBTzFDLEVBQUcsT0FBTztBQUFBLElBQ2YsYUFBYTtBQUFBLEVBQ2pCLEdBQUssQ0FBQ0EsRUFBRyxVQUFVeUMsRUFBSSxHQUFHQSxFQUFJLEdBQUc7QUFBQSxJQUM3QixZQUFZLENBQUM7QUFBQSxNQUNYLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE9BQU9BLEVBQUk7QUFBQSxNQUNYLFlBQVk7QUFBQSxJQUNsQixDQUFLO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsTUFDTCxJQUFNQSxFQUFJO0FBQUEsSUFDWDtBQUFBLElBQ0QsSUFBSTtBQUFBLE1BQ0YsV0FBYSxTQUFVUyxHQUFRO0FBQzdCLFFBQUFULEVBQUksV0FBVztBQUFBLE1BQ2hCO0FBQUEsTUFDRCxPQUFTLFNBQVVTLEdBQVE7QUFDekIsUUFBQVQsRUFBSSxXQUFXO0FBQUEsTUFDaEI7QUFBQSxNQUNELFFBQVUsU0FBVVMsR0FBUTtBQUMxQixZQUFJMlIsSUFBZ0IsTUFBTSxVQUFVLE9BQU8sS0FBSzNSLEVBQU8sT0FBTyxTQUFTLFNBQVU0UixHQUFHO0FBQ2xGLGlCQUFPQSxFQUFFO0FBQUEsUUFDbkIsQ0FBUyxFQUFFLElBQUksU0FBVUEsR0FBRztBQUNsQixjQUFJQyxJQUFNLFlBQVlELElBQUlBLEVBQUUsU0FBU0EsRUFBRTtBQUN2QyxpQkFBT0M7QUFBQSxRQUNqQixDQUFTO0FBQ0QsUUFBQXRTLEVBQUksZ0JBQWdCUyxFQUFPLE9BQU8sV0FBVzJSLElBQWdCQSxFQUFjO0FBQUEsTUFDNUU7QUFBQSxJQUNGO0FBQUEsRUFDTCxHQUFLLFVBQVVwUyxFQUFJLFlBQVksRUFBSyxHQUFHQSxFQUFJLFNBQVMsR0FBRyxDQUFDQSxFQUFJLFdBQVcsQ0FBQ0EsRUFBSSxHQUFHQSxFQUFJLFNBQVMsU0FBVXFLLEdBQVE7QUFDMUcsV0FBTyxDQUFDckssRUFBSSxVQUFVekMsRUFBRyxZQUFZO0FBQUEsTUFDbkMsT0FBTztBQUFBLFFBQ0wsT0FBUzhNLEVBQU9ySyxFQUFJO0FBQUEsTUFDckI7QUFBQSxJQUNQLEdBQU9BLEVBQUksR0FBR3FLLEVBQU9ySyxFQUFJLGlCQUFpQixTQUFVdVMsR0FBSztBQUNuRCxhQUFPaFYsRUFBRyxVQUFVO0FBQUEsUUFDbEIsVUFBVTtBQUFBLFVBQ1IsT0FBU3lDLEVBQUksa0JBQWtCdVMsQ0FBRztBQUFBLFFBQ25DO0FBQUEsTUFDRixHQUFFLENBQUN2UyxFQUFJLEdBQUdBLEVBQUksR0FBR0EsRUFBSSxrQkFBa0J1UyxDQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFBQSxJQUNoRCxDQUFBLEdBQUcsQ0FBQyxJQUFJaFYsRUFBRyxVQUFVO0FBQUEsTUFDcEIsVUFBVTtBQUFBLFFBQ1IsT0FBU3lDLEVBQUksa0JBQWtCcUssQ0FBTTtBQUFBLE1BQ3RDO0FBQUEsSUFDRixHQUFFLENBQUNySyxFQUFJLEdBQUdBLEVBQUksR0FBR0EsRUFBSSxrQkFBa0JxSyxDQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUFBLEVBQ3BELENBQUEsQ0FBQyxJQUFJckssRUFBSSxpQkFBaUIsQ0FBQ3pDLEVBQUcsVUFBVTtBQUFBLElBQ3ZDLFVBQVU7QUFBQSxNQUNSLE9BQVN5QyxFQUFJO0FBQUEsSUFDZDtBQUFBLEVBQ0wsR0FBSyxDQUFDQSxFQUFJLEdBQUdBLEVBQUksR0FBR0EsRUFBSSxrQkFBa0JBLEVBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSUEsRUFBSSxHQUFFLENBQUUsR0FBRyxDQUFDLEdBQUdBLEVBQUksa0JBQWtCekMsRUFBRyxVQUFVO0FBQUEsSUFDbkgsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsVUFBWXlDLEVBQUk7QUFBQSxJQUNqQjtBQUFBLElBQ0QsSUFBSTtBQUFBLE1BQ0YsT0FBU0EsRUFBSTtBQUFBLElBQ2Q7QUFBQSxFQUNGLENBQUEsSUFBSUEsRUFBSSxHQUFJLENBQUEsQ0FBQztBQUNoQixHQUVJRSxLQUFrQixDQUFFO0FDUXhCLE1BQUFDLEtBQUErSSxFQUFBLFNBQUEsVUFBQTtBQUFBLEVBQ0EsUUFBQSxDQUFBWSxFQUFBO0FBQUEsRUFFQSxhQUFBO0FBQUEsRUFFQSxPQUFBO0FBQ0EsV0FBQTtBQUFBLE1BR0EsVUFBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQ0EsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdEZBLElBQUkvSixLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQekMsSUFBR3lDLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPMUMsRUFBRyxPQUFPO0FBQUEsSUFDZixhQUFhO0FBQUEsRUFDakIsR0FBSyxDQUFDQSxFQUFHLFNBQVN5QyxFQUFJLEdBQUdBLEVBQUksR0FBRztBQUFBLElBQzVCLFlBQVksQ0FBQztBQUFBLE1BQ1gsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsT0FBT0EsRUFBSTtBQUFBLE1BQ1gsWUFBWTtBQUFBLElBQ2xCLENBQUs7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxNQUNMLElBQU1BLEVBQUk7QUFBQSxNQUNWLE1BQVE7QUFBQSxNQUNSLEtBQU9BLEVBQUk7QUFBQSxNQUNYLEtBQU9BLEVBQUk7QUFBQSxNQUNYLE1BQVFBLEVBQUk7QUFBQSxJQUNiO0FBQUEsSUFDRCxVQUFVO0FBQUEsTUFDUixPQUFTQSxFQUFJO0FBQUEsSUFDZDtBQUFBLElBQ0QsSUFBSTtBQUFBLE1BQ0YsS0FBTyxTQUFVUyxHQUFRO0FBQ3ZCLFFBQUFULEVBQUksYUFBYVMsRUFBTyxPQUFPO0FBQUEsTUFDaEM7QUFBQSxJQUNGO0FBQUEsRUFDTCxHQUFLLFNBQVNULEVBQUksWUFBWSxFQUFLLEdBQUdBLEVBQUksU0FBUyxDQUFDLEdBQUdBLEVBQUksUUFBUXpDLEVBQUcsZUFBZXlDLEVBQUksR0FBR0EsRUFBSSxHQUFHO0FBQUEsSUFDL0YsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsTUFBUTtBQUFBLE1BQ1IsS0FBT0EsRUFBSTtBQUFBLE1BQ1gsS0FBT0EsRUFBSTtBQUFBLE1BQ1gsTUFBUUEsRUFBSTtBQUFBLElBQ2I7QUFBQSxJQUNELE9BQU87QUFBQSxNQUNMLE9BQU9BLEVBQUk7QUFBQSxNQUNYLFVBQVUsU0FBVXVKLEdBQUs7QUFDdkIsUUFBQXZKLEVBQUksYUFBYXVKO0FBQUEsTUFDbEI7QUFBQSxNQUNELFlBQVk7QUFBQSxJQUNiO0FBQUEsRUFDRixHQUFFLGVBQWV2SixFQUFJLFlBQVksRUFBSyxHQUFHQSxFQUFJLFNBQVMsQ0FBQyxJQUFJQSxFQUFJLElBQUksR0FBRyxDQUFDO0FBQzFFLEdBRUlFLEtBQWtCLENBQUU7QUNIeEIsTUFBQUMsS0FBQStJLEVBQUEsU0FBQSxVQUFBO0FBQUEsRUFDQSxZQUFBLEVBQUEsWUFBQWlKLEdBQUE7QUFBQSxFQUNBLFFBQUEsQ0FBQUYsRUFBQTtBQUFBLEVBQ0EsYUFBQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBRUEsT0FBQXZjLEVBQUEsU0FBQTtBQUFBLE1BQ0EsTUFBQTtBQUFBLE1BQ0EsU0FBQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLEVBQ0E7QUFDQSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxREEsSUFBSXFLLEtBQVMsV0FBWTtBQUN2QixNQUFJQyxJQUFJLE1BQ0pDLElBQUdELEVBQUksZ0JBQ1B6QyxJQUFHeUMsRUFBSSxNQUFNLE1BQUlDO0FBRXJCLFNBQU8xQyxFQUFHLGlCQUFpQnlDLEVBQUksR0FBR0EsRUFBSSxHQUFHO0FBQUEsSUFDdkMsS0FBSztBQUFBLElBQ0wsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsSUFBTUEsRUFBSTtBQUFBLE1BQ1YsTUFBUTtBQUFBLE1BQ1IsUUFBVUEsRUFBSTtBQUFBLElBQ2Y7QUFBQSxJQUNELE9BQU87QUFBQSxNQUNMLE9BQU9BLEVBQUk7QUFBQSxNQUNYLFVBQVUsU0FBVXVKLEdBQUs7QUFDdkIsUUFBQXZKLEVBQUksUUFBUXVKO0FBQUEsTUFDYjtBQUFBLE1BQ0QsWUFBWTtBQUFBLElBQ2I7QUFBQSxFQUNMLEdBQUssaUJBQWlCdkosRUFBSSxZQUFZLEVBQUssR0FBR0EsRUFBSSxTQUFTLENBQUM7QUFDNUQsR0FFSUUsS0FBa0IsQ0FBRTtBQ0F4QixNQUFBQyxLQUFBK0ksRUFBQSxTQUFBLFVBQUE7QUFBQSxFQUNBLGNBQUE7QUFBQSxFQUNBLGNBQUE7QUFBQSxFQUVBLFlBQUE7QUFBQSxJQUNBLGNBQUFzSjtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFNBQUE7QUFDQSxhQUFBLEtBQUEsT0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQ0EsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcENBLElBQUl6UyxLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQekMsSUFBR3lDLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPMUMsRUFBRyxlQUFleUMsRUFBSSxHQUFHQSxFQUFJLEdBQUc7QUFBQSxJQUNyQyxLQUFLO0FBQUEsSUFDTCxhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsTUFDTCxJQUFNQSxFQUFJO0FBQUEsTUFDVixNQUFRQSxFQUFJO0FBQUEsSUFDYjtBQUFBLElBQ0QsT0FBTztBQUFBLE1BQ0wsT0FBT0EsRUFBSTtBQUFBLE1BQ1gsVUFBVSxTQUFVdUosR0FBSztBQUN2QixRQUFBdkosRUFBSSxhQUFhdUo7QUFBQSxNQUNsQjtBQUFBLE1BQ0QsWUFBWTtBQUFBLElBQ2I7QUFBQSxFQUNMLEdBQUssZUFBZXZKLEVBQUksWUFBWSxFQUFLLEdBQUdBLEVBQUksU0FBUyxDQUFDO0FBQzFELEdBRUlFLEtBQWtCLENBQUU7QUNQeEIsTUFBQXVTLEtBQUEsb0JBRUF0UyxLQUFBK0ksRUFBQTtBQUFBLEVBQUE7QUFBQSxJQUNBO0FBQUEsSUFBQTtBQUFBLElBQUE7QUFBQSxJQUFBO0FBQUEsSUFBQTtBQUFBLElBQUE7QUFBQSxJQUFBO0FBQUEsSUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBO0FBQUEsSUFDQSxZQUFBLEVBQUEsWUFBQWlKLEdBQUE7QUFBQSxJQUNBLGFBQUE7QUFBQSxJQUNBLFdBQUE7QUFBQSxJQUNBLG9CQUFBLENBQUF0aEIsTUFBQUEsRUFBQSxTQUFBO0FBQUEsSUFFQSxVQUFBO0FBQUEsTUFDQSxZQUFBO0FBQ0EsZUFBQTtBQUFBLFVBQ0EsWUFBQTtBQUFBLFVBQ0EsVUFBQTtBQUFBLFVBQ0EsUUFBQTtBQUFBLFFBQ0EsRUFBQSxLQUFBLFNBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLFlBQUE7QUFBQSxRQUNBLE1BQUE7QUFDQSxpQkFDQSxLQUFBLFNBQUEsY0FDQSxLQUFBLFVBQUEsVUFDQSxDQUFBLEtBQUEsVUFFQTRoQixLQUNBLEtBQUE7QUFBQSxRQUNBO0FBQUEsUUFFQSxJQUFBL2tCLEdBQUE7QUFDQSxlQUFBLFFBQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBO0FBQUEsTUFDQSxpQkFBQTtBQUNBLGNBQUF1SCxJQUFBO0FBQUEsVUFDQSxPQUFBO0FBQUEsVUFDQSxLQUFBO0FBQUEsVUFDQSxVQUFBO0FBQUEsVUFDQSxRQUFBO0FBQUEsVUFDQSxVQUFBO0FBQUEsVUFDQSxZQUFBO0FBQUEsUUFDQSxFQUFBLEtBQUE7QUFDQSxlQUFBQSxJQUFBLEVBQUEsQ0FBQUEsSUFBQSxHQUFBLElBQUEsQ0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsRUEsSUFBSThLLEtBQVMsV0FBWTtBQUN2QixNQUFJQyxJQUFJLE1BQ0pDLElBQUdELEVBQUksZ0JBQ1B6QyxJQUFHeUMsRUFBSSxNQUFNLE1BQUlDO0FBRXJCLFNBQU8xQyxFQUFHLFlBQVl5QyxFQUFJLEdBQUdBLEVBQUksR0FBRztBQUFBLElBQ2xDLFlBQVksQ0FBQztBQUFBLE1BQ1gsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsT0FBT0EsRUFBSTtBQUFBLE1BQ1gsWUFBWTtBQUFBLElBQ2xCLENBQUs7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxNQUNMLGtCQUFrQkEsRUFBSTtBQUFBLElBQ3ZCO0FBQUEsSUFDRCxPQUFPO0FBQUEsTUFDTCxJQUFNQSxFQUFJO0FBQUEsTUFDVixNQUFRQSxFQUFJO0FBQUEsSUFDYjtBQUFBLElBQ0QsVUFBVTtBQUFBLE1BQ1IsT0FBU0EsRUFBSTtBQUFBLElBQ2Q7QUFBQSxJQUNELElBQUk7QUFBQSxNQUNGLE9BQVMsU0FBVVMsR0FBUTtBQUN6QixRQUFJQSxFQUFPLE9BQU8sY0FDbEJULEVBQUksUUFBUVMsRUFBTyxPQUFPO0FBQUEsTUFDM0I7QUFBQSxJQUNGO0FBQUEsRUFDTCxHQUFLLFlBQVlULEVBQUksWUFBWSxFQUFLLEdBQUdBLEVBQUksU0FBUyxDQUFDO0FBQ3ZELEdBRUlFLEtBQWtCLENBQUU7QUNQeEIsTUFBQUMsS0FBQStJLEVBQUEsU0FBQSxZQUFBO0FBQUEsRUFDQSxhQUFBO0FBQUEsRUFDQSxXQUFBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxRQUFBO0FBQ0EsYUFBQSxLQUFBLE9BQUEsU0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUF4VCxFQUFBLGFBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxFQUNBO0FBQ0EsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDeENBLElBQUlxSyxLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQekMsSUFBR3lDLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPMUMsRUFBRyxPQUFPO0FBQUEsSUFDZixhQUFhO0FBQUEsRUFDZCxHQUFFLENBQUN5QyxFQUFJLFNBQVN6QyxFQUFHLGVBQWU7QUFBQSxJQUNqQyxPQUFPO0FBQUEsTUFDTCxPQUFTeUMsRUFBSTtBQUFBLE1BQ2IsUUFBVUEsRUFBSTtBQUFBLElBQ2Y7QUFBQSxFQUNGLENBQUEsSUFBSUEsRUFBSSxNQUFNekMsRUFBRyxPQUFPO0FBQUEsSUFDdkIsYUFBYTtBQUFBLEVBQ2pCLEdBQUssQ0FBQ0EsRUFBRyxrQkFBa0I7QUFBQSxJQUN2QixPQUFPO0FBQUEsTUFDTCxRQUFVeUMsRUFBSTtBQUFBLE1BQ2QsVUFBWUEsRUFBSTtBQUFBLE1BQ2hCLE1BQVFBLEVBQUk7QUFBQSxNQUNaLFdBQWFBLEVBQUk7QUFBQSxNQUNqQixNQUFRO0FBQUEsSUFDVDtBQUFBLEVBQ0YsQ0FBQSxHQUFHQSxFQUFJLG1CQUFtQnpDLEVBQUcsT0FBTztBQUFBLElBQ25DLGFBQWE7QUFBQSxFQUNkLEdBQUUsQ0FBQ0EsRUFBRyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUl5QyxFQUFJLEdBQUksQ0FBQSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDaEQsR0FFSUUsS0FBa0IsQ0FBRTtBQ21CeEIsTUFBQUMsS0FBQStJLEVBQUE7QUFBQSxFQUFBO0FBQUEsSUFDQTtBQUFBLElBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQTtBQUFBLElBQ0EsUUFBQSxDQUFBOEMsRUFBQTtBQUFBLElBRUEsVUFBQTtBQUNBLGFBQUEsRUFBQSxXQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBdmIsR0FBQTtBQUNBLGFBQUFBLE1BQUEsZ0JBQUEsV0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFBQSxNQUNBLE9BQUE7O0FBRUEsZ0JBQUExQyxJQUFBLEtBQUEsa0JBQUEsZ0JBQUFBLEVBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxXQUFBOztBQUVBLGVBQUEsS0FBQSxPQUFBLEtBQUEsT0FBQUEsSUFBQSxLQUFBLFNBQUEsZ0JBQUFBLEVBQUEsTUFBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLFdBQUE7QUFDQSxlQUFBLEtBQUEsZUFDQSxFQUFBLENBQUEsS0FBQSxPQUFBLEtBQUEsTUFBQSxJQUNBLEtBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxlQUFBO0FBR0EsZUFBQSxLQUFBLGVBQ0EsS0FBQSxTQUFBLE1BQUEsR0FBQSxLQUFBLFNBQUEsU0FBQSxLQUFBLEtBQUEsTUFBQSxJQUNBLEtBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxhQUFBO0FBQ0EsZUFBQSxLQUFBLGVBQ0E7QUFBQSxVQUNBLFVBQUE7QUFBQSxZQUNBLE1BQUEsS0FBQTtBQUFBLFlBQ0EsR0FBQSxLQUFBO0FBQUEsVUFDQTtBQUFBLFFBQ0EsSUFDQSxLQUFBO0FBQUEsTUFDQTtBQUFBLE1BRUEsbUJBQUE7QUFDQSxjQUFBMmtCLElBQUEsQ0FBQTdoQixNQUVBNEksRUFBQTVJLENBQUEsTUFDQSxLQUFBLGVBQUEsWUFBQTtBQUFBLFVBQ0EsTUFBQTtBQUFBLFVBQ0EsU0FBQTtBQUFBLFVBQ0EsUUFBQUE7QUFBQSxRQUNBLENBQUEsS0FDQUEsRUFBQSxZQUNBNmhCLEVBQUE3aEIsRUFBQSxRQUFBO0FBSUEsZUFBQTZoQixFQUFBLEtBQUEsTUFBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxNQUFBLGNBQ0EvWixHQUFBOUgsR0FBQVksR0FBQW1ILEdBQUFNLEdBQ0FuTixJQUFBLElBQUF1SyxJQUFBLElBQ0EyRixJQUFBLE1BQ0E7QUFDQSxhQUFBK1AsR0FBQTtBQUFBLFFBQ0FyVDtBQUFBLFFBQUE5SDtBQUFBLFFBQUFZO0FBQUEsUUFBQW1IO0FBQUEsUUFBQU07QUFBQSxRQUNBbk47QUFBQSxRQUFBdUs7QUFBQSxRQUVBLENBQUF3VyxHQUFBNVQsTUFBQTtBQUNBLGdCQUFBLEVBQUEsVUFBQUwsRUFBQSxJQUFBaEk7QUFDQSxjQUFBZ0k7QUFFQSxtQkFBQUEsRUFBQSxPQUFBLGFBQ0EsS0FBQTtBQUFBLGNBQ0FGO0FBQUEsY0FBQUU7QUFBQSxjQUFBQSxFQUFBO0FBQUEsY0FBQWlVO0FBQUEsY0FBQTVUO0FBQUEsY0FDQW5OO0FBQUEsY0FBQTtBQUFBLGNBQ0FrUTtBQUFBLFlBQ0E7QUFBQSxRQUVBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLDRCQUFBcEwsR0FBQXZELEdBQUE7QUFHQSxZQUFBLEVBQUEsVUFBQXVMLEVBQUEsSUFBQWhJO0FBQ0EsYUFBQW1KO0FBQUEsUUFBQW5KO0FBQUEsUUFBQXZEO0FBQUEsUUFBQXVMLElBQ0EsQ0FBQVMsT0FBQTtBQUFBLFVBQ0EsR0FBQUE7QUFBQSxVQUNBLFlBQUE7QUFBQSxZQUNBLEdBQUFBLEVBQUE7QUFBQSxZQUNBLENBQUFULEVBQUEsT0FBQUE7QUFBQSxVQUNBO0FBQUEsUUFDQSxLQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3hKTyxTQUFTOFosR0FBZWpSLEdBQU07QUFDbkMsU0FBT2tSLEdBQVNsUixHQUFNLEVBQUUsTUFBTSxHQUFFLENBQUU7QUFDcEM7QUNKQSxJQUFJM0IsS0FBUyxXQUFZO0FBQ3ZCLE1BQUlDLElBQUksTUFDSkMsSUFBR0QsRUFBSSxnQkFDUHpDLElBQUd5QyxFQUFJLE1BQU0sTUFBSUM7QUFFckIsU0FBTzFDLEVBQUcsT0FBTztBQUFBLElBQ2YsYUFBYTtBQUFBLEVBQ2pCLEdBQUssQ0FBQ0EsRUFBRyxTQUFTO0FBQUEsSUFDZCxhQUFhO0FBQUEsRUFDakIsR0FBSyxDQUFDeUMsRUFBSSxHQUFHLENBQUMsR0FBR3pDLEVBQUcsaUJBQWlCeUMsRUFBSSxHQUFHO0FBQUEsSUFDeEMsT0FBTztBQUFBLE1BQ0wsS0FBTztBQUFBLE1BQ1AsTUFBUUEsRUFBSTtBQUFBLElBQ2I7QUFBQSxJQUNELElBQUk7QUFBQSxNQUNGLE9BQVNBLEVBQUk7QUFBQSxNQUNiLEtBQU9BLEVBQUk7QUFBQSxJQUNaO0FBQUEsRUFDRixHQUFFLGlCQUFpQkEsRUFBSSxlQUFlQSxFQUFJLFNBQVMsR0FBRyxFQUFLLEdBQUdBLEVBQUksR0FBR0EsRUFBSSxPQUFPLFNBQVU2UyxHQUFNam1CLEdBQU87QUFDdEcsV0FBTzJRLEVBQUcsTUFBTTtBQUFBLE1BQ2QsS0FBS3NWLEVBQUs7QUFBQSxJQUNoQixHQUFPLENBQUN0VixFQUFHLE1BQU07QUFBQSxNQUNYLFVBQVU7QUFBQSxRQUNSLFdBQWF5QyxFQUFJLEdBQUdBLEVBQUksV0FBVzZTLEdBQU1qbUIsQ0FBSyxDQUFDO0FBQUEsTUFDaEQ7QUFBQSxJQUNGLENBQUEsR0FBRzJRLEVBQUcsTUFBTSxDQUFDeUMsRUFBSSxHQUFHQSxFQUFJLEdBQUdBLEVBQUksR0FBRyxnQkFBZ0IsRUFBRTZTLEVBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUd0VixFQUFHLE1BQU0sQ0FBQ3NWLEVBQUssU0FBUyxDQUFDQSxFQUFLLE9BQU8sUUFBUSxDQUFDN1MsRUFBSSxHQUFHLFlBQVlBLEVBQUksR0FBRzZTLEVBQUssT0FBTyxLQUFLLENBQUMsQ0FBQyxJQUFJQSxFQUFLLE9BQU8sU0FBUyxDQUFDN1MsRUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJNlMsRUFBSyxPQUFPLFVBQVUsQ0FBQzdTLEVBQUksR0FBRyxVQUFVLENBQUMsSUFBSUEsRUFBSSxHQUFFLENBQUUsSUFBSSxDQUFDQSxFQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUd6QyxFQUFHLE1BQU07QUFBQSxNQUM3UyxhQUFhO0FBQUEsSUFDbkIsR0FBTyxDQUFDQSxFQUFHLE9BQU87QUFBQSxNQUNaLGFBQWE7QUFBQSxJQUNuQixHQUFPLENBQUN5QyxFQUFJLFlBQVl6QyxFQUFHLEtBQUt5QyxFQUFJLEdBQUc7QUFBQSxNQUNqQyxhQUFhO0FBQUEsSUFDbkIsR0FBTyxLQUFLQSxFQUFJLG9CQUFvQkEsRUFBSSxNQUFNLElBQUksR0FBRyxFQUFLLENBQUMsSUFBSUEsRUFBSSxHQUFJLEdBQUVBLEVBQUksWUFBWXpDLEVBQUcsVUFBVXlDLEVBQUksR0FBRztBQUFBLE1BQ3ZHLGFBQWE7QUFBQSxNQUNiLE9BQU87QUFBQSxRQUNMLE1BQVE7QUFBQSxNQUNUO0FBQUEsTUFDRCxJQUFJO0FBQUEsUUFDRixPQUFTLFNBQVVTLEdBQVE7QUFDekIsaUJBQU9ULEVBQUksV0FBVzZTLEdBQU1qbUIsQ0FBSztBQUFBLFFBQ2xDO0FBQUEsTUFDRjtBQUFBLElBQ1AsR0FBTyxVQUFVb1QsRUFBSSxvQkFBb0JBLEVBQUksTUFBTSxNQUFNLEdBQUcsRUFBSyxDQUFDLElBQUlBLEVBQUksR0FBRSxDQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUFBLEVBQ25GLENBQUcsR0FBRyxDQUFDLEdBQUd6QyxFQUFHLFNBQVMsQ0FBQ0EsRUFBRyxNQUFNLENBQUNBLEVBQUcsTUFBTTtBQUFBLElBQ3RDLE9BQU87QUFBQSxNQUNMLFNBQVc7QUFBQSxJQUNaO0FBQUEsRUFDTCxHQUFLLENBQUNBLEVBQUcsT0FBTztBQUFBLElBQ1osYUFBYTtBQUFBLEVBQ2QsR0FBRSxDQUFDeUMsRUFBSSxpQkFBaUJ6QyxFQUFHLFlBQVk7QUFBQSxJQUN0QyxhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsTUFDTCxLQUFPO0FBQUEsSUFDUjtBQUFBLElBQ0QsVUFBVTtBQUFBLE1BQ1IsT0FBU3lDLEVBQUk7QUFBQSxJQUNkO0FBQUEsRUFDRixDQUFBLElBQUlBLEVBQUksTUFBTXpDLEVBQUcsT0FBTztBQUFBLElBQ3ZCLGFBQWE7QUFBQSxFQUNkLEdBQUUsQ0FBQ3lDLEVBQUksaUJBQWlCekMsRUFBRyxVQUFVO0FBQUEsSUFDcEMsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsTUFBUTtBQUFBLElBQ1Q7QUFBQSxJQUNELElBQUk7QUFBQSxNQUNGLE9BQVMsU0FBVWtELEdBQVE7QUFDekIsUUFBQUEsRUFBTyxlQUFjLEdBQ3JCVCxFQUFJLE9BQU8sU0FBUztBQUFBLE1BQ3JCO0FBQUEsSUFDRjtBQUFBLEVBQ0wsR0FBSyxDQUFDQSxFQUFJLEdBQUcsWUFBWSxDQUFDLENBQUMsSUFBSUEsRUFBSSxnQkFBZ0J6QyxFQUFHLFVBQVU7QUFBQSxJQUM1RCxhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsTUFDTCxNQUFRO0FBQUEsSUFDVDtBQUFBLElBQ0QsSUFBSTtBQUFBLE1BQ0YsT0FBUyxTQUFVa0QsR0FBUTtBQUN6QixRQUFBQSxFQUFPLGVBQWMsR0FDckJULEVBQUksT0FBTyxTQUFTO0FBQUEsTUFDckI7QUFBQSxJQUNGO0FBQUEsRUFDTCxHQUFLLENBQUNBLEVBQUksR0FBRyxZQUFZLENBQUMsQ0FBQyxJQUFJQSxFQUFJLEdBQUUsR0FBSXpDLEVBQUcsY0FBYztBQUFBLElBQ3RELEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxNQUNMLFlBQVl5QyxFQUFJO0FBQUEsTUFDaEIsTUFBUUEsRUFBSTtBQUFBLE1BQ1osVUFBWUEsRUFBSTtBQUFBLE1BQ2hCLGVBQWVBLEVBQUk7QUFBQSxNQUNuQixZQUFjQSxFQUFJO0FBQUEsTUFDbEIsUUFBVUEsRUFBSTtBQUFBLE1BQ2QsVUFBWUEsRUFBSTtBQUFBLE1BQ2hCLE1BQVFBLEVBQUk7QUFBQSxNQUNaLE9BQVM7QUFBQSxJQUNWO0FBQUEsSUFDRCxJQUFJO0FBQUEsTUFDRixnQkFBZ0JBLEVBQUk7QUFBQSxNQUNwQixjQUFjQSxFQUFJO0FBQUEsSUFDbkI7QUFBQSxJQUNELE9BQU87QUFBQSxNQUNMLE9BQU9BLEVBQUk7QUFBQSxNQUNYLFVBQVUsU0FBVXVKLEdBQUs7QUFDdkIsUUFBQXZKLEVBQUksVUFBVXVKO0FBQUEsTUFDZjtBQUFBLE1BQ0QsWUFBWTtBQUFBLElBQ2I7QUFBQSxFQUNMLENBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2QixHQUVJckosS0FBa0IsQ0FBQyxXQUFZO0FBQ2pDLE1BQUlGLElBQUksTUFDSkMsSUFBR0QsRUFBSSxnQkFDUHpDLElBQUd5QyxFQUFJLE1BQU0sTUFBSUM7QUFFckIsU0FBTzFDLEVBQUcsU0FBUztBQUFBLElBQ2pCLGFBQWE7QUFBQSxFQUNqQixHQUFLLENBQUNBLEVBQUcsTUFBTSxDQUFDQSxFQUFHLE1BQU0sQ0FBQ0EsRUFBRyxRQUFRLENBQUN5QyxFQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUd6QyxFQUFHLE1BQU0sQ0FBQ0EsRUFBRyxRQUFRLENBQUN5QyxFQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUd6QyxFQUFHLE1BQU0sQ0FBQ0EsRUFBRyxRQUFRLENBQUN5QyxFQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUd6QyxFQUFHLE1BQU0sQ0FBQ0EsRUFBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pLLENBQUM7QUNHRCxNQUFBNEMsS0FBQStJLEVBQUEsU0FBQSxVQUFBO0FBQUEsRUFDQSxZQUFBLEVBQUEsV0FBQTRKLElBQUEsY0FBQXZLLEdBQUE7QUFBQSxFQUNBLFNBQUEsRUFBQSxnQkFBQW9LLEdBQUE7QUFBQSxFQUNBLFFBQUEsQ0FBQTFLLEVBQUE7QUFBQSxFQUVBLE9BQUE7QUFDQSxXQUFBO0FBQUEsTUFDQSxTQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsU0FBQTtBQUNBLGFBQUEsS0FBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQTtBQUNBLGFBQUE4SyxHQUFBLEtBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUFyZCxFQUFBLFlBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxNQUVBLFVBQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLFlBQUFBLEVBQUEsY0FBQTtBQUFBLE1BQ0EsTUFBQSxDQUFBLE9BQUEsUUFBQSxNQUFBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxRQUFBQSxFQUFBLFVBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLElBQUFzZCxHQUFBO0FBQ0EsZUFBQXprQixFQUFBeWtCLENBQUEsSUFBQUEsRUFBQSxLQUFBLEdBQUEsSUFBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxTQUFBdGQsRUFBQSxXQUFBO0FBQUEsTUFDQSxNQUFBLENBQUEsUUFBQSxNQUFBO0FBQUEsTUFDQSxJQUFBdWQsR0FBQTtBQUNBLGVBQUFBLElBQUFDLEdBQUFELENBQUEsSUFBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLFdBQUF2ZCxFQUFBLGFBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxNQUNBLElBQUE3RCxHQUFBO0FBQ0EsZUFBQUEsS0FBQSxLQUFBLE1BQUEsU0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLFdBQUE2RCxFQUFBLGFBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLGdCQUFBO0FBQ0EsYUFBQSxLQUFBLFFBQUEsVUFDQSxFQUFBLEtBQUEsT0FBQSxVQUFBLEtBQUEsT0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGlCQUFBO0FBQ0EsYUFBQSxLQUFBLFFBQUEsVUFBQSxLQUFBLE9BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxpQkFBQTtBQUNBLGFBQ0EsS0FBQSxRQUFBLE9BQUEsQ0FBQXlkLEdBQUFOLE1BQUFNLElBQUFOLEVBQUEsVUFBQSxDQUFBLElBQ0EsS0FBQSxRQUFB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
|