@blinkk/root-password-protect 2.0.9 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +1 -1
- package/dist/plugin.d.ts +8 -6
- package/dist/plugin.js +58 -21
- package/package.json +3 -3
package/dist/cli.js
CHANGED
|
@@ -71,4 +71,4 @@ var CliRunner = class {
|
|
|
71
71
|
export {
|
|
72
72
|
CliRunner
|
|
73
73
|
};
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NsaS9jbGkudHMiLCAiLi4vc3JjL2NvcmUvcGFzc3dvcmQudHMiLCAiLi4vc3JjL2NsaS9nZW5lcmF0ZS1oYXNoLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0NvbW1hbmR9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQge2JnR3JlZW4sIGJsYWNrfSBmcm9tICdrbGV1ci9jb2xvcnMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2h9IGZyb20gJy4vZ2VuZXJhdGUtaGFzaC5qcyc7XG5cbmV4cG9ydCBjbGFzcyBDbGlSdW5uZXIge1xuICBwcml2YXRlIG5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSB2ZXJzaW9uOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247XG4gIH1cblxuICBhc3luYyBydW4oYXJndjogc3RyaW5nW10pIHtcbiAgICBjb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQodGhpcy5uYW1lKTtcbiAgICBwcm9ncmFtLnZlcnNpb24odGhpcy52ZXJzaW9uKTtcbiAgICBwcm9ncmFtLm9wdGlvbignLXEsIC0tcXVpZXQnLCAncXVpZXQnKTtcbiAgICBwcm9ncmFtLmhvb2soJ3ByZUFjdGlvbicsIChjbWQpID0+IHtcbiAgICAgIGlmICghY21kLm9wdHMoKS5xdWlldCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgXHVEODNFXHVERDU1ICR7YmdHcmVlbihibGFjayhgICR7dGhpcy5uYW1lfSBgKSl9IHYke3RoaXMudmVyc2lvbn1cXG5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcHJvZ3JhbVxuICAgICAgLmNvbW1hbmQoJ2dlbmVyYXRlLWhhc2ggPHBhc3N3b3JkPicpXG4gICAgICAuZGVzY3JpcHRpb24oJ2dlbmVyYXRlcyBhIGhhc2gvc2FsdCBwYWlyIGZyb20gYSBwbGFpbi10ZXh0IHBhc3N3b3JkJylcbiAgICAgIC5hY3Rpb24oZ2VuZXJhdGVIYXNoKTtcbiAgICBhd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMoYXJndik7XG4gIH1cbn1cbiIsICJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5cbmNvbnN0IFBBU1NXT1JEX0lURVJBVElPTlMgPSAxMDAwMDtcbmNvbnN0IFBBU1NXT1JEX0hBU0hfTEVOR1RIID0gNjQ7XG5jb25zdCBQQVNTV09SRF9ESUdFU1QgPSAnc2hhMjU2JztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhc2hQYXNzd29yZChcbiAgcGFzc3dvcmQ6IHN0cmluZ1xuKTogUHJvbWlzZTx7aGFzaDogc3RyaW5nOyBzYWx0OiBzdHJpbmd9PiB7XG4gIGNvbnN0IHNhbHQgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKCdoZXgnKTtcbiAgY29uc3QgaGFzaCA9IGF3YWl0IGdlbmVyYXRlSGFzaChwYXNzd29yZCwgc2FsdCk7XG4gIHJldHVybiB7aGFzaCwgc2FsdH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlQYXNzd29yZChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbiAgaGFzaDogc3RyaW5nLFxuICBzYWx0OiBzdHJpbmdcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBnZW5lcmF0ZWRIYXNoID0gYXdhaXQgZ2VuZXJhdGVIYXNoKHBhc3N3b3JkLCBzYWx0KTtcbiAgcmV0dXJuIGhhc2ggPT09IGdlbmVyYXRlZEhhc2g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUhhc2gocGFzc3dvcmQ6IHN0cmluZywgc2FsdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjcnlwdG8ucGJrZGYyKFxuICAgICAgcGFzc3dvcmQsXG4gICAgICBzYWx0LFxuICAgICAgUEFTU1dPUkRfSVRFUkFUSU9OUyxcbiAgICAgIFBBU1NXT1JEX0hBU0hfTEVOR1RILFxuICAgICAgUEFTU1dPUkRfRElHRVNULFxuICAgICAgKGVyciwgZGVyaXZlZEtleSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcigncGFzc3dvcmQgaGFzaGluZyBmYWlsZWQnKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhc2ggPSBkZXJpdmVkS2V5LnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgICAgcmVzb2x2ZShoYXNoKTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcbn1cbiIsICJpbXBvcnQge2hhc2hQYXNzd29yZH0gZnJvbSAnLi4vY29yZS9wYXNzd29yZC5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUhhc2gocGFzc3dvcmQ6IHN0cmluZykge1xuICBjb25zdCB7aGFzaCwgc2FsdH0gPSBhd2FpdCBoYXNoUGFzc3dvcmQocGFzc3dvcmQpO1xuICBjb25zb2xlLmxvZygnLy8gR2VuZXJhdGVkIGJ5OiBgcm9vdC1wYXNzd29yZC1wcm90ZWN0IGdlbmVyYXRlLWhhc2ggXCIuLi5cImAuJyk7XG4gIGNvbnNvbGUubG9nKCdwYXNzd29yZDogeycpO1xuICBjb25zb2xlLmxvZyhgICBoYXNoOiAnJHtoYXNofScsYCk7XG4gIGNvbnNvbGUubG9nKGAgIHNhbHQ6ICcke3NhbHR9JyxgKTtcbiAgY29uc29sZS5sb2coJ30nKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxTQUFRLGVBQWM7QUFDdEIsU0FBUSxTQUFTLGFBQVk7OztBQ0Q3QixPQUFPLFlBQVk7QUFFbkIsSUFBTSxzQkFBc0I7QUFDNUIsSUFBTSx1QkFBdUI7QUFDN0IsSUFBTSxrQkFBa0I7QUFFeEIsZUFBc0IsYUFDcEIsVUFDdUM7QUFDdkMsUUFBTSxPQUFPLE9BQU8sWUFBWSxFQUFFLEVBQUUsU0FBUyxLQUFLO0FBQ2xELFFBQU0sT0FBTyxNQUFNLGFBQWEsVUFBVSxJQUFJO0FBQzlDLFNBQU8sRUFBQyxNQUFNLEtBQUk7QUFDcEI7QUFXTyxTQUFTLGFBQWEsVUFBa0IsTUFBK0I7QUFDNUUsU0FBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDdEMsV0FBTztBQUFBLE1BQ0w7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQSxDQUFDLEtBQUssZUFBZTtBQUNuQixZQUFJLEtBQUs7QUFDUCxrQkFBUSxNQUFNLHlCQUF5QjtBQUN2QyxrQkFBUSxNQUFNLEdBQUc7QUFDakIsaUJBQU8sR0FBRztBQUNWO0FBQUEsUUFDRjtBQUNBLGNBQU0sT0FBTyxXQUFXLFNBQVMsS0FBSztBQUN0QyxnQkFBUSxJQUFJO0FBQUEsTUFDZDtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFDSDs7O0FDekNBLGVBQXNCQSxjQUFhLFVBQWtCO0FBQ25ELFFBQU0sRUFBQyxNQUFNLEtBQUksSUFBSSxNQUFNLGFBQWEsUUFBUTtBQUNoRCxVQUFRLElBQUksK0RBQStEO0FBQzNFLFVBQVEsSUFBSSxhQUFhO0FBQ3pCLFVBQVEsSUFBSSxZQUFZLElBQUksSUFBSTtBQUNoQyxVQUFRLElBQUksWUFBWSxJQUFJLElBQUk7QUFDaEMsVUFBUSxJQUFJLEdBQUc7QUFDakI7OztBRkxPLElBQU0sWUFBTixNQUFnQjtBQUFBLEVBQ2I7QUFBQSxFQUNBO0FBQUEsRUFFUixZQUFZLE1BQWMsU0FBaUI7QUFDekMsU0FBSyxPQUFPO0FBQ1osU0FBSyxVQUFVO0FBQUEsRUFDakI7QUFBQSxFQUVBLE1BQU0sSUFBSSxNQUFnQjtBQUN4QixVQUFNLFVBQVUsSUFBSSxRQUFRLEtBQUssSUFBSTtBQUNyQyxZQUFRLFFBQVEsS0FBSyxPQUFPO0FBQzVCLFlBQVEsT0FBTyxlQUFlLE9BQU87QUFDckMsWUFBUSxLQUFLLGFBQWEsQ0FBQyxRQUFRO0FBQ2pDLFVBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxPQUFPO0FBQ3JCLGdCQUFRO0FBQUEsVUFDTixhQUFNLFFBQVEsTUFBTSxJQUFJLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTztBQUFBO0FBQUEsUUFDekQ7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDO0FBQ0QsWUFDRyxRQUFRLDBCQUEwQixFQUNsQyxZQUFZLHVEQUF1RCxFQUNuRSxPQUFPQyxhQUFZO0FBQ3RCLFVBQU0sUUFBUSxXQUFXLElBQUk7QUFBQSxFQUMvQjtBQUNGOyIsCiAgIm5hbWVzIjogWyJnZW5lcmF0ZUhhc2giLCAiZ2VuZXJhdGVIYXNoIl0KfQo=
|
package/dist/plugin.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Plugin, Request, Response } from '@blinkk/root';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
declare enum PasswordProtectError {
|
|
4
|
+
UNKNOWN = "UNKNOWN",
|
|
5
|
+
PASSWORD_REQUIRED = "PASSWORD_REQUIRED",
|
|
6
|
+
PASSWORD_INVALID = "PASSWORD_INVALID"
|
|
6
7
|
}
|
|
7
|
-
|
|
8
8
|
interface PasswordProtectedRoute {
|
|
9
9
|
/**
|
|
10
10
|
* URL glob pattern to match (regex not supported yet).
|
|
@@ -40,6 +40,8 @@ declare function passwordProtectPlugin(options: PasswordProtectPluginOptions): P
|
|
|
40
40
|
/**
|
|
41
41
|
* Renders the login page to a response.
|
|
42
42
|
*/
|
|
43
|
-
declare function renderPasswordPage(req: Request, res: Response,
|
|
43
|
+
declare function renderPasswordPage(req: Request, res: Response, options?: {
|
|
44
|
+
error?: PasswordProtectError;
|
|
45
|
+
}): Promise<void>;
|
|
44
46
|
|
|
45
|
-
export { type PasswordProtectPluginOptions, type PasswordProtectedRoute, passwordProtectPlugin, renderPasswordPage };
|
|
47
|
+
export { PasswordProtectError, type PasswordProtectPluginOptions, type PasswordProtectedRoute, passwordProtectPlugin, renderPasswordPage };
|
package/dist/plugin.js
CHANGED
|
@@ -6,7 +6,7 @@ import { renderToString } from "preact-render-to-string";
|
|
|
6
6
|
// src/components/PasswordPage/PasswordPage.css.ts
|
|
7
7
|
var CSS = `
|
|
8
8
|
.signin {
|
|
9
|
-
font-family: '
|
|
9
|
+
font-family: 'Inter', system-ui, sans-serif;
|
|
10
10
|
text-align: center;
|
|
11
11
|
padding: 48px 20px;
|
|
12
12
|
color: #3c4043;
|
|
@@ -115,7 +115,7 @@ var CSS = `
|
|
|
115
115
|
// src/components/PasswordPage/PasswordPage.tsx
|
|
116
116
|
import { jsx, jsxs } from "preact/jsx-runtime";
|
|
117
117
|
function PasswordPage(props) {
|
|
118
|
-
return /* @__PURE__ */ jsxs("html", { children: [
|
|
118
|
+
return /* @__PURE__ */ jsxs("html", { lang: "en", children: [
|
|
119
119
|
/* @__PURE__ */ jsxs("head", { children: [
|
|
120
120
|
/* @__PURE__ */ jsx("meta", { charset: "utf-8" }),
|
|
121
121
|
/* @__PURE__ */ jsx("title", { children: "Protected" }),
|
|
@@ -130,8 +130,8 @@ function PasswordPage(props) {
|
|
|
130
130
|
/* @__PURE__ */ jsx(
|
|
131
131
|
"link",
|
|
132
132
|
{
|
|
133
|
+
href: "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;900",
|
|
133
134
|
rel: "stylesheet",
|
|
134
|
-
href: "https://fonts.googleapis.com/css2?family=Google+Sans:wght@500&display=swap",
|
|
135
135
|
nonce: props.nonce
|
|
136
136
|
}
|
|
137
137
|
),
|
|
@@ -151,7 +151,8 @@ function PasswordPage(props) {
|
|
|
151
151
|
className: "signin__form__password",
|
|
152
152
|
name: "password",
|
|
153
153
|
type: "password",
|
|
154
|
-
placeholder: "Password"
|
|
154
|
+
placeholder: "Password",
|
|
155
|
+
autoFocus: true
|
|
155
156
|
}
|
|
156
157
|
),
|
|
157
158
|
/* @__PURE__ */ jsx("button", { className: "signin__button", type: "submit", children: /* @__PURE__ */ jsx("div", { className: "signin__button__label", children: "Submit" }) })
|
|
@@ -249,6 +250,12 @@ function generateHash(password, salt) {
|
|
|
249
250
|
import { jsx as jsx2 } from "preact/jsx-runtime";
|
|
250
251
|
var SESSION_COOKIE_HASH = "password_protect.hash";
|
|
251
252
|
var SESSION_COOKIE_SALT = "password_protect.salt";
|
|
253
|
+
var PasswordProtectError = /* @__PURE__ */ ((PasswordProtectError2) => {
|
|
254
|
+
PasswordProtectError2["UNKNOWN"] = "UNKNOWN";
|
|
255
|
+
PasswordProtectError2["PASSWORD_REQUIRED"] = "PASSWORD_REQUIRED";
|
|
256
|
+
PasswordProtectError2["PASSWORD_INVALID"] = "PASSWORD_INVALID";
|
|
257
|
+
return PasswordProtectError2;
|
|
258
|
+
})(PasswordProtectError || {});
|
|
252
259
|
function passwordProtectPlugin(options) {
|
|
253
260
|
const protectedRoutesUserConfig = options.protectedRoutes || [];
|
|
254
261
|
const protectedRoutes = protectedRoutesUserConfig.filter((protectedRoute) => {
|
|
@@ -286,8 +293,9 @@ async function handleProtectedRoute(protectedRoute, req, res, next) {
|
|
|
286
293
|
if (req.method === "POST") {
|
|
287
294
|
if (req.get("content-type") !== "application/x-www-form-urlencoded" || !req.body || !req.body.password) {
|
|
288
295
|
res.status(400);
|
|
289
|
-
renderPasswordPage(req, res, {
|
|
290
|
-
|
|
296
|
+
return renderPasswordPage(req, res, {
|
|
297
|
+
error: "PASSWORD_REQUIRED" /* PASSWORD_REQUIRED */
|
|
298
|
+
});
|
|
291
299
|
}
|
|
292
300
|
const password = req.body.password;
|
|
293
301
|
const isValid2 = await verifyPassword(
|
|
@@ -296,19 +304,18 @@ async function handleProtectedRoute(protectedRoute, req, res, next) {
|
|
|
296
304
|
protectedRoute.password.salt
|
|
297
305
|
);
|
|
298
306
|
if (!isValid2) {
|
|
299
|
-
renderPasswordPage(req, res, {
|
|
300
|
-
|
|
307
|
+
return renderPasswordPage(req, res, {
|
|
308
|
+
error: "PASSWORD_INVALID" /* PASSWORD_INVALID */
|
|
309
|
+
});
|
|
301
310
|
}
|
|
302
311
|
await setSessionCookie(protectedRoute, res);
|
|
303
|
-
next();
|
|
304
|
-
return;
|
|
312
|
+
return next();
|
|
305
313
|
}
|
|
306
314
|
const isValid = await verifySessionCookie(protectedRoute, req);
|
|
307
315
|
if (isValid) {
|
|
308
|
-
next();
|
|
309
|
-
return;
|
|
316
|
+
return next();
|
|
310
317
|
}
|
|
311
|
-
renderPasswordPage(req, res);
|
|
318
|
+
return renderPasswordPage(req, res);
|
|
312
319
|
}
|
|
313
320
|
async function setSessionCookie(protectedRoute, res) {
|
|
314
321
|
const { hash, salt } = await hashPassword(protectedRoute.password.hash);
|
|
@@ -324,17 +331,47 @@ async function verifySessionCookie(protectedRoute, req) {
|
|
|
324
331
|
}
|
|
325
332
|
return await verifyPassword(protectedRoute.password.hash, hash, salt);
|
|
326
333
|
}
|
|
327
|
-
async function renderPasswordPage(req, res,
|
|
328
|
-
const
|
|
329
|
-
|
|
330
|
-
|
|
334
|
+
async function renderPasswordPage(req, res, options) {
|
|
335
|
+
const defaultHandler = () => {
|
|
336
|
+
const nonce = generateNonce();
|
|
337
|
+
res.setHeader("content-type", "text/html");
|
|
338
|
+
res.status(401);
|
|
339
|
+
setSecurityHeaders(res, nonce);
|
|
340
|
+
const errorMsg = getErrorMessage(options?.error);
|
|
341
|
+
const mainHtml = renderToString(
|
|
342
|
+
/* @__PURE__ */ jsx2(PasswordPage, { error: errorMsg, nonce })
|
|
343
|
+
);
|
|
344
|
+
const html = `<!doctype html>
|
|
331
345
|
${mainHtml}`;
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
346
|
+
res.send(html);
|
|
347
|
+
};
|
|
348
|
+
if (req.renderer) {
|
|
349
|
+
const [route, routeParams] = req.renderer.getRoute("/401");
|
|
350
|
+
if (route) {
|
|
351
|
+
req.passwordProtect = { error: options?.error };
|
|
352
|
+
return req.renderer.handleRoute(req, res, defaultHandler, route, {
|
|
353
|
+
defaultStatusCode: 401,
|
|
354
|
+
routeParams
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
return defaultHandler();
|
|
359
|
+
}
|
|
360
|
+
function getErrorMessage(error) {
|
|
361
|
+
if (!error) {
|
|
362
|
+
return void 0;
|
|
363
|
+
}
|
|
364
|
+
if (error === "PASSWORD_REQUIRED" /* PASSWORD_REQUIRED */) {
|
|
365
|
+
return "Bad request (no password).";
|
|
366
|
+
}
|
|
367
|
+
if (error === "PASSWORD_INVALID" /* PASSWORD_INVALID */) {
|
|
368
|
+
return "Incorrect password.";
|
|
369
|
+
}
|
|
370
|
+
return "Unknown error.";
|
|
335
371
|
}
|
|
336
372
|
export {
|
|
373
|
+
PasswordProtectError,
|
|
337
374
|
passwordProtectPlugin,
|
|
338
375
|
renderPasswordPage
|
|
339
376
|
};
|
|
340
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3BsdWdpbi9wbHVnaW4udHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL1Bhc3N3b3JkUGFnZS9QYXNzd29yZFBhZ2UuY3NzLnRzIiwgIi4uL3NyYy9jb21wb25lbnRzL1Bhc3N3b3JkUGFnZS9QYXNzd29yZFBhZ2UudHN4IiwgIi4uL3NyYy9jb3JlL2NzcC50cyIsICIuLi9zcmMvY29yZS9wYXNzd29yZC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHtSZXF1ZXN0LCBSZXNwb25zZSwgTmV4dEZ1bmN0aW9uLCBQbHVnaW4sIFNlcnZlcn0gZnJvbSAnQGJsaW5ray9yb290JztcbmltcG9ydCBib2R5UGFyc2VyIGZyb20gJ2JvZHktcGFyc2VyJztcbmltcG9ydCBtaWNyb21hdGNoIGZyb20gJ21pY3JvbWF0Y2gnO1xuaW1wb3J0IHtyZW5kZXJUb1N0cmluZ30gZnJvbSAncHJlYWN0LXJlbmRlci10by1zdHJpbmcnO1xuaW1wb3J0IHtcbiAgUGFzc3dvcmRQYWdlLFxuICBQYXNzd29yZFBhZ2VQcm9wcyxcbn0gZnJvbSAnLi4vY29tcG9uZW50cy9QYXNzd29yZFBhZ2UvUGFzc3dvcmRQYWdlLmpzJztcbmltcG9ydCB7Z2VuZXJhdGVOb25jZSwgc2V0U2VjdXJpdHlIZWFkZXJzfSBmcm9tICcuLi9jb3JlL2NzcC5qcyc7XG5pbXBvcnQge2hhc2hQYXNzd29yZCwgdmVyaWZ5UGFzc3dvcmR9IGZyb20gJy4uL2NvcmUvcGFzc3dvcmQuanMnO1xuXG5jb25zdCBTRVNTSU9OX0NPT0tJRV9IQVNIID0gJ3Bhc3N3b3JkX3Byb3RlY3QuaGFzaCc7XG5jb25zdCBTRVNTSU9OX0NPT0tJRV9TQUxUID0gJ3Bhc3N3b3JkX3Byb3RlY3Quc2FsdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRQcm90ZWN0ZWRSb3V0ZSB7XG4gIC8qKlxuICAgKiBVUkwgZ2xvYiBwYXR0ZXJuIHRvIG1hdGNoIChyZWdleCBub3Qgc3VwcG9ydGVkIHlldCkuXG4gICAqL1xuICBzb3VyY2U6IHN0cmluZztcblxuICBwYXNzd29yZDoge1xuICAgIC8qKlxuICAgICAqIEEgaGFzaCBvZiB0aGUgcGFzc3dvcmQuIE5vdGU6IGEgcGxhaW4tdGV4dCBwYXNzd29yZCBzaG91bGQgbmV2ZXIgYmVcbiAgICAgKiBzdG9yZWQgaW4gY29kZS4gQ29uc2lkZXIgc3RvcmluZyB0aGlzIHZhbHVlIGluIGEgYC5lbnZgIGZpbGUgZm9yIGV4dHJhXG4gICAgICogc2VjdXJpdHkuXG4gICAgICpcbiAgICAgKiBHZW5lcmF0ZSB0aGlzIGJ5IHJ1bm5pbmc6XG4gICAgICogYGBgXG4gICAgICogcm9vdC1wYXNzd29yZC1wcm90ZWN0IGdlbmVyYXRlLWhhc2ggXCJNWV9QQVNTV09SRFwiXG4gICAgICogYGBgYFxuICAgICAqL1xuICAgIGhhc2g6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEEgcmFuZG9tIHN0cmluZyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBwYXNzd29yZCBoYXNoLlxuICAgICAqXG4gICAgICogR2VuZXJhdGUgdGhpcyBieSBydW5uaW5nOlxuICAgICAqIGBgYFxuICAgICAqIHJvb3QtcGFzc3dvcmQtcHJvdGVjdCBnZW5lcmF0ZS1oYXNoIFwiTVlfUEFTU1dPUkRcIlxuICAgICAqIGBgYGBcbiAgICAgKi9cbiAgICBzYWx0OiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRQcm90ZWN0UGx1Z2luT3B0aW9ucyB7XG4gIHByb3RlY3RlZFJvdXRlczogUGFzc3dvcmRQcm90ZWN0ZWRSb3V0ZVtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFzc3dvcmRQcm90ZWN0UGx1Z2luKFxuICBvcHRpb25zOiBQYXNzd29yZFByb3RlY3RQbHVnaW5PcHRpb25zXG4pOiBQbHVnaW4ge1xuICBjb25zdCBwcm90ZWN0ZWRSb3V0ZXNVc2VyQ29uZmlnID0gb3B0aW9ucy5wcm90ZWN0ZWRSb3V0ZXMgfHwgW107XG4gIGNvbnN0IHByb3RlY3RlZFJvdXRlcyA9IHByb3RlY3RlZFJvdXRlc1VzZXJDb25maWcuZmlsdGVyKChwcm90ZWN0ZWRSb3V0ZSkgPT4ge1xuICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgcHJvdGVjdGVkUm91dGUuc291cmNlICYmXG4gICAgICAgIHByb3RlY3RlZFJvdXRlLnBhc3N3b3JkICYmXG4gICAgICAgIHByb3RlY3RlZFJvdXRlLnBhc3N3b3JkLmhhc2ggJiZcbiAgICAgICAgcHJvdGVjdGVkUm91dGUucGFzc3dvcmQuc2FsdFxuICAgICk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBwYXNzd29yZC1wcm90ZWN0ZWQgcm91dGUgdGhhdCBtYXRjaGVzLlxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0UHJvdGVjdGVkUm91dGVDb25maWcoXG4gICAgcmVxOiBSZXF1ZXN0XG4gICk6IFBhc3N3b3JkUHJvdGVjdGVkUm91dGUgfCBudWxsIHtcbiAgICBmb3IgKGNvbnN0IHByb3RlY3RlZFJvdXRlIG9mIHByb3RlY3RlZFJvdXRlcykge1xuICAgICAgaWYgKG1pY3JvbWF0Y2guaXNNYXRjaChyZXEucGF0aCwgcHJvdGVjdGVkUm91dGUuc291cmNlKSkge1xuICAgICAgICByZXR1cm4gcHJvdGVjdGVkUm91dGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAncm9vdC1wYXNzd29yZC1wcm90ZWN0JyxcbiAgICBjb25maWd1cmVTZXJ2ZXI6IChzZXJ2ZXI6IFNlcnZlcikgPT4ge1xuICAgICAgaWYgKHByb3RlY3RlZFJvdXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2VydmVyLnVzZShib2R5UGFyc2VyLnVybGVuY29kZWQoe2V4dGVuZGVkOiB0cnVlfSkpO1xuICAgICAgc2VydmVyLnVzZShhc3luYyAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pID0+IHtcbiAgICAgICAgY29uc3QgcHJvdGVjdGVkUm91dGUgPSBnZXRQcm90ZWN0ZWRSb3V0ZUNvbmZpZyhyZXEpO1xuICAgICAgICBpZiAocHJvdGVjdGVkUm91dGUpIHtcbiAgICAgICAgICBhd2FpdCBoYW5kbGVQcm90ZWN0ZWRSb3V0ZShwcm90ZWN0ZWRSb3V0ZSwgcmVxLCByZXMsIG5leHQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgICB9KTtcbiAgICB9LFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVQcm90ZWN0ZWRSb3V0ZShcbiAgcHJvdGVjdGVkUm91dGU6IFBhc3N3b3JkUHJvdGVjdGVkUm91dGUsXG4gIHJlcTogUmVxdWVzdCxcbiAgcmVzOiBSZXNwb25zZSxcbiAgbmV4dDogTmV4dEZ1bmN0aW9uXG4pIHtcbiAgaWYgKHJlcS5tZXRob2QgPT09ICdQT1NUJykge1xuICAgIC8vIFZlcmlmeSBwYXNzd29yZCBhbmQgaWYgdmFsaWQgc2V0IGEgc2Vzc2lvbiBjb29raWUuXG4gICAgaWYgKFxuICAgICAgcmVxLmdldCgnY29udGVudC10eXBlJykgIT09ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnIHx8XG4gICAgICAhcmVxLmJvZHkgfHxcbiAgICAgICFyZXEuYm9keS5wYXNzd29yZFxuICAgICkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApO1xuICAgICAgcmVuZGVyUGFzc3dvcmRQYWdlKHJlcSwgcmVzLCB7ZXJyb3I6ICdCYWQgcmVxdWVzdCAobm8gcGFzc3dvcmQpLid9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXNzd29yZCA9IHJlcS5ib2R5LnBhc3N3b3JkIGFzIHN0cmluZztcbiAgICBjb25zdCBpc1ZhbGlkID0gYXdhaXQgdmVyaWZ5UGFzc3dvcmQoXG4gICAgICBwYXNzd29yZCxcbiAgICAgIHByb3RlY3RlZFJvdXRlLnBhc3N3b3JkLmhhc2gsXG4gICAgICBwcm90ZWN0ZWRSb3V0ZS5wYXNzd29yZC5zYWx0XG4gICAgKTtcbiAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgIHJlbmRlclBhc3N3b3JkUGFnZShyZXEsIHJlcywge2Vycm9yOiAnSW5jb3JyZWN0IHBhc3N3b3JkLid9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gU2V0IGEgc2Vzc2lvbiBjb29raWUgdmFsdWUgdG8gdmVyaWZ5IHN1YnNlcXVlbnQgcmVxdWVzdHMuXG4gICAgYXdhaXQgc2V0U2Vzc2lvbkNvb2tpZShwcm90ZWN0ZWRSb3V0ZSwgcmVzKTtcbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gSWYgcHJldmlvdXNseSBsb2dnZWQgaW4sIGNoZWNrIHRoZSBzZXNzaW9uIGNvb2tpZSBhZ2FpbnN0IHRoZSBjdXJyZW50XG4gIC8vIHBhc3N3b3JkIGhhc2guXG4gIGNvbnN0IGlzVmFsaWQgPSBhd2FpdCB2ZXJpZnlTZXNzaW9uQ29va2llKHByb3RlY3RlZFJvdXRlLCByZXEpO1xuICBpZiAoaXNWYWxpZCkge1xuICAgIG5leHQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICByZW5kZXJQYXNzd29yZFBhZ2UocmVxLCByZXMpO1xufVxuXG4vKipcbiAqIFNhdmVzIGEgdmVyaWZpY2F0aW9uIHRva2VuIHRvIHRoZSBzZXNzaW9uIGNvb2tpZSBmb3Igc3Vic2VxdWVudCByZXF1ZXN0cy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2V0U2Vzc2lvbkNvb2tpZShcbiAgcHJvdGVjdGVkUm91dGU6IFBhc3N3b3JkUHJvdGVjdGVkUm91dGUsXG4gIHJlczogUmVzcG9uc2Vcbikge1xuICBjb25zdCB7aGFzaCwgc2FsdH0gPSBhd2FpdCBoYXNoUGFzc3dvcmQocHJvdGVjdGVkUm91dGUucGFzc3dvcmQuaGFzaCk7XG4gIHJlcy5zZXNzaW9uLnNldEl0ZW0oU0VTU0lPTl9DT09LSUVfSEFTSCwgaGFzaCk7XG4gIHJlcy5zZXNzaW9uLnNldEl0ZW0oU0VTU0lPTl9DT09LSUVfU0FMVCwgc2FsdCk7XG4gIHJlcy5zYXZlU2Vzc2lvbigpO1xufVxuXG4vKipcbiAqIFZlcmlmaWVzIHRoZSBzZXNzaW9uIGNvb2tpZSB2YWx1ZSBpcyB2YWxpZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdmVyaWZ5U2Vzc2lvbkNvb2tpZShcbiAgcHJvdGVjdGVkUm91dGU6IFBhc3N3b3JkUHJvdGVjdGVkUm91dGUsXG4gIHJlcTogUmVxdWVzdFxuKSB7XG4gIGNvbnN0IGhhc2ggPSByZXEuc2Vzc2lvbi5nZXRJdGVtKFNFU1NJT05fQ09PS0lFX0hBU0gpO1xuICBjb25zdCBzYWx0ID0gcmVxLnNlc3Npb24uZ2V0SXRlbShTRVNTSU9OX0NPT0tJRV9TQUxUKTtcbiAgaWYgKCFoYXNoIHx8ICFzYWx0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBhd2FpdCB2ZXJpZnlQYXNzd29yZChwcm90ZWN0ZWRSb3V0ZS5wYXNzd29yZC5oYXNoLCBoYXNoLCBzYWx0KTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBsb2dpbiBwYWdlIHRvIGEgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJQYXNzd29yZFBhZ2UoXG4gIHJlcTogUmVxdWVzdCxcbiAgcmVzOiBSZXNwb25zZSxcbiAgcHJvcHM/OiBPbWl0PFBhc3N3b3JkUGFnZVByb3BzLCAnbm9uY2UnPlxuKSB7XG4gIGNvbnN0IG5vbmNlID0gZ2VuZXJhdGVOb25jZSgpO1xuICBjb25zdCBtYWluSHRtbCA9IHJlbmRlclRvU3RyaW5nKDxQYXNzd29yZFBhZ2Ugey4uLnByb3BzfSBub25jZT17bm9uY2V9IC8+KTtcbiAgY29uc3QgaHRtbCA9IGA8IWRvY3R5cGUgaHRtbD5cXG4ke21haW5IdG1sfWA7XG4gIHJlcy5zZXRIZWFkZXIoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L2h0bWwnKTtcbiAgc2V0U2VjdXJpdHlIZWFkZXJzKHJlcywgbm9uY2UpO1xuICByZXMuc2VuZChodG1sKTtcbn1cbiIsICJleHBvcnQgY29uc3QgQ1NTID0gYFxuLnNpZ25pbiB7XG4gIGZvbnQtZmFtaWx5OiAnR29vZ2xlIFNhbnMnLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwYWRkaW5nOiA0OHB4IDIwcHg7XG4gIGNvbG9yOiAjM2M0MDQzO1xufVxuXG4uc2lnbmluX19oZWFkbGluZSB7XG4gIG1hcmdpbi1ib3R0b206IDQwcHg7XG59XG5cbi5zaWduaW5fX2hlYWRsaW5lX19pY29uIHtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cblxuLnNpZ25pbl9faGVhZGxpbmVfX2ljb24gc3ZnIHtcbiAgd2lkdGg6IDcycHg7XG4gIGhlaWdodDogNzJweDtcbn1cblxuLnNpZ25pbl9faGVhZGxpbmVfX3RpdGxlIHtcbiAgZm9udC1zaXplOiAzNnB4O1xuICBsaW5lLWhlaWdodDogMS4zO1xuICBmb250LXdlaWdodDogNTAwO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG4uc2lnbmluX19oZWFkbGluZV9fYm9keSB7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cblxuLnNpZ25pbl9fZm9ybSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogOHB4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLnNpZ25pbl9fZm9ybV9fcGFzc3dvcmQge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGFkY2UwO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGhlaWdodDogNDBweDtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGxldHRlci1zcGFjaW5nOiAuMjVweDtcbiAgcGFkZGluZzogMCAxMnB4O1xuICBtaW4td2lkdGg6IDI1MHB4O1xuICB0cmFuc2l0aW9uOiBhbGwgMC4yMThzIGVhc2U7XG59XG5cbi5zaWduaW5fX2Zvcm1fX3Bhc3N3b3JkOmZvY3VzIHtcbiAgYm9yZGVyLWNvbG9yOiAjZDJlM2ZjO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDY2LCAxMzMsIDI0NCwgMC4wNCk7XG59XG5cbi5zaWduaW5fX2J1dHRvbiB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xuICBhcHBlYXJhbmNlOiBub25lO1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBnYXA6IDEycHg7XG4gIHBhZGRpbmc6IDhweCAxMXB4O1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RhZGNlMDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBwYWRkaW5nOiAwIDEycHg7XG4gIGhlaWdodDogNDBweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgdHJhbnNpdGlvbjogYWxsIDAuMjE4cyBlYXNlO1xufVxuXG4uc2lnbmluX19idXR0b246aG92ZXIge1xuICBib3JkZXItY29sb3I6ICNkMmUzZmM7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoNjYsIDEzMywgMjQ0LCAwLjA0KTtcbn1cblxuLnNpZ25pbl9fYnV0dG9uX19pY29uIHtcbiAgd2lkdGg6IDE4cHg7XG4gIGhlaWdodDogMThweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG59XG5cbi5zaWduaW5fX2J1dHRvbl9fbGFiZWwge1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBsZXR0ZXItc3BhY2luZzogLjI1cHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGNvbG9yOiAjM2M0MDQzO1xufVxuXG4uc2lnbmluX19lcnJvciB7XG4gIGNvbG9yOiByZWQ7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG1heC13aWR0aDogNjBjaDtcbiAgbWFyZ2luOiAyMHB4IGF1dG8gMDtcbn1cbmA7XG4iLCAiaW1wb3J0IHtDU1N9IGZyb20gJy4vUGFzc3dvcmRQYWdlLmNzcy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRQYWdlUHJvcHMge1xuICBub25jZTogc3RyaW5nO1xuICBlcnJvcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFBhc3N3b3JkUGFnZShwcm9wczogUGFzc3dvcmRQYWdlUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8aHRtbD5cbiAgICAgIDxoZWFkPlxuICAgICAgICA8bWV0YSBjaGFyc2V0PVwidXRmLThcIiAvPlxuICAgICAgICA8dGl0bGU+UHJvdGVjdGVkPC90aXRsZT5cbiAgICAgICAgPGxpbmtcbiAgICAgICAgICByZWw9XCJpY29uXCJcbiAgICAgICAgICBocmVmPVwiaHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2lqSzUwVGZRbFZfeUp3M2ktQ01sbkQ2b3NINFBib1pCSUxackpjV2hvTk1FbW95Q0Q1ZTFiQXhYYmFPUGU1dzRnR19TY2YzN0VYcm1aNnA4c1AybHVlNWZMWjQxOW01SnlMTXM9ZTM4NS13MjU2XCJcbiAgICAgICAgICB0eXBlPVwiaW1hZ2UvcG5nXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGxpbmtcbiAgICAgICAgICByZWw9XCJzdHlsZXNoZWV0XCJcbiAgICAgICAgICBocmVmPVwiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1Hb29nbGUrU2Fuczp3Z2h0QDUwMCZkaXNwbGF5PXN3YXBcIlxuICAgICAgICAgIG5vbmNlPXtwcm9wcy5ub25jZX1cbiAgICAgICAgLz5cbiAgICAgICAgPHN0eWxlIG5vbmNlPXtwcm9wcy5ub25jZX0+e0NTU308L3N0eWxlPlxuICAgICAgPC9oZWFkPlxuICAgICAgPGJvZHk+XG4gICAgICAgIDxkaXYgaWQ9XCJyb290XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzaWduaW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2lnbmluX19oZWFkbGluZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNpZ25pbl9faGVhZGxpbmVfX2ljb25cIj5cbiAgICAgICAgICAgICAgICA8U2hpZWxkSWNvbiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGgxPlRoaXMgcGFnZSBpcyBwcm90ZWN0ZWQuPC9oMT5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwic2lnbmluX19oZWFkbGluZV9fYm9keVwiPlxuICAgICAgICAgICAgICAgIEVudGVyIHRoZSBwYXNzd29yZCBiZWxvdyB0byBjb250aW51ZTpcbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8Zm9ybSBjbGFzc05hbWU9XCJzaWduaW5fX2Zvcm1cIiBtZXRob2Q9XCJQT1NUXCI+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGlkPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInNpZ25pbl9fZm9ybV9fcGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJzaWduaW5fX2J1dHRvblwiIHR5cGU9XCJzdWJtaXRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNpZ25pbl9fYnV0dG9uX19sYWJlbFwiPlN1Ym1pdDwvZGl2PlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIHtwcm9wcy5lcnJvciAmJiA8cCBjbGFzc05hbWU9XCJzaWduaW5fX2Vycm9yXCI+e3Byb3BzLmVycm9yfTwvcD59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9ib2R5PlxuICAgIDwvaHRtbD5cbiAgKTtcbn1cblxuZnVuY3Rpb24gU2hpZWxkSWNvbigpIHtcbiAgcmV0dXJuIChcbiAgICA8c3ZnXG4gICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgIHdpZHRoPVwiMzZcIlxuICAgICAgaGVpZ2h0PVwiMzZcIlxuICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgc3Ryb2tlPVwiI2ZmNDUwMFwiXG4gICAgICBmaWxsPVwibm9uZVwiXG4gICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICA+XG4gICAgICA8cGF0aCBzdHJva2U9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiIC8+XG4gICAgICA8cGF0aFxuICAgICAgICBkPVwiTTExLjk5OCAybC4xMTggLjAwN2wuMDU5IC4wMDhsLjA2MSAuMDEzbC4xMTEgLjAzNGEuOTkzIC45OTMgMCAwIDEgLjIxNyAuMTEybC4xMDQgLjA4MmwuMjU1IC4yMThhMTEgMTEgMCAwIDAgNy4xODkgMi41MzdsLjM0MiAtLjAxYTEgMSAwIDAgMSAxLjAwNSAuNzE3YTEzIDEzIDAgMCAxIC05LjIwOCAxNi4yNWExIDEgMCAwIDEgLS41MDIgMGExMyAxMyAwIDAgMSAtOS4yMDkgLTE2LjI1YTEgMSAwIDAgMSAxLjAwNSAtLjcxN2ExMSAxMSAwIDAgMCA3LjUzMSAtMi41MjdsLjI2MyAtLjIyNWwuMDk2IC0uMDc1YS45OTMgLjk5MyAwIDAgMSAuMjE3IC0uMTEybC4xMTIgLS4wMzRhLjk3IC45NyAwIDAgMSAuMTE5IC0uMDIxbC4xMTUgLS4wMDd6bS4wMDIgN2EyIDIgMCAwIDAgLTEuOTk1IDEuODVsLS4wMDUgLjE1bC4wMDUgLjE1YTIgMiAwIDAgMCAuOTk1IDEuNTgxdjEuNzY5bC4wMDcgLjExN2ExIDEgMCAwIDAgMS45OTMgLS4xMTdsLjAwMSAtMS43NjhhMiAyIDAgMCAwIC0xLjAwMSAtMy43MzJ6XCJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMFwiXG4gICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgLz5cbiAgICA8L3N2Zz5cbiAgKTtcbn1cbiIsICJpbXBvcnQgY3J5cHRvIGZyb20gJ25vZGU6Y3J5cHRvJztcbmltcG9ydCB7UmVzcG9uc2V9IGZyb20gJ0BibGlua2svcm9vdCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZU5vbmNlKCkge1xuICByZXR1cm4gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZygnYmFzZTY0Jyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTZWN1cml0eUhlYWRlcnMocmVzOiBSZXNwb25zZSwgbm9uY2U6IHN0cmluZykge1xuICByZXMuc2V0SGVhZGVyKCd4LWZyYW1lLW9wdGlvbnMnLCAnU0FNRU9SSUdJTicpO1xuICByZXMuc2V0SGVhZGVyKFxuICAgICdzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5JyxcbiAgICAnbWF4LWFnZT02MzA3MjAwMDsgaW5jbHVkZVN1YmRvbWFpbnM7IHByZWxvYWQnXG4gICk7XG4gIHJlcy5zZXRIZWFkZXIoJ3gtY29udGVudC10eXBlLW9wdGlvbnMnLCAnbm9zbmlmZicpO1xuICByZXMuc2V0SGVhZGVyKCd4LXhzcy1wcm90ZWN0aW9uJywgJzE7IG1vZGU9YmxvY2snKTtcblxuICAvLyBodHRwczovL2NzcC53aXRoZ29vZ2xlLmNvbS9kb2NzL3N0cmljdC1jc3AuaHRtbFxuICBjb25zdCBkaXJlY3RpdmVzID0gW1xuICAgIFwiYmFzZS11cmkgJ25vbmUnXCIsXG4gICAgXCJvYmplY3Qtc3JjICdub25lJ1wiLFxuICAgIGBzY3JpcHQtc3JjICdub25jZS0ke25vbmNlfScgJ3Vuc2FmZS1pbmxpbmUnICd1bnNhZmUtZXZhbCcgJ3N0cmljdC1keW5hbWljJyBodHRwczogaHR0cDpgLFxuICBdO1xuICByZXMuc2V0SGVhZGVyKCdjb250ZW50LXNlY3VyaXR5LXBvbGljeS1yZXBvcnQtb25seScsIGRpcmVjdGl2ZXMuam9pbignOycpKTtcbn1cbiIsICJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5cbmNvbnN0IFBBU1NXT1JEX0lURVJBVElPTlMgPSAxMDAwMDtcbmNvbnN0IFBBU1NXT1JEX0hBU0hfTEVOR1RIID0gNjQ7XG5jb25zdCBQQVNTV09SRF9ESUdFU1QgPSAnc2hhMjU2JztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhc2hQYXNzd29yZChcbiAgcGFzc3dvcmQ6IHN0cmluZ1xuKTogUHJvbWlzZTx7aGFzaDogc3RyaW5nOyBzYWx0OiBzdHJpbmd9PiB7XG4gIGNvbnN0IHNhbHQgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKCdoZXgnKTtcbiAgY29uc3QgaGFzaCA9IGF3YWl0IGdlbmVyYXRlSGFzaChwYXNzd29yZCwgc2FsdCk7XG4gIHJldHVybiB7aGFzaCwgc2FsdH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlQYXNzd29yZChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbiAgaGFzaDogc3RyaW5nLFxuICBzYWx0OiBzdHJpbmdcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBnZW5lcmF0ZWRIYXNoID0gYXdhaXQgZ2VuZXJhdGVIYXNoKHBhc3N3b3JkLCBzYWx0KTtcbiAgcmV0dXJuIGhhc2ggPT09IGdlbmVyYXRlZEhhc2g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUhhc2gocGFzc3dvcmQ6IHN0cmluZywgc2FsdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjcnlwdG8ucGJrZGYyKFxuICAgICAgcGFzc3dvcmQsXG4gICAgICBzYWx0LFxuICAgICAgUEFTU1dPUkRfSVRFUkFUSU9OUyxcbiAgICAgIFBBU1NXT1JEX0hBU0hfTEVOR1RILFxuICAgICAgUEFTU1dPUkRfRElHRVNULFxuICAgICAgKGVyciwgZGVyaXZlZEtleSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcigncGFzc3dvcmQgaGFzaGluZyBmYWlsZWQnKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhc2ggPSBkZXJpdmVkS2V5LnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgICAgcmVzb2x2ZShoYXNoKTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFDQSxPQUFPLGdCQUFnQjtBQUN2QixPQUFPLGdCQUFnQjtBQUN2QixTQUFRLHNCQUFxQjs7O0FDSHRCLElBQU0sTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtB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
|
|
377
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3BsdWdpbi9wbHVnaW4udHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL1Bhc3N3b3JkUGFnZS9QYXNzd29yZFBhZ2UuY3NzLnRzIiwgIi4uL3NyYy9jb21wb25lbnRzL1Bhc3N3b3JkUGFnZS9QYXNzd29yZFBhZ2UudHN4IiwgIi4uL3NyYy9jb3JlL2NzcC50cyIsICIuLi9zcmMvY29yZS9wYXNzd29yZC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHtSZXF1ZXN0LCBSZXNwb25zZSwgTmV4dEZ1bmN0aW9uLCBQbHVnaW4sIFNlcnZlcn0gZnJvbSAnQGJsaW5ray9yb290JztcbmltcG9ydCBib2R5UGFyc2VyIGZyb20gJ2JvZHktcGFyc2VyJztcbmltcG9ydCBtaWNyb21hdGNoIGZyb20gJ21pY3JvbWF0Y2gnO1xuaW1wb3J0IHtyZW5kZXJUb1N0cmluZ30gZnJvbSAncHJlYWN0LXJlbmRlci10by1zdHJpbmcnO1xuaW1wb3J0IHtQYXNzd29yZFBhZ2V9IGZyb20gJy4uL2NvbXBvbmVudHMvUGFzc3dvcmRQYWdlL1Bhc3N3b3JkUGFnZS5qcyc7XG5pbXBvcnQge2dlbmVyYXRlTm9uY2UsIHNldFNlY3VyaXR5SGVhZGVyc30gZnJvbSAnLi4vY29yZS9jc3AuanMnO1xuaW1wb3J0IHtoYXNoUGFzc3dvcmQsIHZlcmlmeVBhc3N3b3JkfSBmcm9tICcuLi9jb3JlL3Bhc3N3b3JkLmpzJztcblxuY29uc3QgU0VTU0lPTl9DT09LSUVfSEFTSCA9ICdwYXNzd29yZF9wcm90ZWN0Lmhhc2gnO1xuY29uc3QgU0VTU0lPTl9DT09LSUVfU0FMVCA9ICdwYXNzd29yZF9wcm90ZWN0LnNhbHQnO1xuXG5leHBvcnQgZW51bSBQYXNzd29yZFByb3RlY3RFcnJvciB7XG4gIFVOS05PV04gPSAnVU5LTk9XTicsXG4gIFBBU1NXT1JEX1JFUVVJUkVEID0gJ1BBU1NXT1JEX1JFUVVJUkVEJyxcbiAgUEFTU1dPUkRfSU5WQUxJRCA9ICdQQVNTV09SRF9JTlZBTElEJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZFByb3RlY3RlZFJvdXRlIHtcbiAgLyoqXG4gICAqIFVSTCBnbG9iIHBhdHRlcm4gdG8gbWF0Y2ggKHJlZ2V4IG5vdCBzdXBwb3J0ZWQgeWV0KS5cbiAgICovXG4gIHNvdXJjZTogc3RyaW5nO1xuXG4gIHBhc3N3b3JkOiB7XG4gICAgLyoqXG4gICAgICogQSBoYXNoIG9mIHRoZSBwYXNzd29yZC4gTm90ZTogYSBwbGFpbi10ZXh0IHBhc3N3b3JkIHNob3VsZCBuZXZlciBiZVxuICAgICAqIHN0b3JlZCBpbiBjb2RlLiBDb25zaWRlciBzdG9yaW5nIHRoaXMgdmFsdWUgaW4gYSBgLmVudmAgZmlsZSBmb3IgZXh0cmFcbiAgICAgKiBzZWN1cml0eS5cbiAgICAgKlxuICAgICAqIEdlbmVyYXRlIHRoaXMgYnkgcnVubmluZzpcbiAgICAgKiBgYGBcbiAgICAgKiByb290LXBhc3N3b3JkLXByb3RlY3QgZ2VuZXJhdGUtaGFzaCBcIk1ZX1BBU1NXT1JEXCJcbiAgICAgKiBgYGBgXG4gICAgICovXG4gICAgaGFzaDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQSByYW5kb20gc3RyaW5nIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHBhc3N3b3JkIGhhc2guXG4gICAgICpcbiAgICAgKiBHZW5lcmF0ZSB0aGlzIGJ5IHJ1bm5pbmc6XG4gICAgICogYGBgXG4gICAgICogcm9vdC1wYXNzd29yZC1wcm90ZWN0IGdlbmVyYXRlLWhhc2ggXCJNWV9QQVNTV09SRFwiXG4gICAgICogYGBgYFxuICAgICAqL1xuICAgIHNhbHQ6IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZFByb3RlY3RQbHVnaW5PcHRpb25zIHtcbiAgcHJvdGVjdGVkUm91dGVzOiBQYXNzd29yZFByb3RlY3RlZFJvdXRlW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXNzd29yZFByb3RlY3RQbHVnaW4oXG4gIG9wdGlvbnM6IFBhc3N3b3JkUHJvdGVjdFBsdWdpbk9wdGlvbnNcbik6IFBsdWdpbiB7XG4gIGNvbnN0IHByb3RlY3RlZFJvdXRlc1VzZXJDb25maWcgPSBvcHRpb25zLnByb3RlY3RlZFJvdXRlcyB8fCBbXTtcbiAgY29uc3QgcHJvdGVjdGVkUm91dGVzID0gcHJvdGVjdGVkUm91dGVzVXNlckNvbmZpZy5maWx0ZXIoKHByb3RlY3RlZFJvdXRlKSA9PiB7XG4gICAgcmV0dXJuIEJvb2xlYW4oXG4gICAgICBwcm90ZWN0ZWRSb3V0ZS5zb3VyY2UgJiZcbiAgICAgICAgcHJvdGVjdGVkUm91dGUucGFzc3dvcmQgJiZcbiAgICAgICAgcHJvdGVjdGVkUm91dGUucGFzc3dvcmQuaGFzaCAmJlxuICAgICAgICBwcm90ZWN0ZWRSb3V0ZS5wYXNzd29yZC5zYWx0XG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZpcnN0IHBhc3N3b3JkLXByb3RlY3RlZCByb3V0ZSB0aGF0IG1hdGNoZXMuXG4gICAqL1xuICBmdW5jdGlvbiBnZXRQcm90ZWN0ZWRSb3V0ZUNvbmZpZyhcbiAgICByZXE6IFJlcXVlc3RcbiAgKTogUGFzc3dvcmRQcm90ZWN0ZWRSb3V0ZSB8IG51bGwge1xuICAgIGZvciAoY29uc3QgcHJvdGVjdGVkUm91dGUgb2YgcHJvdGVjdGVkUm91dGVzKSB7XG4gICAgICBpZiAobWljcm9tYXRjaC5pc01hdGNoKHJlcS5wYXRoLCBwcm90ZWN0ZWRSb3V0ZS5zb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiBwcm90ZWN0ZWRSb3V0ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdyb290LXBhc3N3b3JkLXByb3RlY3QnLFxuICAgIGNvbmZpZ3VyZVNlcnZlcjogKHNlcnZlcjogU2VydmVyKSA9PiB7XG4gICAgICBpZiAocHJvdGVjdGVkUm91dGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZXJ2ZXIudXNlKGJvZHlQYXJzZXIudXJsZW5jb2RlZCh7ZXh0ZW5kZWQ6IHRydWV9KSk7XG4gICAgICBzZXJ2ZXIudXNlKGFzeW5jIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBwcm90ZWN0ZWRSb3V0ZSA9IGdldFByb3RlY3RlZFJvdXRlQ29uZmlnKHJlcSk7XG4gICAgICAgIGlmIChwcm90ZWN0ZWRSb3V0ZSkge1xuICAgICAgICAgIGF3YWl0IGhhbmRsZVByb3RlY3RlZFJvdXRlKHByb3RlY3RlZFJvdXRlLCByZXEsIHJlcywgbmV4dCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVByb3RlY3RlZFJvdXRlKFxuICBwcm90ZWN0ZWRSb3V0ZTogUGFzc3dvcmRQcm90ZWN0ZWRSb3V0ZSxcbiAgcmVxOiBSZXF1ZXN0LFxuICByZXM6IFJlc3BvbnNlLFxuICBuZXh0OiBOZXh0RnVuY3Rpb25cbikge1xuICBpZiAocmVxLm1ldGhvZCA9PT0gJ1BPU1QnKSB7XG4gICAgLy8gVmVyaWZ5IHBhc3N3b3JkIGFuZCBpZiB2YWxpZCBzZXQgYSBzZXNzaW9uIGNvb2tpZS5cbiAgICBpZiAoXG4gICAgICByZXEuZ2V0KCdjb250ZW50LXR5cGUnKSAhPT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcgfHxcbiAgICAgICFyZXEuYm9keSB8fFxuICAgICAgIXJlcS5ib2R5LnBhc3N3b3JkXG4gICAgKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCk7XG4gICAgICByZXR1cm4gcmVuZGVyUGFzc3dvcmRQYWdlKHJlcSwgcmVzLCB7XG4gICAgICAgIGVycm9yOiBQYXNzd29yZFByb3RlY3RFcnJvci5QQVNTV09SRF9SRVFVSVJFRCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3N3b3JkID0gcmVxLmJvZHkucGFzc3dvcmQgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGlzVmFsaWQgPSBhd2FpdCB2ZXJpZnlQYXNzd29yZChcbiAgICAgIHBhc3N3b3JkLFxuICAgICAgcHJvdGVjdGVkUm91dGUucGFzc3dvcmQuaGFzaCxcbiAgICAgIHByb3RlY3RlZFJvdXRlLnBhc3N3b3JkLnNhbHRcbiAgICApO1xuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIHJlbmRlclBhc3N3b3JkUGFnZShyZXEsIHJlcywge1xuICAgICAgICBlcnJvcjogUGFzc3dvcmRQcm90ZWN0RXJyb3IuUEFTU1dPUkRfSU5WQUxJRCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBTZXQgYSBzZXNzaW9uIGNvb2tpZSB2YWx1ZSB0byB2ZXJpZnkgc3Vic2VxdWVudCByZXF1ZXN0cy5cbiAgICBhd2FpdCBzZXRTZXNzaW9uQ29va2llKHByb3RlY3RlZFJvdXRlLCByZXMpO1xuICAgIHJldHVybiBuZXh0KCk7XG4gIH1cblxuICAvLyBJZiBwcmV2aW91c2x5IGxvZ2dlZCBpbiwgY2hlY2sgdGhlIHNlc3Npb24gY29va2llIGFnYWluc3QgdGhlIGN1cnJlbnRcbiAgLy8gcGFzc3dvcmQgaGFzaC5cbiAgY29uc3QgaXNWYWxpZCA9IGF3YWl0IHZlcmlmeVNlc3Npb25Db29raWUocHJvdGVjdGVkUm91dGUsIHJlcSk7XG4gIGlmIChpc1ZhbGlkKSB7XG4gICAgcmV0dXJuIG5leHQoKTtcbiAgfVxuXG4gIHJldHVybiByZW5kZXJQYXNzd29yZFBhZ2UocmVxLCByZXMpO1xufVxuXG4vKipcbiAqIFNhdmVzIGEgdmVyaWZpY2F0aW9uIHRva2VuIHRvIHRoZSBzZXNzaW9uIGNvb2tpZSBmb3Igc3Vic2VxdWVudCByZXF1ZXN0cy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2V0U2Vzc2lvbkNvb2tpZShcbiAgcHJvdGVjdGVkUm91dGU6IFBhc3N3b3JkUHJvdGVjdGVkUm91dGUsXG4gIHJlczogUmVzcG9uc2Vcbikge1xuICBjb25zdCB7aGFzaCwgc2FsdH0gPSBhd2FpdCBoYXNoUGFzc3dvcmQocHJvdGVjdGVkUm91dGUucGFzc3dvcmQuaGFzaCk7XG4gIHJlcy5zZXNzaW9uLnNldEl0ZW0oU0VTU0lPTl9DT09LSUVfSEFTSCwgaGFzaCk7XG4gIHJlcy5zZXNzaW9uLnNldEl0ZW0oU0VTU0lPTl9DT09LSUVfU0FMVCwgc2FsdCk7XG4gIHJlcy5zYXZlU2Vzc2lvbigpO1xufVxuXG4vKipcbiAqIFZlcmlmaWVzIHRoZSBzZXNzaW9uIGNvb2tpZSB2YWx1ZSBpcyB2YWxpZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdmVyaWZ5U2Vzc2lvbkNvb2tpZShcbiAgcHJvdGVjdGVkUm91dGU6IFBhc3N3b3JkUHJvdGVjdGVkUm91dGUsXG4gIHJlcTogUmVxdWVzdFxuKSB7XG4gIGNvbnN0IGhhc2ggPSByZXEuc2Vzc2lvbi5nZXRJdGVtKFNFU1NJT05fQ09PS0lFX0hBU0gpO1xuICBjb25zdCBzYWx0ID0gcmVxLnNlc3Npb24uZ2V0SXRlbShTRVNTSU9OX0NPT0tJRV9TQUxUKTtcbiAgaWYgKCFoYXNoIHx8ICFzYWx0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBhd2FpdCB2ZXJpZnlQYXNzd29yZChwcm90ZWN0ZWRSb3V0ZS5wYXNzd29yZC5oYXNoLCBoYXNoLCBzYWx0KTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBsb2dpbiBwYWdlIHRvIGEgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJQYXNzd29yZFBhZ2UoXG4gIHJlcTogUmVxdWVzdCxcbiAgcmVzOiBSZXNwb25zZSxcbiAgb3B0aW9ucz86IHtlcnJvcj86IFBhc3N3b3JkUHJvdGVjdEVycm9yfVxuKSB7XG4gIC8vIElmIHRoZXJlJ3Mgbm8gYC80MDFgIHJvdXRlLCBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgcGFzc3dvcmQgcGFnZS5cbiAgY29uc3QgZGVmYXVsdEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgY29uc3Qgbm9uY2UgPSBnZW5lcmF0ZU5vbmNlKCk7XG4gICAgcmVzLnNldEhlYWRlcignY29udGVudC10eXBlJywgJ3RleHQvaHRtbCcpO1xuICAgIHJlcy5zdGF0dXMoNDAxKTtcbiAgICBzZXRTZWN1cml0eUhlYWRlcnMocmVzLCBub25jZSk7XG4gICAgY29uc3QgZXJyb3JNc2cgPSBnZXRFcnJvck1lc3NhZ2Uob3B0aW9ucz8uZXJyb3IpO1xuICAgIGNvbnN0IG1haW5IdG1sID0gcmVuZGVyVG9TdHJpbmcoXG4gICAgICA8UGFzc3dvcmRQYWdlIGVycm9yPXtlcnJvck1zZ30gbm9uY2U9e25vbmNlfSAvPlxuICAgICk7XG4gICAgY29uc3QgaHRtbCA9IGA8IWRvY3R5cGUgaHRtbD5cXG4ke21haW5IdG1sfWA7XG4gICAgcmVzLnNlbmQoaHRtbCk7XG4gIH07XG5cbiAgLy8gSWYgdGhlIGFwcCBkZWZpbmVzIGByb3V0ZXMvNDAxLnRzeGAsIHJlbmRlciB0aGF0IHBhZ2UuXG4gIGlmIChyZXEucmVuZGVyZXIpIHtcbiAgICBjb25zdCBbcm91dGUsIHJvdXRlUGFyYW1zXSA9IHJlcS5yZW5kZXJlci5nZXRSb3V0ZSgnLzQwMScpO1xuICAgIGlmIChyb3V0ZSkge1xuICAgICAgLy8gQWRkIHRoZSBlcnJvciB0eXBlIHRvIHRoZSByZXEgb2JqZWN0LiBSb3V0ZXMgdGhhdCBkZWZpbmUgYSBgaGFuZGxlKClgXG4gICAgICAvLyBtZXRob2Qgc2hvdWxkIGJlIGFibGUgdG8gcmVhZCBmcm9tIGl0IHRvIGNvbnN0cnVjdCBhbiBhcHByb3ByaWF0ZVxuICAgICAgLy8gZXJyb3IgbWVzc2FnZSBmb3IgdGhlIHBhZ2UuXG4gICAgICAocmVxIGFzIGFueSkucGFzc3dvcmRQcm90ZWN0ID0ge2Vycm9yOiBvcHRpb25zPy5lcnJvcn07XG4gICAgICByZXR1cm4gcmVxLnJlbmRlcmVyLmhhbmRsZVJvdXRlKHJlcSwgcmVzLCBkZWZhdWx0SGFuZGxlciwgcm91dGUsIHtcbiAgICAgICAgZGVmYXVsdFN0YXR1c0NvZGU6IDQwMSxcbiAgICAgICAgcm91dGVQYXJhbXM6IHJvdXRlUGFyYW1zLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBkZWZhdWx0SGFuZGxlcigpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgYFBhc3N3b3JkUHJvdGVjdEVycm9yYCB0byBhIHVzZXItZnJpZW5kbHkgZXJyb3IgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gZ2V0RXJyb3JNZXNzYWdlKGVycm9yPzogUGFzc3dvcmRQcm90ZWN0RXJyb3IpIHtcbiAgaWYgKCFlcnJvcikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKGVycm9yID09PSBQYXNzd29yZFByb3RlY3RFcnJvci5QQVNTV09SRF9SRVFVSVJFRCkge1xuICAgIHJldHVybiAnQmFkIHJlcXVlc3QgKG5vIHBhc3N3b3JkKS4nO1xuICB9XG4gIGlmIChlcnJvciA9PT0gUGFzc3dvcmRQcm90ZWN0RXJyb3IuUEFTU1dPUkRfSU5WQUxJRCkge1xuICAgIHJldHVybiAnSW5jb3JyZWN0IHBhc3N3b3JkLic7XG4gIH1cbiAgcmV0dXJuICdVbmtub3duIGVycm9yLic7XG59XG4iLCAiZXhwb3J0IGNvbnN0IENTUyA9IGBcbi5zaWduaW4ge1xuICBmb250LWZhbWlseTogJ0ludGVyJywgc3lzdGVtLXVpLCBzYW5zLXNlcmlmO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDQ4cHggMjBweDtcbiAgY29sb3I6ICMzYzQwNDM7XG59XG5cbi5zaWduaW5fX2hlYWRsaW5lIHtcbiAgbWFyZ2luLWJvdHRvbTogNDBweDtcbn1cblxuLnNpZ25pbl9faGVhZGxpbmVfX2ljb24ge1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG4uc2lnbmluX19oZWFkbGluZV9faWNvbiBzdmcge1xuICB3aWR0aDogNzJweDtcbiAgaGVpZ2h0OiA3MnB4O1xufVxuXG4uc2lnbmluX19oZWFkbGluZV9fdGl0bGUge1xuICBmb250LXNpemU6IDM2cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjM7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG59XG5cbi5zaWduaW5fX2hlYWRsaW5lX19ib2R5IHtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMS41O1xuICBmb250LXdlaWdodDogNTAwO1xufVxuXG4uc2lnbmluX19mb3JtIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiA4cHg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4uc2lnbmluX19mb3JtX19wYXNzd29yZCB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkYWRjZTA7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMTtcbiAgbGV0dGVyLXNwYWNpbmc6IC4yNXB4O1xuICBwYWRkaW5nOiAwIDEycHg7XG4gIG1pbi13aWR0aDogMjUwcHg7XG4gIHRyYW5zaXRpb246IGFsbCAwLjIxOHMgZWFzZTtcbn1cblxuLnNpZ25pbl9fZm9ybV9fcGFzc3dvcmQ6Zm9jdXMge1xuICBib3JkZXItY29sb3I6ICNkMmUzZmM7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoNjYsIDEzMywgMjQ0LCAwLjA0KTtcbn1cblxuLnNpZ25pbl9fYnV0dG9uIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7XG4gIGFwcGVhcmFuY2U6IG5vbmU7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGdhcDogMTJweDtcbiAgcGFkZGluZzogOHB4IDExcHg7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGFkY2UwO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIHBhZGRpbmc6IDAgMTJweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB0cmFuc2l0aW9uOiBhbGwgMC4yMThzIGVhc2U7XG59XG5cbi5zaWduaW5fX2J1dHRvbjpob3ZlciB7XG4gIGJvcmRlci1jb2xvcjogI2QyZTNmYztcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg2NiwgMTMzLCAyNDQsIDAuMDQpO1xufVxuXG4uc2lnbmluX19idXR0b25fX2ljb24ge1xuICB3aWR0aDogMThweDtcbiAgaGVpZ2h0OiAxOHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbn1cblxuLnNpZ25pbl9fYnV0dG9uX19sYWJlbCB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGxldHRlci1zcGFjaW5nOiAuMjVweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6ICMzYzQwNDM7XG59XG5cbi5zaWduaW5fX2Vycm9yIHtcbiAgY29sb3I6IHJlZDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgbWF4LXdpZHRoOiA2MGNoO1xuICBtYXJnaW46IDIwcHggYXV0byAwO1xufVxuYDtcbiIsICJpbXBvcnQge0NTU30gZnJvbSAnLi9QYXNzd29yZFBhZ2UuY3NzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZFBhZ2VQcm9wcyB7XG4gIG5vbmNlOiBzdHJpbmc7XG4gIGVycm9yPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUGFzc3dvcmRQYWdlKHByb3BzOiBQYXNzd29yZFBhZ2VQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxodG1sIGxhbmc9XCJlblwiPlxuICAgICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiIC8+XG4gICAgICAgIDx0aXRsZT5Qcm90ZWN0ZWQ8L3RpdGxlPlxuICAgICAgICA8bGlua1xuICAgICAgICAgIHJlbD1cImljb25cIlxuICAgICAgICAgIGhyZWY9XCJodHRwczovL2xoMy5nb29nbGV1c2VyY29udGVudC5jb20vaWpLNTBUZlFsVl95SnczaS1DTWxuRDZvc0g0UGJvWkJJTFpySmNXaG9OTUVtb3lDRDVlMWJBeFhiYU9QZTV3NGdHX1NjZjM3RVhybVo2cDhzUDJsdWU1ZkxaNDE5bTVKeUxNcz1lMzg1LXcyNTZcIlxuICAgICAgICAgIHR5cGU9XCJpbWFnZS9wbmdcIlxuICAgICAgICAvPlxuICAgICAgICA8bGlua1xuICAgICAgICAgIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PUludGVyOndnaHRANDAwOzUwMDs2MDA7NzAwOzkwMFwiXG4gICAgICAgICAgcmVsPVwic3R5bGVzaGVldFwiXG4gICAgICAgICAgbm9uY2U9e3Byb3BzLm5vbmNlfVxuICAgICAgICAvPlxuICAgICAgICA8c3R5bGUgbm9uY2U9e3Byb3BzLm5vbmNlfT57Q1NTfTwvc3R5bGU+XG4gICAgICA8L2hlYWQ+XG4gICAgICA8Ym9keT5cbiAgICAgICAgPGRpdiBpZD1cInJvb3RcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNpZ25pblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzaWduaW5fX2hlYWRsaW5lXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2lnbmluX19oZWFkbGluZV9faWNvblwiPlxuICAgICAgICAgICAgICAgIDxTaGllbGRJY29uIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8aDE+VGhpcyBwYWdlIGlzIHByb3RlY3RlZC48L2gxPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJzaWduaW5fX2hlYWRsaW5lX19ib2R5XCI+XG4gICAgICAgICAgICAgICAgRW50ZXIgdGhlIHBhc3N3b3JkIGJlbG93IHRvIGNvbnRpbnVlOlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxmb3JtIGNsYXNzTmFtZT1cInNpZ25pbl9fZm9ybVwiIG1ldGhvZD1cIlBPU1RcIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgaWQ9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic2lnbmluX19mb3JtX19wYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgbmFtZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJzaWduaW5fX2J1dHRvblwiIHR5cGU9XCJzdWJtaXRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNpZ25pbl9fYnV0dG9uX19sYWJlbFwiPlN1Ym1pdDwvZGl2PlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIHtwcm9wcy5lcnJvciAmJiA8cCBjbGFzc05hbWU9XCJzaWduaW5fX2Vycm9yXCI+e3Byb3BzLmVycm9yfTwvcD59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9ib2R5PlxuICAgIDwvaHRtbD5cbiAgKTtcbn1cblxuZnVuY3Rpb24gU2hpZWxkSWNvbigpIHtcbiAgcmV0dXJuIChcbiAgICA8c3ZnXG4gICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgIHdpZHRoPVwiMzZcIlxuICAgICAgaGVpZ2h0PVwiMzZcIlxuICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgc3Ryb2tlPVwiI2ZmNDUwMFwiXG4gICAgICBmaWxsPVwibm9uZVwiXG4gICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICA+XG4gICAgICA8cGF0aCBzdHJva2U9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiIC8+XG4gICAgICA8cGF0aFxuICAgICAgICBkPVwiTTExLjk5OCAybC4xMTggLjAwN2wuMDU5IC4wMDhsLjA2MSAuMDEzbC4xMTEgLjAzNGEuOTkzIC45OTMgMCAwIDEgLjIxNyAuMTEybC4xMDQgLjA4MmwuMjU1IC4yMThhMTEgMTEgMCAwIDAgNy4xODkgMi41MzdsLjM0MiAtLjAxYTEgMSAwIDAgMSAxLjAwNSAuNzE3YTEzIDEzIDAgMCAxIC05LjIwOCAxNi4yNWExIDEgMCAwIDEgLS41MDIgMGExMyAxMyAwIDAgMSAtOS4yMDkgLTE2LjI1YTEgMSAwIDAgMSAxLjAwNSAtLjcxN2ExMSAxMSAwIDAgMCA3LjUzMSAtMi41MjdsLjI2MyAtLjIyNWwuMDk2IC0uMDc1YS45OTMgLjk5MyAwIDAgMSAuMjE3IC0uMTEybC4xMTIgLS4wMzRhLjk3IC45NyAwIDAgMSAuMTE5IC0uMDIxbC4xMTUgLS4wMDd6bS4wMDIgN2EyIDIgMCAwIDAgLTEuOTk1IDEuODVsLS4wMDUgLjE1bC4wMDUgLjE1YTIgMiAwIDAgMCAuOTk1IDEuNTgxdjEuNzY5bC4wMDcgLjExN2ExIDEgMCAwIDAgMS45OTMgLS4xMTdsLjAwMSAtMS43NjhhMiAyIDAgMCAwIC0xLjAwMSAtMy43MzJ6XCJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMFwiXG4gICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgLz5cbiAgICA8L3N2Zz5cbiAgKTtcbn1cbiIsICJpbXBvcnQgY3J5cHRvIGZyb20gJ25vZGU6Y3J5cHRvJztcbmltcG9ydCB7UmVzcG9uc2V9IGZyb20gJ0BibGlua2svcm9vdCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZU5vbmNlKCkge1xuICByZXR1cm4gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZygnYmFzZTY0Jyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTZWN1cml0eUhlYWRlcnMocmVzOiBSZXNwb25zZSwgbm9uY2U6IHN0cmluZykge1xuICByZXMuc2V0SGVhZGVyKCd4LWZyYW1lLW9wdGlvbnMnLCAnU0FNRU9SSUdJTicpO1xuICByZXMuc2V0SGVhZGVyKFxuICAgICdzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5JyxcbiAgICAnbWF4LWFnZT02MzA3MjAwMDsgaW5jbHVkZVN1YmRvbWFpbnM7IHByZWxvYWQnXG4gICk7XG4gIHJlcy5zZXRIZWFkZXIoJ3gtY29udGVudC10eXBlLW9wdGlvbnMnLCAnbm9zbmlmZicpO1xuICByZXMuc2V0SGVhZGVyKCd4LXhzcy1wcm90ZWN0aW9uJywgJzE7IG1vZGU9YmxvY2snKTtcblxuICAvLyBodHRwczovL2NzcC53aXRoZ29vZ2xlLmNvbS9kb2NzL3N0cmljdC1jc3AuaHRtbFxuICBjb25zdCBkaXJlY3RpdmVzID0gW1xuICAgIFwiYmFzZS11cmkgJ25vbmUnXCIsXG4gICAgXCJvYmplY3Qtc3JjICdub25lJ1wiLFxuICAgIGBzY3JpcHQtc3JjICdub25jZS0ke25vbmNlfScgJ3Vuc2FmZS1pbmxpbmUnICd1bnNhZmUtZXZhbCcgJ3N0cmljdC1keW5hbWljJyBodHRwczogaHR0cDpgLFxuICBdO1xuICByZXMuc2V0SGVhZGVyKCdjb250ZW50LXNlY3VyaXR5LXBvbGljeS1yZXBvcnQtb25seScsIGRpcmVjdGl2ZXMuam9pbignOycpKTtcbn1cbiIsICJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5cbmNvbnN0IFBBU1NXT1JEX0lURVJBVElPTlMgPSAxMDAwMDtcbmNvbnN0IFBBU1NXT1JEX0hBU0hfTEVOR1RIID0gNjQ7XG5jb25zdCBQQVNTV09SRF9ESUdFU1QgPSAnc2hhMjU2JztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhc2hQYXNzd29yZChcbiAgcGFzc3dvcmQ6IHN0cmluZ1xuKTogUHJvbWlzZTx7aGFzaDogc3RyaW5nOyBzYWx0OiBzdHJpbmd9PiB7XG4gIGNvbnN0IHNhbHQgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKCdoZXgnKTtcbiAgY29uc3QgaGFzaCA9IGF3YWl0IGdlbmVyYXRlSGFzaChwYXNzd29yZCwgc2FsdCk7XG4gIHJldHVybiB7aGFzaCwgc2FsdH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlQYXNzd29yZChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbiAgaGFzaDogc3RyaW5nLFxuICBzYWx0OiBzdHJpbmdcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBnZW5lcmF0ZWRIYXNoID0gYXdhaXQgZ2VuZXJhdGVIYXNoKHBhc3N3b3JkLCBzYWx0KTtcbiAgcmV0dXJuIGhhc2ggPT09IGdlbmVyYXRlZEhhc2g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUhhc2gocGFzc3dvcmQ6IHN0cmluZywgc2FsdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjcnlwdG8ucGJrZGYyKFxuICAgICAgcGFzc3dvcmQsXG4gICAgICBzYWx0LFxuICAgICAgUEFTU1dPUkRfSVRFUkFUSU9OUyxcbiAgICAgIFBBU1NXT1JEX0hBU0hfTEVOR1RILFxuICAgICAgUEFTU1dPUkRfRElHRVNULFxuICAgICAgKGVyciwgZGVyaXZlZEtleSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcigncGFzc3dvcmQgaGFzaGluZyBmYWlsZWQnKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhc2ggPSBkZXJpdmVkS2V5LnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgICAgcmVzb2x2ZShoYXNoKTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFDQSxPQUFPLGdCQUFnQjtBQUN2QixPQUFPLGdCQUFnQjtBQUN2QixTQUFRLHNCQUFxQjs7O0FDSHRCLElBQU0sTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNVYixTQUNFLEtBREY7QUFIQyxTQUFTLGFBQWEsT0FBMEI7QUFDckQsU0FDRSxxQkFBQyxVQUFLLE1BQUssTUFDVDtBQUFBLHlCQUFDLFVBQ0M7QUFBQSwwQkFBQyxVQUFLLFNBQVEsU0FBUTtBQUFBLE1BQ3RCLG9CQUFDLFdB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QSxLQUNBO0FBQ0EsUUFBTSxFQUFDLE1BQU0sS0FBSSxJQUFJLE1BQU0sYUFBYSxlQUFlLFNBQVMsSUFBSTtBQUNwRSxNQUFJLFFBQVEsUUFBUSxxQkFBcUIsSUFBSTtBQUM3QyxNQUFJLFFBQVEsUUFBUSxxQkFBcUIsSUFBSTtBQUM3QyxNQUFJLFlBQVk7QUFDbEI7QUFLQSxlQUFlLG9CQUNiLGdCQUNBLEtBQ0E7QUFDQSxRQUFNLE9BQU8sSUFBSSxRQUFRLFFBQVEsbUJBQW1CO0FBQ3BELFFBQU0sT0FBTyxJQUFJLFFBQVEsUUFBUSxtQkFBbUI7QUFDcEQsTUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQ2xCLFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyxNQUFNLGVBQWUsZUFBZSxTQUFTLE1BQU0sTUFBTSxJQUFJO0FBQ3RFO0FBS0EsZUFBc0IsbUJBQ3BCLEtBQ0EsS0FDQSxTQUNBO0FBRUEsUUFBTSxpQkFBaUIsTUFBTTtBQUMzQixVQUFNLFFBQVEsY0FBYztBQUM1QixRQUFJLFVBQVUsZ0JBQWdCLFdBQVc7QUFDekMsUUFBSSxPQUFPLEdBQUc7QUFDZCx1QkFBbUIsS0FBSyxLQUFLO0FBQzdCLFVBQU0sV0FBVyxnQkFBZ0IsU0FBUyxLQUFLO0FBQy9DLFVBQU0sV0FBVztBQUFBLE1BQ2YsZ0JBQUFGLEtBQUMsZ0JBQWEsT0FBTyxVQUFVLE9BQWM7QUFBQSxJQUMvQztBQUNBLFVBQU0sT0FBTztBQUFBLEVBQW9CLFFBQVE7QUFDekMsUUFBSSxLQUFLLElBQUk7QUFBQSxFQUNmO0FBR0EsTUFBSSxJQUFJLFVBQVU7QUFDaEIsVUFBTSxDQUFDLE9BQU8sV0FBVyxJQUFJLElBQUksU0FBUyxTQUFTLE1BQU07QUFDekQsUUFBSSxPQUFPO0FBSVQsTUFBQyxJQUFZLGtCQUFrQixFQUFDLE9BQU8sU0FBUyxNQUFLO0FBQ3JELGFBQU8sSUFBSSxTQUFTLFlBQVksS0FBSyxLQUFLLGdCQUFnQixPQUFPO0FBQUEsUUFDL0QsbUJBQW1CO0FBQUEsUUFDbkI7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBQUEsRUFDRjtBQUNBLFNBQU8sZUFBZTtBQUN4QjtBQUtBLFNBQVMsZ0JBQWdCLE9BQThCO0FBQ3JELE1BQUksQ0FBQyxPQUFPO0FBQ1YsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLFVBQVUsNkNBQXdDO0FBQ3BELFdBQU87QUFBQSxFQUNUO0FBQ0EsTUFBSSxVQUFVLDJDQUF1QztBQUNuRCxXQUFPO0FBQUEsRUFDVDtBQUNBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFsiY3J5cHRvIiwgImpzeCIsICJQYXNzd29yZFByb3RlY3RFcnJvciIsICJpc1ZhbGlkIl0KfQo=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blinkk/root-password-protect",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"author": "s@blinkk.com",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"engines": {
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"micromatch": "4.0.5"
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
40
|
-
"@blinkk/root": "2.
|
|
40
|
+
"@blinkk/root": "2.1.1",
|
|
41
41
|
"preact": ">=10",
|
|
42
42
|
"preact-render-to-string": ">=5"
|
|
43
43
|
},
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"preact": "10.19.3",
|
|
49
49
|
"preact-render-to-string": "6.3.1",
|
|
50
50
|
"tsup": "8.0.1",
|
|
51
|
-
"@blinkk/root": "2.
|
|
51
|
+
"@blinkk/root": "2.1.1"
|
|
52
52
|
},
|
|
53
53
|
"scripts": {
|
|
54
54
|
"build": "rm -rf dist && tsup-node",
|