@bitgo-beta/key-card 0.1.2-alpha.49 → 0.1.2-alpha.490

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.
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ /**
3
+ * PDF-generation helpers for the wallet encryption upgrade flow.
4
+ *
5
+ * Orchestration (unlocking the session, re-encrypting keychains, PUT-ing to the server) lives on
6
+ * `Wallet.upgradeEncryption` in `@bitgo-beta/sdk-core`. This module contains only the pieces that
7
+ * depend on `jspdf`/`qrcode` — a factory that returns a `UpgradeEncryptionPdfGenerator` the
8
+ * caller can pass into that method, plus a Node-side coin-logo loader.
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.loadKeycardImage = loadKeycardImage;
45
+ exports.createKeycardPdfGenerator = createKeycardPdfGenerator;
46
+ const https = __importStar(require("https"));
47
+ const statics_1 = require("@bitgo-beta/statics");
48
+ const generateQrData_1 = require("./generateQrData");
49
+ const faq_1 = require("./faq");
50
+ const drawKeycard_1 = require("./drawKeycard");
51
+ /**
52
+ * Fetch a coin logo image and return an HTMLImageElement-compatible object.
53
+ * jsPDF reads `.src` in Node.js; computeKeyCardImageDimensions reads `.width`/`.height`.
54
+ * Returns undefined on any failure — the keycard is generated without the logo in that case.
55
+ */
56
+ async function loadKeycardImage(url, httpGet = https.get) {
57
+ return new Promise((resolve) => {
58
+ httpGet(url, (res) => {
59
+ if (res.statusCode !== 200) {
60
+ console.warn(`Warning: coin logo not loaded (HTTP ${res.statusCode}) — keycard will be generated without it`);
61
+ resolve(undefined);
62
+ return;
63
+ }
64
+ const chunks = [];
65
+ res.on('data', (chunk) => chunks.push(chunk));
66
+ res.on('end', () => {
67
+ const contentType = res.headers['content-type'] ?? 'image/png';
68
+ const dataUrl = `data:${contentType};base64,${Buffer.concat(chunks).toString('base64')}`;
69
+ const img = { src: dataUrl, width: 303, height: 40 };
70
+ resolve(img);
71
+ });
72
+ res.on('error', (err) => {
73
+ console.warn(`Warning: coin logo not loaded (${err.message}) — keycard will be generated without it`);
74
+ resolve(undefined);
75
+ });
76
+ }).on('error', (err) => {
77
+ console.warn(`Warning: coin logo not loaded (${err.message}) — keycard will be generated without it`);
78
+ resolve(undefined);
79
+ });
80
+ });
81
+ }
82
+ /**
83
+ * Build a {@link UpgradeEncryptionPdfGenerator} that regenerates the keycard PDF with the
84
+ * canonical `generateQrData` + `drawKeycard` flow. Pass the returned function into
85
+ * `Wallet.upgradeEncryption({ generatePdf })`.
86
+ */
87
+ function createKeycardPdfGenerator(options = {}) {
88
+ const { imageBaseUrl } = options;
89
+ return async ({ coinName, userKeychain, backupKeychain, bitgoKeychain, passphrase, passcodeEncryptionCode, walletLabel, }) => {
90
+ const staticsCoin = statics_1.coins.get(coinName);
91
+ const keyCardImage = imageBaseUrl
92
+ ? await loadKeycardImage(`${imageBaseUrl}/web/assets/keycards/${staticsCoin.family.toLowerCase()}.png`)
93
+ : undefined;
94
+ const qrData = await (0, generateQrData_1.generateQrData)({
95
+ coin: staticsCoin,
96
+ userKeychain,
97
+ backupKeychain,
98
+ bitgoKeychain,
99
+ passphrase,
100
+ passcodeEncryptionCode,
101
+ encryptionVersion: 2,
102
+ });
103
+ const questions = (0, faq_1.generateFaq)(staticsCoin.fullName);
104
+ return (0, drawKeycard_1.drawKeycard)({ qrData, questions, walletLabel, keyCardImage });
105
+ };
106
+ }
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBncmFkZVdhbGxldEVuY3J5cHRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXBncmFkZVdhbGxldEVuY3J5cHRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7O0dBT0c7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBY0gsNENBNEJDO0FBWUQsOERBMkJDO0FBL0VELDZDQUErQjtBQUMvQixpREFBc0Q7QUFFdEQscURBQWtEO0FBQ2xELCtCQUFvQztBQUNwQywrQ0FBNEM7QUFFNUM7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxnQkFBZ0IsQ0FDcEMsR0FBVyxFQUNYLFVBQTRCLEtBQUssQ0FBQyxHQUFHO0lBRXJDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUM3QixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxHQUFHLENBQUMsVUFBVSwwQ0FBMEMsQ0FBQyxDQUFDO2dCQUM5RyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ25CLE9BQU87WUFDVCxDQUFDO1lBQ0QsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO1lBQzVCLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDOUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUNqQixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLFdBQVcsQ0FBQztnQkFDL0QsTUFBTSxPQUFPLEdBQUcsUUFBUSxXQUFXLFdBQVcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDekYsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBaUMsQ0FBQztnQkFDcEYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7WUFDSCxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxHQUFHLENBQUMsT0FBTywwQ0FBMEMsQ0FBQyxDQUFDO2dCQUN0RyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDckIsT0FBTyxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsR0FBRyxDQUFDLE9BQU8sMENBQTBDLENBQUMsQ0FBQztZQUN0RyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFPRDs7OztHQUlHO0FBQ0gsU0FBZ0IseUJBQXlCLENBQUMsVUFBc0MsRUFBRTtJQUNoRixNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ2pDLE9BQU8sS0FBSyxFQUFFLEVBQ1osUUFBUSxFQUNSLFlBQVksRUFDWixjQUFjLEVBQ2QsYUFBYSxFQUNiLFVBQVUsRUFDVixzQkFBc0IsRUFDdEIsV0FBVyxHQUNaLEVBQUUsRUFBRTtRQUNILE1BQU0sV0FBVyxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFhLENBQUM7UUFDcEQsTUFBTSxZQUFZLEdBQUcsWUFBWTtZQUMvQixDQUFDLENBQUMsTUFBTSxnQkFBZ0IsQ0FBQyxHQUFHLFlBQVksd0JBQXdCLFdBQVcsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQztZQUN2RyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLCtCQUFjLEVBQUM7WUFDbEMsSUFBSSxFQUFFLFdBQVc7WUFDakIsWUFBWTtZQUNaLGNBQWM7WUFDZCxhQUFhO1lBQ2IsVUFBVTtZQUNWLHNCQUFzQjtZQUN0QixpQkFBaUIsRUFBRSxDQUFDO1NBQ3JCLENBQUMsQ0FBQztRQUNILE1BQU0sU0FBUyxHQUFHLElBQUEsaUJBQVcsRUFBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEQsT0FBTyxJQUFBLHlCQUFXLEVBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBERi1nZW5lcmF0aW9uIGhlbHBlcnMgZm9yIHRoZSB3YWxsZXQgZW5jcnlwdGlvbiB1cGdyYWRlIGZsb3cuXG4gKlxuICogT3JjaGVzdHJhdGlvbiAodW5sb2NraW5nIHRoZSBzZXNzaW9uLCByZS1lbmNyeXB0aW5nIGtleWNoYWlucywgUFVULWluZyB0byB0aGUgc2VydmVyKSBsaXZlcyBvblxuICogYFdhbGxldC51cGdyYWRlRW5jcnlwdGlvbmAgaW4gYEBiaXRnby1iZXRhL3Nkay1jb3JlYC4gVGhpcyBtb2R1bGUgY29udGFpbnMgb25seSB0aGUgcGllY2VzIHRoYXRcbiAqIGRlcGVuZCBvbiBganNwZGZgL2BxcmNvZGVgIOKAlCBhIGZhY3RvcnkgdGhhdCByZXR1cm5zIGEgYFVwZ3JhZGVFbmNyeXB0aW9uUGRmR2VuZXJhdG9yYCB0aGVcbiAqIGNhbGxlciBjYW4gcGFzcyBpbnRvIHRoYXQgbWV0aG9kLCBwbHVzIGEgTm9kZS1zaWRlIGNvaW4tbG9nbyBsb2FkZXIuXG4gKi9cblxuaW1wb3J0ICogYXMgaHR0cHMgZnJvbSAnaHR0cHMnO1xuaW1wb3J0IHsgQmFzZUNvaW4sIGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBVcGdyYWRlRW5jcnlwdGlvblBkZkdlbmVyYXRvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGdlbmVyYXRlUXJEYXRhIH0gZnJvbSAnLi9nZW5lcmF0ZVFyRGF0YSc7XG5pbXBvcnQgeyBnZW5lcmF0ZUZhcSB9IGZyb20gJy4vZmFxJztcbmltcG9ydCB7IGRyYXdLZXljYXJkIH0gZnJvbSAnLi9kcmF3S2V5Y2FyZCc7XG5cbi8qKlxuICogRmV0Y2ggYSBjb2luIGxvZ28gaW1hZ2UgYW5kIHJldHVybiBhbiBIVE1MSW1hZ2VFbGVtZW50LWNvbXBhdGlibGUgb2JqZWN0LlxuICoganNQREYgcmVhZHMgYC5zcmNgIGluIE5vZGUuanM7IGNvbXB1dGVLZXlDYXJkSW1hZ2VEaW1lbnNpb25zIHJlYWRzIGAud2lkdGhgL2AuaGVpZ2h0YC5cbiAqIFJldHVybnMgdW5kZWZpbmVkIG9uIGFueSBmYWlsdXJlIOKAlCB0aGUga2V5Y2FyZCBpcyBnZW5lcmF0ZWQgd2l0aG91dCB0aGUgbG9nbyBpbiB0aGF0IGNhc2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkS2V5Y2FyZEltYWdlKFxuICB1cmw6IHN0cmluZyxcbiAgaHR0cEdldDogdHlwZW9mIGh0dHBzLmdldCA9IGh0dHBzLmdldFxuKTogUHJvbWlzZTxIVE1MSW1hZ2VFbGVtZW50IHwgdW5kZWZpbmVkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGh0dHBHZXQodXJsLCAocmVzKSA9PiB7XG4gICAgICBpZiAocmVzLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYFdhcm5pbmc6IGNvaW4gbG9nbyBub3QgbG9hZGVkIChIVFRQICR7cmVzLnN0YXR1c0NvZGV9KSDigJQga2V5Y2FyZCB3aWxsIGJlIGdlbmVyYXRlZCB3aXRob3V0IGl0YCk7XG4gICAgICAgIHJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICAgICAgcmVzLm9uKCdkYXRhJywgKGNodW5rKSA9PiBjaHVua3MucHVzaChjaHVuaykpO1xuICAgICAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID8/ICdpbWFnZS9wbmcnO1xuICAgICAgICBjb25zdCBkYXRhVXJsID0gYGRhdGE6JHtjb250ZW50VHlwZX07YmFzZTY0LCR7QnVmZmVyLmNvbmNhdChjaHVua3MpLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgICAgICBjb25zdCBpbWcgPSB7IHNyYzogZGF0YVVybCwgd2lkdGg6IDMwMywgaGVpZ2h0OiA0MCB9IGFzIHVua25vd24gYXMgSFRNTEltYWdlRWxlbWVudDtcbiAgICAgICAgcmVzb2x2ZShpbWcpO1xuICAgICAgfSk7XG4gICAgICByZXMub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLndhcm4oYFdhcm5pbmc6IGNvaW4gbG9nbyBub3QgbG9hZGVkICgke2Vyci5tZXNzYWdlfSkg4oCUIGtleWNhcmQgd2lsbCBiZSBnZW5lcmF0ZWQgd2l0aG91dCBpdGApO1xuICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICB9KTtcbiAgICB9KS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICBjb25zb2xlLndhcm4oYFdhcm5pbmc6IGNvaW4gbG9nbyBub3QgbG9hZGVkICgke2Vyci5tZXNzYWdlfSkg4oCUIGtleWNhcmQgd2lsbCBiZSBnZW5lcmF0ZWQgd2l0aG91dCBpdGApO1xuICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBLZXljYXJkUGRmR2VuZXJhdG9yT3B0aW9ucyB7XG4gIC8qKiBCYXNlIFVSTCBmb3IgbG9hZGluZyB0aGUgY29pbiBsb2dvIChlLmcuIEVudmlyb25tZW50c1tlbnZdLnVyaSkuIE9taXQgdG8gc2tpcCB0aGUgbG9nby4gKi9cbiAgaW1hZ2VCYXNlVXJsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEge0BsaW5rIFVwZ3JhZGVFbmNyeXB0aW9uUGRmR2VuZXJhdG9yfSB0aGF0IHJlZ2VuZXJhdGVzIHRoZSBrZXljYXJkIFBERiB3aXRoIHRoZVxuICogY2Fub25pY2FsIGBnZW5lcmF0ZVFyRGF0YWAgKyBgZHJhd0tleWNhcmRgIGZsb3cuIFBhc3MgdGhlIHJldHVybmVkIGZ1bmN0aW9uIGludG9cbiAqIGBXYWxsZXQudXBncmFkZUVuY3J5cHRpb24oeyBnZW5lcmF0ZVBkZiB9KWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVLZXljYXJkUGRmR2VuZXJhdG9yKG9wdGlvbnM6IEtleWNhcmRQZGZHZW5lcmF0b3JPcHRpb25zID0ge30pOiBVcGdyYWRlRW5jcnlwdGlvblBkZkdlbmVyYXRvciB7XG4gIGNvbnN0IHsgaW1hZ2VCYXNlVXJsIH0gPSBvcHRpb25zO1xuICByZXR1cm4gYXN5bmMgKHtcbiAgICBjb2luTmFtZSxcbiAgICB1c2VyS2V5Y2hhaW4sXG4gICAgYmFja3VwS2V5Y2hhaW4sXG4gICAgYml0Z29LZXljaGFpbixcbiAgICBwYXNzcGhyYXNlLFxuICAgIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgd2FsbGV0TGFiZWwsXG4gIH0pID0+IHtcbiAgICBjb25zdCBzdGF0aWNzQ29pbiA9IGNvaW5zLmdldChjb2luTmFtZSkgYXMgQmFzZUNvaW47XG4gICAgY29uc3Qga2V5Q2FyZEltYWdlID0gaW1hZ2VCYXNlVXJsXG4gICAgICA/IGF3YWl0IGxvYWRLZXljYXJkSW1hZ2UoYCR7aW1hZ2VCYXNlVXJsfS93ZWIvYXNzZXRzL2tleWNhcmRzLyR7c3RhdGljc0NvaW4uZmFtaWx5LnRvTG93ZXJDYXNlKCl9LnBuZ2ApXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBxckRhdGEgPSBhd2FpdCBnZW5lcmF0ZVFyRGF0YSh7XG4gICAgICBjb2luOiBzdGF0aWNzQ29pbixcbiAgICAgIHVzZXJLZXljaGFpbixcbiAgICAgIGJhY2t1cEtleWNoYWluLFxuICAgICAgYml0Z29LZXljaGFpbixcbiAgICAgIHBhc3NwaHJhc2UsXG4gICAgICBwYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgICAgZW5jcnlwdGlvblZlcnNpb246IDIsXG4gICAgfSk7XG4gICAgY29uc3QgcXVlc3Rpb25zID0gZ2VuZXJhdGVGYXEoc3RhdGljc0NvaW4uZnVsbE5hbWUpO1xuICAgIHJldHVybiBkcmF3S2V5Y2FyZCh7IHFyRGF0YSwgcXVlc3Rpb25zLCB3YWxsZXRMYWJlbCwga2V5Q2FyZEltYWdlIH0pO1xuICB9O1xufVxuIl19
package/dist/src/utils.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.splitKeys = void 0;
3
+ exports.splitKeys = splitKeys;
4
4
  function splitKeys(key, limit) {
5
5
  if (key.length <= limit) {
6
6
  return [key];
@@ -13,5 +13,4 @@ function splitKeys(key, limit) {
13
13
  }
14
14
  return keys;
15
15
  }
16
- exports.splitKeys = splitKeys;
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsU0FBZ0IsU0FBUyxDQUFDLEdBQVcsRUFBRSxLQUFhO0lBQ2xELElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxLQUFLLEVBQUU7UUFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2Q7SUFFRCxNQUFNLElBQUksR0FBYSxFQUFFLENBQUM7SUFFMUIsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUU7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3ZEO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBZEQsOEJBY0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gc3BsaXRLZXlzKGtleTogc3RyaW5nLCBsaW1pdDogbnVtYmVyKTogc3RyaW5nW10ge1xuICBpZiAoa2V5Lmxlbmd0aCA8PSBsaW1pdCkge1xuICAgIHJldHVybiBba2V5XTtcbiAgfVxuXG4gIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XG5cbiAgbGV0IHJpZ2h0SW5kZXggPSBsaW1pdDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXkubGVuZ3RoOyBpICs9IGxpbWl0KSB7XG4gICAga2V5cy5wdXNoKGtleS5zdWJzdHJpbmcoaSwgcmlnaHRJbmRleCkpO1xuICAgIHJpZ2h0SW5kZXggPSBNYXRoLm1pbihyaWdodEluZGV4ICsgbGltaXQsIGtleS5sZW5ndGgpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG4iXX0=
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw4QkFjQztBQWRELFNBQWdCLFNBQVMsQ0FBQyxHQUFXLEVBQUUsS0FBYTtJQUNsRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7UUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFhLEVBQUUsQ0FBQztJQUUxQixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN4QyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHNwbGl0S2V5cyhrZXk6IHN0cmluZywgbGltaXQ6IG51bWJlcik6IHN0cmluZ1tdIHtcbiAgaWYgKGtleS5sZW5ndGggPD0gbGltaXQpIHtcbiAgICByZXR1cm4gW2tleV07XG4gIH1cblxuICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGxldCByaWdodEluZGV4ID0gbGltaXQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSArPSBsaW1pdCkge1xuICAgIGtleXMucHVzaChrZXkuc3Vic3RyaW5nKGksIHJpZ2h0SW5kZXgpKTtcbiAgICByaWdodEluZGV4ID0gTWF0aC5taW4ocmlnaHRJbmRleCArIGxpbWl0LCBrZXkubGVuZ3RoKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuIl19