bry-biometric-collector 2.2.0-RC02 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,1427 +0,0 @@
1
- import { S as nn, r as on, t as di, w as an, x as q, y as me, z, B as M, C as Ke, D as W, G as Ee, H as he, E as Ae, I as yt, J as ke, K as Xe, _ as it, L as Rt, Y as Fe, O as Ye, P as ze, Q as Te, R as nt, T as ot, V as St, W as Le, X as Je, a4 as at, $ as Dt, a5 as Pt, a6 as Et, a7 as At, a8 as ln, a9 as xt, aa as $t, ab as y, ac as ei, ad as lt, af as ti, ao as Ft, ap as ii, an as st, f as Qe, aq as ni, ag as ct, ar as oi, as as rt, at as ai, au as li, av as Be, aw as si, ax as Tt, l as mi, ay as Lt, ah as ut, aB as hi, aC as bi, aD as gi, aE as _i, aF as ci, aG as ri, aH as wi, aI as sn, aJ as p, aK as le, aL as k, aM as Ze, aN as ee, aO as xe, aP as Z, aQ as Y, aR as Ge, aS as j, aT as ft, aU as cn, aV as m, aW as d, aX as dt, aY as ve, aZ as mt, a_ as It, b0 as re, b1 as bt, b2 as X, b3 as $, b4 as pi, b5 as ht, b7 as ui, b8 as fi } from "./main_a9bb653b_2.2.0-RC02.js";
2
- import { c as ae, C as te, a as ki, f as $e, b as vi } from "./CameraBtn_cf55ed47_2.2.0-RC02.js";
3
- const { console: be } = sn, v = "src/lib/docTab/DocumentCollector.svelte";
4
- function Ci(n) {
5
- let i, t, a, c = (
6
- /*unique*/
7
- n[7]
8
- ), l, o, s, r, u, f, g, b, E, _, h, S, A, D, F, ie, ne, B, V, I, oe, x = Ot(n);
9
- o = new bi({
10
- props: { className: "bottom-0" },
11
- $$inline: !0
12
- }), r = new vi({
13
- props: { className: "bottom-0" },
14
- $$inline: !0
15
- });
16
- let R = (
17
- /*isCountingDown*/
18
- n[6] && Mt(n)
19
- ), T = (
20
- /*$enableFaceApi*/
21
- n[23] && !/*isCountingDown*/
22
- n[6] && /*faceNotValidated*/
23
- n[12] && Wt(n)
24
- );
25
- function et(G, w) {
26
- return (
27
- /*$captured*/
28
- G[16] ? Ri : Si
29
- );
30
- }
31
- let Ie = et(n), C = Ie(n);
32
- const Q = [Ai, Ei], K = [];
33
- function se(G, w) {
34
- return (
35
- /*showUnconformities*/
36
- G[1] && (!/*idrndClosed*/
37
- G[11] || /*$captured*/
38
- G[16]) ? 0 : (
39
- /*$cameraStatusStore*/
40
- G[14] !== te.OK ? 1 : -1
41
- )
42
- );
43
- }
44
- ~(B = se(n)) && (V = K[B] = Q[B](n));
45
- const ge = {
46
- c: function() {
47
- i = p("div"), t = p("div"), a = p("div"), x.c(), l = j(), ft(o.$$.fragment), s = j(), ft(r.$$.fragment), u = j(), f = p("canvas"), g = j(), b = p("canvas"), E = j(), _ = p("canvas"), h = j(), R && R.c(), S = j(), T && T.c(), D = j(), F = p("div"), C.c(), ne = j(), V && V.c(), I = cn(), m(f, "id", "bry-ce-displayCanvas"), m(f, "class", "max-w-full"), k(f, v, 531, 10, 20859), m(b, "id", "bry-ce-detectionsCanvas"), m(b, "class", "absolute top-0 left-0 max-w-full"), k(b, v, 533, 10, 20976), m(_, "id", "bry-ce-maskCanvas"), m(_, "class", "absolute top-0 left-0 max-w-full"), k(_, v, 538, 10, 21142), m(a, "class", "relative"), a.hidden = A = /*$cameraStatusStore*/
48
- n[14] !== te.OK, k(a, v, 512, 8, 20133), m(F, "class", "px-4 sm:px-0 mt-[1em]"), F.hidden = ie = !/*showCaptureButton*/
49
- n[0], k(F, v, 556, 8, 22027), m(t, "class", "relative mx-auto"), k(t, v, 511, 6, 20094), m(i, "class", "flex flex-col justify-between"), k(i, v, 510, 4, 20019);
50
- },
51
- m: function(w, U) {
52
- q(w, i, U), d(i, t), d(t, a), x.m(a, null), d(a, l), dt(o, a, null), d(a, s), dt(r, a, null), d(a, u), d(a, f), n[42](f), d(a, g), d(a, b), n[43](b), d(a, E), d(a, _), n[44](_), d(a, h), R && R.m(a, null), d(a, S), T && T.m(a, null), d(t, D), d(t, F), C.m(F, null), n[48](i), q(w, ne, U), ~B && K[B].m(w, U), q(w, I, U), oe = !0;
53
- },
54
- p: function(w, U) {
55
- U[0] & /*unique*/
56
- 128 && di(c, c = /*unique*/
57
- w[7]) ? (x.d(1), x = Ot(w), x.c(), x.m(a, l)) : x.p(w, U), /*isCountingDown*/
58
- w[6] ? R ? (R.p(w, U), U[0] & /*isCountingDown*/
59
- 64 && Z(R, 1)) : (R = Mt(w), R.c(), Z(R, 1), R.m(a, S)) : R && (Ze(), ee(R, 1, 1, () => {
60
- R = null;
61
- }), xe()), /*$enableFaceApi*/
62
- w[23] && !/*isCountingDown*/
63
- w[6] && /*faceNotValidated*/
64
- w[12] ? T ? (T.p(w, U), U[0] & /*$enableFaceApi, isCountingDown, faceNotValidated*/
65
- 8392768 && Z(T, 1)) : (T = Wt(w), T.c(), Z(T, 1), T.m(a, null)) : T && (Ze(), ee(T, 1, 1, () => {
66
- T = null;
67
- }), xe()), (!oe || U[0] & /*$cameraStatusStore*/
68
- 16384 && A !== (A = /*$cameraStatusStore*/
69
- w[14] !== te.OK)) && ve(a, "hidden", A), Ie === (Ie = et(w)) && C ? C.p(w, U) : (C.d(1), C = Ie(w), C && (C.c(), C.m(F, null))), (!oe || U[0] & /*showCaptureButton*/
70
- 1 && ie !== (ie = !/*showCaptureButton*/
71
- w[0])) && ve(F, "hidden", ie);
72
- let ue = B;
73
- B = se(w), B === ue ? ~B && K[B].p(w, U) : (V && (Ze(), ee(K[ue], 1, 1, () => {
74
- K[ue] = null;
75
- }), xe()), ~B ? (V = K[B], V ? V.p(w, U) : (V = K[B] = Q[B](w), V.c()), Z(V, 1), V.m(I.parentNode, I)) : V = null);
76
- },
77
- i: function(w) {
78
- oe || (Z(o.$$.fragment, w), Z(r.$$.fragment, w), Z(R), Z(T), Z(V), oe = !0);
79
- },
80
- o: function(w) {
81
- ee(o.$$.fragment, w), ee(r.$$.fragment, w), ee(R), ee(T), ee(V), oe = !1;
82
- },
83
- d: function(w) {
84
- w && Y(i), x.d(w), mt(o), mt(r), n[42](null), n[43](null), n[44](null), R && R.d(), T && T.d(), C.d(), n[48](null), w && Y(ne), ~B && K[B].d(w), w && Y(I);
85
- }
86
- };
87
- return z("SvelteRegisterBlock", {
88
- block: ge,
89
- id: Ci.name,
90
- type: "else",
91
- source: "(510:2) {:else}",
92
- ctx: n
93
- }), ge;
94
- }
95
- function yi(n) {
96
- let i, t, a, c, l, o = (
97
- /*$isLoadingAPP*/
98
- n[17] && Ut(n)
99
- );
100
- const s = {
101
- c: function() {
102
- i = p("slot"), t = p("div"), a = p("img"), l = j(), o && o.c(), It(a.src, c = wi) || m(a, "src", c), m(a, "alt", "loading gif"), m(a, "class", "m-auto h-[10em] lg:h-[12em]"), k(a, v, 503, 8, 19736), m(t, "class", "translate-y-1/3 md:translate-y-1/4 xl:translate-y-1/2"), k(t, v, 502, 6, 19660), m(i, "name", "obtaining-photo-gif"), m(i, "class", "block h-[17em] lg:h-[21.6em] xl:h-[30em]"), k(i, v, 501, 4, 19571);
103
- },
104
- m: function(u, f) {
105
- q(u, i, f), d(i, t), d(t, a), d(t, l), o && o.m(t, null);
106
- },
107
- p: function(u, f) {
108
- /*$isLoadingAPP*/
109
- u[17] ? o ? o.p(u, f) : (o = Ut(u), o.c(), o.m(t, null)) : o && (o.d(1), o = null);
110
- },
111
- i: le,
112
- o: le,
113
- d: function(u) {
114
- u && Y(i), o && o.d();
115
- }
116
- };
117
- return z("SvelteRegisterBlock", {
118
- block: s,
119
- id: yi.name,
120
- type: "if",
121
- source: "(501:2) {#if $isLoadingAPP}",
122
- ctx: n
123
- }), s;
124
- }
125
- function Ot(n) {
126
- let i, t, a;
127
- const c = {
128
- c: function() {
129
- i = p("video"), m(i, "id", "bry-cc-camera-video-tag"), m(i, "class", "absolute -z-10"), i.playsInline = !0, i.muted = !0, i.autoplay = !0, k(i, v, 515, 12, 20359);
130
- },
131
- m: function(o, s) {
132
- q(o, i, s), n[40](i), t || (a = [
133
- re(
134
- i,
135
- "canplay",
136
- /*canplay_handler*/
137
- n[41],
138
- !1,
139
- !1,
140
- !1,
141
- !1
142
- ),
143
- re(
144
- i,
145
- "play",
146
- /*play*/
147
- n[2],
148
- { once: !0 },
149
- !1,
150
- !1,
151
- !1
152
- )
153
- ], t = !0);
154
- },
155
- p: le,
156
- d: function(o) {
157
- o && Y(i), n[40](null), t = !1, bt(a);
158
- }
159
- };
160
- return z("SvelteRegisterBlock", {
161
- block: c,
162
- id: Ot.name,
163
- type: "key",
164
- source: "(515:10) {#key unique}",
165
- ctx: n
166
- }), c;
167
- }
168
- function Mt(n) {
169
- let i, t, a = (
170
- /*$_*/
171
- n[26]("faceCollector.stayStill") + ""
172
- ), c, l, o;
173
- const s = {
174
- c: function() {
175
- i = p("div"), t = p("span"), c = X(a), m(t, "class", "absolute left-1/2 -translate-x-1/2 top-[10%] ce-dui-badge ce-dui-badge-lg h-[2em] text-4xl 4xl:text-base w-[12.1em]"), k(t, v, 541, 12, 21347), k(i, v, 540, 10, 21281);
176
- },
177
- m: function(u, f) {
178
- q(u, i, f), d(i, t), d(t, c), o = !0;
179
- },
180
- p: function(u, f) {
181
- (!o || f[0] & /*$_*/
182
- 67108864) && a !== (a = /*$_*/
183
- u[26]("faceCollector.stayStill") + "") && $(c, a);
184
- },
185
- i: function(u) {
186
- o || (pi(() => {
187
- o && (l || (l = ht(i, $e, { delay: 250, duration: 300 }, !0)), l.run(1));
188
- }), o = !0);
189
- },
190
- o: function(u) {
191
- l || (l = ht(i, $e, { delay: 250, duration: 300 }, !1)), l.run(0), o = !1;
192
- },
193
- d: function(u) {
194
- u && Y(i), u && l && l.end();
195
- }
196
- };
197
- return z("SvelteRegisterBlock", {
198
- block: s,
199
- id: Mt.name,
200
- type: "if",
201
- source: "(540:10) {#if isCountingDown}",
202
- ctx: n
203
- }), s;
204
- }
205
- function Wt(n) {
206
- let i, t, a = (
207
- /*$_*/
208
- n[26](`${/*faceValidationAlert*/
209
- n[13]}`) + ""
210
- ), c, l, o;
211
- const s = {
212
- c: function() {
213
- i = p("div"), t = p("span"), c = X(a), m(t, "class", "absolute left-1/2 -translate-x-1/2 top-[10%] ce-dui-badge ce-dui-badge-lg h-[2em] text-4xl 4xl:text-base w-[12.1em]"), k(t, v, 549, 16, 21745), k(i, v, 548, 14, 21675);
214
- },
215
- m: function(u, f) {
216
- q(u, i, f), d(i, t), d(t, c), o = !0;
217
- },
218
- p: function(u, f) {
219
- (!o || f[0] & /*$_, faceValidationAlert*/
220
- 67117056) && a !== (a = /*$_*/
221
- u[26](`${/*faceValidationAlert*/
222
- u[13]}`) + "") && $(c, a);
223
- },
224
- i: function(u) {
225
- o || (pi(() => {
226
- o && (l || (l = ht(i, $e, { delay: 250, duration: 300 }, !0)), l.run(1));
227
- }), o = !0);
228
- },
229
- o: function(u) {
230
- l || (l = ht(i, $e, { delay: 250, duration: 300 }, !1)), l.run(0), o = !1;
231
- },
232
- d: function(u) {
233
- u && Y(i), u && l && l.end();
234
- }
235
- };
236
- return z("SvelteRegisterBlock", {
237
- block: s,
238
- id: Wt.name,
239
- type: "if",
240
- source: "(548:10) {#if $enableFaceApi && !isCountingDown && faceNotValidated}",
241
- ctx: n
242
- }), s;
243
- }
244
- function Ri(n) {
245
- let i, t, a = (
246
- /*$_*/
247
- n[26]("faceCollector.finish") + ""
248
- ), c, l, o, s, r = (
249
- /*$_*/
250
- n[26]("faceCollector.retakePhoto") + ""
251
- ), u, f, g;
252
- const b = {
253
- c: function() {
254
- i = p("div"), t = p("button"), c = X(a), o = j(), s = p("button"), u = X(r), t.disabled = l = /*$justification*/
255
- n[20].length === 0, m(t, "class", "ce-dui-btn ce-dui-btn-primary ce-dui-btn-block flex-shrink"), k(t, v, 575, 14, 22710), m(s, "id", "bry-cc-retake-button"), m(s, "class", "ce-dui-btn ce-dui-btn-block ce-dui-btn-outline flex-shrink"), k(s, v, 580, 14, 22963), m(i, "class", "ce-dui-btn-group flex"), k(i, v, 574, 12, 22660);
256
- },
257
- m: function(_, h) {
258
- q(_, i, h), d(i, t), d(t, c), d(i, o), d(i, s), d(s, u), f || (g = [
259
- re(
260
- t,
261
- "click",
262
- /*click_handler_1*/
263
- n[46],
264
- !1,
265
- !1,
266
- !1,
267
- !1
268
- ),
269
- re(
270
- s,
271
- "click",
272
- /*click_handler_2*/
273
- n[47],
274
- !1,
275
- !1,
276
- !1,
277
- !1
278
- )
279
- ], f = !0);
280
- },
281
- p: function(_, h) {
282
- h[0] & /*$_*/
283
- 67108864 && a !== (a = /*$_*/
284
- _[26]("faceCollector.finish") + "") && $(c, a), h[0] & /*$justification*/
285
- 1048576 && l !== (l = /*$justification*/
286
- _[20].length === 0) && ve(t, "disabled", l), h[0] & /*$_*/
287
- 67108864 && r !== (r = /*$_*/
288
- _[26]("faceCollector.retakePhoto") + "") && $(u, r);
289
- },
290
- d: function(_) {
291
- _ && Y(i), f = !1, bt(g);
292
- }
293
- };
294
- return z("SvelteRegisterBlock", {
295
- block: b,
296
- id: Ri.name,
297
- type: "else",
298
- source: "(574:10) {:else}",
299
- ctx: n
300
- }), b;
301
- }
302
- function Si(n) {
303
- let i, t, a, c, l;
304
- function o(f, g) {
305
- return (
306
- /*$isLoading*/
307
- f[27] ? Pi : Di
308
- );
309
- }
310
- let s = o(n), r = s(n);
311
- const u = {
312
- c: function() {
313
- i = p("button"), r.c(), m(i, "id", "bry-cc-capture-btn"), i.disabled = t = !/*$faceFound*/
314
- n[25] && /*$enableFaceApi*/
315
- n[23] || !/*$ready*/
316
- n[24] && !/*$enableFaceApi*/
317
- n[23], i.hidden = a = !/*showCaptureButton*/
318
- n[0], m(i, "class", "ce-dui-btn ce-dui-btn-block ce-dui-btn-primary text-xl"), k(i, v, 560, 12, 22149);
319
- },
320
- m: function(g, b) {
321
- q(g, i, b), r.m(i, null), c || (l = re(
322
- i,
323
- "click",
324
- /*click_handler*/
325
- n[45],
326
- !1,
327
- !1,
328
- !1,
329
- !1
330
- ), c = !0);
331
- },
332
- p: function(g, b) {
333
- s === (s = o(g)) && r ? r.p(g, b) : (r.d(1), r = s(g), r && (r.c(), r.m(i, null))), b[0] & /*$faceFound, $enableFaceApi, $ready*/
334
- 58720256 && t !== (t = !/*$faceFound*/
335
- g[25] && /*$enableFaceApi*/
336
- g[23] || !/*$ready*/
337
- g[24] && !/*$enableFaceApi*/
338
- g[23]) && ve(i, "disabled", t), b[0] & /*showCaptureButton*/
339
- 1 && a !== (a = !/*showCaptureButton*/
340
- g[0]) && ve(i, "hidden", a);
341
- },
342
- d: function(g) {
343
- g && Y(i), r.d(), c = !1, l();
344
- }
345
- };
346
- return z("SvelteRegisterBlock", {
347
- block: u,
348
- id: Si.name,
349
- type: "if",
350
- source: "(560:10) {#if !$captured}",
351
- ctx: n
352
- }), u;
353
- }
354
- function Di(n) {
355
- let i = (
356
- /*$_*/
357
- n[26]("faceCollector.takePicture") + ""
358
- ), t;
359
- const a = {
360
- c: function() {
361
- t = X(i);
362
- },
363
- m: function(l, o) {
364
- q(l, t, o);
365
- },
366
- p: function(l, o) {
367
- o[0] & /*$_*/
368
- 67108864 && i !== (i = /*$_*/
369
- l[26]("faceCollector.takePicture") + "") && $(t, i);
370
- },
371
- d: function(l) {
372
- l && Y(t);
373
- }
374
- };
375
- return z("SvelteRegisterBlock", {
376
- block: a,
377
- id: Di.name,
378
- type: "else",
379
- source: "(570:14) {:else}",
380
- ctx: n
381
- }), a;
382
- }
383
- function Pi(n) {
384
- let i;
385
- const t = {
386
- c: function() {
387
- i = X("Take picture");
388
- },
389
- m: function(c, l) {
390
- q(c, i, l);
391
- },
392
- p: le,
393
- d: function(c) {
394
- c && Y(i);
395
- }
396
- };
397
- return z("SvelteRegisterBlock", {
398
- block: t,
399
- id: Pi.name,
400
- type: "if",
401
- source: "(568:14) {#if $isLoading}",
402
- ctx: n
403
- }), t;
404
- }
405
- function Ei(n) {
406
- let i, t;
407
- i = new ki({
408
- props: { handler: (
409
- /*func*/
410
- n[55]
411
- ) },
412
- $$inline: !0
413
- });
414
- const a = {
415
- c: function() {
416
- ft(i.$$.fragment);
417
- },
418
- m: function(l, o) {
419
- dt(i, l, o), t = !0;
420
- },
421
- p: function(l, o) {
422
- const s = {};
423
- o[0] & /*capturing*/
424
- 1024 && (s.handler = /*func*/
425
- l[55]), i.$set(s);
426
- },
427
- i: function(l) {
428
- t || (Z(i.$$.fragment, l), t = !0);
429
- },
430
- o: function(l) {
431
- ee(i.$$.fragment, l), t = !1;
432
- },
433
- d: function(l) {
434
- mt(i, l);
435
- }
436
- };
437
- return z("SvelteRegisterBlock", {
438
- block: a,
439
- id: Ei.name,
440
- type: "if",
441
- source: "(673:57) ",
442
- ctx: n
443
- }), a;
444
- }
445
- function Ai(n) {
446
- let i, t, a, c, l, o, s, r, u;
447
- const f = [Bi, Li, Ti, Fi], g = [];
448
- function b(_, h) {
449
- return (
450
- /*$captured*/
451
- _[16] ? (
452
- /*$requestResult*/
453
- _[18] !== ut.OK ? 1 : (
454
- /*$saved*/
455
- _[19] ? 3 : 2
456
- )
457
- ) : 0
458
- );
459
- }
460
- o = b(n), s = g[o] = f[o](n);
461
- const E = {
462
- c: function() {
463
- i = p("div"), t = p("img"), l = j(), s.c(), m(t, "class", "m-auto col-start-1 col-end-1 max-h-[23.2em]"), It(t.src, a = /*$dataTypePrefix*/
464
- n[22] + "," + /*$image*/
465
- n[21]) || m(t, "src", a), t.hidden = c = !/*$captured*/
466
- n[16] || !/*$showFaceWhileValidating*/
467
- n[28], m(t, "alt", ""), k(t, v, 596, 8, 23600), m(i, "class", r = "grid-cols-1 grid-rows-2 sm:grid-cols-2 sm:grid-rows-1 gap-[.5em] " + (/*$showFaceWhileValidating*/
468
- n[28] ? "grid m-[1em] overflow-hidden" : "absolute -translate-y-1/2 -translate-x-1/2 top-1/2 left-1/2 overflow-visible")), k(i, v, 591, 6, 23336);
469
- },
470
- m: function(h, S) {
471
- q(h, i, S), d(i, t), d(i, l), g[o].m(i, null), u = !0;
472
- },
473
- p: function(h, S) {
474
- (!u || S[0] & /*$dataTypePrefix, $image*/
475
- 6291456 && !It(t.src, a = /*$dataTypePrefix*/
476
- h[22] + "," + /*$image*/
477
- h[21])) && m(t, "src", a), (!u || S[0] & /*$captured, $showFaceWhileValidating*/
478
- 268500992 && c !== (c = !/*$captured*/
479
- h[16] || !/*$showFaceWhileValidating*/
480
- h[28])) && ve(t, "hidden", c);
481
- let A = o;
482
- o = b(h), o === A ? g[o].p(h, S) : (Ze(), ee(g[A], 1, 1, () => {
483
- g[A] = null;
484
- }), xe(), s = g[o], s ? s.p(h, S) : (s = g[o] = f[o](h), s.c()), Z(s, 1), s.m(i, null)), (!u || S[0] & /*$showFaceWhileValidating*/
485
- 268435456 && r !== (r = "grid-cols-1 grid-rows-2 sm:grid-cols-2 sm:grid-rows-1 gap-[.5em] " + (/*$showFaceWhileValidating*/
486
- h[28] ? "grid m-[1em] overflow-hidden" : "absolute -translate-y-1/2 -translate-x-1/2 top-1/2 left-1/2 overflow-visible"))) && m(i, "class", r);
487
- },
488
- i: function(h) {
489
- u || (Z(s), u = !0);
490
- },
491
- o: function(h) {
492
- ee(s), u = !1;
493
- },
494
- d: function(h) {
495
- h && Y(i), g[o].d();
496
- }
497
- };
498
- return z("SvelteRegisterBlock", {
499
- block: E,
500
- id: Ai.name,
501
- type: "if",
502
- source: "(591:4) {#if showUnconformities && (!idrndClosed || $captured)}",
503
- ctx: n
504
- }), E;
505
- }
506
- function Fi(n) {
507
- let i, t, a = (
508
- /*$_*/
509
- n[26]("docCollector.captured") + ""
510
- ), c, l, o, s, r = (
511
- /*$_*/
512
- n[26]("faceCollector.retakePhoto") + ""
513
- ), u, f, g = mi(_i).faceStrategy !== hi.DISABLED, b, E, _, h = g && Ii(n);
514
- const S = {
515
- c: function() {
516
- i = p("div"), t = p("h1"), c = X(a), l = j(), o = p("div"), s = p("button"), u = X(r), f = j(), h && h.c(), m(t, "class", "text-3xl font-bold pb-[1em] transition-opacity"), k(t, v, 656, 12, 26328), m(s, "id", "bry-cc-retake-button"), m(s, "class", "ce-dui-btn ce-dui-btn-block flex-shrink text-base"), k(s, v, 659, 14, 26525), m(o, "class", "flex flex-row"), ui(o, "ce-dui-btn-group", !/*$exportButtonDisabled*/
517
- n[29]), k(o, v, 658, 12, 26435), k(i, v, 655, 10, 26310);
518
- },
519
- m: function(D, F) {
520
- q(D, i, F), d(i, t), d(t, c), d(i, l), d(i, o), d(o, s), d(s, u), d(o, f), h && h.m(o, null), b = !0, E || (_ = re(
521
- s,
522
- "click",
523
- /*click_handler_7*/
524
- n[54],
525
- !1,
526
- !1,
527
- !1,
528
- !1
529
- ), E = !0);
530
- },
531
- p: function(D, F) {
532
- (!b || F[0] & /*$_*/
533
- 67108864) && a !== (a = /*$_*/
534
- D[26]("docCollector.captured") + "") && $(c, a), (!b || F[0] & /*$_*/
535
- 67108864) && r !== (r = /*$_*/
536
- D[26]("faceCollector.retakePhoto") + "") && $(u, r), (!b || F[0] & /*$exportButtonDisabled*/
537
- 536870912) && ui(o, "ce-dui-btn-group", !/*$exportButtonDisabled*/
538
- D[29]);
539
- },
540
- i: function(D) {
541
- b || (Z(h), b = !0);
542
- },
543
- o: function(D) {
544
- ee(h), b = !1;
545
- },
546
- d: function(D) {
547
- D && Y(i), h && h.d(), E = !1, _();
548
- }
549
- };
550
- return z("SvelteRegisterBlock", {
551
- block: S,
552
- id: Fi.name,
553
- type: "else",
554
- source: "(655:8) {:else}",
555
- ctx: n
556
- }), S;
557
- }
558
- function Ti(n) {
559
- let i, t, a = (
560
- /*$_*/
561
- n[26]("faceCollector.unconformities") + ""
562
- ), c, l, o, s, r, u = (
563
- /*$_*/
564
- n[26]("faceCollector.provideAReasonForTheLowQualityCapture") + ""
565
- ), f, g, b, E, _, h, S, A, D = (
566
- /*$_*/
567
- n[26]("faceCollector.thisInformationIsRequired") + ""
568
- ), F, ie, ne, B, V, I = (
569
- /*$captured*/
570
- n[16] && Nt(n)
571
- );
572
- const oe = {
573
- c: function() {
574
- i = p("div"), t = p("h1"), c = X(a), l = j(), o = p("div"), s = p("label"), r = p("span"), f = X(u), g = j(), b = p("textarea"), _ = j(), h = p("label"), S = p("span"), A = X("("), F = X(D), ie = X(")"), ne = j(), I && I.c(), m(t, "class", "text-3xl font-bold pb-[1em] transition-opacity"), k(t, v, 620, 12, 24659), m(r, "class", "ce-dui-label-text text-base"), k(r, v, 623, 16, 24896), m(s, "class", "ce-dui-label"), m(s, "for", "justification"), k(s, v, 622, 14, 24831), m(b, "contenteditable", ""), m(b, "id", "justification"), m(b, "class", "ce-dui-textarea ce-dui-textarea-bordered h-[6em] text-base"), m(b, "placeholder", E = /*$_*/
575
- n[26]("faceCollector.yourJustification")), k(b, v, 627, 14, 25078), m(S, "class", "ce-dui-label-text-alt text-base"), k(S, v, 635, 16, 25446), m(h, "class", "ce-dui-label"), m(h, "for", "justification"), k(h, v, 634, 14, 25381), m(o, "class", "ce-dui-form-control mt-[2.5em]"), k(o, v, 621, 12, 24772), k(i, v, 619, 10, 24641);
576
- },
577
- m: function(R, T) {
578
- q(R, i, T), d(i, t), d(t, c), d(i, l), d(i, o), d(o, s), d(s, r), d(r, f), d(o, g), d(o, b), fi(
579
- b,
580
- /*$justification*/
581
- n[20]
582
- ), d(o, _), d(o, h), d(h, S), d(S, A), d(S, F), d(S, ie), d(i, ne), I && I.m(i, null), B || (V = re(
583
- b,
584
- "input",
585
- /*textarea_input_handler*/
586
- n[51]
587
- ), B = !0);
588
- },
589
- p: function(R, T) {
590
- T[0] & /*$_*/
591
- 67108864 && a !== (a = /*$_*/
592
- R[26]("faceCollector.unconformities") + "") && $(c, a), T[0] & /*$_*/
593
- 67108864 && u !== (u = /*$_*/
594
- R[26]("faceCollector.provideAReasonForTheLowQualityCapture") + "") && $(f, u), T[0] & /*$_*/
595
- 67108864 && E !== (E = /*$_*/
596
- R[26]("faceCollector.yourJustification")) && m(b, "placeholder", E), T[0] & /*$justification*/
597
- 1048576 && fi(
598
- b,
599
- /*$justification*/
600
- R[20]
601
- ), T[0] & /*$_*/
602
- 67108864 && D !== (D = /*$_*/
603
- R[26]("faceCollector.thisInformationIsRequired") + "") && $(F, D), /*$captured*/
604
- R[16] ? I ? I.p(R, T) : (I = Nt(R), I.c(), I.m(i, null)) : I && (I.d(1), I = null);
605
- },
606
- i: le,
607
- o: le,
608
- d: function(R) {
609
- R && Y(i), I && I.d(), B = !1, V();
610
- }
611
- };
612
- return z("SvelteRegisterBlock", {
613
- block: oe,
614
- id: Ti.name,
615
- type: "if",
616
- source: "(619:26) ",
617
- ctx: n
618
- }), oe;
619
- }
620
- function Li(n) {
621
- let i, t, a = (
622
- /*$_*/
623
- n[26]("faceCollector.everythingOk") + ""
624
- ), c, l, o, s, r = (
625
- /*$_*/
626
- n[26]("faceCollector.finish") + ""
627
- ), u, f, g, b = (
628
- /*$_*/
629
- n[26]("faceCollector.retakePhoto") + ""
630
- ), E, _, h;
631
- const S = {
632
- c: function() {
633
- i = p("div"), t = p("h1"), c = X(a), l = j(), o = p("div"), s = p("button"), u = X(r), f = j(), g = p("button"), E = X(b), m(t, "class", "text-3xl font-bold pb-[1em] transition-opacity"), k(t, v, 606, 14, 23982), s.disabled = !0, m(s, "class", "ce-dui-btn ce-dui-btn-primary ce-dui-btn-block flex-shrink"), k(s, v, 608, 14, 24143), m(g, "id", "bry-cc-retake-button"), m(g, "class", "ce-dui-btn ce-dui-btn-block ce-dui-btn-outline flex-shrink"), k(g, v, 611, 14, 24335), m(o, "class", "ce-dui-btn-group flex"), k(o, v, 607, 12, 24093), m(i, "class", "flex flex-col justify-between"), k(i, v, 605, 10, 23924);
634
- },
635
- m: function(D, F) {
636
- q(D, i, F), d(i, t), d(t, c), d(i, l), d(i, o), d(o, s), d(s, u), d(o, f), d(o, g), d(g, E), _ || (h = [
637
- re(
638
- s,
639
- "click",
640
- /*click_handler_3*/
641
- n[49],
642
- !1,
643
- !1,
644
- !1,
645
- !1
646
- ),
647
- re(
648
- g,
649
- "click",
650
- /*click_handler_4*/
651
- n[50],
652
- !1,
653
- !1,
654
- !1,
655
- !1
656
- )
657
- ], _ = !0);
658
- },
659
- p: function(D, F) {
660
- F[0] & /*$_*/
661
- 67108864 && a !== (a = /*$_*/
662
- D[26]("faceCollector.everythingOk") + "") && $(c, a), F[0] & /*$_*/
663
- 67108864 && r !== (r = /*$_*/
664
- D[26]("faceCollector.finish") + "") && $(u, r), F[0] & /*$_*/
665
- 67108864 && b !== (b = /*$_*/
666
- D[26]("faceCollector.retakePhoto") + "") && $(E, b);
667
- },
668
- i: le,
669
- o: le,
670
- d: function(D) {
671
- D && Y(i), _ = !1, bt(h);
672
- }
673
- };
674
- return z("SvelteRegisterBlock", {
675
- block: S,
676
- id: Li.name,
677
- type: "if",
678
- source: "(605:58) ",
679
- ctx: n
680
- }), S;
681
- }
682
- function Bi(n) {
683
- let i;
684
- const t = {
685
- c: function() {
686
- i = p("div"), m(i, "class", ""), k(i, v, 603, 10, 23838);
687
- },
688
- m: function(c, l) {
689
- q(c, i, l);
690
- },
691
- p: le,
692
- i: le,
693
- o: le,
694
- d: function(c) {
695
- c && Y(i);
696
- }
697
- };
698
- return z("SvelteRegisterBlock", {
699
- block: t,
700
- id: Bi.name,
701
- type: "if",
702
- source: "(603:8) {#if !$captured}",
703
- ctx: n
704
- }), t;
705
- }
706
- function Ii(n) {
707
- let i, t;
708
- i = new gi({
709
- props: { cssClass: "ce-dui-btn-block flex-shrink" },
710
- $$inline: !0
711
- });
712
- const a = {
713
- c: function() {
714
- ft(i.$$.fragment);
715
- },
716
- m: function(l, o) {
717
- dt(i, l, o), t = !0;
718
- },
719
- i: function(l) {
720
- t || (Z(i.$$.fragment, l), t = !0);
721
- },
722
- o: function(l) {
723
- ee(i.$$.fragment, l), t = !1;
724
- },
725
- d: function(l) {
726
- mt(i, l);
727
- }
728
- };
729
- return z("SvelteRegisterBlock", {
730
- block: a,
731
- id: Ii.name,
732
- type: "if",
733
- source: "(665:14) {#if get(enableStrategy).faceStrategy !== FaceExportStrategy.DISABLED}",
734
- ctx: n
735
- }), a;
736
- }
737
- function Nt(n) {
738
- let i, t, a = (
739
- /*$_*/
740
- n[26]("faceCollector.finish") + ""
741
- ), c, l, o, s, r = (
742
- /*$_*/
743
- n[26]("faceCollector.retakePhoto") + ""
744
- ), u, f, g;
745
- const b = {
746
- c: function() {
747
- i = p("div"), t = p("button"), c = X(a), o = j(), s = p("button"), u = X(r), t.disabled = l = /*$justification*/
748
- n[20].length === 0, m(t, "class", "ce-dui-btn ce-dui-btn-primary ce-dui-btn-block flex-shrink text-base"), k(t, v, 640, 16, 25685), m(s, "id", "bry-cc-retake-button"), m(s, "class", "ce-dui-btn ce-dui-btn-block ce-dui-btn-outline flex-shrink text-base"), k(s, v, 646, 16, 25977), m(i, "class", "ce-dui-btn-group flex"), k(i, v, 639, 14, 25633);
749
- },
750
- m: function(_, h) {
751
- q(_, i, h), d(i, t), d(t, c), d(i, o), d(i, s), d(s, u), f || (g = [
752
- re(
753
- t,
754
- "click",
755
- /*click_handler_5*/
756
- n[52],
757
- !1,
758
- !1,
759
- !1,
760
- !1
761
- ),
762
- re(
763
- s,
764
- "click",
765
- /*click_handler_6*/
766
- n[53],
767
- !1,
768
- !1,
769
- !1,
770
- !1
771
- )
772
- ], f = !0);
773
- },
774
- p: function(_, h) {
775
- h[0] & /*$_*/
776
- 67108864 && a !== (a = /*$_*/
777
- _[26]("faceCollector.finish") + "") && $(c, a), h[0] & /*$justification*/
778
- 1048576 && l !== (l = /*$justification*/
779
- _[20].length === 0) && ve(t, "disabled", l), h[0] & /*$_*/
780
- 67108864 && r !== (r = /*$_*/
781
- _[26]("faceCollector.retakePhoto") + "") && $(u, r);
782
- },
783
- d: function(_) {
784
- _ && Y(i), f = !1, bt(g);
785
- }
786
- };
787
- return z("SvelteRegisterBlock", {
788
- block: b,
789
- id: Nt.name,
790
- type: "if",
791
- source: "(639:12) {#if $captured}",
792
- ctx: n
793
- }), b;
794
- }
795
- function Ut(n) {
796
- let i, t = (
797
- /*$_*/
798
- n[26]("faceCollector.loading") + ""
799
- ), a;
800
- const c = {
801
- c: function() {
802
- i = p("span"), a = X(t), m(i, "class", "2xl:text-2xl lg:text-2xl text-md block p-2 m-auto text-center"), k(i, v, 505, 10, 19853);
803
- },
804
- m: function(o, s) {
805
- q(o, i, s), d(i, a);
806
- },
807
- p: function(o, s) {
808
- s[0] & /*$_*/
809
- 67108864 && t !== (t = /*$_*/
810
- o[26]("faceCollector.loading") + "") && $(a, t);
811
- },
812
- d: function(o) {
813
- o && Y(i);
814
- }
815
- };
816
- return z("SvelteRegisterBlock", {
817
- block: c,
818
- id: Ut.name,
819
- type: "if",
820
- source: "(505:8) {#if $isLoadingAPP}",
821
- ctx: n
822
- }), c;
823
- }
824
- function Oi(n) {
825
- let i, t, a, c;
826
- const l = [yi, Ci], o = [];
827
- function s(u, f) {
828
- return (
829
- /*$isLoadingAPP*/
830
- u[17] ? 0 : 1
831
- );
832
- }
833
- t = s(n), a = o[t] = l[t](n);
834
- const r = {
835
- c: function() {
836
- i = p("div"), a.c(), this.c = le, k(i, v, 499, 0, 19539);
837
- },
838
- l: function(f) {
839
- throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
840
- },
841
- m: function(f, g) {
842
- q(f, i, g), o[t].m(i, null), c = !0;
843
- },
844
- p: function(f, g) {
845
- let b = t;
846
- t = s(f), t === b ? o[t].p(f, g) : (Ze(), ee(o[b], 1, 1, () => {
847
- o[b] = null;
848
- }), xe(), a = o[t], a ? a.p(f, g) : (a = o[t] = l[t](f), a.c()), Z(a, 1), a.m(i, null));
849
- },
850
- i: function(f) {
851
- c || (Z(a), c = !0);
852
- },
853
- o: function(f) {
854
- ee(a), c = !1;
855
- },
856
- d: function(f) {
857
- f && Y(i), o[t].d();
858
- }
859
- };
860
- return z("SvelteRegisterBlock", {
861
- block: r,
862
- id: Oi.name,
863
- type: "component",
864
- source: "",
865
- ctx: n
866
- }), r;
867
- }
868
- function Bt(n, i, t) {
869
- const a = i.videoHeight >= i.videoWidth && t.height >= t.width || i.videoHeight < i.videoWidth && t.height < t.width;
870
- n.drawImage(
871
- i,
872
- a ? 0 : i.videoWidth / 2 - t.width,
873
- 0,
874
- a ? i.videoWidth : i.videoHeight * (t.width / t.height),
875
- i.videoHeight,
876
- 0,
877
- 0,
878
- t.width,
879
- t.height
880
- );
881
- }
882
- function rn(n, i, t) {
883
- let a, c, l, o, s, r, u, f, g, b, E, _, h, S, A, D, F, ie, ne, B, V, I, oe, x, R, T;
884
- M(Ke, "retakePhoto"), W(n, Ke, (e) => t(64, a = e)), M(ae, "cameraStatusStore"), W(n, ae, (e) => t(14, l = e)), M(Ee, "selectedVideoDeviceId"), W(n, Ee, (e) => t(66, o = e)), M(he, "videoStore"), W(n, he, (e) => t(15, s = e)), M(Ae, "facingMode"), W(n, Ae, (e) => t(67, r = e)), M(yt, "cameraDevicesStore"), W(n, yt, (e) => t(68, u = e)), M(ke, "captured"), W(n, ke, (e) => t(16, f = e)), M(Xe, "clearedVideoSrcObject"), W(n, Xe, (e) => t(69, g = e)), M(it, "_stream"), W(n, it, (e) => t(70, b = e)), M(Rt, "automaticCapture"), W(n, Rt, (e) => t(71, E = e)), M(Fe, "isLoadingAPP"), W(n, Fe, (e) => t(17, _ = e)), M(Ye, "originalCapture"), W(n, Ye, (e) => t(72, h = e)), M(ze, "requestResult"), W(n, ze, (e) => t(18, S = e)), M(Te, "saved"), W(n, Te, (e) => t(19, A = e)), M(nt, "justification"), W(n, nt, (e) => t(20, D = e)), M(ot, "image"), W(n, ot, (e) => t(21, F = e)), M(St, "enableFaceApi"), W(n, St, (e) => t(23, ne = e)), M(Le, "ready"), W(n, Le, (e) => t(24, B = e)), M(Je, "selectedTab"), W(n, Je, (e) => t(73, V = e)), M(at, "faceFound"), W(n, at, (e) => t(25, I = e)), M(Dt, "_"), W(n, Dt, (e) => t(26, oe = e)), M(Pt, "isLoading"), W(n, Pt, (e) => t(27, x = e)), M(Et, "showFaceWhileValidating"), W(n, Et, (e) => t(28, R = e)), M(At, "exportButtonDisabled"), W(n, At, (e) => t(29, T = e));
885
- let { $$slots: et = {}, $$scope: Ie } = i;
886
- ln("document-collector", et, []);
887
- let C, Q, K, se = !1, ge = {}, G = !1, { enableMinutiae: w } = i, { videoDimensions: U } = i, { noTabs: ue } = i, { weightsPath: Ce } = i, { showCaptureButton: Oe } = i, { showUnconformities: Me } = i, { videoFilter: de } = i;
888
- const ye = Lt(!1);
889
- M(ye, "startFaceApi"), W(n, ye, (e) => t(65, c = e));
890
- const We = Lt("data:image/png;base64");
891
- M(We, "dataTypePrefix"), W(n, We, (e) => t(22, ie = e));
892
- let fe, N, Re = !1, gt = !1, _t = !0, _e = !0, tt = 0, Ne = 0, wt = 10, Ue = !0, He = 0, Ve = !1, we = !1, Se = "", P = {
893
- topLeftX: 130,
894
- topLeftY: 70,
895
- width: 540,
896
- height: 400
897
- };
898
- const Mi = xt.mixin({
899
- toast: !0,
900
- position: "bottom-left",
901
- timer: 13e3,
902
- timerProgressBar: !0
903
- });
904
- $t(async () => {
905
- y(Fe, _ = !0, _), ei("Mounting Document Collector!"), y(Le, B = !1, B), y(at, I = !1, I), y(ke, f = !1, f), y(Ae, r = lt.REAR_CAMERA, r), Pe(), ne && (await ti(Ce), G = !0);
906
- });
907
- function Ht() {
908
- const e = s.videoWidth, O = s.videoHeight, H = O * 0.73, L = H * 1.36;
909
- P.topLeftX = (e - L) / 2, P.topLeftY = (O - H) / 1.42, P.width = L, P.height = H;
910
- }
911
- function pt(e, O) {
912
- e.clearRect(0, 0, N.width, N.height), e.save(), de == "blur" ? (e.filter = `blur(${O.width / 60}px)`, e.rect(0, 0, N.width, N.height)) : de != "none" ? (e.fillStyle = de, e.fillRect(0, 0, N.width, N.height)) : (e.beginPath(), e.rect(0, 0, N.width, N.height)), e.rect(P.topLeftX, P.topLeftY, P.width, P.height), e.clip(), Bt(e, O, N), e.restore(), e.save(), e.beginPath();
913
- const H = window.getComputedStyle(N).getPropertyValue("--p"), L = window.getComputedStyle(N).getPropertyValue("--su");
914
- if (e.strokeStyle = `hsl(${H})`, e.lineWidth = 16, e.rect(P.topLeftX, P.topLeftY, P.width, P.height), e.stroke(), se && !Ve) {
915
- const ce = 1 - (He - (/* @__PURE__ */ new Date()).getTime()) / 4500;
916
- e.save(), e.beginPath(), e.lineWidth = 16, e.strokeStyle = `hsl(${L})`;
917
- const qe = P.width * 3 * ce, Zt = P.height * 2 * ce, en = qe < P.width ? qe : P.width, tn = Zt < P.height ? Zt : P.height;
918
- e.rect(P.topLeftX, P.topLeftY, en, tn), e.stroke();
919
- }
920
- e.beginPath();
921
- const J = new Path2D();
922
- J.rect(P.topLeftX, P.topLeftY, P.width, P.height), e.clip(J), Bt(e, O, N), e.restore();
923
- }
924
- function kt() {
925
- y(ae, l = te.OK, l), t(10, Re = !0), t(11, _e = !1), _t = !0;
926
- }
927
- async function De() {
928
- if (ne && !G)
929
- return Be(C, De);
930
- if (C) {
931
- if (V !== ct.Document && !ue)
932
- return Be(C, De);
933
- y(Le, B = !0, B), ne ? (c || y(ye, c = !0, c), pt(N.getContext("2d"), C), Be(C, De)) : (pt(N.getContext("2d"), C), Be(C, De));
934
- }
935
- }
936
- async function vt() {
937
- Tt(), y(ze, S = ut.OK, S), y(ke, f = !0, f), y(Te, A = !0, A);
938
- const e = document.createElement("canvas"), O = e.getContext("2d");
939
- e.width = P.width, e.height = P.height, O?.drawImage(C, P.topLeftX, P.topLeftY, P.width, P.height, 0, 0, e.width, e.height);
940
- const H = e.toDataURL("image/jpeg").split(",");
941
- y(We, ie = H[0], ie), y(ot, F = H[1], F), y(Ye, h = H[1], h);
942
- const L = [{ data: h }];
943
- window.dispatchEvent(new CustomEvent(
944
- "document-unconformities-validated",
945
- {
946
- detail: { bodyParts: L, status: S }
947
- }
948
- ));
949
- }
950
- function je() {
951
- const e = {
952
- bodyPart: "DOCUMENT",
953
- data: F,
954
- justification: D
955
- };
956
- y(Te, A = !0, A), window.dispatchEvent(new CustomEvent("export-document", { detail: e }));
957
- }
958
- function pe() {
959
- window.dispatchEvent(new CustomEvent("document-scrapped")), y(Te, A = !1, A), y(ze, S = ut.OK, S), y(ke, f = !1, f), y(Ye, h = "", h), t(13, Se = ""), t(12, we = !1), _e && kt();
960
- }
961
- async function Pe(e) {
962
- y(Fe, _ = !0, _);
963
- const [O, H] = (U ?? "")?.replaceAll(" ", "")?.split("x")?.map((L) => L ? parseInt(L) : void 0);
964
- if (!(!O || !H)) {
965
- y(he, s = { videoWidth: O, videoHeight: H }, s);
966
- try {
967
- if (l == te.CAMERA_ORIENTATION_LANDSCAPE)
968
- return;
969
- await Ft();
970
- const { deviceId: L, width: J, height: ce, aspectRatio: qe } = await ii(O, H, r, e);
971
- qe && qe < 1 && st() ? y(
972
- he,
973
- s = {
974
- videoWidth: ce,
975
- videoHeight: J
976
- },
977
- s
978
- ) : y(
979
- he,
980
- s = {
981
- videoWidth: J,
982
- videoHeight: ce
983
- },
984
- s
985
- ), Ht(), y(Ee, o = L || u[0].deviceId, o), y(ae, l = te.OK, l);
986
- } catch (L) {
987
- const J = L;
988
- t(11, _e = !0);
989
- const ce = Qe(L) && L.constraint ? L.constraint : "";
990
- console.error(J, ce), Qe(J) && "message" in J && J.message.includes("Permission denied") && (console.error("User didn't give permission to use camera!"), y(ae, l = te.CAMERA_DENIED_ERROR, l)), Qe(J) && "message" in J && J.message.includes("Requested device not found") && y(ae, l = te.DEVICE_NOT_FOUND_ERROR, l), (ce.includes("width") || ce.includes("height")) && (console.error(`Camera does not meet the minimum supported requirements! (${ce})`), y(ae, l = te.CAMERA_UNSUPPORTED, l));
991
- }
992
- y(Fe, _ = !1, _);
993
- }
994
- }
995
- const Vt = he.subscribe((e) => {
996
- C && Q && (t(3, C.width = e.videoWidth, C), t(3, C.height = e.videoHeight, C), t(4, Q.width = e.videoWidth, Q), t(4, Q.height = e.videoHeight, Q), t(8, fe.width = e.videoWidth, fe), t(8, fe.height = e.videoHeight, fe), t(9, N.width = e.videoWidth, N), t(9, N.height = e.videoHeight, N));
997
- }), jt = ni.subscribe((e) => {
998
- let O = "";
999
- if (e.isPersonCloseEnough ? e.isPersonTooclose ? O = "faceCollector.moveAwayCamera" : e.isPersonInFrame || (O = "docCollector.stayInFrame") : O = "faceCollector.comeCloserCamera", O != "" && O != Se && setTimeout(
1000
- () => {
1001
- t(12, we = !1), t(13, Se = O), setTimeout(
1002
- () => {
1003
- t(12, we = !0);
1004
- },
1005
- 1e3
1006
- );
1007
- },
1008
- 3e3
1009
- ), !f && E && !se && e.isPersonInFrame && !(!e.isPersonCloseEnough || e.isPersonTooclose)) {
1010
- t(6, se = !0), t(12, we = !1), He = (/* @__PURE__ */ new Date()).getTime() + 4500;
1011
- const H = setInterval(
1012
- () => {
1013
- if (!E || f || !e.isPersonCloseEnough || e.isPersonTooclose || !e.isPersonInFrame) {
1014
- t(6, se = !1), Ve = !0, setTimeout(
1015
- () => {
1016
- Ve = !1;
1017
- },
1018
- 1500
1019
- ), clearInterval(H);
1020
- return;
1021
- }
1022
- const L = (/* @__PURE__ */ new Date()).getTime();
1023
- Math.floor((He - L) % (1e3 * 60) / 1e3) <= 0 && (clearInterval(H), t(6, se = !1), document.getElementsByTagName("biometric-collector")?.[0]?.shadowRoot?.getElementById("bry-cc-capture-btn")?.click());
1024
- },
1025
- 250
1026
- );
1027
- }
1028
- }), qt = ke.subscribe((e) => {
1029
- K && (e ? (K.classList.remove("flex"), K.classList.add("hidden")) : (K.classList.add("flex"), K.classList.remove("hidden")));
1030
- }), Kt = Xe.subscribe((e) => {
1031
- C && e && (console.log("setting null in video srcObject"), t(3, C.srcObject = null, C), t(3, C.src = "", C));
1032
- });
1033
- Je.subscribe(async (e) => {
1034
- e === ct.Document && await Ft();
1035
- });
1036
- const Xt = Ee.subscribe(async (e) => {
1037
- if (!e)
1038
- return;
1039
- C || t(7, ge = {});
1040
- const { videoHeight: O, videoWidth: H } = s;
1041
- try {
1042
- const L = await oi(H, O, e);
1043
- t(3, C.srcObject = L, C), y(it, b = L, b), y(Xe, g = !1, g), Ue || (y(ae, l = te.CAMERA_ORIENTATION_LANDSCAPE, l), rt());
1044
- } catch (L) {
1045
- const J = L;
1046
- t(11, _e = !0), Qe(J) && "message" in J && J.message.includes("Requested device not found") && y(ae, l = te.DEVICE_NOT_FOUND_ERROR, l);
1047
- }
1048
- }), Yt = Je.subscribe(async (e) => {
1049
- e === ct.Document && !Re && !f && gt && await kt();
1050
- }), zt = ye.subscribe(async (e) => {
1051
- e && Ct();
1052
- }), Jt = Le.subscribe((e) => {
1053
- e && window.dispatchEvent(new CustomEvent("brycc-camera-ready"));
1054
- }), Qt = ai.subscribe((e) => {
1055
- if (s) {
1056
- if (!st()) {
1057
- const O = u.find((L) => L.deviceId !== o), H = O ? O.deviceId : u[0].deviceId;
1058
- Pe(H);
1059
- return;
1060
- }
1061
- e ? (y(Ae, r = lt.FRONT_CAMERA, r), Pe()) : (y(Ae, r = lt.REAR_CAMERA, r), Pe());
1062
- }
1063
- }), Gt = li.subscribe((e) => {
1064
- !e.isSupported || !st() || (Ue = e.orientation.includes("landscape"), Ue ? (y(ae, l = te.OK, l), s && (y(Ee, o = "", o), Pe())) : (y(ae, l = te.CAMERA_ORIENTATION_LANDSCAPE, l), rt()));
1065
- });
1066
- async function Ct() {
1067
- let e;
1068
- if (Ne >= wt) {
1069
- Ne = 0;
1070
- const O = await ri(), H = await import("./face_api_0e3ce8c8_2.2.0-RC02.js");
1071
- let L;
1072
- L = H.detectSingleFace(N, O), e = await L.withFaceLandmarks(), Q.getContext("2d")?.clearRect(0, 0, Q.width, Q.height);
1073
- } else
1074
- Ne++;
1075
- e && ci(e, Q, w, !0), c && Be(C, Ct);
1076
- }
1077
- Ke.subscribe(async (e) => {
1078
- e && (pe(), y(Ke, a = !1, a));
1079
- }), si(() => {
1080
- rt(), qt(), jt(), Vt(), Kt(), Xt(), Yt(), clearInterval(tt), zt(), Qt(), Jt(), Gt(), Tt(), tt = 0;
1081
- }), n.$$.on_mount.push(function() {
1082
- w === void 0 && !("enableMinutiae" in i || n.$$.bound[n.$$.props.enableMinutiae]) && be.warn("<document-collector> was created without expected prop 'enableMinutiae'"), U === void 0 && !("videoDimensions" in i || n.$$.bound[n.$$.props.videoDimensions]) && be.warn("<document-collector> was created without expected prop 'videoDimensions'"), ue === void 0 && !("noTabs" in i || n.$$.bound[n.$$.props.noTabs]) && be.warn("<document-collector> was created without expected prop 'noTabs'"), Ce === void 0 && !("weightsPath" in i || n.$$.bound[n.$$.props.weightsPath]) && be.warn("<document-collector> was created without expected prop 'weightsPath'"), Oe === void 0 && !("showCaptureButton" in i || n.$$.bound[n.$$.props.showCaptureButton]) && be.warn("<document-collector> was created without expected prop 'showCaptureButton'"), Me === void 0 && !("showUnconformities" in i || n.$$.bound[n.$$.props.showUnconformities]) && be.warn("<document-collector> was created without expected prop 'showUnconformities'"), de === void 0 && !("videoFilter" in i || n.$$.bound[n.$$.props.videoFilter]) && be.warn("<document-collector> was created without expected prop 'videoFilter'");
1083
- });
1084
- const Wi = [
1085
- "enableMinutiae",
1086
- "videoDimensions",
1087
- "noTabs",
1088
- "weightsPath",
1089
- "showCaptureButton",
1090
- "showUnconformities",
1091
- "videoFilter"
1092
- ];
1093
- Object.keys(i).forEach((e) => {
1094
- !~Wi.indexOf(e) && e.slice(0, 2) !== "$$" && e !== "slot" && be.warn(`<document-collector> was created with unknown prop '${e}'`);
1095
- });
1096
- function Ni(e) {
1097
- Ge[e ? "unshift" : "push"](() => {
1098
- C = e, t(3, C);
1099
- });
1100
- }
1101
- const Ui = () => {
1102
- y(
1103
- he,
1104
- s = {
1105
- videoHeight: C.videoHeight,
1106
- videoWidth: C.videoWidth
1107
- },
1108
- s
1109
- );
1110
- };
1111
- function Hi(e) {
1112
- Ge[e ? "unshift" : "push"](() => {
1113
- N = e, t(9, N);
1114
- });
1115
- }
1116
- function Vi(e) {
1117
- Ge[e ? "unshift" : "push"](() => {
1118
- Q = e, t(4, Q);
1119
- });
1120
- }
1121
- function ji(e) {
1122
- Ge[e ? "unshift" : "push"](() => {
1123
- fe = e, t(8, fe);
1124
- });
1125
- }
1126
- const qi = () => vt(), Ki = () => je(), Xi = () => pe();
1127
- function Yi(e) {
1128
- Ge[e ? "unshift" : "push"](() => {
1129
- K = e, t(5, K);
1130
- });
1131
- }
1132
- const zi = () => je(), Ji = () => pe();
1133
- function Qi() {
1134
- D = this.value, nt.set(D);
1135
- }
1136
- const Gi = () => je(), Zi = () => pe(), xi = () => pe(), $i = () => {
1137
- t(10, Re = !0);
1138
- };
1139
- return n.$$set = (e) => {
1140
- "enableMinutiae" in e && t(35, w = e.enableMinutiae), "videoDimensions" in e && t(36, U = e.videoDimensions), "noTabs" in e && t(37, ue = e.noTabs), "weightsPath" in e && t(38, Ce = e.weightsPath), "showCaptureButton" in e && t(0, Oe = e.showCaptureButton), "showUnconformities" in e && t(1, Me = e.showUnconformities), "videoFilter" in e && t(39, de = e.videoFilter);
1141
- }, n.$capture_state = () => ({
1142
- CameraStatus: ki,
1143
- onDestroy: si,
1144
- onMount: $t,
1145
- fade: $e,
1146
- _: Dt,
1147
- isLoading: Pt,
1148
- get: mi,
1149
- writable: Lt,
1150
- selectedTab: Je,
1151
- TabEnum: ct,
1152
- faceValidationsStore: ni,
1153
- image: ot,
1154
- setupStream: oi,
1155
- videoStore: he,
1156
- requestResult: ze,
1157
- cameraDevicesStore: yt,
1158
- justification: nt,
1159
- saved: Te,
1160
- captured: ke,
1161
- _stream: it,
1162
- shutOffCamera: rt,
1163
- ready: Le,
1164
- clearedVideoSrcObject: Xe,
1165
- enumerateDevices: Ft,
1166
- originalCapture: Ye,
1167
- automaticCapture: Rt,
1168
- selectedVideoDeviceId: Ee,
1169
- requestResultEnum: ut,
1170
- retakePhoto: Ke,
1171
- showFaceWhileValidating: Et,
1172
- getVideoDimensions: ii,
1173
- FaceExportStrategy: hi,
1174
- orientationData: li,
1175
- FacingModeEnum: lt,
1176
- facingMode: Ae,
1177
- swapCamera: ai,
1178
- ConfBtn: bi,
1179
- CameraBtn: vi,
1180
- ExportBtn: gi,
1181
- enableStrategy: _i,
1182
- exportButtonDisabled: At,
1183
- drawDetectionsInFace: ci,
1184
- enableFaceApi: St,
1185
- faceFound: at,
1186
- getFaceDetectorOptions: ri,
1187
- isMobile: st,
1188
- isObject: Qe,
1189
- loadFaceApiAndWeights: ti,
1190
- loopCaller: Be,
1191
- unLockScreen: Tt,
1192
- isLoadingAPP: Fe,
1193
- loadingGif: wi,
1194
- Swal: xt,
1195
- cameraStatusStore: ae,
1196
- CameraStatusEnum: te,
1197
- log: ei,
1198
- video: C,
1199
- detectionsCanvas: Q,
1200
- enclosingDiv: K,
1201
- isCountingDown: se,
1202
- unique: ge,
1203
- loadedFaceApiAndWeights: G,
1204
- enableMinutiae: w,
1205
- videoDimensions: U,
1206
- noTabs: ue,
1207
- weightsPath: Ce,
1208
- showCaptureButton: Oe,
1209
- showUnconformities: Me,
1210
- videoFilter: de,
1211
- startFaceApi: ye,
1212
- dataTypePrefix: We,
1213
- maskCanvas: fe,
1214
- displayCanvas: N,
1215
- capturing: Re,
1216
- initialized: gt,
1217
- idrndLoading: _t,
1218
- idrndClosed: _e,
1219
- intervalId: tt,
1220
- faceapiCounter: Ne,
1221
- faceapiFrameRate: wt,
1222
- rightOrientation: Ue,
1223
- countdownFinishTime: He,
1224
- disableCountDown: Ve,
1225
- faceNotValidated: we,
1226
- faceValidationAlert: Se,
1227
- docLimits: P,
1228
- toast: Mi,
1229
- setDocLimits: Ht,
1230
- drawRectangle: pt,
1231
- drawVideoOnCanvas: Bt,
1232
- resetCamera: kt,
1233
- play: De,
1234
- capture: vt,
1235
- save: je,
1236
- retake: pe,
1237
- openCamera: Pe,
1238
- unsubscribeVideoDimensions: Vt,
1239
- unsubscribeFaceValidations: jt,
1240
- unsubscribeCapturedState: qt,
1241
- unsubscribeClearVideoSrc: Kt,
1242
- unsubscribeSelectedStream: Xt,
1243
- unsubscribeChangeTab: Yt,
1244
- unsubscribeFaceApi: zt,
1245
- unsubscribeReadyCameraEventEmitter: Jt,
1246
- unsubscribeSwapCamera: Qt,
1247
- unsubscribeOrientation: Gt,
1248
- faceapiLoop: Ct,
1249
- $retakePhoto: a,
1250
- $startFaceApi: c,
1251
- $cameraStatusStore: l,
1252
- $selectedVideoDeviceId: o,
1253
- $videoStore: s,
1254
- $facingMode: r,
1255
- $cameraDevicesStore: u,
1256
- $captured: f,
1257
- $clearedVideoSrcObject: g,
1258
- $_stream: b,
1259
- $automaticCapture: E,
1260
- $isLoadingAPP: _,
1261
- $originalCapture: h,
1262
- $requestResult: S,
1263
- $saved: A,
1264
- $justification: D,
1265
- $image: F,
1266
- $dataTypePrefix: ie,
1267
- $enableFaceApi: ne,
1268
- $ready: B,
1269
- $selectedTab: V,
1270
- $faceFound: I,
1271
- $_: oe,
1272
- $isLoading: x,
1273
- $showFaceWhileValidating: R,
1274
- $exportButtonDisabled: T
1275
- }), n.$inject_state = (e) => {
1276
- "video" in e && t(3, C = e.video), "detectionsCanvas" in e && t(4, Q = e.detectionsCanvas), "enclosingDiv" in e && t(5, K = e.enclosingDiv), "isCountingDown" in e && t(6, se = e.isCountingDown), "unique" in e && t(7, ge = e.unique), "loadedFaceApiAndWeights" in e && (G = e.loadedFaceApiAndWeights), "enableMinutiae" in e && t(35, w = e.enableMinutiae), "videoDimensions" in e && t(36, U = e.videoDimensions), "noTabs" in e && t(37, ue = e.noTabs), "weightsPath" in e && t(38, Ce = e.weightsPath), "showCaptureButton" in e && t(0, Oe = e.showCaptureButton), "showUnconformities" in e && t(1, Me = e.showUnconformities), "videoFilter" in e && t(39, de = e.videoFilter), "maskCanvas" in e && t(8, fe = e.maskCanvas), "displayCanvas" in e && t(9, N = e.displayCanvas), "capturing" in e && t(10, Re = e.capturing), "initialized" in e && (gt = e.initialized), "idrndLoading" in e && (_t = e.idrndLoading), "idrndClosed" in e && t(11, _e = e.idrndClosed), "intervalId" in e && (tt = e.intervalId), "faceapiCounter" in e && (Ne = e.faceapiCounter), "faceapiFrameRate" in e && (wt = e.faceapiFrameRate), "rightOrientation" in e && (Ue = e.rightOrientation), "countdownFinishTime" in e && (He = e.countdownFinishTime), "disableCountDown" in e && (Ve = e.disableCountDown), "faceNotValidated" in e && t(12, we = e.faceNotValidated), "faceValidationAlert" in e && t(13, Se = e.faceValidationAlert), "docLimits" in e && (P = e.docLimits);
1277
- }, i && "$$inject" in i && n.$inject_state(i.$$inject), [
1278
- Oe,
1279
- Me,
1280
- De,
1281
- C,
1282
- Q,
1283
- K,
1284
- se,
1285
- ge,
1286
- fe,
1287
- N,
1288
- Re,
1289
- _e,
1290
- we,
1291
- Se,
1292
- l,
1293
- s,
1294
- f,
1295
- _,
1296
- S,
1297
- A,
1298
- D,
1299
- F,
1300
- ie,
1301
- ne,
1302
- B,
1303
- I,
1304
- oe,
1305
- x,
1306
- R,
1307
- T,
1308
- ye,
1309
- We,
1310
- vt,
1311
- je,
1312
- pe,
1313
- w,
1314
- U,
1315
- ue,
1316
- Ce,
1317
- de,
1318
- Ni,
1319
- Ui,
1320
- Hi,
1321
- Vi,
1322
- ji,
1323
- qi,
1324
- Ki,
1325
- Xi,
1326
- Yi,
1327
- zi,
1328
- Ji,
1329
- Qi,
1330
- Gi,
1331
- Zi,
1332
- xi,
1333
- $i
1334
- ];
1335
- }
1336
- class un extends nn {
1337
- constructor(i) {
1338
- super(), on(
1339
- this,
1340
- {
1341
- target: this.shadowRoot,
1342
- props: an(this.attributes),
1343
- customElement: !0
1344
- },
1345
- rn,
1346
- Oi,
1347
- di,
1348
- {
1349
- enableMinutiae: 35,
1350
- videoDimensions: 36,
1351
- noTabs: 37,
1352
- weightsPath: 38,
1353
- showCaptureButton: 0,
1354
- showUnconformities: 1,
1355
- videoFilter: 39,
1356
- play: 2
1357
- },
1358
- null,
1359
- [-1, -1, -1]
1360
- ), i && (i.target && q(i.target, this, i.anchor), i.props && (this.$set(i.props), me()));
1361
- }
1362
- static get observedAttributes() {
1363
- return [
1364
- "enableMinutiae",
1365
- "videoDimensions",
1366
- "noTabs",
1367
- "weightsPath",
1368
- "showCaptureButton",
1369
- "showUnconformities",
1370
- "videoFilter",
1371
- "play"
1372
- ];
1373
- }
1374
- get enableMinutiae() {
1375
- return this.$$.ctx[35];
1376
- }
1377
- set enableMinutiae(i) {
1378
- this.$$set({ enableMinutiae: i }), me();
1379
- }
1380
- get videoDimensions() {
1381
- return this.$$.ctx[36];
1382
- }
1383
- set videoDimensions(i) {
1384
- this.$$set({ videoDimensions: i }), me();
1385
- }
1386
- get noTabs() {
1387
- return this.$$.ctx[37];
1388
- }
1389
- set noTabs(i) {
1390
- this.$$set({ noTabs: i }), me();
1391
- }
1392
- get weightsPath() {
1393
- return this.$$.ctx[38];
1394
- }
1395
- set weightsPath(i) {
1396
- this.$$set({ weightsPath: i }), me();
1397
- }
1398
- get showCaptureButton() {
1399
- return this.$$.ctx[0];
1400
- }
1401
- set showCaptureButton(i) {
1402
- this.$$set({ showCaptureButton: i }), me();
1403
- }
1404
- get showUnconformities() {
1405
- return this.$$.ctx[1];
1406
- }
1407
- set showUnconformities(i) {
1408
- this.$$set({ showUnconformities: i }), me();
1409
- }
1410
- get videoFilter() {
1411
- return this.$$.ctx[39];
1412
- }
1413
- set videoFilter(i) {
1414
- this.$$set({ videoFilter: i }), me();
1415
- }
1416
- get play() {
1417
- return this.$$.ctx[2];
1418
- }
1419
- set play(i) {
1420
- throw new Error("<document-collector>: Cannot set read-only property 'play'");
1421
- }
1422
- }
1423
- customElements.define("document-collector", un);
1424
- export {
1425
- un as default
1426
- };
1427
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRG9jdW1lbnRDb2xsZWN0b3JfZThjOWY2NDBfMi4yLjAtUkMwMi5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2xpYi9kb2NUYWIvRG9jdW1lbnRDb2xsZWN0b3Iuc3ZlbHRlIl0sInNvdXJjZXNDb250ZW50IjpbIjxzdmVsdGU6b3B0aW9ucyB0YWc9XCJkb2N1bWVudC1jb2xsZWN0b3JcIiAvPlxuXG48c2NyaXB0IGxhbmc9XCJ0c1wiPlxuICBpbXBvcnQgQ2FtZXJhU3RhdHVzIGZyb20gJy4uL2ZhY2VUYWIvY2FtZXJhU3RhdHVzL0NhbWVyYVN0YXR1cy5zdmVsdGUnO1xuICBpbXBvcnQgeyBvbkRlc3Ryb3ksIG9uTW91bnQgfSBmcm9tICdzdmVsdGUnO1xuICBpbXBvcnQgeyBmYWRlIH0gZnJvbSAnc3ZlbHRlL3RyYW5zaXRpb24nO1xuICBpbXBvcnQgdHlwZSB7IEJvZHlQYXJ0LCBCb2R5UGFydFJldHVyblR5cGUgfSBmcm9tICcuLi92YWxpZGF0b3JzL2Jpb21ldHJpY3NWYWxpZGF0b3InO1xuICBpbXBvcnQgeyBfLCBpc0xvYWRpbmcgfSBmcm9tICdzdmVsdGUtaTE4bic7XG4gIGltcG9ydCB7IGdldCwgd3JpdGFibGUgfSBmcm9tICdzdmVsdGUvc3RvcmUnO1xuICBpbXBvcnQgeyBzZWxlY3RlZFRhYiwgVGFiRW51bSB9IGZyb20gJy4uL3RhYkJ0bnMvdGFiU3RvcmUnO1xuICBpbXBvcnQge1xuICAgIGZhY2VWYWxpZGF0aW9uc1N0b3JlLFxuICAgIGltYWdlLFxuICAgIHNldHVwU3RyZWFtLFxuICAgIHZpZGVvU3RvcmUsXG4gICAgcmVxdWVzdFJlc3VsdCxcbiAgICBjYW1lcmFEZXZpY2VzU3RvcmUsXG4gICAganVzdGlmaWNhdGlvbixcbiAgICBzYXZlZCxcbiAgICBjYXB0dXJlZCxcbiAgICBfc3RyZWFtLFxuICAgIHNodXRPZmZDYW1lcmEsXG4gICAgcmVhZHksXG4gICAgY2xlYXJlZFZpZGVvU3JjT2JqZWN0LFxuICAgIGVudW1lcmF0ZURldmljZXMsXG4gICAgb3JpZ2luYWxDYXB0dXJlLFxuICAgIGF1dG9tYXRpY0NhcHR1cmUsXG4gICAgc2VsZWN0ZWRWaWRlb0RldmljZUlkLFxuICAgIHJlcXVlc3RSZXN1bHRFbnVtLFxuICAgIHJldGFrZVBob3RvLFxuICAgIHNob3dGYWNlV2hpbGVWYWxpZGF0aW5nLFxuICAgIGdldFZpZGVvRGltZW5zaW9ucyxcbiAgICBGYWNlRXhwb3J0U3RyYXRlZ3ksXG4gICAgb3JpZW50YXRpb25EYXRhLFxuICAgIEZhY2luZ01vZGVFbnVtLFxuICAgIGZhY2luZ01vZGVcbiAgfSBmcm9tICcuLi9mYWNlVGFiL2ZhY2VTdG9yZSc7XG4gIGltcG9ydCB7XG4gICAgc3dhcENhbWVyYVxuICB9ZnJvbSAnLi4vY29uZi9jb25mU3RvcmUnOyAgXG4gIGltcG9ydCBDb25mQnRuIGZyb20gJy4uL2NvbmYvQ29uZkJ0bi5zdmVsdGUnO1xuICBpbXBvcnQgQ2FtZXJhQnRuIGZyb20gJy4uL2NvbmYvQ2FtZXJhQnRuLnN2ZWx0ZSc7XG4gIGltcG9ydCBFeHBvcnRCdG4gZnJvbSAnLi4vZmluZ2Vyc1RhYi9idXR0b25zL2V4cG9ydEJ0bi9FeHBvcnRCdG4uc3ZlbHRlJztcbiAgaW1wb3J0IHsgZW5hYmxlU3RyYXRlZ3kgfSBmcm9tICcuLi9maW5nZXJzVGFiL2hhbmQvaGFuZFBhcnRzL2ZpbmdlcnNTdG9yZSc7XG4gIGltcG9ydCB7IGV4cG9ydEJ1dHRvbkRpc2FibGVkIH0gZnJvbSAnLi4vZmluZ2Vyc1RhYi9idXR0b25zL2V4cG9ydEJ0bi9leHBvcnRTdG9yZSc7XG4gIGltcG9ydCB7ZHJhd0RldGVjdGlvbnNJbkZhY2UsIGVuYWJsZUZhY2VBcGksIGZhY2VGb3VuZCwgZ2V0RmFjZURldGVjdG9yT3B0aW9ucyB9IGZyb20gJy4uL2ZhY2VUYWIvZmFjZUFwaVN0b3JlJztcbiAgaW1wb3J0IHsgaXNNb2JpbGUsIGlzT2JqZWN0LCBsb2FkRmFjZUFwaUFuZFdlaWdodHMsIGxvb3BDYWxsZXIsIHVuTG9ja1NjcmVlbn0gZnJvbSAnLi4vdXRpbC91dGlsJztcbiAgaW1wb3J0IHsgaXNMb2FkaW5nQVBQIH0gZnJvbSAnLi4vLi4vbWFpblN0b3JlJztcbiAgaW1wb3J0IGxvYWRpbmdHaWYgZnJvbSAnLi4vLi4vYXNzZXRzL2ltZy9CbG9ja3MtMXMtMjAwcHguZ2lmJztcbiAgaW1wb3J0IFN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xuICBpbXBvcnQgeyBjYW1lcmFTdGF0dXNTdG9yZSwgQ2FtZXJhU3RhdHVzRW51bSB9IGZyb20gJy4uL2ZhY2VUYWIvY2FtZXJhU3RhdHVzL2NhbWVyYVN0YXR1c1N0b3JlJztcbiAgaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi4vdXRpbC9sb2dnZXInO1xuXG4gIGxldCB2aWRlbzogSFRNTFZpZGVvRWxlbWVudDtcbiAgbGV0IGRldGVjdGlvbnNDYW52YXM6IEhUTUxDYW52YXNFbGVtZW50O1xuICBsZXQgZW5jbG9zaW5nRGl2OiBIVE1MRGl2RWxlbWVudDtcbiAgbGV0IGlzQ291bnRpbmdEb3duID0gZmFsc2U7XG4gIGxldCB1bmlxdWUgPSB7fTtcbiAgbGV0IGxvYWRlZEZhY2VBcGlBbmRXZWlnaHRzID0gZmFsc2U7XG5cbiAgLy8gUHJvcHNcbiAgZXhwb3J0IGxldCBlbmFibGVNaW51dGlhZTogYm9vbGVhbjtcbiAgZXhwb3J0IGxldCB2aWRlb0RpbWVuc2lvbnM6IHN0cmluZztcbiAgZXhwb3J0IGxldCBub1RhYnM6IGJvb2xlYW47XG4gIGV4cG9ydCBsZXQgd2VpZ2h0c1BhdGg6IHN0cmluZztcbiAgZXhwb3J0IGxldCBzaG93Q2FwdHVyZUJ1dHRvbjogYm9vbGVhbjtcbiAgZXhwb3J0IGxldCBzaG93VW5jb25mb3JtaXRpZXM6IGJvb2xlYW47XG4gIGV4cG9ydCBsZXQgdmlkZW9GaWx0ZXI6IHN0cmluZztcblxuICBjb25zdCBzdGFydEZhY2VBcGkgPSB3cml0YWJsZShmYWxzZSk7XG4gIGNvbnN0IGRhdGFUeXBlUHJlZml4ID0gd3JpdGFibGUoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCcpO1xuXG4gIGxldCBtYXNrQ2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcbiAgbGV0IGRpc3BsYXlDYW52YXM6IEhUTUxDYW52YXNFbGVtZW50O1xuICBsZXQgY2FwdHVyaW5nID0gZmFsc2U7XG4gIGxldCBpbml0aWFsaXplZCA9IGZhbHNlO1xuICBsZXQgaWRybmRMb2FkaW5nID0gdHJ1ZTtcbiAgbGV0IGlkcm5kQ2xvc2VkID0gdHJ1ZTtcbiAgbGV0IGludGVydmFsSWQgPSAwO1xuICBsZXQgZmFjZWFwaUNvdW50ZXIgPSAwO1xuICBsZXQgZmFjZWFwaUZyYW1lUmF0ZSA9IDEwO1xuICBsZXQgcmlnaHRPcmllbnRhdGlvbiA9IHRydWU7XG5cbiAgbGV0IGNvdW50ZG93bkZpbmlzaFRpbWUgPSAwO1xuICBsZXQgZGlzYWJsZUNvdW50RG93biA9IGZhbHNlO1xuXG4gIC8vIGZhY2UgdmFsaWRhdGlvbiByZWxhdGVkXG4gIGxldCBmYWNlTm90VmFsaWRhdGVkID0gZmFsc2U7XG4gIGxldCBmYWNlVmFsaWRhdGlvbkFsZXJ0ID0gJyc7XG5cbiAgbGV0IGRvY0xpbWl0cyA9IHt0b3BMZWZ0WDogMTMwLCB0b3BMZWZ0WTogNzAsIHdpZHRoOiA1NDAsIGhlaWdodDogNDAwfVxuXG4gIGNvbnN0IHRvYXN0ID0gU3dhbC5taXhpbih7XG4gICAgdG9hc3Q6IHRydWUsXG4gICAgcG9zaXRpb246ICdib3R0b20tbGVmdCcsXG4gICAgdGltZXI6IDEzMDAwLFxuICAgIHRpbWVyUHJvZ3Jlc3NCYXI6IHRydWUsXG4gIH0pO1xuXG4gIG9uTW91bnQoYXN5bmMgKCkgPT4ge1xuICAgICRpc0xvYWRpbmdBUFAgPSB0cnVlO1xuICAgIGxvZygnTW91bnRpbmcgRG9jdW1lbnQgQ29sbGVjdG9yIScpO1xuICAgICRyZWFkeSA9IGZhbHNlO1xuICAgICRmYWNlRm91bmQgPSBmYWxzZTtcbiAgICAkY2FwdHVyZWQgPSBmYWxzZTtcbiAgICAkZmFjaW5nTW9kZSA9IEZhY2luZ01vZGVFbnVtLlJFQVJfQ0FNRVJBO1xuICAgIG9wZW5DYW1lcmEoKTtcblxuICAgIGlmICgkZW5hYmxlRmFjZUFwaSkge1xuICAgICAgYXdhaXQgbG9hZEZhY2VBcGlBbmRXZWlnaHRzKHdlaWdodHNQYXRoKTtcbiAgICAgIGxvYWRlZEZhY2VBcGlBbmRXZWlnaHRzID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHNldERvY0xpbWl0cygpIHtcbiAgICBjb25zdCB2aWRlb1dpZHRoID0gJHZpZGVvU3RvcmUudmlkZW9XaWR0aDtcbiAgICBjb25zdCB2aWRlb0hlaWdodCA9ICR2aWRlb1N0b3JlLnZpZGVvSGVpZ2h0O1xuICAgIGNvbnN0IGRvY0hlaWdodCA9IHZpZGVvSGVpZ2h0ICAqIDAuNzM7XG4gICAgY29uc3QgZG9jV2lkdGggPSBkb2NIZWlnaHQgKiAxLjM2O1xuICAgIFxuICAgIGRvY0xpbWl0cy50b3BMZWZ0WCA9ICh2aWRlb1dpZHRoIC0gZG9jV2lkdGgpIC8gMjsgXG4gICAgZG9jTGltaXRzLnRvcExlZnRZID0gKHZpZGVvSGVpZ2h0IC0gZG9jSGVpZ2h0KSAvIDEuNDI7XG4gICAgZG9jTGltaXRzLndpZHRoID0gZG9jV2lkdGg7XG4gICAgZG9jTGltaXRzLmhlaWdodCA9IGRvY0hlaWdodDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRyYXdSZWN0YW5nbGUoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgLy8gY2xlYXIgdGhlIGFyZWEgKHRoZXJlIHNob3VsZG4ndCBldmVuIGJlIGFueXRoaW5nIGFueXdheXMpXG4gICAgY3R4LmNsZWFyUmVjdCgwLCAwLCBkaXNwbGF5Q2FudmFzLndpZHRoLCBkaXNwbGF5Q2FudmFzLmhlaWdodCk7XG4gICAgLy8gc2F2ZSB0aGUgY29udGV4dCBzdGF0ZVxuICAgIC8vIGZyb20gbWRuIGRvY3NcbiAgICBjdHguc2F2ZSgpO1xuXG4gICAgLy8gYXBwbHkgdGhlIGJsdXIvY29sb3IgZmlsdGVyXG4gICAgaWYgKHZpZGVvRmlsdGVyID09ICdibHVyJyl7XG4gICAgICBjdHguZmlsdGVyID0gYGJsdXIoJHt2aWRlby53aWR0aC82MH1weClgO1xuICAgICAgY3R4LnJlY3QoMCwgMCwgZGlzcGxheUNhbnZhcy53aWR0aCwgZGlzcGxheUNhbnZhcy5oZWlnaHQpO1xuICAgIH0gZWxzZSBpZih2aWRlb0ZpbHRlciAhPSAnbm9uZScpIHtcbiAgICAgIGN0eC5maWxsU3R5bGUgPSB2aWRlb0ZpbHRlcjtcbiAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCBkaXNwbGF5Q2FudmFzLndpZHRoLCBkaXNwbGF5Q2FudmFzLmhlaWdodCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRyYXcgYSByZWN0YW5nbGUgd2l0aCB0aGUgc2FtZSBzaXplIGFzIHRoZSB2aWRlb1xuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgY3R4LnJlY3QoMCwgMCwgZGlzcGxheUNhbnZhcy53aWR0aCwgZGlzcGxheUNhbnZhcy5oZWlnaHQpO1xuICAgIH1cbiAgICAvLyBtYWtlIGEgcmVjdGFuZ2xlIHRoYXQgYWxtb3N0IGZpbGxzIHRoZSBjYW52YXNcbiAgICBjdHgucmVjdChkb2NMaW1pdHMudG9wTGVmdFgsIGRvY0xpbWl0cy50b3BMZWZ0WSwgZG9jTGltaXRzLndpZHRoLCBkb2NMaW1pdHMuaGVpZ2h0KTtcbiAgICAvLyBjbGlwIHNtYWxsZXIgcmVjdGFuZ2xlIGFnYWluc3QgdGhlIHRoZSBsYXJnZXIgcmVjdGFuZ2xlXG4gICAgLy8gQ2xpcCBwYXRocyBjYW5ub3QgYmUgcmV2ZXJ0ZWQgZGlyZWN0bHkuIFlvdSBtdXN0IHNhdmUgeW91ciBjYW52YXMgc3RhdGUgdXNpbmcgc2F2ZSgpIGJlZm9yZSBjYWxsaW5nIGNsaXAoKSwgYW5kIHJlc3RvcmUgaXQgb25jZSB5b3UgaGF2ZSBmaW5pc2hlZCBkcmF3aW5nIGluIHRoZSBjbGlwcGVkIGFyZWEgdXNpbmcgcmVzdG9yZSgpLlxuICAgIGN0eC5jbGlwKCk7XG4gICAgLy8gZHJhdyB0aGUgdmlkZW9cbiAgICAvLyB0aGlzIG1ha2VzIGZhY2UgYXBpIG9ubHkgYXdhcmUgb2Ygb3V0c2lkZSB0aGUgc21hbGxlciByZWN0YW5nbGUgYXJlYVxuICAgIGRyYXdWaWRlb09uQ2FudmFzKGN0eCwgdmlkZW8sIGRpc3BsYXlDYW52YXMpO1xuICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgXG4gICAgLy8gc2F2ZSBhZ2FpbiwgYmVjYXVzZSB3aGVuIHJlZHJhd2luZyB0aGUgb3ZhbCwgZXZlcnl0aGluZyBhcm91bmQgdGhlIG92YWwgaXMgbG9zdFxuICAgIGN0eC5zYXZlKCk7XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIC8vIC8vIGRyYXcgdGhlIHNtYWxsZXIgcmVjdGFuZ2xlICh0aGlzIHRpbWUgaXQgZG9lc24ndCBtYXR0ZXIgdGhlIGRpcmVjdGlvbiwgc2luY2UgdGhlcmUgaXNuJ3QgYSByZWN0YW5nbGUgYmVoaW5kKVxuICAgIGNvbnN0IHByaW1hcnlUaGVtZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRpc3BsYXlDYW52YXMpLmdldFByb3BlcnR5VmFsdWUoJy0tcCcpO1xuICAgIGNvbnN0IHN1Y2Nlc3NUaGVtZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRpc3BsYXlDYW52YXMpLmdldFByb3BlcnR5VmFsdWUoJy0tc3UnKTtcblxuICAgIGN0eC5zdHJva2VTdHlsZSA9IGBoc2woJHtwcmltYXJ5VGhlbWV9KWA7XG4gICAgY3R4LmxpbmVXaWR0aCA9IDE2O1xuICAgIGN0eC5yZWN0KGRvY0xpbWl0cy50b3BMZWZ0WCwgZG9jTGltaXRzLnRvcExlZnRZLCBkb2NMaW1pdHMud2lkdGgsIGRvY0xpbWl0cy5oZWlnaHQpO1xuICAgIGN0eC5zdHJva2UoKTtcbiAgICBpZiAoaXNDb3VudGluZ0Rvd24gJiYgIWRpc2FibGVDb3VudERvd24pIHtcbiAgICAgIGNvbnN0IHRpbWVSZW1haW5pbmcgPSAxIC0gKGNvdW50ZG93bkZpbmlzaFRpbWUgLSBuZXcgRGF0ZSgpLmdldFRpbWUoKSkgLyA0NTAwO1xuICAgICAgLy8gQ291bnRlciBjb250b3VyXG4gICAgICBjdHguc2F2ZSgpO1xuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgY3R4LmxpbmVXaWR0aCA9IDE2O1xuICAgICAgY3R4LnN0cm9rZVN0eWxlID0gYGhzbCgke3N1Y2Nlc3NUaGVtZX0pYDtcbiAgICAgIGNvbnN0IHN1bVdpZHRoID0gZG9jTGltaXRzLndpZHRoICAqIDMgKiB0aW1lUmVtYWluaW5nO1xuICAgICAgY29uc3Qgc3VtSGVpZ2h0ID0gZG9jTGltaXRzLmhlaWdodCAqIDIgKiB0aW1lUmVtYWluaW5nO1xuICAgICAgY29uc3QgY291bnRkb3duV2lkdGggPSBzdW1XaWR0aCA8IGRvY0xpbWl0cy53aWR0aCA/IHN1bVdpZHRoIDogZG9jTGltaXRzLndpZHRoIDtcbiAgICAgIGNvbnN0IGNvdW50ZG93bkhlaWdodCA9IHN1bUhlaWdodCA8IGRvY0xpbWl0cy5oZWlnaHQgPyBzdW1IZWlnaHQgOiBkb2NMaW1pdHMuaGVpZ2h0IDtcbiAgICAgIGN0eC5yZWN0KGRvY0xpbWl0cy50b3BMZWZ0WCwgZG9jTGltaXRzLnRvcExlZnRZLCBjb3VudGRvd25XaWR0aCwgY291bnRkb3duSGVpZ2h0KTtcbiAgICAgIGN0eC5zdHJva2UoKTtcbiAgICB9XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGNvbnN0IGNsaXBQYXRoID0gbmV3IFBhdGgyRCgpO1xuICAgIGNsaXBQYXRoLnJlY3QoXG4gICAgICBkb2NMaW1pdHMudG9wTGVmdFgsIGRvY0xpbWl0cy50b3BMZWZ0WSwgZG9jTGltaXRzLndpZHRoLCBkb2NMaW1pdHMuaGVpZ2h0XG4gICAgKTtcbiAgICAvLyBiYXNpY2FsbHkgY2xpcHBpbmcgdGhlIG90aGVyIHdheSBhcm91bmQsIHNvIGZhY2UgYXBpIGlzIGF3YXJlIG9mIHRoZSBzbWFsbGVyIHJlY3RhbmdsZSBhcmVhXG4gICAgY3R4LmNsaXAoY2xpcFBhdGgpO1xuICAgIGRyYXdWaWRlb09uQ2FudmFzKGN0eCwgdmlkZW8sIGRpc3BsYXlDYW52YXMpO1xuICAgY3R4LnJlc3RvcmUoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRyYXdWaWRlb09uQ2FudmFzKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCB2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgZGlzcGxheUNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQpIHtcbiAgICBjb25zdCBpc1NhbWVQcm9wb3J0aW9uID1cbiAgICAgICh2aWRlby52aWRlb0hlaWdodCA+PSB2aWRlby52aWRlb1dpZHRoICYmIGRpc3BsYXlDYW52YXMuaGVpZ2h0ID49IGRpc3BsYXlDYW52YXMud2lkdGgpIHx8XG4gICAgICAodmlkZW8udmlkZW9IZWlnaHQgPCB2aWRlby52aWRlb1dpZHRoICYmIGRpc3BsYXlDYW52YXMuaGVpZ2h0IDwgZGlzcGxheUNhbnZhcy53aWR0aCk7XG5cbiAgICBjdHguZHJhd0ltYWdlKFxuICAgICAgdmlkZW8sXG4gICAgICBpc1NhbWVQcm9wb3J0aW9uID8gMCA6IHZpZGVvLnZpZGVvV2lkdGggLyAyIC0gZGlzcGxheUNhbnZhcy53aWR0aCxcbiAgICAgIDAsXG4gICAgICBpc1NhbWVQcm9wb3J0aW9uID8gdmlkZW8udmlkZW9XaWR0aCA6IHZpZGVvLnZpZGVvSGVpZ2h0ICogKGRpc3BsYXlDYW52YXMud2lkdGggLyBkaXNwbGF5Q2FudmFzLmhlaWdodCksXG4gICAgICB2aWRlby52aWRlb0hlaWdodCxcbiAgICAgIDAsXG4gICAgICAwLFxuICAgICAgZGlzcGxheUNhbnZhcy53aWR0aCxcbiAgICAgIGRpc3BsYXlDYW52YXMuaGVpZ2h0XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0Q2FtZXJhKCkge1xuICAgICRjYW1lcmFTdGF0dXNTdG9yZSA9IENhbWVyYVN0YXR1c0VudW0uT0s7XG4gICAgY2FwdHVyaW5nID0gdHJ1ZTtcbiAgICBpZHJuZENsb3NlZCA9IGZhbHNlO1xuICAgIGlkcm5kTG9hZGluZyA9IHRydWU7XG4gIH1cblxuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gcGxheSgpIHtcbiAgICAvLyB3YWl0IGZvciBmYWNlIGFwaSB0byBsb2FkIHdlaWdodHNcbiAgICBpZiAoJGVuYWJsZUZhY2VBcGkgJiYgIWxvYWRlZEZhY2VBcGlBbmRXZWlnaHRzKSByZXR1cm4gbG9vcENhbGxlcih2aWRlbywgcGxheSk7XG4gICAgLy8gcmV0dXJuIGlmIHVuaW5pdGlhbGl6ZWQgdmlkZW8gZWxlbWVudFxuICAgIGlmICghdmlkZW8pIHJldHVybjtcbiAgICAvLyByZXR1cm4gaWYgdGhlIGN1cnJlbnQgdGFiIGlzbid0IGZhY2VcbiAgICBpZiAoISgkc2VsZWN0ZWRUYWIgPT09IFRhYkVudW0uRG9jdW1lbnQpICYmICFub1RhYnMpIHJldHVybiBsb29wQ2FsbGVyKHZpZGVvLCBwbGF5KTtcbiAgICAvLyBpZiBldmVyeXRoaW5nIHBhc3NlcyB3ZSBhcmUgcmVhZHkgdG8gY2FwdHVyZVxuICAgICRyZWFkeSA9IHRydWU7XG4gICAgLy8gb25seSBtYWtlIGRldGVjdGlvbnMgaWYgZmFjZSBhcGkgZW5hYmxlZFxuICAgIGlmICgkZW5hYmxlRmFjZUFwaSkge1xuICAgICAgLy8gZmlyZXMgdGhlIGxpc3RlbmVyIHRvIHN0YXJ0IHRoZSBmYWNlIGFwaSBsb29wXG4gICAgICBpZiAoISRzdGFydEZhY2VBcGkpICRzdGFydEZhY2VBcGkgPSB0cnVlO1xuXG4gICAgICBkcmF3UmVjdGFuZ2xlKGRpc3BsYXlDYW52YXMuZ2V0Q29udGV4dCgnMmQnKSBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHZpZGVvKTtcbiAgICAgIFxuICAgICAgbG9vcENhbGxlcih2aWRlbywgcGxheSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyYXdSZWN0YW5nbGUoZGlzcGxheUNhbnZhcy5nZXRDb250ZXh0KCcyZCcpIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdmlkZW8pO1xuICAgICAgbG9vcENhbGxlcih2aWRlbywgcGxheSk7XG4gICAgfVxuICB9XG5cbiAgLy9UT0RPOiBjYXB0dXJlIGFyZWEgcHJvcG9ydGlvbmFsIHRvIGRvY0xpbWl0cyBkaXJlY3RseSBmcm9tIGNhbWVyYVxuICBhc3luYyBmdW5jdGlvbiBjYXB0dXJlKCkge1xuICAgIHVuTG9ja1NjcmVlbigpO1xuICAgICRyZXF1ZXN0UmVzdWx0ID0gcmVxdWVzdFJlc3VsdEVudW0uT0s7XG4gICAgJGNhcHR1cmVkID0gdHJ1ZTtcbiAgICAkc2F2ZWQgPSB0cnVlO1xuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgIGNhbnZhcy53aWR0aCA9IGRvY0xpbWl0cy53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gZG9jTGltaXRzLmhlaWdodDtcbiAgICBjdHg/LmRyYXdJbWFnZShcbiAgICAgIHZpZGVvLCBcbiAgICAgIGRvY0xpbWl0cy50b3BMZWZ0WCwgXG4gICAgICBkb2NMaW1pdHMudG9wTGVmdFksIFxuICAgICAgZG9jTGltaXRzLndpZHRoLCBcbiAgICAgIGRvY0xpbWl0cy5oZWlnaHQsIFxuICAgICAgMCwgXG4gICAgICAwLFxuICAgICAgY2FudmFzLndpZHRoLFxuICAgICAgY2FudmFzLmhlaWdodCk7XG4gICAgY29uc3QgaW1nID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycpLnNwbGl0KCcsJyk7XG4gICAgJGRhdGFUeXBlUHJlZml4ID0gaW1nWzBdO1xuICAgICRpbWFnZSA9IGltZ1sxXTtcbiAgICAkb3JpZ2luYWxDYXB0dXJlID0gaW1nWzFdO1xuICAgIGNvbnN0IGJvZHlQYXJ0cyA9IFt7ZGF0YTogJG9yaWdpbmFsQ2FwdHVyZX1dO1xuICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdkb2N1bWVudC11bmNvbmZvcm1pdGllcy12YWxpZGF0ZWQnLCB7XG4gICAgICAgIGRldGFpbDoge1xuICAgICAgICAgIGJvZHlQYXJ0czogYm9keVBhcnRzLFxuICAgICAgICAgIHN0YXR1czogJHJlcXVlc3RSZXN1bHQsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBzYXZlKCkge1xuICAgIGNvbnN0IGZhY2U6IEJvZHlQYXJ0ID0ge1xuICAgICAgYm9keVBhcnQ6ICdET0NVTUVOVCcsXG4gICAgICBkYXRhOiAkaW1hZ2UsXG4gICAgICBqdXN0aWZpY2F0aW9uOiAkanVzdGlmaWNhdGlvbixcbiAgICB9O1xuICAgICRzYXZlZCA9IHRydWU7XG4gICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdleHBvcnQtZG9jdW1lbnQnLCB7IGRldGFpbDogZmFjZSB9KSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXRha2UoKSB7XG4gICAgLy9lbWl0IGFuIGVtcHR5IGV2ZW50IGluZm9ybWluZyB0aGF0IGl0IHdhcyBzY3JhcHBlZFxuICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZG9jdW1lbnQtc2NyYXBwZWQnKSk7XG4gICAgJHNhdmVkID0gZmFsc2U7XG4gICAgJHJlcXVlc3RSZXN1bHQgPSByZXF1ZXN0UmVzdWx0RW51bS5PSztcbiAgICAkY2FwdHVyZWQgPSBmYWxzZTtcbiAgICAkb3JpZ2luYWxDYXB0dXJlID0gJyc7XG4gICAgZmFjZVZhbGlkYXRpb25BbGVydCA9ICcnO1xuICAgIGZhY2VOb3RWYWxpZGF0ZWQgPSBmYWxzZTtcbiAgICBpZiAoaWRybmRDbG9zZWQpIHJlc2V0Q2FtZXJhKCk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBvcGVuQ2FtZXJhKGRldmljZT86IHN0cmluZykge1xuICAgICRpc0xvYWRpbmdBUFAgPSB0cnVlO1xuICAgIC8vIHRoaXMgd2VpcmQgc3R1ZiB3aXRoIGhlaWdodCBhbmQgd2lkdGggaXMgaGVyZSB0byBjb21wZW5zYXRlIGEgc3ZlbHRlIGlzc3VlXG4gICAgLy8gYmVjYXVzZSBvbk1vdW50IGdldHMgY2FsbGVkIHR3aWNlXG4gICAgY29uc3QgW3dpZHRoLCBoZWlnaHRdID0gKHZpZGVvRGltZW5zaW9ucyA/PyAnJylcbiAgICAgID8ucmVwbGFjZUFsbCgnICcsICcnKVxuICAgICAgPy5zcGxpdCgneCcpXG4gICAgICA/Lm1hcCgodikgPT4gKHYgPyBwYXJzZUludCh2KSA6IHVuZGVmaW5lZCkpO1xuICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkgcmV0dXJuO1xuICAgICR2aWRlb1N0b3JlID0geyB2aWRlb1dpZHRoOiB3aWR0aCwgdmlkZW9IZWlnaHQ6IGhlaWdodCB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICgkY2FtZXJhU3RhdHVzU3RvcmUgPT0gQ2FtZXJhU3RhdHVzRW51bS5DQU1FUkFfT1JJRU5UQVRJT05fTEFORFNDQVBFKSByZXR1cm47XG4gICAgICBcbiAgICAgIGF3YWl0IGVudW1lcmF0ZURldmljZXMoKTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgICBkZXZpY2VJZDogZGV2aWNlSWQsXG4gICAgICAgICAgd2lkdGg6IHdpZHRoQ2FtZXJhLFxuICAgICAgICAgIGhlaWdodDogaGVpZ2h0Q2FtZXJhLFxuICAgICAgICAgIGFzcGVjdFJhdGlvOiBhc3BlY3RSYXRpb0NhbWVyYSxcbiAgICAgIH0gPSBhd2FpdCBnZXRWaWRlb0RpbWVuc2lvbnMod2lkdGgsIGhlaWdodCwgJGZhY2luZ01vZGUsIGRldmljZSk7XG4gICAgICAvLyBmbGlwIGVtXG4gICAgICBpZiAoYXNwZWN0UmF0aW9DYW1lcmEgJiYgYXNwZWN0UmF0aW9DYW1lcmEgPCAxICYmIGlzTW9iaWxlKCkpIHtcbiAgICAgICAgJHZpZGVvU3RvcmUgPSB7IHZpZGVvV2lkdGg6IGhlaWdodENhbWVyYSwgdmlkZW9IZWlnaHQ6IHdpZHRoQ2FtZXJhIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkdmlkZW9TdG9yZSA9IHsgdmlkZW9XaWR0aDogd2lkdGhDYW1lcmEsIHZpZGVvSGVpZ2h0OiBoZWlnaHRDYW1lcmEgfTtcbiAgICAgIH1cbiAgICAgIHNldERvY0xpbWl0cygpO1xuICAgICAgJHNlbGVjdGVkVmlkZW9EZXZpY2VJZCA9IGRldmljZUlkID8gZGV2aWNlSWQgOiAkY2FtZXJhRGV2aWNlc1N0b3JlWzBdLmRldmljZUlkO1xuICAgICAgJGNhbWVyYVN0YXR1c1N0b3JlID0gQ2FtZXJhU3RhdHVzRW51bS5PSztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGUgYXMgRE9NRXhjZXB0aW9uO1xuICAgICAgaWRybmRDbG9zZWQgPSB0cnVlO1xuICAgICAgY29uc3QgY29uc3RyYWludEVycm9yID0gKGlzT2JqZWN0KGUpICYmIGUuY29uc3RyYWludCA/IGUuY29uc3RyYWludCA6ICcnKTsgXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yLCBjb25zdHJhaW50RXJyb3IpO1xuICAgICAgaWYgKGlzT2JqZWN0KGVycm9yKSAmJiAnbWVzc2FnZScgaW4gZXJyb3IgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnUGVybWlzc2lvbiBkZW5pZWQnKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiVXNlciBkaWRuJ3QgZ2l2ZSBwZXJtaXNzaW9uIHRvIHVzZSBjYW1lcmEhXCIpO1xuICAgICAgICAkY2FtZXJhU3RhdHVzU3RvcmUgPSBDYW1lcmFTdGF0dXNFbnVtLkNBTUVSQV9ERU5JRURfRVJST1I7XG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3QoZXJyb3IpICYmICdtZXNzYWdlJyBpbiBlcnJvciAmJiBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdSZXF1ZXN0ZWQgZGV2aWNlIG5vdCBmb3VuZCcpKSB7XG4gICAgICAgICRjYW1lcmFTdGF0dXNTdG9yZSA9IENhbWVyYVN0YXR1c0VudW0uREVWSUNFX05PVF9GT1VORF9FUlJPUjtcbiAgICAgIH1cbiAgICAgIGlmIChjb25zdHJhaW50RXJyb3IuaW5jbHVkZXMoJ3dpZHRoJykgfHwgY29uc3RyYWludEVycm9yLmluY2x1ZGVzKCdoZWlnaHQnKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBDYW1lcmEgZG9lcyBub3QgbWVldCB0aGUgbWluaW11bSBzdXBwb3J0ZWQgcmVxdWlyZW1lbnRzISAoJHtjb25zdHJhaW50RXJyb3J9KWApO1xuICAgICAgICAkY2FtZXJhU3RhdHVzU3RvcmUgPSBDYW1lcmFTdGF0dXNFbnVtLkNBTUVSQV9VTlNVUFBPUlRFRDtcbiAgICAgIH1cbiAgICB9XG4gICAgJGlzTG9hZGluZ0FQUCA9IGZhbHNlO1xuICB9XG5cbiAgLy8gU3Vic2NyaXB0aW9uc1xuXG4gIGNvbnN0IHVuc3Vic2NyaWJlVmlkZW9EaW1lbnNpb25zID0gdmlkZW9TdG9yZS5zdWJzY3JpYmUoKHN0b3JlT2JqKSA9PiB7XG4gICAgaWYgKCF2aWRlbykgcmV0dXJuO1xuICAgIGlmICghZGV0ZWN0aW9uc0NhbnZhcykgcmV0dXJuO1xuXG4gICAgdmlkZW8ud2lkdGggPSBzdG9yZU9iai52aWRlb1dpZHRoO1xuICAgIHZpZGVvLmhlaWdodCA9IHN0b3JlT2JqLnZpZGVvSGVpZ2h0O1xuICAgIGRldGVjdGlvbnNDYW52YXMud2lkdGggPSBzdG9yZU9iai52aWRlb1dpZHRoO1xuICAgIGRldGVjdGlvbnNDYW52YXMuaGVpZ2h0ID0gc3RvcmVPYmoudmlkZW9IZWlnaHQ7XG4gICAgbWFza0NhbnZhcy53aWR0aCA9IHN0b3JlT2JqLnZpZGVvV2lkdGg7XG4gICAgbWFza0NhbnZhcy5oZWlnaHQgPSBzdG9yZU9iai52aWRlb0hlaWdodDtcbiAgICBkaXNwbGF5Q2FudmFzLndpZHRoID0gc3RvcmVPYmoudmlkZW9XaWR0aDtcbiAgICBkaXNwbGF5Q2FudmFzLmhlaWdodCA9IHN0b3JlT2JqLnZpZGVvSGVpZ2h0O1xuICBcbiAgfSk7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmVGYWNlVmFsaWRhdGlvbnMgPSBmYWNlVmFsaWRhdGlvbnNTdG9yZS5zdWJzY3JpYmUoKG5ld1ZhbHVlKSA9PiB7XG4gICAgbGV0IG5ld0ZhY2VWYWxpZGF0aW9uQWxlcnQgPSAnJztcblxuICAgIGlmICghbmV3VmFsdWUuaXNQZXJzb25DbG9zZUVub3VnaCkge1xuICAgICAgbmV3RmFjZVZhbGlkYXRpb25BbGVydCA9ICdmYWNlQ29sbGVjdG9yLmNvbWVDbG9zZXJDYW1lcmEnO1xuICAgIH0gZWxzZSBpZiAobmV3VmFsdWUuaXNQZXJzb25Ub29jbG9zZSkge1xuICAgICAgbmV3RmFjZVZhbGlkYXRpb25BbGVydCA9ICdmYWNlQ29sbGVjdG9yLm1vdmVBd2F5Q2FtZXJhJztcbiAgICB9IGVsc2UgaWYgKCFuZXdWYWx1ZS5pc1BlcnNvbkluRnJhbWUpIHtcbiAgICAgIG5ld0ZhY2VWYWxpZGF0aW9uQWxlcnQgPSAnZG9jQ29sbGVjdG9yLnN0YXlJbkZyYW1lJztcbiAgICB9IFxuXG4gICAgaWYgKG5ld0ZhY2VWYWxpZGF0aW9uQWxlcnQgIT0gJycpe1xuICAgICAgIC8vVE9ETzogdGVzdCBvbiBpT1MgYW5kIGlmIGl0IGRvZXNuJ3Qgd29yaywgZG8gaXQgYmFzZWQgb24gdGhlIGNsb2NrXG4gICAgICAgaWYgKG5ld0ZhY2VWYWxpZGF0aW9uQWxlcnQgIT0gZmFjZVZhbGlkYXRpb25BbGVydCkgeyAgICAgICAgXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGZhY2VOb3RWYWxpZGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgICBmYWNlVmFsaWRhdGlvbkFsZXJ0ID0gbmV3RmFjZVZhbGlkYXRpb25BbGVydDtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGZhY2VOb3RWYWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgIFxuICAgICAgICB9LCAzMDAwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBVVRPTUFUSUMgQ0FQVFVSRVxuICAgIC8vIGlmIGFsbCB0aGUgcGFyYW1ldGVycyBhcmUgb2tcbiAgICBpZiAoXG4gICAgICAhJGNhcHR1cmVkICYmXG4gICAgICAkYXV0b21hdGljQ2FwdHVyZSAmJlxuICAgICAgIWlzQ291bnRpbmdEb3duICYmXG4gICAgICBuZXdWYWx1ZS5pc1BlcnNvbkluRnJhbWUgJiZcbiAgICAgICEoIW5ld1ZhbHVlLmlzUGVyc29uQ2xvc2VFbm91Z2ggfHwgbmV3VmFsdWUuaXNQZXJzb25Ub29jbG9zZSlcbiAgICApIHtcbiAgICAgIC8vIHN0YXJ0IGEgY291bnRkb3duIGFuZCB0YWtlIGEgcGljdHVyZVxuICAgICAgaXNDb3VudGluZ0Rvd24gPSB0cnVlO1xuICAgICAgZmFjZU5vdFZhbGlkYXRlZCA9IGZhbHNlO1xuICAgICAgY291bnRkb3duRmluaXNoVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgNDUwMDtcbiAgICAgIGNvbnN0IGNvdW50ZG93bkludGVydmFsQ2FsbGJhY2sgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIC8vIHN0b3AgY291bnRpbmcgaWYgZGlzYWJsZWQgbWlkLWNvdW50IG9yIGlmIGNhcHR1cmVkIGJlZm9yZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgISRhdXRvbWF0aWNDYXB0dXJlIHx8XG4gICAgICAgICAgJGNhcHR1cmVkIHx8XG4gICAgICAgICAgIW5ld1ZhbHVlLmlzUGVyc29uQ2xvc2VFbm91Z2ggfHxcbiAgICAgICAgICBuZXdWYWx1ZS5pc1BlcnNvblRvb2Nsb3NlIHx8ICAgICAgICAgICAgICBcbiAgICAgICAgICAhbmV3VmFsdWUuaXNQZXJzb25JbkZyYW1lXG4gICAgICAgICkge1xuICAgICAgICAgIGlzQ291bnRpbmdEb3duID0gZmFsc2U7XG4gICAgICAgICAgZGlzYWJsZUNvdW50RG93biA9IHRydWU7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBkaXNhYmxlQ291bnREb3duID0gZmFsc2U7XG4gICAgICAgICAgfSwgMTUwMCk7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChjb3VudGRvd25JbnRlcnZhbENhbGxiYWNrKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ1NlY29uZHMgPSBNYXRoLmZsb29yKCgoY291bnRkb3duRmluaXNoVGltZSAtIG5vdykgJSAoMTAwMCAqIDYwKSkgLyAxMDAwKTtcbiAgICAgICAgLy8gY291bnREb3duSHRtbEVsZW1lbnQuaW5uZXJIVE1MID0gcmVtYWluaW5nU2Vjb25kcy50b1N0cmluZygpO1xuICAgICAgICBpZiAocmVtYWluaW5nU2Vjb25kcyA8PSAwKSB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChjb3VudGRvd25JbnRlcnZhbENhbGxiYWNrKTtcbiAgICAgICAgICBpc0NvdW50aW5nRG93biA9IGZhbHNlO1xuICAgICAgICAgIGNvbnN0IGN1c3RvbUVsZW1lbnQgPSBkb2N1bWVudFxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdiaW9tZXRyaWMtY29sbGVjdG9yJyk/LlswXVxuICAgICAgICAgICAgPy5zaGFkb3dSb290Py5nZXRFbGVtZW50QnlJZCgnYnJ5LWNjLWNhcHR1cmUtYnRuJyk7XG4gICAgICAgICAgY3VzdG9tRWxlbWVudD8uY2xpY2soKTtcbiAgICAgICAgfVxuICAgICAgfSwgMjUwKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHdlIGNvdWxkIGhhdmUgdXNlZCBoaWRkZW49eyRjYXB0dXJlZH0sIGJ1dCBmb3Igc29tZSByZWFzb24gaXQgZG9lc24ndCB3b3JrIHNvIGRvIHRoaXMgaW5zdGVhZFxuICBjb25zdCB1bnN1YnNjcmliZUNhcHR1cmVkU3RhdGUgPSBjYXB0dXJlZC5zdWJzY3JpYmUoKG5ld1ZhbHVlKSA9PiB7XG4gICAgaWYgKCFlbmNsb3NpbmdEaXYpIHJldHVybjtcbiAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgIGVuY2xvc2luZ0Rpdi5jbGFzc0xpc3QucmVtb3ZlKCdmbGV4Jyk7XG4gICAgICBlbmNsb3NpbmdEaXYuY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY2xvc2luZ0Rpdi5jbGFzc0xpc3QuYWRkKCdmbGV4Jyk7XG4gICAgICBlbmNsb3NpbmdEaXYuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB1bnN1YnNjcmliZUNsZWFyVmlkZW9TcmMgPSBjbGVhcmVkVmlkZW9TcmNPYmplY3Quc3Vic2NyaWJlKChuZXdWYWx1ZSkgPT4ge1xuICAgIGlmICghdmlkZW8pIHJldHVybjtcbiAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdzZXR0aW5nIG51bGwgaW4gdmlkZW8gc3JjT2JqZWN0Jyk7XG4gICAgICB2aWRlby5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgdmlkZW8uc3JjID0gJyc7XG4gICAgfVxuICB9KTtcblxuICBzZWxlY3RlZFRhYi5zdWJzY3JpYmUoYXN5bmMgKHRhYikgPT4ge1xuICAgIGlmICh0YWIgPT09IFRhYkVudW0uRG9jdW1lbnQpIHtcbiAgICAgIGF3YWl0IGVudW1lcmF0ZURldmljZXMoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHVuc3Vic2NyaWJlU2VsZWN0ZWRTdHJlYW0gPSBzZWxlY3RlZFZpZGVvRGV2aWNlSWQuc3Vic2NyaWJlKGFzeW5jIChuZXdEZXZpY2VJZCkgPT4ge1xuICAgIGlmICghbmV3RGV2aWNlSWQpIHJldHVybjtcbiAgICBpZiAoIXZpZGVvKSB7XG4gICAgICAvLyByZXJlbmRlciB2aWRlbyB0YWdcbiAgICAgIHVuaXF1ZSA9IHt9O1xuICAgIH1cbiAgICBjb25zdCB7IHZpZGVvSGVpZ2h0LCB2aWRlb1dpZHRoIH0gPSAkdmlkZW9TdG9yZTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RyZWFtID0gYXdhaXQgc2V0dXBTdHJlYW0odmlkZW9XaWR0aCwgdmlkZW9IZWlnaHQsIG5ld0RldmljZUlkKTtcbiAgICAgIHZpZGVvLnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICRfc3RyZWFtID0gc3RyZWFtO1xuICAgICAgJGNsZWFyZWRWaWRlb1NyY09iamVjdCA9IGZhbHNlO1xuICAgICAgaWYgKCFyaWdodE9yaWVudGF0aW9uKSB7XG4gICAgICAgICRjYW1lcmFTdGF0dXNTdG9yZSA9IENhbWVyYVN0YXR1c0VudW0uQ0FNRVJBX09SSUVOVEFUSU9OX0xBTkRTQ0FQRTtcbiAgICAgICAgc2h1dE9mZkNhbWVyYSgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gZSBhcyBET01FeGNlcHRpb247XG4gICAgICBpZHJuZENsb3NlZCA9IHRydWU7XG4gICAgICBpZiAoaXNPYmplY3QoZXJyb3IpICYmICdtZXNzYWdlJyBpbiBlcnJvciAmJiBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdSZXF1ZXN0ZWQgZGV2aWNlIG5vdCBmb3VuZCcpKSB7XG4gICAgICAgICRjYW1lcmFTdGF0dXNTdG9yZSA9IENhbWVyYVN0YXR1c0VudW0uREVWSUNFX05PVF9GT1VORF9FUlJPUjtcbiAgICAgIH1cbiAgICB9XG5cbiAgfSk7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmVDaGFuZ2VUYWIgPSBzZWxlY3RlZFRhYi5zdWJzY3JpYmUoYXN5bmMgKHRhYikgPT4ge1xuICAgIGlmICh0YWIgPT09IFRhYkVudW0uRG9jdW1lbnQpIHtcbiAgICAgIGlmICghY2FwdHVyaW5nICYmICEkY2FwdHVyZWQgJiYgaW5pdGlhbGl6ZWQpIGF3YWl0IHJlc2V0Q2FtZXJhKCk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB1bnN1YnNjcmliZUZhY2VBcGkgPSBzdGFydEZhY2VBcGkuc3Vic2NyaWJlKGFzeW5jIChuZXdWYWx1ZSkgPT4ge1xuICAgIGlmIChuZXdWYWx1ZSkgZmFjZWFwaUxvb3AoKTtcbiAgfSk7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmVSZWFkeUNhbWVyYUV2ZW50RW1pdHRlciA9IHJlYWR5LnN1YnNjcmliZSgobnYpID0+IHtcbiAgICBpZiAobnYpIHtcbiAgICAgIC8vIGluZm9ybXMgdGhhdCB0aGUgY2FtZXJhIGlzIHJlYWR5ICh0byBiZSBjbG9zZWQgaWYgdGhhdCBpcyB3aGF0IHlvdSB3YW50IHRvIGRvKVxuICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdicnljYy1jYW1lcmEtcmVhZHknKSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB1bnN1YnNjcmliZVN3YXBDYW1lcmEgPSBzd2FwQ2FtZXJhLnN1YnNjcmliZSgobmV3VmFsdWUpID0+IHtcbiAgICBpZiAoISR2aWRlb1N0b3JlKSByZXR1cm47XG4gICAgXG4gICAgaWYgKCFpc01vYmlsZSgpKSB7IC8vIGRlc2t0b3AgY2FtZXJhc1xuICAgICAgY29uc3QgbmV3RGV2aWNlID0gJGNhbWVyYURldmljZXNTdG9yZS5maW5kKGRldmljZSA9PiBkZXZpY2UuZGV2aWNlSWQgIT09ICRzZWxlY3RlZFZpZGVvRGV2aWNlSWQpO1xuICAgICAgY29uc3QgZGV2aWNlSWQgPSBuZXdEZXZpY2UgPyBuZXdEZXZpY2UuZGV2aWNlSWQgOiAkY2FtZXJhRGV2aWNlc1N0b3JlWzBdLmRldmljZUlkO1xuICAgICAgb3BlbkNhbWVyYShkZXZpY2VJZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5ld1ZhbHVlKSB7IC8vIG1vYmlsZSBkZXZpY2VzXG4gICAgICAkZmFjaW5nTW9kZSA9IEZhY2luZ01vZGVFbnVtLkZST05UX0NBTUVSQTtcbiAgICAgIG9wZW5DYW1lcmEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJGZhY2luZ01vZGUgPSBGYWNpbmdNb2RlRW51bS5SRUFSX0NBTUVSQTtcbiAgICAgIG9wZW5DYW1lcmEoKTtcbiAgICB9ICAgIFxuICB9KTtcblxuICBjb25zdCB1bnN1YnNjcmliZU9yaWVudGF0aW9uID0gb3JpZW50YXRpb25EYXRhLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgIGlmICghZGF0YS5pc1N1cHBvcnRlZCB8fCAhaXNNb2JpbGUoKSkgcmV0dXJuO1xuXG4gICAgcmlnaHRPcmllbnRhdGlvbiA9IGRhdGEub3JpZW50YXRpb24uaW5jbHVkZXMoJ2xhbmRzY2FwZScpO1xuICAgIGlmIChyaWdodE9yaWVudGF0aW9uKSB7XG4gICAgICAkY2FtZXJhU3RhdHVzU3RvcmUgPSBDYW1lcmFTdGF0dXNFbnVtLk9LO1xuICAgICAgaWYgKCR2aWRlb1N0b3JlKSB7IFxuICAgICAgICAkc2VsZWN0ZWRWaWRlb0RldmljZUlkID0gJyc7XG4gICAgICAgIG9wZW5DYW1lcmEoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgJGNhbWVyYVN0YXR1c1N0b3JlID0gQ2FtZXJhU3RhdHVzRW51bS5DQU1FUkFfT1JJRU5UQVRJT05fTEFORFNDQVBFO1xuICAgICAgc2h1dE9mZkNhbWVyYSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gZmFjZWFwaUxvb3AoKSB7XG4gICAgbGV0IGRldGVjdGlvbnNSZXN1bHQ7XG4gICAgaWYgKGZhY2VhcGlDb3VudGVyID49IGZhY2VhcGlGcmFtZVJhdGUpIHtcbiAgICAgIGZhY2VhcGlDb3VudGVyID0gMDtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBhd2FpdCBnZXRGYWNlRGV0ZWN0b3JPcHRpb25zKCk7XG4gICAgICAvLyBkZWJ1Z2dlclxuICAgICAgY29uc3QgZmFjZWFwaSA9IGF3YWl0IGltcG9ydCgnQHZsYWRtYW5kaWMvZmFjZS1hcGknKTtcbiAgICAgIGxldCBkZXRlY3Rpb25zUmVzdWx0MjtcbiAgICAgIGRldGVjdGlvbnNSZXN1bHQyID0gZmFjZWFwaS5kZXRlY3RTaW5nbGVGYWNlKGRpc3BsYXlDYW52YXMsIG9wdGlvbnMpO1xuICAgICAgZGV0ZWN0aW9uc1Jlc3VsdCA9IGF3YWl0IGRldGVjdGlvbnNSZXN1bHQyLndpdGhGYWNlTGFuZG1hcmtzKCk7XG4gICAgICAvLyBjbGVhciBjYW52YXMgd2hlbiBub3RoaW5nIGRldGVjdGVkXG4gICAgICBkZXRlY3Rpb25zQ2FudmFzLmdldENvbnRleHQoJzJkJyk/LmNsZWFyUmVjdCgwLCAwLCBkZXRlY3Rpb25zQ2FudmFzLndpZHRoLCBkZXRlY3Rpb25zQ2FudmFzLmhlaWdodCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZhY2VhcGlDb3VudGVyICsrO1xuICAgIH1cbiAgICBcbiAgICBpZiAoZGV0ZWN0aW9uc1Jlc3VsdCkge1xuICAgICAgZHJhd0RldGVjdGlvbnNJbkZhY2UoZGV0ZWN0aW9uc1Jlc3VsdCwgZGV0ZWN0aW9uc0NhbnZhcywgZW5hYmxlTWludXRpYWUsIHRydWUpO1xuICAgIH1cbiAgICBpZiAoJHN0YXJ0RmFjZUFwaSkge1xuICAgICAgbG9vcENhbGxlcih2aWRlbywgZmFjZWFwaUxvb3ApO1xuICAgIH1cbiAgfVxuXG4gIHJldGFrZVBob3RvLnN1YnNjcmliZShhc3luYyAobnYpID0+IHtcbiAgICBpZiAobnYpIHtcbiAgICAgIHJldGFrZSgpO1xuICAgICAgJHJldGFrZVBob3RvID0gZmFsc2U7XG4gICAgfVxuICB9KTtcblxuICBvbkRlc3Ryb3koKCkgPT4ge1xuICAgIHNodXRPZmZDYW1lcmEoKTtcbiAgICB1bnN1YnNjcmliZUNhcHR1cmVkU3RhdGUoKTtcbiAgICB1bnN1YnNjcmliZUZhY2VWYWxpZGF0aW9ucygpO1xuICAgIHVuc3Vic2NyaWJlVmlkZW9EaW1lbnNpb25zKCk7XG4gICAgdW5zdWJzY3JpYmVDbGVhclZpZGVvU3JjKCk7XG4gICAgdW5zdWJzY3JpYmVTZWxlY3RlZFN0cmVhbSgpO1xuICAgIHVuc3Vic2NyaWJlQ2hhbmdlVGFiKCk7XG4gICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICB1bnN1YnNjcmliZUZhY2VBcGkoKTtcbiAgICB1bnN1YnNjcmliZVN3YXBDYW1lcmEoKTtcbiAgICB1bnN1YnNjcmliZVJlYWR5Q2FtZXJhRXZlbnRFbWl0dGVyKCk7XG4gICAgdW5zdWJzY3JpYmVPcmllbnRhdGlvbigpO1xuICAgIHVuTG9ja1NjcmVlbigpO1xuICAgIGludGVydmFsSWQgPSAwO1xuICB9KTtcbjwvc2NyaXB0PlxuXG48IS0tIHN2ZWx0ZS1pZ25vcmUgYTExeS1tZWRpYS1oYXMtY2FwdGlvbiAtLT5cbjxkaXY+XG4gIHsjaWYgJGlzTG9hZGluZ0FQUH1cbiAgICA8c2xvdCBuYW1lPVwib2J0YWluaW5nLXBob3RvLWdpZlwiIGNsYXNzPVwiYmxvY2sgaC1bMTdlbV0gbGc6aC1bMjEuNmVtXSB4bDpoLVszMGVtXVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInRyYW5zbGF0ZS15LTEvMyBtZDp0cmFuc2xhdGUteS0xLzQgeGw6dHJhbnNsYXRlLXktMS8yXCI+XG4gICAgICAgIDxpbWcgc3JjPXtsb2FkaW5nR2lmfSBhbHQ9XCJsb2FkaW5nIGdpZlwiIGNsYXNzPVwibS1hdXRvIGgtWzEwZW1dIGxnOmgtWzEyZW1dXCIgLz5cbiAgICAgICAgeyNpZiAkaXNMb2FkaW5nQVBQfVxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiMnhsOnRleHQtMnhsIGxnOnRleHQtMnhsIHRleHQtbWQgYmxvY2sgcC0yIG0tYXV0byB0ZXh0LWNlbnRlclwiPnskXygnZmFjZUNvbGxlY3Rvci5sb2FkaW5nJyl9PC9zcGFuPlxuICAgICAgICB7L2lmfVxuICAgICAgPC9kaXY+XG4gICAgPC9zbG90PlxuICB7OmVsc2V9XG4gICAgPGRpdiBiaW5kOnRoaXM9e2VuY2xvc2luZ0Rpdn0gY2xhc3M9XCJmbGV4IGZsZXgtY29sIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIG14LWF1dG9cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlXCIgaGlkZGVuPXskY2FtZXJhU3RhdHVzU3RvcmUgIT09IENhbWVyYVN0YXR1c0VudW0uT0t9PlxuICAgICAgICAgIDwhLS0gd2hlbiB1bmlxdWUgZ2V0cyByZXNzaWduZWQgaXQgd2lsbCBnZXQgcmUgcmVuZGVyZWQsIHdoaWNoIHNvbHZlcyB0aGUgJ2NhbWVyYSBub3Qgb3BlbmluZyBpc3N1ZScgLS0+XG4gICAgICAgICAgeyNrZXkgdW5pcXVlfVxuICAgICAgICAgICAgPHZpZGVvXG4gICAgICAgICAgICAgIGlkPVwiYnJ5LWNjLWNhbWVyYS12aWRlby10YWdcIlxuICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIC16LTEwXCJcbiAgICAgICAgICAgICAgYmluZDp0aGlzPXt2aWRlb31cbiAgICAgICAgICAgICAgb246Y2FucGxheT17KCkgPT4ge1xuICAgICAgICAgICAgICAgICR2aWRlb1N0b3JlID0geyB2aWRlb0hlaWdodDogdmlkZW8udmlkZW9IZWlnaHQsIHZpZGVvV2lkdGg6IHZpZGVvLnZpZGVvV2lkdGggfTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgb246cGxheXxvbmNlPXtwbGF5fVxuICAgICAgICAgICAgICBwbGF5c2lubGluZVxuICAgICAgICAgICAgICBtdXRlZFxuICAgICAgICAgICAgICBhdXRvcGxheVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICB7L2tleX1cbiAgICAgICAgICA8Q29uZkJ0biBjbGFzc05hbWU9XCJib3R0b20tMFwiIC8+XG4gICAgICAgICAgPENhbWVyYUJ0biBjbGFzc05hbWU9XCJib3R0b20tMFwiIC8+XG5cbiAgICAgICAgICA8Y2FudmFzIGJpbmQ6dGhpcz17ZGlzcGxheUNhbnZhc30gaWQ9XCJicnktY2UtZGlzcGxheUNhbnZhc1wiIGNsYXNzPVwibWF4LXctZnVsbFwiIC8+XG4gICAgICAgICAgPCEtLSB7L2lmfSAtLT5cbiAgICAgICAgICA8Y2FudmFzXG4gICAgICAgICAgICBiaW5kOnRoaXM9e2RldGVjdGlvbnNDYW52YXN9XG4gICAgICAgICAgICBpZD1cImJyeS1jZS1kZXRlY3Rpb25zQ2FudmFzXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIG1heC13LWZ1bGxcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGNhbnZhcyBiaW5kOnRoaXM9e21hc2tDYW52YXN9IGlkPVwiYnJ5LWNlLW1hc2tDYW52YXNcIiBjbGFzcz1cImFic29sdXRlIHRvcC0wIGxlZnQtMCBtYXgtdy1mdWxsXCIgLz5cbiAgICAgICAgICB7I2lmIGlzQ291bnRpbmdEb3dufVxuICAgICAgICAgIDxkaXYgdHJhbnNpdGlvbjpmYWRlPXt7IGRlbGF5OiAyNTAsIGR1cmF0aW9uOiAzMDAgfX0+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIGxlZnQtMS8yIC10cmFuc2xhdGUteC0xLzIgdG9wLVsxMCVdIGNlLWR1aS1iYWRnZSBjZS1kdWktYmFkZ2UtbGcgaC1bMmVtXSB0ZXh0LTR4bCA0eGw6dGV4dC1iYXNlIHctWzEyLjFlbV1cIlxuICAgICAgICAgICAgICA+eyRfKCdmYWNlQ29sbGVjdG9yLnN0YXlTdGlsbCcpfTwvc3BhblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHsvaWZ9XG4gICAgICAgICAgeyNpZiAkZW5hYmxlRmFjZUFwaSAmJiAhaXNDb3VudGluZ0Rvd24gJiYgZmFjZU5vdFZhbGlkYXRlZH1cbiAgICAgICAgICAgICAgPGRpdiB0cmFuc2l0aW9uOmZhZGU9e3sgZGVsYXk6IDI1MCwgZHVyYXRpb246IDMwMCB9fT5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBsZWZ0LTEvMiAtdHJhbnNsYXRlLXgtMS8yIHRvcC1bMTAlXSBjZS1kdWktYmFkZ2UgY2UtZHVpLWJhZGdlLWxnIGgtWzJlbV0gdGV4dC00eGwgNHhsOnRleHQtYmFzZSB3LVsxMi4xZW1dXCJcbiAgICAgICAgICAgICAgICAgID57JF8oYCR7ZmFjZVZhbGlkYXRpb25BbGVydH1gKX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHsvaWZ9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHgtNCBzbTpweC0wIG10LVsxZW1dXCJcbiAgICAgICAgICBoaWRkZW49eyFzaG93Q2FwdHVyZUJ1dHRvbn1cbiAgICAgICAgPlxuICAgICAgICAgIHsjaWYgISRjYXB0dXJlZH1cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgaWQ9XCJicnktY2MtY2FwdHVyZS1idG5cIlxuICAgICAgICAgICAgICBkaXNhYmxlZD17KCEkZmFjZUZvdW5kICYmICRlbmFibGVGYWNlQXBpKSB8fCAoISRyZWFkeSAmJiAhJGVuYWJsZUZhY2VBcGkpfVxuICAgICAgICAgICAgICBoaWRkZW49eyFzaG93Q2FwdHVyZUJ1dHRvbn1cbiAgICAgICAgICAgICAgY2xhc3M9XCJjZS1kdWktYnRuIGNlLWR1aS1idG4tYmxvY2sgY2UtZHVpLWJ0bi1wcmltYXJ5IHRleHQteGxcIlxuICAgICAgICAgICAgICBvbjpjbGljaz17KCkgPT4gY2FwdHVyZSgpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7I2lmICRpc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgVGFrZSBwaWN0dXJlXG4gICAgICAgICAgICAgIHs6ZWxzZX1cbiAgICAgICAgICAgICAgeyRfKCdmYWNlQ29sbGVjdG9yLnRha2VQaWN0dXJlJyl9XG4gICAgICAgICAgICAgIHsvaWZ9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB7OmVsc2V9XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2UtZHVpLWJ0bi1ncm91cCBmbGV4XCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbjpjbGljaz17KCkgPT4gc2F2ZSgpfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXskanVzdGlmaWNhdGlvbi5sZW5ndGggPT09IDB9XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjZS1kdWktYnRuIGNlLWR1aS1idG4tcHJpbWFyeSBjZS1kdWktYnRuLWJsb2NrIGZsZXgtc2hyaW5rXCI+eyRfKCdmYWNlQ29sbGVjdG9yLmZpbmlzaCcpfTwvYnV0dG9uXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGlkPVwiYnJ5LWNjLXJldGFrZS1idXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2UtZHVpLWJ0biBjZS1kdWktYnRuLWJsb2NrIGNlLWR1aS1idG4tb3V0bGluZSBmbGV4LXNocmlua1wiXG4gICAgICAgICAgICAgICAgb246Y2xpY2s9eygpID0+IHJldGFrZSgpfT57JF8oJ2ZhY2VDb2xsZWN0b3IucmV0YWtlUGhvdG8nKX08L2J1dHRvblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7L2lmfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIHsjaWYgc2hvd1VuY29uZm9ybWl0aWVzICYmICghaWRybmRDbG9zZWQgfHwgJGNhcHR1cmVkKX1cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJncmlkLWNvbHMtMSBncmlkLXJvd3MtMiBzbTpncmlkLWNvbHMtMiBzbTpncmlkLXJvd3MtMSBnYXAtWy41ZW1dIHshJHNob3dGYWNlV2hpbGVWYWxpZGF0aW5nXG4gICAgICAgICAgPyAnYWJzb2x1dGUgLXRyYW5zbGF0ZS15LTEvMiAtdHJhbnNsYXRlLXgtMS8yIHRvcC0xLzIgbGVmdC0xLzIgb3ZlcmZsb3ctdmlzaWJsZSdcbiAgICAgICAgICA6ICdncmlkIG0tWzFlbV0gb3ZlcmZsb3ctaGlkZGVuJ31cIlxuICAgICAgPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgY2xhc3M9XCJtLWF1dG8gY29sLXN0YXJ0LTEgY29sLWVuZC0xIG1heC1oLVsyMy4yZW1dXCJcbiAgICAgICAgICBzcmM9eyRkYXRhVHlwZVByZWZpeCArICcsJyArICRpbWFnZX1cbiAgICAgICAgICBoaWRkZW49eyEkY2FwdHVyZWQgfHwgKCEkc2hvd0ZhY2VXaGlsZVZhbGlkYXRpbmcpfVxuICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgIC8+XG4gICAgICAgIHsjaWYgISRjYXB0dXJlZH1cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgLz5cbiAgICAgICAgezplbHNlIGlmICRyZXF1ZXN0UmVzdWx0ICE9PSByZXF1ZXN0UmVzdWx0RW51bS5PS31cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgPGgxIGNsYXNzPVwidGV4dC0zeGwgZm9udC1ib2xkIHBiLVsxZW1dIHRyYW5zaXRpb24tb3BhY2l0eVwiPnskXygnZmFjZUNvbGxlY3Rvci5ldmVyeXRoaW5nT2snKX08L2gxPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlLWR1aS1idG4tZ3JvdXAgZmxleFwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIG9uOmNsaWNrPXsoKSA9PiBzYXZlKCl9IGRpc2FibGVkIGNsYXNzPVwiY2UtZHVpLWJ0biBjZS1kdWktYnRuLXByaW1hcnkgY2UtZHVpLWJ0bi1ibG9jayBmbGV4LXNocmlua1wiXG4gICAgICAgICAgICAgICAgPnskXygnZmFjZUNvbGxlY3Rvci5maW5pc2gnKX08L2J1dHRvblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImJyeS1jYy1yZXRha2UtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNlLWR1aS1idG4gY2UtZHVpLWJ0bi1ibG9jayBjZS1kdWktYnRuLW91dGxpbmUgZmxleC1zaHJpbmtcIlxuICAgICAgICAgICAgICAgIG9uOmNsaWNrPXsoKSA9PiByZXRha2UoKX0+eyRfKCdmYWNlQ29sbGVjdG9yLnJldGFrZVBob3RvJyl9PC9idXR0b25cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIHs6ZWxzZSBpZiAhJHNhdmVkfVxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8aDEgY2xhc3M9XCJ0ZXh0LTN4bCBmb250LWJvbGQgcGItWzFlbV0gdHJhbnNpdGlvbi1vcGFjaXR5XCI+eyRfKCdmYWNlQ29sbGVjdG9yLnVuY29uZm9ybWl0aWVzJyl9PC9oMT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZS1kdWktZm9ybS1jb250cm9sIG10LVsyLjVlbV1cIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2UtZHVpLWxhYmVsXCIgZm9yPVwianVzdGlmaWNhdGlvblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2UtZHVpLWxhYmVsLXRleHQgdGV4dC1iYXNlXCJcbiAgICAgICAgICAgICAgICAgID57JF8oJ2ZhY2VDb2xsZWN0b3IucHJvdmlkZUFSZWFzb25Gb3JUaGVMb3dRdWFsaXR5Q2FwdHVyZScpfTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgY29udGVudGVkaXRhYmxlXG4gICAgICAgICAgICAgICAgYmluZDp2YWx1ZT17JGp1c3RpZmljYXRpb259XG4gICAgICAgICAgICAgICAgaWQ9XCJqdXN0aWZpY2F0aW9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNlLWR1aS10ZXh0YXJlYSBjZS1kdWktdGV4dGFyZWEtYm9yZGVyZWQgaC1bNmVtXSB0ZXh0LWJhc2VcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXskXygnZmFjZUNvbGxlY3Rvci55b3VySnVzdGlmaWNhdGlvbicpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjZS1kdWktbGFiZWxcIiBmb3I9XCJqdXN0aWZpY2F0aW9uXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZS1kdWktbGFiZWwtdGV4dC1hbHQgdGV4dC1iYXNlXCI+KHskXygnZmFjZUNvbGxlY3Rvci50aGlzSW5mb3JtYXRpb25Jc1JlcXVpcmVkJyl9KTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgeyNpZiAkY2FwdHVyZWR9XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZS1kdWktYnRuLWdyb3VwIGZsZXhcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBvbjpjbGljaz17KCkgPT4gc2F2ZSgpfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyRqdXN0aWZpY2F0aW9uLmxlbmd0aCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2UtZHVpLWJ0biBjZS1kdWktYnRuLXByaW1hcnkgY2UtZHVpLWJ0bi1ibG9jayBmbGV4LXNocmluayB0ZXh0LWJhc2VcIlxuICAgICAgICAgICAgICAgICAgPnskXygnZmFjZUNvbGxlY3Rvci5maW5pc2gnKX08L2J1dHRvblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBpZD1cImJyeS1jYy1yZXRha2UtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2UtZHVpLWJ0biBjZS1kdWktYnRuLWJsb2NrIGNlLWR1aS1idG4tb3V0bGluZSBmbGV4LXNocmluayB0ZXh0LWJhc2VcIlxuICAgICAgICAgICAgICAgICAgb246Y2xpY2s9eygpID0+IHJldGFrZSgpfT57JF8oJ2ZhY2VDb2xsZWN0b3IucmV0YWtlUGhvdG8nKX08L2J1dHRvblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7L2lmfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB7OmVsc2V9XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxoMSBjbGFzcz1cInRleHQtM3hsIGZvbnQtYm9sZCBwYi1bMWVtXSB0cmFuc2l0aW9uLW9wYWNpdHlcIj57JF8oJ2RvY0NvbGxlY3Rvci5jYXB0dXJlZCcpfTwvaDE+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M6Y2UtZHVpLWJ0bi1ncm91cD17ISRleHBvcnRCdXR0b25EaXNhYmxlZH0gY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImJyeS1jYy1yZXRha2UtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNlLWR1aS1idG4gY2UtZHVpLWJ0bi1ibG9jayBmbGV4LXNocmluayB0ZXh0LWJhc2VcIlxuICAgICAgICAgICAgICAgIG9uOmNsaWNrPXsoKSA9PiByZXRha2UoKX0+eyRfKCdmYWNlQ29sbGVjdG9yLnJldGFrZVBob3RvJyl9PC9idXR0b25cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7I2lmIGdldChlbmFibGVTdHJhdGVneSkuZmFjZVN0cmF0ZWd5ICE9PSBGYWNlRXhwb3J0U3RyYXRlZ3kuRElTQUJMRUR9XG4gICAgICAgICAgICAgICAgPEV4cG9ydEJ0biBjc3NDbGFzcz1cImNlLWR1aS1idG4tYmxvY2sgZmxleC1zaHJpbmtcIiAvPlxuICAgICAgICAgICAgICB7L2lmfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIHsvaWZ9XG4gICAgICAgIDwhLS0gPGgxIGhpZGRlbj17ISRjYXB0dXJlZH0gY2xhc3M9XCJ0ZXh0LTN4bCBmb250LWJvbGQgcGItNCB0cmFuc2l0aW9uLWFsbFwiPkV4Y2VsZW50ZSE8L2gxPiAtLT5cbiAgICAgIDwvZGl2PlxuICAgIHs6ZWxzZSBpZiAkY2FtZXJhU3RhdHVzU3RvcmUgIT09IENhbWVyYVN0YXR1c0VudW0uT0t9XG4gICAgICA8Q2FtZXJhU3RhdHVzXG4gICAgICAgIGhhbmRsZXI9eygpID0+IHtcbiAgICAgICAgICBjYXB0dXJpbmcgPSB0cnVlO1xuICAgICAgICB9fVxuICAgICAgLz5cbiAgICB7L2lmfVxuICB7L2lmfVxuPC9kaXY+XG4iXSwibmFtZXMiOlsiY3R4IiwiY3JlYXRlX2lmX2Jsb2NrXzEyIiwiY3JlYXRlX2lmX2Jsb2NrXzExIiwiY3JlYXRlX2lmX2Jsb2NrXzkiLCJDYW1lcmFTdGF0dXNFbnVtIiwiaW5zZXJ0X2RldiIsInRhcmdldCIsImRpdjMiLCJhbmNob3IiLCJhcHBlbmRfZGV2IiwiZGl2MiIsImRpdjAiLCJjYW52YXMwIiwiY2FudmFzMSIsImNhbnZhczIiLCJkaXYxIiwiY3JlYXRlX2lmX2Jsb2NrXzEiLCJsb2FkaW5nR2lmIiwiYXR0cl9kZXYiLCJpbWciLCJpbWdfc3JjX3ZhbHVlIiwic2xvdCIsImRpdiIsInZpZGVvXzEiLCJ0X3ZhbHVlIiwic3BhbiIsImN1cnJlbnQiLCJkaXJ0eSIsInNldF9kYXRhX2RldiIsInQiLCJkaXZfdHJhbnNpdGlvbiIsImNyZWF0ZV9iaWRpcmVjdGlvbmFsX3RyYW5zaXRpb24iLCJmYWRlIiwidDBfdmFsdWUiLCJ0Ml92YWx1ZSIsImJ1dHRvbjAiLCJidXR0b24xIiwidDAiLCJ0MiIsImNyZWF0ZV9pZl9ibG9ja18xMCIsImJ1dHRvbiIsImJ1dHRvbl9kaXNhYmxlZF92YWx1ZSIsInJlcXVlc3RSZXN1bHRFbnVtIiwiaW1nX2hpZGRlbl92YWx1ZSIsInNob3dfaWYiLCJnZXQiLCJlbmFibGVTdHJhdGVneSIsIkZhY2VFeHBvcnRTdHJhdGVneSIsImgxIiwidDZfdmFsdWUiLCJjcmVhdGVfaWZfYmxvY2tfNiIsInRleHRhcmVhIiwidGV4dGFyZWFfcGxhY2Vob2xkZXJfdmFsdWUiLCJsYWJlbDAiLCJzcGFuMCIsImxhYmVsMSIsInNwYW4xIiwidDYiLCJ0NF92YWx1ZSIsInQ0IiwiZHJhd1ZpZGVvT25DYW52YXMiLCJ2aWRlbyIsImRpc3BsYXlDYW52YXMiLCJpc1NhbWVQcm9wb3J0aW9uIiwiZGV0ZWN0aW9uc0NhbnZhcyIsImVuY2xvc2luZ0RpdiIsImlzQ291bnRpbmdEb3duIiwidW5pcXVlIiwibG9hZGVkRmFjZUFwaUFuZFdlaWdodHMiLCJlbmFibGVNaW51dGlhZSIsIiQkcHJvcHMiLCJ2aWRlb0RpbWVuc2lvbnMiLCJub1RhYnMiLCJ3ZWlnaHRzUGF0aCIsInNob3dDYXB0dXJlQnV0dG9uIiwic2hvd1VuY29uZm9ybWl0aWVzIiwidmlkZW9GaWx0ZXIiLCJzdGFydEZhY2VBcGkiLCJ3cml0YWJsZSIsImRhdGFUeXBlUHJlZml4IiwibWFza0NhbnZhcyIsImNhcHR1cmluZyIsImluaXRpYWxpemVkIiwiaWRybmRMb2FkaW5nIiwiaWRybmRDbG9zZWQiLCJpbnRlcnZhbElkIiwiZmFjZWFwaUNvdW50ZXIiLCJmYWNlYXBpRnJhbWVSYXRlIiwicmlnaHRPcmllbnRhdGlvbiIsImNvdW50ZG93bkZpbmlzaFRpbWUiLCJkaXNhYmxlQ291bnREb3duIiwiZmFjZU5vdFZhbGlkYXRlZCIsImZhY2VWYWxpZGF0aW9uQWxlcnQiLCJkb2NMaW1pdHMiLCJ0b2FzdCIsIlN3YWwiLCJvbk1vdW50Iiwic2V0X3N0b3JlX3ZhbHVlIiwiaXNMb2FkaW5nQVBQIiwiJGlzTG9hZGluZ0FQUCIsImxvZyIsInJlYWR5IiwiJHJlYWR5IiwiZmFjZUZvdW5kIiwiJGZhY2VGb3VuZCIsImNhcHR1cmVkIiwiJGNhcHR1cmVkIiwiJGZhY2luZ01vZGUiLCJGYWNpbmdNb2RlRW51bSIsIm9wZW5DYW1lcmEiLCIkZW5hYmxlRmFjZUFwaSIsImxvYWRGYWNlQXBpQW5kV2VpZ2h0cyIsInNldERvY0xpbWl0cyIsInZpZGVvV2lkdGgiLCIkdmlkZW9TdG9yZSIsInZpZGVvSGVpZ2h0IiwiZG9jSGVpZ2h0IiwiZG9jV2lkdGgiLCJkcmF3UmVjdGFuZ2xlIiwicHJpbWFyeVRoZW1lIiwic3VjY2Vzc1RoZW1lIiwidGltZVJlbWFpbmluZyIsInN1bVdpZHRoIiwic3VtSGVpZ2h0IiwiY291bnRkb3duV2lkdGgiLCJjb3VudGRvd25IZWlnaHQiLCJjbGlwUGF0aCIsInJlc2V0Q2FtZXJhIiwiJGNhbWVyYVN0YXR1c1N0b3JlIiwiJCRpbnZhbGlkYXRlIiwicGxheSIsImxvb3BDYWxsZXIiLCIkc2VsZWN0ZWRUYWIiLCJUYWJFbnVtIiwiJHN0YXJ0RmFjZUFwaSIsImNhcHR1cmUiLCJ1bkxvY2tTY3JlZW4iLCIkcmVxdWVzdFJlc3VsdCIsInNhdmVkIiwiJHNhdmVkIiwiY2FudmFzIiwiJGRhdGFUeXBlUHJlZml4IiwiJGltYWdlIiwiJG9yaWdpbmFsQ2FwdHVyZSIsImJvZHlQYXJ0cyIsInNhdmUiLCJmYWNlIiwiJGp1c3RpZmljYXRpb24iLCJyZXRha2UiLCJvcmlnaW5hbENhcHR1cmUiLCJkZXZpY2UiLCJ3aWR0aCIsImhlaWdodCIsInYiLCJ2aWRlb1N0b3JlIiwiZW51bWVyYXRlRGV2aWNlcyIsImRldmljZUlkIiwid2lkdGhDYW1lcmEiLCJoZWlnaHRDYW1lcmEiLCJhc3BlY3RSYXRpb0NhbWVyYSIsImdldFZpZGVvRGltZW5zaW9ucyIsImlzTW9iaWxlIiwiJHNlbGVjdGVkVmlkZW9EZXZpY2VJZCIsIiRjYW1lcmFEZXZpY2VzU3RvcmUiLCJlIiwiZXJyb3IiLCJjb25zdHJhaW50RXJyb3IiLCJpc09iamVjdCIsInVuc3Vic2NyaWJlVmlkZW9EaW1lbnNpb25zIiwic3RvcmVPYmoiLCJ1bnN1YnNjcmliZUZhY2VWYWxpZGF0aW9ucyIsImZhY2VWYWxpZGF0aW9uc1N0b3JlIiwibmV3VmFsdWUiLCJuZXdGYWNlVmFsaWRhdGlvbkFsZXJ0IiwiJGF1dG9tYXRpY0NhcHR1cmUiLCJjb3VudGRvd25JbnRlcnZhbENhbGxiYWNrIiwibm93IiwidW5zdWJzY3JpYmVDYXB0dXJlZFN0YXRlIiwidW5zdWJzY3JpYmVDbGVhclZpZGVvU3JjIiwiY2xlYXJlZFZpZGVvU3JjT2JqZWN0Iiwic2VsZWN0ZWRUYWIiLCJ0YWIiLCJ1bnN1YnNjcmliZVNlbGVjdGVkU3RyZWFtIiwic2VsZWN0ZWRWaWRlb0RldmljZUlkIiwibmV3RGV2aWNlSWQiLCJzdHJlYW0iLCJzZXR1cFN0cmVhbSIsIl9zdHJlYW0iLCIkX3N0cmVhbSIsIiRjbGVhcmVkVmlkZW9TcmNPYmplY3QiLCJzaHV0T2ZmQ2FtZXJhIiwidW5zdWJzY3JpYmVDaGFuZ2VUYWIiLCJ1bnN1YnNjcmliZUZhY2VBcGkiLCJmYWNlYXBpTG9vcCIsInVuc3Vic2NyaWJlUmVhZHlDYW1lcmFFdmVudEVtaXR0ZXIiLCJudiIsInVuc3Vic2NyaWJlU3dhcENhbWVyYSIsInN3YXBDYW1lcmEiLCJuZXdEZXZpY2UiLCJ1bnN1YnNjcmliZU9yaWVudGF0aW9uIiwib3JpZW50YXRpb25EYXRhIiwiZGF0YSIsImRldGVjdGlvbnNSZXN1bHQiLCJvcHRpb25zIiwiZ2V0RmFjZURldGVjdG9yT3B0aW9ucyIsImZhY2VhcGkiLCJkZXRlY3Rpb25zUmVzdWx0MiIsImRyYXdEZXRlY3Rpb25zSW5GYWNlIiwicmV0YWtlUGhvdG8iLCIkcmV0YWtlUGhvdG8iLCJvbkRlc3Ryb3kiLCIkJHZhbHVlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7SUEybEJnQkEsRUFBTSxDQUFBO0FBQUE7Ozs7Ozs7Ozs7SUF5QlBBLEVBQWMsQ0FBQSxLQUFBQyxHQUFBRCxDQUFBO0FBQUE7O0lBUWRBLEVBQWMsRUFBQSxLQUFBO0FBQUEsSUFBS0EsRUFBYyxDQUFBO0FBQUEsSUFBSUEsRUFBZ0IsRUFBQSxLQUFBRSxHQUFBRixDQUFBO0FBQUE7Ozs7TUFZcERBLEVBQVMsRUFBQSxTQUFBRztBQUFBO0FBQUE7Ozs7OztNQStCaEJILEVBQWtCLENBQUEsTUFBQTtBQUFBLE1BQU1BLEVBQVcsRUFBQTtBQUFBLE1BQUlBLEVBQVMsRUFBQSxLQUFBO0FBQUE7QUFBQSxRQWtGM0NBLEVBQWtCLEVBQUEsTUFBS0ksR0FBaUIsS0FBRTs7Ozs7Ozs7TUFoS2xCSixFQUFrQixFQUFBLE1BQUtJLEdBQWlCO01BNkMzREosRUFBaUIsQ0FBQTs7O0FBL0NoQyxNQUFBSyxFQStFS0MsR0FBQUMsR0FBQUMsQ0FBQSxHQTlFSEMsRUE2RUtGLEdBQUFHLENBQUEsR0E1RUhELEVBMkNLQyxHQUFBQyxDQUFBLDRFQXhCSEYsRUFBZ0ZFLEdBQUFDLENBQUEsc0JBRWhGSCxFQUlDRSxHQUFBRSxDQUFBLHNCQUNESixFQUFnR0UsR0FBQUcsQ0FBQSw4RUFrQmxHTCxFQStCS0MsR0FBQUssQ0FBQTs7Ozs7TUF6RUdmLEVBQU0s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QUVBLENBQUEsR0FDM0JyRCxnQkFHRm1CLElBQXFCNUgsR0FBaUIsOEJBQTRCNEgsQ0FBQSxHQUNsRThEOztpQkFJV0csS0FBVztRQUNwQlM7QUFDQSxRQUFBcEgsTUFBa0JDLElBQWdCO0FBQ3BDLE1BQUFELEtBQWlCO0FBQ1gsWUFBQXFILFVBQWdCQyxNQUVoQkMsaUJBQXVCLG1DQUFzQjtVQUMvQ0M7QUFDSixNQUFBQSxJQUFvQkQsRUFBUSxpQkFBaUIvSSxHQUFlNkksQ0FBTyxHQUNuRUQsSUFBZ0IsTUFBU0ksRUFBa0IscUJBRTNDOUksRUFBaUIsV0FBVyxJQUFJLEdBQUcsVUFBVSxHQUFHLEdBQUdBLEVBQWlCLE9BQU9BLEVBQWlCLE1BQU07QUFBQTtBQUVsRyxNQUFBc0I7SUFHRW9ILEtBQ0ZLLEdBQXFCTCxHQUFrQjFJLEdBQWtCSyxHQUFnQixFQUFJLEdBRTNFaUUsS0FDRkgsR0FBV3RFLEdBQU9vSSxFQUFXO0FBQUE7QUFJakMsRUFBQWUsR0FBWSxVQUFTLE9BQVFiLE1BQUU7SUFDekJBLE1BQ0YvQyxNQUNBbkQsRUFBQStHLElBQUFDLElBQWUsSUFBS0EsQ0FBQTtBQUFBLE1BSXhCQyxHQUFTLE1BQUE7QUFDUCxJQUFBcEIsTUFDQWIsTUFDQVAsTUFDQUYsTUFDQVUsTUFDQUksTUFDQVMsTUFDQSxjQUFjMUcsRUFBVSxHQUN4QjJHLE1BQ0FJLE1BQ0FGLE1BQ0FLLE1BQ0EvRCxNQUNBbkQsS0FBYTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztBQXdCUSxNQUFBeEIsSUFBS3NKOzs7Ozs7TUFFZGpHLElBQVc7QUFBQSxRQUFLLGFBQWFyRCxFQUFNO0FBQUEsUUFBYSxZQUFZQSxFQUFNO0FBQUE7Ozs7OztBQVdyRCxNQUFBQyxJQUFhcUo7Ozs7O0FBR25CLE1BQUFuSixJQUFnQm1KOzs7OztBQUlWLE1BQUFuSSxLQUFVbUk7OzttQkEyQlQ1RSxpQkFXRVUsaUJBT0FHOzs7QUF6RVosTUFBQW5GLElBQVlrSjs7O21CQWtHTWxFLGlCQU1ORzs7QUFlSixJQUFBRCxJQUFjLEtBQUE7O21CQVlSRixpQkFRQUcsaUJBYUZBO0FBYXRCLElBQUFuQixFQUFBLElBQUFoRCxLQUFZLEVBQUk7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsifQ==