@bitgo-beta/sdk-coin-sol 7.6.4-beta.755 → 7.6.4-beta.756

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 (55) hide show
  1. package/dist/cjs/src/lib/confidentialTransferBuilder.d.ts +9 -1
  2. package/dist/cjs/src/lib/confidentialTransferBuilder.d.ts.map +1 -1
  3. package/dist/cjs/src/lib/confidentialTransferBuilder.js +40 -6
  4. package/dist/cjs/src/lib/constants.d.ts +1 -0
  5. package/dist/cjs/src/lib/constants.d.ts.map +1 -1
  6. package/dist/cjs/src/lib/constants.js +2 -1
  7. package/dist/cjs/src/lib/iface.d.ts +13 -1
  8. package/dist/cjs/src/lib/iface.d.ts.map +1 -1
  9. package/dist/cjs/src/lib/iface.js +1 -1
  10. package/dist/cjs/src/lib/instructionParamsFactory.d.ts.map +1 -1
  11. package/dist/cjs/src/lib/instructionParamsFactory.js +7 -3
  12. package/dist/cjs/src/lib/solInstructionFactory.d.ts.map +1 -1
  13. package/dist/cjs/src/lib/solInstructionFactory.js +28 -3
  14. package/dist/cjs/src/lib/transaction.d.ts +12 -0
  15. package/dist/cjs/src/lib/transaction.d.ts.map +1 -1
  16. package/dist/cjs/src/lib/transaction.js +100 -43
  17. package/dist/cjs/src/lib/utils.d.ts +11 -0
  18. package/dist/cjs/src/lib/utils.d.ts.map +1 -1
  19. package/dist/cjs/src/lib/utils.js +20 -4
  20. package/dist/cjs/src/sol.d.ts.map +1 -1
  21. package/dist/cjs/src/sol.js +10 -5
  22. package/dist/cjs/test/unit/ctEnablementVerify.d.ts +2 -0
  23. package/dist/cjs/test/unit/ctEnablementVerify.d.ts.map +1 -0
  24. package/dist/cjs/test/unit/ctEnablementVerify.js +143 -0
  25. package/dist/cjs/test/unit/sol.js +2 -2
  26. package/dist/cjs/test/unit/transactionBuilder/confidentialEnablementV1.d.ts +2 -0
  27. package/dist/cjs/test/unit/transactionBuilder/confidentialEnablementV1.d.ts.map +1 -0
  28. package/dist/cjs/test/unit/transactionBuilder/confidentialEnablementV1.js +124 -0
  29. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferBuilder.js +22 -9
  30. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1.js +2 -1
  31. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1Ops.js +2 -1
  32. package/dist/cjs/test/unit/utils.js +36 -1
  33. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  34. package/dist/esm/lib/confidentialTransferBuilder.d.ts +9 -1
  35. package/dist/esm/lib/confidentialTransferBuilder.d.ts.map +1 -1
  36. package/dist/esm/lib/confidentialTransferBuilder.js +40 -6
  37. package/dist/esm/lib/constants.d.ts +1 -0
  38. package/dist/esm/lib/constants.d.ts.map +1 -1
  39. package/dist/esm/lib/constants.js +2 -1
  40. package/dist/esm/lib/iface.d.ts +13 -1
  41. package/dist/esm/lib/iface.d.ts.map +1 -1
  42. package/dist/esm/lib/iface.js +1 -1
  43. package/dist/esm/lib/instructionParamsFactory.d.ts.map +1 -1
  44. package/dist/esm/lib/instructionParamsFactory.js +7 -3
  45. package/dist/esm/lib/solInstructionFactory.d.ts.map +1 -1
  46. package/dist/esm/lib/solInstructionFactory.js +29 -4
  47. package/dist/esm/lib/transaction.d.ts +12 -0
  48. package/dist/esm/lib/transaction.d.ts.map +1 -1
  49. package/dist/esm/lib/transaction.js +101 -44
  50. package/dist/esm/lib/utils.d.ts +11 -0
  51. package/dist/esm/lib/utils.d.ts.map +1 -1
  52. package/dist/esm/lib/utils.js +19 -4
  53. package/dist/esm/sol.d.ts.map +1 -1
  54. package/dist/esm/sol.js +10 -5
  55. package/package.json +7 -7
