@bitgo/sdk-coin-ethw 20.3.2 → 20.3.4
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/test/integration/index.d.ts +1 -0
- package/dist/test/integration/index.d.ts.map +1 -0
- package/dist/test/integration/index.js +1 -0
- package/dist/test/lib/recovery-nocks.d.ts +3 -0
- package/dist/test/lib/recovery-nocks.d.ts.map +1 -0
- package/dist/test/lib/recovery-nocks.js +175 -0
- package/dist/test/unit/index.d.ts +2 -0
- package/dist/test/unit/index.d.ts.map +1 -0
- package/dist/test/unit/index.js +262 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +11 -8
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -1089
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../test/integration/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L2ludGVncmF0aW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIiXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recovery-nocks.d.ts","sourceRoot":"","sources":["../../../test/lib/recovery-nocks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AA+J/C,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,QAAc,GAAG,IAAI,CAUlF"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.nockEthwRecovery = nockEthwRecovery;
|
|
7
|
+
const nock_1 = __importDefault(require("nock"));
|
|
8
|
+
const nockEthData = [
|
|
9
|
+
{
|
|
10
|
+
params: {
|
|
11
|
+
method: 'eth_getTransactionCount',
|
|
12
|
+
params: ['0x74c2137d54b0fc9f907e13f14e0dd18485fee924', 'latest'],
|
|
13
|
+
},
|
|
14
|
+
response: {
|
|
15
|
+
result: '0x0',
|
|
16
|
+
id: 0,
|
|
17
|
+
jsonrpc: '2.0',
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
params: {
|
|
22
|
+
method: 'eth_getBalance',
|
|
23
|
+
params: ['0x74c2137d54b0fc9f907e13f14e0dd18485fee924', 'latest'],
|
|
24
|
+
},
|
|
25
|
+
response: {
|
|
26
|
+
result: '0x16345785d8a0000',
|
|
27
|
+
id: 0,
|
|
28
|
+
jsonrpc: '2.0',
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
params: {
|
|
33
|
+
method: 'eth_getBalance',
|
|
34
|
+
params: ['0x5df5a96b478bb1808140d87072143e60262e8670', 'latest'],
|
|
35
|
+
},
|
|
36
|
+
response: {
|
|
37
|
+
result: '0x1e87f85809dc0000',
|
|
38
|
+
id: 0,
|
|
39
|
+
jsonrpc: '2.0',
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
params: {
|
|
44
|
+
method: 'eth_getTransactionCount',
|
|
45
|
+
params: ['0xba6d9d82cf2920c544b834b72f4c6d11a3ef3de6', 'latest'],
|
|
46
|
+
},
|
|
47
|
+
response: {
|
|
48
|
+
result: '0x0',
|
|
49
|
+
id: 0,
|
|
50
|
+
jsonrpc: '2.0',
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
params: {
|
|
55
|
+
method: 'eth_getBalance',
|
|
56
|
+
params: ['0xba6d9d82cf2920c544b834b72f4c6d11a3ef3de6', 'latest'],
|
|
57
|
+
},
|
|
58
|
+
response: {
|
|
59
|
+
result: '0x0',
|
|
60
|
+
id: 0,
|
|
61
|
+
jsonrpc: '2.0',
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
params: {
|
|
66
|
+
method: 'eth_getTransactionCount',
|
|
67
|
+
params: ['0x74c2137d54b0fc9f907e13f14e0dd18485fee924', 'latest'],
|
|
68
|
+
},
|
|
69
|
+
response: {
|
|
70
|
+
result: '0x0',
|
|
71
|
+
id: 0,
|
|
72
|
+
jsonrpc: '2.0',
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
params: {
|
|
77
|
+
method: 'eth_getBalance',
|
|
78
|
+
params: ['0x74c2137d54b0fc9f907e13f14e0dd18485fee924', 'latest'],
|
|
79
|
+
},
|
|
80
|
+
response: {
|
|
81
|
+
result: '0x16345785d8a0000',
|
|
82
|
+
id: 0,
|
|
83
|
+
jsonrpc: '2.0',
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
params: {
|
|
88
|
+
method: 'eth_getBalance',
|
|
89
|
+
params: ['0x5df5a96b478bb1808140d87072143e60262e8670', 'latest'],
|
|
90
|
+
},
|
|
91
|
+
response: {
|
|
92
|
+
result: '0x1e87f85809dc0000',
|
|
93
|
+
id: 0,
|
|
94
|
+
jsonrpc: '2.0',
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
params: {
|
|
99
|
+
method: 'eth_call',
|
|
100
|
+
params: [{ to: '0x5df5a96b478bb1808140d87072143e60262e8670', data: '0xa0b7967b' }, 'latest'],
|
|
101
|
+
},
|
|
102
|
+
response: {
|
|
103
|
+
jsonrpc: '2.0',
|
|
104
|
+
result: '0x0000000000000000000000000000000000000000000000000000000000000001',
|
|
105
|
+
id: 0,
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
params: {
|
|
110
|
+
method: 'eth_getBalance',
|
|
111
|
+
params: ['0xa1a88a502274073b1bc4fe06ea0f5fe77e151b91', 'latest'],
|
|
112
|
+
},
|
|
113
|
+
response: {
|
|
114
|
+
result: '0x470de4df820000',
|
|
115
|
+
id: 0,
|
|
116
|
+
jsonrpc: '2.0',
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
params: {
|
|
121
|
+
method: 'eth_getTransactionCount',
|
|
122
|
+
params: ['0xa1a88a502274073b1bc4fe06ea0f5fe77e151b91', 'latest'],
|
|
123
|
+
},
|
|
124
|
+
response: {
|
|
125
|
+
result: '0x1',
|
|
126
|
+
id: 0,
|
|
127
|
+
jsonrpc: '2.0',
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
params: {
|
|
132
|
+
method: 'eth_getTransactionCount',
|
|
133
|
+
params: ['0xa1a88a502274073b1bc4fe06ea0f5fe77e151b91', 'latest'],
|
|
134
|
+
},
|
|
135
|
+
response: {
|
|
136
|
+
result: '0x1',
|
|
137
|
+
id: 0,
|
|
138
|
+
jsonrpc: '2.0',
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
params: {
|
|
143
|
+
method: 'eth_call',
|
|
144
|
+
params: [{ to: '0xdf07117705a9f8dc4c2a78de66b7f1797dba9d4e', data: '0xa0b7967b' }, 'latest'],
|
|
145
|
+
},
|
|
146
|
+
response: {
|
|
147
|
+
jsonrpc: '2.0',
|
|
148
|
+
result: '0x0000000000000000000000000000000000000000000000000000000000002a7f',
|
|
149
|
+
id: 0,
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
params: {
|
|
154
|
+
method: 'eth_getBalance',
|
|
155
|
+
params: ['0xdf07117705a9f8dc4c2a78de66b7f1797dba9d4e', 'latest'],
|
|
156
|
+
},
|
|
157
|
+
response: {
|
|
158
|
+
result: '0x8ac7230489e7ffb8',
|
|
159
|
+
id: 0,
|
|
160
|
+
jsonrpc: '2.0',
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
];
|
|
164
|
+
function nockEthwRecovery(bitgo, nockData = nockEthData) {
|
|
165
|
+
nockData.forEach((data) => {
|
|
166
|
+
(0, nock_1.default)('https://mainnet.ethereumpow.org')
|
|
167
|
+
.post('/', {
|
|
168
|
+
jsonrpc: '2.0',
|
|
169
|
+
id: 0,
|
|
170
|
+
...data.params,
|
|
171
|
+
})
|
|
172
|
+
.reply(200, data.response);
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3Zlcnktbm9ja3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L2xpYi9yZWNvdmVyeS1ub2Nrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWlLQSw0Q0FVQztBQTNLRCxnREFBd0I7QUFJeEIsTUFBTSxXQUFXLEdBQVU7SUFDekI7UUFDRSxNQUFNLEVBQUU7WUFDTixNQUFNLEVBQUUseUJBQXlCO1lBQ2pDLE1BQU0sRUFBRSxDQUFDLDRDQUE0QyxFQUFFLFFBQVEsQ0FBQztTQUNqRTtRQUNELFFBQVEsRUFBRTtZQUNSLE1BQU0sRUFBRSxLQUFLO1lBQ2IsRUFBRSxFQUFFLENBQUM7WUFDTCxPQUFPLEVBQUUsS0FBSztTQUNmO0tBQ0Y7SUFDRDtRQUNFLE1BQU0sRUFBRTtZQUNOLE1BQU0sRUFBRSxnQkFBZ0I7WUFDeEIsTUFBTSxFQUFFLENBQUMsNENBQTRDLEVBQUUsUUFBUSxDQUFDO1NBQ2pFO1FBQ0QsUUFBUSxFQUFFO1lBQ1IsTUFBTSxFQUFFLG1CQUFtQjtZQUMzQixFQUFFLEVBQUUsQ0FBQztZQUNMLE9BQU8sRUFBRSxLQUFLO1NBQ2Y7S0FDRjtJQUNEO1FBQ0UsTUFBTSxFQUFFO1lBQ04sTUFBTSxFQUFFLGdCQUFnQjtZQUN4QixNQUFNLEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxRQUFRLENBQUM7U0FDakU7UUFDRCxRQUFRLEVBQUU7WUFDUixNQUFNLEVBQUUsb0JBQW9CO1lBQzVCLEVBQUUsRUFBRSxDQUFDO1lBQ0wsT0FBTyxFQUFFLEtBQUs7U0FDZjtLQUNGO0lBQ0Q7UUFDRSxNQUFNLEVBQUU7WUFDTixNQUFNLEVBQUUseUJBQXlCO1lBQ2pDLE1BQU0sRUFBRSxDQUFDLDRDQUE0QyxFQUFFLFFBQVEsQ0FBQztTQUNqRTtRQUNELFFBQVEsRUFBRTtZQUNSLE1BQU0sRUFBRSxLQUFLO1lBQ2IsRUFBRSxFQUFFLENBQUM7WUFDTCxPQUFPLEVBQUUsS0FBSztTQUNmO0tBQ0Y7SUFDRDtRQUNF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RUFBRSxFQUFFLENBQUM7WUFDTCxPQUFPLEVBQUUsS0FBSztTQUNmO0tBQ0Y7Q0FDRixDQUFDO0FBRUYsU0FBZ0IsZ0JBQWdCLENBQUMsS0FBbUIsRUFBRSxRQUFRLEdBQUcsV0FBVztJQUMxRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDeEIsSUFBQSxjQUFJLEVBQUMsaUNBQWlDLENBQUM7YUFDcEMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNULE9BQU8sRUFBRSxLQUFLO1lBQ2QsRUFBRSxFQUFFLENBQUM7WUFDTCxHQUFHLElBQUksQ0FBQyxNQUFNO1NBQ2YsQ0FBQzthQUNELEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9CLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBub2NrIGZyb20gJ25vY2snO1xuXG5pbXBvcnQgeyBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuXG5jb25zdCBub2NrRXRoRGF0YTogYW55W10gPSBbXG4gIHtcbiAgICBwYXJhbXM6IHtcbiAgICAgIG1ldGhvZDogJ2V0aF9nZXRUcmFuc2FjdGlvbkNvdW50JyxcbiAgICAgIHBhcmFtczogWycweDc0YzIxMzdkNTRiMGZjOWY5MDdlMTNmMTRlMGRkMTg0ODVmZWU5MjQnLCAnbGF0ZXN0J10sXG4gICAgfSxcbiAgICByZXNwb25zZToge1xuICAgICAgcmVzdWx0OiAnMHgwJyxcbiAgICAgIGlkOiAwLFxuICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHBhcmFtczoge1xuICAgICAgbWV0aG9kOiAnZXRoX2dldEJhbGFuY2UnLFxuICAgICAgcGFyYW1zOiBbJzB4NzRjMjEzN2Q1NGIwZmM5ZjkwN2UxM2YxNGUwZGQxODQ4NWZlZTkyNCcsICdsYXRlc3QnXSxcbiAgICB9LFxuICAgIHJlc3BvbnNlOiB7XG4gICAgICByZXN1bHQ6ICcweDE2MzQ1Nzg1ZDhhMDAwMCcsXG4gICAgICBpZDogMCxcbiAgICAgIGpzb25ycGM6ICcyLjAnLFxuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBwYXJhbXM6IHtcbiAgICAgIG1ldGhvZDogJ2V0aF9nZXRCYWxhbmNlJyxcbiAgICAgIHBhcmFtczogWycweDVkZjVhOTZiNDc4YmIxODA4MTQwZDg3MDcyMTQzZTYwMjYyZTg2NzAnLCAnbGF0ZXN0J10sXG4gICAgfSxcbiAgICByZXNwb25zZToge1xuICAgICAgcmVzdWx0OiAnMHgxZTg3Zjg1ODA5ZGMwMDAwJyxcbiAgICAgIGlkOiAwLFxuICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHBhcmFtczoge1xuICAgICAgbWV0aG9kOiAnZXRoX2dldFRyYW5zYWN0aW9uQ291bnQnLFxuICAgICAgcGFyYW1zOiBbJzB4YmE2ZDlkODJjZjI5MjBjNTQ0YjgzNGI3MmY0YzZkMTFhM2VmM2RlNicsICdsYXRlc3QnXSxcbiAgICB9LFxuICAgIHJlc3BvbnNlOiB7XG4gICAgICByZXN1bHQ6ICcweDAnLFxuICAgICAgaWQ6IDAsXG4gICAgICBqc29ucnBjOiAnMi4wJyxcbiAgICB9LFxuICB9LFxuICB7XG4gICAgcGFyYW1zOiB7XG4gICAgICBtZXRob2Q6ICdldGhfZ2V0QmFsYW5jZScsXG4gICAgICBwYXJhbXM6IFsnMHhiYTZkOWQ4MmNmMjkyMGM1NDRiODM0YjcyZjRjNmQxMWEzZWYzZGU2JywgJ2xhdGVzdCddLFxuICAgIH0sXG4gICAgcmVzcG9uc2U6IHtcbiAgICAgIHJlc3VsdDogJzB4MCcsXG4gICAgICBpZDogMCxcbiAgICAgIGpzb25ycGM6ICcyLjAnLFxuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBwYXJhbXM6IHtcbiAgICAgIG1ldGhvZDogJ2V0aF9nZXRUcmFuc2FjdGlvbkNvdW50JyxcbiAgICAgIHBhcmFtczogWycweDc0YzIxMzdkNTRiMGZjOWY5MDdlMTNmMTRlMGRkMTg0ODVmZWU5MjQnLCAnbGF0ZXN0J10sXG4gICAgfSxcbiAgICByZXNwb25zZToge1xuICAgICAgcmVzdWx0OiAnMHgwJyxcbiAgICAgIGlkOiAwLFxuICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHBhcmFtczoge1xuICAgICAgbWV0aG9kOiAnZXRoX2dldEJhbGFuY2UnLFxuICAgICAgcGFyYW1zOiBbJzB4NzRjMjEzN2Q1NGIwZmM5ZjkwN2UxM2YxNGUwZGQxODQ4NWZlZTkyNCcsICdsYXRlc3QnXSxcbiAgICB9LFxuICAgIHJlc3BvbnNlOiB7XG4gICAgICByZXN1bHQ6ICcweDE2MzQ1Nzg1ZDhhMDAwMCcsXG4gICAgICBpZDogMCxcbiAgICAgIGpzb25ycGM6ICcyLjAnLFxuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBwYXJhbXM6IHtcbiAgICAgIG1ldGhvZDogJ2V0aF9nZXRCYWxhbmNlJyxcbiAgICAgIHBhcmFtczogWycweDVkZjVhOTZiNDc4YmIxODA4MTQwZDg3MDcyMTQzZTYwMjYyZTg2NzAnLCAnbGF0ZXN0J10sXG4gICAgfSxcbiAgICByZXNwb25zZToge1xuICAgICAgcmVzdWx0OiAnMHgxZTg3Zjg1ODA5ZGMwMDAwJyxcbiAgICAgIGlkOiAwLFxuICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHBhcmFtczoge1xuICAgICAgbWV0aG9kOiAnZXRoX2NhbGwnLFxuICAgICAgcGFyYW1zOiBbeyB0bzogJzB4NWRmNWE5NmI0NzhiYjE4MDgxNDBkODcwNzIxNDNlNjAyNjJlODY3MCcsIGRhdGE6ICcweGEwYjc5NjdiJyB9LCAnbGF0ZXN0J10sXG4gICAgfSxcbiAgICByZXNwb25zZToge1xuICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgICByZXN1bHQ6ICcweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnLFxuICAgICAgaWQ6IDAsXG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHBhcmFtczoge1xuICAgICAgbWV0aG9kOiAnZXRoX2dldEJhbGFuY2UnLFxuICAgICAgcGFyYW1zOiBbJzB4YTFhODhhNTAyMjc0MDczYjFiYzRmZTA2ZWEwZjVmZTc3ZTE1MWI5MScsICdsYXRlc3QnXSxcbiAgICB9LFxuICAgIHJlc3BvbnNlOiB7XG4gICAgICByZXN1bHQ6ICcweDQ3MGRlNGRmODIwMDAwJyxcbiAgICAgIGlkOiAwLFxuICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHBhcmFtczoge1xuICAgICAgbWV0aG9kOiAnZXRoX2dldFRyYW5zYWN0aW9uQ291bnQnLFxuICAgICAgcGFyYW1zOiBbJzB4YTFhODhhNTAyMjc0MDczYjFiYzRmZTA2ZWEwZjVmZTc3ZTE1MWI5MScsICdsYXRlc3QnXSxcbiAgICB9LFxuICAgIHJlc3BvbnNlOiB7XG4gICAgICByZXN1bHQ6ICcweDEnLFxuICAgICAgaWQ6IDAsXG4gICAgICBqc29ucnBjOiAnMi4wJyxcbiAgICB9LFxuICB9LFxuICB7XG4gICAgcGFyYW1zOiB7XG4gICAgICBtZXRob2Q6ICdldGhfZ2V0VHJhbnNhY3Rpb25Db3VudCcsXG4gICAgICBwYXJhbXM6IFsnMHhhMWE4OGE1MDIyNzQwNzNiMWJjNGZlMDZlYTBmNWZlNzdlMTUxYjkxJywgJ2xhdGVzdCddLFxuICAgIH0sXG4gICAgcmVzcG9uc2U6IHtcbiAgICAgIHJlc3VsdDogJzB4MScsXG4gICAgICBpZDogMCxcbiAgICAgIGpzb25ycGM6ICcyLjAnLFxuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBwYXJhbXM6IHtcbiAgICAgIG1ldGhvZDogJ2V0aF9jYWxsJyxcbiAgICAgIHBhcmFtczogW3sgdG86ICcweGRmMDcxMTc3MDVhOWY4ZGM0YzJhNzhkZTY2YjdmMTc5N2RiYTlkNGUnLCBkYXRhOiAnMHhhMGI3OTY3YicgfSwgJ2xhdGVzdCddLFxuICAgIH0sXG4gICAgcmVzcG9uc2U6IHtcbiAgICAgIGpzb25ycGM6ICcyLjAnLFxuICAgICAgcmVzdWx0OiAnMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyYTdmJyxcbiAgICAgIGlkOiAwLFxuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBwYXJhbXM6IHtcbiAgICAgIG1ldGhvZDogJ2V0aF9nZXRCYWxhbmNlJyxcbiAgICAgIHBhcmFtczogWycweGRmMDcxMTc3MDVhOWY4ZGM0YzJhNzhkZTY2YjdmMTc5N2RiYTlkNGUnLCAnbGF0ZXN0J10sXG4gICAgfSxcbiAgICByZXNwb25zZToge1xuICAgICAgcmVzdWx0OiAnMHg4YWM3MjMwNDg5ZTdmZmI4JyxcbiAgICAgIGlkOiAwLFxuICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgfSxcbiAgfSxcbl07XG5cbmV4cG9ydCBmdW5jdGlvbiBub2NrRXRod1JlY292ZXJ5KGJpdGdvOiBUZXN0Qml0R29BUEksIG5vY2tEYXRhID0gbm9ja0V0aERhdGEpOiB2b2lkIHtcbiAgbm9ja0RhdGEuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgIG5vY2soJ2h0dHBzOi8vbWFpbm5ldC5ldGhlcmV1bXBvdy5vcmcnKVxuICAgICAgLnBvc3QoJy8nLCB7XG4gICAgICAgIGpzb25ycGM6ICcyLjAnLFxuICAgICAgICBpZDogMCxcbiAgICAgICAgLi4uZGF0YS5wYXJhbXMsXG4gICAgICB9KVxuICAgICAgLnJlcGx5KDIwMCwgZGF0YS5yZXNwb25zZSk7XG4gIH0pO1xufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../test/unit/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,262 @@
|
|
|
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
|
+
const nock = __importStar(require("nock"));
|
|
37
|
+
const should = __importStar(require("should"));
|
|
38
|
+
const sdk_test_1 = require("@bitgo/sdk-test");
|
|
39
|
+
const sdk_api_1 = require("@bitgo/sdk-api");
|
|
40
|
+
const index_1 = require("../../src/index");
|
|
41
|
+
const recovery_nocks_1 = require("../lib/recovery-nocks");
|
|
42
|
+
nock.disableNetConnect();
|
|
43
|
+
const bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'test' });
|
|
44
|
+
bitgo.safeRegister('ethw', index_1.Ethw.createInstance);
|
|
45
|
+
describe('Ethereum pow', function () {
|
|
46
|
+
let basecoin;
|
|
47
|
+
before(function () {
|
|
48
|
+
bitgo.initializeTestVars();
|
|
49
|
+
basecoin = bitgo.coin('ethw');
|
|
50
|
+
});
|
|
51
|
+
after(function () {
|
|
52
|
+
nock.cleanAll();
|
|
53
|
+
});
|
|
54
|
+
it('should instantiate the coin', function () {
|
|
55
|
+
const basecoin = bitgo.coin('ethw');
|
|
56
|
+
basecoin.should.be.an.instanceof(index_1.Ethw);
|
|
57
|
+
});
|
|
58
|
+
describe('Recover Ethereum PoW', function () {
|
|
59
|
+
beforeEach(() => {
|
|
60
|
+
nock.cleanAll();
|
|
61
|
+
});
|
|
62
|
+
let recoveryParams;
|
|
63
|
+
before(() => {
|
|
64
|
+
recoveryParams = {
|
|
65
|
+
userKey: '{"iv":"+TkmT3GJ5msVWQjBrt3lsw==","v":1,"iter":10000,"ks":256,"ts":64,"mode"\n' +
|
|
66
|
+
':"ccm","adata":"","cipher":"aes","salt":"cCE20fGIobs=","ct":"NVIdYIh91J3aRI\n' +
|
|
67
|
+
'8GG0JE3DhXW3AUmz2G5RqMejdz1+t4/vovIP7lleegI7VYyWiiLvlM0OCFf3EVvV/RyXr8+2vsn\n' +
|
|
68
|
+
'Q0Vn8c2CV5FRZ80OjGYrW3A/6T/zpOz6E8CMvnD++iIpeO4r2eZJavejZxdzlxF0BRz7VI="}',
|
|
69
|
+
backupKey: '{"iv":"asB356ofC7nZtg4NBvQkiQ==","v":1,"iter":10000,"ks":256,"ts":64,"mode"\n' +
|
|
70
|
+
':"ccm","adata":"","cipher":"aes","salt":"1hr2HhBbBIk=","ct":"8CZc6upt+XNOto\n' +
|
|
71
|
+
'KDD38TUg3ZUjzW+DraZlkcku2bNp0JS2s1g/iC6YTGUGtPoxDxumDlXwlWQx+5WPjZu79M8DCrI\n' +
|
|
72
|
+
't9aZaOvHkGH9aFtMbavFX419TcrwDmpUeQFN0hRkfrIHXyHNbTpGSVAjHvHMtzDMaw+ACg="}',
|
|
73
|
+
walletPassphrase: sdk_test_1.TestBitGo.V2.TEST_RECOVERY_PASSCODE,
|
|
74
|
+
walletContractAddress: '0x5df5a96b478bb1808140d87072143e60262e8670',
|
|
75
|
+
recoveryDestination: '0xac05da78464520aa7c9d4c19bd7a440b111b3054',
|
|
76
|
+
replayProtectionOptions: {
|
|
77
|
+
chain: 10001,
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
});
|
|
81
|
+
it('should throw on invalid gasLimit', async function () {
|
|
82
|
+
(0, recovery_nocks_1.nockEthwRecovery)(bitgo);
|
|
83
|
+
await basecoin
|
|
84
|
+
.recover({
|
|
85
|
+
...recoveryParams,
|
|
86
|
+
gasLimit: -400000,
|
|
87
|
+
gasPrice: 25000000000,
|
|
88
|
+
})
|
|
89
|
+
.should.be.rejectedWith('Gas limit must be between 30000 and 20000000');
|
|
90
|
+
});
|
|
91
|
+
it('should throw if etherscan errs', async function () {
|
|
92
|
+
const nockUnsuccessfulEtherscanData = [
|
|
93
|
+
{
|
|
94
|
+
params: {
|
|
95
|
+
method: 'eth_getTransactionCount',
|
|
96
|
+
params: ['0x74c2137d54b0fc9f907e13f14e0dd18485fee924', 'latest'],
|
|
97
|
+
},
|
|
98
|
+
response: {
|
|
99
|
+
result: '0x0',
|
|
100
|
+
id: 0,
|
|
101
|
+
jsonrpc: '2.0',
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
params: {
|
|
106
|
+
method: 'eth_getBalance',
|
|
107
|
+
params: ['0x74c2137d54b0fc9f907e13f14e0dd18485fee924', 'latest'],
|
|
108
|
+
},
|
|
109
|
+
response: {
|
|
110
|
+
error: {
|
|
111
|
+
code: -32602,
|
|
112
|
+
message: 'invalid argument 0: json: cannot unmarshal hex string of odd length into Go value of type common.Address',
|
|
113
|
+
},
|
|
114
|
+
id: 0,
|
|
115
|
+
jsonrpc: '2.0',
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
];
|
|
119
|
+
(0, recovery_nocks_1.nockEthwRecovery)(bitgo, nockUnsuccessfulEtherscanData);
|
|
120
|
+
await basecoin
|
|
121
|
+
.recover(recoveryParams)
|
|
122
|
+
.should.be.rejectedWith('ETHW full node error: -32602 - invalid argument 0: json: cannot unmarshal hex string of odd length into Go value of type common.Address');
|
|
123
|
+
});
|
|
124
|
+
it('should throw if backup key address has insufficient balance', async function () {
|
|
125
|
+
const insufficientFeeData = [
|
|
126
|
+
{
|
|
127
|
+
params: {
|
|
128
|
+
method: 'eth_getTransactionCount',
|
|
129
|
+
params: ['0x74c2137d54b0fc9f907e13f14e0dd18485fee924', 'latest'],
|
|
130
|
+
},
|
|
131
|
+
response: {
|
|
132
|
+
id: 0,
|
|
133
|
+
jsonrpc: '2.0',
|
|
134
|
+
result: '0x0',
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
params: {
|
|
139
|
+
method: 'eth_getBalance',
|
|
140
|
+
params: ['0x74c2137d54b0fc9f907e13f14e0dd18485fee924', 'latest'],
|
|
141
|
+
},
|
|
142
|
+
response: {
|
|
143
|
+
id: 0,
|
|
144
|
+
jsonrpc: '2.0',
|
|
145
|
+
result: '0x4d2',
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
];
|
|
149
|
+
(0, recovery_nocks_1.nockEthwRecovery)(bitgo, insufficientFeeData);
|
|
150
|
+
await basecoin
|
|
151
|
+
.recover({
|
|
152
|
+
...recoveryParams,
|
|
153
|
+
gasLimit: 300000,
|
|
154
|
+
gasPrice: 1000000000,
|
|
155
|
+
})
|
|
156
|
+
.should.be.rejectedWith('Backup key address 0x74c2137d54b0fc9f907e13f14e0dd18485fee924 has balance 0.000001234 Gwei.' +
|
|
157
|
+
'This address must have a balance of at least 300000 Gwei to perform recoveries. Try sending some ETH to this address then retry.');
|
|
158
|
+
});
|
|
159
|
+
it('should throw on invalid gasPrice', async function () {
|
|
160
|
+
(0, recovery_nocks_1.nockEthwRecovery)(bitgo);
|
|
161
|
+
await basecoin
|
|
162
|
+
.recover({
|
|
163
|
+
...recoveryParams,
|
|
164
|
+
gasLimit: 400000,
|
|
165
|
+
gasPrice: 2500000,
|
|
166
|
+
})
|
|
167
|
+
.should.be.rejectedWith('Gas price must be between 1000000000 and 2500000000000');
|
|
168
|
+
});
|
|
169
|
+
it('should successfully construct a tx with custom gas price and limit', async function () {
|
|
170
|
+
(0, recovery_nocks_1.nockEthwRecovery)(bitgo);
|
|
171
|
+
const recovery = await basecoin.recover({
|
|
172
|
+
...recoveryParams,
|
|
173
|
+
gasLimit: 400000,
|
|
174
|
+
gasPrice: 1000000000,
|
|
175
|
+
});
|
|
176
|
+
// id and tx will always be different because of expireTime
|
|
177
|
+
should.exist(recovery);
|
|
178
|
+
recovery.should.have.property('id');
|
|
179
|
+
recovery.should.have.property('tx');
|
|
180
|
+
await checkRecoveryTxExplanation(recovery.tx, 2200000000000000000, recoveryParams.recoveryDestination);
|
|
181
|
+
});
|
|
182
|
+
it('should construct a recovery transaction without BitGo', async function () {
|
|
183
|
+
(0, recovery_nocks_1.nockEthwRecovery)(bitgo);
|
|
184
|
+
const recovery = await basecoin.recover(recoveryParams);
|
|
185
|
+
// id and tx will always be different because of expireTime
|
|
186
|
+
should.exist(recovery);
|
|
187
|
+
recovery.should.have.property('id');
|
|
188
|
+
recovery.should.have.property('tx');
|
|
189
|
+
await checkRecoveryTxExplanation(recovery.tx, 2200000000000000000, recoveryParams.recoveryDestination);
|
|
190
|
+
});
|
|
191
|
+
it('should construct a recovery transaction without BitGo and with KRS', async function () {
|
|
192
|
+
(0, recovery_nocks_1.nockEthwRecovery)(bitgo);
|
|
193
|
+
const recovery = await basecoin.recover({
|
|
194
|
+
...recoveryParams,
|
|
195
|
+
backupKey: 'xpub661MyMwAqRbcGsCNiG4BzbxLmXnJFo4K5gVSE2b9AxufAtpuTun1SYwg9Uykqqf4DrKrDZ6KqPm9ehthWbCma7pnaMrtXY11nY7MeFbEDPm',
|
|
196
|
+
krsProvider: 'keyternal',
|
|
197
|
+
});
|
|
198
|
+
// id and tx will always be different because of expireTime
|
|
199
|
+
should.exist(recovery);
|
|
200
|
+
recovery.should.have.property('id');
|
|
201
|
+
recovery.should.have.property('tx');
|
|
202
|
+
await checkRecoveryTxExplanation(recovery.tx, 2200000000000000000, recoveryParams.recoveryDestination);
|
|
203
|
+
});
|
|
204
|
+
it('should error when the backup key is unfunded (cannot pay gas)', async function () {
|
|
205
|
+
(0, recovery_nocks_1.nockEthwRecovery)(bitgo);
|
|
206
|
+
await basecoin
|
|
207
|
+
.recover({
|
|
208
|
+
userKey: '{"iv":"VNvG6t3fHfxMcfvNuafYYA==","v":1,"iter":10000,"ks":256,"ts":64,"mode"\n' +
|
|
209
|
+
':"ccm","adata":"","cipher":"aes","salt":"mc9pCk3H43w=","ct":"Qe4Z1evaXcrOMC\n' +
|
|
210
|
+
'cQ/XMVVBO9M/99D1QQ6LxkG8z3fQtwwOVXM3/6doNrriprUqs+adpFC93KRcAaDroL1E6o17J2k\n' +
|
|
211
|
+
'mcpXRd2CuXRFORZmZ/6QBfjKfCJ3aq0kEkDVv37gZNVT3aNtGkNSQdCEWKQLwd1++r5AkA="}\n',
|
|
212
|
+
backupKey: '{"iv":"EjD7x0OJX9kNM/C3yEDvyQ==","v":1,"iter":10000,"ks":256,"ts":64,"mode"\n' +
|
|
213
|
+
':"ccm","adata":"","cipher":"aes","salt":"Na9NvRRe3n8=","ct":"B/AtSLHolsdNLr\n' +
|
|
214
|
+
'4Dlij4kQ0E6NyUUs6wo6T2HtPDAPO0hyhPPbh1OAYqIS7VlL9xmJRFC2zPxwRJvzf6OWC/m48HX\n' +
|
|
215
|
+
'vgLoXYgahArhalzJVlRxcXUz4HOhozRWfv/eK3t5HJfm+25+WBOiW8YgSE7hVEYTbeBRD4="}',
|
|
216
|
+
walletContractAddress: '0x22ff743216b58aeb3efc46985406b50112e9e176',
|
|
217
|
+
walletPassphrase: sdk_test_1.TestBitGo.V2.TEST_RECOVERY_PASSCODE,
|
|
218
|
+
recoveryDestination: '0xac05da78464520aa7c9d4c19bd7a440b111b3054',
|
|
219
|
+
})
|
|
220
|
+
.should.be.rejectedWith('Backup key address 0xba6d9d82cf2920c544b834b72f4c6d11a3ef3de6 has balance 0 Gwei.This address must have a balance of at least 10000000 Gwei to perform recoveries. Try sending some ETH to this address then retry.');
|
|
221
|
+
});
|
|
222
|
+
it('should generate an ETH unsigned sweep', async function () {
|
|
223
|
+
(0, recovery_nocks_1.nockEthwRecovery)(bitgo);
|
|
224
|
+
const transaction = await basecoin.recover({
|
|
225
|
+
userKey: 'xpub661MyMwAqRbcFXDcWD2vxuebcT1ZpTF4Vke6qmMW8yzddwNYpAPjvYEEL5jLfyYXW2fuxtAxY8TgjPUJLcf1C8qz9N6VgZxArKX4EwB8rH5',
|
|
226
|
+
backupKey: 'xpub661MyMwAqRbcGhSaXikpuTC9KU88Xx9LrjKSw1JKsvXNgabpTdgjy7LSovh9ZHhcqhAHQu7uthu7FguNGdcC4aXTKK5gqTcPe4WvLYRbCSG',
|
|
227
|
+
walletContractAddress: sdk_test_1.TestBitGo.V2.TEST_ETH_WALLET_FIRST_ADDRESS,
|
|
228
|
+
recoveryDestination: sdk_test_1.TestBitGo.V2.TEST_ERC20_TOKEN_RECIPIENT,
|
|
229
|
+
gasPrice: '20000000000',
|
|
230
|
+
gasLimit: '500000',
|
|
231
|
+
});
|
|
232
|
+
should.exist(transaction);
|
|
233
|
+
transaction.should.have.property('tx');
|
|
234
|
+
transaction.should.have.property('contractSequenceId');
|
|
235
|
+
transaction.should.have.property('expireTime');
|
|
236
|
+
transaction.should.have.property('gasLimit');
|
|
237
|
+
transaction.gasLimit.should.equal('500000');
|
|
238
|
+
transaction.should.have.property('gasPrice');
|
|
239
|
+
transaction.gasPrice.should.equal('20000000000');
|
|
240
|
+
transaction.should.have.property('walletContractAddress');
|
|
241
|
+
transaction.walletContractAddress.should.equal(sdk_test_1.TestBitGo.V2.TEST_ETH_WALLET_FIRST_ADDRESS);
|
|
242
|
+
transaction.should.have.property('recipient');
|
|
243
|
+
transaction.recipient.should.have.property('address');
|
|
244
|
+
transaction.recipient.address.should.equal(sdk_test_1.TestBitGo.V2.TEST_ERC20_TOKEN_RECIPIENT);
|
|
245
|
+
transaction.recipient.should.have.property('amount');
|
|
246
|
+
transaction.recipient.amount.should.equal('9999999999999999928');
|
|
247
|
+
checkRecoveryTxExplanation(transaction.tx, 9999999999999999928, sdk_test_1.TestBitGo.V2.TEST_ERC20_TOKEN_RECIPIENT);
|
|
248
|
+
});
|
|
249
|
+
async function checkRecoveryTxExplanation(tx, recoveryAmount, recoveryDestination) {
|
|
250
|
+
const explanation = await basecoin.explainTransaction({ txHex: '0x' + tx, feeInfo: { fee: 1 } });
|
|
251
|
+
explanation.should.have.property('outputs');
|
|
252
|
+
explanation.outputs.should.containEql({
|
|
253
|
+
amount: recoveryAmount.toFixed(),
|
|
254
|
+
address: recoveryDestination,
|
|
255
|
+
});
|
|
256
|
+
explanation.should.have.property('changeOutputs', []);
|
|
257
|
+
explanation.should.have.property('changeAmount', '0');
|
|
258
|
+
explanation.should.have.property('fee', { fee: 1 });
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBNkI7QUFDN0IsK0NBQWlDO0FBRWpDLDhDQUEwRDtBQUMxRCw0Q0FBMEM7QUFFMUMsMkNBQXVDO0FBQ3ZDLDBEQUF5RDtBQUV6RCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztBQUV6QixNQUFNLEtBQUssR0FBaUIsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzFFLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFlBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUVoRCxRQUFRLENBQUMsY0FBYyxFQUFFO0lBQ3ZCLElBQUksUUFBUSxDQUFDO0lBRWIsTUFBTSxDQUFDO1FBQ0wsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0IsUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxLQUFLLENBQUM7UUFDSixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNkJBQTZCLEVBQUU7UUFDaEMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFlBQUksQ0FBQyxDQUFDO0lBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHNCQUFzQixFQUFFO1FBQy9CLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFD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QyxDQUFDLENBQUM7UUFFSCxLQUFLLFVBQVUsMEJBQTBCLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxtQkFBbUI7WUFDL0UsTUFBTSxXQUFXLEdBQUcsTUFBTSxRQUFRLENBQUMsa0JBQWtCLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2pHLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM1QyxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7Z0JBQ3BDLE1BQU0sRUFBRSxjQUFjLENBQUMsT0FBTyxFQUFFO2dCQUNoQyxPQUFPLEVBQUUsbUJBQW1CO2FBQzdCLENBQUMsQ0FBQztZQUNILFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEQsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN0RCxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBub2NrIGZyb20gJ25vY2snO1xuaW1wb3J0ICogYXMgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5cbmltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuXG5pbXBvcnQgeyBFdGh3IH0gZnJvbSAnLi4vLi4vc3JjL2luZGV4JztcbmltcG9ydCB7IG5vY2tFdGh3UmVjb3ZlcnkgfSBmcm9tICcuLi9saWIvcmVjb3Zlcnktbm9ja3MnO1xuXG5ub2NrLmRpc2FibGVOZXRDb25uZWN0KCk7XG5cbmNvbnN0IGJpdGdvOiBUZXN0Qml0R29BUEkgPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAndGVzdCcgfSk7XG5iaXRnby5zYWZlUmVnaXN0ZXIoJ2V0aHcnLCBFdGh3LmNyZWF0ZUluc3RhbmNlKTtcblxuZGVzY3JpYmUoJ0V0aGVyZXVtIHBvdycsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJhc2Vjb2luO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKCdldGh3Jyk7XG4gIH0pO1xuXG4gIGFmdGVyKGZ1bmN0aW9uICgpIHtcbiAgICBub2NrLmNsZWFuQWxsKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaW5zdGFudGlhdGUgdGhlIGNvaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYmFzZWNvaW4gPSBiaXRnby5jb2luKCdldGh3Jyk7XG4gICAgYmFzZWNvaW4uc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoRXRodyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdSZWNvdmVyIEV0aGVyZXVtIFBvVycsIGZ1bmN0aW9uICgpIHtcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcbiAgICBsZXQgcmVjb3ZlcnlQYXJhbXM7XG4gICAgYmVmb3JlKCgpID0+IHtcbiAgICAgIHJlY292ZXJ5UGFyYW1zID0ge1xuICAgICAgICB1c2VyS2V5OlxuICAgICAgICAgICd7XCJpdlwiOlwiK1RrbVQzR0o1bXNWV1FqQnJ0M2xzdz09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIlxcbicgK1xuICAgICAgICAgICc6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCJjQ0UyMGZHSW9icz1cIixcImN0XCI6XCJOVklkWUloOTFKM2FSSVxcbicgK1xuICAgICAgICAgICc4R0cwSkUzRGhYVzNBVW16Mkc1UnFNZWpkejErdDQvdm92SVA3bGxlZWdJN1ZZeVdpaUx2bE0wT0NGZjNFVnZWL1J5WHI4KzJ2c25cXG4nICtcbiAgICAgICAgICAnUTBWbjhjMkNWNUZSWjgwT2pHWXJXM0EvNlQvenBPejZFOENNdm5EKytpSXBlTzRyMmVaSmF2ZWpaeGR6bHhGMEJSejdWST1cIn0nLFxuICAgICAgICBiYWNrdXBLZXk6XG4gICAgICAgICAgJ3tcIml2XCI6XCJhc0IzNTZvZkM3blp0ZzROQnZRa2lRPT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiXFxuJyArXG4gICAgICAgICAgJzpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcIjFocjJIaEJiQklrPVwiLFwiY3RcIjpcIjhDWmM2dXB0K1hOT3RvXFxuJyArXG4gICAgICAgICAgJ0tERDM4VFVnM1pVanpXK0RyYVpsa2NrdTJiTnAwSlMyczFnL2lDNllUR1VHdFBveER4dW1EbFh3bFdReCs1V1BqWnU3OU04RENySVxcbicgK1xuICAgICAgICAgICd0OWFaYU92SGtHSDlhRnRNYmF2Rlg0MTlUY3J3RG1wVWVRRk4waFJrZnJJSFh5SE5iVHBHU1ZBakh2SE10ekRNYXcrQUNnPVwifScsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IFRlc3RCaXRHby5WMi5URVNUX1JFQ09WRVJZX1BBU1NDT0RFLFxuICAgICAgICB3YWxsZXRDb250cmFjdEFkZHJlc3M6ICcweDVkZjVhOTZiNDc4YmIxODA4MTQwZDg3MDcyMTQzZTYwMjYyZTg2NzAnLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiAnMHhhYzA1ZGE3ODQ2NDUyMGFhN2M5ZDRjMTliZDdhNDQwYjExMWIzMDU0JyxcbiAgICAgICAgcmVwbGF5UHJvdGVjdGlvbk9wdGlvbnM6IHtcbiAgICAgICAgICBjaGFpbjogMTAwMDEsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiBpbnZhbGlkIGdhc0xpbWl0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9ja0V0aHdSZWNvdmVyeShiaXRnbyk7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAucmVjb3Zlcih7XG4gICAgICAgICAgLi4ucmVjb3ZlcnlQYXJhbXMsXG4gICAgICAgICAgZ2FzTGltaXQ6IC00MDAwMDAsXG4gICAgICAgICAgZ2FzUHJpY2U6IDI1MDAwMDAwMDAwLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnR2FzIGxpbWl0IG11c3QgYmUgYmV0d2VlbiAzMDAwMCBhbmQgMjAwMDAwMDAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgZXRoZXJzY2FuIGVycnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBub2NrVW5zdWNjZXNzZnVsRXRoZXJzY2FuRGF0YTogYW55W10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIG1ldGhvZDogJ2V0aF9nZXRUcmFuc2FjdGlvbkNvdW50JyxcbiAgICAgICAgICAgIHBhcmFtczogWycweDc0YzIxMzdkNTRiMGZjOWY5MDdlMTNmMTRlMGRkMTg0ODVmZWU5MjQnLCAnbGF0ZXN0J10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgICAgcmVzdWx0OiAnMHgwJyxcbiAgICAgICAgICAgIGlkOiAwLFxuICAgICAgICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgbWV0aG9kOiAnZXRoX2dldEJhbGFuY2UnLFxuICAgICAgICAgICAgcGFyYW1zOiBbJzB4NzRjMjEzN2Q1NGIwZmM5ZjkwN2UxM2YxNGUwZGQxODQ4NWZlZTkyNCcsICdsYXRlc3QnXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICBjb2RlOiAtMzI2MDIsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgICAgJ2ludmFsaWQgYXJndW1lbnQgMDoganNvbjogY2Fubm90IHVubWFyc2hhbCBoZXggc3RyaW5nIG9mIG9kZCBsZW5ndGggaW50byBHbyB2YWx1ZSBvZiB0eXBlIGNvbW1vbi5BZGRyZXNzJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZDogMCxcbiAgICAgICAgICAgIGpzb25ycGM6ICcyLjAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgbm9ja0V0aHdSZWNvdmVyeShiaXRnbywgbm9ja1Vuc3VjY2Vzc2Z1bEV0aGVyc2NhbkRhdGEpO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnJlY292ZXIocmVjb3ZlcnlQYXJhbXMpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgICdFVEhXIGZ1bGwgbm9kZSBlcnJvcjogLTMyNjAyIC0gaW52YWxpZCBhcmd1bWVudCAwOiBqc29uOiBjYW5ub3QgdW5tYXJzaGFsIGhleCBzdHJpbmcgb2Ygb2RkIGxlbmd0aCBpbnRvIEdvIHZhbHVlIG9mIHR5cGUgY29tbW9uLkFkZHJlc3MnXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIGJhY2t1cCBrZXkgYWRkcmVzcyBoYXMgaW5zdWZmaWNpZW50IGJhbGFuY2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnN1ZmZpY2llbnRGZWVEYXRhOiBhbnlbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgbWV0aG9kOiAnZXRoX2dldFRyYW5zYWN0aW9uQ291bnQnLFxuICAgICAgICAgICAgcGFyYW1zOiBbJzB4NzRjMjEzN2Q1NGIwZmM5ZjkwN2UxM2YxNGUwZGQxODQ4NWZlZTkyNCcsICdsYXRlc3QnXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgICBpZDogMCxcbiAgICAgICAgICAgIGpzb25ycGM6ICcyLjAnLFxuICAgICAgICAgICAgcmVzdWx0OiAnMHgwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBtZXRob2Q6ICdldGhfZ2V0QmFsYW5jZScsXG4gICAgICAgICAgICBwYXJhbXM6IFsnMHg3NGMyMTM3ZDU0YjBmYzlmOTA3ZTEzZjE0ZTBkZDE4NDg1ZmVlOTI0JywgJ2xhdGVzdCddLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICAgIGlkOiAwLFxuICAgICAgICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgICAgICAgICByZXN1bHQ6ICcweDRkMicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBub2NrRXRod1JlY292ZXJ5KGJpdGdvLCBpbnN1ZmZpY2llbnRGZWVEYXRhKTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC5yZWNvdmVyKHtcbiAgICAgICAgICAuLi5yZWNvdmVyeVBhcmFtcyxcbiAgICAgICAgICBnYXNMaW1pdDogMzAwMDAwLFxuICAgICAgICAgIGdhc1ByaWNlOiAxMDAwMDAwMDAwLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICAnQmFja3VwIGtleSBhZGRyZXNzIDB4NzRjMjEzN2Q1NGIwZmM5ZjkwN2UxM2YxNGUwZGQxODQ4NWZlZTkyNCBoYXMgYmFsYW5jZSAwLjAwMDAwMTIzNCBHd2VpLicgK1xuICAgICAgICAgICAgJ1RoaXMgYWRkcmVzcyBtdXN0IGhhdmUgYSBiYWxhbmNlIG9mIGF0IGxlYXN0IDMwMDAwMCBHd2VpIHRvIHBlcmZvcm0gcmVjb3Zlcmllcy4gVHJ5IHNlbmRpbmcgc29tZSBFVEggdG8gdGhpcyBhZGRyZXNzIHRoZW4gcmV0cnkuJ1xuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiBpbnZhbGlkIGdhc1ByaWNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9ja0V0aHdSZWNvdmVyeShiaXRnbyk7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAucmVjb3Zlcih7XG4gICAgICAgICAgLi4ucmVjb3ZlcnlQYXJhbXMsXG4gICAgICAgICAgZ2FzTGltaXQ6IDQwMDAwMCxcbiAgICAgICAgICBnYXNQcmljZTogMjUwMDAwMCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0dhcyBwcmljZSBtdXN0IGJlIGJldHdlZW4gMTAwMDAwMDAwMCBhbmQgMjUwMDAwMDAwMDAwMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgY29uc3RydWN0IGEgdHggd2l0aCBjdXN0b20gZ2FzIHByaWNlIGFuZCBsaW1pdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2tFdGh3UmVjb3ZlcnkoYml0Z28pO1xuICAgICAgY29uc3QgcmVjb3ZlcnkgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHtcbiAgICAgICAgLi4ucmVjb3ZlcnlQYXJhbXMsXG4gICAgICAgIGdhc0xpbWl0OiA0MDAwMDAsXG4gICAgICAgIGdhc1ByaWNlOiAxMDAwMDAwMDAwLFxuICAgICAgfSk7XG4gICAgICAvLyBpZCBhbmQgdHggd2lsbCBhbHdheXMgYmUgZGlmZmVyZW50IGJlY2F1c2Ugb2YgZXhwaXJlVGltZVxuICAgICAgc2hvdWxkLmV4aXN0KHJlY292ZXJ5KTtcbiAgICAgIHJlY292ZXJ5LnNob3VsZC5oYXZlLnByb3BlcnR5KCdpZCcpO1xuICAgICAgcmVjb3Zlcnkuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3R4Jyk7XG4gICAgICBhd2FpdCBjaGVja1JlY292ZXJ5VHhFeHBsYW5hdGlvbihyZWNvdmVyeS50eCwgMjIwMDAwMDAwMDAwMDAwMDAwMCwgcmVjb3ZlcnlQYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnN0cnVjdCBhIHJlY292ZXJ5IHRyYW5zYWN0aW9uIHdpdGhvdXQgQml0R28nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrRXRod1JlY292ZXJ5KGJpdGdvKTtcbiAgICAgIGNvbnN0IHJlY292ZXJ5ID0gYXdhaXQgYmFzZWNvaW4ucmVjb3ZlcihyZWNvdmVyeVBhcmFtcyk7XG4gICAgICAvLyBpZCBhbmQgdHggd2lsbCBhbHdheXMgYmUgZGlmZmVyZW50IGJlY2F1c2Ugb2YgZXhwaXJlVGltZVxuICAgICAgc2hvdWxkLmV4aXN0KHJlY292ZXJ5KTtcbiAgICAgIHJlY292ZXJ5LnNob3VsZC5oYXZlLnByb3BlcnR5KCdpZCcpO1xuICAgICAgcmVjb3Zlcnkuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3R4Jyk7XG4gICAgICBhd2FpdCBjaGVja1JlY292ZXJ5VHhFeHBsYW5hdGlvbihyZWNvdmVyeS50eCwgMjIwMDAwMDAwMDAwMDAwMDAwMCwgcmVjb3ZlcnlQYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnN0cnVjdCBhIHJlY292ZXJ5IHRyYW5zYWN0aW9uIHdpdGhvdXQgQml0R28gYW5kIHdpdGggS1JTJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9ja0V0aHdSZWNvdmVyeShiaXRnbyk7XG4gICAgICBjb25zdCByZWNvdmVyeSA9IGF3YWl0IGJhc2Vjb2luLnJlY292ZXIoe1xuICAgICAgICAuLi5yZWNvdmVyeVBhcmFtcyxcbiAgICAgICAgYmFja3VwS2V5OlxuICAgICAgICAgICd4cHViNjYxTXlNd0FxUmJjR3NDTmlHNEJ6YnhMbVhuSkZvNEs1Z1ZTRTJiOUF4dWZBdHB1VHVuMVNZd2c5VXlrcXFmNERyS3JEWjZLcVBtOWVodGhXYkNtYTdwbmFNcnRYWTExblk3TWVGYkVEUG0nLFxuICAgICAgICBrcnNQcm92aWRlcjogJ2tleXRlcm5hbCcsXG4gICAgICB9KTtcblxuICAgICAgLy8gaWQgYW5kIHR4IHdpbGwgYWx3YXlzIGJlIGRpZmZlcmVudCBiZWNhdXNlIG9mIGV4cGlyZVRpbWVcbiAgICAgIHNob3VsZC5leGlzdChyZWNvdmVyeSk7XG4gICAgICByZWNvdmVyeS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaWQnKTtcbiAgICAgIHJlY292ZXJ5LnNob3VsZC5oYXZlLnByb3BlcnR5KCd0eCcpO1xuICAgICAgYXdhaXQgY2hlY2tSZWNvdmVyeVR4RXhwbGFuYXRpb24ocmVjb3ZlcnkudHgsIDIyMDAwMDAwMDAwMDAwMDAwMDAsIHJlY292ZXJ5UGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBlcnJvciB3aGVuIHRoZSBiYWNrdXAga2V5IGlzIHVuZnVuZGVkIChjYW5ub3QgcGF5IGdhcyknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrRXRod1JlY292ZXJ5KGJpdGdvKTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC5yZWNvdmVyKHtcbiAgICAgICAgICB1c2VyS2V5OlxuICAgICAgICAgICAgJ3tcIml2XCI6XCJWTnZHNnQzZkhmeE1jZnZOdWFmWVlBPT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiXFxuJyArXG4gICAgICAgICAgICAnOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwibWM5cENrM0g0M3c9XCIsXCJjdFwiOlwiUWU0WjFldmFYY3JPTUNcXG4nICtcbiAgICAgICAgICAgICdjUS9YTVZWQk85TS85OUQxUVE2THhrRzh6M2ZRdHd3T1ZYTTMvNmRvTnJyaXByVXFzK2FkcEZDOTNLUmNBYURyb0wxRTZvMTdKMmtcXG4nICtcbiAgICAgICAgICAgICdtY3BYUmQyQ3VYUkZPUlptWi82UUJmaktmQ0ozYXEwa0VrRFZ2MzdnWk5WVDNhTnRHa05TUWRDRVdLUUx3ZDErK3I1QWtBPVwifVxcbicsXG4gICAgICAgICAgYmFja3VwS2V5OlxuICAgICAgICAgICAgJ3tcIml2XCI6XCJFakQ3eDBPSlg5a05NL0MzeUVEdnlRPT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiXFxuJyArXG4gICAgICAgICAgICAnOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiTmE5TnZSUmUzbjg9XCIsXCJjdFwiOlwiQi9BdFNMSG9sc2ROTHJcXG4nICtcbiAgICAgICAgICAgICc0RGxpajRrUTBFNk55VVVzNndvNlQySHRQREFQTzBoeWhQUGJoMU9BWXFJUzdWbEw5eG1KUkZDMnpQeHdSSnZ6ZjZPV0MvbTQ4SFhcXG4nICtcbiAgICAgICAgICAgICd2Z0xvWFlnYWhBcmhhbHpKVmxSeGNYVXo0SE9ob3pSV2Z2L2VLM3Q1SEpmbSsyNStXQk9pVzhZZ1NFN2hWRVlUYmVCUkQ0PVwifScsXG4gICAgICAgICAgd2FsbGV0Q29udHJhY3RBZGRyZXNzOiAnMHgyMmZmNzQzMjE2YjU4YWViM2VmYzQ2OTg1NDA2YjUwMTEyZTllMTc2JyxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBUZXN0Qml0R28uVjIuVEVTVF9SRUNPVkVSWV9QQVNTQ09ERSxcbiAgICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiAnMHhhYzA1ZGE3ODQ2NDUyMGFhN2M5ZDRjMTliZDdhNDQwYjExMWIzMDU0JyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgJ0JhY2t1cCBrZXkgYWRkcmVzcyAweGJhNmQ5ZDgyY2YyOTIwYzU0NGI4MzRiNzJmNGM2ZDExYTNlZjNkZTYgaGFzIGJhbGFuY2UgMCBHd2VpLlRoaXMgYWRkcmVzcyBtdXN0IGhhdmUgYSBiYWxhbmNlIG9mIGF0IGxlYXN0IDEwMDAwMDAwIEd3ZWkgdG8gcGVyZm9ybSByZWNvdmVyaWVzLiBUcnkgc2VuZGluZyBzb21lIEVUSCB0byB0aGlzIGFkZHJlc3MgdGhlbiByZXRyeS4nXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGFuIEVUSCB1bnNpZ25lZCBzd2VlcCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2tFdGh3UmVjb3ZlcnkoYml0Z28pO1xuXG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLnJlY292ZXIoe1xuICAgICAgICB1c2VyS2V5OlxuICAgICAgICAgICd4cHViNjYxTXlNd0FxUmJjRlhEY1dEMnZ4dWViY1QxWnBURjRWa2U2cW1NVzh5emRkd05ZcEFQanZZRUVMNWpMZnlZWFcyZnV4dEF4WThUZ2pQVUpMY2YxQzhxejlONlZnWnhBcktYNEV3QjhySDUnLFxuICAgICAgICBiYWNrdXBLZXk6XG4gICAgICAgICAgJ3hwdWI2NjFNeU13QXFSYmNHaFNhWGlrcHVUQzlLVTg4WHg5THJqS1N3MUpLc3ZYTmdhYnBUZGdqeTdMU292aDlaSGhjcWhBSFF1N3V0aHU3Rmd1TkdkY0M0YVhUS0s1Z3FUY1BlNFd2TFlSYkNTRycsXG4gICAgICAgIHdhbGxldENvbnRyYWN0QWRkcmVzczogVGVzdEJpdEdvLlYyLlRFU1RfRVRIX1dBTExFVF9GSVJTVF9BRERSRVNTLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBUZXN0Qml0R28uVjIuVEVTVF9FUkMyMF9UT0tFTl9SRUNJUElFTlQsXG4gICAgICAgIGdhc1ByaWNlOiAnMjAwMDAwMDAwMDAnLFxuICAgICAgICBnYXNMaW1pdDogJzUwMDAwMCcsXG4gICAgICB9KTtcbiAgICAgIHNob3VsZC5leGlzdCh0cmFuc2FjdGlvbik7XG4gICAgICB0cmFuc2FjdGlvbi5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHgnKTtcbiAgICAgIHRyYW5zYWN0aW9uLnNob3VsZC5oYXZlLnByb3BlcnR5KCdjb250cmFjdFNlcXVlbmNlSWQnKTtcbiAgICAgIHRyYW5zYWN0aW9uLnNob3VsZC5oYXZlLnByb3BlcnR5KCdleHBpcmVUaW1lJyk7XG4gICAgICB0cmFuc2FjdGlvbi5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZ2FzTGltaXQnKTtcbiAgICAgIHRyYW5zYWN0aW9uLmdhc0xpbWl0LnNob3VsZC5lcXVhbCgnNTAwMDAwJyk7XG4gICAgICB0cmFuc2FjdGlvbi5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZ2FzUHJpY2UnKTtcbiAgICAgIHRyYW5zYWN0aW9uLmdhc1ByaWNlLnNob3VsZC5lcXVhbCgnMjAwMDAwMDAwMDAnKTtcbiAgICAgIHRyYW5zYWN0aW9uLnNob3VsZC5oYXZlLnByb3BlcnR5KCd3YWxsZXRDb250cmFjdEFkZHJlc3MnKTtcbiAgICAgIHRyYW5zYWN0aW9uLndhbGxldENvbnRyYWN0QWRkcmVzcy5zaG91bGQuZXF1YWwoVGVzdEJpdEdvLlYyLlRFU1RfRVRIX1dBTExFVF9GSVJTVF9BRERSRVNTKTtcbiAgICAgIHRyYW5zYWN0aW9uLnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnQnKTtcbiAgICAgIHRyYW5zYWN0aW9uLnJlY2lwaWVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnYWRkcmVzcycpO1xuICAgICAgdHJhbnNhY3Rpb24ucmVjaXBpZW50LmFkZHJlc3Muc2hvdWxkLmVxdWFsKFRlc3RCaXRHby5WMi5URVNUX0VSQzIwX1RPS0VOX1JFQ0lQSUVOVCk7XG4gICAgICB0cmFuc2FjdGlvbi5yZWNpcGllbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2Ftb3VudCcpO1xuICAgICAgdHJhbnNhY3Rpb24ucmVjaXBpZW50LmFtb3VudC5zaG91bGQuZXF1YWwoJzk5OTk5OTk5OTk5OTk5OTk5MjgnKTtcbiAgICAgIGNoZWNrUmVjb3ZlcnlUeEV4cGxhbmF0aW9uKHRyYW5zYWN0aW9uLnR4LCA5OTk5OTk5OTk5OTk5OTk5OTI4LCBUZXN0Qml0R28uVjIuVEVTVF9FUkMyMF9UT0tFTl9SRUNJUElFTlQpO1xuICAgIH0pO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gY2hlY2tSZWNvdmVyeVR4RXhwbGFuYXRpb24odHgsIHJlY292ZXJ5QW1vdW50LCByZWNvdmVyeURlc3RpbmF0aW9uKSB7XG4gICAgICBjb25zdCBleHBsYW5hdGlvbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiAnMHgnICsgdHgsIGZlZUluZm86IHsgZmVlOiAxIH0gfSk7XG4gICAgICBleHBsYW5hdGlvbi5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnb3V0cHV0cycpO1xuICAgICAgZXhwbGFuYXRpb24ub3V0cHV0cy5zaG91bGQuY29udGFpbkVxbCh7XG4gICAgICAgIGFtb3VudDogcmVjb3ZlcnlBbW91bnQudG9GaXhlZCgpLFxuICAgICAgICBhZGRyZXNzOiByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgfSk7XG4gICAgICBleHBsYW5hdGlvbi5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnY2hhbmdlT3V0cHV0cycsIFtdKTtcbiAgICAgIGV4cGxhbmF0aW9uLnNob3VsZC5oYXZlLnByb3BlcnR5KCdjaGFuZ2VBbW91bnQnLCAnMCcpO1xuICAgICAgZXhwbGFuYXRpb24uc2hvdWxkLmhhdmUucHJvcGVydHkoJ2ZlZScsIHsgZmVlOiAxIH0pO1xuICAgIH1cbiAgfSk7XG59KTtcbiJdfQ==
|