@bitgo-beta/key-card 0.0.1-beta.20 → 0.0.1-beta.2000

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.
Files changed (39) hide show
  1. package/dist/src/drawKeycard.d.ts +5 -0
  2. package/dist/src/drawKeycard.d.ts.map +1 -0
  3. package/dist/src/drawKeycard.js +285 -0
  4. package/dist/src/extractKeycardFromPDF.d.ts +16 -0
  5. package/dist/src/extractKeycardFromPDF.d.ts.map +1 -0
  6. package/dist/src/extractKeycardFromPDF.js +77 -0
  7. package/dist/src/faq.d.ts +4 -0
  8. package/dist/src/faq.d.ts.map +1 -0
  9. package/dist/src/faq.js +89 -0
  10. package/dist/src/generateParamsForKeyCreation.d.ts +3 -0
  11. package/dist/src/generateParamsForKeyCreation.d.ts.map +1 -0
  12. package/dist/src/generateParamsForKeyCreation.js +72 -0
  13. package/dist/src/generateQrData.d.ts +4 -0
  14. package/dist/src/generateQrData.d.ts.map +1 -0
  15. package/dist/src/generateQrData.js +186 -0
  16. package/dist/src/index.d.ts +11 -0
  17. package/dist/src/index.d.ts.map +1 -0
  18. package/dist/src/index.js +62 -0
  19. package/dist/src/parseKeycard.d.ts +23 -0
  20. package/dist/src/parseKeycard.d.ts.map +1 -0
  21. package/dist/src/parseKeycard.js +159 -0
  22. package/dist/src/types.d.ts +66 -0
  23. package/dist/src/types.d.ts.map +1 -0
  24. package/dist/src/types.js +3 -0
  25. package/dist/src/utils.d.ts +2 -0
  26. package/dist/src/utils.d.ts.map +1 -0
  27. package/dist/src/utils.js +16 -0
  28. package/dist/tsconfig.tsbuildinfo +1 -0
  29. package/package.json +10 -6
  30. package/.mocharc.js +0 -9
  31. package/src/drawKeycard.ts +0 -240
  32. package/src/faq.ts +0 -82
  33. package/src/generateQrData.ts +0 -167
  34. package/src/index.ts +0 -22
  35. package/src/utils.ts +0 -15
  36. package/test/unit/faq.ts +0 -14
  37. package/test/unit/generateQrData.ts +0 -213
  38. package/test/unit/utils.ts +0 -30
  39. package/tsconfig.json +0 -20
