@adstore/templates 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -2
- package/dist/style.css +1613 -0
- package/dist/templates.es.js +2707 -0
- package/dist/templates.umd.js +2710 -0
- package/package.json +10 -24
- package/dist/adstore/apps/templates/src/cacheDriver.d.ts +0 -7
- package/dist/adstore/apps/templates/src/constants/animations.d.ts +0 -5
- package/dist/adstore/apps/templates/src/constants/breakpoints.d.ts +0 -6
- package/dist/adstore/apps/templates/src/plugins/classNamesPlugin.d.ts +0 -22
- package/dist/adstore/apps/templates/src/plugins/giftOpenPlugin.d.ts +0 -10
- package/dist/adstore/apps/templates/src/plugins/googleFontsPlugin.d.ts +0 -3
- package/dist/adstore/apps/templates/src/plugins/highlightPlugin.d.ts +0 -11
- package/dist/adstore/apps/templates/src/plugins/index.d.ts +0 -12
- package/dist/adstore/apps/templates/src/plugins/injectNodePlugin.d.ts +0 -23
- package/dist/adstore/apps/templates/src/plugins/legalInfoPlugin.d.ts +0 -17
- package/dist/adstore/apps/templates/src/plugins/patchStylesPlugin.d.ts +0 -12
- package/dist/adstore/apps/templates/src/plugins/statePlugin.d.ts +0 -9
- package/dist/adstore/apps/templates/src/promos/BonusCard/index.d.ts +0 -2
- package/dist/adstore/apps/templates/src/promos/BonusCard/script.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/ComplexGift/chunks/cardChunk/index.d.ts +0 -4
- package/dist/adstore/apps/templates/src/promos/ComplexGift/chunks/cardChunk/script.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/ComplexGift/index.d.ts +0 -6
- package/dist/adstore/apps/templates/src/promos/ComplexGift/script.d.ts +0 -9
- package/dist/adstore/apps/templates/src/promos/ComplexPopup/chunks/popupCardChunk/index.d.ts +0 -4
- package/dist/adstore/apps/templates/src/promos/ComplexPopup/chunks/popupCardChunk/script.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/ComplexPopup/index.d.ts +0 -6
- package/dist/adstore/apps/templates/src/promos/ComplexPopup/script.d.ts +0 -2
- package/dist/adstore/apps/templates/src/promos/ExpressPopup/chunks/matchChunk/index.d.ts +0 -4
- package/dist/adstore/apps/templates/src/promos/ExpressPopup/index.d.ts +0 -6
- package/dist/adstore/apps/templates/src/promos/ExpressPopup/script.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/SimplePopup/chunks/textChunk/index.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/SimplePopup/index.d.ts +0 -6
- package/dist/adstore/apps/templates/src/promos/SimplePopup/script.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/WideCard/chunks/matchesOneTwoSlideChunk/index.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/WideCard/chunks/matchesOneTwoSlideChunk/script.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/WideCard/chunks/matchesSlideChunk/index.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/WideCard/chunks/matchesSlideChunk/script.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/WideCard/chunks/textSlideChunk/index.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/WideCard/chunks/textSlideChunk/script.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/WideCard/index.d.ts +0 -8
- package/dist/adstore/apps/templates/src/promos/WideCard/script.d.ts +0 -3
- package/dist/adstore/apps/templates/src/promos/index.d.ts +0 -7
- package/dist/adstore/apps/templates/src/renderDriver.d.ts +0 -48
- package/dist/adstore/apps/templates/src/utils/htmlToElement.d.ts +0 -1
- package/dist/adstore/apps/templates/src/utils/injectLink.d.ts +0 -6
- package/dist/adstore/apps/templates/src/utils/injectStyle.d.ts +0 -1
- package/dist/adstore/apps/templates/src/utils/injectStyleRules.d.ts +0 -2
- package/dist/adstore/apps/templates/src/utils/isRenderDriver.d.ts +0 -2
- package/dist/adstore/apps/templates/src/utils/isTemplate.d.ts +0 -1
- package/dist/adstore/apps/templates/src/utils/switchTextAlignToFlex.d.ts +0 -1
- package/dist/adstore/apps/templates/src/utils/toggleClassName.d.ts +0 -1
- package/dist/my-lib.d.ts +0 -1
- package/dist/my-lib.es.js +0 -2463
- package/dist/my-lib.umd.js +0 -247
@@ -0,0 +1,2707 @@
|
|
1
|
+
import { options, Component, createElement, Fragment, toChildArray, createContext, render as render$1 } from "preact";
|
2
|
+
var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
|
3
|
+
var classnamesExports = {};
|
4
|
+
var classnames = {
|
5
|
+
get exports() {
|
6
|
+
return classnamesExports;
|
7
|
+
},
|
8
|
+
set exports(v2) {
|
9
|
+
classnamesExports = v2;
|
10
|
+
}
|
11
|
+
};
|
12
|
+
/*!
|
13
|
+
Copyright (c) 2018 Jed Watson.
|
14
|
+
Licensed under the MIT License (MIT), see
|
15
|
+
http://jedwatson.github.io/classnames
|
16
|
+
*/
|
17
|
+
(function(module) {
|
18
|
+
(function() {
|
19
|
+
var hasOwn = {}.hasOwnProperty;
|
20
|
+
function classNames2() {
|
21
|
+
var classes = [];
|
22
|
+
for (var i2 = 0; i2 < arguments.length; i2++) {
|
23
|
+
var arg = arguments[i2];
|
24
|
+
if (!arg)
|
25
|
+
continue;
|
26
|
+
var argType = typeof arg;
|
27
|
+
if (argType === "string" || argType === "number") {
|
28
|
+
classes.push(arg);
|
29
|
+
} else if (Array.isArray(arg)) {
|
30
|
+
if (arg.length) {
|
31
|
+
var inner2 = classNames2.apply(null, arg);
|
32
|
+
if (inner2) {
|
33
|
+
classes.push(inner2);
|
34
|
+
}
|
35
|
+
}
|
36
|
+
} else if (argType === "object") {
|
37
|
+
if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes("[native code]")) {
|
38
|
+
classes.push(arg.toString());
|
39
|
+
continue;
|
40
|
+
}
|
41
|
+
for (var key in arg) {
|
42
|
+
if (hasOwn.call(arg, key) && arg[key]) {
|
43
|
+
classes.push(key);
|
44
|
+
}
|
45
|
+
}
|
46
|
+
}
|
47
|
+
}
|
48
|
+
return classes.join(" ");
|
49
|
+
}
|
50
|
+
if (module.exports) {
|
51
|
+
classNames2.default = classNames2;
|
52
|
+
module.exports = classNames2;
|
53
|
+
} else {
|
54
|
+
window.classNames = classNames2;
|
55
|
+
}
|
56
|
+
})();
|
57
|
+
})(classnames);
|
58
|
+
const classNames = classnamesExports;
|
59
|
+
var t, r, u, i, o$1 = 0, f = [], c = [], e = options.__b, a = options.__r, v = options.diffed, l = options.__c, m = options.unmount;
|
60
|
+
function d(t2, u2) {
|
61
|
+
options.__h && options.__h(r, t2, o$1 || u2), o$1 = 0;
|
62
|
+
var i2 = r.__H || (r.__H = { __: [], __h: [] });
|
63
|
+
return t2 >= i2.__.length && i2.__.push({ __V: c }), i2.__[t2];
|
64
|
+
}
|
65
|
+
function h(n) {
|
66
|
+
return o$1 = 1, s(B$1, n);
|
67
|
+
}
|
68
|
+
function s(n, u2, i2) {
|
69
|
+
var o2 = d(t++, 2);
|
70
|
+
if (o2.t = n, !o2.__c && (o2.__ = [i2 ? i2(u2) : B$1(void 0, u2), function(n2) {
|
71
|
+
var t2 = o2.__N ? o2.__N[0] : o2.__[0], r2 = o2.t(t2, n2);
|
72
|
+
t2 !== r2 && (o2.__N = [r2, o2.__[1]], o2.__c.setState({}));
|
73
|
+
}], o2.__c = r, !r.u)) {
|
74
|
+
var f2 = function(n2, t2, r2) {
|
75
|
+
if (!o2.__c.__H)
|
76
|
+
return true;
|
77
|
+
var u3 = o2.__c.__H.__.filter(function(n3) {
|
78
|
+
return n3.__c;
|
79
|
+
});
|
80
|
+
if (u3.every(function(n3) {
|
81
|
+
return !n3.__N;
|
82
|
+
}))
|
83
|
+
return !c2 || c2.call(this, n2, t2, r2);
|
84
|
+
var i3 = false;
|
85
|
+
return u3.forEach(function(n3) {
|
86
|
+
if (n3.__N) {
|
87
|
+
var t3 = n3.__[0];
|
88
|
+
n3.__ = n3.__N, n3.__N = void 0, t3 !== n3.__[0] && (i3 = true);
|
89
|
+
}
|
90
|
+
}), !(!i3 && o2.__c.props === n2) && (!c2 || c2.call(this, n2, t2, r2));
|
91
|
+
};
|
92
|
+
r.u = true;
|
93
|
+
var c2 = r.shouldComponentUpdate, e2 = r.componentWillUpdate;
|
94
|
+
r.componentWillUpdate = function(n2, t2, r2) {
|
95
|
+
if (this.__e) {
|
96
|
+
var u3 = c2;
|
97
|
+
c2 = void 0, f2(n2, t2, r2), c2 = u3;
|
98
|
+
}
|
99
|
+
e2 && e2.call(this, n2, t2, r2);
|
100
|
+
}, r.shouldComponentUpdate = f2;
|
101
|
+
}
|
102
|
+
return o2.__N || o2.__;
|
103
|
+
}
|
104
|
+
function p(u2, i2) {
|
105
|
+
var o2 = d(t++, 3);
|
106
|
+
!options.__s && z(o2.__H, i2) && (o2.__ = u2, o2.i = i2, r.__H.__h.push(o2));
|
107
|
+
}
|
108
|
+
function y(u2, i2) {
|
109
|
+
var o2 = d(t++, 4);
|
110
|
+
!options.__s && z(o2.__H, i2) && (o2.__ = u2, o2.i = i2, r.__h.push(o2));
|
111
|
+
}
|
112
|
+
function _$1(n) {
|
113
|
+
return o$1 = 5, F$1(function() {
|
114
|
+
return { current: n };
|
115
|
+
}, []);
|
116
|
+
}
|
117
|
+
function F$1(n, r2) {
|
118
|
+
var u2 = d(t++, 7);
|
119
|
+
return z(u2.__H, r2) ? (u2.__V = n(), u2.i = r2, u2.__h = n, u2.__V) : u2.__;
|
120
|
+
}
|
121
|
+
function q$1(n) {
|
122
|
+
var u2 = r.context[n.__c], i2 = d(t++, 9);
|
123
|
+
return i2.c = n, u2 ? (null == i2.__ && (i2.__ = true, u2.sub(r)), u2.props.value) : n.__;
|
124
|
+
}
|
125
|
+
function b() {
|
126
|
+
for (var t2; t2 = f.shift(); )
|
127
|
+
if (t2.__P && t2.__H)
|
128
|
+
try {
|
129
|
+
t2.__H.__h.forEach(k), t2.__H.__h.forEach(w$1), t2.__H.__h = [];
|
130
|
+
} catch (r2) {
|
131
|
+
t2.__H.__h = [], options.__e(r2, t2.__v);
|
132
|
+
}
|
133
|
+
}
|
134
|
+
options.__b = function(n) {
|
135
|
+
r = null, e && e(n);
|
136
|
+
}, options.__r = function(n) {
|
137
|
+
a && a(n), t = 0;
|
138
|
+
var i2 = (r = n.__c).__H;
|
139
|
+
i2 && (u === r ? (i2.__h = [], r.__h = [], i2.__.forEach(function(n2) {
|
140
|
+
n2.__N && (n2.__ = n2.__N), n2.__V = c, n2.__N = n2.i = void 0;
|
141
|
+
})) : (i2.__h.forEach(k), i2.__h.forEach(w$1), i2.__h = [])), u = r;
|
142
|
+
}, options.diffed = function(t2) {
|
143
|
+
v && v(t2);
|
144
|
+
var o2 = t2.__c;
|
145
|
+
o2 && o2.__H && (o2.__H.__h.length && (1 !== f.push(o2) && i === options.requestAnimationFrame || ((i = options.requestAnimationFrame) || j)(b)), o2.__H.__.forEach(function(n) {
|
146
|
+
n.i && (n.__H = n.i), n.__V !== c && (n.__ = n.__V), n.i = void 0, n.__V = c;
|
147
|
+
})), u = r = null;
|
148
|
+
}, options.__c = function(t2, r2) {
|
149
|
+
r2.some(function(t3) {
|
150
|
+
try {
|
151
|
+
t3.__h.forEach(k), t3.__h = t3.__h.filter(function(n) {
|
152
|
+
return !n.__ || w$1(n);
|
153
|
+
});
|
154
|
+
} catch (u2) {
|
155
|
+
r2.some(function(n) {
|
156
|
+
n.__h && (n.__h = []);
|
157
|
+
}), r2 = [], options.__e(u2, t3.__v);
|
158
|
+
}
|
159
|
+
}), l && l(t2, r2);
|
160
|
+
}, options.unmount = function(t2) {
|
161
|
+
m && m(t2);
|
162
|
+
var r2, u2 = t2.__c;
|
163
|
+
u2 && u2.__H && (u2.__H.__.forEach(function(n) {
|
164
|
+
try {
|
165
|
+
k(n);
|
166
|
+
} catch (n2) {
|
167
|
+
r2 = n2;
|
168
|
+
}
|
169
|
+
}), u2.__H = void 0, r2 && options.__e(r2, u2.__v));
|
170
|
+
};
|
171
|
+
var g$1 = "function" == typeof requestAnimationFrame;
|
172
|
+
function j(n) {
|
173
|
+
var t2, r2 = function() {
|
174
|
+
clearTimeout(u2), g$1 && cancelAnimationFrame(t2), setTimeout(n);
|
175
|
+
}, u2 = setTimeout(r2, 100);
|
176
|
+
g$1 && (t2 = requestAnimationFrame(r2));
|
177
|
+
}
|
178
|
+
function k(n) {
|
179
|
+
var t2 = r, u2 = n.__c;
|
180
|
+
"function" == typeof u2 && (n.__c = void 0, u2()), r = t2;
|
181
|
+
}
|
182
|
+
function w$1(n) {
|
183
|
+
var t2 = r;
|
184
|
+
n.__c = n.__(), r = t2;
|
185
|
+
}
|
186
|
+
function z(n, t2) {
|
187
|
+
return !n || n.length !== t2.length || t2.some(function(t3, r2) {
|
188
|
+
return t3 !== n[r2];
|
189
|
+
});
|
190
|
+
}
|
191
|
+
function B$1(n, t2) {
|
192
|
+
return "function" == typeof t2 ? t2(n) : t2;
|
193
|
+
}
|
194
|
+
function g(n, t2) {
|
195
|
+
for (var e2 in t2)
|
196
|
+
n[e2] = t2[e2];
|
197
|
+
return n;
|
198
|
+
}
|
199
|
+
function C(n, t2) {
|
200
|
+
for (var e2 in n)
|
201
|
+
if ("__source" !== e2 && !(e2 in t2))
|
202
|
+
return true;
|
203
|
+
for (var r2 in t2)
|
204
|
+
if ("__source" !== r2 && n[r2] !== t2[r2])
|
205
|
+
return true;
|
206
|
+
return false;
|
207
|
+
}
|
208
|
+
function w(n) {
|
209
|
+
this.props = n;
|
210
|
+
}
|
211
|
+
(w.prototype = new Component()).isPureReactComponent = true, w.prototype.shouldComponentUpdate = function(n, t2) {
|
212
|
+
return C(this.props, n) || C(this.state, t2);
|
213
|
+
};
|
214
|
+
var R = options.__b;
|
215
|
+
options.__b = function(n) {
|
216
|
+
n.type && n.type.__f && n.ref && (n.props.ref = n.ref, n.ref = null), R && R(n);
|
217
|
+
};
|
218
|
+
var T = options.__e;
|
219
|
+
options.__e = function(n, t2, e2, r2) {
|
220
|
+
if (n.then) {
|
221
|
+
for (var u2, o2 = t2; o2 = o2.__; )
|
222
|
+
if ((u2 = o2.__c) && u2.__c)
|
223
|
+
return null == t2.__e && (t2.__e = e2.__e, t2.__k = e2.__k), u2.__c(n, t2);
|
224
|
+
}
|
225
|
+
T(n, t2, e2, r2);
|
226
|
+
};
|
227
|
+
var I = options.unmount;
|
228
|
+
function L(n, t2, e2) {
|
229
|
+
return n && (n.__c && n.__c.__H && (n.__c.__H.__.forEach(function(n2) {
|
230
|
+
"function" == typeof n2.__c && n2.__c();
|
231
|
+
}), n.__c.__H = null), null != (n = g({}, n)).__c && (n.__c.__P === e2 && (n.__c.__P = t2), n.__c = null), n.__k = n.__k && n.__k.map(function(n2) {
|
232
|
+
return L(n2, t2, e2);
|
233
|
+
})), n;
|
234
|
+
}
|
235
|
+
function U(n, t2, e2) {
|
236
|
+
return n && (n.__v = null, n.__k = n.__k && n.__k.map(function(n2) {
|
237
|
+
return U(n2, t2, e2);
|
238
|
+
}), n.__c && n.__c.__P === t2 && (n.__e && e2.insertBefore(n.__e, n.__d), n.__c.__e = true, n.__c.__P = e2)), n;
|
239
|
+
}
|
240
|
+
function D() {
|
241
|
+
this.__u = 0, this.t = null, this.__b = null;
|
242
|
+
}
|
243
|
+
function F(n) {
|
244
|
+
var t2 = n.__.__c;
|
245
|
+
return t2 && t2.__a && t2.__a(n);
|
246
|
+
}
|
247
|
+
function V() {
|
248
|
+
this.u = null, this.o = null;
|
249
|
+
}
|
250
|
+
options.unmount = function(n) {
|
251
|
+
var t2 = n.__c;
|
252
|
+
t2 && t2.__R && t2.__R(), t2 && true === n.__h && (n.type = null), I && I(n);
|
253
|
+
}, (D.prototype = new Component()).__c = function(n, t2) {
|
254
|
+
var e2 = t2.__c, r2 = this;
|
255
|
+
null == r2.t && (r2.t = []), r2.t.push(e2);
|
256
|
+
var u2 = F(r2.__v), o2 = false, i2 = function() {
|
257
|
+
o2 || (o2 = true, e2.__R = null, u2 ? u2(l2) : l2());
|
258
|
+
};
|
259
|
+
e2.__R = i2;
|
260
|
+
var l2 = function() {
|
261
|
+
if (!--r2.__u) {
|
262
|
+
if (r2.state.__a) {
|
263
|
+
var n2 = r2.state.__a;
|
264
|
+
r2.__v.__k[0] = U(n2, n2.__c.__P, n2.__c.__O);
|
265
|
+
}
|
266
|
+
var t3;
|
267
|
+
for (r2.setState({ __a: r2.__b = null }); t3 = r2.t.pop(); )
|
268
|
+
t3.forceUpdate();
|
269
|
+
}
|
270
|
+
}, c2 = true === t2.__h;
|
271
|
+
r2.__u++ || c2 || r2.setState({ __a: r2.__b = r2.__v.__k[0] }), n.then(i2, i2);
|
272
|
+
}, D.prototype.componentWillUnmount = function() {
|
273
|
+
this.t = [];
|
274
|
+
}, D.prototype.render = function(n, e2) {
|
275
|
+
if (this.__b) {
|
276
|
+
if (this.__v.__k) {
|
277
|
+
var r2 = document.createElement("div"), o2 = this.__v.__k[0].__c;
|
278
|
+
this.__v.__k[0] = L(this.__b, r2, o2.__O = o2.__P);
|
279
|
+
}
|
280
|
+
this.__b = null;
|
281
|
+
}
|
282
|
+
var i2 = e2.__a && createElement(Fragment, null, n.fallback);
|
283
|
+
return i2 && (i2.__h = null), [createElement(Fragment, null, e2.__a ? null : n.children), i2];
|
284
|
+
};
|
285
|
+
var W = function(n, t2, e2) {
|
286
|
+
if (++e2[1] === e2[0] && n.o.delete(t2), n.props.revealOrder && ("t" !== n.props.revealOrder[0] || !n.o.size))
|
287
|
+
for (e2 = n.u; e2; ) {
|
288
|
+
for (; e2.length > 3; )
|
289
|
+
e2.pop()();
|
290
|
+
if (e2[1] < e2[0])
|
291
|
+
break;
|
292
|
+
n.u = e2 = e2[2];
|
293
|
+
}
|
294
|
+
};
|
295
|
+
(V.prototype = new Component()).__a = function(n) {
|
296
|
+
var t2 = this, e2 = F(t2.__v), r2 = t2.o.get(n);
|
297
|
+
return r2[0]++, function(u2) {
|
298
|
+
var o2 = function() {
|
299
|
+
t2.props.revealOrder ? (r2.push(u2), W(t2, n, r2)) : u2();
|
300
|
+
};
|
301
|
+
e2 ? e2(o2) : o2();
|
302
|
+
};
|
303
|
+
}, V.prototype.render = function(n) {
|
304
|
+
this.u = null, this.o = /* @__PURE__ */ new Map();
|
305
|
+
var t2 = toChildArray(n.children);
|
306
|
+
n.revealOrder && "b" === n.revealOrder[0] && t2.reverse();
|
307
|
+
for (var e2 = t2.length; e2--; )
|
308
|
+
this.o.set(t2[e2], this.u = [1, 0, this.u]);
|
309
|
+
return n.children;
|
310
|
+
}, V.prototype.componentDidUpdate = V.prototype.componentDidMount = function() {
|
311
|
+
var n = this;
|
312
|
+
this.o.forEach(function(t2, e2) {
|
313
|
+
W(n, e2, t2);
|
314
|
+
});
|
315
|
+
};
|
316
|
+
var B = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.element") || 60103, H = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/, Z = /^on(Ani|Tra|Tou|BeforeInp|Compo)/, Y = /[A-Z0-9]/g, $ = "undefined" != typeof document, q = function(n) {
|
317
|
+
return ("undefined" != typeof Symbol && "symbol" == typeof Symbol() ? /fil|che|rad/ : /fil|che|ra/).test(n);
|
318
|
+
};
|
319
|
+
Component.prototype.isReactComponent = {}, ["componentWillMount", "componentWillReceiveProps", "componentWillUpdate"].forEach(function(t2) {
|
320
|
+
Object.defineProperty(Component.prototype, t2, { configurable: true, get: function() {
|
321
|
+
return this["UNSAFE_" + t2];
|
322
|
+
}, set: function(n) {
|
323
|
+
Object.defineProperty(this, t2, { configurable: true, writable: true, value: n });
|
324
|
+
} });
|
325
|
+
});
|
326
|
+
var K = options.event;
|
327
|
+
function Q() {
|
328
|
+
}
|
329
|
+
function X() {
|
330
|
+
return this.cancelBubble;
|
331
|
+
}
|
332
|
+
function nn() {
|
333
|
+
return this.defaultPrevented;
|
334
|
+
}
|
335
|
+
options.event = function(n) {
|
336
|
+
return K && (n = K(n)), n.persist = Q, n.isPropagationStopped = X, n.isDefaultPrevented = nn, n.nativeEvent = n;
|
337
|
+
};
|
338
|
+
var en = { enumerable: false, configurable: true, get: function() {
|
339
|
+
return this.class;
|
340
|
+
} }, rn = options.vnode;
|
341
|
+
options.vnode = function(n) {
|
342
|
+
"string" == typeof n.type && function(n2) {
|
343
|
+
var t2 = n2.props, e2 = n2.type, u2 = {};
|
344
|
+
for (var o2 in t2) {
|
345
|
+
var i2 = t2[o2];
|
346
|
+
if (!("value" === o2 && "defaultValue" in t2 && null == i2 || $ && "children" === o2 && "noscript" === e2 || "class" === o2 || "className" === o2)) {
|
347
|
+
var l2 = o2.toLowerCase();
|
348
|
+
"defaultValue" === o2 && "value" in t2 && null == t2.value ? o2 = "value" : "download" === o2 && true === i2 ? i2 = "" : "ondoubleclick" === l2 ? o2 = "ondblclick" : "onchange" !== l2 || "input" !== e2 && "textarea" !== e2 || q(t2.type) ? "onfocus" === l2 ? o2 = "onfocusin" : "onblur" === l2 ? o2 = "onfocusout" : Z.test(o2) ? o2 = l2 : -1 === e2.indexOf("-") && H.test(o2) ? o2 = o2.replace(Y, "-$&").toLowerCase() : null === i2 && (i2 = void 0) : l2 = o2 = "oninput", "oninput" === l2 && u2[o2 = l2] && (o2 = "oninputCapture"), u2[o2] = i2;
|
349
|
+
}
|
350
|
+
}
|
351
|
+
"select" == e2 && u2.multiple && Array.isArray(u2.value) && (u2.value = toChildArray(t2.children).forEach(function(n3) {
|
352
|
+
n3.props.selected = -1 != u2.value.indexOf(n3.props.value);
|
353
|
+
})), "select" == e2 && null != u2.defaultValue && (u2.value = toChildArray(t2.children).forEach(function(n3) {
|
354
|
+
n3.props.selected = u2.multiple ? -1 != u2.defaultValue.indexOf(n3.props.value) : u2.defaultValue == n3.props.value;
|
355
|
+
})), t2.class && !t2.className ? (u2.class = t2.class, Object.defineProperty(u2, "className", en)) : (t2.className && !t2.class || t2.class && t2.className) && (u2.class = u2.className = t2.className), n2.props = u2;
|
356
|
+
}(n), n.$$typeof = B, rn && rn(n);
|
357
|
+
};
|
358
|
+
var un = options.__r;
|
359
|
+
options.__r = function(n) {
|
360
|
+
un && un(n), n.__c;
|
361
|
+
};
|
362
|
+
var on = options.diffed;
|
363
|
+
options.diffed = function(n) {
|
364
|
+
on && on(n);
|
365
|
+
var t2 = n.props, e2 = n.__e;
|
366
|
+
null != e2 && "textarea" === n.type && "value" in t2 && t2.value !== e2.value && (e2.value = null == t2.value ? "" : t2.value);
|
367
|
+
};
|
368
|
+
const reset = "";
|
369
|
+
const root$i = "_root_1w7t1_1";
|
370
|
+
const icon$1 = "_icon_1w7t1_5";
|
371
|
+
const iconTarget$1 = "_iconTarget_1w7t1_17";
|
372
|
+
const body$6 = "_body_1w7t1_22";
|
373
|
+
const bodyOpen$1 = "_bodyOpen_1w7t1_30";
|
374
|
+
const simpleGift_in = "_simpleGift_in_1w7t1_1";
|
375
|
+
const close$1 = "_close_1w7t1_43";
|
376
|
+
const arrow$1 = "_arrow_1w7t1_57";
|
377
|
+
const container$2 = "_container_1w7t1_67";
|
378
|
+
const inner$1 = "_inner_1w7t1_73";
|
379
|
+
const logo$6 = "_logo_1w7t1_80";
|
380
|
+
const text$4 = "_text_1w7t1_86";
|
381
|
+
const button$6 = "_button_1w7t1_99";
|
382
|
+
const legal$5 = "_legal_1w7t1_108";
|
383
|
+
const legalOpen$1 = "_legalOpen_1w7t1_125";
|
384
|
+
const legalText$1 = "_legalText_1w7t1_133";
|
385
|
+
const legalButton$1 = "_legalButton_1w7t1_148";
|
386
|
+
const fadein$1 = "_fadein_1w7t1_1";
|
387
|
+
const pulse$1 = "_pulse_1w7t1_1";
|
388
|
+
const gradient$1 = "_gradient_1w7t1_1";
|
389
|
+
const wiggle$1 = "_wiggle_1w7t1_1";
|
390
|
+
const styles$d = {
|
391
|
+
root: root$i,
|
392
|
+
icon: icon$1,
|
393
|
+
iconTarget: iconTarget$1,
|
394
|
+
body: body$6,
|
395
|
+
bodyOpen: bodyOpen$1,
|
396
|
+
simpleGift_in,
|
397
|
+
close: close$1,
|
398
|
+
arrow: arrow$1,
|
399
|
+
container: container$2,
|
400
|
+
inner: inner$1,
|
401
|
+
logo: logo$6,
|
402
|
+
text: text$4,
|
403
|
+
button: button$6,
|
404
|
+
legal: legal$5,
|
405
|
+
legalOpen: legalOpen$1,
|
406
|
+
legalText: legalText$1,
|
407
|
+
legalButton: legalButton$1,
|
408
|
+
fadein: fadein$1,
|
409
|
+
pulse: pulse$1,
|
410
|
+
gradient: gradient$1,
|
411
|
+
wiggle: wiggle$1
|
412
|
+
};
|
413
|
+
const useGiftOpen = (delay = 1e3) => {
|
414
|
+
const [isOpen, setIsOpen] = h(false);
|
415
|
+
const timerRef = _$1(null);
|
416
|
+
const onToggle = () => {
|
417
|
+
clearTimeout(timerRef.current);
|
418
|
+
setIsOpen((prev) => !prev);
|
419
|
+
};
|
420
|
+
p(() => {
|
421
|
+
timerRef.current = setTimeout(() => {
|
422
|
+
setIsOpen(true);
|
423
|
+
}, delay);
|
424
|
+
return () => clearTimeout(timerRef.current);
|
425
|
+
}, [delay]);
|
426
|
+
return {
|
427
|
+
isOpen,
|
428
|
+
onToggle
|
429
|
+
};
|
430
|
+
};
|
431
|
+
var _ = 0;
|
432
|
+
function o(o2, e2, n, t2, f2, l2) {
|
433
|
+
var s2, u2, a2 = {};
|
434
|
+
for (u2 in e2)
|
435
|
+
"ref" == u2 ? s2 = e2[u2] : a2[u2] = e2[u2];
|
436
|
+
var i2 = { type: o2, props: a2, key: n, ref: s2, __k: null, __: null, __b: 0, __e: null, __d: void 0, __c: null, __h: null, constructor: void 0, __v: --_, __source: f2, __self: l2 };
|
437
|
+
if ("function" == typeof o2 && (s2 = o2.defaultProps))
|
438
|
+
for (u2 in s2)
|
439
|
+
void 0 === a2[u2] && (a2[u2] = s2[u2]);
|
440
|
+
return options.vnode && options.vnode(i2), i2;
|
441
|
+
}
|
442
|
+
const State = createContext();
|
443
|
+
const StateContext = ({
|
444
|
+
children,
|
445
|
+
value
|
446
|
+
}) => {
|
447
|
+
return o(State.Provider, {
|
448
|
+
value,
|
449
|
+
children
|
450
|
+
});
|
451
|
+
};
|
452
|
+
const render = (vNode) => (target, state) => render$1(o(StateContext, {
|
453
|
+
value: state,
|
454
|
+
children: vNode
|
455
|
+
}), target);
|
456
|
+
const useCurrentState = () => q$1(State);
|
457
|
+
function listCacheClear$1() {
|
458
|
+
this.__data__ = [];
|
459
|
+
this.size = 0;
|
460
|
+
}
|
461
|
+
var _listCacheClear = listCacheClear$1;
|
462
|
+
function eq$4(value, other) {
|
463
|
+
return value === other || value !== value && other !== other;
|
464
|
+
}
|
465
|
+
var eq_1 = eq$4;
|
466
|
+
var eq$3 = eq_1;
|
467
|
+
function assocIndexOf$4(array, key) {
|
468
|
+
var length = array.length;
|
469
|
+
while (length--) {
|
470
|
+
if (eq$3(array[length][0], key)) {
|
471
|
+
return length;
|
472
|
+
}
|
473
|
+
}
|
474
|
+
return -1;
|
475
|
+
}
|
476
|
+
var _assocIndexOf = assocIndexOf$4;
|
477
|
+
var assocIndexOf$3 = _assocIndexOf;
|
478
|
+
var arrayProto = Array.prototype;
|
479
|
+
var splice = arrayProto.splice;
|
480
|
+
function listCacheDelete$1(key) {
|
481
|
+
var data = this.__data__, index2 = assocIndexOf$3(data, key);
|
482
|
+
if (index2 < 0) {
|
483
|
+
return false;
|
484
|
+
}
|
485
|
+
var lastIndex = data.length - 1;
|
486
|
+
if (index2 == lastIndex) {
|
487
|
+
data.pop();
|
488
|
+
} else {
|
489
|
+
splice.call(data, index2, 1);
|
490
|
+
}
|
491
|
+
--this.size;
|
492
|
+
return true;
|
493
|
+
}
|
494
|
+
var _listCacheDelete = listCacheDelete$1;
|
495
|
+
var assocIndexOf$2 = _assocIndexOf;
|
496
|
+
function listCacheGet$1(key) {
|
497
|
+
var data = this.__data__, index2 = assocIndexOf$2(data, key);
|
498
|
+
return index2 < 0 ? void 0 : data[index2][1];
|
499
|
+
}
|
500
|
+
var _listCacheGet = listCacheGet$1;
|
501
|
+
var assocIndexOf$1 = _assocIndexOf;
|
502
|
+
function listCacheHas$1(key) {
|
503
|
+
return assocIndexOf$1(this.__data__, key) > -1;
|
504
|
+
}
|
505
|
+
var _listCacheHas = listCacheHas$1;
|
506
|
+
var assocIndexOf = _assocIndexOf;
|
507
|
+
function listCacheSet$1(key, value) {
|
508
|
+
var data = this.__data__, index2 = assocIndexOf(data, key);
|
509
|
+
if (index2 < 0) {
|
510
|
+
++this.size;
|
511
|
+
data.push([key, value]);
|
512
|
+
} else {
|
513
|
+
data[index2][1] = value;
|
514
|
+
}
|
515
|
+
return this;
|
516
|
+
}
|
517
|
+
var _listCacheSet = listCacheSet$1;
|
518
|
+
var listCacheClear = _listCacheClear, listCacheDelete = _listCacheDelete, listCacheGet = _listCacheGet, listCacheHas = _listCacheHas, listCacheSet = _listCacheSet;
|
519
|
+
function ListCache$4(entries) {
|
520
|
+
var index2 = -1, length = entries == null ? 0 : entries.length;
|
521
|
+
this.clear();
|
522
|
+
while (++index2 < length) {
|
523
|
+
var entry = entries[index2];
|
524
|
+
this.set(entry[0], entry[1]);
|
525
|
+
}
|
526
|
+
}
|
527
|
+
ListCache$4.prototype.clear = listCacheClear;
|
528
|
+
ListCache$4.prototype["delete"] = listCacheDelete;
|
529
|
+
ListCache$4.prototype.get = listCacheGet;
|
530
|
+
ListCache$4.prototype.has = listCacheHas;
|
531
|
+
ListCache$4.prototype.set = listCacheSet;
|
532
|
+
var _ListCache = ListCache$4;
|
533
|
+
var ListCache$3 = _ListCache;
|
534
|
+
function stackClear$1() {
|
535
|
+
this.__data__ = new ListCache$3();
|
536
|
+
this.size = 0;
|
537
|
+
}
|
538
|
+
var _stackClear = stackClear$1;
|
539
|
+
function stackDelete$1(key) {
|
540
|
+
var data = this.__data__, result = data["delete"](key);
|
541
|
+
this.size = data.size;
|
542
|
+
return result;
|
543
|
+
}
|
544
|
+
var _stackDelete = stackDelete$1;
|
545
|
+
function stackGet$1(key) {
|
546
|
+
return this.__data__.get(key);
|
547
|
+
}
|
548
|
+
var _stackGet = stackGet$1;
|
549
|
+
function stackHas$1(key) {
|
550
|
+
return this.__data__.has(key);
|
551
|
+
}
|
552
|
+
var _stackHas = stackHas$1;
|
553
|
+
var freeGlobal$1 = typeof commonjsGlobal == "object" && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
|
554
|
+
var _freeGlobal = freeGlobal$1;
|
555
|
+
var freeGlobal = _freeGlobal;
|
556
|
+
var freeSelf = typeof self == "object" && self && self.Object === Object && self;
|
557
|
+
var root$h = freeGlobal || freeSelf || Function("return this")();
|
558
|
+
var _root = root$h;
|
559
|
+
var root$g = _root;
|
560
|
+
var Symbol$3 = root$g.Symbol;
|
561
|
+
var _Symbol = Symbol$3;
|
562
|
+
var Symbol$2 = _Symbol;
|
563
|
+
var objectProto$a = Object.prototype;
|
564
|
+
var hasOwnProperty$8 = objectProto$a.hasOwnProperty;
|
565
|
+
var nativeObjectToString$1 = objectProto$a.toString;
|
566
|
+
var symToStringTag$1 = Symbol$2 ? Symbol$2.toStringTag : void 0;
|
567
|
+
function getRawTag$1(value) {
|
568
|
+
var isOwn = hasOwnProperty$8.call(value, symToStringTag$1), tag = value[symToStringTag$1];
|
569
|
+
try {
|
570
|
+
value[symToStringTag$1] = void 0;
|
571
|
+
var unmasked = true;
|
572
|
+
} catch (e2) {
|
573
|
+
}
|
574
|
+
var result = nativeObjectToString$1.call(value);
|
575
|
+
if (unmasked) {
|
576
|
+
if (isOwn) {
|
577
|
+
value[symToStringTag$1] = tag;
|
578
|
+
} else {
|
579
|
+
delete value[symToStringTag$1];
|
580
|
+
}
|
581
|
+
}
|
582
|
+
return result;
|
583
|
+
}
|
584
|
+
var _getRawTag = getRawTag$1;
|
585
|
+
var objectProto$9 = Object.prototype;
|
586
|
+
var nativeObjectToString = objectProto$9.toString;
|
587
|
+
function objectToString$1(value) {
|
588
|
+
return nativeObjectToString.call(value);
|
589
|
+
}
|
590
|
+
var _objectToString = objectToString$1;
|
591
|
+
var Symbol$1 = _Symbol, getRawTag = _getRawTag, objectToString = _objectToString;
|
592
|
+
var nullTag = "[object Null]", undefinedTag = "[object Undefined]";
|
593
|
+
var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : void 0;
|
594
|
+
function baseGetTag$4(value) {
|
595
|
+
if (value == null) {
|
596
|
+
return value === void 0 ? undefinedTag : nullTag;
|
597
|
+
}
|
598
|
+
return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);
|
599
|
+
}
|
600
|
+
var _baseGetTag = baseGetTag$4;
|
601
|
+
function isObject$7(value) {
|
602
|
+
var type = typeof value;
|
603
|
+
return value != null && (type == "object" || type == "function");
|
604
|
+
}
|
605
|
+
var isObject_1 = isObject$7;
|
606
|
+
var baseGetTag$3 = _baseGetTag, isObject$6 = isObject_1;
|
607
|
+
var asyncTag = "[object AsyncFunction]", funcTag$1 = "[object Function]", genTag = "[object GeneratorFunction]", proxyTag = "[object Proxy]";
|
608
|
+
function isFunction$3(value) {
|
609
|
+
if (!isObject$6(value)) {
|
610
|
+
return false;
|
611
|
+
}
|
612
|
+
var tag = baseGetTag$3(value);
|
613
|
+
return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag;
|
614
|
+
}
|
615
|
+
var isFunction_1 = isFunction$3;
|
616
|
+
var root$f = _root;
|
617
|
+
var coreJsData$1 = root$f["__core-js_shared__"];
|
618
|
+
var _coreJsData = coreJsData$1;
|
619
|
+
var coreJsData = _coreJsData;
|
620
|
+
var maskSrcKey = function() {
|
621
|
+
var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || "");
|
622
|
+
return uid ? "Symbol(src)_1." + uid : "";
|
623
|
+
}();
|
624
|
+
function isMasked$1(func) {
|
625
|
+
return !!maskSrcKey && maskSrcKey in func;
|
626
|
+
}
|
627
|
+
var _isMasked = isMasked$1;
|
628
|
+
var funcProto$2 = Function.prototype;
|
629
|
+
var funcToString$2 = funcProto$2.toString;
|
630
|
+
function toSource$1(func) {
|
631
|
+
if (func != null) {
|
632
|
+
try {
|
633
|
+
return funcToString$2.call(func);
|
634
|
+
} catch (e2) {
|
635
|
+
}
|
636
|
+
try {
|
637
|
+
return func + "";
|
638
|
+
} catch (e2) {
|
639
|
+
}
|
640
|
+
}
|
641
|
+
return "";
|
642
|
+
}
|
643
|
+
var _toSource = toSource$1;
|
644
|
+
var isFunction$2 = isFunction_1, isMasked = _isMasked, isObject$5 = isObject_1, toSource = _toSource;
|
645
|
+
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
|
646
|
+
var reIsHostCtor = /^\[object .+?Constructor\]$/;
|
647
|
+
var funcProto$1 = Function.prototype, objectProto$8 = Object.prototype;
|
648
|
+
var funcToString$1 = funcProto$1.toString;
|
649
|
+
var hasOwnProperty$7 = objectProto$8.hasOwnProperty;
|
650
|
+
var reIsNative = RegExp(
|
651
|
+
"^" + funcToString$1.call(hasOwnProperty$7).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
|
652
|
+
);
|
653
|
+
function baseIsNative$1(value) {
|
654
|
+
if (!isObject$5(value) || isMasked(value)) {
|
655
|
+
return false;
|
656
|
+
}
|
657
|
+
var pattern = isFunction$2(value) ? reIsNative : reIsHostCtor;
|
658
|
+
return pattern.test(toSource(value));
|
659
|
+
}
|
660
|
+
var _baseIsNative = baseIsNative$1;
|
661
|
+
function getValue$1(object, key) {
|
662
|
+
return object == null ? void 0 : object[key];
|
663
|
+
}
|
664
|
+
var _getValue = getValue$1;
|
665
|
+
var baseIsNative = _baseIsNative, getValue = _getValue;
|
666
|
+
function getNative$3(object, key) {
|
667
|
+
var value = getValue(object, key);
|
668
|
+
return baseIsNative(value) ? value : void 0;
|
669
|
+
}
|
670
|
+
var _getNative = getNative$3;
|
671
|
+
var getNative$2 = _getNative, root$e = _root;
|
672
|
+
var Map$3 = getNative$2(root$e, "Map");
|
673
|
+
var _Map = Map$3;
|
674
|
+
var getNative$1 = _getNative;
|
675
|
+
var nativeCreate$4 = getNative$1(Object, "create");
|
676
|
+
var _nativeCreate = nativeCreate$4;
|
677
|
+
var nativeCreate$3 = _nativeCreate;
|
678
|
+
function hashClear$1() {
|
679
|
+
this.__data__ = nativeCreate$3 ? nativeCreate$3(null) : {};
|
680
|
+
this.size = 0;
|
681
|
+
}
|
682
|
+
var _hashClear = hashClear$1;
|
683
|
+
function hashDelete$1(key) {
|
684
|
+
var result = this.has(key) && delete this.__data__[key];
|
685
|
+
this.size -= result ? 1 : 0;
|
686
|
+
return result;
|
687
|
+
}
|
688
|
+
var _hashDelete = hashDelete$1;
|
689
|
+
var nativeCreate$2 = _nativeCreate;
|
690
|
+
var HASH_UNDEFINED$1 = "__lodash_hash_undefined__";
|
691
|
+
var objectProto$7 = Object.prototype;
|
692
|
+
var hasOwnProperty$6 = objectProto$7.hasOwnProperty;
|
693
|
+
function hashGet$1(key) {
|
694
|
+
var data = this.__data__;
|
695
|
+
if (nativeCreate$2) {
|
696
|
+
var result = data[key];
|
697
|
+
return result === HASH_UNDEFINED$1 ? void 0 : result;
|
698
|
+
}
|
699
|
+
return hasOwnProperty$6.call(data, key) ? data[key] : void 0;
|
700
|
+
}
|
701
|
+
var _hashGet = hashGet$1;
|
702
|
+
var nativeCreate$1 = _nativeCreate;
|
703
|
+
var objectProto$6 = Object.prototype;
|
704
|
+
var hasOwnProperty$5 = objectProto$6.hasOwnProperty;
|
705
|
+
function hashHas$1(key) {
|
706
|
+
var data = this.__data__;
|
707
|
+
return nativeCreate$1 ? data[key] !== void 0 : hasOwnProperty$5.call(data, key);
|
708
|
+
}
|
709
|
+
var _hashHas = hashHas$1;
|
710
|
+
var nativeCreate = _nativeCreate;
|
711
|
+
var HASH_UNDEFINED = "__lodash_hash_undefined__";
|
712
|
+
function hashSet$1(key, value) {
|
713
|
+
var data = this.__data__;
|
714
|
+
this.size += this.has(key) ? 0 : 1;
|
715
|
+
data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED : value;
|
716
|
+
return this;
|
717
|
+
}
|
718
|
+
var _hashSet = hashSet$1;
|
719
|
+
var hashClear = _hashClear, hashDelete = _hashDelete, hashGet = _hashGet, hashHas = _hashHas, hashSet = _hashSet;
|
720
|
+
function Hash$1(entries) {
|
721
|
+
var index2 = -1, length = entries == null ? 0 : entries.length;
|
722
|
+
this.clear();
|
723
|
+
while (++index2 < length) {
|
724
|
+
var entry = entries[index2];
|
725
|
+
this.set(entry[0], entry[1]);
|
726
|
+
}
|
727
|
+
}
|
728
|
+
Hash$1.prototype.clear = hashClear;
|
729
|
+
Hash$1.prototype["delete"] = hashDelete;
|
730
|
+
Hash$1.prototype.get = hashGet;
|
731
|
+
Hash$1.prototype.has = hashHas;
|
732
|
+
Hash$1.prototype.set = hashSet;
|
733
|
+
var _Hash = Hash$1;
|
734
|
+
var Hash = _Hash, ListCache$2 = _ListCache, Map$2 = _Map;
|
735
|
+
function mapCacheClear$1() {
|
736
|
+
this.size = 0;
|
737
|
+
this.__data__ = {
|
738
|
+
"hash": new Hash(),
|
739
|
+
"map": new (Map$2 || ListCache$2)(),
|
740
|
+
"string": new Hash()
|
741
|
+
};
|
742
|
+
}
|
743
|
+
var _mapCacheClear = mapCacheClear$1;
|
744
|
+
function isKeyable$1(value) {
|
745
|
+
var type = typeof value;
|
746
|
+
return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null;
|
747
|
+
}
|
748
|
+
var _isKeyable = isKeyable$1;
|
749
|
+
var isKeyable = _isKeyable;
|
750
|
+
function getMapData$4(map, key) {
|
751
|
+
var data = map.__data__;
|
752
|
+
return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map;
|
753
|
+
}
|
754
|
+
var _getMapData = getMapData$4;
|
755
|
+
var getMapData$3 = _getMapData;
|
756
|
+
function mapCacheDelete$1(key) {
|
757
|
+
var result = getMapData$3(this, key)["delete"](key);
|
758
|
+
this.size -= result ? 1 : 0;
|
759
|
+
return result;
|
760
|
+
}
|
761
|
+
var _mapCacheDelete = mapCacheDelete$1;
|
762
|
+
var getMapData$2 = _getMapData;
|
763
|
+
function mapCacheGet$1(key) {
|
764
|
+
return getMapData$2(this, key).get(key);
|
765
|
+
}
|
766
|
+
var _mapCacheGet = mapCacheGet$1;
|
767
|
+
var getMapData$1 = _getMapData;
|
768
|
+
function mapCacheHas$1(key) {
|
769
|
+
return getMapData$1(this, key).has(key);
|
770
|
+
}
|
771
|
+
var _mapCacheHas = mapCacheHas$1;
|
772
|
+
var getMapData = _getMapData;
|
773
|
+
function mapCacheSet$1(key, value) {
|
774
|
+
var data = getMapData(this, key), size = data.size;
|
775
|
+
data.set(key, value);
|
776
|
+
this.size += data.size == size ? 0 : 1;
|
777
|
+
return this;
|
778
|
+
}
|
779
|
+
var _mapCacheSet = mapCacheSet$1;
|
780
|
+
var mapCacheClear = _mapCacheClear, mapCacheDelete = _mapCacheDelete, mapCacheGet = _mapCacheGet, mapCacheHas = _mapCacheHas, mapCacheSet = _mapCacheSet;
|
781
|
+
function MapCache$1(entries) {
|
782
|
+
var index2 = -1, length = entries == null ? 0 : entries.length;
|
783
|
+
this.clear();
|
784
|
+
while (++index2 < length) {
|
785
|
+
var entry = entries[index2];
|
786
|
+
this.set(entry[0], entry[1]);
|
787
|
+
}
|
788
|
+
}
|
789
|
+
MapCache$1.prototype.clear = mapCacheClear;
|
790
|
+
MapCache$1.prototype["delete"] = mapCacheDelete;
|
791
|
+
MapCache$1.prototype.get = mapCacheGet;
|
792
|
+
MapCache$1.prototype.has = mapCacheHas;
|
793
|
+
MapCache$1.prototype.set = mapCacheSet;
|
794
|
+
var _MapCache = MapCache$1;
|
795
|
+
var ListCache$1 = _ListCache, Map$1 = _Map, MapCache = _MapCache;
|
796
|
+
var LARGE_ARRAY_SIZE = 200;
|
797
|
+
function stackSet$1(key, value) {
|
798
|
+
var data = this.__data__;
|
799
|
+
if (data instanceof ListCache$1) {
|
800
|
+
var pairs = data.__data__;
|
801
|
+
if (!Map$1 || pairs.length < LARGE_ARRAY_SIZE - 1) {
|
802
|
+
pairs.push([key, value]);
|
803
|
+
this.size = ++data.size;
|
804
|
+
return this;
|
805
|
+
}
|
806
|
+
data = this.__data__ = new MapCache(pairs);
|
807
|
+
}
|
808
|
+
data.set(key, value);
|
809
|
+
this.size = data.size;
|
810
|
+
return this;
|
811
|
+
}
|
812
|
+
var _stackSet = stackSet$1;
|
813
|
+
var ListCache = _ListCache, stackClear = _stackClear, stackDelete = _stackDelete, stackGet = _stackGet, stackHas = _stackHas, stackSet = _stackSet;
|
814
|
+
function Stack$1(entries) {
|
815
|
+
var data = this.__data__ = new ListCache(entries);
|
816
|
+
this.size = data.size;
|
817
|
+
}
|
818
|
+
Stack$1.prototype.clear = stackClear;
|
819
|
+
Stack$1.prototype["delete"] = stackDelete;
|
820
|
+
Stack$1.prototype.get = stackGet;
|
821
|
+
Stack$1.prototype.has = stackHas;
|
822
|
+
Stack$1.prototype.set = stackSet;
|
823
|
+
var _Stack = Stack$1;
|
824
|
+
var getNative = _getNative;
|
825
|
+
var defineProperty$2 = function() {
|
826
|
+
try {
|
827
|
+
var func = getNative(Object, "defineProperty");
|
828
|
+
func({}, "", {});
|
829
|
+
return func;
|
830
|
+
} catch (e2) {
|
831
|
+
}
|
832
|
+
}();
|
833
|
+
var _defineProperty = defineProperty$2;
|
834
|
+
var defineProperty$1 = _defineProperty;
|
835
|
+
function baseAssignValue$3(object, key, value) {
|
836
|
+
if (key == "__proto__" && defineProperty$1) {
|
837
|
+
defineProperty$1(object, key, {
|
838
|
+
"configurable": true,
|
839
|
+
"enumerable": true,
|
840
|
+
"value": value,
|
841
|
+
"writable": true
|
842
|
+
});
|
843
|
+
} else {
|
844
|
+
object[key] = value;
|
845
|
+
}
|
846
|
+
}
|
847
|
+
var _baseAssignValue = baseAssignValue$3;
|
848
|
+
var baseAssignValue$2 = _baseAssignValue, eq$2 = eq_1;
|
849
|
+
function assignMergeValue$2(object, key, value) {
|
850
|
+
if (value !== void 0 && !eq$2(object[key], value) || value === void 0 && !(key in object)) {
|
851
|
+
baseAssignValue$2(object, key, value);
|
852
|
+
}
|
853
|
+
}
|
854
|
+
var _assignMergeValue = assignMergeValue$2;
|
855
|
+
function createBaseFor$1(fromRight) {
|
856
|
+
return function(object, iteratee, keysFunc) {
|
857
|
+
var index2 = -1, iterable = Object(object), props = keysFunc(object), length = props.length;
|
858
|
+
while (length--) {
|
859
|
+
var key = props[fromRight ? length : ++index2];
|
860
|
+
if (iteratee(iterable[key], key, iterable) === false) {
|
861
|
+
break;
|
862
|
+
}
|
863
|
+
}
|
864
|
+
return object;
|
865
|
+
};
|
866
|
+
}
|
867
|
+
var _createBaseFor = createBaseFor$1;
|
868
|
+
var createBaseFor = _createBaseFor;
|
869
|
+
var baseFor$1 = createBaseFor();
|
870
|
+
var _baseFor = baseFor$1;
|
871
|
+
var _cloneBufferExports = {};
|
872
|
+
var _cloneBuffer = {
|
873
|
+
get exports() {
|
874
|
+
return _cloneBufferExports;
|
875
|
+
},
|
876
|
+
set exports(v2) {
|
877
|
+
_cloneBufferExports = v2;
|
878
|
+
}
|
879
|
+
};
|
880
|
+
(function(module, exports) {
|
881
|
+
var root2 = _root;
|
882
|
+
var freeExports = exports && !exports.nodeType && exports;
|
883
|
+
var freeModule = freeExports && true && module && !module.nodeType && module;
|
884
|
+
var moduleExports = freeModule && freeModule.exports === freeExports;
|
885
|
+
var Buffer = moduleExports ? root2.Buffer : void 0, allocUnsafe = Buffer ? Buffer.allocUnsafe : void 0;
|
886
|
+
function cloneBuffer2(buffer, isDeep) {
|
887
|
+
if (isDeep) {
|
888
|
+
return buffer.slice();
|
889
|
+
}
|
890
|
+
var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
|
891
|
+
buffer.copy(result);
|
892
|
+
return result;
|
893
|
+
}
|
894
|
+
module.exports = cloneBuffer2;
|
895
|
+
})(_cloneBuffer, _cloneBufferExports);
|
896
|
+
var root$d = _root;
|
897
|
+
var Uint8Array$1 = root$d.Uint8Array;
|
898
|
+
var _Uint8Array = Uint8Array$1;
|
899
|
+
var Uint8Array = _Uint8Array;
|
900
|
+
function cloneArrayBuffer$1(arrayBuffer) {
|
901
|
+
var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
|
902
|
+
new Uint8Array(result).set(new Uint8Array(arrayBuffer));
|
903
|
+
return result;
|
904
|
+
}
|
905
|
+
var _cloneArrayBuffer = cloneArrayBuffer$1;
|
906
|
+
var cloneArrayBuffer = _cloneArrayBuffer;
|
907
|
+
function cloneTypedArray$1(typedArray, isDeep) {
|
908
|
+
var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
|
909
|
+
return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
|
910
|
+
}
|
911
|
+
var _cloneTypedArray = cloneTypedArray$1;
|
912
|
+
function copyArray$1(source, array) {
|
913
|
+
var index2 = -1, length = source.length;
|
914
|
+
array || (array = Array(length));
|
915
|
+
while (++index2 < length) {
|
916
|
+
array[index2] = source[index2];
|
917
|
+
}
|
918
|
+
return array;
|
919
|
+
}
|
920
|
+
var _copyArray = copyArray$1;
|
921
|
+
var isObject$4 = isObject_1;
|
922
|
+
var objectCreate = Object.create;
|
923
|
+
var baseCreate$1 = function() {
|
924
|
+
function object() {
|
925
|
+
}
|
926
|
+
return function(proto) {
|
927
|
+
if (!isObject$4(proto)) {
|
928
|
+
return {};
|
929
|
+
}
|
930
|
+
if (objectCreate) {
|
931
|
+
return objectCreate(proto);
|
932
|
+
}
|
933
|
+
object.prototype = proto;
|
934
|
+
var result = new object();
|
935
|
+
object.prototype = void 0;
|
936
|
+
return result;
|
937
|
+
};
|
938
|
+
}();
|
939
|
+
var _baseCreate = baseCreate$1;
|
940
|
+
function overArg$1(func, transform) {
|
941
|
+
return function(arg) {
|
942
|
+
return func(transform(arg));
|
943
|
+
};
|
944
|
+
}
|
945
|
+
var _overArg = overArg$1;
|
946
|
+
var overArg = _overArg;
|
947
|
+
var getPrototype$2 = overArg(Object.getPrototypeOf, Object);
|
948
|
+
var _getPrototype = getPrototype$2;
|
949
|
+
var objectProto$5 = Object.prototype;
|
950
|
+
function isPrototype$2(value) {
|
951
|
+
var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto$5;
|
952
|
+
return value === proto;
|
953
|
+
}
|
954
|
+
var _isPrototype = isPrototype$2;
|
955
|
+
var baseCreate = _baseCreate, getPrototype$1 = _getPrototype, isPrototype$1 = _isPrototype;
|
956
|
+
function initCloneObject$1(object) {
|
957
|
+
return typeof object.constructor == "function" && !isPrototype$1(object) ? baseCreate(getPrototype$1(object)) : {};
|
958
|
+
}
|
959
|
+
var _initCloneObject = initCloneObject$1;
|
960
|
+
function isObjectLike$5(value) {
|
961
|
+
return value != null && typeof value == "object";
|
962
|
+
}
|
963
|
+
var isObjectLike_1 = isObjectLike$5;
|
964
|
+
var baseGetTag$2 = _baseGetTag, isObjectLike$4 = isObjectLike_1;
|
965
|
+
var argsTag$1 = "[object Arguments]";
|
966
|
+
function baseIsArguments$1(value) {
|
967
|
+
return isObjectLike$4(value) && baseGetTag$2(value) == argsTag$1;
|
968
|
+
}
|
969
|
+
var _baseIsArguments = baseIsArguments$1;
|
970
|
+
var baseIsArguments = _baseIsArguments, isObjectLike$3 = isObjectLike_1;
|
971
|
+
var objectProto$4 = Object.prototype;
|
972
|
+
var hasOwnProperty$4 = objectProto$4.hasOwnProperty;
|
973
|
+
var propertyIsEnumerable = objectProto$4.propertyIsEnumerable;
|
974
|
+
var isArguments$2 = baseIsArguments(function() {
|
975
|
+
return arguments;
|
976
|
+
}()) ? baseIsArguments : function(value) {
|
977
|
+
return isObjectLike$3(value) && hasOwnProperty$4.call(value, "callee") && !propertyIsEnumerable.call(value, "callee");
|
978
|
+
};
|
979
|
+
var isArguments_1 = isArguments$2;
|
980
|
+
var isArray$2 = Array.isArray;
|
981
|
+
var isArray_1 = isArray$2;
|
982
|
+
var MAX_SAFE_INTEGER$1 = 9007199254740991;
|
983
|
+
function isLength$2(value) {
|
984
|
+
return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$1;
|
985
|
+
}
|
986
|
+
var isLength_1 = isLength$2;
|
987
|
+
var isFunction$1 = isFunction_1, isLength$1 = isLength_1;
|
988
|
+
function isArrayLike$3(value) {
|
989
|
+
return value != null && isLength$1(value.length) && !isFunction$1(value);
|
990
|
+
}
|
991
|
+
var isArrayLike_1 = isArrayLike$3;
|
992
|
+
var isArrayLike$2 = isArrayLike_1, isObjectLike$2 = isObjectLike_1;
|
993
|
+
function isArrayLikeObject$1(value) {
|
994
|
+
return isObjectLike$2(value) && isArrayLike$2(value);
|
995
|
+
}
|
996
|
+
var isArrayLikeObject_1 = isArrayLikeObject$1;
|
997
|
+
var isBufferExports = {};
|
998
|
+
var isBuffer$2 = {
|
999
|
+
get exports() {
|
1000
|
+
return isBufferExports;
|
1001
|
+
},
|
1002
|
+
set exports(v2) {
|
1003
|
+
isBufferExports = v2;
|
1004
|
+
}
|
1005
|
+
};
|
1006
|
+
function stubFalse() {
|
1007
|
+
return false;
|
1008
|
+
}
|
1009
|
+
var stubFalse_1 = stubFalse;
|
1010
|
+
(function(module, exports) {
|
1011
|
+
var root2 = _root, stubFalse2 = stubFalse_1;
|
1012
|
+
var freeExports = exports && !exports.nodeType && exports;
|
1013
|
+
var freeModule = freeExports && true && module && !module.nodeType && module;
|
1014
|
+
var moduleExports = freeModule && freeModule.exports === freeExports;
|
1015
|
+
var Buffer = moduleExports ? root2.Buffer : void 0;
|
1016
|
+
var nativeIsBuffer = Buffer ? Buffer.isBuffer : void 0;
|
1017
|
+
var isBuffer2 = nativeIsBuffer || stubFalse2;
|
1018
|
+
module.exports = isBuffer2;
|
1019
|
+
})(isBuffer$2, isBufferExports);
|
1020
|
+
var baseGetTag$1 = _baseGetTag, getPrototype = _getPrototype, isObjectLike$1 = isObjectLike_1;
|
1021
|
+
var objectTag$1 = "[object Object]";
|
1022
|
+
var funcProto = Function.prototype, objectProto$3 = Object.prototype;
|
1023
|
+
var funcToString = funcProto.toString;
|
1024
|
+
var hasOwnProperty$3 = objectProto$3.hasOwnProperty;
|
1025
|
+
var objectCtorString = funcToString.call(Object);
|
1026
|
+
function isPlainObject$1(value) {
|
1027
|
+
if (!isObjectLike$1(value) || baseGetTag$1(value) != objectTag$1) {
|
1028
|
+
return false;
|
1029
|
+
}
|
1030
|
+
var proto = getPrototype(value);
|
1031
|
+
if (proto === null) {
|
1032
|
+
return true;
|
1033
|
+
}
|
1034
|
+
var Ctor = hasOwnProperty$3.call(proto, "constructor") && proto.constructor;
|
1035
|
+
return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;
|
1036
|
+
}
|
1037
|
+
var isPlainObject_1 = isPlainObject$1;
|
1038
|
+
var baseGetTag = _baseGetTag, isLength = isLength_1, isObjectLike = isObjectLike_1;
|
1039
|
+
var argsTag = "[object Arguments]", arrayTag = "[object Array]", boolTag = "[object Boolean]", dateTag = "[object Date]", errorTag = "[object Error]", funcTag = "[object Function]", mapTag = "[object Map]", numberTag = "[object Number]", objectTag = "[object Object]", regexpTag = "[object RegExp]", setTag = "[object Set]", stringTag = "[object String]", weakMapTag = "[object WeakMap]";
|
1040
|
+
var arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]";
|
1041
|
+
var typedArrayTags = {};
|
1042
|
+
typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;
|
1043
|
+
typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
|
1044
|
+
function baseIsTypedArray$1(value) {
|
1045
|
+
return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
|
1046
|
+
}
|
1047
|
+
var _baseIsTypedArray = baseIsTypedArray$1;
|
1048
|
+
function baseUnary$1(func) {
|
1049
|
+
return function(value) {
|
1050
|
+
return func(value);
|
1051
|
+
};
|
1052
|
+
}
|
1053
|
+
var _baseUnary = baseUnary$1;
|
1054
|
+
var _nodeUtilExports = {};
|
1055
|
+
var _nodeUtil = {
|
1056
|
+
get exports() {
|
1057
|
+
return _nodeUtilExports;
|
1058
|
+
},
|
1059
|
+
set exports(v2) {
|
1060
|
+
_nodeUtilExports = v2;
|
1061
|
+
}
|
1062
|
+
};
|
1063
|
+
(function(module, exports) {
|
1064
|
+
var freeGlobal2 = _freeGlobal;
|
1065
|
+
var freeExports = exports && !exports.nodeType && exports;
|
1066
|
+
var freeModule = freeExports && true && module && !module.nodeType && module;
|
1067
|
+
var moduleExports = freeModule && freeModule.exports === freeExports;
|
1068
|
+
var freeProcess = moduleExports && freeGlobal2.process;
|
1069
|
+
var nodeUtil2 = function() {
|
1070
|
+
try {
|
1071
|
+
var types = freeModule && freeModule.require && freeModule.require("util").types;
|
1072
|
+
if (types) {
|
1073
|
+
return types;
|
1074
|
+
}
|
1075
|
+
return freeProcess && freeProcess.binding && freeProcess.binding("util");
|
1076
|
+
} catch (e2) {
|
1077
|
+
}
|
1078
|
+
}();
|
1079
|
+
module.exports = nodeUtil2;
|
1080
|
+
})(_nodeUtil, _nodeUtilExports);
|
1081
|
+
var baseIsTypedArray = _baseIsTypedArray, baseUnary = _baseUnary, nodeUtil = _nodeUtilExports;
|
1082
|
+
var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
|
1083
|
+
var isTypedArray$2 = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
|
1084
|
+
var isTypedArray_1 = isTypedArray$2;
|
1085
|
+
function safeGet$2(object, key) {
|
1086
|
+
if (key === "constructor" && typeof object[key] === "function") {
|
1087
|
+
return;
|
1088
|
+
}
|
1089
|
+
if (key == "__proto__") {
|
1090
|
+
return;
|
1091
|
+
}
|
1092
|
+
return object[key];
|
1093
|
+
}
|
1094
|
+
var _safeGet = safeGet$2;
|
1095
|
+
var baseAssignValue$1 = _baseAssignValue, eq$1 = eq_1;
|
1096
|
+
var objectProto$2 = Object.prototype;
|
1097
|
+
var hasOwnProperty$2 = objectProto$2.hasOwnProperty;
|
1098
|
+
function assignValue$1(object, key, value) {
|
1099
|
+
var objValue = object[key];
|
1100
|
+
if (!(hasOwnProperty$2.call(object, key) && eq$1(objValue, value)) || value === void 0 && !(key in object)) {
|
1101
|
+
baseAssignValue$1(object, key, value);
|
1102
|
+
}
|
1103
|
+
}
|
1104
|
+
var _assignValue = assignValue$1;
|
1105
|
+
var assignValue = _assignValue, baseAssignValue = _baseAssignValue;
|
1106
|
+
function copyObject$1(source, props, object, customizer) {
|
1107
|
+
var isNew = !object;
|
1108
|
+
object || (object = {});
|
1109
|
+
var index2 = -1, length = props.length;
|
1110
|
+
while (++index2 < length) {
|
1111
|
+
var key = props[index2];
|
1112
|
+
var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0;
|
1113
|
+
if (newValue === void 0) {
|
1114
|
+
newValue = source[key];
|
1115
|
+
}
|
1116
|
+
if (isNew) {
|
1117
|
+
baseAssignValue(object, key, newValue);
|
1118
|
+
} else {
|
1119
|
+
assignValue(object, key, newValue);
|
1120
|
+
}
|
1121
|
+
}
|
1122
|
+
return object;
|
1123
|
+
}
|
1124
|
+
var _copyObject = copyObject$1;
|
1125
|
+
function baseTimes$1(n, iteratee) {
|
1126
|
+
var index2 = -1, result = Array(n);
|
1127
|
+
while (++index2 < n) {
|
1128
|
+
result[index2] = iteratee(index2);
|
1129
|
+
}
|
1130
|
+
return result;
|
1131
|
+
}
|
1132
|
+
var _baseTimes = baseTimes$1;
|
1133
|
+
var MAX_SAFE_INTEGER = 9007199254740991;
|
1134
|
+
var reIsUint = /^(?:0|[1-9]\d*)$/;
|
1135
|
+
function isIndex$2(value, length) {
|
1136
|
+
var type = typeof value;
|
1137
|
+
length = length == null ? MAX_SAFE_INTEGER : length;
|
1138
|
+
return !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length);
|
1139
|
+
}
|
1140
|
+
var _isIndex = isIndex$2;
|
1141
|
+
var baseTimes = _baseTimes, isArguments$1 = isArguments_1, isArray$1 = isArray_1, isBuffer$1 = isBufferExports, isIndex$1 = _isIndex, isTypedArray$1 = isTypedArray_1;
|
1142
|
+
var objectProto$1 = Object.prototype;
|
1143
|
+
var hasOwnProperty$1 = objectProto$1.hasOwnProperty;
|
1144
|
+
function arrayLikeKeys$1(value, inherited) {
|
1145
|
+
var isArr = isArray$1(value), isArg = !isArr && isArguments$1(value), isBuff = !isArr && !isArg && isBuffer$1(value), isType = !isArr && !isArg && !isBuff && isTypedArray$1(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length;
|
1146
|
+
for (var key in value) {
|
1147
|
+
if ((inherited || hasOwnProperty$1.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.
|
1148
|
+
(key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers.
|
1149
|
+
isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays.
|
1150
|
+
isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties.
|
1151
|
+
isIndex$1(key, length)))) {
|
1152
|
+
result.push(key);
|
1153
|
+
}
|
1154
|
+
}
|
1155
|
+
return result;
|
1156
|
+
}
|
1157
|
+
var _arrayLikeKeys = arrayLikeKeys$1;
|
1158
|
+
function nativeKeysIn$1(object) {
|
1159
|
+
var result = [];
|
1160
|
+
if (object != null) {
|
1161
|
+
for (var key in Object(object)) {
|
1162
|
+
result.push(key);
|
1163
|
+
}
|
1164
|
+
}
|
1165
|
+
return result;
|
1166
|
+
}
|
1167
|
+
var _nativeKeysIn = nativeKeysIn$1;
|
1168
|
+
var isObject$3 = isObject_1, isPrototype = _isPrototype, nativeKeysIn = _nativeKeysIn;
|
1169
|
+
var objectProto = Object.prototype;
|
1170
|
+
var hasOwnProperty = objectProto.hasOwnProperty;
|
1171
|
+
function baseKeysIn$1(object) {
|
1172
|
+
if (!isObject$3(object)) {
|
1173
|
+
return nativeKeysIn(object);
|
1174
|
+
}
|
1175
|
+
var isProto = isPrototype(object), result = [];
|
1176
|
+
for (var key in object) {
|
1177
|
+
if (!(key == "constructor" && (isProto || !hasOwnProperty.call(object, key)))) {
|
1178
|
+
result.push(key);
|
1179
|
+
}
|
1180
|
+
}
|
1181
|
+
return result;
|
1182
|
+
}
|
1183
|
+
var _baseKeysIn = baseKeysIn$1;
|
1184
|
+
var arrayLikeKeys = _arrayLikeKeys, baseKeysIn = _baseKeysIn, isArrayLike$1 = isArrayLike_1;
|
1185
|
+
function keysIn$2(object) {
|
1186
|
+
return isArrayLike$1(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
|
1187
|
+
}
|
1188
|
+
var keysIn_1 = keysIn$2;
|
1189
|
+
var copyObject = _copyObject, keysIn$1 = keysIn_1;
|
1190
|
+
function toPlainObject$1(value) {
|
1191
|
+
return copyObject(value, keysIn$1(value));
|
1192
|
+
}
|
1193
|
+
var toPlainObject_1 = toPlainObject$1;
|
1194
|
+
var assignMergeValue$1 = _assignMergeValue, cloneBuffer = _cloneBufferExports, cloneTypedArray = _cloneTypedArray, copyArray = _copyArray, initCloneObject = _initCloneObject, isArguments = isArguments_1, isArray = isArray_1, isArrayLikeObject = isArrayLikeObject_1, isBuffer = isBufferExports, isFunction = isFunction_1, isObject$2 = isObject_1, isPlainObject = isPlainObject_1, isTypedArray = isTypedArray_1, safeGet$1 = _safeGet, toPlainObject = toPlainObject_1;
|
1195
|
+
function baseMergeDeep$1(object, source, key, srcIndex, mergeFunc, customizer, stack) {
|
1196
|
+
var objValue = safeGet$1(object, key), srcValue = safeGet$1(source, key), stacked = stack.get(srcValue);
|
1197
|
+
if (stacked) {
|
1198
|
+
assignMergeValue$1(object, key, stacked);
|
1199
|
+
return;
|
1200
|
+
}
|
1201
|
+
var newValue = customizer ? customizer(objValue, srcValue, key + "", object, source, stack) : void 0;
|
1202
|
+
var isCommon = newValue === void 0;
|
1203
|
+
if (isCommon) {
|
1204
|
+
var isArr = isArray(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue);
|
1205
|
+
newValue = srcValue;
|
1206
|
+
if (isArr || isBuff || isTyped) {
|
1207
|
+
if (isArray(objValue)) {
|
1208
|
+
newValue = objValue;
|
1209
|
+
} else if (isArrayLikeObject(objValue)) {
|
1210
|
+
newValue = copyArray(objValue);
|
1211
|
+
} else if (isBuff) {
|
1212
|
+
isCommon = false;
|
1213
|
+
newValue = cloneBuffer(srcValue, true);
|
1214
|
+
} else if (isTyped) {
|
1215
|
+
isCommon = false;
|
1216
|
+
newValue = cloneTypedArray(srcValue, true);
|
1217
|
+
} else {
|
1218
|
+
newValue = [];
|
1219
|
+
}
|
1220
|
+
} else if (isPlainObject(srcValue) || isArguments(srcValue)) {
|
1221
|
+
newValue = objValue;
|
1222
|
+
if (isArguments(objValue)) {
|
1223
|
+
newValue = toPlainObject(objValue);
|
1224
|
+
} else if (!isObject$2(objValue) || isFunction(objValue)) {
|
1225
|
+
newValue = initCloneObject(srcValue);
|
1226
|
+
}
|
1227
|
+
} else {
|
1228
|
+
isCommon = false;
|
1229
|
+
}
|
1230
|
+
}
|
1231
|
+
if (isCommon) {
|
1232
|
+
stack.set(srcValue, newValue);
|
1233
|
+
mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
|
1234
|
+
stack["delete"](srcValue);
|
1235
|
+
}
|
1236
|
+
assignMergeValue$1(object, key, newValue);
|
1237
|
+
}
|
1238
|
+
var _baseMergeDeep = baseMergeDeep$1;
|
1239
|
+
var Stack = _Stack, assignMergeValue = _assignMergeValue, baseFor = _baseFor, baseMergeDeep = _baseMergeDeep, isObject$1 = isObject_1, keysIn = keysIn_1, safeGet = _safeGet;
|
1240
|
+
function baseMerge$1(object, source, srcIndex, customizer, stack) {
|
1241
|
+
if (object === source) {
|
1242
|
+
return;
|
1243
|
+
}
|
1244
|
+
baseFor(source, function(srcValue, key) {
|
1245
|
+
stack || (stack = new Stack());
|
1246
|
+
if (isObject$1(srcValue)) {
|
1247
|
+
baseMergeDeep(object, source, key, srcIndex, baseMerge$1, customizer, stack);
|
1248
|
+
} else {
|
1249
|
+
var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + "", object, source, stack) : void 0;
|
1250
|
+
if (newValue === void 0) {
|
1251
|
+
newValue = srcValue;
|
1252
|
+
}
|
1253
|
+
assignMergeValue(object, key, newValue);
|
1254
|
+
}
|
1255
|
+
}, keysIn);
|
1256
|
+
}
|
1257
|
+
var _baseMerge = baseMerge$1;
|
1258
|
+
function identity$2(value) {
|
1259
|
+
return value;
|
1260
|
+
}
|
1261
|
+
var identity_1 = identity$2;
|
1262
|
+
function apply$1(func, thisArg, args) {
|
1263
|
+
switch (args.length) {
|
1264
|
+
case 0:
|
1265
|
+
return func.call(thisArg);
|
1266
|
+
case 1:
|
1267
|
+
return func.call(thisArg, args[0]);
|
1268
|
+
case 2:
|
1269
|
+
return func.call(thisArg, args[0], args[1]);
|
1270
|
+
case 3:
|
1271
|
+
return func.call(thisArg, args[0], args[1], args[2]);
|
1272
|
+
}
|
1273
|
+
return func.apply(thisArg, args);
|
1274
|
+
}
|
1275
|
+
var _apply = apply$1;
|
1276
|
+
var apply = _apply;
|
1277
|
+
var nativeMax = Math.max;
|
1278
|
+
function overRest$1(func, start, transform) {
|
1279
|
+
start = nativeMax(start === void 0 ? func.length - 1 : start, 0);
|
1280
|
+
return function() {
|
1281
|
+
var args = arguments, index2 = -1, length = nativeMax(args.length - start, 0), array = Array(length);
|
1282
|
+
while (++index2 < length) {
|
1283
|
+
array[index2] = args[start + index2];
|
1284
|
+
}
|
1285
|
+
index2 = -1;
|
1286
|
+
var otherArgs = Array(start + 1);
|
1287
|
+
while (++index2 < start) {
|
1288
|
+
otherArgs[index2] = args[index2];
|
1289
|
+
}
|
1290
|
+
otherArgs[start] = transform(array);
|
1291
|
+
return apply(func, this, otherArgs);
|
1292
|
+
};
|
1293
|
+
}
|
1294
|
+
var _overRest = overRest$1;
|
1295
|
+
function constant$1(value) {
|
1296
|
+
return function() {
|
1297
|
+
return value;
|
1298
|
+
};
|
1299
|
+
}
|
1300
|
+
var constant_1 = constant$1;
|
1301
|
+
var constant = constant_1, defineProperty = _defineProperty, identity$1 = identity_1;
|
1302
|
+
var baseSetToString$1 = !defineProperty ? identity$1 : function(func, string) {
|
1303
|
+
return defineProperty(func, "toString", {
|
1304
|
+
"configurable": true,
|
1305
|
+
"enumerable": false,
|
1306
|
+
"value": constant(string),
|
1307
|
+
"writable": true
|
1308
|
+
});
|
1309
|
+
};
|
1310
|
+
var _baseSetToString = baseSetToString$1;
|
1311
|
+
var HOT_COUNT = 800, HOT_SPAN = 16;
|
1312
|
+
var nativeNow = Date.now;
|
1313
|
+
function shortOut$1(func) {
|
1314
|
+
var count = 0, lastCalled = 0;
|
1315
|
+
return function() {
|
1316
|
+
var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled);
|
1317
|
+
lastCalled = stamp;
|
1318
|
+
if (remaining > 0) {
|
1319
|
+
if (++count >= HOT_COUNT) {
|
1320
|
+
return arguments[0];
|
1321
|
+
}
|
1322
|
+
} else {
|
1323
|
+
count = 0;
|
1324
|
+
}
|
1325
|
+
return func.apply(void 0, arguments);
|
1326
|
+
};
|
1327
|
+
}
|
1328
|
+
var _shortOut = shortOut$1;
|
1329
|
+
var baseSetToString = _baseSetToString, shortOut = _shortOut;
|
1330
|
+
var setToString$1 = shortOut(baseSetToString);
|
1331
|
+
var _setToString = setToString$1;
|
1332
|
+
var identity = identity_1, overRest = _overRest, setToString = _setToString;
|
1333
|
+
function baseRest$1(func, start) {
|
1334
|
+
return setToString(overRest(func, start, identity), func + "");
|
1335
|
+
}
|
1336
|
+
var _baseRest = baseRest$1;
|
1337
|
+
var eq = eq_1, isArrayLike = isArrayLike_1, isIndex = _isIndex, isObject = isObject_1;
|
1338
|
+
function isIterateeCall$1(value, index2, object) {
|
1339
|
+
if (!isObject(object)) {
|
1340
|
+
return false;
|
1341
|
+
}
|
1342
|
+
var type = typeof index2;
|
1343
|
+
if (type == "number" ? isArrayLike(object) && isIndex(index2, object.length) : type == "string" && index2 in object) {
|
1344
|
+
return eq(object[index2], value);
|
1345
|
+
}
|
1346
|
+
return false;
|
1347
|
+
}
|
1348
|
+
var _isIterateeCall = isIterateeCall$1;
|
1349
|
+
var baseRest = _baseRest, isIterateeCall = _isIterateeCall;
|
1350
|
+
function createAssigner$1(assigner) {
|
1351
|
+
return baseRest(function(object, sources) {
|
1352
|
+
var index2 = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0;
|
1353
|
+
customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : void 0;
|
1354
|
+
if (guard && isIterateeCall(sources[0], sources[1], guard)) {
|
1355
|
+
customizer = length < 3 ? void 0 : customizer;
|
1356
|
+
length = 1;
|
1357
|
+
}
|
1358
|
+
object = Object(object);
|
1359
|
+
while (++index2 < length) {
|
1360
|
+
var source = sources[index2];
|
1361
|
+
if (source) {
|
1362
|
+
assigner(object, source, index2, customizer);
|
1363
|
+
}
|
1364
|
+
}
|
1365
|
+
return object;
|
1366
|
+
});
|
1367
|
+
}
|
1368
|
+
var _createAssigner = createAssigner$1;
|
1369
|
+
var baseMerge = _baseMerge, createAssigner = _createAssigner;
|
1370
|
+
createAssigner(function(object, source, srcIndex) {
|
1371
|
+
baseMerge(object, source, srcIndex);
|
1372
|
+
});
|
1373
|
+
const iterator = (input, visitor) => {
|
1374
|
+
if (Array.isArray(input)) {
|
1375
|
+
return input.map((el, index2) => iterator(visitor(index2, el), visitor));
|
1376
|
+
}
|
1377
|
+
if (typeof input === "object" && input) {
|
1378
|
+
return Object.entries(input).reduce((acc, [key, value]) => {
|
1379
|
+
acc[key] = iterator(visitor(key, value), visitor);
|
1380
|
+
return acc;
|
1381
|
+
}, {});
|
1382
|
+
}
|
1383
|
+
return input;
|
1384
|
+
};
|
1385
|
+
const isEmptyValue = (value) => !value && (value === null || value === void 0);
|
1386
|
+
const isValue = (value) => !isEmptyValue(value);
|
1387
|
+
const pick = (obj, ...props) => {
|
1388
|
+
return props.reduce((result, prop) => {
|
1389
|
+
result[prop] = obj[prop];
|
1390
|
+
return result;
|
1391
|
+
}, {});
|
1392
|
+
};
|
1393
|
+
function omit(obj, ...props) {
|
1394
|
+
const result = {
|
1395
|
+
...obj
|
1396
|
+
};
|
1397
|
+
props.forEach((prop) => {
|
1398
|
+
delete result[prop];
|
1399
|
+
});
|
1400
|
+
return result;
|
1401
|
+
}
|
1402
|
+
const set = (obj, path, value) => {
|
1403
|
+
const pathArray = Array.isArray(path) ? path : path.match(/([^[.\]])+/g);
|
1404
|
+
return pathArray.reduce((acc, key, i2) => {
|
1405
|
+
if (acc[key] === void 0)
|
1406
|
+
acc[key] = {};
|
1407
|
+
if (i2 === pathArray.length - 1)
|
1408
|
+
acc[key] = value;
|
1409
|
+
return acc[key];
|
1410
|
+
}, obj);
|
1411
|
+
};
|
1412
|
+
const hexToRgb = (hex) => {
|
1413
|
+
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
1414
|
+
return result ? {
|
1415
|
+
r: parseInt(result[1], 16),
|
1416
|
+
g: parseInt(result[2], 16),
|
1417
|
+
b: parseInt(result[3], 16)
|
1418
|
+
} : void 0;
|
1419
|
+
};
|
1420
|
+
const rgbToRgba = (rgb, alpha = 1) => rgb.replace(")", `, ${alpha})`).replace("rgb", "rgba");
|
1421
|
+
const devices = ["desktop", "laptop", "tablet", "mobile"];
|
1422
|
+
const BREAKPOINTS = {
|
1423
|
+
mobile: 320,
|
1424
|
+
tablet: 768,
|
1425
|
+
laptop: 1024,
|
1426
|
+
desktop: 1920
|
1427
|
+
};
|
1428
|
+
const isValidDeviceState = (state = {}) => typeof state === "object" && isValue(state) && devices.every((device) => device in state);
|
1429
|
+
const getDeviceState = (state, device = "desktop") => {
|
1430
|
+
if (!state)
|
1431
|
+
return {};
|
1432
|
+
return iterator(state, (_key, value) => {
|
1433
|
+
if (isValidDeviceState(value)) {
|
1434
|
+
return value[device];
|
1435
|
+
}
|
1436
|
+
return value;
|
1437
|
+
});
|
1438
|
+
};
|
1439
|
+
const useDeviceState = (state, device) => getDeviceState(state, device);
|
1440
|
+
const useContainerDevice = ({
|
1441
|
+
watchRef,
|
1442
|
+
breakpoints = BREAKPOINTS
|
1443
|
+
}) => {
|
1444
|
+
const [device, setDevice] = h("desktop");
|
1445
|
+
const checkDevice = (parent) => {
|
1446
|
+
var _a;
|
1447
|
+
const parentWidth = parent.getBoundingClientRect().width || 0;
|
1448
|
+
const findDevice = (_a = Object.entries(breakpoints).find(([, value]) => value >= parentWidth)) == null ? void 0 : _a[0];
|
1449
|
+
setDevice(findDevice);
|
1450
|
+
};
|
1451
|
+
y(() => {
|
1452
|
+
const parentElement = watchRef.current.parentElement;
|
1453
|
+
if (parentElement) {
|
1454
|
+
const resizeObserver = new ResizeObserver(() => checkDevice(parentElement));
|
1455
|
+
resizeObserver.observe(parentElement);
|
1456
|
+
checkDevice(parentElement);
|
1457
|
+
}
|
1458
|
+
}, []);
|
1459
|
+
return device;
|
1460
|
+
};
|
1461
|
+
const wrapTo = (value, until) => `${value}${until}`;
|
1462
|
+
const toPx = (key) => key.startsWith("px_");
|
1463
|
+
const toPercent = (key) => key.startsWith("percent_");
|
1464
|
+
const formatRule = (key, value) => {
|
1465
|
+
let newKey = key;
|
1466
|
+
let newValue = value;
|
1467
|
+
if (toPx(newKey)) {
|
1468
|
+
newKey = newKey.replace("px_", "");
|
1469
|
+
newValue = wrapTo(value, "px");
|
1470
|
+
}
|
1471
|
+
if (toPercent(newKey)) {
|
1472
|
+
newKey = newKey.replace("percent_", "");
|
1473
|
+
newValue = wrapTo(value, "%");
|
1474
|
+
}
|
1475
|
+
return {
|
1476
|
+
key: newKey,
|
1477
|
+
value: newValue
|
1478
|
+
};
|
1479
|
+
};
|
1480
|
+
const DEFAULT_TO_PX = ["borderWidth", "borderLeftWidth", "borderRightWidth", "borderTopWidth", "borderBottomWidth", "minHeight", "minWidth", "maxWidth", "maxHeight", "fontSize", "height", "width", "letterSpacing", "fontSize", "left", "right", "top", "bottom"];
|
1481
|
+
const parseRules = (rules, layer) => {
|
1482
|
+
const keys = Object.keys(rules);
|
1483
|
+
if (keys.includes("innerHTML") || keys.includes("innerText")) {
|
1484
|
+
console.warn(`Warning! InnerHTML and innerText is deprecated. Use "children" property.`, layer);
|
1485
|
+
}
|
1486
|
+
if (typeof rules !== "object") {
|
1487
|
+
return rules;
|
1488
|
+
}
|
1489
|
+
if ("typography" in rules && "accentTypography" in rules) {
|
1490
|
+
const typography = rules.typography;
|
1491
|
+
const accentTypography = rules.accentTypography;
|
1492
|
+
rules = {
|
1493
|
+
...rules,
|
1494
|
+
...typography,
|
1495
|
+
"--accent-color": accentTypography.color,
|
1496
|
+
"px_--accent-size": accentTypography.fontSize
|
1497
|
+
};
|
1498
|
+
}
|
1499
|
+
return Object.entries(rules).reduce((acc, [propKey, propValue]) => {
|
1500
|
+
if (DEFAULT_TO_PX.includes(propKey)) {
|
1501
|
+
propValue = wrapTo(propValue, "px");
|
1502
|
+
}
|
1503
|
+
const {
|
1504
|
+
key,
|
1505
|
+
value
|
1506
|
+
} = formatRule(propKey, propValue);
|
1507
|
+
acc[key] = value;
|
1508
|
+
if (key === "innerHTML") {
|
1509
|
+
acc.innerHTML = isValue(value) ? `${value}` : "";
|
1510
|
+
}
|
1511
|
+
if (key === "innerText") {
|
1512
|
+
acc.innerText = isValue(value) ? `${value}` : "";
|
1513
|
+
}
|
1514
|
+
if (key === "children") {
|
1515
|
+
acc.children = typeof value === "string" ? isValue(value) ? `${value}` : "" : value;
|
1516
|
+
}
|
1517
|
+
if (key === "innerHTML" || key === "innerText" || key === "children" && typeof value === "string") {
|
1518
|
+
if (propValue.length === 0) {
|
1519
|
+
acc.display = "none";
|
1520
|
+
}
|
1521
|
+
}
|
1522
|
+
if (key.includes("borderWidth")) {
|
1523
|
+
acc.borderStyle = "solid";
|
1524
|
+
}
|
1525
|
+
if (key === "corner") {
|
1526
|
+
acc.borderRadius = wrapTo(value, "px");
|
1527
|
+
}
|
1528
|
+
if (key === "backgroundFit") {
|
1529
|
+
acc.backgroundSize = value;
|
1530
|
+
}
|
1531
|
+
if (key === "backgroundImage") {
|
1532
|
+
acc.backgroundImage = `url(${value})`;
|
1533
|
+
acc.backgroundRepeat = "no-repeat";
|
1534
|
+
}
|
1535
|
+
if (key === "backgroundColorOpacity" && isValue(acc.backgroundColorOpacity) && isValue(acc.backgroundColor)) {
|
1536
|
+
const rgb = hexToRgb(acc.backgroundColor);
|
1537
|
+
if (rgb) {
|
1538
|
+
acc.backgroundColor = rgbToRgba(`rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`, +acc.backgroundColorOpacity / 100);
|
1539
|
+
}
|
1540
|
+
}
|
1541
|
+
if (key === "isBold") {
|
1542
|
+
acc.fontWeight = value ? "bold" : "initial";
|
1543
|
+
}
|
1544
|
+
if (key === "isItalic") {
|
1545
|
+
acc.fontStyle = value ? "italic" : "initial";
|
1546
|
+
}
|
1547
|
+
if (key === "isThrough") {
|
1548
|
+
acc.textDecoration = value ? "line-through" : "initial";
|
1549
|
+
}
|
1550
|
+
return acc;
|
1551
|
+
}, rules);
|
1552
|
+
};
|
1553
|
+
const isValidRule = (rule) => typeof rule === "object" && !Array.isArray(rule) && "parent" in rule;
|
1554
|
+
const useParseRules = (state) => Object.entries(state).reduce((acc, [layer, rule]) => {
|
1555
|
+
acc[layer] = isValidRule(rule) ? parseRules({
|
1556
|
+
...state[layer]
|
1557
|
+
}, layer) : rule;
|
1558
|
+
return acc;
|
1559
|
+
}, {});
|
1560
|
+
const DisplayText = ({
|
1561
|
+
children,
|
1562
|
+
...rest
|
1563
|
+
}) => {
|
1564
|
+
var _a;
|
1565
|
+
const formatValue = (_a = children == null ? void 0 : children.replace("script", "")) == null ? void 0 : _a.replace(/{{(.*?)}}/g, `<span>$1</span>`);
|
1566
|
+
return o("div", {
|
1567
|
+
...rest,
|
1568
|
+
dangerouslySetInnerHTML: {
|
1569
|
+
__html: formatValue
|
1570
|
+
}
|
1571
|
+
});
|
1572
|
+
};
|
1573
|
+
const useToggle = () => {
|
1574
|
+
const [isOpen, setIsOpen] = h(false);
|
1575
|
+
return [isOpen, () => setIsOpen((prev) => !prev)];
|
1576
|
+
};
|
1577
|
+
const CloseIcon = () => o("svg", {
|
1578
|
+
xmlns: "http://www.w3.org/2000/svg",
|
1579
|
+
width: "20",
|
1580
|
+
height: "20",
|
1581
|
+
viewBox: "0 0 24 24",
|
1582
|
+
children: o("path", {
|
1583
|
+
d: "M17.659 4.929a1 1 0 1 1 1.414 1.414L13.416 12l5.657 5.657a1 1 0 0 1-1.415 1.414l-5.656-5.657-5.657 5.657a1 1 0 0 1-1.414-1.414L10.587 12 4.931 6.343A1 1 0 1 1 6.345 4.93l5.657 5.657 5.656-5.657Z",
|
1584
|
+
fill: "currentColor"
|
1585
|
+
})
|
1586
|
+
});
|
1587
|
+
const GiftIcon = () => o("svg", {
|
1588
|
+
viewBox: "0 0 16 16",
|
1589
|
+
children: o("path", {
|
1590
|
+
fill: "currentColor",
|
1591
|
+
fillRule: "evenodd",
|
1592
|
+
d: "M2.13 8H7v7.31H3.22a1.09 1.09 0 01-1.09-1.09zM9 15.34h3.81a1.09 1.09 0 001.09-1.09V8H9zm5.8-9.94v1.19a.48.48 0 01-.48.48H1.71a.48.48 0 01-.48-.48V5.4c0-.596.484-1.08 1.08-1.08H5a2.48 2.48 0 01-1.47-1.65 1.62 1.62 0 01.26-1.4 1.57 1.57 0 011-.58c.11-.01.22-.01.33 0a2.5 2.5 0 012 1A9 9 0 018 3.22a10.38 10.38 0 01.91-1.54 2.49 2.49 0 011.93-1h.36c.369.065.702.26.94.55.31.407.414.936.28 1.43a2.48 2.48 0 01-1.45 1.64h2.77a1.08 1.08 0 011.03 1.1zM8.66 4a9.81 9.81 0 001.9-.55 1.52 1.52 0 00.88-1 .68.68 0 00-.1-.59.6.6 0 00-.34-.22.58.58 0 00-.18 0 1.52 1.52 0 00-1.17.63A9.06 9.06 0 008.66 4zm-3.32-.58A9.62 9.62 0 007.25 4a8.59 8.59 0 00-1-1.72 1.51 1.51 0 00-1.18-.63h-.13a.66.66 0 00-.39.22.66.66 0 00-.09.57c.13.443.453.804.88.98z"
|
1593
|
+
})
|
1594
|
+
});
|
1595
|
+
const SimpleGift = () => {
|
1596
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
|
1597
|
+
const rootRef = _$1(null);
|
1598
|
+
const [legalIsOpen, toggleLegalIsOpen] = useToggle();
|
1599
|
+
const {
|
1600
|
+
isOpen,
|
1601
|
+
onToggle
|
1602
|
+
} = useGiftOpen();
|
1603
|
+
const state = useCurrentState();
|
1604
|
+
const device = useContainerDevice({
|
1605
|
+
watchRef: rootRef
|
1606
|
+
});
|
1607
|
+
const deviceState = useDeviceState(state, device);
|
1608
|
+
const rules = useParseRules(deviceState);
|
1609
|
+
const hasIcon = (_a = rules == null ? void 0 : rules.icon) == null ? void 0 : _a.hasIcon;
|
1610
|
+
const arrowRules = {
|
1611
|
+
left: `${+(((_b = deviceState == null ? void 0 : deviceState.container) == null ? void 0 : _b.left) || 0) * -1 + 8}px`,
|
1612
|
+
backgroundColor: (_c = rules == null ? void 0 : rules.container) == null ? void 0 : _c.backgroundColor,
|
1613
|
+
borderTopWidth: (_d = rules == null ? void 0 : rules.container) == null ? void 0 : _d.borderWidth,
|
1614
|
+
borderTopColor: (_e = rules == null ? void 0 : rules.container) == null ? void 0 : _e.borderColor,
|
1615
|
+
borderTopStyle: "solid",
|
1616
|
+
borderLeftWidth: (_f = rules == null ? void 0 : rules.container) == null ? void 0 : _f.borderWidth,
|
1617
|
+
borderLeftColor: (_g = rules == null ? void 0 : rules.container) == null ? void 0 : _g.borderColor,
|
1618
|
+
borderLeftStyle: "solid"
|
1619
|
+
};
|
1620
|
+
const bodyRules = {
|
1621
|
+
left: (_h = rules == null ? void 0 : rules.container) == null ? void 0 : _h.left
|
1622
|
+
};
|
1623
|
+
return o("div", {
|
1624
|
+
className: styles$d.root,
|
1625
|
+
ref: rootRef,
|
1626
|
+
children: [o("div", {
|
1627
|
+
className: styles$d.icon,
|
1628
|
+
style: rules.icon,
|
1629
|
+
onClick: onToggle,
|
1630
|
+
children: hasIcon && o("div", {
|
1631
|
+
className: styles$d.iconTarget,
|
1632
|
+
children: o(GiftIcon, {})
|
1633
|
+
})
|
1634
|
+
}), o("div", {
|
1635
|
+
className: classNames(styles$d.body, {
|
1636
|
+
[styles$d.bodyOpen]: isOpen
|
1637
|
+
}),
|
1638
|
+
style: bodyRules,
|
1639
|
+
children: [o("div", {
|
1640
|
+
className: styles$d.arrow,
|
1641
|
+
style: arrowRules
|
1642
|
+
}), o("div", {
|
1643
|
+
className: styles$d.close,
|
1644
|
+
style: rules.close,
|
1645
|
+
onClick: onToggle,
|
1646
|
+
children: o(CloseIcon, {})
|
1647
|
+
}), o("div", {
|
1648
|
+
className: styles$d.container,
|
1649
|
+
style: rules.container,
|
1650
|
+
children: [o("a", {
|
1651
|
+
href: (_i = rules.root) == null ? void 0 : _i.offer,
|
1652
|
+
target: "_blank",
|
1653
|
+
rel: "nofollow noopener noreferrer",
|
1654
|
+
className: "simpleGift-body__offer",
|
1655
|
+
"data-layer": "offer",
|
1656
|
+
children: [o("div", {
|
1657
|
+
className: styles$d.inner,
|
1658
|
+
children: [o("div", {
|
1659
|
+
className: styles$d.logo,
|
1660
|
+
style: rules.logo
|
1661
|
+
}), o(DisplayText, {
|
1662
|
+
className: styles$d.text,
|
1663
|
+
style: rules.text,
|
1664
|
+
children: (_j = rules == null ? void 0 : rules.text) == null ? void 0 : _j.children
|
1665
|
+
})]
|
1666
|
+
}), o("div", {
|
1667
|
+
className: styles$d.button,
|
1668
|
+
style: rules.button,
|
1669
|
+
children: (_k = rules.button) == null ? void 0 : _k.children
|
1670
|
+
})]
|
1671
|
+
}), o("div", {
|
1672
|
+
className: classNames(styles$d.legal, {
|
1673
|
+
[styles$d.legalOpen]: legalIsOpen
|
1674
|
+
}),
|
1675
|
+
style: rules.legal,
|
1676
|
+
children: o("span", {
|
1677
|
+
className: styles$d.legalText,
|
1678
|
+
children: [o("span", {
|
1679
|
+
children: (_l = rules == null ? void 0 : rules.legal) == null ? void 0 : _l.children
|
1680
|
+
}), o("span", {
|
1681
|
+
className: styles$d.legalButton,
|
1682
|
+
onClick: toggleLegalIsOpen,
|
1683
|
+
children: legalIsOpen ? (_m = rules == null ? void 0 : rules.legal) == null ? void 0 : _m.buttonOpenText : (_n = rules == null ? void 0 : rules.legal) == null ? void 0 : _n.buttonHideText
|
1684
|
+
})]
|
1685
|
+
})
|
1686
|
+
})]
|
1687
|
+
})]
|
1688
|
+
})]
|
1689
|
+
});
|
1690
|
+
};
|
1691
|
+
const index$6 = render(o(SimpleGift, {}));
|
1692
|
+
const root$c = "_root_qnzzi_1";
|
1693
|
+
const icon = "_icon_qnzzi_5";
|
1694
|
+
const iconTarget = "_iconTarget_qnzzi_17";
|
1695
|
+
const body$5 = "_body_qnzzi_22";
|
1696
|
+
const bodyOpen = "_bodyOpen_qnzzi_30";
|
1697
|
+
const complexGift_in = "_complexGift_in_qnzzi_1";
|
1698
|
+
const arrow = "_arrow_qnzzi_43";
|
1699
|
+
const container$1 = "_container_qnzzi_53";
|
1700
|
+
const promotion$1 = "_promotion_qnzzi_58";
|
1701
|
+
const close = "_close_qnzzi_66";
|
1702
|
+
const head$1 = "_head_qnzzi_80";
|
1703
|
+
const headIcon = "_headIcon_qnzzi_87";
|
1704
|
+
const headTitle = "_headTitle_qnzzi_93";
|
1705
|
+
const inner = "_inner_qnzzi_100";
|
1706
|
+
const fadein = "_fadein_qnzzi_1";
|
1707
|
+
const pulse = "_pulse_qnzzi_1";
|
1708
|
+
const gradient = "_gradient_qnzzi_1";
|
1709
|
+
const wiggle = "_wiggle_qnzzi_1";
|
1710
|
+
const styles$c = {
|
1711
|
+
root: root$c,
|
1712
|
+
icon,
|
1713
|
+
iconTarget,
|
1714
|
+
body: body$5,
|
1715
|
+
bodyOpen,
|
1716
|
+
complexGift_in,
|
1717
|
+
arrow,
|
1718
|
+
container: container$1,
|
1719
|
+
promotion: promotion$1,
|
1720
|
+
close,
|
1721
|
+
head: head$1,
|
1722
|
+
headIcon,
|
1723
|
+
headTitle,
|
1724
|
+
inner,
|
1725
|
+
fadein,
|
1726
|
+
pulse,
|
1727
|
+
gradient,
|
1728
|
+
wiggle
|
1729
|
+
};
|
1730
|
+
const root$b = "_root_rwvas_1";
|
1731
|
+
const body$4 = "_body_rwvas_30";
|
1732
|
+
const line = "_line_rwvas_37";
|
1733
|
+
const text$3 = "_text_rwvas_47";
|
1734
|
+
const button$5 = "_button_rwvas_61";
|
1735
|
+
const logo$5 = "_logo_rwvas_73";
|
1736
|
+
const variant2$1 = "_variant2_rwvas_79";
|
1737
|
+
const buttonText = "_buttonText_rwvas_83";
|
1738
|
+
const legal$4 = "_legal_rwvas_99";
|
1739
|
+
const styles$b = {
|
1740
|
+
root: root$b,
|
1741
|
+
body: body$4,
|
1742
|
+
line,
|
1743
|
+
text: text$3,
|
1744
|
+
button: button$5,
|
1745
|
+
logo: logo$5,
|
1746
|
+
variant2: variant2$1,
|
1747
|
+
buttonText,
|
1748
|
+
legal: legal$4
|
1749
|
+
};
|
1750
|
+
const BonusCard$1 = () => {
|
1751
|
+
var _a, _b, _c, _d, _e;
|
1752
|
+
const state = useCurrentState();
|
1753
|
+
const rules = useParseRules(state);
|
1754
|
+
return o("a", {
|
1755
|
+
href: (_a = rules.root) == null ? void 0 : _a.offer,
|
1756
|
+
target: "_blank",
|
1757
|
+
rel: "nofollow noopener noreferrer",
|
1758
|
+
className: classNames(styles$b.root, {
|
1759
|
+
[styles$b.variant2]: ((_b = rules.root) == null ? void 0 : _b.variant) === "variant2"
|
1760
|
+
}),
|
1761
|
+
style: rules.root,
|
1762
|
+
children: [o("div", {
|
1763
|
+
className: styles$b.body,
|
1764
|
+
children: [o("div", {
|
1765
|
+
className: styles$b.logo,
|
1766
|
+
style: rules.logo
|
1767
|
+
}), o("div", {
|
1768
|
+
className: styles$b.line,
|
1769
|
+
style: rules.line
|
1770
|
+
}), o("div", {
|
1771
|
+
className: styles$b.text,
|
1772
|
+
style: rules.text,
|
1773
|
+
children: o(DisplayText, {
|
1774
|
+
children: (_c = rules.text) == null ? void 0 : _c.children
|
1775
|
+
})
|
1776
|
+
}), o("div", {
|
1777
|
+
className: styles$b.button,
|
1778
|
+
style: rules.button,
|
1779
|
+
children: [o("div", {
|
1780
|
+
className: styles$b.logo,
|
1781
|
+
style: rules.logo
|
1782
|
+
}), o("div", {
|
1783
|
+
className: styles$b.buttonText,
|
1784
|
+
children: (_d = rules.button) == null ? void 0 : _d.children
|
1785
|
+
})]
|
1786
|
+
})]
|
1787
|
+
}), o("div", {
|
1788
|
+
className: styles$b.legal,
|
1789
|
+
style: rules.legal,
|
1790
|
+
children: (_e = rules.legal) == null ? void 0 : _e.children
|
1791
|
+
})]
|
1792
|
+
});
|
1793
|
+
};
|
1794
|
+
const ComplexGift = () => {
|
1795
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
1796
|
+
const rootRef = _$1(null);
|
1797
|
+
const {
|
1798
|
+
isOpen,
|
1799
|
+
onToggle
|
1800
|
+
} = useGiftOpen();
|
1801
|
+
const state = useCurrentState();
|
1802
|
+
const device = useContainerDevice({
|
1803
|
+
watchRef: rootRef
|
1804
|
+
});
|
1805
|
+
const deviceState = useDeviceState(state, device);
|
1806
|
+
const rules = useParseRules(deviceState);
|
1807
|
+
const hasIcon = (_a = rules == null ? void 0 : rules.icon) == null ? void 0 : _a.hasIcon;
|
1808
|
+
const arrowRules = {
|
1809
|
+
left: `${+(((_b = deviceState == null ? void 0 : deviceState.container) == null ? void 0 : _b.left) || 0) * -1 + 8}px`,
|
1810
|
+
backgroundColor: (_c = rules == null ? void 0 : rules.container) == null ? void 0 : _c.backgroundColor,
|
1811
|
+
borderTopWidth: (_d = rules == null ? void 0 : rules.container) == null ? void 0 : _d.borderWidth,
|
1812
|
+
borderTopColor: (_e = rules == null ? void 0 : rules.container) == null ? void 0 : _e.borderColor,
|
1813
|
+
borderTopStyle: "solid",
|
1814
|
+
borderLeftWidth: (_f = rules == null ? void 0 : rules.container) == null ? void 0 : _f.borderWidth,
|
1815
|
+
borderLeftColor: (_g = rules == null ? void 0 : rules.container) == null ? void 0 : _g.borderColor,
|
1816
|
+
borderLeftStyle: "solid"
|
1817
|
+
};
|
1818
|
+
const bodyRules = {
|
1819
|
+
left: (_h = rules == null ? void 0 : rules.container) == null ? void 0 : _h.left
|
1820
|
+
};
|
1821
|
+
return o("div", {
|
1822
|
+
ref: rootRef,
|
1823
|
+
className: styles$c.root,
|
1824
|
+
children: [o("div", {
|
1825
|
+
className: styles$c.icon,
|
1826
|
+
style: rules.icon,
|
1827
|
+
onClick: onToggle,
|
1828
|
+
children: hasIcon && o("div", {
|
1829
|
+
className: styles$c.iconTarget,
|
1830
|
+
children: o(GiftIcon, {})
|
1831
|
+
})
|
1832
|
+
}), o("div", {
|
1833
|
+
className: classNames(styles$c.body, {
|
1834
|
+
[styles$c.bodyOpen]: isOpen
|
1835
|
+
}),
|
1836
|
+
style: bodyRules,
|
1837
|
+
children: [o("div", {
|
1838
|
+
className: styles$c.arrow,
|
1839
|
+
style: arrowRules
|
1840
|
+
}), o("div", {
|
1841
|
+
className: styles$c.container,
|
1842
|
+
style: rules.container,
|
1843
|
+
children: [o("div", {
|
1844
|
+
className: styles$c.close,
|
1845
|
+
style: rules.close,
|
1846
|
+
onClick: onToggle,
|
1847
|
+
children: o(CloseIcon, {})
|
1848
|
+
}), o("div", {
|
1849
|
+
className: styles$c.promotion,
|
1850
|
+
style: rules.promotion,
|
1851
|
+
children: (_i = rules.promotion) == null ? void 0 : _i.children
|
1852
|
+
}), o("div", {
|
1853
|
+
className: styles$c.head,
|
1854
|
+
children: [o("div", {
|
1855
|
+
className: styles$c.headIcon,
|
1856
|
+
children: o(GiftIcon, {})
|
1857
|
+
}), o("div", {
|
1858
|
+
className: styles$c.headTitle,
|
1859
|
+
style: rules.title,
|
1860
|
+
children: (_j = rules.title) == null ? void 0 : _j.children
|
1861
|
+
})]
|
1862
|
+
}), o("div", {
|
1863
|
+
className: styles$c.inner,
|
1864
|
+
children: (rules.children || []).map((child) => o(StateContext, {
|
1865
|
+
value: child,
|
1866
|
+
children: o(BonusCard$1, {})
|
1867
|
+
}))
|
1868
|
+
})]
|
1869
|
+
})]
|
1870
|
+
})]
|
1871
|
+
});
|
1872
|
+
};
|
1873
|
+
const index$5 = render(o(ComplexGift, {}));
|
1874
|
+
const root$a = "_root_15ve9_1";
|
1875
|
+
const laptop$3 = "_laptop_15ve9_10";
|
1876
|
+
const tablet$2 = "_tablet_15ve9_10";
|
1877
|
+
const desktop$7 = "_desktop_15ve9_15";
|
1878
|
+
const body$3 = "_body_15ve9_20";
|
1879
|
+
const logo$4 = "_logo_15ve9_32";
|
1880
|
+
const text$2 = "_text_15ve9_38";
|
1881
|
+
const button$4 = "_button_15ve9_42";
|
1882
|
+
const legal$3 = "_legal_15ve9_58";
|
1883
|
+
const styles$a = {
|
1884
|
+
root: root$a,
|
1885
|
+
laptop: laptop$3,
|
1886
|
+
tablet: tablet$2,
|
1887
|
+
desktop: desktop$7,
|
1888
|
+
body: body$3,
|
1889
|
+
logo: logo$4,
|
1890
|
+
text: text$2,
|
1891
|
+
button: button$4,
|
1892
|
+
legal: legal$3
|
1893
|
+
};
|
1894
|
+
const switchTextAlignToFlex = (textAlign) => textAlign ? {
|
1895
|
+
left: "flex-start",
|
1896
|
+
center: "center",
|
1897
|
+
right: "flex-end"
|
1898
|
+
}[textAlign] : textAlign;
|
1899
|
+
const root$9 = "_root_otuq1_1";
|
1900
|
+
const styles$9 = {
|
1901
|
+
root: root$9
|
1902
|
+
};
|
1903
|
+
const Line = () => {
|
1904
|
+
var _a;
|
1905
|
+
const state = useCurrentState();
|
1906
|
+
const rules = useParseRules(state);
|
1907
|
+
return o("div", {
|
1908
|
+
className: styles$9.root,
|
1909
|
+
style: rules.root,
|
1910
|
+
children: o(DisplayText, {
|
1911
|
+
children: (_a = rules == null ? void 0 : rules.root) == null ? void 0 : _a.children
|
1912
|
+
})
|
1913
|
+
});
|
1914
|
+
};
|
1915
|
+
const SimplePopup$2 = () => {
|
1916
|
+
var _a, _b, _c, _d, _e, _f;
|
1917
|
+
const rootRef = _$1(null);
|
1918
|
+
const device = useContainerDevice({
|
1919
|
+
watchRef: rootRef
|
1920
|
+
});
|
1921
|
+
const state = useCurrentState();
|
1922
|
+
const deviceState = useDeviceState(state, device);
|
1923
|
+
set(deviceState, "button.percent_width", (_a = deviceState == null ? void 0 : deviceState.button) == null ? void 0 : _a.width);
|
1924
|
+
set(deviceState, "legal.percent_width", (_b = deviceState == null ? void 0 : deviceState.legal) == null ? void 0 : _b.width);
|
1925
|
+
const rules = useParseRules(deviceState);
|
1926
|
+
const bodyRules = {
|
1927
|
+
alignItems: switchTextAlignToFlex((_c = rules.root) == null ? void 0 : _c.align)
|
1928
|
+
};
|
1929
|
+
const buttonRules = {
|
1930
|
+
...rules == null ? void 0 : rules.button,
|
1931
|
+
justifyContent: switchTextAlignToFlex((_d = rules.root) == null ? void 0 : _d.textAlign)
|
1932
|
+
};
|
1933
|
+
const legalRules = {
|
1934
|
+
...rules == null ? void 0 : rules.legal,
|
1935
|
+
justifyContent: switchTextAlignToFlex((_e = rules.root) == null ? void 0 : _e.textAlign)
|
1936
|
+
};
|
1937
|
+
return o("a", {
|
1938
|
+
ref: rootRef,
|
1939
|
+
href: (_f = rules.root) == null ? void 0 : _f.offer,
|
1940
|
+
target: "_blank",
|
1941
|
+
rel: "nofollow noopener noreferrer",
|
1942
|
+
className: classNames(styles$a.root, {
|
1943
|
+
[styles$a.desktop]: device === "desktop",
|
1944
|
+
[styles$a.tablet]: device === "tablet",
|
1945
|
+
[styles$a.laptop]: device === "laptop"
|
1946
|
+
}),
|
1947
|
+
style: rules.root,
|
1948
|
+
children: o("div", {
|
1949
|
+
className: styles$a.body,
|
1950
|
+
style: bodyRules,
|
1951
|
+
children: [o("div", {
|
1952
|
+
className: styles$a.logo,
|
1953
|
+
style: rules.logo
|
1954
|
+
}), o("div", {
|
1955
|
+
className: styles$a.text,
|
1956
|
+
children: ((rules == null ? void 0 : rules.content) || []).map((el) => o(StateContext, {
|
1957
|
+
value: el,
|
1958
|
+
children: o(Line, {})
|
1959
|
+
}))
|
1960
|
+
}), o("div", {
|
1961
|
+
className: styles$a.button,
|
1962
|
+
style: buttonRules,
|
1963
|
+
children: buttonRules == null ? void 0 : buttonRules.children
|
1964
|
+
}), o("div", {
|
1965
|
+
className: styles$a.legal,
|
1966
|
+
style: legalRules,
|
1967
|
+
children: legalRules == null ? void 0 : legalRules.children
|
1968
|
+
})]
|
1969
|
+
})
|
1970
|
+
});
|
1971
|
+
};
|
1972
|
+
const index$4 = render(o(SimplePopup$2, {}));
|
1973
|
+
const root$8 = "_root_1q3m6_1";
|
1974
|
+
const desktop$6 = "_desktop_1q3m6_9";
|
1975
|
+
const content$1 = "_content_1q3m6_13";
|
1976
|
+
const title$2 = "_title_1q3m6_24";
|
1977
|
+
const wrapper$1 = "_wrapper_1q3m6_39";
|
1978
|
+
const styles$8 = {
|
1979
|
+
root: root$8,
|
1980
|
+
desktop: desktop$6,
|
1981
|
+
content: content$1,
|
1982
|
+
title: title$2,
|
1983
|
+
wrapper: wrapper$1
|
1984
|
+
};
|
1985
|
+
const root$7 = "_root_6a4bh_1";
|
1986
|
+
const desktop$5 = "_desktop_6a4bh_10";
|
1987
|
+
const header = "_header_6a4bh_14";
|
1988
|
+
const logo$3 = "_logo_6a4bh_25";
|
1989
|
+
const container = "_container_6a4bh_31";
|
1990
|
+
const body$2 = "_body_6a4bh_42";
|
1991
|
+
const text$1 = "_text_6a4bh_59";
|
1992
|
+
const button$3 = "_button_6a4bh_80";
|
1993
|
+
const legal$2 = "_legal_6a4bh_100";
|
1994
|
+
const styles$7 = {
|
1995
|
+
root: root$7,
|
1996
|
+
desktop: desktop$5,
|
1997
|
+
header,
|
1998
|
+
logo: logo$3,
|
1999
|
+
container,
|
2000
|
+
body: body$2,
|
2001
|
+
text: text$1,
|
2002
|
+
button: button$3,
|
2003
|
+
legal: legal$2
|
2004
|
+
};
|
2005
|
+
const Bonus$1 = () => {
|
2006
|
+
var _a, _b, _c, _d;
|
2007
|
+
const state = useCurrentState();
|
2008
|
+
const rules = useParseRules(state);
|
2009
|
+
const device = (state == null ? void 0 : state.device) || "desktop";
|
2010
|
+
return o("a", {
|
2011
|
+
href: (_a = rules.root) == null ? void 0 : _a.offer,
|
2012
|
+
target: "_blank",
|
2013
|
+
rel: "nofollow noopener noreferrer",
|
2014
|
+
className: classNames(styles$7.root, {
|
2015
|
+
[styles$7.desktop]: device === "desktop"
|
2016
|
+
}),
|
2017
|
+
style: rules.root,
|
2018
|
+
children: [o("div", {
|
2019
|
+
className: styles$7.header,
|
2020
|
+
style: rules.header,
|
2021
|
+
children: o("div", {
|
2022
|
+
className: styles$7.logo,
|
2023
|
+
style: rules.logo
|
2024
|
+
})
|
2025
|
+
}), o("div", {
|
2026
|
+
className: styles$7.container,
|
2027
|
+
children: [o("div", {
|
2028
|
+
className: styles$7.body,
|
2029
|
+
children: [o("div", {
|
2030
|
+
className: styles$7.logo
|
2031
|
+
}), o(DisplayText, {
|
2032
|
+
className: styles$7.text,
|
2033
|
+
style: rules.text,
|
2034
|
+
children: (_b = rules.text) == null ? void 0 : _b.children
|
2035
|
+
})]
|
2036
|
+
}), o("div", {
|
2037
|
+
children: [o("div", {
|
2038
|
+
className: styles$7.button,
|
2039
|
+
style: rules.button,
|
2040
|
+
children: (_c = rules.button) == null ? void 0 : _c.children
|
2041
|
+
}), o("div", {
|
2042
|
+
className: styles$7.legal,
|
2043
|
+
style: rules.legal,
|
2044
|
+
children: (_d = rules.legal) == null ? void 0 : _d.children
|
2045
|
+
})]
|
2046
|
+
})]
|
2047
|
+
})]
|
2048
|
+
});
|
2049
|
+
};
|
2050
|
+
const SimplePopup$1 = () => {
|
2051
|
+
var _a;
|
2052
|
+
const rootRef = _$1(null);
|
2053
|
+
const device = useContainerDevice({
|
2054
|
+
watchRef: rootRef
|
2055
|
+
});
|
2056
|
+
const state = useCurrentState();
|
2057
|
+
const deviceState = useDeviceState(state, device);
|
2058
|
+
const rules = useParseRules(deviceState);
|
2059
|
+
return o("div", {
|
2060
|
+
ref: rootRef,
|
2061
|
+
className: classNames(styles$8.root, {
|
2062
|
+
[styles$8.desktop]: device === "desktop"
|
2063
|
+
}),
|
2064
|
+
style: rules.root,
|
2065
|
+
children: o("div", {
|
2066
|
+
className: styles$8.content,
|
2067
|
+
children: [o("div", {
|
2068
|
+
className: styles$8.title,
|
2069
|
+
style: rules.title,
|
2070
|
+
children: (_a = rules.title) == null ? void 0 : _a.children
|
2071
|
+
}), o("div", {
|
2072
|
+
className: styles$8.wrapper,
|
2073
|
+
children: (rules.children || []).map((child) => o(StateContext, {
|
2074
|
+
value: {
|
2075
|
+
...child,
|
2076
|
+
device
|
2077
|
+
},
|
2078
|
+
children: o(Bonus$1, {})
|
2079
|
+
}))
|
2080
|
+
})]
|
2081
|
+
})
|
2082
|
+
});
|
2083
|
+
};
|
2084
|
+
const index$3 = render(o(SimplePopup$1, {}));
|
2085
|
+
const root$6 = "_root_q9549_1";
|
2086
|
+
const laptop$2 = "_laptop_q9549_11";
|
2087
|
+
const tablet$1 = "_tablet_q9549_12";
|
2088
|
+
const desktop$4 = "_desktop_q9549_17";
|
2089
|
+
const body$1 = "_body_q9549_22";
|
2090
|
+
const head = "_head_q9549_34";
|
2091
|
+
const title$1 = "_title_q9549_44";
|
2092
|
+
const logo$2 = "_logo_q9549_57";
|
2093
|
+
const wrapper = "_wrapper_q9549_63";
|
2094
|
+
const text = "_text_q9549_70";
|
2095
|
+
const button$2 = "_button_q9549_83";
|
2096
|
+
const buttonHead = "_buttonHead_q9549_98";
|
2097
|
+
const buttonTarget = "_buttonTarget_q9549_117";
|
2098
|
+
const legal$1 = "_legal_q9549_133";
|
2099
|
+
const styles$6 = {
|
2100
|
+
root: root$6,
|
2101
|
+
laptop: laptop$2,
|
2102
|
+
tablet: tablet$1,
|
2103
|
+
desktop: desktop$4,
|
2104
|
+
body: body$1,
|
2105
|
+
head,
|
2106
|
+
title: title$1,
|
2107
|
+
logo: logo$2,
|
2108
|
+
wrapper,
|
2109
|
+
text,
|
2110
|
+
button: button$2,
|
2111
|
+
buttonHead,
|
2112
|
+
buttonTarget,
|
2113
|
+
legal: legal$1
|
2114
|
+
};
|
2115
|
+
const root$5 = "_root_1ew5t_1";
|
2116
|
+
const left$1 = "_left_1ew5t_8";
|
2117
|
+
const desktop$3 = "_desktop_1ew5t_15";
|
2118
|
+
const teams = "_teams_1ew5t_19";
|
2119
|
+
const logo$1 = "_logo_1ew5t_25";
|
2120
|
+
const league = "_league_1ew5t_31";
|
2121
|
+
const name = "_name_1ew5t_36";
|
2122
|
+
const right$1 = "_right_1ew5t_42";
|
2123
|
+
const odd$1 = "_odd_1ew5t_53";
|
2124
|
+
const oddLabel$1 = "_oddLabel_1ew5t_64";
|
2125
|
+
const oddValue = "_oddValue_1ew5t_73";
|
2126
|
+
const team$1 = "_team_1ew5t_19";
|
2127
|
+
const teamLogo$1 = "_teamLogo_1ew5t_96";
|
2128
|
+
const teamName$1 = "_teamName_1ew5t_102";
|
2129
|
+
const styles$5 = {
|
2130
|
+
root: root$5,
|
2131
|
+
left: left$1,
|
2132
|
+
desktop: desktop$3,
|
2133
|
+
teams,
|
2134
|
+
logo: logo$1,
|
2135
|
+
league,
|
2136
|
+
name,
|
2137
|
+
right: right$1,
|
2138
|
+
odd: odd$1,
|
2139
|
+
oddLabel: oddLabel$1,
|
2140
|
+
oddValue,
|
2141
|
+
team: team$1,
|
2142
|
+
teamLogo: teamLogo$1,
|
2143
|
+
teamName: teamName$1
|
2144
|
+
};
|
2145
|
+
const Match = () => {
|
2146
|
+
var _a, _b, _c, _d;
|
2147
|
+
const state = useCurrentState();
|
2148
|
+
const rules = useParseRules(state);
|
2149
|
+
const device = (state == null ? void 0 : state.device) || "desktop";
|
2150
|
+
return o("div", {
|
2151
|
+
className: classNames(styles$5.root, {
|
2152
|
+
[styles$5.desktop]: device === "desktop"
|
2153
|
+
}),
|
2154
|
+
children: [o("div", {
|
2155
|
+
className: styles$5.left,
|
2156
|
+
children: [o("div", {
|
2157
|
+
className: styles$5.teams,
|
2158
|
+
children: [o("div", {
|
2159
|
+
className: styles$5.logo
|
2160
|
+
}), o("div", {
|
2161
|
+
className: styles$5.logo
|
2162
|
+
})]
|
2163
|
+
}), o("div", {
|
2164
|
+
className: styles$5.body,
|
2165
|
+
children: [o("div", {
|
2166
|
+
className: styles$5.league,
|
2167
|
+
style: rules.league,
|
2168
|
+
children: (_a = rules.league) == null ? void 0 : _a.children
|
2169
|
+
}), o("div", {
|
2170
|
+
className: styles$5.name,
|
2171
|
+
style: rules.teams,
|
2172
|
+
children: (_b = rules.teams) == null ? void 0 : _b.children
|
2173
|
+
})]
|
2174
|
+
})]
|
2175
|
+
}), o("div", {
|
2176
|
+
className: styles$5.right,
|
2177
|
+
children: [o("div", {
|
2178
|
+
className: styles$5.team,
|
2179
|
+
children: [o("div", {
|
2180
|
+
className: styles$5.teamLogo
|
2181
|
+
}), o("div", {
|
2182
|
+
className: styles$5.teamName,
|
2183
|
+
style: rules.teams,
|
2184
|
+
children: "НЬЮКАСЛ"
|
2185
|
+
})]
|
2186
|
+
}), o("div", {
|
2187
|
+
className: styles$5.odd,
|
2188
|
+
children: [o("div", {
|
2189
|
+
className: styles$5.oddLabel,
|
2190
|
+
style: rules.oddLabel,
|
2191
|
+
children: (_c = rules.oddLabel) == null ? void 0 : _c.children
|
2192
|
+
}), o("div", {
|
2193
|
+
className: styles$5.oddValue,
|
2194
|
+
style: rules.oddValue,
|
2195
|
+
children: (_d = rules.oddValue) == null ? void 0 : _d.children
|
2196
|
+
})]
|
2197
|
+
}), o("div", {
|
2198
|
+
className: styles$5.team,
|
2199
|
+
children: [o("div", {
|
2200
|
+
className: styles$5.teamLogo
|
2201
|
+
}), o("div", {
|
2202
|
+
className: styles$5.teamName,
|
2203
|
+
style: rules.teams,
|
2204
|
+
children: "ЛИДС"
|
2205
|
+
})]
|
2206
|
+
})]
|
2207
|
+
})]
|
2208
|
+
});
|
2209
|
+
};
|
2210
|
+
const SimplePopup = () => {
|
2211
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;
|
2212
|
+
const rootRef = _$1(null);
|
2213
|
+
const device = useContainerDevice({
|
2214
|
+
watchRef: rootRef
|
2215
|
+
});
|
2216
|
+
const state = useCurrentState();
|
2217
|
+
const deviceState = useDeviceState(state, device);
|
2218
|
+
set(deviceState, "buttonWrapper.percent_width", (_a = deviceState == null ? void 0 : deviceState.buttonWrapper) == null ? void 0 : _a.width);
|
2219
|
+
set(deviceState, "legal.percent_width", (_b = deviceState == null ? void 0 : deviceState.legal) == null ? void 0 : _b.width);
|
2220
|
+
const rules = useParseRules(deviceState);
|
2221
|
+
const bodyRules = {
|
2222
|
+
...rules.root,
|
2223
|
+
alignItems: switchTextAlignToFlex((_c = rules.root) == null ? void 0 : _c.align)
|
2224
|
+
};
|
2225
|
+
const contentRules = {
|
2226
|
+
...rules.content,
|
2227
|
+
alignItems: switchTextAlignToFlex((_d = rules.root) == null ? void 0 : _d.align)
|
2228
|
+
};
|
2229
|
+
const textRules = {
|
2230
|
+
...rules.text,
|
2231
|
+
textAlign: (_e = rules.root) == null ? void 0 : _e.align
|
2232
|
+
};
|
2233
|
+
const buttonRules = {
|
2234
|
+
...rules == null ? void 0 : rules.button,
|
2235
|
+
justifyContent: switchTextAlignToFlex((_f = rules.root) == null ? void 0 : _f.textAlign)
|
2236
|
+
};
|
2237
|
+
const legalRules = {
|
2238
|
+
...rules == null ? void 0 : rules.legal,
|
2239
|
+
justifyContent: switchTextAlignToFlex((_g = rules.root) == null ? void 0 : _g.textAlign)
|
2240
|
+
};
|
2241
|
+
return o("a", {
|
2242
|
+
ref: rootRef,
|
2243
|
+
href: (_h = rules.root) == null ? void 0 : _h.offer,
|
2244
|
+
target: "_blank",
|
2245
|
+
rel: "nofollow noopener noreferrer",
|
2246
|
+
className: classNames(styles$6.root, {
|
2247
|
+
[styles$6.desktop]: device === "desktop",
|
2248
|
+
[styles$6.laptop]: device === "laptop",
|
2249
|
+
[styles$6.tablet]: device === "tablet"
|
2250
|
+
}),
|
2251
|
+
children: o("div", {
|
2252
|
+
className: styles$6.body,
|
2253
|
+
style: bodyRules,
|
2254
|
+
children: [o("div", {
|
2255
|
+
className: styles$6.head,
|
2256
|
+
children: [o("div", {
|
2257
|
+
className: styles$6.title,
|
2258
|
+
style: rules.title,
|
2259
|
+
children: (_i = rules.title) == null ? void 0 : _i.children
|
2260
|
+
}), o("div", {
|
2261
|
+
className: styles$6.logo,
|
2262
|
+
style: rules.logo
|
2263
|
+
})]
|
2264
|
+
}), o("div", {
|
2265
|
+
className: styles$6.wrapper,
|
2266
|
+
style: contentRules,
|
2267
|
+
children: (rules.children || []).map((child) => o(StateContext, {
|
2268
|
+
value: {
|
2269
|
+
...child,
|
2270
|
+
device
|
2271
|
+
},
|
2272
|
+
children: o(Match, {})
|
2273
|
+
}))
|
2274
|
+
}), o(DisplayText, {
|
2275
|
+
className: styles$6.text,
|
2276
|
+
style: textRules,
|
2277
|
+
children: (_j = rules.text) == null ? void 0 : _j.children
|
2278
|
+
}), o("div", {
|
2279
|
+
className: styles$6.button,
|
2280
|
+
style: rules.buttonWrapper,
|
2281
|
+
children: [o("div", {
|
2282
|
+
className: styles$6.buttonHead,
|
2283
|
+
style: rules.buttonHead,
|
2284
|
+
children: (_k = rules.buttonHead) == null ? void 0 : _k.children
|
2285
|
+
}), o("div", {
|
2286
|
+
className: styles$6.buttonTarget,
|
2287
|
+
style: buttonRules,
|
2288
|
+
children: (_l = rules.button) == null ? void 0 : _l.children
|
2289
|
+
})]
|
2290
|
+
}), o("div", {
|
2291
|
+
className: styles$6.legal,
|
2292
|
+
style: legalRules,
|
2293
|
+
children: (_m = rules.legal) == null ? void 0 : _m.children
|
2294
|
+
})]
|
2295
|
+
})
|
2296
|
+
});
|
2297
|
+
};
|
2298
|
+
const index$2 = render(o(SimplePopup, {}));
|
2299
|
+
const root$4 = "_root_1slvw_1";
|
2300
|
+
const background$1 = "_background_1slvw_20";
|
2301
|
+
const body = "_body_1slvw_29";
|
2302
|
+
const bookmaker = "_bookmaker_1slvw_39";
|
2303
|
+
const button$1 = "_button_1slvw_46";
|
2304
|
+
const rowFirst = "_rowFirst_1slvw_60";
|
2305
|
+
const rowSecond = "_rowSecond_1slvw_66";
|
2306
|
+
const legal = "_legal_1slvw_72";
|
2307
|
+
const legalText = "_legalText_1slvw_88";
|
2308
|
+
const legalOpen = "_legalOpen_1slvw_98";
|
2309
|
+
const legalButton = "_legalButton_1slvw_103";
|
2310
|
+
const styles$4 = {
|
2311
|
+
root: root$4,
|
2312
|
+
background: background$1,
|
2313
|
+
body,
|
2314
|
+
bookmaker,
|
2315
|
+
button: button$1,
|
2316
|
+
rowFirst,
|
2317
|
+
rowSecond,
|
2318
|
+
legal,
|
2319
|
+
legalText,
|
2320
|
+
legalOpen,
|
2321
|
+
legalButton
|
2322
|
+
};
|
2323
|
+
const Bonus = () => {
|
2324
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
2325
|
+
const state = useCurrentState();
|
2326
|
+
const rules = useParseRules(state);
|
2327
|
+
const [isOpen, toggleIsOpen] = useToggle();
|
2328
|
+
return o("div", {
|
2329
|
+
className: styles$4.root,
|
2330
|
+
style: rules.root,
|
2331
|
+
children: [o("div", {
|
2332
|
+
className: styles$4.background,
|
2333
|
+
style: rules.background
|
2334
|
+
}), o("a", {
|
2335
|
+
href: (_a = rules.root) == null ? void 0 : _a.offer,
|
2336
|
+
target: "_blank",
|
2337
|
+
rel: "nofollow noopener noreferrer",
|
2338
|
+
className: styles$4.body,
|
2339
|
+
children: [o("div", {
|
2340
|
+
children: [o("div", {
|
2341
|
+
className: styles$4.rowFirst,
|
2342
|
+
style: rules.rowFirst,
|
2343
|
+
children: (_b = rules.rowFirst) == null ? void 0 : _b.children
|
2344
|
+
}), o("div", {
|
2345
|
+
className: styles$4.rowSecond,
|
2346
|
+
style: rules.rowSecond,
|
2347
|
+
children: (_c = rules.rowSecond) == null ? void 0 : _c.children
|
2348
|
+
}), o("div", {
|
2349
|
+
className: styles$4.bookmaker,
|
2350
|
+
children: "winline"
|
2351
|
+
})]
|
2352
|
+
}), o("div", {
|
2353
|
+
className: styles$4.button,
|
2354
|
+
style: rules.button,
|
2355
|
+
children: (_d = rules.button) == null ? void 0 : _d.children
|
2356
|
+
})]
|
2357
|
+
}), o("div", {
|
2358
|
+
className: classNames(styles$4.legal, {
|
2359
|
+
[styles$4.legalOpen]: isOpen
|
2360
|
+
}),
|
2361
|
+
style: rules.legalInfo,
|
2362
|
+
children: o("span", {
|
2363
|
+
className: styles$4.legalText,
|
2364
|
+
children: [o("span", {
|
2365
|
+
children: (_e = rules.legalInfo) == null ? void 0 : _e.children
|
2366
|
+
}), o("span", {
|
2367
|
+
className: styles$4.legalButton,
|
2368
|
+
style: rules.legalInfoButton,
|
2369
|
+
onClick: toggleIsOpen,
|
2370
|
+
children: isOpen ? (_f = rules.legalInfoButton) == null ? void 0 : _f.openText : (_g = rules.legalInfoButton) == null ? void 0 : _g.closeText
|
2371
|
+
})]
|
2372
|
+
})
|
2373
|
+
})]
|
2374
|
+
});
|
2375
|
+
};
|
2376
|
+
const BonusCard = () => {
|
2377
|
+
const rootRef = _$1(null);
|
2378
|
+
const state = useCurrentState();
|
2379
|
+
const device = "desktop";
|
2380
|
+
const deviceState = useDeviceState(state, device);
|
2381
|
+
const rules = useParseRules(deviceState);
|
2382
|
+
return o("div", {
|
2383
|
+
ref: rootRef,
|
2384
|
+
children: ((rules == null ? void 0 : rules.children) || []).map((child) => o(StateContext, {
|
2385
|
+
value: child,
|
2386
|
+
children: o(Bonus, {})
|
2387
|
+
}))
|
2388
|
+
});
|
2389
|
+
};
|
2390
|
+
const index$1 = render(o(BonusCard, {}));
|
2391
|
+
const root$3 = "_root_1i5vb_1";
|
2392
|
+
const desktop$2 = "_desktop_1i5vb_13";
|
2393
|
+
const laptop$1 = "_laptop_1i5vb_14";
|
2394
|
+
const promotion = "_promotion_1i5vb_18";
|
2395
|
+
const background = "_background_1i5vb_29";
|
2396
|
+
const content = "_content_1i5vb_38";
|
2397
|
+
const variant2 = "_variant2_1i5vb_51";
|
2398
|
+
const logo = "_logo_1i5vb_55";
|
2399
|
+
const left = "_left_1i5vb_67";
|
2400
|
+
const center = "_center_1i5vb_81";
|
2401
|
+
const slide = "_slide_1i5vb_87";
|
2402
|
+
const slide_animated_default = "_slide_animated_default_1i5vb_101";
|
2403
|
+
const right = "_right_1i5vb_111";
|
2404
|
+
const buttonWrapper = "_buttonWrapper_1i5vb_126";
|
2405
|
+
const button = "_button_1i5vb_126";
|
2406
|
+
const button_animated = "_button_animated_1i5vb_157";
|
2407
|
+
const increase = "_increase_1i5vb_1";
|
2408
|
+
const styles$3 = {
|
2409
|
+
root: root$3,
|
2410
|
+
desktop: desktop$2,
|
2411
|
+
laptop: laptop$1,
|
2412
|
+
promotion,
|
2413
|
+
background,
|
2414
|
+
content,
|
2415
|
+
variant2,
|
2416
|
+
logo,
|
2417
|
+
left,
|
2418
|
+
center,
|
2419
|
+
slide,
|
2420
|
+
slide_animated_default,
|
2421
|
+
"fade-in-out": "_fade-in-out_1i5vb_1",
|
2422
|
+
"slide_animated_bottom-top": "_slide_animated_bottom-top_1i5vb_104",
|
2423
|
+
"fade-in-bottom-out-top": "_fade-in-bottom-out-top_1i5vb_1",
|
2424
|
+
"slide_animated_top-bottom": "_slide_animated_top-bottom_1i5vb_107",
|
2425
|
+
right,
|
2426
|
+
buttonWrapper,
|
2427
|
+
button,
|
2428
|
+
button_animated,
|
2429
|
+
increase,
|
2430
|
+
"fade-in-top-out-bottom": "_fade-in-top-out-bottom_1i5vb_1"
|
2431
|
+
};
|
2432
|
+
const root$2 = "_root_1o6so_1";
|
2433
|
+
const desktop$1 = "_desktop_1o6so_17";
|
2434
|
+
const styles$2 = {
|
2435
|
+
root: root$2,
|
2436
|
+
desktop: desktop$1
|
2437
|
+
};
|
2438
|
+
const Text = () => {
|
2439
|
+
var _a;
|
2440
|
+
const state = useCurrentState();
|
2441
|
+
const rules = useParseRules(state);
|
2442
|
+
return o("div", {
|
2443
|
+
className: classNames(styles$2.root, {
|
2444
|
+
[styles$2.desktop]: (state == null ? void 0 : state.device) === "desktop"
|
2445
|
+
}),
|
2446
|
+
style: omit(rules.root, ...backgroundOptions),
|
2447
|
+
children: (_a = rules.root) == null ? void 0 : _a.children
|
2448
|
+
});
|
2449
|
+
};
|
2450
|
+
const root$1 = "_root_vjs41_1";
|
2451
|
+
const odd = "_odd_vjs41_7";
|
2452
|
+
const oddReverse = "_oddReverse_vjs41_14";
|
2453
|
+
const oddLabel = "_oddLabel_vjs41_18";
|
2454
|
+
const oddLogo = "_oddLogo_vjs41_30";
|
2455
|
+
const coef = "_coef_vjs41_36";
|
2456
|
+
const coefHead = "_coefHead_vjs41_42";
|
2457
|
+
const coefValue = "_coefValue_vjs41_47";
|
2458
|
+
const styles$1 = {
|
2459
|
+
root: root$1,
|
2460
|
+
odd,
|
2461
|
+
oddReverse,
|
2462
|
+
oddLabel,
|
2463
|
+
oddLogo,
|
2464
|
+
coef,
|
2465
|
+
coefHead,
|
2466
|
+
coefValue
|
2467
|
+
};
|
2468
|
+
const Matches = () => {
|
2469
|
+
const state = useCurrentState();
|
2470
|
+
const rules = useParseRules(state);
|
2471
|
+
const rootRules = omit(rules.root, ...backgroundOptions);
|
2472
|
+
return o("div", {
|
2473
|
+
className: styles$1.root,
|
2474
|
+
children: [o("div", {
|
2475
|
+
className: styles$1.odd,
|
2476
|
+
children: [o("div", {
|
2477
|
+
className: styles$1.oddLogo,
|
2478
|
+
style: rootRules
|
2479
|
+
}), o("div", {
|
2480
|
+
className: styles$1.oddLabel,
|
2481
|
+
style: rootRules,
|
2482
|
+
children: "3"
|
2483
|
+
})]
|
2484
|
+
}), o("div", {
|
2485
|
+
className: styles$1.coef,
|
2486
|
+
children: [o("div", {
|
2487
|
+
className: styles$1.coefHead,
|
2488
|
+
style: rules.coef,
|
2489
|
+
children: "X"
|
2490
|
+
}), o("div", {
|
2491
|
+
className: styles$1.coefValue,
|
2492
|
+
style: rootRules,
|
2493
|
+
children: "3.92"
|
2494
|
+
})]
|
2495
|
+
}), o("div", {
|
2496
|
+
className: classNames(styles$1.odd, styles$1.oddReverse),
|
2497
|
+
children: [o("div", {
|
2498
|
+
className: styles$1.oddLogo,
|
2499
|
+
style: rootRules
|
2500
|
+
}), o("div", {
|
2501
|
+
className: styles$1.oddLabel,
|
2502
|
+
style: rootRules,
|
2503
|
+
children: "2.8"
|
2504
|
+
})]
|
2505
|
+
})]
|
2506
|
+
});
|
2507
|
+
};
|
2508
|
+
const root = "_root_1va5h_1";
|
2509
|
+
const title = "_title_1va5h_8";
|
2510
|
+
const titleLabel = "_titleLabel_1va5h_12";
|
2511
|
+
const tablet = "_tablet_1va5h_16";
|
2512
|
+
const desktop = "_desktop_1va5h_19";
|
2513
|
+
const laptop = "_laptop_1va5h_19";
|
2514
|
+
const titleValue = "_titleValue_1va5h_23";
|
2515
|
+
const team = "_team_1va5h_34";
|
2516
|
+
const teamLogo = "_teamLogo_1va5h_44";
|
2517
|
+
const teamName = "_teamName_1va5h_72";
|
2518
|
+
const teamValue = "_teamValue_1va5h_84";
|
2519
|
+
const styles = {
|
2520
|
+
root,
|
2521
|
+
title,
|
2522
|
+
titleLabel,
|
2523
|
+
tablet,
|
2524
|
+
desktop,
|
2525
|
+
laptop,
|
2526
|
+
titleValue,
|
2527
|
+
team,
|
2528
|
+
teamLogo,
|
2529
|
+
teamName,
|
2530
|
+
teamValue
|
2531
|
+
};
|
2532
|
+
const MatchesOneTwo = () => {
|
2533
|
+
const state = useCurrentState();
|
2534
|
+
const rules = useParseRules(state);
|
2535
|
+
return o("div", {
|
2536
|
+
className: classNames(styles.root, {
|
2537
|
+
[styles.desktop]: (state == null ? void 0 : state.device) === "desktop",
|
2538
|
+
[styles.laptop]: (state == null ? void 0 : state.device) === "laptop",
|
2539
|
+
[styles.tablet]: (state == null ? void 0 : state.device) === "tablet"
|
2540
|
+
}),
|
2541
|
+
style: omit(rules.root, ...backgroundOptions),
|
2542
|
+
children: [o("div", {
|
2543
|
+
className: styles.title,
|
2544
|
+
children: [o("div", {
|
2545
|
+
className: styles.titleLabel,
|
2546
|
+
style: rules.titleLabel,
|
2547
|
+
children: rules.titleLabel.children
|
2548
|
+
}), o("div", {
|
2549
|
+
className: styles.titleValue,
|
2550
|
+
style: rules.titleValue,
|
2551
|
+
children: rules.titleValue.children
|
2552
|
+
})]
|
2553
|
+
}), o("div", {
|
2554
|
+
children: [o("div", {
|
2555
|
+
className: styles.team,
|
2556
|
+
children: [o("div", {
|
2557
|
+
className: styles.teamLogo,
|
2558
|
+
style: rules.logo
|
2559
|
+
}), o("div", {
|
2560
|
+
className: styles.teamName,
|
2561
|
+
style: rules.teamName,
|
2562
|
+
children: rules.team1Name.children
|
2563
|
+
}), o("div", {
|
2564
|
+
className: styles.teamValue,
|
2565
|
+
style: rules.value,
|
2566
|
+
children: rules.value1.children
|
2567
|
+
})]
|
2568
|
+
}), o("div", {
|
2569
|
+
className: styles.team,
|
2570
|
+
children: [o("div", {
|
2571
|
+
className: styles.teamLogo,
|
2572
|
+
style: rules.logo
|
2573
|
+
}), o("div", {
|
2574
|
+
className: styles.teamName,
|
2575
|
+
style: rules.teamName,
|
2576
|
+
children: rules.team2Name.children
|
2577
|
+
}), o("div", {
|
2578
|
+
className: styles.teamValue,
|
2579
|
+
style: rules.value,
|
2580
|
+
children: rules.value2.children
|
2581
|
+
})]
|
2582
|
+
})]
|
2583
|
+
})]
|
2584
|
+
});
|
2585
|
+
};
|
2586
|
+
const useAnimatedList = (slides = []) => {
|
2587
|
+
var _a;
|
2588
|
+
const itemsCount = slides.length;
|
2589
|
+
const [animatedIdx, setAnimatedIdx] = h(0);
|
2590
|
+
const animationDuration = (_a = slides[animatedIdx || 0]) == null ? void 0 : _a.animationDuration;
|
2591
|
+
p(() => {
|
2592
|
+
const goNext = () => {
|
2593
|
+
setAnimatedIdx((index2) => {
|
2594
|
+
if (index2 + 1 < itemsCount)
|
2595
|
+
return index2 + 1;
|
2596
|
+
return 0;
|
2597
|
+
});
|
2598
|
+
};
|
2599
|
+
const timeout = setTimeout(goNext, animationDuration);
|
2600
|
+
return () => clearTimeout(timeout);
|
2601
|
+
}, [setAnimatedIdx, itemsCount, animationDuration, animatedIdx]);
|
2602
|
+
return animatedIdx;
|
2603
|
+
};
|
2604
|
+
const DEFAULT_ANIMATION_SPEED = 3700;
|
2605
|
+
const backgroundOptions = ["backgroundColor", "backgroundColorOpacity", "backgroundImage", "backgroundFit"];
|
2606
|
+
const WideCard = () => {
|
2607
|
+
var _a, _b, _c, _d, _e;
|
2608
|
+
const rootRef = _$1(null);
|
2609
|
+
const state = useCurrentState();
|
2610
|
+
const device = useContainerDevice({
|
2611
|
+
watchRef: rootRef
|
2612
|
+
});
|
2613
|
+
const deviceState = useDeviceState(state, device);
|
2614
|
+
const rules = useParseRules(deviceState);
|
2615
|
+
const getChild = (name2) => ({
|
2616
|
+
text: o(Text, {}),
|
2617
|
+
matches: o(Matches, {}),
|
2618
|
+
matchesOneTwo: o(MatchesOneTwo, {})
|
2619
|
+
})[name2];
|
2620
|
+
const slidesList = (rules.children || []).filter(Boolean).map((slide2) => {
|
2621
|
+
var _a2, _b2;
|
2622
|
+
return {
|
2623
|
+
...slide2,
|
2624
|
+
animationName: (_a2 = slide2 == null ? void 0 : slide2.root) == null ? void 0 : _a2.animationName,
|
2625
|
+
animationDuration: ((_b2 = slide2 == null ? void 0 : slide2.root) == null ? void 0 : _b2.animationDuration) || DEFAULT_ANIMATION_SPEED
|
2626
|
+
};
|
2627
|
+
});
|
2628
|
+
const currentSlide = useAnimatedList(slidesList);
|
2629
|
+
const slideRules = useParseRules(slidesList[currentSlide] || {});
|
2630
|
+
const backgroundRules = ((_a = slideRules == null ? void 0 : slideRules.root) == null ? void 0 : _a.hasCustomBackground) ? pick((slideRules == null ? void 0 : slideRules.root) || {}, ...backgroundOptions) : pick(rules.background, ...backgroundOptions);
|
2631
|
+
return o("a", {
|
2632
|
+
ref: rootRef,
|
2633
|
+
href: (_b = rules.root) == null ? void 0 : _b.offer,
|
2634
|
+
target: "_blank",
|
2635
|
+
rel: "nofollow noopener noreferrer",
|
2636
|
+
className: classNames(styles$3.root, {
|
2637
|
+
[styles$3.desktop]: device === "desktop",
|
2638
|
+
[styles$3.laptop]: device === "laptop",
|
2639
|
+
[styles$3.tablet]: device === "tablet",
|
2640
|
+
[styles$3.variant2]: ((_c = rules.root) == null ? void 0 : _c.variant) === "variant2"
|
2641
|
+
}),
|
2642
|
+
style: rules.root,
|
2643
|
+
children: [o("div", {
|
2644
|
+
className: styles$3.background,
|
2645
|
+
style: backgroundRules
|
2646
|
+
}), o("div", {
|
2647
|
+
className: styles$3.promotion,
|
2648
|
+
style: rules.promotion,
|
2649
|
+
children: (_d = rules.promotion) == null ? void 0 : _d.children
|
2650
|
+
}), o("div", {
|
2651
|
+
className: styles$3.content,
|
2652
|
+
children: [o("div", {
|
2653
|
+
className: styles$3.left,
|
2654
|
+
children: o("div", {
|
2655
|
+
className: styles$3.logo,
|
2656
|
+
style: rules.logo
|
2657
|
+
})
|
2658
|
+
}), o("div", {
|
2659
|
+
className: styles$3.center,
|
2660
|
+
children: (rules.children || []).map((child, index2) => {
|
2661
|
+
var _a2, _b2;
|
2662
|
+
return o("div", {
|
2663
|
+
className: styles$3.slide,
|
2664
|
+
style: {
|
2665
|
+
animationName: currentSlide === index2 ? styles$3[((_a2 = child.root) == null ? void 0 : _a2.animationName) || "fade-in-out"] : "none",
|
2666
|
+
animationDuration: `${(_b2 = child.root) == null ? void 0 : _b2.animationDuration}ms`
|
2667
|
+
},
|
2668
|
+
children: o(StateContext, {
|
2669
|
+
value: {
|
2670
|
+
...child,
|
2671
|
+
device
|
2672
|
+
},
|
2673
|
+
children: getChild(child.name)
|
2674
|
+
})
|
2675
|
+
});
|
2676
|
+
})
|
2677
|
+
}), o("div", {
|
2678
|
+
className: styles$3.right,
|
2679
|
+
children: [o("div", {
|
2680
|
+
className: styles$3.logo,
|
2681
|
+
style: rules.logo
|
2682
|
+
}), o("div", {
|
2683
|
+
className: styles$3.buttonWrapper,
|
2684
|
+
children: o("div", {
|
2685
|
+
className: styles$3.button,
|
2686
|
+
style: rules.button,
|
2687
|
+
children: [o("div", {
|
2688
|
+
className: styles$3.logo,
|
2689
|
+
style: rules.logo
|
2690
|
+
}), (_e = rules.button) == null ? void 0 : _e.children]
|
2691
|
+
})
|
2692
|
+
})]
|
2693
|
+
})]
|
2694
|
+
})]
|
2695
|
+
});
|
2696
|
+
};
|
2697
|
+
const index = render(o(WideCard, {}));
|
2698
|
+
export {
|
2699
|
+
index$1 as BonusCard,
|
2700
|
+
index$5 as ComplexGift,
|
2701
|
+
index$3 as ComplexPopup,
|
2702
|
+
index$2 as ExpressPopup,
|
2703
|
+
index$6 as SimpleGift,
|
2704
|
+
index$4 as SimplePopup,
|
2705
|
+
index as WideCard
|
2706
|
+
};
|
2707
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmVzLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvaG9va3MvZGlzdC9ob29rcy5tb2R1bGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9kaXN0L2NvbXBhdC5tb2R1bGUuanMiLCIuLi9zcmMvaG9va3MvdXNlR2lmdE9wZW4udHMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2pzeC1ydW50aW1lL2Rpc3QvanN4UnVudGltZS5tb2R1bGUuanMiLCIuLi9zcmMvU3RhdGVDb250ZXh0LnRzeCIsIi4uL3NyYy9oZWxwZXJzL3JlbmRlci50c3giLCIuLi9zcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlLnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTGlzdENhY2hlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tHZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNGdW5jdGlvbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc01hc2tlZC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvU291cmNlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXROYXRpdmUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVDcmVhdGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hIYXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fSGFzaC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRNYXBEYXRhLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVTZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXBDYWNoZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3RhY2suanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc2lnbk1lcmdlVmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCYXNlRm9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZvci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQnVmZmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fVWludDhBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQXJyYXlCdWZmZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZVR5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQ3JlYXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFByb3RvdHlwZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdExpa2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJndW1lbnRzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0xlbmd0aC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQnVmZmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1BsYWluT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1R5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zYWZlR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5T2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzSW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzSW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvUGxhaW5PYmplY3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlTWVyZ2VEZWVwLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1lcmdlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FwcGx5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlclJlc3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2hvcnRPdXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb1N0cmluZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VSZXN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJdGVyYXRlZUNhbGwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVBc3NpZ25lci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVyZ2UuanMiLCIuLi8uLi91dGlscy9pdGVyYXRvci50cyIsIi4uLy4uL3V0aWxzL2luZGV4LnRzIiwiLi4vc3JjL2hlbHBlcnMvZ2V0RGV2aWNlU3RhdGUudHMiLCIuLi9zcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUudHMiLCIuLi9zcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlLnRzIiwiLi4vc3JjL2hlbHBlcnMvcGFyc2VSdWxlcy50cyIsIi4uL3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQudHN4IiwiLi4vc3JjL2hvb2tzL3VzZVRvZ2dsZS50cyIsIi4uL3NyYy9jb21wb25lbnRzL0Nsb3NlSWNvbi50c3giLCIuLi9zcmMvY29tcG9uZW50cy9HaWZ0SWNvbi50c3giLCIuLi9zcmMvcHJvbW9zL1NpbXBsZUdpZnQvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Db21wbGV4R2lmdC9jb21wb25lbnRzL0JvbnVzQ2FyZC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0NvbXBsZXhHaWZ0L2luZGV4LnRzeCIsIi4uL3NyYy9oZWxwZXJzL3N3aXRjaFRleHRBbGlnblRvRmxleC50cyIsIi4uL3NyYy9wcm9tb3MvU2ltcGxlUG9wdXAvY29tcG9uZW50cy9saW5lL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvU2ltcGxlUG9wdXAvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Db21wbGV4UG9wdXAvY29tcG9uZW50cy9Cb251cy9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0NvbXBsZXhQb3B1cC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0V4cHJlc3NQb3B1cC9jb21wb25lbnRzL01hdGNoL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvRXhwcmVzc1BvcHVwL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQm9udXNDYXJkL2NvbXBvbmVudHMvQm9udXMvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Cb251c0NhcmQvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9XaWRlQ2FyZC9jb21wb25lbnRzL1RleHQvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9XaWRlQ2FyZC9jb21wb25lbnRzL01hdGNoZXMvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9XaWRlQ2FyZC9jb21wb25lbnRzL01hdGNoZXNPbmVUd28vaW5kZXgudHN4IiwiLi4vc3JjL2hvb2tzL3VzZUFuaW1hdGVkTGlzdC50cyIsIi4uL3NyYy9wcm9tb3MvV2lkZUNhcmQvaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIVxuXHRDb3B5cmlnaHQgKGMpIDIwMTggSmVkIFdhdHNvbi5cblx0TGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcblx0aHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblx0dmFyIG5hdGl2ZUNvZGVTdHJpbmcgPSAnW25hdGl2ZSBjb2RlXSc7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcygpIHtcblx0XHR2YXIgY2xhc3NlcyA9IFtdO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoIWFyZykgY29udGludWU7XG5cblx0XHRcdHZhciBhcmdUeXBlID0gdHlwZW9mIGFyZztcblxuXHRcdFx0aWYgKGFyZ1R5cGUgPT09ICdzdHJpbmcnIHx8IGFyZ1R5cGUgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdGNsYXNzZXMucHVzaChhcmcpO1xuXHRcdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcblx0XHRcdFx0aWYgKGFyZy5sZW5ndGgpIHtcblx0XHRcdFx0XHR2YXIgaW5uZXIgPSBjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZyk7XG5cdFx0XHRcdFx0aWYgKGlubmVyKSB7XG5cdFx0XHRcdFx0XHRjbGFzc2VzLnB1c2goaW5uZXIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChhcmdUeXBlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRpZiAoYXJnLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nICYmICFhcmcudG9TdHJpbmcudG9TdHJpbmcoKS5pbmNsdWRlcygnW25hdGl2ZSBjb2RlXScpKSB7XG5cdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGFyZy50b1N0cmluZygpKTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdFx0XHRjbGFzc2VzLnB1c2goa2V5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRjbGFzc05hbWVzLmRlZmF1bHQgPSBjbGFzc05hbWVzO1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iLCJpbXBvcnR7b3B0aW9ucyBhcyBufWZyb21cInByZWFjdFwiO3ZhciB0LHIsdSxpLG89MCxmPVtdLGM9W10sZT1uLl9fYixhPW4uX19yLHY9bi5kaWZmZWQsbD1uLl9fYyxtPW4udW5tb3VudDtmdW5jdGlvbiBkKHQsdSl7bi5fX2gmJm4uX19oKHIsdCxvfHx1KSxvPTA7dmFyIGk9ci5fX0h8fChyLl9fSD17X186W10sX19oOltdfSk7cmV0dXJuIHQ+PWkuX18ubGVuZ3RoJiZpLl9fLnB1c2goe19fVjpjfSksaS5fX1t0XX1mdW5jdGlvbiBoKG4pe3JldHVybiBvPTEscyhCLG4pfWZ1bmN0aW9uIHMobix1LGkpe3ZhciBvPWQodCsrLDIpO2lmKG8udD1uLCFvLl9fYyYmKG8uX189W2k/aSh1KTpCKHZvaWQgMCx1KSxmdW5jdGlvbihuKXt2YXIgdD1vLl9fTj9vLl9fTlswXTpvLl9fWzBdLHI9by50KHQsbik7dCE9PXImJihvLl9fTj1bcixvLl9fWzFdXSxvLl9fYy5zZXRTdGF0ZSh7fSkpfV0sby5fX2M9ciwhci51KSl7dmFyIGY9ZnVuY3Rpb24obix0LHIpe2lmKCFvLl9fYy5fX0gpcmV0dXJuITA7dmFyIHU9by5fX2MuX19ILl9fLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gbi5fX2N9KTtpZih1LmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiFuLl9fTn0pKXJldHVybiFjfHxjLmNhbGwodGhpcyxuLHQscik7dmFyIGk9ITE7cmV0dXJuIHUuZm9yRWFjaChmdW5jdGlvbihuKXtpZihuLl9fTil7dmFyIHQ9bi5fX1swXTtuLl9fPW4uX19OLG4uX19OPXZvaWQgMCx0IT09bi5fX1swXSYmKGk9ITApfX0pLCEoIWkmJm8uX19jLnByb3BzPT09bikmJighY3x8Yy5jYWxsKHRoaXMsbix0LHIpKX07ci51PSEwO3ZhciBjPXIuc2hvdWxkQ29tcG9uZW50VXBkYXRlLGU9ci5jb21wb25lbnRXaWxsVXBkYXRlO3IuY29tcG9uZW50V2lsbFVwZGF0ZT1mdW5jdGlvbihuLHQscil7aWYodGhpcy5fX2Upe3ZhciB1PWM7Yz12b2lkIDAsZihuLHQsciksYz11fWUmJmUuY2FsbCh0aGlzLG4sdCxyKX0sci5zaG91bGRDb21wb25lbnRVcGRhdGU9Zn1yZXR1cm4gby5fX058fG8uX199ZnVuY3Rpb24gcCh1LGkpe3ZhciBvPWQodCsrLDMpOyFuLl9fcyYmeihvLl9fSCxpKSYmKG8uX189dSxvLmk9aSxyLl9fSC5fX2gucHVzaChvKSl9ZnVuY3Rpb24geSh1LGkpe3ZhciBvPWQodCsrLDQpOyFuLl9fcyYmeihvLl9fSCxpKSYmKG8uX189dSxvLmk9aSxyLl9faC5wdXNoKG8pKX1mdW5jdGlvbiBfKG4pe3JldHVybiBvPTUsRihmdW5jdGlvbigpe3JldHVybntjdXJyZW50Om59fSxbXSl9ZnVuY3Rpb24gQShuLHQscil7bz02LHkoZnVuY3Rpb24oKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBuPyhuKHQoKSksZnVuY3Rpb24oKXtyZXR1cm4gbihudWxsKX0pOm4/KG4uY3VycmVudD10KCksZnVuY3Rpb24oKXtyZXR1cm4gbi5jdXJyZW50PW51bGx9KTp2b2lkIDB9LG51bGw9PXI/cjpyLmNvbmNhdChuKSl9ZnVuY3Rpb24gRihuLHIpe3ZhciB1PWQodCsrLDcpO3JldHVybiB6KHUuX19ILHIpPyh1Ll9fVj1uKCksdS5pPXIsdS5fX2g9bix1Ll9fVik6dS5fX31mdW5jdGlvbiBUKG4sdCl7cmV0dXJuIG89OCxGKGZ1bmN0aW9uKCl7cmV0dXJuIG59LHQpfWZ1bmN0aW9uIHEobil7dmFyIHU9ci5jb250ZXh0W24uX19jXSxpPWQodCsrLDkpO3JldHVybiBpLmM9bix1PyhudWxsPT1pLl9fJiYoaS5fXz0hMCx1LnN1YihyKSksdS5wcm9wcy52YWx1ZSk6bi5fX31mdW5jdGlvbiB4KHQscil7bi51c2VEZWJ1Z1ZhbHVlJiZuLnVzZURlYnVnVmFsdWUocj9yKHQpOnQpfWZ1bmN0aW9uIFAobil7dmFyIHU9ZCh0KyssMTApLGk9aCgpO3JldHVybiB1Ll9fPW4sci5jb21wb25lbnREaWRDYXRjaHx8KHIuY29tcG9uZW50RGlkQ2F0Y2g9ZnVuY3Rpb24obix0KXt1Ll9fJiZ1Ll9fKG4sdCksaVsxXShuKX0pLFtpWzBdLGZ1bmN0aW9uKCl7aVsxXSh2b2lkIDApfV19ZnVuY3Rpb24gVigpe3ZhciBuPWQodCsrLDExKTtpZighbi5fXyl7Zm9yKHZhciB1PXIuX192O251bGwhPT11JiYhdS5fX20mJm51bGwhPT11Ll9fOyl1PXUuX187dmFyIGk9dS5fX218fCh1Ll9fbT1bMCwwXSk7bi5fXz1cIlBcIitpWzBdK1wiLVwiK2lbMV0rK31yZXR1cm4gbi5fX31mdW5jdGlvbiBiKCl7Zm9yKHZhciB0O3Q9Zi5zaGlmdCgpOylpZih0Ll9fUCYmdC5fX0gpdHJ5e3QuX19ILl9faC5mb3JFYWNoKGspLHQuX19ILl9faC5mb3JFYWNoKHcpLHQuX19ILl9faD1bXX1jYXRjaChyKXt0Ll9fSC5fX2g9W10sbi5fX2Uocix0Ll9fdil9fW4uX19iPWZ1bmN0aW9uKG4pe3I9bnVsbCxlJiZlKG4pfSxuLl9fcj1mdW5jdGlvbihuKXthJiZhKG4pLHQ9MDt2YXIgaT0ocj1uLl9fYykuX19IO2kmJih1PT09cj8oaS5fX2g9W10sci5fX2g9W10saS5fXy5mb3JFYWNoKGZ1bmN0aW9uKG4pe24uX19OJiYobi5fXz1uLl9fTiksbi5fX1Y9YyxuLl9fTj1uLmk9dm9pZCAwfSkpOihpLl9faC5mb3JFYWNoKGspLGkuX19oLmZvckVhY2godyksaS5fX2g9W10pKSx1PXJ9LG4uZGlmZmVkPWZ1bmN0aW9uKHQpe3YmJnYodCk7dmFyIG89dC5fX2M7byYmby5fX0gmJihvLl9fSC5fX2gubGVuZ3RoJiYoMSE9PWYucHVzaChvKSYmaT09PW4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHwoKGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpfHxqKShiKSksby5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXtuLmkmJihuLl9fSD1uLmkpLG4uX19WIT09YyYmKG4uX189bi5fX1YpLG4uaT12b2lkIDAsbi5fX1Y9Y30pKSx1PXI9bnVsbH0sbi5fX2M9ZnVuY3Rpb24odCxyKXtyLnNvbWUoZnVuY3Rpb24odCl7dHJ5e3QuX19oLmZvckVhY2goayksdC5fX2g9dC5fX2guZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiFuLl9ffHx3KG4pfSl9Y2F0Y2godSl7ci5zb21lKGZ1bmN0aW9uKG4pe24uX19oJiYobi5fX2g9W10pfSkscj1bXSxuLl9fZSh1LHQuX192KX19KSxsJiZsKHQscil9LG4udW5tb3VudD1mdW5jdGlvbih0KXttJiZtKHQpO3ZhciByLHU9dC5fX2M7dSYmdS5fX0gmJih1Ll9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3RyeXtrKG4pfWNhdGNoKG4pe3I9bn19KSx1Ll9fSD12b2lkIDAsciYmbi5fX2Uocix1Ll9fdikpfTt2YXIgZz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ZnVuY3Rpb24gaihuKXt2YXIgdCxyPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHUpLGcmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHQpLHNldFRpbWVvdXQobil9LHU9c2V0VGltZW91dChyLDEwMCk7ZyYmKHQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHIpKX1mdW5jdGlvbiBrKG4pe3ZhciB0PXIsdT1uLl9fYztcImZ1bmN0aW9uXCI9PXR5cGVvZiB1JiYobi5fX2M9dm9pZCAwLHUoKSkscj10fWZ1bmN0aW9uIHcobil7dmFyIHQ9cjtuLl9fYz1uLl9fKCkscj10fWZ1bmN0aW9uIHoobix0KXtyZXR1cm4hbnx8bi5sZW5ndGghPT10Lmxlbmd0aHx8dC5zb21lKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQhPT1uW3JdfSl9ZnVuY3Rpb24gQihuLHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dChuKTp0fWV4cG9ydHtUIGFzIHVzZUNhbGxiYWNrLHEgYXMgdXNlQ29udGV4dCx4IGFzIHVzZURlYnVnVmFsdWUscCBhcyB1c2VFZmZlY3QsUCBhcyB1c2VFcnJvckJvdW5kYXJ5LFYgYXMgdXNlSWQsQSBhcyB1c2VJbXBlcmF0aXZlSGFuZGxlLHkgYXMgdXNlTGF5b3V0RWZmZWN0LEYgYXMgdXNlTWVtbyxzIGFzIHVzZVJlZHVjZXIsXyBhcyB1c2VSZWYsaCBhcyB1c2VTdGF0ZX07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ob29rcy5tb2R1bGUuanMubWFwXG4iLCJpbXBvcnR7Q29tcG9uZW50IGFzIG4sY3JlYXRlRWxlbWVudCBhcyB0LG9wdGlvbnMgYXMgZSx0b0NoaWxkQXJyYXkgYXMgcixGcmFnbWVudCBhcyB1LHJlbmRlciBhcyBvLGh5ZHJhdGUgYXMgaSxjcmVhdGVDb250ZXh0IGFzIGwsY3JlYXRlUmVmIGFzIGMsY2xvbmVFbGVtZW50IGFzIGZ9ZnJvbVwicHJlYWN0XCI7ZXhwb3J0e0NvbXBvbmVudCxGcmFnbWVudCxjcmVhdGVDb250ZXh0LGNyZWF0ZUVsZW1lbnQsY3JlYXRlUmVmfWZyb21cInByZWFjdFwiO2ltcG9ydHt1c2VTdGF0ZSBhcyBhLHVzZUlkIGFzIHMsdXNlUmVkdWNlciBhcyBoLHVzZUVmZmVjdCBhcyB2LHVzZUxheW91dEVmZmVjdCBhcyBkLHVzZVJlZiBhcyBwLHVzZUltcGVyYXRpdmVIYW5kbGUgYXMgbSx1c2VNZW1vIGFzIHksdXNlQ2FsbGJhY2sgYXMgXyx1c2VDb250ZXh0IGFzIGIsdXNlRGVidWdWYWx1ZSBhcyBTfWZyb21cInByZWFjdC9ob29rc1wiO2V4cG9ydCpmcm9tXCJwcmVhY3QvaG9va3NcIjtmdW5jdGlvbiBnKG4sdCl7Zm9yKHZhciBlIGluIHQpbltlXT10W2VdO3JldHVybiBufWZ1bmN0aW9uIEMobix0KXtmb3IodmFyIGUgaW4gbilpZihcIl9fc291cmNlXCIhPT1lJiYhKGUgaW4gdCkpcmV0dXJuITA7Zm9yKHZhciByIGluIHQpaWYoXCJfX3NvdXJjZVwiIT09ciYmbltyXSE9PXRbcl0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gRShuLHQpe3JldHVybiBuPT09dCYmKDAhPT1ufHwxL249PTEvdCl8fG4hPW4mJnQhPXR9ZnVuY3Rpb24gdyhuKXt0aGlzLnByb3BzPW59ZnVuY3Rpb24geChuLGUpe2Z1bmN0aW9uIHIobil7dmFyIHQ9dGhpcy5wcm9wcy5yZWYscj10PT1uLnJlZjtyZXR1cm4hciYmdCYmKHQuY2FsbD90KG51bGwpOnQuY3VycmVudD1udWxsKSxlPyFlKHRoaXMucHJvcHMsbil8fCFyOkModGhpcy5wcm9wcyxuKX1mdW5jdGlvbiB1KGUpe3JldHVybiB0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1yLHQobixlKX1yZXR1cm4gdS5kaXNwbGF5TmFtZT1cIk1lbW8oXCIrKG4uZGlzcGxheU5hbWV8fG4ubmFtZSkrXCIpXCIsdS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCx1Ll9fZj0hMCx1fSh3LnByb3RvdHlwZT1uZXcgbikuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsdy5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIEModGhpcy5wcm9wcyxuKXx8Qyh0aGlzLnN0YXRlLHQpfTt2YXIgUj1lLl9fYjtlLl9fYj1mdW5jdGlvbihuKXtuLnR5cGUmJm4udHlwZS5fX2YmJm4ucmVmJiYobi5wcm9wcy5yZWY9bi5yZWYsbi5yZWY9bnVsbCksUiYmUihuKX07dmFyIE49XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpfHwzOTExO2Z1bmN0aW9uIGsobil7ZnVuY3Rpb24gdCh0KXt2YXIgZT1nKHt9LHQpO3JldHVybiBkZWxldGUgZS5yZWYsbihlLHQucmVmfHxudWxsKX1yZXR1cm4gdC4kJHR5cGVvZj1OLHQucmVuZGVyPXQsdC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD10Ll9fZj0hMCx0LmRpc3BsYXlOYW1lPVwiRm9yd2FyZFJlZihcIisobi5kaXNwbGF5TmFtZXx8bi5uYW1lKStcIilcIix0fXZhciBBPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG51bGw9PW4/bnVsbDpyKHIobikubWFwKHQpKX0sTz17bWFwOkEsZm9yRWFjaDpBLGNvdW50OmZ1bmN0aW9uKG4pe3JldHVybiBuP3IobikubGVuZ3RoOjB9LG9ubHk6ZnVuY3Rpb24obil7dmFyIHQ9cihuKTtpZigxIT09dC5sZW5ndGgpdGhyb3dcIkNoaWxkcmVuLm9ubHlcIjtyZXR1cm4gdFswXX0sdG9BcnJheTpyfSxUPWUuX19lO2UuX19lPWZ1bmN0aW9uKG4sdCxlLHIpe2lmKG4udGhlbilmb3IodmFyIHUsbz10O289by5fXzspaWYoKHU9by5fX2MpJiZ1Ll9fYylyZXR1cm4gbnVsbD09dC5fX2UmJih0Ll9fZT1lLl9fZSx0Ll9faz1lLl9fayksdS5fX2Mobix0KTtUKG4sdCxlLHIpfTt2YXIgST1lLnVubW91bnQ7ZnVuY3Rpb24gTChuLHQsZSl7cmV0dXJuIG4mJihuLl9fYyYmbi5fX2MuX19IJiYobi5fX2MuX19ILl9fLmZvckVhY2goZnVuY3Rpb24obil7XCJmdW5jdGlvblwiPT10eXBlb2Ygbi5fX2MmJm4uX19jKCl9KSxuLl9fYy5fX0g9bnVsbCksbnVsbCE9KG49Zyh7fSxuKSkuX19jJiYobi5fX2MuX19QPT09ZSYmKG4uX19jLl9fUD10KSxuLl9fYz1udWxsKSxuLl9faz1uLl9fayYmbi5fX2subWFwKGZ1bmN0aW9uKG4pe3JldHVybiBMKG4sdCxlKX0pKSxufWZ1bmN0aW9uIFUobix0LGUpe3JldHVybiBuJiYobi5fX3Y9bnVsbCxuLl9faz1uLl9fayYmbi5fX2subWFwKGZ1bmN0aW9uKG4pe3JldHVybiBVKG4sdCxlKX0pLG4uX19jJiZuLl9fYy5fX1A9PT10JiYobi5fX2UmJmUuaW5zZXJ0QmVmb3JlKG4uX19lLG4uX19kKSxuLl9fYy5fX2U9ITAsbi5fX2MuX19QPWUpKSxufWZ1bmN0aW9uIEQoKXt0aGlzLl9fdT0wLHRoaXMudD1udWxsLHRoaXMuX19iPW51bGx9ZnVuY3Rpb24gRihuKXt2YXIgdD1uLl9fLl9fYztyZXR1cm4gdCYmdC5fX2EmJnQuX19hKG4pfWZ1bmN0aW9uIE0obil7dmFyIGUscix1O2Z1bmN0aW9uIG8obyl7aWYoZXx8KGU9bigpKS50aGVuKGZ1bmN0aW9uKG4pe3I9bi5kZWZhdWx0fHxufSxmdW5jdGlvbihuKXt1PW59KSx1KXRocm93IHU7aWYoIXIpdGhyb3cgZTtyZXR1cm4gdChyLG8pfXJldHVybiBvLmRpc3BsYXlOYW1lPVwiTGF6eVwiLG8uX19mPSEwLG99ZnVuY3Rpb24gVigpe3RoaXMudT1udWxsLHRoaXMubz1udWxsfWUudW5tb3VudD1mdW5jdGlvbihuKXt2YXIgdD1uLl9fYzt0JiZ0Ll9fUiYmdC5fX1IoKSx0JiYhMD09PW4uX19oJiYobi50eXBlPW51bGwpLEkmJkkobil9LChELnByb3RvdHlwZT1uZXcgbikuX19jPWZ1bmN0aW9uKG4sdCl7dmFyIGU9dC5fX2Mscj10aGlzO251bGw9PXIudCYmKHIudD1bXSksci50LnB1c2goZSk7dmFyIHU9RihyLl9fdiksbz0hMSxpPWZ1bmN0aW9uKCl7b3x8KG89ITAsZS5fX1I9bnVsbCx1P3UobCk6bCgpKX07ZS5fX1I9aTt2YXIgbD1mdW5jdGlvbigpe2lmKCEtLXIuX191KXtpZihyLnN0YXRlLl9fYSl7dmFyIG49ci5zdGF0ZS5fX2E7ci5fX3YuX19rWzBdPVUobixuLl9fYy5fX1Asbi5fX2MuX19PKX12YXIgdDtmb3Ioci5zZXRTdGF0ZSh7X19hOnIuX19iPW51bGx9KTt0PXIudC5wb3AoKTspdC5mb3JjZVVwZGF0ZSgpfX0sYz0hMD09PXQuX19oO3IuX191Kyt8fGN8fHIuc2V0U3RhdGUoe19fYTpyLl9fYj1yLl9fdi5fX2tbMF19KSxuLnRoZW4oaSxpKX0sRC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLnQ9W119LEQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihuLGUpe2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksbz10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1MKHRoaXMuX19iLHIsby5fX089by5fX1ApfXRoaXMuX19iPW51bGx9dmFyIGk9ZS5fX2EmJnQodSxudWxsLG4uZmFsbGJhY2spO3JldHVybiBpJiYoaS5fX2g9bnVsbCksW3QodSxudWxsLGUuX19hP251bGw6bi5jaGlsZHJlbiksaV19O3ZhciBXPWZ1bmN0aW9uKG4sdCxlKXtpZigrK2VbMV09PT1lWzBdJiZuLm8uZGVsZXRlKHQpLG4ucHJvcHMucmV2ZWFsT3JkZXImJihcInRcIiE9PW4ucHJvcHMucmV2ZWFsT3JkZXJbMF18fCFuLm8uc2l6ZSkpZm9yKGU9bi51O2U7KXtmb3IoO2UubGVuZ3RoPjM7KWUucG9wKCkoKTtpZihlWzFdPGVbMF0pYnJlYWs7bi51PWU9ZVsyXX19O2Z1bmN0aW9uIFAobil7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIG4uY29udGV4dH0sbi5jaGlsZHJlbn1mdW5jdGlvbiBqKG4pe3ZhciBlPXRoaXMscj1uLmk7ZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe28obnVsbCxlLmwpLGUubD1udWxsLGUuaT1udWxsfSxlLmkmJmUuaSE9PXImJmUuY29tcG9uZW50V2lsbFVubW91bnQoKSxuLl9fdj8oZS5sfHwoZS5pPXIsZS5sPXtub2RlVHlwZToxLHBhcmVudE5vZGU6cixjaGlsZE5vZGVzOltdLGFwcGVuZENoaWxkOmZ1bmN0aW9uKG4pe3RoaXMuY2hpbGROb2Rlcy5wdXNoKG4pLGUuaS5hcHBlbmRDaGlsZChuKX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKG4sdCl7dGhpcy5jaGlsZE5vZGVzLnB1c2gobiksZS5pLmFwcGVuZENoaWxkKG4pfSxyZW1vdmVDaGlsZDpmdW5jdGlvbihuKXt0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKHRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKG4pPj4+MSwxKSxlLmkucmVtb3ZlQ2hpbGQobil9fSksbyh0KFAse2NvbnRleHQ6ZS5jb250ZXh0fSxuLl9fdiksZS5sKSk6ZS5sJiZlLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9ZnVuY3Rpb24geihuLGUpe3ZhciByPXQoaix7X192Om4saTplfSk7cmV0dXJuIHIuY29udGFpbmVySW5mbz1lLHJ9KFYucHJvdG90eXBlPW5ldyBuKS5fX2E9ZnVuY3Rpb24obil7dmFyIHQ9dGhpcyxlPUYodC5fX3YpLHI9dC5vLmdldChuKTtyZXR1cm4gclswXSsrLGZ1bmN0aW9uKHUpe3ZhciBvPWZ1bmN0aW9uKCl7dC5wcm9wcy5yZXZlYWxPcmRlcj8oci5wdXNoKHUpLFcodCxuLHIpKTp1KCl9O2U/ZShvKTpvKCl9fSxWLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24obil7dGhpcy51PW51bGwsdGhpcy5vPW5ldyBNYXA7dmFyIHQ9cihuLmNoaWxkcmVuKTtuLnJldmVhbE9yZGVyJiZcImJcIj09PW4ucmV2ZWFsT3JkZXJbMF0mJnQucmV2ZXJzZSgpO2Zvcih2YXIgZT10Lmxlbmd0aDtlLS07KXRoaXMuby5zZXQodFtlXSx0aGlzLnU9WzEsMCx0aGlzLnVdKTtyZXR1cm4gbi5jaGlsZHJlbn0sVi5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPVYucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIG49dGhpczt0aGlzLm8uZm9yRWFjaChmdW5jdGlvbih0LGUpe1cobixlLHQpfSl9O3ZhciBCPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpfHw2MDEwMyxIPS9eKD86YWNjZW50fGFsaWdubWVudHxhcmFiaWN8YmFzZWxpbmV8Y2FwfGNsaXAoPyFQYXRoVSl8Y29sb3J8ZG9taW5hbnR8ZmlsbHxmbG9vZHxmb250fGdseXBoKD8hUil8aG9yaXp8aW1hZ2V8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLFo9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLyxZPS9bQS1aMC05XS9nLCQ9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50LHE9ZnVuY3Rpb24obil7cmV0dXJuKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2woKT8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdChuKX07ZnVuY3Rpb24gRyhuLHQsZSl7cmV0dXJuIG51bGw9PXQuX19rJiYodC50ZXh0Q29udGVudD1cIlwiKSxvKG4sdCksXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmZSgpLG4/bi5fX2M6bnVsbH1mdW5jdGlvbiBKKG4sdCxlKXtyZXR1cm4gaShuLHQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUoKSxuP24uX19jOm51bGx9bi5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD17fSxbXCJjb21wb25lbnRXaWxsTW91bnRcIixcImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNcIixcImNvbXBvbmVudFdpbGxVcGRhdGVcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsdCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW1wiVU5TQUZFX1wiK3RdfSxzZXQ6ZnVuY3Rpb24obil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm59KX19KX0pO3ZhciBLPWUuZXZlbnQ7ZnVuY3Rpb24gUSgpe31mdW5jdGlvbiBYKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfWZ1bmN0aW9uIG5uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZH1lLmV2ZW50PWZ1bmN0aW9uKG4pe3JldHVybiBLJiYobj1LKG4pKSxuLnBlcnNpc3Q9USxuLmlzUHJvcGFnYXRpb25TdG9wcGVkPVgsbi5pc0RlZmF1bHRQcmV2ZW50ZWQ9bm4sbi5uYXRpdmVFdmVudD1ufTt2YXIgdG4sZW49e2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzfX0scm49ZS52bm9kZTtlLnZub2RlPWZ1bmN0aW9uKG4pe1wic3RyaW5nXCI9PXR5cGVvZiBuLnR5cGUmJmZ1bmN0aW9uKG4pe3ZhciB0PW4ucHJvcHMsZT1uLnR5cGUsdT17fTtmb3IodmFyIG8gaW4gdCl7dmFyIGk9dFtvXTtpZighKFwidmFsdWVcIj09PW8mJlwiZGVmYXVsdFZhbHVlXCJpbiB0JiZudWxsPT1pfHwkJiZcImNoaWxkcmVuXCI9PT1vJiZcIm5vc2NyaXB0XCI9PT1lfHxcImNsYXNzXCI9PT1vfHxcImNsYXNzTmFtZVwiPT09bykpe3ZhciBsPW8udG9Mb3dlckNhc2UoKTtcImRlZmF1bHRWYWx1ZVwiPT09byYmXCJ2YWx1ZVwiaW4gdCYmbnVsbD09dC52YWx1ZT9vPVwidmFsdWVcIjpcImRvd25sb2FkXCI9PT1vJiYhMD09PWk/aT1cIlwiOlwib25kb3VibGVjbGlja1wiPT09bD9vPVwib25kYmxjbGlja1wiOlwib25jaGFuZ2VcIiE9PWx8fFwiaW5wdXRcIiE9PWUmJlwidGV4dGFyZWFcIiE9PWV8fHEodC50eXBlKT9cIm9uZm9jdXNcIj09PWw/bz1cIm9uZm9jdXNpblwiOlwib25ibHVyXCI9PT1sP289XCJvbmZvY3Vzb3V0XCI6Wi50ZXN0KG8pP289bDotMT09PWUuaW5kZXhPZihcIi1cIikmJkgudGVzdChvKT9vPW8ucmVwbGFjZShZLFwiLSQmXCIpLnRvTG93ZXJDYXNlKCk6bnVsbD09PWkmJihpPXZvaWQgMCk6bD1vPVwib25pbnB1dFwiLFwib25pbnB1dFwiPT09bCYmdVtvPWxdJiYobz1cIm9uaW5wdXRDYXB0dXJlXCIpLHVbb109aX19XCJzZWxlY3RcIj09ZSYmdS5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheSh1LnZhbHVlKSYmKHUudmFsdWU9cih0LmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24ucHJvcHMuc2VsZWN0ZWQ9LTEhPXUudmFsdWUuaW5kZXhPZihuLnByb3BzLnZhbHVlKX0pKSxcInNlbGVjdFwiPT1lJiZudWxsIT11LmRlZmF1bHRWYWx1ZSYmKHUudmFsdWU9cih0LmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24ucHJvcHMuc2VsZWN0ZWQ9dS5tdWx0aXBsZT8tMSE9dS5kZWZhdWx0VmFsdWUuaW5kZXhPZihuLnByb3BzLnZhbHVlKTp1LmRlZmF1bHRWYWx1ZT09bi5wcm9wcy52YWx1ZX0pKSx0LmNsYXNzJiYhdC5jbGFzc05hbWU/KHUuY2xhc3M9dC5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkodSxcImNsYXNzTmFtZVwiLGVuKSk6KHQuY2xhc3NOYW1lJiYhdC5jbGFzc3x8dC5jbGFzcyYmdC5jbGFzc05hbWUpJiYodS5jbGFzcz11LmNsYXNzTmFtZT10LmNsYXNzTmFtZSksbi5wcm9wcz11fShuKSxuLiQkdHlwZW9mPUIscm4mJnJuKG4pfTt2YXIgdW49ZS5fX3I7ZS5fX3I9ZnVuY3Rpb24obil7dW4mJnVuKG4pLHRuPW4uX19jfTt2YXIgb249ZS5kaWZmZWQ7ZS5kaWZmZWQ9ZnVuY3Rpb24obil7b24mJm9uKG4pO3ZhciB0PW4ucHJvcHMsZT1uLl9fZTtudWxsIT1lJiZcInRleHRhcmVhXCI9PT1uLnR5cGUmJlwidmFsdWVcImluIHQmJnQudmFsdWUhPT1lLnZhbHVlJiYoZS52YWx1ZT1udWxsPT10LnZhbHVlP1wiXCI6dC52YWx1ZSksdG49bnVsbH07dmFyIGxuPXtSZWFjdEN1cnJlbnREaXNwYXRjaGVyOntjdXJyZW50OntyZWFkQ29udGV4dDpmdW5jdGlvbihuKXtyZXR1cm4gdG4uX19uW24uX19jXS5wcm9wcy52YWx1ZX19fX0sY249XCIxNy4wLjJcIjtmdW5jdGlvbiBmbihuKXtyZXR1cm4gdC5iaW5kKG51bGwsbil9ZnVuY3Rpb24gYW4obil7cmV0dXJuISFuJiZuLiQkdHlwZW9mPT09Qn1mdW5jdGlvbiBzbihuKXtyZXR1cm4gYW4obik/Zi5hcHBseShudWxsLGFyZ3VtZW50cyk6bn1mdW5jdGlvbiBobihuKXtyZXR1cm4hIW4uX19rJiYobyhudWxsLG4pLCEwKX1mdW5jdGlvbiB2bihuKXtyZXR1cm4gbiYmKG4uYmFzZXx8MT09PW4ubm9kZVR5cGUmJm4pfHxudWxsfXZhciBkbj1mdW5jdGlvbihuLHQpe3JldHVybiBuKHQpfSxwbj1mdW5jdGlvbihuLHQpe3JldHVybiBuKHQpfSxtbj11O2Z1bmN0aW9uIHluKG4pe24oKX1mdW5jdGlvbiBfbihuKXtyZXR1cm4gbn1mdW5jdGlvbiBibigpe3JldHVyblshMSx5bl19dmFyIFNuPWQ7ZnVuY3Rpb24gZ24obix0KXt2YXIgZT10KCkscj1hKHtoOntfXzplLHY6dH19KSx1PXJbMF0uaCxvPXJbMV07cmV0dXJuIGQoZnVuY3Rpb24oKXt1Ll9fPWUsdS52PXQsRSh1Ll9fLHQoKSl8fG8oe2g6dX0pfSxbbixlLHRdKSx2KGZ1bmN0aW9uKCl7cmV0dXJuIEUodS5fXyx1LnYoKSl8fG8oe2g6dX0pLG4oZnVuY3Rpb24oKXtFKHUuX18sdS52KCkpfHxvKHtoOnV9KX0pfSxbbl0pLGV9dmFyIENuPXt1c2VTdGF0ZTphLHVzZUlkOnMsdXNlUmVkdWNlcjpoLHVzZUVmZmVjdDp2LHVzZUxheW91dEVmZmVjdDpkLHVzZUluc2VydGlvbkVmZmVjdDpTbix1c2VUcmFuc2l0aW9uOmJuLHVzZURlZmVycmVkVmFsdWU6X24sdXNlU3luY0V4dGVybmFsU3RvcmU6Z24sc3RhcnRUcmFuc2l0aW9uOnluLHVzZVJlZjpwLHVzZUltcGVyYXRpdmVIYW5kbGU6bSx1c2VNZW1vOnksdXNlQ2FsbGJhY2s6Xyx1c2VDb250ZXh0OmIsdXNlRGVidWdWYWx1ZTpTLHZlcnNpb246XCIxNy4wLjJcIixDaGlsZHJlbjpPLHJlbmRlcjpHLGh5ZHJhdGU6Six1bm1vdW50Q29tcG9uZW50QXROb2RlOmhuLGNyZWF0ZVBvcnRhbDp6LGNyZWF0ZUVsZW1lbnQ6dCxjcmVhdGVDb250ZXh0OmwsY3JlYXRlRmFjdG9yeTpmbixjbG9uZUVsZW1lbnQ6c24sY3JlYXRlUmVmOmMsRnJhZ21lbnQ6dSxpc1ZhbGlkRWxlbWVudDphbixmaW5kRE9NTm9kZTp2bixDb21wb25lbnQ6bixQdXJlQ29tcG9uZW50OncsbWVtbzp4LGZvcndhcmRSZWY6ayxmbHVzaFN5bmM6cG4sdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM6ZG4sU3RyaWN0TW9kZTptbixTdXNwZW5zZTpELFN1c3BlbnNlTGlzdDpWLGxhenk6TSxfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDpsbn07ZXhwb3J0e08gYXMgQ2hpbGRyZW4sdyBhcyBQdXJlQ29tcG9uZW50LG1uIGFzIFN0cmljdE1vZGUsRCBhcyBTdXNwZW5zZSxWIGFzIFN1c3BlbnNlTGlzdCxsbiBhcyBfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCxzbiBhcyBjbG9uZUVsZW1lbnQsZm4gYXMgY3JlYXRlRmFjdG9yeSx6IGFzIGNyZWF0ZVBvcnRhbCxDbiBhcyBkZWZhdWx0LHZuIGFzIGZpbmRET01Ob2RlLHBuIGFzIGZsdXNoU3luYyxrIGFzIGZvcndhcmRSZWYsSiBhcyBoeWRyYXRlLGFuIGFzIGlzVmFsaWRFbGVtZW50LE0gYXMgbGF6eSx4IGFzIG1lbW8sRyBhcyByZW5kZXIseW4gYXMgc3RhcnRUcmFuc2l0aW9uLGhuIGFzIHVubW91bnRDb21wb25lbnRBdE5vZGUsZG4gYXMgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMsX24gYXMgdXNlRGVmZXJyZWRWYWx1ZSxTbiBhcyB1c2VJbnNlcnRpb25FZmZlY3QsZ24gYXMgdXNlU3luY0V4dGVybmFsU3RvcmUsYm4gYXMgdXNlVHJhbnNpdGlvbixjbiBhcyB2ZXJzaW9ufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbXBhdC5tb2R1bGUuanMubWFwXG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuXG5leHBvcnQgY29uc3QgdXNlR2lmdE9wZW4gPSAoZGVsYXkgPSAxMDAwKSA9PiB7XG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgdGltZXJSZWYgPSB1c2VSZWYobnVsbClcblxuICBjb25zdCBvblRvZ2dsZSA9ICgpID0+IHtcbiAgICBjbGVhclRpbWVvdXQodGltZXJSZWYuY3VycmVudClcbiAgICBzZXRJc09wZW4ocHJldiA9PiAhcHJldilcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgdGltZXJSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2V0SXNPcGVuKHRydWUpXG4gICAgfSwgZGVsYXkpXG5cbiAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVyUmVmLmN1cnJlbnQpXG4gIH0sIFtkZWxheV0pXG5cbiAgcmV0dXJuIHtcbiAgICBpc09wZW4sXG4gICAgb25Ub2dnbGVcbiAgfVxufVxuIiwiaW1wb3J0e29wdGlvbnMgYXMgcn1mcm9tXCJwcmVhY3RcIjtleHBvcnR7RnJhZ21lbnR9ZnJvbVwicHJlYWN0XCI7dmFyIF89MDtmdW5jdGlvbiBvKG8sZSxuLHQsZixsKXt2YXIgcyx1LGE9e307Zm9yKHUgaW4gZSlcInJlZlwiPT11P3M9ZVt1XTphW3VdPWVbdV07dmFyIGk9e3R5cGU6byxwcm9wczphLGtleTpuLHJlZjpzLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19kOnZvaWQgMCxfX2M6bnVsbCxfX2g6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Oi0tXyxfX3NvdXJjZTpmLF9fc2VsZjpsfTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBvJiYocz1vLmRlZmF1bHRQcm9wcykpZm9yKHUgaW4gcyl2b2lkIDA9PT1hW3VdJiYoYVt1XT1zW3VdKTtyZXR1cm4gci52bm9kZSYmci52bm9kZShpKSxpfWV4cG9ydHtvIGFzIGpzeCxvIGFzIGpzeERFVixvIGFzIGpzeHN9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9anN4UnVudGltZS5tb2R1bGUuanMubWFwXG4iLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncHJlYWN0J1xuXG5leHBvcnQgY29uc3QgU3RhdGUgPSBjcmVhdGVDb250ZXh0KClcblxuY29uc3QgU3RhdGVDb250ZXh0ID0gKHsgY2hpbGRyZW4sIHZhbHVlIH0pID0+IHtcbiAgcmV0dXJuIDxTdGF0ZS5Qcm92aWRlciB2YWx1ZT17dmFsdWV9PntjaGlsZHJlbn08L1N0YXRlLlByb3ZpZGVyPlxufVxuXG5leHBvcnQgZGVmYXVsdCBTdGF0ZUNvbnRleHRcbiIsImltcG9ydCB7IENvbXBvbmVudENoaWxkLCBDb250YWluZXJOb2RlLCByZW5kZXIgYXMgcHJlYWN0UmVuZGVyIH0gZnJvbSAncHJlYWN0J1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICcuLi9TdGF0ZUNvbnRleHQnXG5cbmV4cG9ydCBjb25zdCByZW5kZXIgPSAodk5vZGU6IENvbXBvbmVudENoaWxkKSA9PiAodGFyZ2V0OiBDb250YWluZXJOb2RlLCBzdGF0ZT86IGFueSkgPT5cbiAgcHJlYWN0UmVuZGVyKDxTdGF0ZUNvbnRleHQgdmFsdWU9e3N0YXRlfT57dk5vZGV9PC9TdGF0ZUNvbnRleHQ+LCB0YXJnZXQgYXMgSFRNTEVsZW1lbnQpXG4iLCJpbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcbmltcG9ydCB7IFN0YXRlIH0gZnJvbSBcIi4uL1N0YXRlQ29udGV4dFwiO1xuXG5leHBvcnQgY29uc3QgdXNlQ3VycmVudFN0YXRlID0gKCkgPT4gdXNlQ29udGV4dChTdGF0ZSlcbiIsIi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVDbGVhcjtcbiIsIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxO1xuIiwidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc29jSW5kZXhPZjtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZURlbGV0ZTtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVHZXQ7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiIsInZhciBsaXN0Q2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUNsZWFyJyksXG4gICAgbGlzdENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlRGVsZXRlJyksXG4gICAgbGlzdENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlR2V0JyksXG4gICAgbGlzdENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlSGFzJyksXG4gICAgbGlzdENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBMaXN0Q2FjaGU7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0RlbGV0ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0dldDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tIYXM7XG4iLCIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZyZWVHbG9iYWw7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJvb3Q7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbm1vZHVsZS5leHBvcnRzID0gY29yZUpzRGF0YTtcbiIsInZhciBjb3JlSnNEYXRhID0gcmVxdWlyZSgnLi9fY29yZUpzRGF0YScpO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFza2VkO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU291cmNlO1xuIiwidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc01hc2tlZCA9IHJlcXVpcmUoJy4vX2lzTWFza2VkJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hdGl2ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUNyZWF0ZTtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaENsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoRGVsZXRlO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChuYXRpdmVDcmVhdGUpIHtcbiAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXldO1xuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkgPyBkYXRhW2tleV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEdldDtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hIYXM7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hTZXQ7XG4iLCJ2YXIgaGFzaENsZWFyID0gcmVxdWlyZSgnLi9faGFzaENsZWFyJyksXG4gICAgaGFzaERlbGV0ZSA9IHJlcXVpcmUoJy4vX2hhc2hEZWxldGUnKSxcbiAgICBoYXNoR2V0ID0gcmVxdWlyZSgnLi9faGFzaEdldCcpLFxuICAgIGhhc2hIYXMgPSByZXF1aXJlKCcuL19oYXNoSGFzJyksXG4gICAgaGFzaFNldCA9IHJlcXVpcmUoJy4vX2hhc2hTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IGhhc2hDbGVhcjtcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IGhhc2hEZWxldGU7XG5IYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xuSGFzaC5wcm90b3R5cGUuaGFzID0gaGFzaEhhcztcbkhhc2gucHJvdG90eXBlLnNldCA9IGhhc2hTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaDtcbiIsInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLCJ2YXIgaXNLZXlhYmxlID0gcmVxdWlyZSgnLi9faXNLZXlhYmxlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXBEYXRhO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IGdldE1hcERhdGEodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlRGVsZXRlO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUdldDtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlSGFzO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IGdldE1hcERhdGEodGhpcywga2V5KSxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZVNldDtcbiIsInZhciBtYXBDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVDbGVhcicpLFxuICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVEZWxldGUnKSxcbiAgICBtYXBDYWNoZUdldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlR2V0JyksXG4gICAgbWFwQ2FjaGVIYXMgPSByZXF1aXJlKCcuL19tYXBDYWNoZUhhcycpLFxuICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwQ2FjaGU7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja1NldDtcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBzdGFja0NsZWFyID0gcmVxdWlyZSgnLi9fc3RhY2tDbGVhcicpLFxuICAgIHN0YWNrRGVsZXRlID0gcmVxdWlyZSgnLi9fc3RhY2tEZWxldGUnKSxcbiAgICBzdGFja0dldCA9IHJlcXVpcmUoJy4vX3N0YWNrR2V0JyksXG4gICAgc3RhY2tIYXMgPSByZXF1aXJlKCcuL19zdGFja0hhcycpLFxuICAgIHN0YWNrU2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xuU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IHN0YWNrRGVsZXRlO1xuU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xuU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YWNrO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0eTtcbiIsInZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2RlZmluZVByb3BlcnR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAqIHZhbHVlIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgZGVmaW5lUHJvcGVydHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXG4gICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnblZhbHVlO1xuIiwidmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYXNzaWduVmFsdWVgIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgYXNzaWduXG4gKiBgdW5kZWZpbmVkYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKCh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmICFlcShvYmplY3Rba2V5XSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnbk1lcmdlVmFsdWU7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBiYXNlIGZ1bmN0aW9uIGZvciBtZXRob2RzIGxpa2UgYF8uZm9ySW5gIGFuZCBgXy5mb3JPd25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGb3IoZnJvbVJpZ2h0KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChvYmplY3QpLFxuICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXG4gICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgdmFyIGtleSA9IHByb3BzW2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdO1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVCYXNlRm9yO1xuIiwidmFyIGNyZWF0ZUJhc2VGb3IgPSByZXF1aXJlKCcuL19jcmVhdGVCYXNlRm9yJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JPd25gIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYG9iamVjdGBcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxuICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG52YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRm9yO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgIGFsbG9jVW5zYWZlID0gQnVmZmVyID8gQnVmZmVyLmFsbG9jVW5zYWZlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiAgYGJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgVGhlIGJ1ZmZlciB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5zbGljZSgpO1xuICB9XG4gIHZhciBsZW5ndGggPSBidWZmZXIubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gYWxsb2NVbnNhZmUgPyBhbGxvY1Vuc2FmZShsZW5ndGgpIDogbmV3IGJ1ZmZlci5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIGJ1ZmZlci5jb3B5KHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVCdWZmZXI7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBVaW50OEFycmF5O1xuIiwidmFyIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBhcnJheUJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGFycmF5QnVmZmVyIFRoZSBhcnJheSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5zZXQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUFycmF5QnVmZmVyO1xuIiwidmFyIGNsb25lQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUFycmF5QnVmZmVyJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGB0eXBlZEFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHR5cGVkQXJyYXkgVGhlIHR5cGVkIGFycmF5IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB0eXBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xuICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcih0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVUeXBlZEFycmF5O1xuIiwiLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weUFycmF5O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAqIHByb3BlcnRpZXMgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG52YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgaWYgKCFpc09iamVjdChwcm90bykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKG9iamVjdENyZWF0ZSkge1xuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgfVxuICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDcmVhdGU7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFByb3RvdHlwZTtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb3RvdHlwZTtcbiIsInZhciBiYXNlQ3JlYXRlID0gcmVxdWlyZSgnLi9fYmFzZUNyZWF0ZScpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KSB7XG4gIHJldHVybiAodHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmICFpc1Byb3RvdHlwZShvYmplY3QpKVxuICAgID8gYmFzZUNyZWF0ZShnZXRQcm90b3R5cGUob2JqZWN0KSlcbiAgICA6IHt9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluaXRDbG9uZU9iamVjdDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0TGlrZTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xlbmd0aDtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwidmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxuICogaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZU9iamVjdDtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViRmFsc2U7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKSxcbiAgICBzdHViRmFsc2UgPSByZXF1aXJlKCcuL3N0dWJGYWxzZScpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCdWZmZXI7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC44LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxuICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQbGFpbk9iamVjdDtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmFyeTtcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwidmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgLCB1bmxlc3MgYGtleWAgaXMgXCJfX3Byb3RvX19cIiBvciBcImNvbnN0cnVjdG9yXCIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzYWZlR2V0KG9iamVjdCwga2V5KSB7XG4gIGlmIChrZXkgPT09ICdjb25zdHJ1Y3RvcicgJiYgdHlwZW9mIG9iamVjdFtrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGtleSA9PSAnX19wcm90b19fJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzYWZlR2V0O1xuIiwidmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnblZhbHVlO1xuIiwidmFyIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKTtcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weU9iamVjdDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSW5kZXg7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzSW47XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXNJbiA9IHJlcXVpcmUoJy4vX25hdGl2ZUtleXNJbicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gIH1cbiAgdmFyIGlzUHJvdG8gPSBpc1Byb3RvdHlwZShvYmplY3QpLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VLZXlzSW47XG4iLCJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5c0luID0gcmVxdWlyZSgnLi9fYmFzZUtleXNJbicpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzSW47XG4iLCJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBwbGFpbiBvYmplY3QgZmxhdHRlbmluZyBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmdcbiAqIGtleWVkIHByb3BlcnRpZXMgb2YgYHZhbHVlYCB0byBvd24gcHJvcGVydGllcyBvZiB0aGUgcGxhaW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29udmVydGVkIHBsYWluIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgbmV3IEZvbyk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAqXG4gKiBfLmFzc2lnbih7ICdhJzogMSB9LCBfLnRvUGxhaW5PYmplY3QobmV3IEZvbykpO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH1cbiAqL1xuZnVuY3Rpb24gdG9QbGFpbk9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gY29weU9iamVjdCh2YWx1ZSwga2V5c0luKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9QbGFpbk9iamVjdDtcbiIsInZhciBhc3NpZ25NZXJnZVZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduTWVyZ2VWYWx1ZScpLFxuICAgIGNsb25lQnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVCdWZmZXInKSxcbiAgICBjbG9uZVR5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19jbG9uZVR5cGVkQXJyYXknKSxcbiAgICBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKSxcbiAgICBpbml0Q2xvbmVPYmplY3QgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVPYmplY3QnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNBcnJheUxpa2VPYmplY3QgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlT2JqZWN0JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL2lzUGxhaW5PYmplY3QnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpLFxuICAgIHNhZmVHZXQgPSByZXF1aXJlKCcuL19zYWZlR2V0JyksXG4gICAgdG9QbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4vdG9QbGFpbk9iamVjdCcpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZU1lcmdlYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIG1lcmdlcyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBtZXJnZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIG1lcmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRnVuYyBUaGUgZnVuY3Rpb24gdG8gbWVyZ2UgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAqICBjb3VudGVycGFydHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgc3JjSW5kZXgsIG1lcmdlRnVuYywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgdmFyIG9ialZhbHVlID0gc2FmZUdldChvYmplY3QsIGtleSksXG4gICAgICBzcmNWYWx1ZSA9IHNhZmVHZXQoc291cmNlLCBrZXkpLFxuICAgICAgc3RhY2tlZCA9IHN0YWNrLmdldChzcmNWYWx1ZSk7XG5cbiAgaWYgKHN0YWNrZWQpIHtcbiAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBzdGFja2VkKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgID8gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICA6IHVuZGVmaW5lZDtcblxuICB2YXIgaXNDb21tb24gPSBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG4gIGlmIChpc0NvbW1vbikge1xuICAgIHZhciBpc0FyciA9IGlzQXJyYXkoc3JjVmFsdWUpLFxuICAgICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgaXNCdWZmZXIoc3JjVmFsdWUpLFxuICAgICAgICBpc1R5cGVkID0gIWlzQXJyICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHNyY1ZhbHVlKTtcblxuICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgaWYgKGlzQXJyIHx8IGlzQnVmZiB8fCBpc1R5cGVkKSB7XG4gICAgICBpZiAoaXNBcnJheShvYmpWYWx1ZSkpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IGNvcHlBcnJheShvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0J1ZmYpIHtcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgbmV3VmFsdWUgPSBjbG9uZUJ1ZmZlcihzcmNWYWx1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc1R5cGVkKSB7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIG5ld1ZhbHVlID0gY2xvbmVUeXBlZEFycmF5KHNyY1ZhbHVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBuZXdWYWx1ZSA9IFtdO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHNyY1ZhbHVlKSB8fCBpc0FyZ3VtZW50cyhzcmNWYWx1ZSkpIHtcbiAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICBpZiAoaXNBcmd1bWVudHMob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gdG9QbGFpbk9iamVjdChvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICghaXNPYmplY3Qob2JqVmFsdWUpIHx8IGlzRnVuY3Rpb24ob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaW5pdENsb25lT2JqZWN0KHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBpZiAoaXNDb21tb24pIHtcbiAgICAvLyBSZWN1cnNpdmVseSBtZXJnZSBvYmplY3RzIGFuZCBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBzdGFjay5zZXQoc3JjVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICBtZXJnZUZ1bmMobmV3VmFsdWUsIHNyY1ZhbHVlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spO1xuICAgIHN0YWNrWydkZWxldGUnXShzcmNWYWx1ZSk7XG4gIH1cbiAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNZXJnZURlZXA7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGFzc2lnbk1lcmdlVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25NZXJnZVZhbHVlJyksXG4gICAgYmFzZUZvciA9IHJlcXVpcmUoJy4vX2Jhc2VGb3InKSxcbiAgICBiYXNlTWVyZ2VEZWVwID0gcmVxdWlyZSgnLi9fYmFzZU1lcmdlRGVlcCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyksXG4gICAgc2FmZUdldCA9IHJlcXVpcmUoJy4vX3NhZmVHZXQnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tZXJnZWAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIG1lcmdlZCB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1lcmdlZFxuICogIGNvdW50ZXJwYXJ0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spIHtcbiAgaWYgKG9iamVjdCA9PT0gc291cmNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGJhc2VGb3Ioc291cmNlLCBmdW5jdGlvbihzcmNWYWx1ZSwga2V5KSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICBpZiAoaXNPYmplY3Qoc3JjVmFsdWUpKSB7XG4gICAgICBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBiYXNlTWVyZ2UsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICAgID8gY3VzdG9taXplcihzYWZlR2V0KG9iamVjdCwga2V5KSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgICB9XG4gICAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9LCBrZXlzSW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNZXJnZTtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaWRlbnRpdHk7XG4iLCIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXBwbHk7XG4iLCJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJSZXN0O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb25zdGFudCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uY29uc3RhbnQoeyAnYSc6IDEgfSkpO1xuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICogLy8gPT4gW3sgJ2EnOiAxIH0sIHsgJ2EnOiAxIH1dXG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29uc3RhbnQ7XG4iLCJ2YXIgY29uc3RhbnQgPSByZXF1aXJlKCcuL2NvbnN0YW50JyksXG4gICAgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0VG9TdHJpbmc7XG4iLCIvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG52YXIgSE9UX0NPVU5UID0gODAwLFxuICAgIEhPVF9TUEFOID0gMTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICogbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICB2YXIgY291bnQgPSAwLFxuICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvcnRPdXQ7XG4iLCJ2YXIgYmFzZVNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVNldFRvU3RyaW5nJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvU3RyaW5nO1xuIiwidmFyIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VSZXN0O1xuIiwidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgb2JqZWN0IGFyZ3VtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiBpbmRleDtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcidcbiAgICAgICAgPyAoaXNBcnJheUxpa2Uob2JqZWN0KSAmJiBpc0luZGV4KGluZGV4LCBvYmplY3QubGVuZ3RoKSlcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXG4gICAgICApIHtcbiAgICByZXR1cm4gZXEob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0l0ZXJhdGVlQ2FsbDtcbiIsInZhciBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgaXNJdGVyYXRlZUNhbGwgPSByZXF1aXJlKCcuL19pc0l0ZXJhdGVlQ2FsbCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmFzc2lnbmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbmVyIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYXNzaWduZXIgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGFzc2lnbmVyKSB7XG4gIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIHNvdXJjZXMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXG4gICAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPiAxID8gc291cmNlc1tsZW5ndGggLSAxXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICAgIGN1c3RvbWl6ZXIgPSAoYXNzaWduZXIubGVuZ3RoID4gMyAmJiB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nKVxuICAgICAgPyAobGVuZ3RoLS0sIGN1c3RvbWl6ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPCAzID8gdW5kZWZpbmVkIDogY3VzdG9taXplcjtcbiAgICAgIGxlbmd0aCA9IDE7XG4gICAgfVxuICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIGFzc2lnbmVyKG9iamVjdCwgc291cmNlLCBpbmRleCwgY3VzdG9taXplcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUFzc2lnbmVyO1xuIiwidmFyIGJhc2VNZXJnZSA9IHJlcXVpcmUoJy4vX2Jhc2VNZXJnZScpLFxuICAgIGNyZWF0ZUFzc2lnbmVyID0gcmVxdWlyZSgnLi9fY3JlYXRlQXNzaWduZXInKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbmAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgbWVyZ2VzIG93biBhbmRcbiAqIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBvYmplY3RzIGludG8gdGhlXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBwcm9wZXJ0aWVzIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCBhcmVcbiAqIHNraXBwZWQgaWYgYSBkZXN0aW5hdGlvbiB2YWx1ZSBleGlzdHMuIEFycmF5IGFuZCBwbGFpbiBvYmplY3QgcHJvcGVydGllc1xuICogYXJlIG1lcmdlZCByZWN1cnNpdmVseS4gT3RoZXIgb2JqZWN0cyBhbmQgdmFsdWUgdHlwZXMgYXJlIG92ZXJyaWRkZW4gYnlcbiAqIGFzc2lnbm1lbnQuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC4gU3Vic2VxdWVudFxuICogc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuNS4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7XG4gKiAgICdhJzogW3sgJ2InOiAyIH0sIHsgJ2QnOiA0IH1dXG4gKiB9O1xuICpcbiAqIHZhciBvdGhlciA9IHtcbiAqICAgJ2EnOiBbeyAnYyc6IDMgfSwgeyAnZSc6IDUgfV1cbiAqIH07XG4gKlxuICogXy5tZXJnZShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IHsgJ2EnOiBbeyAnYic6IDIsICdjJzogMyB9LCB7ICdkJzogNCwgJ2UnOiA1IH1dIH1cbiAqL1xudmFyIG1lcmdlID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KSB7XG4gIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbWVyZ2U7XG4iLCJpbXBvcnQgeyBDYWxsYmFjayB9IGZyb20gJy4vdHlwZXMnXG5cbnR5cGUgVmlzaXRvciA9IENhbGxiYWNrPFtQcm9wZXJ0eUtleSwgdW5rbm93bl0+XG5cbmV4cG9ydCBjb25zdCBpdGVyYXRvciA9IChpbnB1dDogdW5rbm93biwgdmlzaXRvcjogVmlzaXRvcik6IGFueSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgIHJldHVybiBpbnB1dC5tYXAoKGVsLCBpbmRleCkgPT4gaXRlcmF0b3IodmlzaXRvcihpbmRleCwgZWwpLCB2aXNpdG9yKSlcbiAgfVxuXG4gIGlmICh0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmIGlucHV0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGlucHV0KS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBhY2Nba2V5XSA9IGl0ZXJhdG9yKHZpc2l0b3Ioa2V5LCB2YWx1ZSksIHZpc2l0b3IpXG5cbiAgICAgIHJldHVybiBhY2NcbiAgICB9LCB7fSBhcyBhbnkpXG4gIH1cblxuICByZXR1cm4gaW5wdXRcbn1cbiIsImltcG9ydCB7IEFueU9iamVjdCB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgbG9kYXNoTWVyZ2UgZnJvbSAnbG9kYXNoL21lcmdlJ1xuXG5leHBvcnQgY29uc3QgaXNFbXB0eVZhbHVlID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgbnVsbCB8IHVuZGVmaW5lZCA9PlxuICAhdmFsdWUgJiYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpXG5leHBvcnQgY29uc3QgaXNWYWx1ZSA9IDxUPih2YWx1ZTogVCk6IHZhbHVlIGlzIEV4Y2x1ZGU8VCwgbnVsbCB8IHVuZGVmaW5lZD4gPT4gIWlzRW1wdHlWYWx1ZSh2YWx1ZSlcbmV4cG9ydCBjb25zdCBub29wID0gKCkgPT4gdW5kZWZpbmVkXG5cbmV4cG9ydCBjb25zdCBjcmVhdGVDb25zdGFudHMgPSA8SyBleHRlbmRzIHN0cmluZz4oLi4uY29uc3RhbnRzOiBLW10pID0+IHtcbiAgcmV0dXJuIGNvbnN0YW50cy5yZWR1Y2U8eyBbUCBpbiBLXTogUCB9PigoYWNjLCBjb25zdGFudCkgPT4ge1xuICAgIGFjY1tjb25zdGFudF0gPSBjb25zdGFudFxuICAgIHJldHVybiBhY2NcbiAgfSwge30gYXMgeyBbUCBpbiBLXTogUCB9KVxufVxuXG5leHBvcnQgY29uc3QgcGljayA9IDxUVmFsdWUgZXh0ZW5kcyBBbnlPYmplY3Q+KG9iajogVFZhbHVlLCAuLi5wcm9wczogKGtleW9mIFRWYWx1ZSlbXSkgPT4ge1xuICByZXR1cm4gcHJvcHMucmVkdWNlKChyZXN1bHQsIHByb3ApID0+IHtcbiAgICByZXN1bHRbcHJvcF0gPSBvYmpbcHJvcF1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH0sIHt9IGFzIGFueSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9taXQ8VCBleHRlbmRzIEFueU9iamVjdCwgUCBleHRlbmRzIHN0cmluZ1tdPihvYmo6IFQsIC4uLnByb3BzOiBQKTogT21pdDxULCBQW251bWJlcl0+IHtcbiAgY29uc3QgcmVzdWx0ID0geyAuLi5vYmogfVxuICBwcm9wcy5mb3JFYWNoKHByb3AgPT4ge1xuICAgIGRlbGV0ZSByZXN1bHRbcHJvcF1cbiAgfSlcbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5leHBvcnQgY29uc3QgZ2V0ID0gKG9iajogQW55T2JqZWN0LCBwYXRoOiBzdHJpbmcsIGRlZlZhbHVlPzogdW5rbm93bik6IGFueSA9PiB7XG4gIGlmICghcGF0aCkgcmV0dXJuIHVuZGVmaW5lZFxuICBjb25zdCBwYXRoQXJyYXkgPSAoQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGggOiBwYXRoLm1hdGNoKC8oW15bLlxcXV0pKy9nKSkgYXMgc3RyaW5nW11cbiAgY29uc3QgcmVzdWx0ID0gcGF0aEFycmF5LnJlZHVjZSgocHJldk9iajogQW55T2JqZWN0LCBrZXk6IHN0cmluZykgPT4gcHJldk9iaiAmJiBwcmV2T2JqW2tleV0sIG9iailcbiAgLy8gSWYgZm91bmQgdmFsdWUgaXMgdW5kZWZpbmVkIHJldHVybiBkZWZhdWx0IHZhbHVlOyBvdGhlcndpc2UgcmV0dXJuIHRoZSB2YWx1ZVxuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBkZWZWYWx1ZSA6IHJlc3VsdFxufVxuXG5leHBvcnQgY29uc3Qgc2V0ID0gKG9iajogQW55T2JqZWN0LCBwYXRoOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSA9PiB7XG4gIGNvbnN0IHBhdGhBcnJheSA9IChBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aCA6IHBhdGgubWF0Y2goLyhbXlsuXFxdXSkrL2cpKSBhcyBzdHJpbmdbXVxuXG4gIHJldHVybiBwYXRoQXJyYXkucmVkdWNlKChhY2MsIGtleSwgaSkgPT4ge1xuICAgIGlmIChhY2Nba2V5XSA9PT0gdW5kZWZpbmVkKSBhY2Nba2V5XSA9IHt9XG4gICAgaWYgKGkgPT09IHBhdGhBcnJheS5sZW5ndGggLSAxKSBhY2Nba2V5XSA9IHZhbHVlXG4gICAgcmV0dXJuIGFjY1trZXldXG4gIH0sIG9iailcbn1cblxuZXhwb3J0IGNvbnN0IGhleFRvUmdiID0gKGhleDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IC9eIz8oW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkkL2kuZXhlYyhoZXgpXG5cbiAgcmV0dXJuIHJlc3VsdFxuICAgID8ge1xuICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0sIDE2KSxcbiAgICAgICAgZzogcGFyc2VJbnQocmVzdWx0WzJdLCAxNiksXG4gICAgICAgIGI6IHBhcnNlSW50KHJlc3VsdFszXSwgMTYpXG4gICAgICB9XG4gICAgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGNvbnN0IHJnYlRvUmdiYSA9IChyZ2I6IHN0cmluZywgYWxwaGEgPSAxKTogc3RyaW5nID0+IHJnYi5yZXBsYWNlKCcpJywgYCwgJHthbHBoYX0pYCkucmVwbGFjZSgncmdiJywgJ3JnYmEnKVxuXG5leHBvcnQgY29uc3QgbWVyZ2UgPSBsb2Rhc2hNZXJnZVxuXG5leHBvcnQgY29uc3QgZGV2aWNlcyA9IFsnZGVza3RvcCcsICdsYXB0b3AnLCAndGFibGV0JywgJ21vYmlsZSddIGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBCUkVBS1BPSU5UUyA9IHtcbiAgbW9iaWxlOiAzMjAsXG4gIHRhYmxldDogNzY4LFxuICBsYXB0b3A6IDEwMjQsXG4gIGRlc2t0b3A6IDE5MjBcbn0gYXMgY29uc3RcblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcydcbmV4cG9ydCAqIGZyb20gJy4vaXRlcmF0b3InXG4iLCJpbXBvcnQgeyBBbnlPYmplY3QsIERldmljZSwgZGV2aWNlcywgaXNWYWx1ZSwgaXRlcmF0b3IgfSBmcm9tICdAYWRzdG9yZS91dGlscydcblxuY29uc3QgaXNWYWxpZERldmljZVN0YXRlID0gKHN0YXRlOiBBbnlPYmplY3QgPSB7fSkgPT5cbiAgdHlwZW9mIHN0YXRlID09PSAnb2JqZWN0JyAmJiBpc1ZhbHVlKHN0YXRlKSAmJiBkZXZpY2VzLmV2ZXJ5KGRldmljZSA9PiBkZXZpY2UgaW4gc3RhdGUpXG5cbmV4cG9ydCBjb25zdCBnZXREZXZpY2VTdGF0ZSA9IChzdGF0ZT86IHVua25vd24sIGRldmljZTogRGV2aWNlID0gJ2Rlc2t0b3AnKTogdW5rbm93biA9PiB7XG4gIGlmICghc3RhdGUpIHJldHVybiB7fVxuXG4gIHJldHVybiBpdGVyYXRvcihzdGF0ZSwgKF9rZXksIHZhbHVlKSA9PiB7XG4gICAgaWYgKGlzVmFsaWREZXZpY2VTdGF0ZSh2YWx1ZSkpIHtcbiAgICAgIC8vIGNvbnN0IHByb3h5UnVsZXMgPSB7IC4uLnZhbHVlIH1cbiAgICAgIC8vXG4gICAgICAvLyBkZXZpY2VzLmZvckVhY2goZGV2aWNlUHJvcCA9PiB7XG4gICAgICAvLyAgIGlmIChkZXZpY2VQcm9wICE9PSBkZXZpY2UpIHtcbiAgICAgIC8vICAgICBkZWxldGUgcHJveHlSdWxlc1tkZXZpY2VQcm9wXVxuICAgICAgLy8gICB9XG4gICAgICAvLyB9KVxuICAgICAgLy9cbiAgICAgIC8vIGNvbnNvbGUubG9nKHZhbHVlLCBwcm94eVJ1bGVzKTtcbiAgICAgIC8vIHJldHVybiB7XG4gICAgICAvLyAgIC4uLnByb3h5UnVsZXNbZGV2aWNlXSxcbiAgICAgIC8vXG4gICAgICAvLyB9XG4gICAgICByZXR1cm4gdmFsdWVbZGV2aWNlXVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZVxuICB9KVxufVxuIiwiaW1wb3J0IHsgRGV2aWNlIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBnZXREZXZpY2VTdGF0ZSB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0RGV2aWNlU3RhdGUnXG5cbmV4cG9ydCBjb25zdCB1c2VEZXZpY2VTdGF0ZSA9IChzdGF0ZTogdW5rbm93biwgZGV2aWNlOiBEZXZpY2UpID0+IGdldERldmljZVN0YXRlKHN0YXRlLCBkZXZpY2UpXG4iLCJpbXBvcnQgeyBCUkVBS1BPSU5UUywgRGV2aWNlIH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgeyB1c2VMYXlvdXRFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCB7IE11dGFibGVSZWYgfSBmcm9tICdwcmVhY3QvaG9va3MnXG5cbmludGVyZmFjZSBPcHRpb25zIHtcbiAgd2F0Y2hSZWY6IE11dGFibGVSZWY8SFRNTEVsZW1lbnQ+XG4gIGJyZWFrcG9pbnRzPzogdHlwZW9mIEJSRUFLUE9JTlRTXG59XG5cbmV4cG9ydCBjb25zdCB1c2VDb250YWluZXJEZXZpY2UgPSAoeyB3YXRjaFJlZiwgYnJlYWtwb2ludHMgPSBCUkVBS1BPSU5UUyB9OiBPcHRpb25zKSA9PiB7XG4gIGNvbnN0IFtkZXZpY2UsIHNldERldmljZV0gPSB1c2VTdGF0ZTxEZXZpY2U+KCdkZXNrdG9wJylcblxuICBjb25zdCBjaGVja0RldmljZSA9IChwYXJlbnQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgcGFyZW50V2lkdGggPSBwYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggfHwgMFxuICAgIGNvbnN0IGZpbmREZXZpY2UgPSBPYmplY3QuZW50cmllcyhicmVha3BvaW50cykuZmluZCgoWywgdmFsdWVdKSA9PiB2YWx1ZSA+PSBwYXJlbnRXaWR0aCk/LlswXSBhcyBEZXZpY2VcblxuICAgIHNldERldmljZShmaW5kRGV2aWNlKVxuICB9XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gd2F0Y2hSZWYuY3VycmVudC5wYXJlbnRFbGVtZW50XG5cbiAgICBpZiAocGFyZW50RWxlbWVudCkge1xuICAgICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gY2hlY2tEZXZpY2UocGFyZW50RWxlbWVudCkpXG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHBhcmVudEVsZW1lbnQpXG5cbiAgICAgIGNoZWNrRGV2aWNlKHBhcmVudEVsZW1lbnQpXG4gICAgfVxuICB9LCBbXSlcblxuICByZXR1cm4gZGV2aWNlXG59XG4iLCJpbXBvcnQgeyBBbnlPYmplY3QsIGRldmljZXMsIEZpdE9wdGlvbiwgaGV4VG9SZ2IsIGlzRW1wdHlWYWx1ZSwgaXNWYWx1ZSwgcmdiVG9SZ2JhIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBFbWl0dGVyVHlwZSB9IGZyb20gJ3NyYy9yZW5kZXJEcml2ZXInXG5pbXBvcnQgeyBpbmplY3RTdHlsZVJ1bGVzLCBTdHlsZVJ1bGVzIH0gZnJvbSAnc3JjL3V0aWxzL2luamVjdFN0eWxlUnVsZXMnXG5pbXBvcnQgeyBpc1ZhbGlkU3R5bGVLZXkgfSBmcm9tICcuL2lzVmFsaWRTdHlsZUtleSdcblxuLyoqXG4gKiDQn9C70LDQs9C40L0g0L/RgNC40LzQtdC90Y/QtdGCINC/0YDQsNCy0LjQu9CwOiDRgdGC0LjQu9C4LCBpbm5lclRleHQgLi4uXG4gKiDQldGB0LvQuCDQutC+0L3RgtC10L3RgtCwINC90LXRgiwg0YLQviDQndC+0LTQsCDRgdC60YDRi9Cy0LDQtdGC0YHRj1xuICovXG5cbnR5cGUgQ3VzdG9tU3R5bGVzID0gUGFydGlhbDxcbiAgT21pdDxTdHlsZVJ1bGVzLCAnYm9yZGVyV2lkdGgnIHwgJ21pbkhlaWdodCcgfCAnbWluV2lkdGgnIHwgJ2ZvbnRTaXplJz4gJiB7XG4gICAgbWluSGVpZ2h0OiBudW1iZXJcbiAgICBtaW5XaWR0aDogbnVtYmVyXG4gICAgZm9udFNpemU6IG51bWJlclxuICB9XG4+XG5cbmRlY2xhcmUgbW9kdWxlICdzcmMvcmVuZGVyRHJpdmVyJyB7XG4gIGludGVyZmFjZSBSZW5kZXJEcml2ZXJSdWxlIGV4dGVuZHMgQ3VzdG9tU3R5bGVzIHtcbiAgICBpbm5lckhUTUw/OiBzdHJpbmdcbiAgICBpbm5lclRleHQ/OiBzdHJpbmdcbiAgICBjb3JuZXI/OiBudW1iZXJcbiAgICBiYWNrZ3JvdW5kRml0PzogRml0T3B0aW9uXG4gICAgYmFja2dyb3VuZENvbG9yT3BhY2l0eT86IG51bWJlclxuICAgIGlzQm9sZD86IGJvb2xlYW5cbiAgICBpc0l0YWxpYz86IGJvb2xlYW5cbiAgICBpc1Rocm91Z2g/OiBib29sZWFuXG4gICAgJGF0dHJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPlxuICB9XG59XG5cbmNvbnN0IHdyYXBUbyA9ICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyLCB1bnRpbDogJyUnIHwgJ3B4JykgPT4gYCR7dmFsdWV9JHt1bnRpbH1gXG5cbmNvbnN0IHRvUHggPSAoa2V5OiBzdHJpbmcpID0+IGtleS5zdGFydHNXaXRoKCdweF8nKVxuY29uc3QgdG9QZXJjZW50ID0gKGtleTogc3RyaW5nKSA9PiBrZXkuc3RhcnRzV2l0aCgncGVyY2VudF8nKVxuXG5jb25zdCBmb3JtYXRSdWxlID0gKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gIGxldCBuZXdLZXkgPSBrZXlcbiAgbGV0IG5ld1ZhbHVlID0gdmFsdWVcblxuICBpZiAodG9QeChuZXdLZXkpKSB7XG4gICAgbmV3S2V5ID0gbmV3S2V5LnJlcGxhY2UoJ3B4XycsICcnKVxuICAgIG5ld1ZhbHVlID0gd3JhcFRvKHZhbHVlLCAncHgnKVxuICB9XG4gIGlmICh0b1BlcmNlbnQobmV3S2V5KSkge1xuICAgIG5ld0tleSA9IG5ld0tleS5yZXBsYWNlKCdwZXJjZW50XycsICcnKVxuICAgIG5ld1ZhbHVlID0gd3JhcFRvKHZhbHVlLCAnJScpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGtleTogbmV3S2V5LFxuICAgIHZhbHVlOiBuZXdWYWx1ZVxuICB9XG59XG5cbmNvbnN0IERFRkFVTFRfVE9fUFggPSBbXG4gICdib3JkZXJXaWR0aCcsXG4gICdib3JkZXJMZWZ0V2lkdGgnLFxuICAnYm9yZGVyUmlnaHRXaWR0aCcsXG4gICdib3JkZXJUb3BXaWR0aCcsXG4gICdib3JkZXJCb3R0b21XaWR0aCcsXG4gICdtaW5IZWlnaHQnLFxuICAnbWluV2lkdGgnLFxuICAnbWF4V2lkdGgnLFxuICAnbWF4SGVpZ2h0JyxcbiAgJ2ZvbnRTaXplJyxcbiAgJ2hlaWdodCcsXG4gICd3aWR0aCcsXG4gICdsZXR0ZXJTcGFjaW5nJyxcbiAgJ2ZvbnRTaXplJyxcbiAgJ2xlZnQnLFxuICAncmlnaHQnLFxuICAndG9wJyxcbiAgJ2JvdHRvbSdcbl1cblxuZXhwb3J0IGNvbnN0IHBhcnNlUnVsZXMgPSAocnVsZXM6IEFueU9iamVjdCwgbGF5ZXI/OiBzdHJpbmcpID0+IHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJ1bGVzKVxuXG4gIGlmIChrZXlzLmluY2x1ZGVzKCdpbm5lckhUTUwnKSB8fCBrZXlzLmluY2x1ZGVzKCdpbm5lclRleHQnKSkge1xuICAgIGNvbnNvbGUud2FybihgV2FybmluZyEgSW5uZXJIVE1MIGFuZCBpbm5lclRleHQgaXMgZGVwcmVjYXRlZC4gVXNlIFwiY2hpbGRyZW5cIiBwcm9wZXJ0eS5gLCBsYXllcilcbiAgfVxuXG4gIGlmICh0eXBlb2YgcnVsZXMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHJ1bGVzXG4gIH1cblxuICBpZiAoJ3R5cG9ncmFwaHknIGluIHJ1bGVzICYmICdhY2NlbnRUeXBvZ3JhcGh5JyBpbiBydWxlcykge1xuICAgIGNvbnN0IHR5cG9ncmFwaHkgPSBydWxlcy50eXBvZ3JhcGh5XG4gICAgY29uc3QgYWNjZW50VHlwb2dyYXBoeSA9IHJ1bGVzLmFjY2VudFR5cG9ncmFwaHlcblxuICAgIHJ1bGVzID0ge1xuICAgICAgLi4ucnVsZXMsXG4gICAgICAuLi50eXBvZ3JhcGh5LFxuICAgICAgJy0tYWNjZW50LWNvbG9yJzogYWNjZW50VHlwb2dyYXBoeS5jb2xvcixcbiAgICAgICdweF8tLWFjY2VudC1zaXplJzogYWNjZW50VHlwb2dyYXBoeS5mb250U2l6ZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhydWxlcykucmVkdWNlKChhY2MsIFtwcm9wS2V5LCBwcm9wVmFsdWVdKSA9PiB7XG4gICAgaWYgKERFRkFVTFRfVE9fUFguaW5jbHVkZXMocHJvcEtleSkpIHtcbiAgICAgIHByb3BWYWx1ZSA9IHdyYXBUbyhwcm9wVmFsdWUsICdweCcpXG4gICAgfVxuXG4gICAgY29uc3QgeyBrZXksIHZhbHVlIH0gPSBmb3JtYXRSdWxlKHByb3BLZXksIHByb3BWYWx1ZSlcbiAgICBhY2Nba2V5XSA9IHZhbHVlXG5cbiAgICBpZiAoa2V5ID09PSAnaW5uZXJIVE1MJykge1xuICAgICAgYWNjLmlubmVySFRNTCA9IGlzVmFsdWUodmFsdWUpID8gYCR7dmFsdWV9YCA6ICcnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2lubmVyVGV4dCcpIHtcbiAgICAgIGFjYy5pbm5lclRleHQgPSBpc1ZhbHVlKHZhbHVlKSA/IGAke3ZhbHVlfWAgOiAnJ1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdjaGlsZHJlbicpIHtcbiAgICAgIGFjYy5jaGlsZHJlbiA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyAoaXNWYWx1ZSh2YWx1ZSkgPyBgJHt2YWx1ZX1gIDogJycpIDogdmFsdWVcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaW5uZXJIVE1MJyB8fCBrZXkgPT09ICdpbm5lclRleHQnIHx8IChrZXkgPT09ICdjaGlsZHJlbicgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykpIHtcbiAgICAgIGlmIChwcm9wVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGFjYy5kaXNwbGF5ID0gJ25vbmUnXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleS5pbmNsdWRlcygnYm9yZGVyV2lkdGgnKSkge1xuICAgICAgYWNjLmJvcmRlclN0eWxlID0gJ3NvbGlkJ1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdjb3JuZXInKSB7XG4gICAgICBhY2MuYm9yZGVyUmFkaXVzID0gd3JhcFRvKHZhbHVlLCAncHgnKVxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdiYWNrZ3JvdW5kRml0Jykge1xuICAgICAgYWNjLmJhY2tncm91bmRTaXplID0gdmFsdWUgYXMgRml0T3B0aW9uXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2JhY2tncm91bmRJbWFnZScpIHtcbiAgICAgIGFjYy5iYWNrZ3JvdW5kSW1hZ2UgPSBgdXJsKCR7dmFsdWV9KWBcbiAgICAgIGFjYy5iYWNrZ3JvdW5kUmVwZWF0ID0gJ25vLXJlcGVhdCdcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnYmFja2dyb3VuZENvbG9yT3BhY2l0eScgJiYgaXNWYWx1ZShhY2MuYmFja2dyb3VuZENvbG9yT3BhY2l0eSkgJiYgaXNWYWx1ZShhY2MuYmFja2dyb3VuZENvbG9yKSkge1xuICAgICAgY29uc3QgcmdiID0gaGV4VG9SZ2IoYWNjLmJhY2tncm91bmRDb2xvcilcbiAgICAgIGlmIChyZ2IpIHtcbiAgICAgICAgYWNjLmJhY2tncm91bmRDb2xvciA9IHJnYlRvUmdiYShgcmdiKCR7cmdiLnJ9LCAke3JnYi5nfSwgJHtyZ2IuYn0pYCwgK2FjYy5iYWNrZ3JvdW5kQ29sb3JPcGFjaXR5IC8gMTAwKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpc0JvbGQnKSB7XG4gICAgICBhY2MuZm9udFdlaWdodCA9IHZhbHVlID8gJ2JvbGQnIDogJ2luaXRpYWwnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2lzSXRhbGljJykge1xuICAgICAgYWNjLmZvbnRTdHlsZSA9IHZhbHVlID8gJ2l0YWxpYycgOiAnaW5pdGlhbCdcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaXNUaHJvdWdoJykge1xuICAgICAgYWNjLnRleHREZWNvcmF0aW9uID0gdmFsdWUgPyAnbGluZS10aHJvdWdoJyA6ICdpbml0aWFsJ1xuICAgIH1cblxuICAgIHJldHVybiBhY2NcbiAgfSwgcnVsZXMpXG59XG4iLCJpbXBvcnQgeyBwYXJzZVJ1bGVzIH0gZnJvbSAnLi4vaGVscGVycy9wYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgQW55T2JqZWN0IH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5cbmNvbnN0IGlzVmFsaWRSdWxlID0gKHJ1bGU6IEFueU9iamVjdCkgPT4gdHlwZW9mIHJ1bGUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHJ1bGUpICYmICdwYXJlbnQnIGluIHJ1bGVcblxuZXhwb3J0IGNvbnN0IHVzZVBhcnNlUnVsZXMgPSAoc3RhdGU6IHVua25vd24pID0+XG4gIE9iamVjdC5lbnRyaWVzKHN0YXRlKS5yZWR1Y2UoKGFjYywgW2xheWVyLCBydWxlXSkgPT4ge1xuICAgIGFjY1tsYXllcl0gPSBpc1ZhbGlkUnVsZShydWxlKSA/IHBhcnNlUnVsZXMoeyAuLi5zdGF0ZVtsYXllcl0gfSwgbGF5ZXIpIDogcnVsZVxuXG4gICAgcmV0dXJuIGFjY1xuICB9LCB7fSlcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgY2hpbGRyZW46IHN0cmluZ1xufVxuXG5jb25zdCBEaXNwbGF5VGV4dDogRkM8UHJvcHM+ID0gKHsgY2hpbGRyZW4sIC4uLnJlc3QgfSkgPT4ge1xuICBjb25zdCBmb3JtYXRWYWx1ZSA9IGNoaWxkcmVuPy5yZXBsYWNlKCdzY3JpcHQnLCAnJyk/LnJlcGxhY2UoL3t7KC4qPyl9fS9nLCBgPHNwYW4+JDE8L3NwYW4+YClcblxuICByZXR1cm4gPGRpdiB7Li4ucmVzdH0gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiBmb3JtYXRWYWx1ZSB9fSAvPlxufVxuXG5leHBvcnQgZGVmYXVsdCBEaXNwbGF5VGV4dFxuIiwiaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuXG5leHBvcnQgY29uc3QgdXNlVG9nZ2xlID0gKCkgPT4ge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgcmV0dXJuIFtpc09wZW4sICgpID0+IHNldElzT3BlbihwcmV2ID0+ICFwcmV2KV1cbn1cbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcblxuY29uc3QgQ2xvc2VJY29uOiBGQyA9ICgpID0+IChcbiAgPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyMCcgaGVpZ2h0PScyMCcgdmlld0JveD0nMCAwIDI0IDI0Jz5cbiAgICA8cGF0aFxuICAgICAgZD0nTTE3LjY1OSA0LjkyOWExIDEgMCAxIDEgMS40MTQgMS40MTRMMTMuNDE2IDEybDUuNjU3IDUuNjU3YTEgMSAwIDAgMS0xLjQxNSAxLjQxNGwtNS42NTYtNS42NTctNS42NTcgNS42NTdhMSAxIDAgMCAxLTEuNDE0LTEuNDE0TDEwLjU4NyAxMiA0LjkzMSA2LjM0M0ExIDEgMCAxIDEgNi4zNDUgNC45M2w1LjY1NyA1LjY1NyA1LjY1Ni01LjY1N1onXG4gICAgICBmaWxsPSdjdXJyZW50Q29sb3InXG4gICAgPjwvcGF0aD5cbiAgPC9zdmc+XG4pXG5cbmV4cG9ydCBkZWZhdWx0IENsb3NlSWNvblxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuXG5jb25zdCBHaWZ0SWNvbjogRkMgPSAoKSA9PiAoXG4gIDxzdmcgdmlld0JveD0nMCAwIDE2IDE2Jz5cbiAgICA8cGF0aFxuICAgICAgZmlsbD0nY3VycmVudENvbG9yJ1xuICAgICAgZmlsbFJ1bGU9J2V2ZW5vZGQnXG4gICAgICBkPSdNMi4xMyA4SDd2Ny4zMUgzLjIyYTEuMDkgMS4wOSAwIDAxLTEuMDktMS4wOXpNOSAxNS4zNGgzLjgxYTEuMDkgMS4wOSAwIDAwMS4wOS0xLjA5VjhIOXptNS44LTkuOTR2MS4xOWEuNDguNDggMCAwMS0uNDguNDhIMS43MWEuNDguNDggMCAwMS0uNDgtLjQ4VjUuNGMwLS41OTYuNDg0LTEuMDggMS4wOC0xLjA4SDVhMi40OCAyLjQ4IDAgMDEtMS40Ny0xLjY1IDEuNjIgMS42MiAwIDAxLjI2LTEuNCAxLjU3IDEuNTcgMCAwMTEtLjU4Yy4xMS0uMDEuMjItLjAxLjMzIDBhMi41IDIuNSAwIDAxMiAxQTkgOSAwIDAxOCAzLjIyYTEwLjM4IDEwLjM4IDAgMDEuOTEtMS41NCAyLjQ5IDIuNDkgMCAwMTEuOTMtMWguMzZjLjM2OS4wNjUuNzAyLjI2Ljk0LjU1LjMxLjQwNy40MTQuOTM2LjI4IDEuNDNhMi40OCAyLjQ4IDAgMDEtMS40NSAxLjY0aDIuNzdhMS4wOCAxLjA4IDAgMDExLjAzIDEuMXpNOC42NiA0YTkuODEgOS44MSAwIDAwMS45LS41NSAxLjUyIDEuNTIgMCAwMC44OC0xIC42OC42OCAwIDAwLS4xLS41OS42LjYgMCAwMC0uMzQtLjIyLjU4LjU4IDAgMDAtLjE4IDAgMS41MiAxLjUyIDAgMDAtMS4xNy42M0E5LjA2IDkuMDYgMCAwMDguNjYgNHptLTMuMzItLjU4QTkuNjIgOS42MiAwIDAwNy4yNSA0YTguNTkgOC41OSAwIDAwLTEtMS43MiAxLjUxIDEuNTEgMCAwMC0xLjE4LS42M2gtLjEzYS42Ni42NiAwIDAwLS4zOS4yMi42Ni42NiAwIDAwLS4wOS41N2MuMTMuNDQzLjQ1My44MDQuODguOTh6J1xuICAgID48L3BhdGg+XG4gIDwvc3ZnPlxuKVxuXG5leHBvcnQgZGVmYXVsdCBHaWZ0SWNvblxuIiwiaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCAnc3JjL2hlbHBlcnMvcmVzZXQuc2NzcydcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VHaWZ0T3BlbiB9IGZyb20gJ3NyYy9ob29rcy91c2VHaWZ0T3BlbidcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VEZXZpY2VTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyB1c2VUb2dnbGUgfSBmcm9tICdzcmMvaG9va3MvdXNlVG9nZ2xlJ1xuaW1wb3J0IENsb3NlSWNvbiBmcm9tICdzcmMvY29tcG9uZW50cy9DbG9zZUljb24nXG5pbXBvcnQgR2lmdEljb24gZnJvbSAnc3JjL2NvbXBvbmVudHMvR2lmdEljb24nXG5cbmNvbnN0IFNpbXBsZUdpZnQgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgW2xlZ2FsSXNPcGVuLCB0b2dnbGVMZWdhbElzT3Blbl0gPSB1c2VUb2dnbGUoKVxuICBjb25zdCB7IGlzT3Blbiwgb25Ub2dnbGUgfSA9IHVzZUdpZnRPcGVuKClcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2UgPSB1c2VDb250YWluZXJEZXZpY2UoeyB3YXRjaFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZURldmljZVN0YXRlKHN0YXRlLCBkZXZpY2UpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcblxuICBjb25zdCBoYXNJY29uID0gcnVsZXM/Lmljb24/Lmhhc0ljb25cblxuICBjb25zdCBhcnJvd1J1bGVzID0ge1xuICAgIGxlZnQ6IGAkeysoZGV2aWNlU3RhdGU/LmNvbnRhaW5lcj8ubGVmdCB8fCAwKSAqIC0xICsgOH1weGAsXG4gICAgYmFja2dyb3VuZENvbG9yOiBydWxlcz8uY29udGFpbmVyPy5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgYm9yZGVyVG9wV2lkdGg6IHJ1bGVzPy5jb250YWluZXI/LmJvcmRlcldpZHRoLFxuICAgIGJvcmRlclRvcENvbG9yOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJDb2xvcixcbiAgICBib3JkZXJUb3BTdHlsZTogJ3NvbGlkJyxcbiAgICBib3JkZXJMZWZ0V2lkdGg6IHJ1bGVzPy5jb250YWluZXI/LmJvcmRlcldpZHRoLFxuICAgIGJvcmRlckxlZnRDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYm9yZGVyQ29sb3IsXG4gICAgYm9yZGVyTGVmdFN0eWxlOiAnc29saWQnXG4gIH1cblxuICBjb25zdCBib2R5UnVsZXMgPSB7XG4gICAgbGVmdDogcnVsZXM/LmNvbnRhaW5lcj8ubGVmdFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvb3R9IHJlZj17cm9vdFJlZn0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmljb259IHN0eWxlPXtydWxlcy5pY29ufSBvbkNsaWNrPXtvblRvZ2dsZX0+XG4gICAgICAgIHtoYXNJY29uICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmljb25UYXJnZXR9PlxuICAgICAgICAgICAgPEdpZnRJY29uIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5ib2R5LCB7IFtzdHlsZXMuYm9keU9wZW5dOiBpc09wZW4gfSl9IHN0eWxlPXtib2R5UnVsZXN9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmFycm93fSBzdHlsZT17YXJyb3dSdWxlc30+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY2xvc2V9IHN0eWxlPXtydWxlcy5jbG9zZX0gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICAgIDxDbG9zZUljb24gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfSBzdHlsZT17cnVsZXMuY29udGFpbmVyfT5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICAgICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgICAgICAgIHJlbD1cIm5vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPSdzaW1wbGVHaWZ0LWJvZHlfX29mZmVyJ1xuICAgICAgICAgICAgZGF0YS1sYXllcj0nb2ZmZXInXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pbm5lcn0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299PjwvZGl2PlxuICAgICAgICAgICAgICA8RGlzcGxheVRleHQgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0gc3R5bGU9e3J1bGVzLnRleHR9PlxuICAgICAgICAgICAgICAgIHtydWxlcz8udGV4dD8uY2hpbGRyZW59XG4gICAgICAgICAgICAgIDwvRGlzcGxheVRleHQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17cnVsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5sZWdhbCwge1xuICAgICAgICAgICAgICBbc3R5bGVzLmxlZ2FsT3Blbl06IGxlZ2FsSXNPcGVuXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIHN0eWxlPXtydWxlcy5sZWdhbH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbFRleHR9PlxuICAgICAgICAgICAgICA8c3Bhbj57cnVsZXM/LmxlZ2FsPy5jaGlsZHJlbn08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsQnV0dG9ufSBvbkNsaWNrPXt0b2dnbGVMZWdhbElzT3Blbn0+XG4gICAgICAgICAgICAgICAge2xlZ2FsSXNPcGVuID8gcnVsZXM/LmxlZ2FsPy5idXR0b25PcGVuVGV4dCA6IHJ1bGVzPy5sZWdhbD8uYnV0dG9uSGlkZVRleHR9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFNpbXBsZUdpZnQgLz4pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5cbmNvbnN0IEJvbnVzQ2FyZDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGEgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9IHRhcmdldD0nX2JsYW5rJyByZWw9XCJub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyXCIgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICBbc3R5bGVzLnZhcmlhbnQyXTogcnVsZXMucm9vdD8udmFyaWFudCA9PT0gJ3ZhcmlhbnQyJ1xuICAgIH0pfSBzdHlsZT17cnVsZXMucm9vdH0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxpbmV9IHN0eWxlPXtydWxlcy5saW5lfSAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9IHN0eWxlPXtydWxlcy50ZXh0fT5cbiAgICAgICAgICA8RGlzcGxheVRleHQ+e3J1bGVzLnRleHQ/LmNoaWxkcmVufTwvRGlzcGxheVRleHQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvblRleHR9PntydWxlcy5idXR0b24/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbH0gc3R5bGU9e3J1bGVzLmxlZ2FsfT5cbiAgICAgICAge3J1bGVzLmxlZ2FsPy5jaGlsZHJlbn1cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb251c0NhcmRcbiIsImltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0ICdzcmMvaGVscGVycy9yZXNldC5zY3NzJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUdpZnRPcGVuIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUdpZnRPcGVuJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZURldmljZVN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBDbG9zZUljb24gZnJvbSAnc3JjL2NvbXBvbmVudHMvQ2xvc2VJY29uJ1xuaW1wb3J0IEdpZnRJY29uIGZyb20gJ3NyYy9jb21wb25lbnRzL0dpZnRJY29uJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IEJvbnVzQ2FyZCBmcm9tICcuL2NvbXBvbmVudHMvQm9udXNDYXJkJ1xuXG5jb25zdCBDb21wbGV4R2lmdCA9ICgpID0+IHtcbiAgY29uc3Qgcm9vdFJlZiA9IHVzZVJlZihudWxsKVxuICBjb25zdCB7IGlzT3Blbiwgb25Ub2dnbGUgfSA9IHVzZUdpZnRPcGVuKClcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2UgPSB1c2VDb250YWluZXJEZXZpY2UoeyB3YXRjaFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZURldmljZVN0YXRlKHN0YXRlLCBkZXZpY2UpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcblxuICBjb25zdCBoYXNJY29uID0gcnVsZXM/Lmljb24/Lmhhc0ljb25cblxuICBjb25zdCBhcnJvd1J1bGVzID0ge1xuICAgIGxlZnQ6IGAkeysoZGV2aWNlU3RhdGU/LmNvbnRhaW5lcj8ubGVmdCB8fCAwKSAqIC0xICsgOH1weGAsXG4gICAgYmFja2dyb3VuZENvbG9yOiBydWxlcz8uY29udGFpbmVyPy5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgYm9yZGVyVG9wV2lkdGg6IHJ1bGVzPy5jb250YWluZXI/LmJvcmRlcldpZHRoLFxuICAgIGJvcmRlclRvcENvbG9yOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJDb2xvcixcbiAgICBib3JkZXJUb3BTdHlsZTogJ3NvbGlkJyxcbiAgICBib3JkZXJMZWZ0V2lkdGg6IHJ1bGVzPy5jb250YWluZXI/LmJvcmRlcldpZHRoLFxuICAgIGJvcmRlckxlZnRDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYm9yZGVyQ29sb3IsXG4gICAgYm9yZGVyTGVmdFN0eWxlOiAnc29saWQnXG4gIH1cblxuICBjb25zdCBib2R5UnVsZXMgPSB7XG4gICAgbGVmdDogcnVsZXM/LmNvbnRhaW5lcj8ubGVmdFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17cm9vdFJlZn0gY2xhc3NOYW1lPXtzdHlsZXMucm9vdH0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmljb259IHN0eWxlPXtydWxlcy5pY29ufSBvbkNsaWNrPXtvblRvZ2dsZX0+XG4gICAgICAgIHtoYXNJY29uICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmljb25UYXJnZXR9PlxuICAgICAgICAgICAgPEdpZnRJY29uIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5ib2R5LCB7XG4gICAgICAgICAgW3N0eWxlcy5ib2R5T3Blbl06IGlzT3BlblxuICAgICAgICB9KX1cbiAgICAgICAgc3R5bGU9e2JvZHlSdWxlc31cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5hcnJvd30gc3R5bGU9e2Fycm93UnVsZXN9PjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0gc3R5bGU9e3J1bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jbG9zZX0gc3R5bGU9e3J1bGVzLmNsb3NlfSBvbkNsaWNrPXtvblRvZ2dsZX0+XG4gICAgICAgICAgICA8Q2xvc2VJY29uIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5wcm9tb3Rpb259IHN0eWxlPXtydWxlcy5wcm9tb3Rpb259PlxuICAgICAgICAgICAge3J1bGVzLnByb21vdGlvbj8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZEljb259PlxuICAgICAgICAgICAgICA8R2lmdEljb24gLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkVGl0bGV9IHN0eWxlPXtydWxlcy50aXRsZX0+XG4gICAgICAgICAgICAgIHtydWxlcy50aXRsZT8uY2hpbGRyZW59XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaW5uZXJ9PlxuICAgICAgICAgICAgeyhydWxlcy5jaGlsZHJlbiB8fCBbXSkubWFwKGNoaWxkID0+IChcbiAgICAgICAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17Y2hpbGR9PlxuICAgICAgICAgICAgICAgIDxCb251c0NhcmQgLz5cbiAgICAgICAgICAgICAgPC9TdGF0ZUNvbnRleHQ+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPENvbXBsZXhHaWZ0IC8+KVxuIiwiZXhwb3J0IGNvbnN0IHN3aXRjaFRleHRBbGlnblRvRmxleCA9ICh0ZXh0QWxpZ24/OiBzdHJpbmcpID0+XG4gIHRleHRBbGlnbiA/IHsgbGVmdDogJ2ZsZXgtc3RhcnQnLCBjZW50ZXI6ICdjZW50ZXInLCByaWdodDogJ2ZsZXgtZW5kJyB9W3RleHRBbGlnbl0gOiB0ZXh0QWxpZ25cbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuXG5jb25zdCBMaW5lOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvb3R9IHN0eWxlPXtydWxlcy5yb290fT5cbiAgICAgIDxEaXNwbGF5VGV4dD57cnVsZXM/LnJvb3Q/LmNoaWxkcmVufTwvRGlzcGxheVRleHQ+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGluZVxuIiwiaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgc2V0IH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgJ3NyYy9oZWxwZXJzL3Jlc2V0LnNjc3MnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VEZXZpY2VTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCB7IHN3aXRjaFRleHRBbGlnblRvRmxleCB9IGZyb20gXCJzcmMvaGVscGVycy9zd2l0Y2hUZXh0QWxpZ25Ub0ZsZXhcIjtcbmltcG9ydCBMaW5lIGZyb20gJy4vY29tcG9uZW50cy9saW5lJ1xuXG5jb25zdCBTaW1wbGVQb3B1cDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgd2F0Y2hSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZURldmljZVN0YXRlKHN0YXRlLCBkZXZpY2UpXG5cbiAgc2V0KGRldmljZVN0YXRlLCAnYnV0dG9uLnBlcmNlbnRfd2lkdGgnLCBkZXZpY2VTdGF0ZT8uYnV0dG9uPy53aWR0aClcbiAgc2V0KGRldmljZVN0YXRlLCAnbGVnYWwucGVyY2VudF93aWR0aCcsIGRldmljZVN0YXRlPy5sZWdhbD8ud2lkdGgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcblxuXG4gIGNvbnN0IGJvZHlSdWxlcyA9IHtcbiAgICBhbGlnbkl0ZW1zOiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8uYWxpZ24pXG4gIH1cblxuICBjb25zdCBidXR0b25SdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8uYnV0dG9uLFxuICAgIGp1c3RpZnlDb250ZW50OiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8udGV4dEFsaWduKVxuICB9XG5cbiAgY29uc3QgbGVnYWxSdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8ubGVnYWwsXG4gICAganVzdGlmeUNvbnRlbnQ6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py50ZXh0QWxpZ24pXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPVwibm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICAgIFtzdHlsZXMudGFibGV0XTogZGV2aWNlID09PSAndGFibGV0JyxcbiAgICAgICAgW3N0eWxlcy5sYXB0b3BdOiBkZXZpY2UgPT09ICdsYXB0b3AnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtydWxlcy5yb290fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX0gc3R5bGU9e2JvZHlSdWxlc30+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299Lz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fT5cbiAgICAgICAgICB7KHJ1bGVzPy5jb250ZW50IHx8IFtdKS5tYXAoZWwgPT4gKFxuICAgICAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17ZWx9PlxuICAgICAgICAgICAgICA8TGluZSAvPlxuICAgICAgICAgICAgPC9TdGF0ZUNvbnRleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e2J1dHRvblJ1bGVzfT5cbiAgICAgICAgICB7YnV0dG9uUnVsZXM/LmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbH0gc3R5bGU9e2xlZ2FsUnVsZXN9PlxuICAgICAgICAgIHtsZWdhbFJ1bGVzPy5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxTaW1wbGVQb3B1cCAvPilcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcblxuY29uc3QgQm9udXM6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcbiAgY29uc3QgZGV2aWNlID0gc3RhdGU/LmRldmljZSB8fCAnZGVza3RvcCdcblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPVwibm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCdcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e3J1bGVzLnJvb3R9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9IHN0eWxlPXtydWxlcy5oZWFkZXJ9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfT48L2Rpdj5cbiAgICAgICAgICA8RGlzcGxheVRleHQgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0gc3R5bGU9e3J1bGVzLnRleHR9PlxuICAgICAgICAgICAge3J1bGVzLnRleHQ/LmNoaWxkcmVufVxuICAgICAgICAgIDwvRGlzcGxheVRleHQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17cnVsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVnYWx9IHN0eWxlPXtydWxlcy5sZWdhbH0+XG4gICAgICAgICAgICB7cnVsZXMubGVnYWw/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb251c1xuIiwiaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgZ2V0LCBzZXQgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCAnc3JjL2hlbHBlcnMvcmVzZXQuc2NzcydcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZURldmljZVN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IEJvbnVzIGZyb20gJy4vY29tcG9uZW50cy9Cb251cydcblxuY29uc3QgU2ltcGxlUG9wdXA6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHdhdGNoUmVmOiByb290UmVmIH0pXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VEZXZpY2VTdGF0ZShzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCdcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e3J1bGVzLnJvb3R9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZX0gc3R5bGU9e3J1bGVzLnRpdGxlfT5cbiAgICAgICAgICB7cnVsZXMudGl0bGU/LmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy53cmFwcGVyfT5cbiAgICAgICAgICB7KHJ1bGVzLmNoaWxkcmVuIHx8IFtdKS5tYXAoY2hpbGQgPT4gKFxuICAgICAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17eyAuLi5jaGlsZCwgZGV2aWNlIH19PlxuICAgICAgICAgICAgICA8Qm9udXMgLz5cbiAgICAgICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8U2ltcGxlUG9wdXAgLz4pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5cbmNvbnN0IE1hdGNoOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG4gIGNvbnN0IGRldmljZSA9IHN0YXRlPy5kZXZpY2UgfHwgJ2Rlc2t0b3AnXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCdcbiAgICB9KX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZnR9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1zfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlYWd1ZX0gc3R5bGU9e3J1bGVzLmxlYWd1ZX0+e3J1bGVzLmxlYWd1ZT8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5uYW1lfSBzdHlsZT17cnVsZXMudGVhbXN9PntydWxlcy50ZWFtcz8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJpZ2h0fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1Mb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbU5hbWV9IHN0eWxlPXtydWxlcy50ZWFtc30+0J3QrNCu0JrQkNCh0Js8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGR9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkTGFiZWx9IHN0eWxlPXtydWxlcy5vZGRMYWJlbH0+e3J1bGVzLm9kZExhYmVsPy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZFZhbHVlfSBzdHlsZT17cnVsZXMub2RkVmFsdWV9PntydWxlcy5vZGRWYWx1ZT8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTG9nb30vPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbU5hbWV9IHN0eWxlPXtydWxlcy50ZWFtc30+0JvQmNCU0KE8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYXRjaFxuIiwiaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgc2V0IH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgJ3NyYy9oZWxwZXJzL3Jlc2V0LnNjc3MnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VEZXZpY2VTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHN3aXRjaFRleHRBbGlnblRvRmxleCB9IGZyb20gXCJzcmMvaGVscGVycy9zd2l0Y2hUZXh0QWxpZ25Ub0ZsZXhcIjtcbmltcG9ydCBNYXRjaCBmcm9tIFwiLi9jb21wb25lbnRzL01hdGNoXCI7XG5cbmNvbnN0IFNpbXBsZVBvcHVwOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgcm9vdFJlZiA9IHVzZVJlZihudWxsKVxuICBjb25zdCBkZXZpY2UgPSB1c2VDb250YWluZXJEZXZpY2UoeyB3YXRjaFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlRGV2aWNlU3RhdGUoc3RhdGUsIGRldmljZSlcbiAgc2V0KGRldmljZVN0YXRlLCAnYnV0dG9uV3JhcHBlci5wZXJjZW50X3dpZHRoJywgZGV2aWNlU3RhdGU/LmJ1dHRvbldyYXBwZXI/LndpZHRoKVxuICBzZXQoZGV2aWNlU3RhdGUsICdsZWdhbC5wZXJjZW50X3dpZHRoJywgZGV2aWNlU3RhdGU/LmxlZ2FsPy53aWR0aClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuXG4gIGNvbnN0IGJvZHlSdWxlcyA9IHtcbiAgICAuLi5ydWxlcy5yb290LFxuICAgIGFsaWduSXRlbXM6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py5hbGlnbilcbiAgfVxuXG4gIGNvbnN0IGNvbnRlbnRSdWxlcyA9IHtcbiAgICAuLi5ydWxlcy5jb250ZW50LFxuICAgIGFsaWduSXRlbXM6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py5hbGlnbilcbiAgfVxuXG4gIGNvbnN0IHRleHRSdWxlcyA9IHtcbiAgICAuLi5ydWxlcy50ZXh0LFxuICAgIHRleHRBbGlnbjogcnVsZXMucm9vdD8uYWxpZ25cbiAgfVxuXG4gIGNvbnN0IGJ1dHRvblJ1bGVzID0ge1xuICAgIC4uLnJ1bGVzPy5idXR0b24sXG4gICAganVzdGlmeUNvbnRlbnQ6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py50ZXh0QWxpZ24pXG4gIH1cblxuICBjb25zdCBsZWdhbFJ1bGVzID0ge1xuICAgIC4uLnJ1bGVzPy5sZWdhbCxcbiAgICBqdXN0aWZ5Q29udGVudDogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LnRleHRBbGlnbilcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIHJlZj17cm9vdFJlZn1cbiAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICByZWw9XCJub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBkZXZpY2UgPT09ICdkZXNrdG9wJyxcbiAgICAgICAgW3N0eWxlcy5sYXB0b3BdOiBkZXZpY2UgPT09ICdsYXB0b3AnLFxuICAgICAgICBbc3R5bGVzLnRhYmxldF06IGRldmljZSA9PT0gJ3RhYmxldCdcbiAgICAgIH0pfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX0gc3R5bGU9e2JvZHlSdWxlc30+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZX0gc3R5bGU9e3J1bGVzLnRpdGxlfT5cbiAgICAgICAgICAgIHtydWxlcy50aXRsZT8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMud3JhcHBlcn0gc3R5bGU9e2NvbnRlbnRSdWxlc30+XG4gICAgICAgICAgeyhydWxlcy5jaGlsZHJlbiB8fCBbXSkubWFwKGNoaWxkID0+IChcbiAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e3sgLi4uY2hpbGQsIGRldmljZSB9fT5cbiAgICAgICAgICAgICAgPE1hdGNoIC8+XG4gICAgICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPERpc3BsYXlUZXh0IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9IHN0eWxlPXt0ZXh0UnVsZXN9PlxuICAgICAgICAgIHtydWxlcy50ZXh0Py5jaGlsZHJlbn1cbiAgICAgICAgPC9EaXNwbGF5VGV4dD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b25XcmFwcGVyfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbkhlYWR9IHN0eWxlPXtydWxlcy5idXR0b25IZWFkfT5cbiAgICAgICAgICAgIHtydWxlcy5idXR0b25IZWFkPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvblRhcmdldH0gc3R5bGU9e2J1dHRvblJ1bGVzfT5cbiAgICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbH0gc3R5bGU9e2xlZ2FsUnVsZXN9PlxuICAgICAgICAgIHtydWxlcy5sZWdhbD8uY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8U2ltcGxlUG9wdXAgLz4pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyB1c2VUb2dnbGUgfSBmcm9tICdzcmMvaG9va3MvdXNlVG9nZ2xlJ1xuXG5cbmNvbnN0IEJvbnVzOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG4gIGNvbnN0IFtpc09wZW4sIHRvZ2dsZUlzT3Blbl0gPSB1c2VUb2dnbGUoKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb290fSBzdHlsZT17cnVsZXMucm9vdH0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJhY2tncm91bmR9IHN0eWxlPXtydWxlcy5iYWNrZ3JvdW5kfSAvPlxuICAgICAgPGEgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9IHRhcmdldD0nX2JsYW5rJyByZWw9XCJub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyXCIgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX0+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb3dGaXJzdH0gc3R5bGU9e3J1bGVzLnJvd0ZpcnN0fT5cbiAgICAgICAgICAgIHtydWxlcy5yb3dGaXJzdD8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb3dTZWNvbmR9IHN0eWxlPXtydWxlcy5yb3dTZWNvbmR9PlxuICAgICAgICAgICAge3J1bGVzLnJvd1NlY29uZD8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib29rbWFrZXJ9PndpbmxpbmU8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17cnVsZXMuYnV0dG9ufT5cbiAgICAgICAgICB7cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2E+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMubGVnYWwsIHtcbiAgICAgICAgICBbc3R5bGVzLmxlZ2FsT3Blbl06IGlzT3BlblxuICAgICAgICB9KX1cbiAgICAgICAgc3R5bGU9e3J1bGVzLmxlZ2FsSW5mb31cbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMubGVnYWxUZXh0fT5cbiAgICAgICAgICA8c3Bhbj57cnVsZXMubGVnYWxJbmZvPy5jaGlsZHJlbn08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMubGVnYWxCdXR0b259IHN0eWxlPXtydWxlcy5sZWdhbEluZm9CdXR0b259IG9uQ2xpY2s9e3RvZ2dsZUlzT3Blbn0+XG4gICAgICAgICAgICB7aXNPcGVuID8gcnVsZXMubGVnYWxJbmZvQnV0dG9uPy5vcGVuVGV4dCA6IHJ1bGVzLmxlZ2FsSW5mb0J1dHRvbj8uY2xvc2VUZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9udXNcbiIsImltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZURldmljZVN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IEJvbnVzIGZyb20gJy4vY29tcG9uZW50cy9Cb251cydcblxuY29uc3QgQm9udXNDYXJkOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgcm9vdFJlZiA9IHVzZVJlZihudWxsKVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZSA9ICdkZXNrdG9wJ1xuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZURldmljZVN0YXRlKHN0YXRlLCBkZXZpY2UpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgcmVmPXtyb290UmVmfT5cbiAgICAgIHsocnVsZXM/LmNoaWxkcmVuIHx8IFtdKS5tYXAoY2hpbGQgPT4gKFxuICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXtjaGlsZH0+XG4gICAgICAgICAgPEJvbnVzIC8+XG4gICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxCb251c0NhcmQgLz4pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgb21pdCB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyBiYWNrZ3JvdW5kT3B0aW9ucyB9IGZyb20gXCJzcmMvcHJvbW9zL1dpZGVDYXJkL2luZGV4XCI7XG5cbmNvbnN0IFRleHQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBzdGF0ZT8uZGV2aWNlID09PSAnZGVza3RvcCdcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e29taXQocnVsZXMucm9vdCwgLi4uYmFja2dyb3VuZE9wdGlvbnMpfVxuICAgID5cbiAgICAgIHtydWxlcy5yb290Py5jaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBUZXh0XG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgb21pdCB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyBiYWNrZ3JvdW5kT3B0aW9ucyB9IGZyb20gXCJzcmMvcHJvbW9zL1dpZGVDYXJkL2luZGV4XCI7XG5cbmNvbnN0IE1hdGNoZXM6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcblxuICBjb25zdCByb290UnVsZXMgPSBvbWl0KHJ1bGVzLnJvb3QsIC4uLmJhY2tncm91bmRPcHRpb25zKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb290fT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRMb2dvfSBzdHlsZT17cm9vdFJ1bGVzfSAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExhYmVsfSBzdHlsZT17cm9vdFJ1bGVzfT4zPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29lZn0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29lZkhlYWR9IHN0eWxlPXtydWxlcy5jb2VmfT5YPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29lZlZhbHVlfSBzdHlsZT17cm9vdFJ1bGVzfT4zLjkyPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5vZGQsIHN0eWxlcy5vZGRSZXZlcnNlKX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkTG9nb30gc3R5bGU9e3Jvb3RSdWxlc30vPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExhYmVsfSBzdHlsZT17cm9vdFJ1bGVzfT4yLjg8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hdGNoZXNcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCB7IG9taXQgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCB7IGJhY2tncm91bmRPcHRpb25zIH0gZnJvbSBcInNyYy9wcm9tb3MvV2lkZUNhcmQvaW5kZXhcIjtcblxuY29uc3QgTWF0Y2hlc09uZVR3bzogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IHN0YXRlPy5kZXZpY2UgPT09ICdkZXNrdG9wJyxcbiAgICAgICAgW3N0eWxlcy5sYXB0b3BdOiBzdGF0ZT8uZGV2aWNlID09PSAnbGFwdG9wJyxcbiAgICAgICAgW3N0eWxlcy50YWJsZXRdOiBzdGF0ZT8uZGV2aWNlID09PSAndGFibGV0J1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17b21pdChydWxlcy5yb290LCAuLi5iYWNrZ3JvdW5kT3B0aW9ucyl9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGVMYWJlbH0gc3R5bGU9e3J1bGVzLnRpdGxlTGFiZWx9PlxuICAgICAgICAgIHtydWxlcy50aXRsZUxhYmVsLmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZVZhbHVlfSBzdHlsZT17cnVsZXMudGl0bGVWYWx1ZX0+XG4gICAgICAgICAge3J1bGVzLnRpdGxlVmFsdWUuY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbUxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbU5hbWV9IHN0eWxlPXtydWxlcy50ZWFtTmFtZX0+XG4gICAgICAgICAgICB7cnVsZXMudGVhbTFOYW1lLmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbVZhbHVlfSBzdHlsZT17cnVsZXMudmFsdWV9PlxuICAgICAgICAgICAge3J1bGVzLnZhbHVlMS5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTmFtZX0gc3R5bGU9e3J1bGVzLnRlYW1OYW1lfT5cbiAgICAgICAgICAgIHtydWxlcy50ZWFtMk5hbWUuY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtVmFsdWV9IHN0eWxlPXtydWxlcy52YWx1ZX0+XG4gICAgICAgICAgICB7cnVsZXMudmFsdWUyLmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hdGNoZXNPbmVUd29cbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuXG5pbnRlcmZhY2UgU2xpZGUge1xuICBhbmltYXRpb25EdXJhdGlvbjogbnVtYmVyXG59XG5cbmNvbnN0IHVzZUFuaW1hdGVkTGlzdCA9IChzbGlkZXM6IFNsaWRlW10gPSBbXSkgPT4ge1xuICBjb25zdCBpdGVtc0NvdW50ID0gc2xpZGVzLmxlbmd0aFxuICBjb25zdCBbYW5pbWF0ZWRJZHgsIHNldEFuaW1hdGVkSWR4XSA9IHVzZVN0YXRlPG51bWJlcj4oMClcbiAgY29uc3QgYW5pbWF0aW9uRHVyYXRpb24gPSBzbGlkZXNbYW5pbWF0ZWRJZHggfHwgMF0/LmFuaW1hdGlvbkR1cmF0aW9uXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBnb05leHQgPSAoKSA9PiB7XG4gICAgICBzZXRBbmltYXRlZElkeChpbmRleCA9PiB7XG4gICAgICAgIGlmIChpbmRleCArIDEgPCBpdGVtc0NvdW50KSByZXR1cm4gaW5kZXggKyAxXG4gICAgICAgIHJldHVybiAwXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KGdvTmV4dCwgYW5pbWF0aW9uRHVyYXRpb24pXG5cbiAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gIH0sIFtzZXRBbmltYXRlZElkeCwgaXRlbXNDb3VudCwgYW5pbWF0aW9uRHVyYXRpb24sIGFuaW1hdGVkSWR4XSlcblxuICByZXR1cm4gYW5pbWF0ZWRJZHhcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlQW5pbWF0ZWRMaXN0XG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlRGV2aWNlU3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IFRleHQgZnJvbSAnLi9jb21wb25lbnRzL1RleHQnXG5pbXBvcnQgTWF0Y2hlcyBmcm9tICcuL2NvbXBvbmVudHMvTWF0Y2hlcydcbmltcG9ydCBNYXRjaGVzT25lVHdvIGZyb20gJy4vY29tcG9uZW50cy9NYXRjaGVzT25lVHdvJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB1c2VBbmltYXRlZExpc3QgZnJvbSAnc3JjL2hvb2tzL3VzZUFuaW1hdGVkTGlzdCdcbmltcG9ydCB7IHBpY2sgfSBmcm9tICdAYWRzdG9yZS91dGlscydcblxuY29uc3QgREVGQVVMVF9BTklNQVRJT05fU1BFRUQgPSAzNzAwXG5cbmV4cG9ydCBjb25zdCBiYWNrZ3JvdW5kT3B0aW9ucyA9IFsnYmFja2dyb3VuZENvbG9yJywgJ2JhY2tncm91bmRDb2xvck9wYWNpdHknLCAnYmFja2dyb3VuZEltYWdlJywgJ2JhY2tncm91bmRGaXQnXVxuXG5jb25zdCBXaWRlQ2FyZDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2UgPSB1c2VDb250YWluZXJEZXZpY2UoeyB3YXRjaFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZURldmljZVN0YXRlKHN0YXRlLCBkZXZpY2UpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcblxuICBjb25zdCBnZXRDaGlsZCA9IChuYW1lOiBzdHJpbmcpID0+XG4gICAgKHtcbiAgICAgIHRleHQ6IDxUZXh0IC8+LFxuICAgICAgbWF0Y2hlczogPE1hdGNoZXMgLz4sXG4gICAgICBtYXRjaGVzT25lVHdvOiA8TWF0Y2hlc09uZVR3byAvPlxuICAgIH1bbmFtZV0pXG5cbiAgY29uc3Qgc2xpZGVzTGlzdCA9IChydWxlcy5jaGlsZHJlbiB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLm1hcChzbGlkZSA9PiAoe1xuICAgIC4uLnNsaWRlLFxuICAgIGFuaW1hdGlvbk5hbWU6IHNsaWRlPy5yb290Py5hbmltYXRpb25OYW1lLFxuICAgIGFuaW1hdGlvbkR1cmF0aW9uOiBzbGlkZT8ucm9vdD8uYW5pbWF0aW9uRHVyYXRpb24gfHwgREVGQVVMVF9BTklNQVRJT05fU1BFRURcbiAgfSkpXG5cbiAgY29uc3QgY3VycmVudFNsaWRlID0gdXNlQW5pbWF0ZWRMaXN0KHNsaWRlc0xpc3QpXG4gIGNvbnN0IHNsaWRlUnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHNsaWRlc0xpc3RbY3VycmVudFNsaWRlXSB8fCB7fSlcblxuXG4gIGNvbnN0IGJhY2tncm91bmRSdWxlcyA9IHNsaWRlUnVsZXM/LnJvb3Q/Lmhhc0N1c3RvbUJhY2tncm91bmRcbiAgICA/IHBpY2soc2xpZGVSdWxlcz8ucm9vdCB8fCB7fSwgLi4uYmFja2dyb3VuZE9wdGlvbnMpXG4gICAgOiBwaWNrKHJ1bGVzLmJhY2tncm91bmQsIC4uLmJhY2tncm91bmRPcHRpb25zKVxuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIHJlZj17cm9vdFJlZn1cbiAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICByZWw9J25vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXInXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICAgIFtzdHlsZXMubGFwdG9wXTogZGV2aWNlID09PSAnbGFwdG9wJyxcbiAgICAgICAgW3N0eWxlcy50YWJsZXRdOiBkZXZpY2UgPT09ICd0YWJsZXQnLFxuICAgICAgICBbc3R5bGVzLnZhcmlhbnQyXTogcnVsZXMucm9vdD8udmFyaWFudCA9PT0gJ3ZhcmlhbnQyJ1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17cnVsZXMucm9vdH1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJhY2tncm91bmR9IHN0eWxlPXtiYWNrZ3JvdW5kUnVsZXN9IC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnByb21vdGlvbn0gc3R5bGU9e3J1bGVzLnByb21vdGlvbn0+XG4gICAgICAgIHtydWxlcy5wcm9tb3Rpb24/LmNoaWxkcmVufVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVmdH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY2VudGVyfT5cbiAgICAgICAgICB7KHJ1bGVzLmNoaWxkcmVuIHx8IFtdKS5tYXAoKGNoaWxkLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5zbGlkZX1cbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBhbmltYXRpb25OYW1lOiBjdXJyZW50U2xpZGUgPT09IGluZGV4ID8gc3R5bGVzW2NoaWxkLnJvb3Q/LmFuaW1hdGlvbk5hbWUgfHwgJ2ZhZGUtaW4tb3V0J10gOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246IGAke2NoaWxkLnJvb3Q/LmFuaW1hdGlvbkR1cmF0aW9ufW1zYFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXt7IC4uLmNoaWxkLCBkZXZpY2UgfX0+e2dldENoaWxkKGNoaWxkLm5hbWUpfTwvU3RhdGVDb250ZXh0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJpZ2h0fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b25XcmFwcGVyfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17cnVsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxXaWRlQ2FyZCAvPilcbiJdLCJuYW1lcyI6WyJjbGFzc05hbWVzIiwiaSIsImlubmVyIiwibyIsIm4iLCJ0IiwidSIsIkIiLCJyIiwiZiIsImMiLCJlIiwiXyIsIkYiLCJxIiwidyIsImciLCJsIiwidXNlR2lmdE9wZW4iLCJkZWxheSIsImlzT3BlbiIsInNldElzT3BlbiIsInVzZVN0YXRlIiwidGltZXJSZWYiLCJ1c2VSZWYiLCJvblRvZ2dsZSIsImNsZWFyVGltZW91dCIsImN1cnJlbnQiLCJwcmV2IiwidXNlRWZmZWN0Iiwic2V0VGltZW91dCIsInMiLCJhIiwiU3RhdGUiLCJjcmVhdGVDb250ZXh0IiwiU3RhdGVDb250ZXh0IiwiY2hpbGRyZW4iLCJ2YWx1ZSIsIl9qc3giLCJQcm92aWRlciIsInJlbmRlciIsInZOb2RlIiwidGFyZ2V0Iiwic3RhdGUiLCJwcmVhY3RSZW5kZXIiLCJ1c2VDdXJyZW50U3RhdGUiLCJ1c2VDb250ZXh0IiwibGlzdENhY2hlQ2xlYXIiLCJlcSIsInJlcXVpcmUkJDAiLCJhc3NvY0luZGV4T2YiLCJsaXN0Q2FjaGVEZWxldGUiLCJpbmRleCIsImxpc3RDYWNoZUdldCIsImxpc3RDYWNoZUhhcyIsImxpc3RDYWNoZVNldCIsInJlcXVpcmUkJDEiLCJyZXF1aXJlJCQyIiwicmVxdWlyZSQkMyIsInJlcXVpcmUkJDQiLCJMaXN0Q2FjaGUiLCJzdGFja0NsZWFyIiwic3RhY2tEZWxldGUiLCJzdGFja0dldCIsInN0YWNrSGFzIiwiZnJlZUdsb2JhbCIsImdsb2JhbCIsInJvb3QiLCJTeW1ib2wiLCJvYmplY3RQcm90byIsImhhc093blByb3BlcnR5IiwibmF0aXZlT2JqZWN0VG9TdHJpbmciLCJzeW1Ub1N0cmluZ1RhZyIsImdldFJhd1RhZyIsIm9iamVjdFRvU3RyaW5nIiwiYmFzZUdldFRhZyIsImlzT2JqZWN0IiwiZnVuY1RhZyIsImlzRnVuY3Rpb24iLCJjb3JlSnNEYXRhIiwiaXNNYXNrZWQiLCJmdW5jUHJvdG8iLCJmdW5jVG9TdHJpbmciLCJ0b1NvdXJjZSIsImJhc2VJc05hdGl2ZSIsImdldFZhbHVlIiwiZ2V0TmF0aXZlIiwiTWFwIiwibmF0aXZlQ3JlYXRlIiwiaGFzaENsZWFyIiwiaGFzaERlbGV0ZSIsIkhBU0hfVU5ERUZJTkVEIiwiaGFzaEdldCIsImhhc2hIYXMiLCJoYXNoU2V0IiwiSGFzaCIsIm1hcENhY2hlQ2xlYXIiLCJpc0tleWFibGUiLCJnZXRNYXBEYXRhIiwibWFwQ2FjaGVEZWxldGUiLCJtYXBDYWNoZUdldCIsIm1hcENhY2hlSGFzIiwibWFwQ2FjaGVTZXQiLCJNYXBDYWNoZSIsInN0YWNrU2V0IiwicmVxdWlyZSQkNSIsIlN0YWNrIiwiZGVmaW5lUHJvcGVydHkiLCJiYXNlQXNzaWduVmFsdWUiLCJhc3NpZ25NZXJnZVZhbHVlIiwiY3JlYXRlQmFzZUZvciIsImJhc2VGb3IiLCJjbG9uZUJ1ZmZlciIsIlVpbnQ4QXJyYXkiLCJjbG9uZUFycmF5QnVmZmVyIiwiY2xvbmVUeXBlZEFycmF5IiwiY29weUFycmF5IiwiYmFzZUNyZWF0ZSIsIm92ZXJBcmciLCJnZXRQcm90b3R5cGUiLCJpc1Byb3RvdHlwZSIsImluaXRDbG9uZU9iamVjdCIsImlzT2JqZWN0TGlrZSIsImFyZ3NUYWciLCJiYXNlSXNBcmd1bWVudHMiLCJpc0FyZ3VtZW50cyIsImlzQXJyYXkiLCJNQVhfU0FGRV9JTlRFR0VSIiwiaXNMZW5ndGgiLCJpc0FycmF5TGlrZSIsImlzQXJyYXlMaWtlT2JqZWN0Iiwic3R1YkZhbHNlIiwiaXNCdWZmZXIiLCJvYmplY3RUYWciLCJpc1BsYWluT2JqZWN0IiwiYmFzZUlzVHlwZWRBcnJheSIsImJhc2VVbmFyeSIsIm5vZGVVdGlsIiwiaXNUeXBlZEFycmF5Iiwic2FmZUdldCIsImFzc2lnblZhbHVlIiwiY29weU9iamVjdCIsImJhc2VUaW1lcyIsImlzSW5kZXgiLCJhcnJheUxpa2VLZXlzIiwibmF0aXZlS2V5c0luIiwiYmFzZUtleXNJbiIsImtleXNJbiIsInRvUGxhaW5PYmplY3QiLCJyZXF1aXJlJCQ2IiwicmVxdWlyZSQkNyIsInJlcXVpcmUkJDgiLCJyZXF1aXJlJCQ5IiwicmVxdWlyZSQkMTAiLCJyZXF1aXJlJCQxMSIsInJlcXVpcmUkJDEyIiwicmVxdWlyZSQkMTMiLCJyZXF1aXJlJCQxNCIsImJhc2VNZXJnZURlZXAiLCJiYXNlTWVyZ2UiLCJpZGVudGl0eSIsImFwcGx5Iiwib3ZlclJlc3QiLCJjb25zdGFudCIsImJhc2VTZXRUb1N0cmluZyIsInNob3J0T3V0Iiwic2V0VG9TdHJpbmciLCJiYXNlUmVzdCIsImlzSXRlcmF0ZWVDYWxsIiwiY3JlYXRlQXNzaWduZXIiLCJpdGVyYXRvciIsImlucHV0IiwidmlzaXRvciIsIkFycmF5IiwibWFwIiwiZWwiLCJPYmplY3QiLCJlbnRyaWVzIiwicmVkdWNlIiwiYWNjIiwia2V5IiwiaXNFbXB0eVZhbHVlIiwidW5kZWZpbmVkIiwiaXNWYWx1ZSIsInBpY2siLCJvYmoiLCJwcm9wcyIsInJlc3VsdCIsInByb3AiLCJvbWl0IiwiZm9yRWFjaCIsInNldCIsInBhdGgiLCJwYXRoQXJyYXkiLCJtYXRjaCIsImxlbmd0aCIsImhleFRvUmdiIiwiaGV4IiwiZXhlYyIsInBhcnNlSW50IiwiYiIsInJnYlRvUmdiYSIsInJnYiIsImFscGhhIiwicmVwbGFjZSIsImRldmljZXMiLCJCUkVBS1BPSU5UUyIsIm1vYmlsZSIsInRhYmxldCIsImxhcHRvcCIsImRlc2t0b3AiLCJpc1ZhbGlkRGV2aWNlU3RhdGUiLCJldmVyeSIsImRldmljZSIsImdldERldmljZVN0YXRlIiwiX2tleSIsInVzZURldmljZVN0YXRlIiwidXNlQ29udGFpbmVyRGV2aWNlIiwid2F0Y2hSZWYiLCJicmVha3BvaW50cyIsInNldERldmljZSIsImNoZWNrRGV2aWNlIiwicGFyZW50IiwicGFyZW50V2lkdGgiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ3aWR0aCIsImZpbmREZXZpY2UiLCJmaW5kIiwidXNlTGF5b3V0RWZmZWN0IiwicGFyZW50RWxlbWVudCIsInJlc2l6ZU9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJvYnNlcnZlIiwid3JhcFRvIiwidW50aWwiLCJ0b1B4Iiwic3RhcnRzV2l0aCIsInRvUGVyY2VudCIsImZvcm1hdFJ1bGUiLCJuZXdLZXkiLCJuZXdWYWx1ZSIsIkRFRkFVTFRfVE9fUFgiLCJwYXJzZVJ1bGVzIiwicnVsZXMiLCJsYXllciIsImtleXMiLCJpbmNsdWRlcyIsIndhcm4iLCJ0eXBvZ3JhcGh5IiwiYWNjZW50VHlwb2dyYXBoeSIsImNvbG9yIiwiZm9udFNpemUiLCJwcm9wS2V5IiwicHJvcFZhbHVlIiwiaW5uZXJIVE1MIiwiaW5uZXJUZXh0IiwiZGlzcGxheSIsImJvcmRlclN0eWxlIiwiYm9yZGVyUmFkaXVzIiwiYmFja2dyb3VuZFNpemUiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUmVwZWF0IiwiYmFja2dyb3VuZENvbG9yT3BhY2l0eSIsImJhY2tncm91bmRDb2xvciIsImZvbnRXZWlnaHQiLCJmb250U3R5bGUiLCJ0ZXh0RGVjb3JhdGlvbiIsImlzVmFsaWRSdWxlIiwicnVsZSIsInVzZVBhcnNlUnVsZXMiLCJEaXNwbGF5VGV4dCIsInJlc3QiLCJmb3JtYXRWYWx1ZSIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiX19odG1sIiwidXNlVG9nZ2xlIiwiQ2xvc2VJY29uIiwieG1sbnMiLCJoZWlnaHQiLCJ2aWV3Qm94IiwiZCIsImZpbGwiLCJHaWZ0SWNvbiIsImZpbGxSdWxlIiwiU2ltcGxlR2lmdCIsInJvb3RSZWYiLCJsZWdhbElzT3BlbiIsInRvZ2dsZUxlZ2FsSXNPcGVuIiwiZGV2aWNlU3RhdGUiLCJoYXNJY29uIiwiaWNvbiIsImFycm93UnVsZXMiLCJsZWZ0IiwiY29udGFpbmVyIiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJXaWR0aCIsImJvcmRlclRvcENvbG9yIiwiYm9yZGVyQ29sb3IiLCJib3JkZXJUb3BTdHlsZSIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlckxlZnRDb2xvciIsImJvcmRlckxlZnRTdHlsZSIsImJvZHlSdWxlcyIsIl9qc3hzIiwiY2xhc3NOYW1lIiwic3R5bGVzIiwicmVmIiwic3R5bGUiLCJvbkNsaWNrIiwiaWNvblRhcmdldCIsImJvZHkiLCJib2R5T3BlbiIsImFycm93IiwiY2xvc2UiLCJocmVmIiwib2ZmZXIiLCJyZWwiLCJsb2dvIiwidGV4dCIsImJ1dHRvbiIsImxlZ2FsIiwibGVnYWxPcGVuIiwibGVnYWxUZXh0IiwibGVnYWxCdXR0b24iLCJidXR0b25PcGVuVGV4dCIsImJ1dHRvbkhpZGVUZXh0IiwiQm9udXNDYXJkIiwidmFyaWFudDIiLCJ2YXJpYW50IiwibGluZSIsImJ1dHRvblRleHQiLCJDb21wbGV4R2lmdCIsInByb21vdGlvbiIsImhlYWQiLCJoZWFkSWNvbiIsImhlYWRUaXRsZSIsInRpdGxlIiwiY2hpbGQiLCJzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgiLCJ0ZXh0QWxpZ24iLCJjZW50ZXIiLCJyaWdodCIsIkxpbmUiLCJTaW1wbGVQb3B1cCIsImFsaWduSXRlbXMiLCJhbGlnbiIsImJ1dHRvblJ1bGVzIiwianVzdGlmeUNvbnRlbnQiLCJsZWdhbFJ1bGVzIiwiY29udGVudCIsIkJvbnVzIiwiaGVhZGVyIiwid3JhcHBlciIsIk1hdGNoIiwidGVhbXMiLCJsZWFndWUiLCJuYW1lIiwidGVhbSIsInRlYW1Mb2dvIiwidGVhbU5hbWUiLCJvZGQiLCJvZGRMYWJlbCIsIm9kZFZhbHVlIiwiYnV0dG9uV3JhcHBlciIsImNvbnRlbnRSdWxlcyIsInRleHRSdWxlcyIsImJ1dHRvbkhlYWQiLCJidXR0b25UYXJnZXQiLCJ0b2dnbGVJc09wZW4iLCJiYWNrZ3JvdW5kIiwicm93Rmlyc3QiLCJyb3dTZWNvbmQiLCJib29rbWFrZXIiLCJsZWdhbEluZm8iLCJsZWdhbEluZm9CdXR0b24iLCJvcGVuVGV4dCIsImNsb3NlVGV4dCIsIlRleHQiLCJiYWNrZ3JvdW5kT3B0aW9ucyIsIk1hdGNoZXMiLCJyb290UnVsZXMiLCJvZGRMb2dvIiwiY29lZiIsImNvZWZIZWFkIiwiY29lZlZhbHVlIiwib2RkUmV2ZXJzZSIsIk1hdGNoZXNPbmVUd28iLCJ0aXRsZUxhYmVsIiwidGl0bGVWYWx1ZSIsInRlYW0xTmFtZSIsInRlYW1WYWx1ZSIsInZhbHVlMSIsInRlYW0yTmFtZSIsInZhbHVlMiIsInVzZUFuaW1hdGVkTGlzdCIsInNsaWRlcyIsIml0ZW1zQ291bnQiLCJhbmltYXRlZElkeCIsInNldEFuaW1hdGVkSWR4IiwiYW5pbWF0aW9uRHVyYXRpb24iLCJnb05leHQiLCJ0aW1lb3V0IiwiREVGQVVMVF9BTklNQVRJT05fU1BFRUQiLCJXaWRlQ2FyZCIsImdldENoaWxkIiwibWF0Y2hlcyIsIm1hdGNoZXNPbmVUd28iLCJzbGlkZXNMaXN0IiwiZmlsdGVyIiwiQm9vbGVhbiIsInNsaWRlIiwiYW5pbWF0aW9uTmFtZSIsImN1cnJlbnRTbGlkZSIsInNsaWRlUnVsZXMiLCJiYWNrZ3JvdW5kUnVsZXMiLCJoYXNDdXN0b21CYWNrZ3JvdW5kIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQU9BLEdBQUMsV0FBWTtBQUdaLFFBQUksU0FBUyxDQUFFLEVBQUM7QUFHaEIsYUFBU0EsY0FBYTtBQUNyQixVQUFJLFVBQVUsQ0FBQTtBQUVkLGVBQVNDLEtBQUksR0FBR0EsS0FBSSxVQUFVLFFBQVFBLE1BQUs7QUFDMUMsWUFBSSxNQUFNLFVBQVVBLEVBQUM7QUFDckIsWUFBSSxDQUFDO0FBQUs7QUFFVixZQUFJLFVBQVUsT0FBTztBQUVyQixZQUFJLFlBQVksWUFBWSxZQUFZLFVBQVU7QUFDakQsa0JBQVEsS0FBSyxHQUFHO0FBQUEsUUFDaEIsV0FBVSxNQUFNLFFBQVEsR0FBRyxHQUFHO0FBQzlCLGNBQUksSUFBSSxRQUFRO0FBQ2YsZ0JBQUlDLFNBQVFGLFlBQVcsTUFBTSxNQUFNLEdBQUc7QUFDdEMsZ0JBQUlFLFFBQU87QUFDVixzQkFBUSxLQUFLQSxNQUFLO0FBQUEsWUFDbEI7QUFBQSxVQUNEO0FBQUEsUUFDTCxXQUFjLFlBQVksVUFBVTtBQUNoQyxjQUFJLElBQUksYUFBYSxPQUFPLFVBQVUsWUFBWSxDQUFDLElBQUksU0FBUyxTQUFRLEVBQUcsU0FBUyxlQUFlLEdBQUc7QUFDckcsb0JBQVEsS0FBSyxJQUFJLFNBQVUsQ0FBQTtBQUMzQjtBQUFBLFVBQ0E7QUFFRCxtQkFBUyxPQUFPLEtBQUs7QUFDcEIsZ0JBQUksT0FBTyxLQUFLLEtBQUssR0FBRyxLQUFLLElBQUksR0FBRyxHQUFHO0FBQ3RDLHNCQUFRLEtBQUssR0FBRztBQUFBLFlBQ2hCO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBRUQsYUFBTyxRQUFRLEtBQUssR0FBRztBQUFBLElBQ3ZCO0FBRUQsUUFBcUMsT0FBTyxTQUFTO0FBQ3BELE1BQUFGLFlBQVcsVUFBVUE7QUFDckIsYUFBQSxVQUFpQkE7QUFBQSxJQUNuQixPQUtRO0FBQ04sYUFBTyxhQUFhQTtBQUFBLElBQ3BCO0FBQUEsRUFDRjs7O0FDM0RpQyxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUVHLE1BQUUsR0FBRSxJQUFFLENBQUEsR0FBRyxJQUFFLElBQUcsSUFBRUMsUUFBRSxLQUFJLElBQUVBLFFBQUUsS0FBSSxJQUFFQSxRQUFFLFFBQU8sSUFBRUEsUUFBRSxLQUFJLElBQUVBLFFBQUU7QUFBUSxTQUFTLEVBQUVDLElBQUVDLElBQUU7QUFBQ0YsVUFBRSxPQUFLQSxRQUFFLElBQUksR0FBRUMsSUFBRUYsT0FBR0csRUFBQyxHQUFFSCxNQUFFO0FBQUUsTUFBSUYsS0FBRSxFQUFFLFFBQU0sRUFBRSxNQUFJLEVBQUMsSUFBRyxJQUFHLEtBQUksQ0FBRSxFQUFBO0FBQUcsU0FBT0ksTUFBR0osR0FBRSxHQUFHLFVBQVFBLEdBQUUsR0FBRyxLQUFLLEVBQUMsS0FBSSxFQUFDLENBQUMsR0FBRUEsR0FBRSxHQUFHSSxFQUFDO0FBQUM7QUFBQyxTQUFTLEVBQUUsR0FBRTtBQUFDLFNBQU9GLE1BQUUsR0FBRSxFQUFFSSxLQUFFLENBQUM7QUFBQztBQUFDLFNBQVMsRUFBRSxHQUFFRCxJQUFFTCxJQUFFO0FBQUMsTUFBSUUsS0FBRSxFQUFFLEtBQUksQ0FBQztBQUFFLE1BQUdBLEdBQUUsSUFBRSxHQUFFLENBQUNBLEdBQUUsUUFBTUEsR0FBRSxLQUFHLENBQUNGLEtBQUVBLEdBQUVLLEVBQUMsSUFBRUMsSUFBRSxRQUFPRCxFQUFDLEdBQUUsU0FBU0YsSUFBRTtBQUFDLFFBQUlDLEtBQUVGLEdBQUUsTUFBSUEsR0FBRSxJQUFJLENBQUMsSUFBRUEsR0FBRSxHQUFHLENBQUMsR0FBRUssS0FBRUwsR0FBRSxFQUFFRSxJQUFFRCxFQUFDO0FBQUUsSUFBQUMsT0FBSUcsT0FBSUwsR0FBRSxNQUFJLENBQUNLLElBQUVMLEdBQUUsR0FBRyxDQUFDLENBQUMsR0FBRUEsR0FBRSxJQUFJLFNBQVMsQ0FBRSxDQUFBO0FBQUEsRUFBRSxDQUFDLEdBQUVBLEdBQUUsTUFBSSxHQUFFLENBQUMsRUFBRSxJQUFHO0FBQUMsUUFBSU0sS0FBRSxTQUFTTCxJQUFFQyxJQUFFRyxJQUFFO0FBQUMsVUFBRyxDQUFDTCxHQUFFLElBQUk7QUFBSSxlQUFNO0FBQUcsVUFBSUcsS0FBRUgsR0FBRSxJQUFJLElBQUksR0FBRyxPQUFPLFNBQVNDLElBQUU7QUFBQyxlQUFPQSxHQUFFO0FBQUEsTUFBRyxDQUFDO0FBQUUsVUFBR0UsR0FBRSxNQUFNLFNBQVNGLElBQUU7QUFBQyxlQUFNLENBQUNBLEdBQUU7QUFBQSxNQUFHLENBQUM7QUFBRSxlQUFNLENBQUNNLE1BQUdBLEdBQUUsS0FBSyxNQUFLTixJQUFFQyxJQUFFRyxFQUFDO0FBQUUsVUFBSVAsS0FBRTtBQUFHLGFBQU9LLEdBQUUsUUFBUSxTQUFTRixJQUFFO0FBQUMsWUFBR0EsR0FBRSxLQUFJO0FBQUMsY0FBSUMsS0FBRUQsR0FBRSxHQUFHLENBQUM7QUFBRSxVQUFBQSxHQUFFLEtBQUdBLEdBQUUsS0FBSUEsR0FBRSxNQUFJLFFBQU9DLE9BQUlELEdBQUUsR0FBRyxDQUFDLE1BQUlILEtBQUU7QUFBQSxRQUFHO0FBQUEsTUFBQyxDQUFDLEdBQUUsRUFBRSxDQUFDQSxNQUFHRSxHQUFF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T0FBSyxFQUFFLElBQUksUUFBTSxFQUFFLElBQUksSUFBSSxHQUFHLFFBQVEsU0FBU1AsSUFBRTtBQUFDLGtCQUFZLE9BQU9BLEdBQUUsT0FBS0EsR0FBRSxJQUFLO0FBQUEsRUFBQSxDQUFDLEdBQUUsRUFBRSxJQUFJLE1BQUksT0FBTSxTQUFPLElBQUUsRUFBRSxDQUFBLEdBQUcsQ0FBQyxHQUFHLFFBQU0sRUFBRSxJQUFJLFFBQU1PLE9BQUksRUFBRSxJQUFJLE1BQUlOLEtBQUcsRUFBRSxNQUFJLE9BQU0sRUFBRSxNQUFJLEVBQUUsT0FBSyxFQUFFLElBQUksSUFBSSxTQUFTRCxJQUFFO0FBQUMsV0FBTyxFQUFFQSxJQUFFQyxJQUFFTSxFQUFDO0FBQUEsRUFBQyxDQUFDLElBQUc7QUFBQztBQUFDLFNBQVMsRUFBRSxHQUFFTixJQUFFTSxJQUFFO0FBQUMsU0FBTyxNQUFJLEVBQUUsTUFBSSxNQUFLLEVBQUUsTUFBSSxFQUFFLE9BQUssRUFBRSxJQUFJLElBQUksU0FBU1AsSUFBRTtBQUFDLFdBQU8sRUFBRUEsSUFBRUMsSUFBRU0sRUFBQztBQUFBLEVBQUMsQ0FBQyxHQUFFLEVBQUUsT0FBSyxFQUFFLElBQUksUUFBTU4sT0FBSSxFQUFFLE9BQUtNLEdBQUUsYUFBYSxFQUFFLEtBQUksRUFBRSxHQUFHLEdBQUUsRUFBRSxJQUFJLE1BQUksTUFBRyxFQUFFLElBQUksTUFBSUEsTUFBSTtBQUFDO0FBQUMsU0FBUyxJQUFHO0FBQUMsT0FBSyxNQUFJLEdBQUUsS0FBSyxJQUFFLE1BQUssS0FBSyxNQUFJO0FBQUk7QUFBQyxTQUFTLEVBQUUsR0FBRTtBQUFDLE1BQUlOLEtBQUUsRUFBRSxHQUFHO0FBQUksU0FBT0EsTUFBR0EsR0FBRSxPQUFLQSxHQUFFLElBQUksQ0FBQztBQUFDO0FBQXFMLFNBQVMsSUFBRztBQUFDLE9BQUssSUFBRSxNQUFLLEtBQUssSUFBRTtBQUFJO0FBQUNNLFFBQUUsVUFBUSxTQUFTLEdBQUU7QUFBQyxNQUFJTixLQUFFLEVBQUU7QUFBSSxFQUFBQSxNQUFHQSxHQUFFLE9B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QSxRQUFPaFQsV0FDMUIrTSxNQUFNL00sWUFBWSxDQUFBLEdBQUkwSSxJQUFJLENBQUNtSyxPQUFPN1I7O0FBQ2xDZCxtQkFBQSxPQUFBO0FBQUEsWUFDRTBRLFdBQVdDLFNBQU95RztBQUFBQSxZQUNsQnZHLE9BQU87QUFBQSxjQUNMd0csZUFBZUMsaUJBQWlCeFcsU0FBUTZQLFdBQU9nQyxNQUFBQSxNQUFNOVEsU0FBTjhRLGdCQUFBQSxJQUFZMEUsa0JBQWlCLGFBQWEsSUFBSTtBQUFBLGNBQzdGWixtQkFBb0IsSUFBRTlELE1BQUFBLE1BQU05USxTQUFOOFEsZ0JBQUFBLElBQVk4RDtBQUFBQSxZQUNwQztBQUFBLFlBQUUzVyxVQUVGRSxFQUFDSCxjQUFZO0FBQUEsY0FBQ0UsT0FBTztBQUFBLGdCQUFFLEdBQUc0UztBQUFBQSxnQkFBTzVIO0FBQUFBLGNBQU87QUFBQSxjQUFFakwsVUFBRWdYLFNBQVNuRSxNQUFNbUIsSUFBSTtBQUFBLFlBQUEsQ0FBQztBQUFBLFVBQUEsQ0FFbkU7QUFBQSxTQUFBO0FBQUEsTUFBQSxDQUFDLEdBRUpyRCxFQUFBLE9BQUE7QUFBQSxRQUFLQyxXQUFXQyxTQUFPb0M7QUFBQUEsUUFBTWpULFdBQzNCRSxFQUFBLE9BQUE7QUFBQSxVQUFLMFEsV0FBV0MsU0FBT1k7QUFBQUEsVUFBTVYsT0FBT2hFLE1BQU0wRTtBQUFBQSxRQUFBQSxDQUFLLEdBRS9DdlIsRUFBQSxPQUFBO0FBQUEsVUFBSzBRLFdBQVdDLFNBQU8wRDtBQUFBQSxVQUFjdlUsVUFDbkMyUSxFQUFBLE9BQUE7QUFBQSxZQUFLQyxXQUFXQyxTQUFPYztBQUFBQSxZQUFRWixPQUFPaEUsTUFBTTRFO0FBQUFBLFlBQU8zUixXQUNqREUsRUFBQSxPQUFBO0FBQUEsY0FBSzBRLFdBQVdDLFNBQU9ZO0FBQUFBLGNBQU1WLE9BQU9oRSxNQUFNMEU7QUFBQUEsWUFBQUEsQ0FBSyxJQUM5QzFFLFdBQU00RSxXQUFONUUsbUJBQWMvTSxRQUFRO0FBQUEsVUFBQSxDQUFBO0FBQUEsUUFBQSxDQUVyQixDQUFBO0FBQUEsTUFBQSxDQUNGLENBQUE7QUFBQSxJQUFBLENBQ0YsQ0FBQTtBQUFBLEVBQUEsQ0FDSjtBQUVSO0FBRUEsTUFBZUksUUFBQUEsT0FBT0YsRUFBQzZXLGFBQVc7IiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDQsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwM119
|