bry-biometric-collector 2.2.3-RC01 → 2.2.4

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,2040 +0,0 @@
1
- import { S as Zn, r as xn, t as xi, w as $n, x as B, y as Re, z as oe, C as $i, B as U, D as F, E as mt, G as D, H as qe, I as et, J as Fe, K as Zt, L as Ne, M as bt, _ as Dt, N as xt, O as $t, P as Be, Q as He, R as pe, T as ht, U as _t, V as Se, W as ei, X as ti, Y as tt, Z as gt, $ as ii, a0 as ni, a1 as it, a2 as Lt, a3 as At, a4 as Nt, a5 as Bt, a6 as oi, a7 as ai, a8 as si, a9 as eo, aa as Bi, ab as Mi, ac as Wi, ad as _, ae as pt, af as Ui, ag as vt, ah as se, ai as wt, aj as kt, A as li, ak as Mt, al as Ct, am as Vi, an as yt, ao as ci, ap as Ki, f as Et, aq as Wt, ar as ji, as as Ut, at as qi, au as Hi, av as ze, aw as zi, ax as ri, l as Rt, ay as ui, az as to, aA as io, aB as en, aC as tn, aD as nn, aE as Xi, aF as Qi, aG as Ji, aH as ki, aI as no, aJ as p, aK as K, aL as Vt, aM as de, aN as d, aO as v, aP as u, aQ as Kt, aR as Xe, aS as on, aT as De, aU as an, aV as Le, aW as W, aX as jt, aY as nt, aZ as fi, a_ as ve, a$ as zt, b0 as N, b1 as z, b2 as qt, b3 as Gi, b4 as Yi, b5 as Ht, b6 as oo } from "./main_be9d4a67_2.2.3-RC01.js";
2
- import { C as te, a as sn, c as fe, b as ln } from "./CameraBtn_a4ff405d_2.2.3-RC01.js";
3
- const { console: Ie } = no, w = "src/lib/faceTab/FaceCollector.svelte";
4
- function Zi(n, e, i) {
5
- const o = n.slice();
6
- return o[107] = e[i], o;
7
- }
8
- function cn(n) {
9
- let e;
10
- const i = {
11
- c: function() {
12
- e = p("idlive-face-capture"), e.hidden = !0, fi(e, "mask_hidden", ""), fi(e, "auto_capture_disabled", ""), fi(e, "auto_close_disabled", ""), v(e, w, 783, 10, 31732);
13
- },
14
- m: function(s, a) {
15
- B(s, e, a), n[45](e);
16
- },
17
- p: de,
18
- d: function(s) {
19
- s && W(e), n[45](null);
20
- }
21
- };
22
- return U("SvelteRegisterBlock", {
23
- block: i,
24
- id: cn.name,
25
- type: "if",
26
- source: "(783:8) {#if isLivenessEnabled()}",
27
- ctx: n
28
- }), i;
29
- }
30
- function mi(n) {
31
- let e, i, o;
32
- const s = {
33
- c: function() {
34
- e = p("video"), d(e, "id", "bry-cc-camera-video-tag"), d(e, "class", "absolute -z-10"), e.playsInline = !0, e.muted = !0, e.autoplay = !0, v(e, w, 793, 10, 32073);
35
- },
36
- m: function(l, c) {
37
- B(l, e, c), n[46](e), i || (o = [
38
- ve(
39
- e,
40
- "canplay",
41
- /*canplay_handler*/
42
- n[47],
43
- !1,
44
- !1,
45
- !1,
46
- !1
47
- ),
48
- ve(
49
- e,
50
- "play",
51
- /*play*/
52
- n[3],
53
- { once: !0 },
54
- !1,
55
- !1,
56
- !1
57
- )
58
- ], i = !0);
59
- },
60
- p: de,
61
- d: function(l) {
62
- l && W(e), n[46](null), i = !1, zt(o);
63
- }
64
- };
65
- return U("SvelteRegisterBlock", {
66
- block: s,
67
- id: mi.name,
68
- type: "key",
69
- source: "(793:8) {#key unique}",
70
- ctx: n
71
- }), s;
72
- }
73
- function bi(n) {
74
- let e, i = (
75
- /*$_*/
76
- n[28]("faceCollector.stayStill") + ""
77
- ), o;
78
- const s = {
79
- c: function() {
80
- e = p("span"), o = N(i), d(e, "class", "absolute left-1/2 -translate-x-1/2 top-[5%] ce-dui-badge ce-dui-badge-lg h-[2em] text-base base:text-base w-[12.1em]"), v(e, w, 821, 10, 33206);
81
- },
82
- m: function(l, c) {
83
- B(l, e, c), u(e, o);
84
- },
85
- p: function(l, c) {
86
- c[0] & /*$_*/
87
- 268435456 && i !== (i = /*$_*/
88
- l[28]("faceCollector.stayStill") + "") && z(o, i);
89
- },
90
- d: function(l) {
91
- l && W(e);
92
- }
93
- };
94
- return U("SvelteRegisterBlock", {
95
- block: s,
96
- id: bi.name,
97
- type: "if",
98
- source: "(821:8) {#if isCountingDown}",
99
- ctx: n
100
- }), s;
101
- }
102
- function hi(n) {
103
- let e, i = (
104
- /*$_*/
105
- n[28](`${/*faceValidationAlert*/
106
- n[16]}`) + ""
107
- ), o;
108
- const s = {
109
- c: function() {
110
- e = p("span"), o = N(i), d(e, "class", "absolute left-1/2 -translate-x-1/2 top-[5%] ce-dui-badge ce-dui-badge-lg h-[2em] text-base base:text-base w-[12.1em]"), v(e, w, 827, 10, 33518);
111
- },
112
- m: function(l, c) {
113
- B(l, e, c), u(e, o);
114
- },
115
- p: function(l, c) {
116
- c[0] & /*$_, faceValidationAlert*/
117
- 268500992 && i !== (i = /*$_*/
118
- l[28](`${/*faceValidationAlert*/
119
- l[16]}`) + "") && z(o, i);
120
- },
121
- d: function(l) {
122
- l && W(e);
123
- }
124
- };
125
- return U("SvelteRegisterBlock", {
126
- block: s,
127
- id: hi.name,
128
- type: "if",
129
- source: "(827:8) {#if $enableFaceApi && !isCountingDown && $faceFound && faceNotValidated}",
130
- ctx: n
131
- }), s;
132
- }
133
- function _i(n) {
134
- let e, i, o, s, a;
135
- function l(m, f) {
136
- return (
137
- /*$isLoading*/
138
- m[30] ? un : rn
139
- );
140
- }
141
- let c = l(n), r = c(n);
142
- const b = {
143
- c: function() {
144
- e = p("slot"), i = p("div"), o = p("img"), a = K(), r.c(), qt(o.src, s = ki) || d(o, "src", s), d(o, "alt", "loading gif"), d(o, "class", "m-auto h-[10em] lg:h-[12em]"), v(o, w, 836, 12, 33991), d(i, "class", "translate-y-1/3 md:translate-y-1/4 xl:translate-y-1/2"), v(i, w, 835, 10, 33911), d(e, "name", "obtaining-photo-gif"), d(e, "class", "block h-[17em] lg:h-[21.6em] xl:h-[30em]"), v(e, w, 834, 8, 33818);
145
- },
146
- m: function(f, R) {
147
- B(f, e, R), u(e, i), u(i, o), u(i, a), r.m(i, null);
148
- },
149
- p: function(f, R) {
150
- c === (c = l(f)) && r ? r.p(f, R) : (r.d(1), r = c(f), r && (r.c(), r.m(i, null)));
151
- },
152
- d: function(f) {
153
- f && W(e), r.d();
154
- }
155
- };
156
- return U("SvelteRegisterBlock", {
157
- block: b,
158
- id: _i.name,
159
- type: "if",
160
- source: "(834:6) {#if isLivenessEnabled() && waitingIdrndCaptureEvent}",
161
- ctx: n
162
- }), b;
163
- }
164
- function rn(n) {
165
- let e, i = (
166
- /*$_*/
167
- n[28]("faceCollector.obtainingPicture") + ""
168
- ), o;
169
- const s = {
170
- c: function() {
171
- e = p("span"), o = N(i), d(e, "class", "2xl:text-2xl lg:text-2xl text-md block p-2 m-auto text-center"), v(e, w, 840, 14, 34249);
172
- },
173
- m: function(l, c) {
174
- B(l, e, c), u(e, o);
175
- },
176
- p: function(l, c) {
177
- c[0] & /*$_*/
178
- 268435456 && i !== (i = /*$_*/
179
- l[28]("faceCollector.obtainingPicture") + "") && z(o, i);
180
- },
181
- d: function(l) {
182
- l && W(e);
183
- }
184
- };
185
- return U("SvelteRegisterBlock", {
186
- block: s,
187
- id: rn.name,
188
- type: "else",
189
- source: "(840:12) {:else}",
190
- ctx: n
191
- }), s;
192
- }
193
- function un(n) {
194
- let e;
195
- const i = {
196
- c: function() {
197
- e = p("span"), e.textContent = "Obtaining photo...", d(e, "class", "2xl:text-2xl lg:text-2xl text-md block p-2 m-auto text-center"), v(e, w, 838, 14, 34113);
198
- },
199
- m: function(s, a) {
200
- B(s, e, a);
201
- },
202
- p: de,
203
- d: function(s) {
204
- s && W(e);
205
- }
206
- };
207
- return U("SvelteRegisterBlock", {
208
- block: i,
209
- id: un.name,
210
- type: "if",
211
- source: "(838:12) {#if $isLoading}",
212
- ctx: n
213
- }), i;
214
- }
215
- function gi(n) {
216
- let e, i, o, s, a;
217
- function l(m, f) {
218
- return (
219
- /*$isLoading*/
220
- m[30] ? dn : fn
221
- );
222
- }
223
- let c = l(n), r = c(n);
224
- const b = {
225
- c: function() {
226
- e = p("slot"), i = p("div"), o = p("img"), a = K(), r.c(), qt(o.src, s = ki) || d(o, "src", s), d(o, "alt", "loading gif"), d(o, "class", "m-auto h-[10em] lg:h-[12em]"), v(o, w, 850, 12, 34740), d(i, "class", "translate-y-1/3 md:translate-y-1/4 xl:translate-y-1/2"), v(i, w, 849, 10, 34660), d(e, "name", "loading-camera-gif"), d(e, "class", "block h-[17em] lg:h-[21.6em] xl:h-[30em]"), v(e, w, 848, 8, 34568);
227
- },
228
- m: function(f, R) {
229
- B(f, e, R), u(e, i), u(i, o), u(i, a), r.m(i, null);
230
- },
231
- p: function(f, R) {
232
- c === (c = l(f)) && r ? r.p(f, R) : (r.d(1), r = c(f), r && (r.c(), r.m(i, null)));
233
- },
234
- d: function(f) {
235
- f && W(e), r.d();
236
- }
237
- };
238
- return U("SvelteRegisterBlock", {
239
- block: b,
240
- id: gi.name,
241
- type: "if",
242
- source: "(848:6) {#if isLivenessEnabled() && idrndLoading && $cameraStatusStore === CameraStatusEnum.OK}",
243
- ctx: n
244
- }), b;
245
- }
246
- function fn(n) {
247
- let e, i = (
248
- /*$_*/
249
- n[28]("faceCollector.initiatingCamera") + ""
250
- ), o;
251
- const s = {
252
- c: function() {
253
- e = p("span"), o = N(i), d(e, "class", "2xl:text-2xl lg:text-2xl text-md block p-2 m-auto text-center"), v(e, w, 854, 14, 34997);
254
- },
255
- m: function(l, c) {
256
- B(l, e, c), u(e, o);
257
- },
258
- p: function(l, c) {
259
- c[0] & /*$_*/
260
- 268435456 && i !== (i = /*$_*/
261
- l[28]("faceCollector.initiatingCamera") + "") && z(o, i);
262
- },
263
- d: function(l) {
264
- l && W(e);
265
- }
266
- };
267
- return U("SvelteRegisterBlock", {
268
- block: s,
269
- id: fn.name,
270
- type: "else",
271
- source: "(854:12) {:else}",
272
- ctx: n
273
- }), s;
274
- }
275
- function dn(n) {
276
- let e;
277
- const i = {
278
- c: function() {
279
- e = p("span"), e.textContent = "Loading camera...", d(e, "class", "2xl:text-2xl lg:text-2xl text-md block p-2 m-auto text-center"), v(e, w, 852, 14, 34862);
280
- },
281
- m: function(s, a) {
282
- B(s, e, a);
283
- },
284
- p: de,
285
- d: function(s) {
286
- s && W(e);
287
- }
288
- };
289
- return U("SvelteRegisterBlock", {
290
- block: i,
291
- id: dn.name,
292
- type: "if",
293
- source: "(852:12) {#if $isLoading}",
294
- ctx: n
295
- }), i;
296
- }
297
- function mn(n) {
298
- let e, i, o = (
299
- /*$_*/
300
- n[28]("faceCollector.finish") + ""
301
- ), s, a, l, c, r = (
302
- /*$_*/
303
- n[28]("faceCollector.retakePhoto") + ""
304
- ), b, m, f;
305
- const R = {
306
- c: function() {
307
- e = p("div"), i = p("button"), s = N(o), l = K(), c = p("button"), b = N(r), i.disabled = a = /*$justification*/
308
- n[23].length === 0, d(i, "class", "ce-dui-btn ce-dui-btn-primary ce-dui-btn-block flex-shrink"), v(i, w, 881, 12, 35959), d(c, "id", "bry-cc-retake-button"), d(c, "class", "ce-dui-btn ce-dui-btn-block ce-dui-btn-outline flex-shrink"), v(c, w, 886, 12, 36202), d(e, "class", "ce-dui-btn-group flex"), v(e, w, 880, 10, 35911);
309
- },
310
- m: function(C, h) {
311
- B(C, e, h), u(e, i), u(i, s), u(e, l), u(e, c), u(c, b), m || (f = [
312
- ve(
313
- i,
314
- "click",
315
- /*click_handler_1*/
316
- n[52],
317
- !1,
318
- !1,
319
- !1,
320
- !1
321
- ),
322
- ve(
323
- c,
324
- "click",
325
- /*click_handler_2*/
326
- n[53],
327
- !1,
328
- !1,
329
- !1,
330
- !1
331
- )
332
- ], m = !0);
333
- },
334
- p: function(C, h) {
335
- h[0] & /*$_*/
336
- 268435456 && o !== (o = /*$_*/
337
- C[28]("faceCollector.finish") + "") && z(s, o), h[0] & /*$justification*/
338
- 8388608 && a !== (a = /*$justification*/
339
- C[23].length === 0) && Xe(i, "disabled", a), h[0] & /*$_*/
340
- 268435456 && r !== (r = /*$_*/
341
- C[28]("faceCollector.retakePhoto") + "") && z(b, r);
342
- },
343
- d: function(C) {
344
- C && W(e), m = !1, zt(f);
345
- }
346
- };
347
- return U("SvelteRegisterBlock", {
348
- block: R,
349
- id: mn.name,
350
- type: "else",
351
- source: "(880:8) {:else}",
352
- ctx: n
353
- }), R;
354
- }
355
- function bn(n) {
356
- let e, i, o, s, a;
357
- function l(m, f) {
358
- return (
359
- /*$isLoading*/
360
- m[30] ? _n : hn
361
- );
362
- }
363
- let c = l(n), r = c(n);
364
- const b = {
365
- c: function() {
366
- e = p("button"), r.c(), d(e, "id", "bry-cc-capture-btn"), e.disabled = i = !/*$faceFound*/
367
- n[29] && /*$enableFaceApi*/
368
- n[26] || !/*$ready*/
369
- n[27] && !/*$enableFaceApi*/
370
- n[26], e.hidden = o = !/*showCaptureButton*/
371
- n[1], d(e, "class", "ce-dui-btn ce-dui-btn-block ce-dui-btn-primary text-xl"), v(e, w, 866, 10, 35426);
372
- },
373
- m: function(f, R) {
374
- B(f, e, R), r.m(e, null), s || (a = ve(
375
- e,
376
- "click",
377
- /*click_handler*/
378
- n[51],
379
- !1,
380
- !1,
381
- !1,
382
- !1
383
- ), s = !0);
384
- },
385
- p: function(f, R) {
386
- c === (c = l(f)) && r ? r.p(f, R) : (r.d(1), r = c(f), r && (r.c(), r.m(e, null))), R[0] & /*$faceFound, $enableFaceApi, $ready*/
387
- 738197504 && i !== (i = !/*$faceFound*/
388
- f[29] && /*$enableFaceApi*/
389
- f[26] || !/*$ready*/
390
- f[27] && !/*$enableFaceApi*/
391
- f[26]) && Xe(e, "disabled", i), R[0] & /*showCaptureButton*/
392
- 2 && o !== (o = !/*showCaptureButton*/
393
- f[1]) && Xe(e, "hidden", o);
394
- },
395
- d: function(f) {
396
- f && W(e), r.d(), s = !1, a();
397
- }
398
- };
399
- return U("SvelteRegisterBlock", {
400
- block: b,
401
- id: bn.name,
402
- type: "if",
403
- source: "(866:8) {#if !$captured}",
404
- ctx: n
405
- }), b;
406
- }
407
- function hn(n) {
408
- let e = (
409
- /*$_*/
410
- n[28]("faceCollector.takePicture") + ""
411
- ), i;
412
- const o = {
413
- c: function() {
414
- i = N(e);
415
- },
416
- m: function(a, l) {
417
- B(a, i, l);
418
- },
419
- p: function(a, l) {
420
- l[0] & /*$_*/
421
- 268435456 && e !== (e = /*$_*/
422
- a[28]("faceCollector.takePicture") + "") && z(i, e);
423
- },
424
- d: function(a) {
425
- a && W(i);
426
- }
427
- };
428
- return U("SvelteRegisterBlock", {
429
- block: o,
430
- id: hn.name,
431
- type: "else",
432
- source: "(876:12) {:else}",
433
- ctx: n
434
- }), o;
435
- }
436
- function _n(n) {
437
- let e;
438
- const i = {
439
- c: function() {
440
- e = N("Take picture");
441
- },
442
- m: function(s, a) {
443
- B(s, e, a);
444
- },
445
- p: de,
446
- d: function(s) {
447
- s && W(e);
448
- }
449
- };
450
- return U("SvelteRegisterBlock", {
451
- block: i,
452
- id: _n.name,
453
- type: "if",
454
- source: "(874:12) {#if $isLoading}",
455
- ctx: n
456
- }), i;
457
- }
458
- function gn(n) {
459
- let e, i;
460
- e = new ln({
461
- props: { handler: (
462
- /*func*/
463
- n[62]
464
- ) },
465
- $$inline: !0
466
- });
467
- const o = {
468
- c: function() {
469
- Vt(e.$$.fragment);
470
- },
471
- m: function(a, l) {
472
- Kt(e, a, l), i = !0;
473
- },
474
- p: de,
475
- i: function(a) {
476
- i || (Le(e.$$.fragment, a), i = !0);
477
- },
478
- o: function(a) {
479
- De(e.$$.fragment, a), i = !1;
480
- },
481
- d: function(a) {
482
- jt(e, a);
483
- }
484
- };
485
- return U("SvelteRegisterBlock", {
486
- block: o,
487
- id: gn.name,
488
- type: "if",
489
- source: "(1021:55) ",
490
- ctx: n
491
- }), o;
492
- }
493
- function pn(n) {
494
- let e, i, o, s, a, l, c, r, b;
495
- const m = [
496
- yn,
497
- Cn,
498
- kn,
499
- wn,
500
- vn
501
- ], f = [];
502
- function R(C, h) {
503
- return (
504
- /*$captured*/
505
- C[19] ? (
506
- /*$unconformitiesStore*/
507
- C[20].isLoading ? 1 : (
508
- /*$requestResult*/
509
- C[21] !== se.OK ? 2 : (
510
- /*$saved*/
511
- C[22] ? 4 : 3
512
- )
513
- )
514
- ) : 0
515
- );
516
- }
517
- l = R(n), c = f[l] = m[l](n);
518
- const O = {
519
- c: function() {
520
- e = p("div"), i = p("img"), a = K(), c.c(), d(i, "class", "m-auto col-start-1 col-end-1 max-h-[23.2em]"), qt(i.src, o = /*$dataTypePrefix*/
521
- n[25] + "," + /*$image*/
522
- n[24]) || d(i, "src", o), i.hidden = s = !/*$captured*/
523
- n[19] || !/*$showFaceWhileValidating*/
524
- n[31] && /*$unconformitiesStore*/
525
- n[20].isLoading, d(i, "alt", ""), v(i, w, 903, 6, 36847), d(e, "class", r = "grid-cols-1 grid-rows-2 sm:grid-cols-2 sm:grid-rows-1 gap-[.5em] " + (!/*$showFaceWhileValidating*/
526
- n[31] && /*$unconformitiesStore*/
527
- n[20].isLoading ? "absolute -translate-y-1/2 -translate-x-1/2 top-1/2 left-1/2 overflow-visible" : "grid m-[1em] overflow-hidden")), v(e, w, 897, 4, 36553);
528
- },
529
- m: function(h, E) {
530
- B(h, e, E), u(e, i), u(e, a), f[l].m(e, null), b = !0;
531
- },
532
- p: function(h, E) {
533
- (!b || E[0] & /*$dataTypePrefix, $image*/
534
- 50331648 && !qt(i.src, o = /*$dataTypePrefix*/
535
- h[25] + "," + /*$image*/
536
- h[24])) && d(i, "src", o), (!b || E[0] & /*$captured, $unconformitiesStore*/
537
- 1572864 | E[1] & /*$showFaceWhileValidating*/
538
- 1 && s !== (s = !/*$captured*/
539
- h[19] || !/*$showFaceWhileValidating*/
540
- h[31] && /*$unconformitiesStore*/
541
- h[20].isLoading)) && Xe(i, "hidden", s);
542
- let g = l;
543
- l = R(h), l === g ? f[l].p(h, E) : (on(), De(f[g], 1, 1, () => {
544
- f[g] = null;
545
- }), an(), c = f[l], c ? c.p(h, E) : (c = f[l] = m[l](h), c.c()), Le(c, 1), c.m(e, null)), (!b || E[0] & /*$unconformitiesStore*/
546
- 1048576 | E[1] & /*$showFaceWhileValidating*/
547
- 1 && r !== (r = "grid-cols-1 grid-rows-2 sm:grid-cols-2 sm:grid-rows-1 gap-[.5em] " + (!/*$showFaceWhileValidating*/
548
- h[31] && /*$unconformitiesStore*/
549
- h[20].isLoading ? "absolute -translate-y-1/2 -translate-x-1/2 top-1/2 left-1/2 overflow-visible" : "grid m-[1em] overflow-hidden"))) && d(e, "class", r);
550
- },
551
- i: function(h) {
552
- b || (Le(c), b = !0);
553
- },
554
- o: function(h) {
555
- De(c), b = !1;
556
- },
557
- d: function(h) {
558
- h && W(e), f[l].d();
559
- }
560
- };
561
- return U("SvelteRegisterBlock", {
562
- block: O,
563
- id: pn.name,
564
- type: "if",
565
- source: "(897:2) {#if (!idrndClosed || $captured) && showUnconformities}",
566
- ctx: n
567
- }), O;
568
- }
569
- function vn(n) {
570
- let e, i, o = (
571
- /*$_*/
572
- n[28]("faceCollector.captured") + ""
573
- ), s, a, l, c, r, b = (
574
- /*$_*/
575
- n[28]("faceCollector.retakePhoto") + ""
576
- ), m, f, R = Rt(nn).faceStrategy !== en.DISABLED, O, C, h, E = (
577
- /*$unconformitiesStore*/
578
- n[20].unconformities.length !== 0 && pi(n)
579
- ), g = R && En(n);
580
- const L = {
581
- c: function() {
582
- e = p("div"), i = p("h1"), s = N(o), a = K(), E && E.c(), l = K(), c = p("div"), r = p("button"), m = N(b), f = K(), g && g.c(), d(i, "class", "text-3xl font-bold pb-[1em] transition-opacity"), v(i, w, 993, 10, 41264), d(r, "id", "bry-cc-retake-button"), d(r, "class", "ce-dui-btn ce-dui-btn-block flex-shrink text-base"), v(r, w, 1007, 12, 41965), d(c, "class", "flex flex-row"), Yi(c, "ce-dui-btn-group", !/*$exportButtonDisabled*/
583
- n[32]), v(c, w, 1006, 10, 41877), v(e, w, 992, 8, 41248);
584
- },
585
- m: function(S, Y) {
586
- B(S, e, Y), u(e, i), u(i, s), u(e, a), E && E.m(e, null), u(e, l), u(e, c), u(c, r), u(r, m), u(c, f), g && g.m(c, null), O = !0, C || (h = ve(
587
- r,
588
- "click",
589
- /*click_handler_7*/
590
- n[61],
591
- !1,
592
- !1,
593
- !1,
594
- !1
595
- ), C = !0);
596
- },
597
- p: function(S, Y) {
598
- (!O || Y[0] & /*$_*/
599
- 268435456) && o !== (o = /*$_*/
600
- S[28]("faceCollector.captured") + "") && z(s, o), /*$unconformitiesStore*/
601
- S[20].unconformities.length !== 0 ? E ? E.p(S, Y) : (E = pi(S), E.c(), E.m(e, l)) : E && (E.d(1), E = null), (!O || Y[0] & /*$_*/
602
- 268435456) && b !== (b = /*$_*/
603
- S[28]("faceCollector.retakePhoto") + "") && z(m, b), (!O || Y[1] & /*$exportButtonDisabled*/
604
- 2) && Yi(c, "ce-dui-btn-group", !/*$exportButtonDisabled*/
605
- S[32]);
606
- },
607
- i: function(S) {
608
- O || (Le(g), O = !0);
609
- },
610
- o: function(S) {
611
- De(g), O = !1;
612
- },
613
- d: function(S) {
614
- S && W(e), E && E.d(), g && g.d(), C = !1, h();
615
- }
616
- };
617
- return U("SvelteRegisterBlock", {
618
- block: L,
619
- id: vn.name,
620
- type: "else",
621
- source: "(992:6) {:else}",
622
- ctx: n
623
- }), L;
624
- }
625
- function wn(n) {
626
- let e, i, o = (
627
- /*$_*/
628
- n[28]("faceCollector.unconformities") + ""
629
- ), s, a, l, c, r, b, m, f = (
630
- /*$_*/
631
- n[28]("faceCollector.provideAReasonForTheLowQualityCapture") + ""
632
- ), R, O, C, h, E, g, L, q, S = (
633
- /*$_*/
634
- n[28]("faceCollector.thisInformationIsRequired") + ""
635
- ), Y, ye, he, me, we, X = (
636
- /*$unconformitiesStore*/
637
- n[20].unconformities
638
- );
639
- Gi(X);
640
- let Q = [];
641
- for (let j = 0; j < X.length; j += 1)
642
- Q[j] = vi(Zi(n, X, j));
643
- let x = (
644
- /*$captured*/
645
- n[19] && wi(n)
646
- );
647
- const J = {
648
- c: function() {
649
- e = p("div"), i = p("h1"), s = N(o), a = K(), l = p("div");
650
- for (let M = 0; M < Q.length; M += 1)
651
- Q[M].c();
652
- c = K(), r = p("div"), b = p("label"), m = p("span"), R = N(f), O = K(), C = p("textarea"), E = K(), g = p("label"), L = p("span"), q = N("("), Y = N(S), ye = N(")"), he = K(), x && x.c(), d(i, "class", "text-3xl font-bold pb-[1em] transition-opacity"), v(i, w, 950, 10, 39355), d(l, "class", "flex flex-wrap"), v(l, w, 951, 10, 39466), d(m, "class", "ce-dui-label-text text-base"), v(m, w, 960, 14, 39898), d(b, "class", "ce-dui-label"), d(b, "for", "justification"), v(b, w, 959, 12, 39835), d(C, "contenteditable", ""), d(C, "id", "justification"), d(C, "class", "ce-dui-textarea ce-dui-textarea-bordered h-[6em] text-base"), d(C, "placeholder", h = /*$_*/
653
- n[28]("faceCollector.yourJustification")), v(C, w, 964, 12, 40072), d(L, "class", "ce-dui-label-text-alt text-base"), v(L, w, 972, 14, 40424), d(g, "class", "ce-dui-label"), d(g, "for", "justification"), v(g, w, 971, 12, 40361), d(r, "class", "ce-dui-form-control mt-[2.5em]"), v(r, w, 958, 10, 39778), v(e, w, 949, 8, 39339);
654
- },
655
- m: function(M, G) {
656
- B(M, e, G), u(e, i), u(i, s), u(e, a), u(e, l);
657
- for (let V = 0; V < Q.length; V += 1)
658
- Q[V] && Q[V].m(l, null);
659
- u(e, c), u(e, r), u(r, b), u(b, m), u(m, R), u(r, O), u(r, C), Ht(
660
- C,
661
- /*$justification*/
662
- n[23]
663
- ), u(r, E), u(r, g), u(g, L), u(L, q), u(L, Y), u(L, ye), u(e, he), x && x.m(e, null), me || (we = ve(
664
- C,
665
- "input",
666
- /*textarea_input_handler*/
667
- n[57]
668
- ), me = !0);
669
- },
670
- p: function(M, G) {
671
- if (G[0] & /*$_*/
672
- 268435456 && o !== (o = /*$_*/
673
- M[28]("faceCollector.unconformities") + "") && z(s, o), G[0] & /*$unconformitiesStore*/
674
- 1048576) {
675
- X = /*$unconformitiesStore*/
676
- M[20].unconformities, Gi(X);
677
- let V;
678
- for (V = 0; V < X.length; V += 1) {
679
- const $ = Zi(M, X, V);
680
- Q[V] ? Q[V].p($, G) : (Q[V] = vi($), Q[V].c(), Q[V].m(l, null));
681
- }
682
- for (; V < Q.length; V += 1)
683
- Q[V].d(1);
684
- Q.length = X.length;
685
- }
686
- G[0] & /*$_*/
687
- 268435456 && f !== (f = /*$_*/
688
- M[28]("faceCollector.provideAReasonForTheLowQualityCapture") + "") && z(R, f), G[0] & /*$_*/
689
- 268435456 && h !== (h = /*$_*/
690
- M[28]("faceCollector.yourJustification")) && d(C, "placeholder", h), G[0] & /*$justification*/
691
- 8388608 && Ht(
692
- C,
693
- /*$justification*/
694
- M[23]
695
- ), G[0] & /*$_*/
696
- 268435456 && S !== (S = /*$_*/
697
- M[28]("faceCollector.thisInformationIsRequired") + "") && z(Y, S), /*$captured*/
698
- M[19] ? x ? x.p(M, G) : (x = wi(M), x.c(), x.m(e, null)) : x && (x.d(1), x = null);
699
- },
700
- i: de,
701
- o: de,
702
- d: function(M) {
703
- M && W(e), oo(Q, M), x && x.d(), me = !1, we();
704
- }
705
- };
706
- return U("SvelteRegisterBlock", {
707
- block: J,
708
- id: wn.name,
709
- type: "if",
710
- source: "(949:24) ",
711
- ctx: n
712
- }), J;
713
- }
714
- function kn(n) {
715
- let e, i, o, s, a = (
716
- /*$_*/
717
- n[28]("faceCollector.finish") + ""
718
- ), l, c, r, b = (
719
- /*$_*/
720
- n[28]("faceCollector.retakePhoto") + ""
721
- ), m, f, R;
722
- function O(g, L) {
723
- return (
724
- /*$requestResult*/
725
- g[21] === se.LIVENESS_DETECTION_FAILURE || /*$requestResult*/
726
- g[21] === se.UNKNOWN_LIVENESS_ERROR ? Tn : (
727
- /*$requestResult*/
728
- g[21] === se.LOW_LIVENESS_SCORE ? Pn : (
729
- /*$requestResult*/
730
- g[21] === se.TEMPLATE_EXTRACTION_ERROR || /*$requestResult*/
731
- g[21] === se.UNKNOWN_TEMPLATE_EXTRACTION_ERROR ? In : (
732
- /*$requestResult*/
733
- g[21] === se.UNABLE_TO_COMMUNICATE_WITH_TEMPLATE_EXTRACTION_SERVICE ? Sn : Rn
734
- )
735
- )
736
- )
737
- );
738
- }
739
- let C = O(n), h = C(n);
740
- const E = {
741
- c: function() {
742
- e = p("div"), h.c(), i = K(), o = p("div"), s = p("button"), l = N(a), c = K(), r = p("button"), m = N(b), s.disabled = !0, d(s, "class", "ce-dui-btn ce-dui-btn-primary ce-dui-btn-block flex-shrink"), v(s, w, 938, 12, 38863), d(r, "id", "bry-cc-retake-button"), d(r, "class", "ce-dui-btn ce-dui-btn-block ce-dui-btn-outline flex-shrink"), v(r, w, 941, 12, 39049), d(o, "class", "ce-dui-btn-group flex"), v(o, w, 937, 10, 38815), d(e, "class", "flex flex-col justify-between"), v(e, w, 917, 8, 37461);
743
- },
744
- m: function(L, q) {
745
- B(L, e, q), h.m(e, null), u(e, i), u(e, o), u(o, s), u(s, l), u(o, c), u(o, r), u(r, m), f || (R = [
746
- ve(
747
- s,
748
- "click",
749
- /*click_handler_3*/
750
- n[55],
751
- !1,
752
- !1,
753
- !1,
754
- !1
755
- ),
756
- ve(
757
- r,
758
- "click",
759
- /*click_handler_4*/
760
- n[56],
761
- !1,
762
- !1,
763
- !1,
764
- !1
765
- )
766
- ], f = !0);
767
- },
768
- p: function(L, q) {
769
- C === (C = O(L)) && h ? h.p(L, q) : (h.d(1), h = C(L), h && (h.c(), h.m(e, i))), q[0] & /*$_*/
770
- 268435456 && a !== (a = /*$_*/
771
- L[28]("faceCollector.finish") + "") && z(l, a), q[0] & /*$_*/
772
- 268435456 && b !== (b = /*$_*/
773
- L[28]("faceCollector.retakePhoto") + "") && z(m, b);
774
- },
775
- i: de,
776
- o: de,
777
- d: function(L) {
778
- L && W(e), h.d(), f = !1, zt(R);
779
- }
780
- };
781
- return U("SvelteRegisterBlock", {
782
- block: E,
783
- id: kn.name,
784
- type: "if",
785
- source: "(917:56) ",
786
- ctx: n
787
- }), E;
788
- }
789
- function Cn(n) {
790
- let e, i, o = (
791
- /*$_*/
792
- n[28]("faceCollector.validating") + ""
793
- ), s, a, l;
794
- const c = {
795
- c: function() {
796
- e = p("div"), i = p("h1"), s = N(o), a = K(), l = p("div"), d(i, "class", "inline-block text-3xl font-bold pb-[1em] transition-opacity"), v(i, w, 913, 10, 37216), d(l, "class", "ml-6 inline-block dot-typing"), v(l, w, 914, 10, 37336), d(e, "class", "min-w-[200px]"), v(e, w, 912, 8, 37178);
797
- },
798
- m: function(b, m) {
799
- B(b, e, m), u(e, i), u(i, s), u(e, a), u(e, l);
800
- },
801
- p: function(b, m) {
802
- m[0] & /*$_*/
803
- 268435456 && o !== (o = /*$_*/
804
- b[28]("faceCollector.validating") + "") && z(s, o);
805
- },
806
- i: de,
807
- o: de,
808
- d: function(b) {
809
- b && W(e);
810
- }
811
- };
812
- return U("SvelteRegisterBlock", {
813
- block: c,
814
- id: Cn.name,
815
- type: "if",
816
- source: "(912:47) ",
817
- ctx: n
818
- }), c;
819
- }
820
- function yn(n) {
821
- let e;
822
- const i = {
823
- c: function() {
824
- e = p("div"), d(e, "class", ""), v(e, w, 910, 8, 37105);
825
- },
826
- m: function(s, a) {
827
- B(s, e, a);
828
- },
829
- p: de,
830
- i: de,
831
- o: de,
832
- d: function(s) {
833
- s && W(e);
834
- }
835
- };
836
- return U("SvelteRegisterBlock", {
837
- block: i,
838
- id: yn.name,
839
- type: "if",
840
- source: "(910:6) {#if !$captured}",
841
- ctx: n
842
- }), i;
843
- }
844
- function pi(n) {
845
- let e, i, o = (
846
- /*$_*/
847
- n[28]("faceCollector.justification") + ""
848
- ), s, a, l, c, r;
849
- const b = {
850
- c: function() {
851
- e = p("label"), i = p("span"), s = N(o), a = K(), l = p("textarea"), d(i, "class", "ce-dui-label-text text-base"), v(i, w, 997, 14, 41500), d(e, "class", "ce-dui-label"), d(e, "for", "justification"), v(e, w, 996, 12, 41437), d(l, "contenteditable", ""), d(l, "id", "justification"), d(l, "class", "ce-dui-textarea ce-dui-textarea-bordered textarea-ghost h-[6em] w-full text-base"), v(l, w, 999, 12, 41618);
852
- },
853
- m: function(f, R) {
854
- B(f, e, R), u(e, i), u(i, s), B(f, a, R), B(f, l, R), Ht(
855
- l,
856
- /*$justification*/
857
- n[23]
858
- ), c || (r = ve(
859
- l,
860
- "input",
861
- /*textarea_input_handler_1*/
862
- n[60]
863
- ), c = !0);
864
- },
865
- p: function(f, R) {
866
- R[0] & /*$_*/
867
- 268435456 && o !== (o = /*$_*/
868
- f[28]("faceCollector.justification") + "") && z(s, o), R[0] & /*$justification*/
869
- 8388608 && Ht(
870
- l,
871
- /*$justification*/
872
- f[23]
873
- );
874
- },
875
- d: function(f) {
876
- f && W(e), f && W(a), f && W(l), c = !1, r();
877
- }
878
- };
879
- return U("SvelteRegisterBlock", {
880
- block: b,
881
- id: pi.name,
882
- type: "if",
883
- source: "(996:10) {#if $unconformitiesStore.unconformities.length !== 0}",
884
- ctx: n
885
- }), b;
886
- }
887
- function En(n) {
888
- let e, i;
889
- e = new tn({
890
- props: { cssClass: "ce-dui-btn-block flex-shrink" },
891
- $$inline: !0
892
- });
893
- const o = {
894
- c: function() {
895
- Vt(e.$$.fragment);
896
- },
897
- m: function(a, l) {
898
- Kt(e, a, l), i = !0;
899
- },
900
- i: function(a) {
901
- i || (Le(e.$$.fragment, a), i = !0);
902
- },
903
- o: function(a) {
904
- De(e.$$.fragment, a), i = !1;
905
- },
906
- d: function(a) {
907
- jt(e, a);
908
- }
909
- };
910
- return U("SvelteRegisterBlock", {
911
- block: o,
912
- id: En.name,
913
- type: "if",
914
- source: "(1013:12) {#if get(enableStrategy).faceStrategy !== FaceExportStrategy.DISABLED}",
915
- ctx: n
916
- }), o;
917
- }
918
- function vi(n) {
919
- let e, i = (
920
- /*unconformity*/
921
- n[107] + ""
922
- ), o, s;
923
- const a = {
924
- c: function() {
925
- e = p("div"), o = N(i), s = K(), d(e, "class", "ce-dui-badge ce-dui-badge-lg h-[2em] ce-dui-badge-error text-xl pb-[.25em] m-[.5em]"), v(e, w, 953, 14, 39581);
926
- },
927
- m: function(c, r) {
928
- B(c, e, r), u(e, o), u(e, s);
929
- },
930
- p: function(c, r) {
931
- r[0] & /*$unconformitiesStore*/
932
- 1048576 && i !== (i = /*unconformity*/
933
- c[107] + "") && z(o, i);
934
- },
935
- d: function(c) {
936
- c && W(e);
937
- }
938
- };
939
- return U("SvelteRegisterBlock", {
940
- block: a,
941
- id: vi.name,
942
- type: "each",
943
- source: "(953:12) {#each $unconformitiesStore.unconformities as unconformity}",
944
- ctx: n
945
- }), a;
946
- }
947
- function wi(n) {
948
- let e, i, o = (
949
- /*$_*/
950
- n[28]("faceCollector.finish") + ""
951
- ), s, a, l, c, r = (
952
- /*$_*/
953
- n[28]("faceCollector.retakePhoto") + ""
954
- ), b, m, f;
955
- const R = {
956
- c: function() {
957
- e = p("div"), i = p("button"), s = N(o), l = K(), c = p("button"), b = N(r), i.disabled = a = /*$justification*/
958
- n[23].length === 0, d(i, "class", "ce-dui-btn ce-dui-btn-primary ce-dui-btn-block flex-shrink text-base"), v(i, w, 977, 14, 40653), d(c, "id", "bry-cc-retake-button"), d(c, "class", "ce-dui-btn ce-dui-btn-block ce-dui-btn-outline flex-shrink text-base"), v(c, w, 983, 14, 40933), d(e, "class", "ce-dui-btn-group flex"), v(e, w, 976, 12, 40603);
959
- },
960
- m: function(C, h) {
961
- B(C, e, h), u(e, i), u(i, s), u(e, l), u(e, c), u(c, b), m || (f = [
962
- ve(
963
- i,
964
- "click",
965
- /*click_handler_5*/
966
- n[58],
967
- !1,
968
- !1,
969
- !1,
970
- !1
971
- ),
972
- ve(
973
- c,
974
- "click",
975
- /*click_handler_6*/
976
- n[59],
977
- !1,
978
- !1,
979
- !1,
980
- !1
981
- )
982
- ], m = !0);
983
- },
984
- p: function(C, h) {
985
- h[0] & /*$_*/
986
- 268435456 && o !== (o = /*$_*/
987
- C[28]("faceCollector.finish") + "") && z(s, o), h[0] & /*$justification*/
988
- 8388608 && a !== (a = /*$justification*/
989
- C[23].length === 0) && Xe(i, "disabled", a), h[0] & /*$_*/
990
- 268435456 && r !== (r = /*$_*/
991
- C[28]("faceCollector.retakePhoto") + "") && z(b, r);
992
- },
993
- d: function(C) {
994
- C && W(e), m = !1, zt(f);
995
- }
996
- };
997
- return U("SvelteRegisterBlock", {
998
- block: R,
999
- id: wi.name,
1000
- type: "if",
1001
- source: "(976:10) {#if $captured}",
1002
- ctx: n
1003
- }), R;
1004
- }
1005
- function Rn(n) {
1006
- let e, i = (
1007
- /*$_*/
1008
- n[28]("faceCollector.everythingOk") + ""
1009
- ), o;
1010
- const s = {
1011
- c: function() {
1012
- e = p("h1"), o = N(i), d(e, "class", "text-3xl font-bold pb-[1em] transition-opacity"), v(e, w, 935, 12, 38690);
1013
- },
1014
- m: function(l, c) {
1015
- B(l, e, c), u(e, o);
1016
- },
1017
- p: function(l, c) {
1018
- c[0] & /*$_*/
1019
- 268435456 && i !== (i = /*$_*/
1020
- l[28]("faceCollector.everythingOk") + "") && z(o, i);
1021
- },
1022
- d: function(l) {
1023
- l && W(e);
1024
- }
1025
- };
1026
- return U("SvelteRegisterBlock", {
1027
- block: s,
1028
- id: Rn.name,
1029
- type: "else",
1030
- source: "(935:10) {:else}",
1031
- ctx: n
1032
- }), s;
1033
- }
1034
- function Sn(n) {
1035
- let e, i = (
1036
- /*$_*/
1037
- n[28]("faceCollector.unableToCompleteRequest") + ""
1038
- ), o;
1039
- const s = {
1040
- c: function() {
1041
- e = p("h1"), o = N(i), d(e, "class", "text-3xl font-bold pb-[1em] transition-opacity text-error"), v(e, w, 931, 12, 38511);
1042
- },
1043
- m: function(l, c) {
1044
- B(l, e, c), u(e, o);
1045
- },
1046
- p: function(l, c) {
1047
- c[0] & /*$_*/
1048
- 268435456 && i !== (i = /*$_*/
1049
- l[28]("faceCollector.unableToCompleteRequest") + "") && z(o, i);
1050
- },
1051
- d: function(l) {
1052
- l && W(e);
1053
- }
1054
- };
1055
- return U("SvelteRegisterBlock", {
1056
- block: s,
1057
- id: Sn.name,
1058
- type: "if",
1059
- source: "(931:112) ",
1060
- ctx: n
1061
- }), s;
1062
- }
1063
- function In(n) {
1064
- let e, i = (
1065
- /*$_*/
1066
- n[28]("faceCollector.lowQualityCapture") + ""
1067
- ), o;
1068
- const s = {
1069
- c: function() {
1070
- e = p("h1"), o = N(i), d(e, "class", "text-3xl font-bold pb-[1em] transition-opacity text-error"), v(e, w, 927, 12, 38243);
1071
- },
1072
- m: function(l, c) {
1073
- B(l, e, c), u(e, o);
1074
- },
1075
- p: function(l, c) {
1076
- c[0] & /*$_*/
1077
- 268435456 && i !== (i = /*$_*/
1078
- l[28]("faceCollector.lowQualityCapture") + "") && z(o, i);
1079
- },
1080
- d: function(l) {
1081
- l && W(e);
1082
- }
1083
- };
1084
- return U("SvelteRegisterBlock", {
1085
- block: s,
1086
- id: In.name,
1087
- type: "if",
1088
- source: "(927:157) ",
1089
- ctx: n
1090
- }), s;
1091
- }
1092
- function Pn(n) {
1093
- let e, i = (
1094
- /*$_*/
1095
- n[28]("liveness.error.error") + ""
1096
- ), o, s, a = (
1097
- /*$_*/
1098
- n[28]("faceCollector.unaliveCapture") + ""
1099
- ), l;
1100
- const c = {
1101
- c: function() {
1102
- e = p("h1"), o = N(i), s = N(": "), l = N(a), d(e, "class", "text-3xl font-bold pb-[1em] transition-opacity text-error"), v(e, w, 923, 12, 37903);
1103
- },
1104
- m: function(b, m) {
1105
- B(b, e, m), u(e, o), u(e, s), u(e, l);
1106
- },
1107
- p: function(b, m) {
1108
- m[0] & /*$_*/
1109
- 268435456 && i !== (i = /*$_*/
1110
- b[28]("liveness.error.error") + "") && z(o, i), m[0] & /*$_*/
1111
- 268435456 && a !== (a = /*$_*/
1112
- b[28]("faceCollector.unaliveCapture") + "") && z(l, a);
1113
- },
1114
- d: function(b) {
1115
- b && W(e);
1116
- }
1117
- };
1118
- return U("SvelteRegisterBlock", {
1119
- block: c,
1120
- id: Pn.name,
1121
- type: "if",
1122
- source: "(923:76) ",
1123
- ctx: n
1124
- }), c;
1125
- }
1126
- function Tn(n) {
1127
- let e, i = (
1128
- /*$_*/
1129
- n[28]("liveness.error.error") + ""
1130
- ), o, s, a = (
1131
- /*$_*/
1132
- n[28](
1133
- /*livenessError*/
1134
- n[14]
1135
- ) + ""
1136
- ), l, c;
1137
- const r = {
1138
- c: function() {
1139
- e = p("h1"), o = N(i), s = N(": "), l = N(a), c = N("."), d(e, "class", "text-3xl font-bold pb-[1em] transition-opacity text-error"), v(e, w, 919, 12, 37660);
1140
- },
1141
- m: function(m, f) {
1142
- B(m, e, f), u(e, o), u(e, s), u(e, l), u(e, c);
1143
- },
1144
- p: function(m, f) {
1145
- f[0] & /*$_*/
1146
- 268435456 && i !== (i = /*$_*/
1147
- m[28]("liveness.error.error") + "") && z(o, i), f[0] & /*$_, livenessError*/
1148
- 268451840 && a !== (a = /*$_*/
1149
- m[28](
1150
- /*livenessError*/
1151
- m[14]
1152
- ) + "") && z(l, a);
1153
- },
1154
- d: function(m) {
1155
- m && W(e);
1156
- }
1157
- };
1158
- return U("SvelteRegisterBlock", {
1159
- block: r,
1160
- id: Tn.name,
1161
- type: "if",
1162
- source: "(919:10) {#if $requestResult === requestResultEnum.LIVENESS_DETECTION_FAILURE || $requestResult === requestResultEnum.UNKNOWN_LIVENESS_ERROR}",
1163
- ctx: n
1164
- }), r;
1165
- }
1166
- function On(n) {
1167
- let e, i, o, s, a = oe(), l, c = (
1168
- /*unique*/
1169
- n[8]
1170
- ), r, b, m, f, R, O, C, h, E, g, L, q, S, Y, ye = oe() && /*waitingIdrndCaptureEvent*/
1171
- n[13], he, me = oe() && /*idrndLoading*/
1172
- n[11] && /*$cameraStatusStore*/
1173
- n[17] === te.OK, we, X, Q, x, J, j, M, G = a && cn(n), V = mi(n);
1174
- b = new $i({
1175
- props: { className: "bottom-0" },
1176
- $$inline: !0
1177
- }), f = new sn({
1178
- props: { className: "bottom-0" },
1179
- $$inline: !0
1180
- });
1181
- let $ = (
1182
- /*isCountingDown*/
1183
- n[7] && bi(n)
1184
- ), le = (
1185
- /*$enableFaceApi*/
1186
- n[26] && !/*isCountingDown*/
1187
- n[7] && /*$faceFound*/
1188
- n[29] && /*faceNotValidated*/
1189
- n[15] && hi(n)
1190
- ), ue = ye && _i(n), be = me && gi(n);
1191
- function T(ie, k) {
1192
- return (
1193
- /*$captured*/
1194
- ie[19] ? mn : bn
1195
- );
1196
- }
1197
- let ae = T(n), ee = ae(n);
1198
- const ke = [pn, gn], _e = [];
1199
- function Me(ie, k) {
1200
- return (!/*idrndClosed*/
1201
- ie[12] || /*$captured*/
1202
- ie[19]) && /*showUnconformities*/
1203
- ie[2] ? 0 : (
1204
- /*$cameraStatusStore*/
1205
- ie[17] !== te.OK ? 1 : -1
1206
- );
1207
- }
1208
- ~(J = Me(n)) && (j = _e[J] = ke[J](n));
1209
- const Pe = {
1210
- c: function() {
1211
- e = p("div"), i = p("div"), o = p("div"), s = p("div"), G && G.c(), l = K(), V.c(), r = K(), Vt(b.$$.fragment), m = K(), Vt(f.$$.fragment), R = K(), O = p("canvas"), C = K(), h = p("canvas"), E = K(), g = p("canvas"), L = K(), $ && $.c(), q = K(), le && le.c(), Y = K(), ue && ue.c(), he = K(), be && be.c(), we = K(), X = p("div"), ee.c(), x = K(), j && j.c(), this.c = de, d(O, "id", "bry-ce-displayCanvas"), d(O, "class", "max-w-full -scale-x-100"), v(O, w, 812, 8, 32761), d(h, "id", "bry-ce-detectionsCanvas"), d(h, "class", "absolute top-0 left-0 max-w-full -scale-x-100"), v(h, w, 814, 8, 32887), d(g, "id", "bry-ce-maskCanvas"), d(g, "class", "absolute top-0 left-0 max-w-full -scale-x-100"), v(g, w, 819, 8, 33056), d(s, "class", "relative"), s.hidden = S = /*$cameraStatusStore*/
1212
- n[17] !== te.OK || oe() && /*idrndLoading*/
1213
- (n[11] || /*idrndClosed*/
1214
- n[12] || /*waitingIdrndCaptureEvent*/
1215
- n[13]), v(s, w, 777, 6, 31494), d(X, "class", "px-4 sm:px-0 mt-[1em]"), X.hidden = Q = !/*showCaptureButton*/
1216
- n[1] || oe() && /*idrndLoading*/
1217
- (n[11] || /*idrndClosed*/
1218
- n[12] || /*waitingIdrndCaptureEvent*/
1219
- n[13]), v(X, w, 861, 6, 35220), d(o, "class", "relative mx-auto"), v(o, w, 776, 4, 31457), d(i, "class", "flex flex-col justify-between"), v(i, w, 775, 2, 31384), v(e, w, 771, 0, 31149);
1220
- },
1221
- l: function(k) {
1222
- throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
1223
- },
1224
- m: function(k, Z) {
1225
- B(k, e, Z), u(e, i), u(i, o), u(o, s), G && G.m(s, null), u(s, l), V.m(s, null), u(s, r), Kt(b, s, null), u(s, m), Kt(f, s, null), u(s, R), u(s, O), n[48](O), u(s, C), u(s, h), n[49](h), u(s, E), u(s, g), n[50](g), u(s, L), $ && $.m(s, null), u(s, q), le && le.m(s, null), u(o, Y), ue && ue.m(o, null), u(o, he), be && be.m(o, null), u(o, we), u(o, X), ee.m(X, null), n[54](i), u(e, x), ~J && _e[J].m(e, null), M = !0;
1226
- },
1227
- p: function(k, Z) {
1228
- a && G.p(k, Z), Z[0] & /*unique*/
1229
- 256 && xi(c, c = /*unique*/
1230
- k[8]) ? (V.d(1), V = mi(k), V.c(), V.m(s, r)) : V.p(k, Z), /*isCountingDown*/
1231
- k[7] ? $ ? $.p(k, Z) : ($ = bi(k), $.c(), $.m(s, q)) : $ && ($.d(1), $ = null), /*$enableFaceApi*/
1232
- k[26] && !/*isCountingDown*/
1233
- k[7] && /*$faceFound*/
1234
- k[29] && /*faceNotValidated*/
1235
- k[15] ? le ? le.p(k, Z) : (le = hi(k), le.c(), le.m(s, null)) : le && (le.d(1), le = null), (!M || Z[0] & /*$cameraStatusStore, idrndLoading, idrndClosed, waitingIdrndCaptureEvent*/
1236
- 145408 && S !== (S = /*$cameraStatusStore*/
1237
- k[17] !== te.OK || oe() && /*idrndLoading*/
1238
- (k[11] || /*idrndClosed*/
1239
- k[12] || /*waitingIdrndCaptureEvent*/
1240
- k[13]))) && Xe(s, "hidden", S), Z[0] & /*waitingIdrndCaptureEvent*/
1241
- 8192 && (ye = oe() && /*waitingIdrndCaptureEvent*/
1242
- k[13]), ye ? ue ? ue.p(k, Z) : (ue = _i(k), ue.c(), ue.m(o, he)) : ue && (ue.d(1), ue = null), Z[0] & /*idrndLoading, $cameraStatusStore*/
1243
- 133120 && (me = oe() && /*idrndLoading*/
1244
- k[11] && /*$cameraStatusStore*/
1245
- k[17] === te.OK), me ? be ? be.p(k, Z) : (be = gi(k), be.c(), be.m(o, we)) : be && (be.d(1), be = null), ae === (ae = T(k)) && ee ? ee.p(k, Z) : (ee.d(1), ee = ae(k), ee && (ee.c(), ee.m(X, null))), (!M || Z[0] & /*showCaptureButton, idrndLoading, idrndClosed, waitingIdrndCaptureEvent*/
1246
- 14338 && Q !== (Q = !/*showCaptureButton*/
1247
- k[1] || oe() && /*idrndLoading*/
1248
- (k[11] || /*idrndClosed*/
1249
- k[12] || /*waitingIdrndCaptureEvent*/
1250
- k[13]))) && Xe(X, "hidden", Q);
1251
- let ge = J;
1252
- J = Me(k), J === ge ? ~J && _e[J].p(k, Z) : (j && (on(), De(_e[ge], 1, 1, () => {
1253
- _e[ge] = null;
1254
- }), an()), ~J ? (j = _e[J], j ? j.p(k, Z) : (j = _e[J] = ke[J](k), j.c()), Le(j, 1), j.m(e, null)) : j = null);
1255
- },
1256
- i: function(k) {
1257
- M || (Le(b.$$.fragment, k), Le(f.$$.fragment, k), Le(j), M = !0);
1258
- },
1259
- o: function(k) {
1260
- De(b.$$.fragment, k), De(f.$$.fragment, k), De(j), M = !1;
1261
- },
1262
- d: function(k) {
1263
- k && W(e), G && G.d(), V.d(k), jt(b), jt(f), n[48](null), n[49](null), n[50](null), $ && $.d(), le && le.d(), ue && ue.d(), be && be.d(), ee.d(), n[54](null), ~J && _e[J].d();
1264
- }
1265
- };
1266
- return U("SvelteRegisterBlock", {
1267
- block: Pe,
1268
- id: On.name,
1269
- type: "component",
1270
- source: "",
1271
- ctx: n
1272
- }), Pe;
1273
- }
1274
- function di(n, e, i) {
1275
- const o = e.videoHeight >= e.videoWidth && i.height >= i.width || e.videoHeight < e.videoWidth && i.height < i.width;
1276
- n.drawImage(
1277
- e,
1278
- o ? 0 : e.videoWidth / 2 - i.width,
1279
- 0,
1280
- o ? e.videoWidth : e.videoHeight * (i.width / i.height),
1281
- e.videoHeight,
1282
- 0,
1283
- 0,
1284
- i.width,
1285
- i.height
1286
- );
1287
- }
1288
- function ao(n, e, i) {
1289
- let o, s, a, l, c, r, b, m, f, R, O, C, h, E, g, L, q, S, Y, ye, he, me, we, X, Q, x, J, j, M, G, V, $, le;
1290
- F(mt, "retakePhoto"), D(n, mt, (t) => i(71, o = t)), F(fe, "cameraStatusStore"), D(n, fe, (t) => i(17, a = t)), F(qe, "facingMode"), D(n, qe, (t) => i(73, l = t)), F(et, "selectedVideoDeviceId"), D(n, et, (t) => i(74, c = t)), F(Fe, "videoStore"), D(n, Fe, (t) => i(18, r = t)), F(Zt, "cameraDevicesStore"), D(n, Zt, (t) => i(75, b = t)), F(Ne, "captured"), D(n, Ne, (t) => i(19, m = t)), F(bt, "clearedVideoSrcObject"), D(n, bt, (t) => i(76, f = t)), F(Dt, "_stream"), D(n, Dt, (t) => i(77, R = t)), F(xt, "automaticCapture"), D(n, xt, (t) => i(78, O = t)), F($t, "showLivenessResultToast"), D(n, $t, (t) => i(79, C = t)), F(Be, "unconformitiesStore"), D(n, Be, (t) => i(20, h = t)), F(He, "originalCapture"), D(n, He, (t) => i(80, E = t)), F(pe, "requestResult"), D(n, pe, (t) => i(21, g = t)), F(ht, "saved"), D(n, ht, (t) => i(22, L = t)), F(_t, "justification"), D(n, _t, (t) => i(23, q = t)), F(Se, "image"), D(n, Se, (t) => i(24, S = t)), F(ei, "boxStore"), D(n, ei, (t) => i(81, ye = t)), F(ti, "enableFaceApi"), D(n, ti, (t) => i(26, he = t)), F(tt, "ready"), D(n, tt, (t) => i(27, me = t)), F(gt, "selectedTab"), D(n, gt, (t) => i(82, we = t)), F(ii, "_"), D(n, ii, (t) => i(28, X = t)), F(ni, "captureLivenessIdrndEndpoint"), D(n, ni, (t) => i(83, Q = t)), F(it, "blob"), D(n, it, (t) => i(84, x = t)), F(Lt, "idrndInitialized"), D(n, Lt, (t) => i(85, J = t)), F(At, "idrndVideoStoreDimensions"), D(n, At, (t) => i(86, j = t)), F(Nt, "ovalDimensions"), D(n, Nt, (t) => i(87, M = t)), F(Bt, "faceFound"), D(n, Bt, (t) => i(29, G = t)), F(oi, "isLoading"), D(n, oi, (t) => i(30, V = t)), F(ai, "showFaceWhileValidating"), D(n, ai, (t) => i(31, $ = t)), F(si, "exportButtonDisabled"), D(n, si, (t) => i(32, le = t));
1291
- let { $$slots: ue = {}, $$scope: be } = e;
1292
- eo("face-collector", ue, []);
1293
- let T, ae, ee, ke = !1, _e = {}, Me = !1, { enableMinutiae: Pe } = e, { videoDimensions: ie } = e, { noTabs: k } = e, { weightsPath: Z } = e, { evaluatePhoto: ge } = e, { showCaptureButton: ot } = e, { showUnconformities: at } = e, { videoFilter: Ae } = e;
1294
- const Qe = ui(!1);
1295
- F(Qe, "startFaceApi"), D(n, Qe, (t) => i(72, s = t));
1296
- const We = ui("data:image/png;base64");
1297
- F(We, "dataTypePrefix"), D(n, We, (t) => i(25, Y = t));
1298
- let { widgetInstance: ce } = e, Te, H, Ue = !1, st = !1, Je = !0, Ee = !0, Ge = !1, St = 0, Ce = "", lt = 0, Xt = 5, It = 3e3, ct = !0, rt = 0, ut = !1, Ve = !1, Ye = "";
1299
- const Pt = Bi.mixin({
1300
- toast: !0,
1301
- position: "bottom-left",
1302
- timer: 13e3,
1303
- timerProgressBar: !0
1304
- });
1305
- Mi(async () => {
1306
- Wi("Mounting Face Collector!"), _(tt, me = !1, me), _(Bt, G = !1, G), _(Ne, m = !1, m), _(qe, l = pt.FRONT_CAMERA, l), oe() && (import("./index-no-detector_acb82d83_2.2.3-RC01.js"), Ci()), he && (await Ui(Z), Me = !0), await Oe();
1307
- });
1308
- function Tt(t, y) {
1309
- t.clearRect(0, 0, H.width, H.height), t.save(), Ae == "blur" ? (t.filter = `blur(${y.width / 60}px)`, t.rect(0, 0, H.width, H.height)) : Ae != "none" ? (t.fillStyle = Ae, t.fillRect(0, 0, H.width, H.height)) : (t.beginPath(), t.rect(0, 0, H.width, H.height));
1310
- const P = H.height * 0.65, I = P / 1.45, A = r.videoWidth / 2, ne = r.videoHeight * 0.51;
1311
- _(Nt, M.width = I, M), t.ellipse(A, ne, I / 2, P / 2, 0, 0, 2 * Math.PI, !0), t.clip(), di(t, y, H), t.restore(), t.save(), t.beginPath();
1312
- const xe = window.getComputedStyle(H).getPropertyValue("--p"), $e = window.getComputedStyle(H).getPropertyValue("--su");
1313
- if (t.strokeStyle = `hsl(${xe})`, t.lineWidth = 16, t.ellipse(A, ne, I / 2, P / 2, 0, 0, 2 * Math.PI), t.stroke(), ke && !ut) {
1314
- const dt = 1 - (rt - (/* @__PURE__ */ new Date()).getTime()) / It;
1315
- t.save(), t.beginPath(), t.lineWidth = 16, t.strokeStyle = `hsl(${$e})`, t.ellipse(A, ne, I / 2, P / 2, 0, 0 - Math.PI / 2, 1.5 * (Math.PI * 2 * dt) - Math.PI / 2), t.stroke();
1316
- }
1317
- t.beginPath();
1318
- const re = new Path2D();
1319
- re.ellipse(A, ne, I / 2, P / 2, 0, 0, 2 * Math.PI), t.clip(re), di(t, y, H), t.restore();
1320
- }
1321
- function Ci() {
1322
- ce.addEventListener("open", (t) => {
1323
- const y = t.detail[0].video;
1324
- _(
1325
- At,
1326
- j = {
1327
- width: y.videoWidth,
1328
- height: y.videoHeight
1329
- },
1330
- j
1331
- ), i(4, T.srcObject = y.srcObject, T), i(11, Je = !1);
1332
- function P() {
1333
- Ee || (Tt(H.getContext("2d"), y), ze(T, P, !0));
1334
- }
1335
- P();
1336
- }), ce.addEventListener("error", (t) => {
1337
- console.error(t), t.detail[0].message === "Device in use" ? _(fe, a = te.CAMERA_IN_USE_ERROR, a) : t.detail[0].message === "Permission denied" || t.detail[0].message === "Permission dismissed" ? _(fe, a = te.CAMERA_DENIED_ERROR, a) : t.detail[0].message === "Requested device not found" && _(fe, a = te.DEVICE_NOT_FOUND_ERROR, a), i(11, Je = !1);
1338
- }), ce.addEventListener("faceDetection", (t) => {
1339
- }), ce.addEventListener("close", async (t) => {
1340
- m || (Ue = !1), i(12, Ee = !0), i(13, Ge = !1), a === te.OK && _(fe, a = te.CAMERA_CLOSED_ERROR, a);
1341
- }), ce.addEventListener("initialize", async (t) => {
1342
- st = !0, _(Lt, J = !0, J), we === vt.Face && !Ue && !m && st && await Ot();
1343
- }), ce.addEventListener("capture", async (t) => {
1344
- i(14, Ce = "");
1345
- const { encryptedFile: y, photo: P } = t.detail[0];
1346
- _(it, x = y, x), i(13, Ge = !1), _(pe, g = se.OK, g), _(Be, h.isLoading = !0, h), _(Ne, m = !0, m), Ue = !1;
1347
- const I = (await wt(P)).split(",");
1348
- if (_(We, Y = I[0], Y), _(Se, S = I[1], S), _(He, E = I[1], E), !Q) {
1349
- let re, dt;
1350
- try {
1351
- ({ bodyParts: re, icaoWarnings: dt } = await kt(E, ge, (await wt(y)).split(",")[1])), window.dispatchEvent(new CustomEvent(
1352
- "face-unconformities-validated",
1353
- {
1354
- detail: {
1355
- bodyParts: re,
1356
- icaoWarnings: dt,
1357
- status: g
1358
- }
1359
- }
1360
- ));
1361
- } catch (je) {
1362
- console.error(je);
1363
- let Ft = Mt.UNKNOWN, Yt = [], Ai = [];
1364
- if (je instanceof li && je.response?.status === 400)
1365
- if (je.response.data && Array.isArray(je.response.data.bodyParts)) {
1366
- Yt = je.response.data.bodyParts, Ai = je.response.data.icaoWarnings;
1367
- const Ni = Yt.find((Yn) => Yn.livenessResult.error);
1368
- Ft = Ni?.livenessResult.error_code, _(pe, g = se.LIVENESS_DETECTION_FAILURE, g), Ni?.livenessResult.error_code || _(pe, g = se.UNKNOWN_LIVENESS_ERROR, g), i(14, Ce = Mt[Ft]), console.error("Liveness error:", Ft);
1369
- } else
1370
- _(pe, g = se.TEMPLATE_EXTRACTION_ERROR, g);
1371
- else
1372
- _(pe, g = se.UNKNOWN_LIVENESS_ERROR, g), Pt.fire({
1373
- icon: "error",
1374
- title: "Falha ao comunicar com serviço de Liveness"
1375
- });
1376
- _(Be, h.isLoading = !1, h), window.dispatchEvent(new CustomEvent(
1377
- "face-unconformities-validated",
1378
- {
1379
- detail: {
1380
- bodyParts: Yt,
1381
- errorCode: Ft,
1382
- translatedError: X(Ce),
1383
- status: g,
1384
- icaoWarnings: Ai
1385
- }
1386
- }
1387
- ));
1388
- return;
1389
- }
1390
- if (g !== se.OK) {
1391
- _(Be, h.isLoading = !1, h);
1392
- return;
1393
- }
1394
- re[0].livenessResult && Jt(re[0].livenessResult), re.length !== 0 && re[0].data && _(Se, S = re[0].data, S), Ct(dt);
1395
- return;
1396
- }
1397
- let A, ne;
1398
- try {
1399
- ne = await Vi(y), Jt(ne.data);
1400
- } catch (re) {
1401
- _(pe, g = se.UNKNOWN_LIVENESS_ERROR, g), console.error(re), re instanceof li && re.response?.status === 400 ? (A = re.response.data.error_code, i(14, Ce = Mt[A]), console.error("Liveness error:", A), _(pe, g = se.LIVENESS_DETECTION_FAILURE, g)) : Pt.fire({
1402
- icon: "error",
1403
- title: "Falha ao comunicar com serviço de Liveness"
1404
- });
1405
- }
1406
- if (g !== se.OK) {
1407
- _(Be, h.isLoading = !1, h), window.dispatchEvent(new CustomEvent(
1408
- "face-unconformities-validated",
1409
- {
1410
- detail: {
1411
- bodyParts: [
1412
- {
1413
- bodyPart: "FACE",
1414
- data: E,
1415
- livenessBlob: (await wt(y)).split(",")[1],
1416
- ...ne && { livenessResult: ne }
1417
- }
1418
- ],
1419
- ...A && { errorCode: A },
1420
- ...Ce && { translatedError: X(Ce) },
1421
- status: g
1422
- }
1423
- }
1424
- ));
1425
- return;
1426
- }
1427
- let { bodyParts: xe, icaoWarnings: $e } = await kt(E, ge);
1428
- window.dispatchEvent(new CustomEvent(
1429
- "face-unconformities-validated",
1430
- {
1431
- detail: {
1432
- bodyParts: xe,
1433
- icaoWarnings: $e,
1434
- status: g,
1435
- errorCode: A,
1436
- ...Ce && { translatedError: X(Ce) }
1437
- }
1438
- }
1439
- )), xe[0].data && _(Se, S = xe[0].data, S), Ct($e);
1440
- });
1441
- }
1442
- async function Oe(t) {
1443
- const [y, P] = (ie ?? "")?.replaceAll(" ", "")?.split("x")?.map((I) => I ? parseInt(I) : void 0);
1444
- if (!(!y || !P)) {
1445
- if (_(Fe, r = { videoWidth: y, videoHeight: P }, r), oe() && P < y && yt() && _(Fe, r = { videoWidth: P, videoHeight: y }, r), oe()) {
1446
- Ot();
1447
- return;
1448
- }
1449
- await yi(y, P, t);
1450
- }
1451
- }
1452
- function Ot() {
1453
- oe() && (_(fe, a = te.OK, a), ce && "openCamera" in ce && ce.openCamera(), Ue = !0, i(12, Ee = !1), i(11, Je = !0));
1454
- }
1455
- async function Ze() {
1456
- if (he && !Me)
1457
- return ze(T, Ze);
1458
- if (T) {
1459
- if (we !== vt.Face && !k)
1460
- return ze(T, Ze);
1461
- _(tt, me = !0, me), he ? (s || _(Qe, s = !0, s), oe() || Tt(H.getContext("2d"), T), ze(T, Ze)) : (Tt(H.getContext("2d"), T), ze(T, Ze));
1462
- }
1463
- }
1464
- async function Qt() {
1465
- if (ri(), _(pe, g = se.OK, g), oe()) {
1466
- i(13, Ge = !0), ce.takePhoto();
1467
- return;
1468
- }
1469
- if (_(Ne, m = !0, m), he) {
1470
- const [t] = await (await import("./face_api_0e3ce8c8_2.2.3-RC01.js")).extractFaces(T, [ye]), y = t.toDataURL("image/jpeg").split(",");
1471
- _(We, Y = y[0], Y), _(Se, S = y[1], S), _(He, E = y[1], E);
1472
- let { bodyParts: P, icaoWarnings: I } = await kt(S, ge);
1473
- window.dispatchEvent(new CustomEvent(
1474
- "face-unconformities-validated",
1475
- {
1476
- detail: {
1477
- bodyParts: P,
1478
- icaoWarnings: I,
1479
- status: g
1480
- }
1481
- }
1482
- )), P.length !== 0 && P[0].data && _(Se, S = P[0].data, S), Ct(I);
1483
- } else {
1484
- const t = document.createElement("canvas"), y = t.getContext("2d");
1485
- t.width = T.width, t.height = T.height, y?.drawImage(T, 0, 0, t.width, t.height);
1486
- const P = t.toDataURL("image/jpeg").split(",");
1487
- _(We, Y = P[0], Y), _(Se, S = P[1], S), _(He, E = P[1], E);
1488
- let { bodyParts: I, icaoWarnings: A } = await kt(S, ge);
1489
- window.dispatchEvent(new CustomEvent(
1490
- "face-unconformities-validated",
1491
- {
1492
- detail: {
1493
- bodyParts: I,
1494
- icaoWarnings: A,
1495
- status: g
1496
- }
1497
- }
1498
- )), I.length !== 0 && I[0].data && _(Se, S = I[0].data, S), Ct(A);
1499
- }
1500
- }
1501
- function ft() {
1502
- const t = {
1503
- bodyPart: "FACE",
1504
- data: S,
1505
- justification: q
1506
- };
1507
- _(ht, L = !0, L), Rt(it) && wt(Rt(it)).then((y) => {
1508
- t.livenessBlob = y.split(",")[1];
1509
- }), window.dispatchEvent(new CustomEvent("export-face", { detail: t }));
1510
- }
1511
- function Ke() {
1512
- window.dispatchEvent(new CustomEvent("face-scrapped")), _(ht, L = !1, L), _(pe, g = se.OK, g), _(Ne, m = !1, m), _(He, E = "", E), _(Be, h.unconformities = [], h);
1513
- const t = Rt(Wt);
1514
- t.closedMouth = !1, t.isPersonCloseEnough = !1, t.isPersonTooclose = !0, t.isPersonInFrame = !1, i(16, Ye = ""), i(15, Ve = !1), Wt.set(t), Ee && Ot();
1515
- }
1516
- function Jt(t) {
1517
- let y = "", P = "success";
1518
- t.isAlive ? y = `Vivacidade de face (${t.face_liveness.probability.toFixed(2)}) e de captura (${t.capture_liveness.probability}, ${t.capture_liveness.score.toFixed(2)}) verificados!` : t?.face_liveness?.probability && (P = "error", y = `Vivacidade de face (${t.face_liveness.probability.toFixed(2)}) e de captura (${t.capture_liveness.probability}, ${t.capture_liveness.score.toFixed(2)}) insuficientes!`), C && Pt.fire({ icon: P, title: y });
1519
- }
1520
- async function yi(t, y, P) {
1521
- try {
1522
- if (a == te.CAMERA_ORIENTATION_PORTRAIT)
1523
- return;
1524
- await ci();
1525
- const { deviceId: I, width: A, height: ne, aspectRatio: xe, facingMode: $e, touchPoints: re } = await Ki(t, y, l, P);
1526
- A < t && ne < y && _(
1527
- Fe,
1528
- r = {
1529
- videoWidth: A,
1530
- videoHeight: ne
1531
- },
1532
- r
1533
- ), yt() && (!$e || re <= 1) && A > ne && _(
1534
- Fe,
1535
- r = {
1536
- videoWidth: ne,
1537
- videoHeight: A
1538
- },
1539
- r
1540
- ), _(et, c = I || b[0].deviceId, c), _(fe, a = te.OK, a);
1541
- } catch (I) {
1542
- const A = I;
1543
- i(12, Ee = !0);
1544
- const ne = Et(I) && I.constraint ? I.constraint : "";
1545
- console.error(A, ne), Et(A) && "message" in A && A.message.includes("Permission denied") && (console.error("User didn't give permission to use camera!"), _(fe, a = te.CAMERA_DENIED_ERROR, a)), Et(A) && "message" in A && A.message.includes("Requested device not found") && _(fe, a = te.DEVICE_NOT_FOUND_ERROR, a), (ne.includes("width") || ne.includes("height")) && (console.error(`Camera does not meet the minimum supported requirements! (${ne})`), _(fe, a = te.CAMERA_UNSUPPORTED, a));
1546
- }
1547
- }
1548
- const Ei = Fe.subscribe((t) => {
1549
- T && ae && (i(4, T.width = t.videoWidth, T), i(4, T.height = t.videoHeight, T), i(5, ae.width = t.videoWidth, ae), i(5, ae.height = t.videoHeight, ae), i(9, Te.width = t.videoWidth, Te), i(9, Te.height = t.videoHeight, Te), i(10, H.width = t.videoWidth, H), i(10, H.height = t.videoHeight, H));
1550
- }), Ri = Wt.subscribe((t) => {
1551
- let y = "";
1552
- if (t.isPersonCloseEnough ? t.isPersonTooclose ? y = "faceCollector.moveAwayCamera" : t.isPersonInFrame ? t.closedMouth || (y = "faceCollector.dontOpenMouth") : y = "faceCollector.stayInFrame" : y = "faceCollector.comeCloserCamera", y != "" && y != Ye && (i(15, Ve = !1), setTimeout(
1553
- () => {
1554
- i(16, Ye = y), i(15, Ve = !0);
1555
- },
1556
- 1e3
1557
- )), !m && O && !ke && t.isPersonInFrame && t.closedMouth && !(!t.isPersonCloseEnough || t.isPersonTooclose)) {
1558
- i(7, ke = !0), i(15, Ve = !1), rt = (/* @__PURE__ */ new Date()).getTime() + It;
1559
- const P = setInterval(
1560
- () => {
1561
- if (!O || m || oe() && Ee || !t.isPersonCloseEnough || t.isPersonTooclose || !t.closedMouth || !t.isPersonInFrame) {
1562
- i(7, ke = !1), ut = !0, setTimeout(
1563
- () => {
1564
- ut = !1;
1565
- },
1566
- 1500
1567
- ), clearInterval(P);
1568
- return;
1569
- }
1570
- const I = (/* @__PURE__ */ new Date()).getTime();
1571
- Math.floor((rt - I) % (1e3 * 60) / 1e3) <= 0 && (clearInterval(P), i(7, ke = !1), document.getElementsByTagName("biometric-collector")?.[0]?.shadowRoot?.getElementById("bry-cc-capture-btn")?.click());
1572
- },
1573
- 100
1574
- );
1575
- }
1576
- }), Si = Ne.subscribe((t) => {
1577
- ee && (t ? (ee.classList.remove("flex"), ee.classList.add("hidden")) : (ee.classList.add("flex"), ee.classList.remove("hidden")));
1578
- }), Ii = bt.subscribe((t) => {
1579
- T && t && (console.log("setting null in video srcObject"), i(4, T.srcObject = null, T), i(4, T.src = "", T));
1580
- });
1581
- gt.subscribe(async (t) => {
1582
- t === vt.Face && await ci();
1583
- });
1584
- const Pi = et.subscribe(async (t) => {
1585
- if (oe() || !t)
1586
- return;
1587
- T || i(8, _e = {});
1588
- const { videoHeight: y, videoWidth: P } = r;
1589
- try {
1590
- const I = await ji(P, y, t);
1591
- i(4, T.srcObject = I, T), _(Dt, R = I, R), _(bt, f = !1, f), ct || (_(fe, a = te.CAMERA_ORIENTATION_PORTRAIT, a), Ut());
1592
- } catch (I) {
1593
- const A = I;
1594
- i(12, Ee = !0), Et(A) && "message" in A && A.message.includes("Requested device not found") && _(fe, a = te.DEVICE_NOT_FOUND_ERROR, a);
1595
- }
1596
- }), Ti = gt.subscribe(async (t) => {
1597
- t === vt.Face && oe() && !Ue && !m && st && await Oe();
1598
- }), Oi = Qe.subscribe(async (t) => {
1599
- t && Gt();
1600
- }), Fi = qi.subscribe(async (t) => {
1601
- if (r) {
1602
- if (!yt()) {
1603
- const y = b.find((I) => I.deviceId !== c), P = y ? y.deviceId : b[0].deviceId;
1604
- Oe(P);
1605
- return;
1606
- }
1607
- t ? (_(qe, l = pt.REAR_CAMERA, l), await Oe()) : (_(qe, l = pt.FRONT_CAMERA, l), await Oe());
1608
- }
1609
- }), Di = Hi.subscribe(async (t) => {
1610
- !t.isSupported || !yt() || (ct = t.orientation.includes("portrait"), ct ? (_(fe, a = te.OK, a), r && (_(et, c = "", c), _(qe, l = pt.FRONT_CAMERA, l), await Oe())) : (_(fe, a = te.CAMERA_ORIENTATION_PORTRAIT, a), Ut()));
1611
- });
1612
- async function Gt() {
1613
- let t;
1614
- if (lt >= Xt) {
1615
- lt = 0;
1616
- const y = await Qi(), P = await import("./face_api_0e3ce8c8_2.2.3-RC01.js");
1617
- let I;
1618
- I = P.detectSingleFace(H, y), t = await I.withFaceLandmarks(), ae.getContext("2d")?.clearRect(0, 0, ae.width, ae.height);
1619
- } else
1620
- lt++;
1621
- t ? Xi(t, ae, Pe) : Ji(), s && ze(T, Gt);
1622
- }
1623
- mt.subscribe(async (t) => {
1624
- t && (Ke(), _(mt, o = !1, o));
1625
- });
1626
- const Li = tt.subscribe((t) => {
1627
- t && window.dispatchEvent(new CustomEvent("brycc-camera-ready"));
1628
- });
1629
- zi(() => {
1630
- Ut(), Si(), Ri(), Ei(), Ii(), Pi(), Ti(), clearInterval(St), Oi(), Fi(), Di(), Li(), ri(), St = 0;
1631
- }), n.$$.on_mount.push(function() {
1632
- Pe === void 0 && !("enableMinutiae" in e || n.$$.bound[n.$$.props.enableMinutiae]) && Ie.warn("<face-collector> was created without expected prop 'enableMinutiae'"), ie === void 0 && !("videoDimensions" in e || n.$$.bound[n.$$.props.videoDimensions]) && Ie.warn("<face-collector> was created without expected prop 'videoDimensions'"), k === void 0 && !("noTabs" in e || n.$$.bound[n.$$.props.noTabs]) && Ie.warn("<face-collector> was created without expected prop 'noTabs'"), Z === void 0 && !("weightsPath" in e || n.$$.bound[n.$$.props.weightsPath]) && Ie.warn("<face-collector> was created without expected prop 'weightsPath'"), ge === void 0 && !("evaluatePhoto" in e || n.$$.bound[n.$$.props.evaluatePhoto]) && Ie.warn("<face-collector> was created without expected prop 'evaluatePhoto'"), ot === void 0 && !("showCaptureButton" in e || n.$$.bound[n.$$.props.showCaptureButton]) && Ie.warn("<face-collector> was created without expected prop 'showCaptureButton'"), at === void 0 && !("showUnconformities" in e || n.$$.bound[n.$$.props.showUnconformities]) && Ie.warn("<face-collector> was created without expected prop 'showUnconformities'"), Ae === void 0 && !("videoFilter" in e || n.$$.bound[n.$$.props.videoFilter]) && Ie.warn("<face-collector> was created without expected prop 'videoFilter'"), ce === void 0 && !("widgetInstance" in e || n.$$.bound[n.$$.props.widgetInstance]) && Ie.warn("<face-collector> was created without expected prop 'widgetInstance'");
1633
- });
1634
- const Fn = [
1635
- "enableMinutiae",
1636
- "videoDimensions",
1637
- "noTabs",
1638
- "weightsPath",
1639
- "evaluatePhoto",
1640
- "showCaptureButton",
1641
- "showUnconformities",
1642
- "videoFilter",
1643
- "widgetInstance"
1644
- ];
1645
- Object.keys(e).forEach((t) => {
1646
- !~Fn.indexOf(t) && t.slice(0, 2) !== "$$" && t !== "slot" && Ie.warn(`<face-collector> was created with unknown prop '${t}'`);
1647
- });
1648
- function Dn(t) {
1649
- nt[t ? "unshift" : "push"](() => {
1650
- ce = t, i(0, ce);
1651
- });
1652
- }
1653
- function Ln(t) {
1654
- nt[t ? "unshift" : "push"](() => {
1655
- T = t, i(4, T);
1656
- });
1657
- }
1658
- const An = () => {
1659
- oe() || _(
1660
- Fe,
1661
- r = {
1662
- videoHeight: T.videoHeight,
1663
- videoWidth: T.videoWidth
1664
- },
1665
- r
1666
- );
1667
- };
1668
- function Nn(t) {
1669
- nt[t ? "unshift" : "push"](() => {
1670
- H = t, i(10, H);
1671
- });
1672
- }
1673
- function Bn(t) {
1674
- nt[t ? "unshift" : "push"](() => {
1675
- ae = t, i(5, ae);
1676
- });
1677
- }
1678
- function Mn(t) {
1679
- nt[t ? "unshift" : "push"](() => {
1680
- Te = t, i(9, Te);
1681
- });
1682
- }
1683
- const Wn = () => Qt(), Un = () => ft(), Vn = () => Ke();
1684
- function Kn(t) {
1685
- nt[t ? "unshift" : "push"](() => {
1686
- ee = t, i(6, ee);
1687
- });
1688
- }
1689
- const jn = () => ft(), qn = () => Ke();
1690
- function Hn() {
1691
- q = this.value, _t.set(q);
1692
- }
1693
- const zn = () => ft(), Xn = () => Ke();
1694
- function Qn() {
1695
- q = this.value, _t.set(q);
1696
- }
1697
- const Jn = () => Ke(), Gn = async () => {
1698
- await Oe();
1699
- };
1700
- return n.$$set = (t) => {
1701
- "enableMinutiae" in t && i(39, Pe = t.enableMinutiae), "videoDimensions" in t && i(40, ie = t.videoDimensions), "noTabs" in t && i(41, k = t.noTabs), "weightsPath" in t && i(42, Z = t.weightsPath), "evaluatePhoto" in t && i(43, ge = t.evaluatePhoto), "showCaptureButton" in t && i(1, ot = t.showCaptureButton), "showUnconformities" in t && i(2, at = t.showUnconformities), "videoFilter" in t && i(44, Ae = t.videoFilter), "widgetInstance" in t && i(0, ce = t.widgetInstance);
1702
- }, n.$capture_state = () => ({
1703
- CameraStatus: ln,
1704
- onDestroy: zi,
1705
- onMount: Mi,
1706
- _: ii,
1707
- isLoading: oi,
1708
- get: Rt,
1709
- writable: ui,
1710
- selectedTab: gt,
1711
- TabEnum: vt,
1712
- cameraDeniedPermission: to,
1713
- faceValidationsStore: Wt,
1714
- getFaceUnconformities: kt,
1715
- image: Se,
1716
- unconformitiesStore: Be,
1717
- setupStream: ji,
1718
- videoStore: Fe,
1719
- requestResult: pe,
1720
- cameraDevicesStore: Zt,
1721
- justification: _t,
1722
- saved: ht,
1723
- captured: Ne,
1724
- _stream: Dt,
1725
- shutOffCamera: Ut,
1726
- ready: tt,
1727
- clearedVideoSrcObject: bt,
1728
- enumerateDevices: ci,
1729
- originalCapture: He,
1730
- automaticCapture: xt,
1731
- selectedVideoDeviceId: et,
1732
- unconformityToi18nKey: io,
1733
- translateAndSetUnconformities: Ct,
1734
- requestResultEnum: se,
1735
- retakePhoto: mt,
1736
- showFaceWhileValidating: ai,
1737
- getVideoDimensions: Ki,
1738
- FaceExportStrategy: en,
1739
- orientationData: Hi,
1740
- FacingModeEnum: pt,
1741
- facingMode: qe,
1742
- swapCamera: qi,
1743
- ConfBtn: $i,
1744
- CameraBtn: sn,
1745
- ExportBtn: tn,
1746
- enableStrategy: nn,
1747
- exportButtonDisabled: si,
1748
- boxStore: ei,
1749
- drawDetectionsInFace: Xi,
1750
- enableFaceApi: ti,
1751
- faceFound: Bt,
1752
- getFaceDetectorOptions: Qi,
1753
- ovalDimensions: Nt,
1754
- setFaceNotFoundTimeout: Ji,
1755
- blobToBase64: wt,
1756
- isMobile: yt,
1757
- isObject: Et,
1758
- loadFaceApiAndWeights: Ui,
1759
- loopCaller: ze,
1760
- unLockScreen: ri,
1761
- isLivenessEnabled: oe,
1762
- loadingGif: ki,
1763
- getLivenessIdrnd: Vi,
1764
- blob: it,
1765
- idrndErrorToi18nKey: Mt,
1766
- showLivenessResultToast: $t,
1767
- captureLivenessIdrndEndpoint: ni,
1768
- idrndInitialized: Lt,
1769
- idrndVideoStoreDimensions: At,
1770
- Swal: Bi,
1771
- AxiosError: li,
1772
- cameraStatusStore: fe,
1773
- CameraStatusEnum: te,
1774
- log: Wi,
1775
- video: T,
1776
- detectionsCanvas: ae,
1777
- enclosingDiv: ee,
1778
- isCountingDown: ke,
1779
- unique: _e,
1780
- loadedFaceApiAndWeights: Me,
1781
- enableMinutiae: Pe,
1782
- videoDimensions: ie,
1783
- noTabs: k,
1784
- weightsPath: Z,
1785
- evaluatePhoto: ge,
1786
- showCaptureButton: ot,
1787
- showUnconformities: at,
1788
- videoFilter: Ae,
1789
- startFaceApi: Qe,
1790
- dataTypePrefix: We,
1791
- widgetInstance: ce,
1792
- maskCanvas: Te,
1793
- displayCanvas: H,
1794
- capturing: Ue,
1795
- initialized: st,
1796
- idrndLoading: Je,
1797
- idrndClosed: Ee,
1798
- waitingIdrndCaptureEvent: Ge,
1799
- intervalId: St,
1800
- livenessError: Ce,
1801
- faceapiCounter: lt,
1802
- faceapiFrameRate: Xt,
1803
- countDownCapture: It,
1804
- rightOrientation: ct,
1805
- countDownFinishTime: rt,
1806
- disableCountDown: ut,
1807
- faceNotValidated: Ve,
1808
- faceValidationAlert: Ye,
1809
- toast: Pt,
1810
- drawOval: Tt,
1811
- drawVideoOnCanvas: di,
1812
- registerIdrndListeners: Ci,
1813
- openCamera: Oe,
1814
- openCameraLiveness: Ot,
1815
- play: Ze,
1816
- capture: Qt,
1817
- save: ft,
1818
- retake: Ke,
1819
- validateLiveness: Jt,
1820
- selectDevice: yi,
1821
- unsubscribeVideoDimensions: Ei,
1822
- unsubscribeFaceValidations: Ri,
1823
- unsubscribeCapturedState: Si,
1824
- unsubscribeClearVideoSrc: Ii,
1825
- unsubscribeSelectedStream: Pi,
1826
- unsubscribeChangeTab: Ti,
1827
- unsubscribeFaceApi: Oi,
1828
- unsubscribeSwapCamera: Fi,
1829
- unsubscribeOrientation: Di,
1830
- faceapiLoop: Gt,
1831
- unsubscribeReadyCameraEventEmitter: Li,
1832
- $retakePhoto: o,
1833
- $startFaceApi: s,
1834
- $cameraStatusStore: a,
1835
- $facingMode: l,
1836
- $selectedVideoDeviceId: c,
1837
- $videoStore: r,
1838
- $cameraDevicesStore: b,
1839
- $captured: m,
1840
- $clearedVideoSrcObject: f,
1841
- $_stream: R,
1842
- $automaticCapture: O,
1843
- $showLivenessResultToast: C,
1844
- $unconformitiesStore: h,
1845
- $originalCapture: E,
1846
- $requestResult: g,
1847
- $saved: L,
1848
- $justification: q,
1849
- $image: S,
1850
- $dataTypePrefix: Y,
1851
- $boxStore: ye,
1852
- $enableFaceApi: he,
1853
- $ready: me,
1854
- $selectedTab: we,
1855
- $_: X,
1856
- $captureLivenessIdrndEndpoint: Q,
1857
- $blob: x,
1858
- $idrndInitialized: J,
1859
- $idrndVideoStoreDimensions: j,
1860
- $ovalDimensions: M,
1861
- $faceFound: G,
1862
- $isLoading: V,
1863
- $showFaceWhileValidating: $,
1864
- $exportButtonDisabled: le
1865
- }), n.$inject_state = (t) => {
1866
- "video" in t && i(4, T = t.video), "detectionsCanvas" in t && i(5, ae = t.detectionsCanvas), "enclosingDiv" in t && i(6, ee = t.enclosingDiv), "isCountingDown" in t && i(7, ke = t.isCountingDown), "unique" in t && i(8, _e = t.unique), "loadedFaceApiAndWeights" in t && (Me = t.loadedFaceApiAndWeights), "enableMinutiae" in t && i(39, Pe = t.enableMinutiae), "videoDimensions" in t && i(40, ie = t.videoDimensions), "noTabs" in t && i(41, k = t.noTabs), "weightsPath" in t && i(42, Z = t.weightsPath), "evaluatePhoto" in t && i(43, ge = t.evaluatePhoto), "showCaptureButton" in t && i(1, ot = t.showCaptureButton), "showUnconformities" in t && i(2, at = t.showUnconformities), "videoFilter" in t && i(44, Ae = t.videoFilter), "widgetInstance" in t && i(0, ce = t.widgetInstance), "maskCanvas" in t && i(9, Te = t.maskCanvas), "displayCanvas" in t && i(10, H = t.displayCanvas), "capturing" in t && (Ue = t.capturing), "initialized" in t && (st = t.initialized), "idrndLoading" in t && i(11, Je = t.idrndLoading), "idrndClosed" in t && i(12, Ee = t.idrndClosed), "waitingIdrndCaptureEvent" in t && i(13, Ge = t.waitingIdrndCaptureEvent), "intervalId" in t && (St = t.intervalId), "livenessError" in t && i(14, Ce = t.livenessError), "faceapiCounter" in t && (lt = t.faceapiCounter), "faceapiFrameRate" in t && (Xt = t.faceapiFrameRate), "countDownCapture" in t && (It = t.countDownCapture), "rightOrientation" in t && (ct = t.rightOrientation), "countDownFinishTime" in t && (rt = t.countDownFinishTime), "disableCountDown" in t && (ut = t.disableCountDown), "faceNotValidated" in t && i(15, Ve = t.faceNotValidated), "faceValidationAlert" in t && i(16, Ye = t.faceValidationAlert);
1867
- }, e && "$$inject" in e && n.$inject_state(e.$$inject), [
1868
- ce,
1869
- ot,
1870
- at,
1871
- Ze,
1872
- T,
1873
- ae,
1874
- ee,
1875
- ke,
1876
- _e,
1877
- Te,
1878
- H,
1879
- Je,
1880
- Ee,
1881
- Ge,
1882
- Ce,
1883
- Ve,
1884
- Ye,
1885
- a,
1886
- r,
1887
- m,
1888
- h,
1889
- g,
1890
- L,
1891
- q,
1892
- S,
1893
- Y,
1894
- he,
1895
- me,
1896
- X,
1897
- G,
1898
- V,
1899
- $,
1900
- le,
1901
- Qe,
1902
- We,
1903
- Oe,
1904
- Qt,
1905
- ft,
1906
- Ke,
1907
- Pe,
1908
- ie,
1909
- k,
1910
- Z,
1911
- ge,
1912
- Ae,
1913
- Dn,
1914
- Ln,
1915
- An,
1916
- Nn,
1917
- Bn,
1918
- Mn,
1919
- Wn,
1920
- Un,
1921
- Vn,
1922
- Kn,
1923
- jn,
1924
- qn,
1925
- Hn,
1926
- zn,
1927
- Xn,
1928
- Qn,
1929
- Jn,
1930
- Gn
1931
- ];
1932
- }
1933
- class so extends Zn {
1934
- constructor(e) {
1935
- super(), xn(
1936
- this,
1937
- {
1938
- target: this.shadowRoot,
1939
- props: $n(this.attributes),
1940
- customElement: !0
1941
- },
1942
- ao,
1943
- On,
1944
- xi,
1945
- {
1946
- enableMinutiae: 39,
1947
- videoDimensions: 40,
1948
- noTabs: 41,
1949
- weightsPath: 42,
1950
- evaluatePhoto: 43,
1951
- showCaptureButton: 1,
1952
- showUnconformities: 2,
1953
- videoFilter: 44,
1954
- widgetInstance: 0,
1955
- play: 3
1956
- },
1957
- null,
1958
- [-1, -1, -1, -1]
1959
- ), e && (e.target && B(e.target, this, e.anchor), e.props && (this.$set(e.props), Re()));
1960
- }
1961
- static get observedAttributes() {
1962
- return [
1963
- "enableMinutiae",
1964
- "videoDimensions",
1965
- "noTabs",
1966
- "weightsPath",
1967
- "evaluatePhoto",
1968
- "showCaptureButton",
1969
- "showUnconformities",
1970
- "videoFilter",
1971
- "widgetInstance",
1972
- "play"
1973
- ];
1974
- }
1975
- get enableMinutiae() {
1976
- return this.$$.ctx[39];
1977
- }
1978
- set enableMinutiae(e) {
1979
- this.$$set({ enableMinutiae: e }), Re();
1980
- }
1981
- get videoDimensions() {
1982
- return this.$$.ctx[40];
1983
- }
1984
- set videoDimensions(e) {
1985
- this.$$set({ videoDimensions: e }), Re();
1986
- }
1987
- get noTabs() {
1988
- return this.$$.ctx[41];
1989
- }
1990
- set noTabs(e) {
1991
- this.$$set({ noTabs: e }), Re();
1992
- }
1993
- get weightsPath() {
1994
- return this.$$.ctx[42];
1995
- }
1996
- set weightsPath(e) {
1997
- this.$$set({ weightsPath: e }), Re();
1998
- }
1999
- get evaluatePhoto() {
2000
- return this.$$.ctx[43];
2001
- }
2002
- set evaluatePhoto(e) {
2003
- this.$$set({ evaluatePhoto: e }), Re();
2004
- }
2005
- get showCaptureButton() {
2006
- return this.$$.ctx[1];
2007
- }
2008
- set showCaptureButton(e) {
2009
- this.$$set({ showCaptureButton: e }), Re();
2010
- }
2011
- get showUnconformities() {
2012
- return this.$$.ctx[2];
2013
- }
2014
- set showUnconformities(e) {
2015
- this.$$set({ showUnconformities: e }), Re();
2016
- }
2017
- get videoFilter() {
2018
- return this.$$.ctx[44];
2019
- }
2020
- set videoFilter(e) {
2021
- this.$$set({ videoFilter: e }), Re();
2022
- }
2023
- get widgetInstance() {
2024
- return this.$$.ctx[0];
2025
- }
2026
- set widgetInstance(e) {
2027
- this.$$set({ widgetInstance: e }), Re();
2028
- }
2029
- get play() {
2030
- return this.$$.ctx[3];
2031
- }
2032
- set play(e) {
2033
- throw new Error("<face-collector>: Cannot set read-only property 'play'");
2034
- }
2035
- }
2036
- customElements.define("face-collector", so);
2037
- export {
2038
- so as default
2039
- };
2040
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmFjZUNvbGxlY3Rvcl9mZWE3ZTYzZV8yLjIuMy1SQzAxLmpzIiwic291cmNlcyI6WyIuLi9zcmMvbGliL2ZhY2VUYWIvRmFjZUNvbGxlY3Rvci5zdmVsdGUiXSwic291cmNlc0NvbnRlbnQiOlsiPHN2ZWx0ZTpvcHRpb25zIHRhZz1cImZhY2UtY29sbGVjdG9yXCIgLz5cblxuPHNjcmlwdCBsYW5nPVwidHNcIj5cbiAgaW1wb3J0IENhbWVyYVN0YXR1cyBmcm9tICcuL2NhbWVyYVN0YXR1cy9DYW1lcmFTdGF0dXMuc3ZlbHRlJztcbiAgaW1wb3J0IHsgb25EZXN0cm95LCBvbk1vdW50IH0gZnJvbSAnc3ZlbHRlJztcbiAgaW1wb3J0IHR5cGUgeyBCb2R5UGFydCwgQm9keVBhcnRSZXR1cm5UeXBlIH0gZnJvbSAnLi4vdmFsaWRhdG9ycy9iaW9tZXRyaWNzVmFsaWRhdG9yJztcbiAgaW1wb3J0IHsgXywgaXNMb2FkaW5nIH0gZnJvbSAnc3ZlbHRlLWkxOG4nO1xuICBpbXBvcnQgeyBnZXQsIHdyaXRhYmxlIH0gZnJvbSAnc3ZlbHRlL3N0b3JlJztcbiAgaW1wb3J0IHsgc2VsZWN0ZWRUYWIsIFRhYkVudW0gfSBmcm9tICcuLi90YWJCdG5zL3RhYlN0b3JlJztcbiAgaW1wb3J0IHtcbiAgICBjYW1lcmFEZW5pZWRQZXJtaXNzaW9uLFxuICAgIGZhY2VWYWxpZGF0aW9uc1N0b3JlLFxuICAgIGdldEZhY2VVbmNvbmZvcm1pdGllcyxcbiAgICBpbWFnZSxcbiAgICB1bmNvbmZvcm1pdGllc1N0b3JlLFxuICAgIHNldHVwU3RyZWFtLFxuICAgIHZpZGVvU3RvcmUsXG4gICAgcmVxdWVzdFJlc3VsdCxcbiAgICBjYW1lcmFEZXZpY2VzU3RvcmUsXG4gICAganVzdGlmaWNhdGlvbixcbiAgICBzYXZlZCxcbiAgICBjYXB0dXJlZCxcbiAgICBfc3RyZWFtLFxuICAgIHNodXRPZmZDYW1lcmEsXG4gICAgcmVhZHksXG4gICAgY2xlYXJlZFZpZGVvU3JjT2JqZWN0LFxuICAgIGVudW1lcmF0ZURldmljZXMsXG4gICAgb3JpZ2luYWxDYXB0dXJlLFxuICAgIGF1dG9tYXRpY0NhcHR1cmUsXG4gICAgc2VsZWN0ZWRWaWRlb0RldmljZUlkLFxuICAgIHVuY29uZm9ybWl0eVRvaTE4bktleSxcbiAgICB0cmFuc2xhdGVBbmRTZXRVbmNvbmZvcm1pdGllcyxcbiAgICByZXF1ZXN0UmVzdWx0RW51bSxcbiAgICByZXRha2VQaG90byxcbiAgICBzaG93RmFjZVdoaWxlVmFsaWRhdGluZyxcbiAgICBnZXRWaWRlb0RpbWVuc2lvbnMsXG4gICAgRmFjZUV4cG9ydFN0cmF0ZWd5LFxuICAgIG9yaWVudGF0aW9uRGF0YSxcbiAgICBGYWNpbmdNb2RlRW51bSxcbiAgICBmYWNpbmdNb2RlXG4gIH0gZnJvbSAnLi9mYWNlU3RvcmUnO1xuICBpbXBvcnQge1xuICAgIHN3YXBDYW1lcmFcbiAgfWZyb20gJy4uL2NvbmYvY29uZlN0b3JlJzsgIFxuICBpbXBvcnQgQ29uZkJ0biBmcm9tICcuLi9jb25mL0NvbmZCdG4uc3ZlbHRlJztcbiAgaW1wb3J0IENhbWVyYUJ0biBmcm9tICcuLi9jb25mL0NhbWVyYUJ0bi5zdmVsdGUnO1xuICBpbXBvcnQgRXhwb3J0QnRuIGZyb20gJy4uL2ZpbmdlcnNUYWIvYnV0dG9ucy9leHBvcnRCdG4vRXhwb3J0QnRuLnN2ZWx0ZSc7XG4gIGltcG9ydCB7IGVuYWJsZVN0cmF0ZWd5IH0gZnJvbSAnLi4vZmluZ2Vyc1RhYi9oYW5kL2hhbmRQYXJ0cy9maW5nZXJzU3RvcmUnO1xuICBpbXBvcnQgeyBleHBvcnRCdXR0b25EaXNhYmxlZCB9IGZyb20gJy4uL2ZpbmdlcnNUYWIvYnV0dG9ucy9leHBvcnRCdG4vZXhwb3J0U3RvcmUnO1xuICBpbXBvcnQgeyBib3hTdG9yZSwgZHJhd0RldGVjdGlvbnNJbkZhY2UsIGVuYWJsZUZhY2VBcGksIGZhY2VGb3VuZCwgZ2V0RmFjZURldGVjdG9yT3B0aW9ucywgb3ZhbERpbWVuc2lvbnMsIHNldEZhY2VOb3RGb3VuZFRpbWVvdXQgfSBmcm9tICcuL2ZhY2VBcGlTdG9yZSc7XG4gIGltcG9ydCB7IGJsb2JUb0Jhc2U2NCwgaXNNb2JpbGUsIGlzT2JqZWN0LCBsb2FkRmFjZUFwaUFuZFdlaWdodHMsIGxvb3BDYWxsZXIsIHVuTG9ja1NjcmVlbn0gZnJvbSAnLi4vdXRpbC91dGlsJztcbiAgaW1wb3J0IHsgaXNMaXZlbmVzc0VuYWJsZWQgfSBmcm9tICcuLi8uLi9tYWluU3RvcmUnO1xuICBpbXBvcnQgbG9hZGluZ0dpZiBmcm9tICcuLi8uLi9hc3NldHMvaW1nL0Jsb2Nrcy0xcy0yMDBweC5naWYnO1xuICBpbXBvcnQge1xuICAgIGdldExpdmVuZXNzSWRybmQsXG4gICAgYmxvYixcbiAgICBpZHJuZEVycm9yVG9pMThuS2V5LFxuICAgIHNob3dMaXZlbmVzc1Jlc3VsdFRvYXN0LFxuICAgIGNhcHR1cmVMaXZlbmVzc0lkcm5kRW5kcG9pbnQsXG4gICAgdHlwZSBsaXZlbmVzc1Jlc3VsdCxcbiAgICB0eXBlIGxpdmVuZXNzRXJyb3JSZXN1bHQsXG4gICAgaWRybmRJbml0aWFsaXplZCxcbiAgICBpZHJuZFZpZGVvU3RvcmVEaW1lbnNpb25zLFxuICB9IGZyb20gJy4vbGl2ZW5lc3MvTGl2ZW5lc3NTdG9yZSc7XG4gIGltcG9ydCB0eXBlIHsgU3dlZXRBbGVydEljb24gfSBmcm9tICdzd2VldGFsZXJ0Mic7XG4gIGltcG9ydCBTd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcbiAgaW1wb3J0IHsgQXhpb3NFcnJvciwgdHlwZSBBeGlvc1Jlc3BvbnNlIH0gZnJvbSAnYXhpb3MnO1xuICBpbXBvcnQgeyBjYW1lcmFTdGF0dXNTdG9yZSwgQ2FtZXJhU3RhdHVzRW51bSB9IGZyb20gJy4vY2FtZXJhU3RhdHVzL2NhbWVyYVN0YXR1c1N0b3JlJztcbiAgaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi4vdXRpbC9sb2dnZXInO1xuXG4gIGxldCB2aWRlbzogSFRNTFZpZGVvRWxlbWVudDtcbiAgbGV0IGRldGVjdGlvbnNDYW52YXM6IEhUTUxDYW52YXNFbGVtZW50O1xuICBsZXQgZW5jbG9zaW5nRGl2OiBIVE1MRGl2RWxlbWVudDtcbiAgbGV0IGlzQ291bnRpbmdEb3duID0gZmFsc2U7XG4gIGxldCB1bmlxdWUgPSB7fTtcbiAgbGV0IGxvYWRlZEZhY2VBcGlBbmRXZWlnaHRzID0gZmFsc2U7XG5cbiAgLy8gUHJvcHNcbiAgZXhwb3J0IGxldCBlbmFibGVNaW51dGlhZTogYm9vbGVhbjtcbiAgZXhwb3J0IGxldCB2aWRlb0RpbWVuc2lvbnM6IHN0cmluZztcbiAgZXhwb3J0IGxldCBub1RhYnM6IGJvb2xlYW47XG4gIGV4cG9ydCBsZXQgd2VpZ2h0c1BhdGg6IHN0cmluZztcbiAgZXhwb3J0IGxldCBldmFsdWF0ZVBob3RvOiBib29sZWFuO1xuICBleHBvcnQgbGV0IHNob3dDYXB0dXJlQnV0dG9uOiBib29sZWFuO1xuICBleHBvcnQgbGV0IHNob3dVbmNvbmZvcm1pdGllczogYm9vbGVhbjtcbiAgZXhwb3J0IGxldCB2aWRlb0ZpbHRlcjogc3RyaW5nO1xuXG4gIGNvbnN0IHN0YXJ0RmFjZUFwaSA9IHdyaXRhYmxlKGZhbHNlKTtcbiAgY29uc3QgZGF0YVR5cGVQcmVmaXggPSB3cml0YWJsZSgnZGF0YTppbWFnZS9wbmc7YmFzZTY0Jyk7XG5cbiAgLy8gbGl2ZW5lc3MgcmVsYXRlZFxuICAvLyBwcm9wIHBhc3NpbmcgdXAgdG8gcGFyZW50XG4gIGV4cG9ydCBsZXQgd2lkZ2V0SW5zdGFuY2U6IEhUTUxJZExpdmVGYWNlQ2FwdHVyZUVsZW1lbnQ7XG4gIGxldCBtYXNrQ2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcbiAgbGV0IGRpc3BsYXlDYW52YXM6IEhUTUxDYW52YXNFbGVtZW50O1xuICBsZXQgY2FwdHVyaW5nID0gZmFsc2U7XG4gIGxldCBpbml0aWFsaXplZCA9IGZhbHNlO1xuICBsZXQgaWRybmRMb2FkaW5nID0gdHJ1ZTtcbiAgbGV0IGlkcm5kQ2xvc2VkID0gdHJ1ZTtcbiAgbGV0IHdhaXRpbmdJZHJuZENhcHR1cmVFdmVudCA9IGZhbHNlO1xuICBsZXQgaW50ZXJ2YWxJZCA9IDA7XG4gIGxldCBsaXZlbmVzc0Vycm9yID0gJyc7XG4gIGxldCBmYWNlYXBpQ291bnRlciA9IDA7XG4gIGxldCBmYWNlYXBpRnJhbWVSYXRlID0gNTtcbiAgbGV0IGNvdW50RG93bkNhcHR1cmUgPSAzMDAwO1xuICBsZXQgcmlnaHRPcmllbnRhdGlvbiA9IHRydWU7XG5cbiAgbGV0IGNvdW50RG93bkZpbmlzaFRpbWUgPSAwO1xuICBsZXQgZGlzYWJsZUNvdW50RG93biA9IGZhbHNlO1xuXG4gIC8vIGZhY2UgdmFsaWRhdGlvbiByZWxhdGVkXG4gIGxldCBmYWNlTm90VmFsaWRhdGVkID0gZmFsc2U7XG4gIGxldCBmYWNlVmFsaWRhdGlvbkFsZXJ0ID0gJyc7XG5cbiAgY29uc3QgdG9hc3QgPSBTd2FsLm1peGluKHtcbiAgICB0b2FzdDogdHJ1ZSxcbiAgICBwb3NpdGlvbjogJ2JvdHRvbS1sZWZ0JyxcbiAgICB0aW1lcjogMTMwMDAsXG4gICAgdGltZXJQcm9ncmVzc0JhcjogdHJ1ZSxcbiAgfSk7XG5cbiAgb25Nb3VudChhc3luYyAoKSA9PiB7XG4gICAgbG9nKCdNb3VudGluZyBGYWNlIENvbGxlY3RvciEnKTtcbiAgICAkcmVhZHkgPSBmYWxzZTtcbiAgICAkZmFjZUZvdW5kID0gZmFsc2U7XG4gICAgJGNhcHR1cmVkID0gZmFsc2U7XG4gICAgJGZhY2luZ01vZGUgPSBGYWNpbmdNb2RlRW51bS5GUk9OVF9DQU1FUkE7XG4gICAgaWYgKGlzTGl2ZW5lc3NFbmFibGVkKCkpIHtcbiAgICAgIGltcG9ydCgnbGl2ZW5lc3MtbGliLWRldi9pbmRleC1uby1kZXRlY3RvcicpO1xuICAgICAgcmVnaXN0ZXJJZHJuZExpc3RlbmVycygpO1xuICAgIH1cblxuICAgIGlmICgkZW5hYmxlRmFjZUFwaSkge1xuICAgICAgYXdhaXQgbG9hZEZhY2VBcGlBbmRXZWlnaHRzKHdlaWdodHNQYXRoKTtcbiAgICAgIGxvYWRlZEZhY2VBcGlBbmRXZWlnaHRzID0gdHJ1ZTtcbiAgICB9XG4gIFxuICAgIGF3YWl0IG9wZW5DYW1lcmEoKTsgLy8gb3BlbiB0aGUgZnJvbnQgY2FtZXJhXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGRyYXdPdmFsKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCB2aWRlbzogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIC8vIGNsZWFyIHRoZSBhcmVhICh0aGVyZSBzaG91bGRuJ3QgZXZlbiBiZSBhbnl0aGluZyBhbnl3YXlzKVxuICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgZGlzcGxheUNhbnZhcy53aWR0aCwgZGlzcGxheUNhbnZhcy5oZWlnaHQpO1xuICAgIC8vIHNhdmUgdGhlIGNvbnRleHQgc3RhdGVcbiAgICAvLyBmcm9tIG1kbiBkb2NzXG4gICAgY3R4LnNhdmUoKTtcbiAgICAvLyBhcHBseSB0aGUgYmx1ci9jb2xvciBmaWx0ZXJcbiAgICBpZiAodmlkZW9GaWx0ZXIgPT0gJ2JsdXInKXtcbiAgICAgIGN0eC5maWx0ZXIgPSBgYmx1cigke3ZpZGVvLndpZHRoLzYwfXB4KWA7XG4gICAgICBjdHgucmVjdCgwLCAwLCBkaXNwbGF5Q2FudmFzLndpZHRoLCBkaXNwbGF5Q2FudmFzLmhlaWdodCk7XG4gICAgfSBlbHNlIGlmKHZpZGVvRmlsdGVyICE9ICdub25lJykge1xuICAgICAgY3R4LmZpbGxTdHlsZSA9IHZpZGVvRmlsdGVyO1xuICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIGRpc3BsYXlDYW52YXMud2lkdGgsIGRpc3BsYXlDYW52YXMuaGVpZ2h0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZHJhdyBhIHJlY3RhbmdsZSB3aXRoIHRoZSBzYW1lIHNpemUgYXMgdGhlIHZpZGVvXG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICBjdHgucmVjdCgwLCAwLCBkaXNwbGF5Q2FudmFzLndpZHRoLCBkaXNwbGF5Q2FudmFzLmhlaWdodCk7XG4gICAgfVxuICAgIFxuICAgIC8vIGNhbGN1bGF0ZSB0aGUgb3ZhbCBzaXplIHVzaW5nIHZpZXdwb3J0IHVuaXRzXG4gICAgY29uc3Qgb3ZhbEhlaWdodCA9IGRpc3BsYXlDYW52YXMuaGVpZ2h0ICogMC42NTsgLy8gODAlIG9mIHRoZSB2aWV3cG9ydCBoZWlnaHRcbiAgICBjb25zdCBvdmFsV2lkdGggPSBvdmFsSGVpZ2h0IC8gMS40NTsgXG4gICAgY29uc3Qgb3ZhbFggPSAkdmlkZW9TdG9yZS52aWRlb1dpZHRoIC8gMjtcbiAgICBjb25zdCBvdmFsWSA9ICR2aWRlb1N0b3JlLnZpZGVvSGVpZ2h0ICogMC41MTtcbiAgICAkb3ZhbERpbWVuc2lvbnMud2lkdGggPSBvdmFsV2lkdGg7XG5cbiAgICAvLyBtYWtlIHRoZSBvdmFsIFxuICAgIGN0eC5lbGxpcHNlKFxuICAgICAgb3ZhbFgsXG4gICAgICBvdmFsWSxcbiAgICAgIG92YWxXaWR0aCAvIDIsXG4gICAgICBvdmFsSGVpZ2h0IC8gMixcbiAgICAgIDAsXG4gICAgICAwLFxuICAgICAgMiAqIE1hdGguUEksXG4gICAgICB0cnVlIC8vIGl0IGhhcyB0byBiZSBjb3VudGVyY2xvY2t3aXNlXG4gICAgKTtcbiAgICAvLyBjbGlwIHRoZSBvdmFsIGFnYWluc3QgdGhlIHRoZSByZWN0YW5nbGVcbiAgICAvLyBDbGlwIHBhdGhzIGNhbm5vdCBiZSByZXZlcnRlZCBkaXJlY3RseS4gWW91IG11c3Qgc2F2ZSB5b3VyIGNhbnZhcyBzdGF0ZSB1c2luZyBzYXZlKCkgYmVmb3JlIGNhbGxpbmcgY2xpcCgpLCBhbmQgcmVzdG9yZSBpdCBvbmNlIHlvdSBoYXZlIGZpbmlzaGVkIGRyYXdpbmcgaW4gdGhlIGNsaXBwZWQgYXJlYSB1c2luZyByZXN0b3JlKCkuXG4gICAgY3R4LmNsaXAoKTtcbiAgICAvLyBkcmF3IHRoZSB2aWRlb1xuICAgIC8vIHRoaXMgbWFrZXMgZmFjZSBhcGkgb25seSBhd2FyZSBvZiBvdXRzaWRlIHRoZSBvdmFsIGFyZWFcbiAgICBkcmF3VmlkZW9PbkNhbnZhcyhjdHgsIHZpZGVvLCBkaXNwbGF5Q2FudmFzKTtcbiAgICBjdHgucmVzdG9yZSgpO1xuXG4gICAgLy8gc2F2ZSBhZ2FpbiwgYmVjYXVzZSB3aGVuIHJlZHJhd2luZyB0aGUgb3ZhbCwgZXZlcnl0aGluZyBhcm91bmQgdGhlIG92YWwgaXMgbG9zdFxuICAgIGN0eC5zYXZlKCk7XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIC8vIGRyYXcgdGhlIGVsbGlwc2UgKHRoaXMgdGltZSBpdCBkb2Vzbid0IG1hdHRlciB0aGUgZGlyZWN0aW9uLCBzaW5jZSB0aGVyZSBpc24ndCBhIHJlY3RhbmdsZSBiZWhpbmQpXG4gICAgY29uc3QgcHJpbWFyeVRoZW1lID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZGlzcGxheUNhbnZhcykuZ2V0UHJvcGVydHlWYWx1ZSgnLS1wJyk7XG4gICAgY29uc3Qgc3VjY2Vzc1RoZW1lID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZGlzcGxheUNhbnZhcykuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zdScpO1xuXG4gICAgY3R4LnN0cm9rZVN0eWxlID0gYGhzbCgke3ByaW1hcnlUaGVtZX0pYDtcbiAgICBjdHgubGluZVdpZHRoID0gMTY7XG4gICAgY3R4LmVsbGlwc2UoXG4gICAgICBvdmFsWCxcbiAgICAgIG92YWxZLFxuICAgICAgb3ZhbFdpZHRoIC8gMixcbiAgICAgIG92YWxIZWlnaHQgLyAyLFxuICAgICAgMCxcbiAgICAgIDAsXG4gICAgICAyICogTWF0aC5QSVxuICAgICk7XG4gICAgY3R4LnN0cm9rZSgpO1xuICAgIGlmIChpc0NvdW50aW5nRG93biAmJiAhZGlzYWJsZUNvdW50RG93bikge1xuICAgICAgY29uc3QgdGltZVJlbWFpbmluZyA9IDEgLSAoY291bnREb3duRmluaXNoVGltZSAtIG5ldyBEYXRlKCkuZ2V0VGltZSgpKSAvIGNvdW50RG93bkNhcHR1cmU7XG4gICAgICAvLyBDb3VudGVyIGNvbnRvdXJcbiAgICAgIGN0eC5zYXZlKCk7XG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICBjdHgubGluZVdpZHRoID0gMTY7XG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSBgaHNsKCR7c3VjY2Vzc1RoZW1lfSlgO1xuICAgICAgY3R4LmVsbGlwc2UoXG4gICAgICAgIG92YWxYLFxuICAgICAgICBvdmFsWSxcbiAgICAgICAgb3ZhbFdpZHRoIC8gMixcbiAgICAgICAgb3ZhbEhlaWdodCAvIDIsXG4gICAgICAgIDAsXG4gICAgICAgIDAgLSBNYXRoLlBJIC8gMixcbiAgICAgICAgMS41ICogKE1hdGguUEkgKiAyICogdGltZVJlbWFpbmluZykgLSBNYXRoLlBJIC8gMlxuICAgICAgKTtcbiAgICAgIGN0eC5zdHJva2UoKTtcbiAgICB9XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGNvbnN0IGNsaXBQYXRoID0gbmV3IFBhdGgyRCgpO1xuICAgIGNsaXBQYXRoLmVsbGlwc2UoXG4gICAgICBvdmFsWCxcbiAgICAgIG92YWxZLFxuICAgICAgb3ZhbFdpZHRoIC8gMixcbiAgICAgIG92YWxIZWlnaHQgLyAyLFxuICAgICAgMCxcbiAgICAgIDAsXG4gICAgICAyICogTWF0aC5QSVxuICAgICk7XG4gICAgLy8gYmFzaWNhbGx5IGNsaXBwaW5nIHRoZSBvdGhlciB3YXkgYXJvdW5kLCBzbyBmYWNlIGFwaSBpcyBhd2FyZSBvZiB0aGUgb3ZhbCBhcmVhXG4gICAgY3R4LmNsaXAoY2xpcFBhdGgpO1xuICAgIGRyYXdWaWRlb09uQ2FudmFzKGN0eCwgdmlkZW8sIGRpc3BsYXlDYW52YXMpO1xuICAgIGN0eC5yZXN0b3JlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBkcmF3VmlkZW9PbkNhbnZhcyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIGRpc3BsYXlDYW52YXM6IEhUTUxDYW52YXNFbGVtZW50KSB7XG4gICAgY29uc3QgaXNTYW1lUHJvcG9ydGlvbiA9XG4gICAgICAodmlkZW8udmlkZW9IZWlnaHQgPj0gdmlkZW8udmlkZW9XaWR0aCAmJiBkaXNwbGF5Q2FudmFzLmhlaWdodCA+PSBkaXNwbGF5Q2FudmFzLndpZHRoKSB8fFxuICAgICAgKHZpZGVvLnZpZGVvSGVpZ2h0IDwgdmlkZW8udmlkZW9XaWR0aCAmJiBkaXNwbGF5Q2FudmFzLmhlaWdodCA8IGRpc3BsYXlDYW52YXMud2lkdGgpO1xuXG4gICAgY3R4LmRyYXdJbWFnZShcbiAgICAgIHZpZGVvLFxuICAgICAgaXNTYW1lUHJvcG9ydGlvbiA/IDAgOiB2aWRlby52aWRlb1dpZHRoIC8gMiAtIGRpc3BsYXlDYW52YXMud2lkdGgsXG4gICAgICAwLFxuICAgICAgaXNTYW1lUHJvcG9ydGlvbiA/IHZpZGVvLnZpZGVvV2lkdGggOiB2aWRlby52aWRlb0hlaWdodCAqIChkaXNwbGF5Q2FudmFzLndpZHRoIC8gZGlzcGxheUNhbnZhcy5oZWlnaHQpLFxuICAgICAgdmlkZW8udmlkZW9IZWlnaHQsXG4gICAgICAwLFxuICAgICAgMCxcbiAgICAgIGRpc3BsYXlDYW52YXMud2lkdGgsXG4gICAgICBkaXNwbGF5Q2FudmFzLmhlaWdodFxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiByZWdpc3Rlcklkcm5kTGlzdGVuZXJzKCkge1xuICAgIHdpZGdldEluc3RhbmNlLmFkZEV2ZW50TGlzdGVuZXIoJ29wZW4nLCAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHZpZGVvXyA9IGV2ZW50LmRldGFpbFswXS52aWRlbztcbiAgICAgICRpZHJuZFZpZGVvU3RvcmVEaW1lbnNpb25zID0geyB3aWR0aDogdmlkZW9fLnZpZGVvV2lkdGgsIGhlaWdodDogdmlkZW9fLnZpZGVvSGVpZ2h0IH07XG5cbiAgICAgIHZpZGVvLnNyY09iamVjdCA9IHZpZGVvXy5zcmNPYmplY3Q7XG4gICAgICBpZHJuZExvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgZnVuY3Rpb24gbG9vcCgpIHtcbiAgICAgICAgaWYgKGlkcm5kQ2xvc2VkKSByZXR1cm47XG5cbiAgICAgICAgZHJhd092YWwoZGlzcGxheUNhbnZhcy5nZXRDb250ZXh0KCcyZCcpIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdmlkZW9fKTtcbiAgICAgICAgbG9vcENhbGxlcih2aWRlbywgbG9vcCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBsb29wKCk7XG4gICAgfSk7XG4gICAgd2lkZ2V0SW5zdGFuY2UuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCAoZSkgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIGlmIChlLmRldGFpbFswXS5tZXNzYWdlID09PSAnRGV2aWNlIGluIHVzZScpIHtcbiAgICAgICAgJGNhbWVyYVN0YXR1c1N0b3JlID0gQ2FtZXJhU3RhdHVzRW51bS5DQU1FUkFfSU5fVVNFX0VSUk9SO1xuICAgICAgfSBlbHNlIGlmIChlLmRldGFpbFswXS5tZXNzYWdlID09PSAnUGVybWlzc2lvbiBkZW5pZWQnIHx8IGUuZGV0YWlsWzBdLm1lc3NhZ2UgPT09ICdQZXJtaXNzaW9uIGRpc21pc3NlZCcpIHtcbiAgICAgICAgJGNhbWVyYVN0YXR1c1N0b3JlID0gQ2FtZXJhU3RhdHVzRW51bS5DQU1FUkFfREVOSUVEX0VSUk9SO1xuICAgICAgfSBlbHNlIGlmIChlLmRldGFpbFswXS5tZXNzYWdlID09PSAnUmVxdWVzdGVkIGRldmljZSBub3QgZm91bmQnKSB7XG4gICAgICAgICRjYW1lcmFTdGF0dXNTdG9yZSA9IENhbWVyYVN0YXR1c0VudW0uREVWSUNFX05PVF9GT1VORF9FUlJPUjtcbiAgICAgIH1cbiAgICAgIGlkcm5kTG9hZGluZyA9IGZhbHNlO1xuICAgIH0pO1xuICAgIHdpZGdldEluc3RhbmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2ZhY2VEZXRlY3Rpb24nLCAoZSkgPT4ge1xuICAgICAgLy8gY29uc29sZS5sb2coZSk7XG4gICAgfSk7XG4gICAgd2lkZ2V0SW5zdGFuY2UuYWRkRXZlbnRMaXN0ZW5lcignY2xvc2UnLCBhc3luYyAoZSkgPT4ge1xuICAgICAgaWYgKCEkY2FwdHVyZWQpIHtcbiAgICAgICAgY2FwdHVyaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZHJuZENsb3NlZCA9IHRydWU7XG4gICAgICB3YWl0aW5nSWRybmRDYXB0dXJlRXZlbnQgPSBmYWxzZTtcbiAgICAgIGlmICgkY2FtZXJhU3RhdHVzU3RvcmUgPT09IENhbWVyYVN0YXR1c0VudW0uT0spIHtcbiAgICAgICAgJGNhbWVyYVN0YXR1c1N0b3JlID0gQ2FtZXJhU3RhdHVzRW51bS5DQU1FUkFfQ0xPU0VEX0VSUk9SO1xuICAgICAgfVxuICAgICAgLy8gY29uc29sZS5sb2coZSk7XG4gICAgfSk7XG4gICAgd2lkZ2V0SW5zdGFuY2UuYWRkRXZlbnRMaXN0ZW5lcignaW5pdGlhbGl6ZScsIGFzeW5jIChlKSA9PiB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhlKTtcbiAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICRpZHJuZEluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIGlmICgkc2VsZWN0ZWRUYWIgPT09IFRhYkVudW0uRmFjZSkge1xuICAgICAgICBpZiAoIWNhcHR1cmluZyAmJiAhJGNhcHR1cmVkICYmIGluaXRpYWxpemVkKSB7XG4gICAgICAgICAgYXdhaXQgb3BlbkNhbWVyYUxpdmVuZXNzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB3aWRnZXRJbnN0YW5jZS5hZGRFdmVudExpc3RlbmVyKCdjYXB0dXJlJywgYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICBsaXZlbmVzc0Vycm9yID0gJyc7XG4gICAgICBjb25zdCB7IGVuY3J5cHRlZEZpbGUsIHBob3RvIH0gPSBldmVudC5kZXRhaWxbMF07XG4gICAgICAkYmxvYiA9IGVuY3J5cHRlZEZpbGU7XG4gICAgICB3YWl0aW5nSWRybmRDYXB0dXJlRXZlbnQgPSBmYWxzZTtcbiAgICAgICRyZXF1ZXN0UmVzdWx0ID0gcmVxdWVzdFJlc3VsdEVudW0uT0s7XG4gICAgICAkdW5jb25mb3JtaXRpZXNTdG9yZS5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgJGNhcHR1cmVkID0gdHJ1ZTtcbiAgICAgIGNhcHR1cmluZyA9IGZhbHNlO1xuICAgICAgY29uc3QgaW1nID0gKGF3YWl0IGJsb2JUb0Jhc2U2NChwaG90bykpLnNwbGl0KCcsJyk7XG4gICAgICAkZGF0YVR5cGVQcmVmaXggPSBpbWdbMF07XG4gICAgICAkaW1hZ2UgPSBpbWdbMV07XG4gICAgICAkb3JpZ2luYWxDYXB0dXJlID0gaW1nWzFdO1xuICAgICAgLy8gaWYgbm8gZW5kcG9pbnQgaXMgcHJvdmlkZWQsIHdlIHVzZSB0aGUgZXZhbHVhdGUgYmlvbWV0cmljcyBlbmRwb2ludCB3aGljaCBzaG91bGQgZG8gYm90aCBsaXZlbmVzcyBhbmQgdW5jb25mb3JtaXRpZXNcbiAgICAgIGlmICghJGNhcHR1cmVMaXZlbmVzc0lkcm5kRW5kcG9pbnQpIHtcbiAgICAgICAgbGV0IGJvZHlQYXJ0cywgaWNhb1dhcm5pbmdzO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICh7IGJvZHlQYXJ0cywgaWNhb1dhcm5pbmdzIH0gPSBhd2FpdCBnZXRGYWNlVW5jb25mb3JtaXRpZXMoXG4gICAgICAgICAgICAkb3JpZ2luYWxDYXB0dXJlLFxuICAgICAgICAgICAgZXZhbHVhdGVQaG90byxcbiAgICAgICAgICAgIChhd2FpdCBibG9iVG9CYXNlNjQoZW5jcnlwdGVkRmlsZSkpLnNwbGl0KCcsJylbMV1cbiAgICAgICAgICApKTtcbiAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnZmFjZS11bmNvbmZvcm1pdGllcy12YWxpZGF0ZWQnLCB7XG4gICAgICAgICAgICAgIGRldGFpbDogeyBib2R5UGFydHMsIGljYW9XYXJuaW5ncywgc3RhdHVzOiAkcmVxdWVzdFJlc3VsdCB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICAgIC8vVE9ETzogdW5jb21tZW50IHRoaXNcbiAgICAgICAgICAvLyBpZiBldmVyeXRoaW5nIGlzIGZpbmUsIGNsb3NlIHRoZSBjYW1lcmEgYWxyZWFkeS5cbiAgICAgICAgICAvLyB3aWRnZXRJbnN0YW5jZS5jbG9zZUNhbWVyYSgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICBsZXQgZXJyb3JDb2RlID0gaWRybmRFcnJvclRvaTE4bktleVsnVU5LTk9XTiddO1xuICAgICAgICAgIGxldCBib2R5UGFydHM6IEJvZHlQYXJ0W10gPSBbXTtcbiAgICAgICAgICBsZXQgaWNhb1dhcm5pbmdzID0gW107XG4gICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBBeGlvc0Vycm9yICYmIGUucmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICBpZiAoZS5yZXNwb25zZS5kYXRhICYmIEFycmF5LmlzQXJyYXkoZS5yZXNwb25zZS5kYXRhLmJvZHlQYXJ0cykpIHtcbiAgICAgICAgICAgICAgYm9keVBhcnRzID0gZS5yZXNwb25zZS5kYXRhLmJvZHlQYXJ0cyBhcyBCb2R5UGFydFtdO1xuICAgICAgICAgICAgICBpY2FvV2FybmluZ3MgPSBlLnJlc3BvbnNlLmRhdGEuaWNhb1dhcm5pbmdzO1xuICAgICAgICAgICAgICBjb25zdCBmYWNlID0gYm9keVBhcnRzLmZpbmQoKGJwKSA9PiAoYnAubGl2ZW5lc3NSZXN1bHQgYXMgbGl2ZW5lc3NFcnJvclJlc3VsdCkuZXJyb3IpO1xuICAgICAgICAgICAgICBlcnJvckNvZGUgPSAoZmFjZT8ubGl2ZW5lc3NSZXN1bHQgYXMgbGl2ZW5lc3NFcnJvclJlc3VsdCkuZXJyb3JfY29kZTtcbiAgICAgICAgICAgICAgJHJlcXVlc3RSZXN1bHQgPSByZXF1ZXN0UmVzdWx0RW51bS5MSVZFTkVTU19ERVRFQ1RJT05fRkFJTFVSRTtcbiAgICAgICAgICAgICAgaWYgKCEoZmFjZT8ubGl2ZW5lc3NSZXN1bHQgYXMgbGl2ZW5lc3NFcnJvclJlc3VsdCkuZXJyb3JfY29kZSkge1xuICAgICAgICAgICAgICAgICRyZXF1ZXN0UmVzdWx0ID0gcmVxdWVzdFJlc3VsdEVudW0uVU5LTk9XTl9MSVZFTkVTU19FUlJPUjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsaXZlbmVzc0Vycm9yID0gaWRybmRFcnJvclRvaTE4bktleVtlcnJvckNvZGUgYXMga2V5b2YgdHlwZW9mIGlkcm5kRXJyb3JUb2kxOG5LZXldO1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdMaXZlbmVzcyBlcnJvcjonLCBlcnJvckNvZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gaWYgYnBzIGlzIG1pc3NpbmcsIHRoaXMgaXMgbGlrZWx5IGEgdGVtcGxhdGUgZXh0cmFjdGlvbiBlcnJvclxuICAgICAgICAgICAgICAkcmVxdWVzdFJlc3VsdCA9IHJlcXVlc3RSZXN1bHRFbnVtLlRFTVBMQVRFX0VYVFJBQ1RJT05fRVJST1I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRyZXF1ZXN0UmVzdWx0ID0gcmVxdWVzdFJlc3VsdEVudW0uVU5LTk9XTl9MSVZFTkVTU19FUlJPUjtcbiAgICAgICAgICAgIHRvYXN0LmZpcmUoeyBpY29uOiAnZXJyb3InLCB0aXRsZTogJ0ZhbGhhIGFvIGNvbXVuaWNhciBjb20gc2VydmnDp28gZGUgTGl2ZW5lc3MnIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAkdW5jb25mb3JtaXRpZXNTdG9yZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnZmFjZS11bmNvbmZvcm1pdGllcy12YWxpZGF0ZWQnLCB7XG4gICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIGJvZHlQYXJ0cyxcbiAgICAgICAgICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlZEVycm9yOiAkXyhsaXZlbmVzc0Vycm9yKSxcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICRyZXF1ZXN0UmVzdWx0LFxuICAgICAgICAgICAgICAgIGljYW9XYXJuaW5ncyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRyZXF1ZXN0UmVzdWx0ICE9PSByZXF1ZXN0UmVzdWx0RW51bS5PSykge1xuICAgICAgICAgICR1bmNvbmZvcm1pdGllc1N0b3JlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm9keVBhcnRzWzBdLmxpdmVuZXNzUmVzdWx0KSB7XG4gICAgICAgICAgdmFsaWRhdGVMaXZlbmVzcyhib2R5UGFydHNbMF0ubGl2ZW5lc3NSZXN1bHQgYXMgbGl2ZW5lc3NSZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChib2R5UGFydHMubGVuZ3RoICE9PSAwICYmIGJvZHlQYXJ0c1swXS5kYXRhKSB7XG4gICAgICAgICAgJGltYWdlID0gYm9keVBhcnRzWzBdLmRhdGE7XG4gICAgICAgIH1cblxuICAgICAgICB0cmFuc2xhdGVBbmRTZXRVbmNvbmZvcm1pdGllcyhpY2FvV2FybmluZ3MhKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IGVycm9yQ29kZTtcbiAgICAgIGxldCBsaXZlbmVzc1Jlc3VsdDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxpdmVuZXNzUmVzdWx0ID0gYXdhaXQgZ2V0TGl2ZW5lc3NJZHJuZChlbmNyeXB0ZWRGaWxlKTtcbiAgICAgICAgdmFsaWRhdGVMaXZlbmVzcyhsaXZlbmVzc1Jlc3VsdC5kYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgJHJlcXVlc3RSZXN1bHQgPSByZXF1ZXN0UmVzdWx0RW51bS5VTktOT1dOX0xJVkVORVNTX0VSUk9SO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEF4aW9zRXJyb3IgJiYgZS5yZXNwb25zZT8uc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgICBlcnJvckNvZGUgPSBlLnJlc3BvbnNlLmRhdGEuZXJyb3JfY29kZTtcbiAgICAgICAgICBsaXZlbmVzc0Vycm9yID0gaWRybmRFcnJvclRvaTE4bktleVtlcnJvckNvZGUgYXMga2V5b2YgdHlwZW9mIGlkcm5kRXJyb3JUb2kxOG5LZXldO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0xpdmVuZXNzIGVycm9yOicsIGVycm9yQ29kZSk7XG4gICAgICAgICAgJHJlcXVlc3RSZXN1bHQgPSByZXF1ZXN0UmVzdWx0RW51bS5MSVZFTkVTU19ERVRFQ1RJT05fRkFJTFVSRTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0b2FzdC5maXJlKHsgaWNvbjogJ2Vycm9yJywgdGl0bGU6ICdGYWxoYSBhbyBjb211bmljYXIgY29tIHNlcnZpw6dvIGRlIExpdmVuZXNzJyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoJHJlcXVlc3RSZXN1bHQgIT09IHJlcXVlc3RSZXN1bHRFbnVtLk9LKSB7XG4gICAgICAgICR1bmNvbmZvcm1pdGllc1N0b3JlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ2ZhY2UtdW5jb25mb3JtaXRpZXMtdmFsaWRhdGVkJywge1xuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGJvZHlQYXJ0czogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGJvZHlQYXJ0OiAnRkFDRScsXG4gICAgICAgICAgICAgICAgICBkYXRhOiAkb3JpZ2luYWxDYXB0dXJlLFxuICAgICAgICAgICAgICAgICAgbGl2ZW5lc3NCbG9iOiAoYXdhaXQgYmxvYlRvQmFzZTY0KGVuY3J5cHRlZEZpbGUpKS5zcGxpdCgnLCcpWzFdLFxuICAgICAgICAgICAgICAgICAgLi4uKGxpdmVuZXNzUmVzdWx0ICYmIHsgbGl2ZW5lc3NSZXN1bHQgfSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgLi4uKGVycm9yQ29kZSAmJiB7IGVycm9yQ29kZSB9KSxcbiAgICAgICAgICAgICAgLi4uKGxpdmVuZXNzRXJyb3IgJiYgeyB0cmFuc2xhdGVkRXJyb3I6ICRfKGxpdmVuZXNzRXJyb3IpIH0pLFxuICAgICAgICAgICAgICBzdGF0dXM6ICRyZXF1ZXN0UmVzdWx0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgeyBib2R5UGFydHMsIGljYW9XYXJuaW5ncyB9ID0gYXdhaXQgZ2V0RmFjZVVuY29uZm9ybWl0aWVzKCRvcmlnaW5hbENhcHR1cmUsIGV2YWx1YXRlUGhvdG8pO1xuICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBDdXN0b21FdmVudCgnZmFjZS11bmNvbmZvcm1pdGllcy12YWxpZGF0ZWQnLCB7XG4gICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICBib2R5UGFydHMsXG4gICAgICAgICAgICBpY2FvV2FybmluZ3MsXG4gICAgICAgICAgICBzdGF0dXM6ICRyZXF1ZXN0UmVzdWx0LFxuICAgICAgICAgICAgZXJyb3JDb2RlLFxuICAgICAgICAgICAgLi4uKGxpdmVuZXNzRXJyb3IgJiYgeyB0cmFuc2xhdGVkRXJyb3I6ICRfKGxpdmVuZXNzRXJyb3IpIH0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgaWYgKGJvZHlQYXJ0c1swXS5kYXRhKSB7XG4gICAgICAgICRpbWFnZSA9IGJvZHlQYXJ0c1swXS5kYXRhO1xuICAgICAgfVxuICAgICAgdHJhbnNsYXRlQW5kU2V0VW5jb25mb3JtaXRpZXMoaWNhb1dhcm5pbmdzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIG9wZW5DYW1lcmEoZGV2aWNlPzogc3RyaW5nKSB7XG4gICAgLy8gdGhpcyB3ZWlyZCBzdHVmIHdpdGggaGVpZ2h0IGFuZCB3aWR0aCBpcyBoZXJlIHRvIGNvbXBlbnNhdGUgYSBzdmVsdGUgaXNzdWVcbiAgICAvLyBiZWNhdXNlIG9uTW91bnQgZ2V0cyBjYWxsZWQgdHdpY2VcbiAgICBjb25zdCBbd2lkdGgsIGhlaWdodF0gPSAodmlkZW9EaW1lbnNpb25zID8/ICcnKVxuICAgICAgPy5yZXBsYWNlQWxsKCcgJywgJycpXG4gICAgICA/LnNwbGl0KCd4JylcbiAgICAgID8ubWFwKCh2KSA9PiAodiA/IHBhcnNlSW50KHYpIDogdW5kZWZpbmVkKSk7XG4gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KSByZXR1cm47XG4gICAgJHZpZGVvU3RvcmUgPSB7IHZpZGVvV2lkdGg6IHdpZHRoLCB2aWRlb0hlaWdodDogaGVpZ2h0IH07XG4gICAgLy8gZmxpcCBlbVxuICAgIGlmIChpc0xpdmVuZXNzRW5hYmxlZCgpICYmIGhlaWdodCA8IHdpZHRoICYmIGlzTW9iaWxlKCkpIHtcbiAgICAgICR2aWRlb1N0b3JlID0geyB2aWRlb1dpZHRoOiBoZWlnaHQsIHZpZGVvSGVpZ2h0OiB3aWR0aCB9O1xuICAgIH1cbiAgICBcbiAgICBpZiAoaXNMaXZlbmVzc0VuYWJsZWQoKSkge1xuICAgICAgb3BlbkNhbWVyYUxpdmVuZXNzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgc2VsZWN0RGV2aWNlKHdpZHRoLCBoZWlnaHQsIGRldmljZSk7IC8vIG9wZW4gdGhlIGZyb250IGNhbWVyYSBcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5DYW1lcmFMaXZlbmVzcygpIHtcbiAgICBpZiAoIWlzTGl2ZW5lc3NFbmFibGVkKCkpIHJldHVybjtcblxuICAgICRjYW1lcmFTdGF0dXNTdG9yZSA9IENhbWVyYVN0YXR1c0VudW0uT0s7XG4gICAgaWYgKHdpZGdldEluc3RhbmNlICYmICdvcGVuQ2FtZXJhJyBpbiB3aWRnZXRJbnN0YW5jZSkgd2lkZ2V0SW5zdGFuY2Uub3BlbkNhbWVyYSgpO1xuICAgIGNhcHR1cmluZyA9IHRydWU7XG4gICAgaWRybmRDbG9zZWQgPSBmYWxzZTtcbiAgICBpZHJuZExvYWRpbmcgPSB0cnVlO1xuICB9XG5cbiAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBsYXkoKSB7XG4gICAgLy8gd2FpdCBmb3IgZmFjZSBhcGkgdG8gbG9hZCB3ZWlnaHRzXG4gICAgaWYgKCRlbmFibGVGYWNlQXBpICYmICFsb2FkZWRGYWNlQXBpQW5kV2VpZ2h0cykgcmV0dXJuIGxvb3BDYWxsZXIodmlkZW8sIHBsYXkpO1xuICAgIC8vIHJldHVybiBpZiB1bmluaXRpYWxpemVkIHZpZGVvIGVsZW1lbnRcbiAgICBpZiAoIXZpZGVvKSByZXR1cm47XG4gICAgLy8gcmV0dXJuIGlmIHRoZSBjdXJyZW50IHRhYiBpc24ndCBmYWNlXG4gICAgaWYgKCEoJHNlbGVjdGVkVGFiID09PSBUYWJFbnVtLkZhY2UpICYmICFub1RhYnMpIHJldHVybiBsb29wQ2FsbGVyKHZpZGVvLCBwbGF5KTtcbiAgICAvLyBpZiBldmVyeXRoaW5nIHBhc3NlcyB3ZSBhcmUgcmVhZHkgdG8gY2FwdHVyZVxuICAgICRyZWFkeSA9IHRydWU7XG4gICAgLy8gb25seSBtYWtlIGRldGVjdGlvbnMgaWYgZmFjZSBhcGkgZW5hYmxlZFxuICAgIGlmICgkZW5hYmxlRmFjZUFwaSkge1xuICAgICAgLy8gZmlyZXMgdGhlIGxpc3RlbmVyIHRvIHN0YXJ0IHRoZSBmYWNlIGFwaSBsb29wXG4gICAgICBpZiAoISRzdGFydEZhY2VBcGkpICRzdGFydEZhY2VBcGkgPSB0cnVlO1xuXG4gICAgICBpZiAoIWlzTGl2ZW5lc3NFbmFibGVkKCkpIHtcbiAgICAgICAgZHJhd092YWwoZGlzcGxheUNhbnZhcy5nZXRDb250ZXh0KCcyZCcpIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdmlkZW8pO1xuICAgICAgfVxuICAgICAgbG9vcENhbGxlcih2aWRlbywgcGxheSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyYXdPdmFsKGRpc3BsYXlDYW52YXMuZ2V0Q29udGV4dCgnMmQnKSBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHZpZGVvKTtcbiAgICAgIGxvb3BDYWxsZXIodmlkZW8sIHBsYXkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGNhcHR1cmUoKSB7XG4gICAgdW5Mb2NrU2NyZWVuKCk7XG4gICAgJHJlcXVlc3RSZXN1bHQgPSByZXF1ZXN0UmVzdWx0RW51bS5PSztcbiAgICBpZiAoaXNMaXZlbmVzc0VuYWJsZWQoKSkge1xuICAgICAgd2FpdGluZ0lkcm5kQ2FwdHVyZUV2ZW50ID0gdHJ1ZTtcbiAgICAgIHdpZGdldEluc3RhbmNlLnRha2VQaG90bygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAkY2FwdHVyZWQgPSB0cnVlO1xuICAgIGlmICgkZW5hYmxlRmFjZUFwaSkge1xuICAgICAgY29uc3QgW2NhbnZhc10gPSBhd2FpdCAoYXdhaXQgaW1wb3J0KCdAdmxhZG1hbmRpYy9mYWNlLWFwaScpKS5leHRyYWN0RmFjZXModmlkZW8sIFskYm94U3RvcmVdKTtcbiAgICAgIGNvbnN0IGltZyA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnKS5zcGxpdCgnLCcpO1xuICAgICAgJGRhdGFUeXBlUHJlZml4ID0gaW1nWzBdO1xuICAgICAgJGltYWdlID0gaW1nWzFdO1xuICAgICAgJG9yaWdpbmFsQ2FwdHVyZSA9IGltZ1sxXTtcbiAgICAgIGxldCB7IGJvZHlQYXJ0cywgaWNhb1dhcm5pbmdzIH0gPSBhd2FpdCBnZXRGYWNlVW5jb25mb3JtaXRpZXMoJGltYWdlLCBldmFsdWF0ZVBob3RvKTtcbiAgICAgIC8vIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDIxMDAwMCkpO1xuICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBDdXN0b21FdmVudCgnZmFjZS11bmNvbmZvcm1pdGllcy12YWxpZGF0ZWQnLCB7XG4gICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICBib2R5UGFydHMsXG4gICAgICAgICAgICBpY2FvV2FybmluZ3MsXG4gICAgICAgICAgICBzdGF0dXM6ICRyZXF1ZXN0UmVzdWx0LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgaWYgKGJvZHlQYXJ0cy5sZW5ndGggIT09IDAgJiYgYm9keVBhcnRzWzBdLmRhdGEpIHtcbiAgICAgICAgJGltYWdlID0gYm9keVBhcnRzWzBdLmRhdGE7XG4gICAgICB9XG4gICAgICB0cmFuc2xhdGVBbmRTZXRVbmNvbmZvcm1pdGllcyhpY2FvV2FybmluZ3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgY2FudmFzLndpZHRoID0gdmlkZW8ud2lkdGg7XG4gICAgICBjYW52YXMuaGVpZ2h0ID0gdmlkZW8uaGVpZ2h0O1xuICAgICAgY3R4Py5kcmF3SW1hZ2UodmlkZW8sIDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgICBjb25zdCBpbWcgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJykuc3BsaXQoJywnKTtcbiAgICAgICRkYXRhVHlwZVByZWZpeCA9IGltZ1swXTtcbiAgICAgICRpbWFnZSA9IGltZ1sxXTtcbiAgICAgICRvcmlnaW5hbENhcHR1cmUgPSBpbWdbMV07XG4gICAgICBsZXQgeyBib2R5UGFydHMsIGljYW9XYXJuaW5ncyB9ID0gYXdhaXQgZ2V0RmFjZVVuY29uZm9ybWl0aWVzKCRpbWFnZSwgZXZhbHVhdGVQaG90byk7XG4gICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdmYWNlLXVuY29uZm9ybWl0aWVzLXZhbGlkYXRlZCcsIHtcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIGJvZHlQYXJ0cyxcbiAgICAgICAgICAgIGljYW9XYXJuaW5ncyxcbiAgICAgICAgICAgIHN0YXR1czogJHJlcXVlc3RSZXN1bHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBpZiAoYm9keVBhcnRzLmxlbmd0aCAhPT0gMCAmJiBib2R5UGFydHNbMF0uZGF0YSkge1xuICAgICAgICAkaW1hZ2UgPSBib2R5UGFydHNbMF0uZGF0YTtcbiAgICAgIH1cbiAgICAgIHRyYW5zbGF0ZUFuZFNldFVuY29uZm9ybWl0aWVzKGljYW9XYXJuaW5ncyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2F2ZSgpIHtcbiAgICBjb25zdCBmYWNlOiBCb2R5UGFydCA9IHtcbiAgICAgIGJvZHlQYXJ0OiAnRkFDRScsXG4gICAgICBkYXRhOiAkaW1hZ2UsXG4gICAgICBqdXN0aWZpY2F0aW9uOiAkanVzdGlmaWNhdGlvbixcbiAgICB9O1xuICAgICRzYXZlZCA9IHRydWU7XG4gICAgLy8gc2VuZCBibG9iIGlmIHByZXNlbnRcbiAgICBpZiAoZ2V0KGJsb2IpKSB7XG4gICAgICBibG9iVG9CYXNlNjQoZ2V0KGJsb2IpKS50aGVuKChiYXNlNjQpID0+IHtcbiAgICAgICAgZmFjZS5saXZlbmVzc0Jsb2IgPSBiYXNlNjQuc3BsaXQoJywnKVsxXTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2V4cG9ydC1mYWNlJywgeyBkZXRhaWw6IGZhY2UgfSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmV0YWtlKCkge1xuICAgIC8vZW1pdCBhbiBlbXB0eSBldmVudCBpbmZvcm1pbmcgdGhhdCBpdCB3YXMgc2NyYXBwZWRcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2ZhY2Utc2NyYXBwZWQnKSk7XG4gICAgJHNhdmVkID0gZmFsc2U7XG4gICAgJHJlcXVlc3RSZXN1bHQgPSByZXF1ZXN0UmVzdWx0RW51bS5PSztcbiAgICAkY2FwdHVyZWQgPSBmYWxzZTtcbiAgICAkb3JpZ2luYWxDYXB0dXJlID0gJyc7XG4gICAgJHVuY29uZm9ybWl0aWVzU3RvcmUudW5jb25mb3JtaXRpZXMgPSBbXTtcbiAgICBjb25zdCBmYWNlVmFsaWRhdGlvbnMgPSBnZXQoZmFjZVZhbGlkYXRpb25zU3RvcmUpO1xuICAgIGZhY2VWYWxpZGF0aW9ucy5jbG9zZWRNb3V0aCA9IGZhbHNlO1xuICAgIGZhY2VWYWxpZGF0aW9ucy5pc1BlcnNvbkNsb3NlRW5vdWdoID0gZmFsc2U7XG4gICAgZmFjZVZhbGlkYXRpb25zLmlzUGVyc29uVG9vY2xvc2UgPSB0cnVlO1xuICAgIGZhY2VWYWxpZGF0aW9ucy5pc1BlcnNvbkluRnJhbWUgPSBmYWxzZTtcbiAgICBmYWNlVmFsaWRhdGlvbkFsZXJ0ID0gJyc7XG4gICAgZmFjZU5vdFZhbGlkYXRlZCA9IGZhbHNlO1xuICAgIGZhY2VWYWxpZGF0aW9uc1N0b3JlLnNldChmYWNlVmFsaWRhdGlvbnMpO1xuICAgIGlmIChpZHJuZENsb3NlZCkgb3BlbkNhbWVyYUxpdmVuZXNzKCk7XG4gIH1cblxuICBmdW5jdGlvbiB2YWxpZGF0ZUxpdmVuZXNzKHJlc3VsdDogbGl2ZW5lc3NSZXN1bHQpIHtcbiAgICBsZXQgdGl0bGUgPSAnJztcbiAgICBsZXQgaWNvbjogU3dlZXRBbGVydEljb24gPSAnc3VjY2Vzcyc7XG4gICAgaWYgKHJlc3VsdC5pc0FsaXZlKSB7XG4gICAgICB0aXRsZSA9IGBWaXZhY2lkYWRlIGRlIGZhY2UgKCR7cmVzdWx0LmZhY2VfbGl2ZW5lc3MucHJvYmFiaWxpdHkudG9GaXhlZCgyKX0pIGUgZGUgY2FwdHVyYSAoJHtcbiAgICAgICAgcmVzdWx0LmNhcHR1cmVfbGl2ZW5lc3MucHJvYmFiaWxpdHlcbiAgICAgIH0sICR7cmVzdWx0LmNhcHR1cmVfbGl2ZW5lc3Muc2NvcmUudG9GaXhlZCgyKX0pIHZlcmlmaWNhZG9zIWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChyZXN1bHQ/LmZhY2VfbGl2ZW5lc3M/LnByb2JhYmlsaXR5KSB7XG4gICAgICAgIGljb24gPSAnZXJyb3InO1xuICAgICAgICB0aXRsZSA9IGBWaXZhY2lkYWRlIGRlIGZhY2UgKCR7cmVzdWx0LmZhY2VfbGl2ZW5lc3MucHJvYmFiaWxpdHkudG9GaXhlZCgyKX0pIGUgZGUgY2FwdHVyYSAoJHtcbiAgICAgICAgICByZXN1bHQuY2FwdHVyZV9saXZlbmVzcy5wcm9iYWJpbGl0eVxuICAgICAgICB9LCAke3Jlc3VsdC5jYXB0dXJlX2xpdmVuZXNzLnNjb3JlLnRvRml4ZWQoMil9KSBpbnN1ZmljaWVudGVzIWA7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgkc2hvd0xpdmVuZXNzUmVzdWx0VG9hc3QpIHRvYXN0LmZpcmUoeyBpY29uLCB0aXRsZSB9KTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHNlbGVjdERldmljZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgZGV2aWNlPzogc3RyaW5nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoJGNhbWVyYVN0YXR1c1N0b3JlID09IENhbWVyYVN0YXR1c0VudW0uQ0FNRVJBX09SSUVOVEFUSU9OX1BPUlRSQUlUKSByZXR1cm47XG5cbiAgICAgICAgYXdhaXQgZW51bWVyYXRlRGV2aWNlcygpO1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgZGV2aWNlSWQ6IGRldmljZUlkLFxuICAgICAgICAgIHdpZHRoOiB3aWR0aENhbWVyYSxcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodENhbWVyYSxcbiAgICAgICAgICBhc3BlY3RSYXRpbzogYXNwZWN0UmF0aW9DYW1lcmEsXG4gICAgICAgICAgZmFjaW5nTW9kZTogZmFjaW5nLFxuICAgICAgICAgIHRvdWNoUG9pbnRzOiB0b3VjaFBvaW50c1xuICAgICAgICB9ID0gYXdhaXQgZ2V0VmlkZW9EaW1lbnNpb25zKHdpZHRoLCBoZWlnaHQsICRmYWNpbmdNb2RlLCBkZXZpY2UpO1xuICAgICAgICBpZiAod2lkdGhDYW1lcmEgPCB3aWR0aCAmJiBoZWlnaHRDYW1lcmEgPCBoZWlnaHQpIHtcbiAgICAgICAgICAkdmlkZW9TdG9yZSA9IHsgdmlkZW9XaWR0aDogd2lkdGhDYW1lcmEsIHZpZGVvSGVpZ2h0OiBoZWlnaHRDYW1lcmEgfTsgICAgICAgICAgXG4gICAgICAgIH1cbiAgICAgICAgLy8gdG8gd29yayBvbiBkZXZpY2UgZW11bGF0aW9uIChkZXNrdG9wKVxuICAgICAgICBpZiAoaXNNb2JpbGUoKSAmJiAoIWZhY2luZyB8fCB0b3VjaFBvaW50cyA8PSAxKSAgJiYgKHdpZHRoQ2FtZXJhID4gaGVpZ2h0Q2FtZXJhKSkgeyBcbiAgICAgICAgICAkdmlkZW9TdG9yZSA9IHsgdmlkZW9XaWR0aDogaGVpZ2h0Q2FtZXJhLCB2aWRlb0hlaWdodDogd2lkdGhDYW1lcmEgfTsgICAgICAgICAgXG4gICAgICAgIH1cbiAgICAgICAgLy8gZml4ZXMgdGhlICdjYW1lcmEgZG9lc24ndCBvcGVuIGlzc3VlJyBidXQgY2F1c2VzIGJsYWNrIHNjcmVlblxuICAgICAgICAvLyAkc2VsZWN0ZWRWaWRlb0RldmljZUlkID0gbnVsbDtcbiAgICAgICAgJHNlbGVjdGVkVmlkZW9EZXZpY2VJZCA9IGRldmljZUlkID8gZGV2aWNlSWQgOiAkY2FtZXJhRGV2aWNlc1N0b3JlWzBdLmRldmljZUlkO1xuICAgICAgICAkY2FtZXJhU3RhdHVzU3RvcmUgPSBDYW1lcmFTdGF0dXNFbnVtLk9LO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IGUgYXMgRE9NRXhjZXB0aW9uO1xuICAgICAgICBpZHJuZENsb3NlZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnRFcnJvciA9IChpc09iamVjdChlKSAmJiBlLmNvbnN0cmFpbnQgPyBlLmNvbnN0cmFpbnQgOiAnJyk7IFxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yLCBjb25zdHJhaW50RXJyb3IpO1xuICAgICAgICBpZiAoaXNPYmplY3QoZXJyb3IpICYmICdtZXNzYWdlJyBpbiBlcnJvciAmJiBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdQZXJtaXNzaW9uIGRlbmllZCcpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIlVzZXIgZGlkbid0IGdpdmUgcGVybWlzc2lvbiB0byB1c2UgY2FtZXJhIVwiKTtcbiAgICAgICAgICAkY2FtZXJhU3RhdHVzU3RvcmUgPSBDYW1lcmFTdGF0dXNFbnVtLkNBTUVSQV9ERU5JRURfRVJST1I7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzT2JqZWN0KGVycm9yKSAmJiAnbWVzc2FnZScgaW4gZXJyb3IgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnUmVxdWVzdGVkIGRldmljZSBub3QgZm91bmQnKSkge1xuICAgICAgICAgICRjYW1lcmFTdGF0dXNTdG9yZSA9IENhbWVyYVN0YXR1c0VudW0uREVWSUNFX05PVF9GT1VORF9FUlJPUjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uc3RyYWludEVycm9yLmluY2x1ZGVzKCd3aWR0aCcpIHx8IGNvbnN0cmFpbnRFcnJvci5pbmNsdWRlcygnaGVpZ2h0JykpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBDYW1lcmEgZG9lcyBub3QgbWVldCB0aGUgbWluaW11bSBzdXBwb3J0ZWQgcmVxdWlyZW1lbnRzISAoJHtjb25zdHJhaW50RXJyb3J9KWApO1xuICAgICAgICAgICRjYW1lcmFTdGF0dXNTdG9yZSA9IENhbWVyYVN0YXR1c0VudW0uQ0FNRVJBX1VOU1VQUE9SVEVEO1xuICAgICAgICB9XG4gICAgICB9XG4gIH1cblxuICAvLyBTdWJzY3JpcHRpb25zXG5cbiAgY29uc3QgdW5zdWJzY3JpYmVWaWRlb0RpbWVuc2lvbnMgPSB2aWRlb1N0b3JlLnN1YnNjcmliZSgoc3RvcmVPYmopID0+IHtcbiAgICBpZiAoIXZpZGVvKSByZXR1cm47XG4gICAgaWYgKCFkZXRlY3Rpb25zQ2FudmFzKSByZXR1cm47XG5cbiAgICB2aWRlby53aWR0aCA9IHN0b3JlT2JqLnZpZGVvV2lkdGg7XG4gICAgdmlkZW8uaGVpZ2h0ID0gc3RvcmVPYmoudmlkZW9IZWlnaHQ7XG4gICAgZGV0ZWN0aW9uc0NhbnZhcy53aWR0aCA9IHN0b3JlT2JqLnZpZGVvV2lkdGg7XG4gICAgZGV0ZWN0aW9uc0NhbnZhcy5oZWlnaHQgPSBzdG9yZU9iai52aWRlb0hlaWdodDtcbiAgICBtYXNrQ2FudmFzLndpZHRoID0gc3RvcmVPYmoudmlkZW9XaWR0aDtcbiAgICBtYXNrQ2FudmFzLmhlaWdodCA9IHN0b3JlT2JqLnZpZGVvSGVpZ2h0O1xuICAgIC8vIGlmIChpc0xpdmVuZXNzRW5hYmxlZCgpKSB7XG4gICAgLy8gY29uc29sZS5sb2coc3RvcmVPYmoudmlkZW9XaWR0aCwgc3RvcmVPYmoudmlkZW9IZWlnaHQpO1xuICAgIGRpc3BsYXlDYW52YXMud2lkdGggPSBzdG9yZU9iai52aWRlb1dpZHRoO1xuICAgIGRpc3BsYXlDYW52YXMuaGVpZ2h0ID0gc3RvcmVPYmoudmlkZW9IZWlnaHQ7XG4gICAgLy8gfVxuICB9KTtcblxuICBjb25zdCB1bnN1YnNjcmliZUZhY2VWYWxpZGF0aW9ucyA9IGZhY2VWYWxpZGF0aW9uc1N0b3JlLnN1YnNjcmliZSgobmV3VmFsdWUpID0+IHtcbiAgICBsZXQgbmV3RmFjZVZhbGlkYXRpb25BbGVydCA9ICcnO1xuXG4gICAgaWYgKCFuZXdWYWx1ZS5pc1BlcnNvbkNsb3NlRW5vdWdoKSB7XG4gICAgICBuZXdGYWNlVmFsaWRhdGlvbkFsZXJ0ID0gJ2ZhY2VDb2xsZWN0b3IuY29tZUNsb3NlckNhbWVyYSc7XG4gICAgfSBlbHNlIGlmIChuZXdWYWx1ZS5pc1BlcnNvblRvb2Nsb3NlKSB7XG4gICAgICBuZXdGYWNlVmFsaWRhdGlvbkFsZXJ0ID0gJ2ZhY2VDb2xsZWN0b3IubW92ZUF3YXlDYW1lcmEnO1xuICAgIH0gZWxzZSBpZiAoIW5ld1ZhbHVlLmlzUGVyc29uSW5GcmFtZSkge1xuICAgICAgbmV3RmFjZVZhbGlkYXRpb25BbGVydCA9ICdmYWNlQ29sbGVjdG9yLnN0YXlJbkZyYW1lJztcbiAgICB9IGVsc2UgaWYgKCFuZXdWYWx1ZS5jbG9zZWRNb3V0aCkge1xuICAgICAgbmV3RmFjZVZhbGlkYXRpb25BbGVydCA9ICdmYWNlQ29sbGVjdG9yLmRvbnRPcGVuTW91dGgnO1xuICAgIH0gXG5cbiAgICBpZiAobmV3RmFjZVZhbGlkYXRpb25BbGVydCAhPSAnJyl7XG4gICAgICAgLy9UT0RPOiB0ZXN0IG9uIGlPUyBhbmQgaWYgaXQgZG9lc24ndCB3b3JrLCBkbyBpdCBiYXNlZCBvbiB0aGUgY2xvY2tcbiAgICAgICBpZiAobmV3RmFjZVZhbGlkYXRpb25BbGVydCAhPSBmYWNlVmFsaWRhdGlvbkFsZXJ0KSB7ICAgICAgICBcbiAgICAgICAgZmFjZU5vdFZhbGlkYXRlZCA9IGZhbHNlO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBmYWNlVmFsaWRhdGlvbkFsZXJ0ID0gbmV3RmFjZVZhbGlkYXRpb25BbGVydDtcbiAgICAgICAgICBmYWNlTm90VmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIEFVVE9NQVRJQyBDQVBUVVJFXG4gICAgLy8gaWYgYWxsIHRoZSBwYXJhbWV0ZXJzIGFyZSBva1xuICAgIGlmIChcbiAgICAgICEkY2FwdHVyZWQgJiZcbiAgICAgICRhdXRvbWF0aWNDYXB0dXJlICYmXG4gICAgICAhaXNDb3VudGluZ0Rvd24gJiZcbiAgICAgIG5ld1ZhbHVlLmlzUGVyc29uSW5GcmFtZSAmJlxuICAgICAgbmV3VmFsdWUuY2xvc2VkTW91dGggJiZcbiAgICAgICEoIW5ld1ZhbHVlLmlzUGVyc29uQ2xvc2VFbm91Z2ggfHwgbmV3VmFsdWUuaXNQZXJzb25Ub29jbG9zZSlcbiAgICApIHtcbiAgICAgIC8vIHN0YXJ0IGEgY291bnRkb3duIGFuZCB0YWtlIGEgcGljdHVyZVxuICAgICAgaXNDb3VudGluZ0Rvd24gPSB0cnVlO1xuICAgICAgZmFjZU5vdFZhbGlkYXRlZCA9IGZhbHNlO1xuICAgICAgY291bnREb3duRmluaXNoVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgY291bnREb3duQ2FwdHVyZTtcbiAgICAgIGNvbnN0IGNvdW50ZG93bkludGVydmFsQ2FsbGJhY2sgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIC8vIHN0b3AgY291bnRpbmcgaWYgZGlzYWJsZWQgbWlkLWNvdW50IG9yIGlmIGNhcHR1cmVkIGJlZm9yZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgISRhdXRvbWF0aWNDYXB0dXJlIHx8XG4gICAgICAgICAgJGNhcHR1cmVkIHx8XG4gICAgICAgICAgKGlzTGl2ZW5lc3NFbmFibGVkKCkgJiYgaWRybmRDbG9zZWQpIHx8XG4gICAgICAgICAgIW5ld1ZhbHVlLmlzUGVyc29uQ2xvc2VFbm91Z2ggfHxcbiAgICAgICAgICBuZXdWYWx1ZS5pc1BlcnNvblRvb2Nsb3NlIHx8XG4gICAgICAgICAgIW5ld1ZhbHVlLmNsb3NlZE1vdXRoIHx8XG4gICAgICAgICAgIW5ld1ZhbHVlLmlzUGVyc29uSW5GcmFtZVxuICAgICAgICApIHtcbiAgICAgICAgICBpc0NvdW50aW5nRG93biA9IGZhbHNlO1xuICAgICAgICAgIGRpc2FibGVDb3VudERvd24gPSB0cnVlO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgZGlzYWJsZUNvdW50RG93biA9IGZhbHNlO1xuICAgICAgICAgIH0sIDE1MDApO1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY291bnRkb3duSW50ZXJ2YWxDYWxsYmFjayk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICBjb25zdCByZW1haW5pbmdTZWNvbmRzID0gTWF0aC5mbG9vcigoKGNvdW50RG93bkZpbmlzaFRpbWUgLSBub3cpICUgKDEwMDAgKiA2MCkpIC8gMTAwMCk7XG4gICAgICAgIC8vIGNvdW50RG93bkh0bWxFbGVtZW50LmlubmVySFRNTCA9IHJlbWFpbmluZ1NlY29uZHMudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKHJlbWFpbmluZ1NlY29uZHMgPD0gMCkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY291bnRkb3duSW50ZXJ2YWxDYWxsYmFjayk7XG4gICAgICAgICAgaXNDb3VudGluZ0Rvd24gPSBmYWxzZTtcbiAgICAgICAgICBjb25zdCBjdXN0b21FbGVtZW50ID0gZG9jdW1lbnRcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYmlvbWV0cmljLWNvbGxlY3RvcicpPy5bMF1cbiAgICAgICAgICAgID8uc2hhZG93Um9vdD8uZ2V0RWxlbWVudEJ5SWQoJ2JyeS1jYy1jYXB0dXJlLWJ0bicpO1xuICAgICAgICAgIGN1c3RvbUVsZW1lbnQ/LmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMCk7XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZSBjb3VsZCBoYXZlIHVzZWQgaGlkZGVuPXskY2FwdHVyZWR9LCBidXQgZm9yIHNvbWUgcmVhc29uIGl0IGRvZXNuJ3Qgd29yayBzbyBkbyB0aGlzIGluc3RlYWRcbiAgY29uc3QgdW5zdWJzY3JpYmVDYXB0dXJlZFN0YXRlID0gY2FwdHVyZWQuc3Vic2NyaWJlKChuZXdWYWx1ZSkgPT4ge1xuICAgIGlmICghZW5jbG9zaW5nRGl2KSByZXR1cm47XG4gICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICBlbmNsb3NpbmdEaXYuY2xhc3NMaXN0LnJlbW92ZSgnZmxleCcpO1xuICAgICAgZW5jbG9zaW5nRGl2LmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNsb3NpbmdEaXYuY2xhc3NMaXN0LmFkZCgnZmxleCcpO1xuICAgICAgZW5jbG9zaW5nRGl2LmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmVDbGVhclZpZGVvU3JjID0gY2xlYXJlZFZpZGVvU3JjT2JqZWN0LnN1YnNjcmliZSgobmV3VmFsdWUpID0+IHtcbiAgICBpZiAoIXZpZGVvKSByZXR1cm47XG4gICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICBjb25zb2xlLmxvZygnc2V0dGluZyBudWxsIGluIHZpZGVvIHNyY09iamVjdCcpO1xuICAgICAgdmlkZW8uc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgIHZpZGVvLnNyYyA9ICcnO1xuICAgIH1cbiAgfSk7XG5cbiAgc2VsZWN0ZWRUYWIuc3Vic2NyaWJlKGFzeW5jICh0YWIpID0+IHtcbiAgICBpZiAodGFiID09PSBUYWJFbnVtLkZhY2UpIHtcbiAgICAgIGF3YWl0IGVudW1lcmF0ZURldmljZXMoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHVuc3Vic2NyaWJlU2VsZWN0ZWRTdHJlYW0gPSBzZWxlY3RlZFZpZGVvRGV2aWNlSWQuc3Vic2NyaWJlKGFzeW5jIChuZXdEZXZpY2VJZCkgPT4ge1xuICAgIGlmIChpc0xpdmVuZXNzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgaWYgKCFuZXdEZXZpY2VJZCkgcmV0dXJuO1xuICAgIGlmICghdmlkZW8pIHtcbiAgICAgIC8vIHJlcmVuZGVyIHZpZGVvIHRhZ1xuICAgICAgdW5pcXVlID0ge307XG4gICAgfVxuICAgIGNvbnN0IHsgdmlkZW9IZWlnaHQsIHZpZGVvV2lkdGggfSA9ICR2aWRlb1N0b3JlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBzZXR1cFN0cmVhbSh2aWRlb1dpZHRoLCB2aWRlb0hlaWdodCwgbmV3RGV2aWNlSWQpO1xuICAgICAgdmlkZW8uc3JjT2JqZWN0ID0gc3RyZWFtO1xuICAgICAgJF9zdHJlYW0gPSBzdHJlYW07XG4gICAgICAkY2xlYXJlZFZpZGVvU3JjT2JqZWN0ID0gZmFsc2U7XG4gICAgICBpZiAoIXJpZ2h0T3JpZW50YXRpb24pIHtcbiAgICAgICAgJGNhbWVyYVN0YXR1c1N0b3JlID0gQ2FtZXJhU3RhdHVzRW51bS5DQU1FUkFfT1JJRU5UQVRJT05fUE9SVFJBSVQ7XG4gICAgICAgIHNodXRPZmZDYW1lcmEoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGUgYXMgRE9NRXhjZXB0aW9uO1xuICAgICAgaWRybmRDbG9zZWQgPSB0cnVlO1xuICAgICAgaWYgKGlzT2JqZWN0KGVycm9yKSAmJiAnbWVzc2FnZScgaW4gZXJyb3IgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnUmVxdWVzdGVkIGRldmljZSBub3QgZm91bmQnKSkge1xuICAgICAgICAkY2FtZXJhU3RhdHVzU3RvcmUgPSBDYW1lcmFTdGF0dXNFbnVtLkRFVklDRV9OT1RfRk9VTkRfRVJST1I7XG4gICAgICB9XG4gICAgfVxuXG4gIH0pO1xuXG4gIGNvbnN0IHVuc3Vic2NyaWJlQ2hhbmdlVGFiID0gc2VsZWN0ZWRUYWIuc3Vic2NyaWJlKGFzeW5jICh0YWIpID0+IHtcbiAgICBpZiAodGFiID09PSBUYWJFbnVtLkZhY2UgJiYgaXNMaXZlbmVzc0VuYWJsZWQoKSkge1xuICAgICAgaWYgKCFjYXB0dXJpbmcgJiYgISRjYXB0dXJlZCAmJiBpbml0aWFsaXplZCkgYXdhaXQgb3BlbkNhbWVyYSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmVGYWNlQXBpID0gc3RhcnRGYWNlQXBpLnN1YnNjcmliZShhc3luYyAobmV3VmFsdWUpID0+IHtcbiAgICBpZiAobmV3VmFsdWUpIGZhY2VhcGlMb29wKCk7XG4gIH0pO1xuXG4gIGNvbnN0IHVuc3Vic2NyaWJlU3dhcENhbWVyYSA9IHN3YXBDYW1lcmEuc3Vic2NyaWJlKGFzeW5jIChuZXdWYWx1ZSkgPT4ge1xuICAgIGlmICghJHZpZGVvU3RvcmUpIHJldHVybjtcblxuICAgIGlmICghaXNNb2JpbGUoKSkgeyAvLyBkZXNrdG9wIGNhbWVyYXNcbiAgICAgIGNvbnN0IG5ld0RldmljZSA9ICRjYW1lcmFEZXZpY2VzU3RvcmUuZmluZChkZXZpY2UgPT4gZGV2aWNlLmRldmljZUlkICE9PSAkc2VsZWN0ZWRWaWRlb0RldmljZUlkKTtcbiAgICAgIGNvbnN0IGRldmljZUlkID0gbmV3RGV2aWNlID8gbmV3RGV2aWNlLmRldmljZUlkIDogJGNhbWVyYURldmljZXNTdG9yZVswXS5kZXZpY2VJZDtcbiAgICAgIG9wZW5DYW1lcmEoZGV2aWNlSWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChuZXdWYWx1ZSkgeyAvLyBtb2JpbGUgZGV2aWNlc1xuICAgICAgICAkZmFjaW5nTW9kZSA9IEZhY2luZ01vZGVFbnVtLlJFQVJfQ0FNRVJBO1xuICAgICAgICBhd2FpdCBvcGVuQ2FtZXJhKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgJGZhY2luZ01vZGUgPSBGYWNpbmdNb2RlRW51bS5GUk9OVF9DQU1FUkE7XG4gICAgICAgIGF3YWl0IG9wZW5DYW1lcmEoKTtcbiAgICB9IFxuICB9KTtcblxuICBjb25zdCB1bnN1YnNjcmliZU9yaWVudGF0aW9uID0gb3JpZW50YXRpb25EYXRhLnN1YnNjcmliZShhc3luYyAoZGF0YSkgPT4ge1xuICAgIGlmICghZGF0YS5pc1N1cHBvcnRlZCB8fCAhaXNNb2JpbGUoKSkgcmV0dXJuO1xuXG4gICAgcmlnaHRPcmllbnRhdGlvbiA9IGRhdGEub3JpZW50YXRpb24uaW5jbHVkZXMoJ3BvcnRyYWl0Jyk7XG4gICAgaWYgKHJpZ2h0T3JpZW50YXRpb24pIHtcbiAgICAgICRjYW1lcmFTdGF0dXNTdG9yZSA9IENhbWVyYVN0YXR1c0VudW0uT0s7XG4gICAgICBpZiAoJHZpZGVvU3RvcmUpIHsgXG4gICAgICAgICRzZWxlY3RlZFZpZGVvRGV2aWNlSWQgPSAnJztcbiAgICAgICAgJGZhY2luZ01vZGUgPSBGYWNpbmdNb2RlRW51bS5GUk9OVF9DQU1FUkE7XG4gICAgICAgIGF3YWl0IG9wZW5DYW1lcmEoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgJGNhbWVyYVN0YXR1c1N0b3JlID0gQ2FtZXJhU3RhdHVzRW51bS5DQU1FUkFfT1JJRU5UQVRJT05fUE9SVFJBSVQ7XG4gICAgICBzaHV0T2ZmQ2FtZXJhKCk7XG4gICAgfVxuICB9KTtcblxuICBhc3luYyBmdW5jdGlvbiBmYWNlYXBpTG9vcCgpIHtcbiAgICBsZXQgZGV0ZWN0aW9uc1Jlc3VsdDtcbiAgICBpZiAoZmFjZWFwaUNvdW50ZXIgPj0gZmFjZWFwaUZyYW1lUmF0ZSkge1xuICAgICAgZmFjZWFwaUNvdW50ZXIgPSAwO1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IGdldEZhY2VEZXRlY3Rvck9wdGlvbnMoKTtcbiAgICAgIC8vIGRlYnVnZ2VyXG4gICAgICBjb25zdCBmYWNlYXBpID0gYXdhaXQgaW1wb3J0KCdAdmxhZG1hbmRpYy9mYWNlLWFwaScpO1xuICAgICAgbGV0IGRldGVjdGlvbnNSZXN1bHQyO1xuICAgICAgZGV0ZWN0aW9uc1Jlc3VsdDIgPSBmYWNlYXBpLmRldGVjdFNpbmdsZUZhY2UoZGlzcGxheUNhbnZhcywgb3B0aW9ucyk7XG4gICAgICBkZXRlY3Rpb25zUmVzdWx0ID0gYXdhaXQgZGV0ZWN0aW9uc1Jlc3VsdDIud2l0aEZhY2VMYW5kbWFya3MoKTtcbiAgICAgIC8vIGNsZWFyIGNhbnZhcyB3aGVuIG5vdGhpbmcgZGV0ZWN0ZWRcbiAgICAgIGRldGVjdGlvbnNDYW52YXMuZ2V0Q29udGV4dCgnMmQnKT8uY2xlYXJSZWN0KDAsIDAsIGRldGVjdGlvbnNDYW52YXMud2lkdGgsIGRldGVjdGlvbnNDYW52YXMuaGVpZ2h0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmFjZWFwaUNvdW50ZXIgKys7XG4gICAgfVxuICAgIFxuICAgIGlmIChkZXRlY3Rpb25zUmVzdWx0KSB7XG4gICAgICBkcmF3RGV0ZWN0aW9uc0luRmFjZShkZXRlY3Rpb25zUmVzdWx0LCBkZXRlY3Rpb25zQ2FudmFzLCBlbmFibGVNaW51dGlhZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldEZhY2VOb3RGb3VuZFRpbWVvdXQoKTtcbiAgICB9XG4gICAgaWYgKCRzdGFydEZhY2VBcGkpIHtcbiAgICAgIGxvb3BDYWxsZXIodmlkZW8sIGZhY2VhcGlMb29wKTtcbiAgICB9XG4gIH1cblxuICByZXRha2VQaG90by5zdWJzY3JpYmUoYXN5bmMgKG52KSA9PiB7XG4gICAgaWYgKG52KSB7XG4gICAgICByZXRha2UoKTtcbiAgICAgICRyZXRha2VQaG90byA9IGZhbHNlO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmVSZWFkeUNhbWVyYUV2ZW50RW1pdHRlciA9IHJlYWR5LnN1YnNjcmliZSgobnYpID0+IHtcbiAgICBpZiAobnYpIHtcbiAgICAgIC8vIGluZm9ybXMgdGhhdCB0aGUgY2FtZXJhIGlzIHJlYWR5ICh0byBiZSBjbG9zZWQgaWYgdGhhdCBpcyB3aGF0IHlvdSB3YW50IHRvIGRvKVxuICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdicnljYy1jYW1lcmEtcmVhZHknKSk7XG4gICAgfVxuICB9KTtcblxuICBvbkRlc3Ryb3koKCkgPT4ge1xuICAgIHNodXRPZmZDYW1lcmEoKTtcbiAgICB1bnN1YnNjcmliZUNhcHR1cmVkU3RhdGUoKTtcbiAgICB1bnN1YnNjcmliZUZhY2VWYWxpZGF0aW9ucygpO1xuICAgIHVuc3Vic2NyaWJlVmlkZW9EaW1lbnNpb25zKCk7XG4gICAgdW5zdWJzY3JpYmVDbGVhclZpZGVvU3JjKCk7XG4gICAgdW5zdWJzY3JpYmVTZWxlY3RlZFN0cmVhbSgpO1xuICAgIHVuc3Vic2NyaWJlQ2hhbmdlVGFiKCk7XG4gICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICB1bnN1YnNjcmliZUZhY2VBcGkoKTtcbiAgICB1bnN1YnNjcmliZVN3YXBDYW1lcmEoKTtcbiAgICB1bnN1YnNjcmliZU9yaWVudGF0aW9uKCk7XG4gICAgdW5zdWJzY3JpYmVSZWFkeUNhbWVyYUV2ZW50RW1pdHRlcigpO1xuICAgIHVuTG9ja1NjcmVlbigpO1xuICAgIGludGVydmFsSWQgPSAwO1xuICB9KTtcbjwvc2NyaXB0PlxuXG48IS0tIHN2ZWx0ZS1pZ25vcmUgYTExeS1tZWRpYS1oYXMtY2FwdGlvbiAtLT5cbjxkaXY+XG4gIDwhLS0ge1skdmlkZW9TdG9yZT8udmlkZW9IZWlnaHQsICR2aWRlb1N0b3JlPy52aWRlb1dpZHRoXX1cbiAge1tkaXNwbGF5Q2FudmFzPy5oZWlnaHQsIGRpc3BsYXlDYW52YXM/LndpZHRoXX1cbiAge1skX3N0cmVhbT8uZ2V0VmlkZW9UcmFja3MoKVswXT8uZ2V0U2V0dGluZ3MoKT8uaGVpZ2h0LCAkX3N0cmVhbT8uZ2V0VmlkZW9UcmFja3MoKVswXT8uZ2V0U2V0dGluZ3MoKT8ud2lkdGhdfSAtLT5cbiAgPGRpdiBiaW5kOnRoaXM9e2VuY2xvc2luZ0Rpdn0gY2xhc3M9XCJmbGV4IGZsZXgtY29sIGp1c3RpZnktYmV0d2VlblwiPlxuICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBteC1hdXRvXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicmVsYXRpdmVcIlxuICAgICAgICBoaWRkZW49eyRjYW1lcmFTdGF0dXNTdG9yZSAhPT0gQ2FtZXJhU3RhdHVzRW51bS5PSyB8fFxuICAgICAgICAgIChpc0xpdmVuZXNzRW5hYmxlZCgpICYmIChpZHJuZExvYWRpbmcgfHwgaWRybmRDbG9zZWQgfHwgd2FpdGluZ0lkcm5kQ2FwdHVyZUV2ZW50KSl9XG4gICAgICA+XG4gICAgICAgIHsjaWYgaXNMaXZlbmVzc0VuYWJsZWQoKX1cbiAgICAgICAgICA8aWRsaXZlLWZhY2UtY2FwdHVyZVxuICAgICAgICAgICAgaGlkZGVuXG4gICAgICAgICAgICBtYXNrX2hpZGRlblxuICAgICAgICAgICAgYXV0b19jYXB0dXJlX2Rpc2FibGVkXG4gICAgICAgICAgICBhdXRvX2Nsb3NlX2Rpc2FibGVkXG4gICAgICAgICAgICBiaW5kOnRoaXM9e3dpZGdldEluc3RhbmNlfVxuICAgICAgICAgIC8+XG4gICAgICAgIHsvaWZ9XG4gICAgICAgIDwhLS0gd2hlbiB1bmlxdWUgZ2V0cyByZXNzaWduZWQgaXQgd2lsbCBnZXQgcmUgcmVuZGVyZWQsIHdoaWNoIHNvbHZlcyB0aGUgJ2NhbWVyYSBub3Qgb3BlbmluZyBpc3N1ZScgLS0+XG4gICAgICAgIHsja2V5IHVuaXF1ZX1cbiAgICAgICAgICA8dmlkZW9cbiAgICAgICAgICAgIGlkPVwiYnJ5LWNjLWNhbWVyYS12aWRlby10YWdcIlxuICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSAtei0xMFwiXG4gICAgICAgICAgICBiaW5kOnRoaXM9e3ZpZGVvfVxuICAgICAgICAgICAgb246Y2FucGxheT17KCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXNMaXZlbmVzc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAkdmlkZW9TdG9yZSA9IHsgdmlkZW9IZWlnaHQ6IHZpZGVvLnZpZGVvSGVpZ2h0LCB2aWRlb1dpZHRoOiB2aWRlby52aWRlb1dpZHRoIH07XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb246cGxheXxvbmNlPXtwbGF5fVxuICAgICAgICAgICAgcGxheXNpbmxpbmVcbiAgICAgICAgICAgIG11dGVkXG4gICAgICAgICAgICBhdXRvcGxheVxuICAgICAgICAgIC8+XG4gICAgICAgIHsva2V5fVxuICAgICAgICA8Q29uZkJ0biBjbGFzc05hbWU9XCJib3R0b20tMFwiIC8+XG4gICAgICAgIDxDYW1lcmFCdG4gY2xhc3NOYW1lPVwiYm90dG9tLTBcIiAvPlxuICAgICAgICBcbiAgICAgICAgPCEtLSB7I2lmIGlzTGl2ZW5lc3NFbmFibGVkKCl9IC0tPlxuICAgICAgICA8IS0tIHdvcmtzIGFzIHRoZSB2aWRlbyB0YWcgd2hlbiBsaXZlbmVzcyBlbmFibGVkLiBUaGlzIGlzIHJlcXVpcmVkIHRvIGJlIGFibGUgdG8gc2V0IHZpZGVvIHJhdGlvIGNvcnJlY3RseSAtLT5cbiAgICAgICAgPGNhbnZhcyBiaW5kOnRoaXM9e2Rpc3BsYXlDYW52YXN9IGlkPVwiYnJ5LWNlLWRpc3BsYXlDYW52YXNcIiBjbGFzcz1cIm1heC13LWZ1bGwgLXNjYWxlLXgtMTAwXCIgLz5cbiAgICAgICAgPCEtLSB7L2lmfSAtLT5cbiAgICAgICAgPGNhbnZhc1xuICAgICAgICAgIGJpbmQ6dGhpcz17ZGV0ZWN0aW9uc0NhbnZhc31cbiAgICAgICAgICBpZD1cImJyeS1jZS1kZXRlY3Rpb25zQ2FudmFzXCJcbiAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHRvcC0wIGxlZnQtMCBtYXgtdy1mdWxsIC1zY2FsZS14LTEwMFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxjYW52YXMgYmluZDp0aGlzPXttYXNrQ2FudmFzfSBpZD1cImJyeS1jZS1tYXNrQ2FudmFzXCIgY2xhc3M9XCJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgbWF4LXctZnVsbCAtc2NhbGUteC0xMDBcIiAvPlxuICAgICAgICB7I2lmIGlzQ291bnRpbmdEb3dufVxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIGxlZnQtMS8yIC10cmFuc2xhdGUteC0xLzIgdG9wLVs1JV0gY2UtZHVpLWJhZGdlIGNlLWR1aS1iYWRnZS1sZyBoLVsyZW1dIHRleHQtYmFzZSBiYXNlOnRleHQtYmFzZSB3LVsxMi4xZW1dXCJcbiAgICAgICAgICAgID57JF8oJ2ZhY2VDb2xsZWN0b3Iuc3RheVN0aWxsJyl9PC9zcGFuXG4gICAgICAgICAgPlxuICAgICAgICB7L2lmfVxuICAgICAgICB7I2lmICRlbmFibGVGYWNlQXBpICYmICFpc0NvdW50aW5nRG93biAmJiAkZmFjZUZvdW5kICYmIGZhY2VOb3RWYWxpZGF0ZWR9XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgbGVmdC0xLzIgLXRyYW5zbGF0ZS14LTEvMiB0b3AtWzUlXSBjZS1kdWktYmFkZ2UgY2UtZHVpLWJhZGdlLWxnIGgtWzJlbV0gdGV4dC1iYXNlIGJhc2U6dGV4dC1iYXNlIHctWzEyLjFlbV1cIlxuICAgICAgICAgICAgPnskXyhgJHtmYWNlVmFsaWRhdGlvbkFsZXJ0fWApfTwvc3BhblxuICAgICAgICAgID5cbiAgICAgICAgey9pZn1cbiAgICAgIDwvZGl2PlxuICAgICAgeyNpZiBpc0xpdmVuZXNzRW5hYmxlZCgpICYmIHdhaXRpbmdJZHJuZENhcHR1cmVFdmVudH1cbiAgICAgICAgPHNsb3QgbmFtZT1cIm9idGFpbmluZy1waG90by1naWZcIiBjbGFzcz1cImJsb2NrIGgtWzE3ZW1dIGxnOmgtWzIxLjZlbV0geGw6aC1bMzBlbV1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJhbnNsYXRlLXktMS8zIG1kOnRyYW5zbGF0ZS15LTEvNCB4bDp0cmFuc2xhdGUteS0xLzJcIj5cbiAgICAgICAgICAgIDxpbWcgc3JjPXtsb2FkaW5nR2lmfSBhbHQ9XCJsb2FkaW5nIGdpZlwiIGNsYXNzPVwibS1hdXRvIGgtWzEwZW1dIGxnOmgtWzEyZW1dXCIgLz5cbiAgICAgICAgICAgIHsjaWYgJGlzTG9hZGluZ31cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIyeGw6dGV4dC0yeGwgbGc6dGV4dC0yeGwgdGV4dC1tZCBibG9jayBwLTIgbS1hdXRvIHRleHQtY2VudGVyXCI+T2J0YWluaW5nIHBob3RvLi4uPC9zcGFuPlxuICAgICAgICAgICAgezplbHNlfVxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIjJ4bDp0ZXh0LTJ4bCBsZzp0ZXh0LTJ4bCB0ZXh0LW1kIGJsb2NrIHAtMiBtLWF1dG8gdGV4dC1jZW50ZXJcIlxuICAgICAgICAgICAgICAgID57JF8oJ2ZhY2VDb2xsZWN0b3Iub2J0YWluaW5nUGljdHVyZScpfTwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICB7L2lmfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3Nsb3Q+XG4gICAgICB7L2lmfVxuICAgICAgeyNpZiBpc0xpdmVuZXNzRW5hYmxlZCgpICYmIGlkcm5kTG9hZGluZyAmJiAkY2FtZXJhU3RhdHVzU3RvcmUgPT09IENhbWVyYVN0YXR1c0VudW0uT0t9XG4gICAgICAgIDxzbG90IG5hbWU9XCJsb2FkaW5nLWNhbWVyYS1naWZcIiBjbGFzcz1cImJsb2NrIGgtWzE3ZW1dIGxnOmgtWzIxLjZlbV0geGw6aC1bMzBlbV1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJhbnNsYXRlLXktMS8zIG1kOnRyYW5zbGF0ZS15LTEvNCB4bDp0cmFuc2xhdGUteS0xLzJcIj5cbiAgICAgICAgICAgIDxpbWcgc3JjPXtsb2FkaW5nR2lmfSBhbHQ9XCJsb2FkaW5nIGdpZlwiIGNsYXNzPVwibS1hdXRvIGgtWzEwZW1dIGxnOmgtWzEyZW1dXCIgLz5cbiAgICAgICAgICAgIHsjaWYgJGlzTG9hZGluZ31cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIyeGw6dGV4dC0yeGwgbGc6dGV4dC0yeGwgdGV4dC1tZCBibG9jayBwLTIgbS1hdXRvIHRleHQtY2VudGVyXCI+TG9hZGluZyBjYW1lcmEuLi48L3NwYW4+XG4gICAgICAgICAgICB7OmVsc2V9XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiMnhsOnRleHQtMnhsIGxnOnRleHQtMnhsIHRleHQtbWQgYmxvY2sgcC0yIG0tYXV0byB0ZXh0LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgPnskXygnZmFjZUNvbGxlY3Rvci5pbml0aWF0aW5nQ2FtZXJhJyl9PC9zcGFuXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgIHsvaWZ9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2xvdD5cbiAgICAgIHsvaWZ9XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicHgtNCBzbTpweC0wIG10LVsxZW1dXCJcbiAgICAgICAgaGlkZGVuPXshc2hvd0NhcHR1cmVCdXR0b24gfHwgaXNMaXZlbmVzc0VuYWJsZWQoKSAmJiAoaWRybmRMb2FkaW5nIHx8IGlkcm5kQ2xvc2VkIHx8IHdhaXRpbmdJZHJuZENhcHR1cmVFdmVudCl9XG4gICAgICA+XG4gICAgICAgIHsjaWYgISRjYXB0dXJlZH1cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBpZD1cImJyeS1jYy1jYXB0dXJlLWJ0blwiXG4gICAgICAgICAgICBkaXNhYmxlZD17KCEkZmFjZUZvdW5kICYmICRlbmFibGVGYWNlQXBpKSB8fCAoISRyZWFkeSAmJiAhJGVuYWJsZUZhY2VBcGkpfVxuICAgICAgICAgICAgaGlkZGVuPXshc2hvd0NhcHR1cmVCdXR0b259XG4gICAgICAgICAgICBjbGFzcz1cImNlLWR1aS1idG4gY2UtZHVpLWJ0bi1ibG9jayBjZS1kdWktYnRuLXByaW1hcnkgdGV4dC14bFwiXG4gICAgICAgICAgICBvbjpjbGljaz17KCkgPT4gY2FwdHVyZSgpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHsjaWYgJGlzTG9hZGluZ31cbiAgICAgICAgICAgICAgVGFrZSBwaWN0dXJlXG4gICAgICAgICAgICB7OmVsc2V9XG4gICAgICAgICAgICAgIHskXygnZmFjZUNvbGxlY3Rvci50YWtlUGljdHVyZScpfVxuICAgICAgICAgICAgey9pZn1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgezplbHNlfVxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZS1kdWktYnRuLWdyb3VwIGZsZXhcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb246Y2xpY2s9eygpID0+IHNhdmUoKX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9eyRqdXN0aWZpY2F0aW9uLmxlbmd0aCA9PT0gMH1cbiAgICAgICAgICAgICAgY2xhc3M9XCJjZS1kdWktYnRuIGNlLWR1aS1idG4tcHJpbWFyeSBjZS1kdWktYnRuLWJsb2NrIGZsZXgtc2hyaW5rXCI+eyRfKCdmYWNlQ29sbGVjdG9yLmZpbmlzaCcpfTwvYnV0dG9uXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGlkPVwiYnJ5LWNjLXJldGFrZS1idXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImNlLWR1aS1idG4gY2UtZHVpLWJ0bi1ibG9jayBjZS1kdWktYnRuLW91dGxpbmUgZmxleC1zaHJpbmtcIlxuICAgICAgICAgICAgICBvbjpjbGljaz17KCkgPT4gcmV0YWtlKCl9PnskXygnZmFjZUNvbGxlY3Rvci5yZXRha2VQaG90bycpfTwvYnV0dG9uXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIHsvaWZ9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIHsjaWYgKCFpZHJuZENsb3NlZCB8fCAkY2FwdHVyZWQpICYmIHNob3dVbmNvbmZvcm1pdGllc31cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImdyaWQtY29scy0xIGdyaWQtcm93cy0yIHNtOmdyaWQtY29scy0yIHNtOmdyaWQtcm93cy0xIGdhcC1bLjVlbV0geyEkc2hvd0ZhY2VXaGlsZVZhbGlkYXRpbmcgJiZcbiAgICAgICR1bmNvbmZvcm1pdGllc1N0b3JlLmlzTG9hZGluZ1xuICAgICAgICA/ICdhYnNvbHV0ZSAtdHJhbnNsYXRlLXktMS8yIC10cmFuc2xhdGUteC0xLzIgdG9wLTEvMiBsZWZ0LTEvMiBvdmVyZmxvdy12aXNpYmxlJ1xuICAgICAgICA6ICdncmlkIG0tWzFlbV0gb3ZlcmZsb3ctaGlkZGVuJ31cIlxuICAgID5cbiAgICAgIDxpbWdcbiAgICAgICAgY2xhc3M9XCJtLWF1dG8gY29sLXN0YXJ0LTEgY29sLWVuZC0xIG1heC1oLVsyMy4yZW1dXCJcbiAgICAgICAgc3JjPXskZGF0YVR5cGVQcmVmaXggKyAnLCcgKyAkaW1hZ2V9XG4gICAgICAgIGhpZGRlbj17ISRjYXB0dXJlZCB8fCAoISRzaG93RmFjZVdoaWxlVmFsaWRhdGluZyAmJiAkdW5jb25mb3JtaXRpZXNTdG9yZS5pc0xvYWRpbmcpfVxuICAgICAgICBhbHQ9XCJcIlxuICAgICAgLz5cbiAgICAgIHsjaWYgISRjYXB0dXJlZH1cbiAgICAgICAgPGRpdiBjbGFzcz1cIlwiIC8+XG4gICAgICB7OmVsc2UgaWYgJHVuY29uZm9ybWl0aWVzU3RvcmUuaXNMb2FkaW5nfVxuICAgICAgICA8ZGl2IGNsYXNzPVwibWluLXctWzIwMHB4XVwiPlxuICAgICAgICAgIDxoMSBjbGFzcz1cImlubGluZS1ibG9jayB0ZXh0LTN4bCBmb250LWJvbGQgcGItWzFlbV0gdHJhbnNpdGlvbi1vcGFjaXR5XCI+eyRfKCdmYWNlQ29sbGVjdG9yLnZhbGlkYXRpbmcnKX08L2gxPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC02IGlubGluZS1ibG9jayBkb3QtdHlwaW5nXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICB7OmVsc2UgaWYgJHJlcXVlc3RSZXN1bHQgIT09IHJlcXVlc3RSZXN1bHRFbnVtLk9LfVxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICB7I2lmICRyZXF1ZXN0UmVzdWx0ID09PSByZXF1ZXN0UmVzdWx0RW51bS5MSVZFTkVTU19ERVRFQ1RJT05fRkFJTFVSRSB8fCAkcmVxdWVzdFJlc3VsdCA9PT0gcmVxdWVzdFJlc3VsdEVudW0uVU5LTk9XTl9MSVZFTkVTU19FUlJPUn1cbiAgICAgICAgICAgIDxoMSBjbGFzcz1cInRleHQtM3hsIGZvbnQtYm9sZCBwYi1bMWVtXSB0cmFuc2l0aW9uLW9wYWNpdHkgdGV4dC1lcnJvclwiPlxuICAgICAgICAgICAgICB7JF8oJ2xpdmVuZXNzLmVycm9yLmVycm9yJyl9OiB7JF8obGl2ZW5lc3NFcnJvcil9LlxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICB7OmVsc2UgaWYgJHJlcXVlc3RSZXN1bHQgPT09IHJlcXVlc3RSZXN1bHRFbnVtLkxPV19MSVZFTkVTU19TQ09SRX1cbiAgICAgICAgICAgIDxoMSBjbGFzcz1cInRleHQtM3hsIGZvbnQtYm9sZCBwYi1bMWVtXSB0cmFuc2l0aW9uLW9wYWNpdHkgdGV4dC1lcnJvclwiPlxuICAgICAgICAgICAgICB7JF8oJ2xpdmVuZXNzLmVycm9yLmVycm9yJyl9OiB7JF8oJ2ZhY2VDb2xsZWN0b3IudW5hbGl2ZUNhcHR1cmUnKX1cbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgezplbHNlIGlmICRyZXF1ZXN0UmVzdWx0ID09PSByZXF1ZXN0UmVzdWx0RW51bS5URU1QTEFURV9FWFRSQUNUSU9OX0VSUk9SIHx8ICRyZXF1ZXN0UmVzdWx0ID09PSByZXF1ZXN0UmVzdWx0RW51bS5VTktOT1dOX1RFTVBMQVRFX0VYVFJBQ1RJT05fRVJST1J9XG4gICAgICAgICAgICA8aDEgY2xhc3M9XCJ0ZXh0LTN4bCBmb250LWJvbGQgcGItWzFlbV0gdHJhbnNpdGlvbi1vcGFjaXR5IHRleHQtZXJyb3JcIj5cbiAgICAgICAgICAgICAgeyRfKCdmYWNlQ29sbGVjdG9yLmxvd1F1YWxpdHlDYXB0dXJlJyl9XG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgIHs6ZWxzZSBpZiAkcmVxdWVzdFJlc3VsdCA9PT0gcmVxdWVzdFJlc3VsdEVudW0uVU5BQkxFX1RPX0NPTU1VTklDQVRFX1dJVEhfVEVNUExBVEVfRVhUUkFDVElPTl9TRVJWSUNFfVxuICAgICAgICAgICAgPGgxIGNsYXNzPVwidGV4dC0zeGwgZm9udC1ib2xkIHBiLVsxZW1dIHRyYW5zaXRpb24tb3BhY2l0eSB0ZXh0LWVycm9yXCI+XG4gICAgICAgICAgICAgIHskXygnZmFjZUNvbGxlY3Rvci51bmFibGVUb0NvbXBsZXRlUmVxdWVzdCcpfVxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICB7OmVsc2V9XG4gICAgICAgICAgICA8aDEgY2xhc3M9XCJ0ZXh0LTN4bCBmb250LWJvbGQgcGItWzFlbV0gdHJhbnNpdGlvbi1vcGFjaXR5XCI+eyRfKCdmYWNlQ29sbGVjdG9yLmV2ZXJ5dGhpbmdPaycpfTwvaDE+XG4gICAgICAgICAgey9pZn1cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2UtZHVpLWJ0bi1ncm91cCBmbGV4XCI+XG4gICAgICAgICAgICA8YnV0dG9uIG9uOmNsaWNrPXsoKSA9PiBzYXZlKCl9IGRpc2FibGVkIGNsYXNzPVwiY2UtZHVpLWJ0biBjZS1kdWktYnRuLXByaW1hcnkgY2UtZHVpLWJ0bi1ibG9jayBmbGV4LXNocmlua1wiXG4gICAgICAgICAgICAgID57JF8oJ2ZhY2VDb2xsZWN0b3IuZmluaXNoJyl9PC9idXR0b25cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgaWQ9XCJicnktY2MtcmV0YWtlLWJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY2UtZHVpLWJ0biBjZS1kdWktYnRuLWJsb2NrIGNlLWR1aS1idG4tb3V0bGluZSBmbGV4LXNocmlua1wiXG4gICAgICAgICAgICAgIG9uOmNsaWNrPXsoKSA9PiByZXRha2UoKX0+eyRfKCdmYWNlQ29sbGVjdG9yLnJldGFrZVBob3RvJyl9PC9idXR0b25cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB7OmVsc2UgaWYgISRzYXZlZH1cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8aDEgY2xhc3M9XCJ0ZXh0LTN4bCBmb250LWJvbGQgcGItWzFlbV0gdHJhbnNpdGlvbi1vcGFjaXR5XCI+eyRfKCdmYWNlQ29sbGVjdG9yLnVuY29uZm9ybWl0aWVzJyl9PC9oMT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXBcIj5cbiAgICAgICAgICAgIHsjZWFjaCAkdW5jb25mb3JtaXRpZXNTdG9yZS51bmNvbmZvcm1pdGllcyBhcyB1bmNvbmZvcm1pdHl9XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZS1kdWktYmFkZ2UgY2UtZHVpLWJhZGdlLWxnIGgtWzJlbV0gY2UtZHVpLWJhZGdlLWVycm9yIHRleHQteGwgcGItWy4yNWVtXSBtLVsuNWVtXVwiPlxuICAgICAgICAgICAgICAgIHt1bmNvbmZvcm1pdHl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgey9lYWNofVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZS1kdWktZm9ybS1jb250cm9sIG10LVsyLjVlbV1cIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNlLWR1aS1sYWJlbFwiIGZvcj1cImp1c3RpZmljYXRpb25cIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZS1kdWktbGFiZWwtdGV4dCB0ZXh0LWJhc2VcIlxuICAgICAgICAgICAgICAgID57JF8oJ2ZhY2VDb2xsZWN0b3IucHJvdmlkZUFSZWFzb25Gb3JUaGVMb3dRdWFsaXR5Q2FwdHVyZScpfTwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgIGNvbnRlbnRlZGl0YWJsZVxuICAgICAgICAgICAgICBiaW5kOnZhbHVlPXskanVzdGlmaWNhdGlvbn1cbiAgICAgICAgICAgICAgaWQ9XCJqdXN0aWZpY2F0aW9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjZS1kdWktdGV4dGFyZWEgY2UtZHVpLXRleHRhcmVhLWJvcmRlcmVkIGgtWzZlbV0gdGV4dC1iYXNlXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9eyRfKCdmYWNlQ29sbGVjdG9yLnlvdXJKdXN0aWZpY2F0aW9uJyl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2UtZHVpLWxhYmVsXCIgZm9yPVwianVzdGlmaWNhdGlvblwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNlLWR1aS1sYWJlbC10ZXh0LWFsdCB0ZXh0LWJhc2VcIj4oeyRfKCdmYWNlQ29sbGVjdG9yLnRoaXNJbmZvcm1hdGlvbklzUmVxdWlyZWQnKX0pPC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7I2lmICRjYXB0dXJlZH1cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZS1kdWktYnRuLWdyb3VwIGZsZXhcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uOmNsaWNrPXsoKSA9PiBzYXZlKCl9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyRqdXN0aWZpY2F0aW9uLmxlbmd0aCA9PT0gMH1cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNlLWR1aS1idG4gY2UtZHVpLWJ0bi1wcmltYXJ5IGNlLWR1aS1idG4tYmxvY2sgZmxleC1zaHJpbmsgdGV4dC1iYXNlXCJcbiAgICAgICAgICAgICAgICA+eyRfKCdmYWNlQ29sbGVjdG9yLmZpbmlzaCcpfTwvYnV0dG9uXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGlkPVwiYnJ5LWNjLXJldGFrZS1idXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2UtZHVpLWJ0biBjZS1kdWktYnRuLWJsb2NrIGNlLWR1aS1idG4tb3V0bGluZSBmbGV4LXNocmluayB0ZXh0LWJhc2VcIlxuICAgICAgICAgICAgICAgIG9uOmNsaWNrPXsoKSA9PiByZXRha2UoKX0+eyRfKCdmYWNlQ29sbGVjdG9yLnJldGFrZVBob3RvJyl9PC9idXR0b25cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgey9pZn1cbiAgICAgICAgPC9kaXY+XG4gICAgICB7OmVsc2V9XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGgxIGNsYXNzPVwidGV4dC0zeGwgZm9udC1ib2xkIHBiLVsxZW1dIHRyYW5zaXRpb24tb3BhY2l0eVwiPnskXygnZmFjZUNvbGxlY3Rvci5jYXB0dXJlZCcpfTwvaDE+XG5cbiAgICAgICAgICB7I2lmICR1bmNvbmZvcm1pdGllc1N0b3JlLnVuY29uZm9ybWl0aWVzLmxlbmd0aCAhPT0gMH1cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNlLWR1aS1sYWJlbFwiIGZvcj1cImp1c3RpZmljYXRpb25cIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZS1kdWktbGFiZWwtdGV4dCB0ZXh0LWJhc2VcIj57JF8oJ2ZhY2VDb2xsZWN0b3IuanVzdGlmaWNhdGlvbicpfTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgY29udGVudGVkaXRhYmxlXG4gICAgICAgICAgICAgIGJpbmQ6dmFsdWU9eyRqdXN0aWZpY2F0aW9ufVxuICAgICAgICAgICAgICBpZD1cImp1c3RpZmljYXRpb25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImNlLWR1aS10ZXh0YXJlYSBjZS1kdWktdGV4dGFyZWEtYm9yZGVyZWQgdGV4dGFyZWEtZ2hvc3QgaC1bNmVtXSB3LWZ1bGwgdGV4dC1iYXNlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgey9pZn1cbiAgICAgICAgICA8ZGl2IGNsYXNzOmNlLWR1aS1idG4tZ3JvdXA9eyEkZXhwb3J0QnV0dG9uRGlzYWJsZWR9IGNsYXNzPVwiZmxleCBmbGV4LXJvd1wiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBpZD1cImJyeS1jYy1yZXRha2UtYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjZS1kdWktYnRuIGNlLWR1aS1idG4tYmxvY2sgZmxleC1zaHJpbmsgdGV4dC1iYXNlXCJcbiAgICAgICAgICAgICAgb246Y2xpY2s9eygpID0+IHJldGFrZSgpfT57JF8oJ2ZhY2VDb2xsZWN0b3IucmV0YWtlUGhvdG8nKX08L2J1dHRvblxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgeyNpZiBnZXQoZW5hYmxlU3RyYXRlZ3kpLmZhY2VTdHJhdGVneSAhPT0gRmFjZUV4cG9ydFN0cmF0ZWd5LkRJU0FCTEVEfVxuICAgICAgICAgICAgICA8RXhwb3J0QnRuIGNzc0NsYXNzPVwiY2UtZHVpLWJ0bi1ibG9jayBmbGV4LXNocmlua1wiIC8+XG4gICAgICAgICAgICB7L2lmfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIHsvaWZ9XG4gICAgICA8IS0tIDxoMSBoaWRkZW49eyEkY2FwdHVyZWR9IGNsYXNzPVwidGV4dC0zeGwgZm9udC1ib2xkIHBiLTQgdHJhbnNpdGlvbi1hbGxcIj5FeGNlbGVudGUhPC9oMT4gLS0+XG4gICAgPC9kaXY+XG4gIHs6ZWxzZSBpZiAkY2FtZXJhU3RhdHVzU3RvcmUgIT09IENhbWVyYVN0YXR1c0VudW0uT0t9XG4gICAgPENhbWVyYVN0YXR1c1xuICAgICAgaGFuZGxlcj17YXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBvcGVuQ2FtZXJhKCk7XG4gICAgICB9fVxuICAgIC8+XG4gIHsvaWZ9XG48L2Rpdj5cbiJdLCJuYW1lcyI6WyJpbnNlcnRfZGV2IiwidGFyZ2V0IiwiaWRsaXZlX2ZhY2VfY2FwdHVyZSIsImFuY2hvciIsInZpZGVvXzEiLCJjdHgiLCJ0X3ZhbHVlIiwic3BhbiIsImRpcnR5Iiwic2V0X2RhdGFfZGV2IiwidCIsImNyZWF0ZV9pZl9ibG9ja18xOCIsImxvYWRpbmdHaWYiLCJhdHRyX2RldiIsImltZyIsImltZ19zcmNfdmFsdWUiLCJzbG90IiwiYXBwZW5kX2RldiIsImRpdiIsImNyZWF0ZV9pZl9ibG9ja18xNiIsInQwX3ZhbHVlIiwidDJfdmFsdWUiLCJidXR0b24wIiwiYnV0dG9uMSIsInQwIiwidDIiLCJjcmVhdGVfaWZfYmxvY2tfMTQiLCJidXR0b24iLCJidXR0b25fZGlzYWJsZWRfdmFsdWUiLCJyZXF1ZXN0UmVzdWx0RW51bSIsImltZ19oaWRkZW5fdmFsdWUiLCJjdXJyZW50IiwidDNfdmFsdWUiLCJzaG93X2lmIiwiZ2V0IiwiZW5hYmxlU3RyYXRlZ3kiLCJGYWNlRXhwb3J0U3RyYXRlZ3kiLCJpZl9ibG9jazAiLCJjcmVhdGVfaWZfYmxvY2tfMTEiLCJkaXYxIiwiaDEiLCJkaXYwIiwidDMiLCJ0N192YWx1ZSIsImVhY2hfdmFsdWUiLCJpIiwiY3JlYXRlX2lmX2Jsb2NrXzkiLCJ0ZXh0YXJlYSIsInRleHRhcmVhX3BsYWNlaG9sZGVyX3ZhbHVlIiwiZGl2MiIsImxhYmVsMCIsInNwYW4wIiwibGFiZWwxIiwic3BhbjEiLCJ0NyIsInQxX3ZhbHVlIiwiY3JlYXRlX2lmX2Jsb2NrXzQiLCJjcmVhdGVfaWZfYmxvY2tfNSIsImNyZWF0ZV9pZl9ibG9ja182IiwiY3JlYXRlX2lmX2Jsb2NrXzciLCJ0MSIsImxhYmVsIiwiaXNMaXZlbmVzc0VuYWJsZWQiLCJzaG93X2lmXzEiLCJDYW1lcmFTdGF0dXNFbnVtIiwiY3JlYXRlX2lmX2Jsb2NrXzIwIiwiaWZfYmxvY2syIiwiY3JlYXRlX2lmX2Jsb2NrXzE5IiwiY3JlYXRlX2lmX2Jsb2NrXzEzIiwiZGl2MV9oaWRkZW5fdmFsdWUiLCJkaXY0IiwiZGl2MyIsImNhbnZhczAiLCJjYW52YXMxIiwiY2FudmFzMiIsImRyYXdWaWRlb09uQ2FudmFzIiwidmlkZW8iLCJkaXNwbGF5Q2FudmFzIiwiaXNTYW1lUHJvcG9ydGlvbiIsImRldGVjdGlvbnNDYW52YXMiLCJlbmNsb3NpbmdEaXYiLCJpc0NvdW50aW5nRG93biIsInVuaXF1ZSIsImxvYWRlZEZhY2VBcGlBbmRXZWlnaHRzIiwiZW5hYmxlTWludXRpYWUiLCIkJHByb3BzIiwidmlkZW9EaW1lbnNpb25zIiwibm9UYWJzIiwid2VpZ2h0c1BhdGgiLCJldmFsdWF0ZVBob3RvIiwic2hvd0NhcHR1cmVCdXR0b24iLCJzaG93VW5jb25mb3JtaXRpZXMiLCJ2aWRlb0ZpbHRlciIsInN0YXJ0RmFjZUFwaSIsIndyaXRhYmxlIiwiZGF0YVR5cGVQcmVmaXgiLCJ3aWRnZXRJbnN0YW5jZSIsIm1hc2tDYW52YXMiLCJjYXB0dXJpbmciLCJpbml0aWFsaXplZCIsImlkcm5kTG9hZGluZyIsImlkcm5kQ2xvc2VkIiwid2FpdGluZ0lkcm5kQ2FwdHVyZUV2ZW50IiwiaW50ZXJ2YWxJZCIsImxpdmVuZXNzRXJyb3IiLCJmYWNlYXBpQ291bnRlciIsImZhY2VhcGlGcmFtZVJhdGUiLCJjb3VudERvd25DYXB0dXJlIiwicmlnaHRPcmllbnRhdGlvbiIsImNvdW50RG93bkZpbmlzaFRpbWUiLCJkaXNhYmxlQ291bnREb3duIiwiZmFjZU5vdFZhbGlkYXRlZCIsImZhY2VWYWxpZGF0aW9uQWxlcnQiLCJ0b2FzdCIsIlN3YWwiLCJvbk1vdW50IiwibG9nIiwic2V0X3N0b3JlX3ZhbHVlIiwicmVhZHkiLCIkcmVhZHkiLCJmYWNlRm91bmQiLCIkZmFjZUZvdW5kIiwiY2FwdHVyZWQiLCIkY2FwdHVyZWQiLCIkZmFjaW5nTW9kZSIsIkZhY2luZ01vZGVFbnVtIiwicmVnaXN0ZXJJZHJuZExpc3RlbmVycyIsIiRlbmFibGVGYWNlQXBpIiwibG9hZEZhY2VBcGlBbmRXZWlnaHRzIiwib3BlbkNhbWVyYSIsImRyYXdPdmFsIiwib3ZhbEhlaWdodCIsIm92YWxXaWR0aCIsIm92YWxYIiwiJHZpZGVvU3RvcmUiLCJvdmFsWSIsIiRvdmFsRGltZW5zaW9ucyIsInByaW1hcnlUaGVtZSIsInN1Y2Nlc3NUaGVtZSIsInRpbWVSZW1haW5pbmciLCJjbGlwUGF0aCIsImV2ZW50IiwidmlkZW9fIiwiJGlkcm5kVmlkZW9TdG9yZURpbWVuc2lvbnMiLCIkJGludmFsaWRhdGUiLCJsb29wIiwibG9vcENhbGxlciIsImUiLCIkY2FtZXJhU3RhdHVzU3RvcmUiLCJpZHJuZEluaXRpYWxpemVkIiwiJGlkcm5kSW5pdGlhbGl6ZWQiLCIkc2VsZWN0ZWRUYWIiLCJUYWJFbnVtIiwib3BlbkNhbWVyYUxpdmVuZXNzIiwiZW5jcnlwdGVkRmlsZSIsInBob3RvIiwiYmxvYiIsIiRibG9iIiwiJHJlcXVlc3RSZXN1bHQiLCIkdW5jb25mb3JtaXRpZXNTdG9yZSIsImJsb2JUb0Jhc2U2NCIsIiRkYXRhVHlwZVByZWZpeCIsIiRpbWFnZSIsIiRvcmlnaW5hbENhcHR1cmUiLCIkY2FwdHVyZUxpdmVuZXNzSWRybmRFbmRwb2ludCIsImJvZHlQYXJ0cyIsImljYW9XYXJuaW5ncyIsImdldEZhY2VVbmNvbmZvcm1pdGllcyIsImVycm9yQ29kZSIsImlkcm5kRXJyb3JUb2kxOG5LZXkiLCJBeGlvc0Vycm9yIiwiZmFjZSIsImJwIiwiJF8iLCJ2YWxpZGF0ZUxpdmVuZXNzIiwiaW1hZ2UiLCJ0cmFuc2xhdGVBbmRTZXRVbmNvbmZvcm1pdGllcyIsImxpdmVuZXNzUmVzdWx0IiwiZ2V0TGl2ZW5lc3NJZHJuZCIsImRldmljZSIsIndpZHRoIiwiaGVpZ2h0IiwidiIsInZpZGVvU3RvcmUiLCJpc01vYmlsZSIsInNlbGVjdERldmljZSIsInBsYXkiLCIkc3RhcnRGYWNlQXBpIiwiY2FwdHVyZSIsInVuTG9ja1NjcmVlbiIsImNhbnZhcyIsIiRib3hTdG9yZSIsInNhdmUiLCIkanVzdGlmaWNhdGlvbiIsInNhdmVkIiwiJHNhdmVkIiwiYmFzZTY0IiwicmV0YWtlIiwib3JpZ2luYWxDYXB0dXJlIiwidW5jb25mb3JtaXRpZXNTdG9yZSIsImZhY2VWYWxpZGF0aW9ucyIsImZhY2VWYWxpZGF0aW9uc1N0b3JlIiwicmVzdWx0IiwidGl0bGUiLCJpY29uIiwiJHNob3dMaXZlbmVzc1Jlc3VsdFRvYXN0IiwiZW51bWVyYXRlRGV2aWNlcyIsImRldmljZUlkIiwid2lkdGhDYW1lcmEiLCJoZWlnaHRDYW1lcmEiLCJhc3BlY3RSYXRpb0NhbWVyYSIsImZhY2luZyIsInRvdWNoUG9pbnRzIiwiZ2V0VmlkZW9EaW1lbnNpb25zIiwiJHNlbGVjdGVkVmlkZW9EZXZpY2VJZCIsIiRjYW1lcmFEZXZpY2VzU3RvcmUiLCJlcnJvciIsImNvbnN0cmFpbnRFcnJvciIsImlzT2JqZWN0IiwidW5zdWJzY3JpYmVWaWRlb0RpbWVuc2lvbnMiLCJzdG9yZU9iaiIsInVuc3Vic2NyaWJlRmFjZVZhbGlkYXRpb25zIiwibmV3VmFsdWUiLCJuZXdGYWNlVmFsaWRhdGlvbkFsZXJ0IiwiJGF1dG9tYXRpY0NhcHR1cmUiLCJjb3VudGRvd25JbnRlcnZhbENhbGxiYWNrIiwibm93IiwidW5zdWJzY3JpYmVDYXB0dXJlZFN0YXRlIiwidW5zdWJzY3JpYmVDbGVhclZpZGVvU3JjIiwiY2xlYXJlZFZpZGVvU3JjT2JqZWN0Iiwic2VsZWN0ZWRUYWIiLCJ0YWIiLCJ1bnN1YnNjcmliZVNlbGVjdGVkU3RyZWFtIiwic2VsZWN0ZWRWaWRlb0RldmljZUlkIiwibmV3RGV2aWNlSWQiLCJ2aWRlb0hlaWdodCIsInZpZGVvV2lkdGgiLCJzdHJlYW0iLCJzZXR1cFN0cmVhbSIsIl9zdHJlYW0iLCIkX3N0cmVhbSIsIiRjbGVhcmVkVmlkZW9TcmNPYmplY3QiLCJzaHV0T2ZmQ2FtZXJhIiwidW5zdWJzY3JpYmVDaGFuZ2VUYWIiLCJ1bnN1YnNjcmliZUZhY2VBcGkiLCJmYWNlYXBpTG9vcCIsInVuc3Vic2NyaWJlU3dhcENhbWVyYSIsInN3YXBDYW1lcmEiLCJuZXdEZXZpY2UiLCJ1bnN1YnNjcmliZU9yaWVudGF0aW9uIiwib3JpZW50YXRpb25EYXRhIiwiZGF0YSIsImRldGVjdGlvbnNSZXN1bHQiLCJvcHRpb25zIiwiZ2V0RmFjZURldGVjdG9yT3B0aW9ucyIsImZhY2VhcGkiLCJkZXRlY3Rpb25zUmVzdWx0MiIsImRyYXdEZXRlY3Rpb25zSW5GYWNlIiwic2V0RmFjZU5vdEZvdW5kVGltZW91dCIsInJldGFrZVBob3RvIiwibnYiLCIkcmV0YWtlUGhvdG8iLCJ1bnN1YnNjcmliZVJlYWR5Q2FtZXJhRXZlbnRFbWl0dGVyIiwib25EZXN0cm95IiwiJCR2YWx1ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUF3NUJVLE1BQUFBLEVBTUNDLEdBQUFDLEdBQUFDLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJRCxNQUFBSCxFQVlDQyxHQUFBRyxHQUFBRCxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7VUFKZUUsRUFBSSxDQUFBO0FBQUEsVUFBQSxFQUFBLE1BQUEsR0FBQTtBQUFBLFVBQUE7QUFBQSxVQUFBO0FBQUEsVUFBQTtBQUFBLFFBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7OztT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