@bitgo-beta/sdk-coin-dot 2.2.8-beta.132 → 2.2.8-beta.1321
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/src/dot.d.ts +8 -12
- package/dist/src/dot.d.ts.map +1 -1
- package/dist/src/dot.js +55 -41
- package/dist/src/index.js +6 -2
- package/dist/src/lib/addressInitializationBuilder.js +8 -10
- package/dist/src/lib/batchTransactionBuilder.d.ts +1 -0
- package/dist/src/lib/batchTransactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/batchTransactionBuilder.js +21 -12
- package/dist/src/lib/claimBuilder.js +4 -6
- package/dist/src/lib/iface.d.ts +16 -13
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +5 -5
- package/dist/src/lib/iface_utils.js +8 -9
- package/dist/src/lib/index.js +23 -9
- package/dist/src/lib/keyPair.d.ts +7 -0
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +51 -4
- package/dist/src/lib/nativeTransferBuilder.js +10 -12
- package/dist/src/lib/proxyBuilder.js +6 -8
- package/dist/src/lib/singletonRegistry.js +2 -2
- package/dist/src/lib/stakingBuilder.js +6 -8
- package/dist/src/lib/transaction.d.ts +0 -1
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +72 -52
- package/dist/src/lib/transactionBuilder.d.ts +0 -1
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +30 -16
- package/dist/src/lib/transactionBuilderFactory.js +3 -4
- package/dist/src/lib/txnSchema.js +3 -3
- package/dist/src/lib/unnominateBuilder.js +4 -6
- package/dist/src/lib/unstakeBuilder.js +4 -6
- package/dist/src/lib/utils.d.ts +10 -2
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +67 -34
- package/dist/src/lib/withdrawUnstakedBuilder.js +4 -6
- package/dist/src/resources/index.d.ts +2 -0
- package/dist/src/resources/index.d.ts.map +1 -1
- package/dist/src/resources/index.js +8 -2
- package/dist/src/resources/polkadotAssetHub.d.ts +2 -0
- package/dist/src/resources/polkadotAssetHub.d.ts.map +1 -0
- package/dist/src/resources/polkadotAssetHub.js +5 -0
- package/dist/src/resources/westendAssetHub.d.ts +2 -0
- package/dist/src/resources/westendAssetHub.d.ts.map +1 -0
- package/dist/src/resources/westendAssetHub.js +5 -0
- package/dist/src/tdot.js +1 -1
- package/dist/test/fixtures.d.ts +283 -0
- package/dist/test/fixtures.d.ts.map +1 -0
- package/dist/test/fixtures.js +439 -0
- package/dist/test/resources/index.d.ts +141 -0
- package/dist/test/resources/index.d.ts.map +1 -0
- package/dist/test/resources/index.js +157 -0
- package/dist/test/resources/materialData.json +8 -0
- package/dist/test/resources/materialDataModified.json +8 -0
- package/dist/test/resources/testnet.d.ts +2 -0
- package/dist/test/resources/testnet.d.ts.map +1 -0
- package/dist/test/resources/testnet.js +5 -0
- package/dist/test/unit/address.d.ts +2 -0
- package/dist/test/unit/address.d.ts.map +1 -0
- package/dist/test/unit/address.js +45 -0
- package/dist/test/unit/dot.d.ts +2 -0
- package/dist/test/unit/dot.d.ts.map +1 -0
- package/dist/test/unit/dot.js +690 -0
- package/dist/test/unit/keypair.d.ts +2 -0
- package/dist/test/unit/keypair.d.ts.map +1 -0
- package/dist/test/unit/keypair.js +111 -0
- package/dist/test/unit/transaction.d.ts +2 -0
- package/dist/test/unit/transaction.d.ts.map +1 -0
- package/dist/test/unit/transaction.js +269 -0
- package/dist/test/unit/transactionBuilder/addressInitializationBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/addressInitializationBuilder.js +265 -0
- package/dist/test/unit/transactionBuilder/base.d.ts +8 -0
- package/dist/test/unit/transactionBuilder/base.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/base.js +233 -0
- package/dist/test/unit/transactionBuilder/batchTransactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/batchTransactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/batchTransactionBuilder.js +521 -0
- package/dist/test/unit/transactionBuilder/claimBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/claimBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/claimBuilder.js +129 -0
- package/dist/test/unit/transactionBuilder/proxyBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/proxyBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/proxyBuilder.js +88 -0
- package/dist/test/unit/transactionBuilder/singeltonRegistry.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/singeltonRegistry.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/singeltonRegistry.js +59 -0
- package/dist/test/unit/transactionBuilder/stakingBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/stakingBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/stakingBuilder.js +235 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +107 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.js +437 -0
- package/dist/test/unit/transactionBuilder/unnominateBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/unnominateBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/unnominateBuilder.js +97 -0
- package/dist/test/unit/transactionBuilder/unstakeBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/unstakeBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/unstakeBuilder.js +116 -0
- package/dist/test/unit/transactionBuilder/withdrawUnstakedBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/withdrawUnstakedBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/withdrawUnstakedBuilder.js +115 -0
- package/dist/test/unit/utils.d.ts +2 -0
- package/dist/test/unit/utils.d.ts.map +1 -0
- package/dist/test/unit/utils.js +117 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +20 -16
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -400
|
@@ -0,0 +1,521 @@
|
|
|
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
|
+
const assert_1 = __importDefault(require("assert"));
|
|
7
|
+
const should_1 = __importDefault(require("should"));
|
|
8
|
+
const sinon_1 = require("sinon");
|
|
9
|
+
const src_1 = require("../../../src");
|
|
10
|
+
const iface_1 = require("../../../src/lib/iface");
|
|
11
|
+
const utils_1 = __importDefault(require("../../../src/lib/utils"));
|
|
12
|
+
const resources_1 = require("../../resources");
|
|
13
|
+
const base_1 = require("./base");
|
|
14
|
+
describe('Dot Batch Transaction Builder', () => {
|
|
15
|
+
let builder;
|
|
16
|
+
describe('setter validation', () => {
|
|
17
|
+
before(function () {
|
|
18
|
+
builder = new src_1.BatchTransactionBuilder((0, base_1.buildTestConfig)());
|
|
19
|
+
});
|
|
20
|
+
it('should validate list of calls', () => {
|
|
21
|
+
const call = 'invalidUnsignedTransaction';
|
|
22
|
+
const spyValidateCalls = (0, sinon_1.spy)(builder, 'validateCalls');
|
|
23
|
+
assert_1.default.throws(() => builder.calls([call]), (e) => e.message === `call in string format must be hex format of a method and its arguments`);
|
|
24
|
+
should_1.default.doesNotThrow(() => builder.calls(resources_1.rawTx.pureProxy.batch));
|
|
25
|
+
sinon_1.assert.calledTwice(spyValidateCalls);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
describe('build batch transaction', function () {
|
|
29
|
+
const sender = resources_1.accounts.account1;
|
|
30
|
+
const referenceBlock = '0x462ab5246361febb9294ffa41dd099edddec30a205ea15fbd247abb0ddbabd51';
|
|
31
|
+
const genesisHash = '0x67f9723393ef76214df0118c34bbbd3dbebc8ed46a10973a8c969d48fe7598c9';
|
|
32
|
+
beforeEach(() => {
|
|
33
|
+
const config = (0, base_1.buildTestConfig)();
|
|
34
|
+
builder = new src_1.BatchTransactionBuilder(config).material(utils_1.default.getMaterial(config));
|
|
35
|
+
});
|
|
36
|
+
describe('signed', function () {
|
|
37
|
+
it('should build a signed batch transaction', async () => {
|
|
38
|
+
builder
|
|
39
|
+
.calls(resources_1.rawTx.pureProxy.batch)
|
|
40
|
+
.sender({ address: sender.address })
|
|
41
|
+
.validity({ firstValid: 9279281, maxDuration: 64 })
|
|
42
|
+
.referenceBlock(referenceBlock)
|
|
43
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 0 })
|
|
44
|
+
.fee({ amount: 0, type: 'tip' })
|
|
45
|
+
.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
|
|
46
|
+
const tx = await builder.build();
|
|
47
|
+
const txJson = tx.toJson();
|
|
48
|
+
should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.pureProxy.batch.length);
|
|
49
|
+
should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.pureProxy.batch[0].slice(0, 6));
|
|
50
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.proxy_type, iface_1.ProxyType.ANY);
|
|
51
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.delay, 0);
|
|
52
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.index, 0);
|
|
53
|
+
should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.pureProxy.batch[0].slice(0, 6));
|
|
54
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.proxy_type, iface_1.ProxyType.ANY);
|
|
55
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.delay, 0);
|
|
56
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.index, 1);
|
|
57
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
58
|
+
should_1.default.deepEqual(txJson.blockNumber, 9279281);
|
|
59
|
+
should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
|
|
60
|
+
should_1.default.deepEqual(txJson.genesisHash, genesisHash);
|
|
61
|
+
should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
|
|
62
|
+
should_1.default.deepEqual(txJson.nonce, 0);
|
|
63
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
64
|
+
should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
|
|
65
|
+
should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
|
|
66
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
67
|
+
const txHex = tx.toBroadcastFormat();
|
|
68
|
+
should_1.default.deepEqual(resources_1.rawTx.batch.twoAddPureProxies.signed, txHex);
|
|
69
|
+
});
|
|
70
|
+
it('should build a signed batch all transaction', async () => {
|
|
71
|
+
builder
|
|
72
|
+
.atomic(true)
|
|
73
|
+
.calls(resources_1.rawTx.pureProxy.batch)
|
|
74
|
+
.sender({ address: sender.address })
|
|
75
|
+
.validity({ firstValid: 9279281, maxDuration: 64 })
|
|
76
|
+
.referenceBlock(referenceBlock)
|
|
77
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 0 })
|
|
78
|
+
.fee({ amount: 0, type: 'tip' })
|
|
79
|
+
.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
|
|
80
|
+
const tx = await builder.build();
|
|
81
|
+
const txJson = tx.toJson();
|
|
82
|
+
should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.pureProxy.batch.length);
|
|
83
|
+
should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.pureProxy.batch[0].slice(0, 6));
|
|
84
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.proxy_type, iface_1.ProxyType.ANY);
|
|
85
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.delay, 0);
|
|
86
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.index, 0);
|
|
87
|
+
should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.pureProxy.batch[0].slice(0, 6));
|
|
88
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.proxy_type, iface_1.ProxyType.ANY);
|
|
89
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.delay, 0);
|
|
90
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.index, 1);
|
|
91
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
92
|
+
should_1.default.deepEqual(txJson.blockNumber, 9279281);
|
|
93
|
+
should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
|
|
94
|
+
should_1.default.deepEqual(txJson.genesisHash, genesisHash);
|
|
95
|
+
should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
|
|
96
|
+
should_1.default.deepEqual(txJson.nonce, 0);
|
|
97
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
98
|
+
should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
|
|
99
|
+
should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
|
|
100
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
101
|
+
const txHex = tx.toBroadcastFormat();
|
|
102
|
+
should_1.default.deepEqual(resources_1.rawTx.batchAll.twoAddPureProxies.signed, txHex);
|
|
103
|
+
});
|
|
104
|
+
it('should build a signed staking batch all transaction', async () => {
|
|
105
|
+
builder
|
|
106
|
+
.atomic(true)
|
|
107
|
+
.calls(resources_1.rawTx.stake.batchAll.batch)
|
|
108
|
+
.sender({ address: sender.address })
|
|
109
|
+
.validity({ firstValid: 9266787, maxDuration: 64 })
|
|
110
|
+
.referenceBlock(referenceBlock)
|
|
111
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 0 })
|
|
112
|
+
.fee({ amount: 0, type: 'tip' })
|
|
113
|
+
.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
|
|
114
|
+
const tx = await builder.build();
|
|
115
|
+
const txJson = tx.toJson();
|
|
116
|
+
should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.stake.batchAll.batch.length);
|
|
117
|
+
should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.stake.batchAll.batch[0].slice(0, 6));
|
|
118
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.value, 500000000000);
|
|
119
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.payee, { staked: null });
|
|
120
|
+
should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.stake.batchAll.batch[1].slice(0, 6));
|
|
121
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.delegate, { id: resources_1.accounts.stakingProxy.address });
|
|
122
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.proxy_type, iface_1.ProxyType.STAKING);
|
|
123
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.delay, 0);
|
|
124
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
125
|
+
should_1.default.deepEqual(txJson.blockNumber, 9266787);
|
|
126
|
+
should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
|
|
127
|
+
should_1.default.deepEqual(txJson.genesisHash, genesisHash);
|
|
128
|
+
should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
|
|
129
|
+
should_1.default.deepEqual(txJson.nonce, 0);
|
|
130
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
131
|
+
should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
|
|
132
|
+
should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
|
|
133
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
134
|
+
const txHex = tx.toBroadcastFormat();
|
|
135
|
+
should_1.default.deepEqual(resources_1.rawTx.stake.batchAll.signed, txHex);
|
|
136
|
+
});
|
|
137
|
+
it('should build a signed unstaking batch all transaction', async () => {
|
|
138
|
+
builder
|
|
139
|
+
.atomic(true)
|
|
140
|
+
.calls(resources_1.rawTx.unstake.batchAll.batch)
|
|
141
|
+
.sender({ address: sender.address })
|
|
142
|
+
.validity({ firstValid: 9266787, maxDuration: 64 })
|
|
143
|
+
.referenceBlock(referenceBlock)
|
|
144
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 0 })
|
|
145
|
+
.fee({ amount: 0, type: 'tip' })
|
|
146
|
+
.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
|
|
147
|
+
const tx = await builder.build();
|
|
148
|
+
const txJson = tx.toJson();
|
|
149
|
+
should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.unstake.batchAll.batch.length);
|
|
150
|
+
should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.unstake.batchAll.batch[0].slice(0, 6));
|
|
151
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.delegate, { id: resources_1.accounts.stakingProxy.address });
|
|
152
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.proxy_type, iface_1.ProxyType.STAKING);
|
|
153
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.delay, 0);
|
|
154
|
+
should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.unstake.batchAll.batch[1].slice(0, 6));
|
|
155
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args, {});
|
|
156
|
+
should_1.default.deepEqual(txJson.batchCalls[2].callIndex, resources_1.rawTx.unstake.batchAll.batch[2].slice(0, 6));
|
|
157
|
+
should_1.default.deepEqual(txJson.batchCalls[2].args?.value, 500000000000);
|
|
158
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
159
|
+
should_1.default.deepEqual(txJson.blockNumber, 9266787);
|
|
160
|
+
should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
|
|
161
|
+
should_1.default.deepEqual(txJson.genesisHash, genesisHash);
|
|
162
|
+
should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
|
|
163
|
+
should_1.default.deepEqual(txJson.nonce, 0);
|
|
164
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
165
|
+
should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
|
|
166
|
+
should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
|
|
167
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
168
|
+
const txHex = tx.toBroadcastFormat();
|
|
169
|
+
should_1.default.deepEqual(resources_1.rawTx.unstake.batchAll.signed, txHex);
|
|
170
|
+
});
|
|
171
|
+
describe('from raw', () => {
|
|
172
|
+
it('should build a batch all from a raw signed tx', async () => {
|
|
173
|
+
builder.from(resources_1.rawTx.batchAll.twoAddPureProxies.signed);
|
|
174
|
+
builder.validity({ firstValid: 9279281, maxDuration: 64 }).referenceBlock(referenceBlock);
|
|
175
|
+
const tx = await builder.build();
|
|
176
|
+
const txJson = tx.toJson();
|
|
177
|
+
// test the call items
|
|
178
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
179
|
+
should_1.default.deepEqual(txJson.batchCalls.length, 2);
|
|
180
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.proxy_type, iface_1.ProxyType.ANY);
|
|
181
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.delay, 0);
|
|
182
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.index, 0);
|
|
183
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.proxy_type, iface_1.ProxyType.ANY);
|
|
184
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.delay, 0);
|
|
185
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.index, 1);
|
|
186
|
+
should_1.default.deepEqual(txJson.blockNumber, 9279281);
|
|
187
|
+
should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
|
|
188
|
+
should_1.default.deepEqual(txJson.genesisHash, genesisHash);
|
|
189
|
+
should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
|
|
190
|
+
should_1.default.deepEqual(txJson.nonce, 0);
|
|
191
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
192
|
+
should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
|
|
193
|
+
should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
|
|
194
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
195
|
+
const txHex = tx.toBroadcastFormat();
|
|
196
|
+
should_1.default.deepEqual(resources_1.rawTx.batchAll.twoAddPureProxies.signed, txHex);
|
|
197
|
+
});
|
|
198
|
+
it('should build a batch all from a raw signed staking tx', async () => {
|
|
199
|
+
builder.from(resources_1.rawTx.stake.batchAll.signed);
|
|
200
|
+
builder.validity({ firstValid: 9266787, maxDuration: 64 }).referenceBlock(referenceBlock);
|
|
201
|
+
const tx = await builder.build();
|
|
202
|
+
const txJson = tx.toJson();
|
|
203
|
+
// test the call items
|
|
204
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
205
|
+
should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.stake.batchAll.batch.length);
|
|
206
|
+
should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.stake.batchAll.batch[0].slice(0, 6));
|
|
207
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.value, 500000000000);
|
|
208
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.payee, { staked: null });
|
|
209
|
+
should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.stake.batchAll.batch[1].slice(0, 6));
|
|
210
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.delegate, { id: resources_1.accounts.stakingProxy.address });
|
|
211
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.proxy_type, iface_1.ProxyType.STAKING);
|
|
212
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.delay, 0);
|
|
213
|
+
should_1.default.deepEqual(txJson.blockNumber, 9266787);
|
|
214
|
+
should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
|
|
215
|
+
should_1.default.deepEqual(txJson.genesisHash, genesisHash);
|
|
216
|
+
should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
|
|
217
|
+
should_1.default.deepEqual(txJson.nonce, 0);
|
|
218
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
219
|
+
should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
|
|
220
|
+
should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
|
|
221
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
222
|
+
const txHex = tx.toBroadcastFormat();
|
|
223
|
+
should_1.default.deepEqual(resources_1.rawTx.stake.batchAll.signed, txHex);
|
|
224
|
+
});
|
|
225
|
+
it('should build a batch all from a raw signed unstaking tx', async () => {
|
|
226
|
+
builder.from(resources_1.rawTx.unstake.batchAll.signed);
|
|
227
|
+
builder.validity({ firstValid: 9266787, maxDuration: 64 }).referenceBlock(referenceBlock);
|
|
228
|
+
const tx = await builder.build();
|
|
229
|
+
const txJson = tx.toJson();
|
|
230
|
+
// test the call items
|
|
231
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
232
|
+
should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.unstake.batchAll.batch.length);
|
|
233
|
+
should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.unstake.batchAll.batch[0].slice(0, 6));
|
|
234
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.delegate, { id: resources_1.accounts.stakingProxy.address });
|
|
235
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.proxy_type, iface_1.ProxyType.STAKING);
|
|
236
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.delay, 0);
|
|
237
|
+
should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.unstake.batchAll.batch[1].slice(0, 6));
|
|
238
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args, {});
|
|
239
|
+
should_1.default.deepEqual(txJson.batchCalls[2].callIndex, resources_1.rawTx.unstake.batchAll.batch[2].slice(0, 6));
|
|
240
|
+
should_1.default.deepEqual(txJson.batchCalls[2].args?.value, 500000000000);
|
|
241
|
+
should_1.default.deepEqual(txJson.blockNumber, 9266787);
|
|
242
|
+
should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
|
|
243
|
+
should_1.default.deepEqual(txJson.genesisHash, genesisHash);
|
|
244
|
+
should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
|
|
245
|
+
should_1.default.deepEqual(txJson.nonce, 0);
|
|
246
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
247
|
+
should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
|
|
248
|
+
should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
|
|
249
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
250
|
+
const txHex = tx.toBroadcastFormat();
|
|
251
|
+
should_1.default.deepEqual(resources_1.rawTx.unstake.batchAll.signed, txHex);
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
describe('unsigned', function () {
|
|
256
|
+
it('should build an unsigned batch transaction', async () => {
|
|
257
|
+
builder
|
|
258
|
+
.calls(resources_1.rawTx.pureProxy.batch)
|
|
259
|
+
.sender({ address: sender.address })
|
|
260
|
+
.validity({ firstValid: 9266787, maxDuration: 64 })
|
|
261
|
+
.referenceBlock(referenceBlock)
|
|
262
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
|
|
263
|
+
.fee({ amount: 0, type: 'tip' });
|
|
264
|
+
const tx = await builder.build();
|
|
265
|
+
const txJson = tx.toJson();
|
|
266
|
+
should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.pureProxy.batch.length);
|
|
267
|
+
should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.pureProxy.batch[0].slice(0, 6));
|
|
268
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.proxy_type, iface_1.ProxyType.ANY);
|
|
269
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.delay, 0);
|
|
270
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.index, 0);
|
|
271
|
+
should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.pureProxy.batch[0].slice(0, 6));
|
|
272
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.proxy_type, iface_1.ProxyType.ANY);
|
|
273
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.delay, 0);
|
|
274
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.index, 1);
|
|
275
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
276
|
+
should_1.default.deepEqual(txJson.blockNumber, 9266787);
|
|
277
|
+
should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
|
|
278
|
+
should_1.default.deepEqual(txJson.genesisHash, genesisHash);
|
|
279
|
+
should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
|
|
280
|
+
should_1.default.deepEqual(txJson.nonce, 200);
|
|
281
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
282
|
+
should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
|
|
283
|
+
should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
|
|
284
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
285
|
+
const txHex = tx.toBroadcastFormat();
|
|
286
|
+
should_1.default.deepEqual(resources_1.rawTx.batch.twoAddPureProxies.unsigned, txHex);
|
|
287
|
+
});
|
|
288
|
+
it('should build an unsigned batch all transaction', async () => {
|
|
289
|
+
builder
|
|
290
|
+
.atomic(true)
|
|
291
|
+
.calls(resources_1.rawTx.pureProxy.batch)
|
|
292
|
+
.sender({ address: sender.address })
|
|
293
|
+
.validity({ firstValid: 9266787, maxDuration: 64 })
|
|
294
|
+
.referenceBlock(referenceBlock)
|
|
295
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
|
|
296
|
+
.fee({ amount: 0, type: 'tip' });
|
|
297
|
+
const tx = await builder.build();
|
|
298
|
+
const txJson = tx.toJson();
|
|
299
|
+
should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.pureProxy.batch.length);
|
|
300
|
+
should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.pureProxy.batch[0].slice(0, 6));
|
|
301
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.proxy_type, iface_1.ProxyType.ANY);
|
|
302
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.delay, 0);
|
|
303
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.index, 0);
|
|
304
|
+
should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.pureProxy.batch[0].slice(0, 6));
|
|
305
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.proxy_type, iface_1.ProxyType.ANY);
|
|
306
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.delay, 0);
|
|
307
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.index, 1);
|
|
308
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
309
|
+
should_1.default.deepEqual(txJson.blockNumber, 9266787);
|
|
310
|
+
should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
|
|
311
|
+
should_1.default.deepEqual(txJson.genesisHash, genesisHash);
|
|
312
|
+
should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
|
|
313
|
+
should_1.default.deepEqual(txJson.nonce, 200);
|
|
314
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
315
|
+
should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
|
|
316
|
+
should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
|
|
317
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
318
|
+
const txHex = tx.toBroadcastFormat();
|
|
319
|
+
should_1.default.deepEqual(resources_1.rawTx.batchAll.twoAddPureProxies.unsigned, txHex);
|
|
320
|
+
});
|
|
321
|
+
it('should build an unsigned staking batch all transaction', async () => {
|
|
322
|
+
builder
|
|
323
|
+
.atomic(true)
|
|
324
|
+
.calls(resources_1.rawTx.stake.batchAll.batch)
|
|
325
|
+
.sender({ address: sender.address })
|
|
326
|
+
.validity({ firstValid: 9266787, maxDuration: 64 })
|
|
327
|
+
.referenceBlock(referenceBlock)
|
|
328
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 0 })
|
|
329
|
+
.fee({ amount: 0, type: 'tip' });
|
|
330
|
+
const tx = await builder.build();
|
|
331
|
+
const txJson = tx.toJson();
|
|
332
|
+
should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.stake.batchAll.batch.length);
|
|
333
|
+
should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.stake.batchAll.batch[0].slice(0, 6));
|
|
334
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.value, 500000000000);
|
|
335
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.payee, { staked: null });
|
|
336
|
+
should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.stake.batchAll.batch[1].slice(0, 6));
|
|
337
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.delegate, { id: resources_1.accounts.stakingProxy.address });
|
|
338
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.proxy_type, iface_1.ProxyType.STAKING);
|
|
339
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.delay, 0);
|
|
340
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
341
|
+
should_1.default.deepEqual(txJson.blockNumber, 9266787);
|
|
342
|
+
should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
|
|
343
|
+
should_1.default.deepEqual(txJson.genesisHash, genesisHash);
|
|
344
|
+
should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
|
|
345
|
+
should_1.default.deepEqual(txJson.nonce, 0);
|
|
346
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
347
|
+
should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
|
|
348
|
+
should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
|
|
349
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
350
|
+
const txHex = tx.toBroadcastFormat();
|
|
351
|
+
should_1.default.deepEqual(resources_1.rawTx.stake.batchAll.unsigned, txHex);
|
|
352
|
+
});
|
|
353
|
+
it('should build an add proxy + stake more transaction', async () => {
|
|
354
|
+
builder
|
|
355
|
+
.atomic(true)
|
|
356
|
+
.calls(resources_1.rawTx.stakeMore.batchAll.batch)
|
|
357
|
+
.sender({ address: sender.address })
|
|
358
|
+
.validity({ firstValid: 9266787, maxDuration: 64 })
|
|
359
|
+
.referenceBlock(referenceBlock)
|
|
360
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 0 })
|
|
361
|
+
.fee({ amount: 0, type: 'tip' });
|
|
362
|
+
const tx = await builder.build();
|
|
363
|
+
should_1.default.deepEqual(tx.inputs[0].value, '90034235235322');
|
|
364
|
+
const txJson = tx.toJson();
|
|
365
|
+
should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.stakeMore.batchAll.batch.length);
|
|
366
|
+
should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.stakeMore.batchAll.batch[0].slice(0, 6));
|
|
367
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args.max_additional, 90034235235322);
|
|
368
|
+
should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.stakeMore.batchAll.batch[1].slice(0, 6));
|
|
369
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args.delegate, { id: resources_1.accounts.stakingProxy.address });
|
|
370
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args.proxy_type, iface_1.ProxyType.STAKING);
|
|
371
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args.delay, 0);
|
|
372
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
373
|
+
should_1.default.deepEqual(txJson.blockNumber, 9266787);
|
|
374
|
+
should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
|
|
375
|
+
should_1.default.deepEqual(txJson.genesisHash, genesisHash);
|
|
376
|
+
should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
|
|
377
|
+
should_1.default.deepEqual(txJson.nonce, 0);
|
|
378
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
379
|
+
should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
|
|
380
|
+
should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
|
|
381
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
382
|
+
const txHex = tx.toBroadcastFormat();
|
|
383
|
+
should_1.default.deepEqual(resources_1.rawTx.stakeMore.batchAll.unsigned, txHex);
|
|
384
|
+
const factory = new src_1.TransactionBuilderFactory((0, base_1.buildTestConfig)());
|
|
385
|
+
const builder2 = factory.from(resources_1.rawTx.stakeMore.batchAll.unsigned);
|
|
386
|
+
const tx2 = await builder2
|
|
387
|
+
.sender({ address: sender.address })
|
|
388
|
+
.validity({ firstValid: 9266787, maxDuration: 64 })
|
|
389
|
+
.build();
|
|
390
|
+
should_1.default.deepEqual(tx2.inputs[0].value, '90034235235322');
|
|
391
|
+
const txJson2 = tx2.toJson();
|
|
392
|
+
should_1.default.deepEqual(txJson, txJson2);
|
|
393
|
+
});
|
|
394
|
+
it('should build an unsigned unstaking batch all transaction', async () => {
|
|
395
|
+
builder
|
|
396
|
+
.atomic(true)
|
|
397
|
+
.calls(resources_1.rawTx.unstake.batchAll.batch)
|
|
398
|
+
.sender({ address: sender.address })
|
|
399
|
+
.validity({ firstValid: 9266787, maxDuration: 64 })
|
|
400
|
+
.referenceBlock(referenceBlock)
|
|
401
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 0 })
|
|
402
|
+
.fee({ amount: 0, type: 'tip' });
|
|
403
|
+
const tx = await builder.build();
|
|
404
|
+
const txJson = tx.toJson();
|
|
405
|
+
should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.unstake.batchAll.batch.length);
|
|
406
|
+
should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.unstake.batchAll.batch[0].slice(0, 6));
|
|
407
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.delegate, { id: resources_1.accounts.stakingProxy.address });
|
|
408
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.proxy_type, iface_1.ProxyType.STAKING);
|
|
409
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.delay, 0);
|
|
410
|
+
should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.unstake.batchAll.batch[1].slice(0, 6));
|
|
411
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args, {});
|
|
412
|
+
should_1.default.deepEqual(txJson.batchCalls[2].callIndex, resources_1.rawTx.unstake.batchAll.batch[2].slice(0, 6));
|
|
413
|
+
should_1.default.deepEqual(txJson.batchCalls[2].args?.value, 500000000000);
|
|
414
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
415
|
+
should_1.default.deepEqual(txJson.blockNumber, 9266787);
|
|
416
|
+
should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
|
|
417
|
+
should_1.default.deepEqual(txJson.genesisHash, genesisHash);
|
|
418
|
+
should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
|
|
419
|
+
should_1.default.deepEqual(txJson.nonce, 0);
|
|
420
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
421
|
+
should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
|
|
422
|
+
should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
|
|
423
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
424
|
+
const txHex = tx.toBroadcastFormat();
|
|
425
|
+
should_1.default.deepEqual(resources_1.rawTx.unstake.batchAll.unsigned, txHex);
|
|
426
|
+
});
|
|
427
|
+
describe('from raw', () => {
|
|
428
|
+
it('should build a batch all from a raw unsigned tx', async () => {
|
|
429
|
+
builder.from(resources_1.rawTx.batchAll.twoAddPureProxies.unsigned);
|
|
430
|
+
builder
|
|
431
|
+
.validity({ firstValid: 9266787, maxDuration: 64 })
|
|
432
|
+
.referenceBlock(referenceBlock)
|
|
433
|
+
.sender({ address: sender.address });
|
|
434
|
+
const tx = await builder.build();
|
|
435
|
+
const txJson = tx.toJson();
|
|
436
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
437
|
+
should_1.default.deepEqual(txJson.batchCalls.length, 2);
|
|
438
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.proxy_type, iface_1.ProxyType.ANY);
|
|
439
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.delay, 0);
|
|
440
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.index, 0);
|
|
441
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.proxy_type, iface_1.ProxyType.ANY);
|
|
442
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.delay, 0);
|
|
443
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.index, 1);
|
|
444
|
+
should_1.default.deepEqual(txJson.blockNumber, 9266787);
|
|
445
|
+
should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
|
|
446
|
+
should_1.default.deepEqual(txJson.genesisHash, genesisHash);
|
|
447
|
+
should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
|
|
448
|
+
should_1.default.deepEqual(txJson.nonce, 200);
|
|
449
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
450
|
+
should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
|
|
451
|
+
should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
|
|
452
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
453
|
+
const txHex = tx.toBroadcastFormat();
|
|
454
|
+
should_1.default.deepEqual(resources_1.rawTx.batchAll.twoAddPureProxies.unsigned, txHex);
|
|
455
|
+
});
|
|
456
|
+
it('should build a batch all from a raw unsigned staking tx', async () => {
|
|
457
|
+
builder.from(resources_1.rawTx.stake.batchAll.unsigned);
|
|
458
|
+
builder
|
|
459
|
+
.validity({ firstValid: 9266787, maxDuration: 64 })
|
|
460
|
+
.referenceBlock(referenceBlock)
|
|
461
|
+
.sender({ address: sender.address });
|
|
462
|
+
const tx = await builder.build();
|
|
463
|
+
const txJson = tx.toJson();
|
|
464
|
+
// test the call items
|
|
465
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
466
|
+
should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.stake.batchAll.batch.length);
|
|
467
|
+
should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.stake.batchAll.batch[0].slice(0, 6));
|
|
468
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.value, 500000000000);
|
|
469
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.payee, { staked: null });
|
|
470
|
+
should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.stake.batchAll.batch[1].slice(0, 6));
|
|
471
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.delegate, { id: resources_1.accounts.stakingProxy.address });
|
|
472
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.proxy_type, iface_1.ProxyType.STAKING);
|
|
473
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args?.delay, 0);
|
|
474
|
+
should_1.default.deepEqual(txJson.blockNumber, 9266787);
|
|
475
|
+
should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
|
|
476
|
+
should_1.default.deepEqual(txJson.genesisHash, genesisHash);
|
|
477
|
+
should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
|
|
478
|
+
should_1.default.deepEqual(txJson.nonce, 0);
|
|
479
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
480
|
+
should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
|
|
481
|
+
should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
|
|
482
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
483
|
+
const txHex = tx.toBroadcastFormat();
|
|
484
|
+
should_1.default.deepEqual(resources_1.rawTx.stake.batchAll.unsigned, txHex);
|
|
485
|
+
});
|
|
486
|
+
it('should build a batch all from a raw unsigned unstaking tx', async () => {
|
|
487
|
+
builder.from(resources_1.rawTx.unstake.batchAll.unsigned);
|
|
488
|
+
builder
|
|
489
|
+
.validity({ firstValid: 9266787, maxDuration: 64 })
|
|
490
|
+
.referenceBlock(referenceBlock)
|
|
491
|
+
.sender({ address: sender.address });
|
|
492
|
+
const tx = await builder.build();
|
|
493
|
+
const txJson = tx.toJson();
|
|
494
|
+
// test the call items
|
|
495
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
496
|
+
should_1.default.deepEqual(txJson.batchCalls.length, resources_1.rawTx.unstake.batchAll.batch.length);
|
|
497
|
+
should_1.default.deepEqual(txJson.batchCalls[0].callIndex, resources_1.rawTx.unstake.batchAll.batch[0].slice(0, 6));
|
|
498
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.delegate, { id: resources_1.accounts.stakingProxy.address });
|
|
499
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.proxy_type, iface_1.ProxyType.STAKING);
|
|
500
|
+
should_1.default.deepEqual(txJson.batchCalls[0].args?.delay, 0);
|
|
501
|
+
should_1.default.deepEqual(txJson.batchCalls[1].callIndex, resources_1.rawTx.unstake.batchAll.batch[1].slice(0, 6));
|
|
502
|
+
should_1.default.deepEqual(txJson.batchCalls[1].args, {});
|
|
503
|
+
should_1.default.deepEqual(txJson.batchCalls[2].callIndex, resources_1.rawTx.unstake.batchAll.batch[2].slice(0, 6));
|
|
504
|
+
should_1.default.deepEqual(txJson.batchCalls[2].args?.value, 500000000000);
|
|
505
|
+
should_1.default.deepEqual(txJson.blockNumber, 9266787);
|
|
506
|
+
should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
|
|
507
|
+
should_1.default.deepEqual(txJson.genesisHash, genesisHash);
|
|
508
|
+
should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
|
|
509
|
+
should_1.default.deepEqual(txJson.nonce, 0);
|
|
510
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
511
|
+
should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
|
|
512
|
+
should_1.default.deepEqual(txJson.chainName, 'Westend Asset Hub');
|
|
513
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
514
|
+
const txHex = tx.toBroadcastFormat();
|
|
515
|
+
should_1.default.deepEqual(resources_1.rawTx.unstake.batchAll.unsigned, txHex);
|
|
516
|
+
});
|
|
517
|
+
});
|
|
518
|
+
});
|
|
519
|
+
});
|
|
520
|
+
});
|
|
521
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hUcmFuc2FjdGlvbkJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL2JhdGNoVHJhbnNhY3Rpb25CdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUM1QixpQ0FBbUQ7QUFDbkQsc0NBQWtGO0FBQ2xGLGtEQUFtRDtBQUNuRCxtRUFBMkM7QUFDM0MsK0NBQTRGO0FBQzVGLGlDQUF5QztBQUV6QyxRQUFRLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO0lBQzdDLElBQUksT0FBZ0MsQ0FBQztJQUVyQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFO1FBQ2pDLE1BQU0sQ0FBQztZQUNMLE9BQU8sR0FBRyxJQUFJLDZCQUF1QixDQUFDLElBQUEsc0JBQWUsR0FBRSxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO1lBQ3ZDLE1BQU0sSUFBSSxHQUFHLDRCQUE0QixDQUFDO1lBQzFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSxXQUFHLEVBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQ3ZELGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUMzQixDQUFDLENBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyx3RUFBd0UsQ0FDckcsQ0FBQztZQUNGLGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUJBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNoRSxjQUFXLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUM7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QVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxpQkFBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2RixnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsaUJBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkUsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLGlCQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZGLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxpQkFBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN2RSxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENB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LENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDakUsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ3JFLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLGlCQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1RixnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsb0JBQVEsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDN0YsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLGlCQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzNFLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdEQsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2hELGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzlDLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7Z0JBQ3hELGdCQUFNLENBQUMsU0FBUyxDQUFD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LGlCQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZGLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxpQkFBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN2RSxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdEQsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsaUJBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkYsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLGlCQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZFLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdEQsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxF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QUM7Z0JBQ3JFLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLGlCQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1RixnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsb0JBQVEsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDN0YsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLGlCQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzNFLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdEQsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2hELGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzlDLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7Z0JBQ3hELGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQ2xELGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsdUJBQVcsQ0FBQyxDQUFDO2dCQUNsRCxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUscUJBQVMsQ0FBQyxDQUFDO2dCQUN2RCxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLENBQUM7Z0JBQ3hELGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBRXZDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUNyQyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxpQkFBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pELENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLG9EQUFvRCxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUNsRSxPQUFPO3FCQUNKLE1BQU0sQ0FBQyxJQUFJLENBQUM7cUJBQ1osS0FBSyxDQUFDLGlCQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7cUJBQ3JDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7cUJBQ25DLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO3FCQUNsRCxjQUFjLENBQUMsY0FBYyxDQUFDO3FCQUM5QixVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO3FCQUN6RCxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUVuQyxNQUFNLEVBQUUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDakMsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztnQkFDdkQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUMzQixnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxpQkFBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNsRixnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxpQkFBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEcsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDO2dCQUMzRSxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxpQkFBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEcsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLG9CQUFRLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQzVGLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFD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QUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDaEQsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsaUJBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDOUUsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsaUJBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzVGLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztvQkFDakUsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQ3JFLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLGlCQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM1RixnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsb0JBQVEsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFDN0YsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxD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Q2xELGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsdUJBQVcsQ0FBQyxDQUFDO29CQUNsRCxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNsQyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNoQyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUscUJBQVMsQ0FBQyxDQUFDO29CQUN2RCxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLENBQUM7b0JBQ3hELGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBRXZDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUNyQyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxpQkFBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMzRCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgc3B5LCBhc3NlcnQgYXMgU2lub25Bc3NlcnQgfSBmcm9tICdzaW5vbic7XG5pbXBvcnQgeyBCYXRjaFRyYW5zYWN0aW9uQnVpbGRlciwgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBQcm94eVR5cGUgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL2lmYWNlJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi8uLi8uLi9zcmMvbGliL3V0aWxzJztcbmltcG9ydCB7IGFjY291bnRzLCBtb2NrVHNzU2lnbmF0dXJlLCByYXdUeCwgc3BlY1ZlcnNpb24sIHR4VmVyc2lvbiB9IGZyb20gJy4uLy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBidWlsZFRlc3RDb25maWcgfSBmcm9tICcuL2Jhc2UnO1xuXG5kZXNjcmliZSgnRG90IEJhdGNoIFRyYW5zYWN0aW9uIEJ1aWxkZXInLCAoKSA9PiB7XG4gIGxldCBidWlsZGVyOiBCYXRjaFRyYW5zYWN0aW9uQnVpbGRlcjtcblxuICBkZXNjcmliZSgnc2V0dGVyIHZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIGJ1aWxkZXIgPSBuZXcgQmF0Y2hUcmFuc2FjdGlvbkJ1aWxkZXIoYnVpbGRUZXN0Q29uZmlnKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBsaXN0IG9mIGNhbGxzJywgKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbCA9ICdpbnZhbGlkVW5zaWduZWRUcmFuc2FjdGlvbic7XG4gICAgICBjb25zdCBzcHlWYWxpZGF0ZUNhbGxzID0gc3B5KGJ1aWxkZXIsICd2YWxpZGF0ZUNhbGxzJyk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBidWlsZGVyLmNhbGxzKFtjYWxsXSksXG4gICAgICAgIChlOiBFcnJvcikgPT4gZS5tZXNzYWdlID09PSBgY2FsbCBpbiBzdHJpbmcgZm9ybWF0IG11c3QgYmUgaGV4IGZvcm1hdCBvZiBhIG1ldGhvZCBhbmQgaXRzIGFyZ3VtZW50c2BcbiAgICAgICk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIuY2FsbHMocmF3VHgucHVyZVByb3h5LmJhdGNoKSk7XG4gICAgICBTaW5vbkFzc2VydC5jYWxsZWRUd2ljZShzcHlWYWxpZGF0ZUNhbGxzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2J1aWxkIGJhdGNoIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNlbmRlciA9IGFjY291bnRzLmFjY291bnQxO1xuICAgIGNvbnN0IHJlZmVyZW5jZUJsb2NrID0gJzB4NDYyYWI1MjQ2MzYxZmViYjkyOTRmZmE0MWRkMDk5ZWRkZGVjMzBhMjA1ZWExNWZiZDI0N2FiYjBkZGJhYmQ1MSc7XG4gICAgY29uc3QgZ2VuZXNpc0hhc2ggPSAnMHg2N2Y5NzIzMzkzZWY3NjIxNGRmMDExOGMzNGJiYmQzZGJlYmM4ZWQ0NmExMDk3M2E4Yzk2OWQ0OGZlNzU5OGM5JztcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gYnVpbGRUZXN0Q29uZmlnKCk7XG4gICAgICBidWlsZGVyID0gbmV3IEJhdGNoVHJhbnNhY3Rpb25CdWlsZGVyKGNvbmZpZykubWF0ZXJpYWwodXRpbHMuZ2V0TWF0ZXJpYWwoY29uZmlnKSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc2lnbmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIHNpZ25lZCBiYXRjaCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYnVpbGRlclxuICAgICAgICAgIC5jYWxscyhyYXdUeC5wdXJlUHJveHkuYmF0Y2gpXG4gICAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogOTI3OTI4MSwgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDAgfSlcbiAgICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KVxuICAgICAgICAgIC5hZGRTaWduYXR1cmUoeyBwdWI6IHNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20obW9ja1Rzc1NpZ25hdHVyZSwgJ2hleCcpKTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHMubGVuZ3RoLCByYXdUeC5wdXJlUHJveHkuYmF0Y2gubGVuZ3RoKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5jYWxsSW5kZXgsIHJhd1R4LnB1cmVQcm94eS5iYXRjaFswXS5zbGljZSgwLCA2KSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uYXJncz8ucHJveHlfdHlwZSwgUHJveHlUeXBlLkFOWSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uYXJncz8uZGVsYXksIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LmluZGV4LCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5jYWxsSW5kZXgsIHJhd1R4LnB1cmVQcm94eS5iYXRjaFswXS5zbGljZSgwLCA2KSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8ucHJveHlfdHlwZSwgUHJveHlUeXBlLkFOWSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8uZGVsYXksIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmFyZ3M/LmluZGV4LCAxKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VuZGVyLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCA5Mjc5MjgxKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucmVmZXJlbmNlQmxvY2ssIHJlZmVyZW5jZUJsb2NrKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHNwZWNWZXJzaW9uKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubm9uY2UsIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50aXAsIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIHR4VmVyc2lvbik7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmNoYWluTmFtZSwgJ1dlc3RlbmQgQXNzZXQgSHViJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmVyYVBlcmlvZCwgNjQpO1xuXG4gICAgICAgIGNvbnN0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbChyYXdUeC5iYXRjaC50d29BZGRQdXJlUHJveGllcy5zaWduZWQsIHR4SGV4KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgc2lnbmVkIGJhdGNoIGFsbCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYnVpbGRlclxuICAgICAgICAgIC5hdG9taWModHJ1ZSlcbiAgICAgICAgICAuY2FsbHMocmF3VHgucHVyZVByb3h5LmJhdGNoKVxuICAgICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDkyNzkyODEsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAgIC5yZWZlcmVuY2VCbG9jayhyZWZlcmVuY2VCbG9jaylcbiAgICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAwIH0pXG4gICAgICAgICAgLmZlZSh7IGFtb3VudDogMCwgdHlwZTogJ3RpcCcgfSlcbiAgICAgICAgICAuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG5cbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzLmxlbmd0aCwgcmF3VHgucHVyZVByb3h5LmJhdGNoLmxlbmd0aCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uY2FsbEluZGV4LCByYXdUeC5wdXJlUHJveHkuYmF0Y2hbMF0uc2xpY2UoMCwgNikpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LnByb3h5X3R5cGUsIFByb3h5VHlwZS5BTlkpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LmRlbGF5LCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5hcmdzPy5pbmRleCwgMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uY2FsbEluZGV4LCByYXdUeC5wdXJlUHJveHkuYmF0Y2hbMF0uc2xpY2UoMCwgNikpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmFyZ3M/LnByb3h5X3R5cGUsIFByb3h5VHlwZS5BTlkpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmFyZ3M/LmRlbGF5LCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5hcmdzPy5pbmRleCwgMSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbmRlciwgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgOTI3OTI4MSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCByZWZlcmVuY2VCbG9jayk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBzcGVjVmVyc2lvbik7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udHJhbnNhY3Rpb25WZXJzaW9uLCB0eFZlcnNpb24pO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUsICdXZXN0ZW5kIEFzc2V0IEh1YicpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5lcmFQZXJpb2QsIDY0KTtcblxuICAgICAgICBjb25zdCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwocmF3VHguYmF0Y2hBbGwudHdvQWRkUHVyZVByb3hpZXMuc2lnbmVkLCB0eEhleCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIHNpZ25lZCBzdGFraW5nIGJhdGNoIGFsbCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYnVpbGRlclxuICAgICAgICAgIC5hdG9taWModHJ1ZSlcbiAgICAgICAgICAuY2FsbHMocmF3VHguc3Rha2UuYmF0Y2hBbGwuYmF0Y2gpXG4gICAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogOTI2Njc4NywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDAgfSlcbiAgICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KVxuICAgICAgICAgIC5hZGRTaWduYXR1cmUoeyBwdWI6IHNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20obW9ja1Rzc1NpZ25hdHVyZSwgJ2hleCcpKTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHMubGVuZ3RoLCByYXdUeC5zdGFrZS5iYXRjaEFsbC5iYXRjaC5sZW5ndGgpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmNhbGxJbmRleCwgcmF3VHguc3Rha2UuYmF0Y2hBbGwuYmF0Y2hbMF0uc2xpY2UoMCwgNikpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LnZhbHVlLCA1MDAwMDAwMDAwMDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LnBheWVlLCB7IHN0YWtlZDogbnVsbCB9KTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5jYWxsSW5kZXgsIHJhd1R4LnN0YWtlLmJhdGNoQWxsLmJhdGNoWzFdLnNsaWNlKDAsIDYpKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5hcmdzPy5kZWxlZ2F0ZSwgeyBpZDogYWNjb3VudHMuc3Rha2luZ1Byb3h5LmFkZHJlc3MgfSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8ucHJveHlfdHlwZSwgUHJveHlUeXBlLlNUQUtJTkcpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmFyZ3M/LmRlbGF5LCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VuZGVyLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCA5MjY2Nzg3KTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucmVmZXJlbmNlQmxvY2ssIHJlZmVyZW5jZUJsb2NrKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHNwZWNWZXJzaW9uKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubm9uY2UsIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50aXAsIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIHR4VmVyc2lvbik7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmNoYWluTmFtZSwgJ1dlc3RlbmQgQXNzZXQgSHViJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmVyYVBlcmlvZCwgNjQpO1xuXG4gICAgICAgIGNvbnN0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbChyYXdUeC5zdGFrZS5iYXRjaEFsbC5zaWduZWQsIHR4SGV4KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgc2lnbmVkIHVuc3Rha2luZyBiYXRjaCBhbGwgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXJcbiAgICAgICAgICAuYXRvbWljKHRydWUpXG4gICAgICAgICAgLmNhbGxzKHJhd1R4LnVuc3Rha2UuYmF0Y2hBbGwuYmF0Y2gpXG4gICAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogOTI2Njc4NywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDAgfSlcbiAgICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KVxuICAgICAgICAgIC5hZGRTaWduYXR1cmUoeyBwdWI6IHNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20obW9ja1Rzc1NpZ25hdHVyZSwgJ2hleCcpKTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHMubGVuZ3RoLCByYXdUeC51bnN0YWtlLmJhdGNoQWxsLmJhdGNoLmxlbmd0aCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uY2FsbEluZGV4LCByYXdUeC51bnN0YWtlLmJhdGNoQWxsLmJhdGNoWzBdLnNsaWNlKDAsIDYpKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5hcmdzPy5kZWxlZ2F0ZSwgeyBpZDogYWNjb3VudHMuc3Rha2luZ1Byb3h5LmFkZHJlc3MgfSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uYXJncz8ucHJveHlfdHlwZSwgUHJveHlUeXBlLlNUQUtJTkcpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LmRlbGF5LCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5jYWxsSW5kZXgsIHJhd1R4LnVuc3Rha2UuYmF0Y2hBbGwuYmF0Y2hbMV0uc2xpY2UoMCwgNikpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmFyZ3MsIHt9KTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1syXS5jYWxsSW5kZXgsIHJhd1R4LnVuc3Rha2UuYmF0Y2hBbGwuYmF0Y2hbMl0uc2xpY2UoMCwgNikpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzJdLmFyZ3M/LnZhbHVlLCA1MDAwMDAwMDAwMDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZW5kZXIsIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmxvY2tOdW1iZXIsIDkyNjY3ODcpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgcmVmZXJlbmNlQmxvY2spO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5nZW5lc2lzSGFzaCwgZ2VuZXNpc0hhc2gpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zcGVjVmVyc2lvbiwgc3BlY1ZlcnNpb24pO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRpcCwgMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgdHhWZXJzaW9uKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uY2hhaW5OYW1lLCAnV2VzdGVuZCBBc3NldCBIdWInKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZXJhUGVyaW9kLCA2NCk7XG5cbiAgICAgICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHJhd1R4LnVuc3Rha2UuYmF0Y2hBbGwuc2lnbmVkLCB0eEhleCk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ2Zyb20gcmF3JywgKCkgPT4ge1xuICAgICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgYmF0Y2ggYWxsIGZyb20gYSByYXcgc2lnbmVkIHR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGJ1aWxkZXIuZnJvbShyYXdUeC5iYXRjaEFsbC50d29BZGRQdXJlUHJveGllcy5zaWduZWQpO1xuICAgICAgICAgIGJ1aWxkZXIudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiA5Mjc5MjgxLCBtYXhEdXJhdGlvbjogNjQgfSkucmVmZXJlbmNlQmxvY2socmVmZXJlbmNlQmxvY2spO1xuICAgICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICAgIC8vIHRlc3QgdGhlIGNhbGwgaXRlbXNcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZW5kZXIsIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzLmxlbmd0aCwgMik7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5hcmdzPy5wcm94eV90eXBlLCBQcm94eVR5cGUuQU5ZKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LmRlbGF5LCAwKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LmluZGV4LCAwKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmFyZ3M/LnByb3h5X3R5cGUsIFByb3h5VHlwZS5BTlkpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8uZGVsYXksIDApO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8uaW5kZXgsIDEpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCA5Mjc5MjgxKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgcmVmZXJlbmNlQmxvY2spO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHNwZWNWZXJzaW9uKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIHR4VmVyc2lvbik7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uY2hhaW5OYW1lLCAnV2VzdGVuZCBBc3NldCBIdWInKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5lcmFQZXJpb2QsIDY0KTtcblxuICAgICAgICAgIGNvbnN0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHJhd1R4LmJhdGNoQWxsLnR3b0FkZFB1cmVQcm94aWVzLnNpZ25lZCwgdHhIZXgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgYmF0Y2ggYWxsIGZyb20gYSByYXcgc2lnbmVkIHN0YWtpbmcgdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYnVpbGRlci5mcm9tKHJhd1R4LnN0YWtlLmJhdGNoQWxsLnNpZ25lZCk7XG4gICAgICAgICAgYnVpbGRlci52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDkyNjY3ODcsIG1heER1cmF0aW9uOiA2NCB9KS5yZWZlcmVuY2VCbG9jayhyZWZlcmVuY2VCbG9jayk7XG4gICAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG5cbiAgICAgICAgICAvLyB0ZXN0IHRoZSBjYWxsIGl0ZW1zXG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VuZGVyLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxscy5sZW5ndGgsIHJhd1R4LnN0YWtlLmJhdGNoQWxsLmJhdGNoLmxlbmd0aCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5jYWxsSW5kZXgsIHJhd1R4LnN0YWtlLmJhdGNoQWxsLmJhdGNoWzBdLnNsaWNlKDAsIDYpKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LnZhbHVlLCA1MDAwMDAwMDAwMDApO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uYXJncz8ucGF5ZWUsIHsgc3Rha2VkOiBudWxsIH0pO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uY2FsbEluZGV4LCByYXdUeC5zdGFrZS5iYXRjaEFsbC5iYXRjaFsxXS5zbGljZSgwLCA2KSk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5hcmdzPy5kZWxlZ2F0ZSwgeyBpZDogYWNjb3VudHMuc3Rha2luZ1Byb3h5LmFkZHJlc3MgfSk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5hcmdzPy5wcm94eV90eXBlLCBQcm94eVR5cGUuU1RBS0lORyk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5hcmdzPy5kZWxheSwgMCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmxvY2tOdW1iZXIsIDkyNjY3ODcpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCByZWZlcmVuY2VCbG9jayk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zcGVjVmVyc2lvbiwgc3BlY1ZlcnNpb24pO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAwKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50aXAsIDApO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgdHhWZXJzaW9uKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUsICdXZXN0ZW5kIEFzc2V0IEh1YicpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmVyYVBlcmlvZCwgNjQpO1xuXG4gICAgICAgICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwocmF3VHguc3Rha2UuYmF0Y2hBbGwuc2lnbmVkLCB0eEhleCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgYnVpbGQgYSBiYXRjaCBhbGwgZnJvbSBhIHJhdyBzaWduZWQgdW5zdGFraW5nIHR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGJ1aWxkZXIuZnJvbShyYXdUeC51bnN0YWtlLmJhdGNoQWxsLnNpZ25lZCk7XG4gICAgICAgICAgYnVpbGRlci52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDkyNjY3ODcsIG1heER1cmF0aW9uOiA2NCB9KS5yZWZlcmVuY2VCbG9jayhyZWZlcmVuY2VCbG9jayk7XG5cbiAgICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcblxuICAgICAgICAgIC8vIHRlc3QgdGhlIGNhbGwgaXRlbXNcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZW5kZXIsIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzLmxlbmd0aCwgcmF3VHgudW5zdGFrZS5iYXRjaEFsbC5iYXRjaC5sZW5ndGgpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uY2FsbEluZGV4LCByYXdUeC51bnN0YWtlLmJhdGNoQWxsLmJhdGNoWzBdLnNsaWNlKDAsIDYpKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LmRlbGVnYXRlLCB7IGlkOiBhY2NvdW50cy5zdGFraW5nUHJveHkuYWRkcmVzcyB9KTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LnByb3h5X3R5cGUsIFByb3h5VHlwZS5TVEFLSU5HKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LmRlbGF5LCAwKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmNhbGxJbmRleCwgcmF3VHgudW5zdGFrZS5iYXRjaEFsbC5iYXRjaFsxXS5zbGljZSgwLCA2KSk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5hcmdzLCB7fSk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1syXS5jYWxsSW5kZXgsIHJhd1R4LnVuc3Rha2UuYmF0Y2hBbGwuYmF0Y2hbMl0uc2xpY2UoMCwgNikpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMl0uYXJncz8udmFsdWUsIDUwMDAwMDAwMDAwMCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmxvY2tOdW1iZXIsIDkyNjY3ODcpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCByZWZlcmVuY2VCbG9jayk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zcGVjVmVyc2lvbiwgc3BlY1ZlcnNpb24pO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAwKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50aXAsIDApO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgdHhWZXJzaW9uKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUsICdXZXN0ZW5kIEFzc2V0IEh1YicpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmVyYVBlcmlvZCwgNjQpO1xuXG4gICAgICAgICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwocmF3VHgudW5zdGFrZS5iYXRjaEFsbC5zaWduZWQsIHR4SGV4KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd1bnNpZ25lZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYW4gdW5zaWduZWQgYmF0Y2ggdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXJcbiAgICAgICAgICAuY2FsbHMocmF3VHgucHVyZVByb3h5LmJhdGNoKVxuICAgICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDkyNjY3ODcsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAgIC5yZWZlcmVuY2VCbG9jayhyZWZlcmVuY2VCbG9jaylcbiAgICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAyMDAgfSlcbiAgICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHMubGVuZ3RoLCByYXdUeC5wdXJlUHJveHkuYmF0Y2gubGVuZ3RoKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5jYWxsSW5kZXgsIHJhd1R4LnB1cmVQcm94eS5iYXRjaFswXS5zbGljZSgwLCA2KSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uYXJncz8ucHJveHlfdHlwZSwgUHJveHlUeXBlLkFOWSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uYXJncz8uZGVsYXksIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LmluZGV4LCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5jYWxsSW5kZXgsIHJhd1R4LnB1cmVQcm94eS5iYXRjaFswXS5zbGljZSgwLCA2KSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8ucHJveHlfdHlwZSwgUHJveHlUeXBlLkFOWSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8uZGVsYXksIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmFyZ3M/LmluZGV4LCAxKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VuZGVyLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCA5MjY2Nzg3KTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucmVmZXJlbmNlQmxvY2ssIHJlZmVyZW5jZUJsb2NrKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHNwZWNWZXJzaW9uKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubm9uY2UsIDIwMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRpcCwgMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgdHhWZXJzaW9uKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uY2hhaW5OYW1lLCAnV2VzdGVuZCBBc3NldCBIdWInKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZXJhUGVyaW9kLCA2NCk7XG5cbiAgICAgICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHJhd1R4LmJhdGNoLnR3b0FkZFB1cmVQcm94aWVzLnVuc2lnbmVkLCB0eEhleCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhbiB1bnNpZ25lZCBiYXRjaCBhbGwgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXJcbiAgICAgICAgICAuYXRvbWljKHRydWUpXG4gICAgICAgICAgLmNhbGxzKHJhd1R4LnB1cmVQcm94eS5iYXRjaClcbiAgICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiA5MjY2Nzg3LCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgICAucmVmZXJlbmNlQmxvY2socmVmZXJlbmNlQmxvY2spXG4gICAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMjAwIH0pXG4gICAgICAgICAgLmZlZSh7IGFtb3VudDogMCwgdHlwZTogJ3RpcCcgfSk7XG5cbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzLmxlbmd0aCwgcmF3VHgucHVyZVByb3h5LmJhdGNoLmxlbmd0aCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uY2FsbEluZGV4LCByYXdUeC5wdXJlUHJveHkuYmF0Y2hbMF0uc2xpY2UoMCwgNikpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LnByb3h5X3R5cGUsIFByb3h5VHlwZS5BTlkpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LmRlbGF5LCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5hcmdzPy5pbmRleCwgMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uY2FsbEluZGV4LCByYXdUeC5wdXJlUHJveHkuYmF0Y2hbMF0uc2xpY2UoMCwgNikpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmFyZ3M/LnByb3h5X3R5cGUsIFByb3h5VHlwZS5BTlkpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmFyZ3M/LmRlbGF5LCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5hcmdzPy5pbmRleCwgMSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbmRlciwgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgOTI2Njc4Nyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCByZWZlcmVuY2VCbG9jayk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBzcGVjVmVyc2lvbik7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAyMDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50aXAsIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIHR4VmVyc2lvbik7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmNoYWluTmFtZSwgJ1dlc3RlbmQgQXNzZXQgSHViJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmVyYVBlcmlvZCwgNjQpO1xuXG4gICAgICAgIGNvbnN0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbChyYXdUeC5iYXRjaEFsbC50d29BZGRQdXJlUHJveGllcy51bnNpZ25lZCwgdHhIZXgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYW4gdW5zaWduZWQgc3Rha2luZyBiYXRjaCBhbGwgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXJcbiAgICAgICAgICAuYXRvbWljKHRydWUpXG4gICAgICAgICAgLmNhbGxzKHJhd1R4LnN0YWtlLmJhdGNoQWxsLmJhdGNoKVxuICAgICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDkyNjY3ODcsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAgIC5yZWZlcmVuY2VCbG9jayhyZWZlcmVuY2VCbG9jaylcbiAgICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAwIH0pXG4gICAgICAgICAgLmZlZSh7IGFtb3VudDogMCwgdHlwZTogJ3RpcCcgfSk7XG5cbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzLmxlbmd0aCwgcmF3VHguc3Rha2UuYmF0Y2hBbGwuYmF0Y2gubGVuZ3RoKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5jYWxsSW5kZXgsIHJhd1R4LnN0YWtlLmJhdGNoQWxsLmJhdGNoWzBdLnNsaWNlKDAsIDYpKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5hcmdzPy52YWx1ZSwgNTAwMDAwMDAwMDAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5hcmdzPy5wYXllZSwgeyBzdGFrZWQ6IG51bGwgfSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uY2FsbEluZGV4LCByYXdUeC5zdGFrZS5iYXRjaEFsbC5iYXRjaFsxXS5zbGljZSgwLCA2KSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8uZGVsZWdhdGUsIHsgaWQ6IGFjY291bnRzLnN0YWtpbmdQcm94eS5hZGRyZXNzIH0pO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmFyZ3M/LnByb3h5X3R5cGUsIFByb3h5VHlwZS5TVEFLSU5HKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5hcmdzPy5kZWxheSwgMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbmRlciwgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgOTI2Njc4Nyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCByZWZlcmVuY2VCbG9jayk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBzcGVjVmVyc2lvbik7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udHJhbnNhY3Rpb25WZXJzaW9uLCB0eFZlcnNpb24pO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUsICdXZXN0ZW5kIEFzc2V0IEh1YicpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5lcmFQZXJpb2QsIDY0KTtcblxuICAgICAgICBjb25zdCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwocmF3VHguc3Rha2UuYmF0Y2hBbGwudW5zaWduZWQsIHR4SGV4KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGFuIGFkZCBwcm94eSArIHN0YWtlIG1vcmUgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXJcbiAgICAgICAgICAuYXRvbWljKHRydWUpXG4gICAgICAgICAgLmNhbGxzKHJhd1R4LnN0YWtlTW9yZS5iYXRjaEFsbC5iYXRjaClcbiAgICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiA5MjY2Nzg3LCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgICAucmVmZXJlbmNlQmxvY2socmVmZXJlbmNlQmxvY2spXG4gICAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMCB9KVxuICAgICAgICAgIC5mZWUoeyBhbW91bnQ6IDAsIHR5cGU6ICd0aXAnIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4LmlucHV0c1swXS52YWx1ZSwgJzkwMDM0MjM1MjM1MzIyJyk7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzLmxlbmd0aCwgcmF3VHguc3Rha2VNb3JlLmJhdGNoQWxsLmJhdGNoLmxlbmd0aCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uY2FsbEluZGV4LCByYXdUeC5zdGFrZU1vcmUuYmF0Y2hBbGwuYmF0Y2hbMF0uc2xpY2UoMCwgNikpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3MubWF4X2FkZGl0aW9uYWwsIDkwMDM0MjM1MjM1MzIyKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5jYWxsSW5kZXgsIHJhd1R4LnN0YWtlTW9yZS5iYXRjaEFsbC5iYXRjaFsxXS5zbGljZSgwLCA2KSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncy5kZWxlZ2F0ZSwgeyBpZDogYWNjb3VudHMuc3Rha2luZ1Byb3h5LmFkZHJlc3MgfSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncy5wcm94eV90eXBlLCBQcm94eVR5cGUuU1RBS0lORyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncy5kZWxheSwgMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbmRlciwgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgOTI2Njc4Nyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCByZWZlcmVuY2VCbG9jayk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBzcGVjVmVyc2lvbik7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udHJhbnNhY3Rpb25WZXJzaW9uLCB0eFZlcnNpb24pO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUsICdXZXN0ZW5kIEFzc2V0IEh1YicpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5lcmFQZXJpb2QsIDY0KTtcblxuICAgICAgICBjb25zdCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwocmF3VHguc3Rha2VNb3JlLmJhdGNoQWxsLnVuc2lnbmVkLCB0eEhleCk7XG5cbiAgICAgICAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGJ1aWxkVGVzdENvbmZpZygpKTtcbiAgICAgICAgY29uc3QgYnVpbGRlcjIgPSBmYWN0b3J5LmZyb20ocmF3VHguc3Rha2VNb3JlLmJhdGNoQWxsLnVuc2lnbmVkKTtcbiAgICAgICAgY29uc3QgdHgyID0gYXdhaXQgYnVpbGRlcjJcbiAgICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiA5MjY2Nzg3LCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgICAuYnVpbGQoKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eDIuaW5wdXRzWzBdLnZhbHVlLCAnOTAwMzQyMzUyMzUzMjInKTtcbiAgICAgICAgY29uc3QgdHhKc29uMiA9IHR4Mi50b0pzb24oKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24sIHR4SnNvbjIpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYW4gdW5zaWduZWQgdW5zdGFraW5nIGJhdGNoIGFsbCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYnVpbGRlclxuICAgICAgICAgIC5hdG9taWModHJ1ZSlcbiAgICAgICAgICAuY2FsbHMocmF3VHgudW5zdGFrZS5iYXRjaEFsbC5iYXRjaClcbiAgICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiA5MjY2Nzg3LCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgICAucmVmZXJlbmNlQmxvY2socmVmZXJlbmNlQmxvY2spXG4gICAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMCB9KVxuICAgICAgICAgIC5mZWUoeyBhbW91bnQ6IDAsIHR5cGU6ICd0aXAnIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxscy5sZW5ndGgsIHJhd1R4LnVuc3Rha2UuYmF0Y2hBbGwuYmF0Y2gubGVuZ3RoKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5jYWxsSW5kZXgsIHJhd1R4LnVuc3Rha2UuYmF0Y2hBbGwuYmF0Y2hbMF0uc2xpY2UoMCwgNikpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LmRlbGVnYXRlLCB7IGlkOiBhY2NvdW50cy5zdGFraW5nUHJveHkuYWRkcmVzcyB9KTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5hcmdzPy5wcm94eV90eXBlLCBQcm94eVR5cGUuU1RBS0lORyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uYXJncz8uZGVsYXksIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmNhbGxJbmRleCwgcmF3VHgudW5zdGFrZS5iYXRjaEFsbC5iYXRjaFsxXS5zbGljZSgwLCA2KSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncywge30pO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzJdLmNhbGxJbmRleCwgcmF3VHgudW5zdGFrZS5iYXRjaEFsbC5iYXRjaFsyXS5zbGljZSgwLCA2KSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMl0uYXJncz8udmFsdWUsIDUwMDAwMDAwMDAwMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbmRlciwgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgOTI2Njc4Nyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCByZWZlcmVuY2VCbG9jayk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBzcGVjVmVyc2lvbik7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udHJhbnNhY3Rpb25WZXJzaW9uLCB0eFZlcnNpb24pO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUsICdXZXN0ZW5kIEFzc2V0IEh1YicpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5lcmFQZXJpb2QsIDY0KTtcblxuICAgICAgICBjb25zdCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwocmF3VHgudW5zdGFrZS5iYXRjaEFsbC51bnNpZ25lZCwgdHhIZXgpO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCdmcm9tIHJhdycsICgpID0+IHtcbiAgICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIGJhdGNoIGFsbCBmcm9tIGEgcmF3IHVuc2lnbmVkIHR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGJ1aWxkZXIuZnJvbShyYXdUeC5iYXRjaEFsbC50d29BZGRQdXJlUHJveGllcy51bnNpZ25lZCk7XG4gICAgICAgICAgYnVpbGRlclxuICAgICAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogOTI2Njc4NywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgICAgICAucmVmZXJlbmNlQmxvY2socmVmZXJlbmNlQmxvY2spXG4gICAgICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSk7XG5cbiAgICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZW5kZXIsIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzLmxlbmd0aCwgMik7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5hcmdzPy5wcm94eV90eXBlLCBQcm94eVR5cGUuQU5ZKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LmRlbGF5LCAwKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LmluZGV4LCAwKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmFyZ3M/LnByb3h5X3R5cGUsIFByb3h5VHlwZS5BTlkpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8uZGVsYXksIDApO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8uaW5kZXgsIDEpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCA5MjY2Nzg3KTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgcmVmZXJlbmNlQmxvY2spO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHNwZWNWZXJzaW9uKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMjAwKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50aXAsIDApO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgdHhWZXJzaW9uKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUsICdXZXN0ZW5kIEFzc2V0IEh1YicpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmVyYVBlcmlvZCwgNjQpO1xuXG4gICAgICAgICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwocmF3VHguYmF0Y2hBbGwudHdvQWRkUHVyZVByb3hpZXMudW5zaWduZWQsIHR4SGV4KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIGJhdGNoIGFsbCBmcm9tIGEgcmF3IHVuc2lnbmVkIHN0YWtpbmcgdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYnVpbGRlci5mcm9tKHJhd1R4LnN0YWtlLmJhdGNoQWxsLnVuc2lnbmVkKTtcbiAgICAgICAgICBidWlsZGVyXG4gICAgICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiA5MjY2Nzg3LCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgICAgIC5yZWZlcmVuY2VCbG9jayhyZWZlcmVuY2VCbG9jaylcbiAgICAgICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KTtcblxuICAgICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgICAgICAgLy8gdGVzdCB0aGUgY2FsbCBpdGVtc1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbmRlciwgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHMubGVuZ3RoLCByYXdUeC5zdGFrZS5iYXRjaEFsbC5iYXRjaC5sZW5ndGgpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMF0uY2FsbEluZGV4LCByYXdUeC5zdGFrZS5iYXRjaEFsbC5iYXRjaFswXS5zbGljZSgwLCA2KSk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5hcmdzPy52YWx1ZSwgNTAwMDAwMDAwMDAwKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmFyZ3M/LnBheWVlLCB7IHN0YWtlZDogbnVsbCB9KTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzFdLmNhbGxJbmRleCwgcmF3VHguc3Rha2UuYmF0Y2hBbGwuYmF0Y2hbMV0uc2xpY2UoMCwgNikpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8uZGVsZWdhdGUsIHsgaWQ6IGFjY291bnRzLnN0YWtpbmdQcm94eS5hZGRyZXNzIH0pO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8ucHJveHlfdHlwZSwgUHJveHlUeXBlLlNUQUtJTkcpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncz8uZGVsYXksIDApO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCA5MjY2Nzg3KTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgcmVmZXJlbmNlQmxvY2spO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHNwZWNWZXJzaW9uKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIHR4VmVyc2lvbik7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uY2hhaW5OYW1lLCAnV2VzdGVuZCBBc3NldCBIdWInKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5lcmFQZXJpb2QsIDY0KTtcblxuICAgICAgICAgIGNvbnN0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHJhd1R4LnN0YWtlLmJhdGNoQWxsLnVuc2lnbmVkLCB0eEhleCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgYnVpbGQgYSBiYXRjaCBhbGwgZnJvbSBhIHJhdyB1bnNpZ25lZCB1bnN0YWtpbmcgdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYnVpbGRlci5mcm9tKHJhd1R4LnVuc3Rha2UuYmF0Y2hBbGwudW5zaWduZWQpO1xuICAgICAgICAgIGJ1aWxkZXJcbiAgICAgICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDkyNjY3ODcsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pO1xuXG4gICAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG5cbiAgICAgICAgICAvLyB0ZXN0IHRoZSBjYWxsIGl0ZW1zXG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VuZGVyLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxscy5sZW5ndGgsIHJhd1R4LnVuc3Rha2UuYmF0Y2hBbGwuYmF0Y2gubGVuZ3RoKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzBdLmNhbGxJbmRleCwgcmF3VHgudW5zdGFrZS5iYXRjaEFsbC5iYXRjaFswXS5zbGljZSgwLCA2KSk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5hcmdzPy5kZWxlZ2F0ZSwgeyBpZDogYWNjb3VudHMuc3Rha2luZ1Byb3h5LmFkZHJlc3MgfSk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5hcmdzPy5wcm94eV90eXBlLCBQcm94eVR5cGUuU1RBS0lORyk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1swXS5hcmdzPy5kZWxheSwgMCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmF0Y2hDYWxsc1sxXS5jYWxsSW5kZXgsIHJhd1R4LnVuc3Rha2UuYmF0Y2hBbGwuYmF0Y2hbMV0uc2xpY2UoMCwgNikpO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMV0uYXJncywge30pO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJhdGNoQ2FsbHNbMl0uY2FsbEluZGV4LCByYXdUeC51bnN0YWtlLmJhdGNoQWxsLmJhdGNoWzJdLnNsaWNlKDAsIDYpKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5iYXRjaENhbGxzWzJdLmFyZ3M/LnZhbHVlLCA1MDAwMDAwMDAwMDApO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCA5MjY2Nzg3KTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgcmVmZXJlbmNlQmxvY2spO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHNwZWNWZXJzaW9uKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIHR4VmVyc2lvbik7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uY2hhaW5OYW1lLCAnV2VzdGVuZCBBc3NldCBIdWInKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5lcmFQZXJpb2QsIDY0KTtcblxuICAgICAgICAgIGNvbnN0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHJhd1R4LnVuc3Rha2UuYmF0Y2hBbGwudW5zaWduZWQsIHR4SGV4KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|