bry-biometric-collector 2.2.16-RC03 → 2.2.16-RC05
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{DocumentCollector_807a2dab_2.2.16-RC03.js → DocumentCollector_6b56db23_2.2.16-RC05.js} +4 -4
- package/dist/FaceCollector_b154c359_2.2.16-RC05.js +2422 -0
- package/dist/{WaterMark_515ed21b_2.2.16-RC03.js → WaterMark_324cbb33_2.2.16-RC05.js} +2 -2
- package/dist/bry-biometric-collector-main.js +1 -1
- package/dist/{en-us_86032561_2.2.16-RC03.js → en-us_178afe03_2.2.16-RC05.js} +3 -1
- package/dist/{es-cl_7458c382_2.2.16-RC03.js → es-cl_ff8fb88a_2.2.16-RC05.js} +3 -1
- package/dist/{face_api_0e3ce8c8_2.2.16-RC03.js → face_api_0e3ce8c8_2.2.16-RC05.js} +1 -1
- package/dist/fingersApi_7dd86b29_2.2.16-RC05.js +132 -0
- package/dist/{index-no-detector_4b302e78_2.2.16-RC03.js → index-no-detector_4b302e78_2.2.16-RC05.js} +1 -1
- package/dist/index.js +1 -1
- package/dist/{main_5417447c_2.2.16-RC03.js → main_6fef9d34_2.2.16-RC05.js} +16 -16
- package/dist/{pt-br_b09fa298_2.2.16-RC03.js → pt-br_feaadca5_2.2.16-RC05.js} +5 -3
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/dist/FaceCollector_d1fc250a_2.2.16-RC03.js +0 -2375
- package/dist/fingersApi_0d635747_2.2.16-RC03.js +0 -131
@@ -1,131 +0,0 @@
|
|
1
|
-
import { u as m, $ as D, n as b, g as y, i as C, s as l, a as F, F as L, b as M, c, v as x, d as P, A as B, e as u, h as g, f as v, j as W, k as R, l as $, m as k, o as U, p as V } from "./main_5417447c_2.2.16-RC03.js";
|
2
|
-
const N = m(D);
|
3
|
-
var X = /* @__PURE__ */ ((n) => (n.EXTENSION_MISSING = "EXTENSION_MISSING", n.USER_CANCELLED = "USER_CANCELLED", n.UNAUTHORIZED_EXTENSION = "UNAUTHORIZED_EXTENSION", n.SCANNER_NOT_FOUND = "SCANNER_NOT_FOUND", n.EXTENSION_MODULE_NOT_INSTALLED = "EXTENSION_MODULE_NOT_INSTALLED", n.FINGER_NOT_REMOVED = "FINGER_NOT_REMOVED", n.UNKNOWN_ERROR = "UNKNOWN_ERROR", n.EVALUATE_BIOMETRICS_TIMEOUT = "EVALUATE_BIOMETRICS_TIMEOUT", n.EVALUATE_BIOMETRICS_NETWORK_ISSUE = "EVALUATE_BIOMETRICS_NETWORK_ISSUE", n))(X || {});
|
4
|
-
class a extends Error {
|
5
|
-
constructor(r, d) {
|
6
|
-
super(r), this.status = d;
|
7
|
-
}
|
8
|
-
}
|
9
|
-
async function Q(n, r) {
|
10
|
-
const d = b([n])[0], T = y();
|
11
|
-
if (C(T))
|
12
|
-
throw new a(
|
13
|
-
"Attempting to capture finger but the extension apparently hasn't been properly injected. Received: " + T,
|
14
|
-
"EXTENSION_MISSING"
|
15
|
-
/* EXTENSION_MISSING */
|
16
|
-
);
|
17
|
-
if (l(!0), F())
|
18
|
-
throw l(!1), U(!1), new a(
|
19
|
-
"User cancelled",
|
20
|
-
"USER_CANCELLED"
|
21
|
-
/* USER_CANCELLED */
|
22
|
-
);
|
23
|
-
let E = null;
|
24
|
-
try {
|
25
|
-
E = await T.getFingerprint(
|
26
|
-
// @ts-ignore TODO: Alex has to fix this functions signature to accept pojo
|
27
|
-
JSON.stringify(
|
28
|
-
r ?? { outputFormat: "BASE64", imageFormat: "BMP", nonce: "webCollector", timeout: 3 }
|
29
|
-
)
|
30
|
-
);
|
31
|
-
} catch (e) {
|
32
|
-
console.error(e);
|
33
|
-
const t = e;
|
34
|
-
if (l(!1), t.key === "fingerprint.scanner.timeout")
|
35
|
-
throw new a(
|
36
|
-
"Fingerprint scan timed out (didn't read a finger.)",
|
37
|
-
"USER_CANCELLED"
|
38
|
-
/* USER_CANCELLED */
|
39
|
-
);
|
40
|
-
if (t.key === "extension.authorization.canceled")
|
41
|
-
throw new a(
|
42
|
-
"Extension wasn't given authorization.",
|
43
|
-
"UNAUTHORIZED_EXTENSION"
|
44
|
-
/* UNAUTHORIZED_EXTENSION */
|
45
|
-
);
|
46
|
-
if (t.key !== "fingerprint.scanner.not.found") {
|
47
|
-
if (t.key === "signer.not.installed")
|
48
|
-
throw new a(
|
49
|
-
"The extension module isn't installed.",
|
50
|
-
"EXTENSION_MODULE_NOT_INSTALLED"
|
51
|
-
/* EXTENSION_MODULE_NOT_INSTALLED */
|
52
|
-
);
|
53
|
-
}
|
54
|
-
}
|
55
|
-
if (F())
|
56
|
-
throw l(!1), U(!1), new a(
|
57
|
-
"User cancelled",
|
58
|
-
"USER_CANCELLED"
|
59
|
-
/* USER_CANCELLED */
|
60
|
-
);
|
61
|
-
const i = q(d);
|
62
|
-
i.image = E?.content.image?.data, i.base64WSQ = E?.content.fingerprint.data, i.nfiqRating = (E?.content.score || 0) + 98, i.status = L.AVAILABLE;
|
63
|
-
const w = M(c());
|
64
|
-
let s, _ = !1;
|
65
|
-
try {
|
66
|
-
s = await x(w, i);
|
67
|
-
} catch (e) {
|
68
|
-
if (i.nfiqRating = -1, i.base64WSQ = "", i.image = "", console.warn("caught while validating fingerprint: ", e.toString()), P(e) && "message" in e && e.message === "error.template.extraction")
|
69
|
-
_ = !0;
|
70
|
-
else if (e instanceof XMLHttpRequest) {
|
71
|
-
const t = e;
|
72
|
-
"response" in t && "data" in t.response.data && t.response.data.message === "error.template.extraction" && (_ = !0);
|
73
|
-
} else {
|
74
|
-
if (e instanceof B)
|
75
|
-
throw e.code === "ECONNABORTED" ? (console.log("The evaluate biometrics request took too long to answer!"), new a(
|
76
|
-
"Evaluate biometrics took too long to reply",
|
77
|
-
"EVALUATE_BIOMETRICS_TIMEOUT"
|
78
|
-
/* EVALUATE_BIOMETRICS_TIMEOUT */
|
79
|
-
)) : (console.error("Error evaluating biometrics!", e), u(c()), l(!1), new a(
|
80
|
-
"Network issue while validating biometrics, check logs",
|
81
|
-
"EVALUATE_BIOMETRICS_NETWORK_ISSUE"
|
82
|
-
/* EVALUATE_BIOMETRICS_NETWORK_ISSUE */
|
83
|
-
));
|
84
|
-
u(c()), l(!1);
|
85
|
-
}
|
86
|
-
}
|
87
|
-
let S, f, A, O, I, o = g.LOW_QUALITY;
|
88
|
-
if (s) {
|
89
|
-
const e = s.bodyParts.find(
|
90
|
-
(t) => t.bodyPart === i.bodyPart
|
91
|
-
);
|
92
|
-
i.nfiqRating = e.quality, (e.quality > v() || e.status === "LOW_QUALITY") && (S = !0, o = g.LOW_QUALITY), s.bodyParts.find((t) => t.status === "DUPLICATE") && (f = !0, o = g.DUPLICATE), s.bodyParts.find((t) => t.status === "FORBIDDEN") && (A = !0, o = g.FORBIDDEN), s.bodyParts.find((t) => t.status === "AGR") && (O = !0, o = g.AGR_DETECTED), s.bodyParts.find((t) => t.status === "AGR_NOT_MATCH") && (I = !0, o = g.AGR_NO_MATCH);
|
93
|
-
}
|
94
|
-
if (f || S || A || I || O || _) {
|
95
|
-
i.nfiqRating = -1, i.base64WSQ = "", i.image = "", i.status = L.AVAILABLE;
|
96
|
-
let e = "badFingerQualitySwal";
|
97
|
-
f ? e = "unknownDuplicateFingerSwal" : A ? e = "forbiddenFingerSwal" : O ? e = "agrFinger" : I && (e = "agrFingerNotMatched");
|
98
|
-
let t = N(`${e}.text`);
|
99
|
-
if (W(V) && f) {
|
100
|
-
e = "duplicateFingerSwal", t = N(`${e}.text`, {
|
101
|
-
values: {
|
102
|
-
finger1: N(`${e}.${s.matchingFingers?.[0]}`),
|
103
|
-
finger2: N(`${e}.${s.matchingFingers?.[1]}`)
|
104
|
-
}
|
105
|
-
});
|
106
|
-
const h = R();
|
107
|
-
return {
|
108
|
-
returnCode: o,
|
109
|
-
bodyParts: h,
|
110
|
-
matchingFingers: s.matchingFingers,
|
111
|
-
message: t
|
112
|
-
};
|
113
|
-
}
|
114
|
-
const p = R();
|
115
|
-
return { returnCode: o, bodyParts: p, message: t };
|
116
|
-
}
|
117
|
-
return u(c()), l(!1), $(), { returnCode: g.CAPTURED, bodyParts: R() };
|
118
|
-
}
|
119
|
-
function q(n) {
|
120
|
-
k();
|
121
|
-
for (const r of c())
|
122
|
-
if (r.index === n)
|
123
|
-
return r.selected = !0, r;
|
124
|
-
throw new Error(`Finger ${n} not found`);
|
125
|
-
}
|
126
|
-
export {
|
127
|
-
a as CaptureApiError,
|
128
|
-
X as CaptureErrorStatusEnum,
|
129
|
-
Q as captureSingleFinger
|
130
|
-
};
|
131
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZ2Vyc0FwaV8wZDYzNTc0N18yLjIuMTYtUkMwMy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2FwaS9maW5nZXJzQXBpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF4aW9zRXJyb3IgfSBmcm9tICdheGlvcyc7XG5pbXBvcnQgdHlwZSB7IENhcHR1cmVQYXJhbXMsIEZpbmdlcnByaW50U2NhbiB9IGZyb20gJy4uL2luY2x1ZGUvRXh0ZW5zaW9uJztcbmltcG9ydCB7IGlzQ2FuY2VsbGluZywgc2V0Q2FuY2VsbGluZywgc2V0Q2FwdHVyaW5nIH0gZnJvbSAnLi4vbGliL2ZpbmdlcnNUYWIvYnV0dG9ucy9jYXB0dXJlL2NhcHR1cmVTdG9yZSc7XG5pbXBvcnQgeyBnZXRFeHRlbnNpb24sIGhhc0Zpbmdlck9uQW5kT2ZmLCBpc0V2ZXJ5dGhpbmdJbnN0YWxsZWQgfSBmcm9tICcuLi9saWIvZmluZ2Vyc1RhYi9leHRlbnNpb24vZXh0ZW5zaW9uJztcbmltcG9ydCB7XG4gIEJvZHlQYXJ0TmFtZXMsXG4gIEZpbmdlcixcbiAgZ2V0U2VsZWN0ZWRGaW5nZXIsXG4gIG5vcm1hbGl6ZUZpbmdlck5hbWVzQW5kSW5kZXhlc1RvSW5kZXhlcyxcbiAgdHlwZSBGaW5nZXJJbmRleCxcbiAgZ2V0RmluZ2VycyxcbiAgc2VsZWN0Tm90aGluZyxcbiAgRmluZ2VyU3RhdHVzLFxuICBnZXRDb2xsZWN0ZWRGaW5nZXJzLFxuICBzZXRGaW5nZXJzLFxuICBnZXRNaW5OZmlxQWNjZXB0YWJsZSxcbn0gZnJvbSAnLi4vbGliL2ZpbmdlcnNUYWIvaGFuZC9oYW5kUGFydHMvZmluZ2Vyc1N0b3JlJztcbmltcG9ydCB7IGlzT2JqZWN0LCBpc09iamVjdEVtcHR5IH0gZnJvbSAnLi4vbGliL3V0aWwvdXRpbCc7XG5pbXBvcnQge1xuICB2YWxpZGF0ZUZpbmdlckJpb21ldHJpY3MsXG4gIHR5cGUgQm9keVBhcnRSZXR1cm5UeXBlLFxuICB1c2VXYXNtLFxuICB0eXBlIEJvZHlQYXJ0LFxufSBmcm9tICcuLi9saWIvdmFsaWRhdG9ycy9iaW9tZXRyaWNzVmFsaWRhdG9yJztcbmltcG9ydCB7XG4gIGNvbGxlY3RGaW5nZXJzLFxuICBoYW5kbGVDYXB0dXJlUmV0dXJuU3RhdHVzLFxuICBub3RpZnlGaW5nZXJDb2xsZWN0ZWQsXG59IGZyb20gJy4uL2xpYi9maW5nZXJzVGFiL2J1dHRvbnMvYnV0dG9uSGFuZGxlcnMnO1xuaW1wb3J0IHsgZm9ybWF0LCB1bndyYXBGdW5jdGlvblN0b3JlIH0gZnJvbSAnc3ZlbHRlLWkxOG4nO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSAnc3ZlbHRlL3N0b3JlJztcbmNvbnN0ICRmb3JtYXQgPSB1bndyYXBGdW5jdGlvblN0b3JlKGZvcm1hdCk7XG5cbmV4cG9ydCB7IGNhcHR1cmVTaW5nbGVGaW5nZXIgfTtcblxuZXhwb3J0IGNvbnN0IGVudW0gQ2FwdHVyZUVycm9yU3RhdHVzRW51bSB7XG4gIEVYVEVOU0lPTl9NSVNTSU5HID0gJ0VYVEVOU0lPTl9NSVNTSU5HJyxcbiAgVVNFUl9DQU5DRUxMRUQgPSAnVVNFUl9DQU5DRUxMRUQnLFxuICBVTkFVVEhPUklaRURfRVhURU5TSU9OID0gJ1VOQVVUSE9SSVpFRF9FWFRFTlNJT04nLFxuICBTQ0FOTkVSX05PVF9GT1VORCA9ICdTQ0FOTkVSX05PVF9GT1VORCcsXG4gIEVYVEVOU0lPTl9NT0RVTEVfTk9UX0lOU1RBTExFRCA9ICdFWFRFTlNJT05fTU9EVUxFX05PVF9JTlNUQUxMRUQnLFxuICBGSU5HRVJfTk9UX1JFTU9WRUQgPSAnRklOR0VSX05PVF9SRU1PVkVEJyxcbiAgVU5LTk9XTl9FUlJPUiA9ICdVTktOT1dOX0VSUk9SJyxcbiAgRVZBTFVBVEVfQklPTUVUUklDU19USU1FT1VUID0gJ0VWQUxVQVRFX0JJT01FVFJJQ1NfVElNRU9VVCcsXG4gIEVWQUxVQVRFX0JJT01FVFJJQ1NfTkVUV09SS19JU1NVRSA9ICdFVkFMVUFURV9CSU9NRVRSSUNTX05FVFdPUktfSVNTVUUnLFxufVxuXG5leHBvcnQgY2xhc3MgQ2FwdHVyZUFwaUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyBzdGF0dXM6IENhcHR1cmVFcnJvclN0YXR1c0VudW0pIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgfVxufVxuXG4vKipcbiAqIFByb2dyYW1tYXRpY2FsbHkgY2FwdHVyZSBzaW5nbGUgZmluZ2VyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhcHR1cmVTaW5nbGVGaW5nZXIoXG4gIGZpbmdlck5hbWVPckluZGV4OiBudW1iZXIgfCBCb2R5UGFydE5hbWVzLFxuICBnZXRGaW5nZXJwcmludFBhcmFtczogQ2FwdHVyZVBhcmFtc1xuKTogUHJvbWlzZTx7XG4gIHJldHVybkNvZGU6IGhhbmRsZUNhcHR1cmVSZXR1cm5TdGF0dXM7XG4gIGJvZHlQYXJ0czogQm9keVBhcnRbXTtcbiAgbWF0Y2hpbmdGaW5nZXJzPzogQm9keVBhcnROYW1lc1tdO1xuICBtZXNzYWdlPzogc3RyaW5nO1xufT4ge1xuICBjb25zdCBmaW5nZXJJbmRleCA9IG5vcm1hbGl6ZUZpbmdlck5hbWVzQW5kSW5kZXhlc1RvSW5kZXhlcyhbZmluZ2VyTmFtZU9ySW5kZXhdKVswXTtcbiAgLy8gdHJ5IHtcbiAgY29uc3QgZXh0ZW5zaW9uID0gZ2V0RXh0ZW5zaW9uKCk7XG4gIC8vIGNoZWNrIHRoYXQgdGhlIGV4dGVuc2lvbiBpcyBhdmFpbGFibGVcbiAgaWYgKGlzT2JqZWN0RW1wdHkoZXh0ZW5zaW9uKSkge1xuICAgIHRocm93IG5ldyBDYXB0dXJlQXBpRXJyb3IoXG4gICAgICBcIkF0dGVtcHRpbmcgdG8gY2FwdHVyZSBmaW5nZXIgYnV0IHRoZSBleHRlbnNpb24gYXBwYXJlbnRseSBoYXNuJ3QgYmVlbiBwcm9wZXJseSBpbmplY3RlZC4gUmVjZWl2ZWQ6IFwiICsgZXh0ZW5zaW9uLFxuICAgICAgQ2FwdHVyZUVycm9yU3RhdHVzRW51bS5FWFRFTlNJT05fTUlTU0lOR1xuICAgICk7XG4gIH1cblxuICBzZXRDYXB0dXJpbmcodHJ1ZSk7XG5cbiAgLy8gaWYgc29tZWhvdyB0aGV5IG1hbmFnZWQgdG8gYXNrIGZvciBjYW5jZWxsYXRpb24gcmlnaHQgYmVmb3JlIHRoZSBzY2FuLCB0aGlzIGNhdGNoZXMgdGhhdFxuICBpZiAoaXNDYW5jZWxsaW5nKCkpIHtcbiAgICBzZXRDYXB0dXJpbmcoZmFsc2UpO1xuICAgIHNldENhbmNlbGxpbmcoZmFsc2UpO1xuICAgIHRocm93IG5ldyBDYXB0dXJlQXBpRXJyb3IoJ1VzZXIgY2FuY2VsbGVkJywgQ2FwdHVyZUVycm9yU3RhdHVzRW51bS5VU0VSX0NBTkNFTExFRCk7XG4gIH1cblxuICAvLyBwcm9tcHQgdXNlciB0byBjb2xsZWN0IHRoZSBmaW5nZXJcbiAgbGV0IGNhcHR1cmU6IEZpbmdlcnByaW50U2NhbiB8IG51bGwgPSBudWxsO1xuICB0cnkge1xuICAgIC8vIGNhcHR1cmUgdGhlIGZpbmdlclxuICAgIC8vICppbXBsZW1lbnRhdGlvbiBjb25zaWRlcmluZyB3ZSBvbmx5IGhhdmUgdGhlIGdldEZpbmdlcnByaW50IG1ldGhvZCBhdmFpbGFibGVcbiAgICBjYXB0dXJlID0gYXdhaXQgZXh0ZW5zaW9uLmdldEZpbmdlcnByaW50KFxuICAgICAgLy8gQHRzLWlnbm9yZSBUT0RPOiBBbGV4IGhhcyB0byBmaXggdGhpcyBmdW5jdGlvbnMgc2lnbmF0dXJlIHRvIGFjY2VwdCBwb2pvXG4gICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgZ2V0RmluZ2VycHJpbnRQYXJhbXMgPz8geyBvdXRwdXRGb3JtYXQ6ICdCQVNFNjQnLCBpbWFnZUZvcm1hdDogJ0JNUCcsIG5vbmNlOiAnd2ViQ29sbGVjdG9yJywgdGltZW91dDogMyB9XG4gICAgICApXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIGNvbnN0IGUgPSBlcnIgYXMgeyBrZXk6IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZyB9O1xuICAgIHNldENhcHR1cmluZyhmYWxzZSk7XG4gICAgLy8gVE9ETzogdHlwZSB0aGlzIGFuZCBjcmVhdGUgZW51bSBmb3IgZXJyb3JzXG4gICAgaWYgKGUua2V5ID09PSAnZmluZ2VycHJpbnQuc2Nhbm5lci50aW1lb3V0Jykge1xuICAgICAgLy8gaWYgdGltZWRvdXQganVzdCB0cnkgYWdhaW4sIHVubGVzcyB0cnlpbmcgdG8gY2FuY2VsXG4gICAgICAvLyBUT0RPOiBtYXliZSBzdG9wIGFmdGVyIHNvIG1hbnkgdHJpZXNcbiAgICAgIHRocm93IG5ldyBDYXB0dXJlQXBpRXJyb3IoXG4gICAgICAgIFwiRmluZ2VycHJpbnQgc2NhbiB0aW1lZCBvdXQgKGRpZG4ndCByZWFkIGEgZmluZ2VyLilcIixcbiAgICAgICAgQ2FwdHVyZUVycm9yU3RhdHVzRW51bS5VU0VSX0NBTkNFTExFRFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGUua2V5ID09PSAnZXh0ZW5zaW9uLmF1dGhvcml6YXRpb24uY2FuY2VsZWQnKSB7XG4gICAgICAvLyB1c2VyIGRpZG4ndCBhdXRob3JpemUgdGhlIGRvbWFpbiwgdGhlcmUgaXMgbm90aGluZyB3ZSBjYW4gZG8gc28gc3RvcC5cbiAgICAgIHRocm93IG5ldyBDYXB0dXJlQXBpRXJyb3IoXCJFeHRlbnNpb24gd2Fzbid0IGdpdmVuIGF1dGhvcml6YXRpb24uXCIsIENhcHR1cmVFcnJvclN0YXR1c0VudW0uVU5BVVRIT1JJWkVEX0VYVEVOU0lPTik7XG4gICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ2ZpbmdlcnByaW50LnNjYW5uZXIubm90LmZvdW5kJykge1xuICAgICAgLy8gdXNlciBkb2Vzbid0IGhhdmUgYSBzY2FubmVyIGNvbm5lY3RlZCwgdGhlcmUgaXMgbm90aGluZyB3ZSBjYW4gZG8gc28gc3RvcC5cbiAgICAgIC8vdGhyb3cgbmV3IENhcHR1cmVBcGlFcnJvcihcIkNvdWxkbid0IGZpbmQgZmluZ2VycHJpbnQgc2Nhbm5lci5cIiwgQ2FwdHVyZUVycm9yU3RhdHVzRW51bS5TQ0FOTkVSX05PVF9GT1VORCk7XG4gICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ3NpZ25lci5ub3QuaW5zdGFsbGVkJykge1xuICAgICAgdGhyb3cgbmV3IENhcHR1cmVBcGlFcnJvcihcbiAgICAgICAgXCJUaGUgZXh0ZW5zaW9uIG1vZHVsZSBpc24ndCBpbnN0YWxsZWQuXCIsXG4gICAgICAgIENhcHR1cmVFcnJvclN0YXR1c0VudW0uRVhURU5TSU9OX01PRFVMRV9OT1RfSU5TVEFMTEVEXG4gICAgICApO1xuICAgIH0gLy8gZWxzZSB7XG4gICAgLy8gICBjb25zb2xlLmVycm9yKFwiRXh0ZW5zaW9uIGFkZC1vbnMgd2VyZSBub3QgaW5zdGFsbGVkXCIsIGUua2V5KVxuICAgIC8vICAgdGhyb3cgbmV3IENhcHR1cmVBcGlFcnJvcignVW5rbm93biBlcnJvciB3aGlsZSBjYXB0dXJpbmcgZmluZ2VycHJpbnQuJywgQ2FwdHVyZUVycm9yU3RhdHVzRW51bS4pO1xuICAgIC8vIH1cbiAgfVxuICAvLyBpZiBzb21laG93IHRoZXkgbWFuYWdlZCB0byBhc2sgZm9yIGNhbmNlbGxhdGlvbiByaWdodCBiZWZvcmUgdGhlIHNjYW4sIHRoaXMgY2F0Y2hlcyB0aGF0XG4gIGlmIChpc0NhbmNlbGxpbmcoKSkge1xuICAgIHNldENhcHR1cmluZyhmYWxzZSk7XG4gICAgc2V0Q2FuY2VsbGluZyhmYWxzZSk7XG4gICAgdGhyb3cgbmV3IENhcHR1cmVBcGlFcnJvcignVXNlciBjYW5jZWxsZWQnLCBDYXB0dXJlRXJyb3JTdGF0dXNFbnVtLlVTRVJfQ0FOQ0VMTEVEKTtcbiAgfVxuXG4gIC8vIHNlbGVjdCBhbmQgZ2V0IGZpbmdlclxuICBjb25zdCBmaW5nZXIgPSBzZWxlY3RGaW5nZXJBcGkoZmluZ2VySW5kZXgpO1xuICAvLyBzZXQgdGhpcyBmaW5nZXJzIGF0dHJpYnV0ZXMgdG8gdGhlIHJlY2VudGx5IGNvbGxlY3RlZCBmaW5nZXJcbiAgZmluZ2VyLmltYWdlID0gY2FwdHVyZT8uY29udGVudC5pbWFnZT8uZGF0YSBhcyBzdHJpbmc7XG4gIGZpbmdlci5iYXNlNjRXU1EgPSBjYXB0dXJlPy5jb250ZW50LmZpbmdlcnByaW50LmRhdGEgYXMgc3RyaW5nO1xuICBmaW5nZXIubmZpcVJhdGluZyA9IChjYXB0dXJlPy5jb250ZW50LnNjb3JlIHx8IDApICsgOTg7XG4gIGZpbmdlci5zdGF0dXMgPSBGaW5nZXJTdGF0dXMuQVZBSUxBQkxFO1xuICAvLyBHZXQgQUxMIHRoZSBjb2xsZWN0ZWQgZmluZ2Vyc1xuICBjb25zdCBjb2xsZWN0ZWRGaW5nZXJzID0gZ2V0Q29sbGVjdGVkRmluZ2VycyhnZXRGaW5nZXJzKCkpO1xuXG4gIC8vIHNlbmQgdG8gcmVtb3RlXG4gIGxldCByZXNwb25zZSxcbiAgICBlcnJvclRlbXBsYXRlRXh0cmFjdGlvbiA9IGZhbHNlO1xuICB0cnkge1xuICAgIHJlc3BvbnNlID0gYXdhaXQgdmFsaWRhdGVGaW5nZXJCaW9tZXRyaWNzKGNvbGxlY3RlZEZpbmdlcnMsIGZpbmdlcik7XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAvLyBjbGVhciB0aGUgZmluZ2VyXG4gICAgZmluZ2VyLm5maXFSYXRpbmcgPSAtMTtcbiAgICBmaW5nZXIuYmFzZTY0V1NRID0gJyc7XG4gICAgZmluZ2VyLmltYWdlID0gJyc7XG4gICAgLy8gd2FybiBlcnJvclxuICAgIGNvbnNvbGUud2FybignY2F1Z2h0IHdoaWxlIHZhbGlkYXRpbmcgZmluZ2VycHJpbnQ6ICcsIGVycm9yLnRvU3RyaW5nKCkpO1xuICAgIC8vIGVycm9yIHdoaWxlIGV4dHJhY3RpbmcsIHNob3cgYSBsb3cgcXVhbGl0eSBzd2FsXG4gICAgaWYgKGlzT2JqZWN0KGVycm9yKSAmJiAnbWVzc2FnZScgaW4gZXJyb3IgJiYgZXJyb3IubWVzc2FnZSA9PT0gJ2Vycm9yLnRlbXBsYXRlLmV4dHJhY3Rpb24nKSB7XG4gICAgICBlcnJvclRlbXBsYXRlRXh0cmFjdGlvbiA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChlcnJvciBpbnN0YW5jZW9mIFhNTEh0dHBSZXF1ZXN0KSB7XG4gICAgICBjb25zdCBlID0gZXJyb3I7XG4gICAgICBpZiAoJ3Jlc3BvbnNlJyBpbiBlICYmICdkYXRhJyBpbiBlLnJlc3BvbnNlLmRhdGEgJiYgZS5yZXNwb25zZS5kYXRhLm1lc3NhZ2UgPT09ICdlcnJvci50ZW1wbGF0ZS5leHRyYWN0aW9uJykge1xuICAgICAgICBlcnJvclRlbXBsYXRlRXh0cmFjdGlvbiA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlcnJvciBpbnN0YW5jZW9mIEF4aW9zRXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRUNPTk5BQk9SVEVEJykge1xuICAgICAgICBjb25zb2xlLmxvZygnVGhlIGV2YWx1YXRlIGJpb21ldHJpY3MgcmVxdWVzdCB0b29rIHRvbyBsb25nIHRvIGFuc3dlciEnKTtcbiAgICAgICAgdGhyb3cgbmV3IENhcHR1cmVBcGlFcnJvcihcbiAgICAgICAgICAnRXZhbHVhdGUgYmlvbWV0cmljcyB0b29rIHRvbyBsb25nIHRvIHJlcGx5JyxcbiAgICAgICAgICBDYXB0dXJlRXJyb3JTdGF0dXNFbnVtLkVWQUxVQVRFX0JJT01FVFJJQ1NfVElNRU9VVFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZXZhbHVhdGluZyBiaW9tZXRyaWNzIScsIGVycm9yKTtcbiAgICAgIH1cbiAgICAgIC8vIHRoaXMgdXBkYXRlcyB0aGUgc3RhdXMgaW4gY2FzZSB0aGUgZmluZ2VyIGhhZCBhIHN0YXR1c1xuICAgICAgc2V0RmluZ2VycyhnZXRGaW5nZXJzKCkpO1xuICAgICAgLy8gbm8gbG9uZ2VyIGNhcHR1cmluZ1xuICAgICAgc2V0Q2FwdHVyaW5nKGZhbHNlKTtcbiAgICAgIHRocm93IG5ldyBDYXB0dXJlQXBpRXJyb3IoXG4gICAgICAgICdOZXR3b3JrIGlzc3VlIHdoaWxlIHZhbGlkYXRpbmcgYmlvbWV0cmljcywgY2hlY2sgbG9ncycsXG4gICAgICAgIENhcHR1cmVFcnJvclN0YXR1c0VudW0uRVZBTFVBVEVfQklPTUVUUklDU19ORVRXT1JLX0lTU1VFXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGlzIGNoYW5nZXMgdXBkYXRlcyB0aGUgc3RhdXMgaW4gY2FzZSB0aGUgZmluZ2VyIGhhZCBhIHN0YXR1c1xuICAgICAgc2V0RmluZ2VycyhnZXRGaW5nZXJzKCkpO1xuICAgICAgLy8gbm8gbG9uZ2VyIGNhcHR1cmluZ1xuICAgICAgc2V0Q2FwdHVyaW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cbiAgbGV0IGlzRmluZ2VyTG93UXVhbGl0eSxcbiAgICBpc0R1cGxpY2F0ZUZpbmdlcixcbiAgICBpc0ZvcmJpZGRlbkZpbmdlcixcbiAgICBpc0FnckZpbmdlckRldGVjdGVkLFxuICAgIGlzQWdyTm90TWF0Y2hlZEZpbmdlcixcbiAgICByZXR1cm5Db2RlID0gaGFuZGxlQ2FwdHVyZVJldHVyblN0YXR1cy5MT1dfUVVBTElUWTtcbiAgaWYgKHJlc3BvbnNlKSB7XG4gICAgLy8gZ2V0IHRoZSBjdXJyZW50IGZpbmdlciBmcm9tIHRoZSByZXR1cm4gbGlzdFxuICAgIGNvbnN0IHZhbGlkYXRlZEZpbmdlciA9IHJlc3BvbnNlLmJvZHlQYXJ0cy5maW5kKFxuICAgICAgKHZhbGlkYXRlZEZpbmdlcikgPT4gdmFsaWRhdGVkRmluZ2VyLmJvZHlQYXJ0ID09PSBmaW5nZXIuYm9keVBhcnRcbiAgICApIGFzIEJvZHlQYXJ0UmV0dXJuVHlwZTtcbiAgICAvLyBzZXQgdGhpcyBmaW5nZXIncyBxdWFsaXR5IGFuZCBpbWFnZVxuICAgIGZpbmdlci5uZmlxUmF0aW5nID0gdmFsaWRhdGVkRmluZ2VyLnF1YWxpdHk7XG4gICAgLy8gY2hlY2sgZm9yIGR1cGxpY2F0ZSBhbmQgbG93IHF1YWxpdHlcbiAgICBpZiAodmFsaWRhdGVkRmluZ2VyLnF1YWxpdHkgPiBnZXRNaW5OZmlxQWNjZXB0YWJsZSgpIHx8IHZhbGlkYXRlZEZpbmdlci5zdGF0dXMgPT09ICdMT1dfUVVBTElUWScpIHtcbiAgICAgIGlzRmluZ2VyTG93UXVhbGl0eSA9IHRydWU7XG4gICAgICByZXR1cm5Db2RlID0gaGFuZGxlQ2FwdHVyZVJldHVyblN0YXR1cy5MT1dfUVVBTElUWTtcbiAgICB9XG4gICAgaWYgKHJlc3BvbnNlLmJvZHlQYXJ0cy5maW5kKCh2YWxpZGF0ZWRGaW5nZXIpID0+IHZhbGlkYXRlZEZpbmdlci5zdGF0dXMgPT09ICdEVVBMSUNBVEUnKSkge1xuICAgICAgaXNEdXBsaWNhdGVGaW5nZXIgPSB0cnVlO1xuICAgICAgcmV0dXJuQ29kZSA9IGhhbmRsZUNhcHR1cmVSZXR1cm5TdGF0dXMuRFVQTElDQVRFO1xuICAgIH1cbiAgICBpZiAocmVzcG9uc2UuYm9keVBhcnRzLmZpbmQoKHZhbGlkYXRlZEZpbmdlcikgPT4gdmFsaWRhdGVkRmluZ2VyLnN0YXR1cyA9PT0gJ0ZPUkJJRERFTicpKSB7XG4gICAgICBpc0ZvcmJpZGRlbkZpbmdlciA9IHRydWU7XG4gICAgICByZXR1cm5Db2RlID0gaGFuZGxlQ2FwdHVyZVJldHVyblN0YXR1cy5GT1JCSURERU47XG4gICAgfVxuICAgIGlmIChyZXNwb25zZS5ib2R5UGFydHMuZmluZCgodmFsaWRhdGVkRmluZ2VyKSA9PiB2YWxpZGF0ZWRGaW5nZXIuc3RhdHVzID09PSAnQUdSJykpIHtcbiAgICAgIGlzQWdyRmluZ2VyRGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuQ29kZSA9IGhhbmRsZUNhcHR1cmVSZXR1cm5TdGF0dXMuQUdSX0RFVEVDVEVEO1xuICAgIH1cbiAgICBpZiAocmVzcG9uc2UuYm9keVBhcnRzLmZpbmQoKHZhbGlkYXRlZEZpbmdlcikgPT4gdmFsaWRhdGVkRmluZ2VyLnN0YXR1cyA9PT0gJ0FHUl9OT1RfTUFUQ0gnKSkge1xuICAgICAgaXNBZ3JOb3RNYXRjaGVkRmluZ2VyID0gdHJ1ZTtcbiAgICAgIHJldHVybkNvZGUgPSBoYW5kbGVDYXB0dXJlUmV0dXJuU3RhdHVzLkFHUl9OT19NQVRDSDtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGlzIGZpbmdlciBpcyBsb3cgcXVhbGl0eSBvciBkdXBsaWNhdGVcbiAgLy8gKGlmIHRoZXJlIGlzIGEgZHVwbGljYXRlLCBpdCBoYXMgdG8gYmUgdGhpcyBmaW5nZXIpXG4gIGlmIChcbiAgICBpc0R1cGxpY2F0ZUZpbmdlciB8fFxuICAgIGlzRmluZ2VyTG93UXVhbGl0eSB8fFxuICAgIGlzRm9yYmlkZGVuRmluZ2VyIHx8XG4gICAgaXNBZ3JOb3RNYXRjaGVkRmluZ2VyIHx8XG4gICAgaXNBZ3JGaW5nZXJEZXRlY3RlZCB8fFxuICAgIGVycm9yVGVtcGxhdGVFeHRyYWN0aW9uXG4gICkge1xuICAgIC8vIGNsZWFyIHRoaXMgZmluZ2VyXG4gICAgZmluZ2VyLm5maXFSYXRpbmcgPSAtMTtcbiAgICBmaW5nZXIuYmFzZTY0V1NRID0gJyc7XG4gICAgZmluZ2VyLmltYWdlID0gJyc7XG4gICAgZmluZ2VyLnN0YXR1cyA9IEZpbmdlclN0YXR1cy5BVkFJTEFCTEU7XG4gICAgLy8gc2V0IHRoZSBhcHByb3ByaWF0ZSBzd2FsIHByZWZpeFxuICAgIGxldCBzd2FsVHJhbnNsYXRlUHJlZml4ID0gJ2JhZEZpbmdlclF1YWxpdHlTd2FsJztcbiAgICBpZiAoaXNEdXBsaWNhdGVGaW5nZXIpIHtcbiAgICAgIHN3YWxUcmFuc2xhdGVQcmVmaXggPSAndW5rbm93bkR1cGxpY2F0ZUZpbmdlclN3YWwnO1xuICAgIH0gZWxzZSBpZiAoaXNGb3JiaWRkZW5GaW5nZXIpIHtcbiAgICAgIHN3YWxUcmFuc2xhdGVQcmVmaXggPSAnZm9yYmlkZGVuRmluZ2VyU3dhbCc7XG4gICAgfSBlbHNlIGlmIChpc0FnckZpbmdlckRldGVjdGVkKSB7XG4gICAgICBzd2FsVHJhbnNsYXRlUHJlZml4ID0gJ2FnckZpbmdlcic7XG4gICAgfSBlbHNlIGlmIChpc0Fnck5vdE1hdGNoZWRGaW5nZXIpIHtcbiAgICAgIHN3YWxUcmFuc2xhdGVQcmVmaXggPSAnYWdyRmluZ2VyTm90TWF0Y2hlZCc7XG4gICAgfVxuICAgIGxldCBodG1sID0gJGZvcm1hdChgJHtzd2FsVHJhbnNsYXRlUHJlZml4fS50ZXh0YCk7XG4gICAgLy8gaWYgd2UgYXJlIHVzaW5nIHdhc20sIHdlIGtub3cgZXhhY3RseSB3aGljaCBmaW5nZXJzIHdlcmUgdGhlIGlzc3VlXG4gICAgaWYgKGdldCh1c2VXYXNtKSAmJiBpc0R1cGxpY2F0ZUZpbmdlcikge1xuICAgICAgc3dhbFRyYW5zbGF0ZVByZWZpeCA9ICdkdXBsaWNhdGVGaW5nZXJTd2FsJztcbiAgICAgIGh0bWwgPSAkZm9ybWF0KGAke3N3YWxUcmFuc2xhdGVQcmVmaXh9LnRleHRgLCB7XG4gICAgICAgIHZhbHVlczoge1xuICAgICAgICAgIGZpbmdlcjE6ICRmb3JtYXQoYCR7c3dhbFRyYW5zbGF0ZVByZWZpeH0uJHsocmVzcG9uc2UgYXMgYW55KS5tYXRjaGluZ0ZpbmdlcnM/LlswXX1gKSxcbiAgICAgICAgICBmaW5nZXIyOiAkZm9ybWF0KGAke3N3YWxUcmFuc2xhdGVQcmVmaXh9LiR7KHJlc3BvbnNlIGFzIGFueSkubWF0Y2hpbmdGaW5nZXJzPy5bMV19YCksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGNvbGxlY3RGaW5nZXJzKCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXR1cm5Db2RlLFxuICAgICAgICBib2R5UGFydHM6IG91dHB1dCxcbiAgICAgICAgbWF0Y2hpbmdGaW5nZXJzOiAocmVzcG9uc2UgYXMgYW55KS5tYXRjaGluZ0ZpbmdlcnMgYXMgQm9keVBhcnROYW1lc1tdLFxuICAgICAgICBtZXNzYWdlOiBodG1sLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3Qgb3V0cHV0ID0gY29sbGVjdEZpbmdlcnMoKTtcbiAgICByZXR1cm4geyByZXR1cm5Db2RlLCBib2R5UGFydHM6IG91dHB1dCwgbWVzc2FnZTogaHRtbCB9O1xuICB9XG4gIC8vIHNob3cgdGhlIGNvbGxlY3RlZCBmaW5nZXJcbiAgc2V0RmluZ2VycyhnZXRGaW5nZXJzKCkpO1xuXG4gIHNldENhcHR1cmluZyhmYWxzZSk7XG4gIC8vIHNlbmQgY29sbGVjdGVkIGZpbmdlciBtZXNzYWdlXG4gIG5vdGlmeUZpbmdlckNvbGxlY3RlZCgpO1xuXG4gIHJldHVybiB7IHJldHVybkNvZGU6IGhhbmRsZUNhcHR1cmVSZXR1cm5TdGF0dXMuQ0FQVFVSRUQsIGJvZHlQYXJ0czogY29sbGVjdEZpbmdlcnMoKSB9O1xufVxuXG4vKipcbiAqIFNlbGVjdCBmaW5nZXIgcHJvZ3JhbW1hdGljYWxseSAod2l0aG91dCB1c2VyIGNsaWNrKVxuICovXG5mdW5jdGlvbiBzZWxlY3RGaW5nZXJBcGkoaW5kZXg6IEZpbmdlckluZGV4KTogRmluZ2VyIHtcbiAgLy8gdW5zZWxlY3QgZXZlcnl0aGluZ1xuICBzZWxlY3ROb3RoaW5nKCk7XG4gIGZvciAoY29uc3QgZmluZ2VyIG9mIGdldEZpbmdlcnMoKSkge1xuICAgIGlmIChmaW5nZXIuaW5kZXggPT09IGluZGV4KSB7XG4gICAgICBmaW5nZXIuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIGZpbmdlcjtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBGaW5nZXIgJHtpbmRleH0gbm90IGZvdW5kYCk7XG59XG4iXSwibmFtZXMiOlsiJGZvcm1hdCIsInVud3JhcEZ1bmN0aW9uU3RvcmUiLCJmb3JtYXQiLCJDYXB0dXJlRXJyb3JTdGF0dXNFbnVtIiwiQ2FwdHVyZUFwaUVycm9yIiwibWVzc2FnZSIsInN0YXR1cyIsImNhcHR1cmVTaW5nbGVGaW5nZXIiLCJmaW5nZXJOYW1lT3JJbmRleCIsImdldEZpbmdlcnByaW50UGFyYW1zIiwiZmluZ2VySW5kZXgiLCJub3JtYWxpemVGaW5nZXJOYW1lc0FuZEluZGV4ZXNUb0luZGV4ZXMiLCJleHRlbnNpb24iLCJnZXRFeHRlbnNpb24iLCJpc09iamVjdEVtcHR5Iiwic2V0Q2FwdHVyaW5nIiwiaXNDYW5jZWxsaW5nIiwic2V0Q2FuY2VsbGluZyIsImNhcHR1cmUiLCJlcnIiLCJlIiwiZmluZ2VyIiwic2VsZWN0RmluZ2VyQXBpIiwiRmluZ2VyU3RhdHVzIiwiY29sbGVjdGVkRmluZ2VycyIsImdldENvbGxlY3RlZEZpbmdlcnMiLCJnZXRGaW5nZXJzIiwicmVzcG9uc2UiLCJlcnJvclRlbXBsYXRlRXh0cmFjdGlvbiIsInZhbGlkYXRlRmluZ2VyQmlvbWV0cmljcyIsImVycm9yIiwiaXNPYmplY3QiLCJBeGlvc0Vycm9yIiwic2V0RmluZ2VycyIsImlzRmluZ2VyTG93UXVhbGl0eSIsImlzRHVwbGljYXRlRmluZ2VyIiwiaXNGb3JiaWRkZW5GaW5nZXIiLCJpc0FnckZpbmdlckRldGVjdGVkIiwiaXNBZ3JOb3RNYXRjaGVkRmluZ2VyIiwicmV0dXJuQ29kZSIsImhhbmRsZUNhcHR1cmVSZXR1cm5TdGF0dXMiLCJ2YWxpZGF0ZWRGaW5nZXIiLCJnZXRNaW5OZmlxQWNjZXB0YWJsZSIsInN3YWxUcmFuc2xhdGVQcmVmaXgiLCJodG1sIiwiZ2V0IiwidXNlV2FzbSIsIm91dHB1dCIsImNvbGxlY3RGaW5nZXJzIiwibm90aWZ5RmluZ2VyQ29sbGVjdGVkIiwiaW5kZXgiLCJzZWxlY3ROb3RoaW5nIl0sIm1hcHBpbmdzIjoiO0FBK0JBLE1BQU1BLElBQVVDLEVBQW9CQyxDQUFNO0FBSXhCLElBQUFDLHNCQUFBQSxPQUNoQkEsRUFBQSxvQkFBb0IscUJBQ3BCQSxFQUFBLGlCQUFpQixrQkFDakJBLEVBQUEseUJBQXlCLDBCQUN6QkEsRUFBQSxvQkFBb0IscUJBQ3BCQSxFQUFBLGlDQUFpQyxrQ0FDakNBLEVBQUEscUJBQXFCLHNCQUNyQkEsRUFBQSxnQkFBZ0IsaUJBQ2hCQSxFQUFBLDhCQUE4QiwrQkFDOUJBLEVBQUEsb0NBQW9DLHFDQVRwQkEsSUFBQUEsS0FBQSxDQUFBLENBQUE7QUFZWCxNQUFNQyxVQUF3QixNQUFNO0FBQUEsRUFDekMsWUFBWUMsR0FBd0JDLEdBQWdDO0FBQ2xFLFVBQU1ELENBQU8sR0FEcUIsS0FBQSxTQUFBQztBQUFBLEVBRXBDO0FBQ0Y7QUFLQSxlQUFl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
|