bry-biometric-collector 2.2.7-RC01 → 2.2.8-RC01

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