@@ -0,0 +1,2 @@
1
+ import 'should';
2
+ //# sourceMappingURL=ctEnablementVerify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ctEnablementVerify.d.ts","sourceRoot":"","sources":["../../../../test/unit/ctEnablementVerify.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ require("should");
37
+ const sdk_api_1 = require("@bitgo-beta/sdk-api");
38
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
39
+ const sdk_test_1 = require("@bitgo-beta/sdk-test");
40
+ const src_1 = require("../../src");
41
+ const utils_1 = require("../../src/lib/utils");
42
+ const testData = __importStar(require("../fixtures/sol"));
43
+ const resources = __importStar(require("../resources/sol"));
44
+ const getBuilderFactory_1 = require("./getBuilderFactory");
45
+ describe('SOL: CT enablement token verification', function () {
46
+ let bitgo;
47
+ let basecoin;
48
+ const factory = (0, getBuilderFactory_1.getBuilderFactory)('sol');
49
+ const account = new src_1.KeyPair(resources.associatedTokenAccounts.accounts[0]).getKeys();
50
+ const recentBlockHash = 'GHtXQBsoZHVnNFa9YevAzFr17DJjgHXk3ycTKD5xD3Zi';
51
+ const mintAddress = resources.associatedTokenAccountsForSol2022.mintId;
52
+ const authorityAddress = account.pub;
53
+ const zeroBytes36 = '00'.repeat(36);
54
+ const proofDataHex = '00'.repeat(320);
55
+ const v1Config = {
56
+ computeUnitLimit: 200000,
57
+ heapSize: 32768,
58
+ loadedAccountsDataSizeLimit: 65536,
59
+ priorityFee: 5000,
60
+ };
61
+ before(function () {
62
+ bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'mock' });
63
+ bitgo.safeRegister('tsol', src_1.Tsol.createInstance);
64
+ bitgo.initializeTestVars();
65
+ basecoin = bitgo.coin('tsol');
66
+ });
67
+ async function buildCtEnablementTxBase64() {
68
+ // ATA derived for the actual owner under the Token-2022 program, matching
69
+ // what verifyTokenAddress recomputes from the intent.
70
+ const tokenAddress = await (0, utils_1.getAssociatedTokenAccountAddress)(mintAddress, account.pub, true);
71
+ const txBuilder = factory.getConfidentialTransferBuilder();
72
+ txBuilder.nonce(recentBlockHash);
73
+ txBuilder.sender(account.pub);
74
+ txBuilder.sign({ key: account.prv });
75
+ txBuilder
76
+ .createAta({
77
+ mintAddress,
78
+ ataAddress: tokenAddress,
79
+ ownerAddress: authorityAddress,
80
+ payerAddress: account.pub,
81
+ tokenName: 'tsol:ray',
82
+ programId: 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb',
83
+ })
84
+ .configureAccount({
85
+ tokenAddress,
86
+ mintAddress,
87
+ authorityAddress,
88
+ elgamalPubkey: '11'.repeat(32),
89
+ decryptableZeroBalance: zeroBytes36,
90
+ maximumPendingBalanceCreditCounter: '18446744073709551615',
91
+ proofInstructionOffset: 1,
92
+ })
93
+ .verifyPubkeyValidity({ proofData: proofDataHex });
94
+ txBuilder.version(1).transactionConfig(v1Config);
95
+ const tx = await txBuilder.build();
96
+ return tx.toBroadcastFormat();
97
+ }
98
+ function makeWallet() {
99
+ const { walletData } = testData.enableTokenFixtures;
100
+ const walletDataClone = JSON.parse(JSON.stringify(walletData));
101
+ // root the wallet at our signer so the fee-payer === wallet-root check passes
102
+ walletDataClone.coinSpecific.rootAddress = account.pub;
103
+ return new sdk_core_1.Wallet(bitgo, basecoin, walletDataClone);
104
+ }
105
+ it('accepts a CT enablement (CreateATA + ConfigureAccount + VerifyPubkeyValidity) tx under type enabletoken', async function () {
106
+ const wallet = makeWallet();
107
+ const txBase64 = await buildCtEnablementTxBase64();
108
+ const result = await basecoin.verifyTransaction({
109
+ txParams: {
110
+ type: 'enabletoken',
111
+ enableTokens: [{ name: 'tsol:t22mint', address: authorityAddress }],
112
+ },
113
+ txPrebuild: {
114
+ txBase64,
115
+ txInfo: { feePayer: account.pub, nonce: recentBlockHash },
116
+ coin: 'tsol',
117
+ },
118
+ wallet,
119
+ verification: { verifyTokenEnablement: true },
120
+ });
121
+ result.should.equal(true);
122
+ });
123
+ it('still rejects an enabletoken prebuild whose token name does not match the intent', async function () {
124
+ const wallet = makeWallet();
125
+ const txBase64 = await buildCtEnablementTxBase64();
126
+ await basecoin
127
+ .verifyTransaction({
128
+ txParams: {
129
+ type: 'enabletoken',
130
+ enableTokens: [{ name: 'tsol:someothertoken', address: authorityAddress }],
131
+ },
132
+ txPrebuild: {
133
+ txBase64,
134
+ txInfo: { feePayer: account.pub, nonce: recentBlockHash },
135
+ coin: 'tsol',
136
+ },
137
+ wallet,
138
+ verification: { verifyTokenEnablement: true },
139
+ })
140
+ .should.be.rejectedWith(/Invalid token name/);
141
+ });
142
+ });
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3RFbmFibGVtZW50VmVyaWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2N0RW5hYmxlbWVudFZlcmlmeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtCQUFnQjtBQUVoQixpREFBK0M7QUFDL0MsbURBQThDO0FBQzlDLG1EQUErRDtBQUMvRCxtQ0FBb0Y7QUFDcEYsK0NBQXVFO0FBQ3ZFLDBEQUE0QztBQUM1Qyw0REFBOEM7QUFDOUMsMkRBQXdEO0FBQ3hELFFBQVEsQ0FBQyx1Q0FBdUMsRUFBRTtJQUNoRCxJQUFJLEtBQW1CLENBQUM7SUFDeEIsSUFBSSxRQUFjLENBQUM7SUFFbkIsTUFBTSxPQUFPLEdBQUcsSUFBQSxxQ0FBaUIsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQU8sQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckYsTUFBTSxlQUFlLEdBQUcsOENBQThDLENBQUM7SUFFdkUsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLGlDQUFpQyxDQUFDLE1BQU0sQ0FBQztJQUN2RSxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFDckMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXRDLE1BQU0sUUFBUSxHQUFHO1FBQ2YsZ0JBQWdCLEVBQUUsTUFBTztRQUN6QixRQUFRLEVBQUUsS0FBTTtRQUNoQiwyQkFBMkIsRUFBRSxLQUFNO1FBQ25DLFdBQVcsRUFBRSxJQUFLO0tBQ25CLENBQUM7SUFFRixNQUFNLENBQUM7UUFDTCxL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SyxFQUFFLGVBQWUsRUFBRTtnQkFDekQsSUFBSSxFQUFFLE1BQU07YUFDYjtZQUNELE1BQU07WUFDTixZQUFZLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSxJQUFJLEVBQUU7U0FDSixDQUFDLENBQUM7UUFFN0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsa0ZBQWtGLEVBQUUsS0FBSztRQUMxRixNQUFNLE1BQU0sR0FBRyxVQUFVLEVBQUUsQ0FBQztRQUM1QixNQUFNLFFBQVEsR0FBRyxNQUFNLHlCQUF5QixFQUFFLENBQUM7UUFFbkQsTUFBTSxRQUFRO2FBQ1gsaUJBQWlCLENBQUM7WUFDakIsUUFBUSxFQUFFO2dCQUNSLElBQUksRUFBRSxhQUFhO2dCQUNuQixZQUFZLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQzthQUMzRTtZQUNELFVBQVUsRUFBRTtnQkFDVixRQUFRO2dCQUNSLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUU7Z0JBQ3pELElBQUksRUFBRSxNQUFNO2FBQ2I7WUFDRCxNQUFNO1lBQ04sWUFBWSxFQUFFLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxFQUFFO1NBQ0osQ0FBQzthQUMzQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ2xELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3Nob3VsZCc7XG5cbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWFwaSc7XG5pbXBvcnQgeyBXYWxsZXQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUZXN0Qml0R28sIFRlc3RCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay10ZXN0JztcbmltcG9ydCB7IEtleVBhaXIsIFRyYW5zYWN0aW9uLCBUc29sLCBTb2xWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHsgZ2V0QXNzb2NpYXRlZFRva2VuQWNjb3VudEFkZHJlc3MgfSBmcm9tICcuLi8uLi9zcmMvbGliL3V0aWxzJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uL2ZpeHR1cmVzL3NvbCc7XG5pbXBvcnQgKiBhcyByZXNvdXJjZXMgZnJvbSAnLi4vcmVzb3VyY2VzL3NvbCc7XG5pbXBvcnQgeyBnZXRCdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4vZ2V0QnVpbGRlckZhY3RvcnknO1xuZGVzY3JpYmUoJ1NPTDogQ1QgZW5hYmxlbWVudCB0b2tlbiB2ZXJpZmljYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBiaXRnbzogVGVzdEJpdEdvQVBJO1xuICBsZXQgYmFzZWNvaW46IFRzb2w7XG5cbiAgY29uc3QgZmFjdG9yeSA9IGdldEJ1aWxkZXJGYWN0b3J5KCdzb2wnKTtcbiAgY29uc3QgYWNjb3VudCA9IG5ldyBLZXlQYWlyKHJlc291cmNlcy5hc3NvY2lhdGVkVG9rZW5BY2NvdW50cy5hY2NvdW50c1swXSkuZ2V0S2V5cygpO1xuICBjb25zdCByZWNlbnRCbG9ja0hhc2ggPSAnR0h0WFFCc29aSFZuTkZhOVlldkF6RnIxN0RKamdIWGszeWNUS0Q1eEQzWmknO1xuXG4gIGNvbnN0IG1pbnRBZGRyZXNzID0gcmVzb3VyY2VzLmFzc29jaWF0ZWRUb2tlbkFjY291bnRzRm9yU29sMjAyMi5taW50SWQ7XG4gIGNvbnN0IGF1dGhvcml0eUFkZHJlc3MgPSBhY2NvdW50LnB1YjtcbiAgY29uc3QgemVyb0J5dGVzMzYgPSAnMDAnLnJlcGVhdCgzNik7XG4gIGNvbnN0IHByb29mRGF0YUhleCA9ICcwMCcucmVwZWF0KDMyMCk7XG5cbiAgY29uc3QgdjFDb25maWcgPSB7XG4gICAgY29tcHV0ZVVuaXRMaW1pdDogMjAwXzAwMCxcbiAgICBoZWFwU2l6ZTogMzJfNzY4LFxuICAgIGxvYWRlZEFjY291bnRzRGF0YVNpemVMaW1pdDogNjVfNTM2LFxuICAgIHByaW9yaXR5RmVlOiA1XzAwMCxcbiAgfTtcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ21vY2snIH0pO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndHNvbCcsIFRzb2wuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndHNvbCcpIGFzIFRzb2w7XG4gIH0pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGJ1aWxkQ3RFbmFibGVtZW50VHhCYXNlNjQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyBBVEEgZGVyaXZlZCBmb3IgdGhlIGFjdHVhbCBvd25lciB1bmRlciB0aGUgVG9rZW4tMjAyMiBwcm9ncmFtLCBtYXRjaGluZ1xuICAgIC8vIHdoYXQgdmVyaWZ5VG9rZW5BZGRyZXNzIHJlY29tcHV0ZXMgZnJvbSB0aGUgaW50ZW50LlxuICAgIGNvbnN0IHRva2VuQWRkcmVzcyA9IGF3YWl0IGdldEFzc29jaWF0ZWRUb2tlbkFjY291bnRBZGRyZXNzKG1pbnRBZGRyZXNzLCBhY2NvdW50LnB1YiwgdHJ1ZSk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRDb25maWRlbnRpYWxUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcbiAgICB0eEJ1aWxkZXIuc2VuZGVyKGFjY291bnQucHViKTtcbiAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG4gICAgdHhCdWlsZGVyXG4gICAgICAuY3JlYXRlQXRhKHtcbiAgICAgICAgbWludEFkZHJlc3MsXG4gICAgICAgIGF0YUFkZHJlc3M6IHRva2VuQWRkcmVzcyxcbiAgICAgICAgb3duZXJBZGRyZXNzOiBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBwYXllckFkZHJlc3M6IGFjY291bnQucHViLFxuICAgICAgICB0b2tlbk5hbWU6ICd0c29sOnJheScsXG4gICAgICAgIHByb2dyYW1JZDogJ1Rva2VuelFkQk5iTHFQNVZFaGRrQVM2RVBGTEMxUEhuQnFDWEVwUHh1RWInLFxuICAgICAgfSlcbiAgICAgIC5jb25maWd1cmVBY2NvdW50KHtcbiAgICAgICAgdG9rZW5BZGRyZXNzLFxuICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgZWxnYW1hbFB1YmtleTogJzExJy5yZXBlYXQoMzIpLFxuICAgICAgICBkZWNyeXB0YWJsZVplcm9CYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgICAgbWF4aW11bVBlbmRpbmdCYWxhbmNlQ3JlZGl0Q291bnRlcjogJzE4NDQ2NzQ0MDczNzA5NTUxNjE1JyxcbiAgICAgICAgcHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMSxcbiAgICAgIH0pXG4gICAgICAudmVyaWZ5UHVia2V5VmFsaWRpdHkoeyBwcm9vZkRhdGE6IHByb29mRGF0YUhleCB9KTtcbiAgICB0eEJ1aWxkZXIudmVyc2lvbigxKS50cmFuc2FjdGlvbkNvbmZpZyh2MUNvbmZpZyk7XG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICByZXR1cm4gKHR4IGFzIFRyYW5zYWN0aW9uKS50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gbWFrZVdhbGxldCgpOiBXYWxsZXQge1xuICAgIGNvbnN0IHsgd2FsbGV0RGF0YSB9ID0gdGVzdERhdGEuZW5hYmxlVG9rZW5GaXh0dXJlcztcbiAgICBjb25zdCB3YWxsZXREYXRhQ2xvbmUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHdhbGxldERhdGEpKTtcbiAgICAvLyByb290IHRoZSB3YWxsZXQgYXQgb3VyIHNpZ25lciBzbyB0aGUgZmVlLXBheWVyID09PSB3YWxsZXQtcm9vdCBjaGVjayBwYXNzZXNcbiAgICB3YWxsZXREYXRhQ2xvbmUuY29pblNwZWNpZmljLnJvb3RBZGRyZXNzID0gYWNjb3VudC5wdWI7XG4gICAgcmV0dXJuIG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB3YWxsZXREYXRhQ2xvbmUpO1xuICB9XG5cbiAgaXQoJ2FjY2VwdHMgYSBDVCBlbmFibGVtZW50IChDcmVhdGVBVEEgKyBDb25maWd1cmVBY2NvdW50ICsgVmVyaWZ5UHVia2V5VmFsaWRpdHkpIHR4IHVuZGVyIHR5cGUgZW5hYmxldG9rZW4nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCgpO1xuICAgIGNvbnN0IHR4QmFzZTY0ID0gYXdhaXQgYnVpbGRDdEVuYWJsZW1lbnRUeEJhc2U2NCgpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgZW5hYmxlVG9rZW5zOiBbeyBuYW1lOiAndHNvbDp0MjJtaW50JywgYWRkcmVzczogYXV0aG9yaXR5QWRkcmVzcyB9XSxcbiAgICAgIH0sXG4gICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgIHR4QmFzZTY0LFxuICAgICAgICB0eEluZm86IHsgZmVlUGF5ZXI6IGFjY291bnQucHViLCBub25jZTogcmVjZW50QmxvY2tIYXNoIH0sXG4gICAgICAgIGNvaW46ICd0c29sJyxcbiAgICAgIH0sXG4gICAgICB3YWxsZXQsXG4gICAgICB2ZXJpZmljYXRpb246IHsgdmVyaWZ5VG9rZW5FbmFibGVtZW50OiB0cnVlIH0sXG4gICAgfSBhcyB1bmtub3duIGFzIFNvbFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyk7XG5cbiAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICB9KTtcblxuICBpdCgnc3RpbGwgcmVqZWN0cyBhbiBlbmFibGV0b2tlbiBwcmVidWlsZCB3aG9zZSB0b2tlbiBuYW1lIGRvZXMgbm90IG1hdGNoIHRoZSBpbnRlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCgpO1xuICAgIGNvbnN0IHR4QmFzZTY0ID0gYXdhaXQgYnVpbGRDdEVuYWJsZW1lbnRUeEJhc2U2NCgpO1xuXG4gICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICBlbmFibGVUb2tlbnM6IFt7IG5hbWU6ICd0c29sOnNvbWVvdGhlcnRva2VuJywgYWRkcmVzczogYXV0aG9yaXR5QWRkcmVzcyB9XSxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4QmFzZTY0LFxuICAgICAgICAgIHR4SW5mbzogeyBmZWVQYXllcjogYWNjb3VudC5wdWIsIG5vbmNlOiByZWNlbnRCbG9ja0hhc2ggfSxcbiAgICAgICAgICBjb2luOiAndHNvbCcsXG4gICAgICAgIH0sXG4gICAgICAgIHdhbGxldCxcbiAgICAgICAgdmVyaWZpY2F0aW9uOiB7IHZlcmlmeVRva2VuRW5hYmxlbWVudDogdHJ1ZSB9LFxuICAgICAgfSBhcyB1bmtub3duIGFzIFNvbFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucylcbiAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIHRva2VuIG5hbWUvKTtcbiAgfSk7XG59KTtcbiJdfQ==