@@ -0,0 +1,66 @@
1
+ import { EncryptionVersion, Keychain } from '@bitgo-beta/sdk-core';
2
+ import { BaseCoin, KeyCurve } from '@bitgo-beta/statics';
3
+ export interface GenerateQrDataBaseParams {
4
+ activationCode?: string;
5
+ keyCardImage?: HTMLImageElement;
6
+ walletLabel: string;
7
+ }
8
+ export interface GenerateQrDataForKeychainParams {
9
+ bitgoKeychain: Keychain;
10
+ curve: KeyCurve;
11
+ }
12
+ export interface GenerateQrDataCoinParams {
13
+ coin: Readonly<BaseCoin>;
14
+ passcodeEncryptionCode?: string;
15
+ passphrase?: string;
16
+ encryptionVersion?: EncryptionVersion;
17
+ }
18
+ export interface GenerateQrDataParams extends GenerateQrDataCoinParams {
19
+ backupKeychain: Keychain;
20
+ backupKeyProvider?: string;
21
+ backupMasterKey?: string;
22
+ /**
23
+ * @description The key used to derive the backup key using {@link backupMasterKey} as the seed.
24
+ */
25
+ backupMasterPublicKey?: string;
26
+ bitgoKeychain: Keychain;
27
+ userKeychain: Keychain;
28
+ userMasterKey?: string;
29
+ /**
30
+ * @description The key used to derive the user key using {@link userMasterKey} as the seed.
31
+ */
32
+ userMasterPublicKey?: string;
33
+ }
34
+ export interface GenerateLightningQrDataParams extends GenerateQrDataCoinParams {
35
+ userAuthKeychain: Keychain;
36
+ }
37
+ export type GenerateKeycardParams = GenerateQrDataBaseParams & (GenerateQrDataForKeychainParams | GenerateQrDataParams | GenerateLightningQrDataParams);
38
+ export interface IDrawKeyCard {
39
+ activationCode?: string;
40
+ keyCardImage?: HTMLImageElement;
41
+ qrData: QrData;
42
+ questions: FAQ[];
43
+ walletLabel?: string;
44
+ curve?: KeyCurve;
45
+ }
46
+ export interface FAQ {
47
+ question: string;
48
+ answer: string[];
49
+ }
50
+ export interface QrDataEntry {
51
+ data: string;
52
+ description: string;
53
+ title: string;
54
+ publicMasterKey?: string;
55
+ }
56
+ export type MasterPublicKeyQrDataEntry = Omit<QrDataEntry, 'publicMasterKey'>;
57
+ export interface QrData {
58
+ backup?: QrDataEntry;
59
+ backupMasterPublicKey?: MasterPublicKeyQrDataEntry;
60
+ bitgo?: QrDataEntry;
61
+ passcode?: QrDataEntry;
62
+ curve?: KeyCurve;
63
+ user: QrDataEntry;
64
+ userMasterPublicKey?: MasterPublicKeyQrDataEntry;
65
+ }
66
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,WAAW,wBAAwB;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,+BAA+B;IAE9C,aAAa,EAAE,QAAQ,CAAC;IAExB,KAAK,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IAEvC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAIzB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAIhC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,MAAM,WAAW,oBAAqB,SAAQ,wBAAwB;IAEpE,cAAc,EAAE,QAAQ,CAAC;IAEzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,aAAa,EAAE,QAAQ,CAAC;IAExB,YAAY,EAAE,QAAQ,CAAC;IAEvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,6BAA8B,SAAQ,wBAAwB;IAE7E,gBAAgB,EAAE,QAAQ,CAAC;CAC5B;AAED,MAAM,MAAM,qBAAqB,GAAG,wBAAwB,GAC1D,CAAC,+BAA+B,GAAG,oBAAoB,GAAG,6BAA6B,CAAC,CAAC;AAE3F,MAAM,WAAW,YAAY;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,GAAG,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,QAAQ,CAAC;CAClB;AAED,MAAM,WAAW,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC;IAEjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;AAE9E,MAAM,WAAW,MAAM;IACrB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,qBAAqB,CAAC,EAAE,0BAA0B,CAAC;IACnD,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,IAAI,EAAE,WAAW,CAAC;IAClB,mBAAmB,CAAC,EAAE,0BAA0B,CAAC;CAClD"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVuY3J5cHRpb25WZXJzaW9uLCBLZXljaGFpbiB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luLCBLZXlDdXJ2ZSB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlUXJEYXRhQmFzZVBhcmFtcyB7XG4gIGFjdGl2YXRpb25Db2RlPzogc3RyaW5nO1xuICBrZXlDYXJkSW1hZ2U/OiBIVE1MSW1hZ2VFbGVtZW50O1xuICB3YWxsZXRMYWJlbDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlUXJEYXRhRm9yS2V5Y2hhaW5QYXJhbXMge1xuICAvLyBUaGUgQml0R28ga2V5Y2hhaW4gYXMgaXQgaXMgcmV0dXJuZWQgZnJvbSB0aGUgQml0R28gQVBJIHVwb24gY3JlYXRpb25cbiAgYml0Z29LZXljaGFpbjogS2V5Y2hhaW47XG4gIC8vIFRoZSBjdXJ2ZSB1c2VkIGZvciB0aGUga2V5XG4gIGN1cnZlOiBLZXlDdXJ2ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZVFyRGF0YUNvaW5QYXJhbXMge1xuICAvLyBUaGUgY29pbiBvZiB0aGUgd2FsbGV0IHRoYXQgd2FzLyBpcyBhYm91dCB0byBiZSBjcmVhdGVkXG4gIGNvaW46IFJlYWRvbmx5PEJhc2VDb2luPjtcbiAgLy8gQSBjb2RlIHRoYXQgY2FuIGJlIHVzZWQgdG8gZW5jcnlwdCB0aGUgd2FsbGV0IHBhc3N3b3JkIHRvLlxuICAvLyBJZiBib3RoIHRoZSBwYXNzcGhyYXNlIGFuZCBwYXNzY29kZUVuY3J5cHRpb25Db2RlIGFyZSBwYXNzZWQsIHRoZW4gdGhpcyBjb2RlIGVuY3J5cHRzIHRoZSBwYXNzcGhyYXNlIHdpdGggdGhlXG4gIC8vIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGUgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbnRvIEJveCBELiBBbGxvd3MgcmVjb3ZlcmllcyBvZiB0aGUgd2FsbGV0IHBhc3N3b3JkLlxuICBwYXNzY29kZUVuY3J5cHRpb25Db2RlPzogc3RyaW5nO1xuICAvLyBUaGUgd2FsbGV0IHBhc3N3b3JkXG4gIC8vIElmIGJvdGggdGhlIHBhc3NwaHJhc2UgYW5kIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGUgYXJlIHBhc3NlZCwgdGhlbiB0aGlzIGNvZGUgZW5jcnlwdHMgdGhlIHBhc3NwaHJhc2Ugd2l0aCB0aGVcbiAgLy8gcGFzc2NvZGVFbmNyeXB0aW9uQ29kZSBhbmQgcHV0cyB0aGUgcmVzdWx0IGludG8gQm94IEQuIEFsbG93cyByZWNvdmVyaWVzIG9mIHRoZSB3YWxsZXQgcGFzc3dvcmQuXG4gIHBhc3NwaHJhc2U/OiBzdHJpbmc7XG4gIGVuY3J5cHRpb25WZXJzaW9uPzogRW5jcnlwdGlvblZlcnNpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVRckRhdGFQYXJhbXMgZXh0ZW5kcyBHZW5lcmF0ZVFyRGF0YUNvaW5QYXJhbXMge1xuICAvLyBUaGUgYmFja3VwIGtleWNoYWluIGFzIGl0IGlzIHJldHVybmVkIGZyb20gdGhlIEJpdEdvIEFQSSB1cG9uIGNyZWF0aW9uXG4gIGJhY2t1cEtleWNoYWluOiBLZXljaGFpbjtcbiAgLy8gVGhlIG5hbWUgb2YgdGhlIDNyZCBwYXJ0eSBwcm92aWRlciBvZiB0aGUgYmFja3VwIGtleSBpZiBuZWl0aGVyIHRoZSB1c2VyIG5vciBCaXRHbyBzdG9yZXMgaXRcbiAgYmFja3VwS2V5UHJvdmlkZXI/OiBzdHJpbmc7XG4gIC8vIFRoZSBrZXkgaWQgb2YgdGhlIGJhY2t1cCBrZXksIG9ubHkgdXNlZCBmb3IgY29sZCBrZXlzXG4gIGJhY2t1cE1hc3RlcktleT86IHN0cmluZztcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUga2V5IHVzZWQgdG8gZGVyaXZlIHRoZSBiYWNrdXAga2V5IHVzaW5nIHtAbGluayBiYWNrdXBNYXN0ZXJLZXl9IGFzIHRoZSBzZWVkLlxuICAgKi9cbiAgYmFja3VwTWFzdGVyUHVibGljS2V5Pzogc3RyaW5nO1xuICAvLyBUaGUgQml0R28ga2V5Y2hhaW4gYXMgaXQgaXMgcmV0dXJuZWQgZnJvbSB0aGUgQml0R28gQVBJIHVwb24gY3JlYXRpb25cbiAgYml0Z29LZXljaGFpbjogS2V5Y2hhaW47XG4gIC8vIFRoZSB1c2VyIGtleWNoYWluIGFzIGl0IGlzIHJldHVybmVkIGZyb20gdGhlIEJpdEdvIEFQSSB1cG9uIGNyZWF0aW9uXG4gIHVzZXJLZXljaGFpbjogS2V5Y2hhaW47XG4gIC8vIFRoZSBrZXkgaWQgb2YgdGhlIHVzZXIga2V5LCBvbmx5IHVzZWQgZm9yIGNvbGQga2V5c1xuICB1c2VyTWFzdGVyS2V5Pzogc3RyaW5nO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBrZXkgdXNlZCB0byBkZXJpdmUgdGhlIHVzZXIga2V5IHVzaW5nIHtAbGluayB1c2VyTWFzdGVyS2V5fSBhcyB0aGUgc2VlZC5cbiAgICovXG4gIHVzZXJNYXN0ZXJQdWJsaWNLZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVMaWdodG5pbmdRckRhdGFQYXJhbXMgZXh0ZW5kcyBHZW5lcmF0ZVFyRGF0YUNvaW5QYXJhbXMge1xuICAvLyBUaGUgdXNlciBhdXRoZW50aWNhdGlvbiBrZXljaGFpbiwgdXNlZCB0byBzaWduIHBheW1lbnQgcmVxdWVzdHMgYW5kIHdhbGxldCBjb25maWd1cmF0aW9uIHVwZGF0ZXNcbiAgdXNlckF1dGhLZXljaGFpbjogS2V5Y2hhaW47XG59XG5cbmV4cG9ydCB0eXBlIEdlbmVyYXRlS2V5Y2FyZFBhcmFtcyA9IEdlbmVyYXRlUXJEYXRhQmFzZVBhcmFtcyAmXG4gIChHZW5lcmF0ZVFyRGF0YUZvcktleWNoYWluUGFyYW1zIHwgR2VuZXJhdGVRckRhdGFQYXJhbXMgfCBHZW5lcmF0ZUxpZ2h0bmluZ1FyRGF0YVBhcmFtcyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURyYXdLZXlDYXJkIHtcbiAgYWN0aXZhdGlvbkNvZGU/OiBzdHJpbmc7XG4gIGtleUNhcmRJbWFnZT86IEhUTUxJbWFnZUVsZW1lbnQ7XG4gIHFyRGF0YTogUXJEYXRhO1xuICBxdWVzdGlvbnM6IEZBUVtdO1xuICB3YWxsZXRMYWJlbD86IHN0cmluZztcbiAgY3VydmU/OiBLZXlDdXJ2ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGQVEge1xuICBxdWVzdGlvbjogc3RyaW5nO1xuICAvLyB0aGUgYW5zd2VyIHRvIHRoZSBxdWVzdGlvbiwgYWxyZWFkeSBzcGxpdCBpbnRvIGluZGl2aWR1YWwgbGluZXMgb2YgdGV4dFxuICBhbnN3ZXI6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFFyRGF0YUVudHJ5IHtcbiAgZGF0YTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBwdWJsaWNNYXN0ZXJLZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIE1hc3RlclB1YmxpY0tleVFyRGF0YUVudHJ5ID0gT21pdDxRckRhdGFFbnRyeSwgJ3B1YmxpY01hc3RlcktleSc+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFFyRGF0YSB7XG4gIGJhY2t1cD86IFFyRGF0YUVudHJ5O1xuICBiYWNrdXBNYXN0ZXJQdWJsaWNLZXk/OiBNYXN0ZXJQdWJsaWNLZXlRckRhdGFFbnRyeTtcbiAgYml0Z28/OiBRckRhdGFFbnRyeTtcbiAgcGFzc2NvZGU/OiBRckRhdGFFbnRyeTtcbiAgY3VydmU/OiBLZXlDdXJ2ZTtcbiAgdXNlcjogUXJEYXRhRW50cnk7XG4gIHVzZXJNYXN0ZXJQdWJsaWNLZXk/OiBNYXN0ZXJQdWJsaWNLZXlRckRhdGFFbnRyeTtcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export declare function splitKeys(key: string, limit: number): string[];
2
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAc9D"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.splitKeys = splitKeys;
4
+ function splitKeys(key, limit) {
5
+ if (key.length <= limit) {
6
+ return [key];
7
+ }
8
+ const keys = [];
9
+ let rightIndex = limit;
10
+ for (let i = 0; i < key.length; i += limit) {
11
+ keys.push(key.substring(i, rightIndex));
12
+ rightIndex = Math.min(rightIndex + limit, key.length);
13
+ }
14
+ return keys;
15
+ }
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw4QkFjQztBQWRELFNBQWdCLFNBQVMsQ0FBQyxHQUFXLEVBQUUsS0FBYTtJQUNsRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7UUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFhLEVBQUUsQ0FBQztJQUUxQixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN4QyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHNwbGl0S2V5cyhrZXk6IHN0cmluZywgbGltaXQ6IG51bWJlcik6IHN0cmluZ1tdIHtcbiAgaWYgKGtleS5sZW5ndGggPD0gbGltaXQpIHtcbiAgICByZXR1cm4gW2tleV07XG4gIH1cblxuICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGxldCByaWdodEluZGV4ID0gbGltaXQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSArPSBsaW1pdCkge1xuICAgIGtleXMucHVzaChrZXkuc3Vic3RyaW5nKGksIHJpZ2h0SW5kZXgpKTtcbiAgICByaWdodEluZGV4ID0gTWF0aC5taW4ocmlnaHRJbmRleCArIGxpbWl0LCBrZXkubGVuZ3RoKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuIl19